ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDg5YjNiNzkuLmFlYmU3YzAgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTU4LDYgKzE1OCw3IEBACiAvZ2l0LXNob3ctYnJhbmNoCiAvZ2l0LXNob3ctaW5kZXgKIC9naXQtc2hvdy1yZWYKKy9naXQtc3BhcnNlLWNoZWNrb3V0CiAvZ2l0LXN0YWdlCiAvZ2l0LXN0YXNoCiAvZ2l0LXN0YXR1cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCmluZGV4IGY0NWRiNWIuLmVkNGU0NDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcworKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKQEAgLTc1LDcgKzc1LDcgQEAKIAogIC0gSWYgeW91IHdhbnQgdG8gZmluZCBvdXQgaWYgYSBjb21tYW5kIGlzIGF2YWlsYWJsZSBvbiB0aGUgdXNlcidzCiAgICAkUEFUSCwgeW91IHNob3VsZCB1c2UgJ3R5cGUgPGNvbW1hbmQ+JywgaW5zdGVhZCBvZiAnd2hpY2ggPGNvbW1hbmQ+Jy4KLSAgIFRoZSBvdXRwdXQgb2YgJ3doaWNoJyBpcyBub3QgbWFjaGluZSBwYXJzZWFibGUgYW5kIGl0cyBleGl0IGNvZGUKKyAgIFRoZSBvdXRwdXQgb2YgJ3doaWNoJyBpcyBub3QgbWFjaGluZSBwYXJzYWJsZSBhbmQgaXRzIGV4aXQgY29kZQogICAgaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuCiAKICAtIFdlIHVzZSBQT1NJWCBjb21wbGlhbnQgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbnMgYW5kIGF2b2lkIGJhc2hpc21zOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAuIHNpbmNlIGVhcmx5IDIwMTIgd2l0aCBlMTMyNzAyM2VhLCB3ZSBoYXZlIGJlZW4gdXNpbmcgYW4gZW51bQogICAgICBkZWZpbml0aW9uIHdob3NlIGxhc3QgZWxlbWVudCBpcyBmb2xsb3dlZCBieSBhIGNvbW1hLiAgVGhpcywgbGlrZQogICAgICBhbiBhcnJheSBpbml0aWFsaXplciB0aGF0IGVuZHMgd2l0aCBhIHRyYWlsaW5nIGNvbW1hLCBjYW4gYmUgdXNlZAotICAgICB0byByZWR1Y2UgdGhlIHBhdGNoIG5vaXNlIHdoZW4gYWRkaW5nIGEgbmV3IGlkZW50aWZlciBhdCB0aGUgZW5kLgorICAgICB0byByZWR1Y2UgdGhlIHBhdGNoIG5vaXNlIHdoZW4gYWRkaW5nIGEgbmV3IGlkZW50aWZpZXIgYXQgdGhlIGVuZC4KIAogICAgLiBzaW5jZSBtaWQgMjAxNyB3aXRoIGNiYzBmODFkLCB3ZSBoYXZlIGJlZW4gdXNpbmcgZGVzaWduYXRlZAogICAgICBpbml0aWFsaXplcnMgZm9yIHN0cnVjdCAoZS5nLiAic3RydWN0IHQgdiA9IHsgLnZhbCA9ICdhJyB9OyIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggMDZkODVhZC4uOGZlODI5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC03Nyw2ICs3Nyw3IEBACiBTUF9BUlRJQ0xFUyArPSAkKEFQSV9ET0NTKQogCiBURUNIX0RPQ1MgKz0gTXlGaXJzdENvbnRyaWJ1dGlvbgorVEVDSF9ET0NTICs9IE15Rmlyc3RPYmplY3RXYWxrCiBURUNIX0RPQ1MgKz0gU3VibWl0dGluZ1BhdGNoZXMKIFRFQ0hfRE9DUyArPSB0ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uCiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL2h0dHAtcHJvdG9jb2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0CmluZGV4IDVlOWI4MDguLjM1YjkxMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dApAQCAtMzgsNiArMzgsMjYgQEAKICQgY2QgZ2l0CiAtLS0tCiAKK1tbZGVwZW5kZW5jaWVzXV0KKz09PSBJbnN0YWxsaW5nIERlcGVuZGVuY2llcworCitUbyBidWlsZCBHaXQgZnJvbSBzb3VyY2UsIHlvdSBuZWVkIHRvIGhhdmUgYSBoYW5kZnVsIG9mIGRlcGVuZGVuY2llcyBpbnN0YWxsZWQKK29uIHlvdXIgc3lzdGVtLiBGb3IgYSBoaW50IG9mIHdoYXQncyBuZWVkZWQsIHlvdSBjYW4gdGFrZSBhIGxvb2sgYXQKK2BJTlNUQUxMYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2VjdGlvbiBhYm91dCBHaXQncyBkZXBlbmRlbmNpZXMgb24KK2V4dGVybmFsIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMuIFRoYXQgZG9jdW1lbnQgbWVudGlvbnMgYSB3YXkgdG8gInRlc3QtZHJpdmUiCitvdXIgZnJlc2hseSBidWlsdCBHaXQgd2l0aG91dCBpbnN0YWxsaW5nOyB0aGF0J3MgdGhlIG1ldGhvZCB3ZSdsbCBiZSB1c2luZyBpbgordGhpcyB0dXRvcmlhbC4KKworTWFrZSBzdXJlIHRoYXQgeW91ciBlbnZpcm9ubWVudCBoYXMgZXZlcnl0aGluZyB5b3UgbmVlZCBieSBidWlsZGluZyB5b3VyIGJyYW5kCituZXcgY2xvbmUgb2YgR2l0IGZyb20gdGhlIGFib3ZlIHN0ZXA6CisKKy0tLS0KKyQgbWFrZQorLS0tLQorCitOT1RFOiBUaGUgR2l0IGJ1aWxkIGlzIHBhcmFsbGVsaXphYmxlLiBgLWojYCBpcyBub3QgaW5jbHVkZWQgYWJvdmUgYnV0IHlvdSBjYW4KK3VzZSBpdCBhcyB5b3UgcHJlZmVyLCBoZXJlIGFuZCBlbHNld2hlcmUuCisKIFtbaWRlbnRpZnktcHJvYmxlbV1dCiA9PT0gSWRlbnRpZnkgUHJvYmxlbSB0byBTb2x2ZQogCkBAIC0xMzgsOSArMTU4LDYgQEAKIGBERVZFTE9QRVJgIGZsYWc7IGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdHVybgogaXQgb2ZmLCBidXQgaXQncyBhIGdvb2QgaWRlYSB0byBtZW50aW9uIHRoZSBwcm9ibGVtIHRvIHRoZSBtYWlsaW5nIGxpc3QuCiAKLU5PVEU6IFRoZSBHaXQgYnVpbGQgaXMgcGFyYWxsZWxpemFibGUuIGAtaiNgIGlzIG5vdCBpbmNsdWRlZCBhYm92ZSBidXQgeW91IGNhbgotdXNlIGl0IGFzIHlvdSBwcmVmZXIsIGhlcmUgYW5kIGVsc2V3aGVyZS4KLQogR3JlYXQsIG5vdyB5b3VyIG5ldyBjb21tYW5kIGJ1aWxkcyBoYXBwaWx5IG9uIGl0cyBvd24uIEJ1dCBub2JvZHkgaW52b2tlcyBpdC4KIExldCdzIGNoYW5nZSB0aGF0LgogCkBAIC01MzQsNiArNTUxLDI4IEBACiBhIGZsYWcuKSBgcGFyc2Vfb3B0aW9ucygpYCB3aWxsIHRlcm1pbmF0ZSBwYXJzaW5nIHdoZW4gaXQgcmVhY2hlcyBgLS1gIGFuZCBnaXZlCiB5b3UgdGhlIHJlc3Qgb2YgdGhlIG9wdGlvbnMgYWZ0ZXJ3YXJkcywgdW50b3VjaGVkLgogCitOb3cgdGhhdCB5b3UgaGF2ZSBhIHVzYWdlIGhpbnQsIHlvdSBjYW4gdGVhY2ggR2l0IGhvdyB0byBzaG93IGl0IGluIHRoZSBnZW5lcmFsCitjb21tYW5kIGxpc3Qgc2hvd24gYnkgYGdpdCBoZWxwIGdpdGAgb3IgYGdpdCBoZWxwIC1hYCwgd2hpY2ggaXMgZ2VuZXJhdGVkIGZyb20KK2Bjb21tYW5kLWxpc3QudHh0YC4gRmluZCB0aGUgbGluZSBmb3IgJ2dpdC1wdWxsJyBzbyB5b3UgY2FuIGFkZCB5b3VyICdnaXQtcHN1aCcKK2xpbmUgYWJvdmUgaXQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBOb3csIHdlIGNhbiBhZGQgc29tZSBhdHRyaWJ1dGVzIGFib3V0IHRoZQorY29tbWFuZCB3aGljaCBpbXBhY3RzIHdoZXJlIGl0IHNob3dzIHVwIGluIHRoZSBhZm9yZW1lbnRpb25lZCBoZWxwIGNvbW1hbmRzLiBUaGUKK3RvcCBvZiBgY29tbWFuZC1saXN0LnR4dGAgc2hhcmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBlYWNoIGF0dHJpYnV0ZQorbWVhbnM7IGluIHRob3NlIGhlbHAgcGFnZXMsIHRoZSBjb21tYW5kcyBhcmUgc29ydGVkIGFjY29yZGluZyB0byB0aGVzZQorYXR0cmlidXRlcy4gYGdpdCBwc3VoYCBpcyB1c2VyLWZhY2luZywgb3IgcG9yY2VsYWluIC0gc28gd2Ugd2lsbCBtYXJrIGl0IGFzCisibWFpbnBvcmNlbGFpbiIuIEZvciAibWFpbnBvcmNlbGFpbiIgY29tbWFuZHMsIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mCitgY29tbWFuZC1saXN0LnR4dGAgaW5kaWNhdGUgd2UgY2FuIGFsc28gb3B0aW9uYWxseSBhZGQgYW4gYXR0cmlidXRlIGZyb20gYW5vdGhlcgorbGlzdDsgc2luY2UgYGdpdCBwc3VoYCBzaG93cyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyJ3Mgd29ya3NwYWNlIGJ1dAorZG9lc24ndCBtb2RpZnkgYW55dGhpbmcsIGxldCdzIG1hcmsgaXQgYXMgImluZm8iLiBNYWtlIHN1cmUgdG8ga2VlcCB5b3VyCithdHRyaWJ1dGVzIGluIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSByZXN0IG9mIGBjb21tYW5kLWxpc3QudHh0YCB1c2luZyBzcGFjZXMgdG8KK2FsaWduIGFuZCBkZWxpbmVhdGUgdGhlbToKKworLS0tLQorZ2l0LXBydW5lLXBhY2tlZCAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtcHN1aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgkJaW5mbworZ2l0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHJlbW90ZQorZ2l0LXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHJlbW90ZQorLS0tLQorCiBCdWlsZCBhZ2Fpbi4gTm93LCB3aGVuIHlvdSBydW4gd2l0aCBgLWhgLCB5b3Ugc2hvdWxkIHNlZSB5b3VyIHVzYWdlIHByaW50ZWQgYW5kCiB5b3VyIGNvbW1hbmQgdGVybWluYXRlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5zLiBHcmVhdCEKIApAQCAtNzQ2LDYgKzc4NSwxNCBAQAogYnV0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGAvc3VibWl0YCB5b3VyIGNoYW5nZXMgdW50aWwgc29tZW9uZSBhbGxvd3MgeW91IHRvCiB1c2UgdGhlIHRvb2wuCiAKK05PVEU6IFlvdSBjYW4gdHlwaWNhbGx5IGZpbmQgc29tZW9uZSB3aG8gY2FuIGAvYWxsb3dgIHlvdSBvbiBHaXRHaXRHYWRnZXQgYnkKK2VpdGhlciBleGFtaW5pbmcgcmVjZW50IHB1bGwgcmVxdWVzdHMgd2hlcmUgc29tZW9uZSBoYXMgYmVlbiBncmFudGVkIGAvYWxsb3dgCisoaHR0cHM6Ly9naXRodWIuY29tL2dpdGdpdGdhZGdldC9naXQvcHVsbHM/dXRmOD0lRTIlOUMlOTMmcT1pcyUzQXByK2lzJTNBb3BlbislMjIlMkZhbGxvdyUyMltTZWFyY2g6CitpczpwciBpczpvcGVuICIvYWxsb3ciXSksIGluIHdoaWNoIGNhc2UgYm90aCB0aGUgYXV0aG9yIGFuZCB0aGUgcGVyc29uIHdobworZ3JhbnRlZCB0aGUgYC9hbGxvd2AgY2FuIG5vdyBgL2FsbG93YCB5b3UsIG9yIGJ5IGlucXVpcmluZyBvbiB0aGUKK2h0dHBzOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQvI2dpdC1kZXZlbFsjZ2l0LWRldmVsXSBJUkMgY2hhbm5lbCBvbiBGcmVlbm9kZQorbGlua2luZyB5b3VyIHB1bGwgcmVxdWVzdCBhbmQgYXNraW5nIGZvciBzb21lb25lIHRvIGAvYWxsb3dgIHlvdS4KKwogSWYgdGhlIENJIGZhaWxzLCB5b3UgY2FuIHVwZGF0ZSB5b3VyIGNoYW5nZXMgd2l0aCBgZ2l0IHJlYmFzZSAtaWAgYW5kIHB1c2ggeW91cgogYnJhbmNoIGFnYWluOgogCkBAIC05NzAsNyArMTAxNyw3IEBACiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gZ28gYW5kIGZpbmQgdGhlIE1lc3NhZ2UtSWQgb2YgeW91ciBwcmV2aW91cyBjb3ZlciBsZXR0ZXIuCiBZb3UgY2FuIGVpdGhlciBub3RlIGl0IHdoZW4geW91IHNlbmQgdGhlIGZpcnN0IHNlcmllcywgZnJvbSB0aGUgb3V0cHV0IG9mIGBnaXQKIHNlbmQtZW1haWxgLCBvciB5b3UgY2FuIGxvb2sgaXQgdXAgb24gdGhlCi1odHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0W21haWxpbmcgbGlzdF0uIEZpbmQgeW91ciBjb3ZlciBsZXR0ZXIgaW4gdGhlCitodHRwczovL2xvcmUua2VybmVsLm9yZy9naXRbbWFpbGluZyBsaXN0XS4gRmluZCB5b3VyIGNvdmVyIGxldHRlciBpbiB0aGUKIGFyY2hpdmVzLCBjbGljayBvbiBpdCwgdGhlbiBjbGljayAicGVybWFsaW5rIiBvciAicmF3IiB0byByZXZlYWwgdGhlIE1lc3NhZ2UtSWQKIGhlYWRlci4gSXQgc2hvdWxkIG1hdGNoOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RPYmplY3RXYWxrLnR4dCBiL0RvY3VtZW50YXRpb24vTXlGaXJzdE9iamVjdFdhbGsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RPYmplY3RXYWxrLnR4dApAQCAtMCwwICsxLDkwNSBAQAorPSBNeSBGaXJzdCBPYmplY3QgV2FsaworCis9PSBXaGF0J3MgYW4gT2JqZWN0IFdhbGs/CisKK1RoZSBvYmplY3Qgd2FsayBpcyBhIGtleSBjb25jZXB0IGluIEdpdCAtIHRoaXMgaXMgdGhlIHByb2Nlc3MgdGhhdCB1bmRlcnBpbnMKK29wZXJhdGlvbnMgbGlrZSBvYmplY3QgdHJhbnNmZXIgYW5kIGZzY2suIEJlZ2lubmluZyBmcm9tIGEgZ2l2ZW4gY29tbWl0LCB0aGUKK2xpc3Qgb2Ygb2JqZWN0cyBpcyBmb3VuZCBieSB3YWxraW5nIHBhcmVudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gY29tbWl0cyAoY29tbWl0CitYIGJhc2VkIG9uIGNvbW1pdCBXKSBhbmQgY29udGFpbm1lbnQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIG9iamVjdHMgKHRyZWUgWSBpcworY29udGFpbmVkIHdpdGhpbiBjb21taXQgWCwgYW5kIGJsb2IgWiBpcyBsb2NhdGVkIHdpdGhpbiB0cmVlIFksIGdpdmluZyBvdXIKK3dvcmtpbmcgdHJlZSBmb3IgY29tbWl0IFggc29tZXRoaW5nIGxpa2UgYHkvei50eHRgKS4KKworQSByZWxhdGVkIGNvbmNlcHQgaXMgdGhlIHJldmlzaW9uIHdhbGssIHdoaWNoIGlzIGZvY3VzZWQgb24gY29tbWl0IG9iamVjdHMgYW5kCit0aGVpciBwYXJlbnQgcmVsYXRpb25zaGlwcyBhbmQgZG9lcyBub3QgZGVsdmUgaW50byBvdGhlciBvYmplY3QgdHlwZXMuIFRoZQorcmV2aXNpb24gd2FsayBpcyB1c2VkIGZvciBvcGVyYXRpb25zIGxpa2UgYGdpdCBsb2dgLgorCis9PT0gUmVsYXRlZCBSZWFkaW5nCisKKy0gYERvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0YCB1bmRlciAiSGFja2luZyBHaXQiIGNvbnRhaW5zIHNvbWUgY292ZXJhZ2Ugb2YKKyAgdGhlIHJldmlzaW9uIHdhbGtlciBpbiBpdHMgdmFyaW91cyBpbmNhcm5hdGlvbnMuCistIGByZXZpc2lvbi5oYAorLSBodHRwczovL2VhZ2Fpbi5uZXQvYXJ0aWNsZXMvZ2l0LWZvci1jb21wdXRlci1zY2llbnRpc3RzL1tHaXQgZm9yIENvbXB1dGVyIFNjaWVudGlzdHNdCisgIGdpdmVzIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0cyBpbiBHaXQgYW5kIHdoYXQgeW91ciBvYmplY3QKKyAgd2FsayBpcyByZWFsbHkgZGVzY3JpYmluZy4KKworPT0gU2V0dGluZyBVcAorCitDcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gYG1hc3RlcmAuCisKKy0tLS0KK2dpdCBjaGVja291dCAtYiByZXZ3YWxrIG9yaWdpbi9tYXN0ZXIKKy0tLS0KKworV2UnbGwgcHV0IG91ciBmaWRkbGluZyBpbnRvIGEgbmV3IGNvbW1hbmQuIEZvciBmdW4sIGxldCdzIG5hbWUgaXQgYGdpdCB3YWxrZW5gLgorT3BlbiB1cCBhIG5ldyBmaWxlIGBidWlsdGluL3dhbGtlbi5jYCBhbmQgc2V0IHVwIHRoZSBjb21tYW5kIGhhbmRsZXI6CisKKy0tLS0KKy8qCisgKiAiZ2l0IHdhbGtlbiIKKyAqCisgKiBQYXJ0IG9mIHRoZSAiTXkgRmlyc3QgT2JqZWN0IFdhbGsiIHR1dG9yaWFsLgorICovCisKKyNpbmNsdWRlICJidWlsdGluLmgiCisKK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXRyYWNlX3ByaW50ZihfKCJjbWRfd2Fsa2VuIGluY29taW5nLi4uXG4iKSk7CisJcmV0dXJuIDA7Cit9CistLS0tCisKK05PVEU6IGB0cmFjZV9wcmludGYoKWAgZGlmZmVycyBmcm9tIGBwcmludGYoKWAgaW4gdGhhdCBpdCBjYW4gYmUgdHVybmVkIG9uIG9yCitvZmYgYXQgcnVudGltZS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHR1dG9yaWFsLCB3ZSB3aWxsIHdyaXRlIGB3YWxrZW5gIGFzCit0aG91Z2ggaXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhICJwbHVtYmluZyIgY29tbWFuZDogdGhhdCBpcywgYSBjb21tYW5kIHdoaWNoCitpcyB1c2VkIHByaW1hcmlseSBpbiBzY3JpcHRzLCByYXRoZXIgdGhhbiBpbnRlcmFjdGl2ZWx5IGJ5IGh1bWFucyAoYSAicG9yY2VsYWluIgorY29tbWFuZCkuIFNvIHdlIHdpbGwgc2VuZCBvdXIgZGVidWcgb3V0cHV0IHRvIGB0cmFjZV9wcmludGYoKWAgaW5zdGVhZC4gV2hlbgorcnVubmluZywgZW5hYmxlIHRyYWNlIG91dHB1dCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX1RSQUNFYC4KKworQWRkIHVzYWdlIHRleHQgYW5kIGAtaGAgaGFuZGxpbmcsIGxpa2UgYWxsIHN1YmNvbW1hbmRzIHNob3VsZCBjb25zaXN0ZW50bHkgZG8KKyhvdXIgdGVzdCBzdWl0ZSB3aWxsIG5vdGljZSBhbmQgY29tcGxhaW4gaWYgeW91IGZhaWwgdG8gZG8gc28pLgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICogY29uc3Qgd2Fsa2VuX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgd2Fsa2VuIiksCisJCU5VTEwsCisJfQorCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB3YWxrZW5fdXNhZ2UsIDApOworCisJLi4uCit9CistLS0tCisKK0Fsc28gYWRkIHRoZSByZWxldmFudCBsaW5lIGluIGBidWlsdGluLmhgIG5lYXIgYGNtZF93aGF0Y2hhbmdlZCgpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworLS0tLQorCitJbmNsdWRlIHRoZSBjb21tYW5kIGluIGBnaXQuY2AgaW4gYGNvbW1hbmRzW11gIG5lYXIgdGhlIGVudHJ5IGZvciBgd2hhdGNoYW5nZWRgLAorbWFpbnRhaW5pbmcgYWxwaGFiZXRpY2FsIG9yZGVyaW5nOgorCistLS0tCit7ICJ3YWxrZW4iLCBjbWRfd2Fsa2VuLCBSVU5fU0VUVVAgfSwKKy0tLS0KKworQWRkIGl0IHRvIHRoZSBgTWFrZWZpbGVgIG5lYXIgdGhlIGxpbmUgZm9yIGBidWlsdGluL3dvcmt0cmVlLm9gOgorCistLS0tCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi93YWxrZW4ubworLS0tLQorCitCdWlsZCBhbmQgdGVzdCBvdXQgeW91ciBjb21tYW5kLCB3aXRob3V0IGZvcmdldHRpbmcgdG8gZW5zdXJlIHRoZSBgREVWRUxPUEVSYAorZmxhZyBpcyBzZXQsIGFuZCB3aXRoIGBHSVRfVFJBQ0VgIGVuYWJsZWQgc28gdGhlIGRlYnVnIG91dHB1dCBjYW4gYmUgc2VlbjoKKworLS0tLQorJCBlY2hvIERFVkVMT1BFUj0xID4+Y29uZmlnLm1haworJCBtYWtlCiskIEdJVF9UUkFDRT0xIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4KKy0tLS0KKworTk9URTogRm9yIGEgbW9yZSBleGhhdXN0aXZlIG92ZXJ2aWV3IG9mIHRoZSBuZXcgY29tbWFuZCBwcm9jZXNzLCB0YWtlIGEgbG9vayBhdAorYERvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHRgLgorCitOT1RFOiBBIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9uYXNhbXVmZmluL2dpdC90cmVlL3JldndhbGsuCisKKz09PSBgc3RydWN0IHJldl9jbWRsaW5lX2luZm9gCisKK1RoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mb2AgY2FuIGJlIGZvdW5kIGluIGByZXZpc2lvbi5oYC4KKworVGhpcyBzdHJ1Y3QgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHJldl9pbmZvYCBzdHJ1Y3QgYW5kIGlzIHVzZWQgdG8gcmVmbGVjdAorcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgdXNlciBvdmVyIHRoZSBDTEkuCisKK2BucmAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGByZXZfY21kbGluZV9lbnRyeWAgcHJlc2VudCBpbiB0aGUgYXJyYXkuCisKK2BhbGxvY2AgaXMgdXNlZCBieSB0aGUgYEFMTE9DX0dST1dgIG1hY3JvLiBDaGVjayBgY2FjaGUuaGAgLSB0aGlzIHZhcmlhYmxlIGlzCit1c2VkIHRvIHRyYWNrIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgbGlzdC4KKworUGVyIGVudHJ5LCB3ZSBmaW5kOgorCitgaXRlbWAgaXMgdGhlIG9iamVjdCBwcm92aWRlZCB1cG9uIHdoaWNoIHRvIGJhc2UgdGhlIG9iamVjdCB3YWxrLiBJdGVtcyBpbiBHaXQKK2NhbiBiZSBibG9icywgdHJlZXMsIGNvbW1pdHMsIG9yIHRhZ3MuIChTZWUgYERvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHRgLikKKworYG5hbWVgIGlzIHRoZSBvYmplY3QgSUQgKE9JRCkgb2YgdGhlIG9iamVjdCAtIGEgaGV4IHN0cmluZyB5b3UgbWF5IGJlIGZhbWlsaWFyCit3aXRoIGZyb20gdXNpbmcgR2l0IHRvIG9yZ2FuaXplIHlvdXIgc291cmNlIGluIHRoZSBwYXN0LiBDaGVjayB0aGUgdHV0b3JpYWwKK21lbnRpb25lZCBhYm92ZSB0b3dhcmRzIHRoZSB0b3AgZm9yIGEgZGlzY3Vzc2lvbiBvZiB3aGVyZSB0aGUgT0lEIGNhbiBjb21lCitmcm9tLgorCitgd2hlbmNlYCBpbmRpY2F0ZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRvIGRvIHdpdGggdGhlIHBhcmVudHMgb2YgdGhlCitzcGVjaWZpZWQgb2JqZWN0LiBXZSdsbCBleHBsb3JlIHRoaXMgZmxhZyBtb3JlIGxhdGVyIG9uOyB0YWtlIGEgbG9vayBhdAorYERvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dGAgdG8gZ2V0IGFuIGlkZWEgb2Ygd2hhdCBjb3VsZCBzZXQgdGhlIGB3aGVuY2VgCit2YWx1ZS4KKworYGZsYWdzYCBhcmUgdXNlZCB0byBoaW50IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJldmlzaW9uIHdhbGsgYW5kIGFyZSB0aGUgZmlyc3QKK2Jsb2NrIHVuZGVyIHRoZSBgI2luY2x1ZGVgcyBpbiBgcmV2aXNpb24uaGAuIFRoZSBtb3N0IGxpa2VseSBvbmVzIHRvIGJlIHNldCBpbgordGhlIGByZXZfY21kbGluZV9pbmZvYCBhcmUgYFVOSU5URVJFU1RJTkdgIGFuZCBgQk9UVE9NYCwgYnV0IHRoZXNlIHNhbWUgZmxhZ3MKK2NhbiBiZSB1c2VkIGR1cmluZyB0aGUgd2FsaywgYXMgd2VsbC4KKworPT09IGBzdHJ1Y3QgcmV2X2luZm9gCisKK1RoaXMgb25lIGlzIHF1aXRlIGEgYml0IGxvbmdlciwgYW5kIG1hbnkgZmllbGRzIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSB3YWxrCitieSBgcmV2aXNpb24uY2AgLSBub3QgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNb3N0IG9mIHRoZSBjb25maWd1cmFibGUgZmxhZ3MgaW4KK2BzdHJ1Y3QgcmV2X2luZm9gIGhhdmUgYSBtaXJyb3IgaW4gYERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHRgLiBJdCdzIGEKK2dvb2QgaWRlYSB0byB0YWtlIHNvbWUgdGltZSBhbmQgcmVhZCB0aHJvdWdoIHRoYXQgZG9jdW1lbnQuCisKKz09IEJhc2ljIENvbW1pdCBXYWxrCisKK0ZpcnN0LCBsZXQncyBzZWUgaWYgd2UgY2FuIHJlcGxpY2F0ZSB0aGUgb3V0cHV0IG9mIGBnaXQgbG9nIC0tb25lbGluZWAuIFdlJ2xsCityZWZlciBiYWNrIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmcmVxdWVudGx5IHRvIGRpc2NvdmVyIG5vcm1zIHdoZW4gcGVyZm9ybWluZworYW4gb2JqZWN0IHdhbGsgb2Ygb3VyIG93bi4KKworVG8gZG8gc28sIHdlJ2xsIGZpcnN0IGZpbmQgYWxsIHRoZSBjb21taXRzLCBpbiBvcmRlciwgd2hpY2ggcHJlY2VkZWQgdGhlIGN1cnJlbnQKK2NvbW1pdC4gV2UnbGwgZXh0cmFjdCB0aGUgbmFtZSBhbmQgc3ViamVjdCBvZiB0aGUgY29tbWl0IGZyb20gZWFjaC4KKworSWRlYWxseSwgd2Ugd2lsbCBhbHNvIGJlIGFibGUgdG8gZmluZCBvdXQgd2hpY2ggb25lcyBhcmUgY3VycmVudGx5IGF0IHRoZSB0aXAgb2YKK3ZhcmlvdXMgYnJhbmNoZXMuCisKKz09PSBTZXR0aW5nIFVwCisKK1ByZXBhcmluZyBmb3IgeW91ciBvYmplY3Qgd2FsayBoYXMgc29tZSBkaXN0aW5jdCBzdGFnZXMuCisKKzEuIFBlcmZvcm0gZGVmYXVsdCBzZXR1cCBmb3IgdGhpcyBtb2RlLCBhbmQgb3RoZXJzIHdoaWNoIG1heSBiZSBpbnZva2VkLgorMi4gQ2hlY2sgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgcmVsZXZhbnQgc2V0dGluZ3MuCiszLiBTZXQgdXAgdGhlIGByZXZfaW5mb2Agc3RydWN0LgorNC4gVHdlYWsgdGhlIGluaXRpYWxpemVkIGByZXZfaW5mb2AgdG8gc3VpdCB0aGUgY3VycmVudCB3YWxrLgorNS4gUHJlcGFyZSB0aGUgYHJldl9pbmZvYCBmb3IgdGhlIHdhbGsuCis2LiBJdGVyYXRlIG92ZXIgdGhlIG9iamVjdHMsIHByb2Nlc3NpbmcgZWFjaCBvbmUuCisKKz09PT0gRGVmYXVsdCBTZXR1cHMKKworQmVmb3JlIGV4YW1pbmluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdoaWNoIG1heSBtb2RpZnkgY29tbWFuZCBiZWhhdmlvciwgc2V0IHVwCitkZWZhdWx0IHN0YXRlIGZvciBzd2l0Y2hlcyBvciBvcHRpb25zIHlvdXIgY29tbWFuZCBtYXkgaGF2ZS4gSWYgeW91ciBjb21tYW5kCit1dGlsaXplcyBvdGhlciBHaXQgY29tcG9uZW50cywgYXNrIHRoZW0gdG8gc2V0IHVwIHRoZWlyIGRlZmF1bHQgc3RhdGVzIGFzIHdlbGwuCitGb3IgaW5zdGFuY2UsIGBnaXQgbG9nYCB0YWtlcyBhZHZhbnRhZ2Ugb2YgYGdyZXBgIGFuZCBgZGlmZmAgZnVuY3Rpb25hbGl0eSwgc28KK2l0cyBgaW5pdF9sb2dfZGVmYXVsdHMoKWAgc2V0cyBpdHMgb3duIHN0YXRlIChgZGVjb3JhdGlvbl9zdHlsZWApIGFuZCBhc2tzCitgZ3JlcGAgYW5kIGBkaWZmYCB0byBpbml0aWFsaXplIHRoZW1zZWx2ZXMgYnkgY2FsbGluZyBlYWNoIG9mIHRoZWlyCitpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCisKK0ZvciBvdXIgZmlyc3QgZXhhbXBsZSB3aXRoaW4gYGdpdCB3YWxrZW5gLCB3ZSBkb24ndCBpbnRlbmQgdG8gdXNlIGFueSBvdGhlcgorY29tcG9uZW50cyB3aXRoaW4gR2l0LCBhbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgY29uZmlndXJhdGlvbiB0byBkby4gIEhvd2V2ZXIsIHdlCittYXkgd2FudCB0byBhZGQgc29tZSBsYXRlciwgc28gZm9yIG5vdywgd2UgY2FuIGFkZCBhbiBlbXB0eSBwbGFjZWhvbGRlci4gQ3JlYXRlCithIG5ldyBmdW5jdGlvbiBpbiBgYnVpbHRpbi93YWxrZW4uY2A6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGluaXRfd2Fsa2VuX2RlZmF1bHRzKHZvaWQpCit7CisJLyoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBzYW1lIGNvbXBvbmVudHMgYGdpdCBsb2dgIGRvZXM7IGxlYXZlIHRoaXMKKwkgKiBlbXB0eSBmb3Igbm93LgorCSAqLworfQorLS0tLQorCitNYWtlIHN1cmUgdG8gYWRkIGEgbGluZSBpbnZva2luZyBpdCBpbnNpZGUgb2YgYGNtZF93YWxrZW4oKWAuCisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWluaXRfd2Fsa2VuX2RlZmF1bHRzKCk7Cit9CistLS0tCisKKz09PT0gQ29uZmlndXJpbmcgRnJvbSBgLmdpdGNvbmZpZ2AKKworTmV4dCwgd2Ugc2hvdWxkIGhhdmUgYSBsb29rIGF0IGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIHNldHRpbmdzIChpLmUuLAorc2V0dGluZ3MgcmVhZGFibGUgYW5kIHNldHRhYmxlIGZyb20gYGdpdCBjb25maWdgKS4gVGhpcyBpcyBkb25lIGJ5IHByb3ZpZGluZyBhCitjYWxsYmFjayB0byBgZ2l0X2NvbmZpZygpYDsgd2l0aGluIHRoYXQgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBpbnZva2UgbWV0aG9kcworZnJvbSBvdGhlciBjb21wb25lbnRzIHlvdSBtYXkgbmVlZCB0aGF0IG5lZWQgdG8gaW50ZXJjZXB0IHRoZXNlIG9wdGlvbnMuIFlvdXIKK2NhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBvbmNlIHBlciBlYWNoIGNvbmZpZ3VyYXRpb24gdmFsdWUgd2hpY2ggR2l0IGtub3dzIGFib3V0CisoZ2xvYmFsLCBsb2NhbCwgd29ya3RyZWUsIGV0Yy4pLgorCitTaW1pbGFybHkgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIGhlcmUgeWV0CitvdXJzZWx2ZXM7IGhvd2V2ZXIsIHdlIHNob3VsZCBjYWxsIGBnaXRfZGVmYXVsdF9jb25maWcoKWAgaWYgd2UgYXJlbid0IGNhbGxpbmcKK2FueSBvdGhlciBleGlzdGluZyBjb25maWcgY2FsbGJhY2tzLgorCitBZGQgYSBuZXcgZnVuY3Rpb24gdG8gYGJ1aWx0aW4vd2Fsa2VuLmNgOgorCistLS0tCitzdGF0aWMgaW50IGdpdF93YWxrZW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCS8qCisJICogRm9yIG5vdywgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb24sIHNvIGZhbGwgYmFjayB0bworCSAqIHRoZSBkZWZhdWx0IGNvbmZpZy4KKwkgKi8KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKy0tLS0KKworTWFrZSBzdXJlIHRvIGludm9rZSBgZ2l0X2NvbmZpZygpYCB3aXRoIGl0IGluIHlvdXIgYGNtZF93YWxrZW4oKWA6CisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCS4uLgorCisJZ2l0X2NvbmZpZyhnaXRfd2Fsa2VuX2NvbmZpZywgTlVMTCk7CisKKwkuLi4KK30KKy0tLS0KKworPT09PSBTZXR0aW5nIFVwIGByZXZfaW5mb2AKKworTm93IHRoYXQgd2UndmUgZ2F0aGVyZWQgZXh0ZXJuYWwgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9ucywgaXQncyB0aW1lIHRvCitpbml0aWFsaXplIHRoZSBgcmV2X2luZm9gIG9iamVjdCB3aGljaCB3ZSB3aWxsIHVzZSB0byBwZXJmb3JtIHRoZSB3YWxrLiBUaGlzIGlzCit0eXBpY2FsbHkgZG9uZSBieSBjYWxsaW5nIGByZXBvX2luaXRfcmV2aXNpb25zKClgIHdpdGggdGhlIHJlcG9zaXRvcnkgeW91IGludGVuZAordG8gdGFyZ2V0LCBhcyB3ZWxsIGFzIHRoZSBgcHJlZml4YCBhcmd1bWVudCBvZiBgY21kX3dhbGtlbmAgYW5kIHlvdXIgYHJldl9pbmZvYAorc3RydWN0LgorCitBZGQgdGhlIGBzdHJ1Y3QgcmV2X2luZm9gIGFuZCB0aGUgYHJlcG9faW5pdF9yZXZpc2lvbnMoKWAgY2FsbDoKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCS8qIFRoaXMgY2FuIGdvIHdoZXJldmVyIHlvdSBsaWtlIGluIHlvdXIgZGVjbGFyYXRpb25zLiovCisJc3RydWN0IHJldl9pbmZvIHJldjsKKwkuLi4KKworCS8qIFRoaXMgc2hvdWxkIGdvIGFmdGVyIHRoZSBnaXRfY29uZmlnKCkgY2FsbC4gKi8KKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCisJLi4uCit9CistLS0tCisKKz09PT0gVHdlYWtpbmcgYHJldl9pbmZvYCBGb3IgdGhlIFdhbGsKKworV2UncmUgZ2V0dGluZyBjbG9zZSwgYnV0IHdlJ3JlIHN0aWxsIG5vdCBxdWl0ZSByZWFkeSB0byBnby4gTm93IHRoYXQgYHJldmAgaXMKK2luaXRpYWxpemVkLCB3ZSBjYW4gbW9kaWZ5IGl0IHRvIGZpdCBvdXIgbmVlZHMuIFRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGhpbiBhCitoZWxwZXIgZm9yIGNsYXJpdHksIHNvIGxldCdzIGFkZCBvbmU6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS8qCisJICogV2Ugd2FudCB0byBtaW1pYyB0aGUgYXBwZWFyYW5jZSBvZiBgZ2l0IGxvZyAtLW9uZWxpbmVgLCBzbyBsZXQncworCSAqIGZvcmNlIG9uZWxpbmUgZm9ybWF0LgorCSAqLworCWdldF9jb21taXRfZm9ybWF0KCJvbmVsaW5lIiwgcmV2KTsKKworCS8qIFN0YXJ0IG91ciBvYmplY3Qgd2FsayBhdCBIRUFELiAqLworCWFkZF9oZWFkX3RvX3BlbmRpbmcocmV2KTsKK30KKy0tLS0KKworW05PVEVdCis9PT09CitJbnN0ZWFkIG9mIHVzaW5nIHRoZSBzaG9ydGhhbmQgYGFkZF9oZWFkX3RvX3BlbmRpbmcoKWAsIHlvdSBjb3VsZCBkbworc29tZXRoaW5nIGxpa2UgdGhpczoKKy0tLS0KKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCByZXYsICZvcHQpOworLS0tLQorVXNpbmcgYSBgc2V0dXBfcmV2aXNpb25fb3B0YCBnaXZlcyB5b3UgZmluZXIgY29udHJvbCBvdmVyIHlvdXIgd2FsaydzIHN0YXJ0aW5nCitwb2ludC4KKz09PT0KKworVGhlbiBsZXQncyBpbnZva2UgYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgIGFmdGVyIHRoZSBjYWxsIHRvCitgcmVwb19pbml0X3JldmlzaW9ucygpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLi4uCisKKwlmaW5hbF9yZXZfaW5mb19zZXR1cCgmcmV2KTsKKworCS4uLgorfQorLS0tLQorCitMYXRlciwgd2UgbWF5IHdpc2ggdG8gYWRkIG1vcmUgYXJndW1lbnRzIHRvIGBmaW5hbF9yZXZfaW5mb19zZXR1cCgpYC4gQnV0IGZvcgorbm93LCB0aGlzIGlzIGFsbCB3ZSBuZWVkLgorCis9PT09IFByZXBhcmluZyBgcmV2X2luZm9gIEZvciB0aGUgV2FsaworCitOb3cgdGhhdCBgcmV2YCBpcyBhbGwgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQsIHdlJ3ZlIGdvdCBvbmUgbW9yZSBzZXR1cCBzdGVwCitiZWZvcmUgd2UgZ2V0IHJvbGxpbmcuIFdlIGNhbiBkbyB0aGlzIGluIGEgaGVscGVyLCB3aGljaCB3aWxsIGJvdGggcHJlcGFyZSB0aGUKK2ByZXZfaW5mb2AgZm9yIHRoZSB3YWxrLCBhbmQgcGVyZm9ybSB0aGUgd2FsayBpdHNlbGYuIExldCdzIHN0YXJ0IHRoZSBoZWxwZXIKK3dpdGggdGhlIGNhbGwgdG8gYHByZXBhcmVfcmV2aXNpb25fd2FsaygpYCwgd2hpY2ggY2FuIHJldHVybiBhbiBlcnJvciB3aXRob3V0CitkeWluZyBvbiBpdHMgb3duOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fY29tbWl0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7Cit9CistLS0tCisKK05PVEU6IGBkaWUoKWAgcHJpbnRzIHRvIGBzdGRlcnJgIGFuZCBleGl0cyB0aGUgcHJvZ3JhbS4gU2luY2UgaXQgd2lsbCBwcmludCB0bworYHN0ZGVycmAgaXQncyBsaWtlbHkgdG8gYmUgc2VlbiBieSBhIGh1bWFuLCBzbyB3ZSB3aWxsIGxvY2FsaXplIGl0LgorCis9PT09IFBlcmZvcm1pbmcgdGhlIFdhbGshCisKK0ZpbmFsbHkhIFdlIGFyZSByZWFkeSB0byBiZWdpbiB0aGUgd2FsayBpdHNlbGYuIE5vdyB3ZSBjYW4gc2VlIHRoYXQgYHJldl9pbmZvYAorY2FuIGFsc28gYmUgdXNlZCBhcyBhbiBpdGVyYXRvcjsgd2UgbW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSB3YWxrIGJ5IHVzaW5nCitgZ2V0X3JldmlzaW9uKClgIHJlcGVhdGVkbHkuIEFkZCB0aGUgbGlzdGVkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wIGFuZAordGhlIHdhbGsgbG9vcCBiZWxvdyB0aGUgYHByZXBhcmVfcmV2aXNpb25fd2FsaygpYCBjYWxsIHdpdGhpbiB5b3VyCitgd2Fsa2VuX2NvbW1pdF93YWxrKClgOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fY29tbWl0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgcHJldHR5YnVmID0gU1RSQlVGX0lOSVQ7CisKKwkuLi4KKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpKSB7CisJCWlmICghY29tbWl0KQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX3Jlc2V0KCZwcmV0dHlidWYpOworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZwcmV0dHlidWYpOworCQlwdXRzKHByZXR0eWJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcHJldHR5YnVmKTsKK30KKy0tLS0KKworTk9URTogYHB1dHMoKWAgcHJpbnRzIGEgYGNoYXIqYCB0byBgc3Rkb3V0YC4gU2luY2UgdGhpcyBpcyB0aGUgcGFydCBvZiB0aGUKK2NvbW1hbmQgd2UgZXhwZWN0IHRvIGJlIG1hY2hpbmUtcGFyc2VkLCB3ZSdyZSBzZW5kaW5nIGl0IGRpcmVjdGx5IHRvIHN0ZG91dC4KKworR2l2ZSBpdCBhIHNob3QuCisKKy0tLS0KKyQgbWFrZQorJCAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuCistLS0tCisKK1lvdSBzaG91bGQgc2VlIGFsbCBvZiB0aGUgc3ViamVjdCBsaW5lcyBvZiBhbGwgdGhlIGNvbW1pdHMgaW4KK3lvdXIgdHJlZSdzIGhpc3RvcnksIGluIG9yZGVyLCBlbmRpbmcgd2l0aCB0aGUgaW5pdGlhbCBjb21taXQsICJJbml0aWFsIHJldmlzaW9uCitvZiAiZ2l0IiwgdGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsIi4gQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgd3JpdHRlbgoreW91ciBmaXJzdCByZXZpc2lvbiB3YWxrLiBZb3UgY2FuIHBsYXkgd2l0aCBwcmludGluZyBzb21lIGFkZGl0aW9uYWwgZmllbGRzCitmcm9tIGVhY2ggY29tbWl0IGlmIHlvdSdyZSBjdXJpb3VzOyBoYXZlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbgorYGNvbW1pdC5oYC4KKworPT09IEFkZGluZyBhIEZpbHRlcgorCitOZXh0LCBsZXQncyB0cnkgdG8gZmlsdGVyIHRoZSBjb21taXRzIHdlIHNlZSBiYXNlZCBvbiB0aGVpciBhdXRob3IuIFRoaXMgaXMKK2VxdWl2YWxlbnQgdG8gcnVubmluZyBgZ2l0IGxvZyAtLWF1dGhvcj08cGF0dGVybj5gLiBXZSBjYW4gYWRkIGEgZmlsdGVyIGJ5Cittb2RpZnlpbmcgYHJldl9pbmZvLmdyZXBfZmlsdGVyYCwgd2hpY2ggaXMgYSBgc3RydWN0IGdyZXBfb3B0YC4KKworRmlyc3Qgc29tZSBzZXR1cC4gQWRkIGBpbml0X2dyZXBfZGVmYXVsdHMoKWAgdG8gYGluaXRfd2Fsa2VuX2RlZmF1bHRzKClgIGFuZCBhZGQKK2BncmVwX2NvbmZpZygpYCB0byBgZ2l0X3dhbGtlbl9jb25maWcoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGluaXRfd2Fsa2VuX2RlZmF1bHRzKHZvaWQpCit7CisJaW5pdF9ncmVwX2RlZmF1bHRzKHRoZV9yZXBvc2l0b3J5KTsKK30KKworLi4uCisKK3N0YXRpYyBpbnQgZ2l0X3dhbGtlbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJZ3JlcF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorLS0tLQorCitOZXh0LCB3ZSBjYW4gbW9kaWZ5IHRoZSBgZ3JlcF9maWx0ZXJgLiBUaGlzIGlzIGRvbmUgd2l0aCBjb252ZW5pZW5jZSBmdW5jdGlvbnMKK2ZvdW5kIGluIGBncmVwLmhgLiBGb3IgZnVuLCB3ZSdyZSBmaWx0ZXJpbmcgdG8gb25seSBjb21taXRzIGZyb20gZm9sa3MgdXNpbmcgYQorYGdtYWlsLmNvbWAgZW1haWwgYWRkcmVzcyAtIGEgbm90LXZlcnktcHJlY2lzZSBndWVzcyBhdCB3aG8gbWF5IGJlIHdvcmtpbmcgb24KK0dpdCBhcyBhIGhvYmJ5LiBTaW5jZSB3ZSdyZSBjaGVja2luZyB0aGUgYXV0aG9yLCB3aGljaCBpcyBhIHNwZWNpZmljIGxpbmUgaW4gdGhlCitoZWFkZXIsIHdlJ2xsIHVzZSB0aGUgYGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKClgIGhlbHBlci4gV2UgY2FuIHVzZQordGhlIGBlbnVtIGdyZXBfaGVhZGVyX2ZpZWxkYCB0byBpbmRpY2F0ZSB3aGljaCBwYXJ0IG9mIHRoZSBjb21taXQgaGVhZGVyIHdlIHdhbnQKK3RvIHNlYXJjaC4KKworSW4gYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgLCBhZGQgeW91ciBmaWx0ZXIgbGluZToKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oJnJldi0+Z3JlcF9maWx0ZXIsIEdSRVBfSEVBREVSX0FVVEhPUiwKKwkJImdtYWlsIik7CisJY29tcGlsZV9ncmVwX3BhdHRlcm5zKCZyZXYtPmdyZXBfZmlsdGVyKTsKKworCS4uLgorfQorLS0tLQorCitgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgYWRkcyB5b3VyIG5ldyAiZ21haWwiIHBhdHRlcm4gdG8gYHJldl9pbmZvYCwgYnV0CitpdCB3b24ndCB3b3JrIHVubGVzcyB3ZSBjb21waWxlIGl0IHdpdGggYGNvbXBpbGVfZ3JlcF9wYXR0ZXJucygpYC4KKworTk9URTogSWYgeW91IGFyZSB1c2luZyBgc2V0dXBfcmV2aXNpb25zKClgIChmb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwYXNzaW5nIGEKK2BzZXR1cF9yZXZpc2lvbl9vcHRgIGluc3RlYWQgb2YgdXNpbmcgYGFkZF9oZWFkX3RvX3BlbmRpbmcoKWApLCB5b3UgZG9uJ3QgbmVlZAordG8gY2FsbCBgY29tcGlsZV9ncmVwX3BhdHRlcm5zKClgIGJlY2F1c2UgYHNldHVwX3JldmlzaW9ucygpYCBjYWxscyBpdCBmb3IgeW91LgorCitOT1RFOiBXZSBjb3VsZCBhZGQgdGhlIHNhbWUgZmlsdGVyIHZpYSB0aGUgYGFwcGVuZF9ncmVwX3BhdHRlcm4oKWAgaGVscGVyIGlmIHdlCit3YW50ZWQgdG8sIGJ1dCBgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgYWRkcyB0aGUgYGVudW0gZ3JlcF9jb250ZXh0YCBhbmQKK2BlbnVtIGdyZXBfcGF0X3Rva2VuYCBmb3IgdXMuCisKKz09PSBDaGFuZ2luZyB0aGUgT3JkZXIKKworVGhlcmUgYXJlIGEgZmV3IHdheXMgdGhhdCB3ZSBjYW4gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgY29tbWl0cyBkdXJpbmcgYQorcmV2aXNpb24gd2Fsay4gRmlyc3RseSwgd2UgY2FuIHVzZSB0aGUgYGVudW0gcmV2X3NvcnRfb3JkZXJgIHRvIGNob29zZSBmcm9tIHNvbWUKK3R5cGljYWwgb3JkZXJpbmdzLgorCitgdG9wb19vcmRlcmAgaXMgdGhlIHNhbWUgYXMgYGdpdCBsb2cgLS10b3BvLW9yZGVyYDogd2UgYXZvaWQgc2hvd2luZyBhIHBhcmVudAorYmVmb3JlIGFsbCBvZiBpdHMgY2hpbGRyZW4gaGF2ZSBiZWVuIHNob3duLCBhbmQgd2UgYXZvaWQgbWl4aW5nIGNvbW1pdHMgd2hpY2gKK2FyZSBpbiBkaWZmZXJlbnQgbGluZXMgb2YgaGlzdG9yeS4gKGBnaXQgaGVscCBsb2dgJ3Mgc2VjdGlvbiBvbiBgLS10b3BvLW9yZGVyYAoraGFzIGEgdmVyeSBuaWNlIGRpYWdyYW0gdG8gaWxsdXN0cmF0ZSB0aGlzLikKKworTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHdlIHJ1biB3aXRoIGBSRVZfU09SVF9CWV9DT01NSVRfREFURWAgYXMgb3Bwb3NlZCB0bworYFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFYC4gQWRkIHRoZSBmb2xsb3dpbmc6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+dG9wb19vcmRlciA9IDE7CisJcmV2LT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU7CisKKwkuLi4KK30KKy0tLS0KKworTGV0J3Mgb3V0cHV0IHRoaXMgaW50byBhIGZpbGUgc28gd2UgY2FuIGVhc2lseSBkaWZmIGl0IHdpdGggdGhlIHdhbGsgc29ydGVkIGJ5CithdXRob3IgZGF0ZS4KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4gPiBjb21taXQtZGF0ZS50eHQKKy0tLS0KKworVGhlbiwgbGV0J3Mgc29ydCBieSBhdXRob3IgZGF0ZSBhbmQgcnVuIGl0IGFnYWluLgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlyZXYtPnRvcG9fb3JkZXIgPSAxOworCXJldi0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFOworCisJLi4uCit9CistLS0tCisKKy0tLS0KKyQgbWFrZQorJCAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuID4gYXV0aG9yLWRhdGUudHh0CistLS0tCisKK0ZpbmFsbHksIGNvbXBhcmUgdGhlIHR3by4gVGhpcyBpcyBhIGxpdHRsZSBsZXNzIGhlbHBmdWwgd2l0aG91dCBvYmplY3QgbmFtZXMgb3IKK2RhdGVzLCBidXQgaG9wZWZ1bGx5IHdlIGdldCB0aGUgaWRlYS4KKworLS0tLQorJCBkaWZmIC11IGNvbW1pdC1kYXRlLnR4dCBhdXRob3ItZGF0ZS50eHQKKy0tLS0KKworVGhpcyBkaXNwbGF5IGluZGljYXRlcyB0aGF0IGNvbW1pdHMgY2FuIGJlIHJlb3JkZXJlZCBhZnRlciB0aGV5J3JlIHdyaXR0ZW4sIGZvcgorZXhhbXBsZSB3aXRoIGBnaXQgcmViYXNlYC4KKworTGV0J3MgdHJ5IG9uZSBtb3JlIHJlb3JkZXJpbmcgb2YgY29tbWl0cy4gYHJldl9pbmZvYCBleHBvc2VzIGEgYHJldmVyc2VgIGZsYWcuCitTZXQgdGhhdCBmbGFnIHNvbWV3aGVyZSBpbnNpZGUgb2YgYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlyZXYtPnJldmVyc2UgPSAxOworCisJLi4uCit9CistLS0tCisKK1J1biB5b3VyIHdhbGsgYWdhaW4gYW5kIG5vdGUgdGhlIGRpZmZlcmVuY2UgaW4gb3JkZXIuIChJZiB5b3UgcmVtb3ZlIHRoZSBncmVwCitwYXR0ZXJuLCB5b3Ugc2hvdWxkIHNlZSB0aGUgbGFzdCBjb21taXQgdGhpcyBjYWxsIGdpdmVzIHlvdSBhcyB5b3VyIGN1cnJlbnQKK0hFQUQuKQorCis9PSBCYXNpYyBPYmplY3QgV2FsaworCitTbyBmYXIgd2UndmUgYmVlbiB3YWxraW5nIG9ubHkgY29tbWl0cy4gQnV0IEdpdCBoYXMgbW9yZSB0eXBlcyBvZiBvYmplY3RzIHRoYW4KK3RoYXQhIExldCdzIHNlZSBpZiB3ZSBjYW4gd2FsayBfYWxsXyBvYmplY3RzLCBhbmQgZmluZCBvdXQgc29tZSBpbmZvcm1hdGlvbgorYWJvdXQgZWFjaCBvbmUuCisKK1dlIGNhbiBiYXNlIG91ciB3b3JrIG9uIGFuIGV4YW1wbGUuIGBnaXQgcGFjay1vYmplY3RzYCBwcmVwYXJlcyBhbGwga2luZHMgb2YKK29iamVjdHMgZm9yIHBhY2tpbmcgaW50byBhIGJpdG1hcCBvciBwYWNrZmlsZS4gVGhlIHdvcmsgd2UgYXJlIGludGVyZXN0ZWQgaW4KK3Jlc2lkZXMgaW4gYGJ1aWx0aW5zL3BhY2stb2JqZWN0cy5jOmdldF9vYmplY3RfbGlzdCgpYDsgZXhhbWluYXRpb24gb2YgdGhhdAorZnVuY3Rpb24gc2hvd3MgdGhhdCB0aGUgYWxsLW9iamVjdCB3YWxrIGlzIGJlaW5nIHBlcmZvcm1lZCBieQorYHRyYXZlcnNlX2NvbW1pdF9saXN0KClgIG9yIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYC4gVGhvc2UgdHdvCitmdW5jdGlvbnMgcmVzaWRlIGluIGBsaXN0LW9iamVjdHMuY2A7IGV4YW1pbmluZyB0aGUgc291cmNlIHNob3dzIHRoYXQsIGRlc3BpdGUKK3RoZSBuYW1lLCB0aGVzZSBmdW5jdGlvbnMgdHJhdmVyc2UgYWxsIGtpbmRzIG9mIG9iamVjdHMuIExldCdzIGhhdmUgYSBsb29rIGF0Cit0aGUgYXJndW1lbnRzIHRvIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCwgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhlCithcmd1bWVudHMgdG8gdGhlIHVuZmlsdGVyZWQgdmVyc2lvbi4KKworLSBgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnNgOiBUaGlzIGlzIGEgc3RydWN0IHdoaWNoCisgIHN0b3JlcyBhIGZpbHRlci1zcGVjIGFzIG91dGxpbmVkIGluIGBEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0YC4KKy0gYHN0cnVjdCByZXZfaW5mbyAqcmV2c2A6IFRoaXMgaXMgdGhlIGByZXZfaW5mb2AgdXNlZCBmb3IgdGhlIHdhbGsuCistIGBzaG93X2NvbW1pdF9mbiBzaG93X2NvbW1pdGA6IEEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGhhbmRsZSBlYWNoCisgIGluZGl2aWR1YWwgY29tbWl0IG9iamVjdC4KKy0gYHNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0YDogQSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIGVhY2gKKyAgbm9uLWNvbW1pdCBvYmplY3QgKHNvIGVhY2ggYmxvYiwgdHJlZSwgb3IgdGFnKS4KKy0gYHZvaWQgKnNob3dfZGF0YWA6IEEgY29udGV4dCBidWZmZXIgd2hpY2ggaXMgcGFzc2VkIGluIHR1cm4gdG8gYHNob3dfY29tbWl0YAorICBhbmQgYHNob3dfb2JqZWN0YC4KKy0gYHN0cnVjdCBvaWRzZXQgKm9taXR0ZWRgOiBBIGxpbmtlZC1saXN0IG9mIG9iamVjdCBJRHMgd2hpY2ggdGhlIHByb3ZpZGVkCisgIGZpbHRlciBjYXVzZWQgdG8gYmUgb21pdHRlZC4KKworSXQgbG9va3MgbGlrZSB0aGlzIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB1c2VzIGNhbGxiYWNrcyB3ZSBwcm92aWRlCitpbnN0ZWFkIG9mIG5lZWRpbmcgdXMgdG8gY2FsbCBpdCByZXBlYXRlZGx5IG91cnNlbHZlcy4gQ29vbCEgTGV0J3MgYWRkIHRoZQorY2FsbGJhY2tzIGZpcnN0LgorCitGb3IgdGhlIHNha2Ugb2YgdGhpcyB0dXRvcmlhbCwgd2UnbGwgc2ltcGx5IGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgb2YgZWFjaCBraW5kCitvZiBvYmplY3Qgd2UgZmluZC4gQXQgZmlsZSBzY29wZSBpbiBgYnVpbHRpbi93YWxrZW4uY2AgYWRkIHRoZSBmb2xsb3dpbmcKK3RyYWNraW5nIHZhcmlhYmxlczoKKworLS0tLQorc3RhdGljIGludCBjb21taXRfY291bnQ7CitzdGF0aWMgaW50IHRhZ19jb3VudDsKK3N0YXRpYyBpbnQgYmxvYl9jb3VudDsKK3N0YXRpYyBpbnQgdHJlZV9jb3VudDsKKy0tLS0KKworQ29tbWl0cyBhcmUgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBjYWxsYmFjayB0aGFuIG90aGVyIG9iamVjdHM7IGxldCdzIGRvIHRoYXQKK29uZSBmaXJzdDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNtdCwgdm9pZCAqYnVmKQoreworCWNvbW1pdF9jb3VudCsrOworfQorLS0tLQorCitUaGUgYGNtdGAgYXJndW1lbnQgaXMgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkuIEJ1dCBpdCdzIHdvcnRoIG1lbnRpb25pbmcgdGhhdAordGhlIGBidWZgIGFyZ3VtZW50IGlzIGFjdHVhbGx5IHRoZSBjb250ZXh0IGJ1ZmZlciB0aGF0IHdlIGNhbiBwcm92aWRlIHRvIHRoZQordHJhdmVyc2FsIGNhbGxzIC0gYHNob3dfZGF0YWAsIHdoaWNoIHdlIG1lbnRpb25lZCBhIG1vbWVudCBhZ28uCisKK1NpbmNlIHdlIGhhdmUgdGhlIGBzdHJ1Y3QgY29tbWl0YCBvYmplY3QsIHdlIGNhbiBsb29rIGF0IGFsbCB0aGUgc2FtZSBwYXJ0cyB0aGF0Cit3ZSBsb29rZWQgYXQgaW4gb3VyIGVhcmxpZXIgY29tbWl0LW9ubHkgd2Fsay4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgdHV0b3JpYWwsCit0aG91Z2gsIHdlJ2xsIGp1c3QgaW5jcmVtZW50IHRoZSBjb21taXQgY291bnRlciBhbmQgbW92ZSBvbi4KKworVGhlIGNhbGxiYWNrIGZvciBub24tY29tbWl0cyBpcyBhIGxpdHRsZSBkaWZmZXJlbnQsIGFzIHdlJ2xsIG5lZWQgdG8gY2hlY2sKK3doaWNoIGtpbmQgb2Ygb2JqZWN0IHdlJ3JlIGRlYWxpbmcgd2l0aDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc3RyLCB2b2lkICpidWYpCit7CisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIE9CSl9UUkVFOgorCQl0cmVlX2NvdW50Kys7CisJCWJyZWFrOworCWNhc2UgT0JKX0JMT0I6CisJCWJsb2JfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfVEFHOgorCQl0YWdfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlCVUcoInVuZXhwZWN0ZWQgY29tbWl0IG9iamVjdCBpbiB3YWxrZW5fc2hvd19vYmplY3RcbiIpOworCWRlZmF1bHQ6CisJCUJVRygidW5leHBlY3RlZCBvYmplY3QgdHlwZSAlcyBpbiB3YWxrZW5fc2hvd19vYmplY3RcbiIsCisJCQl0eXBlX25hbWUob2JqLT50eXBlKSk7CisJfQorfQorLS0tLQorCitBZ2FpbiwgYG9iamAgaXMgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnksIGFuZCB3ZSBjYW4gZ3Vlc3MgdGhhdCBgYnVmYCBpcyB0aGUgc2FtZQorY29udGV4dCBwb2ludGVyIHRoYXQgYHdhbGtlbl9zaG93X2NvbW1pdCgpYCByZWNlaXZlczogdGhlIGBzaG93X2RhdGFgIGFyZ3VtZW50Cit0byBgdHJhdmVyc2VfY29tbWl0X2xpc3QoKWAgYW5kIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYC4gRmluYWxseSwKK2BzdHJgIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QsIHdoaWNoIGVuZHMgdXAgYmVpbmcgc29tZXRoaW5nIGxpa2UKK2Bmb28udHh0YCAoYmxvYiksIGBiYXIvYmF6YCAodHJlZSksIG9yIGB2MS4yLjNgICh0YWcpLgorCitUbyBoZWxwIGFzc3VyZSB1cyB0aGF0IHdlIGFyZW4ndCBkb3VibGUtY291bnRpbmcgY29tbWl0cywgd2UnbGwgaW5jbHVkZSBzb21lCitjb21wbGFpbmluZyBpZiBhIGNvbW1pdCBvYmplY3QgaXMgcm91dGVkIHRocm91Z2ggb3VyIG5vbi1jb21taXQgY2FsbGJhY2s7IHdlJ2xsCithbHNvIGNvbXBsYWluIGlmIHdlIHNlZSBhbiBpbnZhbGlkIG9iamVjdCB0eXBlLiBTaW5jZSB0aG9zZSB0d28gY2FzZXMgc2hvdWxkIGJlCit1bnJlYWNoYWJsZSwgYW5kIHdvdWxkIG9ubHkgY2hhbmdlIGluIHRoZSBldmVudCBvZiBhIHNlbWFudGljIGNoYW5nZSB0byB0aGUgR2l0Citjb2RlYmFzZSwgd2UgY29tcGxhaW4gYnkgdXNpbmcgYEJVRygpYCAtIHdoaWNoIGlzIGEgc2lnbmFsIHRvIGEgZGV2ZWxvcGVyIHRoYXQKK3RoZSBjaGFuZ2UgdGhleSBtYWRlIGNhdXNlZCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgYW5kIHRoZSByZXN0IG9mIHRoZQorY29kZWJhc2UgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2hhbmdlLiBgQlVHKClgIGlzIG5vdCBpbnRlbmRlZAordG8gYmUgc2VlbiBieSB0aGUgcHVibGljLCBzbyBpdCBpcyBub3QgbG9jYWxpemVkLgorCitPdXIgbWFpbiBvYmplY3Qgd2FsayBpbXBsZW1lbnRhdGlvbiBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCBmcm9tIG91ciBjb21taXQKK3dhbGsgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIG1ha2UgYSBuZXcgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb2JqZWN0IHdhbGsuIFdlCitjYW4gcGVyZm9ybSBzZXR1cCB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGFsbCBvYmplY3RzIGhlcmUsIHRvbywgdG8ga2VlcCBzZXBhcmF0ZQorZnJvbSBzZXR1cCB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGNvbW1pdC1vbmx5IHdhbGtzLgorCitXZSdsbCBzdGFydCBieSBlbmFibGluZyBhbGwgdHlwZXMgb2Ygb2JqZWN0cyBpbiB0aGUgYHN0cnVjdCByZXZfaW5mb2AuICBXZSdsbAorYWxzbyB0dXJuIG9uIGB0cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcmAsIHdoaWNoIG1lYW5zIHRoYXQgd2Ugd2lsbCB3YWxrIGEKK2NvbW1pdCdzIHRyZWUgYW5kIGV2ZXJ5dGhpbmcgaXQgcG9pbnRzIHRvIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGZpbmQgZWFjaCBjb21taXQsCithcyBvcHBvc2VkIHRvIHdhaXRpbmcgZm9yIHRoZSBlbmQgYW5kIHdhbGtpbmcgdGhyb3VnaCBhbGwgdHJlZXMgYWZ0ZXIgdGhlIGNvbW1pdAoraGlzdG9yeSBoYXMgYmVlbiBkaXNjb3ZlcmVkLiBXaXRoIHRoZSBhcHByb3ByaWF0ZSBzZXR0aW5ncyBjb25maWd1cmVkLCB3ZSBhcmUKK3JlYWR5IHRvIGNhbGwgYHByZXBhcmVfcmV2aXNpb25fd2FsaygpYC4KKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX29iamVjdF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXJldi0+dHJlZV9vYmplY3RzID0gMTsKKwlyZXYtPmJsb2Jfb2JqZWN0cyA9IDE7CisJcmV2LT50YWdfb2JqZWN0cyA9IDE7CisJcmV2LT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlciA9IDE7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWNvbW1pdF9jb3VudCA9IDA7CisJdGFnX2NvdW50ID0gMDsKKwlibG9iX2NvdW50ID0gMDsKKwl0cmVlX2NvdW50ID0gMDsKKy0tLS0KKworTGV0J3Mgc3RhcnQgYnkgY2FsbGluZyBqdXN0IHRoZSB1bmZpbHRlcmVkIHdhbGsgYW5kIHJlcG9ydGluZyBvdXIgY291bnRzLgorQ29tcGxldGUgeW91ciBpbXBsZW1lbnRhdGlvbiBvZiBgd2Fsa2VuX29iamVjdF93YWxrKClgOgorCistLS0tCisJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2LCB3YWxrZW5fc2hvd19jb21taXQsIHdhbGtlbl9zaG93X29iamVjdCwgTlVMTCk7CisKKwlwcmludGYoImNvbW1pdHMgJWRcbmJsb2JzICVkXG50YWdzICVkXG50cmVlcyAlZFxuIiwgY29tbWl0X2NvdW50LAorCQlibG9iX2NvdW50LCB0YWdfY291bnQsIHRyZWVfY291bnQpOworfQorLS0tLQorCitOT1RFOiBUaGlzIG91dHB1dCBpcyBpbnRlbmRlZCB0byBiZSBtYWNoaW5lLXBhcnNlZC4gVGhlcmVmb3JlLCB3ZSBhcmUgbm90CitzZW5kaW5nIGl0IHRvIGB0cmFjZV9wcmludGYoKWAsIGFuZCB3ZSBhcmUgbm90IGxvY2FsaXppbmcgaXQgLSB3ZSBuZWVkIHNjcmlwdHMKK3RvIGJlIGFibGUgdG8gY291bnQgb24gdGhlIGZvcm1hdHRpbmcgdG8gYmUgZXhhY3RseSB0aGUgd2F5IGl0IGlzIHNob3duIGhlcmUuCitJZiB3ZSB3ZXJlIGludGVuZGluZyB0aGlzIG91dHB1dCB0byBiZSByZWFkIGJ5IGh1bWFucywgd2Ugd291bGQgbmVlZCB0byBsb2NhbGl6ZQoraXQgd2l0aCBgXygpYC4KKworRmluYWxseSwgd2UnbGwgYXNrIGBjbWRfd2Fsa2VuKClgIHRvIHVzZSB0aGUgb2JqZWN0IHdhbGsgaW5zdGVhZC4gRGlzY3Vzc2luZworY29tbWFuZCBsaW5lIG9wdGlvbnMgaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIHR1dG9yaWFsLCBzbyB3ZSdsbCBqdXN0IGhhcmRjb2RlCithIGJyYW5jaCB3ZSBjYW4gY2hhbmdlIGF0IGNvbXBpbGUgdGltZS4gV2hlcmUgeW91IGNhbGwgYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgCithbmQgYHdhbGtlbl9jb21taXRfd2FsaygpYCwgaW5zdGVhZCBicmFuY2ggbGlrZSBzbzoKKworLS0tLQorCWlmICgxKSB7CisJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJCXdhbGtlbl9vYmplY3Rfd2FsaygmcmV2KTsKKwl9IGVsc2UgeworCQlmaW5hbF9yZXZfaW5mb19zZXR1cChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYpOworCQl3YWxrZW5fY29tbWl0X3dhbGsoJnJldik7CisJfQorLS0tLQorCitOT1RFOiBGb3Igc2ltcGxpY2l0eSwgd2UndmUgYXZvaWRlZCBhbGwgdGhlIGZpbHRlcnMgYW5kIHNvcnRzIHdlIGFwcGxpZWQgaW4KK2BmaW5hbF9yZXZfaW5mb19zZXR1cCgpYCBhbmQgc2ltcGx5IGFkZGVkIGBIRUFEYCB0byBvdXIgcGVuZGluZyBxdWV1ZS4gSWYgeW91Cit3YW50LCB5b3UgY2FuIGNlcnRhaW5seSB1c2UgdGhlIGZpbHRlcnMgd2UgYWRkZWQgYmVmb3JlIGJ5IG1vdmluZworYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgIG91dCBvZiB0aGUgY29uZGl0aW9uYWwgYW5kIHJlbW92aW5nIHRoZSBjYWxsIHRvCitgYWRkX2hlYWRfdG9fcGVuZGluZygpYC4KKworTm93IHdlIGNhbiB0cnkgdG8gcnVuIG91ciBjb21tYW5kISBJdCBzaG91bGQgdGFrZSBub3RpY2VhYmx5IGxvbmdlciB0aGFuIHRoZQorY29tbWl0IHdhbGssIGJ1dCBhbiBleGFtaW5hdGlvbiBvZiB0aGUgb3V0cHV0IHdpbGwgZ2l2ZSB5b3UgYW4gaWRlYSB3aHkuIFlvdXIKK291dHB1dCBzaG91bGQgbG9vayBzaW1pbGFyIHRvIHRoaXMgZXhhbXBsZSwgYnV0IHdpdGggZGlmZmVyZW50IGNvdW50czoKKworLS0tLQorT2JqZWN0IHdhbGsgY29tcGxldGVkLiBGb3VuZCA1NTczMyBjb21taXRzLCAxMDAyNzQgYmxvYnMsIDAgdGFncywgYW5kIDEwNDIxMCB0cmVlcy4KKy0tLS0KKworVGhpcyBtYWtlcyBzZW5zZS4gV2UgaGF2ZSBtb3JlIHRyZWVzIHRoYW4gY29tbWl0cyBiZWNhdXNlIHRoZSBHaXQgcHJvamVjdCBoYXMKK2xvdHMgb2Ygc3ViZGlyZWN0b3JpZXMgd2hpY2ggY2FuIGNoYW5nZSwgcGx1cyBhdCBsZWFzdCBvbmUgdHJlZSBwZXIgY29tbWl0LiBXZQoraGF2ZSBubyB0YWdzIGJlY2F1c2Ugd2Ugc3RhcnRlZCBvbiBhIGNvbW1pdCAoYEhFQURgKSBhbmQgd2hpbGUgdGFncyBjYW4gcG9pbnQgdG8KK2NvbW1pdHMsIGNvbW1pdHMgY2FuJ3QgcG9pbnQgdG8gdGFncy4KKworTk9URTogWW91IHdpbGwgaGF2ZSBkaWZmZXJlbnQgY291bnRzIHdoZW4geW91IHJ1biB0aGlzIHlvdXJzZWxmISBUaGUgbnVtYmVyIG9mCitvYmplY3RzIGdyb3dzIGFsb25nIHdpdGggdGhlIEdpdCBwcm9qZWN0LgorCis9PT0gQWRkaW5nIGEgRmlsdGVyCisKK1RoZXJlIGFyZSBhIGhhbmRmdWwgb2YgZmlsdGVycyB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgb2JqZWN0IHdhbGsgbGFpZCBvdXQgaW4KK2BEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0YC4gVGhlc2UgZmlsdGVycyBhcmUgdHlwaWNhbGx5IHVzZWZ1bCBmb3IKK29wZXJhdGlvbnMgc3VjaCBhcyBjcmVhdGluZyBwYWNrZmlsZXMgb3IgcGVyZm9ybWluZyBhIHBhcnRpYWwgY2xvbmUuIFRoZXkgYXJlCitkZWZpbmVkIGluIGBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaGAuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0dXRvcmlhbCB3ZQord2lsbCB1c2UgdGhlICJ0cmVlOjEiIGZpbHRlciwgd2hpY2ggY2F1c2VzIHRoZSB3YWxrIHRvIG9taXQgYWxsIHRyZWVzIGFuZCBibG9icword2hpY2ggYXJlIG5vdCBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIGNvbW1pdCBpbgorYHBlbmRpbmdgIHdoZW4gdGhlIHdhbGsgYmVnaW5zLiAoYHBlbmRpbmdgIGlzIHRoZSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggbmVlZCB0bworYmUgdHJhdmVyc2VkIGR1cmluZyBhIHdhbGs7IHlvdSBjYW4gaW1hZ2luZSBhIGJyZWFkdGgtZmlyc3QgdHJlZSB0cmF2ZXJzYWwgdG8KK2hlbHAgdW5kZXJzdGFuZC4gSW4gb3VyIGNhc2UsIHRoYXQgbWVhbnMgd2Ugb21pdCB0cmVlcyBhbmQgYmxvYnMgbm90IGRpcmVjdGx5CityZWZlcmVuY2VkIGJ5IGBIRUFEYCBvciBgSEVBRGAncyBoaXN0b3J5LCBiZWNhdXNlIHdlIGJlZ2luIHRoZSB3YWxrIHdpdGggb25seQorYEhFQURgIGluIHRoZSBgcGVuZGluZ2AgbGlzdC4pCisKK0ZpcnN0LCB3ZSdsbCBuZWVkIHRvIGAjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmhgIiBhbmQgc2V0IHVwIHRoZQorYHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnNgIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9ucyA9IHt9OworCisJLi4uCistLS0tCisKK0ZvciBub3csIHdlIGFyZSBub3QgZ29pbmcgdG8gdHJhY2sgdGhlIG9taXR0ZWQgb2JqZWN0cywgc28gd2UnbGwgcmVwbGFjZSB0aG9zZQorcGFyYW1ldGVycyB3aXRoIGBOVUxMYC4gRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIHdlJ2xsIGFkZCBhIHNpbXBsZQorYnVpbGQtdGltZSBicmFuY2ggdG8gdXNlIG91ciBmaWx0ZXIgb3Igbm90LiBSZXBsYWNlIHRoZSBsaW5lIGNhbGxpbmcKK2B0cmF2ZXJzZV9jb21taXRfbGlzdCgpYCB3aXRoIHRoZSBmb2xsb3dpbmcsIHdoaWNoIHdpbGwgcmVtaW5kIHVzIHdoaWNoIGtpbmQgb2YKK3dhbGsgd2UndmUganVzdCBwZXJmb3JtZWQ6CisKKy0tLS0KKwlpZiAoMCkgeworCQkvKiBVbmZpbHRlcmVkOiAqLworCQl0cmFjZV9wcmludGYoXygiVW5maWx0ZXJlZCBvYmplY3Qgd2Fsay5cbiIpKTsKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2LCB3YWxrZW5fc2hvd19jb21taXQsCisJCQkJd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMKTsKKwl9IGVsc2UgeworCQl0cmFjZV9wcmludGYoCisJCQlfKCJGaWx0ZXJlZCBvYmplY3Qgd2FsayB3aXRoIGZpbHRlcnNwZWMgJ3RyZWU6MScuXG4iKSk7CisJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJmZpbHRlcl9vcHRpb25zLCAidHJlZToxIik7CisKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoJmZpbHRlcl9vcHRpb25zLCByZXYsCisJCQl3YWxrZW5fc2hvd19jb21taXQsIHdhbGtlbl9zaG93X29iamVjdCwgTlVMTCwgTlVMTCk7CisJfQorLS0tLQorCitgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uc2AgaXMgdXN1YWxseSBidWlsdCBkaXJlY3RseSBmcm9tIGEgY29tbWFuZAorbGluZSBhcmd1bWVudCwgc28gdGhlIG1vZHVsZSBwcm92aWRlcyBhbiBlYXN5IHdheSB0byBidWlsZCBvbmUgZnJvbSBhIHN0cmluZy4KK0V2ZW4gdGhvdWdoIHdlIGFyZW4ndCB0YWtpbmcgdXNlciBpbnB1dCByaWdodCBub3csIHdlIGNhbiBzdGlsbCBidWlsZCBvbmUgd2l0aAorYSBoYXJkY29kZWQgc3RyaW5nIHVzaW5nIGBwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKClgLgorCitXaXRoIHRoZSBmaWx0ZXIgc3BlYyAidHJlZToxIiwgd2UgYXJlIGV4cGVjdGluZyB0byBzZWUgX29ubHlfIHRoZSByb290IHRyZWUgZm9yCitlYWNoIGNvbW1pdDsgdGhlcmVmb3JlLCB0aGUgdHJlZSBvYmplY3QgY291bnQgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bwordGhlIG51bWJlciBvZiBjb21taXRzLiAoRm9yIGFuIGV4YW1wbGUgb2Ygd2h5IHRoYXQncyB0cnVlOiBgZ2l0IGNvbW1pdCAtLXJldmVydGAKK3BvaW50cyB0byB0aGUgc2FtZSB0cmVlIG9iamVjdCBhcyBpdHMgZ3JhbmRwYXJlbnQuKQorCis9PT0gQ291bnRpbmcgT21pdHRlZCBPYmplY3RzCisKK1dlIGFsc28gaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBlbnVtZXJhdGUgYWxsIG9iamVjdHMgd2hpY2ggd2VyZSBvbWl0dGVkIGJ5IGEKK2ZpbHRlciwgbGlrZSB3aXRoIGBnaXQgbG9nIC0tZmlsdGVyPTxzcGVjPiAtLWZpbHRlci1wcmludC1vbWl0dGVkYC4gQXNraW5nCitgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAgdG8gcG9wdWxhdGUgdGhlIGBvbWl0dGVkYCBsaXN0IG1lYW5zIHRoYXQgb3VyCitvYmplY3Qgd2FsayBkb2VzIG5vdCBwZXJmb3JtIGFueSBiZXR0ZXIgdGhhbiBhbiB1bmZpbHRlcmVkIG9iamVjdCB3YWxrOyBhbGwKK3JlYWNoYWJsZSBvYmplY3RzIGFyZSB3YWxrZWQgaW4gb3JkZXIgdG8gcG9wdWxhdGUgdGhlIGxpc3QuCisKK0ZpcnN0LCBhZGQgdGhlIGBzdHJ1Y3Qgb2lkc2V0YCBhbmQgcmVsYXRlZCBpdGVtcyB3ZSB3aWxsIHVzZSB0byBpdGVyYXRlIGl0OgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoCisJLi4uCisKKwlzdHJ1Y3Qgb2lkc2V0IG9taXR0ZWQ7CisJc3RydWN0IG9pZHNldF9pdGVyIG9pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBOVUxMOworCWludCBvbWl0dGVkX2NvdW50ID0gMDsKKwlvaWRzZXRfaW5pdCgmb21pdHRlZCwgMCk7CisKKwkuLi4KKy0tLS0KKworTW9kaWZ5IHRoZSBjYWxsIHRvIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB0byBpbmNsdWRlIHlvdXIgYG9taXR0ZWRgCitvYmplY3Q6CisKKy0tLS0KKwkuLi4KKworCQl0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgmZmlsdGVyX29wdGlvbnMsIHJldiwKKwkJCXdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMLCAmb21pdHRlZCk7CisKKwkuLi4KKy0tLS0KKworVGhlbiwgYWZ0ZXIgeW91ciB0cmF2ZXJzYWwsIHRoZSBgb2lkc2V0YCB0cmF2ZXJzYWwgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KK0NvdW50IGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gYW5kIG1vZGlmeSB0aGUgcHJpbnQgc3RhdGVtZW50OgorCistLS0tCisJLyogQ291bnQgdGhlIG9taXR0ZWQgb2JqZWN0cy4gKi8KKwlvaWRzZXRfaXRlcl9pbml0KCZvbWl0dGVkLCAmb2l0KTsKKworCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmb2l0KSkpCisJCW9taXR0ZWRfY291bnQrKzsKKworCXByaW50ZigiY29tbWl0cyAlZFxuYmxvYnMgJWRcbnRhZ3MgJWRcbnRyZWVzJWRcbm9taXR0ZWQgJWRcbiIsCisJCWNvbW1pdF9jb3VudCwgYmxvYl9jb3VudCwgdGFnX2NvdW50LCB0cmVlX2NvdW50LCBvbWl0dGVkX2NvdW50KTsKKy0tLS0KKworQnkgcnVubmluZyB5b3VyIHdhbGsgd2l0aCBhbmQgd2l0aG91dCB0aGUgZmlsdGVyLCB5b3Ugc2hvdWxkIGZpbmQgdGhhdCB0aGUgdG90YWwKK29iamVjdCBjb3VudCBpbiBlYWNoIGNhc2UgaXMgaWRlbnRpY2FsLiBZb3UgY2FuIGFsc28gdGltZSBlYWNoIGludm9jYXRpb24gb2YKK3RoZSBgd2Fsa2VuYCBzdWJjb21tYW5kLCB3aXRoIGFuZCB3aXRob3V0IGBvbWl0dGVkYCBiZWluZyBwYXNzZWQgaW4sIHRvIGNvbmZpcm0KK3RvIHlvdXJzZWxmIHRoZSBydW50aW1lIGltcGFjdCBvZiB0cmFja2luZyBhbGwgb21pdHRlZCBvYmplY3RzLgorCis9PT0gQ2hhbmdpbmcgdGhlIE9yZGVyCisKK0ZpbmFsbHksIGxldCdzIGRlbW9uc3RyYXRlIHRoYXQgeW91IGNhbiBhbHNvIHJlb3JkZXIgd2Fsa3Mgb2YgYWxsIG9iamVjdHMsIG5vdAoranVzdCB3YWxrcyBvZiBjb21taXRzLiBGaXJzdCwgd2UnbGwgbWFrZSBvdXIgaGFuZGxlcnMgY2hhdHRpZXIgLSBtb2RpZnkKK2B3YWxrZW5fc2hvd19jb21taXQoKWAgYW5kIGB3YWxrZW5fc2hvd19vYmplY3QoKWAgdG8gcHJpbnQgdGhlIG9iamVjdCBhcyB0aGV5CitnbzoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNtdCwgdm9pZCAqYnVmKQoreworCXRyYWNlX3ByaW50ZigiY29tbWl0OiAlc1xuIiwgb2lkX3RvX2hleCgmY210LT5vYmplY3Qub2lkKSk7CisJY29tbWl0X2NvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtlbl9zaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqYnVmKQoreworCXRyYWNlX3ByaW50ZigiJXM6ICVzXG4iLCB0eXBlX25hbWUob2JqLT50eXBlKSwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKworCS4uLgorfQorLS0tLQorCitOT1RFOiBTaW5jZSB3ZSB3aWxsIGJlIGV4YW1pbmluZyB0aGlzIG91dHB1dCBkaXJlY3RseSBhcyBodW1hbnMsIHdlJ2xsIHVzZQorYHRyYWNlX3ByaW50ZigpYCBoZXJlLiBBZGRpdGlvbmFsbHksIHNpbmNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBzaWduaWZpY2FudAorbnVtYmVyIG9mIHByaW50ZWQgbGluZXMsIHVzaW5nIGB0cmFjZV9wcmludGYoKWAgd2lsbCBhbGxvdyB1cyB0byBlYXNpbHkgc2lsZW5jZQordGhvc2UgbGluZXMgd2l0aG91dCBoYXZpbmcgdG8gcmVjb21waWxlLgorCisoTGVhdmUgdGhlIGNvdW50ZXIgaW5jcmVtZW50IGxvZ2ljIGluIHBsYWNlLikKKworV2l0aCBvbmx5IHRoYXQgY2hhbmdlLCBydW4gYWdhaW4gKGJ1dCBzYXZlIHlvdXJzZWxmIHNvbWUgc2Nyb2xsYmFjayk6CisKKy0tLS0KKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbiB8IGhlYWQgLW4gMTAKKy0tLS0KKworVGFrZSBhIGxvb2sgYXQgdGhlIHRvcCBjb21taXQgd2l0aCBgZ2l0IHNob3dgIGFuZCB0aGUgb2JqZWN0IElEIHlvdSBwcmludGVkOyBpdAorc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgb2YgYGdpdCBzaG93IEhFQURgLgorCitOZXh0LCBsZXQncyBjaGFuZ2UgYSBzZXR0aW5nIG9uIG91ciBgc3RydWN0IHJldl9pbmZvYCB3aXRoaW4KK2B3YWxrZW5fb2JqZWN0X3dhbGsoKWAuIEZpbmQgd2hlcmUgeW91J3JlIGNoYW5naW5nIHRoZSBvdGhlciBzZXR0aW5ncyBvbiBgcmV2YCwKK3N1Y2ggYXMgYHJldi0+dHJlZV9vYmplY3RzYCBhbmQgYHJldi0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXJgLCBhbmQgYWRkIHRoZQorYHJldmVyc2VgIHNldHRpbmcgYXQgdGhlIGJvdHRvbToKKworLS0tLQorCS4uLgorCisJcmV2LT50cmVlX29iamVjdHMgPSAxOworCXJldi0+YmxvYl9vYmplY3RzID0gMTsKKwlyZXYtPnRhZ19vYmplY3RzID0gMTsKKwlyZXYtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyID0gMTsKKwlyZXYtPnJldmVyc2UgPSAxOworCisJLi4uCistLS0tCisKK05vdywgcnVuIGFnYWluLCBidXQgdGhpcyB0aW1lLCBsZXQncyBncmFiIHRoZSBsYXN0IGhhbmRmdWwgb2Ygb2JqZWN0cyBpbnN0ZWFkCitvZiB0aGUgZmlyc3QgaGFuZGZ1bDoKKworLS0tLQorJCBtYWtlCiskIEdJVF9UUkFDRT0xIC4vYmluLXdyYXBwZXJzIGdpdCB3YWxrZW4gfCB0YWlsIC1uIDEwCistLS0tCisKK1RoZSBsYXN0IGNvbW1pdCBvYmplY3QgZ2l2ZW4gc2hvdWxkIGhhdmUgdGhlIHNhbWUgT0lEIGFzIHRoZSBvbmUgd2Ugc2F3IGF0IHRoZQordG9wIGJlZm9yZSwgYW5kIHJ1bm5pbmcgYGdpdCBzaG93IDxvaWQ+YCB3aXRoIHRoYXQgT0lEIHNob3VsZCBnaXZlIHlvdSBhZ2FpbgordGhlIHNhbWUgcmVzdWx0cyBhcyBgZ2l0IHNob3cgSEVBRGAuIEZ1cnRoZXJtb3JlLCBpZiB5b3UgcnVuIGFuZCBleGFtaW5lIHRoZQorZmlyc3QgdGVuIGxpbmVzIGFnYWluICh3aXRoIGBoZWFkYCBpbnN0ZWFkIG9mIGB0YWlsYCBsaWtlIHdlIGRpZCBiZWZvcmUgYXBwbHlpbmcKK3RoZSBgcmV2ZXJzZWAgc2V0dGluZyksIHlvdSBzaG91bGQgc2VlIHRoYXQgbm93IHRoZSBmaXJzdCBjb21taXQgcHJpbnRlZCBpcyB0aGUKK2luaXRpYWwgY29tbWl0LCBgZTgzYzUxNjNgLgorCis9PSBXcmFwcGluZyBVcAorCitMZXQncyByZXZpZXcuIEluIHRoaXMgdHV0b3JpYWwsIHdlOgorCistIEJ1aWx0IGEgY29tbWl0IHdhbGsgZnJvbSB0aGUgZ3JvdW5kIHVwCistIEVuYWJsZWQgYSBncmVwIGZpbHRlciBmb3IgdGhhdCBjb21taXQgd2FsaworLSBDaGFuZ2VkIHRoZSBzb3J0IG9yZGVyIG9mIHRoYXQgZmlsdGVyZWQgY29tbWl0IHdhbGsKKy0gQnVpbHQgYW4gb2JqZWN0IHdhbGsgKHRhZ3MsIGNvbW1pdHMsIHRyZWVzLCBhbmQgYmxvYnMpIGZyb20gdGhlIGdyb3VuZCB1cAorLSBMZWFybmVkIGhvdyB0byBhZGQgYSBmaWx0ZXItc3BlYyB0byBhbiBvYmplY3Qgd2FsaworLSBDaGFuZ2VkIHRoZSBkaXNwbGF5IG9yZGVyIG9mIHRoZSBmaWx0ZXJlZCBvYmplY3Qgd2FsawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dAppbmRleCBkYWY0YmRiLi5kNmQ0MmYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dApAQCAtMjUxLDcgKzI1MSw3IEBACiAgICB0aGUgcmVwb3NpdG9yeSB3aGVuIHRoYXQgaGFwcGVucy4KIAogCi0qIENydWZ0cyByZW1vdmFsCisqIENydWZ0IHJlbW92YWwKIAogIC0gV2UgdXNlZCB0byBzYXkgIm9sZCBjb21taXRzIGFyZSByZXRyaWV2YWJsZSB1c2luZyByZWZsb2cgYW5kCiAgICAnbWFzdGVyQHt5ZXN0ZXJkYXl9JyBzeW50YXggYXMgbG9uZyBhcyB5b3UgaGF2ZW4ndCBydW4KQEAgLTM3OSw3ICszNzksNyBAQAogIC0gVGhlIHZhbHVlIG9mIGkxOG4uY29tbWl0ZW5jb2RpbmcgaW4gdGhlIG9yaWdpbmF0aW5nCiAgICByZXBvc2l0b3J5IGlzIHJlY29yZGVkIGluIHRoZSBjb21taXQgb2JqZWN0IG9uIHRoZSAiZW5jb2RpbmciCiAgICBoZWFkZXIsIGlmIGl0IGlzIG5vdCBVVEYtOC4gIGdpdC1sb2cgYW5kIGZyaWVuZHMgbm90aWNlIHRoaXMsCi0gICBhbmQgcmVlbmNvZGVzIHRoZSBtZXNzYWdlIHRvIHRoZSBsb2cgb3V0cHV0IGVuY29kaW5nIHdoZW4KKyAgIGFuZCByZS1lbmNvZGVzIHRoZSBtZXNzYWdlIHRvIHRoZSBsb2cgb3V0cHV0IGVuY29kaW5nIHdoZW4KICAgIGRpc3BsYXlpbmcsIGlmIHRoZXkgYXJlIGRpZmZlcmVudC4gIFRoZSBsb2cgb3V0cHV0IGVuY29kaW5nCiAgICBpcyBkZXRlcm1pbmVkIGJ5ICJnaXQgbG9nIC0tZW5jb2Rpbmc9PGVuY29kaW5nPiIsCiAgICBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvbmZpZ3VyYXRpb24sIG9yIGkxOG4uY29tbWl0ZW5jb2RpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKaW5kZXggYWQwNjBmNC4uOTgwYWRmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKQEAgLTExLDcgKzExLDcgQEAKIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKIAogICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCi0gIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KIAogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQogdHJhbnNpdGlvbiBwbGFuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLnR4dAppbmRleCA0MThjNjg1Li40YmNmZjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLnR4dApAQCAtMTEsNyArMTEsNyBAQAogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgogCiAgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKLSAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKyAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLwogCiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCiB0cmFuc2l0aW9uIHBsYW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0CmluZGV4IDdhOTA0NDEuLmEyYTM0YjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0CkBAIC0xMSw3ICsxMSw3IEBACiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CiAKICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQotICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCiAKIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKIHRyYW5zaXRpb24gcGxhbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0CmluZGV4IGQzYTJhM2UuLjM0NDMzM2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dApAQCAtMTAsNyArMTAsNyBAQAogCiAgKiAiZ2l0IHBydW5lLXBhY2tlZCIgZ2F2ZSBwcm9ncmVzcyBvdXRwdXQgZXZlbiB3aGVuIGl0cyBzdGFuZGFyZCBlcnJvciBpcwogICAgbm90IGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsOyB0aGlzIGNhdXNlZCBjcm9uIGpvYnMgdGhhdCBydW4gaXQgdG8KLSAgIHByb2R1Y2UgY3J1ZnRzLgorICAgcHJvZHVjZSBjcnVmdC4KIAogICogImdpdCBwYWNrLW9iamVjdHMgLS1hbGwtcHJvZ3Jlc3MiIGlzIGFuIG9wdGlvbiB0byBhc2sgcHJvZ3Jlc3Mgb3V0cHV0CiAgICBmcm9tIHdyaXRlLW9iamVjdCBwaGFzZSBfaWZfIHByb2dyZXNzIG91dHB1dCB3ZXJlIHRvIGJlIHByb2R1Y2VkLCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQKaW5kZXggZWUxNDFjMS4uNmM3ZjdkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQKQEAgLTIyLDcgKzIyLDcgQEAKIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKIAogICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCi0gIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KIAogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQogdHJhbnNpdGlvbiBwbGFuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dAppbmRleCBjNTBiNTljLi4zZWQxZTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dApAQCAtNjQsNyArNjQsNyBAQAogICAgUGxlYXNlIHJlZmVyIHRvOgogCiAgICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCi0gICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLwogCiAgICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCiAgICB0cmFuc2l0aW9uIHByb2Nlc3MgdGhhdCBhbHJlYWR5IHRvb2sgcGxhY2Ugc28gZmFyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQKaW5kZXggZmNiNDZjYS4uNzNlZDJiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0CkBAIC0zNCw3ICszNCw3IEBACiAgKiAiZ2l0IHN0YXR1cyIgaW4gMS43LjAgbGFja2VkIHRoZSBvcHRpbWl6YXRpb24gd2UgdXNlZCB0byBoYXZlIGluIDEuNi5YIHNlcmllcwogICAgdG8gc3BlZWQgdXAgc2Nhbm5pbmcgb2YgbGFyZ2Ugd29ya2luZyB0cmVlLgogCi0gKiAiZ2l0d2ViIiBkaWQgbm90IGRpYWdub3NlIHBhcnNpbmcgZXJyb3JzIHByb3Blcmx5IHdoaWxlIHJlYWRpbmcgdGlzIGNvbmZpZ3VyYXRpb24KKyAqICJnaXR3ZWIiIGRpZCBub3QgZGlhZ25vc2UgcGFyc2luZyBlcnJvcnMgcHJvcGVybHkgd2hpbGUgcmVhZGluZyBpdHMgY29uZmlndXJhdGlvbgogICAgZmlsZS4KIAogQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CmluZGV4IDMyNjY3MGQuLjU3NTk3ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CkBAIC03LDcgKzcsNyBAQAogICogVGhlIG1lc3NhZ2UgZmlsZSBmb3IgU3dlZGlzaCB0cmFuc2xhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgogCiAgKiBBIG5hbWUgdGFrZW4gZnJvbSBtYWlsbWFwIHdhcyBjb3BpZWQgaW50byBhbiBpbnRlcm5hbCBidWZmZXIKLSAgIGluY29ycmVjdGx5IGFuZCBjb3VsZCBvdmVydW4gdGhlIGJ1ZmZlciBpZiBpdCBpcyB0b28gbG9uZy4KKyAgIGluY29ycmVjdGx5IGFuZCBjb3VsZCBvdmVycnVuIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuCiAKICAqIEEgbWFsZm9ybWVkIGNvbW1pdCBvYmplY3QgdGhhdCBoYXMgYSBoZWFkZXIgbGluZSBjaG9tcGVkIGluIHRoZQogICAgbWlkZGxlIGNvdWxkIGtpbGwgZ2l0IHdpdGggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CmluZGV4IGVjZGE0MjcuLjRiODIyOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CkBAIC0yNSw3ICsyNSw3IEBACiAgICBpdHMgQWNjZXB0LUVuY29kaW5nIGhlYWRlci4KIAogICogImdpdCByZWNlaXZlLXBhY2siICh0aGUgY291bnRlcnBhcnQgdG8gImdpdCBwdXNoIikgZGlkIG5vdCBnaXZlCi0gICBwcm9ncmVzcyBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZyBvYmplY3RzIGl0IHJlY2VpdmVkIHRvIHRoZSBwdXNlcgorICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgdXNlcgogICAgd2hlbiBydW4gb3ZlciB0aGUgc21hcnQtaHR0cCBwcm90b2NvbC4KIAogICogImdpdCBzdGF0dXMiIGhvbm9yZWQgdGhlIGlnbm9yZT1kaXJ0eSBzZXR0aW5ncyBpbiAuZ2l0bW9kdWxlcyBidXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CmluZGV4IDljMDMzNTMuLjFkMjRlZGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4zLnR4dApAQCAtMjIsNyArMjIsNyBAQAogICogImdpdCBsb2cgLS1zdGRpbiBwYXRoIiB3aXRoIGFuIGlucHV0IHRoYXQgaGFzIGFkZGl0aW9uYWwgcGF0aHNwZWMKICAgIHVzZWQgdG8gY29ycnVwdCBtZW1vcnkuCiAKLSAqICJnaXQgc2VuZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIikgb3ZlciBzbWFsdC1IVFRQIHByb3RvY29sIGNvdWxkCisgKiAiZ2l0IHNlbmQtcGFjayIgKGhlbmNlICJnaXQgcHVzaCIpIG92ZXIgc21hcnQtSFRUUCBwcm90b2NvbCBjb3VsZAogICAgZGVhZGxvY2sgd2hlbiB0aGUgY2xpZW50IHNpZGUgcGFjay1vYmplY3QgZGllZCBlYXJseS4KIAogICogQ29tcHJlc3NlZCB0YXJiYWxsIGdpdHdlYiBnZW5lcmF0ZXMgdXNlZCB0byBiZSBtYWRlIHdpdGggdGhlIHRpbWVzdGFtcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dAppbmRleCA0Mzg4M2MxLi42M2Q2ZTRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dApAQCAtMjMzLDcgKzIzMyw3IEBACiAgICB0b2dldGhlciwgbWlzZGV0ZWN0ZWQgYnJhbmNoZXMuCiAKICAqICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IHRvICJnaXQgcHVzaCIpIGRpZCBub3QgZ2l2ZQotICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgcHVzZXIKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHVzZXIKICAgIHdoZW4gcnVuIG92ZXIgdGhlIHNtYXJ0LWh0dHAgcHJvdG9jb2wuCiAKICAqIFdoZW4geW91IG1pc3NwZWxsIHRoZSBjb21tYW5kIG5hbWUgeW91IGdpdmUgdG8gdGhlICJleGVjIiBhY3Rpb24gaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0CmluZGV4IDk2MDkwZWYuLmMyNTdiZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dApAQCAtMTUsNyArMTUsNyBAQAogICAgaW4gMS44LjQtcmMxKS4KIAogICogImdpdCByZWJhc2UgLWkiIGFuZCBvdGhlciBzY3JpcHRlZCBjb21tYW5kcyB3ZXJlIGZlZWRpbmcgYQotICAgcmFuZG9tLCBkYXRhIGRlcGVuZGFudCBlcnJvciBtZXNzYWdlIHRvICdlY2hvJyBhbmQgZXhwZWN0aW5nIGl0CisgICByYW5kb20sIGRhdGEgZGVwZW5kZW50IGVycm9yIG1lc3NhZ2UgdG8gJ2VjaG8nIGFuZCBleHBlY3RpbmcgaXQKICAgIHRvIGNvbWUgb3V0IGxpdGVyYWxseS4KIAogICogU2V0dGluZyB0aGUgInN1Ym1vZHVsZS48bmFtZT4ucGF0aCIgdmFyaWFibGUgdG8gdGhlIGVtcHR5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0CmluZGV4IDAyZjY4MWIuLjI1NWUxODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0CkBAIC01OCw3ICs1OCw3IEBACiAgICBjcmVkZW50aWFsIGhlbHBlciBpbnRlcmZhY2UgZnJvbSBHaXQucG0uCiAKICAqIFVwZGF0ZSBidWlsZCBmb3IgQ3lnd2luIDEuWzU3XS4gIFRvcnN0ZW4gQsO2Z2Vyc2hhdXNlbiByZXBvcnRzIHRoYXQKLSAgIHRoaXMgaXMgZmluZSB3aXRoIEN5Z3dpbiAxLjcgKCRnbWFuZS8yMjU4MjQpIHNvIGxldCdzIHRyeSBtb3ZpbmcgaXQKKyAgIHRoaXMgaXMgZmluZSB3aXRoIEN5Z3dpbiAxLjcgKGNmLiA8NTFBNjA2QTAuNTA2MDEwMUB3ZWIuZGU+KSBzbyBsZXQncyB0cnkgbW92aW5nIGl0CiAgICBhaGVhZC4KIAogICogVGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvIHRhbGsgdG8ga2V5Y2hhaW4gb24gT1MgWCAoaW4gY29udHJpYi8pIGhhcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dAppbmRleCBhY2M5ZWJiLi4wZGZiMTdjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dApAQCAtMTMsNyArMTMsNyBAQAogICAgdGhleSBhcmUgbmV3IGVub3VnaCB0byBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KIAogICogImdpdCBwYWNrLW9iamVjdHMiIGZvcmdvdCB0byBkaXNhYmxlIHRoZSBjb2RlcGF0aCB0byBnZW5lcmF0ZQotICAgb2JqZWN0IHJlY2hlYWJpbGl0eSBiaXRtYXAgd2hlbiBpdCBuZWVkcyB0byBzcGxpdCB0aGUgcmVzdWx0aW5nCisgICBvYmplY3QgcmVhY2hhYmlsaXR5IGJpdG1hcCB3aGVuIGl0IG5lZWRzIHRvIHNwbGl0IHRoZSByZXN1bHRpbmcKICAgIHBhY2suCiAKICAqICJnaXR3ZWIiIHVzZWQgZGVwcmVjYXRlZCBDR0k6OnN0YXJ0ZnJvbSwgd2hpY2ggd2FzIHJlbW92ZWQgZnJvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0CmluZGV4IGY0ZGEyOGEuLjM3OTJiN2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQKQEAgLTQ3OCw3ICs0NzgsNyBAQAogICogT25lIHBhcnQgb2YgImdpdCBhbSIgaGFkIGFuIG9kZGJhbGwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FsbGVkCiAgICBzdHVmZiBmcm9tIG91dHNpZGUgImhpcyIgYXMgb3Bwb3NlZCB0byBjYWxsaW5nIHdoYXQgd2UgaGF2ZSAib3VycyIsCiAgICB3aGljaCB3YXMgbm90IGdlbmRlci1uZXV0cmFsIGFuZCBhbHNvIGluY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mCi0gICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxsIGNhbGxlZCAidGhlaXJzIiBpbgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbHkgY2FsbGVkICJ0aGVpcnMiIGluCiAgICBjb250cmFzdCB0byAib3VycyIuCiAKICAqICJnaXQgYmxhbWUgZmlsZSIgYWxsb3dlZCB0aGUgbGluZWFnZSBvZiBsaW5lcyBpbiB0aGUgdW5jb21taXR0ZWQsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQKaW5kZXggYzRkNDM5Ny4uYWJiZDMzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dApAQCAtODYsNyArODYsNyBAQAogICAgYnkgcmVmdXNpbmcgdG8gY2hlY2sgb3V0IGEgYnJhbmNoIHRoYXQgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBpbgogICAgYW5vdGhlciB3b3JrdHJlZS4gIEhvd2V2ZXIsIHRoaXMgYWxzbyBwcmV2ZW50ZWQgY2hlY2tpbmcgb3V0IGEKICAgIGJyYW5jaCwgd2hpY2ggaXMgZGVzaWduYXRlZCBhcyB0aGUgcHJpbWFyeSBicmFuY2ggb2YgYSBiYXJlCi0gICByZW9wc2l0b3J5LCBpbiBhIHdvcmt0cmVlIHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBiYXJlCisgICByZXBvc2l0b3J5LCBpbiBhIHdvcmt0cmVlIHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBiYXJlCiAgICByZXBvc2l0b3J5LiAgVGhlIGNoZWNrIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBhbGxvdyBpdC4KIAogICogImdpdCByZWJhc2UiIGltbWVkaWF0ZWx5IGFmdGVyICJnaXQgY2xvbmUiIGZhaWxlZCB0byBmaW5kIHRoZSBmb3JrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMS50eHQKaW5kZXggOWNkMTRjOC4uN2QzNWNmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGZyb20gYSBzdWJkaXJlY3RvcnkgbmV2ZXIgd29ya2VkLiBUaGlzCiAgICBoYXMgYmVlbiBmaXhlZC4KIAotICogImdpdCBwNCIgdGhhdCB0cmFja3MgbXVsdGlsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CisgKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aXBsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CiAgICB0aGF0IHRvdWNoZXMgZmlsZXMgaW4gdGhlc2UgbXVsdGlwbGUgcGF0aHMgYXMgb25lIGNvbW1pdCwgZm9sbG93ZWQKICAgIGJ5IG1hbnkgZW1wdHkgY29tbWl0cy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4wLnR4dAppbmRleCBlZjhiOTdkLi5kMmY2YTgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0CkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgZnJvbSBhIHN1YmRpcmVjdG9yeSBuZXZlciB3b3JrZWQuIFRoaXMKICAgIGhhcyBiZWVuIGZpeGVkLgogCi0gKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aWxlIHA0IHBhdGhzIGltcG9ydGVkIGEgc2luZ2xlIGNoYW5nZWxpc3QKKyAqICJnaXQgcDQiIHRoYXQgdHJhY2tzIG11bHRpcGxlIHA0IHBhdGhzIGltcG9ydGVkIGEgc2luZ2xlIGNoYW5nZWxpc3QKICAgIHRoYXQgdG91Y2hlcyBmaWxlcyBpbiB0aGVzZSBtdWx0aXBsZSBwYXRocyBhcyBvbmUgY29tbWl0LCBmb2xsb3dlZAogICAgYnkgbWFueSBlbXB0eSBjb21taXRzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0CmluZGV4IGFhOTlkNGIuLjJhNDdiNGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgYmVlbiBjaGFuZ2VkIHRvIGVuYWJsZSAiLS1kZWNvcmF0ZSIuCiAKICAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IHN0YXR1cyAtLXNob3J0IiBoYXMgYmVlbiBleHRlbmRlZCB0byBzaG93Ci0gICB2YXJpb3VzIGtpbmRzIG9mIGRpcnR5bmVzcyBpbiBzdWJtb2R1bGVzIGRpZmZlcmVudGx5OyBpbnN0ZWFkIG9mIHRvCisgICB2YXJpb3VzIGtpbmRzIG9mIGRpcnRpbmVzcyBpbiBzdWJtb2R1bGVzIGRpZmZlcmVudGx5OyBpbnN0ZWFkIG9mIHRvCiAgICAiTSIgZm9yIG1vZGlmaWVkLCAnbScgYW5kICc/JyBjYW4gYmUgc2hvd24gdG8gc2lnbmFsIGNoYW5nZXMgb25seQogICAgdG8gdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGUgc3VibW9kdWxlIGJ1dCBub3QgdGhlIGNvbW1pdCB0aGF0IGlzCiAgICBjaGVja2VkIG91dC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dAppbmRleCA1ZDc2YWQ1Li4zODRlNGRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0CkBAIC0yNSw3ICsyNSw3IEBACiAgKiBUaGUgY29kZSB0byBwaWNrIHVwIGFuZCBleGVjdXRlIGNvbW1hbmQgYWxpYXMgZGVmaW5pdGlvbiBmcm9tIHRoZQogICAgY29uZmlndXJhdGlvbiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUgYW5kCiAgICB0aGVuIGNvbWUgYmFjayB3aGVuIHRoZSBleHBhbmRlZCBhbGlhcyB3YXMgZXhlY3V0ZWQsIHdoaWNoIHdhcwotICAgdW5uZWNlc3NhcmlseWwgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQorICAgdW5uZWNlc3NhcmlseSBjb21wbGV4LiAgQXR0ZW1wdCB0byBzaW1wbGlmeSB0aGUgbG9naWMgYnkgdXNpbmcgdGhlCiAgICBlYXJseS1jb25maWcgbWVjaGFuaXNtIHRoYXQgZG9lcyBub3QgY2hkaXIgYXJvdW5kLgogCiAgKiAiZ2l0IGFkZCAtcCIgd2VyZSB1cGRhdGVkIGluIDIuMTIgdGltZWZyYW1lIHRvIGNvcGUgd2l0aCBjdXN0b20KQEAgLTM1LDcgKzM1LDcgQEAKICAqIEZpeCBhIHJlY2VudCByZWdyZXNzaW9uIHRvICJnaXQgcmViYXNlIC1pIiBhbmQgYWRkIHRlc3RzIHRoYXQgd291bGQKICAgIGhhdmUgY2F1Z2h0IGl0IGFuZCBvdGhlcnMuCiAKLSAqIEFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzIGluIHBhY2stYml0bWFwIGNvZGUgYWhzIGJlZW4gY29ycmVjdGVkLgorICogQW4gdW5hbGlnbmVkIDMyLWJpdCBhY2Nlc3MgaW4gcGFjay1iaXRtYXAgY29kZSBoYXMgYmVlbiBjb3JyZWN0ZWQuCiAKICAqIFRpZ2h0ZW4gZXJyb3IgY2hlY2tzIGZvciBpbnZhbGlkICJnaXQgYXBwbHkiIGlucHV0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMC50eHQKaW5kZXggNDI0NmM2OC4uMjcxMWEyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dApAQCAtMTQxLDcgKzE0MSw3IEBACiAgKiBTb21lIHBsYXRmb3JtcyBoYXZlIHVsb25nIHRoYXQgaXMgc21hbGxlciB0aGFuIHRpbWVfdCwgYW5kIG91cgogICAgaGlzdG9yaWNhbCB1c2Ugb2YgdWxvbmcgZm9yIHRpbWVzdGFtcCB3b3VsZCBtZWFuIHRoZXkgY2Fubm90CiAgICByZXByZXNlbnQgc29tZSB0aW1lc3RhbXAgdGhhdCB0aGUgcGxhdGZvcm0gYWxsb3dzLiAgSW52ZW50IGEKLSAgIHNlcGFyYXRlIGFuZCBkZWRpY2F0ZWQgdGltZXN0YW1wX3QgKHNvIHRoYXQgd2UgY2FuIGRpc3RpbmdpdWlzaAorICAgc2VwYXJhdGUgYW5kIGRlZGljYXRlZCB0aW1lc3RhbXBfdCAoc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2gKICAgIHRpbWVzdGFtcHMgYW5kIGEgdmFuaWxsYSB1bG9uZ3MsIHdoaWNoIGFsb25nIGlzIGFscmVhZHkgYSBnb29kCiAgICBtb3ZlKSwgYW5kIHRoZW4gZGVjbGFyZSB1aW50bWF4X3QgaXMgdGhlIHR5cGUgdG8gYmUgdXNlZCBhcyB0aGUKICAgIHRpbWVzdGFtcF90LgpAQCAtNDQyLDcgKzQ0Miw3IEBACiAgKiBUaGUgY29kZSB0byBwaWNrIHVwIGFuZCBleGVjdXRlIGNvbW1hbmQgYWxpYXMgZGVmaW5pdGlvbiBmcm9tIHRoZQogICAgY29uZmlndXJhdGlvbiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUgYW5kCiAgICB0aGVuIGNvbWUgYmFjayB3aGVuIHRoZSBleHBhbmRlZCBhbGlhcyB3YXMgZXhlY3V0ZWQsIHdoaWNoIHdhcwotICAgdW5uZWNlc3NhcmlseWwgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQorICAgdW5uZWNlc3NhcmlseSBjb21wbGV4LiAgQXR0ZW1wdCB0byBzaW1wbGlmeSB0aGUgbG9naWMgYnkgdXNpbmcgdGhlCiAgICBlYXJseS1jb25maWcgbWVjaGFuaXNtIHRoYXQgZG9lcyBub3QgY2hkaXIgYXJvdW5kLgogCiAgKiBGaXggY29uZmlndXJhdGlvbiBjb2RlcGF0aCB0byBwYXkgcHJvcGVyIGF0dGVudGlvbiB0byBjb21tb25kaXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dAppbmRleCAwYzgxYzU5Li5iNDc0NzgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjAudHh0CkBAIC00MDcsNyArNDA3LDcgQEAKICAgIChtZXJnZSBlZWYzZGY1YTkzIGJ3L3BhdGhzcGVjLW1hdGNoLXN1Ym1vZHVsZS1ib3VuZGFyeSBsYXRlciB0byBtYWludCkuCiAKICAqIEFtZW5kaW5nIGNvbW1pdHMgaW4gZ2l0LWd1aSBicm9rZSB0aGUgYXV0aG9yIG5hbWUgdGhhdCBpcyBub24tYXNjaWkKLSAgIGR1ZSB0byBpbmNvcnJlY3QgZW5jb25kaW5nIGNvbnZlcnNpb24uCisgICBkdWUgdG8gaW5jb3JyZWN0IGVuY29kaW5nIGNvbnZlcnNpb24uCiAKICAqIFJlY2VudCB1cGRhdGUgdG8gdGhlIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGNvZGUgYnJva2UgImRpZmYtdHJlZSIKICAgIGJ5IGFjY2lkZW50YWxseSBzdG9wcGluZyB0byByZWFkIGZyb20gdGhlIGluZGV4IHVwZnJvbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQKaW5kZXggNjRhMGJjYi4uZjAxMjFhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dApAQCAtMjQsNyArMjQsNyBAQAogCiAgKiBUaGUgaHR0cCB0cmFjaW5nIGNvZGUsIG9mdGVuIHVzZWQgdG8gZGVidWcgY29ubmVjdGlvbiBpc3N1ZXMsCiAgICBsZWFybmVkIHRvIHJlZGFjdCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSBpdHMgb3V0cHV0Ci0gICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyYWJsZS4KKyAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJlYWJsZS4KIAogICogQ3Jhc2ggZml4IGZvciBhIGNvcm5lciBjYXNlIHdoZXJlIGFuIGVycm9yIGNvZGVwYXRoIHRyaWVkIHRvIHVubG9jawogICAgd2hhdCBpdCBkaWQgbm90IGFjcXVpcmUgbG9jayBvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dAppbmRleCBjMmNmODkxLi44YjE3YzI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0CkBAIC0yMTYsNyArMjE2LDcgQEAKIAogICogVGhlIGh0dHAgdHJhY2luZyBjb2RlLCBvZnRlbiB1c2VkIHRvIGRlYnVnIGNvbm5lY3Rpb24gaXNzdWVzLAogICAgbGVhcm5lZCB0byByZWRhY3QgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGZyb20gaXRzIG91dHB1dAotICAgc28gdGhhdCBpdCBjYW4gYmUgbW9yZSBzYWZlbHkgc2hhcmFibGUuCisgICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyZWFibGUuCiAgICAobWVyZ2UgOGJhMThlNmZhNCBqdC9odHRwLXJlZGFjdC1jb29raWVzIGxhdGVyIHRvIG1haW50KS4KIAogICogQ3Jhc2ggZml4IGZvciBhIGNvcm5lciBjYXNlIHdoZXJlIGFuIGVycm9yIGNvZGVwYXRoIHRyaWVkIHRvIHVubG9jawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0CmluZGV4IDNlYTI4MGMuLjZjOGEwZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgKG1lcmdlIDAwYTNkYTJhMTMgbmQvcmVtb3ZlLWlnbm9yZS1lbnYtZmllbGQgbGF0ZXIgdG8gbWFpbnQpLgogCiAgKiBDb2RlIHRvIGZpbmQgdGhlIGxlbmd0aCB0byB1bmlxdWVseSBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBiYXNlZAotICAgb24gcGFja2ZpbGUgY29udGVudCwgd2hpY2ggaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGR0aW9uLCBoYXMgYmVlbgorICAgb24gcGFja2ZpbGUgY29udGVudCwgd2hpY2ggaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGRpdGlvbiwgaGFzIGJlZW4KICAgIG9wdGltaXplZCB0byB1c2UgdGhlIHNhbWUgZmFuLW91dCB0YWJsZS4KIAogICogVGhlIG1lY2hhbmlzbSB0byB1c2UgcGFyc2Utb3B0aW9ucyBBUEkgdG8gYXV0b21hdGUgdGhlIGNvbW1hbmQgbGluZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0CmluZGV4IGEwNmNjZjYuLjg5MWM3OWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogVGhlIGNvbnZlcnNpb24gdG8gcGFzcyAidGhlX3JlcG9zaXRvcnkiIGFuZCB0aGVuICJhX3JlcG9zaXRvcnkiCiAgICB0aHJvdWdob3V0IHRoZSBvYmplY3QgYWNjZXNzIEFQSSBjb250aW51ZXMuCiAKLSAqIENvbnRpbnVpbmcgd2l0aCB0aGUgaWRlYSB0byBwcm9ncmFtYXRpY2FsbHkgZW51bWVyYXRlIHZhcmlvdXMKKyAqIENvbnRpbnVpbmcgd2l0aCB0aGUgaWRlYSB0byBwcm9ncmFtbWF0aWNhbGx5IGVudW1lcmF0ZSB2YXJpb3VzCiAgICBwaWVjZXMgb2YgZGF0YSByZXF1aXJlZCBmb3IgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24sIHRlYWNoIHRoZQogICAgY29kZWJhc2UgdG8gcmVwb3J0IHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCiAgICBzdWJjb21tYW5kcyBjYXJlIGFib3V0IHRvIGhlbHAgY29tcGxldGUgdGhlbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dAppbmRleCBlNzFmZTNkLi4zZGQ3ZTZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0CkBAIC0xMTksNyArMTE5LDcgQEAKICAgIGFsaWFzIGV4cGFuc2lvbi4KIAogICogVGhlIGRvY3VtZW50YXRpb24gb2YgImdpdCBnYyIgaGFzIGJlZW4gdXBkYXRlZCB0byBtZW50aW9uIHRoYXQgaXQKLSAgIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvICJwcnVuaW5nIGF3YXkgY3J1ZnRzIiBidXQgYWxzbyB1cGRhdGVzCisgICBpcyBubyBsb25nZXIgbGltaXRlZCB0byAicHJ1bmluZyBhd2F5IGNydWZ0IiBidXQgYWxzbyB1cGRhdGVzCiAgICBhbmNpbGxhcnkgZmlsZXMgbGlrZSBjb21taXQtZ3JhcGggYXMgYSBwYXJ0IG9mIHJlcG9zaXRvcnkKICAgIG9wdGltaXphdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjNjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQKQEAgLTAsMCArMSwzMTkgQEAKK0dpdCAyLjI1IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yNAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEEgdHV0b3JpYWwgb24gb2JqZWN0IGVudW1lcmF0aW9uIGhhcyBiZWVuIGFkZGVkLgorCisgKiBUaGUgYnJhbmNoIGRlc2NyaXB0aW9uICgiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iKSBoYXMgYmVlbgorICAgdXNlZCB0byBmaWxsIHRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXJzIGJ5IHRoZSBmb3JtYXQtcGF0Y2gKKyAgIGNvbW1hbmQ7IHRoaXMgaGFzIGJlZW4gZW5oYW5jZWQgc28gdGhhdCB0aGUgc3ViamVjdCBjYW4gYWxzbyBiZQorICAgZmlsbGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgaGFzIGJlZW4gbWFya2VkIGFzIGRlcHJlY2F0ZWQ7IHRoaXMKKyAgIHJlbGVhc2Ugc3RvcHMgYWR2ZXJ0aXNpbmcgaXQgaW4gdGhlICJnaXQgcmViYXNlIC1oIiBvdXRwdXQuCisKKyAqIFRoZSBjb2RlIHRvIGdlbmVyYXRlIG11bHRpLXBhY2sgaW5kZXggbGVhcm5lZCB0byBzaG93IChvciBub3QgdG8KKyAgIHNob3cpIHByb2dyZXNzIGluZGljYXRvcnMuCisKKyAqICJnaXQgYXBwbHkgLS0zd2F5IiBsZWFybmVkIHRvIGhvbm9yIG1lcmdlLmNvbmZsaWN0U3R5bGUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGxpa2UgbWVyZ2VzIHdvdWxkLgorCisgKiBUaGUgY3VzdG9tIGZvcm1hdCBmb3IgImdpdCBsb2cgLS1mb3JtYXQ9PGZvcm1hdD4iIGxlYXJuZWQgdGhlIGwvTAorICAgcGxhY2Vob2xkZXIgdGhhdCBpcyBzaW1pbGFyIHRvIGUvRSB0aGF0IGZpbGxzIGluIHRoZSBlLW1haWwKKyAgIGFkZHJlc3MsIGJ1dCBvbmx5IHRoZSBsb2NhbCBwYXJ0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgJ0AnLgorCisgKiBEb2N1bWVudGF0aW9uIHBhZ2VzIGZvciAiZ2l0IHNob3J0bG9nIiBub3cgbGlzdCBjb21taXQgbGltaXRpbmcKKyAgIG9wdGlvbnMgZXhwbGljaXRseS4KKworICogVGhlIHBhdHRlcm5zIHRvIGRldGVjdCBmdW5jdGlvbiBib3VuZGFyeSBmb3IgRWxpeGlyIGxhbmd1YWdlIGhhcworICAgYmVlbiBhZGRlZC4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0aGF0IHRoZSAiLS1vbnRvIgorICAgb3B0aW9uIG9mICJnaXQgcmViYXNlIiBjYW4gdGFrZSBpdHMgYXJndW1lbnQgYXMgdGhlIHZhbHVlIG9mIHRoZQorICAgb3B0aW9uLgorCisgKiBUaGUgdXNlcmRpZmYgbWFjaGluZXJ5IGhhcyBiZWVuIHRhdWdodCB0aGF0ICJhc3luYyBkZWYiIGlzIGFub3RoZXIKKyAgIHdheSB0byBiZWdpbiBhICJmdW5jdGlvbiIgaW4gUHl0aG9uLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIGxlYXJuZWQgdG8gdGFrZSB0aGUgIi0tbm90ZXM9PHJlZj4iIGFuZCB0aGUKKyAgICItLW5vLW5vdGVzIiBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGNvbW1pdCBub3RlcyBpbmNsdWRlZCBpbiB0aGUKKyAgIGxvZyBtZXNzYWdlIHRoYXQgZ2V0cyBjb21wYXJlZC4KKworICogImdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsIiBydW4gb3V0c2lkZSBvZiBhbnkgd29ya2luZyB0cmVlIGRpZAorICAgbm90IGVycm9yIG91dCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGZldyBjb21tYW5kcyBsZWFybmVkIHRvIHRha2UgdGhlIHBhdGhzcGVjIGZyb20gdGhlCisgICBzdGFuZGFyZCBpbnB1dCBvciBhIG5hbWVkIGZpbGUsIGluc3RlYWQgb2YgdGFraW5nIGl0IGFzIHRoZSBjb21tYW5kCisgICBsaW5lIGFyZ3VtZW50cy4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgYSBmZXcgb3B0aW9ucyB0aGF0IGFyZSBrbm93biBieSAiZ2l0CisgICByZWJhc2UiIHByb3Blci4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgYSBzdWJjb21tYW5kICJzZXQtdXJsIi4KKworICogImdpdCBsb2ciIGZhbWlseSBsZWFybmVkICItLXByZXR0eT1yZWZlcmVuY2UiIHRoYXQgZ2l2ZXMgdGhlIG5hbWUKKyAgIG9mIGEgY29tbWl0IGluIHRoZSBmb3JtYXQgdGhhdCBpcyBvZnRlbiB1c2VkIHRvIHJlZmVyIHRvIGl0IGluIGxvZworICAgbWVzc2FnZXMuCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGFuZAorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSB3YXMgaWxsLWRlc2lnbmVkLiAgVGhlIGRvY3VtZW50YXRpb24gYW5kCisgICBjb2RlIGhhdmUgYmVlbiB0YXVnaHQgdG8gbWFrZSBtb3JlIGNsZWFyIHJlY29tbWVuZGF0aW9ucyB3aGVuIHRoZQorICAgdXNlcnMgc2VlIGZhaWx1cmVzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIERlYnVnZ2luZyBzdXBwb3J0IGZvciBsYXp5IGNsb25pbmcgaGFzIGJlZW4gYSBiaXQgaW1wcm92ZWQuCisKKyAqIE1vdmUgdGhlIGRlZmluaXRpb24gb2YgYSBzZXQgb2YgYml0bWFzayBjb25zdGFudHMgZnJvbSAwY3RhbAorICAgbGl0ZXJhbCB0byAoMVU8PGNvdW50KSBub3RhdGlvbi4KKworICogVGVzdCB1cGRhdGVzIHRvIHByZXBhcmUgZm9yIFNIQS0yIHRyYW5zaXRpb24gY29udGludWVzLgorCisgKiBDcnVmdHkgY29kZSBhbmQgbG9naWMgYWNjdW11bGF0ZWQgb3ZlciB0aW1lIGFyb3VuZCB0aGUgb2JqZWN0CisgICBwYXJzaW5nIGFuZCBsb3ctbGV2ZWwgb2JqZWN0IGFjY2VzcyB1c2VkIGluICJnaXQgZnNjayIgaGF2ZSBiZWVuCisgICBjbGVhbmVkIHVwLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImdpdCBsb2cgLS1ncmFwaCIgZ290IHJlZmFjdG9yZWQgYW5kIHRoZW4gaXRzCisgICBvdXRwdXQgZ290IHNpbXBsaWZpZWQuCisKKyAqIEZvbGxvdyByZWNlbnQgcHVzaCB0byBtb3ZlIEFQSSBkb2NzIGZyb20gRG9jdW1lbnRhdGlvbi8gdG8gaGVhZGVyCisgICBmaWxlcyBhbmQgdXBkYXRlIGNvbmZpZy5oCisKKyAqICJnaXQgYnVuZGxlIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSBwYXJzZSBvcHRpb25zIEFQSS4gICJnaXQKKyAgIGJ1bmRsZSB2ZXJpZnkiIGxlYXJuZWQgIi0tcXVpZXQiIGFuZCAiZ2l0IGJ1bmRsZSBjcmVhdGUiIGxlYXJuZWQKKyAgIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiBIYW5kbGluZyBvZiBjb21taXQgb2JqZWN0cyB0aGF0IHVzZSBub24gVVRGLTggZW5jb2RpbmcgZHVyaW5nCisgICAicmViYXNlIC1pIiBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogVGhlIGJlZ2lubmluZyBvZiByZXdyaXRpbmcgImdpdCBhZGQgLWkiIGluIEMuCisKKyAqIEEgbGFiZWwgdXNlZCBpbiB0aGUgdG9kbyBsaXN0IHRoYXQgYXJlIGdlbmVyYXRlZCBieSAiZ2l0IHJlYmFzZQorICAgLS1yZWJhc2UtbWVyZ2VzIiBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHJlZm5hbWU7IHRoZSBsb2dpYyB0byBjb21lCisgICB1cCB3aXRoIHRoZSBsYWJlbCBoYXMgYmVlbiB0aWdodGVuZWQgdG8gYXZvaWQgbmFtZXMgdGhhdCBjYW5ub3QgYmUKKyAgIHVzZWQgYXMgc3VjaC4KKworICogVGhlIGxvZ2ljIHRvIGF2b2lkIGR1cGxpY2F0ZSBsYWJlbCBuYW1lcyBnZW5lcmF0ZWQgYnkgImdpdCByZWJhc2UKKyAgIC0tcmViYXNlLW1lcmdlcyIgZm9yZ290IHRoYXQgdGhlIG1hY2hpbmVyeSBpdHNlbGYgdXNlcyAib250byIgYXMgYQorICAgbGFiZWwgbmFtZSwgd2hpY2ggbXVzdCBiZSBhdm9pZGVkIGJ5IGF1dG8tZ2VuZXJhdGVkIGxhYmVscywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogV2UgaGF2ZSBoYWQgY29tcGF0aWJpbGl0eSBmYWxsYmFjayBtYWNybyBkZWZpbml0aW9ucyBmb3IgIlBSSXVNQVgiLAorICAgIlBSSXUzMiIsIGV0Yy4gYnV0IGRpZCBub3QgZm9yICJQUklkTUFYIiwgd2hpbGUgdGhlIGNvZGUgdXNlZCB0aGUKKyAgIGxhc3Qgb25lIGFwcGFyZW50bHkgd2l0aG91dCBhbnkgaGljY3VwIHJlcG9ydGVkIHJlY2VudGx5LiAgVGhlCisgICBmYWxsYmFjayBtYWNybyBkZWZpbml0aW9ucyBmb3IgdGhlc2UgPGludHR5cGVzLmg+IG1hY3JvcyB0aGF0IG11c3QKKyAgIGFwcGVhciBpbiBDOTkgc3lzdGVtcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKworICogUmVjZW50bHkgd2UgaGF2ZSBkZWNsYXJlZCB0aGF0IEdJVF9URVNUXyogdmFyaWFibGVzIHRha2UgdGhlCisgICB1c3VhbCBib29sZWFuIHZhbHVlcyAoaXQgdXNlZCB0byBiZSB0aGF0IHNvbWUgdXNlZCAibm9uLWVtcHR5CisgICBtZWFucyB0cnVlIiBhbmQgdGFraW5nIEdJVF9URVNUX1ZBUj1ZZXNQbGVhc2UgYXMgdHJ1ZSk7IG1ha2UKKyAgIHN1cmUgd2Ugbm90aWNlIGFuZCBmYWlsIHdoZW4gbm9uLWJvb2wgc3RyaW5ncyBhcmUgZ2l2ZW4gdG8KKyAgIHRoZXNlIHZhcmlhYmxlcy4KKworICogVXNlcnMgb2Ygb25ld2F5X21lcmdlKCkgKGxpa2UgInJlc2V0IC0taGFyZCIpIGxlYXJuZWQgdG8gdGFrZQorICAgYWR2YW50YWdlIG9mIGZzbW9uaXRvciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsc3RhdCgyKSBjYWxscy4KKworICogUGVyZm9ybWFuY2UgdHdlYWsgb24gImdpdCBwdXNoIiBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkgcmVmcworICAgdGhhdCBwb2ludCBhdCBvYmplY3RzIHdlIGhhdmUgbmV2ZXIgaGVhcmQgb2YuCisKKyAqIFBlcmZUZXN0IGZpeCB0byBhdm9pZCBzdGFsZSByZXN1bHQgbWl4ZWQgdXAgd2l0aCB0aGUgbGF0ZXN0IHJvdW5kCisgICBvZiB0ZXN0IHJlc3VsdHMuCisKKyAqIEhpZGUgbG93ZXItbGV2ZWwgdmVyaWZ5X3NpZ25lZC1idWZmZXIoKSBBUEkgYXMgYSBwdXJlIGhlbHBlciB0bworICAgaW1wbGVtZW50IHRoZSBwdWJsaWMgY2hlY2tfc2lnbmF0dXJlKCkgZnVuY3Rpb24sIGluIG9yZGVyIHRvCisgICBlbmNvdXJhZ2UgbmV3IGNhbGxlcnMgdG8gdXNlIHRoZSBjb3JyZWN0IGFuZCBtb3JlIHN0cmljdAorICAgdmFsaWRhdGlvbi4KKworICogVW5uZWNlc3NhcnkgcmVhZGluZyBvZiBzdGF0ZSB2YXJpYWJsZXMgYmFjayBmcm9tIHRoZSBkaXNrIGR1cmluZworICAgc2VxdWVuY2VyIG9wZXJhdGlvbiBoYXMgYmVlbiByZWR1Y2VkLgorCisgKiBUaGUgY29kZSBoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGdtdGltZSgpIGFuZCBsb2NhbHRpbWUoKSBhbmQgcHJlZmVyCisgICB0aGVpciByZWVudHJhbnQgY291bnRlcnBhcnRzLgorCisgKiAiZ2l0IGFkZCAtaSIgdGhhdCBpcyBnZXR0aW5nIHJld3JpdHRlbiBpbiBDIGhhcyBiZWVuIGV4dGVuZGVkIHRvCisgICBjb3ZlciBzdWJjb21tYW5kcyBvdGhlciB0aGFuIHRoZSAicGF0Y2giLgorCisgKiBJbiBhIHJlcG9zaXRvcnkgd2l0aCBtYW55IHBhY2tmaWxlcywgdGhlIGNvc3Qgb2YgdGhlIHByb2NlZHVyZSB0aGF0CisgICBhdm9pZHMgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgcGFja2ZpbGUgdHdpY2Ugd2FzIHVubmVjZXNzYXJpbHkgaGlnaAorICAgYnkgdXNpbmcgYW4gaW5lZmZpY2llbnQgc2VhcmNoIGFsZ29yaXRobSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisKK0ZpeGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAicmViYXNlIC1pIiBjZWFzZWQgdG8gcnVuIHBvc3QtY29tbWl0IGhvb2sgYnkgbWlzdGFrZSBpbiBhbiBlYXJsaWVyCisgICB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBub3RlcyBjb3B5ICRvcmlnaW5hbCIgb3VnaHQgdG8gY29weSB0aGUgbm90ZXMgYXR0YWNoZWQgdG8gdGhlCisgICBvcmlnaW5hbCBvYmplY3QgdG8gSEVBRCwgYnV0IGEgbWlzdGFrZW4gdGlnaHRlbmluZyB0byBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlciB2YWxpZGF0aW9uIG1hZGUgZWFybGllciBkaXNhYmxlZCB0aGF0IGZlYXR1cmUgYnkgbWlzdGFrZS4KKworICogV2hlbiBhbGwgZmlsZXMgZnJvbSBzb21lIHN1YmRpcmVjdG9yeSB3ZXJlIHJlbmFtZWQgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgdGhlIGRpcmVjdG9yeSByZW5hbWUgaGV1cmlzdGljcyB3b3VsZCBmYWlsIHRvIGRldGVjdCB0aGF0CisgICBhcyBhIHJlbmFtZS9tZXJnZSBvZiB0aGUgc3ViZGlyZWN0b3J5IHRvIHRoZSByb290IGRpcmVjdG9yeSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbi11cCBhbmQgYSBidWdmaXggaW4gdGhlIGxvZ2ljIHVzZWQgdG8gdGVsbCB3b3JrdHJlZSBsb2NhbAorICAgYW5kIHJlcG9zaXRvcnkgZ2xvYmFsIHJlZnMgYXBhcnQuCisgICAobWVyZ2UgZjQ1Zjg4YjJlNCBzZy9kaXItdHJpZS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBpcyBzcGFyc2VseSBjaGVja2VkIG91dAorICAgbWlzdGFrZW5seSByZW1vdmVkIHBhdGhzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFyZWEgb2YgaW50ZXJlc3QuCisgICAobWVyZ2UgNGE1OGMzZDdmNyBqcy91cGRhdGUtaW5kZXgtaWdub3JlLXJlbW92YWwtZm9yLXNraXAtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIEhFQUQubG9jayIgZGlkIG5vdCBnaXZlIHRoZSByaWdodCBwYXRoCisgICB3aGVuIHJ1biBpbiBhIHNlY29uZGFyeSB3b3JrdHJlZS4KKyAgIChtZXJnZSA3NmE1M2Q2NDBmIGpzL2dpdC1wYXRoLWhlYWQtZG90LWxvY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSAtLW5vLWNvbW1pdCIgbmVlZHMgIi0tbm8tZmYiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBtb3ZlCisgICBIRUFELCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgaW4gdGhlIG1hbnVhbCBwYWdlIGZvciAiZ2l0IGJpc2VjdCIuCisgICAobWVyZ2UgOGRkMzI3YjI0NiBtYS9iaXNlY3QtZG9jLXNhbXBsZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgaW50ZXJuYWxseSBjYWxscyAicmVzZXQgLS1oYXJkIiB0aGF0IHNob3VsZCBub3QKKyAgIGRlc2NlbmQgaW50byBzdWJtb2R1bGVzLCBldmVuIHdoZW4gc3VibW9kdWxlLnJlY3Vyc2UgY29uZmlndXJhdGlvbgorICAgaXMgc2V0LCBidXQgaXQgd2FzIGFmZmVjdGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDc4MmNmMmFiNiBwYi9uby1yZWN1cnNpdmUtcmVzZXQtaGFyZC1pbi13b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNZXNzYWdlcyBmcm9tIGRpZSgpIGV0Yy4gY2FuIGJlIG1peGVkIHVwIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCisgICB3aXRob3V0IGV2ZW4gbGluZSBidWZmZXJpbmcgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gd29ya2VkCisgICBhcm91bmQuCisgICAobWVyZ2UgMTE2ZDFmYTZjNiBqcy92cmVwb3J0Zi13by1idWZmZXJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIVFRQIHRyYW5zcG9ydCBoYWQgcG9zc2libGUgYWxsb2NhdG9yL2RlYWxsb2NhdG9yIG1pc21hdGNoLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgd2F0Y2htYW4gaW50ZWdyYXRpb24gZm9yIGZzbW9uaXRvciB3YXMgcmFjeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAgIChtZXJnZSBkZDBiNjFmNTc3IGt3L2ZzbW9uaXRvci13YXRjaG1hbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGZXRjaGluZyBmcm9tIG11bHRpcGxlIHJlbW90ZXMgaW50byB0aGUgc2FtZSByZXBvc2l0b3J5IGluIHBhcmFsbGVsCisgICBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjZW50IGNoYW5nZSB0byAob3B0aW9uYWxseSkgdXBkYXRlCisgICB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGEgZmV0Y2ggam9iIGZpbmlzaGVzLCBhcyB0aGVzZSBwYXJhbGxlbAorICAgZmV0Y2hlcyBjb21wZXRlIHdpdGggZWFjaCBvdGhlci4gIFdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IHN0YXNoIHBvcCIgbWFkZSB0aGUgY29tbWFuZCBlbXB0eSB0aGUgaW5kZXgKKyAgIHdoZW4gcnVuIHdpdGggdGhlICItLXF1aWV0IiBvcHRpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBmZXRjaCIgY29kZXBhdGggaGFkIGEgYmlnICJkbyBub3QgbGF6aWx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cworICAgd2hlbiBJIGFzayBpZiBzb21ldGhpbmcgZXhpc3RzIiBzd2l0Y2guICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieQorICAgbWFya2luZyB0aGUgImRvZXMgdGhpcyB0aGluZyBleGlzdD8iIGNhbGxzIHdpdGggImlmIG5vdCBwbGVhc2UgZG8gbm90CisgICBsYXppbHkgZmV0Y2ggaXQiIGZsYWcuCisKKyAqIFRlc3QgdXBkYXRlIHRvIGF2b2lkIHdhc3RlZCBjeWNsZXMuCisgICAobWVyZ2UgZTAzMTY2OTVlYyBzZy9za2lwLXNraXBwZWQtcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgaGFuZGxpbmcgYWZ0ZXIgImdpdCBwdXNoIiBmaW5pc2hlcyBzZW5kaW5nIHRoZSBwYWNrZGF0YSBhbmQKKyAgIHdhaXRzIGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSBzaWRlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgKG1lcmdlIGFkN2E0MDMyNjggamsvc2VuZC1wYWNrLXJlbW90ZS1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdHdlYiIgdGhhdCBmb3Jnb3QgdG8gZXNjYXBlIFVSTHMgZ2VuZXJhdGVkCisgICBiYXNlZCBvbiBlbmQtdXNlciBpbnB1dCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEzNzZlMzdiMmMgamsvZ2l0d2ViLWFudGkteHNzIGxhdGVyIHRvIG1haW50KS4KKworICogQ0kgam9icyBmb3IgbWFjT1MgaGFzIGJlZW4gbWFkZSBsZXNzIGNoYXR0eSB3aGVuIHVwZGF0aW5nIHBlcmZvcmNlCisgICBwYWNrYWdlIHVzZWQgZHVyaW5nIHRlc3RpbmcuCisgICAobWVyZ2UgMGRiYzRhMGVkZiBqYy9henVyZS1jaS1vc3gtZml4LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdW5wYWNrLW9iamVjdHMiIHVzZWQgdG8gc2hvdyBwcm9ncmVzcyBiYXNlZCBvbmx5IG9uIHRoZSBudW1iZXIKKyAgIG9mIHJlY2VpdmVkIGFuZCB1bnBhY2tlZCBvYmplY3RzLCB3aGljaCBzdGFsbGVkIHdoZW4gaXQgaGFzIHRvCisgICBoYW5kbGUgYW4gdW51c3VhbGx5IGxhcmdlIG9iamVjdC4gIEl0IG5vdyBzaG93cyB0aGUgdGhyb3VnaHB1dCBhcworICAgd2VsbC4KKyAgIChtZXJnZSBiYWU2MGJhN2U5IHNnL3VucGFjay1wcm9ncmVzcy10aHJvdWdocHV0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNlcXVlbmNlciBtYWNoaW5lcnkgY29tcGFyZWQgdGhlIEhFQUQgYW5kIHRoZSBzdGF0ZSBpdCBpcworICAgYXR0ZW1wdGluZyB0byBjb21taXQgdG8gZGVjaWRlIGlmIHRoZSByZXN1bHQgd291bGQgYmUgYSBuby1vcAorICAgY29tbWl0LCBldmVuIHdoZW4gYW1lbmRpbmcgYSBjb21taXQsIHdoaWNoIHdhcyBpbmNvcnJlY3QsIGFuZAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSBHUEcgb3V0cHV0IHVzZWQgdG8gYXNzdW1lIGluY29ycmVjdGx5IHRoYXQgdGhlCisgICBmaW50ZXJwcmludCBmb3IgdGhlIHByaW1hcnkga2V5IHdvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGZvciBhIHZhbGlkCisgICBzaWduYXR1cmUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2N2E2ZWE2MzAwIGhpL2dwZy1vcHRpb25hbC1wa2ZwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgYW5kICJnaXQgc3VibW9kdWxlIHN0YXR1cyAtLWNhY2hlZCIgc2hvdworICAgZGlmZmVyZW50IHRoaW5ncywgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGRpZCBub3QgY292ZXIgdGhlbQorICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOGQ0ODNjODQwOCBtZy9kb2Mtc3VibW9kdWxlLXN0YXR1cy1jYWNoZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlc2V0IC0tcGF0Y2ggJG9iamVjdCIgd2l0aG91dCBhbnkgcGF0aHNwZWMgc2hvdWxkIGFsbG93IGEKKyAgIHRyZWUgb2JqZWN0IHRvIGJlIGdpdmVuLCBidXQgaW5jb3JyZWN0bHkgcmVxdWlyZWQgYSBjb21taXR0aXNoLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHRoYXQgaXMgcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBzdXBlcnByb2plY3QgZGlkIG5vdCB3b3JrIHdlbGwsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxZjNhZWEyMmM3IG1nL3N1Ym1vZHVsZS1zdGF0dXMtZnJvbS1hLXN1YmRpcmVjdG9yeSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIG1hY2hpbmVyeSB1c2VzIHJlc291cmNlcyBsaWtlIHBlci1vYmplY3QgZmxhZworICAgYml0cyB0aGF0IG5lZWQgdG8gYmUgcmVzZXQgYmVmb3JlIGEgbmV3IGl0ZXJhdGlvbiBvZiB3YWxraW5nCisgICBiZWdpbnMsIGJ1dCB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdG9wb2xvZ2ljYWwgd2FsayB3ZXJlIG5vdAorICAgY2xlYXJlZCBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwYWEwYzJiMmVjIG1oL2NsZWFyLXRvcG8td2Fsay11cG9uLXJlc2V0IGxhdGVyIHRvIG1haW50KS4KKworICogVHJhdmlzQ0kgdXBkYXRlLgorICAgKG1lcmdlIDE3NjQ0MWJmYjUgc2cvb3N4LWZvcmNlLWdjYy05IGxhdGVyIHRvIG1haW50KS4KKworICogV2hpbGUgcnVubmluZyAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2sgLS1lZGl0IiBmb3IgbXVsdGlwbGUKKyAgIGNvbW1pdHMsIGEgcmVjZW50IHJlZ3Jlc3Npb24gaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgIm5vdGhpbmcgdG8KKyAgIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuIiwgaW5zdGVhZCBvZiByZXBsYXlpbmcgdGhlIGNvbW1pdHMsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYmVmZDRmNmE4MSBzZy9hc3N1bWUtbm8tdG9kby11cGRhdGUtaW4tY2hlcnJ5LXBpY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXb3JrIGFyb3VuZCBhIGlzc3VlIHdoZXJlIGEgRkQgdGhhdCBpcyBsZWZ0IG9wZW4gd2hlbiBzcGF3bmluZyBhCisgICBjaGlsZCBwcm9jZXNzIGFuZCBpcyBrZXB0IG9wZW4gaW4gdGhlIGNoaWxkIGNhbiBpbnRlcmZlcmUgd2l0aCB0aGUKKyAgIG9wZXJhdGlvbiBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgb24gV2luZG93cy4KKworICogT25lIGtpbmQgb2YgcHJvZ3Jlc3MgbWVzc2FnZXMgd2VyZSBhbHdheXMgZ2l2ZW4gZHVyaW5nIGNvbW1pdC1ncmFwaAorICAgZ2VuZXJhdGlvbiwgaW5zdGVhZCBvZiBmb2xsb3dpbmcgdGhlICJpZiBpdCB0YWtlcyBtb3JlIHRoYW4gdHdvCisgICBzZWNvbmRzLCBzaG93IHByb2dyZXNzIiBwYXR0ZXJuLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZvcm1hdC51c2VBdXRvQmFzZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJkaWZmIiBtYWNoaW5lcnkgbGVhcm5lZCBub3QgdG8gbG9zZSBhZGRlZC9yZW1vdmVkIGJsYW5rIGxpbmVzCisgICBpbiB0aGUgY29udGV4dCB3aGVuIC0taWdub3JlLWJsYW5rLWxpbmVzIGFuZCAtLWZ1bmN0aW9uLWNvbnRleHQgYXJlCisgICB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAobWVyZ2UgMGJiMzEzYTU1MiBycy94ZGlmZi1pZ25vcmUtd3Mtdy1mdW5jLWNvbnRleHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBvbiAiZmFzdC1pbXBvcnQiIHVzZWQgdG8gZ2V0IHN0dWNrIHdoZW4gImZhc3QtaW1wb3J0IiBkaWVkCisgICBpbiB0aGUgbWlkZGxlLgorICAgKG1lcmdlIDBkOWIwZDc4ODUgc2cvdDkzMDAtcm9idXN0aWZ5IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDgwNzM2ZDdjNWUgamMvYW0tc2hvdy1jdXJyZW50LXBhdGNoLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGI2NTY1NzJjYSBzZy9jb21taXQtZ3JhcGgtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YzAyMDQyMTM5IG1yL2Nsb25lLWRpci1leGlzdHMtdG8tcGF0aC1leGlzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0YWUxMzFlMzggc2cvYmxhbWUtaW5kZW50LWhldXJpc3RpY3MtaXMtbm93LXRoZS1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMTE1ZTVkOTI5IGRsL2RvYy1kaWZmLW5vLWluZGV4LWltcGxpZXMtZXhpdC1jb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzBkZTZhY2JlIGVuL3Q2MDI0LXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNGM0Nzc2ZDc1IG5zL3Rlc3QtZGVzYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGQ0MGYzMGM0IGRqL3R5cG9maXgtbWVyZ2Utc3RyYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2NmUwNDAxYWIgamsvb3B0aW0taW4tcGFjay1pZHgtY29udmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTY5YmVkNzQyMSBycy9wYXJzZS1vcHRpb25zLWR1cC1udWxsLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFiZDZiZTMyZCBycy91c2UtY29weS1hcnJheS1pbi1taW5ndy1zaGVsbC1jb21tYW5kLXByZXBhcmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMDE4NzE5OTI3IG1hL3Q3MDA0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MzI3NTdiMGNjIGFyL2luc3RhbGwtZG9jLXVwZGF0ZS1jbWRzLW5lZWRpbmctdGhlLXNoZWxsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NmVmZDI4YmUxIGVwL2d1YXJkLWtzZXQtdGFyLWhlYWRlcnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDllNWFmZGY5OTcgZWMvZmV0Y2gtbWFyay1jb21tb24tcmVmcy10cmFjZTIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYwZTU4YjNmZTggcGIvc3VibW9kdWxlLXVwZGF0ZS1mZXRjaGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYTAyMjYyMDc4IGRsL3Q1NTIwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE0ZmIwMTZiYTEganMvcGt0LWxpbmUtaC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NGE3YTY0NjEzIHJzL3NpbXBsaWZ5LXByZXBhcmUtY21kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZWFlMzBlNDY0IGprL2xvcmUtaXMtdGhlLWFyY2hpdmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0Yjc2NjRkZjggZGwvbG9yZS1pcy10aGUtYXJjaGl2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGU0MGE3M2E0YyBwby9idW5kbGUtZG9jLWNsb25hYmxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNzE0Yjg5OGM2IGFzL3Q3ODEyLW1pc3NpbmctcmVkaXJlY3RzLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTI4ZDllNmQwMSBqay9wZXJmLXdvLWdpdC1kb3QtcG0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjNDJmMjBlMjQgc2cvdGVzdC1zcXVlbGNoLW5vaXNlLWluLWNvbW1pdC1idWxrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNjQzNjhlM2EyIGJjL3Q5MDAxLXpzaC1pbi1wb3NpeC1lbXVsYXRpb24tbW9kZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTFkZThkZDdlZiBkci9icmFuY2gtdXNhZ2UtY2FzZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTA1ZThjZjA3NCBycy9hcmNoaXZlLXppcC1jb2RlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0N2VlMzU1NTggcnMvY29tbWl0LWV4cG9ydC1lbnYtc2ltcGxpZnkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ1MDdlY2M3NzEgcnMvcGF0Y2gtaWQtdXNlLW9pZC10by1oZXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dAppbmRleCA1ZWYxMjY0Li44NTBkYzY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dApAQCAtMTIsNyArMTIsNyBAQAogICogRGVzY3JpcHRpb24gZ2l2ZW4gYnkgImdyZXAgLWgiIGZvciBpdHMgLS1leGNsdWRlLXN0YW5kYXJkIG9wdGlvbgogICAgd2FzIHBocmFzZWQgcG9vcmx5LgogCi0gKiBEb2N1bWVudGF0b24gZm9yICJnaXQgcmVtb3RlIGFkZCIgbWVudGlvbmVkICItLXRhZ3MiIGFuZAorICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCByZW1vdGUgYWRkIiBtZW50aW9uZWQgIi0tdGFncyIgYW5kCiAgICAiLS1uby10YWdzIiBhbmQgaXQgd2FzIG5vdCBjbGVhciB0aGF0IGZldGNoIGZyb20gdGhlIHJlbW90ZSBpbgogICAgdGhlIGZ1dHVyZSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBuZWl0aGVyIGlzIGdpdmVuCiAgICB0byBvdmVycmlkZSBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKaW5kZXggZmM5NTgxMi4uNTc2OTE4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKQEAgLTQsNyArNCw3IEBACiBGaXhlcyBzaW5jZSB2Mi4zLjYKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi0gKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0aGUgcGFyc2VyIHRoYXQgZGlzZWN0cyBhIFVSTCBicm9rZSBhbgorICogQW4gZWFybGllciB1cGRhdGUgdG8gdGhlIHBhcnNlciB0aGF0IGRpc3NlY3RzIGEgVVJMIGJyb2tlIGFuCiAgICBhZGRyZXNzLCBmb2xsb3dlZCBieSBhIGNvbG9uLCBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcgKGluc3RlYWQKICAgIG9mIHRoZSBwb3J0IG51bWJlciksIGUuZy4gc3NoOi8vZXhhbXBsZS5jb206L3BhdGgvdG8vcmVwby4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dAppbmRleCA5MTRkMmMxLi40MjJlOTMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dApAQCAtNjYsNyArNjYsNyBAQAogICogU29tZSB0aW1lIGFnbywgImdpdCBibGFtZSIgKGluY29ycmVjdGx5KSBsb3N0IHRoZSBjb252ZXJ0X3RvX2dpdCgpCiAgICBjYWxsIHdoZW4gc3ludGhlc2l6aW5nIGEgZmFrZSAidGlwIiBjb21taXQgdGhhdCByZXByZXNlbnRzIHRoZQogICAgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggYnJva2UgZm9sa3Mgd2hvIHJlY29yZCB0aGUgaGlzdG9yeQotICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFiaWxlIGFjcm9zcworICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFibGUgYWNyb3NzCiAgICBwbGF0Zm9ybXMgd2hpbGUgdGVybWluYXRpbmcgbGluZXMgaW4gdGhlaXIgd29ya2luZyB0cmVlIGZpbGVzIHdpdGgKICAgIENSTEYgZm9yIHRoZWlyIHBsYXRmb3JtLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CmluZGV4IDg3MDQ0NTAuLjg0NzIzZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CkBAIC0xNzIsNyArMTcyLDggQEAKICAgIGluY29ycmVjdCBwYXRjaCB0ZXh0IHRvICJnaXQgYXBwbHkiLiAgQWRkIHRlc3RzIHRvIGRlbW9uc3RyYXRlCiAgICB0aGlzLgogCi0gICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUgJGdtYW5lLzg3MjAyIGNvbWluZyBiYWNrCisgICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUKKyAgIGNmLiA8N3Z0emY3N3dqcC5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmc+IGNvbWluZyBiYWNrCiAgICBhbmQgYml0aW5nIHVzIChJIHNlZW0gdG8gaGF2ZSBzYWlkICJsZXQncyBydW4gd2l0aCB0aGlzIGFuZCBzZWUKICAgIHdoYXQgaGFwcGVucyIgYmFjayB0aGVuKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAppbmRleCA1NjNkYWRjLi5lM2NiZjNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dApAQCAtNDAsNyArNDAsNyBAQAogCiAgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgY2FuIG5vdyBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgogCi0gKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlZW5jb2RlIHRoZSBwYXRobmFtZSBpdCB1c2VzIHRvIGNvbW11bmljYXRlCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlLWVuY29kZSB0aGUgcGF0aG5hbWUgaXQgdXNlcyB0byBjb21tdW5pY2F0ZQogICAgd2l0aCB0aGUgcDQgZGVwb3Qgd2l0aCBhIG5ldyBvcHRpb24uCiAKICAqIEdpdmUgcHJvZ3Jlc3MgbWV0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKaW5kZXggNmFkZjAzOC4uZjYxOGQ3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKQEAgLTIwLDcgKzIwLDcgQEAKICAgIHRlc3RzLgogCiAgKiAiZ2l0IHNob3cgJ0hFQUQ6Rm9vW0JBUl1CYXonIiBkaWQgbm90IGludGVycHJldCB0aGUgYXJndW1lbnQgYXMgYQotICAgcmV2LCBpLmUuIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIHRoZSBwYXRobmFtZSB3aXRoIHdpbGRjYXJkCisgICByZXYsIGkuZS4gdGhlIG9iamVjdCBuYW1lZCBieSB0aGUgcGF0aG5hbWUgd2l0aCB3aWxkY2FyZAogICAgY2hhcmFjdGVycyBpbiBhIHRyZWUgb2JqZWN0LgogCiAgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyIiB1c2VkIGluIHRoZSB3b3JrdHJlZSBmZWF0dXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CmluZGV4IDVmYmUxYjguLjI3MzIwYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CkBAIC0xODksNyArMTg5LDcgQEAKICAqIFNvbWUgY2FsbHMgdG8gc3RyY3B5KDMpIHRyaWdnZXJzIGEgZmFsc2Ugd2FybmluZyBmcm9tIHN0YXRpYwogICAgYW5hbHl6ZXJzIHRoYXQgYXJlIGxlc3MgaW50ZWxsaWdlbnQgdGhhbiBodW1hbnMsIGFuZCByZWR1Y2luZyB0aGUKICAgIG51bWJlciBvZiB0aGVzZSBmYWxzZSBoaXRzIGhlbHBzIHVzIG5vdGljZSByZWFsIGlzc3Vlcy4gIEEgZmV3Ci0gICBjYWxscyB0byBzdHJjcHkoMykgaW4gYSBjb3VwbGUgb2YgcHJvdHJhbXMgdGhhdCBhcmUgYWxyZWFkeSBzYWZlCisgICBjYWxscyB0byBzdHJjcHkoMykgaW4gYSBjb3VwbGUgb2YgcHJvZ3JhbXMgdGhhdCBhcmUgYWxyZWFkeSBzYWZlCiAgICBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYXZvaWQgZmFsc2Ugd2FybmluZ3MuCiAKICAqIFRoZSAibmFtZV9wYXRoIiBBUEkgd2FzIGFuIGF0dGVtcHQgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIGNvbnN0cnVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dAppbmRleCBmZWRkOTk2Li5hNjM4MjVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dApAQCAtNTUsOCArNTUsOCBAQAogICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gdXNlIEdpdCBvbiBXaW5kb3dzIHNoYXJlZCBkaXJlY3RvcmllcywgYW5kIGlzCiAgICBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBNaW5HVyBhbmQgcGxhaW4gV2luZG93cyBidWlsZHMuICBJdCBhbHNvCiAgICBoYXMgYmVlbiB1c2VkIGluIEN5Z3dpbiBwYWNrYWdlZCB2ZXJzaW9ucyBvZiBHaXQgZm9yIHF1aXRlIGEgd2hpbGUuCi0gICBTZWUgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzI5MTg1MwotICAgYW5kIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8yNzU2ODAuCisgICBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTYwNDE5MDkxMDU1LkdGMjM0NUBkaW53b29kaWUub3JnLworICAgYW5kIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE1MDgxMTEwMDUyNy5HVzE0NDY2QGRpbndvb2RpZS5vcmcvLgogCiAgKiAiZ2l0IHJlcGxhY2UgLWUiIGRpZCBub3QgaG9ub3VyICJjb3JlLmVkaXRvciIgY29uZmlndXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dAppbmRleCBiNjFkMzY3Li45OTE2NDAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dApAQCAtMzY4LDcgKzM2OCw3IEBACiAgICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB1c2UgR2l0IG9uIFdpbmRvd3Mgc2hhcmVkIGRpcmVjdG9yaWVzLCBhbmQgaXMKICAgIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIE1pbkdXIGFuZCBwbGFpbiBXaW5kb3dzIGJ1aWxkcy4gIEl0IGFsc28KICAgIGhhcyBiZWVuIHVzZWQgaW4gQ3lnd2luIHBhY2thZ2VkIHZlcnNpb25zIG9mIEdpdCBmb3IgcXVpdGUgYSB3aGlsZS4KLSAgIFNlZSBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMjkxODUzCisgICBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTYwNDE5MDkxMDU1LkdGMjM0NUBkaW53b29kaWUub3JnLwogCiAgKiAibWVyZ2Utb2N0b3B1cyIgc3RyYXRlZ3kgZGlkIG5vdCBlbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgY2xlYW4KICAgIHdoZW4gbWVyZ2UgYmVnaW5zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dAppbmRleCA2OTViODZmLi4zMDVlMDgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dApAQCAtMzYsNyArMzYsNyBAQAogICogT25lIHBhcnQgb2YgImdpdCBhbSIgaGFkIGFuIG9kZGJhbGwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FsbGVkCiAgICBzdHVmZiBmcm9tIG91dHNpZGUgImhpcyIgYXMgb3Bwb3NlZCB0byBjYWxsaW5nIHdoYXQgd2UgaGF2ZSAib3VycyIsCiAgICB3aGljaCB3YXMgbm90IGdlbmRlci1uZXV0cmFsIGFuZCBhbHNvIGluY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mCi0gICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxsIGNhbGxlZCAidGhlaXJzIiBpbgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbHkgY2FsbGVkICJ0aGVpcnMiIGluCiAgICBjb250cmFzdCB0byAib3VycyIuCiAKICAqIFRoZSB0ZXN0IGZyYW1ld29yayBsZWFybmVkIGEgbmV3IGhlbHBlciB0ZXN0X21hdGNoX3NpZ25hbCB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggMWE2MGNjMS4uNDUxNWNhYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xNDIsMTkgKzE0MiwyNSBAQAogCiBbW2NvbW1pdC1yZWZlcmVuY2VdXQogSWYgeW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgcHJldmlvdXMgY29tbWl0IGluIHRoZSBoaXN0b3J5IG9mIGEgc3RhYmxlCi1icmFuY2gsIHVzZSB0aGUgZm9ybWF0ICJhYmJyZXZpYXRlZCBzaGExIChzdWJqZWN0LCBkYXRlKSIsCi13aXRoIHRoZSBzdWJqZWN0IGVuY2xvc2VkIGluIGEgcGFpciBvZiBkb3VibGUtcXVvdGVzLCBsaWtlIHRoaXM6CiticmFuY2gsIHVzZSB0aGUgZm9ybWF0ICJhYmJyZXZpYXRlZCBoYXNoIChzdWJqZWN0LCBkYXRlKSIsIGxpa2UgdGhpczoKIAogLi4uLgotCUNvbW1pdCBmODZhMzc0ICgicGFjay1iaXRtYXAuYzogZml4IGEgbWVtbGVhayIsIDIwMTUtMDMtMzApCisJQ29tbWl0IGY4NmEzNzQgKHBhY2stYml0bWFwLmM6IGZpeCBhIG1lbWxlYWssIDIwMTUtMDMtMzApCiAJbm90aWNlZCB0aGF0IC4uLgogLi4uLgogCiBUaGUgIkNvcHkgY29tbWl0IHN1bW1hcnkiIGNvbW1hbmQgb2YgZ2l0ayBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhpcwotZm9ybWF0LCBvciB0aGlzIGludm9jYXRpb24gb2YgYGdpdCBzaG93YDoKK2Zvcm1hdCAod2l0aCB0aGUgc3ViamVjdCBlbmNsb3NlZCBpbiBhIHBhaXIgb2YgZG91YmxlLXF1b3RlcyksIG9yIHRoaXMKK2ludm9jYXRpb24gb2YgYGdpdCBzaG93YDoKIAogLi4uLgotCWdpdCBzaG93IC1zIC0tZGF0ZT1zaG9ydCAtLXByZXR0eT0nZm9ybWF0OiVoICgiJXMiLCAlYWQpJyA8Y29tbWl0PgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXJlZmVyZW5jZSA8Y29tbWl0PgorLi4uLgorCitvciwgb24gYW4gb2xkZXIgdmVyc2lvbiBvZiBHaXQgd2l0aG91dCBzdXBwb3J0IGZvciAtLXByZXR0eT1yZWZlcmVuY2U6CisKKy4uLi4KKwlnaXQgc2hvdyAtcyAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9J2Zvcm1hdDolaCAoJXMsICVhZCknIDxjb21taXQ+CiAuLi4uCiAKIFtbZ2l0LXRvb2xzXV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAppbmRleCBmNTBmMWI0Li44M2U3YmJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogYGdpdGRpci9pYDo6CiAJVGhpcyBpcyB0aGUgc2FtZSBhcyBgZ2l0ZGlyYCBleGNlcHQgdGhhdCBtYXRjaGluZyBpcyBkb25lCi0JY2FzZS1pbnNlbnNpdGl2ZWx5IChlLmcuIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXRlbXMpCisJY2FzZS1pbnNlbnNpdGl2ZWx5IChlLmcuIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zKQogCiBgb25icmFuY2hgOjoKIAlUaGUgZGF0YSB0aGF0IGZvbGxvd3MgdGhlIGtleXdvcmQgYG9uYnJhbmNoOmAgaXMgdGFrZW4gdG8gYmUgYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQKaW5kZXggNGQ3NTNmMC4uYzlmNzQ4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZGQudHh0CkBAIC01LDMgKzUsOCBAQAogCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0uICBgYWRkLmlnbm9yZS1lcnJvcnNgIGlzIGRlcHJlY2F0ZWQsCiAJYXMgaXQgZG9lcyBub3QgZm9sbG93IHRoZSB1c3VhbCBuYW1pbmcgY29udmVudGlvbiBmb3IgY29uZmlndXJhdGlvbgogCXZhcmlhYmxlcy4KKworYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW46OgorCVtFWFBFUklNRU5UQUxdIFNldCB0byBgdHJ1ZWAgdG8gdXNlIHRoZSBleHBlcmltZW50YWwgYnVpbHQtaW4KKwlpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJhY3RpdmUgdmVyc2lvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0KKwlpbnN0ZWFkIG9mIHRoZSBQZXJsIHNjcmlwdCB2ZXJzaW9uLiBJcyBgZmFsc2VgIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWR2aWNlLnR4dAppbmRleCA2YWFhMzYwLi5kNGU2OThjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQKQEAgLTEwNyw0ICsxMDcsNyBAQAogCQllZGl0b3IgaW5wdXQgZnJvbSB0aGUgdXNlci4KIAluZXN0ZWRUYWc6OgogCQlBZHZpY2Ugc2hvd24gaWYgYSB1c2VyIGF0dGVtcHRzIHRvIHJlY3Vyc2l2ZWx5IHRhZyBhIHRhZyBvYmplY3QuCisJc3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZToKKwkJQWR2aWNlIHNob3duIHdoZW4gYSBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBvcHRpb24KKwkJY29uZmlndXJlZCB0byAiZGllIiBjYXVzZXMgYSBmYXRhbCBlcnJvci4KIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CmluZGV4IDg1MmQyYmEuLjllNDQwYjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CkBAIC01NTksNiArNTU5LDEyIEBACiAJRGVmYXVsdHMgdG8gYFBFUkw1TElCYCB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IEdpdCBmb3IKIAlXaW5kb3dzIGluc2lzdHMgb24gdXNpbmcgaXRzIG93biBQZXJsIGludGVycHJldGVyLgogCitjb3JlLnJlc3RyaWN0aW5oZXJpdGVkaGFuZGxlczo6CisJV2luZG93cy1vbmx5OiBvdmVycmlkZSB3aGV0aGVyIHNwYXduZWQgcHJvY2Vzc2VzIGluaGVyaXQgb25seSBzdGFuZGFyZAorCWZpbGUgaGFuZGxlcyAoYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgKSBvciBhbGwgaGFuZGxlcy4gQ2FuIGJlCisJYGF1dG9gLCBgdHJ1ZWAgb3IgYGZhbHNlYC4gRGVmYXVsdHMgdG8gYGF1dG9gLCB3aGljaCBtZWFucyBgdHJ1ZWAgb24KKwlXaW5kb3dzIDcgYW5kIGxhdGVyLCBhbmQgYGZhbHNlYCBvbiBvbGRlciBXaW5kb3dzIHZlcnNpb25zLgorCiBjb3JlLmNyZWF0ZU9iamVjdDo6CiAJWW91IGNhbiBzZXQgdGhpcyB0byAnbGluaycsIGluIHdoaWNoIGNhc2UgYSBoYXJkbGluayBmb2xsb3dlZCBieQogCWEgZGVsZXRlIG9mIHRoZSBzb3VyY2UgYXJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgb2JqZWN0IGNyZWF0aW9uCkBAIC01OTMsOCArNTk5LDE0IEBACiAJbXVsdGktcGFjay1pbmRleCBkZXNpZ24gZG9jdW1lbnRdLgogCiBjb3JlLnNwYXJzZUNoZWNrb3V0OjoKLQlFbmFibGUgInNwYXJzZSBjaGVja291dCIgZmVhdHVyZS4gU2VlIHNlY3Rpb24gIlNwYXJzZSBjaGVja291dCIgaW4KLQlsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJRW5hYmxlICJzcGFyc2UgY2hlY2tvdXQiIGZlYXR1cmUuIFNlZSBsaW5rZ2l0OmdpdC1zcGFyc2UtY2hlY2tvdXRbMV0KKwlmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29yZS5zcGFyc2VDaGVja291dENvbmU6OgorCUVuYWJsZXMgdGhlICJjb25lIG1vZGUiIG9mIHRoZSBzcGFyc2UgY2hlY2tvdXQgZmVhdHVyZS4gV2hlbiB0aGUKKwlzcGFyc2UtY2hlY2tvdXQgZmlsZSBjb250YWlucyBhIGxpbWl0ZWQgc2V0IG9mIHBhdHRlcm5zLCB0aGVuIHRoaXMKKwltb2RlIHByb3ZpZGVzIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFkdmFudGFnZXMuIFNlZQorCWxpbmtnaXQ6Z2l0LXNwYXJzZS1jaGVja291dFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogY29yZS5hYmJyZXY6OgogCVNldCB0aGUgbGVuZ3RoIG9iamVjdCBuYW1lcyBhcmUgYWJicmV2aWF0ZWQgdG8uICBJZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKaW5kZXggNDBjYWQ5Mi4uNDVjN2JkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0CkBAIC0zNiw2ICszNiwxMiBAQAogCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlICdbUEFUQ0hdJwogCXN1YmplY3QgcHJlZml4LiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBwcmVmaXguCiAKK2Zvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbjo6CisJVGhlIGRlZmF1bHQgbW9kZSBmb3IgZm9ybWF0LXBhdGNoIHRvIGRldGVybWluZSB3aGljaCBwYXJ0cyBvZgorCXRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZSBwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzCisJZGVzY3JpcHRpb24uIFNlZSB0aGUgYC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbmAgb3B0aW9uIGluCisJbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCiBmb3JtYXQuc2lnbmF0dXJlOjoKIAlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBhIHNpZ25hdHVyZSBjb250YWluaW5nCiAJdGhlIEdpdCB2ZXJzaW9uIG51bWJlci4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgZGVmYXVsdC4KQEAgLTEwMCw0ICsxMDYsMjAgQEAKIGluc3RlYWQuCiArCiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBpbiBvcmRlciB0byBhbGxvdwotbXVsdGlwbGUgbm90ZXMgcmVmcyB0byBiZSBpbmNsdWRlZC4KK211bHRpcGxlIG5vdGVzIHJlZnMgdG8gYmUgaW5jbHVkZWQuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZWhhdmUKK3NpbWlsYXJseSB0byBtdWx0aXBsZSBgLS1bbm8tXW5vdGVzWz1dYCBvcHRpb25zIHBhc3NlZCBpbi4gVGhhdCBpcywgYQordmFsdWUgb2YgYHRydWVgIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBub3RlcywgYSB2YWx1ZSBvZiBgPHJlZj5gIHdpbGwKK2Fsc28gc2hvdyBub3RlcyBmcm9tIHRoYXQgbm90ZXMgcmVmIGFuZCBhIHZhbHVlIG9mIGBmYWxzZWAgd2lsbCBuZWdhdGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIGFuZCBub3Qgc2hvdyBub3Rlcy4KKysKK0ZvciBleGFtcGxlLAorKworLS0tLS0tLS0tLS0tCitbZm9ybWF0XQorCW5vdGVzID0gdHJ1ZQorCW5vdGVzID0gZm9vCisJbm90ZXMgPSBmYWxzZQorCW5vdGVzID0gYmFyCistLS0tLS0tLS0tLS0KKysKK3dpbGwgb25seSBzaG93IG5vdGVzIGZyb20gYHJlZnMvbm90ZXMvYmFyYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N1Ym1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0CmluZGV4IDBhMTI5M2IuLmIzMzE3NzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N1Ym1vZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3VibW9kdWxlLnR4dApAQCAtNzksNCArNzksNiBAQAogc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3k6OgogCVNwZWNpZmllcyBob3cgdG8gdHJlYXQgZXJyb3JzIHdpdGggdGhlIGFsdGVybmF0ZXMgZm9yIGEgc3VibW9kdWxlCiAJYXMgY29tcHV0ZWQgdmlhIGBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb25gLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCi0JYGlnbm9yZWAsIGBpbmZvYCwgYGRpZWAuIERlZmF1bHQgaXMgYGRpZWAuCisJYGlnbm9yZWAsIGBpbmZvYCwgYGRpZWAuIERlZmF1bHQgaXMgYGRpZWAuIE5vdGUgdGhhdCBpZiBzZXQgdG8gYGlnbm9yZWAKKwlvciBgaW5mb2AsIGFuZCBpZiB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHRoZSBjb21wdXRlZCBhbHRlcm5hdGUsIHRoZQorCWNsb25lIHByb2NlZWRzIGFzIGlmIG5vIGFsdGVybmF0ZSB3YXMgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQKaW5kZXggZWY1YWRiMy4uNmQ5MTEwZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0CkBAIC0xMyw3ICsxMyw3IEBACiAJVXNlIG9mIHRoaXMgb3B0aW9uIHdoZW4gcnVubmluZyBpbiBhbiBhdXRvbWF0ZWQgc2NyaXB0IGNhbgogCXJlc3VsdCBpbiBhIGxhcmdlIG51bWJlciBvZiB0YWdzIGJlaW5nIHNpZ25lZC4gSXQgaXMgdGhlcmVmb3JlCiAJY29udmVuaWVudCB0byB1c2UgYW4gYWdlbnQgdG8gYXZvaWQgdHlwaW5nIHlvdXIgZ3BnIHBhc3NwaHJhc2UKLQlzZXZlcmFsIHRpbWVzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lc24ndCBhZmZlY3RzIHRhZyBzaWduaW5nCisJc2V2ZXJhbCB0aW1lcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXNuJ3QgYWZmZWN0IHRhZyBzaWduaW5nCiAJYmVoYXZpb3IgZW5hYmxlZCBieSAiLXUgPGtleWlkPiIgb3IgIi0tbG9jYWwtdXNlcj08a2V5aWQ+IiBvcHRpb25zLgogCiB0YXIudW1hc2s6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAppbmRleCA0ZDg0NmQ3Li5mYmJkNDEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dApAQCAtNjEsNyArNjEsNyBAQAogLSBSOiByZW5hbWluZyBvZiBhIGZpbGUKIC0gVDogY2hhbmdlIGluIHRoZSB0eXBlIG9mIHRoZSBmaWxlCiAtIFU6IGZpbGUgaXMgdW5tZXJnZWQgKHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBtZXJnZSBiZWZvcmUgaXQgY2FuCi1iZSBjb21taXR0ZWQpCisgIGJlIGNvbW1pdHRlZCkKIC0gWDogInVua25vd24iIGNoYW5nZSB0eXBlIChtb3N0IHByb2JhYmx5IGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0KQogCiBTdGF0dXMgbGV0dGVycyBDIGFuZCBSIGFyZSBhbHdheXMgZm9sbG93ZWQgYnkgYSBzY29yZSAoZGVub3RpbmcgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCA0M2I5ZmYzLi5hMmY3ODYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTkyLDYgKzkyLDEwIEBACiAJUnVuIGBnaXQgZ2MgLS1hdXRvYCBhdCB0aGUgZW5kIHRvIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uCiAJaWYgbmVlZGVkLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KIAorLS1bbm8tXXdyaXRlLWNvbW1pdC1ncmFwaDo6CisJV3JpdGUgYSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmcuIFRoaXMgb3ZlcnJpZGVzIHRoZSBjb25maWcKKwlzZXR0aW5nIGBmZXRjaC53cml0ZUNvbW1pdEdyYXBoYC4KKwogLXA6OgogLS1wcnVuZTo6CiAJQmVmb3JlIGZldGNoaW5nLCByZW1vdmUgYW55IHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIHRoYXQgbm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CmluZGV4IDhiMGU0YzcuLmJlNWUzYWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtMTEsNyArMTEsOCBAQAogJ2dpdCBhZGQnIFstLXZlcmJvc2UgfCAtdl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS1mb3JjZSB8IC1mXSBbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLS1wYXRjaCB8IC1wXQogCSAgWy0tZWRpdCB8IC1lXSBbLS1bbm8tXWFsbCB8IC0tW25vLV1pZ25vcmUtcmVtb3ZhbCB8IFstLXVwZGF0ZSB8IC11XV0KIAkgIFstLWludGVudC10by1hZGQgfCAtTl0gWy0tcmVmcmVzaF0gWy0taWdub3JlLWVycm9yc10gWy0taWdub3JlLW1pc3NpbmddIFstLXJlbm9ybWFsaXplXQotCSAgWy0tY2htb2Q9KCt8LSl4XSBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCSAgWy0tY2htb2Q9KCt8LSl4XSBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV0KKwkgIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMTg3LDYgKzE4OCwxOSBAQAogCWJpdCBpcyBvbmx5IGNoYW5nZWQgaW4gdGhlIGluZGV4LCB0aGUgZmlsZXMgb24gZGlzayBhcmUgbGVmdAogCXVuY2hhbmdlZC4KIAorLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlQYXRoc3BlYyBpcyBwYXNzZWQgaW4gYDxmaWxlPmAgaW5zdGVhZCBvZiBjb21tYW5kbGluZSBhcmdzLiBJZgorCWA8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKKwllbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKKwlxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCisJZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tcGF0aHNwZWMtZnJvbS1maWxlYC4gUGF0aHNwZWMgZWxlbWVudHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCisJbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKIFwtLTo6CiAJVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbQogCXRoZSBsaXN0IG9mIGZpbGVzLCAodXNlZnVsIHdoZW4gZmlsZW5hbWVzIG1pZ2h0IGJlIG1pc3Rha2VuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKaW5kZXggZmMzYjk5My4uZmM1NzUwYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMTc3LDcgKzE3Nyw3IEBACiAJdW50b3VjaGVkLgogCiAtLXNob3ctY3VycmVudC1wYXRjaDo6Ci0JU2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZCB3aGVuICJnaXQgYW0iIGlzIHN0b3BwZWQgYmVjYXVzZQorCVNob3cgdGhlIGVudGlyZSBlLW1haWwgbWVzc2FnZSAiZ2l0IGFtIiBoYXMgc3RvcHBlZCBhdCwgYmVjYXVzZQogCW9mIGNvbmZsaWN0cy4KIAogRElTQ1VTU0lPTgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dAppbmRleCBlOTk5MjUxLi4zYmE0OWU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dApAQCAtMTU4LDcgKzE1OCw3IEBACiBzdXBwb3NlZCB0byBiZSB1c2VkIHNvIHRoYXQgYWxsIHRoZSB0ZXN0cyBhcmUgY2hlY2tlZCBhZnRlciBlYWNoCiBjb21taXQuIFRoaXMgbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgdmVyeSBlZmZpY2llbnQsIGJlY2F1c2UgbWFueQogdGVzdHMgYXJlIHJ1biBmb3Igbm8gaW50ZXJlc3RpbmcgcmVzdWx0LCBhbmQgdGhleSBzdWZmZXIgZnJvbQotY29tYmluYXRpb25hbCBleHBsb3Npb24uCitjb21iaW5hdG9yaWFsIGV4cGxvc2lvbi4KIAogSW4gZmFjdCB0aGUgcHJvYmxlbSBpcyB0aGF0IGJpZyBzb2Z0d2FyZSBvZnRlbiBoYXMgbWFueSBkaWZmZXJlbnQKIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhhdCBlYWNoIHRlc3QgY2FzZSBzaG91bGQgcGFzcyBmb3IgZWFjaApAQCAtMTM1MCw5ICsxMzUwLDkgQEAKIC0gW1tbMV1dXSBodHRwczovL3d3dy5uaXN0Lmdvdi9zaXRlcy9kZWZhdWx0L2ZpbGVzL2RvY3VtZW50cy9kaXJlY3Rvci9wbGFubmluZy9yZXBvcnQwMi0zLnBkZlsnVGhlIEVjb25vbWljIEltcGFjdHMgb2YgSW5hZGVxdWF0ZSBJbmZyYXRydWN0dXJlIGZvciBTb2Z0d2FyZSBUZXN0aW5nJy4gIE5pc3QgUGxhbm5pbmcgUmVwb3J0IDAyLTNdLCBzZWUgRXhlY3V0aXZlIFN1bW1hcnkgYW5kIENoYXB0ZXIgOC4KIC0gW1tbMl1dXSBodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvamF2YS9jb2RlY29udnRvYy0xMzYwNTcuaHRtbFsnQ29kZSBDb252ZW50aW9ucyBmb3IgdGhlIEphdmEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UnLiBTdW4gTWljcm9zeXN0ZW1zLl0KIC0gW1tbM11dXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb2Z0d2FyZV9tYWludGVuYW5jZVsnU29mdHdhcmUgbWFpbnRlbmFuY2UnLiBXaWtpcGVkaWEuXQotLSBbW1s0XV1dIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvN3ZwczV4c2J3cC5mc2ZfLV9AYXNzaWduZWQtYnktZGhjcC5jb3gubmV0L1tKdW5pbyBDIEhhbWFuby4gJ0F1dG9tYXRlZCBiaXNlY3Qgc3VjY2VzcyBzdG9yeScuXQorLSBbW1s0XV1dIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dnBzNXhzYndwLmZzZl8tX0Bhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvW0p1bmlvIEMgSGFtYW5vLiAnQXV0b21hdGVkIGJpc2VjdCBzdWNjZXNzIHN0b3J5Jy5dCiAtIFtbWzVdXV0gaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzMxNzE1NC9bQ2hyaXN0aWFuIENvdWRlci4gJ0Z1bGx5IGF1dG9tYXRlZCBiaXNlY3Rpbmcgd2l0aCAiZ2l0IGJpc2VjdCBydW4iJy4gTFdOLm5ldC5dCiAtIFtbWzZdXV0gaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzI3Nzg3Mi9bSm9uYXRoYW4gQ29yYmV0LiAnQmlzZWN0aW9uIGRpdmlkZXMgdXNlcnMgYW5kIGRldmVsb3BlcnMnLiBMV04ubmV0Ll0KLS0gW1tbN11dXSBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LWtlcm5lbCZtPTExOTcwMjc1MzQxMTY4MCZ3PTJbSW5nbyBNb2xuYXIuICdSZTogQlVHIDIuNi4yMy1yYzMgY2FuJ3Qgc2VlIHNkIHBhcnRpdGlvbnMgb24gQWxwaGEnLiBMaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0Ll0KKy0gW1tbN11dXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMDcxMjA3MTEzNzM0LkdBMTQ1OThAZWx0ZS5odS9bSW5nbyBNb2xuYXIuICdSZTogQlVHIDIuNi4yMy1yYzMgY2FuJ3Qgc2VlIHNkIHBhcnRpdGlvbnMgb24gQWxwaGEnLiBMaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0Ll0KIC0gW1tbOF1dXSBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvZ2l0LWJpc2VjdC5odG1sW0p1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QuICdnaXQtYmlzZWN0KDEpIE1hbnVhbCBQYWdlJy4gTGludXggS2VybmVsIEFyY2hpdmVzLl0KIC0gW1tbOV1dXSBodHRwczovL2dpdGh1Yi5jb20vRWFsZHd1bGYvYmJjaG9wW0VhbGR3dWxmLiAnYmJjaG9wJy4gR2l0SHViLl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CmluZGV4IDRiNDVkODMuLjc1ODZjNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApAQCAtNDEzLDcgKzQxMyw3IEBACiAKICMgdHdlYWsgdGhlIHdvcmtpbmcgdHJlZSBieSBtZXJnaW5nIHRoZSBob3QtZml4IGJyYW5jaAogIyBhbmQgdGhlbiBhdHRlbXB0IGEgYnVpbGQKLWlmCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBob3QtZml4ICYmCitpZglnaXQgbWVyZ2UgLS1uby1jb21taXQgLS1uby1mZiBob3QtZml4ICYmCiAJbWFrZQogdGhlbgogCSMgcnVuIHByb2plY3Qgc3BlY2lmaWMgdGVzdCBhbmQgcmVwb3J0IGl0cyBzdGF0dXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CmluZGV4IDdkNmM5ZGMuLmQzNGIwOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApAQCAtOSw4ICs5LDggQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBidW5kbGUnIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPgotJ2dpdCBidW5kbGUnIHZlcmlmeSA8ZmlsZT4KKydnaXQgYnVuZGxlJyBjcmVhdGUgWy1xIHwgLS1xdWlldCB8IC0tcHJvZ3Jlc3MgfCAtLWFsbC1wcm9ncmVzc10gWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdIDxmaWxlPiA8Z2l0LXJldi1saXN0LWFyZ3M+CisnZ2l0IGJ1bmRsZScgdmVyaWZ5IFstcSB8IC0tcXVpZXRdIDxmaWxlPgogJ2dpdCBidW5kbGUnIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dCiAnZ2l0IGJ1bmRsZScgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dCiAKQEAgLTIwLDExICsyMCwxNCBAQAogU29tZSB3b3JrZmxvd3MgcmVxdWlyZSB0aGF0IG9uZSBvciBtb3JlIGJyYW5jaGVzIG9mIGRldmVsb3BtZW50IG9uIG9uZQogbWFjaGluZSBiZSByZXBsaWNhdGVkIG9uIGFub3RoZXIgbWFjaGluZSwgYnV0IHRoZSB0d28gbWFjaGluZXMgY2Fubm90CiBiZSBkaXJlY3RseSBjb25uZWN0ZWQsIGFuZCB0aGVyZWZvcmUgdGhlIGludGVyYWN0aXZlIEdpdCBwcm90b2NvbHMgKGdpdCwKLXNzaCwgaHR0cCkgY2Fubm90IGJlIHVzZWQuICBUaGlzIGNvbW1hbmQgcHJvdmlkZXMgc3VwcG9ydCBmb3IKLSdnaXQgZmV0Y2gnIGFuZCAnZ2l0IHB1bGwnIHRvIG9wZXJhdGUgYnkgcGFja2FnaW5nIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKLWluIGFuIGFyY2hpdmUgYXQgdGhlIG9yaWdpbmF0aW5nIG1hY2hpbmUsIHRoZW4gaW1wb3J0aW5nIHRob3NlIGludG8KLWFub3RoZXIgcmVwb3NpdG9yeSB1c2luZyAnZ2l0IGZldGNoJyBhbmQgJ2dpdCBwdWxsJwotYWZ0ZXIgbW92aW5nIHRoZSBhcmNoaXZlIGJ5IHNvbWUgbWVhbnMgKGUuZy4sIGJ5IHNuZWFrZXJuZXQpLiAgQXMgbm8KK3NzaCwgaHR0cCkgY2Fubm90IGJlIHVzZWQuCisKK1RoZSAnZ2l0IGJ1bmRsZScgY29tbWFuZCBwYWNrYWdlcyBvYmplY3RzIGFuZCByZWZlcmVuY2VzIGluIGFuIGFyY2hpdmUKK2F0IHRoZSBvcmlnaW5hdGluZyBtYWNoaW5lLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBpbnRvIGFub3RoZXIKK3JlcG9zaXRvcnkgdXNpbmcgJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIG9yICdnaXQgY2xvbmUnLAorYWZ0ZXIgbW92aW5nIHRoZSBhcmNoaXZlIGJ5IHNvbWUgbWVhbnMgKGUuZy4sIGJ5IHNuZWFrZXJuZXQpLgorCitBcyBubwogZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVwb3NpdG9yaWVzIGV4aXN0cywgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGEKIGJhc2lzIGZvciB0aGUgYnVuZGxlIHRoYXQgaXMgaGVsZCBieSB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeTogdGhlCiBidW5kbGUgYXNzdW1lcyB0aGF0IGFsbCBvYmplY3RzIGluIHRoZSBiYXNpcyBhcmUgYWxyZWFkeSBpbiB0aGUKQEAgLTMzLDkgKzM2LDExIEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLWNyZWF0ZSA8ZmlsZT46OgorY3JlYXRlIFtvcHRpb25zXSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPjo6CiAJVXNlZCB0byBjcmVhdGUgYSBidW5kbGUgbmFtZWQgJ2ZpbGUnLiAgVGhpcyByZXF1aXJlcyB0aGUKLQknZ2l0LXJldi1saXN0LWFyZ3MnIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KKwknPGdpdC1yZXYtbGlzdC1hcmdzPicgYXJndW1lbnRzIHRvIGRlZmluZSB0aGUgYnVuZGxlIGNvbnRlbnRzLgorCSdvcHRpb25zJyBjb250YWlucyB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgJ2dpdCBidW5kbGUgY3JlYXRlJworCXN1YmNvbW1hbmQuCiAKIHZlcmlmeSA8ZmlsZT46OgogCVVzZWQgdG8gY2hlY2sgdGhhdCBhIGJ1bmRsZSBmaWxlIGlzIHZhbGlkIGFuZCB3aWxsIGFwcGx5CkBAIC03NSw2ICs4MCwzMyBAQAogCW5lY2Vzc2FyaWx5IGV2ZXJ5dGhpbmcgaW4gdGhlIHBhY2sgKGluIHRoaXMgY2FzZSwgJ2dpdCBidW5kbGUnIGFjdHMKIAlsaWtlICdnaXQgZmV0Y2gtcGFjaycpLgogCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYKKwl0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLWFsbC1wcm9ncmVzczo6CisJV2hlbiAtLXN0ZG91dCBpcyBzcGVjaWZpZWQgdGhlbiBwcm9ncmVzcyByZXBvcnQgaXMKKwlkaXNwbGF5ZWQgZHVyaW5nIHRoZSBvYmplY3QgY291bnQgYW5kIGNvbXByZXNzaW9uIHBoYXNlcworCWJ1dCBpbmhpYml0ZWQgZHVyaW5nIHRoZSB3cml0ZS1vdXQgcGhhc2UuIFRoZSByZWFzb24gaXMKKwl0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG91dHB1dCBzdHJlYW0gaXMgZGlyZWN0bHkgbGlua2VkCisJdG8gYW5vdGhlciBjb21tYW5kIHdoaWNoIG1heSB3aXNoIHRvIGRpc3BsYXkgcHJvZ3Jlc3MKKwlzdGF0dXMgb2YgaXRzIG93biBhcyBpdCBwcm9jZXNzZXMgaW5jb21pbmcgcGFjayBkYXRhLgorCVRoaXMgZmxhZyBpcyBsaWtlIC0tcHJvZ3Jlc3MgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIHByb2dyZXNzCisJcmVwb3J0IGZvciB0aGUgd3JpdGUtb3V0IHBoYXNlIGFzIHdlbGwgZXZlbiBpZiAtLXN0ZG91dCBpcworCXVzZWQuCisKKy0tYWxsLXByb2dyZXNzLWltcGxpZWQ6OgorCVRoaXMgaXMgdXNlZCB0byBpbXBseSAtLWFsbC1wcm9ncmVzcyB3aGVuZXZlciBwcm9ncmVzcyBkaXNwbGF5CisJaXMgYWN0aXZhdGVkLiAgVW5saWtlIC0tYWxsLXByb2dyZXNzIHRoaXMgZmxhZyBkb2Vzbid0IGFjdHVhbGx5CisJZm9yY2UgYW55IHByb2dyZXNzIGRpc3BsYXkgYnkgaXRzZWxmLgorCistcTo6CistLXF1aWV0OjoKKwlUaGlzIGZsYWcgbWFrZXMgdGhlIGNvbW1hbmQgbm90IHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MKKwlvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgorCiBTUEVDSUZZSU5HIFJFRkVSRU5DRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC05Miw2ICsxMjQsMTQgQEAKIHRvIGNvbnRhaW4gb2JqZWN0cyBhbHJlYWR5IGluIHRoZSBkZXN0aW5hdGlvbiwgYXMgdGhlc2UgYXJlIGlnbm9yZWQKIHdoZW4gdW5wYWNraW5nIGF0IHRoZSBkZXN0aW5hdGlvbi4KIAorYGdpdCBjbG9uZWAgY2FuIHVzZSBhbnkgYnVuZGxlIGNyZWF0ZWQgd2l0aG91dCBuZWdhdGl2ZSByZWZzcGVjcworKGUuZy4sIGBuZXdgLCBidXQgbm90IGBvbGQuLm5ld2ApLgorSWYgeW91IHdhbnQgdG8gbWF0Y2ggYGdpdCBjbG9uZSAtLW1pcnJvcmAsIHdoaWNoIHdvdWxkIGluY2x1ZGUgeW91cgorcmVmcyBzdWNoIGFzIGByZWZzL3JlbW90ZXMvKmAsIHVzZSBgLS1hbGxgLgorSWYgeW91IHdhbnQgdG8gcHJvdmlkZSB0aGUgc2FtZSBzZXQgb2YgcmVmcyB0aGF0IGEgY2xvbmUgZGlyZWN0bHkKK2Zyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IHdvdWxkIGdldCwgdXNlIGAtLWJyYW5jaGVzIC0tdGFnc2AgZm9yCit0aGUgYDxnaXQtcmV2LWxpc3QtYXJncz5gLgorCiBFWEFNUExFUwogLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dAppbmRleCAzYzA1NzgyLi44NGY0MWE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApAQCAtMzIsNyArMzIsNyBAQAogCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCiAtejo6Ci0JVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzZWFibGUuCisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzYWJsZS4KIAlJZiBgLS1zdGRpbmAgaXMgYWxzbyBnaXZlbiwgaW5wdXQgcGF0aHMgYXJlIHNlcGFyYXRlZAogCXdpdGggYSBOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSBsaW5lZmVlZCBjaGFyYWN0ZXIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0CmluZGV4IDhiNDJjYjMuLjhiMmQ0OWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApAQCAtMzksNyArMzksNyBAQAogCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCiAtejo6Ci0JVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzZWFibGUgKHNlZQorCVRoZSBvdXRwdXQgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIGJlIG1hY2hpbmUtcGFyc2FibGUgKHNlZQogCWJlbG93KS4gIElmIGAtLXN0ZGluYCBpcyBhbHNvIGdpdmVuLCBpbnB1dCBwYXRocyBhcmUgc2VwYXJhdGVkCiAJd2l0aCBhIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGxpbmVmZWVkIGNoYXJhY3Rlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CmluZGV4IGNmM2NhYzAuLmM4ZmI5OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKQEAgLTEyLDE0ICsxMiwxNCBAQAogJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gLS1kZXRhY2ggWzxicmFuY2g+XQogJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gWy0tZGV0YWNoXSA8Y29tbWl0PgogJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gW1stYnwtQnwtLW9ycGhhbl0gPG5ld19icmFuY2g+XSBbPHN0YXJ0X3BvaW50Pl0KLSdnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uCi0nZ2l0IGNoZWNrb3V0JyBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uCi0nZ2l0IGNoZWNrb3V0JyAoLXB8LS1wYXRjaCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dCisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLgorJ2dpdCBjaGVja291dCcgWy1mfC0tb3Vyc3wtLXRoZWlyc3wtbXwtLWNvbmZsaWN0PTxzdHlsZT5dIFs8dHJlZS1pc2g+XSAtLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdCisnZ2l0IGNoZWNrb3V0JyAoLXB8LS1wYXRjaCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogVXBkYXRlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIG1hdGNoIHRoZSB2ZXJzaW9uIGluIHRoZSBpbmRleAotb3IgdGhlIHNwZWNpZmllZCB0cmVlLiAgSWYgbm8gcGF0aHMgYXJlIGdpdmVuLCAnZ2l0IGNoZWNrb3V0JyB3aWxsCitvciB0aGUgc3BlY2lmaWVkIHRyZWUuICBJZiBubyBwYXRoc3BlYyB3YXMgZ2l2ZW4sICdnaXQgY2hlY2tvdXQnIHdpbGwKIGFsc28gdXBkYXRlIGBIRUFEYCB0byBzZXQgdGhlIHNwZWNpZmllZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQKIGJyYW5jaC4KIApAQCAtNzksMTMgKzc5LDE0IEBACiArCiBPbWl0dGluZyBgPGJyYW5jaD5gIGRldGFjaGVzIGBIRUFEYCBhdCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KIAotJ2dpdCBjaGVja291dCcgWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLjo6CisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLjo6CisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIC0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF06OgogCi0JT3ZlcndyaXRlIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgYnkgcmVwbGFjaW5nIHdpdGggdGhlCi0JY29udGVudHMgaW4gdGhlIGluZGV4IG9yIGluIHRoZSBgPHRyZWUtaXNoPmAgKG1vc3Qgb2Z0ZW4gYQotCWNvbW1pdCkuICBXaGVuIGEgYDx0cmVlLWlzaD5gIGlzIGdpdmVuLCB0aGUgcGF0aHMgdGhhdAotCW1hdGNoIHRoZSBgPHBhdGhzcGVjPmAgYXJlIHVwZGF0ZWQgYm90aCBpbiB0aGUgaW5kZXggYW5kIGluCi0JdGhlIHdvcmtpbmcgdHJlZS4KKwlPdmVyd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSBwYXRoc3BlYy4KKwlXaGVuIHRoZSBgPHRyZWUtaXNoPmAgKG1vc3Qgb2Z0ZW4gYSBjb21taXQpIGlzIG5vdCBnaXZlbiwKKwlvdmVyd3JpdGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGNvbnRlbnRzIGluIHRoZSBpbmRleC4KKwlXaGVuIHRoZSBgPHRyZWUtaXNoPmAgaXMgZ2l2ZW4sIG92ZXJ3cml0ZSBib3RoIHRoZSBpbmRleCBhbmQKKwl0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGNvbnRlbnRzIGF0IHRoZSBgPHRyZWUtaXNoPmAuCiArCiBUaGUgaW5kZXggbWF5IGNvbnRhaW4gdW5tZXJnZWQgZW50cmllcyBiZWNhdXNlIG9mIGEgcHJldmlvdXMgZmFpbGVkIG1lcmdlLgogQnkgZGVmYXVsdCwgaWYgeW91IHRyeSB0byBjaGVjayBvdXQgc3VjaCBhbiBlbnRyeSBmcm9tIHRoZSBpbmRleCwgdGhlCkBAIC05NiwxMiArOTcsMTAgQEAKIGZpbGUgY2FuIGJlIGRpc2NhcmRlZCB0byByZS1jcmVhdGUgdGhlIG9yaWdpbmFsIGNvbmZsaWN0ZWQgbWVyZ2UgcmVzdWx0LgogCiAnZ2l0IGNoZWNrb3V0JyAoLXB8LS1wYXRjaCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dOjoKLQlUaGlzIGlzIHNpbWlsYXIgdG8gdGhlICJjaGVjayBvdXQgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZQotCWZyb20gZWl0aGVyIHRoZSBpbmRleCBvciBmcm9tIGEgdHJlZS1pc2giIG1vZGUgZGVzY3JpYmVkCi0JYWJvdmUsIGJ1dCBsZXRzIHlvdSB1c2UgdGhlIGludGVyYWN0aXZlIGludGVyZmFjZSB0byBzaG93Ci0JdGhlICJkaWZmIiBvdXRwdXQgYW5kIGNob29zZSB3aGljaCBodW5rcyB0byB1c2UgaW4gdGhlCi0JcmVzdWx0LiAgU2VlIGJlbG93IGZvciB0aGUgZGVzY3JpcHRpb24gb2YgYC0tcGF0Y2hgIG9wdGlvbi4KLQorCVRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgbW9kZSwgYnV0IGxldHMgeW91IHVzZSB0aGUKKwlpbnRlcmFjdGl2ZSBpbnRlcmZhY2UgdG8gc2hvdyB0aGUgImRpZmYiIG91dHB1dCBhbmQgY2hvb3NlIHdoaWNoCisJaHVua3MgdG8gdXNlIGluIHRoZSByZXN1bHQuICBTZWUgYmVsb3cgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZgorCWAtLXBhdGNoYCBvcHRpb24uCiAKIE9QVElPTlMKIC0tLS0tLS0KQEAgLTMwOSw2ICszMDgsMTkgQEAKIAl3b3JraW5nIHRyZWUsIGJ1dCBub3QgaW4gYDx0cmVlLWlzaD5gIGFyZSByZW1vdmVkLCB0byBtYWtlIHRoZW0KIAltYXRjaCBgPHRyZWUtaXNoPmAgZXhhY3RseS4KIAorLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlQYXRoc3BlYyBpcyBwYXNzZWQgaW4gYDxmaWxlPmAgaW5zdGVhZCBvZiBjb21tYW5kbGluZSBhcmdzLiBJZgorCWA8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKKwllbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKKwlxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCisJZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tcGF0aHNwZWMtZnJvbS1maWxlYC4gUGF0aHNwZWMgZWxlbWVudHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCisJbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKIDxicmFuY2g+OjoKIAlCcmFuY2ggdG8gY2hlY2tvdXQ7IGlmIGl0IHJlZmVycyB0byBhIGJyYW5jaCAoaS5lLiwgYSBuYW1lIHRoYXQsCiAJd2hlbiBwcmVwZW5kZWQgd2l0aCAicmVmcy9oZWFkcy8iLCBpcyBhIHZhbGlkIHJlZiksIHRoZW4gdGhhdApAQCAtMzM5LDcgKzM1MSwxMyBAQAogCVRyZWUgdG8gY2hlY2tvdXQgZnJvbSAod2hlbiBwYXRocyBhcmUgZ2l2ZW4pLiBJZiBub3Qgc3BlY2lmaWVkLAogCXRoZSBpbmRleCB3aWxsIGJlIHVzZWQuCiAKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KIAorPHBhdGhzcGVjPi4uLjo6CisJTGltaXRzIHRoZSBwYXRocyBhZmZlY3RlZCBieSB0aGUgb3BlcmF0aW9uLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCiAKIERFVEFDSEVEIEhFQUQKIC0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAppbmRleCAzNDAxMWMyLi5iZjI0ZjE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CkBAIC0xNSw3ICsxNSw3IEBACiAJICBbLS1kaXNzb2NpYXRlXSBbLS1zZXBhcmF0ZS1naXQtZGlyIDxnaXQgZGlyPl0KIAkgIFstLWRlcHRoIDxkZXB0aD5dIFstLVtuby1dc2luZ2xlLWJyYW5jaF0gWy0tbm8tdGFnc10KIAkgIFstLXJlY3Vyc2Utc3VibW9kdWxlc1s9PHBhdGhzcGVjPl1dIFstLVtuby1dc2hhbGxvdy1zdWJtb2R1bGVzXQotCSAgWy0tW25vLV1yZW1vdGUtc3VibW9kdWxlc10gWy0tam9icyA8bj5dIFstLV0gPHJlcG9zaXRvcnk+CisJICBbLS1bbm8tXXJlbW90ZS1zdWJtb2R1bGVzXSBbLS1qb2JzIDxuPl0gWy0tc3BhcnNlXSBbLS1dIDxyZXBvc2l0b3J5PgogCSAgWzxkaXJlY3Rvcnk+XQogCiBERVNDUklQVElPTgpAQCAtMTU2LDYgKzE1NiwxMiBAQAogCXVzZWQsIG5laXRoZXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vciB0aGUgcmVsYXRlZAogCWNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBjcmVhdGVkLgogCistLXNwYXJzZTo6CisJSW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgc28gdGhlIHdvcmtpbmcKKwlkaXJlY3Rvcnkgc3RhcnRzIHdpdGggb25seSB0aGUgZmlsZXMgaW4gdGhlIHJvb3QKKwlvZiB0aGUgcmVwb3NpdG9yeS4gVGhlIHNwYXJzZS1jaGVja291dCBmaWxlIGNhbiBiZQorCW1vZGlmaWVkIHRvIGdyb3cgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFzIG5lZWRlZC4KKwogLS1taXJyb3I6OgogCVNldCB1cCBhIG1pcnJvciBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGlzIGltcGxpZXMgYC0tYmFyZWAuCiAJQ29tcGFyZWQgdG8gYC0tYmFyZWAsIGAtLW1pcnJvcmAgbm90IG9ubHkgbWFwcyBsb2NhbCBicmFuY2hlcyBvZiB0aGUKQEAgLTI2Miw5ICsyNjgsOSBAQAogCUFsbCBzdWJtb2R1bGVzIHdoaWNoIGFyZSBjbG9uZWQgd2lsbCBiZSBzaGFsbG93IHdpdGggYSBkZXB0aCBvZiAxLgogCiAtLVtuby1dcmVtb3RlLXN1Ym1vZHVsZXM6OgotCUFsbCBzdWJtb2R1bGVzIHdoaWNoIGFyZSBjbG9uZWQgd2lsbCB1c2UgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxl4oCZcworCUFsbCBzdWJtb2R1bGVzIHdoaWNoIGFyZSBjbG9uZWQgd2lsbCB1c2UgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxlJ3MKIAlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLCByYXRoZXIgdGhhbiB0aGUKLQlzdXBlcnByb2plY3TigJlzIHJlY29yZGVkIFNIQS0xLiBFcXVpdmFsZW50IHRvIHBhc3NpbmcgYC0tcmVtb3RlYCB0bworCXN1cGVycHJvamVjdCdzIHJlY29yZGVkIFNIQS0xLiBFcXVpdmFsZW50IHRvIHBhc3NpbmcgYC0tcmVtb3RlYCB0bwogCWBnaXQgc3VibW9kdWxlIHVwZGF0ZWAuCiAKIC0tc2VwYXJhdGUtZ2l0LWRpcj08Z2l0IGRpcj46OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQKaW5kZXggOGM3MDhhNy4uYmNkODVjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0CkBAIC05LDcgKzksNiBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGNvbW1pdC1ncmFwaCByZWFkJyBbLS1vYmplY3QtZGlyIDxkaXI+XQogJ2dpdCBjb21taXQtZ3JhcGggdmVyaWZ5JyBbLS1vYmplY3QtZGlyIDxkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXQogJ2dpdCBjb21taXQtZ3JhcGggd3JpdGUnIDxvcHRpb25zPiBbLS1vYmplY3QtZGlyIDxkaXI+XSBbLS1bbm8tXXByb2dyZXNzXQogCkBAIC03NCwxMSArNzMsNiBAQAogYmUgdGhlIGN1cnJlbnQgdGltZS4gQWZ0ZXIgd3JpdGluZyB0aGUgc3BsaXQgY29tbWl0LWdyYXBoLCBkZWxldGUgYWxsCiB1bnVzZWQgY29tbWl0LWdyYXBoIHdob3NlIG1vZGlmaWVkIHRpbWVzIGFyZSBvbGRlciB0aGFuIGBkYXRldGltZWAuCiAKLSdyZWFkJzo6Ci0KLVJlYWQgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGFuZCBvdXRwdXQgYmFzaWMgZGV0YWlscyBhYm91dCBpdC4KLVVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLQogJ3ZlcmlmeSc6OgogCiBSZWFkIHRoZSBjb21taXQtZ3JhcGggZmlsZSBhbmQgdmVyaWZ5IGl0cyBjb250ZW50cyBhZ2FpbnN0IHRoZSBvYmplY3QKQEAgLTExOCwxMiArMTEyLDYgQEAKICQgZ2l0IHJldi1wYXJzZSBIRUFEIHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgLS1hcHBlbmQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0qIFJlYWQgYmFzaWMgaW5mb3JtYXRpb24gZnJvbSB0aGUgY29tbWl0LWdyYXBoIGZpbGUuCi0rCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNvbW1pdC1ncmFwaCByZWFkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKaW5kZXggYWZhN2I3NS4uY2VkNWE5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CkBAIC0xMyw3ICsxMyw4IEBACiAJICAgWy1GIDxmaWxlPiB8IC1tIDxtc2c+XSBbLS1yZXNldC1hdXRob3JdIFstLWFsbG93LWVtcHR5XQogCSAgIFstLWFsbG93LWVtcHR5LW1lc3NhZ2VdIFstLW5vLXZlcmlmeV0gWy1lXSBbLS1hdXRob3I9PGF1dGhvcj5dCiAJICAgWy0tZGF0ZT08ZGF0ZT5dIFstLWNsZWFudXA9PG1vZGU+XSBbLS1bbm8tXXN0YXR1c10KLQkgICBbLWkgfCAtb10gWy1TWzxrZXlpZD5dXSBbLS1dIFs8ZmlsZT4uLi5dCisJICAgWy1pIHwgLW9dIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXQorCSAgIFstU1s8a2V5aWQ+XV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yNzgsNiArMjc5LDE5IEBACiAJYWxyZWFkeSBiZWVuIHN0YWdlZC4gSWYgdXNlZCB0b2dldGhlciB3aXRoIGAtLWFsbG93LWVtcHR5YAogCXBhdGhzIGFyZSBhbHNvIG5vdCByZXF1aXJlZCwgYW5kIGFuIGVtcHR5IGNvbW1pdCB3aWxsIGJlIGNyZWF0ZWQuCiAKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCiAtdVs8bW9kZT5dOjoKIC0tdW50cmFja2VkLWZpbGVzWz08bW9kZT5dOjoKIAlTaG93IHVudHJhY2tlZCBmaWxlcy4KQEAgLTM0NSwxMiArMzU5LDEzIEBACiBcLS06OgogCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCiAKLTxmaWxlPi4uLjo6Ci0JV2hlbiBmaWxlcyBhcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIGNvbW1hbmQKLQljb21taXRzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZXMsIHdpdGhvdXQKLQlyZWNvcmRpbmcgdGhlIGNoYW5nZXMgYWxyZWFkeSBzdGFnZWQuICBUaGUgY29udGVudHMgb2YKLQl0aGVzZSBmaWxlcyBhcmUgYWxzbyBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdCBvbiB0b3AKLQlvZiB3aGF0IGhhdmUgYmVlbiBzdGFnZWQgYmVmb3JlLgorPHBhdGhzcGVjPi4uLjo6CisJV2hlbiBwYXRoc3BlYyBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBjb21taXQgdGhlIGNvbnRlbnRzIG9mCisJdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjIHdpdGhvdXQgcmVjb3JkaW5nIHRoZSBjaGFuZ2VzCisJYWxyZWFkeSBhZGRlZCB0byB0aGUgaW5kZXguIFRoZSBjb250ZW50cyBvZiB0aGVzZSBmaWxlcyBhcmUgYWxzbworCXN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0IG9uIHRvcCBvZiB3aGF0IGhhdmUgYmVlbiBzdGFnZWQgYmVmb3JlLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCiAKIDpnaXQtY29tbWl0OiAxCiBpbmNsdWRlOjpkYXRlLWZvcm1hdHMudHh0W10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC50eHQKaW5kZXggYjIxMTQ0MC4uNmYwYzdjYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC50eHQKQEAgLTE5LDggKzE5LDcgQEAKIHVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzLiBUaGUgZ2l0LWNyZWRlbnRpYWwgY29tbWFuZCBleHBvc2VzIHRoaXMKIGludGVyZmFjZSB0byBzY3JpcHRzIHdoaWNoIG1heSB3YW50IHRvIHJldHJpZXZlLCBzdG9yZSwgb3IgcHJvbXB0IGZvcgogY3JlZGVudGlhbHMgaW4gdGhlIHNhbWUgbWFubmVyIGFzIEdpdC4gVGhlIGRlc2lnbiBvZiB0aGlzIHNjcmlwdGFibGUKLWludGVyZmFjZSBtb2RlbHMgdGhlIGludGVybmFsIEMgQVBJOyBzZWUKLWxpbms6dGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy5odG1sW3RoZSBHaXQgY3JlZGVudGlhbCBBUEldIGZvciBtb3JlCitpbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlIGNyZWRlbnRpYWwuaCBmb3IgbW9yZQogYmFja2dyb3VuZCBvbiB0aGUgY29uY2VwdHMuCiAKIGdpdC1jcmVkZW50aWFsIHRha2VzIGFuICJhY3Rpb24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZC1saW5lIChvbmUgb2YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CmluZGV4IDc5ZTIyYjEuLjFiMWM3MWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dApAQCAtMjk0LDcgKzI5NCw3IEBACiAJR2l0IGRpcmVjdG9yeSBuYW1lCiAlZzo6CiAJR2l0IGRpcmVjdG9yeSBuYW1lLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgZm9yCi0JYWxwaGEtbnVtZXJpYyBvbmVzLCBgLmAsIGFuZCBgLWAgYXJlIHJlcGxhY2VkIHdpdGgKKwlhbHBoYW51bWVyaWMgb25lcywgYC5gLCBhbmQgYC1gIGFyZSByZXBsYWNlZCB3aXRoCiAJYF9gICh0aGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGRpcmVjdG9yeQogCW5hbWUgaW4gYSBmaWxlbmFtZSBpZiB3YW50ZWQpCiAlbTo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CmluZGV4IDcyMTc5ZDkuLjM3NzgxY2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CkBAIC0zNiw3ICszNiw3IEBACiAJcnVubmluZyB0aGUgY29tbWFuZCBpbiBhIHdvcmtpbmcgdHJlZSBjb250cm9sbGVkIGJ5IEdpdCBhbmQKIAlhdCBsZWFzdCBvbmUgb2YgdGhlIHBhdGhzIHBvaW50cyBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUsCiAJb3Igd2hlbiBydW5uaW5nIHRoZSBjb21tYW5kIG91dHNpZGUgYSB3b3JraW5nIHRyZWUKLQljb250cm9sbGVkIGJ5IEdpdC4KKwljb250cm9sbGVkIGJ5IEdpdC4gVGhpcyBmb3JtIGltcGxpZXMgYC0tZXhpdC1jb2RlYC4KIAogJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSAtLWNhY2hlZCBbPGNvbW1pdD5dIFstLV0gWzxwYXRoPi4uLl06OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKaW5kZXggMzc2MzRiZi4uZTg5NTBkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dApAQCAtMTQyLDcgKzE0Miw3IEBACiAJU3BlY2lmeSBob3cgdG8gaGFuZGxlIGBlbmNvZGluZ2AgaGVhZGVyIGluIGNvbW1pdCBvYmplY3RzLiAgV2hlbgogCWFza2luZyB0byAnYWJvcnQnICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoaXMgcHJvZ3JhbSB3aWxsIGRpZQogCXdoZW4gZW5jb3VudGVyaW5nIHN1Y2ggYSBjb21taXQgb2JqZWN0LiAgV2l0aCAneWVzJywgdGhlIGNvbW1pdAotCW1lc3NhZ2Ugd2lsbCBiZSByZWVuY29kZWQgaW50byBVVEYtOC4gIFdpdGggJ25vJywgdGhlIG9yaWdpbmFsCisJbWVzc2FnZSB3aWxsIGJlIHJlLWVuY29kZWQgaW50byBVVEYtOC4gIFdpdGggJ25vJywgdGhlIG9yaWdpbmFsCiAJZW5jb2Rpbmcgd2lsbCBiZSBwcmVzZXJ2ZWQuCiAKIC0tcmVmc3BlYzo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CmluZGV4IDU4NzY1OTguLmE1MzBmZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CkBAIC00NjYsMTMgKzQ2NiwxMyBAQAogaW1wb3NzaWJsZSBmb3IgYSBiYWNrd2FyZC1jb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIHRvIGV2ZXIgYmUgZmFzdDoKIAogKiBJbiBlZGl0aW5nIGZpbGVzLCBnaXQtZmlsdGVyLWJyYW5jaCBieSBkZXNpZ24gY2hlY2tzIG91dCBlYWNoIGFuZAotZXZlcnkgY29tbWl0IGFzIGl0IGV4aXN0ZWQgaW4gdGhlIG9yaWdpbmFsIHJlcG8uICBJZiB5b3VyIHJlcG8gaGFzIDEwXF41Ci1maWxlcyBhbmQgMTBcXjUgY29tbWl0cywgYnV0IGVhY2ggY29tbWl0IG9ubHkgbW9kaWZpZXMgNSBmaWxlcywgdGhlbgotZ2l0LWZpbHRlci1icmFuY2ggd2lsbCBtYWtlIHlvdSBkbyAxMFxeMTAgbW9kaWZpY2F0aW9ucywgZGVzcGl0ZSBvbmx5Ci1oYXZpbmcgKGF0IG1vc3QpIDUqMTBeNSB1bmlxdWUgYmxvYnMuCisgIGV2ZXJ5IGNvbW1pdCBhcyBpdCBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCByZXBvLiAgSWYgeW91ciByZXBvIGhhcworICAxMFxeNSBmaWxlcyBhbmQgMTBcXjUgY29tbWl0cywgYnV0IGVhY2ggY29tbWl0IG9ubHkgbW9kaWZpZXMgNQorICBmaWxlcywgdGhlbiBnaXQtZmlsdGVyLWJyYW5jaCB3aWxsIG1ha2UgeW91IGRvIDEwXF4xMCBtb2RpZmljYXRpb25zLAorICBkZXNwaXRlIG9ubHkgaGF2aW5nIChhdCBtb3N0KSA1KjEwXjUgdW5pcXVlIGJsb2JzLgogCiAqIElmIHlvdSB0cnkgYW5kIGNoZWF0IGFuZCB0cnkgdG8gbWFrZSBnaXQtZmlsdGVyLWJyYW5jaCBvbmx5IHdvcmsgb24KLWZpbGVzIG1vZGlmaWVkIGluIGEgY29tbWl0LCB0aGVuIHR3byB0aGluZ3MgaGFwcGVuCisgIGZpbGVzIG1vZGlmaWVkIGluIGEgY29tbWl0LCB0aGVuIHR3byB0aGluZ3MgaGFwcGVuCiAKICAgKiogeW91IHJ1biBpbnRvIHByb2JsZW1zIHdpdGggZGVsZXRpb25zIHdoZW5ldmVyIHRoZSB1c2VyIGlzIHNpbXBseQogICAgICB0cnlpbmcgdG8gcmVuYW1lIGZpbGVzIChiZWNhdXNlIGF0dGVtcHRpbmcgdG8gZGVsZXRlIGZpbGVzIHRoYXQKQEAgLTQ4MSwzOSArNDgxLDQxIEBACiAgICAgIHVzZXItcHJvdmlkZWQgc2hlbGwpCiAKICAgKiogZXZlbiBpZiB5b3Ugc3VjY2VlZCBhdCB0aGUgbWFwLWRlbGV0ZXMtZm9yLXJlbmFtZXMgY2hpY2FuZXJ5LCB5b3UKLSAgICAgc3RpbGwgdGVjaG5pY2FsbHkgdmlvbGF0ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJlY2F1c2UgdXNlcnMgYXJlCi0gICAgIGFsbG93ZWQgdG8gZmlsdGVyIGZpbGVzIGluIHdheXMgdGhhdCBkZXBlbmQgdXBvbiB0b3BvbG9neSBvZgotICAgICBjb21taXRzIGluc3RlYWQgb2YgZmlsdGVyaW5nIHNvbGVseSBiYXNlZCBvbiBmaWxlIGNvbnRlbnRzIG9yIG5hbWVzCi0gICAgICh0aG91Z2ggdGhpcyBoYXMgbm90IGJlZW4gb2JzZXJ2ZWQgaW4gdGhlIHdpbGQpLgorICAgICBzdGlsbCB0ZWNobmljYWxseSB2aW9sYXRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjYXVzZSB1c2VycworICAgICBhcmUgYWxsb3dlZCB0byBmaWx0ZXIgZmlsZXMgaW4gd2F5cyB0aGF0IGRlcGVuZCB1cG9uIHRvcG9sb2d5IG9mCisgICAgIGNvbW1pdHMgaW5zdGVhZCBvZiBmaWx0ZXJpbmcgc29sZWx5IGJhc2VkIG9uIGZpbGUgY29udGVudHMgb3IKKyAgICAgbmFtZXMgKHRob3VnaCB0aGlzIGhhcyBub3QgYmVlbiBvYnNlcnZlZCBpbiB0aGUgd2lsZCkuCiAKICogRXZlbiBpZiB5b3UgZG9uJ3QgbmVlZCB0byBlZGl0IGZpbGVzIGJ1dCBvbmx5IHdhbnQgdG8gZS5nLiByZW5hbWUgb3IKLXJlbW92ZSBzb21lIGFuZCB0aHVzIGNhbiBhdm9pZCBjaGVja2luZyBvdXQgZWFjaCBmaWxlIChpLmUuIHlvdSBjYW4gdXNlCi0tLWluZGV4LWZpbHRlciksIHlvdSBzdGlsbCBhcmUgcGFzc2luZyBzaGVsbCBzbmlwcGV0cyBmb3IgeW91ciBmaWx0ZXJzLgotVGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBjb21taXQsIHlvdSBoYXZlIHRvIGhhdmUgYSBwcmVwYXJlZCBnaXQgcmVwbwotd2hlcmUgdGhvc2UgZmlsdGVycyBjYW4gYmUgcnVuLiAgVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2V0dXAuCisgIHJlbW92ZSBzb21lIGFuZCB0aHVzIGNhbiBhdm9pZCBjaGVja2luZyBvdXQgZWFjaCBmaWxlIChpLmUuIHlvdSBjYW4KKyAgdXNlIC0taW5kZXgtZmlsdGVyKSwgeW91IHN0aWxsIGFyZSBwYXNzaW5nIHNoZWxsIHNuaXBwZXRzIGZvciB5b3VyCisgIGZpbHRlcnMuICBUaGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGNvbW1pdCwgeW91IGhhdmUgdG8gaGF2ZSBhCisgIHByZXBhcmVkIGdpdCByZXBvIHdoZXJlIHRob3NlIGZpbHRlcnMgY2FuIGJlIHJ1bi4gIFRoYXQncyBhCisgIHNpZ25pZmljYW50IHNldHVwLgogCi0qIEZ1cnRoZXIsIHNldmVyYWwgYWRkaXRpb25hbCBmaWxlcyBhcmUgY3JlYXRlZCBvciB1cGRhdGVkIHBlciBjb21taXQgYnkKLWdpdC1maWx0ZXItYnJhbmNoLiAgU29tZSBvZiB0aGVzZSBhcmUgZm9yIHN1cHBvcnRpbmcgdGhlIGNvbnZlbmllbmNlCi1mdW5jdGlvbnMgcHJvdmlkZWQgYnkgZ2l0LWZpbHRlci1icmFuY2ggKHN1Y2ggYXMgbWFwKCkpLCB3aGlsZSBvdGhlcnMKLWFyZSBmb3Iga2VlcGluZyB0cmFjayBvZiBpbnRlcm5hbCBzdGF0ZSAoYnV0IGNvdWxkIGhhdmUgYWxzbyBiZWVuCi1hY2Nlc3NlZCBieSB1c2VyIGZpbHRlcnM7IG9uZSBvZiBnaXQtZmlsdGVyLWJyYW5jaCdzIHJlZ3Jlc3Npb24gdGVzdHMKLWRvZXMgc28pLiAgVGhpcyBlc3NlbnRpYWxseSBhbW91bnRzIHRvIHVzaW5nIHRoZSBmaWxlc3lzdGVtIGFzIGFuIElQQwotbWVjaGFuaXNtIGJldHdlZW4gZ2l0LWZpbHRlci1icmFuY2ggYW5kIHRoZSB1c2VyLXByb3ZpZGVkIGZpbHRlcnMuCi1EaXNrcyB0ZW5kIHRvIGJlIGEgc2xvdyBJUEMgbWVjaGFuaXNtLCBhbmQgd3JpdGluZyB0aGVzZSBmaWxlcyBhbHNvCi1lZmZlY3RpdmVseSByZXByZXNlbnRzIGEgZm9yY2VkIHN5bmNocm9uaXphdGlvbiBwb2ludCBiZXR3ZWVuIHNlcGFyYXRlCi1wcm9jZXNzZXMgdGhhdCB3ZSBoaXQgd2l0aCBldmVyeSBjb21taXQuCisqIEZ1cnRoZXIsIHNldmVyYWwgYWRkaXRpb25hbCBmaWxlcyBhcmUgY3JlYXRlZCBvciB1cGRhdGVkIHBlciBjb21taXQKKyAgYnkgZ2l0LWZpbHRlci1icmFuY2guICBTb21lIG9mIHRoZXNlIGFyZSBmb3Igc3VwcG9ydGluZyB0aGUKKyAgY29udmVuaWVuY2UgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGdpdC1maWx0ZXItYnJhbmNoIChzdWNoIGFzIG1hcCgpKSwKKyAgd2hpbGUgb3RoZXJzIGFyZSBmb3Iga2VlcGluZyB0cmFjayBvZiBpbnRlcm5hbCBzdGF0ZSAoYnV0IGNvdWxkIGhhdmUKKyAgYWxzbyBiZWVuIGFjY2Vzc2VkIGJ5IHVzZXIgZmlsdGVyczsgb25lIG9mIGdpdC1maWx0ZXItYnJhbmNoJ3MKKyAgcmVncmVzc2lvbiB0ZXN0cyBkb2VzIHNvKS4gIFRoaXMgZXNzZW50aWFsbHkgYW1vdW50cyB0byB1c2luZyB0aGUKKyAgZmlsZXN5c3RlbSBhcyBhbiBJUEMgbWVjaGFuaXNtIGJldHdlZW4gZ2l0LWZpbHRlci1icmFuY2ggYW5kIHRoZQorICB1c2VyLXByb3ZpZGVkIGZpbHRlcnMuICBEaXNrcyB0ZW5kIHRvIGJlIGEgc2xvdyBJUEMgbWVjaGFuaXNtLCBhbmQKKyAgd3JpdGluZyB0aGVzZSBmaWxlcyBhbHNvIGVmZmVjdGl2ZWx5IHJlcHJlc2VudHMgYSBmb3JjZWQKKyAgc3luY2hyb25pemF0aW9uIHBvaW50IGJldHdlZW4gc2VwYXJhdGUgcHJvY2Vzc2VzIHRoYXQgd2UgaGl0IHdpdGgKKyAgZXZlcnkgY29tbWl0LgogCiAqIFRoZSB1c2VyLXByb3ZpZGVkIHNoZWxsIGNvbW1hbmRzIHdpbGwgbGlrZWx5IGludm9sdmUgYSBwaXBlbGluZSBvZgotY29tbWFuZHMsIHJlc3VsdGluZyBpbiB0aGUgY3JlYXRpb24gb2YgbWFueSBwcm9jZXNzZXMgcGVyIGNvbW1pdC4KLUNyZWF0aW5nIGFuZCBydW5uaW5nIGFub3RoZXIgcHJvY2VzcyB0YWtlcyBhIHdpZGVseSB2YXJ5aW5nIGFtb3VudCBvZgotdGltZSBiZXR3ZWVuIG9wZXJhdGluZyBzeXN0ZW1zLCBidXQgb24gYW55IHBsYXRmb3JtIGl0IGlzIHZlcnkgc2xvdwotcmVsYXRpdmUgdG8gaW52b2tpbmcgYSBmdW5jdGlvbi4KKyAgY29tbWFuZHMsIHJlc3VsdGluZyBpbiB0aGUgY3JlYXRpb24gb2YgbWFueSBwcm9jZXNzZXMgcGVyIGNvbW1pdC4KKyAgQ3JlYXRpbmcgYW5kIHJ1bm5pbmcgYW5vdGhlciBwcm9jZXNzIHRha2VzIGEgd2lkZWx5IHZhcnlpbmcgYW1vdW50CisgIG9mIHRpbWUgYmV0d2VlbiBvcGVyYXRpbmcgc3lzdGVtcywgYnV0IG9uIGFueSBwbGF0Zm9ybSBpdCBpcyB2ZXJ5CisgIHNsb3cgcmVsYXRpdmUgdG8gaW52b2tpbmcgYSBmdW5jdGlvbi4KIAogKiBnaXQtZmlsdGVyLWJyYW5jaCBpdHNlbGYgaXMgd3JpdHRlbiBpbiBzaGVsbCwgd2hpY2ggaXMga2luZCBvZiBzbG93LgotVGhpcyBpcyB0aGUgb25lIHBlcmZvcm1hbmNlIGlzc3VlIHRoYXQgY291bGQgYmUgYmFja3dhcmQtY29tcGF0aWJseQotZml4ZWQsIGJ1dCBjb21wYXJlZCB0byB0aGUgYWJvdmUgcHJvYmxlbXMgdGhhdCBhcmUgaW50cmluc2ljIHRvIHRoZQotZGVzaWduIG9mIGdpdC1maWx0ZXItYnJhbmNoLCB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIHRvb2wgaXRzZWxmIGlzIGEKLXJlbGF0aXZlbHkgbWlub3IgaXNzdWUuCisgIFRoaXMgaXMgdGhlIG9uZSBwZXJmb3JtYW5jZSBpc3N1ZSB0aGF0IGNvdWxkIGJlIGJhY2t3YXJkLWNvbXBhdGlibHkKKyAgZml4ZWQsIGJ1dCBjb21wYXJlZCB0byB0aGUgYWJvdmUgcHJvYmxlbXMgdGhhdCBhcmUgaW50cmluc2ljIHRvIHRoZQorICBkZXNpZ24gb2YgZ2l0LWZpbHRlci1icmFuY2gsIHRoZSBsYW5ndWFnZSBvZiB0aGUgdG9vbCBpdHNlbGYgaXMgYQorICByZWxhdGl2ZWx5IG1pbm9yIGlzc3VlLgogCiAgICoqIFNpZGUgbm90ZTogVW5mb3J0dW5hdGVseSwgcGVvcGxlIHRlbmQgdG8gZml4YXRlIG9uIHRoZQogICAgICB3cml0dGVuLWluLXNoZWxsIGFzcGVjdCBhbmQgcGVyaW9kaWNhbGx5IGFzayBpZiBnaXQtZmlsdGVyLWJyYW5jaApAQCAtNTM0LDcgKzUzNiw3IEBACiBodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwby9ibG9iL21hc3Rlci9jb250cmliL2ZpbHRlci1yZXBvLWRlbW9zL2ZpbHRlci1sYW1lbHlbZmlsdGVyLWxhbWVseV0sCiBhIGRyb3AtaW4gZ2l0LWZpbHRlci1icmFuY2ggcmVwbGFjZW1lbnQgKHdpdGggYSBmZXcgY2F2ZWF0cykuICBXaGlsZQogZmlsdGVyLWxhbWVseSBzdWZmZXJzIGZyb20gYWxsIHRoZSBzYW1lIHNhZmV0eSBpc3N1ZXMgYXMKLWdpdC1maWx0ZXItYnJhbmNoLCBpdCBhdCBsZWFzdCBhbWVsb3JpYXRlcyB0aGUgcGVyZm9ybWFuY2UgaXNzdWVzIGEKK2dpdC1maWx0ZXItYnJhbmNoLCBpdCBhdCBsZWFzdCBhbWVsaW9yYXRlcyB0aGUgcGVyZm9ybWFuY2UgaXNzdWVzIGEKIGxpdHRsZS4KIAogW1tTQUZFVFldXQpAQCAtNTQ2LDUxICs1NDgsNTUgQEAKIHdpdGg6CiAKICogU29tZW9uZSBjYW4gaGF2ZSBhIHNldCBvZiAid29ya2luZyBhbmQgdGVzdGVkIGZpbHRlcnMiIHdoaWNoIHRoZXkKLWRvY3VtZW50IG9yIHByb3ZpZGUgdG8gYSBjb3dvcmtlciwgd2hvIHRoZW4gcnVucyB0aGVtIG9uIGEgZGlmZmVyZW50IE9TCi13aGVyZSB0aGUgc2FtZSBjb21tYW5kcyBhcmUgbm90IHdvcmtpbmcvdGVzdGVkIChzb21lIGV4YW1wbGVzIGluIHRoZQotZ2l0LWZpbHRlci1icmFuY2ggbWFucGFnZSBhcmUgYWxzbyBhZmZlY3RlZCBieSB0aGlzKS4gIEJTRCB2cy4gR05VCi11c2VybGFuZCBkaWZmZXJlbmNlcyBjYW4gcmVhbGx5IGJpdGUuICBJZiBsdWNreSwgZXJyb3IgbWVzc2FnZXMgYXJlCi1zcGV3ZWQuICBCdXQganVzdCBhcyBsaWtlbHksIHRoZSBjb21tYW5kcyBlaXRoZXIgZG9uJ3QgZG8gdGhlIGZpbHRlcmluZwotcmVxdWVzdGVkLCBvciBzaWxlbnRseSBjb3JydXB0IGJ5IG1ha2luZyBzb21lIHVud2FudGVkIGNoYW5nZS4gIFRoZQotdW53YW50ZWQgY2hhbmdlIG1heSBvbmx5IGFmZmVjdCBhIGZldyBjb21taXRzLCBzbyBpdCdzIG5vdCBuZWNlc3NhcmlseQotb2J2aW91cyBlaXRoZXIuICAoVGhlIGZhY3QgdGhhdCBwcm9ibGVtcyB3b24ndCBuZWNlc3NhcmlseSBiZSBvYnZpb3VzCi1tZWFucyB0aGV5IGFyZSBsaWtlbHkgdG8gZ28gdW5ub3RpY2VkIHVudGlsIHRoZSByZXdyaXR0ZW4gaGlzdG9yeSBpcyBpbgotdXNlIGZvciBxdWl0ZSBhIHdoaWxlLCBhdCB3aGljaCBwb2ludCBpdCdzIHJlYWxseSBoYXJkIHRvIGp1c3RpZnkKLWFub3RoZXIgZmxhZy1kYXkgZm9yIGFub3RoZXIgcmV3cml0ZS4pCisgIGRvY3VtZW50IG9yIHByb3ZpZGUgdG8gYSBjb3dvcmtlciwgd2hvIHRoZW4gcnVucyB0aGVtIG9uIGEgZGlmZmVyZW50CisgIE9TIHdoZXJlIHRoZSBzYW1lIGNvbW1hbmRzIGFyZSBub3Qgd29ya2luZy90ZXN0ZWQgKHNvbWUgZXhhbXBsZXMgaW4KKyAgdGhlIGdpdC1maWx0ZXItYnJhbmNoIG1hbnBhZ2UgYXJlIGFsc28gYWZmZWN0ZWQgYnkgdGhpcykuCisgIEJTRCB2cy4gR05VIHVzZXJsYW5kIGRpZmZlcmVuY2VzIGNhbiByZWFsbHkgYml0ZS4gIElmIGx1Y2t5LCBlcnJvcgorICBtZXNzYWdlcyBhcmUgc3Bld2VkLiAgQnV0IGp1c3QgYXMgbGlrZWx5LCB0aGUgY29tbWFuZHMgZWl0aGVyIGRvbid0CisgIGRvIHRoZSBmaWx0ZXJpbmcgcmVxdWVzdGVkLCBvciBzaWxlbnRseSBjb3JydXB0IGJ5IG1ha2luZyBzb21lCisgIHVud2FudGVkIGNoYW5nZS4gIFRoZSB1bndhbnRlZCBjaGFuZ2UgbWF5IG9ubHkgYWZmZWN0IGEgZmV3IGNvbW1pdHMsCisgIHNvIGl0J3Mgbm90IG5lY2Vzc2FyaWx5IG9idmlvdXMgZWl0aGVyLiAgKFRoZSBmYWN0IHRoYXQgcHJvYmxlbXMKKyAgd29uJ3QgbmVjZXNzYXJpbHkgYmUgb2J2aW91cyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgdG8gZ28gdW5ub3RpY2VkCisgIHVudGlsIHRoZSByZXdyaXR0ZW4gaGlzdG9yeSBpcyBpbiB1c2UgZm9yIHF1aXRlIGEgd2hpbGUsIGF0IHdoaWNoCisgIHBvaW50IGl0J3MgcmVhbGx5IGhhcmQgdG8ganVzdGlmeSBhbm90aGVyIGZsYWctZGF5IGZvciBhbm90aGVyCisgIHJld3JpdGUuKQogCiAqIEZpbGVuYW1lcyB3aXRoIHNwYWNlcyBhcmUgb2Z0ZW4gbWlzaGFuZGxlZCBieSBzaGVsbCBzbmlwcGV0cyBzaW5jZQotdGhleSBjYXVzZSBwcm9ibGVtcyBmb3Igc2hlbGwgcGlwZWxpbmVzLiAgTm90IGV2ZXJ5b25lIGlzIGZhbWlsaWFyIHdpdGgKLWZpbmQgLXByaW50MCwgeGFyZ3MgLTAsIGdpdC1scy1maWxlcyAteiwgZXRjLiAgRXZlbiBwZW9wbGUgd2hvIGFyZQotZmFtaWxpYXIgd2l0aCB0aGVzZSBtYXkgYXNzdW1lIHN1Y2ggZmxhZ3MgYXJlIG5vdCByZWxldmFudCBiZWNhdXNlCi1zb21lb25lIGVsc2UgcmVuYW1lZCBhbnkgc3VjaCBmaWxlcyBpbiB0aGVpciByZXBvIGJhY2sgYmVmb3JlIHRoZSBwZXJzb24KLWRvaW5nIHRoZSBmaWx0ZXJpbmcgam9pbmVkIHRoZSBwcm9qZWN0LiAgQW5kIG9mdGVuLCBldmVuIHRob3NlIGZhbWlsaWFyCi13aXRoIGhhbmRsaW5nIGFyZ3VtZW50cyB3aXRoIHNwYWNlcyBtYXkgbm90IGRvIHNvIGp1c3QgYmVjYXVzZSB0aGV5Ci1hcmVuJ3QgaW4gdGhlIG1pbmRzZXQgb2YgdGhpbmtpbmcgYWJvdXQgZXZlcnl0aGluZyB0aGF0IGNvdWxkIHBvc3NpYmx5Ci1nbyB3cm9uZy4KKyAgdGhleSBjYXVzZSBwcm9ibGVtcyBmb3Igc2hlbGwgcGlwZWxpbmVzLiAgTm90IGV2ZXJ5b25lIGlzIGZhbWlsaWFyCisgIHdpdGggZmluZCAtcHJpbnQwLCB4YXJncyAtMCwgZ2l0LWxzLWZpbGVzIC16LCBldGMuICBFdmVuIHBlb3BsZSB3aG8KKyAgYXJlIGZhbWlsaWFyIHdpdGggdGhlc2UgbWF5IGFzc3VtZSBzdWNoIGZsYWdzIGFyZSBub3QgcmVsZXZhbnQKKyAgYmVjYXVzZSBzb21lb25lIGVsc2UgcmVuYW1lZCBhbnkgc3VjaCBmaWxlcyBpbiB0aGVpciByZXBvIGJhY2sKKyAgYmVmb3JlIHRoZSBwZXJzb24gZG9pbmcgdGhlIGZpbHRlcmluZyBqb2luZWQgdGhlIHByb2plY3QuICBBbmQKKyAgb2Z0ZW4sIGV2ZW4gdGhvc2UgZmFtaWxpYXIgd2l0aCBoYW5kbGluZyBhcmd1bWVudHMgd2l0aCBzcGFjZXMgbWF5CisgIG5vdCBkbyBzbyBqdXN0IGJlY2F1c2UgdGhleSBhcmVuJ3QgaW4gdGhlIG1pbmRzZXQgb2YgdGhpbmtpbmcgYWJvdXQKKyAgZXZlcnl0aGluZyB0aGF0IGNvdWxkIHBvc3NpYmx5IGdvIHdyb25nLgogCi0qIE5vbi1hc2NpaSBmaWxlbmFtZXMgY2FuIGJlIHNpbGVudGx5IHJlbW92ZWQgZGVzcGl0ZSBiZWluZyBpbiBhIGRlc2lyZWQKLWRpcmVjdG9yeS4gIEtlZXBpbmcgb25seSB3YW50ZWQgcGF0aHMgaXMgb2Z0ZW4gZG9uZSB1c2luZyBwaXBlbGluZXMgbGlrZQotYGdpdCBscy1maWxlcyB8IGdyZXAgLXYgXldBTlRFRF9ESVIvIHwgeGFyZ3MgZ2l0IHJtYC4gIGxzLWZpbGVzIHdpbGwKLW9ubHkgcXVvdGUgZmlsZW5hbWVzIGlmIG5lZWRlZCwgc28gZm9sa3MgbWF5IG5vdCBub3RpY2UgdGhhdCBvbmUgb2YgdGhlCi1maWxlcyBkaWRuJ3QgbWF0Y2ggdGhlIHJlZ2V4IChhdCBsZWFzdCBub3QgdW50aWwgaXQncyBtdWNoIHRvbyBsYXRlKS4KLVllcywgc29tZW9uZSB3aG8ga25vd3MgYWJvdXQgY29yZS5xdW90ZVBhdGggY2FuIGF2b2lkIHRoaXMgKHVubGVzcyB0aGV5Ci1oYXZlIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIFx0LCBcbiwgb3IgIiksIGFuZCBwZW9wbGUgd2hvIHVzZQotbHMtZmlsZXMgLXogd2l0aCBzb21ldGhpbmcgb3RoZXIgdGhhbiBncmVwIGNhbiBhdm9pZCB0aGlzLCBidXQgdGhhdAotZG9lc24ndCBtZWFuIHRoZXkgd2lsbC4KKyogTm9uLWFzY2lpIGZpbGVuYW1lcyBjYW4gYmUgc2lsZW50bHkgcmVtb3ZlZCBkZXNwaXRlIGJlaW5nIGluIGEKKyAgZGVzaXJlZCBkaXJlY3RvcnkuICBLZWVwaW5nIG9ubHkgd2FudGVkIHBhdGhzIGlzIG9mdGVuIGRvbmUgdXNpbmcKKyAgcGlwZWxpbmVzIGxpa2UgYGdpdCBscy1maWxlcyB8IGdyZXAgLXYgXldBTlRFRF9ESVIvIHwgeGFyZ3MgZ2l0IHJtYC4KKyAgbHMtZmlsZXMgd2lsbCBvbmx5IHF1b3RlIGZpbGVuYW1lcyBpZiBuZWVkZWQsIHNvIGZvbGtzIG1heSBub3QKKyAgbm90aWNlIHRoYXQgb25lIG9mIHRoZSBmaWxlcyBkaWRuJ3QgbWF0Y2ggdGhlIHJlZ2V4IChhdCBsZWFzdCBub3QKKyAgdW50aWwgaXQncyBtdWNoIHRvbyBsYXRlKS4gIFllcywgc29tZW9uZSB3aG8ga25vd3MgYWJvdXQKKyAgY29yZS5xdW90ZVBhdGggY2FuIGF2b2lkIHRoaXMgKHVubGVzcyB0aGV5IGhhdmUgb3RoZXIgc3BlY2lhbAorICBjaGFyYWN0ZXJzIGxpa2UgXHQsIFxuLCBvciAiKSwgYW5kIHBlb3BsZSB3aG8gdXNlIGxzLWZpbGVzIC16IHdpdGgKKyAgc29tZXRoaW5nIG90aGVyIHRoYW4gZ3JlcCBjYW4gYXZvaWQgdGhpcywgYnV0IHRoYXQgZG9lc24ndCBtZWFuIHRoZXkKKyAgd2lsbC4KIAotKiBTaW1pbGFybHksIHdoZW4gbW92aW5nIGZpbGVzIGFyb3VuZCwgb25lIGNhbiBmaW5kIHRoYXQgZmlsZW5hbWVzIHdpdGgKLW5vbi1hc2NpaSBvciBzcGVjaWFsIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeSwgb25lCi10aGF0IGluY2x1ZGVzIGEgZG91YmxlIHF1b3RlIGNoYXJhY3Rlci4gIChUaGlzIGlzIHRlY2huaWNhbGx5IHRoZSBzYW1lCi1pc3N1ZSBhcyBhYm92ZSB3aXRoIHF1b3RpbmcsIGJ1dCBwZXJoYXBzIGFuIGludGVyZXN0aW5nIGRpZmZlcmVudCB3YXkKLXRoYXQgaXQgY2FuIGFuZCBoYXMgbWFuaWZlc3RlZCBhcyBhIHByb2JsZW0uKQorKiBTaW1pbGFybHksIHdoZW4gbW92aW5nIGZpbGVzIGFyb3VuZCwgb25lIGNhbiBmaW5kIHRoYXQgZmlsZW5hbWVzCisgIHdpdGggbm9uLWFzY2lpIG9yIHNwZWNpYWwgY2hhcmFjdGVycyBlbmQgdXAgaW4gYSBkaWZmZXJlbnQKKyAgZGlyZWN0b3J5LCBvbmUgdGhhdCBpbmNsdWRlcyBhIGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXIuICAoVGhpcyBpcworICB0ZWNobmljYWxseSB0aGUgc2FtZSBpc3N1ZSBhcyBhYm92ZSB3aXRoIHF1b3RpbmcsIGJ1dCBwZXJoYXBzIGFuCisgIGludGVyZXN0aW5nIGRpZmZlcmVudCB3YXkgdGhhdCBpdCBjYW4gYW5kIGhhcyBtYW5pZmVzdGVkIGFzIGEKKyAgcHJvYmxlbS4pCiAKICogSXQncyBmYXIgdG9vIGVhc3kgdG8gYWNjaWRlbnRhbGx5IG1peCB1cCBvbGQgYW5kIG5ldyBoaXN0b3J5LiAgSXQncwotc3RpbGwgcG9zc2libGUgd2l0aCBhbnkgdG9vbCwgYnV0IGdpdC1maWx0ZXItYnJhbmNoIGFsbW9zdCBpbnZpdGVzIGl0LgotSWYgbHVja3ksIHRoZSBvbmx5IGRvd25zaWRlIGlzIHVzZXJzIGdldHRpbmcgZnJ1c3RyYXRlZCB0aGF0IHRoZXkgZG9uJ3QKLWtub3cgaG93IHRvIHNocmluayB0aGVpciByZXBvIGFuZCByZW1vdmUgdGhlIG9sZCBzdHVmZi4gIElmIHVubHVja3ksCi10aGV5IG1lcmdlIG9sZCBhbmQgbmV3IGhpc3RvcnkgYW5kIGVuZCB1cCB3aXRoIG11bHRpcGxlICJjb3BpZXMiIG9mIGVhY2gKLWNvbW1pdCwgc29tZSBvZiB3aGljaCBoYXZlIHVud2FudGVkIG9yIHNlbnNpdGl2ZSBmaWxlcyBhbmQgb3RoZXJzIHdoaWNoCi1kb24ndC4gIFRoaXMgY29tZXMgYWJvdXQgaW4gbXVsdGlwbGUgZGlmZmVyZW50IHdheXM6CisgIHN0aWxsIHBvc3NpYmxlIHdpdGggYW55IHRvb2wsIGJ1dCBnaXQtZmlsdGVyLWJyYW5jaCBhbG1vc3QKKyAgaW52aXRlcyBpdC4gIElmIGx1Y2t5LCB0aGUgb25seSBkb3duc2lkZSBpcyB1c2VycyBnZXR0aW5nIGZydXN0cmF0ZWQKKyAgdGhhdCB0aGV5IGRvbid0IGtub3cgaG93IHRvIHNocmluayB0aGVpciByZXBvIGFuZCByZW1vdmUgdGhlIG9sZAorICBzdHVmZi4gIElmIHVubHVja3ksIHRoZXkgbWVyZ2Ugb2xkIGFuZCBuZXcgaGlzdG9yeSBhbmQgZW5kIHVwIHdpdGgKKyAgbXVsdGlwbGUgImNvcGllcyIgb2YgZWFjaCBjb21taXQsIHNvbWUgb2Ygd2hpY2ggaGF2ZSB1bndhbnRlZCBvcgorICBzZW5zaXRpdmUgZmlsZXMgYW5kIG90aGVycyB3aGljaCBkb24ndC4gIFRoaXMgY29tZXMgYWJvdXQgaW4KKyAgbXVsdGlwbGUgZGlmZmVyZW50IHdheXM6CiAKICAgKiogdGhlIGRlZmF1bHQgdG8gb25seSBkb2luZyBhIHBhcnRpYWwgaGlzdG9yeSByZXdyaXRlICgnLS1hbGwnIGlzIG5vdAogICAgICB0aGUgZGVmYXVsdCBhbmQgZmV3IGV4YW1wbGVzIHNob3cgaXQpCkBAIC02MDksOCArNjE1LDggQEAKICAgICAgIkRJU0NVU1NJT04iIHNlY3Rpb24gb2YgdGhlIGdpdCBmaWx0ZXItcmVwbyBtYW51YWwgcGFnZSBmb3IgbW9yZQogICAgICBkZXRhaWxzLgogCi0qIEFubm90YXRlZCB0YWdzIGNhbiBiZSBhY2NpZGVudGFsbHkgY29udmVydGVkIHRvIGxpZ2h0d2VpZ2h0IHRhZ3MsIGR1ZQotdG8gZWl0aGVyIG9mIHR3byBpc3N1ZXM6CisqIEFubm90YXRlZCB0YWdzIGNhbiBiZSBhY2NpZGVudGFsbHkgY29udmVydGVkIHRvIGxpZ2h0d2VpZ2h0IHRhZ3MsCisgIGR1ZSB0byBlaXRoZXIgb2YgdHdvIGlzc3VlczoKIAogICAqKiBTb21lb25lIGNhbiBkbyBhIGhpc3RvcnkgcmV3cml0ZSwgcmVhbGl6ZSB0aGV5IG1lc3NlZCB1cCwgcmVzdG9yZQogICAgICBmcm9tIHRoZSBiYWNrdXBzIGluIHJlZnMvb3JpZ2luYWwvLCBhbmQgdGhlbiByZWRvIHRoZWlyCkBAIC02MjMsNzEgKzYyOSw3NCBAQAogICAgICByZXN0b3JlZCBmcm9tIHJlZnMvb3JpZ2luYWwvIGluIGEgcHJldmlvdXNseSBib3RjaGVkIHJld3JpdGUpLgogCiAqIEFueSBjb21taXQgbWVzc2FnZXMgdGhhdCBzcGVjaWZ5IGFuIGVuY29kaW5nIHdpbGwgYmVjb21lIGNvcnJ1cHRlZAotYnkgdGhlIHJld3JpdGU7IGdpdC1maWx0ZXItYnJhbmNoIGlnbm9yZXMgdGhlIGVuY29kaW5nLCB0YWtlcyB0aGUgb3JpZ2luYWwKLWJ5dGVzLCBhbmQgZmVlZHMgaXQgdG8gY29tbWl0LXRyZWUgd2l0aG91dCB0ZWxsaW5nIGl0IHRoZSBwcm9wZXIKLWVuY29kaW5nLiAgKFRoaXMgaGFwcGVucyB3aGV0aGVyIG9yIG5vdCAtLW1zZy1maWx0ZXIgaXMgdXNlZC4pCisgIGJ5IHRoZSByZXdyaXRlOyBnaXQtZmlsdGVyLWJyYW5jaCBpZ25vcmVzIHRoZSBlbmNvZGluZywgdGFrZXMgdGhlCisgIG9yaWdpbmFsIGJ5dGVzLCBhbmQgZmVlZHMgaXQgdG8gY29tbWl0LXRyZWUgd2l0aG91dCB0ZWxsaW5nIGl0IHRoZQorICBwcm9wZXIgZW5jb2RpbmcuICAoVGhpcyBoYXBwZW5zIHdoZXRoZXIgb3Igbm90IC0tbXNnLWZpbHRlciBpcworICB1c2VkLikKIAogKiBDb21taXQgbWVzc2FnZXMgKGV2ZW4gaWYgdGhleSBhcmUgYWxsIFVURi04KSBieSBkZWZhdWx0IGJlY29tZQotY29ycnVwdGVkIGR1ZSB0byBub3QgYmVpbmcgdXBkYXRlZCAtLSBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBjb21taXQKLWhhc2hlcyBpbiBjb21taXQgbWVzc2FnZXMgd2lsbCBub3cgcmVmZXIgdG8gbm8tbG9uZ2VyLWV4dGFudCBjb21taXRzLgorICBjb3JydXB0ZWQgZHVlIHRvIG5vdCBiZWluZyB1cGRhdGVkIC0tIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIGNvbW1pdAorICBoYXNoZXMgaW4gY29tbWl0IG1lc3NhZ2VzIHdpbGwgbm93IHJlZmVyIHRvIG5vLWxvbmdlci1leHRhbnQKKyAgY29tbWl0cy4KIAotKiBUaGVyZSBhcmUgbm8gZmFjaWxpdGllcyBmb3IgaGVscGluZyB1c2VycyBmaW5kIHdoYXQgdW53YW50ZWQgY3J1ZCB0aGV5Ci1zaG91bGQgZGVsZXRlLCB3aGljaCBtZWFucyB0aGV5IGFyZSBtdWNoIG1vcmUgbGlrZWx5IHRvIGhhdmUgaW5jb21wbGV0ZQotb3IgcGFydGlhbCBjbGVhbnVwcyB0aGF0IHNvbWV0aW1lcyByZXN1bHQgaW4gY29uZnVzaW9uIGFuZCBwZW9wbGUKLXdhc3RpbmcgdGltZSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gIChGb3IgZXhhbXBsZSwgZm9sa3MgdGVuZCB0byBqdXN0Ci1sb29rIGZvciBiaWcgZmlsZXMgdG8gZGVsZXRlIGluc3RlYWQgb2YgYmlnIGRpcmVjdG9yaWVzIG9yIGV4dGVuc2lvbnMsCi1hbmQgb25jZSB0aGV5IGRvIHNvLCB0aGVuIHNvbWV0aW1lIGxhdGVyIGZvbGtzIHVzaW5nIHRoZSBuZXcgcmVwb3NpdG9yeQotd2hvIGFyZSBnb2luZyB0aHJvdWdoIGhpc3Rvcnkgd2lsbCBub3RpY2UgYSBidWlsZCBhcnRpZmFjdCBkaXJlY3RvcnkKLXRoYXQgaGFzIHNvbWUgZmlsZXMgYnV0IG5vdCBvdGhlcnMsIG9yIGEgY2FjaGUgb2YgZGVwZW5kZW5jaWVzCi0obm9kZV9tb2R1bGVzIG9yIHNpbWlsYXIpIHdoaWNoIGNvdWxkbid0IGhhdmUgZXZlciBiZWVuIGZ1bmN0aW9uYWwgc2luY2UKLWl0J3MgbWlzc2luZyBzb21lIGZpbGVzLikKKyogVGhlcmUgYXJlIG5vIGZhY2lsaXRpZXMgZm9yIGhlbHBpbmcgdXNlcnMgZmluZCB3aGF0IHVud2FudGVkIGNydWQKKyAgdGhleSBzaG91bGQgZGVsZXRlLCB3aGljaCBtZWFucyB0aGV5IGFyZSBtdWNoIG1vcmUgbGlrZWx5IHRvIGhhdmUKKyAgaW5jb21wbGV0ZSBvciBwYXJ0aWFsIGNsZWFudXBzIHRoYXQgc29tZXRpbWVzIHJlc3VsdCBpbiBjb25mdXNpb24KKyAgYW5kIHBlb3BsZSB3YXN0aW5nIHRpbWUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQuICAoRm9yIGV4YW1wbGUsIGZvbGtzCisgIHRlbmQgdG8ganVzdCBsb29rIGZvciBiaWcgZmlsZXMgdG8gZGVsZXRlIGluc3RlYWQgb2YgYmlnIGRpcmVjdG9yaWVzCisgIG9yIGV4dGVuc2lvbnMsIGFuZCBvbmNlIHRoZXkgZG8gc28sIHRoZW4gc29tZXRpbWUgbGF0ZXIgZm9sa3MgdXNpbmcKKyAgdGhlIG5ldyByZXBvc2l0b3J5IHdobyBhcmUgZ29pbmcgdGhyb3VnaCBoaXN0b3J5IHdpbGwgbm90aWNlIGEgYnVpbGQKKyAgYXJ0aWZhY3QgZGlyZWN0b3J5IHRoYXQgaGFzIHNvbWUgZmlsZXMgYnV0IG5vdCBvdGhlcnMsIG9yIGEgY2FjaGUgb2YKKyAgZGVwZW5kZW5jaWVzIChub2RlX21vZHVsZXMgb3Igc2ltaWxhcikgd2hpY2ggY291bGRuJ3QgaGF2ZSBldmVyIGJlZW4KKyAgZnVuY3Rpb25hbCBzaW5jZSBpdCdzIG1pc3Npbmcgc29tZSBmaWxlcy4pCiAKICogSWYgLS1wcnVuZS1lbXB0eSBpc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhlIGZpbHRlcmluZyBwcm9jZXNzIGNhbgotY3JlYXRlIGhvYXJkcyBvZiBjb25mdXNpbmcgZW1wdHkgY29tbWl0cworICBjcmVhdGUgaG9hcmRzIG9mIGNvbmZ1c2luZyBlbXB0eSBjb21taXRzCiAKICogSWYgLS1wcnVuZS1lbXB0eSBpcyBzcGVjaWZpZWQsIHRoZW4gaW50ZW50aW9uYWxseSBwbGFjZWQgZW1wdHkKLWNvbW1pdHMgZnJvbSBiZWZvcmUgdGhlIGZpbHRlcmluZyBvcGVyYXRpb24gYXJlIGFsc28gcHJ1bmVkIGluc3RlYWQgb2YKLWp1c3QgcHJ1bmluZyBjb21taXRzIHRoYXQgYmVjYW1lIGVtcHR5IGR1ZSB0byBmaWx0ZXJpbmcgcnVsZXMuCisgIGNvbW1pdHMgZnJvbSBiZWZvcmUgdGhlIGZpbHRlcmluZyBvcGVyYXRpb24gYXJlIGFsc28gcHJ1bmVkIGluc3RlYWQKKyAgb2YganVzdCBwcnVuaW5nIGNvbW1pdHMgdGhhdCBiZWNhbWUgZW1wdHkgZHVlIHRvIGZpbHRlcmluZyBydWxlcy4KIAotKiBJZiAtLXBydW5lIGVtcHR5IGlzIHNwZWNpZmllZCwgc29tZXRpbWVzIGVtcHR5IGNvbW1pdHMgYXJlIG1pc3NlZAotYW5kIGxlZnQgYXJvdW5kIGFueXdheSAoYSBzb21ld2hhdCByYXJlIGJ1ZywgYnV0IGl0IGhhcHBlbnMuLi4pCisqIElmIC0tcHJ1bmUtZW1wdHkgaXMgc3BlY2lmaWVkLCBzb21ldGltZXMgZW1wdHkgY29tbWl0cyBhcmUgbWlzc2VkCisgIGFuZCBsZWZ0IGFyb3VuZCBhbnl3YXkgKGEgc29tZXdoYXQgcmFyZSBidWcsIGJ1dCBpdCBoYXBwZW5zLi4uKQogCiAqIEEgbWlub3IgaXNzdWUsIGJ1dCB1c2VycyB3aG8gaGF2ZSBhIGdvYWwgdG8gdXBkYXRlIGFsbCBuYW1lcyBhbmQKLWVtYWlscyBpbiBhIHJlcG9zaXRvcnkgbWF5IGJlIGxlZCB0byAtLWVudi1maWx0ZXIgd2hpY2ggd2lsbCBvbmx5IHVwZGF0ZQotYXV0aG9ycyBhbmQgY29tbWl0dGVycywgbWlzc2luZyB0YWdnZXJzLgorICBlbWFpbHMgaW4gYSByZXBvc2l0b3J5IG1heSBiZSBsZWQgdG8gLS1lbnYtZmlsdGVyIHdoaWNoIHdpbGwgb25seQorICB1cGRhdGUgYXV0aG9ycyBhbmQgY29tbWl0dGVycywgbWlzc2luZyB0YWdnZXJzLgogCiAqIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgLS10YWctbmFtZS1maWx0ZXIgdGhhdCBtYXBzIG11bHRpcGxlIHRhZ3MgdG8KLXRoZSBzYW1lIG5hbWUsIG5vIHdhcm5pbmcgb3IgZXJyb3IgaXMgcHJvdmlkZWQ7IGdpdC1maWx0ZXItYnJhbmNoIHNpbXBseQotb3ZlcndyaXRlcyBlYWNoIHRhZyBpbiBzb21lIHVuZG9jdW1lbnRlZCBwcmUtZGVmaW5lZCBvcmRlciByZXN1bHRpbmcgaW4KLW9ubHkgb25lIHRhZyBhdCB0aGUgZW5kLiAgKEEgZ2l0LWZpbHRlci1icmFuY2ggcmVncmVzc2lvbiB0ZXN0IHJlcXVpcmVzCi10aGlzIHN1cnByaXNpbmcgYmVoYXZpb3IuKQorICB0aGUgc2FtZSBuYW1lLCBubyB3YXJuaW5nIG9yIGVycm9yIGlzIHByb3ZpZGVkOyBnaXQtZmlsdGVyLWJyYW5jaAorICBzaW1wbHkgb3ZlcndyaXRlcyBlYWNoIHRhZyBpbiBzb21lIHVuZG9jdW1lbnRlZCBwcmUtZGVmaW5lZCBvcmRlcgorICByZXN1bHRpbmcgaW4gb25seSBvbmUgdGFnIGF0IHRoZSBlbmQuICAoQSBnaXQtZmlsdGVyLWJyYW5jaAorICByZWdyZXNzaW9uIHRlc3QgcmVxdWlyZXMgdGhpcyBzdXJwcmlzaW5nIGJlaGF2aW9yLikKIAogQWxzbywgdGhlIHBvb3IgcGVyZm9ybWFuY2Ugb2YgZ2l0LWZpbHRlci1icmFuY2ggb2Z0ZW4gbGVhZHMgdG8gc2FmZXR5CiBpc3N1ZXM6CiAKLSogQ29taW5nIHVwIHdpdGggdGhlIGNvcnJlY3Qgc2hlbGwgc25pcHBldCB0byBkbyB0aGUgZmlsdGVyaW5nIHlvdSB3YW50Ci1pcyBzb21ldGltZXMgZGlmZmljdWx0IHVubGVzcyB5b3UncmUganVzdCBkb2luZyBhIHRyaXZpYWwgbW9kaWZpY2F0aW9uCi1zdWNoIGFzIGRlbGV0aW5nIGEgY291cGxlIGZpbGVzLiAgVW5mb3J0dW5hdGVseSwgcGVvcGxlIG9mdGVuIGxlYXJuIGlmCi10aGUgc25pcHBldCBpcyByaWdodCBvciB3cm9uZyBieSB0cnlpbmcgaXQgb3V0LCBidXQgdGhlIHJpZ2h0bmVzcyBvcgotd3JvbmduZXNzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMgKHNwYWNlcyBpbgotZmlsZW5hbWVzLCBub24tYXNjaWkgZmlsZW5hbWVzLCBmdW5ueSBhdXRob3IgbmFtZXMgb3IgZW1haWxzLCBpbnZhbGlkCi10aW1lem9uZXMsIHByZXNlbmNlIG9mIGdyYWZ0cyBvciByZXBsYWNlIG9iamVjdHMsIGV0Yy4pLCBtZWFuaW5nIHRoZXkKLW1heSBoYXZlIHRvIHdhaXQgYSBsb25nIHRpbWUsIGhpdCBhbiBlcnJvciwgdGhlbiByZXN0YXJ0LiAgVGhlCi1wZXJmb3JtYW5jZSBvZiBnaXQtZmlsdGVyLWJyYW5jaCBpcyBzbyBiYWQgdGhhdCB0aGlzIGN5Y2xlIGlzIHBhaW5mdWwsCi1yZWR1Y2luZyB0aGUgdGltZSBhdmFpbGFibGUgdG8gY2FyZWZ1bGx5IHJlLWNoZWNrICh0byBzYXkgbm90aGluZyBhYm91dAotd2hhdCBpdCBkb2VzIHRvIHRoZSBwYXRpZW5jZSBvZiB0aGUgcGVyc29uIGRvaW5nIHRoZSByZXdyaXRlIGV2ZW4gaWYKLXRoZXkgZG8gdGVjaG5pY2FsbHkgaGF2ZSBtb3JlIHRpbWUgYXZhaWxhYmxlKS4gIFRoaXMgcHJvYmxlbSBpcyBleHRyYQotY29tcG91bmRlZCBiZWNhdXNlIGVycm9ycyBmcm9tIGJyb2tlbiBmaWx0ZXJzIG1heSBub3QgYmUgc2hvd24gZm9yIGEKLWxvbmcgdGltZSBhbmQvb3IgZ2V0IGxvc3QgaW4gYSBzZWEgb2Ygb3V0cHV0LiAgRXZlbiB3b3JzZSwgYnJva2VuCi1maWx0ZXJzIG9mdGVuIGp1c3QgcmVzdWx0IGluIHNpbGVudCBpbmNvcnJlY3QgcmV3cml0ZXMuCisqIENvbWluZyB1cCB3aXRoIHRoZSBjb3JyZWN0IHNoZWxsIHNuaXBwZXQgdG8gZG8gdGhlIGZpbHRlcmluZyB5b3UKKyAgd2FudCBpcyBzb21ldGltZXMgZGlmZmljdWx0IHVubGVzcyB5b3UncmUganVzdCBkb2luZyBhIHRyaXZpYWwKKyAgbW9kaWZpY2F0aW9uIHN1Y2ggYXMgZGVsZXRpbmcgYSBjb3VwbGUgZmlsZXMuICBVbmZvcnR1bmF0ZWx5LCBwZW9wbGUKKyAgb2Z0ZW4gbGVhcm4gaWYgdGhlIHNuaXBwZXQgaXMgcmlnaHQgb3Igd3JvbmcgYnkgdHJ5aW5nIGl0IG91dCwgYnV0CisgIHRoZSByaWdodG5lc3Mgb3Igd3JvbmduZXNzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiBzcGVjaWFsCisgIGNpcmN1bXN0YW5jZXMgKHNwYWNlcyBpbiBmaWxlbmFtZXMsIG5vbi1hc2NpaSBmaWxlbmFtZXMsIGZ1bm55CisgIGF1dGhvciBuYW1lcyBvciBlbWFpbHMsIGludmFsaWQgdGltZXpvbmVzLCBwcmVzZW5jZSBvZiBncmFmdHMgb3IKKyAgcmVwbGFjZSBvYmplY3RzLCBldGMuKSwgbWVhbmluZyB0aGV5IG1heSBoYXZlIHRvIHdhaXQgYSBsb25nIHRpbWUsCisgIGhpdCBhbiBlcnJvciwgdGhlbiByZXN0YXJ0LiAgVGhlIHBlcmZvcm1hbmNlIG9mIGdpdC1maWx0ZXItYnJhbmNoIGlzCisgIHNvIGJhZCB0aGF0IHRoaXMgY3ljbGUgaXMgcGFpbmZ1bCwgcmVkdWNpbmcgdGhlIHRpbWUgYXZhaWxhYmxlIHRvCisgIGNhcmVmdWxseSByZS1jaGVjayAodG8gc2F5IG5vdGhpbmcgYWJvdXQgd2hhdCBpdCBkb2VzIHRvIHRoZQorICBwYXRpZW5jZSBvZiB0aGUgcGVyc29uIGRvaW5nIHRoZSByZXdyaXRlIGV2ZW4gaWYgdGhleSBkbyB0ZWNobmljYWxseQorICBoYXZlIG1vcmUgdGltZSBhdmFpbGFibGUpLiAgVGhpcyBwcm9ibGVtIGlzIGV4dHJhIGNvbXBvdW5kZWQgYmVjYXVzZQorICBlcnJvcnMgZnJvbSBicm9rZW4gZmlsdGVycyBtYXkgbm90IGJlIHNob3duIGZvciBhIGxvbmcgdGltZSBhbmQvb3IKKyAgZ2V0IGxvc3QgaW4gYSBzZWEgb2Ygb3V0cHV0LiAgRXZlbiB3b3JzZSwgYnJva2VuIGZpbHRlcnMgb2Z0ZW4ganVzdAorICByZXN1bHQgaW4gc2lsZW50IGluY29ycmVjdCByZXdyaXRlcy4KIAotKiBUbyB0b3AgaXQgYWxsIG9mZiwgZXZlbiB3aGVuIHVzZXJzIGZpbmFsbHkgZmluZCB3b3JraW5nIGNvbW1hbmRzLCB0aGV5Ci1uYXR1cmFsbHkgd2FudCB0byBzaGFyZSB0aGVtLiAgQnV0IHRoZXkgbWF5IGJlIHVuYXdhcmUgdGhhdCB0aGVpciByZXBvCi1kaWRuJ3QgaGF2ZSBzb21lIHNwZWNpYWwgY2FzZXMgdGhhdCBzb21lb25lIGVsc2UncyBkb2VzLiAgU28sIHdoZW4KLXNvbWVvbmUgZWxzZSB3aXRoIGEgZGlmZmVyZW50IHJlcG9zaXRvcnkgcnVucyB0aGUgc2FtZSBjb21tYW5kcywgdGhleQotZ2V0IGhpdCBieSB0aGUgcHJvYmxlbXMgYWJvdmUuICBPciwgdGhlIHVzZXIganVzdCBydW5zIGNvbW1hbmRzIHRoYXQKLXJlYWxseSB3ZXJlIHZldHRlZCBmb3Igc3BlY2lhbCBjYXNlcywgYnV0IHRoZXkgcnVuIGl0IG9uIGEgZGlmZmVyZW50IE9TCi13aGVyZSBpdCBkb2Vzbid0IHdvcmssIGFzIG5vdGVkIGFib3ZlLgorKiBUbyB0b3AgaXQgYWxsIG9mZiwgZXZlbiB3aGVuIHVzZXJzIGZpbmFsbHkgZmluZCB3b3JraW5nIGNvbW1hbmRzLAorICB0aGV5IG5hdHVyYWxseSB3YW50IHRvIHNoYXJlIHRoZW0uICBCdXQgdGhleSBtYXkgYmUgdW5hd2FyZSB0aGF0CisgIHRoZWlyIHJlcG8gZGlkbid0IGhhdmUgc29tZSBzcGVjaWFsIGNhc2VzIHRoYXQgc29tZW9uZSBlbHNlJ3MgZG9lcy4KKyAgU28sIHdoZW4gc29tZW9uZSBlbHNlIHdpdGggYSBkaWZmZXJlbnQgcmVwb3NpdG9yeSBydW5zIHRoZSBzYW1lCisgIGNvbW1hbmRzLCB0aGV5IGdldCBoaXQgYnkgdGhlIHByb2JsZW1zIGFib3ZlLiAgT3IsIHRoZSB1c2VyIGp1c3QKKyAgcnVucyBjb21tYW5kcyB0aGF0IHJlYWxseSB3ZXJlIHZldHRlZCBmb3Igc3BlY2lhbCBjYXNlcywgYnV0IHRoZXkKKyAgcnVuIGl0IG9uIGEgZGlmZmVyZW50IE9TIHdoZXJlIGl0IGRvZXNuJ3Qgd29yaywgYXMgbm90ZWQgYWJvdmUuCiAKIEdJVAogLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAppbmRleCAyMDM1ZDRkLi4wZDRmODk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKQEAgLTE5LDYgKzE5LDcgQEAKIAkJICAgWy0tc3RhcnQtbnVtYmVyIDxuPl0gWy0tbnVtYmVyZWQtZmlsZXNdCiAJCSAgIFstLWluLXJlcGx5LXRvPTxtZXNzYWdlIGlkPl0gWy0tc3VmZml4PS48c2Z4Pl0KIAkJICAgWy0taWdub3JlLWlmLWluLXVwc3RyZWFtXQorCQkgICBbLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPTxtb2RlPl0KIAkJICAgWy0tcmZjXSBbLS1zdWJqZWN0LXByZWZpeD08c3ViamVjdCBwcmVmaXg+XQogCQkgICBbKC0tcmVyb2xsLWNvdW50fC12KSA8bj5dCiAJCSAgIFstLXRvPTxlbWFpbD5dIFstLWNjPTxlbWFpbD5dCkBAIC0xNzIsNiArMTczLDI2IEBACiAJcGF0Y2hlcyBiZWluZyBnZW5lcmF0ZWQsIGFuZCBhbnkgcGF0Y2ggdGhhdCBtYXRjaGVzIGlzCiAJaWdub3JlZC4KIAorLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPTxtb2RlPjo6CisJQ29udHJvbHMgd2hpY2ggcGFydHMgb2YgdGhlIGNvdmVyIGxldHRlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKwlwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLgorKworSWYgYDxtb2RlPmAgaXMgYG1lc3NhZ2VgIG9yIGBkZWZhdWx0YCwgdGhlIGNvdmVyIGxldHRlciBzdWJqZWN0IHdpbGwgYmUKK3BvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVyIHRleHQuIFRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZQorcG9wdWxhdGVkIHdpdGggdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbgorbm8gY29uZmlndXJhdGlvbiBub3IgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisrCitJZiBgPG1vZGU+YCBpcyBgc3ViamVjdGAsIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiB3aWxsCitwb3B1bGF0ZSB0aGUgY292ZXIgbGV0dGVyIHN1YmplY3QuIFRoZSByZW1haW5kZXIgb2YgdGhlIGRlc2NyaXB0aW9uIHdpbGwKK3BvcHVsYXRlIHRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIuCisrCitJZiBgPG1vZGU+YCBpcyBgYXV0b2AsIGlmIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbgoraXMgZ3JlYXRlciB0aGFuIDEwMCBieXRlcywgdGhlbiB0aGUgbW9kZSB3aWxsIGJlIGBtZXNzYWdlYCwgb3RoZXJ3aXNlCitgc3ViamVjdGAgd2lsbCBiZSB1c2VkLgorKworSWYgYDxtb2RlPmAgaXMgYG5vbmVgLCBib3RoIHRoZSBjb3ZlciBsZXR0ZXIgc3ViamVjdCBhbmQgYm9keSB3aWxsIGJlCitwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlciB0ZXh0LgorCiAtLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD46OgogCUluc3RlYWQgb2YgdGhlIHN0YW5kYXJkICdbUEFUQ0hdJyBwcmVmaXggaW4gdGhlIHN1YmplY3QKIAlsaW5lLCBpbnN0ZWFkIHVzZSAnWzxzdWJqZWN0IHByZWZpeD5dJy4gVGhpcwpAQCAtMzEyLDExICszMzMsMTIgQEAKICAgT3V0cHV0IGFuIGFsbC16ZXJvIGhhc2ggaW4gZWFjaCBwYXRjaCdzIEZyb20gaGVhZGVyIGluc3RlYWQKICAgb2YgdGhlIGhhc2ggb2YgdGhlIGNvbW1pdC4KIAotLS1iYXNlPTxjb21taXQ+OjoKKy0tW25vLV1iYXNlWz08Y29tbWl0Pl06OgogCVJlY29yZCB0aGUgYmFzZSB0cmVlIGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSBzdGF0ZSB0aGUKIAlwYXRjaCBzZXJpZXMgYXBwbGllcyB0by4gIFNlZSB0aGUgQkFTRSBUUkVFIElORk9STUFUSU9OIHNlY3Rpb24KIAliZWxvdyBmb3IgZGV0YWlscy4gSWYgPGNvbW1pdD4gaXMgImF1dG8iLCBhIGJhc2UgY29tbWl0IGlzCi0JYXV0b21hdGljYWxseSBjaG9zZW4uCisJYXV0b21hdGljYWxseSBjaG9zZW4uIFRoZSBgLS1uby1iYXNlYCBvcHRpb24gb3ZlcnJpZGVzIGEKKwlgZm9ybWF0LnVzZUF1dG9CYXNlYCBjb25maWd1cmF0aW9uLgogCiAtLXJvb3Q6OgogCVRyZWF0IHRoZSByZXZpc2lvbiBhcmd1bWVudCBhcyBhIDxyZXZpc2lvbiByYW5nZT4sIGV2ZW4gaWYgaXQKQEAgLTM0OCw2ICszNzAsNyBAQAogCXNpZ25PZmYgPSB0cnVlCiAJb3V0cHV0RGlyZWN0b3J5ID0gPGRpcmVjdG9yeT4KIAljb3ZlckxldHRlciA9IGF1dG8KKwljb3ZlckZyb21EZXNjcmlwdGlvbiA9IGF1dG8KIC0tLS0tLS0tLS0tLQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKaW5kZXggMjMzYjJiNy4uNjQyZDlhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgbXVsdGktcGFjay1pbmRleCcgWy0tb2JqZWN0LWRpcj08ZGlyPl0gPHN1YmNvbW1hbmQ+CisnZ2l0IG11bHRpLXBhY2staW5kZXgnIFstLW9iamVjdC1kaXI9PGRpcj5dIFstLVtuby1dcHJvZ3Jlc3NdIDxzdWJjb21tYW5kPgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIzLDYgKzIzLDEwIEBACiAJYDxkaXI+L3BhY2tzL211bHRpLXBhY2staW5kZXhgIGZvciB0aGUgY3VycmVudCBNSURYIGZpbGUsIGFuZAogCWA8ZGlyPi9wYWNrc2AgZm9yIHRoZSBwYWNrLWZpbGVzIHRvIGluZGV4LgogCistLVtuby1dcHJvZ3Jlc3M6OgorCVR1cm4gcHJvZ3Jlc3Mgb24vb2ZmIGV4cGxpY2l0bHkuIElmIG5laXRoZXIgaXMgc3BlY2lmaWVkLCBwcm9ncmVzcyBpcworCXNob3duIGlmIHN0YW5kYXJkIGVycm9yIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLgorCiBUaGUgZm9sbG93aW5nIHN1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CiAKIHdyaXRlOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dAppbmRleCBmNTZhNWE5Li5jZWQyZTgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CkBAIC0xMCw3ICsxMCw3IEBACiBbdmVyc2VdCiAnZ2l0IG5vdGVzJyBbbGlzdCBbPG9iamVjdD5dXQogJ2dpdCBub3RlcycgYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstRiA8ZmlsZT4gfCAtbSA8bXNnPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XQotJ2dpdCBub3RlcycgY29weSBbLWZdICggLS1zdGRpbiB8IDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4gKQorJ2dpdCBub3RlcycgY29weSBbLWZdICggLS1zdGRpbiB8IDxmcm9tLW9iamVjdD4gWzx0by1vYmplY3Q+XSApCiAnZ2l0IG5vdGVzJyBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstRiA8ZmlsZT4gfCAtbSA8bXNnPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XQogJ2dpdCBub3RlcycgZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XQogJ2dpdCBub3Rlcycgc2hvdyBbPG9iamVjdD5dCkBAIC02OCw4ICs2OCw4IEBACiAJc3ViY29tbWFuZCkuCiAKIGNvcHk6OgotCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QuCi0JQWJvcnQgaWYgdGhlIHNlY29uZCBvYmplY3QgYWxyZWFkeSBoYXMgbm90ZXMsIG9yIGlmIHRoZSBmaXJzdAorCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QgKGRlZmF1bHRzIHRvCisJSEVBRCkuIEFib3J0IGlmIHRoZSBzZWNvbmQgb2JqZWN0IGFscmVhZHkgaGFzIG5vdGVzLCBvciBpZiB0aGUgZmlyc3QKIAlvYmplY3QgaGFzIG5vbmUgKHVzZSAtZiB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMgdG8gdGhlCiAJc2Vjb25kIG9iamVjdCkuIFRoaXMgc3ViY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvOgogCWBnaXQgbm90ZXMgYWRkIFstZl0gLUMgJChnaXQgbm90ZXMgbGlzdCA8ZnJvbS1vYmplY3Q+KSA8dG8tb2JqZWN0PmAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJhbmdlLWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKaW5kZXggOGE2ZWEyYy4uOTcwMWMxZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKQEAgLTU3LDYgKzU3LDEwIEBACiAJU2VlIHRoZSBgYEFsZ29yaXRobWBgIHNlY3Rpb24gYmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIHdoeSB0aGlzIGlzCiAJbmVlZGVkLgogCistLVtuby1dbm90ZXNbPTxyZWY+XTo6CisJVGhpcyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgYGdpdCBsb2dgIHByb2dyYW0KKwkoc2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSkgdGhhdCBnZW5lcmF0ZXMgdGhlIHBhdGNoZXMuCisKIDxyYW5nZTE+IDxyYW5nZTI+OjoKIAlDb21wYXJlIHRoZSBjb21taXRzIHNwZWNpZmllZCBieSB0aGUgdHdvIHJhbmdlcywgd2hlcmUKIAlgPHJhbmdlMT5gIGlzIGNvbnNpZGVyZWQgYW4gb2xkZXIgdmVyc2lvbiBvZiBgPHJhbmdlMj5gLgpAQCAtNzUsNyArNzksNyBAQAogbGlua2dpdDpnaXQtZGlmZlsxXSksIG1vc3Qgbm90YWJseSB0aGUgYC0tY29sb3I9Wzx3aGVuPl1gIGFuZAogYC0tbm8tY29sb3JgIG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSAiZGlmZgogYmV0d2VlbiBwYXRjaGVzIiwgaS5lLiB0byBjb21wYXJlIHRoZSBhdXRob3IsIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmIG9mCi1jb3JyZXNwb25kaW5nIG9sZC9uZXcgY29tbWl0cy4gVGhlcmUgaXMgY3VycmVudGx5IG5vIG1lYW5zIHRvIHR3ZWFrIHRoZQorY29ycmVzcG9uZGluZyBvbGQvbmV3IGNvbW1pdHMuIFRoZXJlIGlzIGN1cnJlbnRseSBubyBtZWFucyB0byB0d2VhayBtb3N0IG9mIHRoZQogZGlmZiBvcHRpb25zIHBhc3NlZCB0byBgZ2l0IGxvZ2Agd2hlbiBnZW5lcmF0aW5nIHRob3NlIHBhdGNoZXMuCiAKIE9VVFBVVCBTVEFCSUxJVFkKQEAgLTI0Miw3ICsyNDYsNyBAQAogCiBUaGUgb3ZlcmFsbCB0aW1lIG5lZWRlZCB0byBjb21wdXRlIHRoaXMgYWxnb3JpdGhtIGlzIHRoZSB0aW1lIG5lZWRlZCB0bwogY29tcHV0ZSBuK20gY29tbWl0IGRpZmZzIGFuZCB0aGVuIG4qbSBkaWZmcyBvZiBwYXRjaGVzLCBwbHVzIHRoZSB0aW1lCi1uZWVkZWQgdG8gY29tcHV0ZSB0aGUgbGVhc3QtY29zdCBhc3NpZ21lbnQgYmV0d2VlbiBuIGFuZCBtIGRpZmZzLiBHaXQKK25lZWRlZCB0byBjb21wdXRlIHRoZSBsZWFzdC1jb3N0IGFzc2lnbm1lbnQgYmV0d2VlbiBuIGFuZCBtIGRpZmZzLiBHaXQKIHVzZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEpvbmtlci1Wb2xnZW5hbnQgYWxnb3JpdGhtIHRvIHNvbHZlIHRoZQogYXNzaWdubWVudCBwcm9ibGVtLCB3aGljaCBoYXMgY3ViaWMgcnVudGltZSBjb21wbGV4aXR5LiBUaGUgbWF0Y2hpbmcKIGZvdW5kIGluIHRoaXMgY2FzZSB3aWxsIGxvb2sgbGlrZSB0aGlzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKaW5kZXggZDI3MTg0Mi4uZGEzM2Y4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CkBAIC00MzYsNyArNDM2LDcgQEAKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXTsgbGlua2dpdDpnaXQtbHMtZmlsZXNbMV07Ci1saW5rZ2l0OmdpdGlnbm9yZVs1XQorbGlua2dpdDpnaXRpZ25vcmVbNV07IGxpbmtnaXQ6Z2l0LXNwYXJzZS1jaGVja291dFsxXTsKIAogR0lUCiAtLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CmluZGV4IDYzOWE0MTcuLjFkMGUyZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApAQCAtMzkzLDE2ICszOTMsMzEgQEAKIHdpdGggYC0ta2VlcC1iYXNlYCBpbiBvcmRlciB0byBkcm9wIHRob3NlIGNvbW1pdHMgZnJvbSB5b3VyIGJyYW5jaC4KIAogLS1pZ25vcmUtd2hpdGVzcGFjZTo6CisJQmVoYXZlcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggYmFja2VuZCBpcyBzZWxlY3RlZC4KKysKKydhbScgYmFja2VuZDogV2hlbiBhcHBseWluZyBhIHBhdGNoLCBpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGluCitjb250ZXh0IGxpbmVzIGlmIG5lY2Vzc2FyeS4KKysKKydpbnRlcmFjdGl2ZScgYmFja2VuZDogVHJlYXQgbGluZXMgd2l0aCBvbmx5IHdoaXRlc3BhY2UgY2hhbmdlcyBhcwordW5jaGFuZ2VkIGZvciB0aGUgc2FrZSBvZiBhIHRocmVlLXdheSBtZXJnZS4KKwogLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKLQlUaGVzZSBmbGFnIGFyZSBwYXNzZWQgdG8gdGhlICdnaXQgYXBwbHknIHByb2dyYW0KKwlUaGlzIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSAnZ2l0IGFwcGx5JyBwcm9ncmFtCiAJKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkgdGhhdCBhcHBsaWVzIHRoZSBwYXRjaC4KICsKIFNlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgogCiAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlOjoKKwlJbnN0ZWFkIG9mIHJlY29yZGluZyB0aGUgdGltZSB0aGUgcmViYXNlZCBjb21taXRzIGFyZQorCWNyZWF0ZWQgYXMgdGhlIGNvbW1pdHRlciBkYXRlLCByZXVzZSB0aGUgYXV0aG9yIGRhdGUKKwlhcyB0aGUgY29tbWl0dGVyIGRhdGUuIFRoaXMgaW1wbGllcyAtLWZvcmNlLXJlYmFzZS4KKwogLS1pZ25vcmUtZGF0ZTo6Ci0JVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byAnZ2l0IGFtJyB0byBlYXNpbHkgY2hhbmdlIHRoZSBkYXRlcwotCW9mIHRoZSByZWJhc2VkIGNvbW1pdHMgKHNlZSBsaW5rZ2l0OmdpdC1hbVsxXSkuCistLXJlc2V0LWF1dGhvci1kYXRlOjoKKwlCeSBkZWZhdWx0LCB0aGUgYXV0aG9yIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGNvbW1pdCBpcyB1c2VkCisJYXMgdGhlIGF1dGhvciBkYXRlIGZvciB0aGUgcmVzdWx0aW5nIGNvbW1pdC4gIFRoaXMgb3B0aW9uCisJdGVsbHMgR2l0IHRvIHVzZSB0aGUgY3VycmVudCB0aW1lc3RhbXAgaW5zdGVhZCBhbmQgaW1wbGllcworCWAtLWZvcmNlLXJlYmFzZWAuCiArCiBTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KIApAQCAtNDQzLDggKzQ1OCw4IEBACiBvbnRvIGA8dXBzdHJlYW0+YCAob3IgYDxvbnRvPmAsIGlmIHNwZWNpZmllZCkuCiArCiBUaGUgYC0tcmViYXNlLW1lcmdlc2AgbW9kZSBpcyBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgZGVwcmVjYXRlZAotYC0tcHJlc2VydmUtbWVyZ2VzYCwgYnV0IGluIGNvbnRyYXN0IHRvIHRoYXQgb3B0aW9uIHdvcmtzIHdlbGwgaW4gaW50ZXJhY3RpdmUKLXJlYmFzZXM6IGNvbW1pdHMgY2FuIGJlIHJlb3JkZXJlZCwgaW5zZXJ0ZWQgYW5kIGRyb3BwZWQgYXQgd2lsbC4KK2AtLXByZXNlcnZlLW1lcmdlc2AgYnV0IHdvcmtzIHdpdGggaW50ZXJhY3RpdmUgcmViYXNlcywKK3doZXJlIGNvbW1pdHMgY2FuIGJlIHJlb3JkZXJlZCwgaW5zZXJ0ZWQgYW5kIGRyb3BwZWQgYXQgd2lsbC4KICsKIEl0IGlzIGN1cnJlbnRseSBvbmx5IHBvc3NpYmxlIHRvIHJlY3JlYXRlIHRoZSBtZXJnZSBjb21taXRzIHVzaW5nIHRoZQogYHJlY3Vyc2l2ZWAgbWVyZ2Ugc3RyYXRlZ3k7IERpZmZlcmVudCBtZXJnZSBzdHJhdGVnaWVzIGNhbiBiZSB1c2VkIG9ubHkgdmlhCkBAIC01MzksMTAgKzU1NCw3IEBACiAKIFRoZSBmb2xsb3dpbmcgb3B0aW9uczoKIAotICogLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZQotICogLS1pZ25vcmUtZGF0ZQogICogLS13aGl0ZXNwYWNlCi0gKiAtLWlnbm9yZS13aGl0ZXNwYWNlCiAgKiAtQwogCiBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgpAQCAtNTY1LDYgKzU3Nyw5IEBACiAgKiAtLXByZXNlcnZlLW1lcmdlcyBhbmQgLS1pbnRlcmFjdGl2ZQogICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0tc2lnbm9mZgogICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0tcmViYXNlLW1lcmdlcworICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0taWdub3JlLXdoaXRlc3BhY2UKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCisgKiAtLXByZXNlcnZlLW1lcmdlcyBhbmQgLS1pZ25vcmUtZGF0ZQogICogLS1rZWVwLWJhc2UgYW5kIC0tb250bwogICogLS1rZWVwLWJhc2UgYW5kIC0tcm9vdAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKaW5kZXggOTdlMDU0NC4uOTMyMDgwYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApAQCAtOCwzNCArOCwzNiBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IHJlc2V0JyBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRocz4uLi4KLSdnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXQorJ2dpdCByZXNldCcgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uCisnZ2l0IHJlc2V0JyBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0KKydnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXQogJ2dpdCByZXNldCcgWy0tc29mdCB8IC0tbWl4ZWQgWy1OXSB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGZvcm0sIGNvcHkgZW50cmllcyBmcm9tIGA8dHJlZS1pc2g+YCB0byB0aGUgaW5kZXguCi1JbiB0aGUgdGhpcmQgZm9ybSwgc2V0IHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIChgSEVBRGApIHRvIGA8Y29tbWl0PmAsCitJbiB0aGUgZmlyc3QgdGhyZWUgZm9ybXMsIGNvcHkgZW50cmllcyBmcm9tIGA8dHJlZS1pc2g+YCB0byB0aGUgaW5kZXguCitJbiB0aGUgbGFzdCBmb3JtLCBzZXQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgKGBIRUFEYCkgdG8gYDxjb21taXQ+YCwKIG9wdGlvbmFsbHkgbW9kaWZ5aW5nIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgdG8gbWF0Y2guCiBUaGUgYDx0cmVlLWlzaD5gL2A8Y29tbWl0PmAgZGVmYXVsdHMgdG8gYEhFQURgIGluIGFsbCBmb3Jtcy4KIAotJ2dpdCByZXNldCcgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uOjoKLQlUaGlzIGZvcm0gcmVzZXRzIHRoZSBpbmRleCBlbnRyaWVzIGZvciBhbGwgYDxwYXRocz5gIHRvIHRoZWlyCi0Jc3RhdGUgYXQgYDx0cmVlLWlzaD5gLiAgKEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgd29ya2luZyB0cmVlIG9yCi0JdGhlIGN1cnJlbnQgYnJhbmNoLikKKydnaXQgcmVzZXQnIFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLjo6CisnZ2l0IHJlc2V0JyBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl06OgorCVRoZXNlIGZvcm1zIHJlc2V0IHRoZSBpbmRleCBlbnRyaWVzIGZvciBhbGwgcGF0aHMgdGhhdCBtYXRjaCB0aGUKKwlgPHBhdGhzcGVjPmAgdG8gdGhlaXIgc3RhdGUgYXQgYDx0cmVlLWlzaD5gLiAgKEl0IGRvZXMgbm90IGFmZmVjdAorCXRoZSB3b3JraW5nIHRyZWUgb3IgdGhlIGN1cnJlbnQgYnJhbmNoLikKICsKLVRoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IDxwYXRocz5gIGlzIHRoZSBvcHBvc2l0ZSBvZiBgZ2l0IGFkZAotPHBhdGhzPmAuIFRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvCi1gZ2l0IHJlc3RvcmUgWy0tc291cmNlPTx0cmVlLWlzaD5dIC0tc3RhZ2VkIDxwYXRocz4uLi5gLgorVGhpcyBtZWFucyB0aGF0IGBnaXQgcmVzZXQgPHBhdGhzcGVjPmAgaXMgdGhlIG9wcG9zaXRlIG9mIGBnaXQgYWRkCis8cGF0aHNwZWM+YC4gVGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KK2BnaXQgcmVzdG9yZSBbLS1zb3VyY2U9PHRyZWUtaXNoPl0gLS1zdGFnZWQgPHBhdGhzcGVjPi4uLmAuCiArCi1BZnRlciBydW5uaW5nIGBnaXQgcmVzZXQgPHBhdGhzPmAgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSwgeW91IGNhbgorQWZ0ZXIgcnVubmluZyBgZ2l0IHJlc2V0IDxwYXRoc3BlYz5gIHRvIHVwZGF0ZSB0aGUgaW5kZXggZW50cnksIHlvdSBjYW4KIHVzZSBsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvdXQgb2YgdGhlIGluZGV4IHRvCiB0aGUgd29ya2luZyB0cmVlLiBBbHRlcm5hdGl2ZWx5LCB1c2luZyBsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdCiBhbmQgc3BlY2lmeWluZyBhIGNvbW1pdCB3aXRoIGAtLXNvdXJjZWAsIHlvdQogY2FuIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgcGF0aCBvdXQgb2YgYSBjb21taXQgdG8gdGhlIGluZGV4IGFuZCB0byB0aGUKIHdvcmtpbmcgdHJlZSBpbiBvbmUgZ28uCiAKLSdnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXTo6CisnZ2l0IHJlc2V0JyAoLS1wYXRjaCB8IC1wKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl06OgogCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4CiAJYW5kIGA8dHJlZS1pc2g+YCAoZGVmYXVsdHMgdG8gYEhFQURgKS4gIFRoZSBjaG9zZW4gaHVua3MgYXJlIGFwcGxpZWQKIAlpbiByZXZlcnNlIHRvIHRoZSBpbmRleC4KQEAgLTEwMSw2ICsxMDMsMjYgQEAKIAlgcmVzZXQucXVpZXRgIGNvbmZpZyBvcHRpb24uIGAtLXF1aWV0YCBhbmQgYC0tbm8tcXVpZXRgIHdpbGwKIAlvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4KIAorLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlQYXRoc3BlYyBpcyBwYXNzZWQgaW4gYDxmaWxlPmAgaW5zdGVhZCBvZiBjb21tYW5kbGluZSBhcmdzLiBJZgorCWA8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKKwllbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKKwlxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCisJZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tcGF0aHNwZWMtZnJvbS1maWxlYC4gUGF0aHNwZWMgZWxlbWVudHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCisJbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPHBhdGhzcGVjPi4uLjo6CisJTGltaXRzIHRoZSBwYXRocyBhZmZlY3RlZCBieSB0aGUgb3BlcmF0aW9uLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzdG9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dAppbmRleCAxYWIyZTQwLi41YmY2MGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dApAQCAtOCw4ICs4LDkgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCByZXN0b3JlJyBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PHRyZWU+XSBbLS1zdGFnZWRdIFstLXdvcmt0cmVlXSA8cGF0aHNwZWM+Li4uCi0nZ2l0IHJlc3RvcmUnICgtcHwtLXBhdGNoKSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PHRyZWU+XSBbLS1zdGFnZWRdIFstLXdvcmt0cmVlXSBbPHBhdGhzcGVjPi4uLl0KKydnaXQgcmVzdG9yZScgWzxvcHRpb25zPl0gWy0tc291cmNlPTx0cmVlPl0gWy0tc3RhZ2VkXSBbLS13b3JrdHJlZV0gWy0tXSA8cGF0aHNwZWM+Li4uCisnZ2l0IHJlc3RvcmUnIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08dHJlZT5dIFstLXN0YWdlZF0gWy0td29ya3RyZWVdIC0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF0KKydnaXQgcmVzdG9yZScgKC1wfC0tcGF0Y2gpIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08dHJlZT5dIFstLXN0YWdlZF0gWy0td29ya3RyZWVdIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMTEzLDYgKzExNCwyNyBAQAogCWFwcGVhciBpbiB0aGUgYC0tc291cmNlYCB0cmVlIGFyZSByZW1vdmVkLCB0byBtYWtlIHRoZW0gbWF0Y2gKIAlgPHRyZWU+YCBleGFjdGx5LiBUaGUgZGVmYXVsdCBpcyBuby1vdmVybGF5IG1vZGUuCiAKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxwYXRoc3BlYz4uLi46OgorCUxpbWl0cyB0aGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbi4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCiBFWEFNUExFUwogLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKaW5kZXggZTcyZDMzMi4uMTliMTJiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC0yNjIsNyArMjYyLDggQEAKIAlkaXJlY3RvcnkuCiAKIC0tc2hvdy10b3BsZXZlbDo6Ci0JU2hvdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKwlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nCisJdHJlZS4gSWYgdGhlcmUgaXMgbm8gd29ya2luZyB0cmVlLCByZXBvcnQgYW4gZXJyb3IuCiAKIC0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlOjoKIAlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByb290IG9mIHRoZSBzdXBlcnByb2plY3QncwpAQCAtMjc0LDYgKzI3NSwxMyBAQAogCVNob3cgdGhlIHBhdGggdG8gdGhlIHNoYXJlZCBpbmRleCBmaWxlIGluIHNwbGl0IGluZGV4IG1vZGUsIG9yCiAJZW1wdHkgaWYgbm90IGluIHNwbGl0LWluZGV4IG1vZGUuCiAKKy0tc2hvdy1vYmplY3QtZm9ybWF0Wz0oc3RvcmFnZXxpbnB1dHxvdXRwdXQpXTo6CisJU2hvdyB0aGUgb2JqZWN0IGZvcm1hdCAoaGFzaCBhbGdvcml0aG0pIHVzZWQgZm9yIHRoZSByZXBvc2l0b3J5CisJZm9yIHN0b3JhZ2UgaW5zaWRlIHRoZSBgLmdpdGAgZGlyZWN0b3J5LCBpbnB1dCwgb3Igb3V0cHV0LiBGb3IKKwlpbnB1dCwgbXVsdGlwbGUgYWxnb3JpdGhtcyBtYXkgYmUgcHJpbnRlZCwgc3BhY2Utc2VwYXJhdGVkLgorCUlmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzICJzdG9yYWdlIi4KKworCiBPdGhlciBPcHRpb25zCiB+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAppbmRleCBiYzgwOTA1Li5hNzJlYTdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC03Niw2ICs3Niw5IEBACiBQYXRocyBtYXkgbmVlZCB0byBiZSBwcmVmaXhlZCB3aXRoIGAtLWAgdG8gc2VwYXJhdGUgdGhlbSBmcm9tCiBvcHRpb25zIG9yIHRoZSByZXZpc2lvbiByYW5nZSwgd2hlbiBjb25mdXNpb24gYXJpc2VzLgogCis6Z2l0LXNob3J0bG9nOiAxCitpbmNsdWRlOjpyZXYtbGlzdC1vcHRpb25zLnR4dFtdCisKIE1BUFBJTkcgQVVUSE9SUwogLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNwYXJzZS1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zcGFyc2UtY2hlY2tvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2M2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zcGFyc2UtY2hlY2tvdXQudHh0CkBAIC0wLDAgKzEsMTY2IEBACitnaXQtc3BhcnNlLWNoZWNrb3V0KDEpCis9PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zcGFyc2UtY2hlY2tvdXQgLSBJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dAorY29uZmlndXJhdGlvbiwgd2hpY2ggcmVkdWNlcyB0aGUgY2hlY2tvdXQgdG8gYSBzZXQgb2YgcGF0aHMKK2dpdmVuIGJ5IGEgbGlzdCBvZiBhdHRlcm5zLgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzcGFyc2UtY2hlY2tvdXQgPHN1YmNvbW1hbmQ+IFtvcHRpb25zXScKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRoZSBzcGFyc2UtY2hlY2tvdXQgY29uZmlndXJhdGlvbiwgd2hpY2ggcmVkdWNlcwordGhlIGNoZWNrb3V0IHRvIGEgc2V0IG9mIHBhdGhzIGdpdmVuIGJ5IGEgbGlzdCBvZiBwYXR0ZXJucy4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gSVRTIEJFSEFWSU9SLCBBTkQgVEhFIEJFSEFWSU9SIE9GIE9USEVSCitDT01NQU5EUyBJTiBUSEUgUFJFU0VOQ0UgT0YgU1BBUlNFLUNIRUNLT1VUUywgV0lMTCBMSUtFTFkgQ0hBTkdFIElOCitUSEUgRlVUVVJFLgorCisKK0NPTU1BTkRTCistLS0tLS0tLQorJ2xpc3QnOjoKKwlQcm92aWRlIGEgbGlzdCBvZiB0aGUgY29udGVudHMgaW4gdGhlIHNwYXJzZS1jaGVja291dCBmaWxlLgorCisnaW5pdCc6OgorCUVuYWJsZSB0aGUgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgIHNldHRpbmcuIElmIHRoZQorCXNwYXJzZS1jaGVja291dCBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGVuIHBvcHVsYXRlIGl0IHdpdGgKKwlwYXR0ZXJucyB0aGF0IG1hdGNoIGV2ZXJ5IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGFuZAorCW5vIG90aGVyIGRpcmVjdG9yaWVzLCB0aGVuIHdpbGwgcmVtb3ZlIGFsbCBkaXJlY3RvcmllcyB0cmFja2VkCisJYnkgR2l0LiBBZGQgcGF0dGVybnMgdG8gdGhlIHNwYXJzZS1jaGVja291dCBmaWxlIHRvCisJcmVwb3B1bGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisrCitUbyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIHdvcmt0cmVlcywgaXQgZmlyc3QgZW5hYmxlcyB0aGUKK2BleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnYCBzZXR0aW5nIGFuZCBtYWtlcyBzdXJlIHRvIHNldCB0aGUKK2Bjb3JlLnNwYXJzZUNoZWNrb3V0YCBzZXR0aW5nIGluIHRoZSB3b3JrdHJlZS1zcGVjaWZpYyBjb25maWcgZmlsZS4KKworJ3NldCc6OgorCVdyaXRlIGEgc2V0IG9mIHBhdHRlcm5zIHRvIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSwgYXMgZ2l2ZW4gYXMKKwlhIGxpc3Qgb2YgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgJ3NldCcgc3ViY29tbWFuZC4gVXBkYXRlIHRoZQorCXdvcmtpbmcgZGlyZWN0b3J5IHRvIG1hdGNoIHRoZSBuZXcgcGF0dGVybnMuIEVuYWJsZSB0aGUKKwljb3JlLnNwYXJzZUNoZWNrb3V0IGNvbmZpZyBzZXR0aW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuCisrCitXaGVuIHRoZSBgLS1zdGRpbmAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbQorc3RhbmRhcmQgaW4gYXMgYSBuZXdsaW5lLWRlbGltaXRlZCBsaXN0IGluc3RlYWQgb2YgZnJvbSB0aGUgYXJndW1lbnRzLgorCisnZGlzYWJsZSc6OgorCURpc2FibGUgdGhlIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBjb25maWcgc2V0dGluZywgYW5kIHJlc3RvcmUgdGhlCisJd29ya2luZyBkaXJlY3RvcnkgdG8gaW5jbHVkZSBhbGwgZmlsZXMuIExlYXZlcyB0aGUgc3BhcnNlLWNoZWNrb3V0CisJZmlsZSBpbnRhY3Qgc28gYSBsYXRlciAnZ2l0IHNwYXJzZS1jaGVja291dCBpbml0JyBjb21tYW5kIG1heQorCXJldHVybiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNhbWUgc3RhdGUuCisKK1NQQVJTRSBDSEVDS09VVAorLS0tLS0tLS0tLS0tLS0tCisKKyJTcGFyc2UgY2hlY2tvdXQiIGFsbG93cyBwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBzcGFyc2VseS4KK0l0IHVzZXMgdGhlIHNraXAtd29ya3RyZWUgYml0IChzZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKSB0byB0ZWxsCitHaXQgd2hldGhlciBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHdvcnRoIGxvb2tpbmcgYXQuIElmCit0aGUgc2tpcC13b3JrdHJlZSBiaXQgaXMgc2V0LCB0aGVuIHRoZSBmaWxlIGlzIGlnbm9yZWQgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeS4gR2l0IHdpbGwgbm90IHBvcHVsYXRlIHRoZSBjb250ZW50cyBvZiB0aG9zZSBmaWxlcywgd2hpY2gKK21ha2VzIGEgc3BhcnNlIGNoZWNrb3V0IGhlbHBmdWwgd2hlbiB3b3JraW5nIGluIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkKK2ZpbGVzLCBidXQgb25seSBhIGZldyBhcmUgaW1wb3J0YW50IHRvIHRoZSBjdXJyZW50IHVzZXIuCisKK1RoZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlCitza2lwLXdvcmt0cmVlIHJlZmVyZW5jZSBiaXRtYXAuIFdoZW4gR2l0IHVwZGF0ZXMgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSwgaXQgdXBkYXRlcyB0aGUgc2tpcC13b3JrdHJlZSBiaXRzIGluIHRoZSBpbmRleCBiYXNlZAorb24gdGhpcyBmaWxlLiBUaGUgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHRoZSBmaWxlIHdpbGwKK2FwcGVhciBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdCB3aWxsIG5vdC4KKworVG8gZW5hYmxlIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmVhdHVyZSwgcnVuIGBnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXRgIHRvCitpbml0aWFsaXplIGEgc2ltcGxlIHNwYXJzZS1jaGVja291dCBmaWxlIGFuZCBlbmFibGUgdGhlIGBjb3JlLnNwYXJzZUNoZWNrb3V0YAorY29uZmlnIHNldHRpbmcuIFRoZW4sIHJ1biBgZ2l0IHNwYXJzZS1jaGVja291dCBzZXRgIHRvIG1vZGlmeSB0aGUgcGF0dGVybnMgaW4KK3RoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZS4KKworVG8gcmVwb3B1bGF0ZSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBhbGwgZmlsZXMsIHVzZSB0aGUKK2BnaXQgc3BhcnNlLWNoZWNrb3V0IGRpc2FibGVgIGNvbW1hbmQuCisKKworRlVMTCBQQVRURVJOIFNFVAorLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdXNlcyB0aGUgc2FtZSBzeW50YXggYXMgYC5naXRpZ25vcmVgCitmaWxlcy4KKworV2hpbGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c3VhbGx5IHVzZWQgdG8gc3BlY2lmeSB3aGF0CitmaWxlcyBhcmUgaW5jbHVkZWQsIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoYXQgZmlsZXMgYXJlIF9ub3RfIGluY2x1ZGVkLAordXNpbmcgbmVnYXRpdmUgcGF0dGVybnMuIEZvciBleGFtcGxlLCB0byByZW1vdmUgdGhlIGZpbGUgYHVud2FudGVkYDoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyF1bndhbnRlZAorLS0tLS0tLS0tLS0tLS0tLQorCisKK0NPTkUgUEFUVEVSTiBTRVQKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bGwgcGF0dGVybiBzZXQgYWxsb3dzIGZvciBhcmJpdHJhcnkgcGF0dGVybiBtYXRjaGVzIGFuZCBjb21wbGljYXRlZAoraW5jbHVzaW9uL2V4Y2x1c2lvbiBydWxlcy4gVGhlc2UgY2FuIHJlc3VsdCBpbiBPKE4qTSkgcGF0dGVybiBtYXRjaGVzIHdoZW4KK3VwZGF0aW5nIHRoZSBpbmRleCwgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIGFuZCBNIGlzIHRoZSBudW1iZXIKK29mIHBhdGhzIGluIHRoZSBpbmRleC4gVG8gY29tYmF0IHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUsIGEgbW9yZSByZXN0cmljdGVkCitwYXR0ZXJuIHNldCBpcyBhbGxvd2VkIHdoZW4gYGNvcmUuc3BhcmVDaGVja291dENvbmVgIGlzIGVuYWJsZWQuCisKK1RoZSBhY2NlcHRlZCBwYXR0ZXJucyBpbiB0aGUgY29uZSBwYXR0ZXJuIHNldCBhcmU6CisKKzEuICpSZWN1cnNpdmU6KiBBbGwgcGF0aHMgaW5zaWRlIGEgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZC4KKworMi4gKlBhcmVudDoqIEFsbCBmaWxlcyBpbW1lZGlhdGVseSBpbnNpZGUgYSBkaXJlY3RvcnkgYXJlIGluY2x1ZGVkLgorCitJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgdHdvIHBhdHRlcm5zLCB3ZSBhbHNvIGV4cGVjdCB0aGF0IGFsbCBmaWxlcyBpbiB0aGUKK3Jvb3QgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZC4gSWYgYSByZWN1cnNpdmUgcGF0dGVybiBpcyBhZGRlZCwgdGhlbiBhbGwKK2xlYWRpbmcgZGlyZWN0b3JpZXMgYXJlIGFkZGVkIGFzIHBhcmVudCBwYXR0ZXJucy4KKworQnkgZGVmYXVsdCwgd2hlbiBydW5uaW5nIGBnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXRgLCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMKK2FkZGVkIGFzIGEgcGFyZW50IHBhdHRlcm4uIEF0IHRoaXMgcG9pbnQsIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSBjb250YWlucwordGhlIGZvbGxvd2luZyBwYXR0ZXJuczoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyEvKi8KKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzYXlzICJpbmNsdWRlIGV2ZXJ5dGhpbmcgaW4gcm9vdCwgYnV0IG5vdGhpbmcgdHdvIGxldmVscyBiZWxvdyByb290LiIKK0lmIHdlIHRoZW4gYWRkIHRoZSBmb2xkZXIgYEEvQi9DYCBhcyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuLCB0aGUgZm9sZGVycyBgQWAgYW5kCitgQS9CYCBhcmUgYWRkZWQgYXMgcGFyZW50IHBhdHRlcm5zLiBUaGUgcmVzdWx0aW5nIHNwYXJzZS1jaGVja291dCBmaWxlIGlzCitub3cKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyEvKi8KKy9BLworIS9BLyovCisvQS9CLworIS9BL0IvKi8KKy9BL0IvQy8KKy0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSwgb3JkZXIgbWF0dGVycywgc28gdGhlIG5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBvdmVycmlkZGVuIGJ5IHRoZSBwb3NpdGl2ZQorcGF0dGVybnMgdGhhdCBhcHBlYXIgbG93ZXIgaW4gdGhlIGZpbGUuCisKK0lmIGBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZT10cnVlYCwgdGhlbiBHaXQgd2lsbCBwYXJzZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUKK2V4cGVjdGluZyBwYXR0ZXJucyBvZiB0aGVzZSB0eXBlcy4gR2l0IHdpbGwgd2FybiBpZiB0aGUgcGF0dGVybnMgZG8gbm90IG1hdGNoLgorSWYgdGhlIHBhdHRlcm5zIGRvIG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQsIHRoZW4gR2l0IHdpbGwgdXNlIGZhc3RlciBoYXNoLQorYmFzZWQgYWxnb3JpdGhtcyB0byBjb21wdXRlIGluY2x1c2lvbiBpbiB0aGUgc3BhcnNlLWNoZWNrb3V0LgorCitJZiBgY29yZS5pZ25vcmVDYXNlPXRydWVgLCB0aGVuIHRoZSBwYXR0ZXJuLW1hdGNoaW5nIGFsZ29yaXRobSB3aWxsIHVzZSBhCitjYXNlLWluc2Vuc2l0aXZlIGNoZWNrLiBUaGlzIGNvcnJlY3RzIGZvciBjYXNlIG1pc21hdGNoZWQgZmlsZW5hbWVzIGluIHRoZQorJ2dpdCBzcGFyc2UtY2hlY2tvdXQgc2V0JyBjb21tYW5kIHRvIHJlZmxlY3QgdGhlIGV4cGVjdGVkIGNvbmUgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeS4KKworU0VFIEFMU08KKy0tLS0tLS0tCisKK2xpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXQorbGlua2dpdDpnaXRpZ25vcmVbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAppbmRleCAxZjQ2MzgwLi4yMjQyNWNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKQEAgLTE2LDYgKzE2LDcgQEAKICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gZGVpbml0IFstZnwtLWZvcmNlXSAoLS1hbGx8Wy0tXSA8cGF0aD4uLi4pCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHVwZGF0ZSBbPG9wdGlvbnM+XSBbLS1dIFs8cGF0aD4uLi5dCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHNldC1icmFuY2ggWzxvcHRpb25zPl0gWy0tXSA8cGF0aD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPgogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdW1tYXJ5IFs8b3B0aW9ucz5dIFstLV0gWzxwYXRoPi4uLl0KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPgogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzeW5jIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQpAQCAtODAsNiArODEsOSBAQAogCWRvZXMgbm90IG1hdGNoIHRoZSBTSEEtMSBmb3VuZCBpbiB0aGUgaW5kZXggb2YgdGhlIGNvbnRhaW5pbmcKIAlyZXBvc2l0b3J5IGFuZCBgVWAgaWYgdGhlIHN1Ym1vZHVsZSBoYXMgbWVyZ2UgY29uZmxpY3RzLgogKworSWYgYC0tY2FjaGVkYCBpcyBzcGVjaWZpZWQsIHRoaXMgY29tbWFuZCB3aWxsIGluc3RlYWQgcHJpbnQgdGhlIFNIQS0xCityZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGZvciBlYWNoIHN1Ym1vZHVsZS4KKysKIElmIGAtLXJlY3Vyc2l2ZWAgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCByZWN1cnNlIGludG8gbmVzdGVkCiBzdWJtb2R1bGVzLCBhbmQgc2hvdyB0aGVpciBzdGF0dXMgYXMgd2VsbC4KICsKQEAgLTEzMyw3ICsxMzcsOCBAQAogKwogLS0KIFVwZGF0ZSB0aGUgcmVnaXN0ZXJlZCBzdWJtb2R1bGVzIHRvIG1hdGNoIHdoYXQgdGhlIHN1cGVycHJvamVjdAotZXhwZWN0cyBieSBjbG9uaW5nIG1pc3Npbmcgc3VibW9kdWxlcyBhbmQgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSBvZgorZXhwZWN0cyBieSBjbG9uaW5nIG1pc3Npbmcgc3VibW9kdWxlcywgZmV0Y2hpbmcgbWlzc2luZyBjb21taXRzCitpbiBzdWJtb2R1bGVzIGFuZCB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIG9mCiB0aGUgc3VibW9kdWxlcy4gVGhlICJ1cGRhdGluZyIgY2FuIGJlIGRvbmUgaW4gc2V2ZXJhbCB3YXlzIGRlcGVuZGluZwogb24gY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHRoZSB2YWx1ZSBvZiBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgCiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKQEAgLTE4MCw2ICsxODUsMTEgQEAKIAlgLS1kZWZhdWx0YCBvcHRpb24gcmVtb3ZlcyB0aGUgc3VibW9kdWxlLjxuYW1lPi5icmFuY2ggY29uZmlndXJhdGlvbgogCWtleSwgd2hpY2ggY2F1c2VzIHRoZSB0cmFja2luZyBicmFuY2ggdG8gZGVmYXVsdCB0byAnbWFzdGVyJy4KIAorc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPjo6CisJU2V0cyB0aGUgVVJMIG9mIHRoZSBzcGVjaWZpZWQgc3VibW9kdWxlIHRvIDxuZXd1cmw+LiBUaGVuLCBpdCB3aWxsCisJYXV0b21hdGljYWxseSBzeW5jaHJvbml6ZSB0aGUgc3VibW9kdWxlJ3MgbmV3IHJlbW90ZSBVUkwKKwljb25maWd1cmF0aW9uLgorCiBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbKC1ufC0tc3VtbWFyeS1saW1pdCkgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dOjoKIAlTaG93IGNvbW1pdCBzdW1tYXJ5IGJldHdlZW4gdGhlIGdpdmVuIGNvbW1pdCAoZGVmYXVsdHMgdG8gSEVBRCkgYW5kCiAJd29ya2luZyB0cmVlL2luZGV4LiBGb3IgYSBzdWJtb2R1bGUgaW4gcXVlc3Rpb24sIGEgc2VyaWVzIG9mIGNvbW1pdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CmluZGV4IDUzNzc0ZjUuLjY2MjRhMTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtNjc3LDcgKzY3Nyw4IEBACiAtczxzdHJhdGVneT46OgogLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKIC1wOjoKLS0tcHJlc2VydmUtbWVyZ2VzOjoKKy0tcmViYXNlLW1lcmdlczo6CistLXByZXNlcnZlLW1lcmdlcyAoREVQUkVDQVRFRCk6OgogCVRoZXNlIGFyZSBvbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnIGFuZCAncmViYXNlJyBjb21tYW5kcy4KICsKIFBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IHJlYmFzZScgd2hlbiB1c2luZyAnZGNvbW1pdCcgaWYgYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKaW5kZXggMmU1NTk5YS4uZjZkOTc5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CkBAIC02NSw3ICs2NSw3IEBACiAtLXNpZ246OgogCU1ha2UgYSBHUEctc2lnbmVkIHRhZywgdXNpbmcgdGhlIGRlZmF1bHQgZS1tYWlsIGFkZHJlc3MncyBrZXkuCiAJVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGFnIEdQRy1zaWduaW5nIGlzIGNvbnRyb2xsZWQgYnkgYHRhZy5ncGdTaWduYAotCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaWYgaXQgZXhpc3RzLCBvciBkaXNhYmxlZCBvZGVyIG90aGVyd2lzZS4KKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGlmIGl0IGV4aXN0cywgb3IgZGlzYWJsZWQgb3RoZXJ3aXNlLgogCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCiAKIC0tbm8tc2lnbjo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAppbmRleCAxYzRkMTQ2Li5jN2E2MjcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKQEAgLTE2LDYgKzE2LDcgQEAKIAkgICAgIFstLWNobW9kPSgrfC0peF0KIAkgICAgIFstLVtuby1dYXNzdW1lLXVuY2hhbmdlZF0KIAkgICAgIFstLVtuby1dc2tpcC13b3JrdHJlZV0KKwkgICAgIFstLVtuby1daWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllc10KIAkgICAgIFstLVtuby1dZnNtb25pdG9yLXZhbGlkXQogCSAgICAgWy0taWdub3JlLXN1Ym1vZHVsZXNdCiAJICAgICBbLS1bbm8tXXNwbGl0LWluZGV4XQpAQCAtMTEzLDYgKzExNCwxMSBAQAogCXNldCBhbmQgdW5zZXQgdGhlICJza2lwLXdvcmt0cmVlIiBiaXQgZm9yIHRoZSBwYXRocy4gU2VlCiAJc2VjdGlvbiAiU2tpcC13b3JrdHJlZSBiaXQiIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCisKKy0tW25vLV1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzOjoKKwlEbyBub3QgcmVtb3ZlIHNraXAtd29ya3RyZWUgKEFLQSAiaW5kZXgtb25seSIpIGVudHJpZXMgZXZlbiB3aGVuCisJdGhlIGAtLXJlbW92ZWAgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisKIC0tW25vLV1mc21vbml0b3ItdmFsaWQ6OgogCVdoZW4gb25lIG9mIHRoZXNlIGZsYWdzIGlzIHNwZWNpZmllZCwgdGhlIG9iamVjdCBuYW1lIHJlY29yZGVkCiAJZm9yIHRoZSBwYXRocyBhcmUgbm90IHVwZGF0ZWQuIEluc3RlYWQsIHRoZXNlIG9wdGlvbnMKQEAgLTQyNiw3ICs0MzIsNyBAQAogbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KIAogVG8gYXZvaWQgZGVsZXRpbmcgYSBzaGFyZWQgaW5kZXggZmlsZSB0aGF0IGlzIHN0aWxsIHVzZWQsIGl0cwotbW9kaWZpY2F0aW9uIHRpbWUgaXMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0aW1lIGV2ZXJ5dGltZSBhIG5ldyBzcGxpdAorbW9kaWZpY2F0aW9uIHRpbWUgaXMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0aW1lIGV2ZXJ5IHRpbWUgYSBuZXcgc3BsaXQKIGluZGV4IGJhc2VkIG9uIHRoZSBzaGFyZWQgaW5kZXggZmlsZSBpcyBlaXRoZXIgY3JlYXRlZCBvciByZWFkIGZyb20uCiAKIFVOVFJBQ0tFRCBDQUNIRQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CmluZGV4IDliODI1NjQuLmIxNTk3YWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKQEAgLTI3MSw4ICsyNzEsOCBAQAogdGhlIHdvcmtpbmcgdHJlZS4KIAogCi1TeW5jaGluZyByZXBvc2l0b3JpZXMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU3luY2luZyByZXBvc2l0b3JpZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIGluY2x1ZGU6OmNtZHMtc3luY2hpbmdyZXBvc2l0b3JpZXMudHh0W10KIApAQCAtNTQ0LDYgKzU0NCwxMCBAQAogCWEgcGFnZXIuICBTZWUgYWxzbyB0aGUgYGNvcmUucGFnZXJgIG9wdGlvbiBpbgogCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KIAorYEdJVF9QUk9HUkVTU19ERUxBWWA6OgorCUEgbnVtYmVyIGNvbnRyb2xsaW5nIGhvdyBtYW55IHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHNob3dpbmcKKwlvcHRpb25hbCBwcm9ncmVzcyBpbmRpY2F0b3JzLiBEZWZhdWx0cyB0byAyLgorCiBgR0lUX0VESVRPUmA6OgogCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIGAkRURJVE9SYCBhbmQgYCRWSVNVQUxgLgogCUl0IGlzIHVzZWQgYnkgc2V2ZXJhbCBHaXQgY29tbWFuZHMgd2hlbiwgb24gaW50ZXJhY3RpdmUgbW9kZSwKQEAgLTkyOCw3ICs5MzIsNyBAQAogUmVwb3J0IGJ1Z3MgdG8gdGhlIEdpdCBtYWlsaW5nIGxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+IHdoZXJlIHRoZQogZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGlzIHByaW1hcmlseSBkb25lLiAgWW91IGRvIG5vdCBoYXZlIHRvIGJlCiBzdWJzY3JpYmVkIHRvIHRoZSBsaXN0IHRvIHNlbmQgYSBtZXNzYWdlIHRoZXJlLiAgU2VlIHRoZSBsaXN0IGFyY2hpdmUKLWF0IGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQgZm9yIHByZXZpb3VzIGJ1ZyByZXBvcnRzIGFuZCBvdGhlcgorYXQgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0IGZvciBwcmV2aW91cyBidWcgcmVwb3J0cyBhbmQgb3RoZXIKIGRpc2N1c3Npb25zLgogCiBJc3N1ZXMgd2hpY2ggYXJlIHNlY3VyaXR5IHJlbGV2YW50IHNob3VsZCBiZSBkaXNjbG9zZWQgcHJpdmF0ZWx5IHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dAppbmRleCBjNWE1MjhjLi41MDhmZTcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKQEAgLTI5MywxMCArMjkzLDEwIEBACiAKIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdGVsbCBHaXQgdGhlIGVuY29kaW5nIG9mIGEgZmlsZSBpbiB0aGUgd29ya2luZwogZGlyZWN0b3J5IHdpdGggdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZS4gSWYgYSBmaWxlIHdpdGggdGhpcwotYXR0cmlidXRlIGlzIGFkZGVkIHRvIEdpdCwgdGhlbiBHaXQgcmVlbmNvZGVzIHRoZSBjb250ZW50IGZyb20gdGhlCithdHRyaWJ1dGUgaXMgYWRkZWQgdG8gR2l0LCB0aGVuIEdpdCByZS1lbmNvZGVzIHRoZSBjb250ZW50IGZyb20gdGhlCiBzcGVjaWZpZWQgZW5jb2RpbmcgdG8gVVRGLTguIEZpbmFsbHksIEdpdCBzdG9yZXMgdGhlIFVURi04IGVuY29kZWQKIGNvbnRlbnQgaW4gaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIChjYWxsZWQgInRoZSBpbmRleCIpLiBPbiBjaGVja291dAotdGhlIGNvbnRlbnQgaXMgcmVlbmNvZGVkIGJhY2sgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZy4KK3RoZSBjb250ZW50IGlzIHJlLWVuY29kZWQgYmFjayB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLgogCiBQbGVhc2Ugbm90ZSB0aGF0IHVzaW5nIHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUgbWF5IGhhdmUgYQogbnVtYmVyIG9mIHBpdGZhbGxzOgpAQCAtNDk4LDcgKzQ5OCw3IEBACiBXaGVuIEdpdCBlbmNvdW50ZXJzIHRoZSBmaXJzdCBmaWxlIHRoYXQgbmVlZHMgdG8gYmUgY2xlYW5lZCBvciBzbXVkZ2VkLAogaXQgc3RhcnRzIHRoZSBmaWx0ZXIgYW5kIHBlcmZvcm1zIHRoZSBoYW5kc2hha2UuIEluIHRoZSBoYW5kc2hha2UsIHRoZQogd2VsY29tZSBtZXNzYWdlIHNlbnQgYnkgR2l0IGlzICJnaXQtZmlsdGVyLWNsaWVudCIsIG9ubHkgdmVyc2lvbiAyIGlzCi1zdXBwcG9ydGVkLCBhbmQgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgYXJlICJjbGVhbiIsICJzbXVkZ2UiLCBhbmQKK3N1cHBvcnRlZCwgYW5kIHRoZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzIGFyZSAiY2xlYW4iLCAic211ZGdlIiwgYW5kCiAiZGVsYXkiLgogCiBBZnRlcndhcmRzIEdpdCBzZW5kcyBhIGxpc3Qgb2YgImtleT12YWx1ZSIgcGFpcnMgdGVybWluYXRlZCB3aXRoCkBAIC04MTIsNiArODEyLDggQEAKIAogLSBgZHRzYCBzdWl0YWJsZSBmb3IgZGV2aWNldHJlZSAoRFRTKSBmaWxlcy4KIAorLSBgZWxpeGlyYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEVsaXhpciBsYW5ndWFnZS4KKwogLSBgZm9ydHJhbmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBGb3J0cmFuIGxhbmd1YWdlLgogCiAtIGBmb3VudGFpbmAgc3VpdGFibGUgZm9yIEZvdW50YWluIGRvY3VtZW50cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAppbmRleCA0YjMyODc2Li4zNzNjZmEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC0yMTEsOCArMjExLDggQEAKIGVudHJpZXMsIGFuZCB3aXRoIGAtLWNhY2hlZGAsIGl0IG1vZGlmaWVzIG9ubHkgdGhlIGluZGV4CiBlbnRyaWVzLgogCi1TZWUgYWxzbyBodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCZtPTExNjU2MzEzNTYyMDM1OSBhbmQKLWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE5MTUwMzkzNjIwMjczIGZvciBmdXJ0aGVyCitTZWUgYWxzbyBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3Y2NGNsZzV1OS5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0LyBhbmQKK2h0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dnk3ZWo5ZzM4LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8gZm9yIGZ1cnRoZXIKIGluZm9ybWF0aW9uLgogCiBTb21lIG90aGVyIGNvbW1hbmRzIHRoYXQgYWxzbyB3b3JrIG9uIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kL29yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0CmluZGV4IGFkYzc1OTYuLmVhNzU5ZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0CkBAIC0xODYsOCArMTg2LDcgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIFlvdSBjYW4gd3JpdGUgeW91ciBvd24gY3VzdG9tIGhlbHBlcnMgdG8gaW50ZXJmYWNlIHdpdGggYW55IHN5c3RlbSBpbgotd2hpY2ggeW91IGtlZXAgY3JlZGVudGlhbHMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR2l0J3MKLWxpbms6dGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy5odG1sW2NyZWRlbnRpYWxzIEFQSV0gZm9yIGRldGFpbHMuCit3aGljaCB5b3Uga2VlcCBjcmVkZW50aWFscy4gU2VlIGNyZWRlbnRpYWwuaCBmb3IgZGV0YWlscy4KIAogR0lUCiAtLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CmluZGV4IGJhOWVjNWIuLjY3Mjc1ZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApAQCAtODAsNyArODAsNyBAQAogCSAgICBDb21taXR0ZWQgZGlmZmVyZW5jZXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdHJhY2tlZCBmaWxlcyB3aWxsIHNob3cKIAkgICAgdXAuCiAKLQlub25lOzsgTm8gbW9kaWZpYXRpb25zIHRvIHN1Ym1vZHVsZXMgYXJlIGlnbm9yZWQsIGFsbCBvZiBjb21taXR0ZWQKKwlub25lOzsgTm8gbW9kaWZpY2F0aW9ucyB0byBzdWJtb2R1bGVzIGFyZSBpZ25vcmVkLCBhbGwgb2YgY29tbWl0dGVkCiAJICAgIGRpZmZlcmVuY2VzLCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMgYXJlCiAJICAgIHNob3duLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG9wdGlvbi4KIApAQCAtMTIwLDcgKzEyMCw3IEBACiAKIFNFRSBBTFNPCiAtLS0tLS0tLQotbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCBsaW5rZ2l0OmdpdHN1Ym1vZHVsZXNbN10sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dAppbmRleCBkNjM4OGYxLi4xYTJlZjRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dApAQCAtOTYsOSArOTYsOSBAQAogCWRpcmVjdG9yeS4gIFRoZSAnZ2l0IHBydW5lJyBjb21tYW5kIGtub3dzIHRvIHByZXNlcnZlCiAJb2JqZWN0cyByZWFjaGFibGUgZnJvbSByZWZzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5IGFuZAogCWl0cyBzdWJkaXJlY3Rvcmllcy4KLQlUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIChleGNlcHQgcmVmcy9iaXNlY3QgYW5kCi0JcmVmcy93b3JrdHJlZSkgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKLQkiJEdJVF9DT01NT05fRElSL3JlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCVRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCByZWZzL2Jpc2VjdCwKKwlyZWZzL3Jld3JpdHRlbiBhbmQgcmVmcy93b3JrdHJlZSkgaWYgJEdJVF9DT01NT05fRElSIGlzCisJc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL3JlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogCiByZWZzL2hlYWRzL2BuYW1lYDo6CiAJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoIGBuYW1lYApAQCAtMjQwLDggKzI0MCw4IEBACiBsb2dzOjoKIAlSZWNvcmRzIG9mIGNoYW5nZXMgbWFkZSB0byByZWZzIGFyZSBzdG9yZWQgaW4gdGhpcyBkaXJlY3RvcnkuCiAJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoaXMKLQlkaXJlY3RvcnkgaXMgaWdub3JlZCBpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZAotCSIkR0lUX0NPTU1PTl9ESVIvbG9ncyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisJZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCBsb2dzL0hFQUQpIGlmICRHSVRfQ09NTU9OX0RJUiBpcworCXNldCBhbmQgIiRHSVRfQ09NTU9OX0RJUi9sb2dzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KIAogbG9ncy9yZWZzL2hlYWRzL2BuYW1lYDo6CiAJUmVjb3JkcyBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggdGlwIG5hbWVkIGBuYW1lYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0c3VibW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHN1Ym1vZHVsZXMudHh0CmluZGV4IDBhODkwMjAuLmM0NzZmODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0c3VibW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0c3VibW9kdWxlcyAtIG1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyCitnaXRzdWJtb2R1bGVzIC0gTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIKIAogU1lOT1BTSVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dAppbmRleCBiZDEwMjc0Li44MWJlMGQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCiAKIFRoZSBsYXN0IGRpZmYgYmV0dGVyIG5vdCB0byBzaG93IGFueXRoaW5nIG90aGVyIHRoYW4gY2xlYW51cHMKLWZvciBjcnVmdHMuICBUaGVuIEkgY2FuIGZpbmFsbHkgY2xlYW4gdGhpbmdzIHVwOgorZm9yIGNydWZ0LiAgVGhlbiBJIGNhbiBmaW5hbGx5IGNsZWFuIHRoaW5ncyB1cDoKIAogICAgICAgICAkIGdpdCBicmFuY2ggLUQgdG9waWMKICAgICAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIDsjIG51a2UgcHJldGVuZCBtZXJnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKaW5kZXggNTliOGZmMS4uNDBkYzRmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CkBAIC0zNCw3ICszNCw3IEBACiAKIC0tY2xlYW51cD08bW9kZT46OgogCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBtZXJnZSBtZXNzYWdlIHdpbGwgYmUgY2xlYW5lZCB1cCBiZWZvcmUKLQljb21taXRpbmcuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIG1vcmUgZGV0YWlscy4gSW4gYWRkaXRpb24sIGlmCisJY29tbWl0dGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBkZXRhaWxzLiBJbiBhZGRpdGlvbiwgaWYKIAl0aGUgJzxtb2RlPicgaXMgZ2l2ZW4gYSB2YWx1ZSBvZiBgc2Npc3NvcnNgLCBzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkCiAJdG8gYE1FUkdFX01TR2AgYmVmb3JlIGJlaW5nIHBhc3NlZCBvbiB0byB0aGUgY29tbWl0IG1hY2hpbmVyeSBpbiB0aGUKIAljYXNlIG9mIGEgbWVyZ2UgY29uZmxpY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dAppbmRleCBhYTY2Y2JlLi4yOTEyZGU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKQEAgLTMyLDcgKzMyLDcgQEAKIG91cnM7OwogCVRoaXMgb3B0aW9uIGZvcmNlcyBjb25mbGljdGluZyBodW5rcyB0byBiZSBhdXRvLXJlc29sdmVkIGNsZWFubHkgYnkKIAlmYXZvcmluZyAnb3VyJyB2ZXJzaW9uLiAgQ2hhbmdlcyBmcm9tIHRoZSBvdGhlciB0cmVlIHRoYXQgZG8gbm90Ci0JY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIHRvIHRoZSBtZXJnZSByZXN1bHQuCisJY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBtZXJnZSByZXN1bHQuCiAJRm9yIGEgYmluYXJ5IGZpbGUsIHRoZSBlbnRpcmUgY29udGVudHMgYXJlIHRha2VuIGZyb20gb3VyIHNpZGUuCiArCiBUaGlzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgJ291cnMnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dAppbmRleCBiODdlMmU4Li4xYTcyMTJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dApAQCAtNCw3ICs0LDcgQEAKIElmIHRoZSBjb21taXQgaXMgYSBtZXJnZSwgYW5kIGlmIHRoZSBwcmV0dHktZm9ybWF0CiBpcyBub3QgJ29uZWxpbmUnLCAnZW1haWwnIG9yICdyYXcnLCBhbiBhZGRpdGlvbmFsIGxpbmUgaXMKIGluc2VydGVkIGJlZm9yZSB0aGUgJ0F1dGhvcjonIGxpbmUuICBUaGlzIGxpbmUgYmVnaW5zIHdpdGgKLSJNZXJnZTogIiBhbmQgdGhlIHNoYTFzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAorIk1lcmdlOiAiIGFuZCB0aGUgaGFzaGVzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAogc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNvbW1pdHMgbWF5IG5vdAogbmVjZXNzYXJpbHkgYmUgdGhlIGxpc3Qgb2YgdGhlICpkaXJlY3QqIHBhcmVudCBjb21taXRzIGlmIHlvdQogaGF2ZSBsaW1pdGVkIHlvdXIgdmlldyBvZiBoaXN0b3J5OiBmb3IgZXhhbXBsZSwgaWYgeW91IGFyZQpAQCAtMjAsMjAgKzIwLDIwIEBACiAKICogJ29uZWxpbmUnCiAKLQkgIDxzaGExPiA8dGl0bGUgbGluZT4KKwkgIDxoYXNoPiA8dGl0bGUgbGluZT4KICsKIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgYXMgY29tcGFjdCBhcyBwb3NzaWJsZS4KIAogKiAnc2hvcnQnCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAogCSAgICAgIDx0aXRsZSBsaW5lPgogCiAqICdtZWRpdW0nCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAkgIERhdGU6ICAgPGF1dGhvciBkYXRlPgogCkBAIC00Myw3ICs0Myw3IEBACiAKICogJ2Z1bGwnCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAkgIENvbW1pdDogPGNvbW1pdHRlcj4KIApAQCAtNTMsNyArNTMsNyBAQAogCiAqICdmdWxsZXInCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogICAgIDxhdXRob3I+CiAJICBBdXRob3JEYXRlOiA8YXV0aG9yIGRhdGU+CiAJICBDb21taXQ6ICAgICA8Y29tbWl0dGVyPgpAQCAtNjMsOSArNjMsMjAgQEAKIAogCSAgICAgICA8ZnVsbCBjb21taXQgbWVzc2FnZT4KIAorKiAncmVmZXJlbmNlJworCisJICA8YWJicmV2IGhhc2g+ICg8dGl0bGUgbGluZT4sIDxzaG9ydCBhdXRob3IgZGF0ZT4pCisrCitUaGlzIGZvcm1hdCBpcyB1c2VkIHRvIHJlZmVyIHRvIGFub3RoZXIgY29tbWl0IGluIGEgY29tbWl0IG1lc3NhZ2UgYW5kCitpcyB0aGUgc2FtZSBhcyBgLS1wcmV0dHk9J2Zvcm1hdDolQyhhdXRvKSVoICglcywgJWFkKSdgLiAgQnkgZGVmYXVsdCwKK3RoZSBkYXRlIGlzIGZvcm1hdHRlZCB3aXRoIGAtLWRhdGU9c2hvcnRgIHVubGVzcyBhbm90aGVyIGAtLWRhdGVgIG9wdGlvbgoraXMgZXhwbGljaXRseSBzcGVjaWZpZWQuICBBcyB3aXRoIGFueSBgZm9ybWF0OmAgd2l0aCBmb3JtYXQKK3BsYWNlaG9sZGVycywgaXRzIG91dHB1dCBpcyBub3QgYWZmZWN0ZWQgYnkgb3RoZXIgb3B0aW9ucyBsaWtlCitgLS1kZWNvcmF0ZWAgYW5kIGAtLXdhbGstcmVmbG9nc2AuCisKICogJ2VtYWlsJwogCi0JICBGcm9tIDxzaGExPiA8ZGF0ZT4KKwkgIEZyb20gPGhhc2g+IDxkYXRlPgogCSAgRnJvbTogPGF1dGhvcj4KIAkgIERhdGU6IDxhdXRob3IgZGF0ZT4KIAkgIFN1YmplY3Q6IFtQQVRDSF0gPHRpdGxlIGxpbmU+CkBAIC03NSw3ICs4Niw3IEBACiAqICdyYXcnCiArCiBUaGUgJ3JhdycgZm9ybWF0IHNob3dzIHRoZSBlbnRpcmUgY29tbWl0IGV4YWN0bHkgYXMKLXN0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdC4gIE5vdGFibHksIHRoZSBTSEEtMXMgYXJlCitzdG9yZWQgaW4gdGhlIGNvbW1pdCBvYmplY3QuICBOb3RhYmx5LCB0aGUgaGFzaGVzIGFyZQogZGlzcGxheWVkIGluIGZ1bGwsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciAtLWFiYnJldiBvcgogLS1uby1hYmJyZXYgYXJlIHVzZWQsIGFuZCAncGFyZW50cycgaW5mb3JtYXRpb24gc2hvdyB0aGUKIHRydWUgcGFyZW50IGNvbW1pdHMsIHdpdGhvdXQgdGFraW5nIGdyYWZ0cyBvciBoaXN0b3J5CkBAIC0xNjMsMjQgKzE3NCwzMiBAQAogJyVhZSc6OiBhdXRob3IgZW1haWwKICclYUUnOjogYXV0aG9yIGVtYWlsIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0KIAlvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclYWwnOjogYXV0aG9yIGVtYWlsIGxvY2FsLXBhcnQgKHRoZSBwYXJ0IGJlZm9yZSB0aGUgJ0AnIHNpZ24pCisnJWFMJzo6IGF1dGhvciBsb2NhbC1wYXJ0IChzZWUgJyVhbCcpIHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQogJyVhZCc6OiBhdXRob3IgZGF0ZSAoZm9ybWF0IHJlc3BlY3RzIC0tZGF0ZT0gb3B0aW9uKQogJyVhRCc6OiBhdXRob3IgZGF0ZSwgUkZDMjgyMiBzdHlsZQogJyVhcic6OiBhdXRob3IgZGF0ZSwgcmVsYXRpdmUKICclYXQnOjogYXV0aG9yIGRhdGUsIFVOSVggdGltZXN0YW1wCiAnJWFpJzo6IGF1dGhvciBkYXRlLCBJU08gODYwMS1saWtlIGZvcm1hdAogJyVhSSc6OiBhdXRob3IgZGF0ZSwgc3RyaWN0IElTTyA4NjAxIGZvcm1hdAorJyVhcyc6OiBhdXRob3IgZGF0ZSwgc2hvcnQgZm9ybWF0IChgWVlZWS1NTS1ERGApCiAnJWNuJzo6IGNvbW1pdHRlciBuYW1lCiAnJWNOJzo6IGNvbW1pdHRlciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKIAlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclY2UnOjogY29tbWl0dGVyIGVtYWlsCiAnJWNFJzo6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCiAJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVjTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclY2wnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclY2QnOjogY29tbWl0dGVyIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKICclY0QnOjogY29tbWl0dGVyIGRhdGUsIFJGQzI4MjIgc3R5bGUKICclY3InOjogY29tbWl0dGVyIGRhdGUsIHJlbGF0aXZlCiAnJWN0Jzo6IGNvbW1pdHRlciBkYXRlLCBVTklYIHRpbWVzdGFtcAogJyVjaSc6OiBjb21taXR0ZXIgZGF0ZSwgSVNPIDg2MDEtbGlrZSBmb3JtYXQKICclY0knOjogY29tbWl0dGVyIGRhdGUsIHN0cmljdCBJU08gODYwMSBmb3JtYXQKKyclY3MnOjogY29tbWl0dGVyIGRhdGUsIHNob3J0IGZvcm1hdCAoYFlZWVktTU0tRERgKQogJyVkJzo6IHJlZiBuYW1lcywgbGlrZSB0aGUgLS1kZWNvcmF0ZSBvcHRpb24gb2YgbGlua2dpdDpnaXQtbG9nWzFdCiAnJUQnOjogcmVmIG5hbWVzIHdpdGhvdXQgdGhlICIgKCIsICIpIiB3cmFwcGluZy4KICclUyc6OiByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIHRoZSBjb21taXQgd2FzIHJlYWNoZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKaW5kZXggZTQ0ZmM4Zi4uN2E2ZGE2ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTMsNyArMyw3IEBACiAKIAlQcmV0dHktcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgbG9ncyBpbiBhIGdpdmVuIGZvcm1hdCwKIAl3aGVyZSAnPGZvcm1hdD4nIGNhbiBiZSBvbmUgb2YgJ29uZWxpbmUnLCAnc2hvcnQnLCAnbWVkaXVtJywKLQknZnVsbCcsICdmdWxsZXInLCAnZW1haWwnLCAncmF3JywgJ2Zvcm1hdDo8c3RyaW5nPicKKwknZnVsbCcsICdmdWxsZXInLCAncmVmZXJlbmNlJywgJ2VtYWlsJywgJ3JhdycsICdmb3JtYXQ6PHN0cmluZz4nCiAJYW5kICd0Zm9ybWF0OjxzdHJpbmc+Jy4gIFdoZW4gJzxmb3JtYXQ+JyBpcyBub25lIG9mIHRoZSBhYm92ZSwKIAlhbmQgaGFzICclcGxhY2Vob2xkZXInIGluIGl0LCBpdCBhY3RzIGFzIGlmCiAJJy0tcHJldHR5PXRmb3JtYXQ6PGZvcm1hdD4nIHdlcmUgZ2l2ZW4uCkBAIC01Nyw3ICs1Nyw3IEBACiBhbmQgJ2Z1bGxlcicpLgogCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCi0tLW5vdGVzWz08dHJlZWlzaD5dOjoKKy0tbm90ZXNbPTxyZWY+XTo6CiAJU2hvdyB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgdGhhdCBhbm5vdGF0ZSB0aGUKIAljb21taXQsIHdoZW4gc2hvd2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAogCWZvciBgZ2l0IGxvZ2AsIGBnaXQgc2hvd2AgYW5kIGBnaXQgd2hhdGNoYW5nZWRgIGNvbW1hbmRzIHdoZW4KQEAgLTY4LDggKzY4LDggQEAKIGBjb3JlLm5vdGVzUmVmYCBhbmQgYG5vdGVzLmRpc3BsYXlSZWZgIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZwogZW52aXJvbm1lbnQgb3ZlcnJpZGVzKS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgogKwotV2l0aCBhbiBvcHRpb25hbCAnPHRyZWVpc2g+JyBhcmd1bWVudCwgdXNlIHRoZSB0cmVlaXNoIHRvIGZpbmQgdGhlIG5vdGVzCi10byBkaXNwbGF5LiAgVGhlIHRyZWVpc2ggY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucworV2l0aCBhbiBvcHRpb25hbCAnPHJlZj4nIGFyZ3VtZW50LCB1c2UgdGhlIHJlZiB0byBmaW5kIHRoZSBub3RlcwordG8gZGlzcGxheS4gIFRoZSByZWYgY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucwogd2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0IGJlZ2lucyB3aXRoIGBub3Rlcy9gLCBgcmVmcy9gIGFuZCBvdGhlcndpc2UKIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQgdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgogKwpAQCAtODUsNyArODUsNyBAQAogCSItLW5vdGVzIC0tbm90ZXM9Zm9vIC0tbm8tbm90ZXMgLS1ub3Rlcz1iYXIiIHdpbGwgb25seSBzaG93IG5vdGVzCiAJZnJvbSAicmVmcy9ub3Rlcy9iYXIiLgogCi0tLXNob3ctbm90ZXNbPTx0cmVlaXNoPl06OgorLS1zaG93LW5vdGVzWz08cmVmPl06OgogLS1bbm8tXXN0YW5kYXJkLW5vdGVzOjoKIAlUaGVzZSBvcHRpb25zIGFyZSBkZXByZWNhdGVkLiBVc2UgdGhlIGFib3ZlIC0tbm90ZXMvLS1uby1ub3RlcwogCW9wdGlvbnMgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDkwZmY5ZTIuLmJmZDAyYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtNTgsNyArNTgsNyBAQAogCWAtLWFsbC1tYXRjaGApLgogaWZuZGVmOjpnaXQtcmV2LWxpc3RbXQogKwotV2hlbiBgLS1zaG93LW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCitXaGVuIGAtLW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCiBtYXRjaGVkIGFzIGlmIGl0IHdlcmUgcGFydCBvZiB0aGUgbG9nIG1lc3NhZ2UuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KIApAQCAtMjY5LDcgKzI2OSw3IEBACiAJZXhjbHVkZSAodGhhdCBpcywgJ3tjYXJldH1jb21taXQnLCAnY29tbWl0MS4uY29tbWl0MicsCiAJYW5kICdjb21taXQxXC4uLmNvbW1pdDInIG5vdGF0aW9ucyBjYW5ub3QgYmUgdXNlZCkuCiArCi1XaXRoIGAtLXByZXR0eWAgZm9ybWF0IG90aGVyIHRoYW4gYG9uZWxpbmVgIChmb3Igb2J2aW91cyByZWFzb25zKSwKK1dpdGggYC0tcHJldHR5YCBmb3JtYXQgb3RoZXIgdGhhbiBgb25lbGluZWAgYW5kIGByZWZlcmVuY2VgIChmb3Igb2J2aW91cyByZWFzb25zKSwKIHRoaXMgY2F1c2VzIHRoZSBvdXRwdXQgdG8gaGF2ZSB0d28gZXh0cmEgbGluZXMgb2YgaW5mb3JtYXRpb24KIHRha2VuIGZyb20gdGhlIHJlZmxvZy4gIFRoZSByZWZsb2cgZGVzaWduYXRvciBpbiB0aGUgb3V0cHV0IG1heSBiZSBzaG93bgogYXMgYHJlZkB7TnRofWAgKHdoZXJlIGBOdGhgIGlzIHRoZSByZXZlcnNlLWNocm9ub2xvZ2ljYWwgaW5kZXggaW4gdGhlCkBAIC0yOTMsNiArMjkzLDggQEAKIHByZWZpeGVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgogVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tcmV2ZXJzZWAuCiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uCisrCitVbmRlciBgLS1wcmV0dHk9cmVmZXJlbmNlYCwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuCiAKIC0tbWVyZ2U6OgogCUFmdGVyIGEgZmFpbGVkIG1lcmdlLCBzaG93IHJlZnMgdGhhdCB0b3VjaCBmaWxlcyBoYXZpbmcgYQpAQCAtNTc5LDYgKzU4MSw3IEBACiBjb250ZW50cyBvZiB0aGUgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCBvdGhlcgogY29tbWl0cyBhcmUgbWFya2VkIGFzIFRSRUVTQU1FIChzdWJqZWN0IHRvIGJlIHNpbXBsaWZpZWQgYXdheSkuCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIGlmZGVmOjpnaXQtcmV2LWxpc3RbXQogQmlzZWN0aW9uIEhlbHBlcnMKIH5+fn5+fn5+fn5+fn5+fn5+CkBAIC02MzQsOCArNjM3LDkgQEAKIGFmdGVyIGFsbCB0aGUgc29ydGVkIGNvbW1pdCBvYmplY3RzLCB0aGVyZSB3aWxsIGJlIHRoZSBzYW1lIHRleHQgYXMgaWYKIGAtLWJpc2VjdC12YXJzYCBoYWQgYmVlbiB1c2VkIGFsb25lLgogZW5kaWY6OmdpdC1yZXYtbGlzdFtdCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAotCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBDb21taXQgT3JkZXJpbmcKIH5+fn5+fn5+fn5+fn5+fgogCkBAIC02NzcsNyArNjgxLDkgQEAKIAlPdXRwdXQgdGhlIGNvbW1pdHMgY2hvc2VuIHRvIGJlIHNob3duIChzZWUgQ29tbWl0IExpbWl0aW5nCiAJc2VjdGlvbiBhYm92ZSkgaW4gcmV2ZXJzZSBvcmRlci4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKIAlgLS13YWxrLXJlZmxvZ3NgLgorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIE9iamVjdCBUcmF2ZXJzYWwKIH5+fn5+fn5+fn5+fn5+fn4KIApAQCAtODE3LDcgKzgyMyw5IEBACiAKIC0tZG8td2Fsazo6CiAJT3ZlcnJpZGVzIGEgcHJldmlvdXMgYC0tbm8td2Fsa2AuCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAoraWZuZGVmOjpnaXQtc2hvcnRsb2dbXQogQ29tbWl0IEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTk3Myw3ICs5ODEsOSBAQAogCWNvdW50cyBhbmQgcHJpbnQgdGhlIGNvdW50IGZvciBlcXVpdmFsZW50IGNvbW1pdHMgc2VwYXJhdGVkCiAJYnkgYSB0YWIuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KK2VuZGlmOjpnaXQtc2hvcnRsb2dbXQogCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCiBEaWZmIEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fgpAQCAtMTAxNiwzICsxMDI2LDQgQEAKIC10OjoKIAlTaG93IHRoZSB0cmVlIG9iamVjdHMgaW4gdGhlIGRpZmYgb3V0cHV0LiBUaGlzIGltcGxpZXMgYC1yYC4KIGVuZGlmOjpnaXQtcmV2LWxpc3RbXQorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYWxsb2NhdGlvbi1ncm93aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hbGxvY2F0aW9uLWdyb3dpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTU5YjU0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hbGxvY2F0aW9uLWdyb3dpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotYWxsb2NhdGlvbiBncm93aW5nIEFQSQotPT09PT09PT09PT09PT09PT09PT09PQotCi1EeW5hbWljYWxseSBncm93aW5nIGFuIGFycmF5IHVzaW5nIHJlYWxsb2MoKSBpcyBlcnJvciBwcm9uZSBhbmQgYm9yaW5nLgotCi1EZWZpbmUgeW91ciBhcnJheSB3aXRoOgotCi0qIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAotICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cwotICB0eXBlKTsKLQotKiBhbiBpbnRlZ2VyIHZhcmlhYmxlIChgYWxsb2NgKSB0aGF0IGtlZXBzIHRyYWNrIG9mIGhvdyBiaWcgdGhlIGN1cnJlbnQKLSAgYWxsb2NhdGlvbiBpcywgaW5pdGlhbGl6ZWQgdG8gYDBgOwotCi0qIGFub3RoZXIgaW50ZWdlciB2YXJpYWJsZSAoYG5yYCkgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBlbGVtZW50cyB0aGUKLSAgYXJyYXkgY3VycmVudGx5IGhhcywgaW5pdGlhbGl6ZWQgdG8gYDBgLgotCi1UaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAotYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKLWNhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KLQotLS0tLS0tLS0tLS0tCi1zb21ldHlwZSAqaXRlbTsKLXNpemVfdCBucjsKLXNpemVfdCBhbGxvYwotCi1mb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQlpZiAod2UgbGlrZSBpdGVtW2ldIGFscmVhZHkpCi0JCXJldHVybjsKLQotLyogd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUgKi8KLUFMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7Ci1pdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7Ci0tLS0tLS0tLS0tLS0KLQotWW91IGFyZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBucmAgdmFyaWFibGUuCi0KLUlmIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZSBleHBsaWNpdGx5Ci10aGVuIHVzZSB0aGUgbWFjcm8gYFJFQUxMT0NfQVJSQVkoaXRlbSwgYWxsb2MpYCBpbnN0ZWFkIG9mIGBBTExPQ19HUk9XYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcwYzhlZC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYXJndi1hcnJheS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1hcmd2LWFycmF5IEFQSQotPT09PT09PT09PT09PT0KLQotVGhlIGFyZ3YtYXJyYXkgQVBJIGFsbG93cyBvbmUgdG8gZHluYW1pY2FsbHkgYnVpbGQgYW5kIHN0b3JlCi1OVUxMLXRlcm1pbmF0ZWQgbGlzdHMuICBBbiBhcmd2LWFycmF5IG1haW50YWlucyB0aGUgaW52YXJpYW50IHRoYXQgdGhlCi1gYXJndmAgbWVtYmVyIGFsd2F5cyBwb2ludHMgdG8gYSBub24tTlVMTCBhcnJheSwgYW5kIHRoYXQgdGhlIGFycmF5IGlzCi1hbHdheXMgTlVMTC10ZXJtaW5hdGVkIGF0IHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgYGFyZ3ZbYXJnY11gLiBUaGlzCi1tYWtlcyB0aGUgcmVzdWx0IHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGZ1bmN0aW9ucyBleHBlY3RpbmcgdG8gcmVjZWl2ZQotYXJndiBmcm9tIG1haW4oKSwgb3IgdGhlIGxpbms6YXBpLXJ1bi1jb21tYW5kLmh0bWxbcnVuLWNvbW1hbmQgQVBJXS4KLQotVGhlIHN0cmluZy1saXN0IEFQSSAoZG9jdW1lbnRlZCBpbiBzdHJpbmctbGlzdC5oKSBpcyBzaW1pbGFyLCBidXQgY2Fubm90IGJlCi11c2VkIGZvciB0aGVzZSBwdXJwb3NlczsgaW5zdGVhZCBvZiBzdG9yaW5nIGEgc3RyYWlnaHQgc3RyaW5nIHBvaW50ZXIsCi1pdCBjb250YWlucyBhbiBpdGVtIHN0cnVjdHVyZSB3aXRoIGEgYHV0aWxgIGZpZWxkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUKLXdpdGggdGhlIHRyYWRpdGlvbmFsIGFyZ3YgaW50ZXJmYWNlLgotCi1FYWNoIGBhcmd2X2FycmF5YCBtYW5hZ2VzIGl0cyBvd24gbWVtb3J5LiBBbnkgc3RyaW5ncyBwdXNoZWQgaW50byB0aGUKLWFycmF5IGFyZSBkdXBsaWNhdGVkLCBhbmQgYWxsIG1lbW9yeSBpcyBmcmVlZCBieSBhcmd2X2FycmF5X2NsZWFyKCkuCi0KLURhdGEgU3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3QgYXJndl9hcnJheWA6OgotCi0JQSBzaW5nbGUgYXJyYXkuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQotCWBBUkdWX0FSUkFZX0lOSVRgLCBvciBieSBjYWxsaW5nIGBhcmd2X2FycmF5X2luaXRgLiBUaGUgYGFyZ3ZgCi0JbWVtYmVyIGNvbnRhaW5zIHRoZSBhY3R1YWwgYXJyYXk7IHRoZSBgYXJnY2AgbWVtYmVyIGNvbnRhaW5zIHRoZQotCW51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXksIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCi0JTlVMTC4KLQotRnVuY3Rpb25zCi0tLS0tLS0tLS0KLQotYGFyZ3ZfYXJyYXlfaW5pdGA6OgotCUluaXRpYWxpemUgYW4gYXJyYXkuIFRoaXMgaXMgbm8gZGlmZmVyZW50IHRoYW4gYXNzaWduaW5nIGZyb20KLQlgQVJHVl9BUlJBWV9JTklUYC4KLQotYGFyZ3ZfYXJyYXlfcHVzaGA6OgotCVB1c2ggYSBjb3B5IG9mIGEgc3RyaW5nIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0KLWBhcmd2X2FycmF5X3B1c2hsYDo6Ci0JUHVzaCBhIGxpc3Qgb2Ygc3RyaW5ncyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBUaGUgYXJndW1lbnRzCi0Jc2hvdWxkIGJlIGEgbGlzdCBvZiBgY29uc3QgY2hhciAqYCBzdHJpbmdzLCB0ZXJtaW5hdGVkIGJ5IGEgTlVMTAotCWFyZ3VtZW50LgotCi1gYXJndl9hcnJheV9wdXNoZmA6OgotCUZvcm1hdCBhIHN0cmluZyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBUaGlzIGlzIGEKLQljb252ZW5pZW5jZSB3cmFwcGVyIGNvbWJpbmluZyBgc3RyYnVmX2FkZGZgIGFuZCBgYXJndl9hcnJheV9wdXNoYC4KLQotYGFyZ3ZfYXJyYXlfcHVzaHZgOjoKLQlQdXNoIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLQotYGFyZ3ZfYXJyYXlfcG9wYDo6Ci0JUmVtb3ZlIHRoZSBmaW5hbCBlbGVtZW50IGZyb20gdGhlIGFycmF5LiBJZiB0aGVyZSBhcmUgbm8KLQllbGVtZW50cyBpbiB0aGUgYXJyYXksIGRvIG5vdGhpbmcuCi0KLWBhcmd2X2FycmF5X2NsZWFyYDo6Ci0JRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUKLQlpbml0aWFsLCBlbXB0eSBzdGF0ZS4KLQotYGFyZ3ZfYXJyYXlfZGV0YWNoYDo6Ci0JRGlzY29ubmVjdCB0aGUgYGFyZ3ZgIG1lbWJlciBmcm9tIHRoZSBgYXJndl9hcnJheWAgc3RydWN0IGFuZAotCXJldHVybiBpdC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgbWVtb3J5IHVzZWQKLQlieSB0aGUgYXJyYXksIGFuZCBieSB0aGUgc3RyaW5ncyBpdCByZWZlcmVuY2VzLiBBZnRlciBkZXRhY2hpbmcsCi0JdGhlIGBhcmd2X2FycmF5YCBpcyBpbiBhIHJlaW5pdGlhbGl6ZWQgc3RhdGUgYW5kIGNhbiBiZSBwdXNoZWQKLQlpbnRvIGFnYWluLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyMDcxNi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi1jb25maWcgQVBJCi09PT09PT09PT09Ci0KLVRoZSBjb25maWcgQVBJIGdpdmVzIGNhbGxlcnMgYSB3YXkgdG8gYWNjZXNzIEdpdCBjb25maWd1cmF0aW9uIGZpbGVzCi0oYW5kIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgc3ludGF4KS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYQotZGlzY3Vzc2lvbiBvZiB0aGUgY29uZmlnIGZpbGUgc3ludGF4LgotCi1HZW5lcmFsIFVzYWdlCi0tLS0tLS0tLS0tLS0tCi0KLUNvbmZpZyBmaWxlcyBhcmUgcGFyc2VkIGxpbmVhcmx5LCBhbmQgZWFjaCB2YXJpYWJsZSBmb3VuZCBpcyBwYXNzZWQgdG8gYQotY2FsbGVyLXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUKLWZvciBhbnkgYWN0aW9ucyB0byBiZSB0YWtlbiBvbiB0aGUgY29uZmlnIG9wdGlvbiwgYW5kIGlzIGZyZWUgdG8gaWdub3JlCi1zb21lIG9wdGlvbnMuIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcGFyc2VkCi1zZXZlcmFsIHRpbWVzIGR1cmluZyB0aGUgcnVuIG9mIGEgR2l0IHByb2dyYW0sIHdpdGggZGlmZmVyZW50IGNhbGxiYWNrcwotcGlja2luZyBvdXQgZGlmZmVyZW50IHZhcmlhYmxlcyB1c2VmdWwgdG8gdGhlbXNlbHZlcy4KLQotQSBjb25maWcgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKLQotLSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIHZhcmlhYmxlLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlCi0gIHNlY3Rpb24sIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLAotICBhbmQgdGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4gRS5nLiwKLSAgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KLQotLSB0aGUgdmFsdWUgb2YgdGhlIGZvdW5kIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdGhlIHZhcmlhYmxlIGhhZCBubwotICB2YWx1ZSBzcGVjaWZpZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIE5VTEwgKHR5cGljYWxseSB0aGlzIG1lYW5zIGl0Ci0gIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBib29sZWFuIHRydWUpLgotCi0tIGEgdm9pZCBwb2ludGVyIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb25maWcgQVBJOyB0aGlzIGNhbgotICBjb250YWluIGNhbGxiYWNrLXNwZWNpZmljIGRhdGEKLQotQSBjb25maWcgY2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIGZvciBzdWNjZXNzLCBvciAtMSBpZiB0aGUgdmFyaWFibGUKLWNvdWxkIG5vdCBiZSBwYXJzZWQgcHJvcGVybHkuCi0KLUJhc2ljIENvbmZpZyBRdWVyeWluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vc3QgcHJvZ3JhbXMgd2lsbCBzaW1wbHkgd2FudCB0byBsb29rIHVwIHZhcmlhYmxlcyBpbiBhbGwgY29uZmlnIGZpbGVzCi10aGF0IEdpdCBrbm93cyBhYm91dCwgdXNpbmcgdGhlIG5vcm1hbCBwcmVjZWRlbmNlIHJ1bGVzLiBUbyBkbyB0aGlzLAotY2FsbCBgZ2l0X2NvbmZpZ2Agd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB2b2lkIGRhdGEgcG9pbnRlci4KLQotYGdpdF9jb25maWdgIHdpbGwgcmVhZCBhbGwgY29uZmlnIHNvdXJjZXMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZwotcHJpb3JpdHkuIFRodXMgYSBjYWxsYmFjayBzaG91bGQgdHlwaWNhbGx5IG92ZXJ3cml0ZSBwcmV2aW91c2x5LXNlZW4KLWVudHJpZXMgd2l0aCBuZXcgb25lcyAoZS5nLiwgaWYgYm90aCB0aGUgdXNlci13aWRlIGB+Ly5naXRjb25maWdgIGFuZAotcmVwby1zcGVjaWZpYyBgLmdpdC9jb25maWdgIGNvbnRhaW4gYGNvbG9yLnVpYCwgdGhlIGNvbmZpZyBtYWNoaW5lcnkKLXdpbGwgZmlyc3QgZmVlZCB0aGUgdXNlci13aWRlIG9uZSB0byB0aGUgY2FsbGJhY2ssIGFuZCB0aGVuIHRoZQotcmVwby1zcGVjaWZpYyBvbmU7IGJ5IG92ZXJ3cml0aW5nLCB0aGUgaGlnaGVyLXByaW9yaXR5IHJlcG8tc3BlY2lmaWMKLXZhbHVlIGlzIGxlZnQgYXQgdGhlIGVuZCkuCi0KLVRoZSBgY29uZmlnX3dpdGhfb3B0aW9uc2AgZnVuY3Rpb24gbGV0cyB0aGUgY2FsbGVyIGV4YW1pbmUgY29uZmlnCi13aGlsZSBhZGp1c3Rpbmcgc29tZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgZ2l0X2NvbmZpZ2AuIEl0IHNob3VsZAotYWxtb3N0IG5ldmVyIGJlIHVzZWQgYnkgInJlZ3VsYXIiIEdpdCBjb2RlIHRoYXQgaXMgbG9va2luZyB1cAotY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuIEl0IGlzIGludGVuZGVkIGZvciBhZHZhbmNlZCBjYWxsZXJzIGxpa2UKLWBnaXQtY29uZmlnYCwgd2hpY2ggYXJlIGludGVudGlvbmFsbHkgdHdlYWtpbmcgdGhlIG5vcm1hbCBjb25maWctbG9va3VwCi1wcm9jZXNzLiBJdCB0YWtlcyB0d28gZXh0cmEgcGFyYW1ldGVyczoKLQotYGNvbmZpZ19zb3VyY2VgOjoKLUlmIHRoaXMgcGFyYW1ldGVyIGlzIG5vbi1OVUxMLCBpdCBzcGVjaWZpZXMgdGhlIHNvdXJjZSB0byBwYXJzZSBmb3IKLWNvbmZpZ3VyYXRpb24sIHJhdGhlciB0aGFuIGxvb2tpbmcgaW4gdGhlIHVzdWFsIGZpbGVzLiBTZWUgYHN0cnVjdAotZ2l0X2NvbmZpZ19zb3VyY2VgIGluIGBjb25maWcuaGAgZm9yIGRldGFpbHMuIFJlZ3VsYXIgYGdpdF9jb25maWdgIGRlZmF1bHRzCi10byBgTlVMTGAuCi0KLWBvcHRzYDo6Ci1TcGVjaWZ5IG9wdGlvbnMgdG8gYWRqdXN0IHRoZSBiZWhhdmlvciBvZiBwYXJzaW5nIGNvbmZpZyBmaWxlcy4gU2VlIGBzdHJ1Y3QKLWNvbmZpZ19vcHRpb25zYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBBcyBhbiBleGFtcGxlOiByZWd1bGFyIGBnaXRfY29uZmlnYAotc2V0cyBgb3B0cy5yZXNwZWN0X2luY2x1ZGVzYCB0byBgMWAgYnkgZGVmYXVsdC4KLQotUmVhZGluZyBTcGVjaWZpYyBGaWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UbyByZWFkIGEgc3BlY2lmaWMgZmlsZSBpbiBnaXQtY29uZmlnIGZvcm1hdCwgdXNlCi1gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgLiBUaGlzIHRha2VzIHRoZSBzYW1lIGNhbGxiYWNrIGFuZCBkYXRhIHBhcmFtZXRlcnMKLWFzIGBnaXRfY29uZmlnYC4KLQotUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb3IgcHJvZ3JhbXMgd2FudGluZyB0byBxdWVyeSBmb3Igc3BlY2lmaWMgdmFyaWFibGVzIGluIGEgbm9uLWNhbGxiYWNrCi1tYW5uZXIsIHRoZSBjb25maWcgQVBJIHByb3ZpZGVzIHR3byBmdW5jdGlvbnMgYGdpdF9jb25maWdfZ2V0X3ZhbHVlYAotYW5kIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aWAuIFRoZXkgYm90aCByZWFkIHZhbHVlcyBmcm9tIGFuIGludGVybmFsCi1jYWNoZSBnZW5lcmF0ZWQgcHJldmlvdXNseSBmcm9tIHJlYWRpbmcgdGhlIGNvbmZpZyBmaWxlcy4KLQotYGludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSlgOjoKLQotCUZpbmRzIHRoZSBoaWdoZXN0LXByaW9yaXR5IHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCwKLQlzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQotCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZwotCWB2YWx1ZWAuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSBgdmFsdWVgLCBhcyBpdCBpcyBvd25lZAotCWJ5IHRoZSBjYWNoZS4KLQotYGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KWA6OgotCi0JRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5Ci0JZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCi0JYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeQotCXRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCi0KLWB2b2lkIGdpdF9jb25maWdfY2xlYXIodm9pZClgOjoKLQotCVJlc2V0cyBhbmQgaW52YWxpZGF0ZXMgdGhlIGNvbmZpZyBjYWNoZS4KLQotVGhlIGNvbmZpZyBBUEkgYWxzbyBwcm92aWRlcyB0eXBlIHNwZWNpZmljIEFQSSBmdW5jdGlvbnMgd2hpY2ggZG8gY29udmVyc2lvbgotYXMgd2VsbCBhcyByZXRyaWV2YWwgZm9yIHRoZSBxdWVyaWVkIHZhcmlhYmxlLCBpbmNsdWRpbmc6Ci0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KWA6OgotCi0JRmluZHMgYW5kIHBhcnNlcyB0aGUgdmFsdWUgdG8gYW4gaW50ZWdlciBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKLQlga2V5YC4gRGllcyBvbiBlcnJvcjsgb3RoZXJ3aXNlLCBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlciBpbgotCWBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwKLQlyZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZyBgZGVzdGAuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfdWxvbmcoY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfaW50YCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpYDo6Ci0KLQlGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgZm9yIHRoZSBjb25maWd1cmF0aW9uCi0JdmFyaWFibGUgYGtleWAgcmVzcGVjdGluZyBrZXl3b3JkcyBsaWtlICJ0cnVlIiBhbmQgImZhbHNlIi4gSW50ZWdlcgotCXZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleSBhcmUgbm9uLXplcm8gb3IKLQl6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAotCXN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnNlZCByZXN1bHQgaW4gYGRlc3RgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlCi0JY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCi0JYGRlc3RgLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpYDo6Ci0KLQlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIGNvcGllZCBhcy1pcywKLQlhbmQgYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfbWF5YmVfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdClgOjoKLQotCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yCi0JcmF0aGVyIHRoYW4gZHlpbmcuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpYDo6Ci0KLQlBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgcmV0cmlldmVkIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGZvcgotCXRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgOyBpZiBOVUxMIHN0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuCi0JZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcwotCW5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0YCwgZXhjZXB0IHRoYXQgcmV0cmlldmVkIHZhbHVlCi0JY29waWVkIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIHN0cmluZy4KLQotYGludCBnaXRfY29uZmlnX2dldF9wYXRobmFtZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50bwotCXRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgotCi1gZ2l0X2RpZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICplcnIsIC4uLilgOjoKLQotCUZpcnN0IHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZSBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciBpbiBgZXJyYCBhbmQgdGhlbgotCWRpZXMgcHJpbnRpbmcgdGhlIGxpbmUgbnVtYmVyIGFuZCB0aGUgZmlsZSBuYW1lIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0JdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLgotCi1gdm9pZCBnaXRfZGllX2NvbmZpZ19saW5lbnIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVucilgOjoKLQotCUhlbHBlciBmdW5jdGlvbiB3aGljaCBmb3JtYXRzIHRoZSBkaWUgZXJyb3IgbWVzc2FnZSBhY2NvcmRpbmcgdG8gdGhlCi0JcGFyYW1ldGVycyBlbnRlcmVkLiBVc2VkIGJ5IGBnaXRfZGllX2NvbmZpZygpYC4gSXQgY2FuIGJlIHVzZWQgYnkgY2FsbGVycwotCWhhbmRsaW5nIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgpYCB0byBwcmludCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlCi0JZm9yIHRoZSBkZXNpcmVkIHZhbHVlLgotCi1TZWUgdGVzdC1jb25maWcuYyBmb3IgdXNhZ2UgZXhhbXBsZXMuCi0KLVZhbHVlIFBhcnNpbmcgSGVscGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGFpZCBpbiBwYXJzaW5nIHN0cmluZyB2YWx1ZXMsIHRoZSBjb25maWcgQVBJIHByb3ZpZGVzIGNhbGxiYWNrcyB3aXRoCi1hIG51bWJlciBvZiBoZWxwZXIgZnVuY3Rpb25zLCBpbmNsdWRpbmc6Ci0KLWBnaXRfY29uZmlnX2ludGA6OgotUGFyc2UgdGhlIHN0cmluZyB0byBhbiBpbnRlZ2VyLCBpbmNsdWRpbmcgdW5pdCBmYWN0b3JzLiBEaWVzIG9uIGVycm9yOwotb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LgotCi1gZ2l0X2NvbmZpZ191bG9uZ2A6OgotSWRlbnRpY2FsIHRvIGBnaXRfY29uZmlnX2ludGAsIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCi0KLWBnaXRfY29uZmlnX2Jvb2xgOjoKLVBhcnNlIGEgc3RyaW5nIGludG8gYSBib29sZWFuIHZhbHVlLCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZAotImZhbHNlIi4gSW50ZWdlciB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkKLWFyZSBub24temVybyBvciB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYKLXBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmVzdWx0LgotCi1gZ2l0X2NvbmZpZ19ib29sX29yX2ludGA6OgotU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIHJldHVybmVkIGFzLWlzLCBhbmQKLWFuIGBpc19ib29sYCBmbGFnIGlzIHVuc2V0LgotCi1gZ2l0X3BhcnNlX21heWJlX2Jvb2xgOjoKLVNhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgLTEgb24gZXJyb3IgcmF0aGVyCi10aGFuIGR5aW5nLgotCi1gZ2l0X2NvbmZpZ19zdHJpbmdgOjoKLUFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSB2YWx1ZSBzdHJpbmcgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlcjsgaWYgbm8KLXN0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuCi0KLWBnaXRfY29uZmlnX3BhdGhuYW1lYDo6Ci1TaW1pbGFyIHRvIGBnaXRfY29uZmlnX3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8gdGhlCi11c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgotCi1JbmNsdWRlIERpcmVjdGl2ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KLUhvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgotY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCi1mdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKLXRoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCByZWFkX2ZpbGVfd2l0aF9pbmNsdWRlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhIGluYyA9IENPTkZJR19JTkNMVURFX0lOSVQ7Ci0JaW5jLmZuID0gZm47Ci0JaW5jLmRhdGEgPSBkYXRhOwotCXJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIGZpbGUsICZpbmMpOwotfQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCi1gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgotCi1DdXN0b20gQ29uZmlnc2V0cwotLS0tLS0tLS0tLS0tLS0tLS0KLQotQSBgY29uZmlnX3NldGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGFuIGluLW1lbW9yeSBjYWNoZSBmb3IKLWNvbmZpZy1saWtlIGZpbGVzIHRoYXQgdGhlIGNhbGxlciBzcGVjaWZpZXMgKGkuZS4sIGZpbGVzIGxpa2UgYC5naXRtb2R1bGVzYCwKLWB+Ly5naXRjb25maWdgIGV0Yy4pLiBGb3IgZXhhbXBsZSwKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RydWN0IGNvbmZpZ19zZXQgZ21fY29uZmlnOwotZ2l0X2NvbmZpZ3NldF9pbml0KCZnbV9jb25maWcpOwotaW50IGI7Ci0vKiB3ZSBhZGQgY29uZmlnIGZpbGVzIHRvIHRoZSBjb25maWdfc2V0ICovCi1naXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlcyIpOwotZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXNfYWx0Iik7Ci0KLWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbChnbV9jb25maWcsICJzdWJtb2R1bGUuZnJvdHouaWdub3JlIiwgJmIpKSB7Ci0JLyogaGFjayBoYWNrIGhhY2sgKi8KLX0KLQotLyogd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBjb25maWdzZXQgKi8KLWdpdF9jb25maWdzZXRfY2xlYXIoJmdtX2NvbmZpZyk7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbmZpZ3NldCBBUEkgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciB0aGUgYWJvdmUgbWVudGlvbmVkIHdvcmsgZmxvdywgaW5jbHVkaW5nOgotCi1gdm9pZCBnaXRfY29uZmlnc2V0X2luaXQoc3RydWN0IGNvbmZpZ19zZXQgKmNzKWA6OgotCi0JSW5pdGlhbGl6ZXMgdGhlIGNvbmZpZ19zZXQgYGNzYC4KLQotYGludCBnaXRfY29uZmlnc2V0X2FkZF9maWxlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqZmlsZW5hbWUpYDo6Ci0KLQlQYXJzZXMgdGhlIGZpbGUgYW5kIGFkZHMgdGhlIHZhcmlhYmxlLXZhbHVlIHBhaXJzIHRvIHRoZSBgY29uZmlnX3NldGAsCi0JZGllcyBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBwYXJzaW5nIHRoZSBmaWxlLiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IKLQktMSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBpbmFjY2Vzc2libGUuIFRoZSB1c2VyIGhhcyB0byBkZWNpZGUKLQlpZiBoZSB3YW50cyB0byBmcmVlIHRoZSBpbmNvbXBsZXRlIGNvbmZpZ3NldCBvciBjb250aW51ZSB1c2luZyBpdCB3aGVuCi0JdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEuCi0KLWBpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSlgOjoKLQotCUZpbmRzIHRoZSBoaWdoZXN0LXByaW9yaXR5IHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YAotCWFuZCBjb25maWcgc2V0IGBjc2AsIHN0b3JlcyB0aGUgcG9pbnRlciB0byBpdCBpbiBgdmFsdWVgIGFuZCByZXR1cm5zIDAuCi0JV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0Ci0JdG91Y2hpbmcgYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0Ci0JaXMgb3duZWQgYnkgdGhlIGNhY2hlLgotCi1gY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSlgOjoKLQotCUZpbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBsaXN0LCBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBwcmlvcml0eQotCWZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBhbmQgY29uZmlnIHNldCBgY3NgLiBXaGVuIHRoZQotCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIKLQlzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCi0KLWB2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKWA6OgotCi0JQ2xlYXJzIGBjb25maWdfc2V0YCBzdHJ1Y3R1cmUsIHJlbW92ZXMgYWxsIHNhdmVkIHZhcmlhYmxlLXZhbHVlIHBhaXJzLgotCi1JbiBhZGRpdGlvbiB0byBhYm92ZSBmdW5jdGlvbnMsIHRoZSBgY29uZmlnX3NldGAgQVBJIHByb3ZpZGVzIHR5cGUgc3BlY2lmaWMKLWZ1bmN0aW9ucyBpbiB0aGUgdmVpbiBvZiBgZ2l0X2NvbmZpZ19nZXRfaW50YCBhbmQgZmFtaWx5IGJ1dCB3aXRoIGFuIGV4dHJhCi1wYXJhbWV0ZXIsIHBvaW50ZXIgdG8gc3RydWN0IGBjb25maWdfc2V0YC4KLVRoZXkgYWxsIGJlaGF2ZSBzaW1pbGFybHkgdG8gdGhlIGBnaXRfY29uZmlnX2dldCooKWAgZmFtaWx5IGRlc2NyaWJlZCBpbgotIlF1ZXJ5aW5nIEZvciBTcGVjaWZpYyBWYXJpYWJsZXMiIGFib3ZlLgotCi1Xcml0aW5nIENvbmZpZyBGaWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR2l0IGdpdmVzIG11bHRpcGxlIGVudHJ5IHBvaW50cyBpbiB0aGUgQ29uZmlnIEFQSSB0byB3cml0ZSBjb25maWcgdmFsdWVzIHRvCi1maWxlcyBuYW1lbHkgYGdpdF9jb25maWdfc2V0X2luX2ZpbGVgIGFuZCBgZ2l0X2NvbmZpZ19zZXRgLCB3aGljaCB3cml0ZSB0bwotYSBzcGVjaWZpYyBjb25maWcgZmlsZSBvciB0byBgLmdpdC9jb25maWdgIHJlc3BlY3RpdmVseS4gVGhleSBib3RoIHRha2UgYQota2V5L3ZhbHVlIHBhaXIgYXMgcGFyYW1ldGVyLgotSW4gdGhlIGVuZCB0aGV5IGJvdGggY2FsbCBgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZWAgd2hpY2ggdGFrZXMgZm91cgotcGFyYW1ldGVyczoKLQotLSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgYXMgYSBzdHJpbmcsIHRvIHdoaWNoIGtleS92YWx1ZSBwYWlycyB3aWxsIGJlIHdyaXR0ZW4uCi0KLS0gdGhlIG5hbWUgb2Yga2V5LCBhcyBhIHN0cmluZy4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZSBzZWN0aW9uLAotICBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywgYW5kIHRoZSBzZWN0aW9uCi0gIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuCi0gIEUuZy4sIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCi0KLS0gdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHZhbHVlIGlzIGVxdWFsIHRvIE5VTEwsIGl0IHdpbGwKLSAgcmVtb3ZlIHRoZSBtYXRjaGluZyBrZXkgZnJvbSB0aGUgY29uZmlnIGZpbGUuCi0KLS0gdGhlIHZhbHVlIHJlZ2V4LCBhcyBhIHN0cmluZy4gSXQgd2lsbCBkaXNyZWdhcmQga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHZhbHVlCi0gIGRvZXMgbm90IG1hdGNoLgotCi0tIGEgbXVsdGlfcmVwbGFjZSB2YWx1ZSwgYXMgYW4gaW50LiBJZiB2YWx1ZSBpcyBlcXVhbCB0byB6ZXJvLCBub3RoaW5nIG9yIG9ubHkKLSAgb25lIG1hdGNoaW5nIGtleS92YWx1ZSBpcyByZXBsYWNlZCwgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcwotICBob3cgbWFueSkgYXJlIHJlbW92ZWQsIGJlZm9yZSB0aGUgbmV3IHBhaXIgaXMgd3JpdHRlbi4KLQotSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCi0KLUFsc28sIHRoZXJlIGFyZSBmdW5jdGlvbnMgYGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25gIGFuZAotYGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZWAgd2l0aCBwYXJhbWV0ZXJzIGBvbGRfbmFtZWAgYW5kIGBuZXdfbmFtZWAKLWZvciByZW5hbWluZyBvciByZW1vdmluZyBzZWN0aW9ucyBpbiB0aGUgY29uZmlnIGZpbGVzLiBJZiBOVUxMIGlzIHBhc3NlZAotdGhyb3VnaCBgbmV3X25hbWVgIHBhcmFtZXRlciwgdGhlIHNlY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MzY4ZjIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi1jcmVkZW50aWFscyBBUEkKLT09PT09PT09PT09PT09PQotCi1UaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKLXBhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIgKGV2ZW4gdGhvdWdoIGNyZWRlbnRpYWxzIGluIHRoZSB3aWRlcgotd29ybGQgY2FuIHRha2UgbWFueSBmb3JtcywgaW4gdGhpcyBkb2N1bWVudCB0aGUgd29yZCAiY3JlZGVudGlhbCIgYWx3YXlzCi1yZWZlcnMgdG8gYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgcGFpcikuCi0KLVRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHR3byBpbnRlcmZhY2VzOiB0aGUgQyBBUEkgdGhhdCB0aGUgY3JlZGVudGlhbAotc3Vic3lzdGVtIHByb3ZpZGVzIHRvIHRoZSByZXN0IG9mIEdpdCwgYW5kIHRoZSBwcm90b2NvbCB0aGF0IEdpdCB1c2VzIHRvCi1jb21tdW5pY2F0ZSB3aXRoIHN5c3RlbS1zcGVjaWZpYyAiY3JlZGVudGlhbCBoZWxwZXJzIi4gSWYgeW91IGFyZQotd3JpdGluZyBHaXQgY29kZSB0aGF0IHdhbnRzIHRvIGxvb2sgdXAgb3IgcHJvbXB0IGZvciBjcmVkZW50aWFscywgc2VlCi10aGUgc2VjdGlvbiAiQyBBUEkiIGJlbG93LiBJZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biBoZWxwZXIsIHNlZQotdGhlIHNlY3Rpb24gb24gIkNyZWRlbnRpYWwgSGVscGVycyIgYmVsb3cuCi0KLVR5cGljYWwgc2V0dXAKLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0tCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEdpdCBjb2RlIChDKSAgICAgICAgICB8LS0tIHRvIHNlcnZlciByZXF1aXJpbmcgLS0tPgotfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgYXV0aGVudGljYXRpb24KLXwuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnwKLXwgQyBjcmVkZW50aWFsIEFQSSAgICAgIHwtLS0gcHJvbXB0IC0tLT4gVXNlcgotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCV4gICAgICB8Ci0JfCBwaXBlIHwKLQl8ICAgICAgdgotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBHaXQgY3JlZGVudGlhbCBoZWxwZXIgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotLS0tLS0tLS0tLS0tCi0KLVRoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KLWNyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCi1BUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgotImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQotc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQotd2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCi1jb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCi0KLUMgQVBJCi0tLS0tLQotCi1UaGUgY3JlZGVudGlhbCBDIEFQSSBpcyBtZWFudCB0byBiZSBjYWxsZWQgYnkgR2l0IGNvZGUgd2hpY2ggbmVlZHMgdG8KLWFjcXVpcmUgb3Igc3RvcmUgYSBjcmVkZW50aWFsLiBJdCBpcyBjZW50ZXJlZCBhcm91bmQgYW4gb2JqZWN0Ci1yZXByZXNlbnRpbmcgYSBzaW5nbGUgY3JlZGVudGlhbCBhbmQgcHJvdmlkZXMgdGhyZWUgYmFzaWMgb3BlcmF0aW9uczoKLWZpbGwgKGFjcXVpcmUgY3JlZGVudGlhbHMgYnkgY2FsbGluZyBoZWxwZXJzIGFuZC9vciBwcm9tcHRpbmcgdGhlIHVzZXIpLAotYXBwcm92ZSAobWFyayBhIGNyZWRlbnRpYWwgYXMgc3VjY2Vzc2Z1bGx5IHVzZWQgc28gdGhhdCBpdCBjYW4gYmUgc3RvcmVkCi1mb3IgbGF0ZXIgdXNlKSwgYW5kIHJlamVjdCAobWFyayBhIGNyZWRlbnRpYWwgYXMgdW5zdWNjZXNzZnVsIHNvIHRoYXQgaXQKLWNhbiBiZSBlcmFzZWQgZnJvbSBhbnkgcGVyc2lzdGVudCBzdG9yYWdlKS4KLQotRGF0YSBTdHJ1Y3R1cmVzCi1+fn5+fn5+fn5+fn5+fn4KLQotYHN0cnVjdCBjcmVkZW50aWFsYDo6Ci0KLQlUaGlzIHN0cnVjdCByZXByZXNlbnRzIGEgc2luZ2xlIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJpbmF0aW9uCi0JYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKLQloZWFwLWFsbG9jYXRlZCAob3IgTlVMTCBpZiB0aGV5IGFyZSBub3Qga25vd24gb3Igbm90IGFwcGxpY2FibGUpLgotCVRoZSBtZWFuaW5nIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnRleHQgZmllbGRzIGlzIHRoZSBzYW1lIGFzCi0JdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2w7IHNlZSB0aGUgc2VjdGlvbiBiZWxvdwotCWZvciBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggZmllbGQuCi0rCi1UaGUgYGhlbHBlcnNgIG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgYHN0cmluZ19saXN0YCBvZiBoZWxwZXJzLiAgRWFjaAotc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbCBoZWxwZXIgd2hpY2ggd2lsbCBiZSBydW4sIGluIG9yZGVyLCB0bwotZWl0aGVyIGFjcXVpcmUgb3Igc3RvcmUgY3JlZGVudGlhbHMuIFNlZSB0aGUgc2VjdGlvbiBvbiBjcmVkZW50aWFsCi1oZWxwZXJzIGJlbG93LiBUaGlzIGxpc3QgaXMgZmlsbGVkLWluIGJ5IHRoZSBBUEkgZnVuY3Rpb25zCi1hY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCi1jb25zdWx0aW5nIGhlbHBlcnMsIHNvIHRoZXJlIHVzdWFsbHkgaXMgbm8gbmVlZCBmb3IgYSBjYWxsZXIgdG8KLW1vZGlmeSB0aGUgaGVscGVycyBmaWVsZCBhdCBhbGwuCi0rCi1UaGlzIHN0cnVjdCBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIHdpdGggYENSRURFTlRJQUxfSU5JVGAgb3IKLWBjcmVkZW50aWFsX2luaXRgLgotCi0KLUZ1bmN0aW9ucwotfn5+fn5+fn5+Ci0KLWBjcmVkZW50aWFsX2luaXRgOjoKLQotCUluaXRpYWxpemUgYSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgc2V0dGluZyBhbGwgZmllbGRzIHRvIGVtcHR5LgotCi1gY3JlZGVudGlhbF9jbGVhcmA6OgotCi0JRnJlZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3JlZGVudGlhbCBzdHJ1Y3R1cmUsCi0JcmV0dXJuaW5nIGl0IHRvIGEgcHJpc3RpbmUgaW5pdGlhbGl6ZWQgc3RhdGUuCi0KLWBjcmVkZW50aWFsX2ZpbGxgOjoKLQotCUluc3RydWN0IHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0byBmaWxsIHRoZSB1c2VybmFtZSBhbmQKLQlwYXNzd29yZCBmaWVsZHMgb2YgdGhlIHBhc3NlZCBjcmVkZW50aWFsIHN0cnVjdCBieSBmaXJzdAotCWNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KLQlyZXR1cm5zLCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUgY3JlZGVudGlhbCBhcmUKLQlndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsCi0JZGllKCkuCi0KLWBjcmVkZW50aWFsX3JlamVjdGA6OgotCi0JSW5mb3JtIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0aGF0IHRoZSBwcm92aWRlZCBjcmVkZW50aWFscwotCWhhdmUgYmVlbiByZWplY3RlZC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0bwotCW5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCi0JZXhhbXBsZSwgdG8gcHVyZ2UgdGhlIGludmFsaWQgY3JlZGVudGlhbHMgZnJvbSBzdG9yYWdlKS4gIEl0Ci0Jd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKLQljcmVkZW50aWFsIGFuZCBzZXQgdGhlbSB0byBOVUxMIChyZWFkeWluZyB0aGUgY3JlZGVudGlhbCBmb3IKLQlhbm90aGVyIGNhbGwgdG8gYGNyZWRlbnRpYWxfZmlsbGApLiBBbnkgZXJyb3JzIGZyb20gaGVscGVycyBhcmUKLQlpZ25vcmVkLgotCi1gY3JlZGVudGlhbF9hcHByb3ZlYDo6Ci0KLQlJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCi0Jd2VyZSBzdWNjZXNzZnVsbHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uICBUaGlzIHdpbGwgY2F1c2UgdGhlCi0JY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KLQl0aGF0IHRoZXkgbWF5IHN0b3JlIHRoZSByZXN1bHQgdG8gYmUgdXNlZCBhZ2Fpbi4gIEFueSBlcnJvcnMKLQlmcm9tIGhlbHBlcnMgYXJlIGlnbm9yZWQuCi0KLWBjcmVkZW50aWFsX2Zyb21fdXJsYDo6Ci0KLQlQYXJzZSBhIFVSTCBpbnRvIGJyb2tlbi1kb3duIGNyZWRlbnRpYWwgZmllbGRzLgotCi1FeGFtcGxlCi1+fn5+fn5+Ci0KLVRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQotdXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IGZvb19sb2dpbihzdHJ1Y3QgZm9vX2Nvbm5lY3Rpb24gKmYpCi17Ci0JaW50IHN0YXR1czsKLQkvKgotCSAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQotCSAqIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgotCSAqLwotCi0Jc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKLQljLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7Ci0JYy5ob3N0ID0geHN0cmR1cChmLT5ob3N0bmFtZSk7Ci0KLQkvKgotCSAqIEZpbGwgaW4gdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMgYnkgY29udGFjdGluZwotCSAqIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0Ci0JICogZmFpbHMuCi0JICovCi0JY3JlZGVudGlhbF9maWxsKCZjKTsKLQotCS8qCi0JICogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgotCSAqLwotCXN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBGT09fT0s6Ci0JCS8qIEl0IHdvcmtlZC4gU3RvcmUgdGhlIGNyZWRlbnRpYWwgZm9yIGxhdGVyIHVzZS4gKi8KLQkJY3JlZGVudGlhbF9hY2NlcHQoJmMpOwotCQlicmVhazsKLQljYXNlIEZPT19CQURfTE9HSU46Ci0JCS8qIEVyYXNlIHRoZSBjcmVkZW50aWFsIGZyb20gc3RvcmFnZSBzbyB3ZSBkb24ndCB0cnkgaXQKLQkJICogYWdhaW4uICovCi0JCWNyZWRlbnRpYWxfcmVqZWN0KCZjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyoKLQkJICogU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKLQkJICogY3JlZGVudGlhbCBpcyBnb29kIG9yIGJhZCwgc28gcmVwb3J0IG5vdGhpbmcgdG8gdGhlCi0JCSAqIGNyZWRlbnRpYWwgc3Vic3lzdGVtLgotCQkgKi8KLQl9Ci0KLQkvKiBGcmVlIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gKi8KLQljcmVkZW50aWFsX2NsZWFyKCZjKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLUNyZWRlbnRpYWwgSGVscGVycwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNyZWRlbnRpYWwgaGVscGVycyBhcmUgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgR2l0IHRvIGZldGNoIG9yIHNhdmUKLWNyZWRlbnRpYWxzIGZyb20gYW5kIHRvIGxvbmctdGVybSBzdG9yYWdlICh3aGVyZSAibG9uZy10ZXJtIiBpcyBzaW1wbHkKLWxvbmdlciB0aGFuIGEgc2luZ2xlIEdpdCBwcm9jZXNzOyBlLmcuLCBjcmVkZW50aWFscyBtYXkgYmUgc3RvcmVkCi1pbi1tZW1vcnkgZm9yIGEgZmV3IG1pbnV0ZXMsIG9yIGluZGVmaW5pdGVseSBvbiBkaXNrKS4KLQotRWFjaCBoZWxwZXIgaXMgc3BlY2lmaWVkIGJ5IGEgc2luZ2xlIHN0cmluZyBpbiB0aGUgY29uZmlndXJhdGlvbgotdmFyaWFibGUgYGNyZWRlbnRpYWwuaGVscGVyYCAoYW5kIG90aGVycywgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCi1UaGUgc3RyaW5nIGlzIHRyYW5zZm9ybWVkIGJ5IEdpdCBpbnRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB1c2luZwotdGhlc2UgcnVsZXM6Ci0KLSAgMS4gSWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggIiEiLCBpdCBpcyBjb25zaWRlcmVkIGEgc2hlbGwKLSAgICAgc25pcHBldCwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICIhIiBiZWNvbWVzIHRoZSBjb21tYW5kLgotCi0gIDIuIE90aGVyd2lzZSwgaWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggYW4gYWJzb2x1dGUgcGF0aCwgdGhlCi0gICAgIHZlcmJhdGltIGhlbHBlciBzdHJpbmcgYmVjb21lcyB0aGUgY29tbWFuZC4KLQotICAzLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgImdpdCBjcmVkZW50aWFsLSIgaXMgcHJlcGVuZGVkIHRvIHRoZSBoZWxwZXIKLSAgICAgc3RyaW5nLCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBjb21tYW5kLgotCi1UaGUgcmVzdWx0aW5nIGNvbW1hbmQgdGhlbiBoYXMgYW4gIm9wZXJhdGlvbiIgYXJndW1lbnQgYXBwZW5kZWQgdG8gaXQKLShzZWUgYmVsb3cgZm9yIGRldGFpbHMpLCBhbmQgdGhlIHJlc3VsdCBpcyBleGVjdXRlZCBieSB0aGUgc2hlbGwuCi0KLUhlcmUgYXJlIHNvbWUgZXhhbXBsZSBzcGVjaWZpY2F0aW9uczoKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBydW4gImdpdCBjcmVkZW50aWFsLWZvbyIKLWZvbwotCi0jIHNhbWUgYXMgYWJvdmUsIGJ1dCBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBoZWxwZXIKLWZvbyAtLWJhcj1iYXoKLQotIyB0aGUgYXJndW1lbnRzIGFyZSBwYXJzZWQgYnkgdGhlIHNoZWxsLCBzbyB1c2Ugc2hlbGwKLSMgcXVvdGluZyBpZiBuZWNlc3NhcnkKLWZvbyAtLWJhcj0id2hpdGVzcGFjZSBhcmciCi0KLSMgeW91IGNhbiBhbHNvIHVzZSBhbiBhYnNvbHV0ZSBwYXRoLCB3aGljaCB3aWxsIG5vdCB1c2UgdGhlIGdpdCB3cmFwcGVyCi0vcGF0aC90by9teS9oZWxwZXIgLS13aXRoLWFyZ3VtZW50cwotCi0jIG9yIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBzaGVsbCBzbmlwcGV0Ci0hZigpIHsgZWNobyAicGFzc3dvcmQ9YGNhdCAkSE9NRS8uc2VjcmV0YCI7IH07IGYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR2VuZXJhbGx5IHNwZWFraW5nLCBydWxlICgzKSBhYm92ZSBpcyB0aGUgc2ltcGxlc3QgZm9yIHVzZXJzIHRvIHNwZWNpZnkuCi1BdXRob3JzIG9mIGNyZWRlbnRpYWwgaGVscGVycyBzaG91bGQgbWFrZSBhbiBlZmZvcnQgdG8gYXNzaXN0IHRoZWlyCi11c2VycyBieSBuYW1pbmcgdGhlaXIgcHJvZ3JhbSAiZ2l0LWNyZWRlbnRpYWwtJE5BTUUiLCBhbmQgcHV0dGluZyBpdCBpbgotdGhlICRQQVRIIG9yICRHSVRfRVhFQ19QQVRIIGR1cmluZyBpbnN0YWxsYXRpb24sIHdoaWNoIHdpbGwgYWxsb3cgYSB1c2VyCi10byBlbmFibGUgaXQgd2l0aCBgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAkTkFNRWAuCi0KLVdoZW4gYSBoZWxwZXIgaXMgZXhlY3V0ZWQsIGl0IHdpbGwgaGF2ZSBvbmUgIm9wZXJhdGlvbiIgYXJndW1lbnQKLWFwcGVuZGVkIHRvIGl0cyBjb21tYW5kIGxpbmUsIHdoaWNoIGlzIG9uZSBvZjoKLQotYGdldGA6OgotCi0JUmV0dXJuIGEgbWF0Y2hpbmcgY3JlZGVudGlhbCwgaWYgYW55IGV4aXN0cy4KLQotYHN0b3JlYDo6Ci0KLQlTdG9yZSB0aGUgY3JlZGVudGlhbCwgaWYgYXBwbGljYWJsZSB0byB0aGUgaGVscGVyLgotCi1gZXJhc2VgOjoKLQotCVJlbW92ZSBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSwgZnJvbSB0aGUgaGVscGVyJ3Mgc3RvcmFnZS4KLQotVGhlIGRldGFpbHMgb2YgdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgaGVscGVyJ3Mgc3RkaW4KLXN0cmVhbS4gVGhlIGV4YWN0IGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQvb3V0cHV0IGZvcm1hdCBvZiB0aGUKLWBnaXQgY3JlZGVudGlhbGAgcGx1bWJpbmcgY29tbWFuZCAoc2VlIHRoZSBzZWN0aW9uIGBJTlBVVC9PVVRQVVQKLUZPUk1BVGAgaW4gbGlua2dpdDpnaXQtY3JlZGVudGlhbFsxXSBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKS4KLQotRm9yIGEgYGdldGAgb3BlcmF0aW9uLCB0aGUgaGVscGVyIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiBhdHRyaWJ1dGVzCi1vbiBzdGRvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LiBBIGhlbHBlciBpcyBmcmVlIHRvIHByb2R1Y2UgYSBzdWJzZXQsIG9yCi1ldmVuIG5vIHZhbHVlcyBhdCBhbGwgaWYgaXQgaGFzIG5vdGhpbmcgdXNlZnVsIHRvIHByb3ZpZGUuIEFueSBwcm92aWRlZAotYXR0cmlidXRlcyB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBhbHJlYWR5IGtub3duIGFib3V0IGJ5IEdpdC4gIElmIGEgaGVscGVyCi1vdXRwdXRzIGEgYHF1aXRgIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgYHRydWVgIG9yIGAxYCwgbm8gZnVydGhlcgotaGVscGVycyB3aWxsIGJlIGNvbnN1bHRlZCwgbm9yIHdpbGwgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgKGlmIG5vCi1jcmVkZW50aWFsIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgb3BlcmF0aW9uIHdpbGwgdGhlbiBmYWlsKS4KLQotRm9yIGEgYHN0b3JlYCBvciBgZXJhc2VgIG9wZXJhdGlvbiwgdGhlIGhlbHBlcidzIG91dHB1dCBpcyBpZ25vcmVkLgotSWYgaXQgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgaXQgbWF5IGNvbXBsYWluIHRvCi1zdGRlcnIgdG8gaW5mb3JtIHRoZSB1c2VyLiBJZiBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQKLW9wZXJhdGlvbiAoZS5nLiwgYSByZWFkLW9ubHkgc3RvcmUpLCBpdCBzaG91bGQgc2lsZW50bHkgaWdub3JlIHRoZQotcmVxdWVzdC4KLQotSWYgYSBoZWxwZXIgcmVjZWl2ZXMgYW55IG90aGVyIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKLXJlcXVlc3QuIFRoaXMgbGVhdmVzIHJvb20gZm9yIGZ1dHVyZSBvcGVyYXRpb25zIHRvIGJlIGFkZGVkIChvbGRlcgotaGVscGVycyB3aWxsIGp1c3QgaWdub3JlIHRoZSBuZXcgcmVxdWVzdHMpLgotCi1TZWUgYWxzbwotLS0tLS0tLS0KLQotbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XQotCi1saW5rZ2l0OmdpdC1jb25maWdbMV0gKFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBgY3JlZGVudGlhbC4qYCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYzBlOS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlmZi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotZGlmZiBBUEkKLT09PT09PT09Ci0KLVRoZSBkaWZmIEFQSSBpcyBmb3IgcHJvZ3JhbXMgdGhhdCBjb21wYXJlIHR3byBzZXRzIG9mIGZpbGVzIChlLmcuIHR3bwotdHJlZXMsIG9uZSB0cmVlIGFuZCB0aGUgaW5kZXgpIGFuZCBwcmVzZW50IHRoZSBmb3VuZCBkaWZmZXJlbmNlIGluCi12YXJpb3VzIHdheXMuICBUaGUgY2FsbGluZyBwcm9ncmFtIGlzIHJlc3BvbnNpYmxlIGZvciBmZWVkaW5nIHRoZSBBUEkKLXBhaXJzIG9mIGZpbGVzLCBvbmUgZnJvbSB0aGUgIm9sZCIgc2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgZnJvbQotIm5ldyIgc2V0LCB0aGF0IGFyZSBkaWZmZXJlbnQuICBUaGUgbGlicmFyeSBjYWxsZWQgdGhyb3VnaCB0aGlzIEFQSSBpcwotY2FsbGVkIGRpZmZjb3JlLCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHR3byB0aGluZ3MuCi0KLSogZmluZGluZyB0b3RhbCByZXdyaXRlcyAoYC1CYCksIHJlbmFtZXMgKGAtTWApIGFuZCBjb3BpZXMgKGAtQ2ApLCBhbmQKLSAgY2hhbmdlcyB0aGF0IHRvdWNoIGEgc3RyaW5nIChgLVNgKSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuCi0KLSogb3V0cHV0dGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gdmFyaW91cyBmb3JtYXRzLCBhcyBzcGVjaWZpZWQgYnkgdGhlCi0gIGNhbGxlci4KLQotQ2FsbGluZyBzZXF1ZW5jZQotLS0tLS0tLS0tLS0tLS0tLQotCi0qIFByZXBhcmUgYHN0cnVjdCBkaWZmX29wdGlvbnNgIHRvIHJlY29yZCB0aGUgc2V0IG9mIGRpZmYgb3B0aW9ucywgYW5kCi0gIHRoZW4gY2FsbCBgcmVwb19kaWZmX3NldHVwKClgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuICBUaGlzCi0gIHNldHMgdXAgdGhlIHZhbmlsbGEgZGVmYXVsdC4KLQotKiBGaWxsIGluIHRoZSBvcHRpb25zIHN0cnVjdHVyZSB0byBzcGVjaWZ5IGRlc2lyZWQgb3V0cHV0IGZvcm1hdCwgcmVuYW1lCi0gIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KLSAgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGluIGEgd2F5IGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBnaXQtZGlmZgotICBmYW1pbHkgb2YgcHJvZ3JhbXMuCi0KLSogQ2FsbCBgZGlmZl9zZXR1cF9kb25lKClgOyB0aGlzIGluc3BlY3RzIHRoZSBvcHRpb25zIHNldCB1cCBzbyBmYXIgZm9yCi0gIGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCBtYWtlIG5lY2Vzc2FyeSB0d2Vha2luZyB0byBpdCAoZS5nLiBpZgotICB0ZXh0dWFsIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKTsKLSAgdGhlIGNhbGxiYWNrIHNldF9kZWZhdWx0IGluIGRpZmZfb3B0aW9ucyBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGlzIG1vcmUuCi0KLSogQXMgeW91IGZpbmQgZGlmZmVyZW50IHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmX2NoYW5nZSgpYCB0byBmZWVkCi0gIG1vZGlmaWVkIGZpbGVzLCBgZGlmZl9hZGRyZW1vdmUoKWAgdG8gZmVlZCBjcmVhdGVkIG9yIGRlbGV0ZWQgZmlsZXMsCi0gIG9yIGBkaWZmX3VubWVyZ2UoKWAgdG8gZmVlZCBhIGZpbGUgd2hvc2Ugc3RhdGUgaXMgJ3VubWVyZ2VkJyB0byB0aGUKLSAgQVBJLiAgVGhlc2UgYXJlIHRoaW4gd3JhcHBlcnMgdG8gYSBsb3dlci1sZXZlbCBgZGlmZl9xdWV1ZSgpYCBmdW5jdGlvbgotICB0aGF0IGlzIGZsZXhpYmxlIGVub3VnaCB0byByZWNvcmQgYW55IG9mIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMuCi0KLSogT25jZSB5b3UgZmluaXNoIGZlZWRpbmcgdGhlIHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmY29yZV9zdGQoKWAuCi0gIFRoaXMgd2lsbCB0ZWxsIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRvIGdvIGFoZWFkIGFuZCBkbyBpdHMgd29yay4KLQotKiBDYWxsaW5nIGBkaWZmX2ZsdXNoKClgIHdpbGwgcHJvZHVjZSB0aGUgb3V0cHV0LgotCi0KLURhdGEgc3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLSogYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYAotCi1UaGlzIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgZmlsZSAoYmxvYikuICBJdAotcmVjb3JkcyB0aGUgYmxvYiBvYmplY3QgbmFtZSAoaWYga25vd24gLS0gZm9yIGEgd29yayB0cmVlIGZpbGUgaXQKLXR5cGljYWxseSBpcyBhIE5VTCBTSEEtMSksIGZpbGVtb2RlIGFuZCBwYXRobmFtZS4gIFRoaXMgaXMgd2hhdCB0aGUKLWBkaWZmX2FkZHJlbW92ZSgpYCwgYGRpZmZfY2hhbmdlKClgIGFuZCBgZGlmZl91bm1lcmdlKClgIHN5bnRoZXNpemUgYW5kCi1mZWVkIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHdpdGguCi0KLSogYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYAotCi1UaGlzIHJlY29yZHMgYSBwYWlyIG9mIGBzdHJ1Y3QgZGlmZl9maWxlc3BlY2A7IHRoZSBmaWxlc3BlYyBmb3IgYSBmaWxlCi1pbiB0aGUgIm9sZCIgc2V0IChpLmUuIHByZWltYWdlKSBpcyBjYWxsZWQgYG9uZWAsIGFuZCB0aGUgZmlsZXNwZWMgZm9yIGEKLWZpbGUgaW4gdGhlICJuZXciIHNldCAoaS5lLiBwb3N0aW1hZ2UpIGlzIGNhbGxlZCBgdHdvYC4gIEEgY2hhbmdlIHRoYXQKLXJlcHJlc2VudHMgZmlsZSBjcmVhdGlvbiBoYXMgTlVMTCBpbiBgb25lYCwgYW5kIGZpbGUgZGVsZXRpb24gaGFzIE5VTEwKLWluIGB0d29gLgotCi1BIGBmaWxlcGFpcmAgc3RhcnRzIHBvaW50aW5nIGF0IGBvbmVgIGFuZCBgdHdvYCB0aGF0IGFyZSBmcm9tIHRoZSBzYW1lCi1maWxlbmFtZSwgYnV0IGBkaWZmY29yZV9zdGQoKWAgY2FuIGJyZWFrIHBhaXJzIGFuZCBtYXRjaCBjb21wb25lbnQKLWZpbGVzcGVjcyB3aXRoIG90aGVyIGZpbGVzcGVjcyBmcm9tIGEgZGlmZmVyZW50IGZpbGVwYWlyIHRvIGZvcm0gbmV3Ci1maWxlcGFpci4gIFRoaXMgaXMgY2FsbGVkICdyZW5hbWUgZGV0ZWN0aW9uJy4KLQotKiBgc3RydWN0IGRpZmZfcXVldWVgCi0KLVRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVwYWlycy4gIE5vdGFibGUgbWVtYmVycyBhcmU6Ci0KLWBxdWV1ZWA6OgotCi0JQW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYC4gIFRoaXMKLQlkeW5hbWljYWxseSBncm93cyBhcyB5b3UgYWRkIGZpbGVwYWlyczsKLQotYGFsbG9jYDo6Ci0KLQlUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGBxdWV1ZWAgYXJyYXk7Ci0KLWBucmA6OgotCi0JVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYHF1ZXVlYCBhcnJheS4KLQotCi0qIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYAotCi1UaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKLXRoZSBvcGVyYXRpb24gb2YgZGlmZmNvcmUgbGlicmFyeSB3aXRoLgotCi1Ob3RhYmxlIG1lbWJlcnMgYXJlOgotCi1gb3V0cHV0X2Zvcm1hdGA6OgotCVRoZSBvdXRwdXQgZm9ybWF0IHVzZWQgd2hlbiBgZGlmZl9mbHVzaCgpYCBpcyBydW4uCi0KLWBjb250ZXh0YDo6Ci0JTnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gZ2VuZXJhdGUgaW4gcGF0Y2ggb3V0cHV0LgotCi1gYnJlYWtfb3B0YCwgYGRldGVjdF9yZW5hbWVgLCBgcmVuYW1lLXNjb3JlYCwgYHJlbmFtZV9saW1pdGA6OgotCUFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzCi0JYW5kIGNvcGllcy4KLQotYGFiYnJldmA6OgotCU51bWJlciBvZiBoZXhkaWdpdHMgdG8gYWJicmV2aWF0ZSByYXcgZm9ybWF0IG91dHB1dCB0by4KLQotYHBpY2theGVgOjoKLQlBIGNvbnN0YW50IHN0cmluZyAoY2FuIGFuZCB0eXBpY2FsbHkgZG9lcyBjb250YWluIG5ld2xpbmVzIHRvCi0JbG9vayBmb3IgYSBibG9jayBvZiB0ZXh0LCBub3QganVzdCBhIHNpbmdsZSBsaW5lKSB0byBmaWx0ZXIgb3V0Ci0JdGhlIGZpbGVwYWlycyB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdHJpbmdzIGNvbnRhaW5lZAotCWluIGl0cyBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIG9mIHRoZSBkaWZmX3F1ZXVlLgotCi1gZmxhZ3NgOjoKLQlUaGlzIGlzIG1vc3RseSBhIGNvbGxlY3Rpb24gb2YgYm9vbGVhbiBvcHRpb25zIHRoYXQgYWZmZWN0cyB0aGUKLQlvcGVyYXRpb24sIGJ1dCBzb21lIGRvIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGRpZmZjb3JlCi0JbGlicmFyeS4KLQotYHRvdWNoZWRfZmxhZ3NgOjoKLQlSZWNvcmRzIHdoZXRoZXIgYSBmbGFnIGhhcyBiZWVuIGNoYW5nZWQgZHVlIHRvIHVzZXIgcmVxdWVzdAotCShyYXRoZXIgdGhhbiBqdXN0IHNldC91bnNldCBieSBkZWZhdWx0KS4KLQotYHNldF9kZWZhdWx0YDo6Ci0JQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIHR3ZWFraW5nIHRoZSBvcHRpb25zIGluIGRpZmZfc2V0dXBfZG9uZSgpLgotCi1CSU5BUlksIFRFWFQ7OwotCUFmZmVjdHMgdGhlIHdheSBob3cgYSBmaWxlIHRoYXQgaXMgc2VlbWluZ2x5IGJpbmFyeSBpcyB0cmVhdGVkLgotCi1GVUxMX0lOREVYOzsKLQlUZWxscyB0aGUgcGF0Y2ggb3V0cHV0IGZvcm1hdCBub3QgdG8gdXNlIGFiYnJldmlhdGVkIG9iamVjdAotCW5hbWVzIG9uIHRoZSAiaW5kZXgiIGxpbmVzLgotCi1GSU5EX0NPUElFU19IQVJERVI7OwotCVRlbGxzIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxlciBpcyBmZWVkaW5nIHVuY2hhbmdlZAotCWZpbGVwYWlycyB0byBhbGxvdyBjb3BpZXMgZnJvbSB1bm1vZGlmaWVkIGZpbGVzIGJlIGRldGVjdGVkLgotCi1DT0xPUl9ESUZGOzsKLQlPdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuCi0KLUNPTE9SX0RJRkZfV09SRFM7OwotCU91dHB1dCBpcyBhIGNvbG9yZWQgd29yZC1kaWZmLgotCi1OT19JTkRFWDs7Ci0JVGVsbHMgZGlmZi1maWxlcyB0aGF0IHRoZSBpbnB1dCBpcyBub3QgdHJhY2tlZCBmaWxlcyBidXQgZmlsZXMKLQlpbiByYW5kb20gbG9jYXRpb25zIG9uIHRoZSBmaWxlc3lzdGVtLgotCi1BTExPV19FWFRFUk5BTDs7Ci0JVGVsbHMgb3V0cHV0IHJvdXRpbmUgdGhhdCBpdCBpcyBPayB0byBjYWxsIHVzZXIgc3BlY2lmaWVkIHBhdGNoCi0Jb3V0cHV0IHJvdXRpbmUuICBQbHVtYmluZyBkaXNhYmxlcyB0aGlzIHRvIGVuc3VyZSBzdGFibGUgb3V0cHV0LgotCi1RVUlFVDs7Ci0JRG8gbm90IHNob3cgYW55IG91dHB1dC4KLQotUkVWRVJTRV9ESUZGOzsKLQlUZWxscyB0aGUgbGlicmFyeSB0aGF0IHRoZSBjYWxsaW5nIHByb2dyYW0gaXMgZmVlZGluZyB0aGUKLQlmaWxlcGFpcnMgcmV2ZXJzZWQ7IGBvbmVgIGlzIHR3bywgYW5kIGB0d29gIGlzIG9uZS4KLQotRVhJVF9XSVRIX1NUQVRVUzs7Ci0JRm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGluZyBwcm9ncmFtIGFuZCB0aGUgb3B0aW9ucwotCXBhcnNlcjsgdGVsbCB0aGUgY2FsbGluZyBwcm9ncmFtIHRvIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2YKLQlkaWZmZXJlbmNlIHVzaW5nIHByb2dyYW0gZXhpdCBjb2RlLgotCi1IQVNfQ0hBTkdFUzs7Ci0JSW50ZXJuYWw7IHVzZWQgZm9yIG9wdGltaXphdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZS4KLQotU0lMRU5UX09OX1JFTU9WRTs7Ci0JQWZmZWN0cyBpZiBkaWZmLWZpbGVzIHNob3dzIHJlbW92ZWQgZmlsZXMuCi0KLVJFQ1VSU0lWRSwgVFJFRV9JTl9SRUNVUlNJVkU7OwotCVRlbGxzIGlmIHRyZWUgdHJhdmVyc2FsIGRvbmUgYnkgdHJlZS1kaWZmIHNob3VsZCByZWN1cnNpdmVseQotCWRlc2NlbmQgaW50byBhIHRyZWUgb2JqZWN0IHBhaXIgdGhhdCBhcmUgZGlmZmVyZW50IGluIHByZWltYWdlCi0JYW5kIHBvc3RpbWFnZSBzZXQuCi0KLShKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmI2ZTRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotZGlyZWN0b3J5IGxpc3RpbmcgQVBJCi09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIGRpcmVjdG9yeSBsaXN0aW5nIEFQSSBpcyB1c2VkIHRvIGVudW1lcmF0ZSBwYXRocyBpbiB0aGUgd29yayB0cmVlLAotb3B0aW9uYWxseSB0YWtpbmcgYC5naXQvaW5mby9leGNsdWRlYCBhbmQgYC5naXRpZ25vcmVgIGZpbGVzIHBlcgotZGlyZWN0b3J5IGludG8gYWNjb3VudC4KLQotRGF0YSBzdHJ1Y3R1cmUKLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3QgZGlyX3N0cnVjdGAgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyBkaXJlY3RvcnkgdHJhdmVyc2FsCi1vcHRpb25zIHRvIHRoZSBsaWJyYXJ5IGFuZCB0byByZWNvcmQgdGhlIHBhdGhzIGRpc2NvdmVyZWQuICBBIHNpbmdsZQotYHN0cnVjdCBkaXJfc3RydWN0YCBpcyB1c2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIHRyYXZlcnNhbAotcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byBzdWJkaXJlY3Rvcmllcy4KLQotVGhlIG5vdGFibGUgb3B0aW9ucyBhcmU6Ci0KLWBleGNsdWRlX3Blcl9kaXJgOjoKLQotCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlYWQgaW4gZWFjaCBkaXJlY3RvcnkgZm9yIGV4Y2x1ZGVkCi0JZmlsZXMgKHR5cGljYWxseSBgLmdpdGlnbm9yZWApLgotCi1gZmxhZ3NgOjoKLQotCUEgYml0LWZpZWxkIG9mIG9wdGlvbnM6Ci0KLWBESVJfU0hPV19JR05PUkVEYDo6OgotCi0JUmV0dXJuIGp1c3QgaWdub3JlZCBmaWxlcyBpbiBgZW50cmllc1tdYCwgbm90IHVudHJhY2tlZAotCWZpbGVzLiBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGgKLQlgRElSX1NIT1dfSUdOT1JFRF9UT09gLgotCi1gRElSX1NIT1dfSUdOT1JFRF9UT09gOjo6Ci0KLQlTaW1pbGFyIHRvIGBESVJfU0hPV19JR05PUkVEYCwgYnV0IHJldHVybiBpZ25vcmVkIGZpbGVzIGluCi0JYGlnbm9yZWRbXWAgaW4gYWRkaXRpb24gdG8gdW50cmFja2VkIGZpbGVzIGluCi0JYGVudHJpZXNbXWAuIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aAotCWBESVJfU0hPV19JR05PUkVEYC4KLQotYERJUl9LRUVQX1VOVFJBQ0tFRF9DT05URU5UU2A6OjoKLQotCU9ubHkgaGFzIG1lYW5pbmcgaWYgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBpcyBhbHNvIHNldDsgaWYgdGhpcyBpcyBzZXQsIHRoZQotCXVudHJhY2tlZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMgYXJlIGFsc28gcmV0dXJuZWQgaW4KLQlgZW50cmllc1tdYC4KLQotYERJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkdgOjo6Ci0KLQlPbmx5IGhhcyBtZWFuaW5nIGlmIGBESVJfU0hPV19JR05PUkVEX1RPT2AgaXMgYWxzbyBzZXQ7IGlmCi0JdGhpcyBpcyBzZXQsIHJldHVybnMgaWdub3JlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaAotCWFuIGV4Y2x1ZGUgcGF0dGVybi4gSWYgYSBkaXJlY3RvcnkgbWF0Y2hlcyBhbiBleGNsdWRlIHBhdHRlcm4sCi0JdGhlbiB0aGUgZGlyZWN0b3J5IGlzIHJldHVybmVkIGFuZCB0aGUgY29udGFpbmVkIHBhdGhzIGFyZQotCW5vdC4gQSBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbiBleGNsdWRlIHBhdHRlcm4gd2lsbAotCW5vdCBiZSByZXR1cm5lZCBldmVuIGlmIGFsbCBvZiBpdHMgY29udGVudHMgYXJlIGlnbm9yZWQuIEluCi0JdGhpcyBjYXNlLCB0aGUgY29udGVudHMgYXJlIHJldHVybmVkIGFzIGluZGl2aWR1YWwgZW50cmllcy4KLSsKLUlmIHRoaXMgaXMgc2V0LCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBleHBsaWNpdGx5IG1hdGNoIGFuIGlnbm9yZQotcGF0dGVybiBhcmUgcmVwb3J0ZWQuIEltcGxpY2l0bHkgaWdub3JlZCBkaXJlY3RvcmllcyAoZGlyZWN0b3JpZXMgdGhhdAotZG8gbm90IG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuLCBidXQgd2hvc2UgY29udGVudHMgYXJlIGFsbCBpZ25vcmVkKQotYXJlIG5vdCByZXBvcnRlZCwgaW5zdGVhZCBhbGwgb2YgdGhlIGNvbnRlbnRzIGFyZSByZXBvcnRlZC4KLQotYERJUl9DT0xMRUNUX0lHTk9SRURgOjo6Ci0KLQlTcGVjaWFsIG1vZGUgZm9yIGdpdC1hZGQuIFJldHVybiBpZ25vcmVkIGZpbGVzIGluIGBpZ25vcmVkW11gIGFuZAotCXVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4gT25seSByZXR1cm5zIGlnbm9yZWQgZmlsZXMgdGhhdCBtYXRjaAotCXBhdGhzcGVjIGV4YWN0bHkgKG5vIHdpbGRjYXJkcykuIERvZXMgbm90IHJlY3Vyc2UgaW50byBpZ25vcmVkCi0JZGlyZWN0b3JpZXMuCi0KLWBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFU2A6OjoKLQotCUluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZC4KLQotYERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTYDo6OgotCi0JRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuCi0KLWBESVJfTk9fR0lUTElOS1NgOjo6Ci0KLQlJZiBzZXQsIHJlY3Vyc2UgaW50byBhIGRpcmVjdG9yeSB0aGF0IGxvb2tzIGxpa2UgYSBHaXQKLQlkaXJlY3RvcnkuICBPdGhlcndpc2UgaXQgaXMgc2hvd24gYXMgYSBkaXJlY3RvcnkuCi0KLVRoZSByZXN1bHQgb2YgdGhlIGVudW1lcmF0aW9uIGlzIGxlZnQgaW4gdGhlc2UgZmllbGRzOgotCi1gZW50cmllc1tdYDo6Ci0KLQlBbiBhcnJheSBvZiBgc3RydWN0IGRpcl9lbnRyeWAsIGVhY2ggZWxlbWVudCBvZiB3aGljaCBkZXNjcmliZXMKLQlhIHBhdGguCi0KLWBucmA6OgotCi0JVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBlbnRyaWVzW11gIGFycmF5LgotCi1gYWxsb2NgOjoKLQotCUludGVybmFsIHVzZTsga2VlcHMgdHJhY2sgb2YgYWxsb2NhdGlvbiBvZiBgZW50cmllc1tdYCBhcnJheS4KLQotYGlnbm9yZWRbXWA6OgotCi0JQW4gYXJyYXkgb2YgYHN0cnVjdCBkaXJfZW50cnlgLCB1c2VkIGZvciBpZ25vcmVkIHBhdGhzIHdpdGggdGhlCi0JYERJUl9TSE9XX0lHTk9SRURfVE9PYCBhbmQgYERJUl9DT0xMRUNUX0lHTk9SRURgIGZsYWdzLgotCi1gaWdub3JlZF9ucmA6OgotCi0JVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBpZ25vcmVkW11gIGFycmF5LgotCi1DYWxsaW5nIHNlcXVlbmNlCi0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vdGU6IGluZGV4IG1heSBiZSBsb29rZWQgYXQgZm9yIC5naXRpZ25vcmUgZmlsZXMgdGhhdCBhcmUgQ0VfU0tJUF9XT1JLVFJFRQotbWFya2VkLiBJZiB5b3UgdG8gZXhjbHVkZSBmaWxlcywgbWFrZSBzdXJlIHlvdSBoYXZlIGxvYWRlZCBpbmRleCBmaXJzdC4KLQotKiBQcmVwYXJlIGBzdHJ1Y3QgZGlyX3N0cnVjdCBkaXJgIGFuZCBjbGVhciBpdCB3aXRoIGBtZW1zZXQoJmRpciwgMCwKLSAgc2l6ZW9mKGRpcikpYC4KLQotKiBUbyBhZGQgc2luZ2xlIGV4Y2x1ZGUgcGF0dGVybiwgY2FsbCBgYWRkX3BhdHRlcm5fbGlzdCgpYCBhbmQgdGhlbgotICBgYWRkX3BhdHRlcm4oKWAuCi0KLSogVG8gYWRkIHBhdHRlcm5zIGZyb20gYSBmaWxlIChlLmcuIGAuZ2l0L2luZm8vZXhjbHVkZWApLCBjYWxsCi0gIGBhZGRfcGF0dGVybnNfZnJvbV9maWxlKClgICwgYW5kL29yIHNldCBgZGlyLmV4Y2x1ZGVfcGVyX2RpcmAuICBBCi0gIHNob3J0LWhhbmQgZnVuY3Rpb24gYHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKClgIGNhbiBiZSB1c2VkIHRvIHNldAotICB1cCB0aGUgc3RhbmRhcmQgc2V0IG9mIGV4Y2x1ZGUgc2V0dGluZ3MuCi0KLSogU2V0IG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBEYXRhIFN0cnVjdHVyZSBzZWN0aW9uIGFib3ZlLgotCi0qIENhbGwgYHJlYWRfZGlyZWN0b3J5KClgLgotCi0qIFVzZSBgZGlyLmVudHJpZXNbXWAuCi0KLSogQ2FsbCBgY2xlYXJfZGlyZWN0b3J5KClgIHdoZW4gbm9uZSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFyZSBubyBsb25nZXIgaW4gdXNlLgotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZjBkZjYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLWdpdGF0dHJpYnV0ZXMgQVBJCi09PT09PT09PT09PT09PT09PQotCi1naXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBnaXZlcyBhIHVuaWZvcm0gd2F5IHRvIGFzc29jaWF0ZSB2YXJpb3VzCi1hdHRyaWJ1dGVzIHRvIHNldCBvZiBwYXRocy4KLQotCi1EYXRhIFN0cnVjdHVyZQotLS0tLS0tLS0tLS0tLS0KLQotYHN0cnVjdCBnaXRfYXR0cmA6OgotCi0JQW4gYXR0cmlidXRlIGlzIGFuIG9wYXF1ZSBvYmplY3QgdGhhdCBpcyBpZGVudGlmaWVkIGJ5IGl0cyBuYW1lLgotCVBhc3MgdGhlIG5hbWUgdG8gYGdpdF9hdHRyKClgIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgb2JqZWN0IG9mCi0JdGhpcyB0eXBlLiAgVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGlzCi0Jb2Ygbm8gaW50ZXJlc3QgdG8gdGhlIGNhbGxpbmcgcHJvZ3JhbXMuICBUaGUgbmFtZSBvZiB0aGUKLQlhdHRyaWJ1dGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nIGBnaXRfYXR0cl9uYW1lKClgLgotCi1gc3RydWN0IGF0dHJfY2hlY2tfaXRlbWA6OgotCi0JVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBvbmUgYXR0cmlidXRlIGFuZCBpdHMgdmFsdWUuCi0KLWBzdHJ1Y3QgYXR0cl9jaGVja2A6OgotCi0JVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYGF0dHJfY2hlY2tfaXRlbWAuCi0JSXQgaXMgcGFzc2VkIHRvIGBnaXRfY2hlY2tfYXR0cigpYCBmdW5jdGlvbiwgc3BlY2lmeWluZyB0aGUKLQlhdHRyaWJ1dGVzIHRvIGNoZWNrLCBhbmQgcmVjZWl2ZXMgdGhlaXIgdmFsdWVzLgotCi0KLUF0dHJpYnV0ZSBWYWx1ZXMKLS0tLS0tLS0tLS0tLS0tLS0KLQotQW4gYXR0cmlidXRlIGZvciBhIHBhdGggY2FuIGJlIGluIG9uZSBvZiBmb3VyIHN0YXRlczogU2V0LCBVbnNldCwKLVVuc3BlY2lmaWVkIG9yIHNldCB0byBhIHN0cmluZywgYW5kIGAudmFsdWVgIG1lbWJlciBvZiBgc3RydWN0Ci1hdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMgaXQuICBUaGVyZSBhcmUgdGhyZWUgbWFjcm9zIHRvIGNoZWNrIHRoZXNlOgotCi1gQVRUUl9UUlVFKClgOjoKLQotCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFNldCBmb3IgdGhlIHBhdGguCi0KLWBBVFRSX0ZBTFNFKClgOjoKLQotCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFVuc2V0IGZvciB0aGUgcGF0aC4KLQotYEFUVFJfVU5TRVQoKWA6OgotCi0JUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zcGVjaWZpZWQgZm9yIHRoZSBwYXRoLgotCi1JZiBub25lIG9mIHRoZSBhYm92ZSByZXR1cm5zIHRydWUsIGAudmFsdWVgIG1lbWJlciBwb2ludHMgYXQgYSBzdHJpbmcKLXZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoZSBwYXRoLgotCi0KLVF1ZXJ5aW5nIFNwZWNpZmljIEF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotKiBQcmVwYXJlIGBzdHJ1Y3QgYXR0cl9jaGVja2AgdXNpbmcgYXR0cl9jaGVja19pbml0bCgpCi0gIGZ1bmN0aW9uLCBlbnVtZXJhdGluZyB0aGUgbmFtZXMgb2YgYXR0cmlidXRlcyB3aG9zZSB2YWx1ZXMgeW91IGFyZQotICBpbnRlcmVzdGVkIGluLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUxMIHBvaW50ZXIuICBBbHRlcm5hdGl2ZWx5LCBhbgotICBlbXB0eSBgc3RydWN0IGF0dHJfY2hlY2tgIGNhbiBiZSBwcmVwYXJlZCBieSBjYWxsaW5nCi0gIGBhdHRyX2NoZWNrX2FsbG9jKClgIGZ1bmN0aW9uIGFuZCB0aGVuIGF0dHJpYnV0ZXMgeW91IHdhbnQgdG8KLSAgYXNrIGFib3V0IGNhbiBiZSBhZGRlZCB0byBpdCB3aXRoIGBhdHRyX2NoZWNrX2FwcGVuZCgpYAotICBmdW5jdGlvbi4KLQotKiBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB0byBjaGVjayB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHBhdGguCi0KLSogSW5zcGVjdCBgYXR0cl9jaGVja2Agc3RydWN0dXJlIHRvIHNlZSBob3cgZWFjaCBvZiB0aGUKLSAgYXR0cmlidXRlIGluIHRoZSBhcnJheSBpcyBkZWZpbmVkIGZvciB0aGUgcGF0aC4KLQotCi1FeGFtcGxlCi0tLS0tLS0tCi0KLVRvIHNlZSBob3cgYXR0cmlidXRlcyAiY3JsZiIgYW5kICJpZGVudCIgYXJlIHNldCBmb3IgZGlmZmVyZW50IHBhdGhzLgotCi0uIFByZXBhcmUgYSBgc3RydWN0IGF0dHJfY2hlY2tgIHdpdGggdHdvIGVsZW1lbnRzIChiZWNhdXNlCi0gIHdlIGFyZSBjaGVja2luZyB0d28gYXR0cmlidXRlcyk6Ci0KLS0tLS0tLS0tLS0tLQotc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKLXN0YXRpYyB2b2lkIHNldHVwX2NoZWNrKHZvaWQpCi17Ci0JaWYgKGNoZWNrKQotCQlyZXR1cm47IC8qIGFscmVhZHkgZG9uZSAqLwotCWNoZWNrID0gYXR0cl9jaGVja19pbml0bCgiY3JsZiIsICJpZGVudCIsIE5VTEwpOwotfQotLS0tLS0tLS0tLS0tCi0KLS4gQ2FsbCBgZ2l0X2NoZWNrX2F0dHIoKWAgd2l0aCB0aGUgcHJlcGFyZWQgYHN0cnVjdCBhdHRyX2NoZWNrYDoKLQotLS0tLS0tLS0tLS0tCi0JY29uc3QgY2hhciAqcGF0aDsKLQotCXNldHVwX2NoZWNrKCk7Ci0JZ2l0X2NoZWNrX2F0dHIocGF0aCwgY2hlY2spOwotLS0tLS0tLS0tLS0tCi0KLS4gQWN0IG9uIGAudmFsdWVgIG1lbWJlciBvZiB0aGUgcmVzdWx0LCBsZWZ0IGluIGBjaGVjay0+aXRlbXNbXWA6Ci0KLS0tLS0tLS0tLS0tLQotCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPml0ZW1zWzBdLnZhbHVlOwotCi0JaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBTZXQsIGJ5IGxpc3Rpbmcgb25seSB0aGUgbmFtZSBvZiB0aGUKLQkJYXR0cmlidXRlIGluIHRoZSBnaXRhdHRyaWJ1dGVzIGZpbGUgZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBVbnNldCwgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUKLQkJYXR0cmlidXRlIHByZWZpeGVkIHdpdGggYSBkYXNoIC0gZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBuZWl0aGVyIHNldCBub3IgdW5zZXQgZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImlucHV0IikpIHsKLQkJSWYgbm9uZSBvZiBBVFRSX1RSVUUoKSwgQVRUUl9GQUxTRSgpLCBvciBBVFRSX1VOU0VUKCkgaXMKLQkJdHJ1ZSwgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHNldCBpbiB0aGUgZ2l0YXR0cmlidXRlcwotCQlmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgotCX0gZWxzZSBpZiAoLi4uIG90aGVyIGNoZWNrIHVzaW5nIHZhbHVlIGFzIHN0cmluZyAuLi4pIHsKLQkJLi4uCi0JfQotLS0tLS0tLS0tLS0tCi0KLVRvIHNlZSBob3cgYXR0cmlidXRlcyBpbiBhcmd2W10gYXJlIHNldCBmb3IgZGlmZmVyZW50IHBhdGhzLCBvbmx5Ci10aGUgZmlyc3Qgc3RlcCBpbiB0aGUgYWJvdmUgd291bGQgYmUgZGlmZmVyZW50LgotCi0tLS0tLS0tLS0tLS0KLXN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7Ci1zdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKLXsKLQljaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKLQl3aGlsZSAoKmFyZ3YpIHsKLQkJc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOwotCQlhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7Ci0JCWFyZ3YrKzsKLQl9Ci19Ci0tLS0tLS0tLS0tLS0KLQotCi1RdWVyeWluZyBBbGwgQXR0cmlidXRlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKLQotKiBQcmVwYXJlIGFuIGVtcHR5IGBhdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgYnkgY2FsbGluZwotICBgYXR0cl9jaGVja19hbGxvYygpYC4KLQotKiBDYWxsIGBnaXRfYWxsX2F0dHJzKClgLCB3aGljaCBwb3B1bGF0ZXMgdGhlIGBhdHRyX2NoZWNrYAotICB3aXRoIHRoZSBhdHRyaWJ1dGVzIGF0dGFjaGVkIHRvIHRoZSBwYXRoLgotCi0qIEl0ZXJhdGUgb3ZlciB0aGUgYGF0dHJfY2hlY2suaXRlbXNbXWAgYXJyYXkgdG8gZXhhbWluZQotICB0aGUgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuICBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gIGRlc2NyaWJlZCBieSBhbiBgYXR0cl9jaGVjay5pdGVtc1tdYCBvYmplY3QgY2FuIGJlIHJldHJpZXZlZCB2aWEKLSAgYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gIChQbGVhc2Ugbm90ZSB0aGF0IG5vIGl0ZW1zCi0gIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuCi0gIGZhbHNlIGZvciBhbGwgcmV0dXJuZWQgYGF0dHJfY2hlY2suaXRlbXNbXWAgb2JqZWN0cy4pCi0KLSogRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWNjODkuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdyZXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1ncmVwIEFQSQotPT09PT09PT0KLQotVGFsayBhYm91dCA8Z3JlcC5oPiwgdGhpbmdzIGxpa2U6Ci0KLSogZ3JlcF9idWZmZXIoKQotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZDE3MDcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLWhpc3RvcnkgZ3JhcGggQVBJCi09PT09PT09PT09PT09PT09PQotCi1UaGUgZ3JhcGggQVBJIGlzIHVzZWQgdG8gZHJhdyBhIHRleHQtYmFzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1pdAotaGlzdG9yeS4gIFRoZSBBUEkgZ2VuZXJhdGVzIHRoZSBncmFwaCBpbiBhIGxpbmUtYnktbGluZSBmYXNoaW9uLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1Db3JlIGZ1bmN0aW9uczoKLQotKiBgZ3JhcGhfaW5pdCgpYCBjcmVhdGVzIGEgbmV3IGBzdHJ1Y3QgZ2l0X2dyYXBoYAotCi0qIGBncmFwaF91cGRhdGUoKWAgbW92ZXMgdGhlIGdyYXBoIHRvIGEgbmV3IGNvbW1pdC4KLQotKiBgZ3JhcGhfbmV4dF9saW5lKClgIG91dHB1dHMgdGhlIG5leHQgbGluZSBvZiB0aGUgZ3JhcGggaW50byBhIHN0cmJ1Zi4gIEl0Ci0gIGRvZXMgbm90IGFkZCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCi0KLSogYGdyYXBoX3BhZGRpbmdfbGluZSgpYCBvdXRwdXRzIGEgbGluZSBvZiB2ZXJ0aWNhbCBwYWRkaW5nIGluIHRoZSBncmFwaC4gIEl0Ci0gIGlzIHNpbWlsYXIgdG8gYGdyYXBoX25leHRfbGluZSgpYCwgYnV0IGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgcHJpbnQgdGhlIGxpbmUKLSAgY29udGFpbmluZyB0aGUgY3VycmVudCBjb21taXQuICBXaGVyZSBgZ3JhcGhfbmV4dF9saW5lKClgIHdvdWxkIHByaW50IHRoZQotICBjb21taXQgbGluZSBuZXh0LCBgZ3JhcGhfcGFkZGluZ19saW5lKClgIHByaW50cyBhIGxpbmUgdGhhdCBzaW1wbHkgZXh0ZW5kcwotICBhbGwgYnJhbmNoIGxpbmVzIGRvd253YXJkcyBvbmUgcm93LCBsZWF2aW5nIHRoZWlyIHBvc2l0aW9ucyB1bmNoYW5nZWQuCi0KLSogYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCBkZXRlcm1pbmVzIGlmIHRoZSBncmFwaCBoYXMgb3V0cHV0IGFsbCBsaW5lcwotICBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGNvbW1pdC4gIElmIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIGJlZm9yZSBhbGwKLSAgbGluZXMgZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBoYXZlIGJlZW4gcHJpbnRlZCwgdGhlIG5leHQgY2FsbCB0bwotICBgZ3JhcGhfbmV4dF9saW5lKClgIHdpbGwgb3V0cHV0IGFuIGVsbGlwc2lzLCB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZgotICB0aGUgZ3JhcGggd2FzIG9taXR0ZWQuCi0KLVRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGFyb3VuZCBgZ3JhcGhfbmV4dF9saW5lKClgIGFuZAotYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYC4gIFRoZXkgYWx3YXlzIHByaW50IHRoZSBvdXRwdXQgdG8gc3Rkb3V0LgotVGhleSBjYW4gYWxsIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBncmFwaCBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSBubyBncmFwaAotb3V0cHV0IHdpbGwgYmUgcHJpbnRlZC4KLQotKiBgZ3JhcGhfc2hvd19jb21taXQoKWAgY2FsbHMgYGdyYXBoX25leHRfbGluZSgpYCBhbmQKLSAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCB1bnRpbCBvbmUgb2YgdGhlbSByZXR1cm4gbm9uLXplcm8uICBUaGlzIHByaW50cwotICBhbGwgZ3JhcGggbGluZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhpcyBjb21taXQuCi0gIE91dHB1dCBpcyBwcmludGVkIHRvIHN0ZG91dC4gIFRoZSBsYXN0IGxpbmUgcHJpbnRlZCBkb2VzIG5vdCBjb250YWluIGEKLSAgdGVybWluYXRpbmcgbmV3bGluZS4KLQotKiBgZ3JhcGhfc2hvd19vbmVsaW5lKClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgYW5kIHByaW50cyB0aGUgcmVzdWx0IHRvCi0gIHN0ZG91dC4gIFRoZSBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCi0KLSogYGdyYXBoX3Nob3dfcGFkZGluZygpYCBjYWxscyBgZ3JhcGhfcGFkZGluZ19saW5lKClgIGFuZCBwcmludHMgdGhlIHJlc3VsdCB0bwotICBzdGRvdXQuICBUaGUgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLgotCi0qIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBjYWxscyBgZ3JhcGhfbmV4dF9saW5lKClgIHVudGlsCi0gIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgcmV0dXJucyBub24temVyby4gIE91dHB1dCBpcyBwcmludGVkIHRvIHN0ZG91dC4KLSAgVGhlIGxhc3QgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLiAgUmV0dXJucyAxIGlmCi0gIG91dHB1dCB3YXMgcHJpbnRlZCwgYW5kIDAgaWYgbm8gb3V0cHV0IHdhcyBuZWNlc3NhcnkuCi0KLSogYGdyYXBoX3Nob3dfc3RyYnVmKClgIHByaW50cyB0aGUgc3BlY2lmaWVkIHN0cmJ1ZiB0byBzdGRvdXQsIHByZWZpeGluZyBhbGwKLSAgbGluZXMgYnV0IHRoZSBmaXJzdCB3aXRoIGEgZ3JhcGggbGluZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCi0gIGVuc3VyaW5nIGdyYXBoIG91dHB1dCBmb3IgdGhlIGZpcnN0IGxpbmUgaGFzIGFscmVhZHkgYmVlbiBwcmludGVkIHRvIHN0ZG91dC4KLSAgKFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBgZ3JhcGhfc2hvd19jb21taXQoKWAgb3IgYGdyYXBoX3Nob3dfb25lbGluZSgpYC4pICBJZgotICBhIE5VTEwgZ3JhcGggaXMgc3VwcGxpZWQsIHRoZSBzdHJidWYgaXMgcHJpbnRlZCBhcy1pcy4KLQotKiBgZ3JhcGhfc2hvd19jb21taXRfbXNnKClgIGlzIHNpbWlsYXIgdG8gYGdyYXBoX3Nob3dfc3RyYnVmKClgLCBidXQgaXQgYWxzbwotICBwcmludHMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGgsIGlmIG1vcmUgbGluZXMgYXJlIG5lZWRlZCBhZnRlciB0aGUgc3RyYnVmCi0gIGVuZHMuICBJdCBpcyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBjYWxsaW5nIGBncmFwaF9zaG93X3N0cmJ1ZigpYCBmb2xsb3dlZCBieQotICBgZ3JhcGhfc2hvd19yZW1haW5kZXIoKWAgc2luY2UgaXQgcHJvcGVybHkgaGFuZGxlcyBidWZmZXJzIHRoYXQgZG8gbm90IGVuZCBpbgotICBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBUaGUgb3V0cHV0IHByaW50ZWQgYnkgYGdyYXBoX3Nob3dfY29tbWl0X21zZygpYCB3aWxsCi0gIGVuZCBpbiBhIG5ld2xpbmUgaWYgYW5kIG9ubHkgaWYgdGhlIHN0cmJ1ZiBlbmRzIGluIGEgbmV3bGluZS4KLQotRGF0YSBzdHJ1Y3R1cmUKLS0tLS0tLS0tLS0tLS0tCi1gc3RydWN0IGdpdF9ncmFwaGAgaXMgYW4gb3BhcXVlIGRhdGEgdHlwZSB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGdyYXBoCi1zdGF0ZS4KLQotQ2FsbGluZyBzZXF1ZW5jZQotLS0tLS0tLS0tLS0tLS0tLQotCi0qIENyZWF0ZSBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCBieSBjYWxsaW5nIGBncmFwaF9pbml0KClgLiAgV2hlbiB1c2luZyB0aGUKLSAgcmV2aXNpb24gd2Fsa2luZyBBUEksIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IGBzZXR1cF9yZXZpc2lvbnMoKWAgaWYKLSAgdGhlICctLWdyYXBoJyBvcHRpb24gaXMgc3VwcGxpZWQuCi0KLSogVXNlIHRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSB0byB3YWxrIHRocm91Z2ggYSBncm91cCBvZiBjb250aWd1b3VzIGNvbW1pdHMuCi0gIFRoZSBgZ2V0X3JldmlzaW9uKClgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgY2FsbHMgYGdyYXBoX3VwZGF0ZSgpYCBlYWNoIHRpbWUKLSAgaXQgaXMgaW52b2tlZC4KLQotKiBGb3IgZWFjaCBjb21taXQsIGNhbGwgYGdyYXBoX25leHRfbGluZSgpYCByZXBlYXRlZGx5LCB1bnRpbAotICBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIHJldHVybnMgbm9uLXplcm8uICBFYWNoIGNhbGwgdG8KLSAgYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhIHNpbmdsZSBsaW5lIG9mIHRoZSBncmFwaC4gIFRoZSByZXN1bHRpbmcKLSAgbGluZXMgd2lsbCBub3QgY29udGFpbiBhbnkgbmV3bGluZXMuICBgZ3JhcGhfbmV4dF9saW5lKClgIHJldHVybnMgMSBpZiB0aGUKLSAgcmVzdWx0aW5nIGxpbmUgY29udGFpbnMgdGhlIGN1cnJlbnQgY29tbWl0LCBvciAwIGlmIHRoaXMgaXMgbWVyZWx5IGEgbGluZQotICBuZWVkZWQgdG8gYWRqdXN0IHRoZSBncmFwaCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgY29tbWl0LiAgVGhpcyByZXR1cm4KLSAgdmFsdWUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHByaW50IHRoZSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbgotICBhbG9uZ3NpZGUgdGhlIGdyYXBoIG91dHB1dC4KLQotTGltaXRhdGlvbnMKLS0tLS0tLS0tLS0tCi0KLSogYGdyYXBoX3VwZGF0ZSgpYCBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIuICBJdCBzaG91bGQKLSAgbm90IGJlIGNhbGxlZCBvbiBhIGNvbW1pdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQgd2l0aCBhbiBhbmNlc3RvciBvZgotICB0aGF0IGNvbW1pdCwgb3IgdGhlIGdyYXBoIG91dHB1dCB3aWxsIGJlIGluY29ycmVjdC4KLQotKiBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIG9uIGEgY29udGlndW91cyBncm91cCBvZiBjb21taXRzLiAgSWYKLSAgYGdyYXBoX3VwZGF0ZSgpYCBpcyBjYWxsZWQgb24gYSBwYXJ0aWN1bGFyIGNvbW1pdCwgaXQgc2hvdWxkIGxhdGVyIGJlIGNhbGxlZAotICBvbiBhbGwgcGFyZW50cyBvZiB0aGF0IGNvbW1pdC4gIFBhcmVudHMgbXVzdCBub3QgYmUgc2tpcHBlZCwgb3IgdGhlIGdyYXBoCi0gIG91dHB1dCB3aWxsIGFwcGVhciBpbmNvcnJlY3QuCi0rCi1gZ3JhcGhfdXBkYXRlKClgIG1heSBiZSB1c2VkIG9uIGEgcHJ1bmVkIHNldCBvZiBjb21taXRzIG9ubHkgaWYgdGhlIHBhcmVudCBsaXN0Ci1oYXMgYmVlbiByZXdyaXR0ZW4gc28gYXMgdG8gaW5jbHVkZSBvbmx5IGFuY2VzdG9ycyBmcm9tIHRoZSBwcnVuZWQgc2V0LgotCi0qIFRoZSBncmFwaCBBUEkgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcmV2ZXJzZSBjb21taXQgb3JkZXJpbmcuICBJbgotICBvcmRlciB0byBpbXBsZW1lbnQgcmV2ZXJzZSBvcmRlcmluZywgdGhlIGdyYXBoaW5nIEFQSSBuZWVkcyBhbgotICAoZWZmaWNpZW50KSBtZWNoYW5pc20gdG8gZmluZCB0aGUgY2hpbGRyZW4gb2YgYSBjb21taXQuCi0KLVNhbXBsZSB1c2FnZQotLS0tLS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLQotc3RydWN0IGNvbW1pdCAqY29tbWl0Owotc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBncmFwaF9pbml0KG9wdHMpOwotCi13aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihvcHRzKSkgIT0gTlVMTCkgewotCXdoaWxlICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKLQl7Ci0JCXN0cnVjdCBzdHJidWYgc2I7Ci0JCWludCBpc19jb21taXRfbGluZTsKLQotCQlzdHJidWZfaW5pdCgmc2IsIDApOwotCQlpc19jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJnNiKTsKLQkJZnB1dHMoc2IuYnVmLCBzdGRvdXQpOwotCi0JCWlmIChpc19jb21taXRfbGluZSkKLQkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOwotCQllbHNlCi0JCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7Ci0JfQotfQotLS0tLS0tLS0tLS0tCi0KLVNhbXBsZSBvdXRwdXQKLS0tLS0tLS0tLS0tLS0KLQotVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JhcGggQVBJLiAgVGhpcyBvdXRwdXQgZG9lcwotbm90IGluY2x1ZGUgYW55IGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uLS1jYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKLW91dHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiwgaWYgZGVzaXJlZC4KLQotLS0tLS0tLS0tLS0tCi0qCi0qCi0qCi18XAotKiB8Ci18IHwgKgotfCBcIFwKLXwgIFwgXAotKi0uIFwgXAotfFwgXCBcIFwKLXwgfCAqIHwgfAotfCB8IHwgfCB8ICoKLXwgfCB8IHwgfCAqCi18IHwgfCB8IHwgKgotfCB8IHwgfCB8IHxcCi18IHwgfCB8IHwgfCAqCi18ICogfCB8IHwgfCB8Ci18IHwgfCB8IHwgKiAgXAotfCB8IHwgfCB8IHxcICB8Ci18IHwgfCB8ICogfCB8IHwKLXwgfCB8IHwgKiB8IHwgfAotKiB8IHwgfCB8IHwgfCB8Ci18IHwvIC8gLyAvIC8gLwotfC98IC8gLyAvIC8gLwotKiB8IHwgfCB8IHwgfAotfC8gLyAvIC8gLyAvCi0qIHwgfCB8IHwgfAotfCB8IHwgfCB8ICoKLXwgfCB8IHwgfC8KLXwgfCB8IHwgKgotLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dAppbmRleCA5ZGMxYmVkLi40ODdkNGQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKQEAgLTI4LDc3ICsyOCw5IEBACiAKICogYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYAogCi1UaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKLXRoZSBvcGVyYXRpb24gb2YgYSBsb3ctbGV2ZWwgKHNpbmdsZSBmaWxlKSBtZXJnZS4gIFNvbWUgb3B0aW9uczoKLQotYHZpcnR1YWxfYW5jZXN0b3JgOjoKLQlCZWhhdmUgYXMgdGhvdWdoIHRoaXMgd2VyZSBwYXJ0IG9mIGEgbWVyZ2UgYmV0d2VlbiBjb21tb24KLQlhbmNlc3RvcnMgaW4gYSByZWN1cnNpdmUgbWVyZ2UuCi0JSWYgYSBoZWxwZXIgcHJvZ3JhbSBpcyBzcGVjaWZpZWQgYnkgdGhlCi0JYFttZXJnZSAiPGRyaXZlcj4iXSByZWN1cnNpdmVgIGNvbmZpZ3VyYXRpb24sIGl0IHdpbGwKLQliZSB1c2VkIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KLQotYHZhcmlhbnRgOjoKLQlSZXNvbHZlIGxvY2FsIGNvbmZsaWN0cyBhdXRvbWF0aWNhbGx5IGluIGZhdm9yCi0Jb2Ygb25lIHNpZGUgb3IgdGhlIG90aGVyIChhcyBpbiAnZ2l0IG1lcmdlLWZpbGUnCi0JYC0tb3Vyc2AvYC0tdGhlaXJzYC9gLS11bmlvbmApLiAgQ2FuIGJlIGAwYCwKLQlgWERMX01FUkdFX0ZBVk9SX09VUlNgLCBgWERMX01FUkdFX0ZBVk9SX1RIRUlSU2AsIG9yCi0JYFhETF9NRVJHRV9GQVZPUl9VTklPTmAuCi0KLWByZW5vcm1hbGl6ZWA6OgotCVJlc211ZGdlIGFuZCBjbGVhbiB0aGUgImJhc2UiLCAidGhlaXJzIiBhbmQgIm91cnMiIGZpbGVzCi0JYmVmb3JlIG1lcmdpbmcuICBVc2UgdGhpcyB3aGVuIHRoZSBtZXJnZSBpcyBsaWtlbHkgdG8gaGF2ZQotCW92ZXJsYXBwZWQgd2l0aCBhIGNoYW5nZSBpbiBzbXVkZ2UvY2xlYW4gb3IgZW5kLW9mLWxpbmUKLQlub3JtYWxpemF0aW9uIHJ1bGVzLgorQ2hlY2sgbGwtbWVyZ2UuaCBmb3IgZGV0YWlscy4KIAogTG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWBsbF9tZXJnZWA6OgotCi0JUGVyZm9ybSBhIHRocmVlLXdheSBzaW5nbGUtZmlsZSBtZXJnZSBpbiBjb3JlLiAgVGhpcyBpcwotCWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZAotCWFueSBtZXJnZSBiYWNrZW5kIHNwZWNpZmllZCBpbiBgLmdpdGF0dHJpYnV0ZXNgIG9yCi0JYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuICBSZXR1cm5zIDAgZm9yIGEKLQljbGVhbiBtZXJnZS4KLQotQ2FsbGluZyBzZXF1ZW5jZToKLQotKiBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KLSAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAotICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KLQotKiBBbGxvY2F0ZSBhbiBtbWJ1ZmZlcl90IHZhcmlhYmxlIGZvciB0aGUgcmVzdWx0LgotCi0qIEFsbG9jYXRlIGFuZCBmaWxsIHZhcmlhYmxlcyB3aXRoIHRoZSBmaWxlJ3Mgb3JpZ2luYWwgY29udGVudAotICBhbmQgdHdvIG1vZGlmaWVkIHZlcnNpb25zICh1c2luZyBgcmVhZF9tbWZpbGVgLCBmb3IgZXhhbXBsZSkuCi0KLSogQ2FsbCBgbGxfbWVyZ2UoKWAuCi0KLSogUmVhZCB0aGUgbWVyZ2VkIGNvbnRlbnQgZnJvbSBgcmVzdWx0X2J1Zi5wdHJgIGFuZCBgcmVzdWx0X2J1Zi5zaXplYC4KLQotKiBSZWxlYXNlIGJ1ZmZlcnMgd2hlbiBmaW5pc2hlZC4gIEEgc2ltcGxlCi0gIGBmcmVlKGFuY2VzdG9yLnB0cik7IGZyZWUob3Vycy5wdHIpOyBmcmVlKHRoZWlycy5wdHIpOwotICBmcmVlKHJlc3VsdF9idWYucHRyKTtgIHdpbGwgZG8uCi0KLUlmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKLW5vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKLXRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKLWFuZCBgPj4+Pj4+PmAuCi0KLVRoZSBgYW5jZXN0b3JfbGFiZWxgLCBgb3VyX2xhYmVsYCwgYW5kIGB0aGVpcl9sYWJlbGAgcGFyYW1ldGVycyBhcmUKLXVzZWQgdG8gbGFiZWwgdGhlIGRpZmZlcmVudCBzaWRlcyBvZiBhIGNvbmZsaWN0IGlmIHRoZSBtZXJnZSBkcml2ZXIKLXN1cHBvcnRzIHRoaXMuCi0KLUV2ZXJ5dGhpbmcgZWxzZQotLS0tLS0tLS0tLS0tLS0tCi0KLVRhbGsgYWJvdXQgPG1lcmdlLXJlY3Vyc2l2ZS5oPiBhbmQgbWVyZ2VfZmlsZSgpOgotCi0gLSBtZXJnZV90cmVlcygpIHRvIG1lcmdlIHdpdGggcmVuYW1lIGRldGVjdGlvbgotIC0gbWVyZ2VfcmVjdXJzaXZlKCkgZm9yIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24KLSAtIHRyeV9tZXJnZV9jb21tYW5kKCkgZm9yIG90aGVyIHN0cmF0ZWdpZXMKLSAtIGNvbmZsaWN0IGZvcm1hdAotIC0gbWVyZ2Ugb3B0aW9ucwotCi0oRGFuaWVsLCBNaWtsb3MsIFN0ZXBoYW4sIEpDKQorQ2hlY2sgbGwtbWVyZ2UuaCBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vYmplY3QtYWNjZXNzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vYmplY3QtYWNjZXNzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyOTYyMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1vYmplY3QgYWNjZXNzIEFQSQotPT09PT09PT09PT09PT09PT0KLQotVGFsayBhYm91dCA8c2hhMS1maWxlLmM+IGFuZCA8b2JqZWN0Lmg+IGZhbWlseSwgdGhpbmdzIGxpa2UKLQotKiByZWFkX3NoYTFfZmlsZSgpCi0qIHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCkKLSogaGFzX3NoYTFfZmlsZSgpCi0qIHdyaXRlX3NoYTFfZmlsZSgpCi0qIHByZXRlbmRfb2JqZWN0X2ZpbGUoKQotKiBsb29rdXBfe29iamVjdCxjb21taXQsdGFnLGJsb2IsdHJlZX0KLSogcGFyc2Vfe29iamVjdCxjb21taXQsdGFnLGJsb2IsdHJlZX0KLSogVXNlIG9mIG9iamVjdCBmbGFncwotCi0oSkMsIFNoYXduLCBEYW5pZWwsIERzY2hvLCBMaW51cykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vaWQtYXJyYXkudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9pZC1hcnJheS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzQyOGMuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9pZC1hcnJheS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi1vaWQtYXJyYXkgQVBJCi09PT09PT09PT09PT09PQotCi1UaGUgb2lkLWFycmF5IEFQSSBwcm92aWRlcyBzdG9yYWdlIGFuZCBtYW5pcHVsYXRpb24gb2Ygc2V0cyBvZiBvYmplY3QKLWlkZW50aWZpZXJzLiBUaGUgZW1waGFzaXMgaXMgb24gc3RvcmFnZSBhbmQgcHJvY2Vzc2luZyBlZmZpY2llbmN5LAotbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGxhcmdlIGxpc3RzLiBOb3RlIHRoYXQgdGhlIG9yZGVyaW5nIG9mIGl0ZW1zIGlzCi1ub3QgcHJlc2VydmVkIG92ZXIgc29tZSBvcGVyYXRpb25zLgotCi1EYXRhIFN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1gc3RydWN0IG9pZF9hcnJheWA6OgotCi0JQSBzaW5nbGUgYXJyYXkgb2Ygb2JqZWN0IElEcy4gVGhpcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYnkKLQlhc3NpZ25tZW50IGZyb20gYE9JRF9BUlJBWV9JTklUYC4gIFRoZSBgb2lkYCBtZW1iZXIgY29udGFpbnMKLQl0aGUgYWN0dWFsIGRhdGEuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCi0JdGhlIHNldC4gIFRoZSBgYWxsb2NgIGFuZCBgc29ydGVkYCBtZW1iZXJzIGFyZSB1c2VkIGludGVybmFsbHksCi0JYW5kIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IEFQSSBjYWxsZXJzLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gb2lkX2FycmF5X2FwcGVuZGA6OgotCUFkZCBhbiBpdGVtIHRvIHRoZSBzZXQuIFRoZSBvYmplY3QgSUQgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZgotCXRoZSBhcnJheSAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcwotCW9yZGVyaW5nKS4KLQotYG9pZF9hcnJheV9sb29rdXBgOjoKLQlQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgb2JqZWN0IElELgotCUlmIGZvdW5kLCByZXR1cm5zIHRoZSBvZmZzZXQgKGluIG51bWJlciBvZiBlbGVtZW50cykgb2YgdGhlCi0Jb2JqZWN0IElELiBJZiBub3QgZm91bmQsIHJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyLiBJZiB0aGUgYXJyYXkKLQlpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KLQotYG9pZF9hcnJheV9jbGVhcmA6OgotCUZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgdG8gdGhlCi0JaW5pdGlhbCwgZW1wdHkgc3RhdGUuCi0KLWBvaWRfYXJyYXlfZm9yX2VhY2hgOjoKLQlJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0LCBleGVjdXRpbmcgdGhlIGNhbGxiYWNrCi0JZnVuY3Rpb24gZm9yIGVhY2ggb25lLiBEb2VzIG5vdCBzb3J0IHRoZSBsaXN0LCBzbyBhbnkgY3VzdG9tCi0JaGFzaCBvcmRlciBpcyByZXRhaW5lZC4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBub24temVybwotCXZhbHVlLCB0aGUgaXRlcmF0aW9uIGVuZHMgaW1tZWRpYXRlbHkgYW5kIHRoZSBjYWxsYmFjaydzCi0JcmV0dXJuIGlzIHByb3BhZ2F0ZWQ7IG90aGVyd2lzZSwgMCBpcyByZXR1cm5lZC4KLQotYG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWVgOjoKLQlJdGVyYXRlIG92ZXIgZWFjaCB1bmlxdWUgZWxlbWVudCBvZiB0aGUgbGlzdCBpbiBzb3J0ZWQgb3JkZXIsCi0JYnV0IG90aGVyd2lzZSBiZWhhdmUgbGlrZSBgb2lkX2FycmF5X2Zvcl9lYWNoYC4gSWYgdGhlIGFycmF5Ci0JaXMgbm90IHNvcnRlZCwgdGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcKLQlpdC4KLQotYG9pZF9hcnJheV9maWx0ZXJgOjoKLQlBcHBseSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYHdhbnRgIHRvIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5LAotCXJldGFpbmluZyBvbmx5IHRoZSBlbnRyaWVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLgotCVByZXNlcnZlIHRoZSBvcmRlciBvZiB0aGUgZW50cmllcyB0aGF0IGFyZSByZXRhaW5lZC4KLQotRXhhbXBsZXMKLS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnQgcHJpbnRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAotCQkgICAgdm9pZCAqZGF0YSkKLXsKLQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOwotCXJldHVybiAwOyAvKiBhbHdheXMgY29udGludWUgKi8KLX0KLQotdm9pZCBzb21lX2Z1bmModm9pZCkKLXsKLQlzdHJ1Y3Qgc2hhMV9hcnJheSBoYXNoZXMgPSBPSURfQVJSQVlfSU5JVDsKLQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKLQotCS8qIFJlYWQgb2JqZWN0cyBpbnRvIG91ciBzZXQgKi8KLQl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpCi0JCW9pZF9hcnJheV9hcHBlbmQoJmhhc2hlcywgJm9pZCk7Ci0KLQkvKiBDaGVjayBpZiBzb21lIG9iamVjdHMgYXJlIGluIG91ciBzZXQgKi8KLQl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpIHsKLQkJaWYgKG9pZF9hcnJheV9sb29rdXAoJmhhc2hlcywgJm9pZCkgPj0gMCkKLQkJCXByaW50ZigiaXQncyBpbiB0aGVyZSFcbiIpOwotCi0JLyoKLQkgKiBQcmludCB0aGUgdW5pcXVlIHNldCBvZiBvYmplY3RzLiBXZSBjb3VsZCBhbHNvIGhhdmUKLQkgKiBhdm9pZGVkIGFkZGluZyBkdXBsaWNhdGUgb2JqZWN0cyBpbiB0aGUgZmlyc3QgcGxhY2UsCi0JICogYnV0IHdlIHdvdWxkIGVuZCB1cCByZS1zb3J0aW5nIHRoZSBhcnJheSByZXBlYXRlZGx5LgotCSAqIEluc3RlYWQsIHRoaXMgd2lsbCBzb3J0IG9uY2UgYW5kIHRoZW4gc2tpcCBkdXBsaWNhdGVzCi0JICogaW4gbGluZWFyIHRpbWUuCi0JICovCi0Jb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmaGFzaGVzLCBwcmludF9jYWxsYmFjaywgTlVMTCk7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1xdW90ZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTFiY2UuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXF1b3RlIEFQSQotPT09PT09PT09Ci0KLVRhbGsgYWJvdXQgPHF1b3RlLmg+LCB0aGluZ3MgbGlrZQotCi0qIHNxX3F1b3RlIGFuZCB1bnF1b3RlCi0qIGNfc3R5bGUgcXVvdGUgYW5kIHVucXVvdGUKLSogcXVvdGluZyBmb3IgZm9yZWlnbiBsYW5ndWFnZXMKLQotKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDlkMDE5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZWYtaXRlcmF0aW9uLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLXJlZiBpdGVyYXRpb24gQVBJCi09PT09PT09PT09PT09PT09PQotCi0KLUl0ZXJhdGlvbiBvZiByZWZzIGlzIGRvbmUgYnkgdXNpbmcgYW4gaXRlcmF0ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGNhbGwgYQotY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV2ZXJ5IHJlZi4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0aGlzCi1zaWduYXR1cmU6Ci0KLQlpbnQgaGFuZGxlX29uZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAotCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKTsKLQotVGhlcmUgYXJlIGRpZmZlcmVudCBraW5kcyBvZiBpdGVyYXRlIGZ1bmN0aW9ucyB3aGljaCBhbGwgdGFrZSBhCi1jYWxsYmFjayBvZiB0aGlzIHR5cGUuIFRoZSBjYWxsYmFjayBpcyB0aGVuIGNhbGxlZCBmb3IgZWFjaCBmb3VuZCByZWYKLXVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIG5vbnplcm8uIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0aGVuIGFsc28KLXJldHVybmVkIGJ5IHRoZSBpdGVyYXRlIGZ1bmN0aW9uLgotCi1JdGVyYXRpb24gZnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSogYGhlYWRfcmVmKClgIGp1c3QgaXRlcmF0ZXMgdGhlIGhlYWQgcmVmLgotCi0qIGBmb3JfZWFjaF9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMuCi0KLSogYGZvcl9lYWNoX3JlZl9pbigpYCBpdGVyYXRlcyBhbGwgcmVmcyB3aGljaCBoYXZlIGEgZGVmaW5lZCBwcmVmaXggYW5kCi0gIHN0cmlwcyB0aGF0IHByZWZpeCBmcm9tIHRoZSBwYXNzZWQgdmFyaWFibGUgcmVmbmFtZS4KLQotKiBgZm9yX2VhY2hfdGFnX3JlZigpYCwgYGZvcl9lYWNoX2JyYW5jaF9yZWYoKWAsIGBmb3JfZWFjaF9yZW1vdGVfcmVmKClgLAotICBgZm9yX2VhY2hfcmVwbGFjZV9yZWYoKWAgaXRlcmF0ZSByZWZzIGZyb20gdGhlIHJlc3BlY3RpdmUgYXJlYS4KLQotKiBgZm9yX2VhY2hfZ2xvYl9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGdsb2IKLSAgcGF0dGVybi4KLQotKiBgZm9yX2VhY2hfZ2xvYl9yZWZfaW4oKWAgdGhlIHByZXZpb3VzIGFuZCBgZm9yX2VhY2hfcmVmX2luKClgIGNvbWJpbmVkLgotCi0qIFVzZSBgcmVmc19gIEFQSSBmb3IgYWNjZXNzaW5nIHN1Ym1vZHVsZXMuIFRoZSBzdWJtb2R1bGUgcmVmIHN0b3JlIGNvdWxkCi0gIGJlIG9idGFpbmVkIHdpdGggYGdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKClgLgotCi0qIGBmb3JfZWFjaF9yYXdyZWYoKWAgY2FuIGJlIHVzZWQgdG8gbGVhcm4gYWJvdXQgYnJva2VuIHJlZiBhbmQgc3ltcmVmLgotCi0qIGBmb3JfZWFjaF9yZWZsb2coKWAgaXRlcmF0ZXMgZWFjaCByZWZsb2cgZmlsZS4KLQotU3VibW9kdWxlcwotLS0tLS0tLS0tLQotCi1JZiB5b3Ugd2FudCB0byBpdGVyYXRlIHRoZSByZWZzIG9mIGEgc3VibW9kdWxlIHlvdSBmaXJzdCBuZWVkIHRvIGFkZCB0aGUKLXN1Ym1vZHVsZXMgb2JqZWN0IGRhdGFiYXNlLiBZb3UgY2FuIGRvIHRoaXMgYnkgYSBjb2RlLXNuaXBwZXQgbGlrZQotdGhpczoKLQotCWNvbnN0IGNoYXIgKnBhdGggPSAicGF0aC90by9zdWJtb2R1bGUiCi0JaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpKQotCQlkaWUoIkVycm9yIHN1Ym1vZHVsZSAnJXMnIG5vdCBwb3B1bGF0ZWQuIiwgcGF0aCk7Ci0KLWBhZGRfc3VibW9kdWxlX29kYigpYCB3aWxsIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIElmIHlvdQotZG8gbm90IGRvIHRoaXMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGZvciBlYWNoIHJlZiB0aGF0IGl0IGRvZXMgbm90IHBvaW50Ci10byBhIHZhbGlkIG9iamVjdC4KLQotTm90ZTogQXMgYSBzaWRlLWVmZmVjdCBvZiB0aGlzIHlvdSBjYW5ub3Qgc2FmZWx5IGFzc3VtZSB0aGF0IGFsbAotb2JqZWN0cyB5b3UgbG9va3VwIGFyZSBhdmFpbGFibGUgaW4gc3VwZXJwcm9qZWN0LiBBbGwgc3VibW9kdWxlIG9iamVjdHMKLXdpbGwgYmUgYXZhaWxhYmxlIHRoZSBzYW1lIHdheSBhcyB0aGUgc3VwZXJwcm9qZWN0cyBvYmplY3RzLgotCi1FeGFtcGxlOgotLS0tLS0tLS0KLQotLS0tLQotc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCi17Ci0Jc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKLQlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS4uLgotCi0Jc3RydWN0IHN0cmJ1ZiBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKLQlmb3JfZWFjaF9yZW1vdGVfcmVmKGhhbmRsZV9yZW1vdGVfcmVmLCAmb3V0cHV0KTsKLQlwcmludGYoIiVzIiwgb3V0cHV0LmJ1Zik7Ci0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTA5NDFiLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLVJlbW90ZXMgY29uZmlndXJhdGlvbiBBUEkKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIEFQSSBpbiByZW1vdGUuaCBnaXZlcyBhY2Nlc3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0bwotcmVtb3Rlcy4gSXQgaGFuZGxlcyBhbGwgdGhyZWUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIGhpc3RvcmljYWxseQotYW5kIGN1cnJlbnRseSB1c2VkIGJ5IEdpdCwgYW5kIHByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHVuaWZvcm0KLWZhc2hpb24uIE5vdGUgdGhhdCB0aGUgY29kZSBhbHNvIGhhbmRsZXMgcGxhaW4gVVJMcyB3aXRob3V0IGFueQotY29uZmlndXJhdGlvbiwgZ2l2aW5nIHRoZW0ganVzdCB0aGUgZGVmYXVsdCBpbmZvcm1hdGlvbi4KLQotc3RydWN0IHJlbW90ZQotLS0tLS0tLS0tLS0tLQotCi1gbmFtZWA6OgotCi0JVGhlIHVzZXIncyBuaWNrbmFtZSBmb3IgdGhlIHJlbW90ZQotCi1gdXJsYDo6Ci0KLQlBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHVybF9uciBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUKLQotYHB1c2h1cmxgOjoKLQotCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQotCi1gcHVzaGA6OgotCi0JIEFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIHB1c2hpbmcsIHdpdGgKLQkgcHVzaF9yZWZzcGVjIGJlaW5nIHRoZSBsaXRlcmFsIHN0cmluZ3MsIGFuZCBwdXNoX3JlZnNwZWNfbnIKLQkgYmVpbmcgdGhlIHF1YW50aXR5LgotCi1gZmV0Y2hgOjoKLQotCUFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIGZldGNoaW5nLCB3aXRoCi0JZmV0Y2hfcmVmc3BlYyBiZWluZyB0aGUgbGl0ZXJhbCBzdHJpbmdzLCBhbmQgZmV0Y2hfcmVmc3BlY19ucgotCWJlaW5nIHRoZSBxdWFudGl0eS4KLQotYGZldGNoX3RhZ3NgOjoKLQotCVRoZSBzZXR0aW5nIGZvciB3aGV0aGVyIHRvIGZldGNoIHRhZ3MgKGFzIGEgc2VwYXJhdGUgcnVsZSBmcm9tCi0JdGhlIGNvbmZpZ3VyZWQgcmVmc3BlY3MpOyAtMSBtZWFucyBuZXZlciB0byBmZXRjaCB0YWdzLCAwCi0JbWVhbnMgdG8gYXV0by1mb2xsb3cgdGFncyBiYXNlZCBvbiB0aGUgZGVmYXVsdCBoZXVyaXN0aWMsIDEKLQltZWFucyB0byBhbHdheXMgYXV0by1mb2xsb3cgdGFncywgYW5kIDIgbWVhbnMgdG8gZmV0Y2ggYWxsCi0JdGFncy4KLQotYHJlY2VpdmVwYWNrYCwgYHVwbG9hZHBhY2tgOjoKLQotCVRoZSBjb25maWd1cmVkIGhlbHBlciBwcm9ncmFtcyB0byBydW4gb24gdGhlIHJlbW90ZSBzaWRlLCBmb3IKLQlHaXQtbmF0aXZlIHByb3RvY29scy4KLQotYGh0dHBfcHJveHlgOjoKLQotCVRoZSBwcm94eSB0byB1c2UgZm9yIGN1cmwgKGh0dHAsIGh0dHBzLCBmdHAsIGV0Yy4pIFVSTHMuCi0KLWBodHRwX3Byb3h5X2F1dGhtZXRob2RgOjoKLQotCVRoZSBtZXRob2QgdXNlZCBmb3IgYXV0aGVudGljYXRpbmcgYWdhaW5zdCBgaHR0cF9wcm94eWAuCi0KLXN0cnVjdCByZW1vdGVzIGNhbiBiZSBmb3VuZCBieSBuYW1lIHdpdGggcmVtb3RlX2dldCgpLCBhbmQgaXRlcmF0ZWQKLXRocm91Z2ggd2l0aCBmb3JfZWFjaF9yZW1vdGUoKS4gcmVtb3RlX2dldChOVUxMKSB3aWxsIHJldHVybiB0aGUKLWRlZmF1bHQgcmVtb3RlLCBnaXZlbiB0aGUgY3VycmVudCBicmFuY2ggYW5kIGNvbmZpZ3VyYXRpb24uCi0KLXN0cnVjdCByZWZzcGVjCi0tLS0tLS0tLS0tLS0tLQotCi1BIHN0cnVjdCByZWZzcGVjIGhvbGRzIHRoZSBwYXJzZWQgaW50ZXJwcmV0YXRpb24gb2YgYSByZWZzcGVjLiAgSWYgaXQKLXdpbGwgZm9yY2UgdXBkYXRlcyAoc3RhcnRzIHdpdGggYSAnKycpLCBmb3JjZSBpcyB0cnVlLiAgSWYgaXQgaXMgYQotcGF0dGVybiAoc2lkZXMgZW5kIHdpdGggJyonKSBwYXR0ZXJuIGlzIHRydWUuICBzcmMgYW5kIGRlc3QgYXJlIHRoZQotdHdvIHNpZGVzIChpbmNsdWRpbmcgJyonIGNoYXJhY3RlcnMgaWYgcHJlc2VudCk7IGlmIHRoZXJlIGlzIG9ubHkgb25lCi1zaWRlLCBpdCBpcyBzcmMsIGFuZCBkc3QgaXMgTlVMTDsgaWYgc2lkZXMgZXhpc3QgYnV0IGFyZSBlbXB0eSAoaS5lLiwKLXRoZSByZWZzcGVjIGVpdGhlciBzdGFydHMgb3IgZW5kcyB3aXRoICc6JyksIHRoZSBjb3JyZXNwb25kaW5nIHNpZGUgaXMKLSIiLgotCi1BbiBhcnJheSBvZiBzdHJpbmdzIGNhbiBiZSBwYXJzZWQgaW50byBhbiBhcnJheSBvZiBzdHJ1Y3QgcmVmc3BlY3MKLXVzaW5nIHBhcnNlX2ZldGNoX3JlZnNwZWMoKSBvciBwYXJzZV9wdXNoX3JlZnNwZWMoKS4KLQotcmVtb3RlX2ZpbmRfdHJhY2tpbmcoKSwgZ2l2ZW4gYSByZW1vdGUgYW5kIGEgc3RydWN0IHJlZnNwZWMgd2l0aAotZWl0aGVyIHNyYyBvciBkc3QgZmlsbGVkIG91dCwgd2lsbCBmaWxsIG91dCB0aGUgb3RoZXIgc3VjaCB0aGF0IHRoZQotcmVzdWx0IGlzIGluIHRoZSAiZmV0Y2giIHNwZWNpZmljYXRpb24gZm9yIHRoZSByZW1vdGUgKG5vdGUgdGhhdCB0aGlzCi1ldmFsdWF0ZXMgcGF0dGVybnMgYW5kIHJldHVybnMgYSBzaW5nbGUgcmVzdWx0KS4KLQotc3RydWN0IGJyYW5jaAotLS0tLS0tLS0tLS0tLQotCi1Ob3RlIHRoYXQgdGhpcyBtYXkgZW5kIHVwIG1vdmluZyB0byBicmFuY2guaAotCi1zdHJ1Y3QgYnJhbmNoIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGJyYW5jaC4gSXQgY2FuIGJlIGxvb2tlZAotdXAgd2l0aCBicmFuY2hfZ2V0KG5hbWUpIGZvciAicmVmcy9oZWFkcy97bmFtZX0iLCBvciB3aXRoCi1icmFuY2hfZ2V0KE5VTEwpIGZvciBIRUFELgotCi1JdCBjb250YWluczoKLQotYG5hbWVgOjoKLQotCVRoZSBzaG9ydCBuYW1lIG9mIHRoZSBicmFuY2guCi0KLWByZWZuYW1lYDo6Ci0KLQlUaGUgZnVsbCBwYXRoIGZvciB0aGUgYnJhbmNoIHJlZi4KLQotYHJlbW90ZV9uYW1lYDo6Ci0KLQlUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGxpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KLQotYG1lcmdlX25hbWVgOjoKLQotCUFuIGFycmF5IG9mIHRoZSAibWVyZ2UiIGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uLgotCi1gbWVyZ2VgOjoKLQotCUFuIGFycmF5IG9mIHRoZSBzdHJ1Y3QgcmVmc3BlY3MgdXNlZCBmb3IgdGhlIG1lcmdlIGxpbmVzLiBUaGF0Ci0JaXMsIG1lcmdlW2ldLT5kc3QgaXMgYSBsb2NhbCB0cmFja2luZyByZWYgd2hpY2ggc2hvdWxkIGJlCi0JbWVyZ2VkIGludG8gdGhpcyBicmFuY2ggYnkgZGVmYXVsdC4KLQotYG1lcmdlX25yYDo6Ci0KLQlUaGUgbnVtYmVyIG9mIG1lcmdlIGNvbmZpZ3VyYXRpb25zCi0KLWJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKCkgcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFuY2ggaGFzIG1lcmdlCi1jb25maWd1cmF0aW9uIGdpdmVuLgotCi1PdGhlciBzdHVmZgotLS0tLS0tLS0tLS0KLQotVGhlcmUgaXMgb3RoZXIgc3R1ZmYgaW4gcmVtb3RlLmggdGhhdCBpcyByZWxhdGVkLCBpbiBnZW5lcmFsLCB0byB0aGUKLXByb2Nlc3Mgb2YgaW50ZXJhY3Rpbmcgd2l0aCByZW1vdGVzLgotCi0oRGFuaWVsIEJhcmthbG93KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2Y5ZWE2Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZXZpc2lvbi13YWxraW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLXJldmlzaW9uIHdhbGtpbmcgQVBJCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgcmV2aXNpb24gd2Fsa2luZyBBUEkgb2ZmZXJzIGZ1bmN0aW9ucyB0byBidWlsZCBhIGxpc3Qgb2YgcmV2aXNpb25zCi1hbmQgdGhlbiBpdGVyYXRlIG92ZXIgdGhhdCBsaXN0LgotCi1DYWxsaW5nIHNlcXVlbmNlCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB3YWxraW5nIEFQSSBoYXMgYSBnaXZlbiBjYWxsaW5nIHNlcXVlbmNlOiBmaXJzdCB5b3UgbmVlZCB0bwotaW5pdGlhbGl6ZSBhIHJldl9pbmZvIHN0cnVjdHVyZSwgdGhlbiBhZGQgcmV2aXNpb25zIHRvIGNvbnRyb2wgd2hhdCBraW5kCi1vZiByZXZpc2lvbiBsaXN0IGRvIHlvdSB3YW50IHRvIGdldCwgZmluYWxseSB5b3UgY2FuIGl0ZXJhdGUgb3ZlciB0aGUKLXJldmlzaW9uIGxpc3QuCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWByZXBvX2luaXRfcmV2aXNpb25zYDo6Ci0KLQlJbml0aWFsaXplIGEgcmV2X2luZm8gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMuIFRoZSB0aGlyZAotCXBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBjYW4gYmUgcHJlZml4IHBhdGgsIGFuZCB0aGVuIHRoZSBgLnByZWZpeGAKLQl2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdQotCXdhbnQgdG8gY2FsbCB3aGVuIHlvdSB3YW50IHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcKLQl0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8gY3VzdG9taXplIG9wdGlvbnMsIGxpa2Ugc2V0Ci0JYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4gU2VlCi0JYHJldmlzaW9uLmhgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCi0KLWBhZGRfcGVuZGluZ19vYmplY3RgOjoKLQotCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCi0JaW5mb3JtYXRpb24uIFlvdSBjYW4gdXNlIHRoZSBgVU5JTlRFUkVTVElOR2Agb2JqZWN0IGZsYWcgdG8gaW5kaWNhdGUgaWYKLQl5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCi0JZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgotKwotTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCi11c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcwotZnVuY3Rpb24uCi0KLWBzZXR1cF9yZXZpc2lvbnNgOjoKLQotCVBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCi0JcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgotCW9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkLCB3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUKLQloZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCi0JcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgotCi1gcHJlcGFyZV9yZXZpc2lvbl93YWxrYDo6Ci0KLQlQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQKLQlyZXR1cm5zIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbgotCXN0YXJ0IHVzaW5nIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCi0KLWBnZXRfcmV2aXNpb25gOjoKLQotCVRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LAotCXJldHVybmluZyBhIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUKLQlyZXZpc2lvbiBsaXN0IGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCi0KLWByZXNldF9yZXZpc2lvbl93YWxrYDo6Ci0KLQlSZXNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgcmV2aXNpb24gd2Fsa2luZyBhcGkuIFlvdSBjYW4gdXNlCi0JdGhpcyB0byBkbyBtdWx0aXBsZSBzZXF1ZW50aWFsIHJldmlzaW9uIHdhbGtzLgotCi1EYXRhIHN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1UYWxrIGFib3V0IDxyZXZpc2lvbi5oPiwgdGhpbmdzIGxpa2U6Ci0KLSogdHdvIGRpZmZfb3B0aW9ucywgb25lIGZvciBwYXRoIGxpbWl0aW5nLCBhbm90aGVyIGZvciBvdXRwdXQ7Ci0qIHJlbWFpbmluZyBmdW5jdGlvbnM7Ci0KLShMaW51cywgSkMsIERzY2hvKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjNlMzcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi1ydW4tY29tbWFuZCBBUEkKLT09PT09PT09PT09PT09PQotCi1UaGUgcnVuLWNvbW1hbmQgQVBJIG9mZmVycyBhIHZlcnNhdGlsZSB0b29sIHRvIHJ1biBzdWItcHJvY2Vzc2VzIHdpdGgKLXJlZGlyZWN0ZWQgaW5wdXQgYW5kIG91dHB1dCBhcyB3ZWxsIGFzIHdpdGggYSBtb2RpZmllZCBlbnZpcm9ubWVudAotYW5kIGFuIGFsdGVybmF0ZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotQSBzaW1pbGFyIEFQSSBvZmZlcnMgdGhlIGNhcGFiaWxpdHkgdG8gcnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHksCi13aGljaCBpcyBwcmltYXJpbHkgdXNlZCB0byBjYXB0dXJlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZnVuY3Rpb24KLXByb2R1Y2VzIGluIHRoZSBjYWxsZXIgaW4gb3JkZXIgdG8gcHJvY2VzcyBpdC4KLQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gY2hpbGRfcHJvY2Vzc19pbml0YDo6Ci0KLQlJbml0aWFsaXplIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3MgdmFyaWFibGUuCi0KLWBzdGFydF9jb21tYW5kYDo6Ci0KLQlTdGFydCBhIHN1Yi1wcm9jZXNzLiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCi0JdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgcGlwZSBGRHMgKGlmIHJlcXVlc3RlZCkuCi0JU2VlIGJlbG93IGZvciBkZXRhaWxzLgotCi1gZmluaXNoX2NvbW1hbmRgOjoKLQotCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGEgc3ViLXByb2Nlc3MgdGhhdCB3YXMgc3RhcnRlZCB3aXRoCi0Jc3RhcnRfY29tbWFuZCgpLgotCi1gcnVuX2NvbW1hbmRgOjoKLQotCUEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzZXF1ZW5jZSBvZgotCXN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUYWtlcyBhIHBvaW50ZXIKLQl0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMuCi0KLWBydW5fY29tbWFuZF92X29wdGAsIGBydW5fY29tbWFuZF92X29wdF9jZF9lbnZgOjoKLQotCUNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKLQlzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKLQlzcGVjaWZpZXMgdGhlIHByb2dyYW0gYW5kIGl0cyBhcmd1bWVudHMuIFRoZSBhcmd1bWVudCBvcHQgaXMgemVybwotCW9yIG1vcmUgb2YgdGhlIGZsYWdzIGBSVU5fQ09NTUFORF9OT19TVERJTmAsIGBSVU5fR0lUX0NNRGAsCi0JYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgLCBvciBgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkVgCi0JdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzIC5ub19zdGRpbiwgLmdpdF9jbWQsCi0JLnN0ZG91dF90b19zdGRlcnIsIC5zaWxlbnRfZXhlY19mYWlsdXJlIG9mIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AuCi0JVGhlIGFyZ3VtZW50IGRpciBjb3JyZXNwb25kcyB0aGUgbWVtYmVyIC5kaXIuIFRoZSBhcmd1bWVudCBlbnYKLQljb3JyZXNwb25kcyB0byB0aGUgbWVtYmVyIC5lbnYuCi0KLWBjaGlsZF9wcm9jZXNzX2NsZWFyYDo6Ci0KLQlSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJ1Y3QgY2hpbGRfcHJvY2Vzcy4KLQlNb3N0IHVzZXJzIG9mIHRoZSBydW4tY29tbWFuZCBBUEkgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMKLQlmdW5jdGlvbiBleHBsaWNpdGx5IGJlY2F1c2UgYHN0YXJ0X2NvbW1hbmRgIGludm9rZXMgaXQgb24KLQlmYWlsdXJlIGFuZCBgZmluaXNoX2NvbW1hbmRgIGNhbGxzIGl0IGF1dG9tYXRpY2FsbHkgYWxyZWFkeS4KLQotVGhlIGZ1bmN0aW9ucyBhYm92ZSBkbyB0aGUgZm9sbG93aW5nOgotCi0uIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKLSAgaXMgcHJpbnRlZC4KLQotLiBJZiB0aGUgcHJvZ3JhbSB3YXMgbm90IGZvdW5kLCB0aGVuIC0xIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8KLSAgRU5PRU5UOyBhIGRpYWdub3N0aWMgaXMgcHJpbnRlZCBvbmx5IGlmIC5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIDAuCi0KLS4gT3RoZXJ3aXNlLCB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIGl0IHRlcm1pbmF0ZXMgcmVndWxhcmx5LCBpdHMgZXhpdAotICBjb2RlIGlzIHJldHVybmVkLiBObyBkaWFnbm9zdGljIGlzIHByaW50ZWQsIGV2ZW4gaWYgdGhlIGV4aXQgY29kZSBpcwotICBub24temVyby4KLQotLiBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQotICBzaWduYWwgbnVtYmVyICsgMTI4LCBpZS4gdGhlIHNhbWUgdmFsdWUgdGhhdCBhIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQKLSAgcmVwb3J0LiAgQSBkaWFnbm9zdGljIGlzIHByaW50ZWQuCi0KLQotYHN0YXJ0X2FzeW5jYDo6Ci0KLQlSdW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4gVGFrZXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdAotCWFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcwotCWZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCi0KLWBmaW5pc2hfYXN5bmNgOjoKLQotCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHdhcwotCXN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgotCi1gcnVuX2hvb2tgOjoKLQotCVJ1biBhIGhvb2suCi0JVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYW4gaW5kZXggZmlsZSwgb3IgTlVMTAotCWlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCi0JVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaG9vay4KLQlUaGUgZnVydGhlciBhcmd1bWVudHMgY29ycmVzcG9uZCB0byB0aGUgaG9vayBhcmd1bWVudHMuCi0JVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KLQlJZiB0aGUgaG9vayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSwgdGhlIHJldHVybgotCXZhbHVlIHdpbGwgYmUgemVyby4KLQlJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAotCXN0YXR1cyBvZiB0aGUgaG9vayBpcyByZXR1cm5lZC4KLQlPbiBleGVjdXRpb24sIC5zdGRvdXRfdG9fc3RkZXJyIGFuZCAubm9fc3RkaW4gd2lsbCBiZSBzZXQuCi0JKFNlZSBiZWxvdy4pCi0KLQotRGF0YSBzdHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0KLQotKiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCi0KLVRoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKLWNvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCi0KLVRoZSBjYWxsZXI6Ci0KLTEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzICh1c2luZyBjaGlsZF9wcm9jZXNzX2luaXQoKSBvcgotICAgQ0hJTERfUFJPQ0VTU19JTklUKSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlOwotMi4gaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnM7Ci0zLiBjYWxscyBzdGFydF9jb21tYW5kKCk7Ci00LiBwcm9jZXNzZXMgdGhlIGRhdGE7Ci01LiBjbG9zZXMgZmlsZSBkZXNjcmlwdG9ycyAoaWYgbmVjZXNzYXJ5OyBzZWUgYmVsb3cpOwotNi4gY2FsbHMgZmluaXNoX2NvbW1hbmQoKS4KLQotVGhlIC5hcmd2IG1lbWJlciBpcyBzZXQgdXAgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzIChOVUxMCi10ZXJtaW5hdGVkKSwgb2Ygd2hpY2ggLmFyZ3ZbMF0gaXMgdGhlIHByb2dyYW0gbmFtZSB0byBydW4gKHVzdWFsbHkKLXdpdGhvdXQgYSBwYXRoKS4gSWYgdGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgZ2l0IGNvbW1hbmQsIHNldCBhcmd2WzBdIHRvCi10aGUgY29tbWFuZCBuYW1lIHdpdGhvdXQgdGhlICdnaXQtJyBwcmVmaXggYW5kIHNldCAuZ2l0X2NtZCA9IDEuCi0KLU5vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSAuYXJndiBzdGF5cyB3aXRoIHRoZQotY2FsbGVyLCBidXQgaXQgc2hvdWxkIHN1cnZpdmUgdW50aWwgYGZpbmlzaF9jb21tYW5kYCBjb21wbGV0ZXMuIElmIHRoZQotLmFyZ3YgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZSAuYXJncwotYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgeW91IG11c3QgdXNlIGV4YWN0bHkKLW9uZSkuIFRoZSBtZW1vcnkgaW4gLmFyZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCi1gZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KLQotVGhlIG1lbWJlcnMgLmluLCAub3V0LCAuZXJyIGFyZSB1c2VkIHRvIHJlZGlyZWN0IHN0ZGluLCBzdGRvdXQsCi1zdGRlcnIgYXMgZm9sbG93czoKLQotLiBTcGVjaWZ5IDAgdG8gcmVxdWVzdCBubyBzcGVjaWFsIHJlZGlyZWN0aW9uLiBObyBuZXcgZmlsZSBkZXNjcmlwdG9yCi0gIGlzIGFsbG9jYXRlZC4gVGhlIGNoaWxkIHByb2Nlc3Mgc2ltcGx5IGluaGVyaXRzIHRoZSBjaGFubmVsIGZyb20gdGhlCi0gIHBhcmVudC4KLQotLiBTcGVjaWZ5IC0xIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfY29tbWFuZCgpIHJlcGxhY2VzIC0xCi0gIGJ5IHRoZSBwaXBlIEZEIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotCi0JLmluOiBSZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIgd3JpdGVzOwotCQl0aGUgcmVhZGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGNoaWxkJ3Mgc3RkaW4uCi0KLQkub3V0LCAuZXJyOiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKLQkJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncwotCQlzdGRvdXQvc3RkZXJyLgotCi0gIFRoZSBjYWxsZXIgb2Ygc3RhcnRfY29tbWFuZCgpIG11c3QgY2xvc2UgdGhlIHNvIHJldHVybmVkIEZEcwotICBhZnRlciBpdCBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIGl0IQotCi0uIFNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IgPiAwIHRvIGJlIHVzZWQgYnkgdGhlIGNoaWxkOgotCi0JLmluOiBUaGUgRkQgbXVzdCBiZSByZWFkYWJsZTsgaXQgYmVjb21lcyBjaGlsZCdzIHN0ZGluLgotCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0LgotCS5lcnI6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyLgotCi0gIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2NvbW1hbmQoKSwgZXZlbiBpZiBpdCBmYWlscyB0bwotICBydW4gdGhlIHN1Yi1wcm9jZXNzIQotCi0uIFNwZWNpYWwgZm9ybXMgb2YgcmVkaXJlY3Rpb24gYXJlIGF2YWlsYWJsZSBieSBzZXR0aW5nIHRoZXNlIG1lbWJlcnMKLSAgdG8gMToKLQotCS5ub19zdGRpbiwgLm5vX3N0ZG91dCwgLm5vX3N0ZGVycjogVGhlIHJlc3BlY3RpdmUgY2hhbm5lbCBpcwotCQlyZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KLQotCS5zdGRvdXRfdG9fc3RkZXJyOiBzdGRvdXQgb2YgdGhlIGNoaWxkIGlzIHJlZGlyZWN0ZWQgdG8gaXRzCi0JCXN0ZGVyci4gVGhpcyBoYXBwZW5zIGFmdGVyIHN0ZGVyciBpcyBpdHNlbGYgcmVkaXJlY3RlZC4KLQkJU28gc3Rkb3V0IHdpbGwgZm9sbG93IHN0ZGVyciB0byB3aGVyZXZlciBpdCBpcwotCQlyZWRpcmVjdGVkLgotCi1UbyBtb2RpZnkgdGhlIGVudmlyb25tZW50IG9mIHRoZSBzdWItcHJvY2Vzcywgc3BlY2lmeSBhbiBhcnJheSBvZgotc3RyaW5nIHBvaW50ZXJzIChOVUxMIHRlcm1pbmF0ZWQpIGluIC5lbnY6Ci0KLS4gSWYgdGhlIHN0cmluZyBpcyBvZiB0aGUgZm9ybSAiVkFSPXZhbHVlIiwgaS5lLiBpdCBjb250YWlucyAnPScKLSAgdGhlIHZhcmlhYmxlIGlzIGFkZGVkIHRvIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCi0KLS4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluICc9JywgaXQgbmFtZXMgYW4gZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgotCi1JZiB0aGUgLmVudiBtZW1iZXIgaXMgTlVMTCwgYHN0YXJ0X2NvbW1hbmRgIHdpbGwgcG9pbnQgaXQgYXQgdGhlCi0uZW52X2FycmF5IGBhcmd2X2FycmF5YCAoc28geW91IG1heSB1c2Ugb25lIG9yIHRoZSBvdGhlciwgYnV0IG5vdCBib3RoKS4KLVRoZSBtZW1vcnkgaW4gLmVudl9hcnJheSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKLWBmaW5pc2hfY29tbWFuZGAgKG9yIGR1cmluZyBgc3RhcnRfY29tbWFuZGAgd2hlbiBpdCBpcyB1bnN1Y2Nlc3NmdWwpLgotCi1UbyBzcGVjaWZ5IGEgbmV3IGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBzdWItcHJvY2VzcywKLXNwZWNpZnkgaXQgaW4gdGhlIC5kaXIgbWVtYmVyLgotCi1JZiB0aGUgcHJvZ3JhbSBjYW5ub3QgYmUgZm91bmQsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIC0xIGFuZCBzZXQKLWVycm5vIHRvIEVOT0VOVC4gTm9ybWFsbHksIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgYnV0IGlmCi0uc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCi1zcGVjaWFsIGVycm9yIGNvbmRpdGlvbi4KLQotCi0qIGBzdHJ1Y3QgYXN5bmNgCi0KLVRoaXMgZGVzY3JpYmVzIGEgZnVuY3Rpb24gdG8gcnVuIGFzeW5jaHJvbm91c2x5LCB3aG9zZSBwdXJwb3NlIGlzCi10byBwcm9kdWNlIG91dHB1dCB0aGF0IHRoZSBjYWxsZXIgcmVhZHMuCi0KLVRoZSBjYWxsZXI6Ci0KLTEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQotICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOwotMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOwotMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKLTQuIHByb2Nlc3NlcyBjb21tdW5pY2F0ZXMgd2l0aCBwcm9jIHRocm91Z2ggLmluIGFuZCAub3V0OwotNS4gY2xvc2VzIC5pbiBhbmQgLm91dDsKLTYuIGNhbGxzIGZpbmlzaF9hc3luYygpLgotCi1UaGUgbWVtYmVycyAuaW4sIC5vdXQgYXJlIHVzZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBmZCdzIGZvcgotY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUgYXMgZm9sbG93czoKLQotLiBTcGVjaWZ5IDAgdG8gaGF2ZSBubyBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkLiAgVGhlIGNhbGxlZSB3aWxsCi0gIHJlY2VpdmUgLTEgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCi0KLS4gU3BlY2lmeSA8IDAgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkOyBzdGFydF9hc3luYygpIHJlcGxhY2VzCi0gIHdpdGggdGhlIHBpcGUgRkQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLQkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlcgotCXdyaXRlczsgdGhlIHJlYWRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCi0JaW4gYXJndW1lbnQuCi0KLQkub3V0OiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKLQlyZWFkczsgdGhlIHdyaXRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCi0Jb3V0IGFyZ3VtZW50LgotCi0gIFRoZSBjYWxsZXIgb2Ygc3RhcnRfYXN5bmMoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMgYWZ0ZXIgaXQKLSAgaGFzIGNvbXBsZXRlZCByZWFkaW5nIGZyb20vd3JpdGluZyBmcm9tIHRoZW0uCi0KLS4gU3BlY2lmeSBhIGZpbGUgZGVzY3JpcHRvciA+IDAgdG8gYmUgdXNlZCBieSB0aGUgZnVuY3Rpb246Ci0KLQkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIGluLgotCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIG91dC4KLQotICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9hc3luYygpLCBldmVuIGlmIGl0IGZhaWxzIHRvCi0gIHJ1biB0aGUgZnVuY3Rpb24uCi0KLVRoZSBmdW5jdGlvbiBwb2ludGVyIGluIC5wcm9jIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKLQotCWludCBwcm9jKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7Ci0KLS4gaW4sIG91dCBzcGVjaWZpZXMgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCB0aGUgZnVuY3Rpb24KLSAgbXVzdCByZWFkL3dyaXRlIHRoZSBkYXRhIHRoYXQgaXQgbmVlZHMvcHJvZHVjZXMuICBUaGUgZnVuY3Rpb24KLSAgKm11c3QqIGNsb3NlIHRoZXNlIGRlc2NyaXB0b3JzIGJlZm9yZSBpdCByZXR1cm5zLiAgQSBkZXNjcmlwdG9yCi0gIG1heSBiZSAtMSBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29uZmlndXJlIGEgZGVzY3JpcHRvciBmb3IgdGhhdAotICBkaXJlY3Rpb24uCi0KLS4gZGF0YSBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBzcGVjaWZpZWQgaW4gdGhlIC5kYXRhIG1lbWJlcgotICBvZiBzdHJ1Y3QgYXN5bmMuCi0KLS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybwotICBvbiBmYWlsdXJlLiBJZiB0aGUgZnVuY3Rpb24gaW5kaWNhdGVzIGZhaWx1cmUsIGZpbmlzaF9hc3luYygpIHdpbGwKLSAgcmVwb3J0IGZhaWx1cmUgYXMgd2VsbC4KLQotCi1UaGVyZSBhcmUgc2VyaW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbiBkbwotYmVjYXVzZSB0aGlzIGZhY2lsaXR5IGlzIGltcGxlbWVudGVkIGJ5IGEgdGhyZWFkIGluIHRoZSBzYW1lIGFkZHJlc3MKLXNwYWNlIG9uIG1vc3QgcGxhdGZvcm1zICh3aGVuIHB0aHJlYWRzIGlzIGF2YWlsYWJsZSksIGJ1dCBieSBhIHBpcGUgdG8KLWEgZm9ya2VkIHByb2Nlc3Mgb3RoZXJ3aXNlOgotCi0uIEl0IGNhbm5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSAoZ2xvYmFsIHZhcmlhYmxlcywgZW52aXJvbm1lbnQsCi0gIGV0Yy4pIGluIGEgd2F5IHRoYXQgdGhlIGNhbGxlciBub3RpY2VzOyBpbiBvdGhlciB3b3JkcywgLmluIGFuZCAub3V0Ci0gIGFyZSB0aGUgb25seSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuCi0KLS4gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQotICBmYWNpbGl0eSBhbHNvIHVzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNldHVwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxZmE5OC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotc2V0dXAgQVBJCi09PT09PT09PT0KLQotVGFsayBhYm91dAotCi0qIHNldHVwX2dpdF9kaXJlY3RvcnkoKQotKiBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgpCi0qIGlzX2luc2lkZV9naXRfZGlyKCkKLSogaXNfaW5zaWRlX3dvcmtfdHJlZSgpCi0qIHNldHVwX3dvcmtfdHJlZSgpCi0KLShEc2NobykKLQotUGF0aHNwZWMKLS0tLS0tLS0tCi0KLVNlZSBnbG9zc2FyeS1jb250ZXh0LnR4dCBmb3IgdGhlIHN5bnRheCBvZiBwYXRoc3BlYy4gSW4gbWVtb3J5LCBhCi1wYXRoc3BlYyBzZXQgaXMgcmVwcmVzZW50ZWQgYnkgInN0cnVjdCBwYXRoc3BlYyIgYW5kIGlzIHByZXBhcmVkIGJ5Ci1wYXJzZV9wYXRoc3BlYygpLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHNldmVyYWwgYXJndW1lbnRzOgotCi0tIG1hZ2ljX21hc2sgc3BlY2lmaWVzIHdoYXQgZmVhdHVyZXMgdGhhdCBhcmUgTk9UIHN1cHBvcnRlZCBieSB0aGUKLSAgZm9sbG93aW5nIGNvZGUuIElmIGEgdXNlciBhdHRlbXB0cyB0byB1c2Ugc3VjaCBhIGZlYXR1cmUsCi0gIHBhcnNlX3BhdGhzcGVjKCkgY2FuIHJlamVjdCBpdCBlYXJseS4KLQotLSBmbGFncyBzcGVjaWZpZXMgb3RoZXIgdGhpbmdzIHRoYXQgdGhlIGNhbGxlciB3YW50cyBwYXJzZV9wYXRoc3BlYyB0bwotICBwZXJmb3JtLgotCi0tIHByZWZpeCBhbmQgYXJncyBjb21lIGZyb20gY21kXyogZnVuY3Rpb25zCi0KLXBhcnNlX3BhdGhzcGVjKCkgaGVscHMgY2F0Y2ggdW5zdXBwb3J0ZWQgZmVhdHVyZXMgYW5kIHJlamVjdCB0aGVtCi1wb2xpdGVseS4gQXQgYSBsb3dlciBsZXZlbCwgZGlmZmVyZW50IHBhdGhzcGVjLXJlbGF0ZWQgZnVuY3Rpb25zIG1heQotbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0IG9mIGZlYXR1cmVzLiBTdWNoIHBhdGhzcGVjLXNlbnNpdGl2ZQotZnVuY3Rpb25zIGFyZSBndWFyZGVkIHdpdGggR1VBUkRfUEFUSFNQRUMoKSwgd2hpY2ggd2lsbCBkaWUgaW4gYW4KLXVuZnJpZW5kbHkgd2F5IHdoZW4gYW4gdW5zdXBwb3J0ZWQgZmVhdHVyZSBpcyByZXF1ZXN0ZWQuCi0KLVRoZSBjb21tYW5kIGRlc2lnbmVycyBhcmUgc3VwcG9zZWQgdG8gbWFrZSBzdXJlIHRoYXQgR1VBUkRfUEFUSFNQRUMoKQotbmV2ZXIgZGllcy4gVGhleSBoYXZlIHRvIG1ha2Ugc3VyZSBhbGwgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgYXJlIGNhdWdodAotYnkgcGFyc2VfcGF0aHNwZWMoKSwgbm90IGJ5IEdVQVJEX1BBVEhTUEVDLiBncmVwcGluZyBHVUFSRF9QQVRIU1BFQygpCi1zaG91bGQgZ2l2ZSB0aGUgZGVzaWduZXJzIGFsbCBwYXRoc3BlYy1zZW5zaXRpdmUgY29kZXBhdGhzIGFuZCB3aGF0Ci1mZWF0dXJlcyB0aGV5IHN1cHBvcnQuCi0KLUEgc2ltaWxhciBwcm9jZXNzIGlzIGFwcGxpZWQgd2hlbiBhIG5ldyBwYXRoc3BlYyBtYWdpYyBpcyBhZGRlZC4gVGhlCi1kZXNpZ25lciBsaWZ0cyB0aGUgR1VBUkRfUEFUSFNQRUMgcmVzdHJpY3Rpb24gaW4gdGhlIGZ1bmN0aW9ucyB0aGF0Ci1zdXBwb3J0IHRoZSBuZXcgbWFnaWMuIEF0IHRoZSBzYW1lIHRpbWUgKHMpaGUgaGFzIHRvIG1ha2Ugc3VyZSB0aGlzCi1uZXcgZmVhdHVyZSB3aWxsIGJlIGNhdWdodCBhdCBwYXJzZV9wYXRoc3BlYygpIGluIGNvbW1hbmRzIHRoYXQgY2Fubm90Ci1oYW5kbGUgdGhlIG5ldyBtYWdpYyBpbiBzb21lIGNhc2VzLiBncmVwcGluZyBwYXJzZV9wYXRoc3BlYygpIHNob3VsZAotaGVscC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaWdjaGFpbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2lnY2hhaW4udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTExODllLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaWdjaGFpbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1zaWdjaGFpbiBBUEkKLT09PT09PT09PT09PQotCi1Db2RlIG9mdGVuIHdhbnRzIHRvIHNldCBhIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBvcgotb3RoZXIgd29yay1pbi1wcm9ncmVzcyB3aGVuIHdlIGRpZSB1bmV4cGVjdGVkbHkuIEZvciBtdWx0aXBsZSBwaWVjZXMgb2YKLWNvZGUgdG8gZG8gdGhpcyB3aXRob3V0IGNvbmZsaWN0aW5nLCBlYWNoIHBpZWNlIG9mIGNvZGUgbXVzdCByZW1lbWJlcgotdGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGFuZGxlciBhbmQgcmVzdG9yZSBpdCBlaXRoZXIgd2hlbjoKLQotICAxLiBUaGUgd29yay1pbi1wcm9ncmVzcyBpcyBmaW5pc2hlZCwgYW5kIHRoZSBoYW5kbGVyIGlzIG5vIGxvbmdlcgotICAgICBuZWNlc3NhcnkuIFRoZSBoYW5kbGVyIHNob3VsZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yCi0gICAgIChlaXRoZXIgYW5vdGhlciBoYW5kbGVyLCBTSUdfREZMLCBvciBTSUdfSUdOKS4KLQotICAyLiBUaGUgc2lnbmFsIGlzIHJlY2VpdmVkLiBXZSBzaG91bGQgdGhlbiBkbyBvdXIgY2xlYW51cCwgdGhlbiBjaGFpbgotICAgICB0byB0aGUgbmV4dCBoYW5kbGVyIChvciBkaWUgaWYgaXQgaXMgU0lHX0RGTCkuCi0KLVNpZ2NoYWluIGlzIGEgdGlueSBsaWJyYXJ5IGZvciBrZWVwaW5nIGEgc3RhY2sgb2YgaGFuZGxlcnMuIFlvdXIgaGFuZGxlcgotYW5kIGluc3RhbGxhdGlvbiBjb2RlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBjbGVhbl9mb29fb25fc2lnbmFsKGludCBzaWcpCi0gIHsKLQkgIGNsZWFuX2ZvbygpOwotCSAgc2lnY2hhaW5fcG9wKHNpZyk7Ci0JICByYWlzZShzaWcpOwotICB9Ci0KLSAgdm9pZCBvdGhlcl9mdW5jKCkKLSAgewotCSAgc2lnY2hhaW5fcHVzaF9jb21tb24oY2xlYW5fZm9vX29uX3NpZ25hbCk7Ci0JICBtZXNzX3VwX2ZvbygpOwotCSAgY2xlYW5fZm9vKCk7Ci0gIH0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IYW5kbGVycyBhcmUgZ2l2ZW4gdGhlIHR5cGVkZWYgb2Ygc2lnY2hhaW5fZnVuLiBUaGlzIGlzIHRoZSBzYW1lIHR5cGUKLXRoYXQgaXMgZ2l2ZW4gdG8gc2lnbmFsKCkgb3Igc2lnYWN0aW9uKCkuIEl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCi1wdXNoIFNJR19ERkwgb3IgU0lHX0lHTiBvbnRvIHRoZSBzdGFjay4KLQotWW91IGNhbiBzaWdjaGFpbl9wdXNoIGFuZCBzaWdjaGFpbl9wb3AgaW5kaXZpZHVhbCBzaWduYWxzLiBGb3IKLWNvbnZlbmllbmNlLCBzaWdjaGFpbl9wdXNoX2NvbW1vbiB3aWxsIHB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgc3RhY2sKLWZvciBtYW55IGNvbW1vbiBzaWduYWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjA2MDg5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdWJtb2R1bGUtY29uZmlnLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLXN1Ym1vZHVsZSBjb25maWcgY2FjaGUgQVBJCi09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgc3VibW9kdWxlIGNvbmZpZyBjYWNoZSBBUEkgYWxsb3dzIHRvIHJlYWQgc3VibW9kdWxlCi1jb25maWd1cmF0aW9ucy9pbmZvcm1hdGlvbiBmcm9tIHNwZWNpZmllZCByZXZpc2lvbnMuIEludGVybmFsbHkKLWluZm9ybWF0aW9uIGlzIGxhemlseSByZWFkIGludG8gYSBjYWNoZSB0aGF0IGlzIHVzZWQgdG8gYXZvaWQKLXVubmVjZXNzYXJ5IHBhcnNpbmcgb2YgdGhlIHNhbWUgLmdpdG1vZHVsZXMgZmlsZXMuIExvb2t1cHMgY2FuIGJlIGRvbmUgYnkKLXN1Ym1vZHVsZSBwYXRoIG9yIG5hbWUuCi0KLVVzYWdlCi0tLS0tLQotCi1UbyBpbml0aWFsaXplIHRoZSBjYWNoZSB3aXRoIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlIHdvcmt0cmVlIHRoZSBjYWxsZXIKLXR5cGljYWxseSBmaXJzdCBjYWxscyBgZ2l0bW9kdWxlc19jb25maWcoKWAgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUKLXdvcmt0cmVlIC5naXRtb2R1bGVzIGFuZCB0aGVuIHRvIG92ZXJsYXkgdGhlIGxvY2FsIGdpdCBjb25maWcgdmFsdWVzCi1gcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb24oKWAgZnJvbSB0aGUgY29uZmlnIHBhcnNpbmcKLWluZnJhc3RydWN0dXJlLgotCi1UaGUgY2FsbGVyIGNhbiBsb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHN1Ym1vZHVsZXMgYnkgdXNpbmcgdGhlCi1gc3VibW9kdWxlX2Zyb21fcGF0aCgpYCBvciBgc3VibW9kdWxlX2Zyb21fbmFtZSgpYCBmdW5jdGlvbnMuIFRoZXkgcmV0dXJuCi1hIGBzdHJ1Y3Qgc3VibW9kdWxlYCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzLiBUaGUgQVBJIGF1dG9tYXRpY2FsbHkKLWluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgdGhlIG5lZWRlZCBpbmZyYXN0cnVjdHVyZSBvbi1kZW1hbmQuIElmIHRoZQotY2FsbGVyIGRvZXMgb25seSB3YW50IHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSByZXZpc2lvbnMgdGhlIGluaXRpYWxpemF0aW9uCi1jYW4gYmUgc2tpcHBlZC4KLQotSWYgdGhlIGludGVybmFsIGNhY2hlIG1pZ2h0IGdyb3cgdG9vIGJpZyBvciB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoCi10aGUgQVBJLCBhbGwgaW50ZXJuYWxseSBjYWNoZWQgdmFsdWVzIGNhbiBiZSBmcmVlZCB3aXRoIHN1Ym1vZHVsZV9mcmVlKCkuCi0KLURhdGEgU3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3Qgc3VibW9kdWxlYDo6Ci0KLQlUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHVybiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgb25lCi0Jc3VibW9kdWxlIGZvciBhIGNlcnRhaW4gcmV2aXNpb24uIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBsb29rdXAKLQlmdW5jdGlvbnMuCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWB2b2lkIHN1Ym1vZHVsZV9mcmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyKWA6OgotCi0JVXNlIHRoZXNlIHRvIGZyZWUgdGhlIGludGVybmFsbHkgY2FjaGVkIHZhbHVlcy4KLQotYGludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKWA6OgotCi0JQ2FuIGJlIHBhc3NlZCB0byB0aGUgY29uZmlnIHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gcGFyc2UKLQlsb2NhbCAod29ya3RyZWUpIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9ucy4KLQotYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZWlzaF9uYW1lLCBjb25zdCBjaGFyICpwYXRoKWA6OgotCi0JR2l2ZW4gYSB0cmVlLWlzaCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBhIHBhdGgsIHJldHVybiB0aGUKLQlzdWJtb2R1bGUgdGhhdCBpcyBib3VuZCBhdCB0aGUgcGF0aCBpbiB0aGUgbmFtZWQgdHJlZS4KLQotYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZWlzaF9uYW1lLCBjb25zdCBjaGFyICpuYW1lKWA6OgotCi0JVGhlIHNhbWUgYXMgYWJvdmUgYnV0IGxvb2t1cCBieSBuYW1lLgotCi1XaGVuZXZlciBhIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGlzIHBhcnNlZCBpbiBgcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb25gCi12aWEgZS5nLiBgZ2l0bW9kdWxlc19jb25maWcoKWAsIGl0IHdpbGwgb3ZlcndyaXRlIHRoZSBudWxsX3NoYTEgZW50cnkuCi1TbyBpbiB0aGUgbm9ybWFsIGNhc2UsIHdoZW4gSEVBRDouZ2l0bW9kdWxlcyBpcyBwYXJzZWQgZmlyc3QgYW5kIHRoZW4gb3ZlcmxheWVkCi13aXRoIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24sIHRoZSBudWxsX3NoYTEgZW50cnkgY29udGFpbnMgdGhlIGxvY2FsCi1jb25maWd1cmF0aW9uIG9mIGEgc3VibW9kdWxlIChlLmcuIGNvbnNvbGlkYXRlZCB2YWx1ZXMgZnJvbSBsb2NhbCBnaXQKLWNvbmZpZ3VyYXRpb24gYW5kIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGluIHRoZSB3b3JrdHJlZSkuCi0KLUZvciBhbiBleGFtcGxlIHVzYWdlIHNlZSB0ZXN0LXN1Ym1vZHVsZS1jb25maWcuYy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWRiNTk3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotdHJhY2UgQVBJCi09PT09PT09PT0KLQotVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQotY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50Ci12YXJpYWJsZXMuCi0KLVRoZSB0cmFjZSBpbXBsZW1lbnRhdGlvbiBhdXRvbWF0aWNhbGx5IGFkZHMgYHRpbWVzdGFtcCBmaWxlOmxpbmUgLi4uIFxuYCB0bwotYWxsIHRyYWNlIG1lc3NhZ2VzLiBFLmcuOgotCi0tLS0tLS0tLS0tLS0KLTIzOjU5OjU5LjEyMzQ1NiBnaXQuYzozMTIgICAgICAgICAgICAgICB0cmFjZTogYnVpbHQtaW46IGdpdCAnZm9vJwotMDA6MDA6MDAuMDAwMDAxIGJ1aWx0aW4vZm9vLmM6OTkgICAgICAgIGZvbzogc29tZSBtZXNzYWdlCi0tLS0tLS0tLS0tLS0KLQotRGF0YSBTdHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0KLQotYHN0cnVjdCB0cmFjZV9rZXlgOjoKLQotCURlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKLQlkb24ndCB0YWtlIGEga2V5KSBpcyBgR0lUX1RSQUNFYC4KLSsKLUUuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgotKwotLS0tLS0tLS0tLS0tCi1zdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV9mb28gPSBUUkFDRV9LRVlfSU5JVChGT08pOwotCi1zdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKLXsKLQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mb28sICIlcyIsIG1lc3NhZ2UpOwotfQotLS0tLS0tLS0tLS0tCi0rCi1Ob3RlOiBkb24ndCB1c2UgYGNvbnN0YCBhcyB0aGUgdHJhY2UgaW1wbGVtZW50YXRpb24gc3RvcmVzIGludGVybmFsIHN0YXRlIGluCi10aGUgYHRyYWNlX2tleWAgc3RydWN0dXJlLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gaW50IHRyYWNlX3dhbnQoc3RydWN0IHRyYWNlX2tleSAqa2V5KWA6OgotCi0JQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYWNlIGtleSBpcyBlbmFibGVkLiBVc2VkIHRvIHByZXZlbnQgZXhwZW5zaXZlCi0Jc3RyaW5nIGZvcm1hdHRpbmcgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBwcmludGluZyBBUElzLgotCi1gdm9pZCB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSlgOjoKLQotCURpc2FibGVzIHRyYWNpbmcgZm9yIHRoZSBzcGVjaWZpZWQga2V5LCBldmVuIGlmIHRoZSBlbnZpcm9ubWVudAotCXZhcmlhYmxlIHdhcyBzZXQuCi0KLWB2b2lkIHRyYWNlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLilgOjoKLWB2b2lkIHRyYWNlX3ByaW50Zl9rZXkoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLilgOjoKLQotCVByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBzaW1pbGFyIHRvIHByaW50Zi4KLQotYHZvaWQgdHJhY2VfYXJndl9wcmludGYoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWBgOjoKLQotCVByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBmb2xsb3dlZCBieSBhIHF1b3RlZCBsaXN0IG9mIGFyZ3VtZW50cy4KLQotYHZvaWQgdHJhY2Vfc3RyYnVmKHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSlgOjoKLQotCVByaW50cyB0aGUgc3RyYnVmLCB3aXRob3V0IGFkZGl0aW9uYWwgZm9ybWF0dGluZyAoaS5lLiBkb2Vzbid0Ci0JY2hva2Ugb24gYCVgIG9yIGV2ZW4gYFwwYCkuCi0KLWB1aW50NjRfdCBnZXRuYW5vdGltZSh2b2lkKWA6OgotCi0JUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKDAxLzAxLzE5NzApLCB0eXBpY2FsbHkgdXNlZAotCWZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMuCi0rCi1DdXJyZW50bHkgdGhlcmUgYXJlIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGltcGxlbWVudGF0aW9ucyBmb3IgTGludXggKHVzaW5nCi1gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMpYCkgYW5kIFdpbmRvd3MgKGBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcmApLgotT3RoZXIgcGxhdGZvcm1zIHVzZSBgZ2V0dGltZW9mZGF5YCBhcyB0aW1lIHNvdXJjZS4KLQotYHZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgotYHZvaWQgdHJhY2VfcGVyZm9ybWFuY2Vfc2luY2UodWludDY0X3Qgc3RhcnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgotCi0JUHJpbnRzIHRoZSBlbGFwc2VkIHRpbWUgKGluIG5hbm9zZWNvbmRzKSwgb3IgZWxhcHNlZCB0aW1lIHNpbmNlCi0JYHN0YXJ0YCwgZm9sbG93ZWQgYnkgYSBmb3JtYXR0ZWQgbWVzc2FnZS4gRW5hYmxlZCB2aWEgZW52aXJvbm1lbnQKLQl2YXJpYWJsZSBgR0lUX1RSQUNFX1BFUkZPUk1BTkNFYC4gVXNlZCBmb3IgbWFudWFsIHByb2ZpbGluZywgZS5nLjoKLSsKLS0tLS0tLS0tLS0tLQotdWludDY0X3Qgc3RhcnQgPSBnZXRuYW5vdGltZSgpOwotLyogY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUgKi8KLXRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHN0YXJ0LCAiZm9vYmFyIik7Ci0tLS0tLS0tLS0tLS0KLSsKLS0tLS0tLS0tLS0tLQotdWludDY0X3QgdCA9IDA7Ci1mb3IgKDs7KSB7Ci0JLyogaWdub3JlICovCi0JdCAtPSBnZXRuYW5vdGltZSgpOwotCS8qIGNvZGUgc2VjdGlvbiB0byBtZWFzdXJlICovCi0JdCArPSBnZXRuYW5vdGltZSgpOwotCS8qIGlnbm9yZSAqLwotfQotdHJhY2VfcGVyZm9ybWFuY2UodCwgImZyb3R6Iik7Ci0tLS0tLS0tLS0tLS0KLQotQnVncyAmIENhdmVhdHMKLS0tLS0tLS0tLS0tLS0tCi0KLUdJVF9UUkFDRV8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCB0byB0ZWxsIEdpdCB0byBzaG93Ci10cmFjZSBvdXRwdXQgdG8gaXRzIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4gR2l0IGNhbiBvZnRlbiBzcGF3biBhIHBhZ2VyCi1pbnRlcm5hbGx5IHRvIHJ1biBpdHMgc3ViY29tbWFuZCBhbmQgc2VuZCBpdHMgc3RhbmRhcmQgb3V0cHV0IGFuZAotc3RhbmRhcmQgZXJyb3IgdG8gaXQuCi0KLUJlY2F1c2UgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRyYWNlIGlzIGdlbmVyYXRlZCBvbmx5IGF0IHRoZSB2ZXJ5IGVuZAotb2YgdGhlIHByb2dyYW0gd2l0aCBhdGV4aXQoKSwgd2hpY2ggaGFwcGVucyBhZnRlciB0aGUgcGFnZXIgZXhpdHMsIGl0Ci13b3VsZCBub3Qgd29yayB3ZWxsIGlmIHlvdSBzZW5kIGl0cyBsb2cgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dAotYW5kIGxldCBHaXQgc3Bhd24gdGhlIHBhZ2VyIGF0IHRoZSBzYW1lIHRpbWUuCi0KLUFzIGEgd29yayBhcm91bmQsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlICctLW5vLXBhZ2VyJywgb3Igc2V0Ci1HSVRfVFJBQ0VfUEVSRk9STUFOQ0UgdG8gYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgcmVkaXJlY3RlZAotdG8gc3RkZXJyLCBvciBzZXQgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRvIGEgZmlsZSBzcGVjaWZpZWQgYnkgaXRzCi1hYnNvbHV0ZSBwYXRoLgotCi1Gb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aGljaCBieSBkZWZhdWx0IG1heSBub3QKLXByaW50IGFueSBwZXJmb3JtYW5jZSBpbmZvcm1hdGlvbjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MiBnaXQgbG9nIC0xCi0tLS0tLS0tLS0tLS0KLQoteW91IG1heSB3YW50IHRvIHVzZToKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MiBnaXQgLS1uby1wYWdlciBsb2cgLTEKLS0tLS0tLS0tLS0tLQotCi1vcjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MyAzPiYyIGdpdCBsb2cgLTEKLS0tLS0tLS0tLS0tLQotCi1vcjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9L3BhdGgvdG8vbG9nL2ZpbGUgZ2l0IGxvZyAtMQotLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CmluZGV4IGEwNDVkYmUuLjRmMDdjZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CkBAIC0xNzgsNyArMTc4LDcgQEAKIAogPT0gUHVibGljIEFQSQogCi1BbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NzYWdlIHRvIGFsbCBvZiB0aGUgYWN0aXZlCitBbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG9mIHRoZSBhY3RpdmUKIFRyYWNlMiBUYXJnZXRzLiAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZQogbWVzc2FnZXMuCiAKQEAgLTE4OCwyNjEgKzE4OCwzNiBAQAogPT09IEJhc2ljIENvbW1hbmQgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBsaWZldGltZSBvZiB0aGUgb3ZlcmFsbCBnaXQgcHJvY2Vzcy4KLQotYHZvaWQgdHJhY2UyX2luaXRpYWxpemVfY2xvY2soKWA6OgotCi0JSW5pdGlhbGl6ZSB0aGUgVHJhY2UyIHN0YXJ0IGNsb2NrIGFuZCBub3RoaW5nIGVsc2UuICBUaGlzIHNob3VsZAotCWJlIGNhbGxlZCBhdCB0aGUgdmVyeSB0b3Agb2YgbWFpbigpIHRvIGNhcHR1cmUgdGhlIHByb2Nlc3Mgc3RhcnQKLQl0aW1lIGFuZCByZWR1Y2Ugc3RhcnR1cCBvcmRlciBkZXBlbmRlbmNpZXMuCi0KLWB2b2lkIHRyYWNlMl9pbml0aWFsaXplKClgOjoKLQotCURldGVybWluZXMgaWYgYW55IFRyYWNlMiBUYXJnZXRzIHNob3VsZCBiZSBlbmFibGVkIGFuZAotCWluaXRpYWxpemVzIHRoZSBUcmFjZTIgZmFjaWxpdHkuICBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdXAgdGhlCi0JVHJhY2UyIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpLgotKwotVGhpcyBmdW5jdGlvbiBlbWl0cyBhICJ2ZXJzaW9uIiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgZ2l0Ci1hbmQgdGhlIFRyYWNlMiBwcm90b2NvbC4KLSsKLVRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGBtYWluKClgIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluCi10aGUgbGlmZSBvZiB0aGUgcHJvY2VzcyBhZnRlciBlc3NlbnRpYWwgcHJvY2VzcyBpbml0aWFsaXphdGlvbi4KLQotYGludCB0cmFjZTJfaXNfZW5hYmxlZCgpYDo6Ci0KLQlSZXR1cm5zIDEgaWYgVHJhY2UyIGlzIGVuYWJsZWQgKGF0IGxlYXN0IG9uZSB0YXJnZXQgaXMKLQlhY3RpdmUpLgotCi1gdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgOjoKLQotCUVtaXRzIGEgInN0YXJ0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgY29tbWFuZCBsaW5lCi0JYXJndW1lbnRzLgotCi1gaW50IHRyYWNlMl9jbWRfZXhpdChpbnQgZXhpdF9jb2RlKWA6OgotCi0JRW1pdHMgYW4gImV4aXQiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcHJvY2VzcyBleGl0LWNvZGUgYW5kCi0JZWxhcHNlZCB0aW1lLgotKwotUmV0dXJucyB0aGUgZXhpdC1jb2RlLgotCi1gdm9pZCB0cmFjZTJfY21kX2Vycm9yKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcClgOjoKLQotCUVtaXRzIGFuICJlcnJvciIgbWVzc2FnZSBjb250YWluaW5nIGEgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UuCi0KLWB2b2lkIHRyYWNlMl9jbWRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSlgOjoKLQotCUVtaXRzIGEgImNtZF9wYXRoIiBtZXNzYWdlIHdpdGggdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlCi0JY3VycmVudCBwcm9jZXNzLgorZS5nOiBgdm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpYCwgYHZvaWQgdHJhY2UyX2luaXRpYWxpemUoKWAsCitgaW50IHRyYWNlMl9pc19lbmFibGVkKClgLCBgdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgLgogCiA9PT0gQ29tbWFuZCBEZXRhaWwgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljIEdpdCBjb21tYW5kCiBhZnRlciB0aGUgY29tbWFuZCBsaW5lLCBjb25maWcsIGFuZCBlbnZpcm9ubWVudCBhcmUgaW5zcGVjdGVkLgotCi1gdm9pZCB0cmFjZTJfY21kX25hbWUoY29uc3QgY2hhciAqbmFtZSlgOjoKLQotCUVtaXRzIGEgImNtZF9uYW1lIiBtZXNzYWdlIHdpdGggdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZQotCWNvbW1hbmQsIGZvciBleGFtcGxlICJzdGF0dXMiIG9yICJjaGVja291dCIuCi0KLWB2b2lkIHRyYWNlMl9jbWRfbW9kZShjb25zdCBjaGFyICptb2RlKWA6OgotCi0JRW1pdHMgYSAiY21kX21vZGUiIG1lc3NhZ2Ugd2l0aCBhIHF1YWxpZmllciBuYW1lIHRvIGZ1cnRoZXIKLQlkZXNjcmliZSB0aGUgY3VycmVudCBnaXQgY29tbWFuZC4KLSsKLVRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggZ2l0IGNvbW1hbmRzIGhhdmluZyBtdWx0aXBsZQotbWFqb3IgbW9kZXMuICBGb3IgZXhhbXBsZSwgYSAiY2hlY2tvdXQiIGNvbW1hbmQgY2FuIGNoZWNrb3V0IGEgbmV3Ci1icmFuY2ggb3IgaXQgY2FuIGNoZWNrb3V0IGEgc2luZ2xlIGZpbGUsIHNvIHRoZSBjaGVja291dCBjb2RlIGNvdWxkCi1lbWl0IGEgY21kX21vZGUgbWVzc2FnZSBvZiAiYnJhbmNoIiBvciAiZmlsZSIuCi0KLWB2b2lkIHRyYWNlMl9jbWRfYWxpYXMoY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKiphcmd2X2V4cGFuc2lvbilgOjoKLQotCUVtaXRzIGFuICJhbGlhcyIgbWVzc2FnZSBjb250YWluaW5nIHRoZSBhbGlhcyB1c2VkIGFuZCB0aGUKLQlhcmd1bWVudCBleHBhbnNpb24uCi0KLWB2b2lkIHRyYWNlMl9kZWZfcGFyYW0oY29uc3QgY2hhciAqcGFyYW1ldGVyLCBjb25zdCBjaGFyICp2YWx1ZSlgOjoKLQotCUVtaXRzIGEgImRlZl9wYXJhbSIgbWVzc2FnZSBjb250YWluaW5nIGEga2V5L3ZhbHVlIHBhaXIuCi0rCi1UaGlzIG1lc3NhZ2UgaXMgaW50ZW5kZWQgdG8gcmVwb3J0IHNvbWUgZ2xvYmFsIGFzcGVjdCBvZiB0aGUgY3VycmVudAotY29tbWFuZCwgc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvciBjb21tYW5kIGxpbmUgc3dpdGNoIHRoYXQKLXNpZ25pZmljYW50bHkgYWZmZWN0cyBwcm9ncmFtIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLCBzdWNoIGFzCi1gY29yZS5hYmJyZXZgLCBgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlc2AsIG9yIGAtLW5vLWFoZWFkLWJlaGluZGAuCi0KLWB2b2lkIHRyYWNlMl9jbWRfbGlzdF9jb25maWcoKWA6OgotCi0JRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlcyBmb3IgImltcG9ydGFudCIgY29uZmlndXJhdGlvbgotCXNldHRpbmdzLgotKwotVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVNgIG9yIHRoZSBgdHJhY2UyLmNvbmZpZ1BhcmFtc2AKLWNvbmZpZyB2YWx1ZSBjYW4gYmUgc2V0IHRvIGEKLWxpc3Qgb2YgcGF0dGVybnMgb2YgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGZvciBleGFtcGxlOgotYGNvcmUuKixyZW1vdGUuKi51cmxgLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgY29uZmlnCi1zZXR0aW5ncyBhbmQgZW1pdCBhICJkZWZfcGFyYW0iIG1lc3NhZ2UgZm9yIGVhY2ggbWF0Y2guCi0KLWB2b2lkIHRyYWNlMl9jbWRfc2V0X2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKWA6OgotCi0JRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlIGZvciBhIG5ldyBvciB1cGRhdGVkIGtleS92YWx1ZQotCXBhaXIgSUYgYGtleWAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQuCi0rCi1UaGlzIGlzIHVzZWQgdG8gaG9vayBpbnRvIGBnaXRfY29uZmlnX3NldCgpYCBhbmQgY2F0Y2ggYW55Ci1jb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIHVwZGF0ZSBhIHZhbHVlIHByZXZpb3VzbHkgcmVwb3J0ZWQgYnkKLWB0cmFjZTJfY21kX2xpc3RfY29uZmlnKClgLgotCi1gdm9pZCB0cmFjZTJfZGVmX3JlcG8oc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pYDo6Ci0KLQlSZWdpc3RlcnMgYSByZXBvc2l0b3J5IHdpdGggdGhlIFRyYWNlMiBsYXllci4gIEFzc2lnbnMgYQotCXVuaXF1ZSAicmVwby1pZCIgdG8gYHJlcG8tPnRyYWNlMl9yZXBvX2lkYC4KLSsKLUVtaXRzIGEgIndvcmt0cmVlIiBtZXNzYWdlcyBjb250YWluaW5nIHRoZSByZXBvLWlkIGFuZCB0aGUgd29ya3RyZWUKLXBhdGhuYW1lLgotKwotUmVnaW9uIGFuZCBkYXRhIG1lc3NhZ2VzIChkZXNjcmliZWQgbGF0ZXIpIG1heSByZWZlciB0byB0aGlzIHJlcG8taWQuCi0rCi1UaGUgbWFpbi90b3AtbGV2ZWwgcmVwb3NpdG9yeSB3aWxsIGhhdmUgcmVwby1pZCB2YWx1ZSAxIChha2EgInIxIikuCi0rCi1UaGUgcmVwby1pZCBmaWVsZCBpcyBpbiBhbnRpY2lwYXRpb24gb2YgZnV0dXJlIGluLXByb2Mgc3VibW9kdWxlCi1yZXBvc2l0b3JpZXMuCitlLmc6IGB2b2lkIHRyYWNlMl9jbWRfbmFtZShjb25zdCBjaGFyICpuYW1lKWAsCitgdm9pZCB0cmFjZTJfY21kX21vZGUoY29uc3QgY2hhciAqbW9kZSlgLgogCiA9PT0gQ2hpbGQgUHJvY2VzcyBNZXNzYWdlcwogCiBUaGVzZSBhcmUgY29uY2VybmVkIHdpdGggdGhlIHZhcmlvdXMgc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMsCiBpbmNsdWRpbmcgc2hlbGwgc2NyaXB0cywgZ2l0IGNvbW1hbmRzLCBlZGl0b3JzLCBwYWdlcnMsIGFuZCBob29rcy4KIAotYHZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpYDo6Ci0KLQlFbWl0cyBhICJjaGlsZF9zdGFydCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiY2hpbGQtaWQiLAotCSJjaGlsZC1hcmd2IiwgYW5kICJjaGlsZC1jbGFzc2lmaWNhdGlvbiIuCi0rCi1CZWZvcmUgY2FsbGluZyB0aGlzLCBzZXQgYGNtZC0+dHJhY2UyX2NoaWxkX2NsYXNzYCB0byBhIG5hbWUKLWRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgY2hpbGQgcHJvY2VzcywgZm9yIGV4YW1wbGUgImVkaXRvciIuCi0rCi1UaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSB1bmlxdWUgImNoaWxkLWlkIiB0byBgY21kLT50cmFjZTJfY2hpbGRfaWRgLgotVGhpcyBmaWVsZCBpcyB1c2VkIGxhdGVyIGR1cmluZyB0aGUgImNoaWxkX2V4aXQiIG1lc3NhZ2UgdG8gYXNzb2NpYXRlCi1pdCB3aXRoIHRoZSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UuCi0rCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHNwYXduaW5nIHRoZSBjaGlsZCBwcm9jZXNzLgotCi1gdm9pZCB0cmFjZTJfY2hpbGRfZXhpdChzdHJ1Y3QgY2hpbGRfcHJvZXNzICpjbWQsIGludCBjaGlsZF9leGl0X2NvZGUpYDo6Ci0KLQlFbWl0cyBhICJjaGlsZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlICJjaGlsZC1pZCIsCi0JdGhlIGNoaWxkJ3MgZWxhcHNlZCB0aW1lIGFuZCBleGl0LWNvZGUuCi0rCi1UaGUgcmVwb3J0ZWQgZWxhcHNlZCB0aW1lIGluY2x1ZGVzIHRoZSBwcm9jZXNzIGNyZWF0aW9uIG92ZXJoZWFkIGFuZAotdGltZSBzcGVuZCB3YWl0aW5nIGZvciBpdCB0byBleGl0LCBzbyBpdCBtYXkgYmUgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4KLXRoZSB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBjaGlsZCBpdHNlbGYuCi0rCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcmVhcGluZyB0aGUgY2hpbGQgcHJvY2Vzcy4KLQotYGludCB0cmFjZTJfZXhlYyhjb25zdCBjaGFyICpleGUsIGNvbnN0IGNoYXIgKiphcmd2KWA6OgotCi0JRW1pdHMgYSAiZXhlYyIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiZXhlYy1pZCIgYW5kIHRoZQotCWFyZ3Ygb2YgdGhlIG5ldyBwcm9jZXNzLgotKwotVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIG9uZSBvZiB0aGUgYGV4ZWMoKWAKLXZhcmlhbnRzLCBzdWNoIGFzIGBleGVjdnAoKWAuCi0rCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB1bmlxdWUgImV4ZWMtaWQiLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGxhdGVyCi1pZiB0aGUgZXhlYygpIGZhaWxzIGFuZCBhICJleGVjLXJlc3VsdCIgbWVzc2FnZSBpcyBuZWNlc3NhcnkuCi0KLWB2b2lkIHRyYWNlMl9leGVjX3Jlc3VsdChpbnQgZXhlY19pZCwgaW50IGVycm9yX2NvZGUpYDo6Ci0KLQlFbWl0cyBhICJleGVjX3Jlc3VsdCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiZXhlYy1pZCIKLQlhbmQgdGhlIGVycm9yIGNvZGUuCi0rCi1PbiBVbml4LWJhc2VkIHN5c3RlbXMsIGBleGVjKClgIGRvZXMgbm90IHJldHVybiBpZiBzdWNjZXNzZnVsLgotVGhpcyBtZXNzYWdlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYGV4ZWMoKWAgZmFpbGVkIGFuZAotdGhhdCB0aGUgY3VycmVudCBwcm9ncmFtIGlzIGNvbnRpbnVpbmcuCitlLmc6IGB2b2lkIHRyYWNlMl9jaGlsZF9zdGFydChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKWAuCiAKID09PSBHaXQgVGhyZWFkIE1lc3NhZ2VzCiAKIFRoZXNlIG1lc3NhZ2VzIGFyZSBjb25jZXJuZWQgd2l0aCBHaXQgdGhyZWFkIHVzYWdlLgogCi1gdm9pZCB0cmFjZTJfdGhyZWFkX3N0YXJ0KGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKWA6OgotCi0JRW1pdHMgYSAidGhyZWFkX3N0YXJ0IiBtZXNzYWdlLgotKwotVGhlIGB0aHJlYWRfbmFtZWAgZmllbGQgc2hvdWxkIGJlIGEgZGVzY3JpcHRpdmUgbmFtZSwgc3VjaCBhcyB0aGUKLXVuaXF1ZSBuYW1lIG9mIHRoZSB0aHJlYWQtcHJvYy4gIEEgdW5pcXVlICJ0aHJlYWQtaWQiIHdpbGwgYmUgYWRkZWQKLXRvIHRoZSBuYW1lIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRocmVhZCBpbnN0YW5jZXMuCi0rCi1SZWdpb24gYW5kIGRhdGEgbWVzc2FnZXMgKGRlc2NyaWJlZCBsYXRlcikgbWF5IHJlZmVyIHRvIHRoaXMgdGhyZWFkCi1uYW1lLgotKwotVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkLXByb2Mgb2YgdGhlIG5ldyB0aHJlYWQKLShzbyB0aGF0IFRMUyBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkKSBhbmQgbm90IGJ5IHRoZSBjYWxsZXIKLW9mIGBwdGhyZWFkX2NyZWF0ZSgpYC4KLQotYHZvaWQgdHJhY2UyX3RocmVhZF9leGl0KClgOjoKLQotCUVtaXRzIGEgInRocmVhZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHRocmVhZCBuYW1lCi0JYW5kIHRoZSB0aHJlYWQgZWxhcHNlZCB0aW1lLgotKwotVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkLXByb2MgYmVmb3JlIGl0IHJldHVybnMKLShzbyB0aGF0IHRoZSBjb29yZWN0IFRMUyBkYXRhIGlzIHVzZWQgYW5kIGNsZWFuZWQgdXAuICBJdCBzaG91bGQKLW5vdCBiZSBjYWxsZWQgYnkgdGhlIGNhbGxlciBvZiBgcHRocmVhZF9qb2luKClgLgorZS5nOiBgdm9pZCB0cmFjZTJfdGhyZWFkX3N0YXJ0KGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKWAuCiAKID09PSBSZWdpb24gYW5kIERhdGEgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHJlY29yZGluZyBwZXJmb3JtYW5jZSBkYXRhCi1vdmVyIHJlZ2lvbnMgb3Igc3BhbnMgb2YgY29kZS4KK292ZXIgcmVnaW9ucyBvciBzcGFucyBvZiBjb2RlLiBlLmc6Citgdm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pYC4KIAotYHZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKWA6OgotCi1gdm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIC4uLilgOjoKLQotYHZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmEoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKWA6OgotCi0JRW1pdHMgYSB0aHJlYWQtcmVsYXRpdmUgInJlZ2lvbl9lbnRlciIgbWVzc2FnZSB3aXRoIG9wdGlvbmFsCi0JcHJpbnRmIHN0cmluZy4KLSsKLVRoaXMgZnVuY3Rpb24gcHVzaGVzIGEgbmV3IHJlZ2lvbiBuZXN0aW5nIHN0YWNrIGxldmVsIG9uIHRoZSBjdXJyZW50Ci10aHJlYWQgYW5kIHN0YXJ0cyBhIGNsb2NrIGZvciB0aGUgbmV3IHN0YWNrIGZyYW1lLgotKwotVGhlIGBjYXRlZ29yeWAgZmllbGQgaXMgYW4gYXJiaXRyYXJ5IGNhdGVnb3J5IG5hbWUgdXNlZCB0byBjbGFzc2lmeQotcmVnaW9ucyBieSBmZWF0dXJlIGFyZWEsIHN1Y2ggYXMgInN0YXR1cyIgb3IgImluZGV4Ii4gIEF0IHRoaXMgdGltZQotaXQgaXMgb25seSBqdXN0IHByaW50ZWQgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4gIEl0IG1heQotYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGZpbHRlciBtZXNzYWdlcy4KLSsKLVRoZSBgbGFiZWxgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBsYWJlbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpdml0eQotYmVpbmcgc3RhcnRlZCwgc3VjaCBhcyAicmVhZF9yZWN1cnNpdmUiIG9yICJkb19yZWFkX2luZGV4Ii4KLSsKLVRoZSBgcmVwb2AgZmllbGQsIGlmIHNldCwgd2lsbCBiZSB1c2VkIHRvIGdldCB0aGUgInJlcG8taWQiLCBzbyB0aGF0Ci1yZWN1cnNpdmUgb2VyYXRpb25zIGNhbiBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBjb3JyZWN0IHJlcG9zaXRvcnkuCi0KLWB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmUoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbylgOjoKLQotYHZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGYoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LCAuLi4pYDo6Ci0KLWB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcClgOjoKLQotCUVtaXRzIGEgdGhyZWFkLXJlbGF0aXZlICJyZWdpb25fbGVhdmUiIG1lc3NhZ2Ugd2l0aCBvcHRpb25hbAotCXByaW50ZiBzdHJpbmcuCi0rCi1UaGlzIGZ1bmN0aW9uIHBvcHMgdGhlIHJlZ2lvbiBuZXN0aW5nIHN0YWNrIG9uIHRoZSBjdXJyZW50IHRocmVhZAotYW5kIHJlcG9ydHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc3RhY2sgZnJhbWUuCi0rCi1UaGUgYGNhdGVnb3J5YCwgYGxhYmVsYCwgYW5kIGByZXBvYCBmaWVsZHMgYXJlIHRoZSBzYW1lIGFzIGFib3ZlLgotVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNvcnJlcHNvbmRpbmcKLSJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsIGJ1dCBpdCBtYWtlcyB0aGUgZGF0YSBzdHJlYW0gZWFzaWVyIHRvCi11bmRlcnN0YW5kLgotCi1gdm9pZCB0cmFjZTJfZGF0YV9zdHJpbmcoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKiB2YWx1ZSlgOjoKLQotYHZvaWQgdHJhY2UyX2RhdGFfaW50bWF4KGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LCBpbnRtYXggdmFsdWUpYDo6Ci0KLWB2b2lkIHRyYWNlMl9kYXRhX2pzb24oY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancpYDo6Ci0KLQlFbWl0cyBhIHJlZ2lvbi0gYW5kIHRocmVhZC1yZWxhdGl2ZSAiZGF0YSIgb3IgImRhdGFfanNvbiIgbWVzc2FnZS4KLSsKLVRoaXMgaXMgYSBrZXkvdmFsdWUgcGFpciBtZXNzYWdlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1jdXJyZW50IHRocmVhZCwgcmVnaW9uIHN0YWNrLCBhbmQgcmVwb3NpdG9yeS4gIFRoaXMgY291bGQgYmUgdXNlZAotdG8gcHJpbnQgdGhlIG51bWJlciBvZiBmaWxlcyBpbiBhIGRpcmVjdG9yeSBkdXJpbmcgYSBtdWx0aS10aHJlYWRlZAotcmVjdXJzaXZlIHRyZWUgd2Fsay4KLQotYHZvaWQgdHJhY2UyX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLilgOjoKLQotYHZvaWQgdHJhY2UyX3ByaW50Zl92YShjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApYDo6Ci0KLQlFbWl0cyBhIHJlZ2lvbi0gYW5kIHRocmVhZC1yZWxhdGl2ZSAicHJpbnRmIiBtZXNzYWdlLgorUmVmZXIgdG8gdHJhY2UyLmggZm9yIGRldGFpbHMgYWJvdXQgYWxsIHRyYWNlMiBmdW5jdGlvbnMuCiAKID09IFRyYWNlMiBUYXJnZXQgRm9ybWF0cwogCkBAIC04MTYsNyArNTkxLDcgQEAKIE5vdGUgdGhhdCB0aGUgc2Vzc2lvbi1pZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlIHRvCiB0aGUgY3VycmVudC9zcGF3bmluZyBwcm9jZXNzLCBzbyB0aGUgY2hpbGQncyBQSUQgaXMgcmVwb3J0ZWQgaGVyZSBhcwogYSBoaW50IGZvciBwb3N0LXByb2Nlc3NpbmcuICAoQnV0IGl0IGlzIG9ubHkgYSBoaW50IGJlY2F1c2UgdGhlIGNoaWxkCi1wcm9jZXMgbWF5IGJlIGEgc2hlbGwgc2NyaXB0IHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIHNlc3Npb24taWQuKQorcHJvY2VzcyBtYXkgYmUgYSBzaGVsbCBzY3JpcHQgd2hpY2ggZG9lc24ndCBoYXZlIGEgc2Vzc2lvbi1pZC4pCiArCiBOb3RlIHRoYXQgdGhlIGB0X3JlbGAgZmllbGQgY29udGFpbnMgdGhlIG9ic2VydmVkIHJ1biB0aW1lIGluIHNlY29uZHMKIGZvciB0aGUgY2hpbGQgcHJvY2VzcyAoc3RhcnRpbmcgYmVmb3JlIHRoZSBmb3JrL2V4ZWMvc3Bhd24gYW5kCkBAIC0xMTc2LDcgKzk1MSw3IEBACiArCiBSZWdpb25zIG1heSBiZSBuZXN0ZWQuICBUaGlzIGNhdXNlcyBtZXNzYWdlcyB0byBiZSBpbmRlbnRlZCBpbiB0aGUKIFBFUkYgdGFyZ2V0LCBmb3IgZXhhbXBsZS4KLUVsYXBzZWQgdGltZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29ycmVwc29uZGluZyBuZXN0aW5nCitFbGFwc2VkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbmVzdGluZwogbGV2ZWwgYXMgZXhwZWN0ZWQuICBGb3IgZXhhbXBsZSwgaWYgd2UgYWRkIHJlZ2lvbiBtZXNzYWdlIHRvOgogKwogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM3MSw3ICsxMTQ2LDcgQEAKIEluIHRoaXMgZXhhbXBsZSwgdGhlIHByZWxvYWQgcmVnaW9uIHRvb2sgMC4wMDkxMjIgc2Vjb25kcy4gIFRoZSA3IHRocmVhZHMKIHRvb2sgYmV0d2VlbiAwLjAwNjA2OSBhbmQgMC4wMDg5NDcgc2Vjb25kcyB0byB3b3JrIG9uIHRoZWlyIHBvcnRpb24gb2YKIHRoZSBpbmRleC4gIFRocmVhZCAidGgwMSIgd29ya2VkIG9uIDUwOCBpdGVtcyBhdCBvZmZzZXQgMC4gIFRocmVhZCAidGgwMiIKLXdvcmtlZCBvbiA1MDggaXRlbXMgYXQgb2Zmc2V0IDIwMzIuICBUaHJlYWQgInRoMDQiIHdvcmtlZCBvbiA1MDggaXRlbXRzCit3b3JrZWQgb24gNTA4IGl0ZW1zIGF0IG9mZnNldCAyMDMyLiAgVGhyZWFkICJ0aDA0IiB3b3JrZWQgb24gNTA4IGl0ZW1zCiBhdCBvZmZzZXQgNTA4LgogKwogVGhpcyBleGFtcGxlIGFsc28gc2hvd3MgdGhhdCB0aHJlYWQgbmFtZXMgYXJlIGFzc2lnbmVkIGluIGEgcmFjeSBtYW5uZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmVlLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjJlMzIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotdHJlZSB3YWxraW5nIEFQSQotPT09PT09PT09PT09PT09PQotCi1UaGUgdHJlZSB3YWxraW5nIEFQSSBpcyB1c2VkIHRvIHRyYXZlcnNlIGFuZCBpbnNwZWN0IHRyZWVzLgotCi1EYXRhIFN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1gc3RydWN0IG5hbWVfZW50cnlgOjoKLQotCUFuIGVudHJ5IGluIGEgdHJlZS4gRWFjaCBlbnRyeSBoYXMgYSBzaGExIGlkZW50aWZpZXIsIHBhdGhuYW1lLCBhbmQKLQltb2RlLgotCi1gc3RydWN0IHRyZWVfZGVzY2A6OgotCi0JQSBzZW1pLW9wYXF1ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotCXdhbGsuCi0rCi0qIGBidWZmZXJgIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUuIEl0IGFsd2F5cwotcG9pbnRzIGF0IHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCi0KLSogYHNpemVgIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGBidWZmZXJgLgotCi0qIGBlbnRyeWAgcG9pbnRzIHRvIHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCi0KLWBzdHJ1Y3QgdHJhdmVyc2VfaW5mb2A6OgotCi0JQSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgYSB0cmF2ZXJzYWwuCi0rCi0qIGBwcmV2YCBwb2ludHMgdG8gdGhlIHRyYXZlcnNlX2luZm8gd2hpY2ggd2FzIHVzZWQgdG8gZGVzY2VuZCBpbnRvIHRoZQotY3VycmVudCB0cmVlLiBJZiB0aGlzIGlzIHRoZSB0b3AtbGV2ZWwgdHJlZSBgcHJldmAgd2lsbCBwb2ludCB0bwotYSBkdW1teSB0cmF2ZXJzZV9pbmZvLgotCi0qIGBuYW1lYCBpcyB0aGUgZW50cnkgZm9yIHRoZSBjdXJyZW50IHRyZWUgKGlmIHRoZSB0cmVlIGlzIGEgc3VidHJlZSkuCi0KLSogYHBhdGhsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGN1cnJlbnQgdHJlZS4KLQotKiBgY29uZmxpY3RzYCBjYW4gYmUgdXNlZCBieSBjYWxsYmFja3MgdG8gbWFpbnRhaW4gZGlyZWN0b3J5LWZpbGUgY29uZmxpY3RzLgotCi0qIGBmbmAgaXMgYSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHRyZWUuIFNlZSBUcmF2ZXJzaW5nIGZvciBtb3JlCi1pbmZvcm1hdGlvbi4KLQotKiBgZGF0YWAgY2FuIGJlIGFueXRoaW5nIHRoZSBgZm5gIGNhbGxiYWNrIHdvdWxkIHdhbnQgdG8gdXNlLgotCi0qIGBzaG93X2FsbF9lcnJvcnNgIHRlbGxzIHdoZXRoZXIgdG8gc3RvcCBhdCB0aGUgZmlyc3QgZXJyb3Igb3Igbm90LgotCi1Jbml0aWFsaXppbmcKLS0tLS0tLS0tLS0tLQotCi1gaW5pdF90cmVlX2Rlc2NgOjoKLQotCUluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeS4gVGhlIGJ1ZmZlciBhbmQKLQlzaXplIHBhcmFtZXRlcnMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGJ1ZmZlciBhbmQgc2l6ZQotCW1lbWJlcnMgb2YgYHN0cnVjdCB0cmVlYC4KLQotYGZpbGxfdHJlZV9kZXNjcmlwdG9yYDo6Ci0KLQlJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkgZ2l2ZW4gdGhlCi0Jb2JqZWN0IElEIG9mIGEgdHJlZS4gUmV0dXJucyB0aGUgYGJ1ZmZlcmAgbWVtYmVyIGlmIHRoZSBsYXR0ZXIKLQlpcyBhIHZhbGlkIHRyZWUgaWRlbnRpZmllciBhbmQgTlVMTCBvdGhlcndpc2UuCi0KLWBzZXR1cF90cmF2ZXJzZV9pbmZvYDo6Ci0KLQlJbml0aWFsaXplIGEgYHRyYXZlcnNlX2luZm9gIGdpdmVuIHRoZSBwYXRobmFtZSBvZiB0aGUgdHJlZSB0byBzdGFydAotCXRyYXZlcnNpbmcgZnJvbS4KLQotV2Fsa2luZwotLS0tLS0tLQotCi1gdHJlZV9lbnRyeWA6OgotCi0JVmlzaXQgdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBSZXR1cm5zIDEgd2hlbiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzCi0JbGVmdCB0byB2aXNpdCBhbmQgMCB3aGVuIGFsbCBlbnRyaWVzIGhhdmUgYmVlbiB2aXNpdGVkLiBUaGlzIGlzCi0JY29tbW9ubHkgdXNlZCBpbiB0aGUgdGVzdCBvZiBhIHdoaWxlIGxvb3AuCi0KLWB0cmVlX2VudHJ5X2xlbmA6OgotCi0JQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSB0cmVlIGVudHJ5J3MgcGF0aG5hbWUuIFRoaXMgdXRpbGl6ZXMgdGhlCi0JbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIGEKLQlnZW5lcmljIHN0cmxlbigpLgotCi1gdXBkYXRlX3RyZWVfZW50cnlgOjoKLQotCVdhbGsgdG8gdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gY29uanVuY3Rpb24KLQl3aXRoIGB0cmVlX2VudHJ5X2V4dHJhY3RgIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgZW50cnkuCi0KLWB0cmVlX2VudHJ5X2V4dHJhY3RgOjoKLQotCURlY29kZSB0aGUgZW50cnkgY3VycmVudGx5IGJlaW5nIHZpc2l0ZWQgKHRoZSBvbmUgcG9pbnRlZCB0byBieQotCWB0cmVlX2Rlc2Mnc2AgYGVudHJ5YCBtZW1iZXIpIGFuZCByZXR1cm4gdGhlIHNoYTEgb2YgdGhlIGVudHJ5LiBUaGUKLQlgcGF0aHBgIGFuZCBgbW9kZXBgIGFyZ3VtZW50cyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHBhdGhuYW1lIGFuZCBtb2RlCi0JcmVzcGVjdGl2ZWx5LgotCi1gZ2V0X3RyZWVfZW50cnlgOjoKLQotCUZpbmQgYW4gZW50cnkgaW4gYSB0cmVlIGdpdmVuIGEgcGF0aG5hbWUgYW5kIHRoZSBzaGExIG9mIGEgdHJlZSB0bwotCXNlYXJjaC4gUmV0dXJucyAwIGlmIHRoZSBlbnRyeSBpcyBmb3VuZCBhbmQgLTEgb3RoZXJ3aXNlLiBUaGUgdGhpcmQKLQlhbmQgZm91cnRoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgZW50cnkncyBzaGExIGFuZCBtb2RlCi0JcmVzcGVjdGl2ZWx5LgotCi1UcmF2ZXJzaW5nCi0tLS0tLS0tLS0tCi0KLWB0cmF2ZXJzZV90cmVlc2A6OgotCi0JVHJhdmVyc2UgYG5gIG51bWJlciBvZiB0cmVlcyBpbiBwYXJhbGxlbC4gVGhlIGBmbmAgY2FsbGJhY2sgbWVtYmVyIG9mCi0JYHRyYXZlcnNlX2luZm9gIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRyZWUgZW50cnkuCi0KLWB0cmF2ZXJzZV9jYWxsYmFja190YDo6Ci0JVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNlIGNhbGxiYWNrIGFyZSBhcyBmb2xsb3dzOgotKwotKiBgbmAgY291bnRzIHRoZSBudW1iZXIgb2YgdHJlZXMgYmVpbmcgdHJhdmVyc2VkLgotCi0qIGBtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gdGhlIG50aCBlbnRyeS4KLQotKiBgZGlybWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiB0aGUgbnRoIHRyZWUncyBlbnRyeSBpcyBhIGRpcmVjdG9yeS4KLQotKiBgZW50cnlgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5gIHdoZXJlIHRoZSBudGggZW50cnkgaXMgZnJvbSB0aGUgbnRoIHRyZWUuCi0KLSogYGluZm9gIG1haW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbC4KLQotKwotUmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCB0ZXJtaW5hdGUgdGhlIHRyYXZlcnNhbC4gT3RoZXJ3aXNlIHRoZQotcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYW4gdXBkYXRlIG1hc2suIElmIHRoZSBudGggYml0IGlzIHNldCB0aGUgbnRoIHRyZWUKLXdpbGwgYmUgdXBkYXRlZCBhbmQgaWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBudGggdHJlZSBlbnRyeSB3aWxsIGJlIHRoZQotc2FtZSBpbiB0aGUgbmV4dCBjYWxsYmFjayBpbnZvY2F0aW9uLgotCi1gbWFrZV90cmF2ZXJzZV9wYXRoYDo6Ci0KLQlHZW5lcmF0ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBhIHRyZWUgZW50cnkgYmFzZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUKLQl0cmF2ZXJzYWwuIEZvciBleGFtcGxlLCBpZiB0aGUgdHJhdmVyc2FsIGhhcyByZWN1cnNlZCBpbnRvIGFub3RoZXIKLQl0cmVlIG5hbWVkICJiYXIiIHRoZSBwYXRobmFtZSBvZiBhbiBlbnRyeSAiYmF6IiBpbiB0aGUgImJhciIKLQl0cmVlIHdvdWxkIGJlICJiYXIvYmF6Ii4KLQotYHRyYXZlcnNlX3BhdGhfbGVuYDo6Ci0KLQlDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHBhdGhuYW1lIHJldHVybmVkIGJ5IGBtYWtlX3RyYXZlcnNlX3BhdGhgLgotCVRoaXMgdXRpbGl6ZXMgdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZQotCW92ZXJoZWFkIG9mIHVzaW5nIGEgZ2VuZXJpYyBzdHJsZW4oKS4KLQotYHN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGhgOjoKLQotCUNvbnZlbmllbmNlIHdyYXBwZXIgdG8gYG1ha2VfdHJhdmVyc2VfcGF0aGAgaW50byBhIHN0cmJ1Zi4KLQotQXV0aG9ycwotLS0tLS0tLQotCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIExpbnVzIFRvcnZhbGRzCi08dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk2ZWNhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi14ZGlmZiBpbnRlcmZhY2UgQVBJCi09PT09PT09PT09PT09PT09PT09Ci0KLVRhbGsgYWJvdXQgb3VyIGNhbGxpbmcgY29udmVudGlvbiB0byB4ZGlmZiBsaWJyYXJ5LCBpbmNsdWRpbmcKLXhkaWZmX2VtaXRfY29uc3VtZV9mbi4KLQotKERzY2hvLCBKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0CmluZGV4IDcyOWZiY2IuLjgwOGZhMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dApAQCAtMjIsMTEgKzIyLDExIEBACiBkaXJlY3Rvcnkgb2YgYW4gYWx0ZXJuYXRlLgogCiBUaGUgY29tbWl0LWdyYXBoIGZpbGUgc3RvcmVzIHRoZSBjb21taXQgZ3JhcGggc3RydWN0dXJlIGFsb25nIHdpdGggc29tZQotZXh0cmEgbWV0YWRhdGEgdG8gc3BlZWQgdXAgZ3JhcGggd2Fsa3MuIEJ5IGxpc3RpbmcgY29tbWl0IE9JRHMgaW4gbGV4aS0KLWNvZ3JhcGhpYyBvcmRlciwgd2UgY2FuIGlkZW50aWZ5IGFuIGludGVnZXIgcG9zaXRpb24gZm9yIGVhY2ggY29tbWl0IGFuZAotcmVmZXIgdG8gdGhlIHBhcmVudHMgb2YgYSBjb21taXQgdXNpbmcgdGhvc2UgaW50ZWdlciBwb3NpdGlvbnMuIFdlIHVzZQotYmluYXJ5IHNlYXJjaCB0byBmaW5kIGluaXRpYWwgY29tbWl0cyBhbmQgdGhlbiB1c2UgdGhlIGludGVnZXIgcG9zaXRpb25zCi1mb3IgZmFzdCBsb29rdXBzIGR1cmluZyB0aGUgd2Fsay4KK2V4dHJhIG1ldGFkYXRhIHRvIHNwZWVkIHVwIGdyYXBoIHdhbGtzLiBCeSBsaXN0aW5nIGNvbW1pdCBPSURzIGluCitsZXhpY29ncmFwaGljIG9yZGVyLCB3ZSBjYW4gaWRlbnRpZnkgYW4gaW50ZWdlciBwb3NpdGlvbiBmb3IgZWFjaCBjb21taXQKK2FuZCByZWZlciB0byB0aGUgcGFyZW50cyBvZiBhIGNvbW1pdCB1c2luZyB0aG9zZSBpbnRlZ2VyIHBvc2l0aW9ucy4gV2UKK3VzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgaW5pdGlhbCBjb21taXRzIGFuZCB0aGVuIHVzZSB0aGUgaW50ZWdlcgorcG9zaXRpb25zIGZvciBmYXN0IGxvb2t1cHMgZHVyaW5nIHRoZSB3YWxrLgogCiBBIGNvbnN1bWVyIG1heSBsb2FkIHRoZSBmb2xsb3dpbmcgaW5mbyBmb3IgYSBjb21taXQgZnJvbSB0aGUgZ3JhcGg6CiAKQEAgLTg1LDcgKzg1LDcgQEAKIFNpbmNlIHRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBjbG9zZWQgdW5kZXIgcmVhY2hhYmlsaXR5LCB3ZSBjYW4gZ3VhcmFudGVlCiB0aGUgZm9sbG93aW5nIHdlYWtlciBjb25kaXRpb24gb24gYWxsIGNvbW1pdHM6CiAKLSAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW1kIE0sIHJlc3BlY3RpdmVseSwKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW5kIE0sIHJlc3BlY3RpdmVseSwKICAgICBhbmQgTiA8IE0sIHRoZW4gQSBjYW5ub3QgcmVhY2ggQi4KIAogTm90ZSBob3cgdGhlIHN0cmljdCBpbmVxdWFsaXR5IGRpZmZlcnMgZnJvbSB0aGUgaW5lcXVhbGl0eSB3aGVuIHdlIGhhdmUKQEAgLTMyMywxNCArMzIzLDE0IEBACiBbMF0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2dpdC9pc3N1ZXMvZGV0YWlsP2lkPTgKICAgICBDaHJvbWl1bSB3b3JrIGl0ZW0gZm9yOiBTZXJpYWxpemVkIENvbW1pdCBHcmFwaAogCi1bMV0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDExMDcxMzA3MDUxNy5HQzE4NTY2QHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KK1sxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxMTA3MTMwNzA1MTcuR0MxODU2NkBzaWdpbGwuaW50cmEucGVmZi5uZXQvCiAgICAgQW4gYWJhbmRvbmVkIHBhdGNoIHRoYXQgaW50cm9kdWNlZCBnZW5lcmF0aW9uIG51bWJlcnMuCiAKLVsyXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwOTA4MDMzNDAzLnE3ZTZkajdiZW5hc3JqZXNAc2lnaWxsLmludHJhLnBlZmYubmV0LworWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDkwODAzMzQwMy5xN2U2ZGo3YmVuYXNyamVzQHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KICAgICBEaXNjdXNzaW9uIGFib3V0IGdlbmVyYXRpb24gbnVtYmVycyBvbiBjb21taXRzIGFuZCBob3cgdGhleSBpbnRlcmFjdAogICAgIHdpdGggZnNjay4KIAotWzNdIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzA5MDgwMzQ3MzkuNG9wM3c0ZjJtYTVzNjVrdUBzaWdpbGwuaW50cmEucGVmZi5uZXQvCitbM10gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwOTA4MDM0NzM5LjRvcDN3NGYybWE1czY1a3VAc2lnaWxsLmludHJhLnBlZmYubmV0LwogICAgIE1vcmUgZGlzY3Vzc2lvbiBhYm91dCBnZW5lcmF0aW9uIG51bWJlcnMgYW5kIG5vdCBzdG9yaW5nIHRoZW0gaW5zaWRlCiAgICAgY29tbWl0IG9iamVjdHMuIEEgdmFsdWFibGUgcXVvdGU6CiAKQEAgLTM0Miw5ICszNDIsOSBAQAogICAgICBjb21taXQgb2JqZWN0cyAoaS5lLiwgcGFja3Y0IG9yIHNvbWV0aGluZyBsaWtlIHRoZSAibWV0YXBhY2tzIiBJCiAgICAgIHByb3Bvc2VkIGEgZmV3IHllYXJzIGFnbykuIgogCi1bNF0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDE4MDEwODE1NDgyMi41NDgyOS0xLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS9ULyN1CitbNF0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTgwMTA4MTU0ODIyLjU0ODI5LTEtZ2l0QGplZmZob3N0ZXRsZXIuY29tL1QvI3UKICAgICBBIHBhdGNoIHRvIHJlbW92ZSB0aGUgYWhlYWQtYmVoaW5kIGNhbGN1bGF0aW9uIGZyb20gJ3N0YXR1cycuCiAKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L2YyN2RiMjgxLWFiYWQtNTA0My02ZDcxLWNiYjA4M2IxYzg3N0BnbWFpbC5jb20vCitbNV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L2YyN2RiMjgxLWFiYWQtNTA0My02ZDcxLWNiYjA4M2IxYzg3N0BnbWFpbC5jb20vCiAgICAgQSBkaXNjdXNzaW9uIG9mIGEgInR3by1kaW1lbnNpb25hbCBncmFwaCBwb3NpdGlvbiIgdGhhdCBjYW4gYWxsb3cgcmVhZGluZwogICAgIG11bHRpcGxlIGNvbW1pdC1ncmFwaCBjaGFpbnMgYXQgdGhlIHNhbWUgdGltZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0CmluZGV4IDJhZThmYTQuLjViMmRiM2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uLnR4dApAQCAtNTMxLDcgKzUzMSw3IEBACiBvbiBwdWJsaWMtZmFjaW5nIEdpdCBzZXJ2ZXJzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiBPbmNlIEdpdAogcHJvdG9jb2wgZ2FpbnMgU0hBLTI1NiBzdXBwb3J0LCBTSEEtMjU2IGJhc2VkIHNlcnZlcnMgYXJlIGxpa2VseSBub3QKIHRvIHN1cHBvcnQgU0hBLTEgY29tcGF0aWJpbGl0eSwgdG8gYXZvaWQgd2hhdCBtYXkgYmUgYSB2ZXJ5IGV4cGVuc2l2ZQotaGFzaCByZWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCitoYXNoIHJlLWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCiAKIFRoZSBkZXNpZ24gZGVzY3JpYmVkIGhlcmUgYWxsb3dzIGZldGNoZXMgYnkgU0hBLTEgY2xpZW50cyBvZiBhCiBwZXJzb25hbCBTSEEtMjU2IHJlcG9zaXRvcnkgYmVjYXVzZSBpdCdzIG5vdCBtdWNoIG1vcmUgZGlmZmljdWx0IHRoYW4KQEAgLTYwMiw3ICs2MDIsNyBAQAogCiBDaG9pY2Ugb2YgSGFzaAogLS0tLS0tLS0tLS0tLS0KLUluIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgIFhpYW95dW4gV2FuZywKK0luIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgWGlhb3l1biBXYW5nLAogWWlxdW4gTGlzYSBZaW4sIGFuZCBIb25nYm8gWXUgYW5ub3VuY2VkIGFuIGF0dGFjayBmaW5kaW5nIFNIQS0xCiBjb2xsaXNpb25zIGluIDJeNjkgb3BlcmF0aW9ucy4gSW4gQXVndXN0IHRoZXkgcHVibGlzaGVkIGRldGFpbHMuCiBMdWNraWx5LCBubyBwcmFjdGljYWwgZGVtb25zdHJhdGlvbnMgb2YgYSBjb2xsaXNpb24gaW4gZnVsbCBTSEEtMSB3ZXJlCkBAIC03MzAsNyArNzMwLDcgQEAKIAogVXNpbmcgaGFzaCBmdW5jdGlvbnMgaW4gcGFyYWxsZWwKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0oZS5nLiBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIyNzA4Ljg5MTMuODY0MDQ5LjQ1MjI1MkBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrLyApCisoZS5nLiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjI3MDguODkxMy44NjQwNDkuNDUyMjUyQGNoaWFyay5ncmVlbmVuZC5vcmcudWsvICkKIE9iamVjdHMgbmV3bHkgY3JlYXRlZCB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgdGhlIG5ldyBoYXNoLCBidXQgaW5zaWRlCiBzdWNoIGFuIG9iamVjdCAoZS5nLiBjb21taXQpIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGFkZHJlc3Mgb2JqZWN0cwogdXNpbmcgdGhlIG9sZCBoYXNoIGZ1bmN0aW9uLgpAQCAtNzgzLDcgKzc4Myw3IEBACiBzYmVsbGVyQGdvb2dsZS5jb20KIAogSW5pdGlhbCB2ZXJzaW9uIHNlbnQgdG8KLWh0dHA6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDE3MDMwNDAxMTI1MS5HQTI2Nzg5QGFpZWRlLm10di5jb3JwLmdvb2dsZS5jb20KK2h0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MDExMjUxLkdBMjY3ODlAYWllZGUubXR2LmNvcnAuZ29vZ2xlLmNvbQogCiAyMDE3LTAzLTAzIGpybmllZGVyQGdtYWlsLmNvbQogSW5jb3Jwb3JhdGVkIHN1Z2dlc3Rpb25zIGZyb20gam9uYXRoYW50YW5teSBhbmQgc2JlbGxlcjoKQEAgLTgyMCw4ICs4MjAsOCBAQAogIGVkaXRzLiBUaGlzIGRvY3VtZW50IGhpc3RvcnkgaXMgbm8gbG9uZ2VyIGJlaW5nIG1haW50YWluZWQgYXMgaXQKICB3b3VsZCBub3cgYmUgc3VwZXJmbHVvdXMgdG8gdGhlIGNvbW1pdCBsb2cKIAotWzFdIGh0dHA6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC9DQSs1NWFGekp0ZWppQ2pWMGU0Mys5b1IzUXVKSzJQaUZpTFFlbXl0b0xweUpXZTZQOXdAbWFpbC5nbWFpbC5jb20vCi1bMl0gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L0NBKzU1YUZ6K2drQXNEWjI0em1lUFF1RXMxWFBTOUJQX3M4TzdRNHdRN0xWN1g1LW9EQUBtYWlsLmdtYWlsLmNvbS8KLVszXSBodHRwOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzAzMDYwODQzNTMubnJuczQ1NWR2a2RzZmdvNUBzaWdpbGwuaW50cmEucGVmZi5uZXQvCi1bNF0gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwMzA0MjI0OTM2LnJxcXRrZHZmamd5ZXpzaHRAZ2VucmUuY3J1c3R5dG9vdGhwYXN0ZS5uZXQKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L0NBSm89aEp0b1g5PUF5TEhIcFVKUzdmdWVWOWNpWl9NTnBuRVBIVXo4V2h1aTZnOUYwQUBtYWlsLmdtYWlsLmNvbS8KK1sxXSBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9DQSs1NWFGekp0ZWppQ2pWMGU0Mys5b1IzUXVKSzJQaUZpTFFlbXl0b0xweUpXZTZQOXdAbWFpbC5nbWFpbC5jb20vCitbMl0gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvQ0ErNTVhRnorZ2tBc0RaMjR6bWVQUXVFczFYUFM5QlBfczhPN1E0d1E3TFY3WDUtb0RBQG1haWwuZ21haWwuY29tLworWzNdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA2MDg0MzUzLm5ybnM0NTVkdmtkc2ZnbzVAc2lnaWxsLmludHJhLnBlZmYubmV0LworWzRdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MjI0OTM2LnJxcXRrZHZmamd5ZXpzaHRAZ2VucmUuY3J1c3R5dG9vdGhwYXN0ZS5uZXQKK1s1XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvQ0FKbz1oSnRvWDk9QXlMSEhwVUpTN2Z1ZVY5Y2laX01OcG5FUEhVejhXaHVpNmc5RjBBQG1haWwuZ21haWwuY29tLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQKaW5kZXggN2M0ZDY3YS4uZmFhMjVjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0zMTgsNyArMzE4LDcgQEAKID09IEVuZCBvZiBJbmRleCBFbnRyeQogCiAgIFRoZSBFbmQgb2YgSW5kZXggRW50cnkgKEVPSUUpIGlzIHVzZWQgdG8gbG9jYXRlIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCi0gIGxlbmd0aCBpbmRleCBlbnRyaWVzIGFuZCB0aGUgYmVnaW5pbmcgb2YgdGhlIGV4dGVuc2lvbnMuIENvZGUgY2FuIHRha2UKKyAgbGVuZ3RoIGluZGV4IGVudHJpZXMgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4dGVuc2lvbnMuIENvZGUgY2FuIHRha2UKICAgYWR2YW50YWdlIG9mIHRoaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGluZGV4IGV4dGVuc2lvbnMgd2l0aG91dCBoYXZpbmcKICAgdG8gcGFyc2UgdGhyb3VnaCBhbGwgb2YgdGhlIGluZGV4IGVudHJpZXMuCiAKQEAgLTM1MSw3ICszNTEsNyBAQAogCiAgIC0gQSBudW1iZXIgb2YgaW5kZXggb2Zmc2V0IGVudHJpZXMgZWFjaCBjb25zaXN0aW5nIG9mOgogCi0gICAgLSAzMi1iaXQgb2Zmc2V0IGZyb20gdGhlIGJlZ2luaW5nIG9mIHRoZSBmaWxlIHRvIHRoZSBmaXJzdCBjYWNoZSBlbnRyeQorICAgIC0gMzItYml0IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNhY2hlIGVudHJ5CiAJaW4gdGhpcyBibG9jayBvZiBlbnRyaWVzLgogCiAgICAgLSAzMi1iaXQgY291bnQgb2YgY2FjaGUgZW50cmllcyBpbiB0aGlzIGJsb2NrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CmluZGV4IGQ3ZTU3NjMuLjFlMzEyMzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CkBAIC0xMDIsOCArMTAyLDggQEAKIFswXSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvZ2l0L2lzc3Vlcy9kZXRhaWw/aWQ9NgogICAgIENocm9taXVtIHdvcmsgaXRlbSBmb3I6IE11bHRpLVBhY2sgSW5kZXggKE1JRFgpCiAKLVsxXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTgwMTA3MTgxNDU5LjIyMjkwOS0xLWRzdG9sZWVAbWljcm9zb2Z0LmNvbS8KK1sxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxODAxMDcxODE0NTkuMjIyOTA5LTEtZHN0b2xlZUBtaWNyb3NvZnQuY29tLwogICAgIEFuIGVhcmxpZXIgUkZDIGZvciB0aGUgbXVsdGktcGFjay1pbmRleCBmZWF0dXJlCiAKLVsyXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L2FscGluZS5ERUIuMi4yMC4xODAzMDkxNTU3NTEwLjIzMTA5QGFsZXhtdi1saW51eC8KK1syXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvYWxwaW5lLkRFQi4yLjIwLjE4MDMwOTE1NTc1MTAuMjMxMDlAYWxleG12LWxpbnV4LwogICAgIEdpdCBNZXJnZSAyMDE4IENvbnRyaWJ1dG9yJ3Mgc3VtbWl0IG5vdGVzIChpbmNsdWRlcyBkaXNjdXNzaW9uIG9mIE1JRFgpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CmluZGV4IGM3M2U3MmQuLmQ1Y2U0ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CkBAIC02NDQsNyArNjQ0LDcgQEAKICAgY29tbWFuZC1vayAgICAgICAgPSBQS1QtTElORSgib2siIFNQIHJlZm5hbWUpCiAgIGNvbW1hbmQtZmFpbCAgICAgID0gUEtULUxJTkUoIm5nIiBTUCByZWZuYW1lIFNQIGVycm9yLW1zZykKIAotICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVDVCkgOyB3aGVyZSBub3QgIm9rIgorICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVUKSA7IHdoZXJlIG5vdCAib2siCiAtLS0tCiAKIFVwZGF0ZXMgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZSByZWZlcmVuY2UgY2FuIGhhdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhcnRpYWwtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKaW5kZXggMjEwMzczZS4uYjllMTdlNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKQEAgLTMyLDcgKzMyLDcgQEAKIAogQSByZW1vdGUgdGhhdCBjYW4gbGF0ZXIgcHJvdmlkZSB0aGUgbWlzc2luZyBvYmplY3RzIGlzIGNhbGxlZCBhCiBwcm9taXNvciByZW1vdGUsIGFzIGl0IHByb21pc2VzIHRvIHNlbmQgdGhlIG9iamVjdHMgd2hlbgotcmVxdWVzdGVkLiBJbml0aWFseSBHaXQgc3VwcG9ydGVkIG9ubHkgb25lIHByb21pc29yIHJlbW90ZSwgdGhlIG9yaWdpbgorcmVxdWVzdGVkLiBJbml0aWFsbHkgR2l0IHN1cHBvcnRlZCBvbmx5IG9uZSBwcm9taXNvciByZW1vdGUsIHRoZSBvcmlnaW4KIHJlbW90ZSBmcm9tIHdoaWNoIHRoZSB1c2VyIGNsb25lZCBhbmQgdGhhdCB3YXMgY29uZmlndXJlZCBpbiB0aGUKICJleHRlbnNpb25zLnBhcnRpYWxDbG9uZSIgY29uZmlnIG9wdGlvbi4gTGF0ZXIgc3VwcG9ydCBmb3IgbW9yZSB0aGFuCiBvbmUgcHJvbWlzb3IgcmVtb3RlIGhhcyBiZWVuIGltcGxlbWVudGVkLgpAQCAtMzUwLDI2ICszNTAsMjYgQEAKIFswXSBodHRwczovL2NyYnVnLmNvbS9naXQvMgogICAgIEJ1ZyMyOiBQYXJ0aWFsIENsb25lCiAKLVsxXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwMTEzMTU1MjUzLjE2NDQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCitbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMTEzMTU1MjUzLjE2NDQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCiAgICAgU3ViamVjdDogW1JGQ10gQWRkIHN1cHBvcnQgZm9yIGRvd25sb2FkaW5nIGJsb2JzIG9uIGRlbWFuZCArCiAgICAgRGF0ZTogRnJpLCAxMyBKYW4gMjAxNyAxMDo1Mjo1MyAtMDUwMAogCi1bMl0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC9jb3Zlci4xNTA2NzE0OTk5LmdpdC5qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKK1syXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvY292ZXIuMTUwNjcxNDk5OS5naXQuam9uYXRoYW50YW5teUBnb29nbGUuY29tLyArCiAgICAgU3ViamVjdDogW1BBVENIIDAwLzE4XSBQYXJ0aWFsIGNsb25lIChmcm9tIGNsb25lIHRvIGxhenkgZmV0Y2ggaW4gMTggcGF0Y2hlcykgKwogICAgIERhdGU6IEZyaSwgMjkgU2VwIDIwMTcgMTM6MTE6MzYgLTA3MDAKIAotWzNdIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzA0MjYyMjEzNDYuMjUzMzctMS1qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKK1szXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA0MjYyMjEzNDYuMjUzMzctMS1qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKICAgICBTdWJqZWN0OiBQcm9wb3NhbCBmb3IgbWlzc2luZyBibG9iIHN1cHBvcnQgaW4gR2l0IHJlcG9zICsKICAgICBEYXRlOiBXZWQsIDI2IEFwciAyMDE3IDE1OjEzOjQ2IC0wNzAwCiAKLVs0XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzE0ODg5OTkwMzktMzc2MzEtMS1naXQtc2VuZC1lbWFpbC1naXRAamVmZmhvc3RldGxlci5jb20vICsKK1s0XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMTQ4ODk5OTAzOS0zNzYzMS0xLWdpdC1zZW5kLWVtYWlsLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS8gKwogICAgIFN1YmplY3Q6IFtQQVRDSCAwMC8xMF0gUkZDIFBhcnRpYWwgQ2xvbmUgYW5kIEZldGNoICsKICAgICBEYXRlOiBXZWQsICA4IE1hciAyMDE3IDE4OjUwOjI5ICswMDAwCiAKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwNTA1MTUyODAyLjY3MjQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCitbNV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwNTA1MTUyODAyLjY3MjQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCiAgICAgU3ViamVjdDogW1BBVENIIHY3IDAwLzEwXSByZWZhY3RvciB0aGUgZmlsdGVyIHByb2Nlc3MgY29kZSBpbnRvIGEgcmV1c2FibGUgbW9kdWxlICsKICAgICBEYXRlOiBGcmksICA1IE1heSAyMDE3IDExOjI3OjUyIC0wNDAwCiAKLVs2XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwNzE0MTMyNjUxLjE3MDcwOC0xLWJlbnBlYXJ0QG1pY3Jvc29mdC5jb20vICsKK1s2XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA3MTQxMzI2NTEuMTcwNzA4LTEtYmVucGVhcnRAbWljcm9zb2Z0LmNvbS8gKwogICAgIFN1YmplY3Q6IFtSRkMvUEFUQ0ggdjIgMC8xXSBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWRpbmcgYmxvYnMgb24gZGVtYW5kICsKICAgICBEYXRlOiBGcmksIDE0IEp1bCAyMDE3IDA5OjI2OjUwIC0wNDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQKaW5kZXggNDBmOTFmNi4uN2UzNzY2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtdjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dApAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgb2ZzLWRlbHRhCiAJSW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IHVuZGVyc3RhbmRzIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZwogCXRvIGl0cyBiYXNlIGJ5IHBvc2l0aW9uIGluIHBhY2sgcmF0aGVyIHRoYW4gYnkgYW4gb2lkLiAgVGhhdCBpcywKLQl0aGV5IGNhbiByZWFkIE9CSl9PRlNfREVMVEEgKGFrZSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisJdGhleSBjYW4gcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgogCiBJZiB0aGUgJ3NoYWxsb3cnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBjYW4gYmUKIGluY2x1ZGVkIGluIHRoZSBjbGllbnRzIHJlcXVlc3QgYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGFkZGl0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0CmluZGV4IDRhOGJlNGQuLmNlZGE0YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKQEAgLTUxLDcgKzUxLDcgQEAKIG9ubHkgZml4ZXMgdGhlIGlzc3VlIGZvciBmaWxlIHN5c3RlbXMgd2l0aCBleGFjdGx5IDEgbnMgb3IgMSBzCiByZXNvbHV0aW9uLiBPdGhlciBmaWxlIHN5c3RlbXMgYXJlIHN0aWxsIGJyb2tlbiBpbiBjdXJyZW50IExpbnV4CiBrZXJuZWxzIChlLmcuIENFUEgsIENJRlMsIE5URlMsIFVERiksIHNlZQotaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTUvNi85LzcxNAoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC81NTc3MjQwRC43MDIwMzA5QGdtYWlsLmNvbS8KIAogUmFjeSBHaXQKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dAppbmRleCBhYTIyZDdhLi5hZjVmOWZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcmVyZS50eHQKQEAgLTExNyw3ICsxMTcsNyBAQAogNCBjb21iaW5hdGlvbnMgb2YgKCJCIG9yIEMiLCAiQyBvciBCIikgeCAoIlggb3IgWSIsICJZIG9yIFgiKS4KIAogQnkgc29ydGluZywgdGhlIGNvbmZsaWN0IGlzIGdpdmVuIGl0cyBjYW5vbmljYWwgbmFtZSwgbmFtZWx5LCAiYW4KLWVhcmx5IHBhcnQgYmVjYW1lIEIgb3IgQywgYSBsYXRlIHBhcnQgYmVjYW1lcyBYIG9yIFkiLCBhbmQgd2hlbmV2ZXIKK2Vhcmx5IHBhcnQgYmVjYW1lIEIgb3IgQywgYSBsYXRlIHBhcnQgYmVjYW1lIFggb3IgWSIsIGFuZCB3aGVuZXZlcgogYW55IG9mIHRoZXNlIGZvdXIgcGF0dGVybnMgYXBwZWFyLCBhbmQgd2UgY2FuIGdldCB0byB0aGUgc2FtZSBjb25mbGljdAogYW5kIHJlc29sdXRpb24gdGhhdCB3ZSBzYXcgZWFybGllci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKaW5kZXggYmMzNTRmZS4uMWMyMjlkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMudHh0CkBAIC01Myw2ICs1Myw5IEBACiAtLWxvY2FsIG9wdGlvbi4KIGVuZGlmOjpnaXQtY2xvbmVbXQogCisnZ2l0IGNsb25lJywgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcsIGJ1dCBub3QgJ2dpdCBwdXNoJywgd2lsbCBhbHNvCithY2NlcHQgYSBzdWl0YWJsZSBidW5kbGUgZmlsZS4gU2VlIGxpbmtnaXQ6Z2l0LWJ1bmRsZVsxXS4KKwogV2hlbiBHaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgYSBjZXJ0YWluIHRyYW5zcG9ydCBwcm90b2NvbCwgaXQKIGF0dGVtcHRzIHRvIHVzZSB0aGUgJ3JlbW90ZS08dHJhbnNwb3J0PicgcmVtb3RlIGhlbHBlciwgaWYgb25lCiBleGlzdHMuIFRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHJlbW90ZSBoZWxwZXIsIHRoZSBmb2xsb3dpbmcgc3ludGF4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CmluZGV4IDA2YmQ4OTkuLjgzMzY1MjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC00NTc0LDUgKzQ1NzQsNSBAQAogQWx0ZXJuYXRlcywgY2xvbmUgLXJlZmVyZW5jZSwgZXRjLgogCiBNb3JlIG9uIHJlY292ZXJ5IGZyb20gcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgU2VlOgotCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MjYzODY0ODIwNzk5Jnc9MgotCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MTQ3ODU1NTAzNzk4Jnc9MgorCWh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9QaW5lLkxOWC40LjY0LjA3MDIyNzIwMzk1NDAuMTI0ODVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmcvCisJaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L1BpbmUuTE5YLjQuNjQuMDcwMjE0MTAzMzQwMC4zNjA0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnLwpkaWZmIC0tZ2l0IGEvR0lULVZFUlNJT04tR0VOIGIvR0lULVZFUlNJT04tR0VOCmluZGV4IDBjZDJjMjguLjIyZThkODMgMTAwNzU1Ci0tLSBhL0dJVC1WRVJTSU9OLUdFTgorKysgYi9HSVQtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9djIuMjQuMQorREVGX1ZFUj12Mi4yNC5HSVQKIAogTEY9JwogJwpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggYzM5MDA2ZS4uMjJjMzY0ZiAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC0xMDksMTUgKzEwOSwxNSBAQAogCiAgLSBHaXQgaXMgcmVhc29uYWJseSBzZWxmLXN1ZmZpY2llbnQsIGJ1dCBkb2VzIGRlcGVuZCBvbiBhIGZldyBleHRlcm5hbAogICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKLSAgIHRoZSBhcHByb3JpYXRlICJOT188TElCUkFSWT49WWVzUGxlYXNlIiB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgb3IKKyAgIHRoZSBhcHByb3ByaWF0ZSAiTk9fPExJQlJBUlk+PVllc1BsZWFzZSIgdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIG9yCiAgICBjb25maWcubWFrIGZpbGUuCiAKIAktICJ6bGliIiwgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkuIEdpdCB3b24ndCBidWlsZCB3aXRob3V0IGl0LgogCiAJLSAic3NoIiBpcyB1c2VkIHRvIHB1c2ggYW5kIHB1bGwgb3ZlciB0aGUgbmV0LgogCi0JLSBBIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBpcyByZXF1aXJlZCB0byBydW4gbWFueSBzY3JpcHRzIG5lZWRlZAotCSAgZm9yIGV2ZXJ5ZGF5IHVzZSAoZS5nLiAiYmlzZWN0IiwgInB1bGwiKS4KKwktIEEgUE9TSVgtY29tcGxpYW50IHNoZWxsIGlzIHJlcXVpcmVkIHRvIHJ1biBzb21lIHNjcmlwdHMgbmVlZGVkCisJICBmb3IgZXZlcnlkYXkgdXNlIChlLmcuICJiaXNlY3QiLCAicmVxdWVzdC1wdWxsIikuCiAKIAktICJQZXJsIiB2ZXJzaW9uIDUuOCBvciBsYXRlciBpcyBuZWVkZWQgdG8gdXNlIHNvbWUgb2YgdGhlCiAJICBmZWF0dXJlcyAoZS5nLiBwcmVwYXJpbmcgYSBwYXJ0aWFsIGNvbW1pdCB1c2luZyAiZ2l0IGFkZCAtaS8tcCIsCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDU4YjkyYWYuLjA5Zjk4YjcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC00ODEsNyArNDgxLDcgQEAKICMKICMgV2hlbiBERVZFTE9QRVIgaXMgc2V0LCBERVZPUFRTIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgY29tcGlsZXIKICMgb3B0aW9ucy4gIFRoaXMgdmFyaWFibGUgY29udGFpbnMga2V5d29yZHMgc2VwYXJhdGVkIGJ5Ci0jIHdoaXRlc3BhY2UuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgYXJlIGFyZSByZWNvZ25pemVkOgorIyB3aGl0ZXNwYWNlLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZSByZWNvZ25pemVkOgogIwogIyAgICBuby1lcnJvcjoKICMKQEAgLTcyNyw2ICs3MjcsNyBAQAogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcHJvZ3Jlc3MubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhY2gubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhZC1jYWNoZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFkLWdyYXBoLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlYWQtbWlkeC5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWYtc3RvcmUubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVnZXgubwpAQCAtODIzLDYgKzgyNCw4IEBACiAJLW5hbWUgJyouaCcgLXByaW50KSkpCiAKIExJQl9PQkpTICs9IGFic3BhdGgubworTElCX09CSlMgKz0gYWRkLWludGVyYWN0aXZlLm8KK0xJQl9PQkpTICs9IGFkZC1wYXRjaC5vCiBMSUJfT0JKUyArPSBhZHZpY2UubwogTElCX09CSlMgKz0gYWxpYXMubwogTElCX09CSlMgKz0gYWxsb2MubwpAQCAtMTEyNSw2ICsxMTI4LDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctYnJhbmNoLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctaW5kZXgubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2hvdy1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3N0YXNoLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3N0cmlwc3BhY2UubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIubwpAQCAtMjc3Nyw4ICsyNzgxLDcgQEAKIC5QSE9OWTogc3BhcnNlICQoU1BfT0JKKQogc3BhcnNlOiAkKFNQX09CSikKIAotR0VOX0hEUlMgOj0gY29tbWFuZC1saXN0LmggdW5pY29kZS13aWR0aC5oCi1FWENFUFRfSERSUyA6PSAkKEdFTl9IRFJTKSBjb21wYXQvJSB4ZGlmZi8lCitFWENFUFRfSERSUyA6PSBjb21tYW5kLWxpc3QuaCB1bmljb2RlLXdpZHRoLmggY29tcGF0LyUgeGRpZmYvJQogaWZuZGVmIEdDUllQVF9TSEEyNTYKIAlFWENFUFRfSERSUyArPSBzaGEyNTYvZ2NyeXB0LmgKIGVuZGlmCkBAIC0zMTAzLDcgKzMxMDYsNyBAQAogCSQoUk0pICQoSENDKQogCSQoUk0pIC1yIGJpbi13cmFwcGVycyAkKGRlcF9kaXJzKQogCSQoUk0pIC1yIHBvL2J1aWxkLwotCSQoUk0pICoucHljICoucHlvICovKi5weWMgKi8qLnB5byBjb21tYW5kLWxpc3QuaCAkKEVUQUdTX1RBUkdFVCkgdGFncyBjc2NvcGUqCisJJChSTSkgKi5weWMgKi5weW8gKi8qLnB5YyAqLyoucHlvICQoR0VORVJBVEVEX0gpICQoRVRBR1NfVEFSR0VUKSB0YWdzIGNzY29wZSoKIAkkKFJNKSAtciAkKEdJVF9UQVJOQU1FKSAuZG9jLXRtcC1kaXIKIAkkKFJNKSAkKEdJVF9UQVJOQU1FKS50YXIuZ3ogZ2l0LWNvcmVfJChHSVRfVkVSU0lPTiktKi50YXIuZ3oKIAkkKFJNKSAkKGh0bWxkb2NzKS50YXIuZ3ogJChtYW5wYWdlcykudGFyLmd6CmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggZTFkMmI4Mi4uOWQ0NTY0YyAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMzUsNyArMzUsNyBAQAogW0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXNdW10gZm9yIGluc3RydWN0aW9ucyBvbiBwYXRjaCBzdWJtaXNzaW9uKS4KIFRvIHN1YnNjcmliZSB0byB0aGUgbGlzdCwgc2VuZCBhbiBlbWFpbCB3aXRoIGp1c3QgInN1YnNjcmliZSBnaXQiIGluCiB0aGUgYm9keSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnLiBUaGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFyZQotYXZhaWxhYmxlIGF0IDxodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0Lz4sCithdmFpbGFibGUgYXQgPGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8+LAogPGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0PiBhbmQgb3RoZXIgYXJjaGl2YWwgc2l0ZXMuCiAKIElzc3VlcyB3aGljaCBhcmUgc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIGRpc2Nsb3NlZCBwcml2YXRlbHkgdG8KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKaW5kZXggZDk3NjY4Mi4uMDkxZGQwMiAxMjAwMDAKLS0tIGEvUmVsTm90ZXMKKysrIGIvUmVsTm90ZXMKQEAgLTEgKzEgQEAKLURvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4xLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5jIGIvYWRkLWludGVyYWN0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5jCkBAIC0wLDAgKzEsMTE1NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYWRkLWludGVyYWN0aXZlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdGF0aWMgdm9pZCBpbml0X2NvbG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsCisJCSAgICAgICBjb25zdCBjaGFyICpzbG90X25hbWUsIGNoYXIgKmRzdCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfY29sb3IpCit7CisJY2hhciAqa2V5ID0geHN0cmZtdCgiY29sb3IuaW50ZXJhY3RpdmUuJXMiLCBzbG90X25hbWUpOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFzLT51c2VfY29sb3IpCisJCWRzdFswXSA9ICdcMCc7CisJZWxzZSBpZiAocmVwb19jb25maWdfZ2V0X3ZhbHVlKHIsIGtleSwgJnZhbHVlKSB8fAorCQkgY29sb3JfcGFyc2UodmFsdWUsIGRzdCkpCisJCXN0cmxjcHkoZHN0LCBkZWZhdWx0X2NvbG9yLCBDT0xPUl9NQVhMRU4pOworCisJZnJlZShrZXkpOworfQorCit2b2lkIGluaXRfYWRkX2lfc3RhdGUoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCXMtPnIgPSByOworCisJaWYgKHJlcG9fY29uZmlnX2dldF92YWx1ZShyLCAiY29sb3IuaW50ZXJhY3RpdmUiLCAmdmFsdWUpKQorCQlzLT51c2VfY29sb3IgPSAtMTsKKwllbHNlCisJCXMtPnVzZV9jb2xvciA9CisJCQlnaXRfY29uZmlnX2NvbG9yYm9vbCgiY29sb3IuaW50ZXJhY3RpdmUiLCB2YWx1ZSk7CisJcy0+dXNlX2NvbG9yID0gd2FudF9jb2xvcihzLT51c2VfY29sb3IpOworCisJaW5pdF9jb2xvcihyLCBzLCAiaGVhZGVyIiwgcy0+aGVhZGVyX2NvbG9yLCBHSVRfQ09MT1JfQk9MRCk7CisJaW5pdF9jb2xvcihyLCBzLCAiaGVscCIsIHMtPmhlbHBfY29sb3IsIEdJVF9DT0xPUl9CT0xEX1JFRCk7CisJaW5pdF9jb2xvcihyLCBzLCAicHJvbXB0Iiwgcy0+cHJvbXB0X2NvbG9yLCBHSVRfQ09MT1JfQk9MRF9CTFVFKTsKKwlpbml0X2NvbG9yKHIsIHMsICJlcnJvciIsIHMtPmVycm9yX2NvbG9yLCBHSVRfQ09MT1JfQk9MRF9SRUQpOworCWluaXRfY29sb3IociwgcywgInJlc2V0Iiwgcy0+cmVzZXRfY29sb3IsIEdJVF9DT0xPUl9SRVNFVCk7CisJaW5pdF9jb2xvcihyLCBzLCAiZnJhZ2luZm8iLCBzLT5mcmFnaW5mb19jb2xvciwKKwkJICAgZGlmZl9nZXRfY29sb3Iocy0+dXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKSk7CisJaW5pdF9jb2xvcihyLCBzLCAiY29udGV4dCIsIHMtPmNvbnRleHRfY29sb3IsCisJCWRpZmZfZ2V0X2NvbG9yKHMtPnVzZV9jb2xvciwgRElGRl9DT05URVhUKSk7CisJaW5pdF9jb2xvcihyLCBzLCAib2xkIiwgcy0+ZmlsZV9vbGRfY29sb3IsCisJCWRpZmZfZ2V0X2NvbG9yKHMtPnVzZV9jb2xvciwgRElGRl9GSUxFX09MRCkpOworCWluaXRfY29sb3IociwgcywgIm5ldyIsIHMtPmZpbGVfbmV3X2NvbG9yLAorCQlkaWZmX2dldF9jb2xvcihzLT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpKTsKK30KKworLyoKKyAqIEEgInByZWZpeCBpdGVtIGxpc3QiIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBpZGVudGlmaWVkIGJ5IGEgc3RyaW5nLCBhbmQKKyAqIGEgdW5pcXVlIHByZWZpeCAoaWYgYW55KSBpcyBkZXRlcm1pbmVkIGZvciBlYWNoIGl0ZW0uCisgKgorICogSXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZvcm0gb2YgYSBwYWlyIG9mIGBzdHJpbmdfbGlzdGBzLCB0aGUgZmlyc3Qgb25lCisgKiBkdXBsaWNhdGluZyB0aGUgc3RyaW5ncywgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIHBvaW50aW5nIGF0IGEgc3RydWN0dXJlIHdob3NlCisgKiBmaXJzdCBmaWVsZCBtdXN0IGJlIGBzaXplX3QgcHJlZml4X2xlbmd0aGAuCisgKgorICogVGhhdCBgcHJlZml4X2xlbmd0aGAgZmllbGQgd2lsbCBiZSBjb21wdXRlZCBieSBgZmluZF91bmlxdWVfcHJlZml4ZXMoKWA7IEl0CisgKiB3aWxsIGJlIHNldCB0byB6ZXJvIGlmIG5vIHZhbGlkLCB1bmlxdWUgcHJlZml4IGNvdWxkIGJlIGZvdW5kLgorICoKKyAqIFRoZSBzZWNvbmQgYHN0cmluZ19saXN0YCBpcyBjYWxsZWQgYHNvcnRlZGAgYW5kIGRvZXMgX25vdF8gZHVwbGljYXRlIHRoZQorICogc3RyaW5ncyBidXQgc2ltcGx5IHJldXNlcyB0aGUgZmlyc3Qgb25lJ3MsIHdpdGggdGhlIGB1dGlsYCBmaWVsZCBwb2ludGluZyBhdAorICogdGhlIGBzdHJpbmdfaXRlbV9saXN0YCBvZiB0aGUgZmlyc3QgYHN0cmluZ19saXN0YC4gSXQgIHdpbGwgYmUgcG9wdWxhdGVkIGFuZAorICogc29ydGVkIGJ5IGBmaW5kX3VuaXF1ZV9wcmVmaXhlcygpYC4KKyAqLworc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgeworCXN0cnVjdCBzdHJpbmdfbGlzdCBpdGVtczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc29ydGVkOworCWludCAqc2VsZWN0ZWQ7IC8qIGZvciBtdWx0aS1zZWxlY3Rpb25zICovCisJc2l6ZV90IG1pbl9sZW5ndGgsIG1heF9sZW5ndGg7Cit9OworI2RlZmluZSBQUkVGSVhfSVRFTV9MSVNUX0lOSVQgXAorCXsgU1RSSU5HX0xJU1RfSU5JVF9EVVAsIFNUUklOR19MSVNUX0lOSVRfTk9EVVAsIE5VTEwsIDEsIDQgfQorCitzdGF0aWMgdm9pZCBwcmVmaXhfaXRlbV9saXN0X2NsZWFyKHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpsaXN0KQoreworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LT5pdGVtcywgMSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QtPnNvcnRlZCwgMCk7CisJRlJFRV9BTkRfTlVMTChsaXN0LT5zZWxlY3RlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4dGVuZF9wcmVmaXhfbGVuZ3RoKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwLAorCQkJCSBjb25zdCBjaGFyICpvdGhlcl9zdHJpbmcsIHNpemVfdCBtYXhfbGVuZ3RoKQoreworCXNpemVfdCAqbGVuID0gcC0+dXRpbDsKKworCWlmICghKmxlbiB8fCBtZW1jbXAocC0+c3RyaW5nLCBvdGhlcl9zdHJpbmcsICpsZW4pKQorCQlyZXR1cm47CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9IHAtPnN0cmluZ1sqbGVuXTsKKworCQkvKgorCQkgKiBJcyBgcGAgYSBzdHJpY3QgcHJlZml4IG9mIGBvdGhlcmA/IE9yIGhhdmUgd2UgZXhoYXVzdGVkIHRoZQorCQkgKiBtYXhpbWFsIGxlbmd0aCBvZiB0aGUgcHJlZml4PyBPciBpcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYQorCQkgKiBtdWx0aS1ieXRlIFVURi04IG9uZT8gSWYgc28sIHRoZXJlIGlzIG5vIHZhbGlkLCB1bmlxdWUKKwkJICogcHJlZml4LgorCQkgKi8KKwkJaWYgKCFjIHx8ICsrKmxlbiA+IG1heF9sZW5ndGggfHwgIWlzYXNjaWkoYykpIHsKKwkJCSpsZW4gPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyAhPSBvdGhlcl9zdHJpbmdbKmxlbiAtIDFdKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3VuaXF1ZV9wcmVmaXhlcyhzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqbGlzdCkKK3sKKwlzaXplX3QgaTsKKworCWlmIChsaXN0LT5zb3J0ZWQubnIgPT0gbGlzdC0+aXRlbXMubnIpCisJCXJldHVybjsKKworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LT5zb3J0ZWQsIDApOworCS8qIEF2b2lkIHJlYWxsb2NhdGluZyBpbmNyZW1lbnRhbGx5ICovCisJbGlzdC0+c29ydGVkLml0ZW1zID0geG1hbGxvYyhzdF9tdWx0KHNpemVvZigqbGlzdC0+c29ydGVkLml0ZW1zKSwKKwkJCQkJICAgICBsaXN0LT5pdGVtcy5ucikpOworCWxpc3QtPnNvcnRlZC5uciA9IGxpc3QtPnNvcnRlZC5hbGxvYyA9IGxpc3QtPml0ZW1zLm5yOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPml0ZW1zLm5yOyBpKyspIHsKKwkJbGlzdC0+c29ydGVkLml0ZW1zW2ldLnN0cmluZyA9IGxpc3QtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJbGlzdC0+c29ydGVkLml0ZW1zW2ldLnV0aWwgPSBsaXN0LT5pdGVtcy5pdGVtcyArIGk7CisJfQorCisJc3RyaW5nX2xpc3Rfc29ydCgmbGlzdC0+c29ydGVkKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5zb3J0ZWQubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc29ydGVkX2l0ZW0gPSBsaXN0LT5zb3J0ZWQuaXRlbXMgKyBpOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHNvcnRlZF9pdGVtLT51dGlsOworCQlzaXplX3QgKmxlbiA9IGl0ZW0tPnV0aWw7CisKKwkJKmxlbiA9IDA7CisJCXdoaWxlICgqbGVuIDwgbGlzdC0+bWluX2xlbmd0aCkgeworCQkJY2hhciBjID0gaXRlbS0+c3RyaW5nWygqbGVuKSsrXTsKKworCQkJaWYgKCFjIHx8ICFpc2FzY2lpKGMpKSB7CisJCQkJKmxlbiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaSA+IDApCisJCQlleHRlbmRfcHJlZml4X2xlbmd0aChpdGVtLCBzb3J0ZWRfaXRlbVstMV0uc3RyaW5nLAorCQkJCQkgICAgIGxpc3QtPm1heF9sZW5ndGgpOworCQlpZiAoaSArIDEgPCBsaXN0LT5zb3J0ZWQubnIpCisJCQlleHRlbmRfcHJlZml4X2xlbmd0aChpdGVtLCBzb3J0ZWRfaXRlbVsxXS5zdHJpbmcsCisJCQkJCSAgICAgbGlzdC0+bWF4X2xlbmd0aCk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBmaW5kX3VuaXF1ZShjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpsaXN0KQoreworCWludCBpbmRleCA9IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KCZsaXN0LT5zb3J0ZWQsIHN0cmluZywgMSk7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAobGlzdC0+aXRlbXMubnIgIT0gbGlzdC0+c29ydGVkLm5yKQorCQlCVUcoInByZWZpeF9pdGVtX2xpc3QgaW4gaW5jb25zaXN0ZW50IHN0YXRlICglIlBSSXVNQVgKKwkJICAgICIgdnMgJSJQUkl1TUFYIikiLAorCQkgICAgKHVpbnRtYXhfdClsaXN0LT5pdGVtcy5uciwgKHVpbnRtYXhfdClsaXN0LT5zb3J0ZWQubnIpOworCisJaWYgKGluZGV4IDwgMCkKKwkJaXRlbSA9IGxpc3QtPnNvcnRlZC5pdGVtc1stMSAtIGluZGV4XS51dGlsOworCWVsc2UgaWYgKGluZGV4ID4gMCAmJgorCQkgc3RhcnRzX3dpdGgobGlzdC0+c29ydGVkLml0ZW1zW2luZGV4IC0gMV0uc3RyaW5nLCBzdHJpbmcpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoaW5kZXggKyAxIDwgbGlzdC0+c29ydGVkLm5yICYmCisJCSBzdGFydHNfd2l0aChsaXN0LT5zb3J0ZWQuaXRlbXNbaW5kZXggKyAxXS5zdHJpbmcsIHN0cmluZykpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChpbmRleCA8IGxpc3QtPnNvcnRlZC5ucikKKwkJaXRlbSA9IGxpc3QtPnNvcnRlZC5pdGVtc1tpbmRleF0udXRpbDsKKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaXRlbSAtIGxpc3QtPml0ZW1zLml0ZW1zOworfQorCitzdHJ1Y3QgbGlzdF9vcHRpb25zIHsKKwlpbnQgY29sdW1uczsKKwljb25zdCBjaGFyICpoZWFkZXI7CisJdm9pZCAoKnByaW50X2l0ZW0pKGludCBpLCBpbnQgc2VsZWN0ZWQsIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJICAgdm9pZCAqcHJpbnRfaXRlbV9kYXRhKTsKKwl2b2lkICpwcmludF9pdGVtX2RhdGE7Cit9OworCitzdGF0aWMgdm9pZCBsaXN0KHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgKnNlbGVjdGVkLAorCQkgc3RydWN0IGxpc3Rfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgaSwgbGFzdF9sZiA9IDA7CisKKwlpZiAoIWxpc3QtPm5yKQorCQlyZXR1cm47CisKKwlpZiAob3B0cy0+aGVhZGVyKQorCQljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVhZGVyX2NvbG9yLAorCQkJCSAiJXMiLCBvcHRzLT5oZWFkZXIpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJb3B0cy0+cHJpbnRfaXRlbShpLCBzZWxlY3RlZCA/IHNlbGVjdGVkW2ldIDogMCwgbGlzdC0+aXRlbXMgKyBpLAorCQkJCSBvcHRzLT5wcmludF9pdGVtX2RhdGEpOworCisJCWlmICgob3B0cy0+Y29sdW1ucykgJiYgKChpICsgMSkgJSAob3B0cy0+Y29sdW1ucykpKSB7CisJCQlwdXRjaGFyKCdcdCcpOworCQkJbGFzdF9sZiA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQlwdXRjaGFyKCdcbicpOworCQkJbGFzdF9sZiA9IDE7CisJCX0KKwl9CisKKwlpZiAoIWxhc3RfbGYpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CitzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgeworCXN0cnVjdCBsaXN0X29wdGlvbnMgbGlzdF9vcHRzOworCisJY29uc3QgY2hhciAqcHJvbXB0OworCWVudW0geworCQlTSU5HTEVUT04gPSAoMTw8MCksCisJCUlNTUVESUFURSA9ICgxPDwxKSwKKwl9IGZsYWdzOworCXZvaWQgKCpwcmludF9oZWxwKShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpOworfTsKKworI2RlZmluZSBMSVNUX0FORF9DSE9PU0VfRVJST1IgKC0xKQorI2RlZmluZSBMSVNUX0FORF9DSE9PU0VfUVVJVCAgKC0yKQorCisvKgorICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgaW5kZXggaW4gc2luZ2xldG9uIG1vZGUsIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMKKyAqIG90aGVyd2lzZS4KKyAqCisgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgcmV0dXJucyBgTElTVF9BTkRfQ0hPT1NFX0VSUk9SYC4gVXBvbiBFT0YsCisgKiBgTElTVF9BTkRfQ0hPT1NFX1FVSVRgIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgc3NpemVfdCBsaXN0X2FuZF9jaG9vc2Uoc3RydWN0IGFkZF9pX3N0YXRlICpzLAorCQkJICAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICppdGVtcywKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHNpbmdsZXRvbiA9IG9wdHMtPmZsYWdzICYgU0lOR0xFVE9OOworCWludCBpbW1lZGlhdGUgPSBvcHRzLT5mbGFncyAmIElNTUVESUFURTsKKworCXN0cnVjdCBzdHJidWYgaW5wdXQgPSBTVFJCVUZfSU5JVDsKKwlzc2l6ZV90IHJlcyA9IHNpbmdsZXRvbiA/IExJU1RfQU5EX0NIT09TRV9FUlJPUiA6IDA7CisKKwlpZiAoIXNpbmdsZXRvbikgeworCQlmcmVlKGl0ZW1zLT5zZWxlY3RlZCk7CisJCUNBTExPQ19BUlJBWShpdGVtcy0+c2VsZWN0ZWQsIGl0ZW1zLT5pdGVtcy5ucik7CisJfQorCisJaWYgKHNpbmdsZXRvbiAmJiAhaW1tZWRpYXRlKQorCQlCVUcoInNpbmdsZXRvbiByZXF1aXJlcyBpbW1lZGlhdGUiKTsKKworCWZpbmRfdW5pcXVlX3ByZWZpeGVzKGl0ZW1zKTsKKworCWZvciAoOzspIHsKKwkJY2hhciAqcDsKKworCQlzdHJidWZfcmVzZXQoJmlucHV0KTsKKworCQlsaXN0KHMsICZpdGVtcy0+aXRlbXMsIGl0ZW1zLT5zZWxlY3RlZCwgJm9wdHMtPmxpc3Rfb3B0cyk7CisKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnByb21wdF9jb2xvciwgIiVzIiwgb3B0cy0+cHJvbXB0KTsKKwkJZnB1dHMoc2luZ2xldG9uID8gIj4gIiA6ICI+PiAiLCBzdGRvdXQpOworCQlmZmx1c2goc3Rkb3V0KTsKKworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmlucHV0LCBzdGRpbikgPT0gRU9GKSB7CisJCQlwdXRjaGFyKCdcbicpOworCQkJaWYgKGltbWVkaWF0ZSkKKwkJCQlyZXMgPSBMSVNUX0FORF9DSE9PU0VfUVVJVDsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl90cmltKCZpbnB1dCk7CisKKwkJaWYgKCFpbnB1dC5sZW4pCisJCQlicmVhazsKKworCQlpZiAoIXN0cmNtcChpbnB1dC5idWYsICI/IikpIHsKKwkJCW9wdHMtPnByaW50X2hlbHAocyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXAgPSBpbnB1dC5idWY7CisJCWZvciAoOzspIHsKKwkJCXNpemVfdCBzZXAgPSBzdHJjc3BuKHAsICIgXHRcclxuLCIpOworCQkJaW50IGNob29zZSA9IDE7CisJCQkvKiBgZnJvbWAgaXMgaW5jbHVzaXZlLCBgdG9gIGlzIGV4Y2x1c2l2ZSAqLworCQkJc3NpemVfdCBmcm9tID0gLTEsIHRvID0gLTE7CisKKwkJCWlmICghc2VwKSB7CisJCQkJaWYgKCEqcCkKKwkJCQkJYnJlYWs7CisJCQkJcCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBJbnB1dCB0aGF0IGJlZ2lucyB3aXRoICctJzsgZGUtc2VsZWN0ICovCisJCQlpZiAoKnAgPT0gJy0nKSB7CisJCQkJY2hvb3NlID0gMDsKKwkJCQlwKys7CisJCQkJc2VwLS07CisJCQl9CisKKwkJCWlmIChzZXAgPT0gMSAmJiAqcCA9PSAnKicpIHsKKwkJCQlmcm9tID0gMDsKKwkJCQl0byA9IGl0ZW1zLT5pdGVtcy5ucjsKKwkJCX0gZWxzZSBpZiAoaXNkaWdpdCgqcCkpIHsKKwkJCQljaGFyICplbmRwOworCQkJCS8qCisJCQkJICogQSByYW5nZSBjYW4gYmUgc3BlY2lmaWVkIGxpa2UgNS03IG9yIDUtLgorCQkJCSAqCisJCQkJICogTm90ZTogYGZyb21gIGlzIDAtYmFzZWQgd2hpbGUgdGhlIHVzZXIgaW5wdXQKKwkJCQkgKiBpcyAxLWJhc2VkLCBoZW5jZSB3ZSBoYXZlIHRvIGRlY3JlbWVudCBieQorCQkJCSAqIG9uZS4gV2UgZG8gbm90IGhhdmUgdG8gZGVjcmVtZW50IGB0b2AgZXZlbgorCQkJCSAqIGlmIGl0IGlzIDAtYmFzZWQgYmVjYXVzZSBpdCBpcyBhbiBleGNsdXNpdmUKKwkJCQkgKiBib3VuZGFyeS4KKwkJCQkgKi8KKwkJCQlmcm9tID0gc3RydG91bChwLCAmZW5kcCwgMTApIC0gMTsKKwkJCQlpZiAoZW5kcCA9PSBwICsgc2VwKQorCQkJCQl0byA9IGZyb20gKyAxOworCQkJCWVsc2UgaWYgKCplbmRwID09ICctJykgeworCQkJCQl0byA9IHN0cnRvdWwoKytlbmRwLCAmZW5kcCwgMTApOworCQkJCQkvKiBleHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSByYW5nZT8gKi8KKwkJCQkJaWYgKGVuZHAgIT0gcCArIHNlcCkKKwkJCQkJCWZyb20gPSAtMTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChwW3NlcF0pCisJCQkJcFtzZXArK10gPSAnXDAnOworCQkJaWYgKGZyb20gPCAwKSB7CisJCQkJZnJvbSA9IGZpbmRfdW5pcXVlKHAsIGl0ZW1zKTsKKwkJCQlpZiAoZnJvbSA+PSAwKQorCQkJCQl0byA9IGZyb20gKyAxOworCQkJfQorCisJCQlpZiAoZnJvbSA8IDAgfHwgZnJvbSA+PSBpdGVtcy0+aXRlbXMubnIgfHwKKwkJCSAgICAoc2luZ2xldG9uICYmIGZyb20gKyAxICE9IHRvKSkgeworCQkJCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5lcnJvcl9jb2xvciwKKwkJCQkJCSBfKCJIdWggKCVzKT8iKSwgcCk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKHNpbmdsZXRvbikgeworCQkJCXJlcyA9IGZyb207CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh0byA+IGl0ZW1zLT5pdGVtcy5ucikKKwkJCQl0byA9IGl0ZW1zLT5pdGVtcy5ucjsKKworCQkJZm9yICg7IGZyb20gPCB0bzsgZnJvbSsrKQorCQkJCWlmIChpdGVtcy0+c2VsZWN0ZWRbZnJvbV0gIT0gY2hvb3NlKSB7CisJCQkJCWl0ZW1zLT5zZWxlY3RlZFtmcm9tXSA9IGNob29zZTsKKwkJCQkJcmVzICs9IGNob29zZSA/ICsxIDogLTE7CisJCQkJfQorCisJCQlwICs9IHNlcDsKKwkJfQorCisJCWlmICgoaW1tZWRpYXRlICYmIHJlcyAhPSBMSVNUX0FORF9DSE9PU0VfRVJST1IpIHx8CisJCSAgICAhc3RyY21wKGlucHV0LmJ1ZiwgIioiKSkKKwkJCWJyZWFrOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZpbnB1dCk7CisJcmV0dXJuIHJlczsKK30KKworc3RydWN0IGFkZGRlbCB7CisJdWludG1heF90IGFkZCwgZGVsOworCXVuc2lnbmVkIHNlZW46MSwgdW5tZXJnZWQ6MSwgYmluYXJ5OjE7Cit9OworCitzdHJ1Y3QgZmlsZV9pdGVtIHsKKwlzaXplX3QgcHJlZml4X2xlbmd0aDsKKwlzdHJ1Y3QgYWRkZGVsIGluZGV4LCB3b3JrdHJlZTsKK307CisKK3N0YXRpYyB2b2lkIGFkZF9maWxlX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0ICpmaWxlcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZV9pdGVtICppdGVtID0geGNhbGxvYyhzaXplb2YoKml0ZW0pLCAxKTsKKworCXN0cmluZ19saXN0X2FwcGVuZChmaWxlcywgbmFtZSktPnV0aWwgPSBpdGVtOworfQorCitzdHJ1Y3QgcGF0aG5hbWVfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBmaWxlX2l0ZW0gKml0ZW07Cit9OworCitzdGF0aWMgaW50IHBhdGhuYW1lX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGUxLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmhlMiwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5ICplMSA9CisJCWNvbnRhaW5lcl9vZihoZTEsIGNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKwljb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnkgKmUyID0KKwkJY29udGFpbmVyX29mKGhlMiwgY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChlMS0+bmFtZSwgbmFtZSA/IChjb25zdCBjaGFyICopbmFtZSA6IGUyLT5uYW1lKTsKK30KKworc3RydWN0IGNvbGxlY3Rpb25fc3RhdHVzIHsKKwllbnVtIHsgRlJPTV9XT1JLVFJFRSA9IDAsIEZST01fSU5ERVggPSAxIH0gbW9kZTsKKworCWNvbnN0IGNoYXIgKnJlZmVyZW5jZTsKKworCXVuc2lnbmVkIHNraXBfdW5zZWVuOjE7CisJc2l6ZV90IHVubWVyZ2VkX2NvdW50LCBiaW5hcnlfY291bnQ7CisJc3RydWN0IHN0cmluZ19saXN0ICpmaWxlczsKKwlzdHJ1Y3QgaGFzaG1hcCBmaWxlX21hcDsKK307CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RfY2hhbmdlc19jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyAqcyA9IGRhdGE7CisJc3RydWN0IGRpZmZzdGF0X3Qgc3RhdCA9IHsgMCB9OworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCisJY29tcHV0ZV9kaWZmc3RhdChvcHRpb25zLCAmc3RhdCwgcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBzdGF0LmZpbGVzW2ldLT5uYW1lOworCQlpbnQgaGFzaCA9IHN0cmhhc2gobmFtZSk7CisJCXN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCBmaWxlX2l0ZW0gKmZpbGVfaXRlbTsKKwkJc3RydWN0IGFkZGRlbCAqYWRkZGVsLCAqb3RoZXJfYWRkZGVsOworCisJCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZzLT5maWxlX21hcCwgaGFzaCwgbmFtZSwKKwkJCQkJCSAgICBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisJCWlmICghZW50cnkpIHsKKwkJCWlmIChzLT5za2lwX3Vuc2VlbikKKwkJCQljb250aW51ZTsKKworCQkJYWRkX2ZpbGVfaXRlbShzLT5maWxlcywgbmFtZSk7CisKKwkJCWVudHJ5ID0geGNhbGxvYyhzaXplb2YoKmVudHJ5KSwgMSk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnQsIGhhc2gpOworCQkJZW50cnktPm5hbWUgPSBzLT5maWxlcy0+aXRlbXNbcy0+ZmlsZXMtPm5yIC0gMV0uc3RyaW5nOworCQkJZW50cnktPml0ZW0gPSBzLT5maWxlcy0+aXRlbXNbcy0+ZmlsZXMtPm5yIC0gMV0udXRpbDsKKwkJCWhhc2htYXBfYWRkKCZzLT5maWxlX21hcCwgJmVudHJ5LT5lbnQpOworCQl9CisKKwkJZmlsZV9pdGVtID0gZW50cnktPml0ZW07CisJCWFkZGRlbCA9IHMtPm1vZGUgPT0gRlJPTV9JTkRFWCA/CisJCQkmZmlsZV9pdGVtLT5pbmRleCA6ICZmaWxlX2l0ZW0tPndvcmt0cmVlOworCQlvdGhlcl9hZGRkZWwgPSBzLT5tb2RlID09IEZST01fSU5ERVggPworCQkJJmZpbGVfaXRlbS0+d29ya3RyZWUgOiAmZmlsZV9pdGVtLT5pbmRleDsKKwkJYWRkZGVsLT5zZWVuID0gMTsKKwkJYWRkZGVsLT5hZGQgPSBzdGF0LmZpbGVzW2ldLT5hZGRlZDsKKwkJYWRkZGVsLT5kZWwgPSBzdGF0LmZpbGVzW2ldLT5kZWxldGVkOworCQlpZiAoc3RhdC5maWxlc1tpXS0+aXNfYmluYXJ5KSB7CisJCQlpZiAoIW90aGVyX2FkZGRlbC0+YmluYXJ5KQorCQkJCXMtPmJpbmFyeV9jb3VudCsrOworCQkJYWRkZGVsLT5iaW5hcnkgPSAxOworCQl9CisJCWlmIChzdGF0LmZpbGVzW2ldLT5pc191bm1lcmdlZCkgeworCQkJaWYgKCFvdGhlcl9hZGRkZWwtPnVubWVyZ2VkKQorCQkJCXMtPnVubWVyZ2VkX2NvdW50Kys7CisJCQlhZGRkZWwtPnVubWVyZ2VkID0gMTsKKwkJfQorCX0KKwlmcmVlX2RpZmZzdGF0X2luZm8oJnN0YXQpOworfQorCitlbnVtIG1vZGlmaWVkX2ZpbGVzX2ZpbHRlciB7CisJTk9fRklMVEVSID0gMCwKKwlXT1JLVFJFRV9PTkxZID0gMSwKKwlJTkRFWF9PTkxZID0gMiwKK307CisKK3N0YXRpYyBpbnQgZ2V0X21vZGlmaWVkX2ZpbGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgZW51bSBtb2RpZmllZF9maWxlc19maWx0ZXIgZmlsdGVyLAorCQkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSAgICAgIHNpemVfdCAqdW5tZXJnZWRfY291bnQsCisJCQkgICAgICBzaXplX3QgKmJpbmFyeV9jb3VudCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCWludCBpc19pbml0aWFsID0gIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICAgJmhlYWRfb2lkLCBOVUxMKTsKKwlzdHJ1Y3QgY29sbGVjdGlvbl9zdGF0dXMgcyA9IHsgMCB9OworCWludCBpOworCisJaWYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fAorCSAgICByZXBvX3JlYWRfaW5kZXhfcHJlbG9hZChyLCBwcywgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisKKwlwcmVmaXhfaXRlbV9saXN0X2NsZWFyKGZpbGVzKTsKKwlzLmZpbGVzID0gJmZpbGVzLT5pdGVtczsKKwloYXNobWFwX2luaXQoJnMuZmlsZV9tYXAsIHBhdGhuYW1lX2VudHJ5X2NtcCwgTlVMTCwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCByZXZfaW5mbyByZXY7CisJCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0ID0geyAwIH07CisKKwkJaWYgKGZpbHRlciA9PSBJTkRFWF9PTkxZKQorCQkJcy5tb2RlID0gKGkgPT0gMCkgPyBGUk9NX0lOREVYIDogRlJPTV9XT1JLVFJFRTsKKwkJZWxzZQorCQkJcy5tb2RlID0gKGkgPT0gMCkgPyBGUk9NX1dPUktUUkVFIDogRlJPTV9JTkRFWDsKKwkJcy5za2lwX3Vuc2VlbiA9IGZpbHRlciAmJiBpOworCisJCW9wdC5kZWYgPSBpc19pbml0aWFsID8KKwkJCWVtcHR5X3RyZWVfb2lkX2hleCgpIDogb2lkX3RvX2hleCgmaGVhZF9vaWQpOworCisJCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCQlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOworCQlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBjb2xsZWN0X2NoYW5nZXNfY2I7CisJCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJnM7CisKKwkJaWYgKHBzKQorCQkJY29weV9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsIHBzKTsKKworCQlpZiAocy5tb2RlID09IEZST01fSU5ERVgpCisJCQlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKKwkJZWxzZSB7CisJCQlyZXYuZGlmZm9wdC5mbGFncy5pZ25vcmVfZGlydHlfc3VibW9kdWxlcyA9IDE7CisJCQlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKKwkJfQorCisJCWlmIChwcykKKwkJCWNsZWFyX3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSk7CisJfQorCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZzLmZpbGVfbWFwLCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisJaWYgKHVubWVyZ2VkX2NvdW50KQorCQkqdW5tZXJnZWRfY291bnQgPSBzLnVubWVyZ2VkX2NvdW50OworCWlmIChiaW5hcnlfY291bnQpCisJCSpiaW5hcnlfY291bnQgPSBzLmJpbmFyeV9jb3VudDsKKworCS8qIFdoaWxlIHRoZSBkaWZmcyBhcmUgb3JkZXJlZCBhbHJlYWR5LCB3ZSByYW4gKnR3byogZGlmZnMuLi4gKi8KKwlzdHJpbmdfbGlzdF9zb3J0KCZmaWxlcy0+aXRlbXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlcl9hZGRkZWwoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJCXN0cnVjdCBhZGRkZWwgKmFkLCBjb25zdCBjaGFyICpub19jaGFuZ2VzKQoreworCWlmIChhZC0+YmluYXJ5KQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgXygiYmluYXJ5IikpOworCWVsc2UgaWYgKGFkLT5zZWVuKQorCQlzdHJidWZfYWRkZihidWYsICIrJSJQUkl1TUFYIi8tJSJQUkl1TUFYLAorCQkJICAgICh1aW50bWF4X3QpYWQtPmFkZCwgKHVpbnRtYXhfdClhZC0+ZGVsKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBub19jaGFuZ2VzKTsKK30KKworLyogZmlsdGVycyBvdXQgcHJlZml4ZXMgd2hpY2ggaGF2ZSBzcGVjaWFsIG1lYW5pbmcgdG8gbGlzdF9hbmRfY2hvb3NlKCkgKi8KK3N0YXRpYyBpbnQgaXNfdmFsaWRfcHJlZml4KGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4pCit7CisJcmV0dXJuIHByZWZpeF9sZW4gJiYgcHJlZml4ICYmCisJCS8qCisJCSAqIFdlIGV4cGVjdCBgcHJlZml4YCB0byBiZSBOVUwgdGVybWluYXRlZCwgdGhlcmVmb3JlIHRoaXMKKwkJICogYHN0cmNzcG4oKWAgY2FsbCBpcyBva2F5LCBldmVuIGlmIGl0IG1pZ2h0IGRvIG11Y2ggbW9yZQorCQkgKiB3b3JrIHRoYW4gc3RyaWN0bHkgbmVjZXNzYXJ5LgorCQkgKi8KKwkJc3RyY3NwbihwcmVmaXgsICIgXHRcclxuLCIpID49IHByZWZpeF9sZW4gJiYJLyogc2VwYXJhdG9ycyAqLworCQkqcHJlZml4ICE9ICctJyAmJgkJCQkvKiBkZXNlbGVjdGlvbiAqLworCQkhaXNkaWdpdCgqcHJlZml4KSAmJgkJCQkvKiBzZWxlY3Rpb24gKi8KKwkJKHByZWZpeF9sZW4gIT0gMSB8fAorCQkgKCpwcmVmaXggIT0gJyonICYmCQkJCS8qICJhbGwiIHdpbGRjYXJkICovCisJCSAgKnByZWZpeCAhPSAnPycpKTsJCQkJLyogcHJvbXB0IGhlbHAgKi8KK30KKworc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhIHsKKwljb25zdCBjaGFyICptb2RpZmllZF9mbXQsICpjb2xvciwgKnJlc2V0OworCXN0cnVjdCBzdHJidWYgYnVmLCBuYW1lLCBpbmRleCwgd29ya3RyZWU7CisJdW5zaWduZWQgb25seV9uYW1lczoxOworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9pdGVtKGludCBpLCBpbnQgc2VsZWN0ZWQsIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJICAgIHZvaWQgKnByaW50X2ZpbGVfaXRlbV9kYXRhKQoreworCXN0cnVjdCBmaWxlX2l0ZW0gKmMgPSBpdGVtLT51dGlsOworCXN0cnVjdCBwcmludF9maWxlX2l0ZW1fZGF0YSAqZCA9IHByaW50X2ZpbGVfaXRlbV9kYXRhOworCWNvbnN0IGNoYXIgKmhpZ2hsaWdodGVkID0gTlVMTDsKKworCXN0cmJ1Zl9yZXNldCgmZC0+aW5kZXgpOworCXN0cmJ1Zl9yZXNldCgmZC0+d29ya3RyZWUpOworCXN0cmJ1Zl9yZXNldCgmZC0+YnVmKTsKKworCS8qIEZvcm1hdCB0aGUgaXRlbSB3aXRoIHRoZSBwcmVmaXggaGlnaGxpZ2h0ZWQuICovCisJaWYgKGMtPnByZWZpeF9sZW5ndGggPiAwICYmCisJICAgIGlzX3ZhbGlkX3ByZWZpeChpdGVtLT5zdHJpbmcsIGMtPnByZWZpeF9sZW5ndGgpKSB7CisJCXN0cmJ1Zl9yZXNldCgmZC0+bmFtZSk7CisJCXN0cmJ1Zl9hZGRmKCZkLT5uYW1lLCAiJXMlLipzJXMlcyIsIGQtPmNvbG9yLAorCQkJICAgIChpbnQpYy0+cHJlZml4X2xlbmd0aCwgaXRlbS0+c3RyaW5nLCBkLT5yZXNldCwKKwkJCSAgICBpdGVtLT5zdHJpbmcgKyBjLT5wcmVmaXhfbGVuZ3RoKTsKKwkJaGlnaGxpZ2h0ZWQgPSBkLT5uYW1lLmJ1ZjsKKwl9CisKKwlpZiAoZC0+b25seV9uYW1lcykgeworCQlwcmludGYoIiVjJTJkOiAlcyIsIHNlbGVjdGVkID8gJyonIDogJyAnLCBpICsgMSwKKwkJICAgICAgIGhpZ2hsaWdodGVkID8gaGlnaGxpZ2h0ZWQgOiBpdGVtLT5zdHJpbmcpOworCQlyZXR1cm47CisJfQorCisJcmVuZGVyX2FkZGRlbCgmZC0+d29ya3RyZWUsICZjLT53b3JrdHJlZSwgXygibm90aGluZyIpKTsKKwlyZW5kZXJfYWRkZGVsKCZkLT5pbmRleCwgJmMtPmluZGV4LCBfKCJ1bmNoYW5nZWQiKSk7CisKKwlzdHJidWZfYWRkZigmZC0+YnVmLCBkLT5tb2RpZmllZF9mbXQsIGQtPmluZGV4LmJ1ZiwgZC0+d29ya3RyZWUuYnVmLAorCQkgICAgaGlnaGxpZ2h0ZWQgPyBoaWdobGlnaHRlZCA6IGl0ZW0tPnN0cmluZyk7CisKKwlwcmludGYoIiVjJTJkOiAlcyIsIHNlbGVjdGVkID8gJyonIDogJyAnLCBpICsgMSwgZC0+YnVmLmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3N0YXR1cyhzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWlmIChnZXRfbW9kaWZpZWRfZmlsZXMocy0+ciwgTk9fRklMVEVSLCBmaWxlcywgcHMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJbGlzdChzLCAmZmlsZXMtPml0ZW1zLCBOVUxMLCAmb3B0cy0+bGlzdF9vcHRzKTsKKwlwdXRjaGFyKCdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3VwZGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWludCByZXMgPSAwLCBmZDsKKwlzaXplX3QgY291bnQsIGk7CisJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBXT1JLVFJFRV9PTkxZLCBmaWxlcywgcHMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIlVwZGF0ZSIpOworCWNvdW50ID0gbGlzdF9hbmRfY2hvb3NlKHMsIGZpbGVzLCBvcHRzKTsKKwlpZiAoY291bnQgPD0gMCkgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgocy0+ciwgJmluZGV4X2xvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0gJiYKKwkJICAgIGFkZF9maWxlX3RvX2luZGV4KHMtPnItPmluZGV4LCBuYW1lLCAwKSA8IDApIHsKKwkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBzdGFnZSAnJXMnIiksIG5hbWUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJlcyAmJiB3cml0ZV9sb2NrZWRfaW5kZXgocy0+ci0+aW5kZXgsICZpbmRleF9sb2NrLCBDT01NSVRfTE9DSykgPCAwKQorCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiKSk7CisKKwlpZiAoIXJlcykKKwkJcHJpbnRmKFFfKCJ1cGRhdGVkICVkIHBhdGhcbiIsCisJCQkgICJ1cGRhdGVkICVkIHBhdGhzXG4iLCBjb3VudCksIChpbnQpY291bnQpOworCisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCByZXZlcnRfZnJvbV9kaWZmKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCB2b2lkICpkYXRhKQoreworCWludCBpLCBhZGRfZmxhZ3MgPSBBRERfQ0FDSEVfT0tfVE9fQUREIHwgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0U7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcS0+cXVldWVbaV0tPm9uZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQlpZiAoIShvbmUtPm1vZGUgJiYgIWlzX251bGxfb2lkKCZvbmUtPm9pZCkpKSB7CisJCQlyZW1vdmVfZmlsZV9mcm9tX2luZGV4KG9wdC0+cmVwby0+aW5kZXgsIG9uZS0+cGF0aCk7CisJCQlwcmludGYoXygibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIpLCBvbmUtPnBhdGgpOworCQl9IGVsc2UgeworCQkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KG9wdC0+cmVwby0+aW5kZXgsIG9uZS0+bW9kZSwKKwkJCQkJICAgICAgJm9uZS0+b2lkLCBvbmUtPnBhdGgsIDAsIDApOworCQkJaWYgKCFjZSkKKwkJCQlkaWUoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLAorCQkJCSAgICBvbmUtPnBhdGgpOworCQkJYWRkX2luZGV4X2VudHJ5KG9wdC0+cmVwby0+aW5kZXgsIGNlLCBhZGRfZmxhZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHJ1bl9yZXZlcnQoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMCwgZmQ7CisJc2l6ZV90IGNvdW50LCBpLCBqOworCisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgJm9pZCwKKwkJCQkJICAgICBOVUxMKTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisJY29uc3QgY2hhciAqKnBhdGhzOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdCA9IHsgTlVMTCB9OworCisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBJTkRFWF9PTkxZLCBmaWxlcywgcHMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIlJldmVydCIpOworCWNvdW50ID0gbGlzdF9hbmRfY2hvb3NlKHMsIGZpbGVzLCBvcHRzKTsKKwlpZiAoY291bnQgPD0gMCkKKwkJZ290byBmaW5pc2hfcmV2ZXJ0OworCisJZmQgPSByZXBvX2hvbGRfbG9ja2VkX2luZGV4KHMtPnIsICZpbmRleF9sb2NrLCBMT0NLX1JFUE9SVF9PTl9FUlJPUik7CisJaWYgKGZkIDwgMCkgeworCQlyZXMgPSAtMTsKKwkJZ290byBmaW5pc2hfcmV2ZXJ0OworCX0KKworCWlmIChpc19pbml0aWFsKQorCQlvaWRjcHkoJm9pZCwgcy0+ci0+aGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKwllbHNlIHsKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJm9pZCk7CisJCWlmICghdHJlZSkgeworCQkJcmVzID0gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IikpOworCQkJZ290byBmaW5pc2hfcmV2ZXJ0OworCQl9CisJCW9pZGNweSgmb2lkLCAmdHJlZS0+b2JqZWN0Lm9pZCk7CisJfQorCisJQUxMT0NfQVJSQVkocGF0aHMsIGNvdW50ICsgMSk7CisJZm9yIChpID0gaiA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykKKwkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSkKKwkJCXBhdGhzW2orK10gPSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nOworCXBhdGhzW2pdID0gTlVMTDsKKworCXBhcnNlX3BhdGhzcGVjKCZkaWZmb3B0LnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfCBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsCisJCSAgICAgICBOVUxMLCBwYXRocyk7CisKKwlkaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlkaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHJldmVydF9mcm9tX2RpZmY7CisJZGlmZm9wdC5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnID0gMTsKKwlkaWZmb3B0LnJlcG8gPSBzLT5yOworCisJaWYgKGRvX2RpZmZfY2FjaGUoJm9pZCwgJmRpZmZvcHQpKQorCQlyZXMgPSAtMTsKKwllbHNlIHsKKwkJZGlmZmNvcmVfc3RkKCZkaWZmb3B0KTsKKwkJZGlmZl9mbHVzaCgmZGlmZm9wdCk7CisJfQorCWZyZWUocGF0aHMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmb3B0LnBhdGhzcGVjKTsKKworCWlmICghcmVzICYmIHdyaXRlX2xvY2tlZF9pbmRleChzLT5yLT5pbmRleCwgJmluZGV4X2xvY2ssCisJCQkJICAgICAgIENPTU1JVF9MT0NLKSA8IDApCisJCXJlcyA9IC0xOworCWVsc2UKKwkJcmVzID0gcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleChzLT5yLCBSRUZSRVNIX1FVSUVULCAwLCAxLAorCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlpZiAoIXJlcykKKwkJcHJpbnRmKFFfKCJyZXZlcnRlZCAlZCBwYXRoXG4iLAorCQkJICAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIsIGNvdW50KSwgKGludCljb3VudCk7CisKK2ZpbmlzaF9yZXZlcnQ6CisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGdldF91bnRyYWNrZWRfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyID0geyAwIH07CisJc2l6ZV90IGk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZXBvX3JlYWRfaW5kZXgocikgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisKKwlwcmVmaXhfaXRlbV9saXN0X2NsZWFyKGZpbGVzKTsKKwlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwlhZGRfcGF0dGVybl9saXN0KCZkaXIsIEVYQ19DTURMLCAiLS1leGNsdWRlIG9wdGlvbiIpOworCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHItPmluZGV4LCBwcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLmVudHJpZXNbaV07CisKKwkJaWYgKGluZGV4X25hbWVfaXNfb3RoZXIoci0+aW5kZXgsIGVudC0+bmFtZSwgZW50LT5sZW4pKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkKCZidWYsIGVudC0+bmFtZSwgZW50LT5sZW4pOworCQkJYWRkX2ZpbGVfaXRlbSgmZmlsZXMtPml0ZW1zLCBidWYuYnVmKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ1bl9hZGRfdW50cmFja2VkKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhICpkID0gb3B0cy0+bGlzdF9vcHRzLnByaW50X2l0ZW1fZGF0YTsKKwlpbnQgcmVzID0gMCwgZmQ7CisJc2l6ZV90IGNvdW50LCBpOworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKworCWlmIChnZXRfdW50cmFja2VkX2ZpbGVzKHMtPnIsIGZpbGVzLCBwcykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwcmludGYoXygiTm8gdW50cmFja2VkIGZpbGVzLlxuIikpOworCQlnb3RvIGZpbmlzaF9hZGRfdW50cmFja2VkOworCX0KKworCW9wdHMtPnByb21wdCA9IE5fKCJBZGQgdW50cmFja2VkIik7CisJZC0+b25seV9uYW1lcyA9IDE7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWQtPm9ubHlfbmFtZXMgPSAwOworCWlmIChjb3VudCA8PSAwKQorCQlnb3RvIGZpbmlzaF9hZGRfdW50cmFja2VkOworCisJZmQgPSByZXBvX2hvbGRfbG9ja2VkX2luZGV4KHMtPnIsICZpbmRleF9sb2NrLCBMT0NLX1JFUE9SVF9PTl9FUlJPUik7CisJaWYgKGZkIDwgMCkgeworCQlyZXMgPSAtMTsKKwkJZ290byBmaW5pc2hfYWRkX3VudHJhY2tlZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0gJiYKKwkJICAgIGFkZF9maWxlX3RvX2luZGV4KHMtPnItPmluZGV4LCBuYW1lLCAwKSA8IDApIHsKKwkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBzdGFnZSAnJXMnIiksIG5hbWUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJlcyAmJgorCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgocy0+ci0+aW5kZXgsICZpbmRleF9sb2NrLCBDT01NSVRfTE9DSykgPCAwKQorCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiKSk7CisKKwlpZiAoIXJlcykKKwkJcHJpbnRmKFFfKCJhZGRlZCAlZCBwYXRoXG4iLAorCQkJICAiYWRkZWQgJWQgcGF0aHNcbiIsIGNvdW50KSwgKGludCljb3VudCk7CisKK2ZpbmlzaF9hZGRfdW50cmFja2VkOgorCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydW5fcGF0Y2goc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDA7CisJc3NpemVfdCBjb3VudCwgaSwgajsKKwlzaXplX3QgdW5tZXJnZWRfY291bnQgPSAwLCBiaW5hcnlfY291bnQgPSAwOworCisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBXT1JLVFJFRV9PTkxZLCBmaWxlcywgcHMsCisJCQkgICAgICAgJnVubWVyZ2VkX2NvdW50LCAmYmluYXJ5X2NvdW50KSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICh1bm1lcmdlZF9jb3VudCB8fCBiaW5hcnlfY291bnQpIHsKKwkJZm9yIChpID0gaiA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykgeworCQkJc3RydWN0IGZpbGVfaXRlbSAqaXRlbSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXS51dGlsOworCisJCQlpZiAoaXRlbS0+aW5kZXguYmluYXJ5IHx8IGl0ZW0tPndvcmt0cmVlLmJpbmFyeSkgeworCQkJCWZyZWUoaXRlbSk7CisJCQkJZnJlZShmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCX0gZWxzZSBpZiAoaXRlbS0+aW5kZXgudW5tZXJnZWQgfHwKKwkJCQkgaXRlbS0+d29ya3RyZWUudW5tZXJnZWQpIHsKKwkJCQljb2xvcl9mcHJpbnRmX2xuKHN0ZGVyciwgcy0+ZXJyb3JfY29sb3IsCisJCQkJCQkgXygiaWdub3JpbmcgdW5tZXJnZWQ6ICVzIiksCisJCQkJCQkgZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCQkJZnJlZShpdGVtKTsKKwkJCQlmcmVlKGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJfSBlbHNlCisJCQkJZmlsZXMtPml0ZW1zLml0ZW1zW2orK10gPSBmaWxlcy0+aXRlbXMuaXRlbXNbaV07CisJCX0KKwkJZmlsZXMtPml0ZW1zLm5yID0gajsKKwl9CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlpZiAoYmluYXJ5X2NvdW50KQorCQkJZnByaW50ZihzdGRlcnIsIF8oIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJObyBjaGFuZ2VzLlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiUGF0Y2ggdXBkYXRlIik7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWlmIChjb3VudCA+PSAwKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCXN0cnVjdCBwYXRoc3BlYyBwc19zZWxlY3RlZCA9IHsgMCB9OworCisJCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykKKwkJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0pCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLAorCQkJCQkJZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCXBhcnNlX3BhdGhzcGVjKCZwc19zZWxlY3RlZCwKKwkJCSAgICAgICBQQVRIU1BFQ19BTExfTUFHSUMgJiB+UEFUSFNQRUNfTElURVJBTCwKKwkJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBhcmdzLmFyZ3YpOworCQlyZXMgPSBydW5fYWRkX3Aocy0+ciwgJnBzX3NlbGVjdGVkKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWNsZWFyX3BhdGhzcGVjKCZwc19zZWxlY3RlZCk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydW5fZGlmZihzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDA7CisJc3NpemVfdCBjb3VudCwgaTsKKworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBpc19pbml0aWFsID0gIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsCisJCQkJCSAgICAgTlVMTCk7CisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBJTkRFWF9PTkxZLCBmaWxlcywgcHMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIlJldmlldyBkaWZmIik7CisJb3B0cy0+ZmxhZ3MgPSBJTU1FRElBVEU7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCW9wdHMtPmZsYWdzID0gMDsKKwlpZiAoY291bnQgPj0gMCkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJnaXQiLCAiZGlmZiIsICItcCIsICItLWNhY2hlZCIsCisJCQkJIG9pZF90b19oZXgoIWlzX2luaXRpYWwgPyAmb2lkIDoKKwkJCQkJICAgIHMtPnItPmhhc2hfYWxnby0+ZW1wdHlfdHJlZSksCisJCQkJICItLSIsIE5VTEwpOworCQlmb3IgKGkgPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspCisJCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywKKwkJCQkJCWZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQlyZXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLmFyZ3YsIDApOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwl9CisKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2hlbHAoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnVudXNlZF9wcywKKwkJICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICp1bnVzZWRfZmlsZXMsCisJCSAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKnVudXNlZF9vcHRzKQoreworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAic3RhdHVzICAgICAgICAtICVzIiwKKwkJCSBfKCJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgInVwZGF0ZSAgICAgICAgLSAlcyIsCisJCQkgXygiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAicmV2ZXJ0ICAgICAgICAtICVzIiwKKwkJCSBfKCJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgInBhdGNoICAgICAgICAgLSAlcyIsCisJCQkgXygicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiZGlmZiAgICAgICAgICAtICVzIiwKKwkJCSBfKCJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgImFkZCB1bnRyYWNrZWQgLSAlcyIsCisJCQkgXygiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNob29zZV9wcm9tcHRfaGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpCit7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIlcyIsCisJCQkgXygiUHJvbXB0IGhlbHA6IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiMSAgICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgYSBzaW5nbGUgaXRlbSIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIjMtNSAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIyLTMsNi05ICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBtdWx0aXBsZSByYW5nZXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJmb28gICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICItLi4uICAgICAgIC0gJXMiLAorCQkJIF8oInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIiogICAgICAgICAgLSAlcyIsCisJCQkgXygiY2hvb3NlIGFsbCBpdGVtcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIiAgICAgICAgICAgLSAlcyIsCisJCQkgXygiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIikpOworfQorCit0eXBlZGVmIGludCAoKmNvbW1hbmRfdCkoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkJIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJCSBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpOworCitzdHJ1Y3QgY29tbWFuZF9pdGVtIHsKKwlzaXplX3QgcHJlZml4X2xlbmd0aDsKKwljb21tYW5kX3QgY29tbWFuZDsKK307CisKK3N0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSB7CisJY29uc3QgY2hhciAqY29sb3IsICpyZXNldDsKK307CisKK3N0YXRpYyB2b2lkIHByaW50X2NvbW1hbmRfaXRlbShpbnQgaSwgaW50IHNlbGVjdGVkLAorCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJICAgICAgIHZvaWQgKnByaW50X2NvbW1hbmRfaXRlbV9kYXRhKQoreworCXN0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSAqZCA9IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhOworCXN0cnVjdCBjb21tYW5kX2l0ZW0gKnV0aWwgPSBpdGVtLT51dGlsOworCisJaWYgKCF1dGlsLT5wcmVmaXhfbGVuZ3RoIHx8CisJICAgICFpc192YWxpZF9wcmVmaXgoaXRlbS0+c3RyaW5nLCB1dGlsLT5wcmVmaXhfbGVuZ3RoKSkKKwkJcHJpbnRmKCIgJTJkOiAlcyIsIGkgKyAxLCBpdGVtLT5zdHJpbmcpOworCWVsc2UKKwkJcHJpbnRmKCIgJTJkOiAlcyUuKnMlcyVzIiwgaSArIDEsCisJCSAgICAgICBkLT5jb2xvciwgKGludCl1dGlsLT5wcmVmaXhfbGVuZ3RoLCBpdGVtLT5zdHJpbmcsCisJCSAgICAgICBkLT5yZXNldCwgaXRlbS0+c3RyaW5nICsgdXRpbC0+cHJlZml4X2xlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1hbmRfcHJvbXB0X2hlbHAoc3RydWN0IGFkZF9pX3N0YXRlICpzKQoreworCWNvbnN0IGNoYXIgKmhlbHBfY29sb3IgPSBzLT5oZWxwX2NvbG9yOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBoZWxwX2NvbG9yLCAiJXMiLCBfKCJQcm9tcHQgaGVscDoiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICIxICAgICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICJmb28gICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICIgICAgICAgICAgIC0gJXMiLAorCQkJIF8oIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciKSk7Cit9CisKK2ludCBydW5fYWRkX2koc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJc3RydWN0IGFkZF9pX3N0YXRlIHMgPSB7IE5VTEwgfTsKKwlzdHJ1Y3QgcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEgZGF0YSA9IHsgIlsiLCAiXSIgfTsKKwlzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgbWFpbl9sb29wX29wdHMgPSB7CisJCXsgNCwgTl8oIioqKiBDb21tYW5kcyAqKioiKSwgcHJpbnRfY29tbWFuZF9pdGVtLCAmZGF0YSB9LAorCQlOXygiV2hhdCBub3ciKSwgU0lOR0xFVE9OIHwgSU1NRURJQVRFLCBjb21tYW5kX3Byb21wdF9oZWxwCisJfTsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICpzdHJpbmc7CisJCWNvbW1hbmRfdCBjb21tYW5kOworCX0gY29tbWFuZF9saXN0W10gPSB7CisJCXsgInN0YXR1cyIsIHJ1bl9zdGF0dXMgfSwKKwkJeyAidXBkYXRlIiwgcnVuX3VwZGF0ZSB9LAorCQl7ICJyZXZlcnQiLCBydW5fcmV2ZXJ0IH0sCisJCXsgImFkZCB1bnRyYWNrZWQiLCBydW5fYWRkX3VudHJhY2tlZCB9LAorCQl7ICJwYXRjaCIsIHJ1bl9wYXRjaCB9LAorCQl7ICJkaWZmIiwgcnVuX2RpZmYgfSwKKwkJeyAicXVpdCIsIE5VTEwgfSwKKwkJeyAiaGVscCIsIHJ1bl9oZWxwIH0sCisJfTsKKwlzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCBjb21tYW5kcyA9IFBSRUZJWF9JVEVNX0xJU1RfSU5JVDsKKworCXN0cnVjdCBwcmludF9maWxlX2l0ZW1fZGF0YSBwcmludF9maWxlX2l0ZW1fZGF0YSA9IHsKKwkJIiUxMnMgJTEycyAlcyIsIE5VTEwsIE5VTEwsCisJCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCisJfTsKKwlzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgb3B0cyA9IHsKKwkJeyAwLCBOVUxMLCBwcmludF9maWxlX2l0ZW0sICZwcmludF9maWxlX2l0ZW1fZGF0YSB9LAorCQlOVUxMLCAwLCBjaG9vc2VfcHJvbXB0X2hlbHAKKwl9OworCXN0cnVjdCBzdHJidWYgaGVhZGVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgZmlsZXMgPSBQUkVGSVhfSVRFTV9MSVNUX0lOSVQ7CisJc3NpemVfdCBpOworCWludCByZXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsgaSsrKSB7CisJCXN0cnVjdCBjb21tYW5kX2l0ZW0gKnV0aWwgPSB4Y2FsbG9jKHNpemVvZigqdXRpbCksIDEpOworCQl1dGlsLT5jb21tYW5kID0gY29tbWFuZF9saXN0W2ldLmNvbW1hbmQ7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmY29tbWFuZHMuaXRlbXMsIGNvbW1hbmRfbGlzdFtpXS5zdHJpbmcpCisJCQktPnV0aWwgPSB1dGlsOworCX0KKworCWluaXRfYWRkX2lfc3RhdGUoJnMsIHIpOworCisJLyoKKwkgKiBXaGVuIGNvbG9yIHdhcyBhc2tlZCBmb3IsIHVzZSB0aGUgcHJvbXB0IGNvbG9yIGZvcgorCSAqIGhpZ2hsaWdodGluZywgb3RoZXJ3aXNlIHVzZSBzcXVhcmUgYnJhY2tldHMuCisJICovCisJaWYgKHMudXNlX2NvbG9yKSB7CisJCWRhdGEuY29sb3IgPSBzLnByb21wdF9jb2xvcjsKKwkJZGF0YS5yZXNldCA9IHMucmVzZXRfY29sb3I7CisJfQorCXByaW50X2ZpbGVfaXRlbV9kYXRhLmNvbG9yID0gZGF0YS5jb2xvcjsKKwlwcmludF9maWxlX2l0ZW1fZGF0YS5yZXNldCA9IGRhdGEucmVzZXQ7CisKKwlzdHJidWZfYWRkc3RyKCZoZWFkZXIsICIgICAgICAiKTsKKwlzdHJidWZfYWRkZigmaGVhZGVyLCBwcmludF9maWxlX2l0ZW1fZGF0YS5tb2RpZmllZF9mbXQsCisJCSAgICBfKCJzdGFnZWQiKSwgXygidW5zdGFnZWQiKSwgXygicGF0aCIpKTsKKwlvcHRzLmxpc3Rfb3B0cy5oZWFkZXIgPSBoZWFkZXIuYnVmOworCisJaWYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fAorCSAgICByZXBvX3JlYWRfaW5kZXgocikgPCAwIHx8CisJICAgIHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgociwgUkVGUkVTSF9RVUlFVCwgMCwgMSwKKwkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkKKwkJd2FybmluZyhfKCJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIpKTsKKworCXJlcyA9IHJ1bl9zdGF0dXMoJnMsIHBzLCAmZmlsZXMsICZvcHRzKTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbDsKKworCQlpID0gbGlzdF9hbmRfY2hvb3NlKCZzLCAmY29tbWFuZHMsICZtYWluX2xvb3Bfb3B0cyk7CisJCWlmIChpIDwgMCB8fCBpID49IGNvbW1hbmRzLml0ZW1zLm5yKQorCQkJdXRpbCA9IE5VTEw7CisJCWVsc2UKKwkJCXV0aWwgPSBjb21tYW5kcy5pdGVtcy5pdGVtc1tpXS51dGlsOworCisJCWlmIChpID09IExJU1RfQU5EX0NIT09TRV9RVUlUIHx8ICh1dGlsICYmICF1dGlsLT5jb21tYW5kKSkgeworCQkJcHJpbnRmKF8oIkJ5ZS5cbiIpKTsKKwkJCXJlcyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh1dGlsKQorCQkJcmVzID0gdXRpbC0+Y29tbWFuZCgmcywgcHMsICZmaWxlcywgJm9wdHMpOworCX0KKworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoJmZpbGVzKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpbnRfZmlsZV9pdGVtX2RhdGEuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpbnRfZmlsZV9pdGVtX2RhdGEubmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJnByaW50X2ZpbGVfaXRlbV9kYXRhLmluZGV4KTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpbnRfZmlsZV9pdGVtX2RhdGEud29ya3RyZWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkZXIpOworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoJmNvbW1hbmRzKTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9hZGQtaW50ZXJhY3RpdmUuaCBiL2FkZC1pbnRlcmFjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmRjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hZGQtaW50ZXJhY3RpdmUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEFERF9JTlRFUkFDVElWRV9ICisjZGVmaW5lIEFERF9JTlRFUkFDVElWRV9ICisKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdHJ1Y3QgYWRkX2lfc3RhdGUgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCWludCB1c2VfY29sb3I7CisJY2hhciBoZWFkZXJfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGhlbHBfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHByb21wdF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZXJyb3JfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHJlc2V0X2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBmcmFnaW5mb19jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgY29udGV4dF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZmlsZV9vbGRfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGZpbGVfbmV3X2NvbG9yW0NPTE9SX01BWExFTl07Cit9OworCit2b2lkIGluaXRfYWRkX2lfc3RhdGUoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHBhdGhzcGVjOworaW50IHJ1bl9hZGRfaShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcyk7CitpbnQgcnVuX2FkZF9wKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hZGQtcGF0Y2guYyBiL2FkZC1wYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDZmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hZGQtcGF0Y2guYwpAQCAtMCwwICsxLDEzMzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFkZC1pbnRlcmFjdGl2ZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKK2VudW0gcHJvbXB0X21vZGVfdHlwZSB7CisJUFJPTVBUX01PREVfQ0hBTkdFID0gMCwgUFJPTVBUX0RFTEVUSU9OLCBQUk9NUFRfSFVOSworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb21wdF9tb2RlW10gPSB7CisJTl8oIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIiksCisJTl8oIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIiksCisJTl8oIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIpCit9OworCitzdHJ1Y3QgaHVua19oZWFkZXIgeworCXVuc2lnbmVkIGxvbmcgb2xkX29mZnNldCwgb2xkX2NvdW50LCBuZXdfb2Zmc2V0LCBuZXdfY291bnQ7CisJLyoKKwkgKiBTdGFydC9lbmQgb2Zmc2V0cyB0byB0aGUgZXh0cmEgdGV4dCBhZnRlciB0aGUgc2Vjb25kIGBAQGAgaW4gdGhlCisJICogaHVuayBoZWFkZXIsIGUuZy4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBpcyBleHBlY3RlZCB0bworCSAqIGluY2x1ZGUgdGhlIG5ld2xpbmUuCisJICovCisJc2l6ZV90IGV4dHJhX3N0YXJ0LCBleHRyYV9lbmQsIGNvbG9yZWRfZXh0cmFfc3RhcnQsIGNvbG9yZWRfZXh0cmFfZW5kOworfTsKKworc3RydWN0IGh1bmsgeworCXNpemVfdCBzdGFydCwgZW5kLCBjb2xvcmVkX3N0YXJ0LCBjb2xvcmVkX2VuZCwgc3BsaXR0YWJsZV9pbnRvOworCXNzaXplX3QgZGVsdGE7CisJZW51bSB7IFVOREVDSURFRF9IVU5LID0gMCwgU0tJUF9IVU5LLCBVU0VfSFVOSyB9IHVzZTsKKwlzdHJ1Y3QgaHVua19oZWFkZXIgaGVhZGVyOworfTsKKworc3RydWN0IGFkZF9wX3N0YXRlIHsKKwlzdHJ1Y3QgYWRkX2lfc3RhdGUgczsKKwlzdHJ1Y3Qgc3RyYnVmIGFuc3dlciwgYnVmOworCisJLyogcGFyc2VkIGRpZmYgKi8KKwlzdHJ1Y3Qgc3RyYnVmIHBsYWluLCBjb2xvcmVkOworCXN0cnVjdCBmaWxlX2RpZmYgeworCQlzdHJ1Y3QgaHVuayBoZWFkOworCQlzdHJ1Y3QgaHVuayAqaHVuazsKKwkJc2l6ZV90IGh1bmtfbnIsIGh1bmtfYWxsb2M7CisJCXVuc2lnbmVkIGRlbGV0ZWQ6MSwgbW9kZV9jaGFuZ2U6MSxiaW5hcnk6MTsKKwl9ICpmaWxlX2RpZmY7CisJc2l6ZV90IGZpbGVfZGlmZl9ucjsKK307CisKK3N0YXRpYyB2b2lkIGVycihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZnB1dHMocy0+cy5lcnJvcl9jb2xvciwgc3RkZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7CisJZnB1dHMocy0+cy5yZXNldF9jb2xvciwgc3RkZXJyKTsKKwlmcHV0YygnXG4nLCBzdGRlcnIpOworCXZhX2VuZChhcmdzKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hpbGRfcHJvY2VzcyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljb25zdCBjaGFyICphcmc7CisKKwl2YV9zdGFydChhcCwgY3ApOworCXdoaWxlICgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgYXJnKTsKKwl2YV9lbmQoYXApOworCisJY3AtPmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLT5lbnZfYXJyYXksCisJCQkgSU5ERVhfRU5WSVJPTk1FTlQgIj0lcyIsIHMtPnMuci0+aW5kZXhfZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqKnAsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQsIHVuc2lnbmVkIGxvbmcgKmNvdW50KQoreworCWNoYXIgKnBlbmQ7CisKKwkqb2Zmc2V0ID0gc3RydG91bCgqcCwgJnBlbmQsIDEwKTsKKwlpZiAocGVuZCA9PSAqcCkKKwkJcmV0dXJuIC0xOworCWlmICgqcGVuZCAhPSAnLCcpIHsKKwkJKmNvdW50ID0gMTsKKwkJKnAgPSBwZW5kOworCQlyZXR1cm4gMDsKKwl9CisJKmNvdW50ID0gc3RydG91bChwZW5kICsgMSwgKGNoYXIgKiopcCwgMTApOworCXJldHVybiAqcCA9PSBwZW5kICsgMSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBwYXJzZV9odW5rX2hlYWRlcihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCXN0cnVjdCBodW5rX2hlYWRlciAqaGVhZGVyID0gJmh1bmstPmhlYWRlcjsKKwljb25zdCBjaGFyICpsaW5lID0gcy0+cGxhaW4uYnVmICsgaHVuay0+c3RhcnQsICpwID0gbGluZTsKKwljaGFyICplb2wgPSBtZW1jaHIocCwgJ1xuJywgcy0+cGxhaW4ubGVuIC0gaHVuay0+c3RhcnQpOworCisJaWYgKCFlb2wpCisJCWVvbCA9IHMtPnBsYWluLmJ1ZiArIHMtPnBsYWluLmxlbjsKKworCWlmICghc2tpcF9wcmVmaXgocCwgIkBAIC0iLCAmcCkgfHwKKwkgICAgcGFyc2VfcmFuZ2UoJnAsICZoZWFkZXItPm9sZF9vZmZzZXQsICZoZWFkZXItPm9sZF9jb3VudCkgPCAwIHx8CisJICAgICFza2lwX3ByZWZpeChwLCAiICsiLCAmcCkgfHwKKwkgICAgcGFyc2VfcmFuZ2UoJnAsICZoZWFkZXItPm5ld19vZmZzZXQsICZoZWFkZXItPm5ld19jb3VudCkgPCAwIHx8CisJICAgICFza2lwX3ByZWZpeChwLCAiIEBAIiwgJnApKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIpLAorCQkJICAgICAoaW50KShlb2wgLSBsaW5lKSwgbGluZSk7CisKKwlodW5rLT5zdGFydCA9IGVvbCAtIHMtPnBsYWluLmJ1ZiArICgqZW9sID09ICdcbicpOworCWhlYWRlci0+ZXh0cmFfc3RhcnQgPSBwIC0gcy0+cGxhaW4uYnVmOworCWhlYWRlci0+ZXh0cmFfZW5kID0gaHVuay0+c3RhcnQ7CisKKwlpZiAoIXMtPmNvbG9yZWQubGVuKSB7CisJCWhlYWRlci0+Y29sb3JlZF9leHRyYV9zdGFydCA9IGhlYWRlci0+Y29sb3JlZF9leHRyYV9lbmQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOb3cgZmluZCB0aGUgZXh0cmEgdGV4dCBpbiB0aGUgY29sb3JlZCBkaWZmICovCisJbGluZSA9IHMtPmNvbG9yZWQuYnVmICsgaHVuay0+Y29sb3JlZF9zdGFydDsKKwllb2wgPSBtZW1jaHIobGluZSwgJ1xuJywgcy0+Y29sb3JlZC5sZW4gLSBodW5rLT5jb2xvcmVkX3N0YXJ0KTsKKwlpZiAoIWVvbCkKKwkJZW9sID0gcy0+Y29sb3JlZC5idWYgKyBzLT5jb2xvcmVkLmxlbjsKKwlwID0gbWVtbWVtKGxpbmUsIGVvbCAtIGxpbmUsICJAQCAtIiwgNCk7CisJaWYgKCFwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIiksCisJCQkgICAgIChpbnQpKGVvbCAtIGxpbmUpLCBsaW5lKTsKKwlwID0gbWVtbWVtKHAgKyA0LCBlb2wgLSBwIC0gNCwgIiBAQCIsIDMpOworCWlmICghcCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIpLAorCQkJICAgICAoaW50KShlb2wgLSBsaW5lKSwgbGluZSk7CisJaHVuay0+Y29sb3JlZF9zdGFydCA9IGVvbCAtIHMtPmNvbG9yZWQuYnVmICsgKCplb2wgPT0gJ1xuJyk7CisJaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0ID0gcCArIDMgLSBzLT5jb2xvcmVkLmJ1ZjsKKwloZWFkZXItPmNvbG9yZWRfZXh0cmFfZW5kID0gaHVuay0+Y29sb3JlZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX29jdGFsKGNvbnN0IGNoYXIgKnAsIHNpemVfdCBsZW4pCit7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbi0tKQorCQlpZiAoKnAgPCAnMCcgfHwgKihwKyspID4gJzcnKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlmZihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICpwbGFpbiA9ICZzLT5wbGFpbiwgKmNvbG9yZWQgPSBOVUxMOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNoYXIgKnAsICpwZW5kLCAqY29sb3JlZF9wID0gTlVMTCwgKmNvbG9yZWRfcGVuZCA9IE5VTEwsIG1hcmtlciA9ICdcMCc7CisJc2l6ZV90IGZpbGVfZGlmZl9hbGxvYyA9IDAsIGksIGNvbG9yX2FyZ19pbmRleDsKKwlzdHJ1Y3QgZmlsZV9kaWZmICpmaWxlX2RpZmYgPSBOVUxMOworCXN0cnVjdCBodW5rICpodW5rID0gTlVMTDsKKwlpbnQgcmVzOworCisJLyogVXNlIGAtLW5vLWNvbG9yYCBleHBsaWNpdGx5LCBqdXN0IGluIGNhc2UgYGRpZmYuY29sb3IgPSBhbHdheXNgLiAqLworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJkaWZmLWZpbGVzIiwgIi1wIiwgIi0tbm8tY29sb3IiLCAiLS0iLCBOVUxMKTsKKwljb2xvcl9hcmdfaW5kZXggPSBhcmdzLmFyZ2MgLSAyOworCWZvciAoaSA9IDA7IGkgPCBwcy0+bnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBwcy0+aXRlbXNbaV0ub3JpZ2luYWwpOworCisJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmY3AsIE5VTEwpOworCWNwLmFyZ3YgPSBhcmdzLmFyZ3Y7CisJcmVzID0gY2FwdHVyZV9jb21tYW5kKCZjcCwgcGxhaW4sIDApOworCWlmIChyZXMpIHsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgZGlmZiIpKTsKKwl9CisJaWYgKCFwbGFpbi0+bGVuKSB7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUocGxhaW4pOworCisJaWYgKHdhbnRfY29sb3JfZmQoMSwgLTEpKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNvbG9yZWRfY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmY29sb3JlZF9jcCwgTlVMTCk7CisJCXhzbnByaW50ZigoY2hhciAqKWFyZ3MuYXJndltjb2xvcl9hcmdfaW5kZXhdLCA4LCAiLS1jb2xvciIpOworCQljb2xvcmVkX2NwLmFyZ3YgPSBhcmdzLmFyZ3Y7CisJCWNvbG9yZWQgPSAmcy0+Y29sb3JlZDsKKwkJcmVzID0gY2FwdHVyZV9jb21tYW5kKCZjb2xvcmVkX2NwLCBjb2xvcmVkLCAwKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIpKTsKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUoY29sb3JlZCk7CisJCWNvbG9yZWRfcCA9IGNvbG9yZWQtPmJ1ZjsKKwkJY29sb3JlZF9wZW5kID0gY29sb3JlZF9wICsgY29sb3JlZC0+bGVuOworCX0KKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCS8qIHBhcnNlIGZpbGVzIGFuZCBodW5rcyAqLworCXAgPSBwbGFpbi0+YnVmOworCXBlbmQgPSBwICsgcGxhaW4tPmxlbjsKKwl3aGlsZSAocCAhPSBwZW5kKSB7CisJCWNoYXIgKmVvbCA9IG1lbWNocihwLCAnXG4nLCBwZW5kIC0gcCk7CisJCWNvbnN0IGNoYXIgKmRlbGV0ZWQgPSBOVUxMLCAqbW9kZV9jaGFuZ2UgPSBOVUxMOworCisJCWlmICghZW9sKQorCQkJZW9sID0gcGVuZDsKKworCQlpZiAoc3RhcnRzX3dpdGgocCwgImRpZmYgIikpIHsKKwkJCXMtPmZpbGVfZGlmZl9ucisrOworCQkJQUxMT0NfR1JPVyhzLT5maWxlX2RpZmYsIHMtPmZpbGVfZGlmZl9uciwKKwkJCQkgICBmaWxlX2RpZmZfYWxsb2MpOworCQkJZmlsZV9kaWZmID0gcy0+ZmlsZV9kaWZmICsgcy0+ZmlsZV9kaWZmX25yIC0gMTsKKwkJCW1lbXNldChmaWxlX2RpZmYsIDAsIHNpemVvZigqZmlsZV9kaWZmKSk7CisJCQlodW5rID0gJmZpbGVfZGlmZi0+aGVhZDsKKwkJCWh1bmstPnN0YXJ0ID0gcCAtIHBsYWluLT5idWY7CisJCQlpZiAoY29sb3JlZF9wKQorCQkJCWh1bmstPmNvbG9yZWRfc3RhcnQgPSBjb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisJCQltYXJrZXIgPSAnXDAnOworCQl9IGVsc2UgaWYgKHAgPT0gcGxhaW4tPmJ1ZikKKwkJCUJVRygiZGlmZiBzdGFydHMgd2l0aCB1bmV4cGVjdGVkIGxpbmU6XG4iCisJCQkgICAgIiUuKnNcbiIsIChpbnQpKGVvbCAtIHApLCBwKTsKKwkJZWxzZSBpZiAoZmlsZV9kaWZmLT5kZWxldGVkKQorCQkJOyAvKiBrZWVwIHRoZSByZXN0IG9mIHRoZSBmaWxlIGluIGEgc2luZ2xlICJodW5rIiAqLworCQllbHNlIGlmIChzdGFydHNfd2l0aChwLCAiQEAgIikgfHwKKwkJCSAoaHVuayA9PSAmZmlsZV9kaWZmLT5oZWFkICYmCisJCQkgIHNraXBfcHJlZml4KHAsICJkZWxldGVkIGZpbGUiLCAmZGVsZXRlZCkpKSB7CisJCQlpZiAobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKQorCQkJCS8qCisJCQkJICogU2hvdWxkIG5vdCBoYXBwZW47IHByZXZpb3VzIGh1bmsgZGlkIG5vdCBlbmQKKwkJCQkgKiBpbiBhIGNvbnRleHQgbGluZT8gSGFuZGxlIGl0IGFueXdheS4KKwkJCQkgKi8KKwkJCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKworCQkJZmlsZV9kaWZmLT5odW5rX25yKys7CisJCQlBTExPQ19HUk9XKGZpbGVfZGlmZi0+aHVuaywgZmlsZV9kaWZmLT5odW5rX25yLAorCQkJCSAgIGZpbGVfZGlmZi0+aHVua19hbGxvYyk7CisJCQlodW5rID0gZmlsZV9kaWZmLT5odW5rICsgZmlsZV9kaWZmLT5odW5rX25yIC0gMTsKKwkJCW1lbXNldChodW5rLCAwLCBzaXplb2YoKmh1bmspKTsKKworCQkJaHVuay0+c3RhcnQgPSBwIC0gcGxhaW4tPmJ1ZjsKKwkJCWlmIChjb2xvcmVkKQorCQkJCWh1bmstPmNvbG9yZWRfc3RhcnQgPSBjb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisKKwkJCWlmIChkZWxldGVkKQorCQkJCWZpbGVfZGlmZi0+ZGVsZXRlZCA9IDE7CisJCQllbHNlIGlmIChwYXJzZV9odW5rX2hlYWRlcihzLCBodW5rKSA8IDApCisJCQkJcmV0dXJuIC0xOworCisJCQkvKgorCQkJICogU3RhcnQgY291bnRpbmcgaW50byBob3cgbWFueSBodW5rcyB0aGlzIG9uZSBjYW4gYmUKKwkJCSAqIHNwbGl0CisJCQkgKi8KKwkJCW1hcmtlciA9ICpwOworCQl9IGVsc2UgaWYgKGh1bmsgPT0gJmZpbGVfZGlmZi0+aGVhZCAmJgorCQkJICAgc2tpcF9wcmVmaXgocCwgIm9sZCBtb2RlICIsICZtb2RlX2NoYW5nZSkgJiYKKwkJCSAgIGlzX29jdGFsKG1vZGVfY2hhbmdlLCBlb2wgLSBtb2RlX2NoYW5nZSkpIHsKKwkJCWlmIChmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCUJVRygiZG91YmxlIG1vZGUgY2hhbmdlP1xuXG4lLipzIiwKKwkJCQkgICAgKGludCkoZW9sIC0gcGxhaW4tPmJ1ZiksIHBsYWluLT5idWYpOworCQkJaWYgKGZpbGVfZGlmZi0+aHVua19ucisrKQorCQkJCUJVRygibW9kZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZT9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKworCQkJLyoKKwkJCSAqIERvICpub3QqIGNoYW5nZSBgaHVua2A6IHRoZSBtb2RlIGNoYW5nZSBwc2V1ZG8taHVuaworCQkJICogaXMgX3BhcnQgb2ZfIHRoZSBoZWFkZXIgImh1bmsiLgorCQkJICovCisJCQlmaWxlX2RpZmYtPm1vZGVfY2hhbmdlID0gMTsKKwkJCUFMTE9DX0dST1coZmlsZV9kaWZmLT5odW5rLCBmaWxlX2RpZmYtPmh1bmtfbnIsCisJCQkJICAgZmlsZV9kaWZmLT5odW5rX2FsbG9jKTsKKwkJCW1lbXNldChmaWxlX2RpZmYtPmh1bmssIDAsIHNpemVvZihzdHJ1Y3QgaHVuaykpOworCQkJZmlsZV9kaWZmLT5odW5rLT5zdGFydCA9IHAgLSBwbGFpbi0+YnVmOworCQkJaWYgKGNvbG9yZWRfcCkKKwkJCQlmaWxlX2RpZmYtPmh1bmstPmNvbG9yZWRfc3RhcnQgPQorCQkJCQljb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisJCX0gZWxzZSBpZiAoaHVuayA9PSAmZmlsZV9kaWZmLT5oZWFkICYmCisJCQkgICBza2lwX3ByZWZpeChwLCAibmV3IG1vZGUgIiwgJm1vZGVfY2hhbmdlKSAmJgorCQkJICAgaXNfb2N0YWwobW9kZV9jaGFuZ2UsIGVvbCAtIG1vZGVfY2hhbmdlKSkgeworCisJCQkvKgorCQkJICogRXh0ZW5kIHRoZSAibW9kZSBjaGFuZ2UiIHBzZXVkby1odW5rIHRvIGluY2x1ZGUgYWxzbworCQkJICogdGhlICJuZXcgbW9kZSIgbGluZS4KKwkJCSAqLworCQkJaWYgKCFmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCUJVRygiJ25ldyBtb2RlJyB3aXRob3V0ICdvbGQgbW9kZSc/XG5cbiUuKnMiLAorCQkJCSAgICAoaW50KShlb2wgLSBwbGFpbi0+YnVmKSwgcGxhaW4tPmJ1Zik7CisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yICE9IDEpCisJCQkJQlVHKCJtb2RlIGNoYW5nZSBpbiB0aGUgbWlkZGxlP1xuXG4lLipzIiwKKwkJCQkgICAgKGludCkoZW9sIC0gcGxhaW4tPmJ1ZiksIHBsYWluLT5idWYpOworCQkJaWYgKHAgLSBwbGFpbi0+YnVmICE9IGZpbGVfZGlmZi0+aHVuay0+ZW5kKQorCQkJCUJVRygiJ25ldyBtb2RlJyBkb2VzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3cgIgorCQkJCSAgICAiJ29sZCBtb2RlJz9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKwkJfSBlbHNlIGlmIChodW5rID09ICZmaWxlX2RpZmYtPmhlYWQgJiYKKwkJCSAgIHN0YXJ0c193aXRoKHAsICJCaW5hcnkgZmlsZXMgIikpCisJCQlmaWxlX2RpZmYtPmJpbmFyeSA9IDE7CisKKwkJaWYgKGZpbGVfZGlmZi0+ZGVsZXRlZCAmJiBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJQlVHKCJkaWZmIGNvbnRhaW5zIGRlbGV0ZSAqYW5kKiBhIG1vZGUgY2hhbmdlPyE/XG4lLipzIiwKKwkJCSAgICAoaW50KShlb2wgLSAocGxhaW4tPmJ1ZiArIGZpbGVfZGlmZi0+aGVhZC5zdGFydCkpLAorCQkJICAgIHBsYWluLT5idWYgKyBmaWxlX2RpZmYtPmhlYWQuc3RhcnQpOworCisJCWlmICgobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKSAmJiAqcCA9PSAnICcpCisJCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKwkJaWYgKG1hcmtlciAmJiAqcCAhPSAnXFwnKQorCQkJbWFya2VyID0gKnA7CisKKwkJcCA9IGVvbCA9PSBwZW5kID8gcGVuZCA6IGVvbCArIDE7CisJCWh1bmstPmVuZCA9IHAgLSBwbGFpbi0+YnVmOworCisJCWlmIChjb2xvcmVkKSB7CisJCQljaGFyICpjb2xvcmVkX2VvbCA9IG1lbWNocihjb2xvcmVkX3AsICdcbicsCisJCQkJCQkgICBjb2xvcmVkX3BlbmQgLSBjb2xvcmVkX3ApOworCQkJaWYgKGNvbG9yZWRfZW9sKQorCQkJCWNvbG9yZWRfcCA9IGNvbG9yZWRfZW9sICsgMTsKKwkJCWVsc2UKKwkJCQljb2xvcmVkX3AgPSBjb2xvcmVkX3BlbmQ7CisKKwkJCWh1bmstPmNvbG9yZWRfZW5kID0gY29sb3JlZF9wIC0gY29sb3JlZC0+YnVmOworCQl9CisKKwkJaWYgKG1vZGVfY2hhbmdlKSB7CisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yICE9IDEpCisJCQkJQlVHKCJtb2RlIGNoYW5nZSBpbiBodW5rICMlZD8/PyIsCisJCQkJICAgIChpbnQpZmlsZV9kaWZmLT5odW5rX25yKTsKKwkJCS8qIEFkanVzdCB0aGUgZW5kIG9mIHRoZSAibW9kZSBjaGFuZ2UiIHBzZXVkby1odW5rICovCisJCQlmaWxlX2RpZmYtPmh1bmstPmVuZCA9IGh1bmstPmVuZDsKKwkJCWlmIChjb2xvcmVkKQorCQkJCWZpbGVfZGlmZi0+aHVuay0+Y29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKwkJfQorCX0KKworCWlmIChtYXJrZXIgPT0gJy0nIHx8IG1hcmtlciA9PSAnKycpCisJCS8qCisJCSAqIExhc3QgaHVuayBlbmRlZCBpbiBub24tY29udGV4dCBsaW5lIChpLmUuIGl0IGFwcGVuZGVkIGxpbmVzCisJCSAqIHRvIHRoZSBmaWxlLCBzbyB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29udGV4dCBsaW5lcykuCisJCSAqLworCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IGZpbmRfbmV4dF9saW5lKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3Qgb2Zmc2V0KQoreworCWNoYXIgKmVvbDsKKworCWlmIChvZmZzZXQgPj0gc2ItPmxlbikKKwkJQlVHKCJsb29raW5nIGZvciBuZXh0IGxpbmUgYmV5b25kIGJ1ZmZlciAoJWQgPj0gJWQpXG4lcyIsCisJCSAgICAoaW50KW9mZnNldCwgKGludClzYi0+bGVuLCBzYi0+YnVmKTsKKworCWVvbCA9IG1lbWNocihzYi0+YnVmICsgb2Zmc2V0LCAnXG4nLCBzYi0+bGVuIC0gb2Zmc2V0KTsKKwlpZiAoIWVvbCkKKwkJcmV0dXJuIHNiLT5sZW47CisJcmV0dXJuIGVvbCAtIHNiLT5idWYgKyAxOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rLAorCQkJc3NpemVfdCBkZWx0YSwgaW50IGNvbG9yZWQsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgaHVua19oZWFkZXIgKmhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisKKwlpZiAoaHVuay0+aGVhZGVyLm9sZF9vZmZzZXQgIT0gMCB8fCBodW5rLT5oZWFkZXIubmV3X29mZnNldCAhPSAwKSB7CisJCS8qCisJCSAqIEdlbmVyYXRlIHRoZSBodW5rIGhlYWRlciBkeW5hbWljYWxseSwgZXhjZXB0IGZvciBzcGVjaWFsCisJCSAqIGh1bmtzIChzdWNoIGFzIHRoZSBkaWZmIGhlYWRlcikuCisJCSAqLworCQljb25zdCBjaGFyICpwOworCQlzaXplX3QgbGVuOworCQl1bnNpZ25lZCBsb25nIG9sZF9vZmZzZXQgPSBoZWFkZXItPm9sZF9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgbmV3X29mZnNldCA9IGhlYWRlci0+bmV3X29mZnNldDsKKworCQlpZiAoIWNvbG9yZWQpIHsKKwkJCXAgPSBzLT5wbGFpbi5idWYgKyBoZWFkZXItPmV4dHJhX3N0YXJ0OworCQkJbGVuID0gaGVhZGVyLT5leHRyYV9lbmQgLSBoZWFkZXItPmV4dHJhX3N0YXJ0OworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHMtPnMuZnJhZ2luZm9fY29sb3IpOworCQkJcCA9IHMtPmNvbG9yZWQuYnVmICsgaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0OworCQkJbGVuID0gaGVhZGVyLT5jb2xvcmVkX2V4dHJhX2VuZAorCQkJCS0gaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0OworCQl9CisKKwkJbmV3X29mZnNldCArPSBkZWx0YTsKKworCQlzdHJidWZfYWRkZihvdXQsICJAQCAtJWx1LCVsdSArJWx1LCVsdSBAQCIsCisJCQkgICAgb2xkX29mZnNldCwgaGVhZGVyLT5vbGRfY291bnQsCisJCQkgICAgbmV3X29mZnNldCwgaGVhZGVyLT5uZXdfY291bnQpOworCQlpZiAobGVuKQorCQkJc3RyYnVmX2FkZChvdXQsIHAsIGxlbik7CisJCWVsc2UgaWYgKGNvbG9yZWQpCisJCQlzdHJidWZfYWRkZihvdXQsICIlc1xuIiwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJfQorCisJaWYgKGNvbG9yZWQpCisJCXN0cmJ1Zl9hZGQob3V0LCBzLT5jb2xvcmVkLmJ1ZiArIGh1bmstPmNvbG9yZWRfc3RhcnQsCisJCQkgICBodW5rLT5jb2xvcmVkX2VuZCAtIGh1bmstPmNvbG9yZWRfc3RhcnQpOworCWVsc2UKKwkJc3RyYnVmX2FkZChvdXQsIHMtPnBsYWluLmJ1ZiArIGh1bmstPnN0YXJ0LAorCQkJICAgaHVuay0+ZW5kIC0gaHVuay0+c3RhcnQpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJfZGlmZl9oZWFkZXIoc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgaW50IGNvbG9yZWQsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCS8qCisJICogSWYgdGhlcmUgd2FzIGEgbW9kZSBjaGFuZ2UsIHRoZSBmaXJzdCBodW5rIGlzIGEgcHNldWRvIGh1bmsgdGhhdAorCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBtb2RlIGxpbmUgaW4gdGhlIGhlYWRlci4gSWYgdGhlIHVzZXIgZGlkIG5vdCB3YW50CisJICogdG8gc3RhZ2UgdGhhdCAiaHVuayIsIHdlIGFjdHVhbGx5IGhhdmUgdG8gY3V0IGl0IG91dCBmcm9tIHRoZSBoZWFkZXIuCisJICovCisJaW50IHNraXBfbW9kZV9jaGFuZ2UgPQorCQlmaWxlX2RpZmYtPm1vZGVfY2hhbmdlICYmIGZpbGVfZGlmZi0+aHVuay0+dXNlICE9IFVTRV9IVU5LOworCXN0cnVjdCBodW5rICpoZWFkID0gJmZpbGVfZGlmZi0+aGVhZCwgKmZpcnN0ID0gZmlsZV9kaWZmLT5odW5rOworCisJaWYgKCFza2lwX21vZGVfY2hhbmdlKSB7CisJCXJlbmRlcl9odW5rKHMsIGhlYWQsIDAsIGNvbG9yZWQsIG91dCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29sb3JlZCkgeworCQljb25zdCBjaGFyICpwID0gcy0+Y29sb3JlZC5idWY7CisKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBoZWFkLT5jb2xvcmVkX3N0YXJ0LAorCQkJICAgIGZpcnN0LT5jb2xvcmVkX3N0YXJ0IC0gaGVhZC0+Y29sb3JlZF9zdGFydCk7CisJCXN0cmJ1Zl9hZGQob3V0LCBwICsgZmlyc3QtPmNvbG9yZWRfZW5kLAorCQkJICAgIGhlYWQtPmNvbG9yZWRfZW5kIC0gZmlyc3QtPmNvbG9yZWRfZW5kKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpwID0gcy0+cGxhaW4uYnVmOworCisJCXN0cmJ1Zl9hZGQob3V0LCBwICsgaGVhZC0+c3RhcnQsIGZpcnN0LT5zdGFydCAtIGhlYWQtPnN0YXJ0KTsKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBmaXJzdC0+ZW5kLCBoZWFkLT5lbmQgLSBmaXJzdC0+ZW5kKTsKKwl9Cit9CisKKy8qIENvYWxlc2NlIGh1bmtzIGFnYWluIHRoYXQgd2VyZSBzcGxpdCAqLworc3RhdGljIGludCBtZXJnZV9odW5rcyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwKKwkJICAgICAgIHNpemVfdCAqaHVua19pbmRleCwgaW50IHVzZV9hbGwsIHN0cnVjdCBodW5rICptZXJnZWQpCit7CisJc2l6ZV90IGkgPSAqaHVua19pbmRleCwgZGVsdGE7CisJc3RydWN0IGh1bmsgKmh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBpOworCS8qIGBoZWFkZXJgIGNvcnJlc3BvbmRzIHRvIHRoZSBtZXJnZWQgaHVuayAqLworCXN0cnVjdCBodW5rX2hlYWRlciAqaGVhZGVyID0gJm1lcmdlZC0+aGVhZGVyLCAqbmV4dDsKKworCWlmICghdXNlX2FsbCAmJiBodW5rLT51c2UgIT0gVVNFX0hVTkspCisJCXJldHVybiAwOworCisJKm1lcmdlZCA9ICpodW5rOworCS8qIFdlIHNpbXBseSBza2lwIHRoZSBjb2xvcmVkIHBhcnQgKGlmIGFueSkgd2hlbiBtZXJnaW5nIGh1bmtzICovCisJbWVyZ2VkLT5jb2xvcmVkX3N0YXJ0ID0gbWVyZ2VkLT5jb2xvcmVkX2VuZCA9IDA7CisKKwlmb3IgKDsgaSArIDEgPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGkrKykgeworCQlodW5rKys7CisJCW5leHQgPSAmaHVuay0+aGVhZGVyOworCisJCS8qCisJCSAqIFN0b3AgbWVyZ2luZyBodW5rcyB3aGVuOgorCQkgKgorCQkgKiAtIHRoZSBodW5rIGlzIG5vdCBzZWxlY3RlZCBmb3IgdXNlLCBvcgorCQkgKiAtIHRoZSBodW5rIGRvZXMgbm90IG92ZXJsYXAgd2l0aCB0aGUgYWxyZWFkeS1tZXJnZWQgaHVuayhzKQorCQkgKi8KKwkJaWYgKCghdXNlX2FsbCAmJiBodW5rLT51c2UgIT0gVVNFX0hVTkspIHx8CisJCSAgICBoZWFkZXItPm5ld19vZmZzZXQgPj0gbmV4dC0+bmV3X29mZnNldCArIG1lcmdlZC0+ZGVsdGEgfHwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCArIGhlYWRlci0+bmV3X2NvdW50CisJCSAgICA8IG5leHQtPm5ld19vZmZzZXQgKyBtZXJnZWQtPmRlbHRhKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgdGhlIGh1bmtzIHdlcmUgbm90IGVkaXRlZCwgYW5kIG92ZXJsYXAsIHdlIGNhbiBzaW1wbHkKKwkJICogZXh0ZW5kIHRoZSBsaW5lIHJhbmdlLgorCQkgKi8KKwkJaWYgKG1lcmdlZC0+c3RhcnQgPCBodW5rLT5zdGFydCAmJiBtZXJnZWQtPmVuZCA+IGh1bmstPnN0YXJ0KSB7CisJCQltZXJnZWQtPmVuZCA9IGh1bmstPmVuZDsKKwkJCW1lcmdlZC0+Y29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKwkJCWRlbHRhID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnBsYWluID0gcy0+cGxhaW4uYnVmOworCQkJc2l6ZV90ICBvdmVybGFwcGluZ19saW5lX2NvdW50ID0gaGVhZGVyLT5uZXdfb2Zmc2V0CisJCQkJKyBoZWFkZXItPm5ld19jb3VudCAtIG1lcmdlZC0+ZGVsdGEKKwkJCQktIG5leHQtPm5ld19vZmZzZXQ7CisJCQlzaXplX3Qgb3ZlcmxhcF9lbmQgPSBodW5rLT5zdGFydDsKKwkJCXNpemVfdCBvdmVybGFwX3N0YXJ0ID0gb3ZlcmxhcF9lbmQ7CisJCQlzaXplX3Qgb3ZlcmxhcF9uZXh0LCBsZW4sIGo7CisKKwkJCS8qCisJCQkgKiBPbmUgb2YgdGhlIGh1bmtzIHdhcyBlZGl0ZWQ6IHRoZSBtb2RpZmllZCBodW5rIHdhcworCQkJICogYXBwZW5kZWQgdG8gdGhlIHN0cmJ1ZiBgcy0+cGxhaW5gLgorCQkJICoKKwkJCSAqIExldCdzIGVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoZSBsYXN0IGNvbnRleHQgbGluZSBvZgorCQkJICogdGhlIGZpcnN0IGh1bmsgb3ZlcmxhcHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBsaW5lCisJCQkgKiBvZiB0aGUgc2Vjb25kIGh1bmssIGFuZCB0aGVuIG1lcmdlLgorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgb3ZlcmxhcHBpbmdfbGluZV9jb3VudDsgaisrKSB7CisJCQkJb3ZlcmxhcF9uZXh0ID0gZmluZF9uZXh0X2xpbmUoJnMtPnBsYWluLAorCQkJCQkJCSAgICAgIG92ZXJsYXBfZW5kKTsKKworCQkJCWlmIChvdmVybGFwX25leHQgPiBodW5rLT5lbmQpCisJCQkJCUJVRygiZmFpbGVkIHRvIGZpbmQgJWQgY29udGV4dCBsaW5lcyAiCisJCQkJCSAgICAiaW46XG4lLipzIiwKKwkJCQkJICAgIChpbnQpb3ZlcmxhcHBpbmdfbGluZV9jb3VudCwKKwkJCQkJICAgIChpbnQpKGh1bmstPmVuZCAtIGh1bmstPnN0YXJ0KSwKKwkJCQkJICAgIHBsYWluICsgaHVuay0+c3RhcnQpOworCisJCQkJaWYgKHBsYWluW292ZXJsYXBfZW5kXSAhPSAnICcpCisJCQkJCXJldHVybiBlcnJvcihfKCJleHBlY3RlZCBjb250ZXh0IGxpbmUgIgorCQkJCQkJICAgICAgICIjJWQgaW5cbiUuKnMiKSwKKwkJCQkJCSAgICAgKGludCkoaiArIDEpLAorCQkJCQkJICAgICAoaW50KShodW5rLT5lbmQKKwkJCQkJCQkgICAtIGh1bmstPnN0YXJ0KSwKKwkJCQkJCSAgICAgcGxhaW4gKyBodW5rLT5zdGFydCk7CisKKwkJCQlvdmVybGFwX3N0YXJ0ID0gb3ZlcmxhcF9lbmQ7CisJCQkJb3ZlcmxhcF9lbmQgPSBvdmVybGFwX25leHQ7CisJCQl9CisJCQlsZW4gPSBvdmVybGFwX2VuZCAtIG92ZXJsYXBfc3RhcnQ7CisKKwkJCWlmIChsZW4gPiBtZXJnZWQtPmVuZCAtIG1lcmdlZC0+c3RhcnQgfHwKKwkJCSAgICBtZW1jbXAocGxhaW4gKyBtZXJnZWQtPmVuZCAtIGxlbiwKKwkJCQkgICBwbGFpbiArIG92ZXJsYXBfc3RhcnQsIGxlbikpCisJCQkJcmV0dXJuIGVycm9yKF8oImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuJS4qc1xuIgorCQkJCQkgICAgICAgIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4lLipzIiksCisJCQkJCSAgICAgKGludCkobWVyZ2VkLT5lbmQgLSBtZXJnZWQtPnN0YXJ0KSwKKwkJCQkJICAgICBwbGFpbiArIG1lcmdlZC0+c3RhcnQsCisJCQkJCSAgICAgKGludClsZW4sIHBsYWluICsgb3ZlcmxhcF9zdGFydCk7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUgc3RhcnQtZW5kIHJhbmdlcyBhcmUgbm90IGFkamFjZW50LCB3ZQorCQkJICogY2Fubm90IHNpbXBseSB0YWtlIHRoZSB1bmlvbiBvZiB0aGUgcmFuZ2VzLiBUbworCQkJICogYWRkcmVzcyB0aGF0LCB3ZSB0ZW1wb3JhcmlseSBhcHBlbmQgdGhlIHVuaW9uIG9mIHRoZQorCQkJICogbGluZXMgdG8gdGhlIGBwbGFpbmAgc3RyYnVmLgorCQkJICovCisJCQlpZiAobWVyZ2VkLT5lbmQgIT0gcy0+cGxhaW4ubGVuKSB7CisJCQkJc2l6ZV90IHN0YXJ0ID0gcy0+cGxhaW4ubGVuOworCisJCQkJc3RyYnVmX2FkZCgmcy0+cGxhaW4sIHBsYWluICsgbWVyZ2VkLT5zdGFydCwKKwkJCQkJICAgbWVyZ2VkLT5lbmQgLSBtZXJnZWQtPnN0YXJ0KTsKKwkJCQlwbGFpbiA9IHMtPnBsYWluLmJ1ZjsKKwkJCQltZXJnZWQtPnN0YXJ0ID0gc3RhcnQ7CisJCQkJbWVyZ2VkLT5lbmQgPSBzLT5wbGFpbi5sZW47CisJCQl9CisKKwkJCXN0cmJ1Zl9hZGQoJnMtPnBsYWluLAorCQkJCSAgIHBsYWluICsgb3ZlcmxhcF9lbmQsCisJCQkJICAgaHVuay0+ZW5kIC0gb3ZlcmxhcF9lbmQpOworCQkJbWVyZ2VkLT5lbmQgPSBzLT5wbGFpbi5sZW47CisJCQltZXJnZWQtPnNwbGl0dGFibGVfaW50byArPSBodW5rLT5zcGxpdHRhYmxlX2ludG87CisJCQlkZWx0YSA9IG1lcmdlZC0+ZGVsdGE7CisJCQltZXJnZWQtPmRlbHRhICs9IGh1bmstPmRlbHRhOworCQl9CisKKwkJaGVhZGVyLT5vbGRfY291bnQgPSBuZXh0LT5vbGRfb2Zmc2V0ICsgbmV4dC0+b2xkX2NvdW50CisJCQktIGhlYWRlci0+b2xkX29mZnNldDsKKwkJaGVhZGVyLT5uZXdfY291bnQgPSBuZXh0LT5uZXdfb2Zmc2V0ICsgZGVsdGEKKwkJCSsgbmV4dC0+bmV3X2NvdW50IC0gaGVhZGVyLT5uZXdfb2Zmc2V0OworCX0KKworCWlmIChpID09ICpodW5rX2luZGV4KQorCQlyZXR1cm4gMDsKKworCSpodW5rX2luZGV4ID0gaTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVhc3NlbWJsZV9wYXRjaChzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgaW50IHVzZV9hbGwsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgaHVuayAqaHVuazsKKwlzaXplX3Qgc2F2ZV9sZW4gPSBzLT5wbGFpbi5sZW4sIGk7CisJc3NpemVfdCBkZWx0YSA9IDA7CisKKwlyZW5kZXJfZGlmZl9oZWFkZXIocywgZmlsZV9kaWZmLCAwLCBvdXQpOworCisJZm9yIChpID0gZmlsZV9kaWZmLT5tb2RlX2NoYW5nZTsgaSA8IGZpbGVfZGlmZi0+aHVua19ucjsgaSsrKSB7CisJCXN0cnVjdCBodW5rIG1lcmdlZCA9IHsgMCB9OworCisJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBpOworCQlpZiAoIXVzZV9hbGwgJiYgaHVuay0+dXNlICE9IFVTRV9IVU5LKQorCQkJZGVsdGEgKz0gaHVuay0+aGVhZGVyLm9sZF9jb3VudAorCQkJCS0gaHVuay0+aGVhZGVyLm5ld19jb3VudDsKKwkJZWxzZSB7CisJCQkvKiBtZXJnZSBvdmVybGFwcGluZyBodW5rcyBpbnRvIGEgdGVtcG9yYXJ5IGh1bmsgKi8KKwkJCWlmIChtZXJnZV9odW5rcyhzLCBmaWxlX2RpZmYsICZpLCB1c2VfYWxsLCAmbWVyZ2VkKSkKKwkJCQlodW5rID0gJm1lcmdlZDsKKworCQkJcmVuZGVyX2h1bmsocywgaHVuaywgZGVsdGEsIDAsIG91dCk7CisKKwkJCS8qCisJCQkgKiBJbiBjYXNlIGBtZXJnZV9odW5rcygpYCB1c2VkIGBwbGFpbmAgYXMgYSBzY3JhdGNoCisJCQkgKiBwYWQgKHRoaXMgaGFwcGVucyB3aGVuIGFuIGVkaXRlZCBodW5rIGhhZCB0byBiZQorCQkJICogY29hbGVzY2VkIHdpdGggYW5vdGhlciBodW5rKS4KKwkJCSAqLworCQkJc3RyYnVmX3NldGxlbigmcy0+cGxhaW4sIHNhdmVfbGVuKTsKKworCQkJZGVsdGEgKz0gaHVuay0+ZGVsdGE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwKKwkJICAgICAgIHNpemVfdCBodW5rX2luZGV4KQoreworCWludCBjb2xvcmVkID0gISFzLT5jb2xvcmVkLmxlbiwgZmlyc3QgPSAxOworCXN0cnVjdCBodW5rICpodW5rID0gZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleDsKKwlzaXplX3Qgc3BsaXR0YWJsZV9pbnRvOworCXNpemVfdCBlbmQsIGNvbG9yZWRfZW5kLCBjdXJyZW50LCBjb2xvcmVkX2N1cnJlbnQgPSAwLCBjb250ZXh0X2xpbmVfY291bnQ7CisJc3RydWN0IGh1bmtfaGVhZGVyIHJlbWFpbmluZywgKmhlYWRlcjsKKwljaGFyIG1hcmtlciwgY2g7CisKKwlpZiAoaHVua19pbmRleCA+PSBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCUJVRygiaW52YWxpZCBodW5rIGluZGV4OiAlZCAobXVzdCBiZSA+PSAwIGFuZCA8ICVkKSIsCisJCSAgICAoaW50KWh1bmtfaW5kZXgsIChpbnQpZmlsZV9kaWZmLT5odW5rX25yKTsKKworCWlmIChodW5rLT5zcGxpdHRhYmxlX2ludG8gPCAyKQorCQlyZXR1cm4gMDsKKwlzcGxpdHRhYmxlX2ludG8gPSBodW5rLT5zcGxpdHRhYmxlX2ludG87CisKKwllbmQgPSBodW5rLT5lbmQ7CisJY29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKworCXJlbWFpbmluZyA9IGh1bmstPmhlYWRlcjsKKworCWZpbGVfZGlmZi0+aHVua19uciArPSBzcGxpdHRhYmxlX2ludG8gLSAxOworCUFMTE9DX0dST1coZmlsZV9kaWZmLT5odW5rLCBmaWxlX2RpZmYtPmh1bmtfbnIsIGZpbGVfZGlmZi0+aHVua19hbGxvYyk7CisJaWYgKGh1bmtfaW5kZXggKyBzcGxpdHRhYmxlX2ludG8gPCBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCW1lbW1vdmUoZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleCArIHNwbGl0dGFibGVfaW50bywKKwkJCWZpbGVfZGlmZi0+aHVuayArIGh1bmtfaW5kZXggKyAxLAorCQkJKGZpbGVfZGlmZi0+aHVua19uciAtIGh1bmtfaW5kZXggLSBzcGxpdHRhYmxlX2ludG8pCisJCQkqIHNpemVvZigqaHVuaykpOworCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCWh1bmstPnNwbGl0dGFibGVfaW50byA9IDE7CisJbWVtc2V0KGh1bmsgKyAxLCAwLCAoc3BsaXR0YWJsZV9pbnRvIC0gMSkgKiBzaXplb2YoKmh1bmspKTsKKworCWhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisJaGVhZGVyLT5vbGRfY291bnQgPSBoZWFkZXItPm5ld19jb3VudCA9IDA7CisKKwljdXJyZW50ID0gaHVuay0+c3RhcnQ7CisJaWYgKGNvbG9yZWQpCisJCWNvbG9yZWRfY3VycmVudCA9IGh1bmstPmNvbG9yZWRfc3RhcnQ7CisJbWFya2VyID0gJ1wwJzsKKwljb250ZXh0X2xpbmVfY291bnQgPSAwOworCisJd2hpbGUgKHNwbGl0dGFibGVfaW50byA+IDEpIHsKKwkJY2ggPSBzLT5wbGFpbi5idWZbY3VycmVudF07CisKKwkJaWYgKCFjaCkKKwkJCUJVRygiYnVmZmVyIG92ZXJydW4gd2hpbGUgc3BsaXR0aW5nIGh1bmtzIik7CisKKwkJLyoKKwkJICogSXMgdGhpcyB0aGUgZmlyc3QgY29udGV4dCBsaW5lIGFmdGVyIGEgY2hhaW4gb2YgKy8tIGxpbmVzPworCQkgKiBUaGVuIHJlY29yZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc3BsaXQgaHVuay4KKwkJICovCisJCWlmICgobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKSAmJiBjaCA9PSAnICcpIHsKKwkJCWZpcnN0ID0gMDsKKwkJCWh1bmtbMV0uc3RhcnQgPSBjdXJyZW50OworCQkJaWYgKGNvbG9yZWQpCisJCQkJaHVua1sxXS5jb2xvcmVkX3N0YXJ0ID0gY29sb3JlZF9jdXJyZW50OworCQkJY29udGV4dF9saW5lX2NvdW50ID0gMDsKKwkJfQorCisJCS8qCisJCSAqIFdhcyB0aGUgcHJldmlvdXMgbGluZSBhICsvLSBvbmU/IEFsdGVybmF0aXZlbHksIGlzIHRoaXMgdGhlCisJCSAqIGZpcnN0IGxpbmUgKGFuZCBub3QgYSArLy0gb25lKT8KKwkJICoKKwkJICogVGhlbiBqdXN0IGluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgY291bnRlciBhbmQgY29udGludWUKKwkJICogd2l0aCB0aGUgbmV4dCBsaW5lLgorCQkgKi8KKwkJaWYgKG1hcmtlciAhPSAnICcgfHwgKGNoICE9ICctJyAmJiBjaCAhPSAnKycpKSB7CituZXh0X2h1bmtfbGluZToKKwkJCS8qIENvbW1lbnQgbGluZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBwcmV2aW91cyBsaW5lICovCisJCQlpZiAoY2ggPT0gJ1xcJykKKwkJCQljaCA9IG1hcmtlciA/IG1hcmtlciA6ICcgJzsKKworCQkJLyogY3VycmVudCBodW5rIG5vdCBkb25lIHlldCAqLworCQkJaWYgKGNoID09ICcgJykKKwkJCQljb250ZXh0X2xpbmVfY291bnQrKzsKKwkJCWVsc2UgaWYgKGNoID09ICctJykKKwkJCQloZWFkZXItPm9sZF9jb3VudCsrOworCQkJZWxzZSBpZiAoY2ggPT0gJysnKQorCQkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQllbHNlCisJCQkJQlVHKCJ1bmhhbmRsZWQgZGlmZiBtYXJrZXI6ICclYyciLCBjaCk7CisJCQltYXJrZXIgPSBjaDsKKwkJCWN1cnJlbnQgPSBmaW5kX25leHRfbGluZSgmcy0+cGxhaW4sIGN1cnJlbnQpOworCQkJaWYgKGNvbG9yZWQpCisJCQkJY29sb3JlZF9jdXJyZW50ID0KKwkJCQkJZmluZF9uZXh0X2xpbmUoJnMtPmNvbG9yZWQsCisJCQkJCQkgICAgICAgY29sb3JlZF9jdXJyZW50KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZ290IHVzIHRoZSBzdGFydCBvZiBhIG5ldyBodW5rIQorCQkgKgorCQkgKiBUaGlzIGlzIGEgY29udGV4dCBsaW5lLCBzbyBpdCBpcyBzaGFyZWQgd2l0aCB0aGUgcHJldmlvdXMKKwkJICogaHVuaywgaWYgYW55LgorCQkgKi8KKworCQlpZiAoZmlyc3QpIHsKKwkJCWlmIChoZWFkZXItPm9sZF9jb3VudCB8fCBoZWFkZXItPm5ld19jb3VudCkKKwkJCQlCVUcoImNvdW50cyBhcmUgb2ZmOiAlZC8lZCIsCisJCQkJICAgIChpbnQpaGVhZGVyLT5vbGRfY291bnQsCisJCQkJICAgIChpbnQpaGVhZGVyLT5uZXdfY291bnQpOworCisJCQloZWFkZXItPm9sZF9jb3VudCA9IGNvbnRleHRfbGluZV9jb3VudDsKKwkJCWhlYWRlci0+bmV3X2NvdW50ID0gY29udGV4dF9saW5lX2NvdW50OworCQkJY29udGV4dF9saW5lX2NvdW50ID0gMDsKKwkJCWZpcnN0ID0gMDsKKwkJCWdvdG8gbmV4dF9odW5rX2xpbmU7CisJCX0KKworCQlyZW1haW5pbmcub2xkX29mZnNldCArPSBoZWFkZXItPm9sZF9jb3VudDsKKwkJcmVtYWluaW5nLm9sZF9jb3VudCAtPSBoZWFkZXItPm9sZF9jb3VudDsKKwkJcmVtYWluaW5nLm5ld19vZmZzZXQgKz0gaGVhZGVyLT5uZXdfY291bnQ7CisJCXJlbWFpbmluZy5uZXdfY291bnQgLT0gaGVhZGVyLT5uZXdfY291bnQ7CisKKwkJLyogaW5pdGlhbGl6ZSBuZXh0IGh1bmsgaGVhZGVyJ3Mgb2Zmc2V0cyAqLworCQlodW5rWzFdLmhlYWRlci5vbGRfb2Zmc2V0ID0KKwkJCWhlYWRlci0+b2xkX29mZnNldCArIGhlYWRlci0+b2xkX2NvdW50OworCQlodW5rWzFdLmhlYWRlci5uZXdfb2Zmc2V0ID0KKwkJCWhlYWRlci0+bmV3X29mZnNldCArIGhlYWRlci0+bmV3X2NvdW50OworCisJCS8qIGFkZCBvbmUgc3BsaXQgaHVuayAqLworCQloZWFkZXItPm9sZF9jb3VudCArPSBjb250ZXh0X2xpbmVfY291bnQ7CisJCWhlYWRlci0+bmV3X2NvdW50ICs9IGNvbnRleHRfbGluZV9jb3VudDsKKworCQlodW5rLT5lbmQgPSBjdXJyZW50OworCQlpZiAoY29sb3JlZCkKKwkJCWh1bmstPmNvbG9yZWRfZW5kID0gY29sb3JlZF9jdXJyZW50OworCisJCWh1bmsrKzsKKwkJaHVuay0+c3BsaXR0YWJsZV9pbnRvID0gMTsKKwkJaHVuay0+dXNlID0gaHVua1stMV0udXNlOworCQloZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCisJCWhlYWRlci0+b2xkX2NvdW50ID0gaGVhZGVyLT5uZXdfY291bnQgPSBjb250ZXh0X2xpbmVfY291bnQ7CisJCWNvbnRleHRfbGluZV9jb3VudCA9IDA7CisKKwkJc3BsaXR0YWJsZV9pbnRvLS07CisJCW1hcmtlciA9IGNoOworCX0KKworCS8qIGxhc3QgaHVuayBzaW1wbHkgZ2V0cyB0aGUgcmVzdCAqLworCWlmIChoZWFkZXItPm9sZF9vZmZzZXQgIT0gcmVtYWluaW5nLm9sZF9vZmZzZXQpCisJCUJVRygibWlzY291bnRlZCBvbGRfb2Zmc2V0OiAlbHUgIT0gJWx1IiwKKwkJICAgIGhlYWRlci0+b2xkX29mZnNldCwgcmVtYWluaW5nLm9sZF9vZmZzZXQpOworCWlmIChoZWFkZXItPm5ld19vZmZzZXQgIT0gcmVtYWluaW5nLm5ld19vZmZzZXQpCisJCUJVRygibWlzY291bnRlZCBuZXdfb2Zmc2V0OiAlbHUgIT0gJWx1IiwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCwgcmVtYWluaW5nLm5ld19vZmZzZXQpOworCWhlYWRlci0+b2xkX2NvdW50ID0gcmVtYWluaW5nLm9sZF9jb3VudDsKKwloZWFkZXItPm5ld19jb3VudCA9IHJlbWFpbmluZy5uZXdfY291bnQ7CisJaHVuay0+ZW5kID0gZW5kOworCWlmIChjb2xvcmVkKQorCQlodW5rLT5jb2xvcmVkX2VuZCA9IGNvbG9yZWRfZW5kOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29sb3JfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCWNvbnN0IGNoYXIgKnBsYWluID0gcy0+cGxhaW4uYnVmOworCXNpemVfdCBjdXJyZW50LCBlb2wsIG5leHQ7CisKKwlpZiAoIXMtPmNvbG9yZWQubGVuKQorCQlyZXR1cm47CisKKwlodW5rLT5jb2xvcmVkX3N0YXJ0ID0gcy0+Y29sb3JlZC5sZW47CisJZm9yIChjdXJyZW50ID0gaHVuay0+c3RhcnQ7IGN1cnJlbnQgPCBodW5rLT5lbmQ7ICkgeworCQlmb3IgKGVvbCA9IGN1cnJlbnQ7IGVvbCA8IGh1bmstPmVuZDsgZW9sKyspCisJCQlpZiAocGxhaW5bZW9sXSA9PSAnXG4nKQorCQkJCWJyZWFrOworCQluZXh0ID0gZW9sICsgKGVvbCA8IGh1bmstPmVuZCk7CisJCWlmIChlb2wgPiBjdXJyZW50ICYmIHBsYWluW2VvbCAtIDFdID09ICdccicpCisJCQllb2wtLTsKKworCQlzdHJidWZfYWRkc3RyKCZzLT5jb2xvcmVkLAorCQkJICAgICAgcGxhaW5bY3VycmVudF0gPT0gJy0nID8KKwkJCSAgICAgIHMtPnMuZmlsZV9vbGRfY29sb3IgOgorCQkJICAgICAgcGxhaW5bY3VycmVudF0gPT0gJysnID8KKwkJCSAgICAgIHMtPnMuZmlsZV9uZXdfY29sb3IgOgorCQkJICAgICAgcy0+cy5jb250ZXh0X2NvbG9yKTsKKwkJc3RyYnVmX2FkZCgmcy0+Y29sb3JlZCwgcGxhaW4gKyBjdXJyZW50LCBlb2wgLSBjdXJyZW50KTsKKwkJc3RyYnVmX2FkZHN0cigmcy0+Y29sb3JlZCwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJaWYgKG5leHQgPiBlb2wpCisJCQlzdHJidWZfYWRkKCZzLT5jb2xvcmVkLCBwbGFpbiArIGVvbCwgbmV4dCAtIGVvbCk7CisJCWN1cnJlbnQgPSBuZXh0OworCX0KKwlodW5rLT5jb2xvcmVkX2VuZCA9IHMtPmNvbG9yZWQubGVuOworfQorCitzdGF0aWMgaW50IGVkaXRfaHVua19tYW51YWxseShzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCXNpemVfdCBpOworCisJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLCBfKCJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgIgorCQkJCSAgICAgICJhIHF1aWNrIGd1aWRlLlxuIikpOworCXJlbmRlcl9odW5rKHMsIGh1bmssIDAsIDAsICZzLT5idWYpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLAorCQkJICAgICAgXygiLS0tXG4iCisJCQkJIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzICIKKwkJCQkiKGNvbnRleHQpLlxuIgorCQkJCSJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisJCQkJIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIiksCisJCQkgICAgICAnLScsICcrJywgY29tbWVudF9saW5lX2NoYXIpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLAorCQkJICAgICAgXygiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rICIKKwkJCQkid2lsbCBpbW1lZGlhdGVseSBiZVxuIgorCQkJCSJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iKSk7CisJLyoKKwkgKiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMKKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJnMtPmJ1ZiwKKwkJCSAgICAgIF8oIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlICIKKwkJCQkiZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKwkJCQkiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgIgorCQkJCSJyZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisJCQkJImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIikpOworCisJaWYgKHN0cmJ1Zl9lZGl0X2ludGVyYWN0aXZlbHkoJnMtPmJ1ZiwgImFkZHAtaHVuay1lZGl0LmRpZmYiLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHN0cmlwIG91dCBjb21tZW50ZWQgbGluZXMgKi8KKwlodW5rLT5zdGFydCA9IHMtPnBsYWluLmxlbjsKKwlmb3IgKGkgPSAwOyBpIDwgcy0+YnVmLmxlbjsgKSB7CisJCXNpemVfdCBuZXh0ID0gZmluZF9uZXh0X2xpbmUoJnMtPmJ1ZiwgaSk7CisKKwkJaWYgKHMtPmJ1Zi5idWZbaV0gIT0gY29tbWVudF9saW5lX2NoYXIpCisJCQlzdHJidWZfYWRkKCZzLT5wbGFpbiwgcy0+YnVmLmJ1ZiArIGksIG5leHQgLSBpKTsKKwkJaSA9IG5leHQ7CisJfQorCisJaHVuay0+ZW5kID0gcy0+cGxhaW4ubGVuOworCWlmIChodW5rLT5lbmQgPT0gaHVuay0+c3RhcnQpCisJCS8qIFRoZSB1c2VyIGFib3J0ZWQgZWRpdGluZyBieSBkZWxldGluZyBldmVyeXRoaW5nICovCisJCXJldHVybiAwOworCisJcmVjb2xvcl9odW5rKHMsIGh1bmspOworCisJLyoKKwkgKiBJZiB0aGUgaHVuayBoZWFkZXIgaXMgaW50YWN0LCBwYXJzZSBpdCwgb3RoZXJ3aXNlIHNpbXBseSB1c2UgdGhlCisJICogaHVuayBoZWFkZXIgcHJpb3IgdG8gZWRpdGluZyAod2hpY2ggd2lsbCBhZGp1c3QgYGh1bmstPnN0YXJ0YCB0bworCSAqIHNraXAgdGhlIGh1bmsgaGVhZGVyKS4KKwkgKi8KKwlpZiAocy0+cGxhaW4uYnVmW2h1bmstPnN0YXJ0XSA9PSAnQCcgJiYKKwkgICAgcGFyc2VfaHVua19oZWFkZXIocywgaHVuaykgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIikpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY291bnRfZWRpdGVkX2h1bmsoc3RydWN0IGFkZF9wX3N0YXRlICpzLCBzdHJ1Y3QgaHVuayAqaHVuaywKKwkJCQkgICBzaXplX3Qgb3JpZ19vbGRfY291bnQsIHNpemVfdCBvcmlnX25ld19jb3VudCkKK3sKKwlzdHJ1Y3QgaHVua19oZWFkZXIgKmhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisJc2l6ZV90IGk7CisKKwloZWFkZXItPm9sZF9jb3VudCA9IGhlYWRlci0+bmV3X2NvdW50ID0gMDsKKwlmb3IgKGkgPSBodW5rLT5zdGFydDsgaSA8IGh1bmstPmVuZDsgKSB7CisJCXN3aXRjaCAocy0+cGxhaW4uYnVmW2ldKSB7CisJCWNhc2UgJy0nOgorCQkJaGVhZGVyLT5vbGRfY291bnQrKzsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1xyJzogY2FzZSAnXG4nOgorCQkJaGVhZGVyLT5vbGRfY291bnQrKzsKKwkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQlicmVhazsKKwkJfQorCisJCWkgPSBmaW5kX25leHRfbGluZSgmcy0+cGxhaW4sIGkpOworCX0KKworCXJldHVybiBvcmlnX29sZF9jb3VudCAtIG9yaWdfbmV3X2NvdW50CisJCS0gaGVhZGVyLT5vbGRfY291bnQgKyBoZWFkZXItPm5ld19jb3VudDsKK30KKworc3RhdGljIGludCBydW5fYXBwbHlfY2hlY2soc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCXJlYXNzZW1ibGVfcGF0Y2gocywgZmlsZV9kaWZmLCAxLCAmcy0+YnVmKTsKKworCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmNwLAorCQkJICAgICJhcHBseSIsICItLWNhY2hlZCIsICItLWNoZWNrIiwgTlVMTCk7CisJaWYgKHBpcGVfY29tbWFuZCgmY3AsIHMtPmJ1Zi5idWYsIHMtPmJ1Zi5sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorCQlyZXR1cm4gZXJyb3IoXygiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvbXB0X3llc25vKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgY29uc3QgY2hhciAqcHJvbXB0KQoreworCWZvciAoOzspIHsKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnMucHJvbXB0X2NvbG9yLCAiJXMiLCBfKHByb21wdCkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzLT5hbnN3ZXIsIHN0ZGluKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoJnMtPmFuc3dlcik7CisJCXN3aXRjaCAodG9sb3dlcihzLT5hbnN3ZXIuYnVmWzBdKSkgeworCQljYXNlICduJzogcmV0dXJuIDA7CisJCWNhc2UgJ3knOiByZXR1cm4gMTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBlZGl0X2h1bmtfbG9vcChzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgc3RydWN0IGh1bmsgKmh1bmspCit7CisJc2l6ZV90IHBsYWluX2xlbiA9IHMtPnBsYWluLmxlbiwgY29sb3JlZF9sZW4gPSBzLT5jb2xvcmVkLmxlbjsKKwlzdHJ1Y3QgaHVuayBiYWNrdXA7CisKKwliYWNrdXAgPSAqaHVuazsKKworCWZvciAoOzspIHsKKwkJaW50IHJlcyA9IGVkaXRfaHVua19tYW51YWxseShzLCBodW5rKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQkvKiBhYmFuZG9uZGVkICovCisJCQkqaHVuayA9IGJhY2t1cDsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChyZXMgPiAwKSB7CisJCQlodW5rLT5kZWx0YSArPQorCQkJCXJlY291bnRfZWRpdGVkX2h1bmsocywgaHVuaywKKwkJCQkJCSAgICBiYWNrdXAuaGVhZGVyLm9sZF9jb3VudCwKKwkJCQkJCSAgICBiYWNrdXAuaGVhZGVyLm5ld19jb3VudCk7CisJCQlpZiAoIXJ1bl9hcHBseV9jaGVjayhzLCBmaWxlX2RpZmYpKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJLyogRHJvcCBlZGl0cyAodGhleSB3ZXJlIGFwcGVuZGVkIHRvIHMtPnBsYWluKSAqLworCQlzdHJidWZfc2V0bGVuKCZzLT5wbGFpbiwgcGxhaW5fbGVuKTsKKwkJc3RyYnVmX3NldGxlbigmcy0+Y29sb3JlZCwgY29sb3JlZF9sZW4pOworCQkqaHVuayA9IGJhY2t1cDsKKworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorCQkgKiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKwkJICogQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKwkJICogKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKwkJICogb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisJCSAqLworCQlyZXMgPSBwcm9tcHRfeWVzbm8ocywgXygiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gIgorCQkJCQkiRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpICIKKwkJCQkJIlt5L25dPyAiKSk7CisJCWlmIChyZXMgPCAxKQorCQkJcmV0dXJuIC0xOworCX0KK30KKworI2RlZmluZSBTVU1NQVJZX0hFQURFUl9XSURUSCAyMAorI2RlZmluZSBTVU1NQVJZX0xJTkVfV0lEVEggODAKK3N0YXRpYyB2b2lkIHN1bW1hcml6ZV9odW5rKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmssCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCXN0cnVjdCBzdHJidWYgKnBsYWluID0gJnMtPnBsYWluOworCXNpemVfdCBsZW4gPSBvdXQtPmxlbiwgaTsKKworCXN0cmJ1Zl9hZGRmKG91dCwgIiAtJWx1LCVsdSArJWx1LCVsdSAiLAorCQkgICAgaGVhZGVyLT5vbGRfb2Zmc2V0LCBoZWFkZXItPm9sZF9jb3VudCwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCwgaGVhZGVyLT5uZXdfY291bnQpOworCWlmIChvdXQtPmxlbiAtIGxlbiA8IFNVTU1BUllfSEVBREVSX1dJRFRIKQorCQlzdHJidWZfYWRkY2hhcnMob3V0LCAnICcsCisJCQkJU1VNTUFSWV9IRUFERVJfV0lEVEggKyBsZW4gLSBvdXQtPmxlbik7CisJZm9yIChpID0gaHVuay0+c3RhcnQ7IGkgPCBodW5rLT5lbmQ7IGkgPSBmaW5kX25leHRfbGluZShwbGFpbiwgaSkpCisJCWlmIChwbGFpbi0+YnVmW2ldICE9ICcgJykKKwkJCWJyZWFrOworCWlmIChpIDwgaHVuay0+ZW5kKQorCQlzdHJidWZfYWRkKG91dCwgcGxhaW4tPmJ1ZiArIGksIGZpbmRfbmV4dF9saW5lKHBsYWluLCBpKSAtIGkpOworCWlmIChvdXQtPmxlbiAtIGxlbiA+IFNVTU1BUllfTElORV9XSURUSCkKKwkJc3RyYnVmX3NldGxlbihvdXQsIGxlbiArIFNVTU1BUllfTElORV9XSURUSCk7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKK30KKworI2RlZmluZSBESVNQTEFZX0hVTktTX0xJTkVTIDIwCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlfaHVua3Moc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgc2l6ZV90IHN0YXJ0X2luZGV4KQoreworCXNpemVfdCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCArIERJU1BMQVlfSFVOS1NfTElORVM7CisKKwlpZiAoZW5kX2luZGV4ID4gZmlsZV9kaWZmLT5odW5rX25yKQorCQllbmRfaW5kZXggPSBmaWxlX2RpZmYtPmh1bmtfbnI7CisKKwl3aGlsZSAoc3RhcnRfaW5kZXggPCBlbmRfaW5kZXgpIHsKKwkJc3RydWN0IGh1bmsgKmh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBzdGFydF9pbmRleCsrOworCisJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJc3RyYnVmX2FkZGYoJnMtPmJ1ZiwgIiVjJTJkOiAiLCBodW5rLT51c2UgPT0gVVNFX0hVTksgPyAnKycKKwkJCSAgICA6IGh1bmstPnVzZSA9PSBTS0lQX0hVTksgPyAnLScgOiAnICcsCisJCQkgICAgKGludClzdGFydF9pbmRleCk7CisJCXN1bW1hcml6ZV9odW5rKHMsIGh1bmssICZzLT5idWYpOworCQlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCX0KKworCXJldHVybiBlbmRfaW5kZXg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGhlbHBfcGF0Y2hfdGV4dFtdID0KK05fKCJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisgICAibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyAgICJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisgICAiYSAtIHN0YWdlIHRoaXMgYW5kIGFsbCB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCisgICAiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgaGVscF9wYXRjaF9yZW1haW5kZXJbXSA9CitOXygiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisgICAiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyAgICJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisgICAiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisgICAiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyAgICIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisgICAicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisgICAiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorICAgIj8gLSBwcmludCBoZWxwXG4iKTsKKworc3RhdGljIGludCBwYXRjaF91cGRhdGVfZmlsZShzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZikKK3sKKwlzaXplX3QgaHVua19pbmRleCA9IDA7CisJc3NpemVfdCBpLCB1bmRlY2lkZWRfcHJldmlvdXMsIHVuZGVjaWRlZF9uZXh0OworCXN0cnVjdCBodW5rICpodW5rOworCWNoYXIgY2g7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGNvbG9yZWQgPSAhIXMtPmNvbG9yZWQubGVuLCBxdWl0ID0gMDsKKwllbnVtIHByb21wdF9tb2RlX3R5cGUgcHJvbXB0X21vZGVfdHlwZTsKKworCWlmICghZmlsZV9kaWZmLT5odW5rX25yKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwlyZW5kZXJfZGlmZl9oZWFkZXIocywgZmlsZV9kaWZmLCBjb2xvcmVkLCAmcy0+YnVmKTsKKwlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCWZvciAoOzspIHsKKwkJaWYgKGh1bmtfaW5kZXggPj0gZmlsZV9kaWZmLT5odW5rX25yKQorCQkJaHVua19pbmRleCA9IDA7CisJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCisJCXVuZGVjaWRlZF9wcmV2aW91cyA9IC0xOworCQlmb3IgKGkgPSBodW5rX2luZGV4IC0gMTsgaSA+PSAwOyBpLS0pCisJCQlpZiAoZmlsZV9kaWZmLT5odW5rW2ldLnVzZSA9PSBVTkRFQ0lERURfSFVOSykgeworCQkJCXVuZGVjaWRlZF9wcmV2aW91cyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJdW5kZWNpZGVkX25leHQgPSAtMTsKKwkJZm9yIChpID0gaHVua19pbmRleCArIDE7IGkgPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGkrKykKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtbaV0udXNlID09IFVOREVDSURFRF9IVU5LKSB7CisJCQkJdW5kZWNpZGVkX25leHQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCisJCS8qIEV2ZXJ5dGhpbmcgZGVjaWRlZD8gKi8KKwkJaWYgKHVuZGVjaWRlZF9wcmV2aW91cyA8IDAgJiYgdW5kZWNpZGVkX25leHQgPCAwICYmCisJCSAgICBodW5rLT51c2UgIT0gVU5ERUNJREVEX0hVTkspCisJCQlicmVhazsKKworCQlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJCXJlbmRlcl9odW5rKHMsIGh1bmssIDAsIGNvbG9yZWQsICZzLT5idWYpOworCQlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCisJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJaWYgKHVuZGVjaWRlZF9wcmV2aW91cyA+PSAwKQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLGsiKTsKKwkJaWYgKGh1bmtfaW5kZXgpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsSyIpOworCQlpZiAodW5kZWNpZGVkX25leHQgPj0gMCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixqIik7CisJCWlmIChodW5rX2luZGV4ICsgMSA8IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixKIik7CisJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIgPiAxKQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLGcsLyIpOworCQlpZiAoaHVuay0+c3BsaXR0YWJsZV9pbnRvID4gMSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixzIik7CisJCWlmIChodW5rX2luZGV4ICsgMSA+IGZpbGVfZGlmZi0+bW9kZV9jaGFuZ2UgJiYKKwkJICAgICFmaWxlX2RpZmYtPmRlbGV0ZWQpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsZSIpOworCisJCWlmIChmaWxlX2RpZmYtPmRlbGV0ZWQpCisJCQlwcm9tcHRfbW9kZV90eXBlID0gUFJPTVBUX0RFTEVUSU9OOworCQllbHNlIGlmIChmaWxlX2RpZmYtPm1vZGVfY2hhbmdlICYmICFodW5rX2luZGV4KQorCQkJcHJvbXB0X21vZGVfdHlwZSA9IFBST01QVF9NT0RFX0NIQU5HRTsKKwkJZWxzZQorCQkJcHJvbXB0X21vZGVfdHlwZSA9IFBST01QVF9IVU5LOworCisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5zLnByb21wdF9jb2xvciwKKwkJCSAgICAgICIoJSJQUkl1TUFYIi8lIlBSSXVNQVgiKSAiLAorCQkJICAgICAgKHVpbnRtYXhfdClodW5rX2luZGV4ICsgMSwKKwkJCSAgICAgICh1aW50bWF4X3QpZmlsZV9kaWZmLT5odW5rX25yKTsKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnMucHJvbXB0X2NvbG9yLAorCQkJICAgICAgXyhwcm9tcHRfbW9kZVtwcm9tcHRfbW9kZV90eXBlXSksIHMtPmJ1Zi5idWYpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzLT5hbnN3ZXIsIHN0ZGluKSA9PSBFT0YpCisJCQlicmVhazsKKwkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfbmV3bGluZSgmcy0+YW5zd2VyKTsKKworCQlpZiAoIXMtPmFuc3dlci5sZW4pCisJCQljb250aW51ZTsKKwkJY2ggPSB0b2xvd2VyKHMtPmFuc3dlci5idWZbMF0pOworCQlpZiAoY2ggPT0gJ3knKSB7CisJCQlodW5rLT51c2UgPSBVU0VfSFVOSzsKK3NvZnRfaW5jcmVtZW50OgorCQkJaHVua19pbmRleCA9IHVuZGVjaWRlZF9uZXh0IDwgMCA/CisJCQkJZmlsZV9kaWZmLT5odW5rX25yIDogdW5kZWNpZGVkX25leHQ7CisJCX0gZWxzZSBpZiAoY2ggPT0gJ24nKSB7CisJCQlodW5rLT51c2UgPSBTS0lQX0hVTks7CisJCQlnb3RvIHNvZnRfaW5jcmVtZW50OworCQl9IGVsc2UgaWYgKGNoID09ICdhJykgeworCQkJZm9yICg7IGh1bmtfaW5kZXggPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGh1bmtfaW5kZXgrKykgeworCQkJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCQkJCWlmIChodW5rLT51c2UgPT0gVU5ERUNJREVEX0hVTkspCisJCQkJCWh1bmstPnVzZSA9IFVTRV9IVU5LOworCQkJfQorCQl9IGVsc2UgaWYgKGNoID09ICdkJyB8fCBjaCA9PSAncScpIHsKKwkJCWZvciAoOyBodW5rX2luZGV4IDwgZmlsZV9kaWZmLT5odW5rX25yOyBodW5rX2luZGV4KyspIHsKKwkJCQlodW5rID0gZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleDsKKwkJCQlpZiAoaHVuay0+dXNlID09IFVOREVDSURFRF9IVU5LKQorCQkJCQlodW5rLT51c2UgPSBTS0lQX0hVTks7CisJCQl9CisJCQlpZiAoY2ggPT0gJ3EnKSB7CisJCQkJcXVpdCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnSycpIHsKKwkJCWlmIChodW5rX2luZGV4KQorCQkJCWh1bmtfaW5kZXgtLTsKKwkJCWVsc2UKKwkJCQllcnIocywgXygiTm8gcHJldmlvdXMgaHVuayIpKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdKJykgeworCQkJaWYgKGh1bmtfaW5kZXggKyAxIDwgZmlsZV9kaWZmLT5odW5rX25yKQorCQkJCWh1bmtfaW5kZXgrKzsKKwkJCWVsc2UKKwkJCQllcnIocywgXygiTm8gbmV4dCBodW5rIikpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ2snKSB7CisJCQlpZiAodW5kZWNpZGVkX3ByZXZpb3VzID49IDApCisJCQkJaHVua19pbmRleCA9IHVuZGVjaWRlZF9wcmV2aW91czsKKwkJCWVsc2UKKwkJCQllcnIocywgXygiTm8gcHJldmlvdXMgaHVuayIpKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdqJykgeworCQkJaWYgKHVuZGVjaWRlZF9uZXh0ID49IDApCisJCQkJaHVua19pbmRleCA9IHVuZGVjaWRlZF9uZXh0OworCQkJZWxzZQorCQkJCWVycihzLCBfKCJObyBuZXh0IGh1bmsiKSk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnZycpIHsKKwkJCWNoYXIgKnBlbmQ7CisJCQl1bnNpZ25lZCBsb25nIHJlc3BvbnNlOworCisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yIDwgMikgeworCQkJCWVycihzLCBfKCJObyBvdGhlciBodW5rcyB0byBnb3RvIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RyYnVmX3JlbW92ZSgmcy0+YW5zd2VyLCAwLCAxKTsKKwkJCXN0cmJ1Zl90cmltKCZzLT5hbnN3ZXIpOworCQkJaSA9IGh1bmtfaW5kZXggLSBESVNQTEFZX0hVTktTX0xJTkVTIC8gMjsKKwkJCWlmIChpIDwgZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSkKKwkJCQlpID0gZmlsZV9kaWZmLT5tb2RlX2NoYW5nZTsKKwkJCXdoaWxlIChzLT5hbnN3ZXIubGVuID09IDApIHsKKwkJCQlpID0gZGlzcGxheV9odW5rcyhzLCBmaWxlX2RpZmYsIGkpOworCQkJCXByaW50ZigiJXMiLCBpIDwgZmlsZV9kaWZmLT5odW5rX25yID8KKwkJCQkgICAgICAgXygiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlICIKKwkJCQkJICJtb3JlKT8gIikgOiBfKCJnbyB0byB3aGljaCBodW5rPyAiKSk7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzLT5hbnN3ZXIsCisJCQkJCQkgICBzdGRpbikgPT0gRU9GKQorCQkJCQlicmVhazsKKwkJCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZzLT5hbnN3ZXIpOworCQkJfQorCisJCQlzdHJidWZfdHJpbSgmcy0+YW5zd2VyKTsKKwkJCXJlc3BvbnNlID0gc3RydG91bChzLT5hbnN3ZXIuYnVmLCAmcGVuZCwgMTApOworCQkJaWYgKCpwZW5kIHx8IHBlbmQgPT0gcy0+YW5zd2VyLmJ1ZikKKwkJCQllcnIocywgXygiSW52YWxpZCBudW1iZXI6ICclcyciKSwKKwkJCQkgICAgcy0+YW5zd2VyLmJ1Zik7CisJCQllbHNlIGlmICgwIDwgcmVzcG9uc2UgJiYgcmVzcG9uc2UgPD0gZmlsZV9kaWZmLT5odW5rX25yKQorCQkJCWh1bmtfaW5kZXggPSByZXNwb25zZSAtIDE7CisJCQllbHNlCisJCQkJZXJyKHMsIFFfKCJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iLAorCQkJCQkgICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIiwKKwkJCQkJICBmaWxlX2RpZmYtPmh1bmtfbnIpLAorCQkJCSAgICAoaW50KWZpbGVfZGlmZi0+aHVua19ucik7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnLycpIHsKKwkJCXJlZ2V4X3QgcmVnZXg7CisJCQlpbnQgcmV0OworCisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yIDwgMikgeworCQkJCWVycihzLCBfKCJObyBvdGhlciBodW5rcyB0byBzZWFyY2giKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJidWZfcmVtb3ZlKCZzLT5hbnN3ZXIsIDAsIDEpOworCQkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfbmV3bGluZSgmcy0+YW5zd2VyKTsKKwkJCWlmIChzLT5hbnN3ZXIubGVuID09IDApIHsKKwkJCQlwcmludGYoIiVzIiwgXygic2VhcmNoIGZvciByZWdleD8gIikpOworCQkJCWZmbHVzaChzdGRvdXQpOworCQkJCWlmIChzdHJidWZfZ2V0bGluZSgmcy0+YW5zd2VyLAorCQkJCQkJICAgc3RkaW4pID09IEVPRikKKwkJCQkJYnJlYWs7CisJCQkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfbmV3bGluZSgmcy0+YW5zd2VyKTsKKwkJCQlpZiAocy0+YW5zd2VyLmxlbiA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJldCA9IHJlZ2NvbXAoJnJlZ2V4LCBzLT5hbnN3ZXIuYnVmLAorCQkJCSAgICAgIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQiB8IFJFR19ORVdMSU5FKTsKKwkJCWlmIChyZXQpIHsKKwkJCQljaGFyIGVycmJ1ZlsxMDI0XTsKKworCQkJCXJlZ2Vycm9yKHJldCwgJnJlZ2V4LCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKKwkJCQllcnIocywgXygiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIiksCisJCQkJICAgIHMtPmFuc3dlci5idWYsIGVycmJ1Zik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpID0gaHVua19pbmRleDsKKwkJCWZvciAoOzspIHsKKwkJCQkvKiByZW5kZXIgdGhlIGh1bmsgaW50byBhIHNjcmF0Y2ggYnVmZmVyICovCisJCQkJcmVuZGVyX2h1bmsocywgZmlsZV9kaWZmLT5odW5rICsgaSwgMCwgMCwKKwkJCQkJICAgICZzLT5idWYpOworCQkJCWlmIChyZWdleGVjKCZyZWdleCwgcy0+YnVmLmJ1ZiwgMCwgTlVMTCwgMCkKKwkJCQkgICAgIT0gUkVHX05PTUFUQ0gpCisJCQkJCWJyZWFrOworCQkJCWkrKzsKKwkJCQlpZiAoaSA9PSBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCQkJCWkgPSAwOworCQkJCWlmIChpICE9IGh1bmtfaW5kZXgpCisJCQkJCWNvbnRpbnVlOworCQkJCWVycihzLCBfKCJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlodW5rX2luZGV4ID0gaTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdzJykgeworCQkJc2l6ZV90IHNwbGl0dGFibGVfaW50byA9IGh1bmstPnNwbGl0dGFibGVfaW50bzsKKwkJCWlmIChzcGxpdHRhYmxlX2ludG8gPCAyKQorCQkJCWVycihzLCBfKCJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIpKTsKKwkJCWVsc2UgaWYgKCFzcGxpdF9odW5rKHMsIGZpbGVfZGlmZiwKKwkJCQkJICAgICBodW5rIC0gZmlsZV9kaWZmLT5odW5rKSkKKwkJCQljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+cy5oZWFkZXJfY29sb3IsCisJCQkJCQkgXygiU3BsaXQgaW50byAlZCBodW5rcy4iKSwKKwkJCQkJCSAoaW50KXNwbGl0dGFibGVfaW50byk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnZScpIHsKKwkJCWlmIChodW5rX2luZGV4ICsgMSA9PSBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCWVycihzLCBfKCJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIikpOworCQkJZWxzZSBpZiAoZWRpdF9odW5rX2xvb3AocywgZmlsZV9kaWZmLCBodW5rKSA+PSAwKSB7CisJCQkJaHVuay0+dXNlID0gVVNFX0hVTks7CisJCQkJZ290byBzb2Z0X2luY3JlbWVudDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSBfKGhlbHBfcGF0Y2hfcmVtYWluZGVyKSwgKmVvbCA9IHA7CisKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5zLmhlbHBfY29sb3IsICIlcyIsCisJCQkJICAgICAgXyhoZWxwX3BhdGNoX3RleHQpKTsKKworCQkJLyoKKwkJCSAqIFNob3cgb25seSB0aG9zZSBsaW5lcyBvZiB0aGUgcmVtYWluZGVyIHRoYXQgYXJlCisJCQkgKiBhY3R1YWxseSBhcHBsaWNhYmxlIHdpdGggdGhlIGN1cnJlbnQgaHVuay4KKwkJCSAqLworCQkJZm9yICg7ICpwOyBwID0gZW9sICsgKCplb2wgPT0gJ1xuJykpIHsKKwkJCQllb2wgPSBzdHJjaHJudWwocCwgJ1xuJyk7CisKKwkJCQkvKgorCQkJCSAqIGBzLT5idWZgIHN0aWxsIGNvbnRhaW5zIHRoZSBwYXJ0IG9mIHRoZQorCQkJCSAqIGNvbW1hbmRzIHNob3duIGluIHRoZSBwcm9tcHQgdGhhdCBhcmUgbm90CisJCQkJICogYWx3YXlzIGF2YWlsYWJsZS4KKwkJCQkgKi8KKwkJCQlpZiAoKnAgIT0gJz8nICYmICFzdHJjaHIocy0+YnVmLmJ1ZiwgKnApKQorCQkJCQljb250aW51ZTsKKworCQkJCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5zLmhlbHBfY29sb3IsCisJCQkJCQkgIiUuKnMiLCAoaW50KShlb2wgLSBwKSwgcCk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBBbnkgaHVuayB0byBiZSB1c2VkPyAqLworCWZvciAoaSA9IDA7IGkgPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGkrKykKKwkJaWYgKGZpbGVfZGlmZi0+aHVua1tpXS51c2UgPT0gVVNFX0hVTkspCisJCQlicmVhazsKKworCWlmIChpIDwgZmlsZV9kaWZmLT5odW5rX25yKSB7CisJCS8qIEF0IGxlYXN0IG9uZSBodW5rIHNlbGVjdGVkOiBhcHBseSAqLworCQlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJCXJlYXNzZW1ibGVfcGF0Y2gocywgZmlsZV9kaWZmLCAwLCAmcy0+YnVmKTsKKworCQlkaXNjYXJkX2luZGV4KHMtPnMuci0+aW5kZXgpOworCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjcCwgImFwcGx5IiwgIi0tY2FjaGVkIiwgTlVMTCk7CisJCWlmIChwaXBlX2NvbW1hbmQoJmNwLCBzLT5idWYuYnVmLCBzLT5idWYubGVuLAorCQkJCSBOVUxMLCAwLCBOVUxMLCAwKSkKKwkJCWVycm9yKF8oIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIpKTsKKwkJaWYgKCFyZXBvX3JlYWRfaW5kZXgocy0+cy5yKSkKKwkJCXJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgocy0+cy5yLCBSRUZSRVNIX1FVSUVULCAwLAorCQkJCQkJICAgICAxLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwl9CisKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiBxdWl0OworfQorCitpbnQgcnVuX2FkZF9wKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCXN0cnVjdCBhZGRfcF9zdGF0ZSBzID0geworCQl7IHIgfSwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXNpemVfdCBpLCBiaW5hcnlfY291bnQgPSAwOworCisJaW5pdF9hZGRfaV9zdGF0ZSgmcy5zLCByKTsKKworCWlmIChkaXNjYXJkX2luZGV4KHItPmluZGV4KSA8IDAgfHwgcmVwb19yZWFkX2luZGV4KHIpIDwgMCB8fAorCSAgICByZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHIsIFJFRlJFU0hfUVVJRVQsIDAsIDEsCisJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKSA8IDAgfHwKKwkgICAgcGFyc2VfZGlmZigmcywgcHMpIDwgMCkgeworCQlzdHJidWZfcmVsZWFzZSgmcy5wbGFpbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzLmNvbG9yZWQpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHMuZmlsZV9kaWZmX25yOyBpKyspCisJCWlmIChzLmZpbGVfZGlmZltpXS5iaW5hcnkgJiYgIXMuZmlsZV9kaWZmW2ldLmh1bmtfbnIpCisJCQliaW5hcnlfY291bnQrKzsKKwkJZWxzZSBpZiAocGF0Y2hfdXBkYXRlX2ZpbGUoJnMsIHMuZmlsZV9kaWZmICsgaSkpCisJCQlicmVhazsKKworCWlmIChzLmZpbGVfZGlmZl9uciA9PSAwKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiTm8gY2hhbmdlcy5cbiIpKTsKKwllbHNlIGlmIChiaW5hcnlfY291bnQgPT0gcy5maWxlX2RpZmZfbnIpCisJCWZwcmludGYoc3RkZXJyLCBfKCJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIikpOworCisJc3RyYnVmX3JlbGVhc2UoJnMuYW5zd2VyKTsKKwlzdHJidWZfcmVsZWFzZSgmcy5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzLnBsYWluKTsKKwlzdHJidWZfcmVsZWFzZSgmcy5jb2xvcmVkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FkdmljZS5jIGIvYWR2aWNlLmMKaW5kZXggM2VlMGVlMi4uMjQ5YzYwZCAxMDA2NDQKLS0tIGEvYWR2aWNlLmMKKysrIGIvYWR2aWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKIGludCBhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkID0gMTsKIGludCBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSA9IDE7CiBpbnQgYWR2aWNlX25lc3RlZF90YWcgPSAxOworaW50IGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZSA9IDE7CiAKIHN0YXRpYyBpbnQgYWR2aWNlX3VzZV9jb2xvciA9IC0xOwogc3RhdGljIGNoYXIgYWR2aWNlX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CkBAIC04OSw2ICs5MCw3IEBACiAJeyAiZ3JhZnRGaWxlRGVwcmVjYXRlZCIsICZhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkIH0sCiAJeyAiY2hlY2tvdXRBbWJpZ3VvdXNSZW1vdGVCcmFuY2hOYW1lIiwgJmFkdmljZV9jaGVja291dF9hbWJpZ3VvdXNfcmVtb3RlX2JyYW5jaF9uYW1lIH0sCiAJeyAibmVzdGVkVGFnIiwgJmFkdmljZV9uZXN0ZWRfdGFnIH0sCisJeyAic3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZSIsICZhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWUgfSwKIAogCS8qIG1ha2UgdGhpcyBhbiBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCXsgInB1c2hOb25GYXN0Rm9yd2FyZCIsICZhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQgfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaAppbmRleCBkMDE1NDA0Li5iNzA2NzgwIDEwMDY0NAotLS0gYS9hZHZpY2UuaAorKysgYi9hZHZpY2UuaApAQCAtMzAsNiArMzAsNyBAQAogZXh0ZXJuIGludCBhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkOwogZXh0ZXJuIGludCBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZTsKIGV4dGVybiBpbnQgYWR2aWNlX25lc3RlZF90YWc7CitleHRlcm4gaW50IGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZTsKIAogaW50IGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQpkaWZmIC0tZ2l0IGEvYXBwbHkuYyBiL2FwcGx5LmMKaW5kZXggZjhhMDQ2YS4uZmFiNDQzMiAxMDA2NDQKLS0tIGEvYXBwbHkuYworKysgYi9hcHBseS5jCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS53aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm9wdGlvbikKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCiAJLyoKIAkgKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQotCSAqIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvN3ZsbDB3dmIyYS5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0LworCSAqIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmxsMHd2YjJhLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvCiAJICovCiAJaWYgKHVucXVvdGVfY19zdHlsZSgmbmFtZSwgbGluZSwgTlVMTCkpIHsKIAkJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOwpAQCAtMjY2Miw2ICsyNjYyLDE2IEBACiAJaW50IGJhY2t3YXJkc19sbm8sIGZvcndhcmRzX2xubywgY3VycmVudF9sbm87CiAKIAkvKgorCSAqIFdoZW4gcnVubmluZyB3aXRoIC0tYWxsb3ctb3ZlcmxhcCwgaXQgaXMgcG9zc2libGUgdGhhdCBhIGh1bmsgaXMKKwkgKiBzZWVuIHRoYXQgcHJldGVuZHMgdG8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZyAoYnV0IG5vIGxvbmdlciBkb2VzKSwKKwkgKiBhbmQgdGhhdCAqc3RpbGwqIG5lZWRzIHRvIG1hdGNoIHRoZSBlbmQuIFNvIHRydXN0IGBtYXRjaF9lbmRgIG1vcmUKKwkgKiB0aGFuIGBtYXRjaF9iZWdpbm5pbmdgLgorCSAqLworCWlmIChzdGF0ZS0+YWxsb3dfb3ZlcmxhcCAmJiBtYXRjaF9iZWdpbm5pbmcgJiYgbWF0Y2hfZW5kICYmCisJICAgIGltZy0+bnIgLSBwcmVpbWFnZS0+bnIgIT0gMCkKKwkJbWF0Y2hfYmVnaW5uaW5nID0gMDsKKworCS8qCiAJICogSWYgbWF0Y2hfYmVnaW5uaW5nIG9yIG1hdGNoX2VuZCBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vCiAJICogcG9pbnQgc3RhcnRpbmcgZnJvbSBhIHdyb25nIGxpbmUgdGhhdCB3aWxsIG5ldmVyIG1hdGNoIGFuZAogCSAqIHdhbmRlciBhcm91bmQgYW5kIHdhaXQgZm9yIGEgbWF0Y2ggYXQgdGhlIHNwZWNpZmllZCBlbmQuCkBAIC00MTgzLDggKzQxOTMsOCBAQAogCQlvbGRfbmFtZSA9IHNsYXNoX29sZCArIDE7CiAJCW5ld19uYW1lID0gc2xhc2hfbmV3ICsgMTsKIAl9Ci0JLyogcC0+b2xkX25hbWUgdGhydSBvbGRfbmFtZSBpcyB0aGUgY29tbW9uIHByZWZpeCwgYW5kIG9sZF9uYW1lIGFuZCBuZXdfbmFtZQotCSAqIHRocm91Z2ggdGhlIGVuZCBvZiBuYW1lcyBhcmUgcmVuYW1lcworCS8qIHAtPm9sZF9uYW1lIHRocm91Z2ggb2xkX25hbWUgaXMgdGhlIGNvbW1vbiBwcmVmaXgsIGFuZCBvbGRfbmFtZSBhbmQKKwkgKiBuZXdfbmFtZSB0aHJvdWdoIHRoZSBlbmQgb2YgbmFtZXMgYXJlIHJlbmFtZXMKIAkgKi8KIAlpZiAob2xkX25hbWUgIT0gcC0+b2xkX25hbWUpCiAJCXByaW50ZigiICVzICUuKnN7JXMgPT4gJXN9ICglZCUlKVxuIiwgcmVuYW1lY29weSwKZGlmZiAtLWdpdCBhL2FyY2hpdmUtemlwLmMgYi9hcmNoaXZlLXppcC5jCmluZGV4IDRkNjZiNWIuLjExZjViMTkgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUtemlwLmMKKysrIGIvYXJjaGl2ZS16aXAuYwpAQCAtMjQsNiArMjQsMTEgQEAKICNkZWZpbmUgWklQX1NUUkVBTQkoMSA8PCAgMykKICNkZWZpbmUgWklQX1VURjgJKDEgPDwgMTEpCiAKK2VudW0gemlwX21ldGhvZCB7CisJWklQX01FVEhPRF9TVE9SRSA9IDAsCisJWklQX01FVEhPRF9ERUZMQVRFID0gOAorfTsKKwogc3RydWN0IHppcF9sb2NhbF9oZWFkZXIgewogCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CiAJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOwpAQCAtMjkxLDcgKzI5Niw3IEBACiAJdW5zaWduZWQgbG9uZyBhdHRyMjsKIAl1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGNyYzsKLQlpbnQgbWV0aG9kOworCWVudW0gemlwX21ldGhvZCBtZXRob2Q7CiAJdW5zaWduZWQgY2hhciAqb3V0OwogCXZvaWQgKmRlZmxhdGVkID0gTlVMTDsKIAl2b2lkICpidWZmZXI7CkBAIC0zMjAsNyArMzI1LDcgQEAKIAl9CiAKIAlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgewotCQltZXRob2QgPSAwOworCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOwogCQlhdHRyMiA9IDE2OwogCQlvdXQgPSBOVUxMOwogCQlzaXplID0gMDsKQEAgLTMzMCwxMyArMzM1LDEzIEBACiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhhcmdzLT5yZXBvLCBvaWQsCiAJCQkJCQkJJnNpemUpOwogCi0JCW1ldGhvZCA9IDA7CisJCW1ldGhvZCA9IFpJUF9NRVRIT0RfU1RPUkU7CiAJCWF0dHIyID0gU19JU0xOSyhtb2RlKSA/ICgobW9kZSB8IDA3NzcpIDw8IDE2KSA6CiAJCQkobW9kZSAmIDAxMTEpID8gKChtb2RlKSA8PCAxNikgOiAwOwogCQlpZiAoU19JU0xOSyhtb2RlKSB8fCAobW9kZSAmIDAxMTEpKQogCQkJY3JlYXRvcl92ZXJzaW9uID0gMHgwMzE3OwogCQlpZiAoU19JU1JFRyhtb2RlKSAmJiBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCAhPSAwICYmIHNpemUgPiAwKQotCQkJbWV0aG9kID0gODsKKwkJCW1ldGhvZCA9IFpJUF9NRVRIT0RfREVGTEFURTsKIAogCQlpZiAoU19JU1JFRyhtb2RlKSAmJiB0eXBlID09IE9CSl9CTE9CICYmICFhcmdzLT5jb252ZXJ0ICYmCiAJCSAgICBzaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkKSB7CkBAIC0zNTgsNyArMzYzLDcgQEAKIAkJCQkJCSAgICBidWZmZXIsIHNpemUpOwogCQkJb3V0ID0gYnVmZmVyOwogCQl9Ci0JCWNvbXByZXNzZWRfc2l6ZSA9IChtZXRob2QgPT0gMCkgPyBzaXplIDogMDsKKwkJY29tcHJlc3NlZF9zaXplID0gKG1ldGhvZCA9PSBaSVBfTUVUSE9EX1NUT1JFKSA/IHNpemUgOiAwOwogCX0gZWxzZSB7CiAJCXJldHVybiBlcnJvcihfKCJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIiksIG1vZGUsCiAJCQkJb2lkX3RvX2hleChvaWQpKTsKQEAgLTM2NywxMyArMzcyLDEzIEBACiAJaWYgKGNyZWF0b3JfdmVyc2lvbiA+IG1heF9jcmVhdG9yX3ZlcnNpb24pCiAJCW1heF9jcmVhdG9yX3ZlcnNpb24gPSBjcmVhdG9yX3ZlcnNpb247CiAKLQlpZiAoYnVmZmVyICYmIG1ldGhvZCA9PSA4KSB7CisJaWYgKGJ1ZmZlciAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9ERUZMQVRFKSB7CiAJCW91dCA9IGRlZmxhdGVkID0gemxpYl9kZWZsYXRlX3JhdyhidWZmZXIsIHNpemUsCiAJCQkJCQkgIGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsLAogCQkJCQkJICAmY29tcHJlc3NlZF9zaXplKTsKIAkJaWYgKCFvdXQgfHwgY29tcHJlc3NlZF9zaXplID49IHNpemUpIHsKIAkJCW91dCA9IGJ1ZmZlcjsKLQkJCW1ldGhvZCA9IDA7CisJCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOwogCQkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKIAkJfQogCX0KQEAgLTQyMCw3ICs0MjUsNyBAQAogCQl6aXBfb2Zmc2V0ICs9IFpJUDY0X0VYVFJBX1NJWkU7CiAJfQogCi0JaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gMCkgeworCWlmIChzdHJlYW0gJiYgbWV0aG9kID09IFpJUF9NRVRIT0RfU1RPUkUpIHsKIAkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKIAkJc3NpemVfdCByZWFkbGVuOwogCkBAIC00NDMsNyArNDQ4LDcgQEAKIAkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CiAKIAkJd3JpdGVfemlwX2RhdGFfZGVzYyhzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7Ci0JfSBlbHNlIGlmIChzdHJlYW0gJiYgbWV0aG9kID09IDgpIHsKKwl9IGVsc2UgaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9ERUZMQVRFKSB7CiAJCXVuc2lnbmVkIGNoYXIgYnVmW1NUUkVBTV9CVUZGRVJfU0laRV07CiAJCXNzaXplX3QgcmVhZGxlbjsKIAkJZ2l0X3pzdHJlYW0genN0cmVhbTsKQEAgLTYwMywxOCArNjA4LDE4IEBACiBzdGF0aWMgdm9pZCBkb3NfdGltZSh0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBpbnQgKmRvc19kYXRlLCBpbnQgKmRvc190aW1lKQogewogCXRpbWVfdCB0aW1lOwotCXN0cnVjdCB0bSAqdDsKKwlzdHJ1Y3QgdG0gdG07CiAKIAlpZiAoZGF0ZV9vdmVyZmxvd3MoKnRpbWVzdGFtcCkpCiAJCWRpZShfKCJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJSJQUkl0aW1lKSwKIAkJICAgICp0aW1lc3RhbXApOwogCXRpbWUgPSAodGltZV90KSp0aW1lc3RhbXA7Ci0JdCA9IGxvY2FsdGltZSgmdGltZSk7CisJbG9jYWx0aW1lX3IoJnRpbWUsICZ0bSk7CiAJKnRpbWVzdGFtcCA9IHRpbWU7CiAKLQkqZG9zX2RhdGUgPSB0LT50bV9tZGF5ICsgKHQtPnRtX21vbiArIDEpICogMzIgKwotCSAgICAgICAgICAgICh0LT50bV95ZWFyICsgMTkwMCAtIDE5ODApICogNTEyOwotCSpkb3NfdGltZSA9IHQtPnRtX3NlYyAvIDIgKyB0LT50bV9taW4gKiAzMiArIHQtPnRtX2hvdXIgKiAyMDQ4OworCSpkb3NfZGF0ZSA9IHRtLnRtX21kYXkgKyAodG0udG1fbW9uICsgMSkgKiAzMiArCisJCSAgICAodG0udG1feWVhciArIDE5MDAgLSAxOTgwKSAqIDUxMjsKKwkqZG9zX3RpbWUgPSB0bS50bV9zZWMgLyAyICsgdG0udG1fbWluICogMzIgKyB0bS50bV9ob3VyICogMjA0ODsKIH0KIAogc3RhdGljIGludCBhcmNoaXZlX3ppcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2FyZ3YtYXJyYXkuYyBiL2FyZ3YtYXJyYXkuYwppbmRleCBmMzUyZWE5Li42MWVmOGMwIDEwMDY0NAotLS0gYS9hcmd2LWFycmF5LmMKKysrIGIvYXJndi1hcnJheS5jCkBAIC00Niw3ICs0Niw3IEBACiAJY29uc3QgY2hhciAqYXJnOwogCiAJdmFfc3RhcnQoYXAsIGFycmF5KTsKLQl3aGlsZSgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKKwl3aGlsZSAoKGFyZyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKSkpCiAJCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgYXJnKTsKIAl2YV9lbmQoYXApOwogfQpkaWZmIC0tZ2l0IGEvYXJndi1hcnJheS5oIGIvYXJndi1hcnJheS5oCmluZGV4IGEzOWJhNDMuLmE3ZDNiMTAgMTAwNjQ0Ci0tLSBhL2FyZ3YtYXJyYXkuaAorKysgYi9hcmd2LWFycmF5LmgKQEAgLTEsOCArMSwzMiBAQAogI2lmbmRlZiBBUkdWX0FSUkFZX0gKICNkZWZpbmUgQVJHVl9BUlJBWV9ICiAKKy8qKgorICogVGhlIGFyZ3YtYXJyYXkgQVBJIGFsbG93cyBvbmUgdG8gZHluYW1pY2FsbHkgYnVpbGQgYW5kIHN0b3JlCisgKiBOVUxMLXRlcm1pbmF0ZWQgbGlzdHMuICBBbiBhcmd2LWFycmF5IG1haW50YWlucyB0aGUgaW52YXJpYW50IHRoYXQgdGhlCisgKiBgYXJndmAgbWVtYmVyIGFsd2F5cyBwb2ludHMgdG8gYSBub24tTlVMTCBhcnJheSwgYW5kIHRoYXQgdGhlIGFycmF5IGlzCisgKiBhbHdheXMgTlVMTC10ZXJtaW5hdGVkIGF0IHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgYGFyZ3ZbYXJnY11gLiBUaGlzCisgKiBtYWtlcyB0aGUgcmVzdWx0IHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGZ1bmN0aW9ucyBleHBlY3RpbmcgdG8gcmVjZWl2ZQorICogYXJndiBmcm9tIG1haW4oKS4KKyAqCisgKiBUaGUgc3RyaW5nLWxpc3QgQVBJIChkb2N1bWVudGVkIGluIHN0cmluZy1saXN0LmgpIGlzIHNpbWlsYXIsIGJ1dCBjYW5ub3QgYmUKKyAqIHVzZWQgZm9yIHRoZXNlIHB1cnBvc2VzOyBpbnN0ZWFkIG9mIHN0b3JpbmcgYSBzdHJhaWdodCBzdHJpbmcgcG9pbnRlciwKKyAqIGl0IGNvbnRhaW5zIGFuIGl0ZW0gc3RydWN0dXJlIHdpdGggYSBgdXRpbGAgZmllbGQgdGhhdCBpcyBub3QgY29tcGF0aWJsZQorICogd2l0aCB0aGUgdHJhZGl0aW9uYWwgYXJndiBpbnRlcmZhY2UuCisgKgorICogRWFjaCBgYXJndl9hcnJheWAgbWFuYWdlcyBpdHMgb3duIG1lbW9yeS4gQW55IHN0cmluZ3MgcHVzaGVkIGludG8gdGhlCisgKiBhcnJheSBhcmUgZHVwbGljYXRlZCwgYW5kIGFsbCBtZW1vcnkgaXMgZnJlZWQgYnkgYXJndl9hcnJheV9jbGVhcigpLgorICovCisKIGV4dGVybiBjb25zdCBjaGFyICplbXB0eV9hcmd2W107CiAKKy8qKgorICogQSBzaW5nbGUgYXJyYXkuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQorICogYEFSR1ZfQVJSQVlfSU5JVGAsIG9yIGJ5IGNhbGxpbmcgYGFyZ3ZfYXJyYXlfaW5pdGAuIFRoZSBgYXJndmAKKyAqIG1lbWJlciBjb250YWlucyB0aGUgYWN0dWFsIGFycmF5OyB0aGUgYGFyZ2NgIG1lbWJlciBjb250YWlucyB0aGUKKyAqIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXksIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgKiBOVUxMLgorICovCiBzdHJ1Y3QgYXJndl9hcnJheSB7CiAJY29uc3QgY2hhciAqKmFyZ3Y7CiAJaW50IGFyZ2M7CkBAIC0xMSwxNyArMzUsNTUgQEAKIAogI2RlZmluZSBBUkdWX0FSUkFZX0lOSVQgeyBlbXB0eV9hcmd2LCAwLCAwIH0KIAorLyoqCisgKiBJbml0aWFsaXplIGFuIGFycmF5LiBUaGlzIGlzIG5vIGRpZmZlcmVudCB0aGFuIGFzc2lnbmluZyBmcm9tCisgKiBgQVJHVl9BUlJBWV9JTklUYC4KKyAqLwogdm9pZCBhcmd2X2FycmF5X2luaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKik7CisKKy8qIFB1c2ggYSBjb3B5IG9mIGEgc3RyaW5nIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuICovCiBjb25zdCBjaGFyICphcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBGb3JtYXQgYSBzdHJpbmcgYW5kIHB1c2ggaXQgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gVGhpcyBpcyBhCisgKiBjb252ZW5pZW5jZSB3cmFwcGVyIGNvbWJpbmluZyBgc3RyYnVmX2FkZGZgIGFuZCBgYXJndl9hcnJheV9wdXNoYC4KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwzKSkpCiBjb25zdCBjaGFyICphcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBQdXNoIGEgbGlzdCBvZiBzdHJpbmdzIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFRoZSBhcmd1bWVudHMKKyAqIHNob3VsZCBiZSBhIGxpc3Qgb2YgYGNvbnN0IGNoYXIgKmAgc3RyaW5ncywgdGVybWluYXRlZCBieSBhIE5VTEwKKyAqIGFyZ3VtZW50LgorICovCiBMQVNUX0FSR19NVVNUX0JFX05VTEwKIHZvaWQgYXJndl9hcnJheV9wdXNobChzdHJ1Y3QgYXJndl9hcnJheSAqLCAuLi4pOworCisvKiBQdXNoIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gKi8KIHZvaWQgYXJndl9hcnJheV9wdXNodihzdHJ1Y3QgYXJndl9hcnJheSAqLCBjb25zdCBjaGFyICoqKTsKKworLyoqCisgKiBSZW1vdmUgdGhlIGZpbmFsIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuIElmIHRoZXJlIGFyZSBubworICogZWxlbWVudHMgaW4gdGhlIGFycmF5LCBkbyBub3RoaW5nLgorICovCiB2b2lkIGFyZ3ZfYXJyYXlfcG9wKHN0cnVjdCBhcmd2X2FycmF5ICopOworCiAvKiBTcGxpdHMgYnkgd2hpdGVzcGFjZTsgZG9lcyBub3QgaGFuZGxlIHF1b3RlZCBhcmd1bWVudHMhICovCiB2b2lkIGFyZ3ZfYXJyYXlfc3BsaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBGcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcnJheSBhbmQgcmV0dXJuIGl0IHRvIHRoZQorICogaW5pdGlhbCwgZW1wdHkgc3RhdGUuCisgKi8KIHZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworLyoqCisgKiBEaXNjb25uZWN0IHRoZSBgYXJndmAgbWVtYmVyIGZyb20gdGhlIGBhcmd2X2FycmF5YCBzdHJ1Y3QgYW5kCisgKiByZXR1cm4gaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIG1lbW9yeSB1c2VkCisgKiBieSB0aGUgYXJyYXksIGFuZCBieSB0aGUgc3RyaW5ncyBpdCByZWZlcmVuY2VzLiBBZnRlciBkZXRhY2hpbmcsCisgKiB0aGUgYGFyZ3ZfYXJyYXlgIGlzIGluIGEgcmVpbml0aWFsaXplZCBzdGF0ZSBhbmQgY2FuIGJlIHB1c2hlZAorICogaW50byBhZ2Fpbi4KKyAqLwogY29uc3QgY2hhciAqKmFyZ3ZfYXJyYXlfZGV0YWNoKHN0cnVjdCBhcmd2X2FycmF5ICopOwogCiAjZW5kaWYgLyogQVJHVl9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hdHRyLmMgYi9hdHRyLmMKaW5kZXggMTFmMTliNS4uYTgyNmIyZSAxMDA2NDQKLS0tIGEvYXR0ci5jCisrKyBiL2F0dHIuYwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAgKiBIYW5kbGUgZ2l0IGF0dHJpYnV0ZXMuICBTZWUgZ2l0YXR0cmlidXRlcyg1KSBmb3IgYSBkZXNjcmlwdGlvbiBvZgotICogdGhlIGZpbGUgc3ludGF4LCBhbmQgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0Ci0gKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLgorICogdGhlIGZpbGUgc3ludGF4LCBhbmQgYXR0ci5oIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEkuCiAgKgogICogT25lIGJhc2ljIGRlc2lnbiBkZWNpc2lvbiBoZXJlIGlzIHRoYXQgd2UgYXJlIG5vdCBnb2luZyB0byBzdXBwb3J0CiAgKiBhbiBpbnNhbmVseSBsYXJnZSBudW1iZXIgb2YgYXR0cmlidXRlcy4KZGlmZiAtLWdpdCBhL2F0dHIuaCBiL2F0dHIuaAppbmRleCBiMDM3OGJmLi40MDQ1NDhmIDEwMDY0NAotLS0gYS9hdHRyLmgKKysrIGIvYXR0ci5oCkBAIC0xLDkgKzEsMTIxIEBACiAjaWZuZGVmIEFUVFJfSAogI2RlZmluZSBBVFRSX0gKIAorLyoqCisgKiBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBnaXZlcyBhIHVuaWZvcm0gd2F5IHRvIGFzc29jaWF0ZSB2YXJpb3VzIGF0dHJpYnV0ZXMKKyAqIHRvIHNldCBvZiBwYXRocy4KKyAqCisgKgorICogUXVlcnlpbmcgU3BlY2lmaWMgQXR0cmlidXRlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gUHJlcGFyZSBgc3RydWN0IGF0dHJfY2hlY2tgIHVzaW5nIGF0dHJfY2hlY2tfaW5pdGwoKSBmdW5jdGlvbiwgZW51bWVyYXRpbmcKKyAqICAgdGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgdGVybWluYXRlZCB3aXRoCisgKiAgIGEgTlVMTCBwb2ludGVyLiAgQWx0ZXJuYXRpdmVseSwgYW4gZW1wdHkgYHN0cnVjdCBhdHRyX2NoZWNrYCBjYW4gYmUKKyAqICAgcHJlcGFyZWQgYnkgY2FsbGluZyBgYXR0cl9jaGVja19hbGxvYygpYCBmdW5jdGlvbiBhbmQgdGhlbiBhdHRyaWJ1dGVzIHlvdQorICogICB3YW50IHRvIGFzayBhYm91dCBjYW4gYmUgYWRkZWQgdG8gaXQgd2l0aCBgYXR0cl9jaGVja19hcHBlbmQoKWAgZnVuY3Rpb24uCisgKgorICogLSBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB0byBjaGVjayB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHBhdGguCisgKgorICogLSBJbnNwZWN0IGBhdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyBlYWNoIG9mIHRoZSBhdHRyaWJ1dGUgaW4gdGhlCisgKiAgIGFycmF5IGlzIGRlZmluZWQgZm9yIHRoZSBwYXRoLgorICoKKyAqCisgKiBFeGFtcGxlCisgKiAtLS0tLS0tCisgKgorICogVG8gc2VlIGhvdyBhdHRyaWJ1dGVzICJjcmxmIiBhbmQgImlkZW50IiBhcmUgc2V0IGZvciBkaWZmZXJlbnQgcGF0aHMuCisgKgorICogLSBQcmVwYXJlIGEgYHN0cnVjdCBhdHRyX2NoZWNrYCB3aXRoIHR3byBlbGVtZW50cyAoYmVjYXVzZSB3ZSBhcmUgY2hlY2tpbmcKKyAqICAgdHdvIGF0dHJpYnV0ZXMpOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKyAqIHN0YXRpYyB2b2lkIHNldHVwX2NoZWNrKHZvaWQpCisgKiB7CisgKiAJaWYgKGNoZWNrKQorICogCQlyZXR1cm47IC8vIGFscmVhZHkgZG9uZQorICogY2hlY2sgPSBhdHRyX2NoZWNrX2luaXRsKCJjcmxmIiwgImlkZW50IiwgTlVMTCk7CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIENhbGwgYGdpdF9jaGVja19hdHRyKClgIHdpdGggdGhlIHByZXBhcmVkIGBzdHJ1Y3QgYXR0cl9jaGVja2A6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBjb25zdCBjaGFyICpwYXRoOworICoKKyAqIHNldHVwX2NoZWNrKCk7CisgKiBnaXRfY2hlY2tfYXR0cihwYXRoLCBjaGVjayk7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIEFjdCBvbiBgLnZhbHVlYCBtZW1iZXIgb2YgdGhlIHJlc3VsdCwgbGVmdCBpbiBgY2hlY2stPml0ZW1zW11gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+aXRlbXNbMF0udmFsdWU7CisgKgorICogaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKyAqIFRoZSBhdHRyaWJ1dGUgaXMgU2V0LCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisgKiBhdHRyaWJ1dGUgaW4gdGhlIGdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIFVuc2V0LCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZQorICogICAgICAgICBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCBhIGRhc2ggLSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIG5laXRoZXIgc2V0IG5vciB1bnNldCBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisgKiBJZiBub25lIG9mIEFUVFJfVFJVRSgpLCBBVFRSX0ZBTFNFKCksIG9yIEFUVFJfVU5TRVQoKSBpcworICogICAgICAgICB0cnVlLCB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgc2V0IGluIHRoZSBnaXRhdHRyaWJ1dGVzCisgKiBmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgorICogfSBlbHNlIGlmICguLi4gb3RoZXIgY2hlY2sgdXNpbmcgdmFsdWUgYXMgc3RyaW5nIC4uLikgeworICogLi4uCisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBUbyBzZWUgaG93IGF0dHJpYnV0ZXMgaW4gYXJndltdIGFyZSBzZXQgZm9yIGRpZmZlcmVudCBwYXRocywgb25seQorICogdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGFib3ZlIHdvdWxkIGJlIGRpZmZlcmVudC4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisgKiBzdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKKyAqIHsKKyAqICAgICBjaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKyAqICAgICB3aGlsZSAoKmFyZ3YpIHsKKyAqICAgICAgICAgc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOworICogICAgICAgICBhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7CisgKiAgICAgICAgIGFyZ3YrKzsKKyAqICAgICB9CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogUXVlcnlpbmcgQWxsIEF0dHJpYnV0ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKKyAqCisgKiAtIFByZXBhcmUgYW4gZW1wdHkgYGF0dHJfY2hlY2tgIHN0cnVjdHVyZSBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2FsbG9jKClgLgorICoKKyAqIC0gQ2FsbCBgZ2l0X2FsbF9hdHRycygpYCwgd2hpY2ggcG9wdWxhdGVzIHRoZSBgYXR0cl9jaGVja2Agd2l0aCB0aGUKKyAqIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gdGhlIHBhdGguCisgKgorICogLSBJdGVyYXRlIG92ZXIgdGhlIGBhdHRyX2NoZWNrLml0ZW1zW11gIGFycmF5IHRvIGV4YW1pbmUgdGhlIGF0dHJpYnV0ZQorICogbmFtZXMgYW5kIHZhbHVlcy4gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBkZXNjcmliZWQgYnkgYW4KKyAqIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHZpYQorICogYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICogcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwKKyAqIHJldHVybmVkIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdHMuKQorICoKKyAqIC0gRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCisgKi8KKwogc3RydWN0IGluZGV4X3N0YXRlOwogCi0vKiBBbiBhdHRyaWJ1dGUgaXMgYSBwb2ludGVyIHRvIHRoaXMgb3BhcXVlIHN0cnVjdHVyZSAqLworLyoqCisgKiBBbiBhdHRyaWJ1dGUgaXMgYW4gb3BhcXVlIG9iamVjdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgaXRzIG5hbWUuIFBhc3MgdGhlCisgKiBuYW1lIHRvIGBnaXRfYXR0cigpYCBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIG9iamVjdCBvZiB0aGlzIHR5cGUuCisgKiBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgb2Ygbm8gaW50ZXJlc3QgdG8gdGhlCisgKiBjYWxsaW5nIHByb2dyYW1zLiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZworICogYGdpdF9hdHRyX25hbWUoKWAuCisgKi8KIHN0cnVjdCBnaXRfYXR0cjsKIAogLyogb3BhcXVlIHN0cnVjdHVyZXMgdXNlZCBpbnRlcm5hbGx5IGZvciBhdHRyaWJ1dGUgY29sbGVjdGlvbiAqLwpAQCAtMjEsMjEgKzEzMywzNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3RydWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdOwogCi0vKiBGb3IgcHVibGljIHRvIGNoZWNrIGdpdF9hdHRyX2NoZWNrIHJlc3VsdHMgKi8KKy8qKgorICogQXR0cmlidXRlIFZhbHVlcworICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFuIGF0dHJpYnV0ZSBmb3IgYSBwYXRoIGNhbiBiZSBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6IFNldCwgVW5zZXQsIFVuc3BlY2lmaWVkCisgKiBvciBzZXQgdG8gYSBzdHJpbmcsIGFuZCBgLnZhbHVlYCBtZW1iZXIgb2YgYHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMKKyAqIGl0LiBUaGUgdGhyZWUgbWFjcm9zIGNoZWNrIHRoZXNlLCBpZiBub25lIG9mIHRoZW0gcmV0dXJucyB0cnVlLCBgLnZhbHVlYAorICogbWVtYmVyIHBvaW50cyBhdCBhIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGUgcGF0aC4KKyAqLworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBTZXQgZm9yIHRoZSBwYXRoLiAqLwogI2RlZmluZSBBVFRSX1RSVUUodikgKCh2KSA9PSBnaXRfYXR0cl9fdHJ1ZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQgZm9yIHRoZSBwYXRoLiAqLwogI2RlZmluZSBBVFRSX0ZBTFNFKHYpICgodikgPT0gZ2l0X2F0dHJfX2ZhbHNlKQorCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBVbnNwZWNpZmllZCBmb3IgdGhlIHBhdGguICovCiAjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQogCi0vKgotICogU2VuZCBvbmUgb3IgbW9yZSBnaXRfYXR0cl9jaGVjayB0byBnaXRfY2hlY2tfYXR0cnMoKSwgYW5kCi0gKiBlYWNoICd2YWx1ZScgbWVtYmVyIHRlbGxzIHdoYXQgaXRzIHZhbHVlIGlzLgotICogVW5zZXQgb25lIGlzIHJldHVybmVkIGFzIE5VTEwuCi0gKi8KKy8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgb25lIGF0dHJpYnV0ZSBhbmQgaXRzIHZhbHVlLiAqLwogc3RydWN0IGF0dHJfY2hlY2tfaXRlbSB7CiAJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyOwogCWNvbnN0IGNoYXIgKnZhbHVlOwogfTsKIAorLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBgYXR0cl9jaGVja19pdGVtYC4gSXQgaXMgcGFzc2VkIHRvCisgKiBgZ2l0X2NoZWNrX2F0dHIoKWAgZnVuY3Rpb24sIHNwZWNpZnlpbmcgdGhlIGF0dHJpYnV0ZXMgdG8gY2hlY2ssIGFuZAorICogcmVjZWl2ZXMgdGhlaXIgdmFsdWVzLgorICovCiBzdHJ1Y3QgYXR0cl9jaGVjayB7CiAJaW50IG5yOwogCWludCBhbGxvYzsKZGlmZiAtLWdpdCBhL2J1aWx0aW4uaCBiL2J1aWx0aW4uaAppbmRleCA1Y2Y1ZGY2Li4yYjI1YTgwIDEwMDY0NAotLS0gYS9idWlsdGluLmgKKysrIGIvYnVpbHRpbi5oCkBAIC0yMjUsNiArMjI1LDcgQEAKIGludCBjbWRfc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX3Nob3dfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfc2hvd19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3NwYXJzZV9jaGVja291dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX3N0YXR1cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfc3RyaXBzcGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwppbmRleCBkZDE4ZTVjLi40YzM4YWZmIDEwMDY0NAotLS0gYS9idWlsdGluL2FkZC5jCisrKyBiL2J1aWx0aW4vYWRkLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJidWxrLWNoZWNraW4uaCIKICNpbmNsdWRlICJhcmd2LWFycmF5LmgiCiAjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiYWRkLWludGVyYWN0aXZlLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9hZGRfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iKSwKQEAgLTI4LDYgKzI5LDggQEAKIHN0YXRpYyBpbnQgcGF0Y2hfaW50ZXJhY3RpdmUsIGFkZF9pbnRlcmFjdGl2ZSwgZWRpdF9pbnRlcmFjdGl2ZTsKIHN0YXRpYyBpbnQgdGFrZV93b3JrdHJlZV9jaGFuZ2VzOwogc3RhdGljIGludCBhZGRfcmVub3JtYWxpemU7CitzdGF0aWMgaW50IHBhdGhzcGVjX2ZpbGVfbnVsOworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhzcGVjX2Zyb21fZmlsZTsKIAogc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhIHsKIAlpbnQgZmxhZ3M7CkBAIC0xODUsNiArMTg4LDIxIEBACiB7CiAJaW50IHN0YXR1cywgaTsKIAlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCB1c2VfYnVpbHRpbl9hZGRfaSA9CisJCWdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU4iLCAtMSk7CisKKwlpZiAodXNlX2J1aWx0aW5fYWRkX2kgPCAwKQorCQlnaXRfY29uZmlnX2dldF9ib29sKCJhZGQuaW50ZXJhY3RpdmUudXNlYnVpbHRpbiIsCisJCQkJICAgICZ1c2VfYnVpbHRpbl9hZGRfaSk7CisKKwlpZiAodXNlX2J1aWx0aW5fYWRkX2kgPT0gMSkgeworCQlpZiAoIXBhdGNoX21vZGUpCisJCQlyZXR1cm4gISFydW5fYWRkX2kodGhlX3JlcG9zaXRvcnksIHBhdGhzcGVjKTsKKwkJaWYgKHN0cmNtcChwYXRjaF9tb2RlLCAiLS1wYXRjaCIpKQorCQkJZGllKCInJXMnIG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRoZSBidWlsdC1pbiBhZGQgLXAiLAorCQkJICAgIHBhdGNoX21vZGUpOworCQlyZXR1cm4gISFydW5fYWRkX3AodGhlX3JlcG9zaXRvcnksIHBhdGhzcGVjKTsKKwl9CiAKIAlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICJhZGQtLWludGVyYWN0aXZlIik7CiAJaWYgKHBhdGNoX21vZGUpCkBAIC0zMDksNiArMzI3LDggQEAKIAkJICAgTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIikpLAogCU9QVF9ISURERU5fQk9PTCgwLCAid2Fybi1lbWJlZGRlZC1yZXBvIiwgJndhcm5fb25fZW1iZWRkZWRfcmVwbywKIAkJCU5fKCJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiKSksCisJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwlPUFRfUEFUSFNQRUNfRklMRV9OVUwoJnBhdGhzcGVjX2ZpbGVfbnVsKSwKIAlPUFRfRU5EKCksCiB9OwogCkBAIC0zMTksNiArMzM5LDcgQEAKIAkJaWdub3JlX2FkZF9lcnJvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KKwogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCkBAIC00MDIsMTEgKzQyMywxNyBAQAogCQkJICBidWlsdGluX2FkZF91c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWlmIChwYXRjaF9pbnRlcmFjdGl2ZSkKIAkJYWRkX2ludGVyYWN0aXZlID0gMTsKLQlpZiAoYWRkX2ludGVyYWN0aXZlKQorCWlmIChhZGRfaW50ZXJhY3RpdmUpIHsKKwkJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giKSk7CiAJCWV4aXQoaW50ZXJhY3RpdmVfYWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4LCBwYXRjaF9pbnRlcmFjdGl2ZSkpOworCX0KIAotCWlmIChlZGl0X2ludGVyYWN0aXZlKQorCWlmIChlZGl0X2ludGVyYWN0aXZlKSB7CisJCWlmIChwYXRoc3BlY19mcm9tX2ZpbGUpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1lZGl0IikpOwogCQlyZXR1cm4oZWRpdF9wYXRjaChhcmdjLCBhcmd2LCBwcmVmaXgpKTsKKwl9CiAJYXJnYy0tOwogCWFyZ3YrKzsKIApAQCAtNDE4LDEwICs0NDUsNiBAQAogCWlmIChhZGRyZW1vdmUgJiYgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQogCQlkaWUoXygiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiKSk7CiAKLQlpZiAoIXRha2Vfd29ya3RyZWVfY2hhbmdlcyAmJiBhZGRyZW1vdmVfZXhwbGljaXQgPCAwICYmIGFyZ2MpCi0JCS8qIFR1cm4gImdpdCBhZGQgcGF0aHNwZWMuLi4iIHRvICJnaXQgYWRkIC1BIHBhdGhzcGVjLi4uIiAqLwotCQlhZGRyZW1vdmUgPSAxOwotCiAJaWYgKCFzaG93X29ubHkgJiYgaWdub3JlX21pc3NpbmcpCiAJCWRpZShfKCJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIikpOwogCkBAIC00MzQsMTkgKzQ1Nyw2IEBACiAKIAlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CiAKLQlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAotCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAotCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAotCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8Ci0JCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQotCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOwotCi0JaWYgKHJlcXVpcmVfcGF0aHNwZWMgJiYgYXJnYyA9PSAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCBfKCJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpKTsKLQkJZnByaW50ZihzdGRlcnIsIF8oIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIikpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKgogCSAqIENoZWNrIHRoZSAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIgYmxvY2sKIAkgKiBiZWxvdyBiZWZvcmUgZW5hYmxpbmcgbmV3IG1hZ2ljLgpAQCAtNDU2LDYgKzQ2NiwzNSBAQAogCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEgsCiAJCSAgICAgICBwcmVmaXgsIGFyZ3YpOwogCisJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAocGF0aHNwZWMubnIpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIikpOworCisJCXBhcnNlX3BhdGhzcGVjX2ZpbGUoJnBhdGhzcGVjLCBQQVRIU1BFQ19BVFRSLAorCQkJCSAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCQkJICAgIFBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRILAorCQkJCSAgICBwcmVmaXgsIHBhdGhzcGVjX2Zyb21fZmlsZSwgcGF0aHNwZWNfZmlsZV9udWwpOworCX0gZWxzZSBpZiAocGF0aHNwZWNfZmlsZV9udWwpIHsKKwkJZGllKF8oIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiKSk7CisJfQorCisJaWYgKHJlcXVpcmVfcGF0aHNwZWMgJiYgcGF0aHNwZWMubnIgPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iKSk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgYWRkcmVtb3ZlX2V4cGxpY2l0IDwgMCAmJiBwYXRoc3BlYy5ucikKKwkJLyogVHVybiAiZ2l0IGFkZCBwYXRoc3BlYy4uLiIgdG8gImdpdCBhZGQgLUEgcGF0aHNwZWMuLi4iICovCisJCWFkZHJlbW92ZSA9IDE7CisKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8CisJCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOworCiAJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcGF0aHNwZWMpIDwgMCkKIAkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jIGIvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jCmluZGV4IDk2ZjFjMmQuLjE3MThkZjcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYworKysgYi9idWlsdGluL2Jpc2VjdC0taGVscGVyLmMKQEAgLTE2OSwxMSArMTY5LDEyIEBACiAKIAkJYXJndl9hcnJheV9wdXNobCgmYXJndiwgImNoZWNrb3V0IiwgYnJhbmNoLmJ1ZiwgIi0tIiwgTlVMTCk7CiAJCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LmFyZ3YsIFJVTl9HSVRfQ01EKSkgeworCQkJZXJyb3IoXygiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCIKKwkJCQkiIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IgorCQkJCSIgcmVzZXQgPGNvbW1pdD4nLiIpLCBicmFuY2guYnVmKTsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2gpOwogCQkJYXJndl9hcnJheV9jbGVhcigmYXJndik7Ci0JCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCIKLQkJCQkgICAgICAgIiBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCIKLQkJCQkgICAgICAgIiByZXNldCA8Y29tbWl0PicuIiksIGJyYW5jaC5idWYpOworCQkJcmV0dXJuIC0xOwogCQl9CiAJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOwogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYmxhbWUuYyBiL2J1aWx0aW4vYmxhbWUuYwppbmRleCBlOTQ2YmE2Li5iZjFjZWNkIDEwMDY0NAotLS0gYS9idWlsdGluL2JsYW1lLmMKKysrIGIvYnVpbHRpbi9ibGFtZS5jCkBAIC0zMTksMTggKzMxOSwxOCBAQAogCXJldHVybiB0aW1lX2J1Zi5idWY7CiB9CiAKLSNkZWZpbmUgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVAkwMDEKLSNkZWZpbmUgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUJMDAyCi0jZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QCTAwNAotI2RlZmluZSBPVVRQVVRfUE9SQ0VMQUlOCTAxMAotI2RlZmluZSBPVVRQVVRfU0hPV19OQU1FCTAyMAotI2RlZmluZSBPVVRQVVRfU0hPV19OVU1CRVIJMDQwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFCTAxMDAKLSNkZWZpbmUgT1VUUFVUX05PX0FVVEhPUgkwMjAwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMCTA0MDAKLSNkZWZpbmUgT1VUUFVUX0xJTkVfUE9SQ0VMQUlOCTAxMDAwCi0jZGVmaW5lIE9VVFBVVF9DT0xPUl9MSU5FCTAyMDAwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SCTA0MDAwCisjZGVmaW5lIE9VVFBVVF9BTk5PVEFURV9DT01QQVQgICAgICAoMVU8PDApCisjZGVmaW5lIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FICAgICAoMVU8PDEpCisjZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QICAgICAgICAoMVU8PDIpCisjZGVmaW5lIE9VVFBVVF9QT1JDRUxBSU4gICAgICAgICAgICAoMVU8PDMpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05BTUUgICAgICAgICAgICAoMVU8PDQpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05VTUJFUiAgICAgICAgICAoMVU8PDUpCisjZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFICAgICAgICAgICAoMVU8PDYpCisjZGVmaW5lIE9VVFBVVF9OT19BVVRIT1IgICAgICAgICAgICAoMVU8PDcpCisjZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMICAgICAgICAgICAoMVU8PDgpCisjZGVmaW5lIE9VVFBVVF9MSU5FX1BPUkNFTEFJTiAgICAgICAoMVU8PDkpCisjZGVmaW5lIE9VVFBVVF9DT0xPUl9MSU5FICAgICAgICAgICAoMVU8PDEwKQorI2RlZmluZSBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiAgKDFVPDwxMSkKIAogc3RhdGljIHZvaWQgZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0LCBpbnQgcmVwZWF0KQogewpAQCAtODYxLDE0ICs4NjEsNiBAQAogCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXZzLWZpbGUiLCAmaWdub3JlX3JldnNfZmlsZV9saXN0LCBOXygiZmlsZSIpLCBOXygiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIpKSwKIAkJT1BUX0JJVCgwLCAiY29sb3ItbGluZXMiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiKSwgT1VUUFVUX0NPTE9SX0xJTkUpLAogCQlPUFRfQklUKDAsICJjb2xvci1ieS1hZ2UiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIGxpbmVzIGJ5IGFnZSIpLCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiksCi0KLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyBhcmUgcGFyc2VkIGJ5IHBhcnNlX3JldmlzaW9uX29wdCgpCi0JCSAqIGFuZCBhcmUgb25seSBpbmNsdWRlZCBoZXJlIHRvIGdldCBpbmNsdWRlZCBpbiB0aGUgIi1oIgotCQkgKiBvdXRwdXQ6Ci0JCSAqLwotCQl7IE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgImluZGVudC1oZXVyaXN0aWMiLCBOVUxMLCBOVUxMLCBOXygiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIDAsIHBhcnNlX29wdF91bmtub3duX2NiIH0sCi0KIAkJT1BUX0JJVCgwLCAibWluaW1hbCIsICZ4ZGxfb3B0cywgTl8oIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIpLCBYREZfTkVFRF9NSU5JTUFMKSwKIAkJT1BUX1NUUklORygnUycsIE5VTEwsICZyZXZzX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiKSksCiAJCU9QVF9TVFJJTkcoMCwgImNvbnRlbnRzIiwgJmNvbnRlbnRzX2Zyb20sIE5fKCJmaWxlIiksIE5fKCJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIikpLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9icmFuY2guYyBiL2J1aWx0aW4vYnJhbmNoLmMKaW5kZXggMmVmMjE0Ni4uZDgyOTdmOCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9icmFuY2guYworKysgYi9idWlsdGluL2JyYW5jaC5jCkBAIC02MjQsNyArNjI0LDcgQEAKIAkJT1BUX1NFVF9JTlRfRigwLCAic2V0LXVwc3RyZWFtIiwgJnRyYWNrLCBOXygiZG8gbm90IHVzZSIpLAogCQkJQlJBTkNIX1RSQUNLX09WRVJSSURFLCBQQVJTRV9PUFRfSElEREVOKSwKIAkJT1BUX1NUUklORygndScsICJzZXQtdXBzdHJlYW0tdG8iLCAmbmV3X3Vwc3RyZWFtLCBOXygidXBzdHJlYW0iKSwgTl8oImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIpKSwKLQkJT1BUX0JPT0woMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCBOXygiVW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSksCisJCU9QVF9CT09MKDAsICJ1bnNldC11cHN0cmVhbSIsICZ1bnNldF91cHN0cmVhbSwgTl8oInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIikpLAogCQlPUFRfX0NPTE9SKCZicmFuY2hfdXNlX2NvbG9yLCBOXygidXNlIGNvbG9yZWQgb3V0cHV0IikpLAogCQlPUFRfU0VUX0lOVCgncicsICJyZW1vdGVzIiwgICAgICZmaWx0ZXIua2luZCwgTl8oImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiKSwKIAkJCUZJTFRFUl9SRUZTX1JFTU9URVMpLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9idW5kbGUuYyBiL2J1aWx0aW4vYnVuZGxlLmMKaW5kZXggMWVhNGJmZC4uZjA0OWQyNyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9idW5kbGUuYworKysgYi9idWlsdGluL2J1bmRsZS5jCkBAIC0xLDQgKzEsNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYnVuZGxlLmgiCiAKQEAgLTksNTkgKzExLDE4NCBAQAogICogYnVuZGxlIHN1cHBvcnRpbmcgImZldGNoIiwgInB1bGwiLCBhbmQgImxzLXJlbW90ZSIuCiAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9idW5kbGVfdXNhZ2VbXSA9Ci0gICJnaXQgYnVuZGxlIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPlxuIgotICAiICAgb3I6IGdpdCBidW5kbGUgdmVyaWZ5IDxmaWxlPlxuIgotICAiICAgb3I6IGdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl1cbiIKLSAgIiAgIG9yOiBnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSI7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIpLAorICBOXygiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IiksCisgIE5fKCJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5fKCJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX2NyZWF0ZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV92ZXJpZnlfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX2xpc3RfaGVhZHNfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV91bmJ1bmRsZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShpbnQgYXJnYywKKwkJY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIqIHByZWZpeCwKKwkJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sCisJCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdLAorCQljb25zdCBjaGFyICoqYnVuZGxlX2ZpbGUpIHsKKwlpbnQgbmV3YXJnYzsKKwluZXdhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZXN0ciwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworCSpidW5kbGVfZmlsZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbMF0pOworCXJldHVybiBuZXdhcmdjOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfY3JlYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJaW50IGFsbF9wcm9ncmVzc19pbXBsaWVkID0gMDsKKwlpbnQgcHJvZ3Jlc3MgPSBpc2F0dHkoU1RERVJSX0ZJTEVOTyk7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcGFja19vcHRzOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UKCdxJywgInF1aWV0IiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWxsLXByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIpLCAyKSwKKwkJT1BUX0JPT0woMCwgImFsbC1wcm9ncmVzcy1pbXBsaWVkIiwKKwkJCSAmYWxsX3Byb2dyZXNzX2ltcGxpZWQsCisJCQkgTl8oInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfY3JlYXRlX3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwlhcmd2X2FycmF5X2luaXQoJnBhY2tfb3B0cyk7CisJaWYgKHByb2dyZXNzID09IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1xdWlldCIpOworCWVsc2UgaWYgKHByb2dyZXNzID09IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1wcm9ncmVzcyIpOworCWVsc2UgaWYgKHByb2dyZXNzID09IDIpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1hbGwtcHJvZ3Jlc3MiKTsKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIpOworCisJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7CisJcmV0dXJuICEhY3JlYXRlX2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgYnVuZGxlX2ZpbGUsIGFyZ2MsIGFyZ3YsICZwYWNrX29wdHMpOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfdmVyaWZ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKwlpbnQgcXVpZXQgPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdxJywgInF1aWV0IiwgJnF1aWV0LAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfdmVyaWZ5X3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWlmICgoYnVuZGxlX2ZkID0gcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQorCQlyZXR1cm4gMTsKKwljbG9zZShidW5kbGVfZmQpOworCWlmICh2ZXJpZnlfYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCAmaGVhZGVyLCAhcXVpZXQpKQorCQlyZXR1cm4gMTsKKwlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgb2theVxuIiksIGJ1bmRsZV9maWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX2xpc3RfaGVhZHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJaW50IGJ1bmRsZV9mZCA9IC0xOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX2xpc3RfaGVhZHNfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKChidW5kbGVfZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCWNsb3NlKGJ1bmRsZV9mZCk7CisJcmV0dXJuICEhbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX3VuYnVuZGxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV91bmJ1bmRsZV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoKGJ1bmRsZV9mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIpKTsKKwlyZXR1cm4gISF1bmJ1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgYnVuZGxlX2ZkLCAwKSB8fAorCQlsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworfQogCiBpbnQgY21kX2J1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7Ci0JY29uc3QgY2hhciAqY21kLCAqYnVuZGxlX2ZpbGU7Ci0JaW50IGJ1bmRsZV9mZCA9IC0xOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXN1bHQ7CiAKLQlpZiAoYXJnYyA8IDMpCi0JCXVzYWdlKGJ1aWx0aW5fYnVuZGxlX3VzYWdlKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnVuZGxlX3VzYWdlLAorCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAotCWNtZCA9IGFyZ3ZbMV07Ci0JYnVuZGxlX2ZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzJdKTsKLQlhcmdjIC09IDI7Ci0JYXJndiArPSAyOworCXBhY2tldF90cmFjZV9pZGVudGl0eSgiYnVuZGxlIik7CiAKLQltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOwotCWlmIChzdHJjbXAoY21kLCAiY3JlYXRlIikgJiYgKGJ1bmRsZV9mZCA9Ci0JCQkJcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQotCQlyZXR1cm4gMTsKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2J1bmRsZV91c2FnZSwgb3B0aW9ucyk7CiAKLQlpZiAoIXN0cmNtcChjbWQsICJ2ZXJpZnkiKSkgewotCQljbG9zZShidW5kbGVfZmQpOwotCQlpZiAoYXJnYyAhPSAxKSB7Ci0JCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAodmVyaWZ5X2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgMSkpCi0JCQlyZXR1cm4gMTsKLQkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG9rYXlcbiIpLCBidW5kbGVfZmlsZSk7Ci0JCXJldHVybiAwOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImNyZWF0ZSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX2NyZWF0ZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX3ZlcmlmeShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImxpc3QtaGVhZHMiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV9saXN0X2hlYWRzKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidW5idW5kbGUiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV91bmJ1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgeworCQllcnJvcihfKCJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9idW5kbGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KLQlpZiAoIXN0cmNtcChjbWQsICJsaXN0LWhlYWRzIikpIHsKLQkJY2xvc2UoYnVuZGxlX2ZkKTsKLQkJcmV0dXJuICEhbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKLQl9Ci0JaWYgKCFzdHJjbXAoY21kLCAiY3JlYXRlIikpIHsKLQkJaWYgKGFyZ2MgPCAyKSB7Ci0JCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQotCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7Ci0JCXJldHVybiAhIWNyZWF0ZV9idW5kbGUodGhlX3JlcG9zaXRvcnksIGJ1bmRsZV9maWxlLCBhcmdjLCBhcmd2KTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAidW5idW5kbGUiKSkgewotCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQotCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIpKTsKLQkJcmV0dXJuICEhdW5idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsIGJ1bmRsZV9mZCwgMCkgfHwKLQkJCWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Ci0JfSBlbHNlCi0JCXVzYWdlKGJ1aWx0aW5fYnVuZGxlX3VzYWdlKTsKKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrb3V0LmMgYi9idWlsdGluL2NoZWNrb3V0LmMKaW5kZXggMzYzNGEzZC4uYjUyYzQ5MCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jaGVja291dC5jCisrKyBiL2J1aWx0aW4vY2hlY2tvdXQuYwpAQCAtNzAsNiArNzAsOCBAQAogCWludCBjaGVja291dF93b3JrdHJlZTsKIAljb25zdCBjaGFyICppZ25vcmVfdW5tZXJnZWRfb3B0OwogCWludCBpZ25vcmVfdW5tZXJnZWQ7CisJaW50IHBhdGhzcGVjX2ZpbGVfbnVsOworCWNvbnN0IGNoYXIgKnBhdGhzcGVjX2Zyb21fZmlsZTsKIAogCWNvbnN0IGNoYXIgKm5ld19icmFuY2g7CiAJY29uc3QgY2hhciAqbmV3X2JyYW5jaF9mb3JjZTsKQEAgLTE0ODAsNiArMTQ4Miw4IEBACiAJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJm9wdHMtPnBhdGNoX21vZGUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKIAkJT1BUX0JPT0woMCwgImlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHMiLCAmb3B0cy0+aWdub3JlX3NraXB3b3JrdHJlZSwKIAkJCSBOXygiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IikpLAorCQlPUFRfUEFUSFNQRUNfRlJPTV9GSUxFKCZvcHRzLT5wYXRoc3BlY19mcm9tX2ZpbGUpLAorCQlPUFRfUEFUSFNQRUNfRklMRV9OVUwoJm9wdHMtPnBhdGhzcGVjX2ZpbGVfbnVsKSwKIAkJT1BUX0VORCgpCiAJfTsKIAlzdHJ1Y3Qgb3B0aW9uICpuZXdvcHRzID0gcGFyc2Vfb3B0aW9uc19jb25jYXQocHJldm9wdHMsIG9wdGlvbnMpOwpAQCAtMTYxOCwxMCArMTYyMiw2IEBACiAJCQlkaWUoXygicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIiksIG9wdHMtPmZyb21fdHJlZWlzaCk7CiAJfQogCi0JaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiAhb3B0cy0+ZW1wdHlfcGF0aHNwZWNfb2sgJiYgIWFyZ2MgJiYKLQkgICAgIW9wdHMtPnBhdGNoX21vZGUpCS8qIHBhdGNoIG1vZGUgaXMgc3BlY2lhbCAqLwotCQlkaWUoXygieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiKSk7Ci0KIAlpZiAoYXJnYykgewogCQlwYXJzZV9wYXRoc3BlYygmb3B0cy0+cGF0aHNwZWMsIDAsCiAJCQkgICAgICAgb3B0cy0+cGF0Y2hfbW9kZSA/IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gOiAwLApAQCAtMTY0MSwxMCArMTY0MSwzMyBAQAogCQlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQogCQkJZGllKF8oImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIpLAogCQkJICAgIGFyZ3ZbMF0pOworCX0KIAorCWlmIChvcHRzLT5wYXRoc3BlY19mcm9tX2ZpbGUpIHsKKwkJaWYgKG9wdHMtPnBhdGhzcGVjLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIikpOworCisJCWlmIChvcHRzLT5wYXRjaF9tb2RlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmb3B0cy0+cGF0aHNwZWMsIDAsCisJCQkJICAgIDAsCisJCQkJICAgIHByZWZpeCwgb3B0cy0+cGF0aHNwZWNfZnJvbV9maWxlLCBvcHRzLT5wYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChvcHRzLT5wYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAob3B0cy0+cGF0aHNwZWMubnIpIHsKIAkJaWYgKDEgPCAhIW9wdHMtPndyaXRlb3V0X3N0YWdlICsgISFvcHRzLT5mb3JjZSArICEhb3B0cy0+bWVyZ2UpCiAJCQlkaWUoXygiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCiAJCQkgICAgICAiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiAhb3B0cy0+ZW1wdHlfcGF0aHNwZWNfb2sgJiYKKwkJICAgICFvcHRzLT5wYXRjaF9tb2RlKQkvKiBwYXRjaCBtb2RlIGlzIHNwZWNpYWwgKi8KKwkJCWRpZShfKCJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIpKTsKIAl9CiAKIAlpZiAob3B0cy0+bmV3X2JyYW5jaCkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCmluZGV4IDUzZTA0YjEuLjBmYzg5YWUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY2xvbmUuYworKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHN0YXRpYyBjaGFyICpvcHRpb25fdXBsb2FkX3BhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKIHN0YXRpYyBpbnQgb3B0aW9uX3ZlcmJvc2l0eTsKIHN0YXRpYyBpbnQgb3B0aW9uX3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IG9wdGlvbl9zcGFyc2VfY2hlY2tvdXQ7CiBzdGF0aWMgZW51bSB0cmFuc3BvcnRfZmFtaWx5IGZhbWlseTsKIHN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3B0aW9uX2NvbmZpZyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwpAQCAtMTQ2LDYgKzE0Nyw4IEBACiAJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKIAlPUFRfQk9PTCgwLCAicmVtb3RlLXN1Ym1vZHVsZXMiLCAmb3B0aW9uX3JlbW90ZV9zdWJtb2R1bGVzLAogCQkgICAgTl8oImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIikpLAorCU9QVF9CT09MKDAsICJzcGFyc2UiLCAmb3B0aW9uX3NwYXJzZV9jaGVja291dCwKKwkJICAgIE5fKCJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IikpLAogCU9QVF9FTkQoKQogfTsKIApAQCAtNzMzLDYgKzczNiwyNyBAQAogCX0KIH0KIAorc3RhdGljIGludCBnaXRfc3BhcnNlX2NoZWNrb3V0X2luaXQoY29uc3QgY2hhciAqcmVwbykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXN1bHQgPSAwOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICItQyIsIHJlcG8sICJzcGFyc2UtY2hlY2tvdXQiLCAiaW5pdCIsIE5VTEwpOworCisJLyoKKwkgKiBXZSBtdXN0IGFwcGx5IHRoZSBzZXR0aW5nIGluIHRoZSBjdXJyZW50IHByb2Nlc3MKKwkgKiBmb3IgdGhlIGxhdGVyIGNoZWNrb3V0IHRvIHVzZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUuCisJICovCisJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpKSB7CisJCWVycm9yKF8oImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIpKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW50IGNoZWNrb3V0KGludCBzdWJtb2R1bGVfcHJvZ3Jlc3MpCiB7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CkBAIC04OTksNyArOTIzLDcgQEAKIAlmcmVlKGFsdGVybmF0ZXMpOwogfQogCi1zdGF0aWMgaW50IGRpcl9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKK3N0YXRpYyBpbnQgcGF0aF9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlzdHJ1Y3Qgc3RhdCBzYjsKIAlyZXR1cm4gIXN0YXQocGF0aCwgJnNiKTsKQEAgLTkyNyw4ICs5NTEsNiBAQAogCiAJc3RydWN0IGFyZ3ZfYXJyYXkgcmVmX3ByZWZpeGVzID0gQVJHVl9BUlJBWV9JTklUOwogCi0JZmV0Y2hfaWZfbWlzc2luZyA9IDA7Ci0KIAlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImNsb25lIik7CiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2Nsb25lX29wdGlvbnMsCiAJCQkgICAgIGJ1aWx0aW5fY2xvbmVfdXNhZ2UsIDApOwpAQCAtOTgxLDcgKzEwMDMsNyBAQAogCQlkaXIgPSBndWVzc19kaXJfbmFtZShyZXBvX25hbWUsIGlzX2J1bmRsZSwgb3B0aW9uX2JhcmUpOwogCXN0cmlwX3RyYWlsaW5nX3NsYXNoZXMoZGlyKTsKIAotCWRlc3RfZXhpc3RzID0gZGlyX2V4aXN0cyhkaXIpOworCWRlc3RfZXhpc3RzID0gcGF0aF9leGlzdHMoZGlyKTsKIAlpZiAoZGVzdF9leGlzdHMgJiYgIWlzX2VtcHR5X2RpcihkaXIpKQogCQlkaWUoXygiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgIgogCQkJImFuIGVtcHR5IGRpcmVjdG9yeS4iKSwgZGlyKTsKQEAgLTk5Miw3ICsxMDE0LDcgQEAKIAkJd29ya190cmVlID0gTlVMTDsKIAllbHNlIHsKIAkJd29ya190cmVlID0gZ2V0ZW52KCJHSVRfV09SS19UUkVFIik7Ci0JCWlmICh3b3JrX3RyZWUgJiYgZGlyX2V4aXN0cyh3b3JrX3RyZWUpKQorCQlpZiAod29ya190cmVlICYmIHBhdGhfZXhpc3RzKHdvcmtfdHJlZSkpCiAJCQlkaWUoXygid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiksIHdvcmtfdHJlZSk7CiAJfQogCkBAIC0xMDIwLDcgKzEwNDIsNyBAQAogCX0KIAogCWlmIChyZWFsX2dpdF9kaXIpIHsKLQkJaWYgKGRpcl9leGlzdHMocmVhbF9naXRfZGlyKSkKKwkJaWYgKHBhdGhfZXhpc3RzKHJlYWxfZ2l0X2RpcikpCiAJCQlqdW5rX2dpdF9kaXJfZmxhZ3MgfD0gUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOwogCQlqdW5rX2dpdF9kaXIgPSByZWFsX2dpdF9kaXI7CiAJfSBlbHNlIHsKQEAgLTExMDYsNiArMTEyOCw5IEBACiAJaWYgKG9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UubnIgfHwgb3B0aW9uX29wdGlvbmFsX3JlZmVyZW5jZS5ucikKIAkJc2V0dXBfcmVmZXJlbmNlKCk7CiAKKwlpZiAob3B0aW9uX3NwYXJzZV9jaGVja291dCAmJiBnaXRfc3BhcnNlX2NoZWNrb3V0X2luaXQocmVwbykpCisJCXJldHVybiAxOworCiAJcmVtb3RlID0gcmVtb3RlX2dldChvcHRpb25fb3JpZ2luKTsKIAogCXN0cmJ1Zl9hZGRmKCZkZWZhdWx0X3JlZnNwZWMsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LApAQCAtMTI2NSw3ICsxMjkwLDYgQEAKIAl9CiAKIAlqdW5rX21vZGUgPSBKVU5LX0xFQVZFX1JFUE87Ci0JZmV0Y2hfaWZfbWlzc2luZyA9IDE7CiAJZXJyID0gY2hlY2tvdXQoc3VibW9kdWxlX3Byb2dyZXNzKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbXNnKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMgYi9idWlsdGluL2NvbW1pdC1ncmFwaC5jCmluZGV4IGFkZGM4ZDQuLmUwYzZmYzQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKKysrIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwpAQCAtOCw4ICs4LDYgQEAKICNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKIAogc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX2NvbW1pdF9ncmFwaF91c2FnZVtdID0gewotCU5fKCJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIiksCi0JTl8oImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAogCU5fKCJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIpLAogCU5fKCJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS1yZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIpLAogCU5VTEwKQEAgLTIwLDExICsxOCw2IEBACiAJTlVMTAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX3VzYWdlW10gPSB7Ci0JTl8oImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAotCU5VTEwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfd3JpdGVfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iKSwKIAlOVUxMCkBAIC05NCw2NiArODcsNiBAQAogCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoKHRoZV9yZXBvc2l0b3J5LCBncmFwaCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGdyYXBoX3JlYWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotCXN0cnVjdCBjb21taXRfZ3JhcGggKmdyYXBoID0gTlVMTDsKLQljaGFyICpncmFwaF9uYW1lOwotCWludCBvcGVuX29rOwotCWludCBmZDsKLQlzdHJ1Y3Qgc3RhdCBzdDsKLQotCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3JlYWRfb3B0aW9uc1tdID0gewotCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKLQkJCU5fKCJkaXIiKSwKLQkJCU5fKCJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiKSksCi0JCU9QVF9FTkQoKSwKLQl9OwotCi0JdHJhY2UyX2NtZF9tb2RlKCJyZWFkIik7Ci0KLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAotCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX29wdGlvbnMsCi0JCQkgICAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3JlYWRfdXNhZ2UsIDApOwotCi0JaWYgKCFvcHRzLm9ial9kaXIpCi0JCW9wdHMub2JqX2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7Ci0KLQlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvcHRzLm9ial9kaXIpOwotCi0Jb3Blbl9vayA9IG9wZW5fY29tbWl0X2dyYXBoKGdyYXBoX25hbWUsICZmZCwgJnN0KTsKLQlpZiAoIW9wZW5fb2spCi0JCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIpLCBncmFwaF9uYW1lKTsKLQotCWdyYXBoID0gbG9hZF9jb21taXRfZ3JhcGhfb25lX2ZkX3N0KGZkLCAmc3QpOwotCWlmICghZ3JhcGgpCi0JCXJldHVybiAxOwotCi0JRlJFRV9BTkRfTlVMTChncmFwaF9uYW1lKTsKLQotCXByaW50ZigiaGVhZGVyOiAlMDh4ICVkICVkICVkICVkXG4iLAotCQludG9obCgqKHVpbnQzMl90KilncmFwaC0+ZGF0YSksCi0JCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNCksCi0JCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNSksCi0JCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNiksCi0JCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNykpOwotCXByaW50ZigibnVtX2NvbW1pdHM6ICV1XG4iLCBncmFwaC0+bnVtX2NvbW1pdHMpOwotCXByaW50ZigiY2h1bmtzOiIpOwotCi0JaWYgKGdyYXBoLT5jaHVua19vaWRfZmFub3V0KQotCQlwcmludGYoIiBvaWRfZmFub3V0Iik7Ci0JaWYgKGdyYXBoLT5jaHVua19vaWRfbG9va3VwKQotCQlwcmludGYoIiBvaWRfbG9va3VwIik7Ci0JaWYgKGdyYXBoLT5jaHVua19jb21taXRfZGF0YSkKLQkJcHJpbnRmKCIgY29tbWl0X21ldGFkYXRhIik7Ci0JaWYgKGdyYXBoLT5jaHVua19leHRyYV9lZGdlcykKLQkJcHJpbnRmKCIgZXh0cmFfZWRnZXMiKTsKLQlwcmludGYoIlxuIik7Ci0KLQlVTkxFQUsoZ3JhcGgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGV4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CiBzdGF0aWMgc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzIHNwbGl0X29wdHM7CiAKQEAgLTI2OSw4ICsyMDIsNiBAQAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAKIAlpZiAoYXJnYyA+IDApIHsKLQkJaWYgKCFzdHJjbXAoYXJndlswXSwgInJlYWQiKSkKLQkJCXJldHVybiBncmFwaF9yZWFkKGFyZ2MsIGFyZ3YpOwogCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAidmVyaWZ5IikpCiAJCQlyZXR1cm4gZ3JhcGhfdmVyaWZ5KGFyZ2MsIGFyZ3YpOwogCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAid3JpdGUiKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCmluZGV4IGU1ODhiYzYuLmFhMTMzMjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29tbWl0LmMKKysrIGIvYnVpbHRpbi9jb21taXQuYwpAQCAtMTA3LDkgKzEwNyw5IEBACiBzdGF0aWMgaW50IGVkaXRfZmxhZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLwogc3RhdGljIGludCBxdWlldCwgdmVyYm9zZSwgbm9fdmVyaWZ5LCBhbGxvd19lbXB0eSwgZHJ5X3J1biwgcmVuZXdfYXV0aG9yc2hpcDsKIHN0YXRpYyBpbnQgY29uZmlnX2NvbW1pdF92ZXJib3NlID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCi1zdGF0aWMgaW50IG5vX3Bvc3RfcmV3cml0ZSwgYWxsb3dfZW1wdHlfbWVzc2FnZTsKK3N0YXRpYyBpbnQgbm9fcG9zdF9yZXdyaXRlLCBhbGxvd19lbXB0eV9tZXNzYWdlLCBwYXRoc3BlY19maWxlX251bDsKIHN0YXRpYyBjaGFyICp1bnRyYWNrZWRfZmlsZXNfYXJnLCAqZm9yY2VfZGF0ZSwgKmlnbm9yZV9zdWJtb2R1bGVfYXJnLCAqaWdub3JlZF9hcmc7Ci1zdGF0aWMgY2hhciAqc2lnbl9jb21taXQ7CitzdGF0aWMgY2hhciAqc2lnbl9jb21taXQsICpwYXRoc3BlY19mcm9tX2ZpbGU7CiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgd2lsbCByZW1vdmUgdGhlIGxpbmVzCkBAIC0zNDMsNiArMzQzLDI2IEBACiAJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwKIAkJICAgICAgIHByZWZpeCwgYXJndik7CiAKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChpbnRlcmFjdGl2ZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giKSk7CisKKwkJaWYgKGFsbCkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisKKwkJaWYgKHBhdGhzcGVjLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlwYXJzZV9wYXRoc3BlY19maWxlKCZwYXRoc3BlYywgMCwKKwkJCQkgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAoIXBhdGhzcGVjLm5yICYmIChhbHNvIHx8IChvbmx5ICYmICFhbWVuZCAmJiAhYWxsb3dfZW1wdHkpKSkKKwkJZGllKF8oIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpKTsKKwogCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnBhdGhzcGVjKSA8IDApCiAJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CiAKQEAgLTUzNyw3ICs1NTcsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaWYgKGhhY2spCiAJCXN0cmJ1Zl9hZGRjaCgmYnVmLCBoYWNrKTsKLQlzdHJidWZfYWRkZigmYnVmLCAiJS4qcyIsIChpbnQpKGUgLSBzKSwgcyk7CisJc3RyYnVmX2FkZCgmYnVmLCBzLCBlIC0gcyk7CiAJc2V0ZW52KHZhciwgYnVmLmJ1ZiwgMSk7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiB9CkBAIC0xMTk4LDggKzEyMTgsNiBAQAogCiAJaWYgKGFsc28gKyBvbmx5ICsgYWxsICsgaW50ZXJhY3RpdmUgPiAxKQogCQlkaWUoXygiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIikpOwotCWlmIChhcmdjID09IDAgJiYgKGFsc28gfHwgKG9ubHkgJiYgIWFtZW5kICYmICFhbGxvd19lbXB0eSkpKQotCQlkaWUoXygiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIikpOwogCWNsZWFudXBfbW9kZSA9IGdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIHVzZV9lZGl0b3IpOwogCiAJaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcocyk7CkBAIC0xNDYzLDI4ICsxNDgxLDYgQEAKIAlyZXR1cm4gZ2l0X3N0YXR1c19jb25maWcoaywgdiwgcyk7CiB9CiAKLWludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCi17Ci0Jc3RydWN0IGFyZ3ZfYXJyYXkgaG9va19lbnYgPSBBUkdWX0FSUkFZX0lOSVQ7Ci0JdmFfbGlzdCBhcmdzOwotCWludCByZXQ7Ci0KLQlhcmd2X2FycmF5X3B1c2hmKCZob29rX2VudiwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7Ci0KLQkvKgotCSAqIExldCB0aGUgaG9vayBrbm93IHRoYXQgbm8gZWRpdG9yIHdpbGwgYmUgbGF1bmNoZWQuCi0JICovCi0JaWYgKCFlZGl0b3JfaXNfdXNlZCkKLQkJYXJndl9hcnJheV9wdXNoKCZob29rX2VudiwgIkdJVF9FRElUT1I9OiIpOwotCi0JdmFfc3RhcnQoYXJncywgbmFtZSk7Ci0JcmV0ID0gcnVuX2hvb2tfdmUoaG9va19lbnYuYXJndixuYW1lLCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0JYXJndl9hcnJheV9jbGVhcigmaG9va19lbnYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJY29uc3QgY2hhciAqYXJndl9nY19hdXRvW10gPSB7ImdjIiwgIi0tYXV0byIsIE5VTEx9OwpAQCAtMTUzNSw2ICsxNTMxLDggQEAKIAkJT1BUX0JPT0woMCwgImFtZW5kIiwgJmFtZW5kLCBOXygiYW1lbmQgcHJldmlvdXMgY29tbWl0IikpLAogCQlPUFRfQk9PTCgwLCAibm8tcG9zdC1yZXdyaXRlIiwgJm5vX3Bvc3RfcmV3cml0ZSwgTl8oImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIpKSwKIAkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywgTl8oIm1vZGUiKSwgTl8oInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCiAJCS8qIGVuZCBjb21taXQgY29udGVudHMgb3B0aW9ucyAqLwogCiAJCU9QVF9ISURERU5fQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLmMgYi9idWlsdGluL2ZldGNoLmMKaW5kZXggODYzYzg1OC4uZjg3NjViMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mZXRjaC5jCisrKyBiL2J1aWx0aW4vZmV0Y2guYwpAQCAtNzcsNiArNzcsNyBAQAogc3RhdGljIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHNlcnZlcl9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG5lZ290aWF0aW9uX3RpcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA9IC0xOwogCiBzdGF0aWMgaW50IGdpdF9mZXRjaF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CkBAIC0xOTgsNiArMTk5LDggQEAKIAkJIE5fKCJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciKSksCiAJT1BUX0JPT0woMCwgInNob3ctZm9yY2VkLXVwZGF0ZXMiLCAmZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcywKIAkJIE5fKCJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiKSksCisJT1BUX0JPT0woMCwgIndyaXRlLWNvbW1pdC1ncmFwaCIsICZmZXRjaF93cml0ZV9jb21taXRfZ3JhcGgsCisJCSBOXygid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIpKSwKIAlPUFRfRU5EKCkKIH07CiAKQEAgLTk1NCwxOCArOTU3LDEyIEBACiAJCQkJa2luZCA9ICIiOwogCQkJCXdoYXQgPSAiIjsKIAkJCX0KLQkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJtLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJZWxzZSBpZiAoc2tpcF9wcmVmaXgocm0tPm5hbWUsICJyZWZzL2hlYWRzLyIsICZ3aGF0KSkKIAkJCQlraW5kID0gImJyYW5jaCI7Ci0JCQkJd2hhdCA9IHJtLT5uYW1lICsgMTE7Ci0JCQl9Ci0JCQllbHNlIGlmIChzdGFydHNfd2l0aChybS0+bmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJZWxzZSBpZiAoc2tpcF9wcmVmaXgocm0tPm5hbWUsICJyZWZzL3RhZ3MvIiwgJndoYXQpKQogCQkJCWtpbmQgPSAidGFnIjsKLQkJCQl3aGF0ID0gcm0tPm5hbWUgKyAxMDsKLQkJCX0KLQkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJtLT5uYW1lLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQllbHNlIGlmIChza2lwX3ByZWZpeChybS0+bmFtZSwgInJlZnMvcmVtb3Rlcy8iLCAmd2hhdCkpCiAJCQkJa2luZCA9ICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIjsKLQkJCQl3aGF0ID0gcm0tPm5hbWUgKyAxMzsKLQkJCX0KIAkJCWVsc2UgewogCQkJCWtpbmQgPSAiIjsKIAkJCQl3aGF0ID0gcm0tPm5hbWU7CkBAIC0xMDc0LDcgKzEwNzEsOCBAQAogCSAqIHdlIG5lZWQgYWxsIGRpcmVjdCB0YXJnZXRzIHRvIGV4aXN0LgogCSAqLwogCWZvciAociA9IHJtOyByOyByID0gci0+bmV4dCkgewotCQlpZiAoIWhhc19vYmplY3RfZmlsZSgmci0+b2xkX29pZCkpCisJCWlmICghaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoJnItPm9sZF9vaWQsCisJCQkJCQlPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCiAJCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNDAwLDcgKzEzOTgsNyBAQAogCiAJCS8qCiAJCSAqIFdlJ3JlIHNldHRpbmcgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZQotCQkgKiBjdXJyZW50IGJyYW5jaC4gVGhlIHJlbGV2ZW50IHVwc3RyZWFtIGlzIHRoZQorCQkgKiBjdXJyZW50IGJyYW5jaC4gVGhlIHJlbGV2YW50IHVwc3RyZWFtIGlzIHRoZQogCQkgKiBmZXRjaGVkIGJyYW5jaCB0aGF0IGlzIG1lYW50IHRvIGJlIG1lcmdlZCB3aXRoIHRoZQogCQkgKiBjdXJyZW50IG9uZSwgaS5lLiB0aGUgb25lIGZldGNoZWQgdG8gRkVUQ0hfSEVBRC4KIAkJICoKQEAgLTE0MTEsNyArMTQwOSw3IEBACiAJCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgewogCQkJaWYgKCFybS0+cGVlcl9yZWYpIHsKIAkJCQlpZiAoc291cmNlX3JlZikgewotCQkJCQl3YXJuaW5nKF8oIm11bHRpcGxlIGJyYW5jaCBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iKSk7CisJCQkJCXdhcm5pbmcoXygibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIikpOwogCQkJCQlnb3RvIHNraXA7CiAJCQkJfSBlbHNlIHsKIAkJCQkJc291cmNlX3JlZiA9IHJtOwpAQCAtMTU5OSw3ICsxNTk3LDggQEAKIAkJCXJldHVybiBlcnJjb2RlOwogCX0KIAotCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJmZXRjaCIsICItLWFwcGVuZCIsICItLW5vLWF1dG8tZ2MiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAiZmV0Y2giLCAiLS1hcHBlbmQiLCAiLS1uby1hdXRvLWdjIiwKKwkJCSItLW5vLXdyaXRlLWNvbW1pdC1ncmFwaCIsIE5VTEwpOwogCWFkZF9vcHRpb25zX3RvX2FyZ3YoJmFyZ3YpOwogCiAJaWYgKG1heF9jaGlsZHJlbiAhPSAxICYmIGxpc3QtPm5yICE9IDEpIHsKQEAgLTE4MjIsOCArMTgyMSw2IEBACiAJCX0KIAl9CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKLQogCWlmIChyZW1vdGUpIHsKIAkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSB8fCBoYXNfcHJvbWlzb3JfcmVtb3RlKCkpCiAJCQlmZXRjaF9vbmVfc2V0dXBfcGFydGlhbChyZW1vdGUpOwpAQCAtMTg2NSw3ICsxODYyLDkgQEAKIAlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CiAKIAlwcmVwYXJlX3JlcG9fc2V0dGluZ3ModGhlX3JlcG9zaXRvcnkpOwotCWlmICh0aGVfcmVwb3NpdG9yeS0+c2V0dGluZ3MuZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoKSB7CisJaWYgKGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA+IDAgfHwKKwkgICAgKGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA8IDAgJiYKKwkgICAgIHRoZV9yZXBvc2l0b3J5LT5zZXR0aW5ncy5mZXRjaF93cml0ZV9jb21taXRfZ3JhcGgpKSB7CiAJCWludCBjb21taXRfZ3JhcGhfZmxhZ3MgPSBDT01NSVRfR1JBUEhfV1JJVEVfU1BMSVQ7CiAJCXN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyBzcGxpdF9vcHRzOwogCQltZW1zZXQoJnNwbGl0X29wdHMsIDAsIHNpemVvZihzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKaW5kZXggYTQ2MTU1OC4uMDVhOTJjNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKKysrIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWludCBpLCBsZW4gPSBzdHJsZW4obGluZSk7CiAJc3RydWN0IG9yaWdpbl9kYXRhICpvcmlnaW5fZGF0YTsKIAljaGFyICpzcmM7Ci0JY29uc3QgY2hhciAqb3JpZ2luOworCWNvbnN0IGNoYXIgKm9yaWdpbiwgKnRhZ19uYW1lOwogCXN0cnVjdCBzcmNfZGF0YSAqc3JjX2RhdGE7CiAJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CiAJaW50IHB1bGxpbmdfaGVhZCA9IDA7CkBAIC0xNjIsMTQgKzE2MiwxMyBAQAogCWlmIChwdWxsaW5nX2hlYWQpIHsKIAkJb3JpZ2luID0gc3JjOwogCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMTsKLQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsICJicmFuY2ggIikpIHsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJicmFuY2ggIiwgJm9yaWdpbikpIHsKIAkJb3JpZ2luX2RhdGEtPmlzX2xvY2FsX2JyYW5jaCA9IDE7Ci0JCW9yaWdpbiA9IGxpbmUgKyA3OwogCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT5icmFuY2gsIG9yaWdpbik7CiAJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOwotCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgInRhZyAiKSkgeworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobGluZSwgInRhZyAiLCAmdGFnX25hbWUpKSB7CiAJCW9yaWdpbiA9IGxpbmU7Ci0JCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPnRhZywgb3JpZ2luICsgNCk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPnRhZywgdGFnX25hbWUpOwogCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMjsKIAl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICIsICZvcmlnaW4pKSB7CiAJCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPnJfYnJhbmNoLCBvcmlnaW4pOwpAQCAtNDk1LDYgKzQ5NCw3IEBACiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAkJdW5zaWduZWQgbG9uZyBzaXplLCBsZW47CiAJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ2MgPSB7IDAgfTsKIAkJc3RydWN0IHN0cmJ1ZiBzaWcgPSBTVFJCVUZfSU5JVDsKIAogCQlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCkBAIC01MDMsMTAgKzUwMywxMiBAQAogCiAJCWlmIChzaXplID09IGxlbikKIAkJCTsgLyogbWVyZWx5IGFubm90YXRlZCAqLwotCQllbHNlIGlmICh2ZXJpZnlfc2lnbmVkX2J1ZmZlcihidWYsIGxlbiwgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmc2lnLCBOVUxMKSkgewotCQkJaWYgKCFzaWcubGVuKQotCQkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgImdwZyB2ZXJpZmljYXRpb24gZmFpbGVkLlxuIik7Ci0JCX0KKwkJZWxzZSBpZiAoIWNoZWNrX3NpZ25hdHVyZShidWYsIGxlbiwgYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCQkgICZzaWdjKSkgeworCQkJc3RyYnVmX2FkZHN0cigmc2lnLCBzaWdjLmdwZ19vdXRwdXQpOworCQkJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKwkJfSBlbHNlCisJCQlzdHJidWZfYWRkc3RyKCZzaWcsICJncGcgdmVyaWZpY2F0aW9uIGZhaWxlZC5cbiIpOwogCiAJCWlmICghdGFnX251bWJlcisrKSB7CiAJCQlmbXRfdGFnX3NpZ25hdHVyZSgmdGFnYnVmLCAmc2lnLCBidWYsIGxlbik7CmRpZmYgLS1naXQgYS9idWlsdGluL2ZzY2suYyBiL2J1aWx0aW4vZnNjay5jCmluZGV4IDE4NDAzYTkuLjhkMTM3OTQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZnNjay5jCisrKyBiL2J1aWx0aW4vZnNjay5jCkBAIC01MCw0MCArNTAsMjAgQEAKICNkZWZpbmUgRVJST1JfUkVGUyAwMTAKICNkZWZpbmUgRVJST1JfQ09NTUlUX0dSQVBIIDAyMAogCi1zdGF0aWMgY29uc3QgY2hhciAqZGVzY3JpYmVfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZnNbXSA9IHsKLQkJU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKLQl9OwotCXN0YXRpYyBpbnQgYiA9IDA7Ci0Jc3RydWN0IHN0cmJ1ZiAqYnVmOwotCWNoYXIgKm5hbWUgPSBOVUxMOwotCi0JaWYgKG5hbWVfb2JqZWN0cykKLQkJbmFtZSA9IGxvb2t1cF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywgb2JqKTsKLQotCWJ1ZiA9IGJ1ZnMgKyBiOwotCWIgPSAoYiArIDEpICUgQVJSQVlfU0laRShidWZzKTsKLQlzdHJidWZfcmVzZXQoYnVmKTsKLQlzdHJidWZfYWRkc3RyKGJ1Ziwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKLQlpZiAobmFtZSkKLQkJc3RyYnVmX2FkZGYoYnVmLCAiICglcykiLCBuYW1lKTsKLQotCXJldHVybiBidWYtPmJ1ZjsKKwlyZXR1cm4gZnNja19kZXNjcmliZV9vYmplY3QoJmZzY2tfd2Fsa19vcHRpb25zLCBvaWQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJpbnRhYmxlX3R5cGUoc3RydWN0IG9iamVjdCAqb2JqKQorc3RhdGljIGNvbnN0IGNoYXIgKnByaW50YWJsZV90eXBlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKIHsKIAljb25zdCBjaGFyICpyZXQ7CiAKLQlpZiAob2JqLT50eXBlID09IE9CSl9OT05FKSB7Ci0JCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwKLQkJCQkJCQkmb2JqLT5vaWQsIE5VTEwpOwotCQlpZiAodHlwZSA+IDApCi0JCQlvYmplY3RfYXNfdHlwZSh0aGVfcmVwb3NpdG9yeSwgb2JqLCB0eXBlLCAwKTsKLQl9CisJaWYgKHR5cGUgPT0gT0JKX05PTkUpCisJCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgTlVMTCk7CiAKLQlyZXQgPSB0eXBlX25hbWUob2JqLT50eXBlKTsKKwlyZXQgPSB0eXBlX25hbWUodHlwZSk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IF8oInVua25vd24iKTsKIApAQCAtMTE4LDI2ICs5OCwzMiBAQAogCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CiAJLyogVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLwogCWZwcmludGZfbG4oc3RkZXJyLCBfKCJlcnJvciBpbiAlcyAlczogJXMiKSwKLQkJICAgcHJpbnRhYmxlX3R5cGUob2JqKSwgZGVzY3JpYmVfb2JqZWN0KG9iaiksIGVycik7CisJCSAgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJICAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCksIGVycik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGZzY2tfZXJyb3JfZnVuYyhzdHJ1Y3QgZnNja19vcHRpb25zICpvLAotCXN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkJICAgaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQogewotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAobXNnX3R5cGUpIHsKIAljYXNlIEZTQ0tfV0FSTjoKIAkJLyogVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+ICovCiAJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJ3YXJuaW5nIGluICVzICVzOiAlcyIpLAotCQkJICAgcHJpbnRhYmxlX3R5cGUob2JqKSwgZGVzY3JpYmVfb2JqZWN0KG9iaiksIG1lc3NhZ2UpOworCQkJICAgcHJpbnRhYmxlX3R5cGUob2lkLCBvYmplY3RfdHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3Qob2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAwOwogCWNhc2UgRlNDS19FUlJPUjoKIAkJLyogVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLwogCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZXJyb3IgaW4gJXMgJXM6ICVzIiksCi0JCQkgICBwcmludGFibGVfdHlwZShvYmopLCBkZXNjcmliZV9vYmplY3Qob2JqKSwgbWVzc2FnZSk7CisJCQkgICBwcmludGFibGVfdHlwZShvaWQsIG9iamVjdF90eXBlKSwKKwkJCSAgIGRlc2NyaWJlX29iamVjdChvaWQpLCBtZXNzYWdlKTsKIAkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKLQkJQlVHKCIlZCAoRlNDS19JR05PUkU/KSBzaG91bGQgbmV2ZXIgdHJpZ2dlciB0aGlzIGNhbGxiYWNrIiwgdHlwZSk7CisJCUJVRygiJWQgKEZTQ0tfSUdOT1JFPykgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdGhpcyBjYWxsYmFjayIsCisJCSAgICBtc2dfdHlwZSk7CiAJfQogfQogCkBAIC0xNTUsNyArMTQxLDggQEAKIAlpZiAoIW9iaikgewogCQkvKiAuLi4gdGhlc2UgcmVmZXJlbmNlcyB0byBwYXJlbnQtPmZsZCBhcmUgc2FmZSBoZXJlICovCiAJCXByaW50Zl9sbihfKCJicm9rZW4gbGluayBmcm9tICU3cyAlcyIpLAotCQkJICBwcmludGFibGVfdHlwZShwYXJlbnQpLCBkZXNjcmliZV9vYmplY3QocGFyZW50KSk7CisJCQkgIHByaW50YWJsZV90eXBlKCZwYXJlbnQtPm9pZCwgcGFyZW50LT50eXBlKSwKKwkJCSAgZGVzY3JpYmVfb2JqZWN0KCZwYXJlbnQtPm9pZCkpOwogCQlwcmludGZfbG4oXygiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiKSwKIAkJCSAgKHR5cGUgPT0gT0JKX0FOWSA/IF8oInVua25vd24iKSA6IHR5cGVfbmFtZSh0eXBlKSksCiAJCQkgIF8oInVua25vd24iKSk7CkBAIC0xODMsMTAgKzE3MCwxMCBAQAogCQlpZiAocGFyZW50ICYmICFoYXNfb2JqZWN0X2ZpbGUoJm9iai0+b2lkKSkgewogCQkJcHJpbnRmX2xuKF8oImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCiAJCQkJICAgICIgICAgICAgICAgICAgIHRvICU3cyAlcyIpLAotCQkJCSAgcHJpbnRhYmxlX3R5cGUocGFyZW50KSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdChwYXJlbnQpLAotCQkJCSAgcHJpbnRhYmxlX3R5cGUob2JqKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCQkgIHByaW50YWJsZV90eXBlKCZwYXJlbnQtPm9pZCwgcGFyZW50LT50eXBlKSwKKwkJCQkgIGRlc2NyaWJlX29iamVjdCgmcGFyZW50LT5vaWQpLAorCQkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOwogCQkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKIAkJfQogCQlyZXR1cm4gMTsKQEAgLTI5Miw4ICsyNzksOSBAQAogCQkJcmV0dXJuOwogCQlpZiAoaGFzX29iamVjdF9wYWNrKCZvYmotPm9pZCkpCiAJCQlyZXR1cm47IC8qIGl0IGlzIGluIHBhY2sgLSBmb3JnZXQgYWJvdXQgaXQgKi8KLQkJcHJpbnRmX2xuKF8oIm1pc3NpbmcgJXMgJXMiKSwgcHJpbnRhYmxlX3R5cGUob2JqKSwKLQkJCSAgZGVzY3JpYmVfb2JqZWN0KG9iaikpOworCQlwcmludGZfbG4oXygibWlzc2luZyAlcyAlcyIpLAorCQkJICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKIAkJcmV0dXJuOwogCX0KQEAgLTMxOCw4ICszMDYsOSBAQAogCSAqIHNpbmNlIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgaXMgcHJ1bmFibGUuCiAJICovCiAJaWYgKHNob3dfdW5yZWFjaGFibGUpIHsKLQkJcHJpbnRmX2xuKF8oInVucmVhY2hhYmxlICVzICVzIiksIHByaW50YWJsZV90eXBlKG9iaiksCi0JCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJcHJpbnRmX2xuKF8oInVucmVhY2hhYmxlICVzICVzIiksCisJCQkgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCSAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMzcsMTIgKzMyNiwxMyBAQAogCSAqLwogCWlmICghKG9iai0+ZmxhZ3MgJiBVU0VEKSkgewogCQlpZiAoc2hvd19kYW5nbGluZykKLQkJCXByaW50Zl9sbihfKCJkYW5nbGluZyAlcyAlcyIpLCBwcmludGFibGVfdHlwZShvYmopLAotCQkJCSAgZGVzY3JpYmVfb2JqZWN0KG9iaikpOworCQkJcHJpbnRmX2xuKF8oImRhbmdsaW5nICVzICVzIiksCisJCQkJICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCWlmICh3cml0ZV9sb3N0X2FuZF9mb3VuZCkgewogCQkJY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aGR1cCgibG9zdC1mb3VuZC8lcy8lcyIsCiAJCQkJb2JqLT50eXBlID09IE9CSl9DT01NSVQgPyAiY29tbWl0IiA6ICJvdGhlciIsCi0JCQkJZGVzY3JpYmVfb2JqZWN0KG9iaikpOworCQkJCWRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJCUZJTEUgKmY7CiAKIAkJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGZpbGVuYW1lKSkgewpAQCAtMzU1LDcgKzM0NSw3IEBACiAJCQkJaWYgKHN0cmVhbV9ibG9iX3RvX2ZkKGZpbGVubyhmKSwgJm9iai0+b2lkLCBOVUxMLCAxKSkKIAkJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSAnJXMnIiksIGZpbGVuYW1lKTsKIAkJCX0gZWxzZQotCQkJCWZwcmludGYoZiwgIiVzXG4iLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCQkJZnByaW50ZihmLCAiJXNcbiIsIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJCWlmIChmY2xvc2UoZikpCiAJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIpLAogCQkJCQkgIGZpbGVuYW1lKTsKQEAgLTM3NCw3ICszNjQsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKIHsKIAlpZiAodmVyYm9zZSkKLQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nICVzIiksIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nICVzIiksIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAogCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQogCQljaGVja19yZWFjaGFibGVfb2JqZWN0KG9iaik7CkBAIC00MzIsNyArNDIyLDggQEAKIAogCWlmICh2ZXJib3NlKQogCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2hlY2tpbmcgJXMgJXMiKSwKLQkJCSAgIHByaW50YWJsZV90eXBlKG9iaiksIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCSAgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCSAgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAogCWlmIChmc2NrX3dhbGsob2JqLCBOVUxMLCAmZnNja19vYmpfb3B0aW9ucykpCiAJCW9iamVycm9yKG9iaiwgXygiYnJva2VuIGxpbmtzIikpOwpAQCAtNDQ1LDcgKzQzNiw3IEBACiAKIAkJaWYgKCFjb21taXQtPnBhcmVudHMgJiYgc2hvd19yb290KQogCQkJcHJpbnRmX2xuKF8oInJvb3QgJXMiKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdCgmY29tbWl0LT5vYmplY3QpKTsKKwkJCQkgIGRlc2NyaWJlX29iamVjdCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CiAJfQogCiAJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CkBAIC00NTMsMTAgKzQ0NCwxMCBAQAogCiAJCWlmIChzaG93X3RhZ3MgJiYgdGFnLT50YWdnZWQpIHsKIAkJCXByaW50Zl9sbihfKCJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIpLAotCQkJCSAgcHJpbnRhYmxlX3R5cGUodGFnLT50YWdnZWQpLAotCQkJCSAgZGVzY3JpYmVfb2JqZWN0KHRhZy0+dGFnZ2VkKSwKKwkJCQkgIHByaW50YWJsZV90eXBlKCZ0YWctPnRhZ2dlZC0+b2lkLCB0YWctPnRhZ2dlZC0+dHlwZSksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJnRhZy0+dGFnZ2VkLT5vaWQpLAogCQkJCSAgdGFnLT50YWcsCi0JCQkJICBkZXNjcmliZV9vYmplY3QoJnRhZy0+b2JqZWN0KSk7CisJCQkJICBkZXNjcmliZV9vYmplY3QoJnRhZy0+b2JqZWN0Lm9pZCkpOwogCQl9CiAJfQogCkBAIC00OTksMTAgKzQ5MCwxMCBAQAogCWlmICghaXNfbnVsbF9vaWQob2lkKSkgewogCQlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCQlpZiAob2JqICYmIChvYmotPmZsYWdzICYgSEFTX09CSikpIHsKLQkJCWlmICh0aW1lc3RhbXAgJiYgbmFtZV9vYmplY3RzKQotCQkJCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKLQkJCQkJb2JqLAotCQkJCQl4c3RyZm10KCIlc0B7JSJQUkl0aW1lIn0iLCByZWZuYW1lLCB0aW1lc3RhbXApKTsKKwkJCWlmICh0aW1lc3RhbXApCisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUoJmZzY2tfd2Fsa19vcHRpb25zLCBvaWQsCisJCQkJCQkgICAgICIlc0B7JSJQUkl0aW1lIn0iLAorCQkJCQkJICAgICByZWZuYW1lLCB0aW1lc3RhbXApOwogCQkJb2JqLT5mbGFncyB8PSBVU0VEOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCX0gZWxzZSBpZiAoIWlzX3Byb21pc29yX29iamVjdChvaWQpKSB7CkBAIC01NjYsOSArNTU3LDggQEAKIAl9CiAJZGVmYXVsdF9yZWZzKys7CiAJb2JqLT5mbGFncyB8PSBVU0VEOwotCWlmIChuYW1lX29iamVjdHMpCi0JCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKLQkJCW9iaiwgeHN0cmR1cChyZWZuYW1lKSk7CisJZnNja19wdXRfb2JqZWN0X25hbWUoJmZzY2tfd2Fsa19vcHRpb25zLAorCQkJICAgICBvaWQsICIlcyIsIHJlZm5hbWUpOwogCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCiAJcmV0dXJuIDA7CkBAIC03NDIsOSArNzMyLDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQkJaWYgKG5hbWVfb2JqZWN0cykKLQkJCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKLQkJCQlvYmosIHhzdHJkdXAoIjoiKSk7CisJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgJml0LT5vaWQsICI6Iik7CiAJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCQlpZiAob2JqLT50eXBlICE9IE9CSl9UUkVFKQogCQkJZXJyIHw9IG9iamVycm9yKG9iaiwgXygibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIpKTsKQEAgLTgzMCw4ICs4MTgsNyBAQAogCX0KIAogCWlmIChuYW1lX29iamVjdHMpCi0JCWZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcyA9Ci0JCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGVjb3JhdGlvbikpOworCQlmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoJmZzY2tfd2Fsa19vcHRpb25zKTsKIAogCWdpdF9jb25maWcoZnNja19jb25maWcsIE5VTEwpOwogCkBAIC04OTAsOSArODc3LDggQEAKIAkJCX0KIAogCQkJb2JqLT5mbGFncyB8PSBVU0VEOwotCQkJaWYgKG5hbWVfb2JqZWN0cykKLQkJCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQkJCW9iaiwgeHN0cmR1cChhcmcpKTsKKwkJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgJm9pZCwKKwkJCQkJICAgICAiJXMiLCBhcmcpOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtOTI4LDEwICs5MTQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJb2JqID0gJmJsb2ItPm9iamVjdDsKIAkJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQkJCWlmIChuYW1lX29iamVjdHMpCi0JCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAotCQkJCQlvYmosCi0JCQkJCXhzdHJmbXQoIjolcyIsIGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSkpOworCQkJZnNja19wdXRfb2JqZWN0X25hbWUoJmZzY2tfd2Fsa19vcHRpb25zLCAmb2JqLT5vaWQsCisJCQkJCSAgICAgIjolcyIsIGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSk7CiAJCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAkJfQogCQlpZiAoYWN0aXZlX2NhY2hlX3RyZWUpCmRpZmYgLS1naXQgYS9idWlsdGluL2djLmMgYi9idWlsdGluL2djLmMKaW5kZXggZmFkYjQ1NC4uM2Y3NmJmNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9nYy5jCisrKyBiL2J1aWx0aW4vZ2MuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAvKgogICogUmV0dXJucyAwIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBlcnJvciBhbmQgZ2MgY2FuIHByb2NlZWQsIDEgaWYKICAqIGdjIHNob3VsZCBub3QgcHJvY2VlZCBkdWUgdG8gYW4gZXJyb3IgaW4gdGhlIGxhc3QgcnVuLiBQcmludHMgYQotICogbWVzc2FnZSBhbmQgcmV0dXJucyAtMSBpZiBhbiBlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgZ2MubG9nCisgKiBtZXNzYWdlIGFuZCByZXR1cm5zIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgZ2MubG9nCiAgKi8KIHN0YXRpYyBpbnQgcmVwb3J0X2xhc3RfZ2NfZXJyb3Iodm9pZCkKIHsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCQlpZiAoZGV0YWNoX2F1dG8pIHsKIAkJCWludCByZXQgPSByZXBvcnRfbGFzdF9nY19lcnJvcigpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJLyogYW4gSS9PIGVycm9yIG9jY3VyZWQsIGFscmVhZHkgcmVwb3J0ZWQgKi8KKwkJCQkvKiBhbiBJL08gZXJyb3Igb2NjdXJyZWQsIGFscmVhZHkgcmVwb3J0ZWQgKi8KIAkJCQlleGl0KDEyOCk7CiAJCQlpZiAocmV0ID09IDEpCiAJCQkJLyogTGFzdCBnYyAtLWF1dG8gZmFpbGVkLiBTa2lwIHRoaXMgb25lLiAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9sb2cuYyBiL2J1aWx0aW4vbG9nLmMKaW5kZXggODk4NzNkMi4uODNhNGE2MSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9sb2cuYworKysgYi9idWlsdGluL2xvZy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgogCiAjZGVmaW5lIE1BSUxfREVGQVVMVF9XUkFQIDcyCisjZGVmaW5lIENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4gMTAwCiAKIC8qIFNldCBhIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBmb3IgZ2l0IGxvZyAoImxvZy5kYXRlIiBjb25maWcgdmFyaWFibGUpICovCiBzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9kYXRlX21vZGUgPSBOVUxMOwpAQCAtMjA3LDcgKzIwOCw3IEBACiAJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgKCFyZXYtPnByZXR0eV9naXZlbiB8fCB3Lm5vdGVzKSkKIAkJcmV2LT5zaG93X25vdGVzID0gMTsKIAlpZiAocmV2LT5zaG93X25vdGVzKQotCQlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldi0+bm90ZXNfb3B0KTsKKwkJbG9hZF9kaXNwbGF5X25vdGVzKCZyZXYtPm5vdGVzX29wdCk7CiAKIAlpZiAoKHJldi0+ZGlmZm9wdC5waWNrYXhlX29wdHMgJiBESUZGX1BJQ0tBWEVfS0lORFNfTUFTSykgfHwKIAkgICAgcmV2LT5kaWZmb3B0LmZpbHRlciB8fCByZXYtPmRpZmZvcHQuZmxhZ3MuZm9sbG93X3JlbmFtZXMpCkBAIC03NjUsMjggKzc2Niw1NiBAQAogCWl0ZW0tPnN0cmluZ1tsZW5dID0gJ1wwJzsKIH0KIAotI2RlZmluZSBUSFJFQURfU0hBTExPVyAxCi0jZGVmaW5lIFRIUkVBRF9ERUVQIDIKLXN0YXRpYyBpbnQgdGhyZWFkOwotc3RhdGljIGludCBkb19zaWdub2ZmOwotc3RhdGljIGludCBiYXNlX2F1dG87Ci1zdGF0aWMgY2hhciAqZnJvbTsKLXN0YXRpYyBjb25zdCBjaGFyICpzaWduYXR1cmUgPSBnaXRfdmVyc2lvbl9zdHJpbmc7Ci1zdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlX2ZpbGU7Ci1zdGF0aWMgaW50IGNvbmZpZ19jb3Zlcl9sZXR0ZXI7Ci1zdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX291dHB1dF9kaXJlY3Rvcnk7Ci0KLWVudW0geworZW51bSBjb3Zlcl9zZXR0aW5nIHsKIAlDT1ZFUl9VTlNFVCwKIAlDT1ZFUl9PRkYsCiAJQ09WRVJfT04sCiAJQ09WRVJfQVVUTwogfTsKIAorZW51bSB0aHJlYWRfbGV2ZWwgeworCVRIUkVBRF9VTlNFVCwKKwlUSFJFQURfU0hBTExPVywKKwlUSFJFQURfREVFUAorfTsKKworZW51bSBjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uIHsKKwlDT1ZFUl9GUk9NX05PTkUsCisJQ09WRVJfRlJPTV9NRVNTQUdFLAorCUNPVkVSX0ZST01fU1VCSkVDVCwKKwlDT1ZFUl9GUk9NX0FVVE8KK307CisKK3N0YXRpYyBlbnVtIHRocmVhZF9sZXZlbCB0aHJlYWQ7CitzdGF0aWMgaW50IGRvX3NpZ25vZmY7CitzdGF0aWMgaW50IGJhc2VfYXV0bzsKK3N0YXRpYyBjaGFyICpmcm9tOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKK3N0YXRpYyBjb25zdCBjaGFyICpzaWduYXR1cmVfZmlsZTsKK3N0YXRpYyBlbnVtIGNvdmVyX3NldHRpbmcgY29uZmlnX2NvdmVyX2xldHRlcjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfb3V0cHV0X2RpcmVjdG9yeTsKK3N0YXRpYyBlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24gY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID0gQ09WRVJfRlJPTV9NRVNTQUdFOworc3RhdGljIGludCBzaG93X25vdGVzOworc3RhdGljIHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCBub3Rlc19vcHQ7CisKK3N0YXRpYyBlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFhcmcgfHwgIXN0cmNtcChhcmcsICJkZWZhdWx0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJub25lIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtZXNzYWdlIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdWJqZWN0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX1NVQkpFQ1Q7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJhdXRvIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX0FVVE87CisJZWxzZQorCQlkaWUoXygiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIiksIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgZ2l0X2Zvcm1hdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7Ci0Jc3RydWN0IHJldl9pbmZvICpyZXYgPSBjYjsKLQogCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5oZWFkZXJzIikpIHsKIAkJaWYgKCF2YWx1ZSkKIAkJCWRpZShfKCJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIikpOwpAQCAtODM2LDcgKzg2NSw3IEBACiAJCQl0aHJlYWQgPSBUSFJFQURfU0hBTExPVzsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXRocmVhZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSAmJiBUSFJFQURfU0hBTExPVzsKKwkJdGhyZWFkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpID8gVEhSRUFEX1NIQUxMT1cgOiBUSFJFQURfVU5TRVQ7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc2lnbm9mZiIpKSB7CkBAIC04NzMsMTkgKzkwMiwxNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0Lm5vdGVzIikpIHsKLQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAkJaW50IGIgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSk7Ci0JCWlmICghYikKLQkJCXJldHVybiAwOwotCQlyZXYtPnNob3dfbm90ZXMgPSAxOwotCQlpZiAoYiA8IDApIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdmFsdWUpOwotCQkJZXhwYW5kX25vdGVzX3JlZigmYnVmKTsKLQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywKLQkJCQkJc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXYtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7Ci0JCX0KKwkJaWYgKGIgPCAwKQorCQkJZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQsICZzaG93X25vdGVzLCB2YWx1ZSk7CisJCWVsc2UgaWYgKGIpCisJCQllbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQsICZzaG93X25vdGVzKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQsICZzaG93X25vdGVzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5jb3ZlcmZyb21kZXNjcmlwdGlvbiIpKSB7CisJCWNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9IHBhcnNlX2NvdmVyX2Zyb21fZGVzY3JpcHRpb24odmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk5NCwyMCArMTAyMSw2IEBACiAJcHV0YygnXG4nLCBmaWxlKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjcmlwdGlvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQotewotCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOwotCWlmICghYnJhbmNoX25hbWUgfHwgISpicmFuY2hfbmFtZSkKLQkJcmV0dXJuOwotCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIGJyYW5jaF9uYW1lKTsKLQlpZiAoZGVzYy5sZW4pIHsKLQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7Ci0JCXN0cmJ1Zl9hZGRidWYoYnVmLCAmZGVzYyk7Ci0JCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOwotCX0KLQlzdHJidWZfcmVsZWFzZSgmZGVzYyk7Ci19Ci0KIHN0YXRpYyBjaGFyICpmaW5kX2JyYW5jaF9uYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpLCBwb3NpdGl2ZSA9IC0xOwpAQCAtMTA1NCw2ICsxMDY3LDYzIEBACiAJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfY292ZXJfdGV4dChzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkJICAgICAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCWNvbnN0IGNoYXIgKnN1YmplY3QgPSAiKioqIFNVQkpFQ1QgSEVSRSAqKioiOworCWNvbnN0IGNoYXIgKmJvZHkgPSAiKioqIEJMVVJCIEhFUkUgKioqIjsKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2NyaXB0aW9uX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0X3NiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTk9ORSkKKwkJZ290byBkb19wcDsKKworCWlmIChicmFuY2hfbmFtZSAmJiAqYnJhbmNoX25hbWUpCisJCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2NyaXB0aW9uX3NiLCBicmFuY2hfbmFtZSk7CisJaWYgKCFkZXNjcmlwdGlvbl9zYi5sZW4pCisJCWdvdG8gZG9fcHA7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fU1VCSkVDVCB8fAorCQkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fQVVUTykKKwkJYm9keSA9IGZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0X3NiLCBkZXNjcmlwdGlvbl9zYi5idWYsICIgIik7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTUVTU0FHRSB8fAorCQkJKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9PSBDT1ZFUl9GUk9NX0FVVE8gJiYKKwkJCSBzdWJqZWN0X3NiLmxlbiA+IENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4pKQorCQlib2R5ID0gZGVzY3JpcHRpb25fc2IuYnVmOworCWVsc2UKKwkJc3ViamVjdCA9IHN1YmplY3Rfc2IuYnVmOworCitkb19wcDoKKwlwcF90aXRsZV9saW5lKHBwLCAmc3ViamVjdCwgc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlwcF9yZW1haW5kZXIocHAsICZib2R5LCBzYiwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmZGVzY3JpcHRpb25fc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJqZWN0X3NiKTsKK30KKworc3RhdGljIGludCBnZXRfbm90ZXNfcmVmcyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqYXJnKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoYXJnLCAiLS1ub3Rlcz0lcyIsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9ub3Rlc19hcmdzKHN0cnVjdCBhcmd2X2FycmF5ICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmICghcmV2LT5zaG93X25vdGVzKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmcsICItLW5vLW5vdGVzIik7CisJfSBlbHNlIGlmIChyZXYtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA+IDAgfHwKKwkJICAgKHJldi0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmCisJCSAgICAhcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcy5ucikpIHsKKwkJYXJndl9hcnJheV9wdXNoKGFyZywgIi0tbm90ZXMiKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywgZ2V0X25vdGVzX3JlZnMsIGFyZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtYWtlX2NvdmVyX2xldHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgaW50IHVzZV9zdGRvdXQsCiAJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpvcmlnaW4sCiAJCQkgICAgICBpbnQgbnIsIHN0cnVjdCBjb21taXQgKipsaXN0LApAQCAtMTA2MSw4ICsxMTMxLDYgQEAKIAkJCSAgICAgIGludCBxdWlldCkKIHsKIAljb25zdCBjaGFyICpjb21taXR0ZXI7Ci0JY29uc3QgY2hhciAqYm9keSA9ICIqKiogU1VCSkVDVCBIRVJFICoqKlxuXG4qKiogQkxVUkIgSEVSRSAqKipcbiI7Ci0JY29uc3QgY2hhciAqbXNnOwogCXN0cnVjdCBzaG9ydGxvZyBsb2c7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwogCWludCBpOwpAQCAtMTA5MiwxNSArMTE2MCwxMiBAQAogCWlmICghYnJhbmNoX25hbWUpCiAJCWJyYW5jaF9uYW1lID0gZmluZF9icmFuY2hfbmFtZShyZXYpOwogCi0JbXNnID0gYm9keTsKIAlwcC5mbXQgPSBDTUlUX0ZNVF9FTUFJTDsKIAlwcC5kYXRlX21vZGUudHlwZSA9IERBVEVfUkZDMjgyMjsKIAlwcC5yZXYgPSByZXY7CiAJcHAucHJpbnRfZW1haWxfc3ViamVjdCA9IDE7CiAJcHBfdXNlcl9pbmZvKCZwcCwgTlVMTCwgJnNiLCBjb21taXR0ZXIsIGVuY29kaW5nKTsKLQlwcF90aXRsZV9saW5lKCZwcCwgJm1zZywgJnNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7Ci0JcHBfcmVtYWluZGVyKCZwcCwgJm1zZywgJnNiLCAwKTsKLQlhZGRfYnJhbmNoX2Rlc2NyaXB0aW9uKCZzYiwgYnJhbmNoX25hbWUpOworCXByZXBhcmVfY292ZXJfdGV4dCgmcHAsIGJyYW5jaF9uYW1lLCAmc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKIAlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIHNiLmJ1Zik7CiAKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwpAQCAtMTEzMSwxMyArMTE5NiwxNiBAQAogCQkgKiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgZGVlbWVkIGRlc2lyYWJsZS4KIAkJICovCiAJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgb3RoZXJfYXJnID0gQVJHVl9BUlJBWV9JTklUOwogCQlkaWZmX3NldHVwKCZvcHRzKTsKIAkJb3B0cy5maWxlID0gcmV2LT5kaWZmb3B0LmZpbGU7CiAJCW9wdHMudXNlX2NvbG9yID0gcmV2LT5kaWZmb3B0LnVzZV9jb2xvcjsKIAkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKIAkJZnByaW50Zl9sbihyZXYtPmRpZmZvcHQuZmlsZSwgIiVzIiwgcmV2LT5yZGlmZl90aXRsZSk7CisJCWdldF9ub3Rlc19hcmdzKCZvdGhlcl9hcmcsIHJldik7CiAJCXNob3dfcmFuZ2VfZGlmZihyZXYtPnJkaWZmMSwgcmV2LT5yZGlmZjIsCi0JCQkJcmV2LT5jcmVhdGlvbl9mYWN0b3IsIDEsICZvcHRzKTsKKwkJCQlyZXYtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsICZvdGhlcl9hcmcpOworCQlhcmd2X2FycmF5X2NsZWFyKCZvdGhlcl9hcmcpOwogCX0KIH0KIApAQCAtMTI0OSw5ICsxMzE3LDkgQEAKIAogc3RhdGljIGludCB0aHJlYWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKLQlpbnQgKnRocmVhZCA9IChpbnQgKilvcHQtPnZhbHVlOworCWVudW0gdGhyZWFkX2xldmVsICp0aHJlYWQgPSAoZW51bSB0aHJlYWRfbGV2ZWwgKilvcHQtPnZhbHVlOwogCWlmICh1bnNldCkKLQkJKnRocmVhZCA9IDA7CisJCSp0aHJlYWQgPSBUSFJFQURfVU5TRVQ7CiAJZWxzZSBpZiAoIWFyZyB8fCAhc3RyY21wKGFyZywgInNoYWxsb3ciKSkKIAkJKnRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGVlcCIpKQpAQCAtMTI5OCw3ICsxMzY2LDcgQEAKIAkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX3RvLCAwKTsKIAkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2NjLCAwKTsKIAl9IGVsc2UgewotCSAgICBhZGRfaGVhZGVyKGFyZyk7CisJCWFkZF9oZWFkZXIoYXJnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzU0LDcgKzE0MjIsNyBAQAogCQliYXNlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShiYXNlX2NvbW1pdCk7CiAJCWlmICghYmFzZSkKIAkJCWRpZShfKCJ1bmtub3duIGNvbW1pdCAlcyIpLCBiYXNlX2NvbW1pdCk7Ci0JfSBlbHNlIGlmICgoYmFzZV9jb21taXQgJiYgIXN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkgfHwgYmFzZV9hdXRvKSB7CisJfSBlbHNlIGlmICgoYmFzZV9jb21taXQgJiYgIXN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkpIHsKIAkJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOwogCQljb25zdCBjaGFyICp1cHN0cmVhbSA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOwogCQlpZiAodXBzdHJlYW0pIHsKQEAgLTE1NDIsNiArMTYxMCw3IEBACiAJaW50IHVzZV9wYXRjaF9mb3JtYXQgPSAwOwogCWludCBxdWlldCA9IDA7CiAJaW50IHJlcm9sbF9jb3VudCA9IC0xOworCWNoYXIgKmNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnID0gTlVMTDsKIAljaGFyICpicmFuY2hfbmFtZSA9IE5VTEw7CiAJY2hhciAqYmFzZV9jb21taXQgPSBOVUxMOwogCXN0cnVjdCBiYXNlX3RyZWVfaW5mbyBiYXNlczsKQEAgLTE1NzgsNiArMTY0Nyw5IEBACiAJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmZjIiwgJnJldiwgTlVMTCwKIAkJCSAgICBOXygiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIpLAogCQkJICAgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgcmZjX2NhbGxiYWNrIH0sCisJCU9QVF9TVFJJTkcoMCwgImNvdmVyLWZyb20tZGVzY3JpcHRpb24iLCAmY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcsCisJCQkgICAgTl8oImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIpLAorCQkJICAgIE5fKCJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIikpLAogCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInN1YmplY3QtcHJlZml4IiwgJnJldiwgTl8oInByZWZpeCIpLAogCQkJICAgIE5fKCJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iKSwKIAkJCSAgICBQQVJTRV9PUFRfTk9ORUcsIHN1YmplY3RfcHJlZml4X2NhbGxiYWNrIH0sCkBAIC0xNjQxLDggKzE3MTMsMTEgQEAKIAlleHRyYV90by5zdHJkdXBfc3RyaW5ncyA9IDE7CiAJZXh0cmFfY2Muc3RyZHVwX3N0cmluZ3MgPSAxOwogCWluaXRfbG9nX2RlZmF1bHRzKCk7CisJaW5pdF9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQpOworCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOwogCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7Ci0JZ2l0X2NvbmZpZyhnaXRfZm9ybWF0X2NvbmZpZywgJnJldik7CisJcmV2LnNob3dfbm90ZXMgPSBzaG93X25vdGVzOworCW1lbWNweSgmcmV2Lm5vdGVzX29wdCwgJm5vdGVzX29wdCwgc2l6ZW9mKG5vdGVzX29wdCkpOwogCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfRU1BSUw7CiAJcmV2LmV4cGFuZF90YWJzX2luX2xvZ19kZWZhdWx0ID0gMDsKIAlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOwpAQCAtMTY1NCw2ICsxNzI5LDkgQEAKIAlzX3Jfb3B0LmRlZiA9ICJIRUFEIjsKIAlzX3Jfb3B0LnJldmFyZ19vcHQgPSBSRVZBUkdfQ09NTUlUVElTSDsKIAorCWlmIChiYXNlX2F1dG8pCisJCWJhc2VfY29tbWl0ID0gImF1dG8iOworCiAJaWYgKGRlZmF1bHRfYXR0YWNoKSB7CiAJCXJldi5taW1lX2JvdW5kYXJ5ID0gZGVmYXVsdF9hdHRhY2g7CiAJCXJldi5ub19pbmxpbmUgPSAxOwpAQCAtMTY2OSw2ICsxNzQ3LDkgQEAKIAkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwKIAkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOwogCisJaWYgKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnKQorCQljb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBwYXJzZV9jb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnKTsKKwogCWlmICgwIDwgcmVyb2xsX2NvdW50KSB7CiAJCXN0cnVjdCBzdHJidWYgc3ByZWZpeCA9IFNUUkJVRl9JTklUOwogCQlzdHJidWZfYWRkZigmc3ByZWZpeCwgIiVzIHYlZCIsCkBAIC0xNzU1LDcgKzE4MzYsNyBAQAogCQlyZXYuZGlmZm9wdC5mbGFncy5iaW5hcnkgPSAxOwogCiAJaWYgKHJldi5zaG93X25vdGVzKQotCQlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldi5ub3Rlc19vcHQpOworCQlsb2FkX2Rpc3BsYXlfbm90ZXMoJnJldi5ub3Rlc19vcHQpOwogCiAJaWYgKCFvdXRwdXRfZGlyZWN0b3J5ICYmICF1c2Vfc3Rkb3V0KQogCQlvdXRwdXRfZGlyZWN0b3J5ID0gY29uZmlnX291dHB1dF9kaXJlY3Rvcnk7CkBAIC0xOTE0LDcgKzE5OTUsNyBAQAogCX0KIAogCW1lbXNldCgmYmFzZXMsIDAsIHNpemVvZihiYXNlcykpOwotCWlmIChiYXNlX2NvbW1pdCB8fCBiYXNlX2F1dG8pIHsKKwlpZiAoYmFzZV9jb21taXQpIHsKIAkJc3RydWN0IGNvbW1pdCAqYmFzZSA9IGdldF9iYXNlX2NvbW1pdChiYXNlX2NvbW1pdCwgbGlzdCwgbnIpOwogCQlyZXNldF9yZXZpc2lvbl93YWxrKCk7CiAJCWNsZWFyX29iamVjdF9mbGFncyhVTklOVEVSRVNUSU5HKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jIGIvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMKaW5kZXggYjFlYTFhNi4uNWJmODhjZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMKKysrIGIvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMKQEAgLTYsMjEgKzYsMjUgQEAKICNpbmNsdWRlICJ0cmFjZTIuaCIKIAogc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2VbXSA9IHsKLQlOXygiZ2l0IG11bHRpLXBhY2staW5kZXggWy0tb2JqZWN0LWRpcj08ZGlyPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtc2l6ZT08c2l6ZT4pIiksCisJTl8oImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLXNpemU9PHNpemU+KSIpLAogCU5VTEwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb3B0c19tdWx0aV9wYWNrX2luZGV4IHsKIAljb25zdCBjaGFyICpvYmplY3RfZGlyOwogCXVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZTsKKwlpbnQgcHJvZ3Jlc3M7CiB9IG9wdHM7CiAKIGludCBjbWRfbXVsdGlfcGFja19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCiAJCQkgY29uc3QgY2hhciAqcHJlZml4KQogeworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF9vcHRpb25zW10gPSB7CiAJCU9QVF9GSUxFTkFNRSgwLCAib2JqZWN0LWRpciIsICZvcHRzLm9iamVjdF9kaXIsCiAJCSAgTl8oIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAogCQlPUFRfTUFHTklUVURFKDAsICJiYXRjaC1zaXplIiwgJm9wdHMuYmF0Y2hfc2l6ZSwKIAkJICBOXygiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUiKSksCiAJCU9QVF9FTkQoKSwKQEAgLTI4LDEyICszMiwxNSBAQAogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCisJb3B0cy5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCiAJCQkgICAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF9vcHRpb25zLAogCQkJICAgICBidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2UsIDApOwogCiAJaWYgKCFvcHRzLm9iamVjdF9kaXIpCiAJCW9wdHMub2JqZWN0X2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJaWYgKG9wdHMucHJvZ3Jlc3MpCisJCWZsYWdzIHw9IE1JRFhfUFJPR1JFU1M7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X3VzYWdlLApAQCAtNDcsMTYgKzU0LDE3IEBACiAJdHJhY2UyX2NtZF9tb2RlKGFyZ3ZbMF0pOwogCiAJaWYgKCFzdHJjbXAoYXJndlswXSwgInJlcGFjayIpKQotCQlyZXR1cm4gbWlkeF9yZXBhY2sodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2RpciwgKHNpemVfdClvcHRzLmJhdGNoX3NpemUpOworCQlyZXR1cm4gbWlkeF9yZXBhY2sodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2RpciwKKwkJCShzaXplX3Qpb3B0cy5iYXRjaF9zaXplLCBmbGFncyk7CiAJaWYgKG9wdHMuYmF0Y2hfc2l6ZSkKIAkJZGllKF8oIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIpKTsKIAogCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ3cml0ZSIpKQotCQlyZXR1cm4gd3JpdGVfbWlkeF9maWxlKG9wdHMub2JqZWN0X2Rpcik7CisJCXJldHVybiB3cml0ZV9taWR4X2ZpbGUob3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CiAJaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQotCQlyZXR1cm4gdmVyaWZ5X21pZHhfZmlsZSh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyKTsKKwkJcmV0dXJuIHZlcmlmeV9taWR4X2ZpbGUodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2RpciwgZmxhZ3MpOwogCWlmICghc3RyY21wKGFyZ3ZbMF0sICJleHBpcmUiKSkKLQkJcmV0dXJuIGV4cGlyZV9taWR4X3BhY2tzKHRoZV9yZXBvc2l0b3J5LCBvcHRzLm9iamVjdF9kaXIpOworCQlyZXR1cm4gZXhwaXJlX21pZHhfcGFja3ModGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2RpciwgZmxhZ3MpOwogCiAJZGllKF8oInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbmFtZS1yZXYuYyBiL2J1aWx0aW4vbmFtZS1yZXYuYwppbmRleCBiMGYwNzc2Li42YjllOGM4IDEwMDY0NAotLS0gYS9idWlsdGluL25hbWUtcmV2LmMKKysrIGIvYnVpbHRpbi9uYW1lLXJldi5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgogI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCiAjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKIApAQCAtNzksMzAgKzgwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5hbWVfcmV2KHN0cnVjdCBjb21taXQgKmNvbW1pdCwKLQkJY29uc3QgY2hhciAqdGlwX25hbWUsIHRpbWVzdGFtcF90IHRhZ2dlcmRhdGUsCi0JCWludCBnZW5lcmF0aW9uLCBpbnQgZGlzdGFuY2UsIGludCBmcm9tX3RhZywKLQkJaW50IGRlcmVmKQorc3RhdGljIHN0cnVjdCByZXZfbmFtZSAqY3JlYXRlX29yX3VwZGF0ZV9uYW1lKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqdGlwX25hbWUsCisJCQkJCSAgICAgIHRpbWVzdGFtcF90IHRhZ2dlcmRhdGUsCisJCQkJCSAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgZGlzdGFuY2UsCisJCQkJCSAgICAgIGludCBmcm9tX3RhZykKIHsKIAlzdHJ1Y3QgcmV2X25hbWUgKm5hbWUgPSBnZXRfY29tbWl0X3Jldl9uYW1lKGNvbW1pdCk7Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOwotCWludCBwYXJlbnRfbnVtYmVyID0gMTsKLQljaGFyICp0b19mcmVlID0gTlVMTDsKLQotCXBhcnNlX2NvbW1pdChjb21taXQpOwotCi0JaWYgKGNvbW1pdC0+ZGF0ZSA8IGN1dG9mZikKLQkJcmV0dXJuOwotCi0JaWYgKGRlcmVmKSB7Ci0JCXRpcF9uYW1lID0gdG9fZnJlZSA9IHhzdHJmbXQoIiVzXjAiLCB0aXBfbmFtZSk7Ci0KLQkJaWYgKGdlbmVyYXRpb24pCi0JCQlkaWUoImdlbmVyYXRpb246ICVkLCBidXQgZGVyZWY/IiwgZ2VuZXJhdGlvbik7Ci0JfQogCiAJaWYgKG5hbWUgPT0gTlVMTCkgewotCQluYW1lID0geG1hbGxvYyhzaXplb2YocmV2X25hbWUpKTsKKwkJbmFtZSA9IHhtYWxsb2Moc2l6ZW9mKCpuYW1lKSk7CiAJCXNldF9jb21taXRfcmV2X25hbWUoY29tbWl0LCBuYW1lKTsKIAkJZ290byBjb3B5X2RhdGE7CiAJfSBlbHNlIGlmIChpc19iZXR0ZXJfbmFtZShuYW1lLCB0YWdnZXJkYXRlLCBkaXN0YW5jZSwgZnJvbV90YWcpKSB7CkBAIC0xMTIsMzUgKzk5LDk3IEBACiAJCW5hbWUtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOwogCQluYW1lLT5kaXN0YW5jZSA9IGRpc3RhbmNlOwogCQluYW1lLT5mcm9tX3RhZyA9IGZyb21fdGFnOwotCX0gZWxzZSB7CisKKwkJcmV0dXJuIG5hbWU7CisJfSBlbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBuYW1lX3JldihzdHJ1Y3QgY29tbWl0ICpzdGFydF9jb21taXQsCisJCWNvbnN0IGNoYXIgKnRpcF9uYW1lLCB0aW1lc3RhbXBfdCB0YWdnZXJkYXRlLAorCQlpbnQgZnJvbV90YWcsIGludCBkZXJlZikKK3sKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdCAqKnBhcmVudHNfdG9fcXVldWUgPSBOVUxMOworCXNpemVfdCBwYXJlbnRzX3RvX3F1ZXVlX25yLCBwYXJlbnRzX3RvX3F1ZXVlX2FsbG9jID0gMDsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCXBhcnNlX2NvbW1pdChzdGFydF9jb21taXQpOworCWlmIChzdGFydF9jb21taXQtPmRhdGUgPCBjdXRvZmYpCisJCXJldHVybjsKKworCWlmIChkZXJlZikKKwkJdGlwX25hbWUgPSB0b19mcmVlID0geHN0cmZtdCgiJXNeMCIsIHRpcF9uYW1lKTsKKworCWlmICghY3JlYXRlX29yX3VwZGF0ZV9uYW1lKHN0YXJ0X2NvbW1pdCwgdGlwX25hbWUsIHRhZ2dlcmRhdGUsIDAsIDAsCisJCQkJICAgZnJvbV90YWcpKSB7CiAJCWZyZWUodG9fZnJlZSk7CiAJCXJldHVybjsKIAl9CiAKLQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7Ci0JCQlwYXJlbnRzOwotCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQsIHBhcmVudF9udW1iZXIrKykgewotCQlpZiAocGFyZW50X251bWJlciA+IDEpIHsKLQkJCXNpemVfdCBsZW47Ci0JCQljaGFyICpuZXdfbmFtZTsKKwltZW1zZXQoJnF1ZXVlLCAwLCBzaXplb2YocXVldWUpKTsgLyogVXNlIHRoZSBwcmlvX3F1ZXVlIGFzIExJRk8gKi8KKwlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHN0YXJ0X2NvbW1pdCk7CiAKLQkJCXN0cmlwX3N1ZmZpeCh0aXBfbmFtZSwgIl4wIiwgJmxlbik7Ci0JCQlpZiAoZ2VuZXJhdGlvbiA+IDApCi0JCQkJbmV3X25hbWUgPSB4c3RyZm10KCIlLipzfiVkXiVkIiwgKGludClsZW4sIHRpcF9uYW1lLAotCQkJCQkJICAgZ2VuZXJhdGlvbiwgcGFyZW50X251bWJlcik7Ci0JCQllbHNlCi0JCQkJbmV3X25hbWUgPSB4c3RyZm10KCIlLipzXiVkIiwgKGludClsZW4sIHRpcF9uYW1lLAotCQkJCQkJICAgcGFyZW50X251bWJlcik7CisJd2hpbGUgKChjb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmcXVldWUpKSkgeworCQlzdHJ1Y3QgcmV2X25hbWUgKm5hbWUgPSBnZXRfY29tbWl0X3Jldl9uYW1lKGNvbW1pdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJaW50IHBhcmVudF9udW1iZXIgPSAxOwogCi0JCQluYW1lX3JldihwYXJlbnRzLT5pdGVtLCBuZXdfbmFtZSwgdGFnZ2VyZGF0ZSwgMCwKLQkJCQkgZGlzdGFuY2UgKyBNRVJHRV9UUkFWRVJTQUxfV0VJR0hULAotCQkJCSBmcm9tX3RhZywgMCk7Ci0JCX0gZWxzZSB7Ci0JCQluYW1lX3JldihwYXJlbnRzLT5pdGVtLCB0aXBfbmFtZSwgdGFnZ2VyZGF0ZSwKLQkJCQkgZ2VuZXJhdGlvbiArIDEsIGRpc3RhbmNlICsgMSwKLQkJCQkgZnJvbV90YWcsIDApOworCQlwYXJlbnRzX3RvX3F1ZXVlX25yID0gMDsKKworCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkJcGFyZW50czsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgcGFyZW50X251bWJlcisrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJY29uc3QgY2hhciAqbmV3X25hbWU7CisJCQlpbnQgZ2VuZXJhdGlvbiwgZGlzdGFuY2U7CisKKwkJCXBhcnNlX2NvbW1pdChwYXJlbnQpOworCQkJaWYgKHBhcmVudC0+ZGF0ZSA8IGN1dG9mZikKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHBhcmVudF9udW1iZXIgPiAxKSB7CisJCQkJc2l6ZV90IGxlbjsKKworCQkJCXN0cmlwX3N1ZmZpeChuYW1lLT50aXBfbmFtZSwgIl4wIiwgJmxlbik7CisJCQkJaWYgKG5hbWUtPmdlbmVyYXRpb24gPiAwKQorCQkJCQluZXdfbmFtZSA9IHhzdHJmbXQoIiUuKnN+JWReJWQiLAorCQkJCQkJCSAgIChpbnQpbGVuLAorCQkJCQkJCSAgIG5hbWUtPnRpcF9uYW1lLAorCQkJCQkJCSAgIG5hbWUtPmdlbmVyYXRpb24sCisJCQkJCQkJICAgcGFyZW50X251bWJlcik7CisJCQkJZWxzZQorCQkJCQluZXdfbmFtZSA9IHhzdHJmbXQoIiUuKnNeJWQiLCAoaW50KWxlbiwKKwkJCQkJCQkgICBuYW1lLT50aXBfbmFtZSwKKwkJCQkJCQkgICBwYXJlbnRfbnVtYmVyKTsKKwkJCQlnZW5lcmF0aW9uID0gMDsKKwkJCQlkaXN0YW5jZSA9IG5hbWUtPmRpc3RhbmNlICsgTUVSR0VfVFJBVkVSU0FMX1dFSUdIVDsKKwkJCX0gZWxzZSB7CisJCQkJbmV3X25hbWUgPSBuYW1lLT50aXBfbmFtZTsKKwkJCQlnZW5lcmF0aW9uID0gbmFtZS0+Z2VuZXJhdGlvbiArIDE7CisJCQkJZGlzdGFuY2UgPSBuYW1lLT5kaXN0YW5jZSArIDE7CisJCQl9CisKKwkJCWlmIChjcmVhdGVfb3JfdXBkYXRlX25hbWUocGFyZW50LCBuZXdfbmFtZSwgdGFnZ2VyZGF0ZSwKKwkJCQkJCSAgZ2VuZXJhdGlvbiwgZGlzdGFuY2UsCisJCQkJCQkgIGZyb21fdGFnKSkgeworCQkJCUFMTE9DX0dST1cocGFyZW50c190b19xdWV1ZSwKKwkJCQkJICAgcGFyZW50c190b19xdWV1ZV9uciArIDEsCisJCQkJCSAgIHBhcmVudHNfdG9fcXVldWVfYWxsb2MpOworCQkJCXBhcmVudHNfdG9fcXVldWVbcGFyZW50c190b19xdWV1ZV9ucl0gPSBwYXJlbnQ7CisJCQkJcGFyZW50c190b19xdWV1ZV9ucisrOworCQkJfQogCQl9CisKKwkJLyogVGhlIGZpcnN0IHBhcmVudCBtdXN0IGNvbWUgb3V0IGZpcnN0IGZyb20gdGhlIHByaW9fcXVldWUgKi8KKwkJd2hpbGUgKHBhcmVudHNfdG9fcXVldWVfbnIpCisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsCisJCQkJICAgICAgIHBhcmVudHNfdG9fcXVldWVbLS1wYXJlbnRzX3RvX3F1ZXVlX25yXSk7CiAJfQorCisJY2xlYXJfcHJpb19xdWV1ZSgmcXVldWUpOworCWZyZWUocGFyZW50c190b19xdWV1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc3VicGF0aF9tYXRjaGVzKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZpbHRlcikKQEAgLTE2MSwxMCArMjEwLDEwIEBACiB7CiAJaWYgKHNob3J0ZW5fdW5hbWJpZ3VvdXMpCiAJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKLQllbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKLQkJcmVmbmFtZSA9IHJlZm5hbWUgKyAxMTsKLQllbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy8iKSkKLQkJcmVmbmFtZSA9IHJlZm5hbWUgKyA1OworCWVsc2UgaWYgKHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIsICZyZWZuYW1lKSkKKwkJOyAvKiByZWZuYW1lIGFscmVhZHkgYWR2YW5jZWQgKi8KKwllbHNlCisJCXNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzLyIsICZyZWZuYW1lKTsKIAlyZXR1cm4gcmVmbmFtZTsKIH0KIApAQCAtMjcyLDEwICszMjEsOSBAQAogCQlpbnQgZnJvbV90YWcgPSBzdGFydHNfd2l0aChwYXRoLCAicmVmcy90YWdzLyIpOwogCiAJCWlmICh0YWdnZXJkYXRlID09IFRJTUVfTUFYKQotCQkJdGFnZ2VyZGF0ZSA9ICgoc3RydWN0IGNvbW1pdCAqKW8pLT5kYXRlOworCQkJdGFnZ2VyZGF0ZSA9IGNvbW1pdC0+ZGF0ZTsKIAkJcGF0aCA9IG5hbWVfcmVmX2FiYnJldihwYXRoLCBjYW5fYWJicmV2aWF0ZV9vdXRwdXQpOwotCQluYW1lX3Jldihjb21taXQsIHhzdHJkdXAocGF0aCksIHRhZ2dlcmRhdGUsIDAsIDAsCi0JCQkgZnJvbV90YWcsIGRlcmVmKTsKKwkJbmFtZV9yZXYoY29tbWl0LCB4c3RyZHVwKHBhdGgpLCB0YWdnZXJkYXRlLCBmcm9tX3RhZywgZGVyZWYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMyMSwxMSArMzY5LDEwIEBACiAJaWYgKCFuLT5nZW5lcmF0aW9uKQogCQlyZXR1cm4gbi0+dGlwX25hbWU7CiAJZWxzZSB7Ci0JCWludCBsZW4gPSBzdHJsZW4obi0+dGlwX25hbWUpOwotCQlpZiAobGVuID4gMiAmJiAhc3RyY21wKG4tPnRpcF9uYW1lICsgbGVuIC0gMiwgIl4wIikpCi0JCQlsZW4gLT0gMjsKIAkJc3RyYnVmX3Jlc2V0KGJ1Zik7Ci0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUuKnN+JWQiLCBsZW4sIG4tPnRpcF9uYW1lLCBuLT5nZW5lcmF0aW9uKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIG4tPnRpcF9uYW1lKTsKKwkJc3RyYnVmX3N0cmlwX3N1ZmZpeChidWYsICJeMCIpOworCQlzdHJidWZfYWRkZihidWYsICJ+JWQiLCBuLT5nZW5lcmF0aW9uKTsKIAkJcmV0dXJuIGJ1Zi0+YnVmOwogCX0KIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbm90ZXMuYyBiL2J1aWx0aW4vbm90ZXMuYwppbmRleCAwMmU5N2Y1Li45NTQ1NmYzIDEwMDY0NAotLS0gYS9idWlsdGluL25vdGVzLmMKKysrIGIvYnVpbHRpbi9ub3Rlcy5jCkBAIC01MTMsNyArNTEzLDcgQEAKIAkJfQogCX0KIAotCWlmIChhcmdjIDwgMikgeworCWlmIChhcmdjIDwgMSkgewogCQllcnJvcihfKCJ0b28gZmV3IHBhcmFtZXRlcnMiKSk7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfY29weV91c2FnZSwgb3B0aW9ucyk7CiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKaW5kZXggNTg3NjU4My4uMzkzYzIwYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluL3BhY2stb2JqZWN0cy5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAlkZWx0YV9idWYgPSBkaWZmX2RlbHRhKGJhc2VfYnVmLCBiYXNlX3NpemUsCiAJCQkgICAgICAgYnVmLCBzaXplLCAmZGVsdGFfc2l6ZSwgMCk7CiAJLyoKLQkgKiBXZSBzdWNjZXNmdWxseSBjb21wdXRlZCB0aGlzIGRlbHRhIG9uY2UgYnV0IGRyb3BwZWQgaXQgZm9yCisJICogV2Ugc3VjY2Vzc2Z1bGx5IGNvbXB1dGVkIHRoaXMgZGVsdGEgb25jZSBidXQgZHJvcHBlZCBpdCBmb3IKIAkgKiBtZW1vcnkgcmVhc29ucy4gU29tZXRoaW5nIGlzIHZlcnkgd3JvbmcgaWYgdGhpcyB0aW1lIHdlCiAJICogcmVjb21wdXRlIGFuZCBjcmVhdGUgYSBkaWZmZXJlbnQgZGVsdGEuCiAJICovCmRpZmYgLS1naXQgYS9idWlsdGluL3BhdGNoLWlkLmMgYi9idWlsdGluL3BhdGNoLWlkLmMKaW5kZXggMzA1OWU1Mi4uODIyZmZmZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9wYXRjaC1pZC5jCisrKyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwpAQCAtNSwxMyArNSw4IEBACiAKIHN0YXRpYyB2b2lkIGZsdXNoX2N1cnJlbnRfaWQoaW50IHBhdGNobGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICppZCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQogewotCWNoYXIgbmFtZVtHSVRfTUFYX0hFWFNaICsgMV07Ci0KLQlpZiAoIXBhdGNobGVuKQotCQlyZXR1cm47Ci0KLQltZW1jcHkobmFtZSwgb2lkX3RvX2hleChpZCksIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMSk7Ci0JcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleChyZXN1bHQpLCBuYW1lKTsKKwlpZiAocGF0Y2hsZW4pCisJCXByaW50ZigiJXMgJXNcbiIsIG9pZF90b19oZXgocmVzdWx0KSwgb2lkX3RvX2hleChpZCkpOwogfQogCiBzdGF0aWMgaW50IHJlbW92ZV9zcGFjZShjaGFyICpsaW5lKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wdXNoLmMgYi9idWlsdGluL3B1c2guYwppbmRleCA4NDNmNWIyLi42ZGJmMGYwIDEwMDY0NAotLS0gYS9idWlsdGluL3B1c2guYworKysgYi9idWlsdGluL3B1c2guYwpAQCAtNjQsNiArNjQsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9yZWZzcGVjKGNvbnN0IGNoYXIgKnJlZiwKIAkJCSAgICAgICBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKmxvY2FsX3JlZnMpCiB7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CiAJc3RydWN0IHJlZiAqbWF0Y2hlZCA9IE5VTEw7CiAKIAkvKiBEb2VzICJyZWYiIHVuaXF1ZWx5IG5hbWUgb3VyIHJlZj8gKi8KQEAgLTg0LDggKzg1LDggQEAKIAl9CiAKIAlpZiAocHVzaF9kZWZhdWx0ID09IFBVU0hfREVGQVVMVF9VUFNUUkVBTSAmJgotCSAgICBzdGFydHNfd2l0aChtYXRjaGVkLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkgewotCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KG1hdGNoZWQtPm5hbWUgKyAxMSk7CisJICAgIHNraXBfcHJlZml4KG1hdGNoZWQtPm5hbWUsICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSkpIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CiAJCWlmIChicmFuY2gtPm1lcmdlX25yID09IDEgJiYgYnJhbmNoLT5tZXJnZVswXS0+c3JjKSB7CiAJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOiVzIiwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmFuZ2UtZGlmZi5jIGIvYnVpbHRpbi9yYW5nZS1kaWZmLmMKaW5kZXggOTIwMmU3NS4uZDhhNDY3MCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yYW5nZS1kaWZmLmMKKysrIGIvYnVpbHRpbi9yYW5nZS1kaWZmLmMKQEAgLTE1LDEyICsxNSwxNiBAQAogewogCWludCBjcmVhdGlvbl9mYWN0b3IgPSBSQU5HRV9ESUZGX0NSRUFUSU9OX0ZBQ1RPUl9ERUZBVUxUOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdCA9IHsgTlVMTCB9OworCXN0cnVjdCBhcmd2X2FycmF5IG90aGVyX2FyZyA9IEFSR1ZfQVJSQVlfSU5JVDsKIAlpbnQgc2ltcGxlX2NvbG9yID0gLTE7CiAJc3RydWN0IG9wdGlvbiByYW5nZV9kaWZmX29wdGlvbnNbXSA9IHsKIAkJT1BUX0lOVEVHRVIoMCwgImNyZWF0aW9uLWZhY3RvciIsICZjcmVhdGlvbl9mYWN0b3IsCiAJCQkgICAgTl8oIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiKSksCiAJCU9QVF9CT09MKDAsICJuby1kdWFsLWNvbG9yIiwgJnNpbXBsZV9jb2xvciwKIAkJCSAgICBOXygidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIpKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgIm5vdGVzIiwgJm90aGVyX2FyZywKKwkJCQkgIE5fKCJub3RlcyIpLCBOXygicGFzc2VkIHRvICdnaXQgbG9nJyIpLAorCQkJCSAgUEFSU0VfT1BUX09QVEFSRyksCiAJCU9QVF9FTkQoKQogCX07CiAJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKQEAgLTc4LDggKzgyLDkgQEAKIAlGUkVFX0FORF9OVUxMKG9wdGlvbnMpOwogCiAJcmVzID0gc2hvd19yYW5nZV9kaWZmKHJhbmdlMS5idWYsIHJhbmdlMi5idWYsIGNyZWF0aW9uX2ZhY3RvciwKLQkJCSAgICAgIHNpbXBsZV9jb2xvciA8IDEsICZkaWZmb3B0KTsKKwkJCSAgICAgIHNpbXBsZV9jb2xvciA8IDEsICZkaWZmb3B0LCAmb3RoZXJfYXJnKTsKIAorCWFyZ3ZfYXJyYXlfY2xlYXIoJm90aGVyX2FyZyk7CiAJc3RyYnVmX3JlbGVhc2UoJnJhbmdlMSk7CiAJc3RyYnVmX3JlbGVhc2UoJnJhbmdlMik7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVhZC10cmVlLmMgYi9idWlsdGluL3JlYWQtdHJlZS5jCmluZGV4IGNhNWU2NTUuLmFmNzQyNGIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVhZC10cmVlLmMKKysrIGIvYnVpbHRpbi9yZWFkLXRyZWUuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAlpZiAob3B0cy5yZXNldCB8fCBvcHRzLm1lcmdlIHx8IG9wdHMucHJlZml4KSB7CiAJCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkgJiYgKG9wdHMucHJlZml4IHx8IG9wdHMubWVyZ2UpKQotCQkJZGllKCJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIpOworCQkJZGllKF8oIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IikpOwogCQlzdGFnZSA9IG9wdHMubWVyZ2UgPSAxOwogCX0KIAlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmViYXNlLmMgYi9idWlsdGluL3JlYmFzZS5jCmluZGV4IDRhMjA1ODIuLmRkZjMzYmMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmViYXNlLmMKKysrIGIvYnVpbHRpbi9yZWJhc2UuYwpAQCAtNzksOCArNzksMTEgQEAKIAlpbnQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU7CiAJaW50IGtlZXBfZW1wdHk7CiAJaW50IGF1dG9zcXVhc2g7CisJaW50IGlnbm9yZV93aGl0ZXNwYWNlOwogCWNoYXIgKmdwZ19zaWduX29wdDsKIAlpbnQgYXV0b3N0YXNoOworCWludCBjb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZTsKKwlpbnQgaWdub3JlX2RhdGU7CiAJY2hhciAqY21kOwogCWludCBhbGxvd19lbXB0eV9tZXNzYWdlOwogCWludCByZWJhc2VfbWVyZ2VzLCByZWJhc2VfY291c2luczsKQEAgLTk5LDYgKzEwMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVwbGF5X29wdHMgZ2V0X3JlcGxheV9vcHRzKGNvbnN0IHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKIHsKKwlzdHJ1Y3Qgc3RyYnVmIHN0cmF0ZWd5X2J1ZiA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCByZXBsYXlfb3B0cyByZXBsYXkgPSBSRVBMQVlfT1BUU19JTklUOwogCiAJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CkBAIC0xMTIsMTAgKzExNiwyNSBAQAogCXJlcGxheS5hbGxvd19lbXB0eV9tZXNzYWdlID0gb3B0cy0+YWxsb3dfZW1wdHlfbWVzc2FnZTsKIAlyZXBsYXkudmVyYm9zZSA9IG9wdHMtPmZsYWdzICYgUkVCQVNFX1ZFUkJPU0U7CiAJcmVwbGF5LnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSBvcHRzLT5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjOworCXJlcGxheS5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSA9CisJCQkJCW9wdHMtPmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlOworCXJlcGxheS5pZ25vcmVfZGF0ZSA9IG9wdHMtPmlnbm9yZV9kYXRlOwogCXJlcGxheS5ncGdfc2lnbiA9IHhzdHJkdXBfb3JfbnVsbChvcHRzLT5ncGdfc2lnbl9vcHQpOwogCXJlcGxheS5zdHJhdGVneSA9IG9wdHMtPnN0cmF0ZWd5OworCiAJaWYgKG9wdHMtPnN0cmF0ZWd5X29wdHMpCi0JCXBhcnNlX3N0cmF0ZWd5X29wdHMoJnJlcGxheSwgb3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisJCXN0cmJ1Zl9hZGRzdHIoJnN0cmF0ZWd5X2J1Ziwgb3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisJaWYgKG9wdHMtPmlnbm9yZV93aGl0ZXNwYWNlKQorCQlzdHJidWZfYWRkc3RyKCZzdHJhdGVneV9idWYsICIgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIik7CisJaWYgKHN0cmF0ZWd5X2J1Zi5sZW4pCisJCXBhcnNlX3N0cmF0ZWd5X29wdHMoJnJlcGxheSwgc3RyYXRlZ3lfYnVmLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmc3RyYXRlZ3lfYnVmKTsKKworCWlmIChvcHRzLT5zcXVhc2hfb250bykgeworCQlvaWRjcHkoJnJlcGxheS5zcXVhc2hfb250bywgb3B0cy0+c3F1YXNoX29udG8pOworCQlyZXBsYXkuaGF2ZV9zcXVhc2hfb250byA9IDE7CisJfQogCiAJcmV0dXJuIHJlcGxheTsKIH0KQEAgLTUxMiw2ICs1MzEsOCBAQAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKIAkJCWJ1aWx0aW5fcmViYXNlX2ludGVyYWN0aXZlX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CiAKKwlvcHRzLnN0cmF0ZWd5X29wdHMgPSB4c3RyZHVwX29yX251bGwob3B0cy5zdHJhdGVneV9vcHRzKTsKKwogCWlmICghaXNfbnVsbF9vaWQoJnNxdWFzaF9vbnRvKSkKIAkJb3B0cy5zcXVhc2hfb250byA9ICZzcXVhc2hfb250bzsKIApAQCAtOTY1LDYgKzk4NiwxMiBAQAogCWFtLmdpdF9jbWQgPSAxOwogCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgImFtIik7CiAKKwlpZiAob3B0cy0+aWdub3JlX3doaXRlc3BhY2UpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0taWdub3JlLXdoaXRlc3BhY2UiKTsKKwlpZiAob3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmb3B0cy0+Z2l0X2FtX29wdHMsICItLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIik7CisJaWYgKG9wdHMtPmlnbm9yZV9kYXRlKQorCQlhcmd2X2FycmF5X3B1c2goJm9wdHMtPmdpdF9hbV9vcHRzLCAiLS1pZ25vcmUtZGF0ZSIpOwogCWlmIChvcHRzLT5hY3Rpb24gJiYgIXN0cmNtcCgiY29udGludWUiLCBvcHRzLT5hY3Rpb24pKSB7CiAJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tcmVzb2x2ZWQiKTsKIAkJYXJndl9hcnJheV9wdXNoZigmYW0uYXJncywgIi0tcmVzb2x2ZW1zZz0lcyIsIHJlc29sdmVtc2cpOwpAQCAtMTAxMiw3ICsxMDM5LDggQEAKIAlhcmd2X2FycmF5X3B1c2hsKCZmb3JtYXRfcGF0Y2guYXJncywgImZvcm1hdC1wYXRjaCIsICItayIsICItLXN0ZG91dCIsCiAJCQkgIi0tZnVsbC1pbmRleCIsICItLWNoZXJyeS1waWNrIiwgIi0tcmlnaHQtb25seSIsCiAJCQkgIi0tc3JjLXByZWZpeD1hLyIsICItLWRzdC1wcmVmaXg9Yi8iLCAiLS1uby1yZW5hbWVzIiwKLQkJCSAiLS1uby1jb3Zlci1sZXR0ZXIiLCAiLS1wcmV0dHk9bWJveHJkIiwgIi0tdG9wby1vcmRlciIsIE5VTEwpOworCQkJICItLW5vLWNvdmVyLWxldHRlciIsICItLXByZXR0eT1tYm94cmQiLCAiLS10b3BvLW9yZGVyIiwKKwkJCSAiLS1uby1iYXNlIiwgTlVMTCk7CiAJaWYgKG9wdHMtPmdpdF9mb3JtYXRfcGF0Y2hfb3B0LmxlbikKIAkJYXJndl9hcnJheV9zcGxpdCgmZm9ybWF0X3BhdGNoLmFyZ3MsCiAJCQkJIG9wdHMtPmdpdF9mb3JtYXRfcGF0Y2hfb3B0LmJ1Zik7CkBAIC0xNDMxLDE2ICsxNDU5LDE3IEBACiAJCQlQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIFJFQkFTRV9ESUZGU1RBVCB9LAogCQlPUFRfQk9PTCgwLCAic2lnbm9mZiIsICZvcHRpb25zLnNpZ25vZmYsCiAJCQkgTl8oImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiKSksCi0JCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpZ25vcmUtd2hpdGVzcGFjZSIsICZvcHRpb25zLmdpdF9hbV9vcHRzLAotCQkJCSAgTlVMTCwgTl8oInBhc3NlZCB0byAnZ2l0IGFtJyIpLAotCQkJCSAgUEFSU0VfT1BUX05PQVJHKSwKLQkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIiwKLQkJCQkgICZvcHRpb25zLmdpdF9hbV9vcHRzLCBOVUxMLAotCQkJCSAgTl8oInBhc3NlZCB0byAnZ2l0IGFtJyIpLCBQQVJTRV9PUFRfTk9BUkcpLAotCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLWRhdGUiLCAmb3B0aW9ucy5naXRfYW1fb3B0cywgTlVMTCwKLQkJCQkgIE5fKCJwYXNzZWQgdG8gJ2dpdCBhbSciKSwgUEFSU0VfT1BUX05PQVJHKSwKKwkJT1BUX0JPT0woMCwgImNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIiwKKwkJCSAmb3B0aW9ucy5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSwKKwkJCSBOXygibWFrZSBjb21taXR0ZXIgZGF0ZSBtYXRjaCBhdXRob3IgZGF0ZSIpKSwKKwkJT1BUX0JPT0woMCwgInJlc2V0LWF1dGhvci1kYXRlIiwgJm9wdGlvbnMuaWdub3JlX2RhdGUsCisJCQkgTl8oImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIpKSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJpZ25vcmUtZGF0ZSIsICZvcHRpb25zLmlnbm9yZV9kYXRlLAorCQkJCU5fKCJzeW5vbnltIG9mIC0tcmVzZXQtYXV0aG9yLWRhdGUiKSksCiAJCU9QVF9QQVNTVEhSVV9BUkdWKCdDJywgTlVMTCwgJm9wdGlvbnMuZ2l0X2FtX29wdHMsIE5fKCJuIiksCiAJCQkJICBOXygicGFzc2VkIHRvICdnaXQgYXBwbHknIiksIDApLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCAmb3B0aW9ucy5pZ25vcmVfd2hpdGVzcGFjZSwKKwkJCSBOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSIpKSwKIAkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgIndoaXRlc3BhY2UiLCAmb3B0aW9ucy5naXRfYW1fb3B0cywKIAkJCQkgIE5fKCJhY3Rpb24iKSwgTl8oInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIpLCAwKSwKIAkJT1BUX0JJVCgnZicsICJmb3JjZS1yZWJhc2UiLCAmb3B0aW9ucy5mbGFncywKQEAgLTE0NzEsOSArMTUwMCwxMCBAQAogCQkJTl8oImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIiksCiAJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCiAJCQlwYXJzZV9vcHRfaW50ZXJhY3RpdmUgfSwKLQkJT1BUX1NFVF9JTlQoJ3AnLCAicHJlc2VydmUtbWVyZ2VzIiwgJm9wdGlvbnMudHlwZSwKLQkJCSAgICBOXygiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiAiCi0JCQkgICAgICAgImlnbm9yaW5nIHRoZW0iKSwgUkVCQVNFX1BSRVNFUlZFX01FUkdFUyksCisJCU9QVF9TRVRfSU5UX0YoJ3AnLCAicHJlc2VydmUtbWVyZ2VzIiwgJm9wdGlvbnMudHlwZSwKKwkJCSAgICAgIE5fKCIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mICIKKwkJCQkgImlnbm9yaW5nIHRoZW0iKSwKKwkJCSAgICAgIFJFQkFTRV9QUkVTRVJWRV9NRVJHRVMsIFBBUlNFX09QVF9ISURERU4pLAogCQlPUFRfUkVSRVJFX0FVVE9VUERBVEUoJm9wdGlvbnMuYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUpLAogCQlPUFRfQk9PTCgnaycsICJrZWVwLWVtcHR5IiwgJm9wdGlvbnMua2VlcF9lbXB0eSwKIAkJCSBOXygicHJlc2VydmUgZW1wdHkgY29tbWl0cyBkdXJpbmcgcmViYXNlIikpLApAQCAtMTcxMiwxMSArMTc0MiwxMyBAQAogCQkgICAgc3RhdGVfZGlyX2Jhc2UsIGNtZF9saXZlX3JlYmFzZSwgYnVmLmJ1Zik7CiAJfQogCisJaWYgKG9wdGlvbnMuY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUgfHwKKwkgICAgb3B0aW9ucy5pZ25vcmVfZGF0ZSkKKwkJb3B0aW9ucy5mbGFncyB8PSBSRUJBU0VfRk9SQ0U7CisKIAlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5naXRfYW1fb3B0cy5hcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqb3B0aW9uID0gb3B0aW9ucy5naXRfYW1fb3B0cy5hcmd2W2ldLCAqcDsKLQkJaWYgKCFzdHJjbXAob3B0aW9uLCAiLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIpIHx8Ci0JCSAgICAhc3RyY21wKG9wdGlvbiwgIi0taWdub3JlLWRhdGUiKSB8fAotCQkgICAgIXN0cmNtcChvcHRpb24sICItLXdoaXRlc3BhY2U9Zml4IikgfHwKKwkJaWYgKCFzdHJjbXAob3B0aW9uLCAiLS13aGl0ZXNwYWNlPWZpeCIpIHx8CiAJCSAgICAhc3RyY21wKG9wdGlvbiwgIi0td2hpdGVzcGFjZT1zdHJpcCIpKQogCQkJb3B0aW9ucy5mbGFncyB8PSBSRUJBU0VfRk9SQ0U7CiAJCWVsc2UgaWYgKHNraXBfcHJlZml4KG9wdGlvbiwgIi1DIiwgJnApKSB7CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS5jIGIvYnVpbHRpbi9yZW1vdGUuYwppbmRleCA1NTkxY2VmLi45NmJiZTgyIDEwMDY0NAotLS0gYS9idWlsdGluL3JlbW90ZS5jCisrKyBiL2J1aWx0aW4vcmVtb3RlLmMKQEAgLTY5Myw5ICs2OTMsOCBAQAogCWZvciAoaSA9IDA7IGkgPCByZW1vdGVfYnJhbmNoZXMubnI7IGkrKykgewogCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHJlbW90ZV9icmFuY2hlcy5pdGVtcyArIGk7CiAJCWludCBmbGFnID0gMDsKLQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAKLQkJcmVhZF9yZWZfZnVsbChpdGVtLT5zdHJpbmcsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsICZmbGFnKTsKKwkJcmVhZF9yZWZfZnVsbChpdGVtLT5zdHJpbmcsIFJFU09MVkVfUkVGX1JFQURJTkcsIE5VTEwsICZmbGFnKTsKIAkJaWYgKCEoZmxhZyAmIFJFRl9JU1NZTVJFRikpCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbGV0ZV9yZWYoTlVMTCwgaXRlbS0+c3RyaW5nLCBOVUxMLCBSRUZfTk9fREVSRUYpKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXBhY2suYyBiL2J1aWx0aW4vcmVwYWNrLmMKaW5kZXggMDk0YzJmOC4uMDc4MTc2MyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXBhY2suYworKysgYi9idWlsdGluL3JlcGFjay5jCkBAIC0yMzMsNiArMjMzLDEzIEBACiAJCS8qCiAJCSAqIHBhY2stb2JqZWN0cyBjcmVhdGVzIHRoZSAucGFjayBhbmQgLmlkeCBmaWxlcywgYnV0IG5vdCB0aGUKIAkJICogLnByb21pc29yIGZpbGUuIENyZWF0ZSB0aGUgLnByb21pc29yIGZpbGUsIHdoaWNoIGlzIGVtcHR5LgorCQkgKgorCQkgKiBORUVEU1dPUks6IGZldGNoLXBhY2sgc29tZXRpbWVzIGdlbmVyYXRlcyBub24tZW1wdHkKKwkJICogLnByb21pc29yIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHJlZiBuYW1lcyBhbmQgYXNzb2NpYXRlZAorCQkgKiBoYXNoZXMgYXQgdGhlIHBvaW50IG9mIGdlbmVyYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcKKwkJICogcGFja2ZpbGUsIGJ1dCB0aGlzIHdvdWxkIG5vdCBwcmVzZXJ2ZSB0aGVpciBjb250ZW50cy4gTWF5YmUKKwkJICogY29uY2F0ZW5hdGUgdGhlIGNvbnRlbnRzIG9mIGFsbCAucHJvbWlzb3IgZmlsZXMgaW5zdGVhZCBvZgorCQkgKiBqdXN0IGNyZWF0aW5nIGEgbmV3IGVtcHR5IGZpbGUuCiAJCSAqLwogCQlwcm9taXNvcl9uYW1lID0gbWtwYXRoZHVwKCIlcy0lcy5wcm9taXNvciIsIHBhY2t0bXAsCiAJCQkJCSAgbGluZS5idWYpOwpAQCAtNTYyLDcgKzU2OSw3IEBACiAJcmVtb3ZlX3RlbXBvcmFyeV9maWxlcygpOwogCiAJaWYgKGdpdF9lbnZfYm9vbChHSVRfVEVTVF9NVUxUSV9QQUNLX0lOREVYLCAwKSkKLQkJd3JpdGVfbWlkeF9maWxlKGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCQl3cml0ZV9taWR4X2ZpbGUoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgMCk7CiAKIAlzdHJpbmdfbGlzdF9jbGVhcigmbmFtZXMsIDApOwogCXN0cmluZ19saXN0X2NsZWFyKCZyb2xsYmFjaywgMCk7CmRpZmYgLS1naXQgYS9idWlsdGluL3Jlc2V0LmMgYi9idWlsdGluL3Jlc2V0LmMKaW5kZXggZmRkNTcyMS4uMTgyMjhjMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXNldC5jCisrKyBiL2J1aWx0aW4vcmVzZXQuYwpAQCAtMzAsOCArMzAsOSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXNldF91c2FnZVtdID0gewogCU5fKCJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iKSwKLQlOXygiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIpLAotCU5fKCJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iKSwKKwlOXygiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5fKCJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iKSwKKwlOXygiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIiksCiAJTlVMTAogfTsKIApAQCAtMjg0LDggKzI4NSw4IEBACiBpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCByZXNldF90eXBlID0gTk9ORSwgdXBkYXRlX3JlZl9zdGF0dXMgPSAwLCBxdWlldCA9IDA7Ci0JaW50IHBhdGNoX21vZGUgPSAwLCB1bmJvcm47Ci0JY29uc3QgY2hhciAqcmV2OworCWludCBwYXRjaF9tb2RlID0gMCwgcGF0aHNwZWNfZmlsZV9udWwgPSAwLCB1bmJvcm47CisJY29uc3QgY2hhciAqcmV2LCAqcGF0aHNwZWNfZnJvbV9maWxlID0gTlVMTDsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKIAlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CiAJaW50IGludGVudF90b19hZGQgPSAwOwpAQCAtMzA2LDYgKzMwNyw4IEBACiAJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKIAkJT1BUX0JPT0woJ04nLCAiaW50ZW50LXRvLWFkZCIsICZpbnRlbnRfdG9fYWRkLAogCQkJCU5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCiAJCU9QVF9FTkQoKQogCX07CiAKQEAgLTMxNiwxMSArMzE5LDI1IEBACiAJCQkJCQlQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAJcGFyc2VfYXJncygmcGF0aHNwZWMsIGFyZ3YsIHByZWZpeCwgcGF0Y2hfbW9kZSwgJnJldik7CiAKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChwYXRjaF9tb2RlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giKSk7CisKKwkJaWYgKHBhdGhzcGVjLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlwYXJzZV9wYXRoc3BlY19maWxlKCZwYXRoc3BlYywgMCwKKwkJCQkgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKIAl1bmJvcm4gPSAhc3RyY21wKHJldiwgIkhFQUQiKSAmJiBnZXRfb2lkKCJIRUFEIiwgJm9pZCk7CiAJaWYgKHVuYm9ybikgewogCQkvKiByZXNldCBvbiB1bmJvcm4gYnJhbmNoOiB0cmVhdCBhcyByZXNldCB0byBlbXB0eSB0cmVlICovCiAJCW9pZGNweSgmb2lkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKLQl9IGVsc2UgaWYgKCFwYXRoc3BlYy5ucikgeworCX0gZWxzZSBpZiAoIXBhdGhzcGVjLm5yICYmICFwYXRjaF9tb2RlKSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAkJaWYgKGdldF9vaWRfY29tbWl0dGlzaChyZXYsICZvaWQpKQogCQkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iKSwgcmV2KTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LXBhcnNlLmMgYi9idWlsdGluL3Jldi1wYXJzZS5jCmluZGV4IDMwOGM2N2UuLjdhMDBkYTggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmV2LXBhcnNlLmMKKysrIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpAQCAtODAzLDYgKzgwMyw4IEBACiAJCQkJY29uc3QgY2hhciAqd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKIAkJCQlpZiAod29ya190cmVlKQogCQkJCQlwdXRzKHdvcmtfdHJlZSk7CisJCQkJZWxzZQorCQkJCQlkaWUoInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSIpKSB7CkBAIC05MTksNiArOTIxLDE3IEBACiAJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1pbi1hZ2U9IiwgYXJnKTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmIChvcHRfd2l0aF92YWx1ZShhcmcsICItLXNob3ctb2JqZWN0LWZvcm1hdCIsICZhcmcpKSB7CisJCQkJY29uc3QgY2hhciAqdmFsID0gYXJnID8gYXJnIDogInN0b3JhZ2UiOworCisJCQkJaWYgKHN0cmNtcCh2YWwsICJzdG9yYWdlIikgJiYKKwkJCQkgICAgc3RyY21wKHZhbCwgImlucHV0IikgJiYKKwkJCQkgICAgc3RyY21wKHZhbCwgIm91dHB1dCIpKQorCQkJCQlkaWUoInVua25vd24gbW9kZSBmb3IgLS1zaG93LW9iamVjdC1mb3JtYXQ6ICVzIiwKKwkJCQkJICAgIGFyZyk7CisJCQkJcHV0cyh0aGVfaGFzaF9hbGdvLT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChzaG93X2ZsYWcoYXJnKSAmJiB2ZXJpZnkpCiAJCQkJZGllX25vX3NpbmdsZV9yZXYocXVpZXQpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9idWlsdGluL3NwYXJzZS1jaGVja291dC5jIGIvYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYyZjdhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYwpAQCAtMCwwICsxLDQ5NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICplbXB0eV9iYXNlID0gIiI7CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3B0aW9ucz4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciAqZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSh2b2lkKQoreworCXJldHVybiBnaXRfcGF0aGR1cCgiaW5mby9zcGFyc2UtY2hlY2tvdXQiKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcGF0dGVybnNfdG9fZmlsZShGSUxFICpmcCwgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGwtPm5yOyBpKyspIHsKKwkJc3RydWN0IHBhdGhfcGF0dGVybiAqcCA9IHBsLT5wYXR0ZXJuc1tpXTsKKworCQlpZiAocC0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpCisJCQlmcHJpbnRmKGZwLCAiISIpOworCisJCWZwcmludGYoZnAsICIlcyIsIHAtPnBhdHRlcm4pOworCisJCWlmIChwLT5mbGFncyAmIFBBVFRFUk5fRkxBR19NVVNUQkVESVIpCisJCQlmcHJpbnRmKGZwLCAiLyIpOworCisJCWZwcmludGYoZnAsICJcbiIpOworCX0KK30KKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBwbDsKKwljaGFyICpzcGFyc2VfZmlsZW5hbWU7CisJaW50IHJlczsKKworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCisJc3BhcnNlX2ZpbGVuYW1lID0gZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSgpOworCXJlcyA9IGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2VfZmlsZW5hbWUsICIiLCAwLCAmcGwsIE5VTEwpOworCWZyZWUoc3BhcnNlX2ZpbGVuYW1lKTsKKworCWlmIChyZXMgPCAwKSB7CisJCXdhcm5pbmcoXygidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd3JpdGVfcGF0dGVybnNfdG9fZmlsZShzdGRvdXQsICZwbCk7CisJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGVfd29ya2luZ19kaXJlY3Rvcnkoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG87CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCXN0cnVjdCByZXBvc2l0b3J5ICpyID0gdGhlX3JlcG9zaXRvcnk7CisKKwlpZiAocmVwb19yZWFkX2luZGV4X3VubWVyZ2VkKHIpKQorCQlkaWUoXygieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiKSk7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpKQorCQlyZXR1cm4gMDsKKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwltZW1zZXQoJm8sIDAsIHNpemVvZihvKSk7CisJby52ZXJib3NlX3VwZGF0ZSA9IGlzYXR0eSgyKTsKKwlvLm1lcmdlID0gMTsKKwlvLnVwZGF0ZSA9IDE7CisJby5mbiA9IG9uZXdheV9tZXJnZTsKKwlvLmhlYWRfaWR4ID0gLTE7CisJby5zcmNfaW5kZXggPSByLT5pbmRleDsKKwlvLmRzdF9pbmRleCA9IHItPmluZGV4OworCW8uc2tpcF9zcGFyc2VfY2hlY2tvdXQgPSAwOworCW8ucGwgPSBwbDsKKwlvLmtlZXBfcGF0dGVybl9saXN0ID0gISFwbDsKKworCXJlc29sdmVfdW5kb19jbGVhcl9pbmRleChyLT5pbmRleCk7CisJc2V0dXBfd29ya190cmVlKCk7CisKKwljYWNoZV90cmVlX2ZyZWUoJnItPmluZGV4LT5jYWNoZV90cmVlKTsKKworCXJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCXJlc3VsdCA9IHVucGFja190cmVlcygxLCAmdCwgJm8pOworCisJaWYgKCFyZXN1bHQpIHsKKwkJcHJpbWVfY2FjaGVfdHJlZShyLCByLT5pbmRleCwgdHJlZSk7CisJCXdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spOworCX0gZWxzZQorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9jb25lX3RvX2ZpbGUoRklMRSAqZnAsIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWludCBpOworCXN0cnVjdCBwYXR0ZXJuX2VudHJ5ICpwZTsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IHN0cmluZ19saXN0IHNsID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBwYXJlbnRfcGF0dGVybiA9IFNUUkJVRl9JTklUOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmcGwtPnBhcmVudF9oYXNobWFwLCAmaXRlciwgcGUsIGVudCkgeworCQlpZiAoaGFzaG1hcF9nZXRfZW50cnkoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgcGUsIGVudCwgTlVMTCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWhhc2htYXBfY29udGFpbnNfcGFyZW50KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsCisJCQkJCSAgICAgcGUtPnBhdHRlcm4sCisJCQkJCSAgICAgJnBhcmVudF9wYXR0ZXJuKSkKKwkJCXN0cmluZ19saXN0X2luc2VydCgmc2wsIHBlLT5wYXR0ZXJuKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZzbCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJnNsLCAwKTsKKworCWZwcmludGYoZnAsICIvKlxuIS8qL1xuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2wubnI7IGkrKykgeworCQljaGFyICpwYXR0ZXJuID0gc2wuaXRlbXNbaV0uc3RyaW5nOworCisJCWlmIChzdHJsZW4ocGF0dGVybikpCisJCQlmcHJpbnRmKGZwLCAiJXMvXG4hJXMvKi9cbiIsIHBhdHRlcm4sIHBhdHRlcm4pOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZzbCwgMCk7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZpdGVyLCBwZSwgZW50KSB7CisJCWlmICghaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkJICAgICBwZS0+cGF0dGVybiwKKwkJCQkJICAgICAmcGFyZW50X3BhdHRlcm4pKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzbCwgcGUtPnBhdHRlcm4pOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXJlbnRfcGF0dGVybik7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZzbCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJnNsLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbC5ucjsgaSsrKSB7CisJCWNoYXIgKnBhdHRlcm4gPSBzbC5pdGVtc1tpXS5zdHJpbmc7CisJCWZwcmludGYoZnAsICIlcy9cbiIsIHBhdHRlcm4pOworCX0KK30KKworc3RhdGljIGludCB3cml0ZV9wYXR0ZXJuc19hbmRfdXBkYXRlKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWNoYXIgKnNwYXJzZV9maWxlbmFtZTsKKwlGSUxFICpmcDsKKwlpbnQgZmQ7CisJc3RydWN0IGxvY2tfZmlsZSBsayA9IExPQ0tfSU5JVDsKKwlpbnQgcmVzdWx0OworCisJc3BhcnNlX2ZpbGVuYW1lID0gZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSgpOworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbGssIHNwYXJzZV9maWxlbmFtZSwKKwkJCQkgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwlyZXN1bHQgPSB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkocGwpOworCWlmIChyZXN1bHQpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsayk7CisJCWZyZWUoc3BhcnNlX2ZpbGVuYW1lKTsKKwkJY2xlYXJfcGF0dGVybl9saXN0KHBsKTsKKwkJdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KE5VTEwpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWZwID0geGZkb3BlbihmZCwgInciKTsKKworCWlmIChjb3JlX3NwYXJzZV9jaGVja291dF9jb25lKQorCQl3cml0ZV9jb25lX3RvX2ZpbGUoZnAsIHBsKTsKKwllbHNlCisJCXdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoZnAsIHBsKTsKKworCWZmbHVzaChmcCk7CisJY29tbWl0X2xvY2tfZmlsZSgmbGspOworCisJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCWNsZWFyX3BhdHRlcm5fbGlzdChwbCk7CisKKwlyZXR1cm4gMDsKK30KKworZW51bSBzcGFyc2VfY2hlY2tvdXRfbW9kZSB7CisJTU9ERV9OT19QQVRURVJOUyA9IDAsCisJTU9ERV9BTExfUEFUVEVSTlMgPSAxLAorCU1PREVfQ09ORV9QQVRURVJOUyA9IDIsCit9OworCitzdGF0aWMgaW50IHNldF9jb25maWcoZW51bSBzcGFyc2VfY2hlY2tvdXRfbW9kZSBtb2RlKQoreworCWNvbnN0IGNoYXIgKmNvbmZpZ19wYXRoOworCisJaWYgKGdpdF9jb25maWdfc2V0X2dlbnRseSgiZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIsICJ0cnVlIikpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciKSk7CisJCXJldHVybiAxOworCX0KKworCWNvbmZpZ19wYXRoID0gZ2l0X3BhdGgoImNvbmZpZy53b3JrdHJlZSIpOworCWdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbmZpZ19wYXRoLAorCQkJCSAgICAgICJjb3JlLnNwYXJzZUNoZWNrb3V0IiwKKwkJCQkgICAgICBtb2RlID8gInRydWUiIDogTlVMTCk7CisKKwlnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShjb25maWdfcGF0aCwKKwkJCQkgICAgICAiY29yZS5zcGFyc2VDaGVja291dENvbmUiLAorCQkJCSAgICAgIG1vZGUgPT0gTU9ERV9DT05FX1BBVFRFUk5TID8gInRydWUiIDogTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X3VzYWdlW10gPSB7CisJTl8oImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcnNlX2NoZWNrb3V0X2luaXRfb3B0cyB7CisJaW50IGNvbmVfbW9kZTsKK30gaW5pdF9vcHRzOworCitzdGF0aWMgaW50IHNwYXJzZV9jaGVja291dF9pbml0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IHBsOworCWNoYXIgKnNwYXJzZV9maWxlbmFtZTsKKwlpbnQgcmVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBtb2RlOworCXN0cnVjdCBzdHJidWYgcGF0dGVybiA9IFNUUkJVRl9JTklUOworCisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfaW5pdF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJjb25lIiwgJmluaXRfb3B0cy5jb25lX21vZGUsCisJCQkgTl8oImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiKSwgTlVMTCwgMSwgMCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X2luaXRfdXNhZ2UsIDApOworCisJaWYgKGluaXRfb3B0cy5jb25lX21vZGUpIHsKKwkJbW9kZSA9IE1PREVfQ09ORV9QQVRURVJOUzsKKwkJY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZSA9IDE7CisJfSBlbHNlCisJCW1vZGUgPSBNT0RFX0FMTF9QQVRURVJOUzsKKworCWlmIChzZXRfY29uZmlnKG1vZGUpKQorCQlyZXR1cm4gMTsKKworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCisJc3BhcnNlX2ZpbGVuYW1lID0gZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSgpOworCXJlcyA9IGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2VfZmlsZW5hbWUsICIiLCAwLCAmcGwsIE5VTEwpOworCisJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgc3BhcnNlLWNoZWNrb3V0IGZpbGUsIHVzZSBpdC4gKi8KKwlpZiAocmVzID49IDApIHsKKwkJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCQljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisJCXJldHVybiB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkoTlVMTCk7CisJfQorCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmb2lkKSkgeworCQlGSUxFICpmcDsKKworCQkvKiBhc3N1bWUgd2UgYXJlIGluIGEgZnJlc2ggcmVwbywgYnV0IHVwZGF0ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgKi8KKwkJZnAgPSB4Zm9wZW4oc3BhcnNlX2ZpbGVuYW1lLCAidyIpOworCQlpZiAoIWZwKQorCQkJZGllKF8oImZhaWxlZCB0byBvcGVuICclcyciKSwgc3BhcnNlX2ZpbGVuYW1lKTsKKworCQlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisJCWZwcmludGYoZnAsICIvKlxuIS8qL1xuIik7CisJCWZjbG9zZShmcCk7CisJCXJldHVybiAwOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdHRlcm4sICIvKiIpOworCWFkZF9wYXR0ZXJuKHN0cmJ1Zl9kZXRhY2goJnBhdHRlcm4sIE5VTEwpLCBlbXB0eV9iYXNlLCAwLCAmcGwsIDApOworCXN0cmJ1Zl9hZGRzdHIoJnBhdHRlcm4sICIhLyovIik7CisJYWRkX3BhdHRlcm4oc3RyYnVmX2RldGFjaCgmcGF0dGVybiwgTlVMTCksIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisKKwlyZXR1cm4gd3JpdGVfcGF0dGVybnNfYW5kX3VwZGF0ZSgmcGwpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfcmVjdXJzaXZlX3BhdHRlcm4oc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJc3RydWN0IHBhdHRlcm5fZW50cnkgKmUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCWUtPnBhdHRlcm5sZW4gPSBwYXRoLT5sZW47CisJZS0+cGF0dGVybiA9IHN0cmJ1Zl9kZXRhY2gocGF0aCwgTlVMTCk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsCisJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkgICBzdHJpaGFzaChlLT5wYXR0ZXJuKSA6CisJCQkgICBzdHJoYXNoKGUtPnBhdHRlcm4pKTsKKworCWhhc2htYXBfYWRkKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZlLT5lbnQpOworCisJd2hpbGUgKGUtPnBhdHRlcm5sZW4pIHsKKwkJY2hhciAqc2xhc2ggPSBzdHJyY2hyKGUtPnBhdHRlcm4sICcvJyk7CisJCWNoYXIgKm9sZHBhdHRlcm4gPSBlLT5wYXR0ZXJuOworCQlzaXplX3QgbmV3bGVuOworCisJCWlmIChzbGFzaCA9PSBlLT5wYXR0ZXJuKQorCQkJYnJlYWs7CisKKwkJbmV3bGVuID0gc2xhc2ggLSBlLT5wYXR0ZXJuOworCQllID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhdHRlcm5fZW50cnkpKTsKKwkJZS0+cGF0dGVybmxlbiA9IG5ld2xlbjsKKwkJZS0+cGF0dGVybiA9IHhzdHJuZHVwKG9sZHBhdHRlcm4sIG5ld2xlbik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LAorCQkJCSAgIGlnbm9yZV9jYXNlID8KKwkJCQkgICBzdHJpaGFzaChlLT5wYXR0ZXJuKSA6CisJCQkJICAgc3RyaGFzaChlLT5wYXR0ZXJuKSk7CisKKwkJaWYgKCFoYXNobWFwX2dldF9lbnRyeSgmcGwtPnBhcmVudF9oYXNobWFwLCBlLCBlbnQsIE5VTEwpKQorCQkJaGFzaG1hcF9hZGQoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJmUtPmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHJidWZfdG9fY29uZV9wYXR0ZXJuKHN0cnVjdCBzdHJidWYgKmxpbmUsIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCXN0cmJ1Zl90cmltKGxpbmUpOworCisJc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcChsaW5lKTsKKworCWlmICghbGluZS0+bGVuKQorCQlyZXR1cm47CisKKwlpZiAobGluZS0+YnVmWzBdICE9ICcvJykKKwkJc3RyYnVmX2luc2VydChsaW5lLCAwLCAiLyIsIDEpOworCisJaW5zZXJ0X3JlY3Vyc2l2ZV9wYXR0ZXJuKHBsLCBsaW5lKTsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX3NwYXJzZV9jaGVja291dF9zZXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcnNlX2NoZWNrb3V0X3NldF9vcHRzIHsKKwlpbnQgdXNlX3N0ZGluOworfSBzZXRfb3B0czsKKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisJaW50IHJlc3VsdDsKKwlpbnQgY2hhbmdlZF9jb25maWcgPSAwOworCisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfc2V0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInN0ZGluIiwgJnNldF9vcHRzLnVzZV9zdGRpbiwKKwkJCSBOXygicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSk7CisJcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUodGhlX3JlcG9zaXRvcnksCisJCQkJTl8oInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiKSwgTlVMTCwgMSwgMCk7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfc2V0X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3NldF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwlpZiAoY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCQloYXNobWFwX2luaXQoJnBsLnJlY3Vyc2l2ZV9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJCWhhc2htYXBfaW5pdCgmcGwucGFyZW50X2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKwkJcGwudXNlX2NvbmVfcGF0dGVybnMgPSAxOworCisJCWlmIChzZXRfb3B0cy51c2Vfc3RkaW4pIHsKKwkJCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSkKKwkJCQlzdHJidWZfdG9fY29uZV9wYXR0ZXJuKCZsaW5lLCAmcGwpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmxpbmUsIGFyZ3ZbaV0pOworCQkJCXN0cmJ1Zl90b19jb25lX3BhdHRlcm4oJmxpbmUsICZwbCk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoc2V0X29wdHMudXNlX3N0ZGluKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCQkJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pKSB7CisJCQkJc2l6ZV90IGxlbjsKKwkJCQljaGFyICpidWYgPSBzdHJidWZfZGV0YWNoKCZsaW5lLCAmbGVuKTsKKwkJCQlhZGRfcGF0dGVybihidWYsIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJCWFkZF9wYXR0ZXJuKGFyZ3ZbaV0sIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisJCX0KKwl9CisKKwlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0KSB7CisJCXNldF9jb25maWcoTU9ERV9BTExfUEFUVEVSTlMpOworCQljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisJCWNoYW5nZWRfY29uZmlnID0gMTsKKwl9CisKKwlyZXN1bHQgPSB3cml0ZV9wYXR0ZXJuc19hbmRfdXBkYXRlKCZwbCk7CisKKwlpZiAocmVzdWx0ICYmIGNoYW5nZWRfY29uZmlnKQorCQlzZXRfY29uZmlnKE1PREVfTk9fUEFUVEVSTlMpOworCisJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfZGlzYWJsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBwbDsKKwlzdHJ1Y3Qgc3RyYnVmIG1hdGNoX2FsbCA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiKSwgTlVMTCwgMSwgMCk7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKwloYXNobWFwX2luaXQoJnBsLnJlY3Vyc2l2ZV9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZwbC5wYXJlbnRfaGFzaG1hcCwgcGxfaGFzaG1hcF9jbXAsIE5VTEwsIDApOworCXBsLnVzZV9jb25lX3BhdHRlcm5zID0gMDsKKwljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisKKwlzdHJidWZfYWRkc3RyKCZtYXRjaF9hbGwsICIvKiIpOworCWFkZF9wYXR0ZXJuKHN0cmJ1Zl9kZXRhY2goJm1hdGNoX2FsbCwgTlVMTCksIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisKKwlpZiAodXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KCZwbCkpCisJCWRpZShfKCJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IikpOworCisJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisJcmV0dXJuIHNldF9jb25maWcoTU9ERV9OT19QQVRURVJOUyk7Cit9CisKK2ludCBjbWRfc3BhcnNlX2NoZWNrb3V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3NwYXJzZV9jaGVja291dF91c2FnZSwKKwkJCQkgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9vcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaWYgKGFyZ2MgPiAwKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJsaXN0IikpCisJCQlyZXR1cm4gc3BhcnNlX2NoZWNrb3V0X2xpc3QoYXJnYywgYXJndik7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJpbml0IikpCisJCQlyZXR1cm4gc3BhcnNlX2NoZWNrb3V0X2luaXQoYXJnYywgYXJndik7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfc2V0KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJkaXNhYmxlIikpCisJCQlyZXR1cm4gc3BhcnNlX2NoZWNrb3V0X2Rpc2FibGUoYXJnYywgYXJndik7CisJfQorCisJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3VzYWdlLAorCQkJICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfb3B0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N0YXNoLmMgYi9idWlsdGluL3N0YXNoLmMKaW5kZXggNGU4MDYxNy4uNGFkM2FkZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9zdGFzaC5jCisrKyBiL2J1aWx0aW4vc3Rhc2guYwpAQCAtNDgzLDEzICs0ODMsMTIgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtMTsKIAorCQkvKiByZWFkIGJhY2sgdGhlIHJlc3VsdCBvZiB1cGRhdGVfaW5kZXgoKSBiYWNrIGZyb20gdGhlIGRpc2sgKi8KIAkJZGlzY2FyZF9jYWNoZSgpOworCQlyZWFkX2NhY2hlKCk7CiAJfQogCi0JaWYgKHF1aWV0KSB7Ci0JCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCAwLCAwKSkKLQkJCXdhcm5pbmcoImNvdWxkIG5vdCByZWZyZXNoIGluZGV4Iik7Ci0JfSBlbHNlIHsKKwlpZiAoIXF1aWV0KSB7CiAJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCiAJCS8qCkBAIC0xMDg4LDggKzEwODcsOSBAQAogCX0KIAogCWNwX3VwZF9pbmRleC5naXRfY21kID0gMTsKLQlhcmd2X2FycmF5X3B1c2hsKCZjcF91cGRfaW5kZXguYXJncywgInVwZGF0ZS1pbmRleCIsICIteiIsICItLWFkZCIsCi0JCQkgIi0tcmVtb3ZlIiwgIi0tc3RkaW4iLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF91cGRfaW5kZXguYXJncywgInVwZGF0ZS1pbmRleCIsCisJCQkgIi0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyIsCisJCQkgIi16IiwgIi0tYWRkIiwgIi0tcmVtb3ZlIiwgIi0tc3RkaW4iLCBOVUxMKTsKIAlhcmd2X2FycmF5X3B1c2hmKCZjcF91cGRfaW5kZXguZW52X2FycmF5LCAiR0lUX0lOREVYX0ZJTEU9JXMiLAogCQkJIHN0YXNoX2luZGV4X3BhdGguYnVmKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCmluZGV4IDUyMWI0YjMuLmM3MjkzMWUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYworKysgYi9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCiAKICNkZWZpbmUgT1BUX1FVSUVUICgxIDw8IDApCiAjZGVmaW5lIE9QVF9DQUNIRUQgKDEgPDwgMSkKQEAgLTgwMyw3ICs4MDQsOCBAQAogCQkJIHBhdGgsIE5VTEwpOwogCiAJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOwotCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKIAlyZXYuYWJicmV2ID0gMDsKIAlkaWZmX2ZpbGVzX2FyZ3MuYXJnYyA9IHNldHVwX3JldmlzaW9ucyhkaWZmX2ZpbGVzX2FyZ3MuYXJnYywKIAkJCQkJICAgICAgIGRpZmZfZmlsZXNfYXJncy5hcmd2LApAQCAtMTI2OSw2ICsxMjcxLDEzIEBACiAjZGVmaW5lIFNVQk1PRFVMRV9BTFRFUk5BVEVfU0VUVVBfSU5JVCB7IE5VTEwsIFwKIAlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lHTk9SRSwgTlVMTCB9CiAKK3N0YXRpYyBjb25zdCBjaGFyIGFsdGVybmF0ZV9lcnJvcl9hZHZpY2VbXSA9IE5fKAorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorKTsKKwogc3RhdGljIGludCBhZGRfcG9zc2libGVfcmVmZXJlbmNlX2Zyb21fc3VwZXJwcm9qZWN0KAogCQlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLCB2b2lkICpzYXNfY2IpCiB7CkBAIC0xMzAwLDYgKzEzMDksOCBAQAogCQl9IGVsc2UgewogCQkJc3dpdGNoIChzYXMtPmVycm9yX21vZGUpIHsKIAkJCWNhc2UgU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9ESUU6CisJCQkJaWYgKGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZSkKKwkJCQkJYWR2aXNlKF8oYWx0ZXJuYXRlX2Vycm9yX2FkdmljZSkpOwogCQkJCWRpZShfKCJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiKSwKIAkJCQkgICAgc2FzLT5zdWJtb2R1bGVfbmFtZSwgZXJyLmJ1Zik7CiAJCQljYXNlIFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSU5GTzoKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwppbmRleCBhODdhNGJmLi45MTAwOTY0IDEwMDY0NAotLS0gYS9idWlsdGluL3VucGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCkBAIC0yNCw2ICsyNCw3IEBACiBzdGF0aWMgb2ZmX3QgbWF4X2lucHV0X3NpemU7CiBzdGF0aWMgZ2l0X2hhc2hfY3R4IGN0eDsKIHN0YXRpYyBzdHJ1Y3QgZnNja19vcHRpb25zIGZzY2tfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19TVFJJQ1Q7CitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKIAogLyoKICAqIFdoZW4gcnVubmluZyB1bmRlciAtLXN0cmljdCBtb2RlLCBvYmplY3RzIHdob3NlIHJlYWNoYWJpbGl0eSBhcmUKQEAgLTkyLDYgKzkzLDcgQEAKIAljb25zdW1lZF9ieXRlcyArPSBieXRlczsKIAlpZiAobWF4X2lucHV0X3NpemUgJiYgY29uc3VtZWRfYnl0ZXMgPiBtYXhfaW5wdXRfc2l6ZSkKIAkJZGllKF8oInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIpKTsKKwlkaXNwbGF5X3Rocm91Z2hwdXQocHJvZ3Jlc3MsIGNvbnN1bWVkX2J5dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgKmdldF9kYXRhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTQ4NCw3ICs0ODYsNiBAQAogc3RhdGljIHZvaWQgdW5wYWNrX2FsbCh2b2lkKQogewogCWludCBpOwotCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwogCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyID0gZmlsbChzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7CiAKIAlucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwppbmRleCA0OTMwMmQ5Li5kNTI3YjhmIDEwMDY0NAotLS0gYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jCisrKyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKQEAgLTM1LDYgKzM1LDcgQEAKIHN0YXRpYyBpbnQgbWFya192YWxpZF9vbmx5Owogc3RhdGljIGludCBtYXJrX3NraXBfd29ya3RyZWVfb25seTsKIHN0YXRpYyBpbnQgbWFya19mc21vbml0b3Jfb25seTsKK3N0YXRpYyBpbnQgaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllczsKICNkZWZpbmUgTUFSS19GTEFHIDEKICNkZWZpbmUgVU5NQVJLX0ZMQUcgMgogc3RhdGljIHN0cnVjdCBzdHJidWYgbXRpbWVfZGlyID0gU1RSQlVGX0lOSVQ7CkBAIC0zODEsNyArMzgyLDggQEAKIAkJICogc28gdXBkYXRpbmcgaXQgZG9lcyBub3QgbWFrZSBzZW5zZS4KIAkJICogT24gdGhlIG90aGVyIGhhbmQsIHJlbW92aW5nIGl0IGZyb20gaW5kZXggc2hvdWxkIHdvcmsKIAkJICovCi0JCWlmIChhbGxvd19yZW1vdmUgJiYgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZV9lbnRyaWVzICYmIGFsbG93X3JlbW92ZSAmJgorCQkgICAgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKIAkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCByZW1vdmUgZnJvbSB0aGUgaW5kZXgiLCBwYXRoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTAxNCw2ICsxMDE2LDggQEAKIAkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tc2tpcC13b3JrdHJlZSIsICZtYXJrX3NraXBfd29ya3RyZWVfb25seSwgTlVMTCwKIAkJCU5fKCJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIpLAogCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIiwgJmlnbm9yZV9za2lwX3dvcmt0cmVlX2VudHJpZXMsCisJCQkgTl8oImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiKSksCiAJCU9QVF9TRVRfSU5UKDAsICJpbmZvLW9ubHkiLCAmaW5mb19vbmx5LAogCQkJTl8oImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIiksIDEpLAogCQlPUFRfU0VUX0lOVCgwLCAiZm9yY2UtcmVtb3ZlIiwgJmZvcmNlX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vd29ya3RyZWUuYyBiL2J1aWx0aW4vd29ya3RyZWUuYwppbmRleCA0ZGU0NGY1Li5kNmJjNTI2IDEwMDY0NAotLS0gYS9idWlsdGluL3dvcmt0cmVlLmMKKysrIGIvYnVpbHRpbi93b3JrdHJlZS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlpZiAob3B0cy0+Y2hlY2tvdXQpIHsKIAkJY3AuYXJndiA9IE5VTEw7CiAJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNwLmFyZ3MpOwotCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVzZXQiLCAiLS1oYXJkIiwgTlVMTCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXNldCIsICItLWhhcmQiLCAiLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMiLCBOVUxMKTsKIAkJaWYgKG9wdHMtPnF1aWV0KQogCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1xdWlldCIpOwogCQljcC5lbnYgPSBjaGlsZF9lbnYuYXJndjsKZGlmZiAtLWdpdCBhL2J1bmRsZS5jIGIvYnVuZGxlLmMKaW5kZXggYTg1ZWQzZi4uOTk0MzllMCAxMDA2NDQKLS0tIGEvYnVuZGxlLmMKKysrIGIvYnVuZGxlLmMKQEAgLTI0OSwxNSArMjQ5LDE2IEBACiAKIAogLyogV3JpdGUgdGhlIHBhY2sgZGF0YSB0byBidW5kbGVfZmQgKi8KLXN0YXRpYyBpbnQgd3JpdGVfcGFja19kYXRhKGludCBidW5kbGVfZmQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3N0YXRpYyBpbnQgd3JpdGVfcGFja19kYXRhKGludCBidW5kbGVfZmQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGFyZ3ZfYXJyYXkgKnBhY2tfb3B0aW9ucykKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwYWNrX29iamVjdHMgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAJaW50IGk7CiAKIAlhcmd2X2FycmF5X3B1c2hsKCZwYWNrX29iamVjdHMuYXJncywKLQkJCSAicGFjay1vYmplY3RzIiwgIi0tYWxsLXByb2dyZXNzLWltcGxpZWQiLAorCQkJICJwYWNrLW9iamVjdHMiLAogCQkJICItLXN0ZG91dCIsICItLXRoaW4iLCAiLS1kZWx0YS1iYXNlLW9mZnNldCIsCiAJCQkgTlVMTCk7CisJYXJndl9hcnJheV9wdXNodigmcGFja19vYmplY3RzLmFyZ3MsIHBhY2tfb3B0aW9ucy0+YXJndik7CiAJcGFja19vYmplY3RzLmluID0gLTE7CiAJcGFja19vYmplY3RzLm91dCA9IGJ1bmRsZV9mZDsKIAlwYWNrX29iamVjdHMuZ2l0X2NtZCA9IDE7CkBAIC00MjgsNyArNDI5LDcgQEAKIH0KIAogaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCi0JCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IGFyZ3ZfYXJyYXkgKnBhY2tfb3B0aW9ucykKIHsKIAlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CiAJaW50IGJ1bmRsZV9mZCA9IC0xOwpAQCAtNDcwLDcgKzQ3MSw3IEBACiAJCWdvdG8gZXJyOwogCiAJLyogd3JpdGUgcGFjayAqLwotCWlmICh3cml0ZV9wYWNrX2RhdGEoYnVuZGxlX2ZkLCAmcmV2cykpCisJaWYgKHdyaXRlX3BhY2tfZGF0YShidW5kbGVfZmQsICZyZXZzLCBwYWNrX29wdGlvbnMpKQogCQlnb3RvIGVycjsKIAogCWlmICghYnVuZGxlX3RvX3N0ZG91dCkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlLmggYi9idW5kbGUuaAppbmRleCAzN2MzN2Q3Li5jZWFiMGM3IDEwMDY0NAotLS0gYS9idW5kbGUuaAorKysgYi9idW5kbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgQlVORExFX0gKICNkZWZpbmUgQlVORExFX0gKIAorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogCiBzdHJ1Y3QgcmVmX2xpc3QgewpAQCAtMTksNyArMjAsNyBAQAogaW50IGlzX2J1bmRsZShjb25zdCBjaGFyICpwYXRoLCBpbnQgcXVpZXQpOwogaW50IHJlYWRfYnVuZGxlX2hlYWRlcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyKTsKIGludCBjcmVhdGVfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwYXRoLAotCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgYXJndl9hcnJheSAqcGFja19vcHRpb25zKTsKIGludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBpbnQgdmVyYm9zZSk7CiAjZGVmaW5lIEJVTkRMRV9WRVJCT1NFIDEKIGludCB1bmJ1bmRsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwKZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCmluZGV4IDA0Y2FiYWEuLjE1NTQ0ODggMTAwNjQ0Ci0tLSBhL2NhY2hlLmgKKysrIGIvY2FjaGUuaApAQCAtMzA0LDYgKzMwNCw3IEBACiAKIHN0cnVjdCBzcGxpdF9pbmRleDsKIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGU7CitzdHJ1Y3QgcHJvZ3Jlc3M7CiAKIHN0cnVjdCBpbmRleF9zdGF0ZSB7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGU7CkBAIC0zMjYsNiArMzI3LDcgQEAKIAl1aW50NjRfdCBmc21vbml0b3JfbGFzdF91cGRhdGU7CiAJc3RydWN0IGV3YWhfYml0bWFwICpmc21vbml0b3JfZGlydHk7CiAJc3RydWN0IG1lbV9wb29sICpjZV9tZW1fcG9vbDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOwogfTsKIAogLyogTmFtZSBoYXNoaW5nICovCkBAIC02MzIsMTAgKzYzNCw0MyBAQAogCiAjZGVmaW5lIGFsbG9jX25yKHgpICgoKHgpKzE2KSozLzIpCiAKLS8qCi0gKiBSZWFsbG9jIHRoZSBidWZmZXIgcG9pbnRlZCBhdCBieSB2YXJpYWJsZSAneCcgc28gdGhhdCBpdCBjYW4gaG9sZAotICogYXQgbGVhc3QgJ25yJyBlbnRyaWVzOyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY3VycmVudGx5IGFsbG9jYXRlZAotICogaXMgJ2FsbG9jJywgdXNpbmcgdGhlIHN0YW5kYXJkIGdyb3dpbmcgZmFjdG9yIGFsbG9jX25yKCkgbWFjcm8uCisvKioKKyAqIER5bmFtaWNhbGx5IGdyb3dpbmcgYW4gYXJyYXkgdXNpbmcgcmVhbGxvYygpIGlzIGVycm9yIHByb25lIGFuZCBib3JpbmcuCisgKgorICogRGVmaW5lIHlvdXIgYXJyYXkgd2l0aDoKKyAqCisgKiAtIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAorICogICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cworICogICB0eXBlKTsKKyAqCisgKiAtIGFuIGludGVnZXIgdmFyaWFibGUgKGBhbGxvY2ApIHRoYXQga2VlcHMgdHJhY2sgb2YgaG93IGJpZyB0aGUgY3VycmVudAorICogICBhbGxvY2F0aW9uIGlzLCBpbml0aWFsaXplZCB0byBgMGA7CisgKgorICogLSBhbm90aGVyIGludGVnZXIgdmFyaWFibGUgKGBucmApIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgZWxlbWVudHMgdGhlCisgKiAgIGFycmF5IGN1cnJlbnRseSBoYXMsIGluaXRpYWxpemVkIHRvIGAwYC4KKyAqCisgKiBUaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAorICogYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKKyAqIGNhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHNvbWV0eXBlICppdGVtOworICogc2l6ZV90IG5yOworICogc2l6ZV90IGFsbG9jCisgKgorICogZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisgKiAJaWYgKHdlIGxpa2UgaXRlbVtpXSBhbHJlYWR5KQorICogCQlyZXR1cm47CisgKgorICogLy8gd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUKKyAqIEFMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7CisgKiBpdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgYG5yYCB2YXJpYWJsZS4KKyAqCisgKiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYWxsb2NhdGUgZXhwbGljaXRseQorICogdGhlbiB1c2UgdGhlIG1hY3JvIGBSRUFMTE9DX0FSUkFZKGl0ZW0sIGFsbG9jKWAgaW5zdGVhZCBvZiBgQUxMT0NfR1JPV2AuCiAgKgogICogQ29uc2lkZXIgdXNpbmcgQUxMT0NfR1JPV19CWSBpbnN0ZWFkIG9mIEFMTE9DX0dST1cgYXMgaXQgaGFzIHNvbWUKICAqIGFkZGVkIG5pY2V0aWVzLgpAQCAtOTE4LDEyICs5NTMsMTQgQEAKIAogZXh0ZXJuIGludCBmc3luY19vYmplY3RfZmlsZXM7CiBleHRlcm4gaW50IGNvcmVfcHJlbG9hZF9pbmRleDsKLWV4dGVybiBpbnQgY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQ7CiBleHRlcm4gaW50IHByZWNvbXBvc2VkX3VuaWNvZGU7CiBleHRlcm4gaW50IHByb3RlY3RfaGZzOwogZXh0ZXJuIGludCBwcm90ZWN0X250ZnM7CiBleHRlcm4gY29uc3QgY2hhciAqY29yZV9mc21vbml0b3I7CiAKK2ludCBjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dDsKK2ludCBjb3JlX3NwYXJzZV9jaGVja291dF9jb25lOworCiAvKgogICogSW5jbHVkZSBicm9rZW4gcmVmcyBpbiBhbGwgcmVmIGl0ZXJhdGlvbnMsIHdoaWNoIHdpbGwKICAqIGdlbmVyYWxseSBjaG9rZSBkYW5nZXJvdXMgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBsZXR0aW5nCkBAIC0xNDUxLDcgKzE0ODgsOCBAQAogaW50IGhleF90b19ieXRlcyh1bnNpZ25lZCBjaGFyICpiaW5hcnksIGNvbnN0IGNoYXIgKmhleCwgc2l6ZV90IGxlbik7CiAKIC8qCi0gKiBDb252ZXJ0IGEgYmluYXJ5IGhhc2ggdG8gaXRzIGhleCBlcXVpdmFsZW50LiBUaGUgYF9yYCB2YXJpYW50IGlzIHJlZW50cmFudCwKKyAqIENvbnZlcnQgYSBiaW5hcnkgaGFzaCBpbiAidW5zaWduZWQgY2hhciBbXSIgb3IgYW4gb2JqZWN0IG5hbWUgaW4KKyAqICJzdHJ1Y3Qgb2JqZWN0X2lkICoiIHRvIGl0cyBoZXggZXF1aXZhbGVudC4gVGhlIGBfcmAgdmFyaWFudCBpcyByZWVudHJhbnQsCiAgKiBhbmQgd3JpdGVzIHRoZSBOVUwtdGVybWluYXRlZCBvdXRwdXQgdG8gdGhlIGJ1ZmZlciBgb3V0YCwgd2hpY2ggbXVzdCBiZSBhdAogICogbGVhc3QgYEdJVF9NQVhfSEVYU1ogKyAxYCBieXRlcywgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG91dCBmb3IKICAqIGNvbnZlbmllbmNlLgpAQCAtMTQ1OSwxMyArMTQ5NywxMiBAQAogICogVGhlIG5vbi1gX3JgIHZhcmlhbnQgcmV0dXJucyBhIHN0YXRpYyBidWZmZXIsIGJ1dCB1c2VzIGEgcmluZyBvZiA0CiAgKiBidWZmZXJzLCBtYWtpbmcgaXQgc2FmZSB0byBtYWtlIG11bHRpcGxlIGNhbGxzIGZvciBhIHNpbmdsZSBzdGF0ZW1lbnQsIGxpa2U6CiAgKgotICogICBwcmludGYoIiVzIC0+ICVzIiwgc2hhMV90b19oZXgob25lKSwgc2hhMV90b19oZXgodHdvKSk7CisgKiAgIHByaW50ZigiJXMgLT4gJXMiLCBoYXNoX3RvX2hleChvbmUpLCBoYXNoX3RvX2hleCh0d28pKTsKKyAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIG9pZF90b19oZXgob25lKSwgb2lkX3RvX2hleCh0d28pKTsKICAqLwogY2hhciAqaGFzaF90b19oZXhfYWxnb3BfcihjaGFyICpidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICopOwotY2hhciAqc2hhMV90b19oZXhfcihjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogY2hhciAqb2lkX3RvX2hleF9yKGNoYXIgKm91dCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKIGNoYXIgKmhhc2hfdG9faGV4X2FsZ29wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICopOwkvKiBzdGF0aWMgYnVmZmVyIHJlc3VsdCEgKi8KLWNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwkJCQkJCS8qIHNhbWUgc3RhdGljIGJ1ZmZlciAqLwogY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCiBjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCiAKZGlmZiAtLWdpdCBhL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoIGIvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKaW5kZXggNGU2NGExOS4uY2Q1OTg1NSAxMDA3NTUKLS0tIGEvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKKysrIGIvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKQEAgLTQyLDE0ICs0MiwxNyBAQAogCWJyZXcgbGluayAtLWZvcmNlIGdldHRleHQKIAlicmV3IGNhc2sgaW5zdGFsbCBwZXJmb3JjZSB8fCB7CiAJCSMgVXBkYXRlIHRoZSBkZWZpbml0aW9ucyBhbmQgdHJ5IGFnYWluCi0JCWdpdCAtQyAiJChicmV3IC0tcmVwb3NpdG9yeSkiL0xpYnJhcnkvVGFwcy9ob21lYnJldy9ob21lYnJldy1jYXNrIHB1bGwgJiYKKwkJY2Fza19yZXBvPSIkKGJyZXcgLS1yZXBvc2l0b3J5KSIvTGlicmFyeS9UYXBzL2hvbWVicmV3L2hvbWVicmV3LWNhc2sgJiYKKwkJZ2l0IC1DICIkY2Fza19yZXBvIiBwdWxsIC0tbm8tc3RhdCAmJgogCQlicmV3IGNhc2sgaW5zdGFsbCBwZXJmb3JjZQogCX0gfHwKIAlicmV3IGluc3RhbGwgY2Fza3Jvb20vY2Fzay9wZXJmb3JjZQogCWNhc2UgIiRqb2JuYW1lIiBpbgogCW9zeC1nY2MpCi0JCWJyZXcgbGluayBnY2MgfHwKLQkJYnJldyBsaW5rIGdjY0A4CisJCWJyZXcgaW5zdGFsbCBnY2NAOQorCQkjIEp1c3QgaW4gY2FzZSB0aGUgaW1hZ2UgaXMgdXBkYXRlZCB0byBjb250YWluIGdjY0A5CisJCSMgcHJlLWluc3RhbGxlZCBidXQgbm90IGxpbmtlZC4KKwkJYnJldyBsaW5rIGdjY0A5CiAJCTs7CiAJZXNhYwogCTs7CmRpZmYgLS1naXQgYS9jaS9saWIuc2ggYi9jaS9saWIuc2gKaW5kZXggYzhjMmMzOC4uYTkwZDBkYyAxMDA3NTUKLS0tIGEvY2kvbGliLnNoCisrKyBiL2NpL2xpYi5zaApAQCAtMTMxLDcgKzEzMSw2IEBACiAJCWVjaG8gIiRTWVNURU1fVEFTS0RFRklOSVRJT05TVVJJJFNZU1RFTV9URUFNUFJPSkVDVC9fYnVpbGQvcmVzdWx0cz9idWlsZElkPSQxIgogCX0KIAotCUJSRVdfSU5TVEFMTF9QQUNLQUdFUz1nY2NAOAogCWV4cG9ydCBHSVRfUFJPVkVfT1BUUz0iLS10aW1lciAtLWpvYnMgMTAgLS1zdGF0ZT1mYWlsZWQsc2xvdyxzYXZlIgogCWV4cG9ydCBHSVRfVEVTVF9PUFRTPSItLXZlcmJvc2UtbG9nIC14IC0td3JpdGUtanVuaXQteG1sIgogCU1BS0VGTEFHUz0iJE1BS0VGTEFHUyAtLWpvYnM9MTAiCkBAIC0xNTYsNyArMTU1LDcgQEAKIAogZXhwb3J0IERFVkVMT1BFUj0xCiBleHBvcnQgREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZQotZXhwb3J0IEdJVF9URVNUX0NMT05FXzJHQj1ZZXNQbGVhc2UKK2V4cG9ydCBHSVRfVEVTVF9DTE9ORV8yR0I9dHJ1ZQogCiBjYXNlICIkam9ibmFtZSIgaW4KIGxpbnV4LWNsYW5nfGxpbnV4LWdjYykKQEAgLTE4Miw3ICsxODEsNyBAQAogb3N4LWNsYW5nfG9zeC1nY2MpCiAJaWYgWyAiJGpvYm5hbWUiID0gb3N4LWdjYyBdCiAJdGhlbgotCQlleHBvcnQgQ0M9Z2NjLTgKKwkJZXhwb3J0IENDPWdjYy05CiAJZmkKIAogCSMgdDk4MTAgb2NjYXNpb25hbGx5IGZhaWxzIG9uIFRyYXZpcyBDSSBPUyBYCmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dAppbmRleCBhOWFjNzJiLi4yMDg3ODk0IDEwMDY0NAotLS0gYS9jb21tYW5kLWxpc3QudHh0CisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTE2Niw2ICsxNjYsNyBAQAogZ2l0LXNob3ctcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycwogZ2l0LXNoLWkxOG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCiBnaXQtc2gtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1zcGFyc2UtY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQogZ2l0LXN0YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KIGdpdC1zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlCiBnaXQtc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbwpAQCAtMjAzLDYgKzIwNCw3IEBACiBnaXRuYW1lc3BhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKIGdpdHJlcG9zaXRvcnktbGF5b3V0ICAgICAgICAgICAgICAgICAgICBndWlkZQogZ2l0cmV2aXNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRzdWJtb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKIGdpdHR1dG9yaWFsLTIgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQogZ2l0dHV0b3JpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCiBnaXR3b3JrZmxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKZGlmZiAtLWdpdCBhL2NvbW1pdC1ncmFwaC5jIGIvY29tbWl0LWdyYXBoLmMKaW5kZXggMGFlYTdiMi4uZTc3MTM5NCAxMDA2NDQKLS0tIGEvY29tbWl0LWdyYXBoLmMKKysrIGIvY29tbWl0LWdyYXBoLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogLyoKICAqIFJldHVybiAxIGlmIGNvbW1pdF9ncmFwaCBpcyBub24tTlVMTCwgYW5kIDAgb3RoZXJ3aXNlLgogICoKLSAqIE9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uLCB0aGlzIGZ1bmN0aW9uIGF0dGVtcHMgdG8gbG9hZCB0aGUgY29tbWl0CisgKiBPbiB0aGUgZmlyc3QgaW52b2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBsb2FkIHRoZSBjb21taXQKICAqIGdyYXBoIGlmIHRoZV9yZXBvc2l0b3J5IGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBvbmUuCiAgKi8KIHN0YXRpYyBpbnQgcHJlcGFyZV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIpCkBAIC04NTgsOSArODU4LDYgQEAKIAkJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiksCiAJCQkJb2lkX3RvX2hleCgmKCpsaXN0KS0+b2JqZWN0Lm9pZCkpOwogCQl0cmVlID0gZ2V0X2NvbW1pdF90cmVlX29pZCgqbGlzdCk7Ci0JCWlmICghdHJlZSkKLQkJCWRpZShfKCJ1bmFibGUgdG8gZ2V0IHRyZWUgZm9yICVzIiksCi0JCQkJb2lkX3RvX2hleCgmKCpsaXN0KS0+b2JqZWN0Lm9pZCkpOwogCQloYXNod3JpdGUoZiwgdHJlZS0+aGFzaCwgaGFzaF9sZW4pOwogCiAJCXBhcmVudCA9ICgqbGlzdCktPnBhcmVudHM7CkBAIC0xMTAzLDcgKzExMDAsNyBAQAogCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CiAKIAlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCi0JCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcygKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCiAJCQkJCV8oIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiksCiAJCQkJCWN0eC0+Y29tbWl0cy5ucik7CiAJZm9yIChpID0gMDsgaSA8IGN0eC0+Y29tbWl0cy5ucjsgaSsrKSB7CmRpZmYgLS1naXQgYS9jb21taXQuYyBiL2NvbW1pdC5jCmluZGV4IDQwODkwYWUuLjQzNGVjMDMgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5jCisrKyBiL2NvbW1pdC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYWR2aWNlLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVyX2xpbmVzKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqKik7CiAKQEAgLTQwMSwxMCArNDAyLDIyIEBACiAJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CiAJY29uc3QgaW50IHRyZWVfZW50cnlfbGVuID0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA1OwogCWNvbnN0IGludCBwYXJlbnRfZW50cnlfbGVuID0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA3OworCXN0cnVjdCB0cmVlICp0cmVlOwogCiAJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCiAJCXJldHVybiAwOwotCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCisJaWYgKGl0ZW0tPnBhcmVudHMpIHsKKwkJLyoKKwkJICogUHJlc3VtYWJseSB0aGlzIGlzIGxlZnRvdmVyIGZyb20gYW4gZWFybGllciBmYWlsZWQgcGFyc2U7CisJCSAqIGNsZWFyIGl0IG91dCBpbiBwcmVwYXJhdGlvbiBmb3IgdXMgcmUtcGFyc2luZyAod2UnbGwgaGl0IHRoZQorCQkgKiBzYW1lIGVycm9yLCBidXQgdGhhdCdzIGdvb2QsIHNpbmNlIGl0IGxldHMgb3VyIGNhbGxlciBrbm93CisJCSAqIHRoZSByZXN1bHQgY2Fubm90IGJlIHRydXN0ZWQuCisJCSAqLworCQlmcmVlX2NvbW1pdF9saXN0KGl0ZW0tPnBhcmVudHMpOworCQlpdGVtLT5wYXJlbnRzID0gTlVMTDsKKwl9CisKIAl0YWlsICs9IHNpemU7CiAJaWYgKHRhaWwgPD0gYnVmcHRyICsgdHJlZV9lbnRyeV9sZW4gKyAxIHx8IG1lbWNtcChidWZwdHIsICJ0cmVlICIsIDUpIHx8CiAJCQlidWZwdHJbdHJlZV9lbnRyeV9sZW5dICE9ICdcbicpCkBAIC00MTIsNyArNDI1LDEyIEBACiAJaWYgKGdldF9vaWRfaGV4KGJ1ZnB0ciArIDUsICZwYXJlbnQpIDwgMCkKIAkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBwb2ludGVyIGluIGNvbW1pdCAlcyIsCiAJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKLQlzZXRfY29tbWl0X3RyZWUoaXRlbSwgbG9va3VwX3RyZWUociwgJnBhcmVudCkpOworCXRyZWUgPSBsb29rdXBfdHJlZShyLCAmcGFyZW50KTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgcG9pbnRlciAlcyBpbiBjb21taXQgJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZwYXJlbnQpLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJc2V0X2NvbW1pdF90cmVlKGl0ZW0sIHRyZWUpOwogCWJ1ZnB0ciArPSB0cmVlX2VudHJ5X2xlbiArIDE7IC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLwogCXBwdHIgPSAmaXRlbS0+cGFyZW50czsKIApAQCAtNDMyLDggKzQ1MCwxMSBAQAogCQlpZiAoZ3JhZnQgJiYgKGdyYWZ0LT5ucl9wYXJlbnQgPCAwIHx8IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMpKQogCQkJY29udGludWU7CiAJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHIsICZwYXJlbnQpOwotCQlpZiAobmV3X3BhcmVudCkKLQkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OworCQlpZiAoIW5ld19wYXJlbnQpCisJCQlyZXR1cm4gZXJyb3IoImJhZCBwYXJlbnQgJXMgaW4gY29tbWl0ICVzIiwKKwkJCQkgICAgIG9pZF90b19oZXgoJnBhcmVudCksCisJCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OwogCX0KIAlpZiAoZ3JhZnQpIHsKIAkJaW50IGk7CkBAIC00NDIsNyArNDYzLDkgQEAKIAkJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHIsCiAJCQkJCQkgICAmZ3JhZnQtPnBhcmVudFtpXSk7CiAJCQlpZiAoIW5ld19wYXJlbnQpCi0JCQkJY29udGludWU7CisJCQkJcmV0dXJuIGVycm9yKCJiYWQgZ3JhZnQgcGFyZW50ICVzIGluIGNvbW1pdCAlcyIsCisJCQkJCSAgICAgb2lkX3RvX2hleCgmZ3JhZnQtPnBhcmVudFtpXSksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOwogCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7CiAJCX0KIAl9CkBAIC00NTEsNiArNDc0LDcgQEAKIAlpZiAoY2hlY2tfZ3JhcGgpCiAJCWxvYWRfY29tbWl0X2dyYXBoX2luZm8ociwgaXRlbSk7CiAKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MSwzICsxNjA1LDI2IEBACiAJfQogCXJldHVybiBib2MgPyBsZW4gLSBib2MgOiBsZW4gLSBjdXRvZmY7CiB9CisKK2ludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgLi4uKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJYXJndl9hcnJheV9wdXNoZigmaG9va19lbnYsICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCisJLyoKKwkgKiBMZXQgdGhlIGhvb2sga25vdyB0aGF0IG5vIGVkaXRvciB3aWxsIGJlIGxhdW5jaGVkLgorCSAqLworCWlmICghZWRpdG9yX2lzX3VzZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmaG9va19lbnYsICJHSVRfRURJVE9SPToiKTsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCXJldCA9IHJ1bl9ob29rX3ZlKGhvb2tfZW52LmFyZ3YsbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4IGY1Mjk1Y2EuLjIyMWNkYWEgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBAIC0xMzIsNyArMTMyLDcgQEAKICNlbmRpZgogCiAvKgotICogVGVsbCB0aGUgY29tbWl0IHN1YnN5dGVtIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29tbWl0IGJ1ZmZlci4KKyAqIFRlbGwgdGhlIGNvbW1pdCBzdWJzeXN0ZW0gdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIGEgcGFydGljdWxhciBjb21taXQgYnVmZmVyLgogICogVGhlIGNvbW1pdCBhbmQgYnVmZmVyIHNob3VsZCBiZSB0aGUgaW5wdXQgYW5kIHJldHVybiB2YWx1ZSwgcmVzcGVjdGl2ZWx5LAogICogZnJvbSBhbiBlYXJsaWVyIGNhbGwgdG8gZ2V0X2NvbW1pdF9idWZmZXIuICBUaGUgYnVmZmVyIG1heSBvciBtYXkgbm90IGJlCiAgKiBmcmVlZCBieSB0aGlzIGNhbGw7IGNhbGxlcnMgc2hvdWxkIG5vdCBhY2Nlc3MgdGhlIG1lbW9yeSBhZnRlcndhcmRzLgpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwppbmRleCBiZDI0ZDkxLi43NmFjODcxIDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuYworKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtMTE0LDYgKzExNCw3IEBACiAJY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDogZXJyb3IgPSBFTkZJTEU7IGJyZWFrOwogCWNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKIAljYXNlIEVSUk9SX1NUQUNLX09WRVJGTE9XOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9TVUNDRVNTOiBCVUcoImVycl93aW5fdG9fcG9zaXgoKSBjYWxsZWQgd2l0aG91dCBhbiBlcnJvciEiKTsKIAljYXNlIEVSUk9SX1NXQVBFUlJPUjogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOwogCWNhc2UgRVJST1JfVE9PX01BTllfTU9EVUxFUzogZXJyb3IgPSBFTUZJTEU7IGJyZWFrOwogCWNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzogZXJyb3IgPSBFTUZJTEU7IGJyZWFrOwpAQCAtMjEyLDYgKzIxMyw3IEBACiAJSElERV9ET1RGSUxFU19ET1RHSVRPTkxZCiB9OwogCitzdGF0aWMgaW50IGNvcmVfcmVzdHJpY3RfaW5oZXJpdGVkX2hhbmRsZXMgPSAtMTsKIHN0YXRpYyBlbnVtIGhpZGVfZG90ZmlsZXNfdHlwZSBoaWRlX2RvdGZpbGVzID0gSElERV9ET1RGSUxFU19ET1RHSVRPTkxZOwogc3RhdGljIGNoYXIgKnVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlczsKIApAQCAtMjMxLDYgKzIzMywxNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnJlc3RyaWN0aW5oZXJpdGVkaGFuZGxlcyIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJCWNvcmVfcmVzdHJpY3RfaW5oZXJpdGVkX2hhbmRsZXMgPSAtMTsKKwkJZWxzZQorCQkJY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9CisJCQkJZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAwNywxNiArMTAxOCwxNiBAQAogCiBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KQogewotCS8qIGdtdGltZSgpIGluIE1TVkNSVC5ETEwgaXMgdGhyZWFkLXNhZmUsIGJ1dCBub3QgcmVlbnRyYW50ICovCi0JbWVtY3B5KHJlc3VsdCwgZ210aW1lKHRpbWVwKSwgc2l6ZW9mKHN0cnVjdCB0bSkpOwotCXJldHVybiByZXN1bHQ7CisJaWYgKGdtdGltZV9zKHJlc3VsdCwgdGltZXApID09IDApCisJCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCiB7Ci0JLyogbG9jYWx0aW1lKCkgaW4gTVNWQ1JULkRMTCBpcyB0aHJlYWQtc2FmZSwgYnV0IG5vdCByZWVudHJhbnQgKi8KLQltZW1jcHkocmVzdWx0LCBsb2NhbHRpbWUodGltZXApLCBzaXplb2Yoc3RydWN0IHRtKSk7Ci0JcmV0dXJuIHJlc3VsdDsKKwlpZiAobG9jYWx0aW1lX3MocmVzdWx0LCB0aW1lcCkgPT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogY2hhciAqbWluZ3dfZ2V0Y3dkKGNoYXIgKnBvaW50ZXIsIGludCBsZW4pCkBAIC0xNDM2LDggKzE0NDcsMTMgQEAKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmRpciwKIAkJCSAgICAgIGludCBwcmVwZW5kX2NtZCwgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKQogewotCVNUQVJUVVBJTkZPVyBzaTsKKwlzdGF0aWMgaW50IHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IC0xOworCVNUQVJUVVBJTkZPRVhXIHNpOwogCVBST0NFU1NfSU5GT1JNQVRJT04gcGk7CisJTFBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfTElTVCBhdHRyX2xpc3QgPSBOVUxMOworCUhBTkRMRSBzdGRoYW5kbGVzWzNdOworCURXT1JEIHN0ZGhhbmRsZXNfY291bnQgPSAwOworCVNJWkVfVCBzaXplOwogCXN0cnVjdCBzdHJidWYgYXJnczsKIAl3Y2hhcl90IHdjbWRbTUFYX1BBVEhdLCB3ZGlyW01BWF9QQVRIXSwgKndhcmdzLCAqd2VudmJsayA9IE5VTEw7CiAJdW5zaWduZWQgZmxhZ3MgPSBDUkVBVEVfVU5JQ09ERV9FTlZJUk9OTUVOVDsKQEAgLTE0NDcsNiArMTQ2MywxOSBAQAogCQlpc19tc3lzMl9zaChjbWQgPyBjbWQgOiAqYXJndikgPwogCQlxdW90ZV9hcmdfbXN5czIgOiBxdW90ZV9hcmdfbXN2YzsKIAorCS8qIE1ha2Ugc3VyZSB0byBvdmVycmlkZSBwcmV2aW91cyBlcnJvcnMsIGlmIGFueSAqLworCWVycm5vID0gMDsKKworCWlmIChyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgPCAwKQorCQlyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgPSBjb3JlX3Jlc3RyaWN0X2luaGVyaXRlZF9oYW5kbGVzOworCS8qCisJICogVGhlIGZvbGxvd2luZyBjb2RlIHRvIHJlc3RyaWN0IHdoaWNoIGhhbmRsZXMgYXJlIGluaGVyaXRlZCBzZWVtcworCSAqIHRvIHdvcmsgcHJvcGVybHkgb25seSBvbiBXaW5kb3dzIDcgYW5kIGxhdGVyLCBzbyBsZXQncyBkaXNhYmxlIGl0CisJICogb24gV2luZG93cyBWaXN0YSBhbmQgMjAwOC4KKwkgKi8KKwlpZiAocmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlIDwgMCkKKwkJcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gR2V0VmVyc2lvbigpID4+IDE2ID49IDc2MDE7CisKIAlkb191bnNldF9lbnZpcm9ubWVudF92YXJpYWJsZXMoKTsKIAogCS8qIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYXNzb2NpYXRlZCB0byBhIGNvbnNvbGUgKi8KQEAgLTE0NzQsMTEgKzE1MDMsMjMgQEAKIAkJQ2xvc2VIYW5kbGUoY29ucyk7CiAJfQogCW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOwotCXNpLmNiID0gc2l6ZW9mKHNpKTsKLQlzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0Jc2kuaFN0ZElucHV0ID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZoaW4pOwotCXNpLmhTdGRPdXRwdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhvdXQpOwotCXNpLmhTdGRFcnJvciA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGVycik7CisJc2kuU3RhcnR1cEluZm8uY2IgPSBzaXplb2Yoc2kpOworCXNpLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGluKTsKKwlzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZob3V0KTsKKwlzaS5TdGFydHVwSW5mby5oU3RkRXJyb3IgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhlcnIpOworCisJLyogVGhlIGxpc3Qgb2YgaGFuZGxlcyBjYW5ub3QgY29udGFpbiBkdXBsaWNhdGVzICovCisJaWYgKHNpLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJc3RkaGFuZGxlc1tzdGRoYW5kbGVzX2NvdW50KytdID0gc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0OworCWlmIChzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0ICE9IElOVkFMSURfSEFORExFX1ZBTFVFICYmCisJICAgIHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgIT0gc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0KQorCQlzdGRoYW5kbGVzW3N0ZGhhbmRsZXNfY291bnQrK10gPSBzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0OworCWlmIChzaS5TdGFydHVwSW5mby5oU3RkRXJyb3IgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYKKwkgICAgc2kuU3RhcnR1cEluZm8uaFN0ZEVycm9yICE9IHNpLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCAmJgorCSAgICBzaS5TdGFydHVwSW5mby5oU3RkRXJyb3IgIT0gc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCkKKwkJc3RkaGFuZGxlc1tzdGRoYW5kbGVzX2NvdW50KytdID0gc2kuU3RhcnR1cEluZm8uaFN0ZEVycm9yOworCWlmIChzdGRoYW5kbGVzX2NvdW50KQorCQlzaS5TdGFydHVwSW5mby5kd0ZsYWdzIHw9IFNUQVJURl9VU0VTVERIQU5ETEVTOwogCiAJaWYgKCphcmd2ICYmICFzdHJjbXAoY21kLCAqYXJndikpCiAJCXdjbWRbMF0gPSBMJ1wwJzsKQEAgLTE1MTEsMTYgKzE1NTIsOTggQEAKIAl3ZW52YmxrID0gbWFrZV9lbnZpcm9ubWVudF9ibG9jayhkZWx0YWVudik7CiAKIAltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKLQlyZXQgPSBDcmVhdGVQcm9jZXNzVygqd2NtZCA/IHdjbWQgOiBOVUxMLCB3YXJncywgTlVMTCwgTlVMTCwgVFJVRSwKLQkJZmxhZ3MsIHdlbnZibGssIGRpciA/IHdkaXIgOiBOVUxMLCAmc2ksICZwaSk7CisJaWYgKHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSAmJiBzdGRoYW5kbGVzX2NvdW50ICYmCisJICAgIChJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QoTlVMTCwgMSwgMCwgJnNpemUpIHx8CisJICAgICBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSAmJgorCSAgICAoYXR0cl9saXN0ID0gKExQUFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCisJCQkoSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemUpKSkgJiYKKwkgICAgSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0KGF0dHJfbGlzdCwgMSwgMCwgJnNpemUpICYmCisJICAgIFVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUoYXR0cl9saXN0LCAwLAorCQkJCSAgICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9IQU5ETEVfTElTVCwKKwkJCQkgICAgICBzdGRoYW5kbGVzLAorCQkJCSAgICAgIHN0ZGhhbmRsZXNfY291bnQgKiBzaXplb2YoSEFORExFKSwKKwkJCQkgICAgICBOVUxMLCBOVUxMKSkgeworCQlzaS5scEF0dHJpYnV0ZUxpc3QgPSBhdHRyX2xpc3Q7CisJCWZsYWdzIHw9IEVYVEVOREVEX1NUQVJUVVBJTkZPX1BSRVNFTlQ7CisJfQorCisJcmV0ID0gQ3JlYXRlUHJvY2Vzc1coKndjbWQgPyB3Y21kIDogTlVMTCwgd2FyZ3MsIE5VTEwsIE5VTEwsCisJCQkgICAgIHN0ZGhhbmRsZXNfY291bnQgPyBUUlVFIDogRkFMU0UsCisJCQkgICAgIGZsYWdzLCB3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwKKwkJCSAgICAgJnNpLlN0YXJ0dXBJbmZvLCAmcGkpOworCisJLyoKKwkgKiBPbiBXaW5kb3dzIDIwMDggUjIsIGl0IHNlZW1zIHRoYXQgc3BlY2lmeWluZyBjZXJ0YWluIHR5cGVzIG9mIGhhbmRsZXMKKwkgKiAoc3VjaCBhcyBGSUxFX1RZUEVfQ0hBUiBvciBGSUxFX1RZUEVfUElQRSkgd2lsbCBhbHdheXMgcHJvZHVjZSBhbgorCSAqIGVycm9yLiBSYXRoZXIgdGhhbiBwbGF5aW5nIGZpbmlja3kgYW5kIGZyYWdpbGUgZ2FtZXMsIGxldCdzIGp1c3QgdHJ5CisJICogdG8gZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCBzaW1wbHkgdHJ5IGFnYWluIHdpdGhvdXQgcmVzdHJpY3RpbmcgYW55CisJICogaGFuZGxlIGluaGVyaXRhbmNlLiBUaGlzIGlzIHN0aWxsIGJldHRlciB0aGFuIGZhaWxpbmcgdG8gY3JlYXRlCisJICogcHJvY2Vzc2VzLgorCSAqLworCWlmICghcmV0ICYmIHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSAmJiBzdGRoYW5kbGVzX2NvdW50KSB7CisJCURXT1JEIGVyciA9IEdldExhc3RFcnJvcigpOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChlcnIgIT0gRVJST1JfTk9fU1lTVEVNX1JFU09VUkNFUyAmJgorCQkgICAgLyoKKwkJICAgICAqIE9uIFdpbmRvd3MgNyBhbmQgZWFybGllciwgaGFuZGxlcyBvbiBwaXBlcyBhbmQgY2hhcmFjdGVyCisJCSAgICAgKiBkZXZpY2VzIGFyZSBpbmhlcml0ZWQgYXV0b21hdGljYWxseSwgYW5kIGNhbm5vdCBiZQorCQkgICAgICogc3BlY2lmaWVkIGluIHRoZSB0aHJlYWQgaGFuZGxlIGxpc3QuIFJhdGhlciB0aGFuIHRyeWluZworCQkgICAgICogdG8gY2F0Y2ggZWFjaCBhbmQgZXZlcnkgY29ybmVyIGNhc2UgKGFuZCBydW5uaW5nIHRoZQorCQkgICAgICogY2hhbmNlIG9mICpzdGlsbCogZm9yZ2V0dGluZyBhIGZldyksIGxldCdzIGp1c3QgZmFsbAorCQkgICAgICogYmFjayB0byBjcmVhdGluZyB0aGUgcHJvY2VzcyB3aXRob3V0IHRyeWluZyB0byBsaW1pdCB0aGUKKwkJICAgICAqIGhhbmRsZSBpbmhlcml0YW5jZS4KKwkJICAgICAqLworCQkgICAgIShlcnIgPT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgJiYKKwkJICAgICAgR2V0VmVyc2lvbigpID4+IDE2IDwgOTIwMCkgJiYKKwkJICAgICFnZXRlbnYoIlNVUFBSRVNTX0hBTkRMRV9JTkhFUklUQU5DRV9XQVJOSU5HIikpIHsKKwkJCURXT1JEIGZsID0gMDsKKwkJCWludCBpOworCisJCQlzZXRlbnYoIlNVUFBSRVNTX0hBTkRMRV9JTkhFUklUQU5DRV9XQVJOSU5HIiwgIjEiLCAxKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHN0ZGhhbmRsZXNfY291bnQ7IGkrKykgeworCQkJCUhBTkRMRSBoID0gc3RkaGFuZGxlc1tpXTsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiaGFuZGxlICMlZDogJXAgKHR5cGUgJWx4LCAiCisJCQkJCSAgICAiaGFuZGxlIGluZm8gKCVkKSAlbHhcbiIsIGksIGgsCisJCQkJCSAgICBHZXRGaWxlVHlwZShoKSwKKwkJCQkJICAgIEdldEhhbmRsZUluZm9ybWF0aW9uKGgsICZmbCksCisJCQkJCSAgICBmbCk7CisJCQl9CisJCQlzdHJidWZfYWRkc3RyKCZidWYsICJcblRoaXMgaXMgYSBidWc7IHBsZWFzZSByZXBvcnQgaXQgIgorCQkJCSAgICAgICJhdFxuaHR0cHM6Ly9naXRodWIuY29tL2dpdC1mb3Itd2luZG93cy8iCisJCQkJICAgICAgImdpdC9pc3N1ZXMvbmV3XG5cbiIKKwkJCQkgICAgICAiVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nLCBwbGVhc2Ugc2V0ICIKKwkJCQkgICAgICAidGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG5cbiIKKwkJCQkgICAgICAiXHRTVVBQUkVTU19IQU5ETEVfSU5IRVJJVEFOQ0VfV0FSTklORz0xIgorCQkJCSAgICAgICJcbiIpOworCQl9CisJCXJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IDA7CisJCWZsYWdzICY9IH5FWFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOworCQlyZXQgPSBDcmVhdGVQcm9jZXNzVygqd2NtZCA/IHdjbWQgOiBOVUxMLCB3YXJncywgTlVMTCwgTlVMTCwKKwkJCQkgICAgIFRSVUUsIGZsYWdzLCB3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwKKwkJCQkgICAgICZzaS5TdGFydHVwSW5mbywgJnBpKTsKKwkJaWYgKCFyZXQpCisJCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlpZiAocmV0ICYmIGJ1Zi5sZW4pIHsKKwkJCXdhcm5pbmcoImZhaWxlZCB0byByZXN0cmljdCBmaWxlIGhhbmRsZXMgKCVsZClcblxuJXMiLAorCQkJCWVyciwgYnVmLmJ1Zik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfSBlbHNlIGlmICghcmV0KQorCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCisJaWYgKHNpLmxwQXR0cmlidXRlTGlzdCkKKwkJRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3Qoc2kubHBBdHRyaWJ1dGVMaXN0KTsKKwlpZiAoYXR0cl9saXN0KQorCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBhdHRyX2xpc3QpOwogCiAJZnJlZSh3ZW52YmxrKTsKIAlmcmVlKHdhcmdzKTsKIAotCWlmICghcmV0KSB7Ci0JCWVycm5vID0gRU5PRU5UOworCWlmICghcmV0KQogCQlyZXR1cm4gLTE7Ci0JfQorCiAJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CiAKIAkvKgpAQCAtMTYwNSw3ICsxNzI4LDcgQEAKIAkJd2hpbGUgKGFyZ3ZbYXJnY10pIGFyZ2MrKzsKIAkJQUxMT0NfQVJSQVkoYXJndjIsIGFyZ2MgKyAxKTsKIAkJYXJndjJbMF0gPSAoY2hhciAqKWNtZDsJLyogZnVsbCBwYXRoIHRvIHRoZSBzY3JpcHQgZmlsZSAqLwotCQltZW1jcHkoJmFyZ3YyWzFdLCAmYXJndlsxXSwgc2l6ZW9mKCphcmd2KSAqIGFyZ2MpOworCQlDT1BZX0FSUkFZKCZhcmd2MlsxXSwgJmFyZ3ZbMV0sIGFyZ2MpOwogCQlleGVjX2lkID0gdHJhY2UyX2V4ZWMocHJvZywgYXJndjIpOwogCQlwaWQgPSBtaW5nd19zcGF3bnYocHJvZywgYXJndjIsIDEpOwogCQlpZiAocGlkID49IDApIHsKZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5oIGIvY29tcGF0L21pbmd3LmgKaW5kZXggMDRjYTczMS4uM2VjOWZjMyAxMDA2NDQKLS0tIGEvY29tcGF0L21pbmd3LmgKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTU3Miw3ICs1NzIsNyBAQAogCiAvKgogICogQSBjcml0aWNhbCBzZWN0aW9uIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzcGF3bgotICogZnVuY3Rpb25zIChtaW5nd19zcGF3bnZbcF1lKCkpIGFuZCB3YWl0cGlkKCkuIEludGlhbGlzZWQgaW4KKyAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbml0aWFsaXNlZCBpbgogICogdGhlIHJlcGxhY2VtZW50IG1haW4oKSBtYWNybyBiZWxvdy4KICAqLwogZXh0ZXJuIENSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7CmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmggYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKaW5kZXggOTEzNDM0OS4uODE0ODQ1ZCAxMDA2NDQKLS0tIGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApAQCAtMTU2NCw3ICsxNTY0LDcgQEAKICAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVsZWFzaW5nIGNvYWxlc2VkIHNlZ21lbnRzICovCisvKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNjZWQgc2VnbWVudHMgKi8KIHN0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgewogICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CiAgIGNoYXIqIGNwdHIgPSAoY2hhciopcHRyOwpAQCAtMTY1NSw3ICsxNjU1LDcgQEAKICAgICAjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgICAgIE1GQUlMCiAjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCiAKLS8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGlndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KICNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKIAogLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCkBAIC0yNDg1LDcgKzI0ODUsNyBAQAogCiAgIFRyaW0gc3VwcG9ydAogICAgIEZpZWxkcyBob2xkaW5nIHRoZSBhbW91bnQgb2YgdW51c2VkIHRvcG1vc3QgbWVtb3J5IHRoYXQgc2hvdWxkIHRyaWdnZXIKLSAgICB0aW1taW5nLCBhbmQgYSBjb3VudGVyIHRvIGZvcmNlIHBlcmlvZGljIHNjYW5uaW5nIHRvIHJlbGVhc2UgdW51c2VkCisgICAgdGltaW5nLCBhbmQgYSBjb3VudGVyIHRvIGZvcmNlIHBlcmlvZGljIHNjYW5uaW5nIHRvIHJlbGVhc2UgdW51c2VkCiAgICAgbm9uLXRvcG1vc3Qgc2VnbWVudHMuCiAKICAgTG9ja2luZwpkaWZmIC0tZ2l0IGEvY29tcGF0L29ic3RhY2suaCBiL2NvbXBhdC9vYnN0YWNrLmgKaW5kZXggYWUzNmVkNi4uMDFlN2M4MSAxMDA2NDQKLS0tIGEvY29tcGF0L29ic3RhY2suaAorKysgYi9jb21wYXQvb2JzdGFjay5oCkBAIC03OSw3ICs3OSw3IEBACiBXaGVuIHRoZSBjaGFycyBidXJzdCBvdmVyIGEgY2h1bmsgYm91bmRhcnksIHdlIGFsbG9jYXRlIGEgbGFyZ2VyCiBjaHVuaywgYW5kIHRoZW4gY29weSB0aGUgcGFydGx5IGZvcm1lZCBvYmplY3QgZnJvbSB0aGUgZW5kIG9mIHRoZSBvbGQKIGNodW5rIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBsYXJnZXIgY2h1bmsuICBXZSB0aGVuIGNhcnJ5IG9uCi1hY2NyZXRpbmcgY2hhcmFjdGVycyB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgYXMgd2Ugbm9ybWFsbHkgd291bGQuCithY2NyZWRpdGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KIAogQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCiBncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaApkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKaW5kZXggYzBkODM4OC4uZDFiYzA5ZSAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYworKysgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCkBAIC0zNDYyLDcgKzM0NjIsNyBAQAogCS8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLwogCXJldHVybiBSRUdfRUNPTExBVEU7CiAKLSAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgLyogQnVpbGQgc2luZ2xlIGJ5dGUgbWF0Y2hpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLwogICAgICAgY2hhcl9idWZbMV0gPSAodW5zaWduZWQgY2hhcikgJ1wwJzsKICAgICAgIGxlbiA9IHdlaWdodHNbaWR4MSAmIDB4ZmZmZmZmXTsKICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXguaCBiL2NvbXBhdC9yZWdleC9yZWdleC5oCmluZGV4IDRkODEzNTguLjA4YTI2MDkgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdleC5oCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKICAgLyogUE9TSVggcmVnY29tcCByZXR1cm4gZXJyb3IgY29kZXMuICAoSW4gdGhlIG9yZGVyIGxpc3RlZCBpbiB0aGUKICAgICAgc3RhbmRhcmQuKSAgKi8KICAgUkVHX0JBRFBBVCwJCS8qIEludmFsaWQgcGF0dGVybi4gICovCi0gIFJFR19FQ09MTEFURSwJCS8qIEluYWxpZCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIFJFR19FQ09MTEFURSwJCS8qIEludmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuICAqLwogICBSRUdfRUNUWVBFLAkJLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCiAgIFJFR19FRVNDQVBFLAkJLyogVHJhaWxpbmcgYmFja3NsYXNoLiAgKi8KICAgUkVHX0VTVUJSRUcsCQkvKiBJbnZhbGlkIGJhY2sgcmVmZXJlbmNlLiAgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKaW5kZXggNTliZjE1MS4uZWM1MWNmMyAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKQEAgLTE2MTYsNyArMTYxNiw3IEBACiAgIHJlX2ZyZWUgKHN0YXRlKTsKIH0KIAotLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgaW5kZXBlbmQgb2YgY29udGV4dHMuCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBpbmRlcGVuZGVudCBvZiBjb250ZXh0cy4KICAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KIAogc3RhdGljIHJlX2RmYXN0YXRlX3QgKgpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKaW5kZXggMWI1ZDg5Zi4uNDkzNThhZSAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYworKysgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCkBAIC0yNDIwLDcgKzI0MjAsNyBAQAogLyogRnJvbSB0aGUgbm9kZSBzZXQgQ1VSX05PREVTLCBwaWNrIHVwIHRoZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKICAgIE9QX09QRU5fU1VCRVhQIGFuZCB3aGljaCBoYXZlIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzIGluIHRoZSByZWd1bGFyCiAgICBleHByZXNzaW9uLiBBbmQgcmVnaXN0ZXIgdGhlbSB0byB1c2UgdGhlbSBsYXRlciBmb3IgZXZhbHVhdGluZyB0aGUKLSAgIGNvcnJlc3BvZGluZyBiYWNrIHJlZmVyZW5jZXMuICAqLworICAgY29ycmVzcG9uZGluZyBiYWNrIHJlZmVyZW5jZXMuICAqLwogCiBzdGF0aWMgcmVnX2VycmNvZGVfdAogaW50ZXJuYWxfZnVuY3Rpb24KQEAgLTMzNDcsNyArMzM0Nyw3IEBACiAgIGRlc3RzX25vZGUgPSBkZXN0c19hbGxvYy0+ZGVzdHNfbm9kZTsKICAgZGVzdHNfY2ggPSBkZXN0c19hbGxvYy0+ZGVzdHNfY2g7CiAKLSAgLyogSW5pdGlhbGl6ZSB0cmFuc2l0b24gdGFibGUuICAqLworICAvKiBJbml0aWFsaXplIHRyYW5zaXRpb24gdGFibGUuICAqLwogICBzdGF0ZS0+d29yZF90cnRhYmxlID0gc3RhdGUtPnRydGFibGUgPSBOVUxMOwogCiAgIC8qIEF0IGZpcnN0LCBncm91cCBhbGwgbm9kZXMgYmVsb25naW5nIHRvIGBzdGF0ZScgaW50byBzZXZlcmFsCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQgYi9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKaW5kZXggNDAxOTRkZC4uYjM1ZDI2NCAxMDA2NDQKLS0tIGEvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CisrKyBiL2NvbXBhdC92Y2J1aWxkL2ZpbmRfdnNfZW52LmJhdApAQCAtMTgsNyArMTgsNyBAQAogUkVNIGF0dGVtcHRzIHRvIGRvIHRoYXQuCiBSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogUkVNIFRoaXMgQkFUIGZpbGUgc3RhcnRzIGluIGEgcGxhaW4gKG5vbi1kZXZlbG9wZXIpIGNvbW1hbmQgcHJvbXB0LAotUkVNIHNlYXJjaGVzIGZvciB0aGUgImJlc3QiIGNvbW1tYW5kIHByb21wdCBzZXR1cCBzY3JpcHQsIGluc3RhbGxzCitSRU0gc2VhcmNoZXMgZm9yIHRoZSAiYmVzdCIgY29tbWFuZCBwcm9tcHQgc2V0dXAgc2NyaXB0LCBpbnN0YWxscwogUkVNIGl0IGludG8gdGhlIGN1cnJlbnQgQ01EIHByb2Nlc3MsIGFuZCBleHBvcnRzIHRoZSB2YXJpb3VzIE1TVkMKIFJFTSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHVzZSBieSBNQUtFLgogUkVNCmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwppbmRleCA1NGZkNzAxLi5jMjdiMjBhIDEwMDY0NAotLS0gYS9jb21wYXQvd2luYW5zaS5jCisrKyBiL2NvbXBhdC93aW5hbnNpLmMKQEAgLTY2MiwxMCArNjYyLDIwIEBACiAgKi8KIEhBTkRMRSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoaW50IGZkKQogeworCUhBTkRMRSByZXQ7CisKIAlpZiAoZmQgPT0gMSAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMV0gJiBGRF9TV0FQUEVEKSkKIAkJcmV0dXJuIGhjb25zb2xlMTsKIAlpZiAoZmQgPT0gMiAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMl0gJiBGRF9TV0FQUEVEKSkKIAkJcmV0dXJuIGhjb25zb2xlMjsKIAotCXJldHVybiAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKwlyZXQgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKworCS8qCisJICogVGhlcmUgYXJlIG9idmlvdXNseSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIF9nZXRfb3NmaGFuZGxlKCkKKwkgKiByZXR1cm5zIChIQU5ETEUpLTIuIFRoaXMgaXMgbm90IGRvY3VtZW50ZWQgYW55d2hlcmUsIGJ1dCB0aGF0IGlzIHNvCisJICogY2xlYXJseSBhbiBpbnZhbGlkIGhhbmRsZSB2YWx1ZSB0aGF0IHdlIGNhbiBqdXN0IHdvcmsgYXJvdW5kIHRoaXMKKwkgKiBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBpbnZhbGlkIGhhbmRsZXMuCisJICovCisJcmV0dXJuIHJldCA9PSAoSEFORExFKS0yID8gSU5WQUxJRF9IQU5ETEVfVkFMVUUgOiByZXQ7CiB9CmRpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCmluZGV4IGU3MDUyYjMuLmQ3NWY4OGMgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5jCisrKyBiL2NvbmZpZy5jCkBAIC0xMzY0LDYgKzEzNjQsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5zcGFyc2VjaGVja291dGNvbmUiKSkgeworCQljb3JlX3NwYXJzZV9jaGVja291dF9jb25lID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByZWNvbXBvc2V1bmljb2RlIikpIHsKIAkJcHJlY29tcG9zZWRfdW5pY29kZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jb25maWcuaCBiL2NvbmZpZy5oCmluZGV4IGYwZWQ0NjQuLjkxZmQ0YzUgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5oCisrKyBiL2NvbmZpZy5oCkBAIC00LDYgKzQsMjIgQEAKICNpbmNsdWRlICJoYXNobWFwLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKIAorCisvKioKKyAqIFRoZSBjb25maWcgQVBJIGdpdmVzIGNhbGxlcnMgYSB3YXkgdG8gYWNjZXNzIEdpdCBjb25maWd1cmF0aW9uIGZpbGVzCisgKiAoYW5kIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgc3ludGF4KS4KKyAqCisgKiBHZW5lcmFsIFVzYWdlCisgKiAtLS0tLS0tLS0tLS0tCisgKgorICogQ29uZmlnIGZpbGVzIGFyZSBwYXJzZWQgbGluZWFybHksIGFuZCBlYWNoIHZhcmlhYmxlIGZvdW5kIGlzIHBhc3NlZCB0byBhCisgKiBjYWxsZXItcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyByZXNwb25zaWJsZQorICogZm9yIGFueSBhY3Rpb25zIHRvIGJlIHRha2VuIG9uIHRoZSBjb25maWcgb3B0aW9uLCBhbmQgaXMgZnJlZSB0byBpZ25vcmUKKyAqIHNvbWUgb3B0aW9ucy4gSXQgaXMgbm90IHVuY29tbW9uIGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBwYXJzZWQKKyAqIHNldmVyYWwgdGltZXMgZHVyaW5nIHRoZSBydW4gb2YgYSBHaXQgcHJvZ3JhbSwgd2l0aCBkaWZmZXJlbnQgY2FsbGJhY2tzCisgKiBwaWNraW5nIG91dCBkaWZmZXJlbnQgdmFyaWFibGVzIHVzZWZ1bCB0byB0aGVtc2VsdmVzLgorICovCisKIHN0cnVjdCBvYmplY3RfaWQ7CiAKIC8qIGdpdF9jb25maWdfcGFyc2Vfa2V5KCkgcmV0dXJucyB0aGVzZSBuZWdhdGVkOiAqLwpAQCAtNzEsOSArODcsMzQgQEAKIAl9IGVycm9yX2FjdGlvbjsKIH07CiAKKy8qKgorICogQSBjb25maWcgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKKyAqCisgKiAtIHRoZSBuYW1lIG9mIHRoZSBwYXJzZWQgdmFyaWFibGUuIFRoaXMgaXMgaW4gY2Fub25pY2FsICJmbGF0IiBmb3JtOiB0aGUKKyAqICAgc2VjdGlvbiwgc3Vic2VjdGlvbiwgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGRvdHMsCisgKiAgIGFuZCB0aGUgc2VjdGlvbiBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBhbGwgbG93ZXJjYXNlLiBFLmcuLAorICogICBgY29yZS5pZ25vcmVjYXNlYCwgYGRpZmYuU29tZVR5cGUudGV4dGNvbnZgLgorICoKKyAqIC0gdGhlIHZhbHVlIG9mIHRoZSBmb3VuZCB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHRoZSB2YXJpYWJsZSBoYWQgbm8KKyAqICAgdmFsdWUgc3BlY2lmaWVkLCB0aGUgdmFsdWUgd2lsbCBiZSBOVUxMICh0eXBpY2FsbHkgdGhpcyBtZWFucyBpdAorICogICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYm9vbGVhbiB0cnVlKS4KKyAqCisgKiAtIGEgdm9pZCBwb2ludGVyIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb25maWcgQVBJOyB0aGlzIGNhbgorICogICBjb250YWluIGNhbGxiYWNrLXNwZWNpZmljIGRhdGEKKyAqCisgKiBBIGNvbmZpZyBjYWxsYmFjayBzaG91bGQgcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG9yIC0xIGlmIHRoZSB2YXJpYWJsZQorICogY291bGQgbm90IGJlIHBhcnNlZCBwcm9wZXJseS4KKyAqLwogdHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKIGludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKKy8qKgorICogUmVhZCBhIHNwZWNpZmljIGZpbGUgaW4gZ2l0LWNvbmZpZyBmb3JtYXQuCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBzYW1lIGNhbGxiYWNrIGFuZCBkYXRhIHBhcmFtZXRlcnMgYXMgYGdpdF9jb25maWdgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKwogaW50IGdpdF9jb25maWdfZnJvbV9maWxlX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqLAogCQkJCSAgICAgIHZvaWQgKiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKik7CkBAIC04OCwzNCArMTI5LDE1NyBAQAogaW50IGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKIHZvaWQgcmVhZF9lYXJseV9jb25maWcoY29uZmlnX2ZuX3QgY2IsIHZvaWQgKmRhdGEpOwogdm9pZCByZWFkX3ZlcnlfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBNb3N0IHByb2dyYW1zIHdpbGwgc2ltcGx5IHdhbnQgdG8gbG9vayB1cCB2YXJpYWJsZXMgaW4gYWxsIGNvbmZpZyBmaWxlcworICogdGhhdCBHaXQga25vd3MgYWJvdXQsIHVzaW5nIHRoZSBub3JtYWwgcHJlY2VkZW5jZSBydWxlcy4gVG8gZG8gdGhpcywKKyAqIGNhbGwgYGdpdF9jb25maWdgIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdm9pZCBkYXRhIHBvaW50ZXIuCisgKgorICogYGdpdF9jb25maWdgIHdpbGwgcmVhZCBhbGwgY29uZmlnIHNvdXJjZXMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZworICogcHJpb3JpdHkuIFRodXMgYSBjYWxsYmFjayBzaG91bGQgdHlwaWNhbGx5IG92ZXJ3cml0ZSBwcmV2aW91c2x5LXNlZW4KKyAqIGVudHJpZXMgd2l0aCBuZXcgb25lcyAoZS5nLiwgaWYgYm90aCB0aGUgdXNlci13aWRlIGB+Ly5naXRjb25maWdgIGFuZAorICogcmVwby1zcGVjaWZpYyBgLmdpdC9jb25maWdgIGNvbnRhaW4gYGNvbG9yLnVpYCwgdGhlIGNvbmZpZyBtYWNoaW5lcnkKKyAqIHdpbGwgZmlyc3QgZmVlZCB0aGUgdXNlci13aWRlIG9uZSB0byB0aGUgY2FsbGJhY2ssIGFuZCB0aGVuIHRoZQorICogcmVwby1zcGVjaWZpYyBvbmU7IGJ5IG92ZXJ3cml0aW5nLCB0aGUgaGlnaGVyLXByaW9yaXR5IHJlcG8tc3BlY2lmaWMKKyAqIHZhbHVlIGlzIGxlZnQgYXQgdGhlIGVuZCkuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqKTsKKworLyoqCisgKiBMZXRzIHRoZSBjYWxsZXIgZXhhbWluZSBjb25maWcgd2hpbGUgYWRqdXN0aW5nIHNvbWUgb2YgdGhlIGRlZmF1bHQKKyAqIGJlaGF2aW9yIG9mIGBnaXRfY29uZmlnYC4gSXQgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkIGJ5ICJyZWd1bGFyIgorICogR2l0IGNvZGUgdGhhdCBpcyBsb29raW5nIHVwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorICogSXQgaXMgaW50ZW5kZWQgZm9yIGFkdmFuY2VkIGNhbGxlcnMgbGlrZSBgZ2l0LWNvbmZpZ2AsIHdoaWNoIGFyZQorICogaW50ZW50aW9uYWxseSB0d2Vha2luZyB0aGUgbm9ybWFsIGNvbmZpZy1sb29rdXAgcHJvY2Vzcy4KKyAqIEl0IHRha2VzIHR3byBleHRyYSBwYXJhbWV0ZXJzOgorICoKKyAqIC0gYGNvbmZpZ19zb3VyY2VgCisgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub24tTlVMTCwgaXQgc3BlY2lmaWVzIHRoZSBzb3VyY2UgdG8gcGFyc2UgZm9yCisgKiBjb25maWd1cmF0aW9uLCByYXRoZXIgdGhhbiBsb29raW5nIGluIHRoZSB1c3VhbCBmaWxlcy4gU2VlIGBzdHJ1Y3QKKyAqIGdpdF9jb25maWdfc291cmNlYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBSZWd1bGFyIGBnaXRfY29uZmlnYCBkZWZhdWx0cworICogdG8gYE5VTExgLgorICoKKyAqIC0gYG9wdHNgCisgKiBTcGVjaWZ5IG9wdGlvbnMgdG8gYWRqdXN0IHRoZSBiZWhhdmlvciBvZiBwYXJzaW5nIGNvbmZpZyBmaWxlcy4gU2VlIGBzdHJ1Y3QKKyAqIGNvbmZpZ19vcHRpb25zYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBBcyBhbiBleGFtcGxlOiByZWd1bGFyIGBnaXRfY29uZmlnYAorICogc2V0cyBgb3B0cy5yZXNwZWN0X2luY2x1ZGVzYCB0byBgMWAgYnkgZGVmYXVsdC4KKyAqLwogaW50IGNvbmZpZ193aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKiwKIAkJCXN0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSAqY29uZmlnX3NvdXJjZSwKIAkJCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cyk7CisKKy8qKgorICogVmFsdWUgUGFyc2luZyBIZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgYWlkIGluIHBhcnNpbmcgc3RyaW5nIHZhbHVlcworICovCisKIGludCBnaXRfcGFyc2Vfc3NpemVfdChjb25zdCBjaGFyICosIHNzaXplX3QgKik7CiBpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworLyoqCisgKiBTYW1lIGFzIGBnaXRfY29uZmlnX2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yIHJhdGhlcgorICogdGhhbiBkeWluZy4KKyAqLwogaW50IGdpdF9wYXJzZV9tYXliZV9ib29sKGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogUGFyc2UgdGhlIHN0cmluZyB0byBhbiBpbnRlZ2VyLCBpbmNsdWRpbmcgdW5pdCBmYWN0b3JzLiBEaWVzIG9uIGVycm9yOworICogb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LgorICovCiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCiBpbnQ2NF90IGdpdF9jb25maWdfaW50NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIElkZW50aWNhbCB0byBgZ2l0X2NvbmZpZ19pbnRgLCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorICovCiB1bnNpZ25lZCBsb25nIGdpdF9jb25maWdfdWxvbmcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCiBzc2l6ZV90IGdpdF9jb25maWdfc3NpemVfdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIHJldHVybmVkIGFzLWlzLCBhbmQKKyAqIGFuIGBpc19ib29sYCBmbGFnIGlzIHVuc2V0LgorICovCiBpbnQgZ2l0X2NvbmZpZ19ib29sX29yX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworCisvKioKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBib29sZWFuIHZhbHVlLCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZAorICogImZhbHNlIi4gSW50ZWdlciB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkKKyAqIGFyZSBub24temVybyBvciB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYKKyAqIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmVzdWx0LgorICovCiBpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgdmFsdWUgc3RyaW5nIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXI7IGlmIG5vCisgKiBzdHJpbmcgaXMgZ2l2ZW4sIHByaW50cyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm5zIC0xLgorICovCiBpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50byB0aGUKKyAqIHVzZXIncyBob21lIGRpcmVjdG9yeSB3aGVuIGZvdW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCisgKi8KIGludCBnaXRfY29uZmlnX3BhdGhuYW1lKGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogaW50IGdpdF9jb25maWdfZXhwaXJ5X2RhdGUodGltZXN0YW1wX3QgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IGdpdF9jb25maWdfY29sb3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogd3JpdGUgY29uZmlnIHZhbHVlcyB0byBhIHNwZWNpZmljIGNvbmZpZyBmaWxlLCB0YWtlcyBhIGtleS92YWx1ZSBwYWlyIGFzCisgKiBwYXJhbWV0ZXIuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogaW50IGdpdF9jb25maWdfc2V0X2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogd3JpdGUgY29uZmlnIHZhbHVlcyB0byBgLmdpdC9jb25maWdgLCB0YWtlcyBhIGtleS92YWx1ZSBwYWlyIGFzIHBhcmFtZXRlci4KKyAqLwogdm9pZCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICosIGNoYXIgKiosIGludCAqKTsKIGludCBnaXRfY29uZmlnX2tleV9pc192YWxpZChjb25zdCBjaGFyICprZXkpOwogaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogdm9pZCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoqCisgKiB0YWtlcyBmb3VyIHBhcmFtZXRlcnM6CisgKgorICogLSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgYXMgYSBzdHJpbmcsIHRvIHdoaWNoIGtleS92YWx1ZSBwYWlycyB3aWxsIGJlIHdyaXR0ZW4uCisgKgorICogLSB0aGUgbmFtZSBvZiBrZXksIGFzIGEgc3RyaW5nLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlIHNlY3Rpb24sCisgKiAgIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLCBhbmQgdGhlIHNlY3Rpb24KKyAqICAgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4KKyAqICAgRS5nLiwgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KKyAqCisgKiAtIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB2YWx1ZSBpcyBlcXVhbCB0byBOVUxMLCBpdCB3aWxsCisgKiAgIHJlbW92ZSB0aGUgbWF0Y2hpbmcga2V5IGZyb20gdGhlIGNvbmZpZyBmaWxlLgorICoKKyAqIC0gdGhlIHZhbHVlIHJlZ2V4LCBhcyBhIHN0cmluZy4gSXQgd2lsbCBkaXNyZWdhcmQga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHZhbHVlCisgKiAgIGRvZXMgbm90IG1hdGNoLgorICoKKyAqIC0gYSBtdWx0aV9yZXBsYWNlIHZhbHVlLCBhcyBhbiBpbnQuIElmIHZhbHVlIGlzIGVxdWFsIHRvIHplcm8sIG5vdGhpbmcgb3Igb25seQorICogICBvbmUgbWF0Y2hpbmcga2V5L3ZhbHVlIGlzIHJlcGxhY2VkLCBlbHNlIGFsbCBtYXRjaGluZyBrZXkvdmFsdWVzIChyZWdhcmRsZXNzCisgKiAgIGhvdyBtYW55KSBhcmUgcmVtb3ZlZCwgYmVmb3JlIHRoZSBuZXcgcGFpciBpcyB3cml0dGVuLgorICoKKyAqIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCiB2b2lkIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisvKioKKyAqIHJlbmFtZSBvciByZW1vdmUgc2VjdGlvbnMgaW4gdGhlIGNvbmZpZyBmaWxlCisgKiBwYXJhbWV0ZXJzIGBvbGRfbmFtZWAgYW5kIGBuZXdfbmFtZWAKKyAqIElmIE5VTEwgaXMgcGFzc2VkIHRocm91Z2ggYG5ld19uYW1lYCBwYXJhbWV0ZXIsCisgKiB0aGUgc2VjdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUuCisgKi8KIGludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGludCBnaXRfY29uZmlnX2NvcHlfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgZ2l0X2NvbmZpZ19jb3B5X3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKQEAgLTE0Miw2ICszMDYsMzAgQEAKIGNvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlKHZvaWQpOwogY29uc3QgY2hhciAqY3VycmVudF9jb25maWdfbmFtZSh2b2lkKTsKIAorLyoqCisgKiBJbmNsdWRlIERpcmVjdGl2ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEJ5IGRlZmF1bHQsIHRoZSBjb25maWcgcGFyc2VyIGRvZXMgbm90IHJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzLgorICogSG93ZXZlciwgYSBjYWxsZXIgY2FuIHVzZSB0aGUgc3BlY2lhbCBgZ2l0X2NvbmZpZ19pbmNsdWRlYCB3cmFwcGVyCisgKiBjYWxsYmFjayB0byBzdXBwb3J0IHRoZW0uIFRvIGRvIHNvLCB5b3Ugc2ltcGx5IHdyYXAgeW91ciAicmVhbCIgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGFuZCBkYXRhIHBvaW50ZXIgaW4gYSBgc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGFgLCBhbmQgcGFzcworICogdGhlIHdyYXBwZXIgdG8gdGhlIHJlZ3VsYXIgY29uZmlnLXJlYWRpbmcgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgcmVhZF9maWxlX3dpdGhfaW5jbHVkZShjb25zdCBjaGFyICpmaWxlLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKKyAqIHsKKyAqIHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhIGluYyA9IENPTkZJR19JTkNMVURFX0lOSVQ7CisgKiBpbmMuZm4gPSBmbjsKKyAqIGluYy5kYXRhID0gZGF0YTsKKyAqIHJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIGZpbGUsICZpbmMpOworICogfQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGBnaXRfY29uZmlnYCByZXNwZWN0cyBpbmNsdWRlcyBhdXRvbWF0aWNhbGx5LiBUaGUgbG93ZXItbGV2ZWwKKyAqIGBnaXRfY29uZmlnX2Zyb21fZmlsZWAgZG9lcyBub3QuCisgKgorICovCiBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSB7CiAJaW50IGRlcHRoOwogCWNvbmZpZ19mbl90IGZuOwpAQCAtMTY5LDYgKzM1NywzMyBAQAogCQkgICAgIGNvbnN0IGNoYXIgKipzdWJzZWN0aW9uLCBpbnQgKnN1YnNlY3Rpb25fbGVuLAogCQkgICAgIGNvbnN0IGNoYXIgKiprZXkpOwogCisvKioKKyAqIEN1c3RvbSBDb25maWdzZXRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEEgYGNvbmZpZ19zZXRgIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhbiBpbi1tZW1vcnkgY2FjaGUgZm9yCisgKiBjb25maWctbGlrZSBmaWxlcyB0aGF0IHRoZSBjYWxsZXIgc3BlY2lmaWVzIChpLmUuLCBmaWxlcyBsaWtlIGAuZ2l0bW9kdWxlc2AsCisgKiBgfi8uZ2l0Y29uZmlnYCBldGMuKS4gRm9yIGV4YW1wbGUsCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc3RydWN0IGNvbmZpZ19zZXQgZ21fY29uZmlnOworICogZ2l0X2NvbmZpZ3NldF9pbml0KCZnbV9jb25maWcpOworICogaW50IGI7CisgKiAvL3dlIGFkZCBjb25maWcgZmlsZXMgdG8gdGhlIGNvbmZpZ19zZXQKKyAqIGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmdtX2NvbmZpZywgIi5naXRtb2R1bGVzIik7CisgKiBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlc19hbHQiKTsKKyAqCisgKiBpZiAoIWdpdF9jb25maWdzZXRfZ2V0X2Jvb2woZ21fY29uZmlnLCAic3VibW9kdWxlLmZyb3R6Lmlnbm9yZSIsICZiKSkgeworICogLy9oYWNrIGhhY2sgaGFjaworICogfQorICoKKyAqIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY29uZmlnc2V0OgorICogZ2l0X2NvbmZpZ3NldF9jbGVhcigmZ21fY29uZmlnKTsKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDb25maWdzZXQgQVBJIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIGFib3ZlIG1lbnRpb25lZCB3b3JrIGZsb3cKKyAqLworCiBzdHJ1Y3QgY29uZmlnX3NldF9lbGVtZW50IHsKIAlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CiAJY2hhciAqa2V5OwpAQCAtMTk3LDE2ICs0MTIsNDcgQEAKIAlzdHJ1Y3QgY29uZmlnc2V0X2xpc3QgbGlzdDsKIH07CiAKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGNvbmZpZ19zZXQgYGNzYC4KKyAqLwogdm9pZCBnaXRfY29uZmlnc2V0X2luaXQoc3RydWN0IGNvbmZpZ19zZXQgKmNzKTsKKworLyoqCisgKiBQYXJzZXMgdGhlIGZpbGUgYW5kIGFkZHMgdGhlIHZhcmlhYmxlLXZhbHVlIHBhaXJzIHRvIHRoZSBgY29uZmlnX3NldGAsCisgKiBkaWVzIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIHBhcnNpbmcgdGhlIGZpbGUuIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvcgorICogLTEgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgaW5hY2Nlc3NpYmxlLiBUaGUgdXNlciBoYXMgdG8gZGVjaWRlCisgKiBpZiBoZSB3YW50cyB0byBmcmVlIHRoZSBpbmNvbXBsZXRlIGNvbmZpZ3NldCBvciBjb250aW51ZSB1c2luZyBpdCB3aGVuCisgKiB0aGUgZnVuY3Rpb24gcmV0dXJucyAtMS4KKyAqLwogaW50IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5CisgKiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgYW5kIGNvbmZpZyBzZXQgYGNzYC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIKKyAqIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLwogY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSk7CisKKy8qKgorICogQ2xlYXJzIGBjb25maWdfc2V0YCBzdHJ1Y3R1cmUsIHJlbW92ZXMgYWxsIHNhdmVkIHZhcmlhYmxlLXZhbHVlIHBhaXJzLgorICovCiB2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKTsKIAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gMSBpZiBub3QgZm91bmQsIGFuZCAwIGlmIGZvdW5kLCBsZWF2aW5nIHRoZSBmb3VuZAogICogdmFsdWUgaW4gdGhlICdkZXN0JyBwb2ludGVyLgogICovCisKKy8qCisgKiBGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAKKyAqIGFuZCBjb25maWcgc2V0IGBjc2AsIHN0b3JlcyB0aGUgcG9pbnRlciB0byBpdCBpbiBgdmFsdWVgIGFuZCByZXR1cm5zIDAuCisgKiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQKKyAqIHRvdWNoaW5nIGB2YWx1ZWAuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSBgdmFsdWVgLCBhcyBpdAorICogaXMgb3duZWQgYnkgdGhlIGNhY2hlLgorICovCiBpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKKwogaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOwogaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZyhzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpOwogaW50IGdpdF9jb25maWdzZXRfZ2V0X2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKQEAgLTI0MCwxNyArNDg2LDk0IEBACiBpbnQgcmVwb19jb25maWdfZ2V0X3BhdGhuYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAogCQkJICAgICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKIAorLyoqCisgKiBRdWVyeWluZyBGb3IgU3BlY2lmaWMgVmFyaWFibGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRm9yIHByb2dyYW1zIHdhbnRpbmcgdG8gcXVlcnkgZm9yIHNwZWNpZmljIHZhcmlhYmxlcyBpbiBhIG5vbi1jYWxsYmFjaworICogbWFubmVyLCB0aGUgY29uZmlnIEFQSSBwcm92aWRlcyB0d28gZnVuY3Rpb25zIGBnaXRfY29uZmlnX2dldF92YWx1ZWAKKyAqIGFuZCBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGlgLiBUaGV5IGJvdGggcmVhZCB2YWx1ZXMgZnJvbSBhbiBpbnRlcm5hbAorICogY2FjaGUgZ2VuZXJhdGVkIHByZXZpb3VzbHkgZnJvbSByZWFkaW5nIHRoZSBjb25maWcgZmlsZXMuCisgKi8KKworLyoqCisgKiBGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAsCisgKiBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQorICogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCisgKiBgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQgaXMgb3duZWQKKyAqIGJ5IHRoZSBjYWNoZS4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKTsKKworLyoqCisgKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgcHJpb3JpdHkKKyAqIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YC4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICogYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeQorICogdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLwogY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aShjb25zdCBjaGFyICprZXkpOworCisvKioKKyAqIFJlc2V0cyBhbmQgaW52YWxpZGF0ZXMgdGhlIGNvbmZpZyBjYWNoZS4KKyAqLwogdm9pZCBnaXRfY29uZmlnX2NsZWFyKHZvaWQpOworCisvKioKKyAqIEFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSByZXRyaWV2ZWQgc3RyaW5nIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgZm9yCisgKiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YDsgaWYgTlVMTCBzdHJpbmcgaXMgZ2l2ZW4sIHByaW50cyBhbgorICogZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcworICogbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZyBgZGVzdGAuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0YCwgZXhjZXB0IHRoYXQgcmV0cmlldmVkIHZhbHVlCisgKiBjb3BpZWQgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlciBpcyBhIG11dGFibGUgc3RyaW5nLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpOworCisvKioKKyAqIEZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIHRvIGFuIGludGVnZXIgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgKiBga2V5YC4gRGllcyBvbiBlcnJvcjsgb3RoZXJ3aXNlLCBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlciBpbgorICogYGRlc3RgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLAorICogcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9pbnRgIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF91bG9uZyhjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworCisvKioKKyAqIEZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIGludG8gYSBib29sZWFuIHZhbHVlLCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KKyAqIHZhcmlhYmxlIGBrZXlgIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kICJmYWxzZSIuIEludGVnZXIKKyAqIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleSBhcmUgbm9uLXplcm8gb3IKKyAqIHplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZiBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsCisgKiBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgcmVzdWx0IGluIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQorICogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCisgKiBgZGVzdGAuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIGNvcGllZCBhcy1pcywKKyAqIGFuZCBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yCisgKiByYXRoZXIgdGhhbiBkeWluZy4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X21heWJlX2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8KKyAqIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfcGF0aG5hbWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKIGludCBnaXRfY29uZmlnX2dldF9pbmRleF90aHJlYWRzKGludCAqZGVzdCk7CiBpbnQgZ2l0X2NvbmZpZ19nZXRfdW50cmFja2VkX2NhY2hlKHZvaWQpOwogaW50IGdpdF9jb25maWdfZ2V0X3NwbGl0X2luZGV4KHZvaWQpOwpAQCAtMjcwLDcgKzU5MywxOSBAQAogCWVudW0gY29uZmlnX3Njb3BlIHNjb3BlOwogfTsKIAorLyoqCisgKiBGaXJzdCBwcmludHMgdGhlIGVycm9yIG1lc3NhZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIgaW4gYGVycmAgYW5kIHRoZW4KKyAqIGRpZXMgcHJpbnRpbmcgdGhlIGxpbmUgbnVtYmVyIGFuZCB0aGUgZmlsZSBuYW1lIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5CisgKiB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuCisgKi8KIE5PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKKworLyoqCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZm9ybWF0cyB0aGUgZGllIGVycm9yIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZQorICogcGFyYW1ldGVycyBlbnRlcmVkLiBVc2VkIGJ5IGBnaXRfZGllX2NvbmZpZygpYC4gSXQgY2FuIGJlIHVzZWQgYnkgY2FsbGVycworICogaGFuZGxpbmcgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKClgIHRvIHByaW50IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UKKyAqIGZvciB0aGUgZGVzaXJlZCB2YWx1ZS4KKyAqLwogTk9SRVRVUk4gdm9pZCBnaXRfZGllX2NvbmZpZ19saW5lbnIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVucik7CiAKICNkZWZpbmUgTE9PS1VQX0NPTkZJRyhtYXBwaW5nLCB2YXIpIFwKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBhNDNiNDc2Li42NmFlZGI5IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC04NSw3ICs4NSw3IEBACiAKICMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKFdJVEhOQU1FLCBWQVIsIEhFTFBfVEVYVCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IFZBUiB0byB0aGUgdmFsdWUgc3BlY2llZCBieSAtLXdpdGgtV0lUSE5BTUUuCisjIFNldCBWQVIgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSAtLXdpdGgtV0lUSE5BTUUuCiAjIE5vIHZlcmlmaWNhdGlvbiBvZiBhcmd1bWVudHMgaXMgcGVyZm9ybWVkLCBidXQgd2FybmluZ3MgYXJlIGlzc3VlZAogIyBpZiBlaXRoZXIgJ3llcycgb3IgJ25vJyBpcyBzcGVjaWZpZWQuCiAjIEhFTFBfVEVYVCBpcyBwcmVzZW50ZWQgd2hlbiAtLWhlbHAgaXMgY2FsbGVkLgpAQCAtODQ0LDEyICs4NDQsNjEgQEAKIEFDX0NPTVBJTEVfSUZFTFNFKFtPTERJQ09OVlRFU1RfU1JDXSwKIAlbQUNfTVNHX1JFU1VMVChbbm9dKV0sCiAJW0FDX01TR19SRVNVTFQoW3llc10pCisJQUNfREVGSU5FKEhBVkVfT0xEX0lDT05WLCAxKQogCU9MRF9JQ09OVj1VbmZvcnR1bmF0ZWx5WWVzXSkKIAogR0lUX1VOU1RBU0hfRkxBR1MoJElDT05WRElSKQogCiBHSVRfQ09ORl9TVUJTVChbT0xEX0lDT05WXSkKIAorIworIyBEZWZpbmUgSUNPTlZfT01JVFNfQk9NIGlmIHlvdSBhcmUgb24gYSBzeXN0ZW0gd2hpY2gKKyMgaWNvbnYgb21pdHMgYm9tIGZvciB1dGYtezE2LDMyfQoraWYgdGVzdCAteiAiJE5PX0lDT05WIjsgdGhlbgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaWNvbnYgb21pdHMgYm9tIGZvciB1dGYtMTYgYW5kIHV0Zi0zMl0sCisgW2FjX2N2X2ljb252X29taXRzX2JvbV0sCitbCitvbGRfTElCUz0iJExJQlMiCitpZiB0ZXN0IC1uICIkTkVFRFNfTElCSUNPTlYiOyB0aGVuCisJTElCUz0iJExJQlMgLWxpY29udiIKK2ZpCisKK0FDX1JVTl9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVAorCSNpbmNsdWRlIDxpY29udi5oPgorCSNpZmRlZiBIQVZFX09MRF9JQ09OVgorCXR5cGVkZWYgY29uc3QgY2hhciAqaWNvbnZfaWJwOworCSNlbHNlCisJdHlwZWRlZiBjaGFyICppY29udl9pYnA7CisJI2VuZGlmCisJXSwKKwlbWworCWludCB2OworCWljb252X3QgY29udjsKKwljaGFyIGluW10gPSAiYSI7IGljb252X2licCBwaW4gPSBpbjsKKwljaGFyIG91dFsyMF0gPSAiIjsgY2hhciAqcG91dCA9IG91dDsKKwlzaXplX3QgaXN6ID0gc2l6ZW9mIGluOworCXNpemVfdCBvc3ogPSBzaXplb2Ygb3V0OworCisJY29udiA9IGljb252X29wZW4oIlVURi0xNiIsICJVVEYtOCIpOworCWljb252KGNvbnYsICZwaW4sICZpc3osICZwb3V0LCAmb3N6KTsKKwlpY29udl9jbG9zZShjb252KTsKKwl2ID0gKHVuc2lnbmVkIGNoYXIpKG91dFswXSkgKyAodW5zaWduZWQgY2hhcikob3V0WzFdKTsKKwlyZXR1cm4gdiAhPSAweGZlICsgMHhmZjsKKwldXSldLAorCVthY19jdl9pY29udl9vbWl0c19ib209bm9dLAorCVthY19jdl9pY29udl9vbWl0c19ib209eWVzXSkKKworTElCUz0iJG9sZF9MSUJTIgorXSkKK2lmIHRlc3QgIngkYWNfY3ZfaWNvbnZfb21pdHNfYm9tIiA9IHh5ZXM7IHRoZW4KKwlJQ09OVl9PTUlUU19CT009WWVzCitlbHNlCisJSUNPTlZfT01JVFNfQk9NPQorZmkKK0dJVF9DT05GX1NVQlNUKFtJQ09OVl9PTUlUU19CT01dKQorZmkKKwogIyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KIEFDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3NdKQogIwpkaWZmIC0tZ2l0IGEvY29ubmVjdGVkLmMgYi9jb25uZWN0ZWQuYwppbmRleCAzNmM0ZTVkLi5jMzM3ZjVmIDEwMDY0NAotLS0gYS9jb25uZWN0ZWQuYworKysgYi9jb25uZWN0ZWQuYwpAQCAtNjIsNyArNjIsOCBAQAogCQkgKiByZWNlaXZlZCB0aGUgb2JqZWN0cyBwb2ludGVkIHRvIGJ5IGVhY2ggd2FudGVkIHJlZi4KIAkJICovCiAJCWRvIHsKLQkJCWlmICghcmVwb19oYXNfb2JqZWN0X2ZpbGUodGhlX3JlcG9zaXRvcnksICZvaWQpKQorCQkJaWYgKCFyZXBvX2hhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKHRoZV9yZXBvc2l0b3J5LCAmb2lkLAorCQkJCQkJCSAgICAgT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKQogCQkJCXJldHVybiAxOwogCQl9IHdoaWxlICghZm4oY2JfZGF0YSwgJm9pZCkpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvY29tbWl0LmNvY2NpCmluZGV4IGQwMzQ1MzMuLjc3OGU0NzAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaQpAQCAtMjAsNyArMjAsNyBAQAogKyBzZXRfY29tbWl0X3RyZWUoYywgcykKICAgLi4uPn0KIAotLy8gVGhlc2UgZXhjbHVkZWQgZnVuY3Rpb25zIG11c3QgYWNjZXNzIGMtPm1heWJlX3RyZWUgZGlyZWNseS4KKy8vIFRoZXNlIGV4Y2x1ZGVkIGZ1bmN0aW9ucyBtdXN0IGFjY2VzcyBjLT5tYXliZV90cmVlIGRpcmVjdGx5LgogLy8gTm90ZSB0aGF0IGlmIGMtPm1heWJlX3RyZWUgaXMgd3JpdHRlbiBzb21ld2hlcmUgb3V0c2lkZSBvZiB0aGVzZQogLy8gZnVuY3Rpb25zLCB0aGVuIHRoZSByZWNvbW1lbmRlZCB0cmFuc2Zvcm1hdGlvbiB3aWxsIGJlIGJvZ3VzIHdpdGgKIC8vIHJlcG9fZ2V0X2NvbW1pdF90cmVlKCkgb24gdGhlIExIUy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9vYmplY3RfaWQuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpCmluZGV4IDNlNTM2YTkuLmRkZjRmMjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY29jY2luZWxsZS9vYmplY3RfaWQuY29jY2kKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQpAQCAtMTMsMzggKzEzLDYgQEAKIEBACiBzdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKIEBACi0tIHNoYTFfdG9faGV4KE9JRC5oYXNoKQotKyBvaWRfdG9faGV4KCZPSUQpCi0KLUBACi1pZGVudGlmaWVyIGYgIT0gb2lkX3RvX2hleDsKLXN0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjsKLUBACi0gIGYoLi4uKSB7PC4uLgotLSBzaGExX3RvX2hleChPSURQVFItPmhhc2gpCi0rIG9pZF90b19oZXgoT0lEUFRSKQotICAuLi4+fQotCi1AQAotZXhwcmVzc2lvbiBFOwotc3RydWN0IG9iamVjdF9pZCBPSUQ7Ci1AQAotLSBzaGExX3RvX2hleF9yKEUsIE9JRC5oYXNoKQotKyBvaWRfdG9faGV4X3IoRSwgJk9JRCkKLQotQEAKLWlkZW50aWZpZXIgZiAhPSBvaWRfdG9faGV4X3I7Ci1leHByZXNzaW9uIEU7Ci1zdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFI7Ci1AQAotICAgZiguLi4pIHs8Li4uCi0tIHNoYTFfdG9faGV4X3IoRSwgT0lEUFRSLT5oYXNoKQotKyBvaWRfdG9faGV4X3IoRSwgT0lEUFRSKQotICAuLi4+fQotCi1AQAotc3RydWN0IG9iamVjdF9pZCBPSUQ7Ci1AQAogLSBoYXNoY2xyKE9JRC5oYXNoKQogKyBvaWRjbHIoJk9JRCkKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAppbmRleCAwMGZiZTZjLi5lNGQ5ZmY0IDEwMDY0NAotLS0gYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApAQCAtNTUwLDcgKzU1MCw3IEBACiAJCQkJCQkgZXNjX2lkeCwgMSkKIAkJCX0gZWxzZSBpZiAoZXNjID09ICJuIikgewogCQkJCSMgVWgtb2gsIGEgbmV3bGluZSBjaGFyYWN0ZXIuCi0JCQkJIyBXZSBjYW50IHJlbGlhYmx5IHB1dCBhIHBhdGhuYW1lCisJCQkJIyBXZSBjYW5ub3QgcmVsaWFibHkgcHV0IGEgcGF0aG5hbWUKIAkJCQkjIGNvbnRhaW5pbmcgYSBuZXdsaW5lIGludG8gQ09NUFJFUExZLAogCQkJCSMgYW5kIHRoZSBuZXdsaW5lIHdvdWxkIGNyZWF0ZSBhIG1lc3MuCiAJCQkJIyBTa2lwIHRoaXMgcGF0aC4KQEAgLTU2NSw3ICs1NjUsNyBAQAogCQkJfQogCQl9CiAJCSMgRHJvcCBjbG9zaW5nIGRvdWJsZSBxdW90ZSwgaWYgdGhlcmUgaXMgb25lLgotCQkjIChUaGVyZSBpc250IGFueSBpZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCBhcyBpdCB3YXMKKwkJIyAoVGhlcmUgaXMgbm90IGFueSBpZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCBhcyBpdCB3YXMKIAkJIyBhbHJlYWR5IHN0cmlwcGVkIHdpdGggdGhlIHRyYWlsaW5nIHBhdGggY29tcG9uZW50cy4pCiAJCWlmIChzdWJzdHIocCwgbGVuZ3RoKHApLCAxKSA9PSAiXCIiKQogCQkJb3V0ID0gb3V0IHN1YnN0cihwLCAxLCBsZW5ndGgocCkgLSAxKQpAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKIAktLWFsbC1tYXRjaCAtLWludmVydC1ncmVwCiAiCiAKLV9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cz0ib25lbGluZSBzaG9ydCBtZWRpdW0gZnVsbCBmdWxsZXIgZW1haWwgcmF3IGZvcm1hdDogbWJveHJkIgorX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzPSJvbmVsaW5lIHNob3J0IG1lZGl1bSBmdWxsIGZ1bGxlciByZWZlcmVuY2UgZW1haWwgcmF3IGZvcm1hdDogdGZvcm1hdDogbWJveHJkIgogX19naXRfbG9nX2RhdGVfZm9ybWF0cz0icmVsYXRpdmUgaXNvODYwMSBpc284NjAxLXN0cmljdCByZmMyODIyIHNob3J0IGxvY2FsIGRlZmF1bHQgcmF3IHVuaXggZm9ybWF0OiIKIAogX2dpdF9sb2cgKCkKQEAgLTIwNDMsNiArMjA0MywxMCBAQAogCQlfX2dpdGNvbXAgIiRfX2dpdF93aGl0ZXNwYWNlbGlzdCIgIiIgIiR7Y3VyIyMtLXdoaXRlc3BhY2U9fSIKIAkJcmV0dXJuCiAJCTs7CisJLS1vbnRvPSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiR7Y3VyIyMtLW9udG89fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXBfYnVpbHRpbiByZWJhc2UgIiIgXAogCQkJIiRfX2dpdF9yZWJhc2VfaW50ZXJhY3RpdmVfaW5wcm9ncmVzc19vcHRpb25zIgpAQCAtMjc3OSw3ICsyNzgzLDcgQEAKIHsKIAlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KIAotCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgc3RhdHVzIGluaXQgZGVpbml0IHVwZGF0ZSBzZXQtYnJhbmNoIHN1bW1hcnkgZm9yZWFjaCBzeW5jIGFic29yYmdpdGRpcnMiCisJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBzdGF0dXMgaW5pdCBkZWluaXQgdXBkYXRlIHNldC1icmFuY2ggc2V0LXVybCBzdW1tYXJ5IGZvcmVhY2ggc3luYyBhYnNvcmJnaXRkaXJzIgogCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKIAlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgogCQljYXNlICIkY3VyIiBpbgpAQCAtMjg0Myw2ICsyODQ3LDcgQEAKIAkJCS0tbG9nLXdpbmRvdy1zaXplPSAtLW5vLWNoZWNrb3V0IC0tcXVpZXQKIAkJCS0tcmVwYWNrLWZsYWdzIC0tdXNlLWxvZy1hdXRob3IgLS1sb2NhbHRpbWUKIAkJCS0tYWRkLWF1dGhvci1mcm9tCisJCQktLXJlY3Vyc2l2ZQogCQkJLS1pZ25vcmUtcGF0aHM9IC0taW5jbHVkZS1wYXRocz0gJHJlbW90ZV9vcHRzCiAJCQkiCiAJCWxvY2FsIGluaXRfb3B0cz0iCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQppbmRleCA4ODIzMzk5Li5mNTYzYmU4IDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKQEAgLTk1LDcgKzk1LDcgQEAKICAgICB1bmljb2RlID0gc3RyCiAKICAgICBkZWYgd3JpdGVfc3RyKGYsIG1zZyk6Ci0gICAgICAgICMgVHJ5IG91dHB1dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKKyAgICAgICAgIyBUcnkgb3V0cHV0dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKICAgICAgICAgIyB0cnkgVVRGLTguCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpKSkKQEAgLTIxMjksNyArMjEyOSw3IEBACiAgICAgICAgICAgICAgICAgIyBlcXVpdmFsZW50IHRvCiAgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5zbXRwLmVobG8oKQogICAgICAgICAgICAgICAgICMgICAgIHNlbGYuc210cC5zdGFydHRscygpCi0gICAgICAgICAgICAgICAgIyB3aXRoIGFjY2VzIHRvIHRoZSBzc2wgbGF5ZXIKKyAgICAgICAgICAgICAgICAjIHdpdGggYWNjZXNzIHRvIHRoZSBzc2wgbGF5ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZWhsbygpCiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc210cC5oYXNfZXh0bigic3RhcnR0bHMiKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc210cGxpYi5TTVRQRXhjZXB0aW9uKCJTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIiKQpAQCAtMjE0OCw3ICsyMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FCiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBXYXJuaW5nLCB0aGUgc2VydmVyIGNlcnRpZmljYXQgaXMgbm90IHZlcmlmaWVkIChzbXRwKSAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcqKiogV2FybmluZywgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdmVyaWZpZWQgKHNtdHApICoqKlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiAgICAgICAgICBzZXQgdGhlIG9wdGlvbiBzbXRwQ0FDZXJ0cyAgICAgICAgICAgICAgICAgICAqKipcbicKICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNtdHAuc29jaywgInJlYWQiKToKQEAgLTMxODksNyArMzE4OSw3IEBACiAgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyArPSBbJ3Byb2plY3RkZXNjJ10KIAogICAgIGRlZiBnZXRfcHJvamVjdGRlc2Moc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG9uZS1saW5lIGRlc2NyaXBpdGlvbiBvZiB0aGUgcHJvamVjdC4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3QuIiIiCiAKICAgICAgICAgZ2l0X2RpciA9IGdldF9naXRfZGlyKCkKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQppbmRleCBiOWJiMTE4Li4wZjk4YzVhIDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQpAQCAtNTYsNyArNTYsNyBAQAogCiAjIFNldCBzb21lIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gRXF1aXZhbGVudCB0byBwYXNzaW5nIHZhcj12YWwKICMgdG8gImdpdCAtYyB2YXI9dmFsIiBlYWNoIHRpbWUgZ2l0IGlzIGNhbGxlZCwgb3IgdG8gYWRkaW5nIHRoZQotIyBjb25maWd1cmF0aW9uIGluIC5naXQvY29uZmlnIChtdXN0IGNvbWUgYmVmb3JlIGluc3RhbmNpYXRpbmcgdGhlCisjIGNvbmZpZ3VyYXRpb24gaW4gLmdpdC9jb25maWcgKG11c3QgY29tZSBiZWZvcmUgaW5zdGFudGlhdGluZyB0aGUKICMgZW52aXJvbm1lbnQpIDoKICNnaXRfbXVsdGltYWlsLkNvbmZpZy5hZGRfY29uZmlnX3BhcmFtZXRlcnMoJ211bHRpbWFpbGhvb2suY29tbWl0RW1haWxGb3JtYXQ9aHRtbCcpCiAjZ2l0X211bHRpbWFpbC5Db25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKCgndXNlci5uYW1lPWZvbycsICd1c2VyLmVtYWlsPWZvb0BleGFtcGxlLmNvbScpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAppbmRleCA4NzQ3Yjg0Li5mZjU2NWViIDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMzI5LDcgKzMyOSw3IEBACiAJIwogCSMgIGdpdCByZXYtcGFyc2UgLS1ub3QgLS1hbGwgfCBncmVwIC12ICQoZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSkKIAkjCi0JIyBHZXQncyB1cyB0byBzb21ldGhpbmcgcHJldHR5IHNhZmUgKGFwYXJ0IGZyb20gdGhlIHNtYWxsIHRpbWUKKwkjIEdldHMgdXMgdG8gc29tZXRoaW5nIHByZXR0eSBzYWZlIChhcGFydCBmcm9tIHRoZSBzbWFsbCB0aW1lCiAJIyBiZXR3ZWVuIHJlZm5hbWUgYmVpbmcgcmVhZCwgYW5kIGdpdCByZXYtcGFyc2UgcnVubmluZyAtIGZvciB0aGF0LAogCSMgSSBnaXZlIHVwKQogCSMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKaW5kZXggZDE4YjMxNy4uMDA5MmQ2NyAxMDA3NTUKLS0tIGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKKysrIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKQEAgLTQ5LDcgKzQ5LDcgQEAKIFJlcG9zaXRvcnkgc2VjdGlvbnMgYXJlIG1hdGNoZWQgb24gdGhlIGJhc2VuYW1lIG9mIHRoZSByZXBvc2l0b3J5CiAoYWZ0ZXIgcmVtb3ZpbmcgdGhlIC5naXQgc3VmZml4KS4KIAotVGhlIG9wY29kZSBhYmJyZXZhdGlvbnMgYXJlOgorVGhlIG9wY29kZSBhYmJyZXZpYXRpb25zIGFyZToKIAogICBDOiBjcmVhdGUgbmV3IHJlZgogICBEOiBkZWxldGUgZXhpc3RpbmcgcmVmCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwppbmRleCAxNTg5NThkLi5iNzMzMzI2IDEwMDY0NAotLS0gYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogIyBUaGlzIHJ1bGUgc3RhdGVzIHRoYXQgZWFjaCBzeXN0ZW0gY2FsbCBzaG91bGQgaGF2ZSBpdHMgcmV0dXJuIHZhbHVlIGNoZWNrZWQKICMgVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBpbmNsdWRlcyB0aGUgcHJpbnQgY2FsbC4gQ2hlY2tpbmcgZXZlcnkgcHJpbnQgY2FsbCdzCi0jIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSBjb2RlIHJlYWRhYmlsdHkuCisjIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgogIyBUaGlzIGNvbmZpZ3VyYXRpb24ga2VlcHMgYWxsIGRlZmF1bHQgZnVuY3Rpb24gYnV0IHByaW50LgogW0lucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZFN5c2NhbGxzXQogZnVuY3Rpb25zID0gb3BlbiBzYXkgY2xvc2UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCmluZGV4IGFmOWNiYzkuLmQ4ZmYyZTYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybApAQCAtNzksNyArNzksNyBAQAogJGV4cG9ydF9tZWRpYSA9ICEoJGV4cG9ydF9tZWRpYSBlcSAnZmFsc2UnKTsKIAogbXkgJHdpa2lfbG9naW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdMb2dpbiIpOwotIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJyYWdlZC4gVXNlIHRoZSBjcmVkZW50aWFsIHN5c3RlbSBpbnN0ZWFkLgorIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJhZ2VkLiBVc2UgdGhlIGNyZWRlbnRpYWwgc3lzdGVtIGluc3RlYWQuCiBteSAkd2lraV9wYXNzd2QgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdQYXNzd29yZCIpOwogbXkgJHdpa2lfZG9tYWluID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13RG9tYWluIik7CiBjaG9tcCgkd2lraV9sb2dpbik7CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9kYl9pbnN0YWxsLnBocCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCmluZGV4IDBmM2Y0ZTAuLmIwMzM4NDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCkBAIC0yNCw3ICsyNCw3IEBACiAkZGJfZGlyID0gdXJsZW5jb2RlKCR0bXApOwogJHRtcF9jb29raWUgPSB0ZW1wbmFtKCR0bXAsICJDT09LSUVfIik7CiAvKgotICogRmV0Y2hzIGEgcGFnZSB3aXRoIGNVUkwuCisgKiBGZXRjaGVzIGEgcGFnZSB3aXRoIGNVUkwuCiAgKi8KIGZ1bmN0aW9uIGdldCgkcGFnZV9uYW1lID0gIiIpIHsKIAkkY3VybCA9IGN1cmxfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2MC1tdy10by1naXQtY2xvbmUuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaAppbmRleCBjZmJmZTdkLi45MTA2ODMzIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaApAQCAtMTQzLDcgKzE0Myw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBtdWx0aXBsZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKIAl3aWtpX3Jlc2V0ICYmCiAJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBiZSB0aGVyZSIgZmFsc2UgJiYKLQl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcGVhciIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcHBlYXIiIGZhbHNlICYmCiAJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgYmUgZXJhc2VkIiBmYWxzZSAmJgogCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4geW91IHdpbGwgbm90IGVyYXNlIG1lIiBmYWxzZSAmJgogCXdpa2lfZGVsZXRlX3BhZ2UgbmFtbmFtICYmCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaAppbmRleCA2NTQ2Mjk0Li4zOTQ4YTAwIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKQEAgLTI3OSw3ICsyNzksNyBAQAogCSIkTElHSFRUUERfRElSIi9saWdodHRwZCAtZiAiJFdFQiIvbGlnaHR0cGQuY29uZgogCiAJaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KLQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkZWFtb24gbGlnaHR0cGQiCisJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uIGxpZ2h0dHBkIgogCQlleGl0IDEKIAlmaQogfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvc3ZucmR1bXBfc2ltLnB5IGIvY29udHJpYi9zdm4tZmUvc3ZucmR1bXBfc2ltLnB5CmluZGV4IDUwYzZhNGYuLjhhM2NlZTYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weQorKysgYi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcHJpbnQoInVzYWdlOiAlcyBkdW1wIFVSTCAtckxPV0VSOlVQUEVSIikKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMV0gPT0gJ2R1bXAnOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdvbmx5ICJkdW1wIiBpcyBzdXBwcG9ydGVkLicpCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ29ubHkgImR1bXAiIGlzIHN1cHBvcnRlZC4nKQogICAgIHVybCA9IHN5cy5hcmd2WzJdCiAgICAgciA9ICgnMCcsICdIRUFEJykKICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDQgYW5kIHN5cy5hcmd2WzNdWzA6Ml0gPT0gJy1yJzoKZGlmZiAtLWdpdCBhL2NvbnZlcnQuYyBiL2NvbnZlcnQuYwppbmRleCAyNWFjNTI1Li43OTdlMGJkIDEwMDY0NAotLS0gYS9jb252ZXJ0LmMKKysrIGIvY29udmVydC5jCkBAIC0yNzAsOCArMjcwLDEyIEBACiBzdGF0aWMgaW50IHZhbGlkYXRlX2VuY29kaW5nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmVuYywKIAkJICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgaW50IGRpZV9vbl9lcnJvcikKIHsKKwljb25zdCBjaGFyICpzdHJpcHBlZDsKKwogCS8qIFdlIG9ubHkgY2hlY2sgZm9yIFVURiBoZXJlIGFzIFVURj8/IGNhbiBiZSBhbiBhbGlhcyBmb3IgVVRGLT8/ICovCi0JaWYgKGlzdGFydHNfd2l0aChlbmMsICJVVEYiKSkgeworCWlmIChza2lwX2lwcmVmaXgoZW5jLCAiVVRGIiwgJnN0cmlwcGVkKSkgeworCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOworCiAJCS8qCiAJCSAqIENoZWNrIGZvciBkZXRlY3RhYmxlIGVycm9ycyBpbiBVVEYgZW5jb2RpbmdzCiAJCSAqLwpAQCAtMjg1LDE1ICsyODksMTAgQEAKIAkJCSAqLwogCQkJY29uc3QgY2hhciAqYWR2aXNlX21zZyA9IF8oCiAJCQkJIlRoZSBmaWxlICclcycgY29udGFpbnMgYSBieXRlIG9yZGVyICIKLQkJCQkibWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXMgYXMgIgorCQkJCSJtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKIAkJCQkid29ya2luZy10cmVlLWVuY29kaW5nLiIpOwotCQkJY29uc3QgY2hhciAqc3RyaXBwZWQgPSBOVUxMOwotCQkJY2hhciAqdXBwZXIgPSB4c3RyZHVwX3RvdXBwZXIoZW5jKTsKLQkJCXVwcGVyW3N0cmxlbih1cHBlciktMl0gPSAnXDAnOwotCQkJaWYgKHNraXBfcHJlZml4KHVwcGVyLCAiVVRGIiwgJnN0cmlwcGVkKSkKLQkJCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOwotCQkJYWR2aXNlKGFkdmlzZV9tc2csIHBhdGgsIHN0cmlwcGVkKTsKLQkJCWZyZWUodXBwZXIpOworCQkJaW50IHN0cmlwcGVkX2xlbiA9IHN0cmxlbihzdHJpcHBlZCkgLSBzdHJsZW4oIkJFIik7CisJCQlhZHZpc2UoYWR2aXNlX21zZywgcGF0aCwgc3RyaXBwZWRfbGVuLCBzdHJpcHBlZCk7CiAJCQlpZiAoZGllX29uX2Vycm9yKQogCQkJCWRpZShlcnJvcl9tc2csIHBhdGgsIGVuYyk7CiAJCQllbHNlIHsKQEAgLTMwOCwxMiArMzA3LDcgQEAKIAkJCQkibWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtJXNMRSAiCiAJCQkJIihkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzICIKIAkJCQkid29ya2luZy10cmVlLWVuY29kaW5nLiIpOwotCQkJY29uc3QgY2hhciAqc3RyaXBwZWQgPSBOVUxMOwotCQkJY2hhciAqdXBwZXIgPSB4c3RyZHVwX3RvdXBwZXIoZW5jKTsKLQkJCWlmIChza2lwX3ByZWZpeCh1cHBlciwgIlVURiIsICZzdHJpcHBlZCkpCi0JCQkJc2tpcF9wcmVmaXgoc3RyaXBwZWQsICItIiwgJnN0cmlwcGVkKTsKIAkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZCwgc3RyaXBwZWQpOwotCQkJZnJlZSh1cHBlcik7CiAJCQlpZiAoZGllX29uX2Vycm9yKQogCQkJCWRpZShlcnJvcl9tc2csIHBhdGgsIGVuYyk7CiAJCQllbHNlIHsKQEAgLTQxOCw3ICs0MTIsNyBAQAogCWlmICghZHN0KSB7CiAJCS8qCiAJCSAqIFdlIGNvdWxkIGFkZCB0aGUgYmxvYiAiYXMtaXMiIHRvIEdpdC4gSG93ZXZlciwgb24gY2hlY2tvdXQKLQkJICogd2Ugd291bGQgdHJ5IHRvIHJlZW5jb2RlIHRvIHRoZSBvcmlnaW5hbCBlbmNvZGluZy4gVGhpcworCQkgKiB3ZSB3b3VsZCB0cnkgdG8gcmUtZW5jb2RlIHRvIHRoZSBvcmlnaW5hbCBlbmNvZGluZy4gVGhpcwogCQkgKiB3b3VsZCBmYWlsIGFuZCB3ZSB3b3VsZCBsZWF2ZSB0aGUgdXNlciB3aXRoIGEgbWVzc2VkLXVwCiAJCSAqIHdvcmtpbmcgdHJlZS4gTGV0J3MgdHJ5IHRvIGF2b2lkIHRoaXMgYnkgc2NyZWFtaW5nIGxvdWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5oIGIvY3JlZGVudGlhbC5oCmluZGV4IDZiMGNkMTYuLjU3NzJkNTAgMTAwNjQ0Ci0tLSBhL2NyZWRlbnRpYWwuaAorKysgYi9jcmVkZW50aWFsLmgKQEAgLTMsOCArMywyMDggQEAKIAogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAKKy8qKgorICogVGhlIGNyZWRlbnRpYWxzIEFQSSBwcm92aWRlcyBhbiBhYnN0cmFjdGVkIHdheSBvZiBnYXRoZXJpbmcgdXNlcm5hbWUgYW5kCisgKiBwYXNzd29yZCBjcmVkZW50aWFscyBmcm9tIHRoZSB1c2VyLgorICoKKyAqIFR5cGljYWwgc2V0dXAKKyAqIC0tLS0tLS0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgR2l0IGNvZGUgKEMpICAgICAgICAgIHwtLS0gdG8gc2VydmVyIHJlcXVpcmluZyAtLS0+CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBhdXRoZW50aWNhdGlvbgorICogfC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufAorICogfCBDIGNyZWRlbnRpYWwgQVBJICAgICAgfC0tLSBwcm9tcHQgLS0tPiBVc2VyCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAJXiAgICAgIHwKKyAqIAl8IHBpcGUgfAorICogCXwgICAgICB2CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8IEdpdCBjcmVkZW50aWFsIGhlbHBlciB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgR2l0IGNvZGUgKHR5cGljYWxseSBhIHJlbW90ZS1oZWxwZXIpIHdpbGwgY2FsbCB0aGUgQyBBUEkgdG8gb2J0YWluCisgKiBjcmVkZW50aWFsIGRhdGEgbGlrZSBhIGxvZ2luL3Bhc3N3b3JkIHBhaXIgKGNyZWRlbnRpYWxfZmlsbCkuIFRoZQorICogQVBJIHdpbGwgaXRzZWxmIGNhbGwgYSByZW1vdGUgaGVscGVyIChlLmcuICJnaXQgY3JlZGVudGlhbC1jYWNoZSIgb3IKKyAqICJnaXQgY3JlZGVudGlhbC1zdG9yZSIpIHRoYXQgbWF5IHJldHJpZXZlIGNyZWRlbnRpYWwgZGF0YSBmcm9tIGEKKyAqIHN0b3JlLiBJZiB0aGUgY3JlZGVudGlhbCBoZWxwZXIgY2Fubm90IGZpbmQgdGhlIGluZm9ybWF0aW9uLCB0aGUgQyBBUEkKKyAqIHdpbGwgcHJvbXB0IHRoZSB1c2VyLiBUaGVuLCB0aGUgY2FsbGVyIG9mIHRoZSBBUEkgdGFrZXMgY2FyZSBvZgorICogY29udGFjdGluZyB0aGUgc2VydmVyLCBhbmQgZG9lcyB0aGUgYWN0dWFsIGF1dGhlbnRpY2F0aW9uLgorICoKKyAqIEMgQVBJCisgKiAtLS0tLQorICoKKyAqIFRoZSBjcmVkZW50aWFsIEMgQVBJIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBieSBHaXQgY29kZSB3aGljaCBuZWVkcyB0bworICogYWNxdWlyZSBvciBzdG9yZSBhIGNyZWRlbnRpYWwuIEl0IGlzIGNlbnRlcmVkIGFyb3VuZCBhbiBvYmplY3QKKyAqIHJlcHJlc2VudGluZyBhIHNpbmdsZSBjcmVkZW50aWFsIGFuZCBwcm92aWRlcyB0aHJlZSBiYXNpYyBvcGVyYXRpb25zOgorICogZmlsbCAoYWNxdWlyZSBjcmVkZW50aWFscyBieSBjYWxsaW5nIGhlbHBlcnMgYW5kL29yIHByb21wdGluZyB0aGUgdXNlciksCisgKiBhcHByb3ZlIChtYXJrIGEgY3JlZGVudGlhbCBhcyBzdWNjZXNzZnVsbHkgdXNlZCBzbyB0aGF0IGl0IGNhbiBiZSBzdG9yZWQKKyAqIGZvciBsYXRlciB1c2UpLCBhbmQgcmVqZWN0IChtYXJrIGEgY3JlZGVudGlhbCBhcyB1bnN1Y2Nlc3NmdWwgc28gdGhhdCBpdAorICogY2FuIGJlIGVyYXNlZCBmcm9tIGFueSBwZXJzaXN0ZW50IHN0b3JhZ2UpLgorICoKKyAqIEV4YW1wbGUKKyAqIH5+fn5+fn4KKyAqCisgKiBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgY3JlZGVudGlhbCBBUEkgY291bGQgYmUKKyAqIHVzZWQgdG8gbG9naW4gdG8gYSBmaWN0aXRpb3VzICJmb28iIHNlcnZpY2Ugb24gYSByZW1vdGUgaG9zdDoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IGZvb19sb2dpbihzdHJ1Y3QgZm9vX2Nvbm5lY3Rpb24gKmYpCisgKiB7CisgKiAJaW50IHN0YXR1czsKKyAqIAkvLyBDcmVhdGUgYSBjcmVkZW50aWFsIHdpdGggc29tZSBjb250ZXh0OyB3ZSBkb24ndCB5ZXQga25vdyB0aGUKKyAqIAkvLyB1c2VybmFtZSBvciBwYXNzd29yZC4KKyAqCisgKiBzdHJ1Y3QgY3JlZGVudGlhbCBjID0gQ1JFREVOVElBTF9JTklUOworICogYy5wcm90b2NvbCA9IHhzdHJkdXAoImZvbyIpOworICogYy5ob3N0ID0geHN0cmR1cChmLT5ob3N0bmFtZSk7CisgKgorICogLy8gRmlsbCBpbiB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBieSBjb250YWN0aW5nCisgKiAvLyBoZWxwZXJzIGFuZC9vciBhc2tpbmcgdGhlIHVzZXIuIFRoZSBmdW5jdGlvbiB3aWxsIGRpZSBpZiBpdAorICogLy8gZmFpbHMuCisgKiBjcmVkZW50aWFsX2ZpbGwoJmMpOworICoKKyAqIC8vIE90aGVyd2lzZSwgd2UgaGF2ZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4gVHJ5IHRvIHVzZSBpdC4KKyAqCisgKiBzdGF0dXMgPSBzZW5kX2Zvb19sb2dpbihmLCBjLnVzZXJuYW1lLCBjLnBhc3N3b3JkKTsKKyAqIHN3aXRjaCAoc3RhdHVzKSB7CisgKiBjYXNlIEZPT19PSzoKKyAqIC8vIEl0IHdvcmtlZC4gU3RvcmUgdGhlIGNyZWRlbnRpYWwgZm9yIGxhdGVyIHVzZS4KKyAqIGNyZWRlbnRpYWxfYWNjZXB0KCZjKTsKKyAqIGJyZWFrOworICogY2FzZSBGT09fQkFEX0xPR0lOOgorICogLy8gRXJhc2UgdGhlIGNyZWRlbnRpYWwgZnJvbSBzdG9yYWdlIHNvIHdlIGRvbid0IHRyeSBpdCBhZ2Fpbi4KKyAqIGNyZWRlbnRpYWxfcmVqZWN0KCZjKTsKKyAqIGJyZWFrOworICogZGVmYXVsdDoKKyAqIC8vIFNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQuIFdlIGRvbid0IGtub3cgaWYgdGhlCisgKiAvLyBjcmVkZW50aWFsIGlzIGdvb2Qgb3IgYmFkLCBzbyByZXBvcnQgbm90aGluZyB0byB0aGUKKyAqIC8vIGNyZWRlbnRpYWwgc3Vic3lzdGVtLgorICogfQorICoKKyAqIC8vIEZyZWUgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICogY3JlZGVudGlhbF9jbGVhcigmYyk7CisgKgorICogcmV0dXJuIHN0YXR1czsKKyAqIH0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ3JlZGVudGlhbCBIZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDcmVkZW50aWFsIGhlbHBlcnMgYXJlIHByb2dyYW1zIGV4ZWN1dGVkIGJ5IEdpdCB0byBmZXRjaCBvciBzYXZlCisgKiBjcmVkZW50aWFscyBmcm9tIGFuZCB0byBsb25nLXRlcm0gc3RvcmFnZSAod2hlcmUgImxvbmctdGVybSIgaXMgc2ltcGx5CisgKiBsb25nZXIgdGhhbiBhIHNpbmdsZSBHaXQgcHJvY2VzczsgZS5nLiwgY3JlZGVudGlhbHMgbWF5IGJlIHN0b3JlZAorICogaW4tbWVtb3J5IGZvciBhIGZldyBtaW51dGVzLCBvciBpbmRlZmluaXRlbHkgb24gZGlzaykuCisgKgorICogRWFjaCBoZWxwZXIgaXMgc3BlY2lmaWVkIGJ5IGEgc2luZ2xlIHN0cmluZyBpbiB0aGUgY29uZmlndXJhdGlvbgorICogdmFyaWFibGUgYGNyZWRlbnRpYWwuaGVscGVyYCAoYW5kIG90aGVycywgc2VlIERvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQpLgorICogVGhlIHN0cmluZyBpcyB0cmFuc2Zvcm1lZCBieSBHaXQgaW50byBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgdXNpbmcKKyAqIHRoZXNlIHJ1bGVzOgorICoKKyAqICAgMS4gSWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggIiEiLCBpdCBpcyBjb25zaWRlcmVkIGEgc2hlbGwKKyAqICAgICAgc25pcHBldCwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICIhIiBiZWNvbWVzIHRoZSBjb21tYW5kLgorICoKKyAqICAgMi4gT3RoZXJ3aXNlLCBpZiB0aGUgaGVscGVyIHN0cmluZyBiZWdpbnMgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGUKKyAqICAgICAgdmVyYmF0aW0gaGVscGVyIHN0cmluZyBiZWNvbWVzIHRoZSBjb21tYW5kLgorICoKKyAqICAgMy4gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nICJnaXQgY3JlZGVudGlhbC0iIGlzIHByZXBlbmRlZCB0byB0aGUgaGVscGVyCisgKiAgICAgIHN0cmluZywgYW5kIHRoZSByZXN1bHQgYmVjb21lcyB0aGUgY29tbWFuZC4KKyAqCisgKiBUaGUgcmVzdWx0aW5nIGNvbW1hbmQgdGhlbiBoYXMgYW4gIm9wZXJhdGlvbiIgYXJndW1lbnQgYXBwZW5kZWQgdG8gaXQKKyAqIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLCBhbmQgdGhlIHJlc3VsdCBpcyBleGVjdXRlZCBieSB0aGUgc2hlbGwuCisgKgorICogSGVyZSBhcmUgc29tZSBleGFtcGxlIHNwZWNpZmljYXRpb25zOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICMgcnVuICJnaXQgY3JlZGVudGlhbC1mb28iCisgKiBmb28KKyAqCisgKiAjIHNhbWUgYXMgYWJvdmUsIGJ1dCBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBoZWxwZXIKKyAqIGZvbyAtLWJhcj1iYXoKKyAqCisgKiAjIHRoZSBhcmd1bWVudHMgYXJlIHBhcnNlZCBieSB0aGUgc2hlbGwsIHNvIHVzZSBzaGVsbAorICogIyBxdW90aW5nIGlmIG5lY2Vzc2FyeQorICogZm9vIC0tYmFyPSJ3aGl0ZXNwYWNlIGFyZyIKKyAqCisgKiAjIHlvdSBjYW4gYWxzbyB1c2UgYW4gYWJzb2x1dGUgcGF0aCwgd2hpY2ggd2lsbCBub3QgdXNlIHRoZSBnaXQgd3JhcHBlcgorICogL3BhdGgvdG8vbXkvaGVscGVyIC0td2l0aC1hcmd1bWVudHMKKyAqCisgKiAjIG9yIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBzaGVsbCBzbmlwcGV0CisgKiAhZigpIHsgZWNobyAicGFzc3dvcmQ9YGNhdCAkSE9NRS8uc2VjcmV0YCI7IH07IGYKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBHZW5lcmFsbHkgc3BlYWtpbmcsIHJ1bGUgKDMpIGFib3ZlIGlzIHRoZSBzaW1wbGVzdCBmb3IgdXNlcnMgdG8gc3BlY2lmeS4KKyAqIEF1dGhvcnMgb2YgY3JlZGVudGlhbCBoZWxwZXJzIHNob3VsZCBtYWtlIGFuIGVmZm9ydCB0byBhc3Npc3QgdGhlaXIKKyAqIHVzZXJzIGJ5IG5hbWluZyB0aGVpciBwcm9ncmFtICJnaXQtY3JlZGVudGlhbC0kTkFNRSIsIGFuZCBwdXR0aW5nIGl0IGluCisgKiB0aGUgJFBBVEggb3IgJEdJVF9FWEVDX1BBVEggZHVyaW5nIGluc3RhbGxhdGlvbiwgd2hpY2ggd2lsbCBhbGxvdyBhIHVzZXIKKyAqIHRvIGVuYWJsZSBpdCB3aXRoIGBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICROQU1FYC4KKyAqCisgKiBXaGVuIGEgaGVscGVyIGlzIGV4ZWN1dGVkLCBpdCB3aWxsIGhhdmUgb25lICJvcGVyYXRpb24iIGFyZ3VtZW50CisgKiBhcHBlbmRlZCB0byBpdHMgY29tbWFuZCBsaW5lLCB3aGljaCBpcyBvbmUgb2Y6CisgKgorICogYGdldGA6OgorICoKKyAqIAlSZXR1cm4gYSBtYXRjaGluZyBjcmVkZW50aWFsLCBpZiBhbnkgZXhpc3RzLgorICoKKyAqIGBzdG9yZWA6OgorICoKKyAqIAlTdG9yZSB0aGUgY3JlZGVudGlhbCwgaWYgYXBwbGljYWJsZSB0byB0aGUgaGVscGVyLgorICoKKyAqIGBlcmFzZWA6OgorICoKKyAqIAlSZW1vdmUgYSBtYXRjaGluZyBjcmVkZW50aWFsLCBpZiBhbnksIGZyb20gdGhlIGhlbHBlcidzIHN0b3JhZ2UuCisgKgorICogVGhlIGRldGFpbHMgb2YgdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgaGVscGVyJ3Mgc3RkaW4KKyAqIHN0cmVhbS4gVGhlIGV4YWN0IGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQvb3V0cHV0IGZvcm1hdCBvZiB0aGUKKyAqIGBnaXQgY3JlZGVudGlhbGAgcGx1bWJpbmcgY29tbWFuZCAoc2VlIHRoZSBzZWN0aW9uIGBJTlBVVC9PVVRQVVQKKyAqIEZPUk1BVGAgaW4gRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC50eHQgZm9yIGEgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbikuCisgKgorICogRm9yIGEgYGdldGAgb3BlcmF0aW9uLCB0aGUgaGVscGVyIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiBhdHRyaWJ1dGVzCisgKiBvbiBzdGRvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LiBBIGhlbHBlciBpcyBmcmVlIHRvIHByb2R1Y2UgYSBzdWJzZXQsIG9yCisgKiBldmVuIG5vIHZhbHVlcyBhdCBhbGwgaWYgaXQgaGFzIG5vdGhpbmcgdXNlZnVsIHRvIHByb3ZpZGUuIEFueSBwcm92aWRlZAorICogYXR0cmlidXRlcyB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBhbHJlYWR5IGtub3duIGFib3V0IGJ5IEdpdC4gIElmIGEgaGVscGVyCisgKiBvdXRwdXRzIGEgYHF1aXRgIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgYHRydWVgIG9yIGAxYCwgbm8gZnVydGhlcgorICogaGVscGVycyB3aWxsIGJlIGNvbnN1bHRlZCwgbm9yIHdpbGwgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgKGlmIG5vCisgKiBjcmVkZW50aWFsIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgb3BlcmF0aW9uIHdpbGwgdGhlbiBmYWlsKS4KKyAqCisgKiBGb3IgYSBgc3RvcmVgIG9yIGBlcmFzZWAgb3BlcmF0aW9uLCB0aGUgaGVscGVyJ3Mgb3V0cHV0IGlzIGlnbm9yZWQuCisgKiBJZiBpdCBmYWlscyB0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLCBpdCBtYXkgY29tcGxhaW4gdG8KKyAqIHN0ZGVyciB0byBpbmZvcm0gdGhlIHVzZXIuIElmIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZAorICogb3BlcmF0aW9uIChlLmcuLCBhIHJlYWQtb25seSBzdG9yZSksIGl0IHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlCisgKiByZXF1ZXN0LgorICoKKyAqIElmIGEgaGVscGVyIHJlY2VpdmVzIGFueSBvdGhlciBvcGVyYXRpb24sIGl0IHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlCisgKiByZXF1ZXN0LiBUaGlzIGxlYXZlcyByb29tIGZvciBmdXR1cmUgb3BlcmF0aW9ucyB0byBiZSBhZGRlZCAob2xkZXIKKyAqIGhlbHBlcnMgd2lsbCBqdXN0IGlnbm9yZSB0aGUgbmV3IHJlcXVlc3RzKS4KKyAqCisgKi8KKworCisvKioKKyAqIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgYSBzaW5nbGUgdXNlcm5hbWUvcGFzc3dvcmQgY29tYmluYXRpb24KKyAqIGFsb25nIHdpdGggYW55IGFzc29jaWF0ZWQgY29udGV4dC4gQWxsIHN0cmluZyBmaWVsZHMgc2hvdWxkIGJlCisgKiBoZWFwLWFsbG9jYXRlZCAob3IgTlVMTCBpZiB0aGV5IGFyZSBub3Qga25vd24gb3Igbm90IGFwcGxpY2FibGUpLgorICogVGhlIG1lYW5pbmcgb2YgdGhlIGluZGl2aWR1YWwgY29udGV4dCBmaWVsZHMgaXMgdGhlIHNhbWUgYXMKKyAqIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiB0aGUgaGVscGVyIHByb3RvY29sLgorICoKKyAqIFRoaXMgc3RydWN0IHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgQ1JFREVOVElBTF9JTklUYCBvcgorICogYGNyZWRlbnRpYWxfaW5pdGAuCisgKi8KIHN0cnVjdCBjcmVkZW50aWFsIHsKKworCS8qKgorCSAqIEEgYHN0cmluZ19saXN0YCBvZiBoZWxwZXJzLiBFYWNoIHN0cmluZyBzcGVjaWZpZXMgYW4gZXh0ZXJuYWwKKwkgKiBoZWxwZXIgd2hpY2ggd2lsbCBiZSBydW4sIGluIG9yZGVyLCB0byBlaXRoZXIgYWNxdWlyZSBvciBzdG9yZQorCSAqIGNyZWRlbnRpYWxzLiBUaGlzIGxpc3QgaXMgZmlsbGVkLWluIGJ5IHRoZSBBUEkgZnVuY3Rpb25zCisJICogYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGJlZm9yZQorCSAqIGNvbnN1bHRpbmcgaGVscGVycywgc28gdGhlcmUgdXN1YWxseSBpcyBubyBuZWVkIGZvciBhIGNhbGxlciB0bworCSAqIG1vZGlmeSB0aGUgaGVscGVycyBmaWVsZCBhdCBhbGwuCisJICovCiAJc3RydWN0IHN0cmluZ19saXN0IGhlbHBlcnM7CisKIAl1bnNpZ25lZCBhcHByb3ZlZDoxLAogCQkgY29uZmlndXJlZDoxLAogCQkgcXVpdDoxLApAQCAtMTksMTYgKzIxOSw1MiBAQAogCiAjZGVmaW5lIENSRURFTlRJQUxfSU5JVCB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH0KIAorLyogSW5pdGlhbGl6ZSBhIGNyZWRlbnRpYWwgc3RydWN0dXJlLCBzZXR0aW5nIGFsbCBmaWVsZHMgdG8gZW1wdHkuICovCiB2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBGcmVlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgcmV0dXJuaW5nCisgKiBpdCB0byBhIHByaXN0aW5lIGluaXRpYWxpemVkIHN0YXRlLgorICovCiB2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKik7CiAKKy8qKgorICogSW5zdHJ1Y3QgdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRvIGZpbGwgdGhlIHVzZXJuYW1lIGFuZAorICogcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBwYXNzZWQgY3JlZGVudGlhbCBzdHJ1Y3QgYnkgZmlyc3QKKyAqIGNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMsIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBjcmVkZW50aWFsIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTC4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZnVuY3Rpb24gd2lsbAorICogZGllKCkuCisgKi8KIHZvaWQgY3JlZGVudGlhbF9maWxsKHN0cnVjdCBjcmVkZW50aWFsICopOworCisvKioKKyAqIEluZm9ybSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdGhhdCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMKKyAqIHdlcmUgc3VjY2Vzc2Z1bGx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLiAgVGhpcyB3aWxsIGNhdXNlIHRoZQorICogY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KKyAqIHRoYXQgdGhleSBtYXkgc3RvcmUgdGhlIHJlc3VsdCB0byBiZSB1c2VkIGFnYWluLiAgQW55IGVycm9ycworICogZnJvbSBoZWxwZXJzIGFyZSBpZ25vcmVkLgorICovCiB2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCisgKiBoYXZlIGJlZW4gcmVqZWN0ZWQuIFRoaXMgd2lsbCBjYXVzZSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8KKyAqIG5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCisgKiBleGFtcGxlLCB0byBwdXJnZSB0aGUgaW52YWxpZCBjcmVkZW50aWFscyBmcm9tIHN0b3JhZ2UpLiBJdAorICogd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKKyAqIGNyZWRlbnRpYWwgYW5kIHNldCB0aGVtIHRvIE5VTEwgKHJlYWR5aW5nIHRoZSBjcmVkZW50aWFsIGZvcgorICogYW5vdGhlciBjYWxsIHRvIGBjcmVkZW50aWFsX2ZpbGxgKS4gQW55IGVycm9ycyBmcm9tIGhlbHBlcnMgYXJlCisgKiBpZ25vcmVkLgorICovCiB2b2lkIGNyZWRlbnRpYWxfcmVqZWN0KHN0cnVjdCBjcmVkZW50aWFsICopOwogCiBpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICosIEZJTEUgKik7CiB2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKKworLyogUGFyc2UgYSBVUkwgaW50byBicm9rZW4tZG93biBjcmVkZW50aWFsIGZpZWxkcy4gKi8KIHZvaWQgY3JlZGVudGlhbF9mcm9tX3VybChzdHJ1Y3QgY3JlZGVudGlhbCAqLCBjb25zdCBjaGFyICp1cmwpOworCiBpbnQgY3JlZGVudGlhbF9tYXRjaChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqaGF2ZSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqd2FudCk7CiAKZGlmZiAtLWdpdCBhL2RhZW1vbi5jIGIvZGFlbW9uLmMKaW5kZXggOWQyZTBkMi4uZmQ2NjllZCAxMDA2NDQKLS0tIGEvZGFlbW9uLmMKKysrIGIvZGFlbW9uLmMKQEAgLTU5OCw3ICs1OTgsNyBAQAogICogUmVhZCB0aGUgaG9zdCBhcyBzdXBwbGllZCBieSB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgKgogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgTlVMIGJ5dGUgdGVybWluYXRpbmcgdGhlIGhvc3QKLSAqIGFyZ3VlbW50LCBvciAnZXh0cmFfYXJncycgaWYgdGhlcmUgaXMgbm8gaG9zdCBhcmd1ZW1udC4KKyAqIGFyZ3VtZW50LCBvciAnZXh0cmFfYXJncycgaWYgdGhlcmUgaXMgbm8gaG9zdCBhcmd1bWVudC4KICAqLwogc3RhdGljIGNoYXIgKnBhcnNlX2hvc3RfYXJnKHN0cnVjdCBob3N0aW5mbyAqaGksIGNoYXIgKmV4dHJhX2FyZ3MsIGludCBidWZsZW4pCiB7CkBAIC02NTIsNyArNjUyLDcgQEAKIAkJICogc2VydmljZSB0aGF0IHdpbGwgYmUgcnVuLgogCQkgKgogCQkgKiBJZiB0aGVyZSBlbmRzIHVwIGJlaW5nIGEgcGFydGljdWxhciBhcmcgaW4gdGhlIGZ1dHVyZSB0aGF0Ci0JCSAqIGdpdC1kYWVtb24gbmVlZHMgdG8gcGFyc2Ugc3BlY2lmaWNseSAobGlrZSB0aGUgJ2hvc3QnIGFyZykKKwkJICogZ2l0LWRhZW1vbiBuZWVkcyB0byBwYXJzZSBzcGVjaWZpY2FsbHkgKGxpa2UgdGhlICdob3N0JyBhcmcpCiAJCSAqIHRoZW4gaXQgY2FuIGJlIHBhcnNlZCBoZXJlIGFuZCBub3QgYWRkZWQgdG8gJ2dpdF9wcm90b2NvbCcuCiAJCSAqLwogCQlpZiAoKmFyZykgewpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IDA0MWRiN2QuLmIwZDlhODQgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTY0LDE2ICs2NCwxNiBAQAogICogdGhpbmcsIHdoaWNoIG1lYW5zIHRoYXQgdHogLTAxMDAgaXMgcGFzc2VkIGluIGFzIHRoZSBpbnRlZ2VyIC0xMDAsCiAgKiBldmVuIHRob3VnaCBpdCBtZWFucyAic2l4dHkgbWludXRlcyBvZmYiCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdG0gKnRpbWVfdG9fdG0odGltZXN0YW1wX3QgdGltZSwgaW50IHR6KQorc3RhdGljIHN0cnVjdCB0bSAqdGltZV90b190bSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHosIHN0cnVjdCB0bSAqdG0pCiB7CiAJdGltZV90IHQgPSBnbV90aW1lX3QodGltZSwgdHopOwotCXJldHVybiBnbXRpbWUoJnQpOworCXJldHVybiBnbXRpbWVfcigmdCwgdG0pOwogfQogCi1zdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtX2xvY2FsKHRpbWVzdGFtcF90IHRpbWUpCitzdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtX2xvY2FsKHRpbWVzdGFtcF90IHRpbWUsIHN0cnVjdCB0bSAqdG0pCiB7CiAJdGltZV90IHQgPSB0aW1lOwotCXJldHVybiBsb2NhbHRpbWUoJnQpOworCXJldHVybiBsb2NhbHRpbWVfcigmdCwgdG0pOwogfQogCiAvKgpAQCAtMjgzLDYgKzI4Myw3IEBACiBjb25zdCBjaGFyICpzaG93X2RhdGUodGltZXN0YW1wX3QgdGltZSwgaW50IHR6LCBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKQogewogCXN0cnVjdCB0bSAqdG07CisJc3RydWN0IHRtIHRtYnVmID0geyAwIH07CiAJc3RydWN0IHRtIGh1bWFuX3RtID0geyAwIH07CiAJaW50IGh1bWFuX3R6ID0gLTE7CiAJc3RhdGljIHN0cnVjdCBzdHJidWYgdGltZWJ1ZiA9IFNUUkJVRl9JTklUOwpAQCAtMzE4LDExICszMTksMTEgQEAKIAl9CiAKIAlpZiAobW9kZS0+bG9jYWwpCi0JCXRtID0gdGltZV90b190bV9sb2NhbCh0aW1lKTsKKwkJdG0gPSB0aW1lX3RvX3RtX2xvY2FsKHRpbWUsICZ0bWJ1Zik7CiAJZWxzZQotCQl0bSA9IHRpbWVfdG9fdG0odGltZSwgdHopOworCQl0bSA9IHRpbWVfdG9fdG0odGltZSwgdHosICZ0bWJ1Zik7CiAJaWYgKCF0bSkgewotCQl0bSA9IHRpbWVfdG9fdG0oMCwgMCk7CisJCXRtID0gdGltZV90b190bSgwLCAwLCAmdG1idWYpOwogCQl0eiA9IDA7CiAJfQogCkBAIC05NTksMTAgKzk2MCwxMSBAQAogewogCXRpbWVfdCBub3c7CiAJaW50IG9mZnNldDsKKwlzdHJ1Y3QgdG0gdG0gPSB7IDAgfTsKIAogCXRpbWUoJm5vdyk7CiAKLQlvZmZzZXQgPSB0bV90b190aW1lX3QobG9jYWx0aW1lKCZub3cpKSAtIG5vdzsKKwlvZmZzZXQgPSB0bV90b190aW1lX3QobG9jYWx0aW1lX3IoJm5vdywgJnRtKSkgLSBub3c7CiAJb2Zmc2V0IC89IDYwOwogCiAJZGF0ZV9zdHJpbmcobm93LCBvZmZzZXQsIG91dCk7CmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKaW5kZXggYWZlNDQwMC4uOGUyOTE0YyAxMDA2NDQKLS0tIGEvZGlmZi5jCisrKyBiL2RpZmYuYwpAQCAtMjQ5NSwyMiArMjQ5NSw2IEBACiAJfQogfQogCi1zdHJ1Y3QgZGlmZnN0YXRfdCB7Ci0JaW50IG5yOwotCWludCBhbGxvYzsKLQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSB7Ci0JCWNoYXIgKmZyb21fbmFtZTsKLQkJY2hhciAqbmFtZTsKLQkJY2hhciAqcHJpbnRfbmFtZTsKLQkJY29uc3QgY2hhciAqY29tbWVudHM7Ci0JCXVuc2lnbmVkIGlzX3VubWVyZ2VkOjE7Ci0JCXVuc2lnbmVkIGlzX2JpbmFyeToxOwotCQl1bnNpZ25lZCBpc19yZW5hbWVkOjE7Ci0JCXVuc2lnbmVkIGlzX2ludGVyZXN0aW5nOjE7Ci0JCXVpbnRtYXhfdCBhZGRlZCwgZGVsZXRlZDsKLQl9ICoqZmlsZXM7Ci19OwotCiBzdGF0aWMgc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmRpZmZzdGF0X2FkZChzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9hLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWVfYikKQEAgLTI1NTEsNyArMjUzNSw3IEBACiAJLyoKIAkgKiBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgJy0nIG9yICcrJyBpcyBwcmludGVkIGlmCiAJICogdGhlcmUgaXMgYW55IGNoYW5nZSB0byB0aGlzIHBhdGguIFRoZSBlYXNpZXN0IHdheSBpcyB0bwotCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdGVkIHdpZHRoIGlzIG9uZSBjb2x1bW4gc2hvcnRlcgorCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdHRlZCB3aWR0aCBpcyBvbmUgY29sdW1uIHNob3J0ZXIKIAkgKiB0aGFuIGl0IGlzLCBhbmQgdGhlbiBhZGQgMSB0byB0aGUgcmVzdWx0LgogCSAqLwogCXJldHVybiAxICsgKGl0ICogKHdpZHRoIC0gMSkgLyBtYXhfY2hhbmdlKTsKQEAgLTMxNTcsNyArMzE0MSw3IEBACiAJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucywgJmRpciwgY2hhbmdlZCwgIiIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQordm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBkaWZmc3RhdC0+bnI7IGkrKykgewpAQCAtMzE5Niw3ICszMTgwLDcgQEAKIAlmb3IgKGNudCA9IDE7IGNudCA8IG1hcmtlcl9zaXplOyBjbnQrKykKIAkJaWYgKGxpbmVbY250XSAhPSBmaXJzdGNoYXIpCiAJCQlyZXR1cm4gMDsKLQkvKiBsaW5lWzFdIHRocnUgbGluZVttYXJrZXJfc2l6ZS0xXSBhcmUgc2FtZSBhcyBmaXJzdGNoYXIgKi8KKwkvKiBsaW5lWzFdIHRocm91Z2ggbGluZVttYXJrZXJfc2l6ZS0xXSBhcmUgc2FtZSBhcyBmaXJzdGNoYXIgKi8KIAlpZiAobGVuIDwgbWFya2VyX3NpemUgKyAxIHx8ICFpc3NwYWNlKGxpbmVbbWFya2VyX3NpemVdKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CkBAIC02MjgzLDEyICs2MjY3LDcgQEAKIAkgICAgZGlyc3RhdF9ieV9saW5lKSB7CiAJCXN0cnVjdCBkaWZmc3RhdF90IGRpZmZzdGF0OwogCi0JCW1lbXNldCgmZGlmZnN0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZGlmZnN0YXRfdCkpOwotCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgewotCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKLQkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKLQkJCQlkaWZmX2ZsdXNoX3N0YXQocCwgb3B0aW9ucywgJmRpZmZzdGF0KTsKLQkJfQorCQljb21wdXRlX2RpZmZzdGF0KG9wdGlvbnMsICZkaWZmc3RhdCwgcSk7CiAJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTlVNU1RBVCkKIAkJCXNob3dfbnVtc3RhdCgmZGlmZnN0YXQsIG9wdGlvbnMpOwogCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJRkZTVEFUKQpAQCAtNjYyMSw2ICs2NjAwLDIwIEBACiAJcmV0dXJuIGlnbm9yZWQ7CiB9CiAKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgICBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKworCW1lbXNldChkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJZGlmZl9mbHVzaF9zdGF0KHAsIG9wdGlvbnMsIGRpZmZzdGF0KTsKKwl9Cit9CisKIHZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCiAJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggN2Y4ZjAyNC4uNmZlYmU3ZSAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtOSw2ICs5LDQ5IEBACiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2lkc2V0LmgiCiAKKy8qKgorICogVGhlIGRpZmYgQVBJIGlzIGZvciBwcm9ncmFtcyB0aGF0IGNvbXBhcmUgdHdvIHNldHMgb2YgZmlsZXMgKGUuZy4gdHdvIHRyZWVzLAorICogb25lIHRyZWUgYW5kIHRoZSBpbmRleCkgYW5kIHByZXNlbnQgdGhlIGZvdW5kIGRpZmZlcmVuY2UgaW4gdmFyaW91cyB3YXlzLgorICogVGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyByZXNwb25zaWJsZSBmb3IgZmVlZGluZyB0aGUgQVBJIHBhaXJzIG9mIGZpbGVzLCBvbmUKKyAqIGZyb20gdGhlICJvbGQiIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb25lIGZyb20gIm5ldyIgc2V0LCB0aGF0IGFyZQorICogZGlmZmVyZW50LgorICogVGhlIGxpYnJhcnkgY2FsbGVkIHRocm91Z2ggdGhpcyBBUEkgaXMgY2FsbGVkIGRpZmZjb3JlLCBhbmQgaXMgcmVzcG9uc2libGUKKyAqIGZvciB0d28gdGhpbmdzLgorICoKKyAqIC0gZmluZGluZyB0b3RhbCByZXdyaXRlcyAoYC1CYCksIHJlbmFtZXMgKGAtTWApIGFuZCBjb3BpZXMgKGAtQ2ApLCBhbmQKKyAqIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHN0cmluZyAoYC1TYCksIGFzIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIC0gb3V0cHV0dGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gdmFyaW91cyBmb3JtYXRzLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogLSBQcmVwYXJlIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYCB0byByZWNvcmQgdGhlIHNldCBvZiBkaWZmIG9wdGlvbnMsIGFuZCB0aGVuCisgKiBjYWxsIGByZXBvX2RpZmZfc2V0dXAoKWAgdG8gaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4gIFRoaXMgc2V0cyB1cCB0aGUKKyAqIHZhbmlsbGEgZGVmYXVsdC4KKyAqCisgKiAtIEZpbGwgaW4gdGhlIG9wdGlvbnMgc3RydWN0dXJlIHRvIHNwZWNpZnkgZGVzaXJlZCBvdXRwdXQgZm9ybWF0LCByZW5hbWUKKyAqIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KKyAqIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbiBhIHdheSBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZ2l0LWRpZmYgZmFtaWx5CisgKiBvZiBwcm9ncmFtcy4KKyAqCisgKiAtIENhbGwgYGRpZmZfc2V0dXBfZG9uZSgpYDsgdGhpcyBpbnNwZWN0cyB0aGUgb3B0aW9ucyBzZXQgdXAgc28gZmFyIGZvcgorICogaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG1ha2UgbmVjZXNzYXJ5IHR3ZWFraW5nIHRvIGl0IChlLmcuIGlmIHRleHR1YWwKKyAqIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKTsgdGhlIGNhbGxiYWNrCisgKiBzZXRfZGVmYXVsdCBpbiBkaWZmX29wdGlvbnMgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhpcyBtb3JlLgorICoKKyAqIC0gQXMgeW91IGZpbmQgZGlmZmVyZW50IHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmX2NoYW5nZSgpYCB0byBmZWVkCisgKiBtb2RpZmllZCBmaWxlcywgYGRpZmZfYWRkcmVtb3ZlKClgIHRvIGZlZWQgY3JlYXRlZCBvciBkZWxldGVkIGZpbGVzLCBvcgorICogYGRpZmZfdW5tZXJnZSgpYCB0byBmZWVkIGEgZmlsZSB3aG9zZSBzdGF0ZSBpcyAndW5tZXJnZWQnIHRvIHRoZSBBUEkuCisgKiBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyB0byBhIGxvd2VyLWxldmVsIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHRoYXQgaXMKKyAqIGZsZXhpYmxlIGVub3VnaCB0byByZWNvcmQgYW55IG9mIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMuCisgKgorICogLSBPbmNlIHlvdSBmaW5pc2ggZmVlZGluZyB0aGUgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZjb3JlX3N0ZCgpYC4KKyAqIFRoaXMgd2lsbCB0ZWxsIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRvIGdvIGFoZWFkIGFuZCBkbyBpdHMgd29yay4KKyAqCisgKiAtIENhbGxpbmcgYGRpZmZfZmx1c2goKWAgd2lsbCBwcm9kdWNlIHRoZSBvdXRwdXQuCisgKi8KKwogc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoOwogc3RydWN0IGNvbW1pdDsKIHN0cnVjdCBkaWZmX2ZpbGVzcGVjOwpAQCAtNjUsMjEgKzEwOCw2NiBAQAogCiAjZGVmaW5lIERJRkZfRkxBR1NfSU5JVCB7IDAgfQogc3RydWN0IGRpZmZfZmxhZ3MgeworCisJLyoqCisJICogVGVsbHMgaWYgdHJlZSB0cmF2ZXJzYWwgZG9uZSBieSB0cmVlLWRpZmYgc2hvdWxkIHJlY3Vyc2l2ZWx5IGRlc2NlbmQKKwkgKiBpbnRvIGEgdHJlZSBvYmplY3QgcGFpciB0aGF0IGFyZSBkaWZmZXJlbnQgaW4gcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBzZXQuCisJICovCiAJdW5zaWduZWQgcmVjdXJzaXZlOwogCXVuc2lnbmVkIHRyZWVfaW5fcmVjdXJzaXZlOworCisJLyogQWZmZWN0cyB0aGUgd2F5IGhvdyBhIGZpbGUgdGhhdCBpcyBzZWVtaW5nbHkgYmluYXJ5IGlzIHRyZWF0ZWQuICovCiAJdW5zaWduZWQgYmluYXJ5OwogCXVuc2lnbmVkIHRleHQ7CisKKwkvKioKKwkgKiBUZWxscyB0aGUgcGF0Y2ggb3V0cHV0IGZvcm1hdCBub3QgdG8gdXNlIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyBvbiB0aGUKKwkgKiAiaW5kZXgiIGxpbmVzLgorCSAqLwogCXVuc2lnbmVkIGZ1bGxfaW5kZXg7CisKKwkvKiBBZmZlY3RzIGlmIGRpZmYtZmlsZXMgc2hvd3MgcmVtb3ZlZCBmaWxlcy4gKi8KIAl1bnNpZ25lZCBzaWxlbnRfb25fcmVtb3ZlOworCisJLyoqCisJICogVGVsbHMgdGhlIGRpZmZjb3JlIGxpYnJhcnkgdGhhdCB0aGUgY2FsbGVyIGlzIGZlZWRpbmcgdW5jaGFuZ2VkCisJICogZmlsZXBhaXJzIHRvIGFsbG93IGNvcGllcyBmcm9tIHVubW9kaWZpZWQgZmlsZXMgYmUgZGV0ZWN0ZWQuCisJICovCiAJdW5zaWduZWQgZmluZF9jb3BpZXNfaGFyZGVyOworCiAJdW5zaWduZWQgZm9sbG93X3JlbmFtZXM7CiAJdW5zaWduZWQgcmVuYW1lX2VtcHR5OworCisJLyogSW50ZXJuYWw7IHVzZWQgZm9yIG9wdGltaXphdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZS4gKi8KIAl1bnNpZ25lZCBoYXNfY2hhbmdlczsKKwogCXVuc2lnbmVkIHF1aWNrOworCisJLyoqCisJICogVGVsbHMgZGlmZi1maWxlcyB0aGF0IHRoZSBpbnB1dCBpcyBub3QgdHJhY2tlZCBmaWxlcyBidXQgZmlsZXMgaW4gcmFuZG9tCisJICogbG9jYXRpb25zIG9uIHRoZSBmaWxlc3lzdGVtLgorCSAqLwogCXVuc2lnbmVkIG5vX2luZGV4OworCisJLyoqCisJICogVGVsbHMgb3V0cHV0IHJvdXRpbmUgdGhhdCBpdCBpcyBPayB0byBjYWxsIHVzZXIgc3BlY2lmaWVkIHBhdGNoIG91dHB1dAorCSAqIHJvdXRpbmUuICBQbHVtYmluZyBkaXNhYmxlcyB0aGlzIHRvIGVuc3VyZSBzdGFibGUgb3V0cHV0LgorCSAqLwogCXVuc2lnbmVkIGFsbG93X2V4dGVybmFsOworCisJLyoqCisJICogRm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGluZyBwcm9ncmFtIGFuZCB0aGUgb3B0aW9ucyBwYXJzZXI7CisJICogdGVsbCB0aGUgY2FsbGluZyBwcm9ncmFtIHRvIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2YgZGlmZmVyZW5jZSB1c2luZworCSAqIHByb2dyYW0gZXhpdCBjb2RlLgorCSAqLwogCXVuc2lnbmVkIGV4aXRfd2l0aF9zdGF0dXM7CisKKwkvKioKKwkgKiBUZWxscyB0aGUgbGlicmFyeSB0aGF0IHRoZSBjYWxsaW5nIHByb2dyYW0gaXMgZmVlZGluZyB0aGUgZmlsZXBhaXJzCisJICogcmV2ZXJzZWQ7IGBvbmVgIGlzIHR3bywgYW5kIGB0d29gIGlzIG9uZS4KKwkgKi8KIAl1bnNpZ25lZCByZXZlcnNlX2RpZmY7CisKIAl1bnNpZ25lZCBjaGVja19mYWlsZWQ7CiAJdW5zaWduZWQgcmVsYXRpdmVfbmFtZTsKIAl1bnNpZ25lZCBpZ25vcmVfc3VibW9kdWxlczsKQEAgLTEzMSwzNiArMjE5LDcyIEBACiAJRElGRl9TVUJNT0RVTEVfSU5MSU5FX0RJRkYKIH07CiAKKy8qKgorICogdGhlIHNldCBvZiBvcHRpb25zIHRoZSBjYWxsaW5nIHByb2dyYW0gd2FudHMgdG8gYWZmZWN0IHRoZSBvcGVyYXRpb24gb2YKKyAqIGRpZmZjb3JlIGxpYnJhcnkgd2l0aC4KKyAqLwogc3RydWN0IGRpZmZfb3B0aW9ucyB7CiAJY29uc3QgY2hhciAqb3JkZXJmaWxlOworCisJLyoqCisJICogQSBjb25zdGFudCBzdHJpbmcgKGNhbiBhbmQgdHlwaWNhbGx5IGRvZXMgY29udGFpbiBuZXdsaW5lcyB0byBsb29rIGZvcgorCSAqIGEgYmxvY2sgb2YgdGV4dCwgbm90IGp1c3QgYSBzaW5nbGUgbGluZSkgdG8gZmlsdGVyIG91dCB0aGUgZmlsZXBhaXJzCisJICogdGhhdCBkbyBub3QgY2hhbmdlIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBjb250YWluZWQgaW4gaXRzIHByZWltYWdlIGFuZAorCSAqIHBvc3RpbWFnZSBvZiB0aGUgZGlmZl9xdWV1ZS4KKwkgKi8KIAljb25zdCBjaGFyICpwaWNrYXhlOworCiAJY29uc3QgY2hhciAqc2luZ2xlX2ZvbGxvdzsKIAljb25zdCBjaGFyICphX3ByZWZpeCwgKmJfcHJlZml4OwogCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4OwogCXNpemVfdCBsaW5lX3ByZWZpeF9sZW5ndGg7CisKKwkvKioKKwkgKiBjb2xsZWN0aW9uIG9mIGJvb2xlYW4gb3B0aW9ucyB0aGF0IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiwgYnV0IHNvbWUgZG8KKwkgKiBub3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBkaWZmY29yZSBsaWJyYXJ5LgorCSAqLwogCXN0cnVjdCBkaWZmX2ZsYWdzIGZsYWdzOwogCiAJLyogZGlmZi1maWx0ZXIgYml0cyAqLwogCXVuc2lnbmVkIGludCBmaWx0ZXI7CiAKIAlpbnQgdXNlX2NvbG9yOworCisJLyogTnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gZ2VuZXJhdGUgaW4gcGF0Y2ggb3V0cHV0LiAqLwogCWludCBjb250ZXh0OworCiAJaW50IGludGVyaHVua2NvbnRleHQ7CisKKwkvKiBBZmZlY3RzIHRoZSB3YXkgZGV0ZWN0aW9uIGxvZ2ljIGZvciBjb21wbGV0ZSByZXdyaXRlcywgcmVuYW1lcyBhbmQKKwkgKiBjb3BpZXMuCisJICovCiAJaW50IGJyZWFrX29wdDsKIAlpbnQgZGV0ZWN0X3JlbmFtZTsKKwogCWludCBpcnJldmVyc2libGVfZGVsZXRlOwogCWludCBza2lwX3N0YXRfdW5tYXRjaDsKIAlpbnQgbGluZV90ZXJtaW5hdGlvbjsKKworCS8qIFRoZSBvdXRwdXQgZm9ybWF0IHVzZWQgd2hlbiBgZGlmZl9mbHVzaCgpYCBpcyBydW4uICovCiAJaW50IG91dHB1dF9mb3JtYXQ7CisKIAl1bnNpZ25lZCBwaWNrYXhlX29wdHM7CisKKwkvKiBBZmZlY3RzIHRoZSB3YXkgZGV0ZWN0aW9uIGxvZ2ljIGZvciBjb21wbGV0ZSByZXdyaXRlcywgcmVuYW1lcyBhbmQKKwkgKiBjb3BpZXMuCisJICovCiAJaW50IHJlbmFtZV9zY29yZTsKIAlpbnQgcmVuYW1lX2xpbWl0OworCiAJaW50IG5lZWRlZF9yZW5hbWVfbGltaXQ7CiAJaW50IGRlZ3JhZGVkX2NjX3RvX2M7CiAJaW50IHNob3dfcmVuYW1lX3Byb2dyZXNzOwogCWludCBkaXJzdGF0X3Blcm1pbGxlOwogCWludCBzZXR1cDsKKworCS8qIE51bWJlciBvZiBoZXhkaWdpdHMgdG8gYWJicmV2aWF0ZSByYXcgZm9ybWF0IG91dHB1dCB0by4gKi8KIAlpbnQgYWJicmV2OworCiAJaW50IGl0YV9pbnZpc2libGVfaW5faW5kZXg7CiAvKiB3aGl0ZS1zcGFjZSBlcnJvciBoaWdobGlnaHRpbmcgKi8KICNkZWZpbmUgV1NFSF9ORVcgKDE8PDEyKQpAQCAtMTkyLDYgKzMxNiw3IEBACiAJLyogdG8gc3VwcG9ydCBpbnRlcm5hbCBkaWZmIHJlY3Vyc2lvbiBieSAtLWZvbGxvdyBoYWNrKi8KIAlpbnQgZm91bmRfZm9sbG93OwogCisJLyogQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIHR3ZWFraW5nIHRoZSBvcHRpb25zIGluIGRpZmZfc2V0dXBfZG9uZSgpLiAqLwogCXZvaWQgKCpzZXRfZGVmYXVsdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKIAogCUZJTEUgKmZpbGU7CkBAIC0yNDUsNiArMzcwLDIyIEBACiB2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfcGlwZXRocm91Z2goc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pOwogCitzdHJ1Y3QgZGlmZnN0YXRfdCB7CisJaW50IG5yOworCWludCBhbGxvYzsKKwlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSB7CisJCWNoYXIgKmZyb21fbmFtZTsKKwkJY2hhciAqbmFtZTsKKwkJY2hhciAqcHJpbnRfbmFtZTsKKwkJY29uc3QgY2hhciAqY29tbWVudHM7CisJCXVuc2lnbmVkIGlzX3VubWVyZ2VkOjE7CisJCXVuc2lnbmVkIGlzX2JpbmFyeToxOworCQl1bnNpZ25lZCBpc19yZW5hbWVkOjE7CisJCXVuc2lnbmVkIGlzX2ludGVyZXN0aW5nOjE7CisJCXVpbnRtYXhfdCBhZGRlZCwgZGVsZXRlZDsKKwl9ICoqZmlsZXM7Cit9OworCiBlbnVtIGNvbG9yX2RpZmYgewogCURJRkZfUkVTRVQgPSAwLAogCURJRkZfQ09OVEVYVCA9IDEsCkBAIC0yNzAsNiArNDExLDcgQEAKIAlESUZGX0ZJTEVfT0xEX0JPTEQgPSAyMSwKIAlESUZGX0ZJTEVfTkVXX0JPTEQgPSAyMiwKIH07CisKIGNvbnN0IGNoYXIgKmRpZmZfZ2V0X2NvbG9yKGludCBkaWZmX3VzZV9jb2xvciwgZW51bSBjb2xvcl9kaWZmIGl4KTsKICNkZWZpbmUgZGlmZl9nZXRfY29sb3Jfb3B0KG8sIGl4KSBcCiAJZGlmZl9nZXRfY29sb3IoKG8pLT51c2VfY29sb3IsIGl4KQpAQCAtMzM0LDYgKzQ3NiwxMCBAQAogCiBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqcGF0aCk7CiAKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSk7Cit2b2lkIGZyZWVfZGlmZnN0YXRfaW5mbyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpOworCiAjZGVmaW5lIERJRkZfU0VUVVBfUkVWRVJTRSAgICAgIAkxCiAjZGVmaW5lIERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUJNAogCmRpZmYgLS1naXQgYS9kaWZmY29yZS5oIGIvZGlmZmNvcmUuaAppbmRleCBiNjUxMDYxLi43YzA3MzQ3IDEwMDY0NAotLS0gYS9kaWZmY29yZS5oCisrKyBiL2RpZmZjb3JlLmgKQEAgLTI4LDYgKzI4LDEyIEBACiAKICNkZWZpbmUgTUlOSU1VTV9CUkVBS19TSVpFICAgICA0MDAgLyogZG8gbm90IGJyZWFrIGEgZmlsZSBzbWFsbGVyIHRoYW4gdGhpcyAqLwogCisvKioKKyAqIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgZmlsZSAoYmxvYikuICBJdCByZWNvcmRzIHRoZSBibG9iCisgKiBvYmplY3QgbmFtZSAoaWYga25vd24gLS0gZm9yIGEgd29yayB0cmVlIGZpbGUgaXQgdHlwaWNhbGx5IGlzIGEgTlVMIFNIQS0xKSwKKyAqIGZpbGVtb2RlIGFuZCBwYXRobmFtZS4gIFRoaXMgaXMgd2hhdCB0aGUgYGRpZmZfYWRkcmVtb3ZlKClgLCBgZGlmZl9jaGFuZ2UoKWAKKyAqIGFuZCBgZGlmZl91bm1lcmdlKClgIHN5bnRoZXNpemUgYW5kIGZlZWQgYGRpZmZfcXVldWUoKWAgZnVuY3Rpb24gd2l0aC4KKyAqLwogc3RydWN0IGRpZmZfZmlsZXNwZWMgewogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCWNoYXIgKnBhdGg7CkBAIC02Niw2ICs3MiwxNyBAQAogdm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKIGludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKIAorLyoqCisgKiBUaGlzIHJlY29yZHMgYSBwYWlyIG9mIGBzdHJ1Y3QgZGlmZl9maWxlc3BlY2A7IHRoZSBmaWxlc3BlYyBmb3IgYSBmaWxlIGluCisgKiB0aGUgIm9sZCIgc2V0IChpLmUuIHByZWltYWdlKSBpcyBjYWxsZWQgYG9uZWAsIGFuZCB0aGUgZmlsZXNwZWMgZm9yIGEgZmlsZQorICogaW4gdGhlICJuZXciIHNldCAoaS5lLiBwb3N0aW1hZ2UpIGlzIGNhbGxlZCBgdHdvYC4gIEEgY2hhbmdlIHRoYXQgcmVwcmVzZW50cworICogZmlsZSBjcmVhdGlvbiBoYXMgTlVMTCBpbiBgb25lYCwgYW5kIGZpbGUgZGVsZXRpb24gaGFzIE5VTEwgaW4gYHR3b2AuCisgKgorICogQSBgZmlsZXBhaXJgIHN0YXJ0cyBwb2ludGluZyBhdCBgb25lYCBhbmQgYHR3b2AgdGhhdCBhcmUgZnJvbSB0aGUgc2FtZQorICogZmlsZW5hbWUsIGJ1dCBgZGlmZmNvcmVfc3RkKClgIGNhbiBicmVhayBwYWlycyBhbmQgbWF0Y2ggY29tcG9uZW50IGZpbGVzcGVjcworICogd2l0aCBvdGhlciBmaWxlc3BlY3MgZnJvbSBhIGRpZmZlcmVudCBmaWxlcGFpciB0byBmb3JtIG5ldyBmaWxlcGFpci4gVGhpcyBpcworICogY2FsbGVkICdyZW5hbWUgZGV0ZWN0aW9uJy4KKyAqLwogc3RydWN0IGRpZmZfZmlsZXBhaXIgewogCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmU7CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bzsKQEAgLTc3LDYgKzk0LDcgQEAKIAl1bnNpZ25lZCBkb25lX3NraXBfc3RhdF91bm1hdGNoIDogMTsKIAl1bnNpZ25lZCBza2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQgOiAxOwogfTsKKwogI2RlZmluZSBESUZGX1BBSVJfVU5NRVJHRUQocCkgKChwKS0+aXNfdW5tZXJnZWQpCiAKICNkZWZpbmUgRElGRl9QQUlSX1JFTkFNRShwKSAoKHApLT5yZW5hbWVkX3BhaXIpCkBAIC05NCwxMSArMTEyLDI1IEBACiAKIGludCBkaWZmX3VubW9kaWZpZWRfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKTsKIAorLyoqCisgKiBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxlcGFpcnMuICBOb3RhYmxlIG1lbWJlcnMgYXJlOgorICoKKyAqIC0gYHF1ZXVlYDoKKyAqIEFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGBzdHJ1Y3QgZGlmZl9maWxlcGFpcmAuIFRoaXMgZHluYW1pY2FsbHkgZ3Jvd3MgYXMKKyAqIHlvdSBhZGQgZmlsZXBhaXJzOworICoKKyAqIC0gYGFsbG9jYDoKKyAqIFRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgYHF1ZXVlYCBhcnJheTsKKyAqCisgKiAtIGBucmA6CisgKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBgcXVldWVgIGFycmF5LgorICovCiBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgewogCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICoqcXVldWU7CiAJaW50IGFsbG9jOwogCWludCBucjsKIH07CisKICNkZWZpbmUgRElGRl9RVUVVRV9DTEVBUihxKSBcCiAJZG8geyBcCiAJCShxKS0+cXVldWUgPSBOVUxMOyBcCmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IDYxZjU1OWY5Li5hN2M3MjI3IDEwMDY0NAotLS0gYS9kaXIuYworKysgYi9kaXIuYwpAQCAtMiw4ICsyLDYgQEAKICAqIFRoaXMgaGFuZGxlcyByZWN1cnNpdmUgZmlsZW5hbWUgZGV0ZWN0aW9uIHdpdGggZXhjbHVkZQogICogZmlsZXMsIGluZGV4IGtub3dsZWRnZSBldGMuLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0Ci0gKgogICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNS0yMDA2CiAgKgkJIEp1bmlvIEhhbWFubywgMjAwNS0yMDA2CiAgKi8KQEAgLTYxMSw2ICs2MDksMTU5IEBACiAJKnBhdHRlcm5sZW4gPSBsZW47CiB9CiAKK2ludCBwbF9oYXNobWFwX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICphLAorCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqYiwKKwkJICAgY29uc3Qgdm9pZCAqa2V5KQoreworCWNvbnN0IHN0cnVjdCBwYXR0ZXJuX2VudHJ5ICplZTEgPQorCQkJY29udGFpbmVyX29mKGEsIHN0cnVjdCBwYXR0ZXJuX2VudHJ5LCBlbnQpOworCWNvbnN0IHN0cnVjdCBwYXR0ZXJuX2VudHJ5ICplZTIgPQorCQkJY29udGFpbmVyX29mKGIsIHN0cnVjdCBwYXR0ZXJuX2VudHJ5LCBlbnQpOworCisJc2l6ZV90IG1pbl9sZW4gPSBlZTEtPnBhdHRlcm5sZW4gPD0gZWUyLT5wYXR0ZXJubGVuCisJCQkgPyBlZTEtPnBhdHRlcm5sZW4KKwkJCSA6IGVlMi0+cGF0dGVybmxlbjsKKworCWlmIChpZ25vcmVfY2FzZSkKKwkJcmV0dXJuIHN0cm5jYXNlY21wKGVlMS0+cGF0dGVybiwgZWUyLT5wYXR0ZXJuLCBtaW5fbGVuKTsKKwlyZXR1cm4gc3RybmNtcChlZTEtPnBhdHRlcm4sIGVlMi0+cGF0dGVybiwgbWluX2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYXR0ZXJuX3RvX2hhc2hzZXRzKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpnaXZlbikKK3sKKwlzdHJ1Y3QgcGF0dGVybl9lbnRyeSAqdHJhbnNsYXRlZDsKKwljaGFyICp0cnVuY2F0ZWQ7CisJY2hhciAqZGF0YSA9IE5VTEw7CisKKwlpZiAoIXBsLT51c2VfY29uZV9wYXR0ZXJucykKKwkJcmV0dXJuOworCisJaWYgKGdpdmVuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSAmJgorCSAgICBnaXZlbi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTVVTVEJFRElSICYmCisJICAgICFzdHJjbXAoZ2l2ZW4tPnBhdHRlcm4sICIvKiIpKSB7CisJCXBsLT5mdWxsX2NvbmUgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFnaXZlbi0+ZmxhZ3MgJiYgIXN0cmNtcChnaXZlbi0+cGF0dGVybiwgIi8qIikpIHsKKwkJcGwtPmZ1bGxfY29uZSA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZ2l2ZW4tPnBhdHRlcm5sZW4gPiAyICYmCisJICAgICFzdHJjbXAoZ2l2ZW4tPnBhdHRlcm4gKyBnaXZlbi0+cGF0dGVybmxlbiAtIDIsICIvKiIpKSB7CisJCWlmICghKGdpdmVuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSkpIHsKKwkJCS8qIE5vdCBhIGNvbmUgcGF0dGVybi4gKi8KKwkJCXBsLT51c2VfY29uZV9wYXR0ZXJucyA9IDA7CisJCQl3YXJuaW5nKF8oInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIiksIGdpdmVuLT5wYXR0ZXJuKTsKKwkJCWdvdG8gY2xlYXJfaGFzaG1hcHM7CisJCX0KKworCQl0cnVuY2F0ZWQgPSB4c3RyZHVwKGdpdmVuLT5wYXR0ZXJuKTsKKwkJdHJ1bmNhdGVkW2dpdmVuLT5wYXR0ZXJubGVuIC0gMl0gPSAwOworCisJCXRyYW5zbGF0ZWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0dGVybl9lbnRyeSkpOworCQl0cmFuc2xhdGVkLT5wYXR0ZXJuID0gdHJ1bmNhdGVkOworCQl0cmFuc2xhdGVkLT5wYXR0ZXJubGVuID0gZ2l2ZW4tPnBhdHRlcm5sZW4gLSAyOworCQloYXNobWFwX2VudHJ5X2luaXQoJnRyYW5zbGF0ZWQtPmVudCwKKwkJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkJICAgc3RyaWhhc2godHJhbnNsYXRlZC0+cGF0dGVybikgOgorCQkJCSAgIHN0cmhhc2godHJhbnNsYXRlZC0+cGF0dGVybikpOworCisJCWlmICghaGFzaG1hcF9nZXRfZW50cnkoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkgICAgICAgdHJhbnNsYXRlZCwgZW50LCBOVUxMKSkgeworCQkJLyogV2UgZGlkIG5vdCBzZWUgdGhlICJwYXJlbnQiIGluY2x1ZGVkICovCisJCQl3YXJuaW5nKF8oInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIiksCisJCQkJZ2l2ZW4tPnBhdHRlcm4pOworCQkJZnJlZSh0cnVuY2F0ZWQpOworCQkJZnJlZSh0cmFuc2xhdGVkKTsKKwkJCWdvdG8gY2xlYXJfaGFzaG1hcHM7CisJCX0KKworCQloYXNobWFwX2FkZCgmcGwtPnBhcmVudF9oYXNobWFwLCAmdHJhbnNsYXRlZC0+ZW50KTsKKwkJaGFzaG1hcF9yZW1vdmUoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgJnRyYW5zbGF0ZWQtPmVudCwgJmRhdGEpOworCQlmcmVlKGRhdGEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGdpdmVuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSkgeworCQl3YXJuaW5nKF8oInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIiksCisJCQlnaXZlbi0+cGF0dGVybik7CisJCWdvdG8gY2xlYXJfaGFzaG1hcHM7CisJfQorCisJdHJhbnNsYXRlZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXR0ZXJuX2VudHJ5KSk7CisKKwl0cmFuc2xhdGVkLT5wYXR0ZXJuID0geHN0cmR1cChnaXZlbi0+cGF0dGVybik7CisJdHJhbnNsYXRlZC0+cGF0dGVybmxlbiA9IGdpdmVuLT5wYXR0ZXJubGVuOworCWhhc2htYXBfZW50cnlfaW5pdCgmdHJhbnNsYXRlZC0+ZW50LAorCQkJICAgaWdub3JlX2Nhc2UgPworCQkJICAgc3RyaWhhc2godHJhbnNsYXRlZC0+cGF0dGVybikgOgorCQkJICAgc3RyaGFzaCh0cmFuc2xhdGVkLT5wYXR0ZXJuKSk7CisKKwloYXNobWFwX2FkZCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCAmdHJhbnNsYXRlZC0+ZW50KTsKKworCWlmIChoYXNobWFwX2dldF9lbnRyeSgmcGwtPnBhcmVudF9oYXNobWFwLCB0cmFuc2xhdGVkLCBlbnQsIE5VTEwpKSB7CisJCS8qIHdlIGFscmVhZHkgaW5jbHVkZWQgdGhpcyBhdCB0aGUgcGFyZW50IGxldmVsICovCisJCXdhcm5pbmcoXygieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIpLAorCQkJZ2l2ZW4tPnBhdHRlcm4pOworCQloYXNobWFwX3JlbW92ZSgmcGwtPnBhcmVudF9oYXNobWFwLCAmdHJhbnNsYXRlZC0+ZW50LCAmZGF0YSk7CisJCWZyZWUoZGF0YSk7CisJCWZyZWUodHJhbnNsYXRlZCk7CisJfQorCisJcmV0dXJuOworCitjbGVhcl9oYXNobWFwczoKKwl3YXJuaW5nKF8oImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciKSk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnBsLT5wYXJlbnRfaGFzaG1hcCwgc3RydWN0IHBhdHRlcm5fZW50cnksIGVudCk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgc3RydWN0IHBhdHRlcm5fZW50cnksIGVudCk7CisJcGwtPnVzZV9jb25lX3BhdHRlcm5zID0gMDsKK30KKworc3RhdGljIGludCBoYXNobWFwX2NvbnRhaW5zX3BhdGgoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqcGF0dGVybikKK3sKKwlzdHJ1Y3QgcGF0dGVybl9lbnRyeSBwOworCisJLyogQ2hlY2sgc3RyYWlnaHQgbWFwcGluZyAqLworCXAucGF0dGVybiA9IHBhdHRlcm4tPmJ1ZjsKKwlwLnBhdHRlcm5sZW4gPSBwYXR0ZXJuLT5sZW47CisJaGFzaG1hcF9lbnRyeV9pbml0KCZwLmVudCwKKwkJCSAgIGlnbm9yZV9jYXNlID8KKwkJCSAgIHN0cmloYXNoKHAucGF0dGVybikgOgorCQkJICAgc3RyaGFzaChwLnBhdHRlcm4pKTsKKwlyZXR1cm4gISFoYXNobWFwX2dldF9lbnRyeShtYXAsICZwLCBlbnQsIE5VTEwpOworfQorCitpbnQgaGFzaG1hcF9jb250YWluc19wYXJlbnQoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwljaGFyICpzbGFzaF9wb3M7CisKKwlzdHJidWZfc2V0bGVuKGJ1ZmZlciwgMCk7CisKKwlpZiAocGF0aFswXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRjaChidWZmZXIsICcvJyk7CisKKwlzdHJidWZfYWRkc3RyKGJ1ZmZlciwgcGF0aCk7CisKKwlzbGFzaF9wb3MgPSBzdHJyY2hyKGJ1ZmZlci0+YnVmLCAnLycpOworCisJd2hpbGUgKHNsYXNoX3BvcyA+IGJ1ZmZlci0+YnVmKSB7CisJCXN0cmJ1Zl9zZXRsZW4oYnVmZmVyLCBzbGFzaF9wb3MgLSBidWZmZXItPmJ1Zik7CisKKwkJaWYgKGhhc2htYXBfY29udGFpbnNfcGF0aChtYXAsIGJ1ZmZlcikpCisJCQlyZXR1cm4gMTsKKworCQlzbGFzaF9wb3MgPSBzdHJyY2hyKGJ1ZmZlci0+YnVmLCAnLycpOworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIGFkZF9wYXR0ZXJuKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYmFzZSwKIAkJIGludCBiYXNlbGVuLCBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwgaW50IHNyY3BvcykKIHsKQEAgLTYzNSw2ICs3ODYsOCBAQAogCUFMTE9DX0dST1cocGwtPnBhdHRlcm5zLCBwbC0+bnIgKyAxLCBwbC0+YWxsb2MpOwogCXBsLT5wYXR0ZXJuc1twbC0+bnIrK10gPSBwYXR0ZXJuOwogCXBhdHRlcm4tPnBsID0gcGw7CisKKwlhZGRfcGF0dGVybl90b19oYXNoc2V0cyhwbCwgcGF0dGVybik7CiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9za2lwX3dvcmt0cmVlX2ZpbGVfZnJvbV9pbmRleChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKQEAgLTg2MCw2ICsxMDEzLDkgQEAKIAlpbnQgaSwgbGluZW5vID0gMTsKIAljaGFyICplbnRyeTsKIAorCWhhc2htYXBfaW5pdCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZwbC0+cGFyZW50X2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKwogCXBsLT5maWxlYnVmID0gYnVmOwogCiAJaWYgKHNraXBfdXRmOF9ib20oJmJ1Ziwgc2l6ZSkpCkBAIC0xMDk2LDE2ICsxMjUyLDU4IEBACiAJCQkJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCiB7CiAJc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybjsKLQlwYXR0ZXJuID0gbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdChwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsCi0JCQkJCQkgIGR0eXBlLCBwbCwgaXN0YXRlKTsKLQlpZiAocGF0dGVybikgewotCQlpZiAocGF0dGVybi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpCi0JCQlyZXR1cm4gTk9UX01BVENIRUQ7Ci0JCWVsc2UKLQkJCXJldHVybiBNQVRDSEVEOworCXN0cnVjdCBzdHJidWYgcGFyZW50X3BhdGhuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlc3VsdCA9IE5PVF9NQVRDSEVEOworCWNvbnN0IGNoYXIgKnNsYXNoX3BvczsKKworCWlmICghcGwtPnVzZV9jb25lX3BhdHRlcm5zKSB7CisJCXBhdHRlcm4gPSBsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0KHBhdGhuYW1lLCBwYXRobGVuLCBiYXNlbmFtZSwKKwkJCQkJCQlkdHlwZSwgcGwsIGlzdGF0ZSk7CisJCWlmIChwYXR0ZXJuKSB7CisJCQlpZiAocGF0dGVybi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpCisJCQkJcmV0dXJuIE5PVF9NQVRDSEVEOworCQkJZWxzZQorCQkJCXJldHVybiBNQVRDSEVEOworCQl9CisKKwkJcmV0dXJuIFVOREVDSURFRDsKIAl9CiAKLQlyZXR1cm4gVU5ERUNJREVEOworCWlmIChwbC0+ZnVsbF9jb25lKQorCQlyZXR1cm4gTUFUQ0hFRDsKKworCXN0cmJ1Zl9hZGRjaCgmcGFyZW50X3BhdGhuYW1lLCAnLycpOworCXN0cmJ1Zl9hZGQoJnBhcmVudF9wYXRobmFtZSwgcGF0aG5hbWUsIHBhdGhsZW4pOworCisJaWYgKGhhc2htYXBfY29udGFpbnNfcGF0aCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLAorCQkJCSAgJnBhcmVudF9wYXRobmFtZSkpIHsKKwkJcmVzdWx0ID0gTUFUQ0hFRF9SRUNVUlNJVkU7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzbGFzaF9wb3MgPSBzdHJyY2hyKHBhcmVudF9wYXRobmFtZS5idWYsICcvJyk7CisKKwlpZiAoc2xhc2hfcG9zID09IHBhcmVudF9wYXRobmFtZS5idWYpIHsKKwkJLyogaW5jbHVkZSBldmVyeSBmaWxlIGluIHJvb3QgKi8KKwkJcmVzdWx0ID0gTUFUQ0hFRDsKKwkJZ290byBkb25lOworCX0KKworCXN0cmJ1Zl9zZXRsZW4oJnBhcmVudF9wYXRobmFtZSwgc2xhc2hfcG9zIC0gcGFyZW50X3BhdGhuYW1lLmJ1Zik7CisKKwlpZiAoaGFzaG1hcF9jb250YWluc19wYXRoKCZwbC0+cGFyZW50X2hhc2htYXAsICZwYXJlbnRfcGF0aG5hbWUpKSB7CisJCXJlc3VsdCA9IE1BVENIRUQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkgICAgcGF0aG5hbWUsCisJCQkJICAgICZwYXJlbnRfcGF0aG5hbWUpKQorCQlyZXN1bHQgPSBNQVRDSEVEX1JFQ1VSU0lWRTsKKworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmcGFyZW50X3BhdGhuYW1lKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgc3RydWN0IHBhdGhfcGF0dGVybiAqbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdHMoCkBAIC0yNDg5LDcgKzI2ODcsNyBAQAogCQkJCSAqIHdhbnRlZCBhbnl3YXkKIAkJCQkgKi8KIAkJCQljb250aW51ZTsKLQkJCS8qIGZhbGwgdGhydSAqLworCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewogCQkJaWYgKCFyZW1vdmVfZGlyX3JlY3Vyc2UocGF0aCwgZmxhZywgJmtlcHRfZG93bikpCiAJCQkJY29udGludWU7IC8qIGhhcHB5ICovCmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCmluZGV4IDJmYmRlZjAuLjU4NTVjMDYgMTAwNjQ0Ci0tLSBhL2Rpci5oCisrKyBiL2Rpci5oCkBAIC0xLDExICsxLDQ1IEBACiAjaWZuZGVmIERJUl9ICiAjZGVmaW5lIERJUl9ICiAKLS8qIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0ICovCi0KICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKICNpbmNsdWRlICJzdHJidWYuaCIKIAorLyoqCisgKiBUaGUgZGlyZWN0b3J5IGxpc3RpbmcgQVBJIGlzIHVzZWQgdG8gZW51bWVyYXRlIHBhdGhzIGluIHRoZSB3b3JrIHRyZWUsCisgKiBvcHRpb25hbGx5IHRha2luZyBgLmdpdC9pbmZvL2V4Y2x1ZGVgIGFuZCBgLmdpdGlnbm9yZWAgZmlsZXMgcGVyIGRpcmVjdG9yeQorICogaW50byBhY2NvdW50LgorICovCisKKy8qKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5vdGU6IFRoZSBpbmRleCBtYXkgYmUgY2hlY2tlZCBmb3IgLmdpdGlnbm9yZSBmaWxlcyB0aGF0IGFyZQorICogQ0VfU0tJUF9XT1JLVFJFRSBtYXJrZWQuIElmIHlvdSB3YW50IHRvIGV4Y2x1ZGUgZmlsZXMsIG1ha2Ugc3VyZSB5b3UgaGF2ZQorICogbG9hZGVkIHRoZSBpbmRleCBmaXJzdC4KKyAqCisgKiAtIFByZXBhcmUgYHN0cnVjdCBkaXJfc3RydWN0IGRpcmAgYW5kIGNsZWFyIGl0IHdpdGggYG1lbXNldCgmZGlyLCAwLAorICogc2l6ZW9mKGRpcikpYC4KKyAqCisgKiAtIFRvIGFkZCBzaW5nbGUgZXhjbHVkZSBwYXR0ZXJuLCBjYWxsIGBhZGRfcGF0dGVybl9saXN0KClgIGFuZCB0aGVuCisgKiAgIGBhZGRfcGF0dGVybigpYC4KKyAqCisgKiAtIFRvIGFkZCBwYXR0ZXJucyBmcm9tIGEgZmlsZSAoZS5nLiBgLmdpdC9pbmZvL2V4Y2x1ZGVgKSwgY2FsbAorICogICBgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZSgpYCAsIGFuZC9vciBzZXQgYGRpci5leGNsdWRlX3Blcl9kaXJgLiAgQQorICogICBzaG9ydC1oYW5kIGZ1bmN0aW9uIGBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygpYCBjYW4gYmUgdXNlZCB0byBzZXQKKyAqICAgdXAgdGhlIHN0YW5kYXJkIHNldCBvZiBleGNsdWRlIHNldHRpbmdzLgorICoKKyAqIC0gU2V0IG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBEYXRhIFN0cnVjdHVyZSBzZWN0aW9uIGFib3ZlLgorICoKKyAqIC0gQ2FsbCBgcmVhZF9kaXJlY3RvcnkoKWAuCisgKgorICogLSBVc2UgYGRpci5lbnRyaWVzW11gLgorICoKKyAqIC0gQ2FsbCBgY2xlYXJfZGlyZWN0b3J5KClgIHdoZW4gbm9uZSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFyZSBubyBsb25nZXIgaW4gdXNlLgorICoKKyAqLworCiBzdHJ1Y3QgZGlyX2VudHJ5IHsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLwpAQCAtMzcsNiArNzEsMTMgQEAKIAlpbnQgc3JjcG9zOwogfTsKIAorLyogdXNlZCBmb3IgaGFzaG1hcHMgZm9yIGNvbmUgcGF0dGVybnMgKi8KK3N0cnVjdCBwYXR0ZXJuX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY2hhciAqcGF0dGVybjsKKwlzaXplX3QgcGF0dGVybmxlbjsKK307CisKIC8qCiAgKiBFYWNoIGV4Y2x1ZGVzIGZpbGUgd2lsbCBiZSBwYXJzZWQgaW50byBhIGZyZXNoIGV4Y2x1ZGVfbGlzdCB3aGljaAogICogaXMgYXBwZW5kZWQgdG8gdGhlIHJlbGV2YW50IGV4Y2x1ZGVfbGlzdF9ncm91cCAoZWl0aGVyIEVYQ19ESVJTIG9yCkBAIC01NSw2ICs5NiwyNiBAQAogCWNvbnN0IGNoYXIgKnNyYzsKIAogCXN0cnVjdCBwYXRoX3BhdHRlcm4gKipwYXR0ZXJuczsKKworCS8qCisJICogV2hpbGUgc2Nhbm5pbmcgdGhlIGV4Y2x1ZGVzLCB3ZSBhdHRlbXB0IHRvIG1hdGNoIHRoZSBwYXR0ZXJucworCSAqIHdpdGggYSBtb3JlIHJlc3RyaWN0ZWQgc2V0IHRoYXQgYWxsb3dzIHVzIHRvIHVzZSBoYXNoc2V0cyBmb3IKKwkgKiBtYXRjaGluZyBsb2dpYywgd2hpY2ggaXMgZmFzdGVyIHRoYW4gdGhlIGxpbmVhciBsb29rdXAgaW4gdGhlCisJICogZXhjbHVkZXMgYXJyYXkgYWJvdmUuIElmIG5vbi16ZXJvLCB0aGF0IGNoZWNrIHN1Y2NlZWRlZC4KKwkgKi8KKwl1bnNpZ25lZCB1c2VfY29uZV9wYXR0ZXJuczsKKwl1bnNpZ25lZCBmdWxsX2NvbmU7CisKKwkvKgorCSAqIFN0b3JlcyBwYXRocyB3aGVyZSBldmVyeXRoaW5nIHN0YXJ0aW5nIHdpdGggdGhvc2UgcGF0aHMKKwkgKiBpcyBpbmNsdWRlZC4KKwkgKi8KKwlzdHJ1Y3QgaGFzaG1hcCByZWN1cnNpdmVfaGFzaG1hcDsKKworCS8qCisJICogVXNlZCB0byBjaGVjayBzaW5nbGUtbGV2ZWwgcGFyZW50cyBvZiBibG9icy4KKwkgKi8KKwlzdHJ1Y3QgaGFzaG1hcCBwYXJlbnRfaGFzaG1hcDsKIH07CiAKIC8qCkBAIC0xNDQsMjUgKzIwNSwxMDEgQEAKIAl1bnNpZ25lZCBpbnQgdXNlX2ZzbW9uaXRvciA6IDE7CiB9OwogCisvKioKKyAqIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGlyZWN0b3J5IHRyYXZlcnNhbCBvcHRpb25zIHRvIHRoZSBsaWJyYXJ5IGFuZCB0bworICogcmVjb3JkIHRoZSBwYXRocyBkaXNjb3ZlcmVkLiBBIHNpbmdsZSBgc3RydWN0IGRpcl9zdHJ1Y3RgIGlzIHVzZWQgcmVnYXJkbGVzcworICogb2Ygd2hldGhlciBvciBub3QgdGhlIHRyYXZlcnNhbCByZWN1cnNpdmVseSBkZXNjZW5kcyBpbnRvIHN1YmRpcmVjdG9yaWVzLgorICovCiBzdHJ1Y3QgZGlyX3N0cnVjdCB7Ci0JaW50IG5yLCBhbGxvYzsKLQlpbnQgaWdub3JlZF9uciwgaWdub3JlZF9hbGxvYzsKKworCS8qIFRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiBgZW50cmllc1tdYCBhcnJheS4gKi8KKwlpbnQgbnI7CisKKwkvKiBJbnRlcm5hbCB1c2U7IGtlZXBzIHRyYWNrIG9mIGFsbG9jYXRpb24gb2YgYGVudHJpZXNbXWAgYXJyYXkuKi8KKwlpbnQgYWxsb2M7CisKKwkvKiBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYGlnbm9yZWRbXWAgYXJyYXkuICovCisJaW50IGlnbm9yZWRfbnI7CisKKwlpbnQgaWdub3JlZF9hbGxvYzsKKworCS8qIGJpdC1maWVsZCBvZiBvcHRpb25zICovCiAJZW51bSB7CisKKwkJLyoqCisJCSAqIFJldHVybiBqdXN0IGlnbm9yZWQgZmlsZXMgaW4gYGVudHJpZXNbXWAsIG5vdCB1bnRyYWNrZWQgZmlsZXMuCisJCSAqIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgRElSX1NIT1dfSUdOT1JFRF9UT09gLgorCQkgKi8KIAkJRElSX1NIT1dfSUdOT1JFRCA9IDE8PDAsCisKKwkJLyogSW5jbHVkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCB0cmFja2VkLiAqLwogCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyA9IDE8PDEsCisKKwkJLyogRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuICovCiAJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTID0gMTw8MiwKKworCQkvKioKKwkJICogSWYgc2V0LCByZWN1cnNlIGludG8gYSBkaXJlY3RvcnkgdGhhdCBsb29rcyBsaWtlIGEgR2l0IGRpcmVjdG9yeS4KKwkJICogT3RoZXJ3aXNlIGl0IGlzIHNob3duIGFzIGEgZGlyZWN0b3J5LgorCQkgKi8KIAkJRElSX05PX0dJVExJTktTID0gMTw8MywKKworCQkvKioKKwkJICogU3BlY2lhbCBtb2RlIGZvciBnaXQtYWRkLiBSZXR1cm4gaWdub3JlZCBmaWxlcyBpbiBgaWdub3JlZFtdYCBhbmQKKwkJICogdW50cmFja2VkIGZpbGVzIGluIGBlbnRyaWVzW11gLiBPbmx5IHJldHVybnMgaWdub3JlZCBmaWxlcyB0aGF0IG1hdGNoCisJCSAqIHBhdGhzcGVjIGV4YWN0bHkgKG5vIHdpbGRjYXJkcykuIERvZXMgbm90IHJlY3Vyc2UgaW50byBpZ25vcmVkCisJCSAqIGRpcmVjdG9yaWVzLgorCQkgKi8KIAkJRElSX0NPTExFQ1RfSUdOT1JFRCA9IDE8PDQsCisKKwkJLyoqCisJCSAqIFNpbWlsYXIgdG8gYERJUl9TSE9XX0lHTk9SRURgLCBidXQgcmV0dXJuIGlnbm9yZWQgZmlsZXMgaW4KKwkJICogYGlnbm9yZWRbXWAgaW4gYWRkaXRpb24gdG8gdW50cmFja2VkIGZpbGVzIGluIGBlbnRyaWVzW11gLgorCQkgKiBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYERJUl9TSE9XX0lHTk9SRURgLgorCQkgKi8KIAkJRElSX1NIT1dfSUdOT1JFRF9UT08gPSAxPDw1LAorCiAJCURJUl9DT0xMRUNUX0tJTExFRF9PTkxZID0gMTw8NiwKKworCQkvKioKKwkJICogT25seSBoYXMgbWVhbmluZyBpZiBgRElSX1NIT1dfSUdOT1JFRF9UT09gIGlzIGFsc28gc2V0OyBpZiB0aGlzIGlzCisJCSAqIHNldCwgdGhlIHVudHJhY2tlZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMgYXJlIGFsc28KKwkJICogcmV0dXJuZWQgaW4gYGVudHJpZXNbXWAuCisJCSAqLwogCQlESVJfS0VFUF9VTlRSQUNLRURfQ09OVEVOVFMgPSAxPDw3LAorCisJCS8qKgorCQkgKiBPbmx5IGhhcyBtZWFuaW5nIGlmIGBESVJfU0hPV19JR05PUkVEX1RPT2AgaXMgYWxzbyBzZXQ7IGlmIHRoaXMgaXMKKwkJICogc2V0LCByZXR1cm5zIGlnbm9yZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggYW4gZXhjbHVkZQorCQkgKiBwYXR0ZXJuLiBJZiBhIGRpcmVjdG9yeSBtYXRjaGVzIGFuIGV4Y2x1ZGUgcGF0dGVybiwgdGhlbiB0aGUKKwkJICogZGlyZWN0b3J5IGlzIHJldHVybmVkIGFuZCB0aGUgY29udGFpbmVkIHBhdGhzIGFyZSBub3QuIEEgZGlyZWN0b3J5CisJCSAqIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW4gZXhjbHVkZSBwYXR0ZXJuIHdpbGwgbm90IGJlIHJldHVybmVkIGV2ZW4gaWYKKwkJICogYWxsIG9mIGl0cyBjb250ZW50cyBhcmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlLCB0aGUgY29udGVudHMgYXJlCisJCSAqIHJldHVybmVkIGFzIGluZGl2aWR1YWwgZW50cmllcy4KKwkJICoKKwkJICogSWYgdGhpcyBpcyBzZXQsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGV4cGxpY2l0bHkgbWF0Y2ggYW4gaWdub3JlCisJCSAqIHBhdHRlcm4gYXJlIHJlcG9ydGVkLiBJbXBsaWNpdGx5IGlnbm9yZWQgZGlyZWN0b3JpZXMgKGRpcmVjdG9yaWVzIHRoYXQKKwkJICogZG8gbm90IG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuLCBidXQgd2hvc2UgY29udGVudHMgYXJlIGFsbCBpZ25vcmVkKQorCQkgKiBhcmUgbm90IHJlcG9ydGVkLCBpbnN0ZWFkIGFsbCBvZiB0aGUgY29udGVudHMgYXJlIHJlcG9ydGVkLgorCQkgKi8KIAkJRElSX1NIT1dfSUdOT1JFRF9UT09fTU9ERV9NQVRDSElORyA9IDE8PDgsCisKIAkJRElSX1NLSVBfTkVTVEVEX0dJVCA9IDE8PDkKIAl9IGZsYWdzOworCisJLyogQW4gYXJyYXkgb2YgYHN0cnVjdCBkaXJfZW50cnlgLCBlYWNoIGVsZW1lbnQgb2Ygd2hpY2ggZGVzY3JpYmVzIGEgcGF0aC4gKi8KIAlzdHJ1Y3QgZGlyX2VudHJ5ICoqZW50cmllczsKKworCS8qKgorCSAqIHVzZWQgZm9yIGlnbm9yZWQgcGF0aHMgd2l0aCB0aGUgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBhbmQKKwkgKiBgRElSX0NPTExFQ1RfSUdOT1JFRGAgZmxhZ3MuCisJICovCiAJc3RydWN0IGRpcl9lbnRyeSAqKmlnbm9yZWQ7CiAKLQkvKiBFeGNsdWRlIGluZm8gKi8KKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZWFkIGluIGVhY2ggZGlyZWN0b3J5IGZvciBleGNsdWRlZCBmaWxlcworCSAqICh0eXBpY2FsbHkgYC5naXRpZ25vcmVgKS4KKwkgKi8KIAljb25zdCBjaGFyICpleGNsdWRlX3Blcl9kaXI7CiAKIAkvKgpAQCAtMjM2LDYgKzM3Myw3IEBACiAJVU5ERUNJREVEID0gLTEsCiAJTk9UX01BVENIRUQgPSAwLAogCU1BVENIRUQgPSAxLAorCU1BVENIRURfUkVDVVJTSVZFID0gMiwKIH07CiAKIC8qCkBAIC0yNzEsNiArNDA5LDEzIEBACiAJCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAogCQljb25zdCBjaGFyICpuYW1lLCBpbnQgKmR0eXBlKTsKIAoraW50IHBsX2hhc2htYXBfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmEsCisJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpiLAorCQkgICBjb25zdCB2b2lkICprZXkpOworaW50IGhhc2htYXBfY29udGFpbnNfcGFyZW50KHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpOwogc3RydWN0IHBhdHRlcm5fbGlzdCAqYWRkX3BhdHRlcm5fbGlzdChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAogCQkJCSAgICAgIGludCBncm91cF90eXBlLCBjb25zdCBjaGFyICpzcmMpOwogaW50IGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCmRpZmYgLS1naXQgYS9lbnZpcm9ubWVudC5jIGIvZW52aXJvbm1lbnQuYwppbmRleCA2ZjBiZTRiLi5lNzJhMDJkIDEwMDY0NAotLS0gYS9lbnZpcm9ubWVudC5jCisrKyBiL2Vudmlyb25tZW50LmMKQEAgLTY3LDYgKzY3LDcgQEAKIGNoYXIgKm5vdGVzX3JlZl9uYW1lOwogaW50IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMgPSAxOwogaW50IGNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0OworaW50IGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmU7CiBpbnQgbWVyZ2VfbG9nX2NvbmZpZyA9IC0xOwogaW50IHByZWNvbXBvc2VkX3VuaWNvZGUgPSAtMTsgLyogc2VlIHByb2JlX3V0ZjhfcGF0aG5hbWVfY29tcG9zaXRpb24oKSAqLwogdW5zaWduZWQgbG9uZyBwYWNrX3NpemVfbGltaXRfY2ZnOwpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCmluZGV4IDAxMzBiNDQuLjE3MzRhNTcgMTAwNjQ0Ci0tLSBhL2ZldGNoLXBhY2suYworKysgYi9mZXRjaC1wYWNrLmMKQEAgLTY2OSwxNyArNjY5LDIwIEBACiAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQlzdHJ1Y3Qgb2JqZWN0ICpvOwogCiAJCWlmICghaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoJnJlZi0+b2xkX29pZCwKLQkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLKSkKKwkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLIHwKKwkJCQkJCQlPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCiAJCQljb250aW51ZTsKIAkJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJnJlZi0+b2xkX29pZCk7CiAJCWlmICghbykKIAkJCWNvbnRpbnVlOwogCi0JCS8qIFdlIGFscmVhZHkgaGF2ZSBpdCAtLSB3aGljaCBtYXkgbWVhbiB0aGF0IHdlIHdlcmUKKwkJLyoKKwkJICogV2UgYWxyZWFkeSBoYXZlIGl0IC0tIHdoaWNoIG1heSBtZWFuIHRoYXQgd2Ugd2VyZQogCQkgKiBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHNpZGUgYXQgc29tZSB0aW1lIGFmdGVyCiAJCSAqIHRoYXQgKGl0IGlzIE9LIGlmIHdlIGd1ZXNzIHdyb25nIGhlcmUpLgogCQkgKi8KQEAgLTY4OSw3ICs2OTIsMTMgQEAKIAkJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CiAJCX0KIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAorCS8qCisJICogVGhpcyBibG9jayBtYXJrcyBhbGwgbG9jYWwgcmVmcyBhcyBDT01QTEVURSwgYW5kIHRoZW4gcmVjdXJzaXZlbHkgbWFya3MgYWxsCisJICogcGFyZW50cyBvZiB0aG9zZSByZWZzIGFzIENPTVBMRVRFLgorCSAqLworCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLCAibWFya19jb21wbGV0ZV9sb2NhbF9yZWZzIiwgTlVMTCk7CiAJaWYgKCFhcmdzLT5kZWVwZW4pIHsKIAkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGVfb2lkLCBOVUxMKTsKIAkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShOVUxMLCBtYXJrX2FsdGVybmF0ZV9jb21wbGV0ZSk7CkBAIC02OTcsMTEgKzcwNiwxMyBAQAogCQlpZiAoY3V0b2ZmKQogCQkJbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhhcmdzLCBjdXRvZmYpOwogCX0KKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tcGxldGVfbG9jYWxfcmVmcyIsIE5VTEwpOwogCiAJLyoKIAkgKiBNYXJrIGFsbCBjb21wbGV0ZSByZW1vdGUgcmVmcyBhcyBjb21tb24gcmVmcy4KIAkgKiBEb24ndCBtYXJrIHRoZW0gY29tbW9uIHlldDsgdGhlIHNlcnZlciBoYXMgdG8gYmUgdG9sZCBzbyBmaXJzdC4KIAkgKi8KKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tbW9uX3JlbW90ZV9yZWZzIiwgTlVMTCk7CiAJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwKIAkJCQkJICAgICBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LApAQCAtNzE0LDYgKzcyNSw3IEBACiAJCW5lZ290aWF0b3ItPmtub3duX2NvbW1vbihuZWdvdGlhdG9yLAogCQkJCQkgKHN0cnVjdCBjb21taXQgKilvKTsKIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJtYXJrX2NvbW1vbl9yZW1vdGVfcmVmcyIsIE5VTEwpOwogCiAJc2F2ZV9jb21taXRfYnVmZmVyID0gb2xkX3NhdmVfY29tbWl0X2J1ZmZlcjsKIH0KQEAgLTc1Niw4ICs3NjgsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB3cml0ZV9wcm9taXNvcl9maWxlKGNvbnN0IGNoYXIgKmtlZXBfbmFtZSwKKwkJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXN0cnVjdCBzdHJidWYgcHJvbWlzb3JfbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBzdWZmaXhfc3RyaXBwZWQ7CisJRklMRSAqb3V0cHV0OworCWludCBpOworCisJc3RyYnVmX2FkZHN0cigmcHJvbWlzb3JfbmFtZSwga2VlcF9uYW1lKTsKKwlzdWZmaXhfc3RyaXBwZWQgPSBzdHJidWZfc3RyaXBfc3VmZml4KCZwcm9taXNvcl9uYW1lLCAiLmtlZXAiKTsKKwlpZiAoIXN1ZmZpeF9zdHJpcHBlZCkKKwkJQlVHKCJuYW1lIG9mIHBhY2sgbG9ja2ZpbGUgc2hvdWxkIGVuZCB3aXRoIC5rZWVwICh3YXMgJyVzJykiLAorCQkgICAga2VlcF9uYW1lKTsKKwlzdHJidWZfYWRkc3RyKCZwcm9taXNvcl9uYW1lLCAiLnByb21pc29yIik7CisKKwlvdXRwdXQgPSB4Zm9wZW4ocHJvbWlzb3JfbmFtZS5idWYsICJ3Iik7CisJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQlmcHJpbnRmKG91dHB1dCwgIiVzICVzXG4iLCBvaWRfdG9faGV4KCZzb3VnaHRbaV0tPm9sZF9vaWQpLAorCQkJc291Z2h0W2ldLT5uYW1lKTsKKwlmY2xvc2Uob3V0cHV0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9taXNvcl9uYW1lKTsKK30KKwogc3RhdGljIGludCBnZXRfcGFjayhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAotCQkgICAgaW50IHhkWzJdLCBjaGFyICoqcGFja19sb2NrZmlsZSkKKwkJICAgIGludCB4ZFsyXSwgY2hhciAqKnBhY2tfbG9ja2ZpbGUsCisJCSAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQogewogCXN0cnVjdCBhc3luYyBkZW11eDsKIAlpbnQgZG9fa2VlcCA9IGFyZ3MtPmtlZXBfcGFjazsKQEAgLTgxOSw3ICs4NTYsMTMgQEAKIAkJfQogCQlpZiAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKTsKLQkJaWYgKGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCS8qCisJCSAqIElmIHdlJ3JlIG9idGFpbmluZyB0aGUgZmlsZW5hbWUgb2YgYSBsb2NrZmlsZSwgd2UnbGwgdXNlCisJCSAqIHRoYXQgZmlsZW5hbWUgdG8gd3JpdGUgYSAucHJvbWlzb3IgZmlsZSB3aXRoIG1vcmUKKwkJICogaW5mb3JtYXRpb24gYmVsb3cuIElmIG5vdCwgd2UgbmVlZCBpbmRleC1wYWNrIHRvIGRvIGl0IGZvcgorCQkgKiB1cy4KKwkJICovCisJCWlmICghKGRvX2tlZXAgJiYgcGFja19sb2NrZmlsZSkgJiYgYXJncy0+ZnJvbV9wcm9taXNvcikKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXByb21pc29yIik7CiAJfQogCWVsc2UgewpAQCAtODczLDYgKzkxNiwxNCBAQAogCQlkaWUoXygiJXMgZmFpbGVkIiksIGNtZF9uYW1lKTsKIAlpZiAodXNlX3NpZGViYW5kICYmIGZpbmlzaF9hc3luYygmZGVtdXgpKQogCQlkaWUoXygiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpKTsKKworCS8qCisJICogTm93IHRoYXQgaW5kZXgtcGFjayBoYXMgc3VjY2VlZGVkLCB3cml0ZSB0aGUgcHJvbWlzb3IgZmlsZSB1c2luZyB0aGUKKwkgKiBvYnRhaW5lZCAua2VlcCBmaWxlbmFtZSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoZG9fa2VlcCAmJiBwYWNrX2xvY2tmaWxlICYmIGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCXdyaXRlX3Byb21pc29yX2ZpbGUoKnBhY2tfbG9ja2ZpbGUsIHNvdWdodCwgbnJfc291Z2h0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04OTUsOCArOTQ2LDE1IEBACiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY29uc3QgY2hhciAqYWdlbnRfZmVhdHVyZTsKIAlpbnQgYWdlbnRfbGVuOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQogCiAJc29ydF9yZWZfbGlzdCgmcmVmLCByZWZfY29tcGFyZV9uYW1lKTsKIAlRU09SVChzb3VnaHQsIG5yX3NvdWdodCwgY21wX3JlZl9ieV9uYW1lKTsKQEAgLTk4Myw3ICsxMDQxLDcgQEAKIAkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIikpOwogCiAJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7Ci0JCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQltYXJrX2NvbXBsZXRlX2FuZF9jb21tb25fcmVmKG5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOwogCQlmaWx0ZXJfcmVmcyhhcmdzLCAmcmVmLCBzb3VnaHQsIG5yX3NvdWdodCk7CiAJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKSB7CiAJCQlwYWNrZXRfZmx1c2goZmRbMV0pOwpAQCAtOTkyLDcgKzEwNTAsNyBAQAogCX0gZWxzZSB7CiAJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKIAl9Ci0JaWYgKGZpbmRfY29tbW9uKCZuZWdvdGlhdG9yLCBhcmdzLCBmZCwgJm9pZCwgcmVmKSA8IDApCisJaWYgKGZpbmRfY29tbW9uKG5lZ290aWF0b3IsIGFyZ3MsIGZkLCAmb2lkLCByZWYpIDwgMCkKIAkJaWYgKCFhcmdzLT5rZWVwX3BhY2spCiAJCQkvKiBXaGVuIGNsb25pbmcsIGl0IGlzIG5vdCB1bnVzdWFsIHRvIGhhdmUKIAkJCSAqIG5vIGNvbW1vbiBjb21taXQuCkBAIC0xMDA4LDExICsxMDY2LDEyIEBACiAJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhzaS0+c2hhbGxvdyk7CiAJZWxzZQogCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKLQlpZiAoZ2V0X3BhY2soYXJncywgZmQsIHBhY2tfbG9ja2ZpbGUpKQorCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQlkaWUoXygiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iKSk7CiAKICBhbGxfZG9uZToKLQluZWdvdGlhdG9yLnJlbGVhc2UoJm5lZ290aWF0b3IpOworCWlmIChuZWdvdGlhdG9yKQorCQluZWdvdGlhdG9yLT5yZWxlYXNlKG5lZ290aWF0b3IpOwogCXJldHVybiByZWY7CiB9CiAKQEAgLTEyMzAsNyArMTI4OSw4IEBACiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCW9pZHNldF9pbnNlcnQoY29tbW9uLCAmb2lkKTsKIAkJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKLQkJCQluZWdvdGlhdG9yLT5hY2sobmVnb3RpYXRvciwgY29tbWl0KTsKKwkJCQlpZiAobmVnb3RpYXRvcikKKwkJCQkJbmVnb3RpYXRvci0+YWNrKG5lZ290aWF0b3IsIGNvbW1pdCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTM4Miw4ICsxNDQyLDE2IEBACiAJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOwogCWludCBpbl92YWluID0gMCwgbmVnb3RpYXRpb25fc3RhcnRlZCA9IDA7CiAJaW50IGhhdmVzX3RvX3NlbmQgPSBJTklUSUFMX0ZMVVNIOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQorCiAJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAogCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CiAJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CkBAIC0xNDA3LDE1ICsxNDc1LDE1IEBACiAKIAkJCS8qIEZpbHRlciAncmVmJyBieSAnc291Z2h0JyBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QgbG9jYWwgKi8KIAkJCWlmICghYXJncy0+bm9fZGVwZW5kZW50cykgewotCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYobmVnb3RpYXRvciwgYXJncywgJnJlZik7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwogCQkJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKQogCQkJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CiAJCQkJZWxzZQogCQkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUkVRVUVTVDsKIAotCQkJCW1hcmtfdGlwcygmbmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7Ci0JCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZSgmbmVnb3RpYXRvciwKKwkJCQltYXJrX3RpcHMobmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7CisJCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShuZWdvdGlhdG9yLAogCQkJCQkJCSAgaW5zZXJ0X29uZV9hbHRlcm5hdGVfb2JqZWN0KTsKIAkJCX0gZWxzZSB7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwpAQCAtMTQyOSw3ICsxNDk3LDcgQEAKIAkJCQkJCSAgICAibmVnb3RpYXRpb25fdjIiLAogCQkJCQkJICAgIHRoZV9yZXBvc2l0b3J5KTsKIAkJCX0KLQkJCWlmIChzZW5kX2ZldGNoX3JlcXVlc3QoJm5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCisJCQlpZiAoc2VuZF9mZXRjaF9yZXF1ZXN0KG5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCiAJCQkJCSAgICAgICAmY29tbW9uLAogCQkJCQkgICAgICAgJmhhdmVzX3RvX3NlbmQsICZpbl92YWluLAogCQkJCQkgICAgICAgcmVhZGVyLnVzZV9zaWRlYmFuZCkpCkBAIC0xNDM5LDcgKzE1MDcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BQ0tTOgogCQkJLyogUHJvY2VzcyBBQ0tzL05BS3MgKi8KLQkJCXN3aXRjaCAocHJvY2Vzc19hY2tzKCZuZWdvdGlhdG9yLCAmcmVhZGVyLCAmY29tbW9uKSkgeworCQkJc3dpdGNoIChwcm9jZXNzX2Fja3MobmVnb3RpYXRvciwgJnJlYWRlciwgJmNvbW1vbikpIHsKIAkJCWNhc2UgMjoKIAkJCQlzdGF0ZSA9IEZFVENIX0dFVF9QQUNLOwogCQkJCWJyZWFrOwpAQCAtMTQ2NCw3ICsxNTMyLDcgQEAKIAogCQkJLyogZ2V0IHRoZSBwYWNrICovCiAJCQlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJwYWNrZmlsZSIsIDApOwotCQkJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlKSkKKwkJCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQkJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIpKTsKIAogCQkJc3RhdGUgPSBGRVRDSF9ET05FOwpAQCAtMTQ3NCw3ICsxNTQyLDggQEAKIAkJfQogCX0KIAotCW5lZ290aWF0b3IucmVsZWFzZSgmbmVnb3RpYXRvcik7CisJaWYgKG5lZ290aWF0b3IpCisJCW5lZ290aWF0b3ItPnJlbGVhc2UobmVnb3RpYXRvcik7CiAJb2lkc2V0X2NsZWFyKCZjb21tb24pOwogCXJldHVybiByZWY7CiB9CmRpZmYgLS1naXQgYS9mc2NrLmMgYi9mc2NrLmMKaW5kZXggZWY4YjM0My4uNjQwZDgxMyAxMDA2NDQKLS0tIGEvZnNjay5jCisrKyBiL2ZzY2suYwpAQCAtNDMsMjEgKzQzLDE3IEBACiAJRlVOQyhNSVNTSU5HX0FVVEhPUiwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfQ09NTUlUVEVSLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19FTUFJTCwgRVJST1IpIFwKLQlGVU5DKE1JU1NJTkdfR1JBRlQsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19PQkpFQ1QsIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1BBUkVOVCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfVEFHLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UQUdfRU5UUlksIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1RBR19PQkpFQ1QsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUVfT0JKRUNULCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFX0VOVFJZLCBFUlJPUikgXAogCUZVTkMoTVVMVElQTEVfQVVUSE9SUywgRVJST1IpIFwKLQlGVU5DKFRBR19PQkpFQ1RfTk9UX1RBRywgRVJST1IpIFwKIAlGVU5DKFRSRUVfTk9UX1NPUlRFRCwgRVJST1IpIFwKIAlGVU5DKFVOS05PV05fVFlQRSwgRVJST1IpIFwKIAlGVU5DKFpFUk9fUEFEREVEX0RBVEUsIEVSUk9SKSBcCkBAIC0yODIsMTQgKzI3OCwxNiBAQAogCXN0cmJ1Zl9hZGRzdHIoc2IsICI6ICIpOwogfQogCi1zdGF0aWMgaW50IG9iamVjdF9vbl9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCitzdGF0aWMgaW50IG9iamVjdF9vbl9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXJldHVybiBvcHRzICYmIG9iaiAmJiBvaWRzZXRfY29udGFpbnMoJm9wdHMtPnNraXBsaXN0LCAmb2JqLT5vaWQpOworCXJldHVybiBvcHRzICYmIG9pZCAmJiBvaWRzZXRfY29udGFpbnMoJm9wdHMtPnNraXBsaXN0LCBvaWQpOwogfQogCi1fX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQotc3RhdGljIGludCByZXBvcnQoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqZWN0LAotCWVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDUsIDYpKSkKK3N0YXRpYyBpbnQgcmVwb3J0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkgIGVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwpAQCAtMjk4LDcgKzI5Niw3IEBACiAJaWYgKG1zZ190eXBlID09IEZTQ0tfSUdOT1JFKQogCQlyZXR1cm4gMDsKIAotCWlmIChvYmplY3Rfb25fc2tpcGxpc3Qob3B0aW9ucywgb2JqZWN0KSkKKwlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9pZCkpCiAJCXJldHVybiAwOwogCiAJaWYgKG1zZ190eXBlID09IEZTQ0tfRkFUQUwpCkBAIC0zMTAsNDkgKzMwOCw3MSBAQAogCiAJdmFfc3RhcnQoYXAsIGZtdCk7CiAJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7Ci0JcmVzdWx0ID0gb3B0aW9ucy0+ZXJyb3JfZnVuYyhvcHRpb25zLCBvYmplY3QsIG1zZ190eXBlLCBzYi5idWYpOworCXJlc3VsdCA9IG9wdGlvbnMtPmVycm9yX2Z1bmMob3B0aW9ucywgb2lkLCBvYmplY3RfdHlwZSwKKwkJCQkgICAgIG1zZ190eXBlLCBzYi5idWYpOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAJdmFfZW5kKGFwKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBjaGFyICpnZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqKQordm9pZCBmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlpZiAoIW9wdGlvbnMtPm9iamVjdF9uYW1lcykKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqKTsKKwkJb3B0aW9ucy0+b2JqZWN0X25hbWVzID0ga2hfaW5pdF9vaWRfbWFwKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCi0JY29uc3QgY2hhciAqZm10LCAuLi4pCitjb25zdCBjaGFyICpmc2NrX2dldF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hpdGVyX3QgcG9zOworCWlmICghb3B0aW9ucy0+b2JqZWN0X25hbWVzKQorCQlyZXR1cm4gTlVMTDsKKwlwb3MgPSBraF9nZXRfb2lkX21hcChvcHRpb25zLT5vYmplY3RfbmFtZXMsICpvaWQpOworCWlmIChwb3MgPj0ga2hfZW5kKG9wdGlvbnMtPm9iamVjdF9uYW1lcykpCisJCXJldHVybiBOVUxMOworCXJldHVybiBraF92YWx1ZShvcHRpb25zLT5vYmplY3RfbmFtZXMsIHBvcyk7Cit9CisKK3ZvaWQgZnNja19wdXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFwOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqZXhpc3Rpbmc7CisJa2hpdGVyX3QgcG9zOworCWludCBoYXNocmV0OwogCiAJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCiAJCXJldHVybjsKLQlleGlzdGluZyA9IGxvb2t1cF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqKTsKLQlpZiAoZXhpc3RpbmcpCisKKwlwb3MgPSBraF9wdXRfb2lkX21hcChvcHRpb25zLT5vYmplY3RfbmFtZXMsICpvaWQsICZoYXNocmV0KTsKKwlpZiAoIWhhc2hyZXQpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcCwgZm10KTsKIAlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7Ci0JYWRkX2RlY29yYXRpb24ob3B0aW9ucy0+b2JqZWN0X25hbWVzLCBvYmosIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCWtoX3ZhbHVlKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgcG9zKSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiAJdmFfZW5kKGFwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX29iamVjdChzdHJ1Y3QgZnNja19vcHRpb25zICpvLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCitjb25zdCBjaGFyICpmc2NrX2Rlc2NyaWJlX29iamVjdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqbmFtZTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZzW10gPSB7CisJCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCisJfTsKKwlzdGF0aWMgaW50IGIgPSAwOworCXN0cnVjdCBzdHJidWYgKmJ1ZjsKKwljb25zdCBjaGFyICpuYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkKTsKIAotCXN0cmJ1Zl9yZXNldCgmYnVmKTsKLQlzdHJidWZfYWRkc3RyKCZidWYsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7Ci0JaWYgKG8tPm9iamVjdF9uYW1lcyAmJiAobmFtZSA9IGxvb2t1cF9kZWNvcmF0aW9uKG8tPm9iamVjdF9uYW1lcywgb2JqKSkpCi0JCXN0cmJ1Zl9hZGRmKCZidWYsICIgKCVzKSIsIG5hbWUpOworCWJ1ZiA9IGJ1ZnMgKyBiOworCWIgPSAoYiArIDEpICUgQVJSQVlfU0laRShidWZzKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAobmFtZSkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICglcykiLCBuYW1lKTsKIAotCXJldHVybiBidWYuYnVmOworCXJldHVybiBidWYtPmJ1ZjsKIH0KIAogc3RhdGljIGludCBmc2NrX3dhbGtfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKQEAgLTM2NSw3ICszODUsNyBAQAogCWlmIChwYXJzZV90cmVlKHRyZWUpKQogCQlyZXR1cm4gLTE7CiAKLQluYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0cmVlLT5vYmplY3QpOworCW5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdHJlZS0+b2JqZWN0Lm9pZCk7CiAJaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKSkKIAkJcmV0dXJuIC0xOwogCXdoaWxlICh0cmVlX2VudHJ5X2dlbnRseSgmZGVzYywgJmVudHJ5KSkgewpAQCAtMzc4LDIwICszOTgsMjEgQEAKIAkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKIAkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOwogCQkJaWYgKG5hbWUgJiYgb2JqKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlcyVzLyIsIG5hbWUsCi0JCQkJCWVudHJ5LnBhdGgpOworCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZlbnRyeS5vaWQsICIlcyVzLyIsCisJCQkJCQkgICAgIG5hbWUsIGVudHJ5LnBhdGgpOwogCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKIAkJfQogCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpIHsKIAkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOwogCQkJaWYgKG5hbWUgJiYgb2JqKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlcyVzIiwgbmFtZSwKLQkJCQkJZW50cnkucGF0aCk7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgJmVudHJ5Lm9pZCwgIiVzJXMiLAorCQkJCQkJICAgICBuYW1lLCBlbnRyeS5wYXRoKTsKIAkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsob2JqLCBPQkpfQkxPQiwgZGF0YSwgb3B0aW9ucyk7CiAJCX0KIAkJZWxzZSB7CiAJCQlyZXN1bHQgPSBlcnJvcigiaW4gdHJlZSAlczogZW50cnkgJXMgaGFzIGJhZCBtb2RlICUuNm8iLAotCQkJCQlkZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJnRyZWUtPm9iamVjdCksIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUpOworCQkJCSAgICAgICBmc2NrX2Rlc2NyaWJlX29iamVjdChvcHRpb25zLCAmdHJlZS0+b2JqZWN0Lm9pZCksCisJCQkJICAgICAgIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUpOwogCQl9CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTQxMiwxMCArNDMzLDEwIEBACiAJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQogCQlyZXR1cm4gLTE7CiAKLQluYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdCk7CisJbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdC5vaWQpOwogCWlmIChuYW1lKQotCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgJmdldF9jb21taXRfdHJlZShjb21taXQpLT5vYmplY3QsCi0JCQkJIiVzOiIsIG5hbWUpOworCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksCisJCQkJICAgICAiJXM6IiwgbmFtZSk7CiAKIAlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCksCiAJCQkgICAgICAgT0JKX1RSRUUsIGRhdGEsIG9wdGlvbnMpOwpAQCAtNDQzLDE2ICs0NjQsMTcgQEAKIAogCXdoaWxlIChwYXJlbnRzKSB7CiAJCWlmIChuYW1lKSB7Ci0JCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmcGFyZW50cy0+aXRlbS0+b2JqZWN0OworCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQ7CiAKIAkJCWlmIChjb3VudGVyKyspCi0JCQkJcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9iaiwgIiVzXiVkIiwKLQkJCQkJbmFtZSwgY291bnRlcik7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJXNeJWQiLAorCQkJCQkJICAgICBuYW1lLCBjb3VudGVyKTsKIAkJCWVsc2UgaWYgKGdlbmVyYXRpb24gPiAwKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlLipzfiVkIiwKLQkJCQkJbmFtZV9wcmVmaXhfbGVuLCBuYW1lLCBnZW5lcmF0aW9uICsgMSk7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJS4qc34lZCIsCisJCQkJCQkgICAgIG5hbWVfcHJlZml4X2xlbiwgbmFtZSwKKwkJCQkJCSAgICAgZ2VuZXJhdGlvbiArIDEpOwogCQkJZWxzZQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlc14iLCBuYW1lKTsKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvaWQsICIlc14iLCBuYW1lKTsKIAkJfQogCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopcGFyZW50cy0+aXRlbSwgT0JKX0NPTU1JVCwgZGF0YSwgb3B0aW9ucyk7CiAJCWlmIChyZXN1bHQgPCAwKQpAQCAtNDY2LDEyICs0ODgsMTIgQEAKIAogc3RhdGljIGludCBmc2NrX3dhbGtfdGFnKHN0cnVjdCB0YWcgKnRhZywgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKLQljaGFyICpuYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPm9iamVjdCk7CisJY29uc3QgY2hhciAqbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPm9iamVjdC5vaWQpOwogCiAJaWYgKHBhcnNlX3RhZyh0YWcpKQogCQlyZXR1cm4gLTE7CiAJaWYgKG5hbWUpCi0JCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCB0YWctPnRhZ2dlZCwgIiVzIiwgbmFtZSk7CisJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPnRhZ2dlZC0+b2lkLCAiJXMiLCBuYW1lKTsKIAlyZXR1cm4gb3B0aW9ucy0+d2Fsayh0YWctPnRhZ2dlZCwgT0JKX0FOWSwgZGF0YSwgb3B0aW9ucyk7CiB9CiAKQEAgLTQ5Myw3ICs1MTUsOCBAQAogCWNhc2UgT0JKX1RBRzoKIAkJcmV0dXJuIGZzY2tfd2Fsa190YWcoKHN0cnVjdCB0YWcgKilvYmosIGRhdGEsIG9wdGlvbnMpOwogCWRlZmF1bHQ6Ci0JCWVycm9yKCJVbmtub3duIG9iamVjdCB0eXBlIGZvciAlcyIsIGRlc2NyaWJlX29iamVjdChvcHRpb25zLCBvYmopKTsKKwkJZXJyb3IoIlVua25vd24gb2JqZWN0IHR5cGUgZm9yICVzIiwKKwkJICAgICAgZnNja19kZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJm9iai0+b2lkKSk7CiAJCXJldHVybiAtMTsKIAl9CiB9CkBAIC01NDQsNyArNTY3LDkgQEAKIAlyZXR1cm4gYzEgPCBjMiA/IDAgOiBUUkVFX1VOT1JERVJFRDsKIH0KIAotc3RhdGljIGludCBmc2NrX3RyZWUoc3RydWN0IHRyZWUgKml0ZW0sIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgaW50IGZzY2tfdHJlZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaGFzX251bGxfc2hhMSA9IDA7CkBAIC01NjEsOCArNTg2LDggQEAKIAl1bnNpZ25lZCBvX21vZGU7CiAJY29uc3QgY2hhciAqb19uYW1lOwogCi0JaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgaXRlbS0+YnVmZmVyLCBpdGVtLT5zaXplKSkgewotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKKwlpZiAoaW5pdF90cmVlX2Rlc2NfZ2VudGx5KCZkZXNjLCBidWZmZXIsIHNpemUpKSB7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtNTg4LDcgKzYxMyw4IEBACiAJCQlpZiAoIVNfSVNMTksobW9kZSkpCiAJCQkJb2lkc2V0X2luc2VydCgmZ2l0bW9kdWxlc19mb3VuZCwgb2lkKTsKIAkJCWVsc2UKLQkJCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsCisJCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLAorCQkJCQkJIG9pZCwgT0JKX1RSRUUsCiAJCQkJCQkgRlNDS19NU0dfR0lUTU9EVUxFU19TWU1MSU5LLAogCQkJCQkJICIuZ2l0bW9kdWxlcyBpcyBhIHN5bWJvbGljIGxpbmsiKTsKIAkJfQpAQCAtNjAxLDcgKzYyNyw3IEBACiAJCQkJCWlmICghU19JU0xOSyhtb2RlKSkKIAkJCQkJCW9pZHNldF9pbnNlcnQoJmdpdG1vZHVsZXNfZm91bmQsIG9pZCk7CiAJCQkJCWVsc2UKLQkJCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwKKwkJCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwKIAkJCQkJCQkJIEZTQ0tfTVNHX0dJVE1PRFVMRVNfU1lNTElOSywKIAkJCQkJCQkJICIuZ2l0bW9kdWxlcyBpcyBhIHN5bWJvbGljIGxpbmsiKTsKIAkJCQl9CkBAIC02MTAsNyArNjM2LDcgQEAKIAkJfQogCiAJCWlmICh1cGRhdGVfdHJlZV9lbnRyeV9nZW50bHkoJmRlc2MpKSB7Ci0JCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKKwkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNjU1LDMwICs2ODEsMzEgQEAKIAl9CiAKIAlpZiAoaGFzX251bGxfc2hhMSkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19OVUxMX1NIQTEsICJjb250YWlucyBlbnRyaWVzIHBvaW50aW5nIHRvIG51bGwgc2hhMSIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX05VTExfU0hBMSwgImNvbnRhaW5zIGVudHJpZXMgcG9pbnRpbmcgdG8gbnVsbCBzaGExIik7CiAJaWYgKGhhc19mdWxsX3BhdGgpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfRlVMTF9QQVRITkFNRSwgImNvbnRhaW5zIGZ1bGwgcGF0aG5hbWVzIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfRlVMTF9QQVRITkFNRSwgImNvbnRhaW5zIGZ1bGwgcGF0aG5hbWVzIik7CiAJaWYgKGhhc19lbXB0eV9uYW1lKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0VNUFRZX05BTUUsICJjb250YWlucyBlbXB0eSBwYXRobmFtZSIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0VNUFRZX05BTUUsICJjb250YWlucyBlbXB0eSBwYXRobmFtZSIpOwogCWlmIChoYXNfZG90KQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0hBU19ET1QsICJjb250YWlucyAnLiciKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9ULCAiY29udGFpbnMgJy4nIik7CiAJaWYgKGhhc19kb3Rkb3QpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVERPVCwgImNvbnRhaW5zICcuLiciKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9URE9ULCAiY29udGFpbnMgJy4uJyIpOwogCWlmIChoYXNfZG90Z2l0KQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0hBU19ET1RHSVQsICJjb250YWlucyAnLmdpdCciKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9UR0lULCAiY29udGFpbnMgJy5naXQnIik7CiAJaWYgKGhhc196ZXJvX3BhZCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19aRVJPX1BBRERFRF9GSUxFTU9ERSwgImNvbnRhaW5zIHplcm8tcGFkZGVkIGZpbGUgbW9kZXMiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19aRVJPX1BBRERFRF9GSUxFTU9ERSwgImNvbnRhaW5zIHplcm8tcGFkZGVkIGZpbGUgbW9kZXMiKTsKIAlpZiAoaGFzX2JhZF9tb2RlcykKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19CQURfRklMRU1PREUsICJjb250YWlucyBiYWQgZmlsZSBtb2RlcyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0JBRF9GSUxFTU9ERSwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CiAJaWYgKGhhc19kdXBfZW50cmllcykKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19EVVBMSUNBVEVfRU5UUklFUywgImNvbnRhaW5zIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19EVVBMSUNBVEVfRU5UUklFUywgImNvbnRhaW5zIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMiKTsKIAlpZiAobm90X3Byb3Blcmx5X3NvcnRlZCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19UUkVFX05PVF9TT1JURUQsICJub3QgcHJvcGVybHkgc29ydGVkIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfVFJFRV9OT1RfU09SVEVELCAibm90IHByb3Blcmx5IHNvcnRlZCIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgdmVyaWZ5X2hlYWRlcnMoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IChjb25zdCBjaGFyICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGk7CkBAIC02ODYsNyArNzEzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCXN3aXRjaCAoYnVmZmVyW2ldKSB7CiAJCWNhc2UgJ1wwJzoKLQkJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLAorCQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsCiAJCQkJRlNDS19NU0dfTlVMX0lOX0hFQURFUiwKIAkJCQkidW50ZXJtaW5hdGVkIGhlYWRlcjogTlVMIGF0IG9mZnNldCAlbGQiLCBpKTsKIAkJY2FzZSAnXG4nOgpAQCAtNzA0LDExICs3MzEsMTMgQEAKIAlpZiAoc2l6ZSAmJiBidWZmZXJbc2l6ZSAtIDFdID09ICdcbicpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosCisJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsCiAJCUZTQ0tfTVNHX1VOVEVSTUlOQVRFRF9IRUFERVIsICJ1bnRlcm1pbmF0ZWQgaGVhZGVyIik7CiB9CiAKLXN0YXRpYyBpbnQgZnNja19pZGVudChjb25zdCBjaGFyICoqaWRlbnQsIHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3N0YXRpYyBpbnQgZnNja19pZGVudChjb25zdCBjaGFyICoqaWRlbnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCWNvbnN0IGNoYXIgKnAgPSAqaWRlbnQ7CiAJY2hhciAqZW5kOwpAQCAtNzE4LDI4ICs3NDcsMjggQEAKIAkJKCppZGVudCkrKzsKIAogCWlmICgqcCA9PSAnPCcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19OQU1FX0JFRk9SRV9FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBzcGFjZSBiZWZvcmUgZW1haWwiKTsKIAlwICs9IHN0cmNzcG4ocCwgIjw+XG4iKTsKIAlpZiAoKnAgPT0gJz4nKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX05BTUUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBuYW1lIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19CQURfTkFNRSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIG5hbWUiKTsKIAlpZiAoKnAgIT0gJzwnKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfTUlTU0lOR19FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBlbWFpbCIpOwogCWlmIChwWy0xXSAhPSAnICcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBzcGFjZSBiZWZvcmUgZW1haWwiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOwogCXArKzsKIAlwICs9IHN0cmNzcG4ocCwgIjw+XG4iKTsKIAlpZiAoKnAgIT0gJz4nKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIGVtYWlsIik7CiAJcCsrOwogCWlmICgqcCAhPSAnICcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX1NQQUNFX0JFRk9SRV9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBkYXRlIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX1NQQUNFX0JFRk9SRV9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBkYXRlIik7CiAJcCsrOwogCWlmICgqcCA9PSAnMCcgJiYgcFsxXSAhPSAnICcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19aRVJPX1BBRERFRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSB6ZXJvLXBhZGRlZCBkYXRlIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19aRVJPX1BBRERFRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSB6ZXJvLXBhZGRlZCBkYXRlIik7CiAJaWYgKGRhdGVfb3ZlcmZsb3dzKHBhcnNlX3RpbWVzdGFtcChwLCAmZW5kLCAxMCkpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX0RBVEVfT1ZFUkZMT1csICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGRhdGUgY2F1c2VzIGludGVnZXIgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9EQVRFX09WRVJGTE9XLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBkYXRlIGNhdXNlcyBpbnRlZ2VyIG92ZXJmbG93Iik7CiAJaWYgKChlbmQgPT0gcCB8fCAqZW5kICE9ICcgJykpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfREFURSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIGRhdGUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZGF0ZSIpOwogCXAgPSBlbmQgKyAxOwogCWlmICgoKnAgIT0gJysnICYmICpwICE9ICctJykgfHwKIAkgICAgIWlzZGlnaXQocFsxXSkgfHwKQEAgLTc0Nyw4MyArNzc2LDYwIEBACiAJICAgICFpc2RpZ2l0KHBbM10pIHx8CiAJICAgICFpc2RpZ2l0KHBbNF0pIHx8CiAJICAgIChwWzVdICE9ICdcbicpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX1RJTUVaT05FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgdGltZSB6b25lIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19CQURfVElNRVpPTkUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCB0aW1lIHpvbmUiKTsKIAlwICs9IDY7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNja19jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqYnVmZmVyLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3N0YXRpYyBpbnQgZnNja19jb21taXQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewotCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQsIG9pZDsKLQlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKLQl1bnNpZ25lZCBwYXJlbnRfY291bnQsIHBhcmVudF9saW5lX2NvdW50ID0gMCwgYXV0aG9yX2NvdW50OworCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQsIHBhcmVudF9vaWQ7CisJdW5zaWduZWQgYXV0aG9yX2NvdW50OwogCWludCBlcnI7CiAJY29uc3QgY2hhciAqYnVmZmVyX2JlZ2luID0gYnVmZmVyOwogCWNvbnN0IGNoYXIgKnA7CiAKLQlpZiAodmVyaWZ5X2hlYWRlcnMoYnVmZmVyLCBzaXplLCAmY29tbWl0LT5vYmplY3QsIG9wdGlvbnMpKQorCWlmICh2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsIG9pZCwgT0JKX0NPTU1JVCwgb3B0aW9ucykpCiAJCXJldHVybiAtMTsKIAogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHJlZSAiLCAmYnVmZmVyKSkKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVFJFRSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RyZWUnIGxpbmUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfVFJFRSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RyZWUnIGxpbmUiKTsKIAlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZ0cmVlX29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUVfU0hBMSwgImludmFsaWQgJ3RyZWUnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfQkFEX1RSRUVfU0hBMSwgImludmFsaWQgJ3RyZWUnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCWJ1ZmZlciA9IHAgKyAxOwogCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJwYXJlbnQgIiwgJmJ1ZmZlcikpIHsKLQkJaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgewotCQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfQkFEX1BBUkVOVF9TSEExLCAiaW52YWxpZCAncGFyZW50JyBsaW5lIGZvcm1hdCAtIGJhZCBzaGExIik7CisJCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnBhcmVudF9vaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7CisJCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19CQURfUEFSRU5UX1NIQTEsICJpbnZhbGlkICdwYXJlbnQnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCQlidWZmZXIgPSBwICsgMTsKLQkJcGFyZW50X2xpbmVfY291bnQrKzsKLQl9Ci0JZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KHRoZV9yZXBvc2l0b3J5LCAmY29tbWl0LT5vYmplY3Qub2lkKTsKLQlwYXJlbnRfY291bnQgPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOwotCWlmIChncmFmdCkgewotCQlpZiAoZ3JhZnQtPm5yX3BhcmVudCA9PSAtMSAmJiAhcGFyZW50X2NvdW50KQotCQkJOyAvKiBzaGFsbG93IGNvbW1pdCAqLwotCQllbHNlIGlmIChncmFmdC0+bnJfcGFyZW50ICE9IHBhcmVudF9jb3VudCkgewotCQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19HUkFGVCwgImdyYWZ0IG9iamVjdHMgbWlzc2luZyIpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBhcmVudF9jb3VudCAhPSBwYXJlbnRfbGluZV9jb3VudCkgewotCQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19QQVJFTlQsICJwYXJlbnQgb2JqZWN0cyBtaXNzaW5nIik7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KIAl9CiAJYXV0aG9yX2NvdW50ID0gMDsKIAl3aGlsZSAoc2tpcF9wcmVmaXgoYnVmZmVyLCAiYXV0aG9yICIsICZidWZmZXIpKSB7CiAJCWF1dGhvcl9jb3VudCsrOwotCQllcnIgPSBmc2NrX2lkZW50KCZidWZmZXIsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucyk7CisJCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCWlmIChhdXRob3JfY291bnQgPCAxKQotCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX0FVVEhPUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2F1dGhvcicgbGluZSIpOworCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19NSVNTSU5HX0FVVEhPUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2F1dGhvcicgbGluZSIpOwogCWVsc2UgaWYgKGF1dGhvcl9jb3VudCA+IDEpCi0JCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01VTFRJUExFX0FVVEhPUlMsICJpbnZhbGlkIGZvcm1hdCAtIG11bHRpcGxlICdhdXRob3InIGxpbmVzIik7CisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01VTFRJUExFX0FVVEhPUlMsICJpbnZhbGlkIGZvcm1hdCAtIG11bHRpcGxlICdhdXRob3InIGxpbmVzIik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgImNvbW1pdHRlciAiLCAmYnVmZmVyKSkKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfQ09NTUlUVEVSLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnY29tbWl0dGVyJyBsaW5lIik7Ci0JZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCAmY29tbWl0LT5vYmplY3QsIG9wdGlvbnMpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTUlTU0lOR19DT01NSVRURVIsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdjb21taXR0ZXInIGxpbmUiKTsKKwllcnIgPSBmc2NrX2lkZW50KCZidWZmZXIsIG9pZCwgT0JKX0NPTU1JVCwgb3B0aW9ucyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlpZiAoIWdldF9jb21taXRfdHJlZShjb21taXQpKSB7Ci0JCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY291bGQgbm90IGxvYWQgY29tbWl0J3MgdHJlZSAlcyIsIG9pZF90b19oZXgoJnRyZWVfb2lkKSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KIAlpZiAobWVtY2hyKGJ1ZmZlcl9iZWdpbiwgJ1wwJywgc2l6ZSkpIHsKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTlVMX0lOX0NPTU1JVCwKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTlVMX0lOX0NPTU1JVCwKIAkJCSAgICAgIk5VTCBieXRlIGluIHRoZSBjb21taXQgb2JqZWN0IGJvZHkiKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC04MzEsOTEgKzgzNyw2MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZzY2tfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqZGF0YSwKLQl1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgaW50IGZzY2tfdGFnKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewotCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGRhdGEgPyAgZGF0YSA6IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgJnNpemUpOwotCWludCByZXQgPSBmc2NrX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIsIHNpemUsIG9wdGlvbnMpOwotCWlmICghZGF0YSkKLQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlcik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBmc2NrX3RhZ19idWZmZXIoc3RydWN0IHRhZyAqdGFnLCBjb25zdCBjaGFyICpkYXRhLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKLXsKLQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRhZ2dlZF9vaWQ7CiAJaW50IHJldCA9IDA7Ci0JY29uc3QgY2hhciAqYnVmZmVyOwotCWNoYXIgKnRvX2ZyZWUgPSBOVUxMLCAqZW9sOworCWNoYXIgKmVvbDsKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqcDsKIAotCWlmIChkYXRhKQotCQlidWZmZXIgPSBkYXRhOwotCWVsc2UgewotCQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0KLQkJYnVmZmVyID0gdG9fZnJlZSA9Ci0JCQlyZWFkX29iamVjdF9maWxlKCZ0YWctPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7Ci0JCWlmICghYnVmZmVyKQotCQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsCi0JCQkJRlNDS19NU0dfTUlTU0lOR19UQUdfT0JKRUNULAotCQkJCSJjYW5ub3QgcmVhZCB0YWcgb2JqZWN0Iik7Ci0KLQkJaWYgKHR5cGUgIT0gT0JKX1RBRykgewotCQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwKLQkJCQlGU0NLX01TR19UQUdfT0JKRUNUX05PVF9UQUcsCi0JCQkJImV4cGVjdGVkIHRhZyBnb3QgJXMiLAotCQkJICAgIHR5cGVfbmFtZSh0eXBlKSk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQl9Ci0KLQlyZXQgPSB2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsICZ0YWctPm9iamVjdCwgb3B0aW9ucyk7CisJcmV0ID0gdmVyaWZ5X2hlYWRlcnMoYnVmZmVyLCBzaXplLCBvaWQsIE9CSl9UQUcsIG9wdGlvbnMpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKIAogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAib2JqZWN0ICIsICZidWZmZXIpKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfT0JKRUNULCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnb2JqZWN0JyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfT0JKRUNULCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnb2JqZWN0JyBsaW5lIik7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19CQURfT0JKRUNUX1NIQTEsICJpbnZhbGlkICdvYmplY3QnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZ0YWdnZWRfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19CQURfT0JKRUNUX1NIQTEsICJpbnZhbGlkICdvYmplY3QnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZG9uZTsKIAl9CiAJYnVmZmVyID0gcCArIDE7CiAKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInR5cGUgIiwgJmJ1ZmZlcikpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UWVBFX0VOVFJZLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHlwZScgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RZUEVfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0eXBlJyBsaW5lIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CiAJaWYgKCFlb2wpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UWVBFLCAiaW52YWxpZCBmb3JtYXQgLSB1bmV4cGVjdGVkIGVuZCBhZnRlciAndHlwZScgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RZUEUsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJaWYgKHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KGJ1ZmZlciwgZW9sIC0gYnVmZmVyLCAxKSA8IDApCi0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UWVBFLCAiaW52YWxpZCAndHlwZScgdmFsdWUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfQkFEX1RZUEUsICJpbnZhbGlkICd0eXBlJyB2YWx1ZSIpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKIAlidWZmZXIgPSBlb2wgKyAxOwogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0YWcgIiwgJmJ1ZmZlcikpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UQUdfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWcnIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUdfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWcnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAllb2wgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKIAlpZiAoIWVvbCkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RBRywgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUcsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJc3RyYnVmX2FkZGYoJnNiLCAicmVmcy90YWdzLyUuKnMiLCAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOwogCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChzYi5idWYsIDApKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UQUdfTkFNRSwKLQkJCSAgICJpbnZhbGlkICd0YWcnIG5hbWU6ICUuKnMiLAotCQkJICAgKGludCkoZW9sIC0gYnVmZmVyKSwgYnVmZmVyKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywKKwkJCSAgICAgRlNDS19NU0dfQkFEX1RBR19OQU1FLAorCQkJICAgICAiaW52YWxpZCAndGFnJyBuYW1lOiAlLipzIiwKKwkJCSAgICAgKGludCkoZW9sIC0gYnVmZmVyKSwgYnVmZmVyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZG9uZTsKIAl9CkBAIC05MjMsMzIgKzg5OCwyMCBAQAogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0YWdnZXIgIiwgJmJ1ZmZlcikpIHsKIAkJLyogZWFybHkgdGFncyBkbyBub3QgY29udGFpbiAndGFnZ2VyJyBsaW5lczsgd2FybiBvbmx5ICovCi0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVEFHR0VSX0VOVFJZLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndGFnZ2VyJyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVEFHR0VSX0VOVFJZLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndGFnZ2VyJyBsaW5lIik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGRvbmU7CiAJfQogCWVsc2UKLQkJcmV0ID0gZnNja19pZGVudCgmYnVmZmVyLCAmdGFnLT5vYmplY3QsIG9wdGlvbnMpOworCQlyZXQgPSBmc2NrX2lkZW50KCZidWZmZXIsIG9pZCwgT0JKX1RBRywgb3B0aW9ucyk7CiAKIGRvbmU6CiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKLQlmcmVlKHRvX2ZyZWUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZnNja190YWcoc3RydWN0IHRhZyAqdGFnLCBjb25zdCBjaGFyICpkYXRhLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKLXsKLQlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQgPSB0YWctPnRhZ2dlZDsKLQotCWlmICghdGFnZ2VkKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RBR19PQkpFQ1QsICJjb3VsZCBub3QgbG9hZCB0YWdnZWQgb2JqZWN0Iik7Ci0KLQlyZXR1cm4gZnNja190YWdfYnVmZmVyKHRhZywgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7Ci19Ci0KIHN0cnVjdCBmc2NrX2dpdG1vZHVsZXNfZGF0YSB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKIAlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zOwogCWludCByZXQ7CiB9OwpAQCAtOTY2LDI1ICs5MjksMjggQEAKIAogCW5hbWUgPSB4bWVtZHVweihzdWJzZWN0aW9uLCBzdWJzZWN0aW9uX2xlbik7CiAJaWYgKGNoZWNrX3N1Ym1vZHVsZV9uYW1lKG5hbWUpIDwgMCkKLQkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLCBkYXRhLT5vYmosCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywKKwkJCQkgICAgZGF0YS0+b2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19OQU1FLAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgbmFtZTogJXMiLAogCQkJCSAgICBuYW1lKTsKIAlpZiAoIXN0cmNtcChrZXksICJ1cmwiKSAmJiB2YWx1ZSAmJgogCSAgICBsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24odmFsdWUpKQotCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsIGRhdGEtPm9iaiwKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAogCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX1VSTCwKIAkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHVybDogJXMiLAogCQkJCSAgICB2YWx1ZSk7CiAJaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIpICYmIHZhbHVlICYmCiAJICAgIGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCi0JCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywgZGF0YS0+b2JqLAorCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsCisJCQkJICAgIGRhdGEtPm9pZCwgT0JKX0JMT0IsCiAJCQkJICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfUEFUSCwKIAkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHBhdGg6ICVzIiwKIAkJCQkgICAgdmFsdWUpOwogCWlmICghc3RyY21wKGtleSwgInVwZGF0ZSIpICYmIHZhbHVlICYmCiAJICAgIHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfdHlwZSh2YWx1ZSkgPT0gU01fVVBEQVRFX0NPTU1BTkQpCi0JCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywgZGF0YS0+b2JqLAorCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsIGRhdGEtPm9pZCwgT0JKX0JMT0IsCiAJCQkJICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfVVBEQVRFLAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgdXBkYXRlIHNldHRpbmc6ICVzIiwKIAkJCQkgICAgdmFsdWUpOwpAQCAtOTkzLDE3ICs5NTksMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmc2NrX2Jsb2Ioc3RydWN0IGJsb2IgKmJsb2IsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBpbnQgZnNja19ibG9iKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqYnVmLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgY29uZmlnX29wdGlvbnMgY29uZmlnX29wdHMgPSB7IDAgfTsKIAotCWlmICghb2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2ZvdW5kLCAmYmxvYi0+b2JqZWN0Lm9pZCkpCisJaWYgKCFvaWRzZXRfY29udGFpbnMoJmdpdG1vZHVsZXNfZm91bmQsIG9pZCkpCiAJCXJldHVybiAwOwotCW9pZHNldF9pbnNlcnQoJmdpdG1vZHVsZXNfZG9uZSwgJmJsb2ItPm9iamVjdC5vaWQpOworCW9pZHNldF9pbnNlcnQoJmdpdG1vZHVsZXNfZG9uZSwgb2lkKTsKIAotCWlmIChvYmplY3Rfb25fc2tpcGxpc3Qob3B0aW9ucywgJmJsb2ItPm9iamVjdCkpCisJaWYgKG9iamVjdF9vbl9za2lwbGlzdChvcHRpb25zLCBvaWQpKQogCQlyZXR1cm4gMDsKIAogCWlmICghYnVmKSB7CkBAIC0xMDEyLDE4ICs5NzgsMTggQEAKIAkJICogYmxvYiB0b28gZ2lnYW50aWMgdG8gbG9hZCBpbnRvIG1lbW9yeS4gTGV0J3MganVzdCBjb25zaWRlcgogCQkgKiB0aGF0IGFuIGVycm9yLgogCQkgKi8KLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0JMT0IsCiAJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0xBUkdFLAogCQkJICAgICAgIi5naXRtb2R1bGVzIHRvbyBsYXJnZSB0byBwYXJzZSIpOwogCX0KIAotCWRhdGEub2JqID0gJmJsb2ItPm9iamVjdDsKKwlkYXRhLm9pZCA9IG9pZDsKIAlkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCWRhdGEucmV0ID0gMDsKIAljb25maWdfb3B0cy5lcnJvcl9hY3Rpb24gPSBDT05GSUdfRVJST1JfU0lMRU5UOwogCWlmIChnaXRfY29uZmlnX2Zyb21fbWVtKGZzY2tfZ2l0bW9kdWxlc19mbiwgQ09ORklHX09SSUdJTl9CTE9CLAogCQkJCSIuZ2l0bW9kdWxlcyIsIGJ1Ziwgc2l6ZSwgJmRhdGEsICZjb25maWdfb3B0cykpCi0JCWRhdGEucmV0IHw9IHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQlkYXRhLnJldCB8PSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQkxPQiwKIAkJCQkgICBGU0NLX01TR19HSVRNT0RVTEVTX1BBUlNFLAogCQkJCSAgICJjb3VsZCBub3QgcGFyc2UgZ2l0bW9kdWxlcyBibG9iIik7CiAKQEAgLTEwMzQsMzEgKzEwMDAsMzMgQEAKIAlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCWlmICghb2JqKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBOVUxMLCBPQkpfTk9ORSwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKIAogCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCi0JCXJldHVybiBmc2NrX2Jsb2IoKHN0cnVjdCBibG9iICopb2JqLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfYmxvYigmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCi0JCXJldHVybiBmc2NrX3RyZWUoKHN0cnVjdCB0cmVlICopIG9iaiwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RyZWUoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKIAlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCi0JCXJldHVybiBmc2NrX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBvYmosIChjb25zdCBjaGFyICopIGRhdGEsCi0JCQlzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfY29tbWl0KCZvYmotPm9pZCwgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7CiAJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQotCQlyZXR1cm4gZnNja190YWcoKHN0cnVjdCB0YWcgKikgb2JqLCAoY29uc3QgY2hhciAqKSBkYXRhLAotCQkJc2l6ZSwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RhZygmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCi0JcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1VOS05PV05fVFlQRSwgInVua25vd24gdHlwZSAnJWQnIChpbnRlcm5hbCBmc2NrIGVycm9yKSIsCi0JCQkgIG9iai0+dHlwZSk7CisJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmb2JqLT5vaWQsIG9iai0+dHlwZSwKKwkJICAgICAgRlNDS19NU0dfVU5LTk9XTl9UWVBFLAorCQkgICAgICAidW5rbm93biB0eXBlICclZCcgKGludGVybmFsIGZzY2sgZXJyb3IpIiwKKwkJICAgICAgb2JqLT50eXBlKTsKIH0KIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQlpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgewotCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZGVzY3JpYmVfb2JqZWN0KG8sIG9iaiksIG1lc3NhZ2UpOworCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZnNja19kZXNjcmliZV9vYmplY3Qobywgb2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAwOwogCX0KLQllcnJvcigib2JqZWN0ICVzOiAlcyIsIGRlc2NyaWJlX29iamVjdChvLCBvYmopLCBtZXNzYWdlKTsKKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG8sIG9pZCksIG1lc3NhZ2UpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDcwLDcgKzEwMzgsNiBAQAogCiAJb2lkc2V0X2l0ZXJfaW5pdCgmZ2l0bW9kdWxlc19mb3VuZCwgJml0ZXIpOwogCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7Ci0JCXN0cnVjdCBibG9iICpibG9iOwogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJY2hhciAqYnVmOwpAQCAtMTA3OCwyOSArMTA0NSwyMiBAQAogCQlpZiAob2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2RvbmUsIG9pZCkpCiAJCQljb250aW51ZTsKIAotCQlibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7Ci0JCWlmICghYmxvYikgewotCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9iaiwKLQkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCi0JCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWJ1ZikgewotCQkJaWYgKGlzX3Byb21pc29yX29iamVjdCgmYmxvYi0+b2JqZWN0Lm9pZCkpCisJCQlpZiAoaXNfcHJvbWlzb3Jfb2JqZWN0KG9pZCkpCiAJCQkJY29udGludWU7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsICZibG9iLT5vYmplY3QsCisJCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsCisJCQkJICAgICAgb2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX01JU1NJTkcsCiAJCQkJICAgICAgInVuYWJsZSB0byByZWFkIC5naXRtb2R1bGVzIGJsb2IiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHR5cGUgPT0gT0JKX0JMT0IpCi0JCQlyZXQgfD0gZnNja19ibG9iKGJsb2IsIGJ1Ziwgc2l6ZSwgb3B0aW9ucyk7CisJCQlyZXQgfD0gZnNja19ibG9iKG9pZCwgYnVmLCBzaXplLCBvcHRpb25zKTsKIAkJZWxzZQotCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLAorCQkJCSAgICAgIG9pZCwgdHlwZSwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCiAJCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7CiAJCWZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaAppbmRleCBiOTU1OTVhLi42OWNmNzE1IDEwMDY0NAotLS0gYS9mc2NrLmgKKysrIGIvZnNjay5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogLyogY2FsbGJhY2sgZm9yIGZzY2tfb2JqZWN0LCB0eXBlIGlzIEZTQ0tfRVJST1Igb3IgRlNDS19XQVJOICovCiB0eXBlZGVmIGludCAoKmZzY2tfZXJyb3IpKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCi0Jc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCSAgaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCWludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIHN0cnVjdCBmc2NrX29wdGlvbnMgewogCWZzY2tfd2Fsa19mdW5jIHdhbGs7CkBAIC0zOCw3ICs0MCw3IEBACiAJdW5zaWduZWQgc3RyaWN0OjE7CiAJaW50ICptc2dfdHlwZTsKIAlzdHJ1Y3Qgb2lkc2V0IHNraXBsaXN0OwotCXN0cnVjdCBkZWNvcmF0aW9uICpvYmplY3RfbmFtZXM7CisJa2hfb2lkX21hcF90ICpvYmplY3RfbmFtZXM7CiB9OwogCiAjZGVmaW5lIEZTQ0tfT1BUSU9OU19ERUZBVUxUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMCwgTlVMTCwgT0lEU0VUX0lOSVQgfQpAQCAtNTIsNyArNTQsMTEgQEAKICAqICAgIDAJCWV2ZXJ5dGhpbmcgT0sKICAqLwogaW50IGZzY2tfd2FsayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOwotLyogSWYgTlVMTCBpcyBwYXNzZWQgZm9yIGRhdGEsIHdlIGFzc3VtZSB0aGUgb2JqZWN0IGlzIGxvY2FsIGFuZCByZWFkIGl0LiAqLworCisvKgorICogQmxvYiBvYmplY3RzIG15IHBhc3MgYSBOVUxMIGRhdGEgcG9pbnRlciwgd2hpY2ggaW5kaWNhdGVzIHRoZXkgYXJlIHRvbyBsYXJnZQorICogdG8gZml0IGluIG1lbW9yeS4gQWxsIG90aGVyIHR5cGVzIG11c3QgcGFzcyBhIHJlYWwgYnVmZmVyLgorICovCiBpbnQgZnNja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CiAKQEAgLTYzLDQgKzY5LDI5IEBACiAgKi8KIGludCBmc2NrX2ZpbmlzaChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKIAorLyoKKyAqIFN1YnN5c3RlbSBmb3Igc3RvcmluZyBodW1hbi1yZWFkYWJsZSBuYW1lcyBmb3IgZWFjaCBvYmplY3QuCisgKgorICogSWYgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgYWxsIG90aGVyIGZ1bmN0aW9ucyBhcmUKKyAqIG5vb3BzLgorICoKKyAqIFVzZSBmc2NrX3B1dF9vYmplY3RfbmFtZSgpIHRvIHNlZWQgaW5pdGlhbCBuYW1lcyAoZS5nLiBmcm9tIHJlZm5hbWVzKTsgdGhlCisgKiBmc2NrIGNvZGUgd2lsbCBleHRlbmQgdGhhdCB3aGlsZSB3YWxraW5nIHRyZWVzLCBldGMuCisgKgorICogVXNlIGZzY2tfZ2V0X29iamVjdF9uYW1lKCkgdG8gZ2V0IGEgc2luZ2xlIG5hbWUgKG9yIE5VTEwgaWYgbm9uZSkuIE9yIHRoZQorICogbW9yZSBjb252ZW5pZW50IGRlc2NyaWJlX29iamVjdCgpLCB3aGljaCBhbHdheXMgcHJvZHVjZXMgYW4gb3V0cHV0IHN0cmluZworICogd2l0aCB0aGUgb2lkIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgKGlmIGFueSkuIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlCisgKiBwb2ludHMgdG8gYSByb3RhdGluZyBhcnJheSBvZiBzdGF0aWMgYnVmZmVycywgYW5kIG1heSBiZSBpbnZhbGlkYXRlZCBieSBhCisgKiBzdWJzZXF1ZW50IGNhbGwuCisgKi8KK3ZvaWQgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworY29uc3QgY2hhciAqZnNja19nZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDMsNCkpKQordm9pZCBmc2NrX3B1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNoYXIgKmZzY2tfZGVzY3JpYmVfb2JqZWN0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnNtb25pdG9yLmMgYi9mc21vbml0b3IuYwppbmRleCAxZjRhYTFiLi44NjhjY2EwIDEwMDY0NAotLS0gYS9mc21vbml0b3IuYworKysgYi9mc21vbml0b3IuYwpAQCAtNTUsNyArNTUsOCBAQAogCX0KIAlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IGZzbW9uaXRvcl9kaXJ0eTsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApAQCAtODMsNyArODQsOCBAQAogCXVpbnQzMl90IGV3YWhfc2l6ZSA9IDA7CiAJaW50IGZpeHVwID0gMDsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApAQCAtMTg5LDEzICsxOTEsMjYgQEAKIAkJfQogCQlpZiAoYm9sIDwgcXVlcnlfcmVzdWx0LmxlbikKIAkJCWZzbW9uaXRvcl9yZWZyZXNoX2NhbGxiYWNrKGlzdGF0ZSwgYnVmICsgYm9sKTsKKworCQkvKiBOb3cgbWFyayB0aGUgdW50cmFja2VkIGNhY2hlIGZvciBmc21vbml0b3IgdXNhZ2UgKi8KKwkJaWYgKGlzdGF0ZS0+dW50cmFja2VkKQorCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAxOwogCX0gZWxzZSB7CisKKwkJLyogV2Ugb25seSB3YW50IHRvIHJ1biB0aGUgcG9zdCBpbmRleCBjaGFuZ2VkIGhvb2sgaWYgd2UndmUgYWN0dWFsbHkgY2hhbmdlZCBlbnRyaWVzLCBzbyBrZWVwIHRyYWNrCisJCSAqIGlmIHdlIGFjdHVhbGx5IGNoYW5nZWQgZW50cmllcyBvciBub3QgKi8KKwkJaW50IGlzX2NhY2hlX2NoYW5nZWQgPSAwOwogCQkvKiBNYXJrIGFsbCBlbnRyaWVzIGludmFsaWQgKi8KLQkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykKLQkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisJCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJCWlmIChpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkgeworCQkJCWlzX2NhY2hlX2NoYW5nZWQgPSAxOworCQkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisJCQl9CisJCX0KIAogCQkvKiBJZiB3ZSdyZSBnb2luZyB0byBjaGVjayBldmVyeSBmaWxlLCBlbnN1cmUgd2Ugc2F2ZSB0aGUgcmVzdWx0cyAqLwotCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gRlNNT05JVE9SX0NIQU5HRUQ7CisJCWlmIChpc19jYWNoZV9jaGFuZ2VkKQorCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IEZTTU9OSVRPUl9DSEFOR0VEOwogCiAJCWlmIChpc3RhdGUtPnVudHJhY2tlZCkKIAkJCWlzdGF0ZS0+dW50cmFja2VkLT51c2VfZnNtb25pdG9yID0gMDsKQEAgLTI1Nyw5ICsyNzIsNyBAQAogCQkJCSAgICAodWludG1heF90KWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LT5iaXRfc2l6ZSwgaXN0YXRlLT5jYWNoZV9ucik7CiAJCQlld2FoX2VhY2hfYml0KGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LCBmc21vbml0b3JfZXdhaF9jYWxsYmFjaywgaXN0YXRlKTsKIAotCQkJLyogTm93IG1hcmsgdGhlIHVudHJhY2tlZCBjYWNoZSBmb3IgZnNtb25pdG9yIHVzYWdlICovCi0JCQlpZiAoaXN0YXRlLT51bnRyYWNrZWQpCi0JCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAxOworCQkJcmVmcmVzaF9mc21vbml0b3IoaXN0YXRlKTsKIAkJfQogCiAJCWV3YWhfZnJlZShpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSk7CmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAppbmRleCA1MjY1OWJiLi4xMGZkMzBhIDEwMDc1NQotLS0gYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTE3Nyw3ICsxNzcsOSBAQAogCX0gZWxzZSB7CiAJCW15ICRmaCA9IHVuZGVmOwogCQlvcGVuKCRmaCwgJy18JywgQF8pIG9yIGRpZTsKLQkJcmV0dXJuIDwkZmg+OworCQlteSBAb3V0ID0gPCRmaD47CisJCWNsb3NlICRmaCB8fCBkaWUgIkNhbm5vdCBjbG9zZSBAXyAoJCEpIjsKKwkJcmV0dXJuIEBvdXQ7CiAJfQogfQogCkBAIC0yMjQsNyArMjI2LDcgQEAKIAlzdWIgZ2V0X2VtcHR5X3RyZWUgewogCQlyZXR1cm4gJGVtcHR5X3RyZWUgaWYgZGVmaW5lZCAkZW1wdHlfdHJlZTsKIAotCQkkZW1wdHlfdHJlZSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpKTsKKwkJKCRlbXB0eV90cmVlKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpKTsKIAkJY2hvbXAgJGVtcHR5X3RyZWU7CiAJCXJldHVybiAkZW1wdHlfdHJlZTsKIAl9CkBAIC0xMTI3LDcgKzExMjksNyBAQAogRU9GMgogCWNsb3NlICRmaDsKIAotCWNob21wKG15ICRlZGl0b3IgPSBydW5fY21kX3BpcGUocXcoZ2l0IHZhciBHSVRfRURJVE9SKSkpOworCWNob21wKG15ICgkZWRpdG9yKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgdmFyIEdJVF9FRElUT1IpKSk7CiAJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGh1bmtmaWxlKTsKIAogCWlmICgkPyAhPSAwKSB7CmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCmluZGV4IGQwZGQ5YzAuLmFlZDBiNWQgMTAwNjQ0Ci0tLSBhL2dpdC1jb21wYXQtdXRpbC5oCisrKyBiL2dpdC1jb21wYXQtdXRpbC5oCkBAIC0zMjAsMjYgKzMyMCw2IEBACiAjZGVmaW5lIFBBVEhfTUFYIDQwOTYKICNlbmRpZgogCi0jaWZuZGVmIFBSSXVNQVgKLSNkZWZpbmUgUFJJdU1BWCAibGx1IgotI2VuZGlmCi0KLSNpZm5kZWYgU0NOdU1BWAotI2RlZmluZSBTQ051TUFYIFBSSXVNQVgKLSNlbmRpZgotCi0jaWZuZGVmIFBSSXUzMgotI2RlZmluZSBQUkl1MzIgInUiCi0jZW5kaWYKLQotI2lmbmRlZiBQUkl4MzIKLSNkZWZpbmUgUFJJeDMyICJ4IgotI2VuZGlmCi0KLSNpZm5kZWYgUFJJbzMyCi0jZGVmaW5lIFBSSW8zMiAibyIKLSNlbmRpZgotCiB0eXBlZGVmIHVpbnRtYXhfdCB0aW1lc3RhbXBfdDsKICNkZWZpbmUgUFJJdGltZSBQUkl1TUFYCiAjZGVmaW5lIHBhcnNlX3RpbWVzdGFtcCBzdHJ0b3VtYXgKZGlmZiAtLWdpdCBhL2dpdC1jdnNpbXBvcnQucGVybCBiL2dpdC1jdnNpbXBvcnQucGVybAppbmRleCBiMzE2MTNjLi4xMDU3ZjM4IDEwMDc1NQotLS0gYS9naXQtY3ZzaW1wb3J0LnBlcmwKKysrIGIvZ2l0LWN2c2ltcG9ydC5wZXJsCkBAIC02MDAsNyArNjAwLDcgQEAKIHN1YiBwZGF0ZSgkKSB7CiAJbXkgKCRkKSA9IEBfOwogCW0jKFxkezIsNH0pLyhcZFxkKS8oXGRcZClccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT8jCi0JCW9yIGRpZSAiVW5wYXJzZWFibGUgZGF0ZTogJGRcbiI7CisJCW9yIGRpZSAiVW5wYXJzYWJsZSBkYXRlOiAkZFxuIjsKIAlteSAkeT0kMTsKIAkkeSs9MTAwIGlmICR5PDcwOwogCSR5Kz0xOTAwIGlmICR5PDEwMDA7CmRpZmYgLS1naXQgYS9naXQtbGVnYWN5LXN0YXNoLnNoIGIvZ2l0LWxlZ2FjeS1zdGFzaC5zaAppbmRleCAwN2FkNGE1Li41M2ZhNTc0IDEwMDc1NQotLS0gYS9naXQtbGVnYWN5LXN0YXNoLnNoCisrKyBiL2dpdC1sZWdhY3ktc3Rhc2guc2gKQEAgLTE5Myw3ICsxOTMsOCBAQAogCQkJR0lUX0lOREVYX0ZJTEU9IiRUTVBpbmRleCIgJiYKIAkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgogCQkJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgLXogSEVBRCAtLSAiJEAiID4iJFRNUC1zdGFnZW5hbWVzIiAmJgotCQkJZ2l0IHVwZGF0ZS1pbmRleCAteiAtLWFkZCAtLXJlbW92ZSAtLXN0ZGluIDwiJFRNUC1zdGFnZW5hbWVzIiAmJgorCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMgXAorCQkJCS16IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gPCIkVE1QLXN0YWdlbmFtZXMiICYmCiAJCQlnaXQgd3JpdGUtdHJlZSAmJgogCQkJcm0gLWYgIiRUTVBpbmRleCIKIAkJKSApIHx8CmRpZmYgLS1naXQgYS9naXQtcDQucHkgYi9naXQtcDQucHkKaW5kZXggNjBjNzNiNi4uMGIzYTA3YyAxMDA3NTUKLS0tIGEvZ2l0LXA0LnB5CisrKyBiL2dpdC1wNC5weQpAQCAtMTI1Nyw5ICsxMjU3LDE1IEBACiAgICAgICAgICAgICBwb2ludGVyRmlsZSA9IHJlLnN1YihyJ0dpdCBMRlMgcG9pbnRlciBmb3IuKlxuXG4nLCAnJywgcG9pbnRlckZpbGUpCiAKICAgICAgICAgb2lkID0gcmUuc2VhcmNoKHInXm9pZCBcdys6KFx3KyknLCBwb2ludGVyRmlsZSwgcmUuTVVMVElMSU5FKS5ncm91cCgxKQorICAgICAgICAjIGlmIHNvbWVvbmUgdXNlIGV4dGVybmFsIGxmcy5zdG9yYWdlICggbm90IGluIGxvY2FsIHJlcG8gZ2l0ICkKKyAgICAgICAgbGZzX3BhdGggPSBnaXRDb25maWcoJ2xmcy5zdG9yYWdlJykKKyAgICAgICAgaWYgbm90IGxmc19wYXRoOgorICAgICAgICAgICAgbGZzX3BhdGggPSAnbGZzJworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhsZnNfcGF0aCk6CisgICAgICAgICAgICBsZnNfcGF0aCA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJy5naXQnLCBsZnNfcGF0aCkKICAgICAgICAgbG9jYWxMYXJnZUZpbGUgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICBvcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICcuZ2l0JywgJ2xmcycsICdvYmplY3RzJywgb2lkWzoyXSwgb2lkWzI6NF0sCisgICAgICAgICAgICBsZnNfcGF0aCwKKyAgICAgICAgICAgICdvYmplY3RzJywgb2lkWzoyXSwgb2lkWzI6NF0sCiAgICAgICAgICAgICBvaWQsCiAgICAgICAgICkKICAgICAgICAgIyBMRlMgU3BlYyBzdGF0ZXMgdGhhdCBwb2ludGVyIGZpbGVzIHNob3VsZCBub3QgaGF2ZSB0aGUgZXhlY3V0YWJsZSBiaXQgc2V0LgpkaWZmIC0tZ2l0IGEvZ2l0LXNlbmQtZW1haWwucGVybCBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKaW5kZXggNWY5MmM4OS4uZGM5NTY1NiAxMDA3NTUKLS0tIGEvZ2l0LXNlbmQtZW1haWwucGVybAorKysgYi9naXQtc2VuZC1lbWFpbC5wZXJsCkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogIyBkb21haW4gbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRoZSBJUCBhZGRyZXNzIGluIHRoZSBIRUxPL0VITE8KICMgaGFuZHNoYWtlLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBjb25uZWN0aW9uIGFuZCBwcmV2ZW50CiAjIHNwYW1tZXJzIGZyb20gdHJ5aW5nIHRvIGhpZGUgdGhlaXIgaWRlbnRpdHkuIElmIHRoZSBETlMgYW5kIElQIGRvbid0Ci0jIG1hdGNoLCB0aGUgcmVjZWl2ZWluZyBNVEEgbWF5IGRlbnkgdGhlIGNvbm5lY3Rpb24uCisjIG1hdGNoLCB0aGUgcmVjZWl2aW5nIE1UQSBtYXkgZGVueSB0aGUgY29ubmVjdGlvbi4KICMKICMgSGVyZSBpcyBhIGRlbnkgZXhhbXBsZSBvZiBOZXQ6OlNNVFAgd2l0aCB0aGUgZGVmYXVsdCAibG9jYWxob3N0LmxvY2FsZG9tYWluIgogIwpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggNTg3MTNjNS4uYWFhMTgwOSAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC0xMiw2ICsxMiw3IEBACiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBkZWluaXQgWy1mfC0tZm9yY2VdICgtLWFsbHwgWy0tXSA8cGF0aD4uLi4pCiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy0tcmVtb3RlXSBbLU58LS1uby1mZXRjaF0gWy1mfC0tZm9yY2VdIFstLWNoZWNrb3V0fC0tbWVyZ2V8LS1yZWJhc2VdIFstLVtuby1dcmVjb21tZW5kLXNoYWxsb3ddIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LWJyYW5jaCAoLS1kZWZhdWx0fC0tYnJhbmNoIDxicmFuY2g+KSBbLS1dIDxwYXRoPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPgogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KICAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KICAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHN5bmMgWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCkBAIC03NjcsNiArNzY4LDU1IEBACiB9CiAKICMKKyMgQ29uZmlndXJlcyBhIHN1Ym1vZHVsZSdzIHJlbW90ZSB1cmwKKyMKKyMgJEAgPSByZXF1ZXN0ZWQgcGF0aCwgcmVxdWVzdGVkIHVybAorIworY21kX3NldF91cmwoKSB7CisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlpZiB0ZXN0ICQjIC1uZSAyCisJdGhlbgorCQl1c2FnZQorCWZpCisKKwkjIHdlIGNhbid0IHVzZSBgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWVgIGhlcmUgYmVjYXVzZSBpbnRlcm5hbGx5LCBpdAorCSMgaGFzaGVzIHRoZSBwYXRoIHNvIGEgdHJhaWxpbmcgc2xhc2ggY291bGQgbGVhZCB0byBhbiB1bmludGVudGlvbmFsIG5vIG1hdGNoCisJbmFtZT0iJChnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAiJDEiIHwgY3V0IC1mMikiCisJaWYgdGVzdCAteiAiJG5hbWUiCisJdGhlbgorCQlleGl0IDEKKwlmaQorCisJdXJsPSIkMiIKKwlpZiB0ZXN0IC16ICIkdXJsIgorCXRoZW4KKwkJZXhpdCAxCisJZmkKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsICIkdXJsIgorCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jICR7R0lUX1FVSUVUOistLXF1aWV0fSAiJG5hbWUiCit9CisKKyMKICMgU2hvdyBjb21taXQgc3VtbWFyeSBmb3Igc3VibW9kdWxlcyBpbiBpbmRleCBvciB3b3JraW5nIHRyZWUKICMKICMgSWYgJy0tY2FjaGVkJyBpcyBnaXZlbiwgc2hvdyBzdW1tYXJ5IGJldHdlZW4gaW5kZXggYW5kIGdpdmVuIGNvbW1pdCwKQEAgLTEwNjUsNyArMTExNSw3IEBACiB3aGlsZSB0ZXN0ICQjICE9IDAgJiYgdGVzdCAteiAiJGNvbW1hbmQiCiBkbwogCWNhc2UgIiQxIiBpbgotCWFkZCB8IGZvcmVhY2ggfCBpbml0IHwgZGVpbml0IHwgdXBkYXRlIHwgc2V0LWJyYW5jaCB8IHN0YXR1cyB8IHN1bW1hcnkgfCBzeW5jIHwgYWJzb3JiZ2l0ZGlycykKKwlhZGQgfCBmb3JlYWNoIHwgaW5pdCB8IGRlaW5pdCB8IHVwZGF0ZSB8IHNldC1icmFuY2ggfCBzZXQtdXJsIHwgc3RhdHVzIHwgc3VtbWFyeSB8IHN5bmMgfCBhYnNvcmJnaXRkaXJzKQogCQljb21tYW5kPSQxCiAJCTs7CiAJLXF8LS1xdWlldCkKZGlmZiAtLWdpdCBhL2dpdC1zdm4ucGVybCBiL2dpdC1zdm4ucGVybAppbmRleCAwNTBmMmEzLi40YWEyMDhmIDEwMDc1NQotLS0gYS9naXQtc3ZuLnBlcmwKKysrIGIvZ2l0LXN2bi5wZXJsCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkkX3RlbXBsYXRlLCAkX3NoYXJlZCwKIAkkX3ZlcnNpb24sICRfZmV0Y2hfYWxsLCAkX25vX3JlYmFzZSwgJF9mZXRjaF9wYXJlbnQsCiAJJF9iZWZvcmUsICRfYWZ0ZXIsCi0JJF9tZXJnZSwgJF9zdHJhdGVneSwgJF9wcmVzZXJ2ZV9tZXJnZXMsICRfZHJ5X3J1biwgJF9wYXJlbnRzLCAkX2xvY2FsLAorCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfcmViYXNlX21lcmdlcywgJF9kcnlfcnVuLCAkX3BhcmVudHMsICRfbG9jYWwsCiAJJF9wcmVmaXgsICRfbm9fY2hlY2tvdXQsICRfdXJsLCAkX3ZlcmJvc2UsCiAJJF9jb21taXRfdXJsLCAkX3RhZywgJF9tZXJnZV9pbmZvLCAkX2ludGVyYWN0aXZlLCAkX3NldF9zdm5fcHJvcHMpOwogCkBAIC0yNzAsNyArMjcwLDggQEAKIAkJCSAgJ2xvY2FsfGwnID0+IFwkX2xvY2FsLAogCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAogCQkJICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAotCQkJICAncHJlc2VydmUtbWVyZ2VzfHAnID0+IFwkX3ByZXNlcnZlX21lcmdlcywKKwkJCSAgJ3JlYmFzZS1tZXJnZXN8cCcgPT4gXCRfcmViYXNlX21lcmdlcywKKwkJCSAgJ3ByZXNlcnZlLW1lcmdlc3xwJyA9PiBcJF9yZWJhc2VfbWVyZ2VzLAogCQkJICAlZmNfb3B0cyB9IF0sCiAJJ2NvbW1pdC1kaWZmJyA9PiBbIFwmY21kX2NvbW1pdF9kaWZmLAogCSAgICAgICAgICAgICAgICAgICAnQ29tbWl0IGEgZGlmZiBiZXR3ZWVuIHR3byB0cmVlcycsCkBAIC0xMDU0LDcgKzEwNTUsNyBAQAogCQkJCQkgICdJZiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gY29tbWl0ICcsCiAJCQkJCSAgIm1lcmdlcywgdHJ5IHJ1bm5pbmc6XG5cdCIsCiAJCQkJCSAgJ2dpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZScsCi0JCQkJCSAgJy0tcHJlc2VydmUtbWVyZ2VzICcsCisJCQkJCSAgJy0tcmViYXNlLW1lcmdlcyAnLAogCQkJCQkgICRncy0+cmVmbmFtZSwKIAkJCQkJICAiXG5CZWZvcmUgZGNvbW1pdHRpbmciOwogCQkJCX0KQEAgLTE3MTcsNyArMTcxOCw3IEBACiAJcHVzaCBAY21kLCAnLXYnIGlmICRfdmVyYm9zZTsKIAlwdXNoIEBjbWQsIHF3Ly0tbWVyZ2UvIGlmICRfbWVyZ2U7CiAJcHVzaCBAY21kLCAiLS1zdHJhdGVneT0kX3N0cmF0ZWd5IiBpZiAkX3N0cmF0ZWd5OwotCXB1c2ggQGNtZCwgIi0tcHJlc2VydmUtbWVyZ2VzIiBpZiAkX3ByZXNlcnZlX21lcmdlczsKKwlwdXNoIEBjbWQsICItLXJlYmFzZS1tZXJnZXMiIGlmICRfcmViYXNlX21lcmdlczsKIAlAY21kOwogfQogCmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCmluZGV4IGNlNmFiMGUuLjdiZTdhZDMgMTAwNjQ0Ci0tLSBhL2dpdC5jCisrKyBiL2dpdC5jCkBAIC01NzIsNiArNTcyLDcgQEAKIAl7ICJzaG93LWJyYW5jaCIsIGNtZF9zaG93X2JyYW5jaCwgUlVOX1NFVFVQIH0sCiAJeyAic2hvdy1pbmRleCIsIGNtZF9zaG93X2luZGV4IH0sCiAJeyAic2hvdy1yZWYiLCBjbWRfc2hvd19yZWYsIFJVTl9TRVRVUCB9LAorCXsgInNwYXJzZS1jaGVja291dCIsIGNtZF9zcGFyc2VfY2hlY2tvdXQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJeyAic3RhZ2UiLCBjbWRfYWRkLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAogCS8qCiAJICogTkVFRFNXT1JLOiBVbnRpbCB0aGUgYnVpbHRpbiBzdGFzaCBpcyB0aG9yb3VnaGx5IHJvYnVzdCBhbmQgbm8KZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybAppbmRleCA3ZmVmMTlmLi4wZjg1N2Q3IDEwMDc1NQotLS0gYS9naXR3ZWIvZ2l0d2ViLnBlcmwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC0xNjU3LDE1ICsxNjU3LDE1IEBACiAJbXkgJGNudHJsID0gc2hpZnQ7CiAJbXkgJW9wdHMgPSBAXzsKIAlteSAlZXMgPSAoICMgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMKLQkJIlx0IiA9PiAnXHQnLCAgICMgdGFiICAgICAgICAgICAgKEhUKQotCQkiXG4iID0+ICdcbicsICAgIyBsaW5lIGZlZWQgICAgICAoTEYpCi0JCSJcciIgPT4gJ1xyJywgICAjIGNhcnJpZ2UgcmV0dXJuIChDUikKLQkJIlxmIiA9PiAnXGYnLCAgICMgZm9ybSBmZWVkICAgICAgKEZGKQotCQkiXGIiID0+ICdcYicsICAgIyBiYWNrc3BhY2UgICAgICAoQlMpCi0JCSJcYSIgPT4gJ1xhJywgICAjIGFsYXJtIChiZWxsKSAgIChCRUwpCi0JCSJcZSIgPT4gJ1xlJywgICAjIGVzY2FwZSAgICAgICAgIChFU0MpCi0JCSJcMDEzIiA9PiAnXHYnLCAjIHZlcnRpY2FsIHRhYiAgIChWVCkKLQkJIlwwMDAiID0+ICdcMCcsICMgbnVsIGNoYXJhY3RlciAgKE5VTCkKKwkJIlx0IiA9PiAnXHQnLCAgICMgdGFiICAgICAgICAgICAgIChIVCkKKwkJIlxuIiA9PiAnXG4nLCAgICMgbGluZSBmZWVkICAgICAgIChMRikKKwkJIlxyIiA9PiAnXHInLCAgICMgY2FycmlhZ2UgcmV0dXJuIChDUikKKwkJIlxmIiA9PiAnXGYnLCAgICMgZm9ybSBmZWVkICAgICAgIChGRikKKwkJIlxiIiA9PiAnXGInLCAgICMgYmFja3NwYWNlICAgICAgIChCUykKKwkJIlxhIiA9PiAnXGEnLCAgICMgYWxhcm0gKGJlbGwpICAgIChCRUwpCisJCSJcZSIgPT4gJ1xlJywgICAjIGVzY2FwZSAgICAgICAgICAoRVNDKQorCQkiXDAxMyIgPT4gJ1x2JywgIyB2ZXJ0aWNhbCB0YWIgICAgKFZUKQorCQkiXDAwMCIgPT4gJ1wwJywgIyBudWwgY2hhcmFjdGVyICAgKE5VTCkKIAkpOwogCW15ICRjaHIgPSAoIChleGlzdHMgJGVzeyRjbnRybH0pCiAJCSAgICA/ICRlc3skY250cmx9CkBAIC00MDQ4LDcgKzQwNDgsNyBAQAogCiAJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9IHVuZGVmOwogCQkJJGhyZWZfcGFyYW1zeydhY3Rpb24nfSA9ICR0eXBlOwotCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGhyZWYoJWhyZWZfcGFyYW1zKTsKKwkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBlc2NfYXR0cihocmVmKCVocmVmX3BhcmFtcykpOwogCQkJcHJpbnQgIjxsaW5rICIuCiAJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KIAkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KQEAgLTQwNTcsNyArNDA1Nyw3IEBACiAJCQkgICAgICAiLz5cbiI7CiAKIAkJCSRocmVmX3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9ID0gJy0tbm8tbWVyZ2VzJzsKLQkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBocmVmKCVocmVmX3BhcmFtcyk7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gZXNjX2F0dHIoaHJlZiglaHJlZl9wYXJhbXMpKTsKIAkJCSRsaW5rX2F0dHJ7Jy10aXRsZSd9IC49ICcgKG5vIG1lcmdlcyknOwogCQkJcHJpbnQgIjxsaW5rICIuCiAJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KQEAgLTQwNzAsMTAgKzQwNzAsMTIgQEAKIAl9IGVsc2UgewogCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgbGlzdCIgJy4KIAkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIgLz4nLiJcbiIsCi0JCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwgaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIpKTsKKwkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLAorCQkgICAgICAgZXNjX2F0dHIoaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIpKSk7CiAJCXByaW50ZignPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSIlcyBwcm9qZWN0cyBmZWVkcyIgJy4KIAkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC94LW9wbWwiIC8+Jy4iXG4iLAotCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksIGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiKSk7CisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwKKwkJICAgICAgIGVzY19hdHRyKGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiKSkpOwogCX0KIH0KIApAQCAtNDI4Nyw4ICs0Mjg5LDggQEAKIAlpZiAoZGVmaW5lZCAkYWN0aW9uICYmCiAJICAgICRhY3Rpb24gZXEgJ2JsYW1lX2luY3JlbWVudGFsJykgewogCQlwcmludCBxcSE8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+XG4hLgotCQkgICAgICBxcSFzdGFydEJsYW1lKCIhLiBocmVmKGFjdGlvbj0+ImJsYW1lX2RhdGEiLCAtcmVwbGF5PT4xKSAucXEhIixcbiEuCi0JCSAgICAgIHFxISAgICAgICAgICAgIiEuIGhyZWYoKSAucXEhIik7XG4hLgorCQkgICAgICBxcSFzdGFydEJsYW1lKCIhLiBlc2NfYXR0cihocmVmKGFjdGlvbj0+ImJsYW1lX2RhdGEiLCAtcmVwbGF5PT4xKSkgLnFxISIsXG4hLgorCQkgICAgICBxcSEgICAgICAgICAgICIhLiBlc2NfYXR0cihocmVmKCkpIC5xcSEiKTtcbiEuCiAJCSAgICAgIHFxITwvc2NyaXB0PlxuITsKIAl9IGVsc2UgewogCQlteSAoJGpzdGltZXpvbmUsICR0el9jb29raWUsICRkYXRldGltZV9jbGFzcykgPQpAQCAtNzE1NSw4ICs3MTU3LDggQEAKIAkJCXByaW50IHFxISBhbHQ9IiEuZXNjX2F0dHIoJGZpbGVfbmFtZSkucXEhIiB0aXRsZT0iIS5lc2NfYXR0cigkZmlsZV9uYW1lKS5xcSEiITsKIAkJfQogCQlwcmludCBxcSEgc3JjPSIhIC4KLQkJICAgICAgaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaD0+JGhhc2gsCi0JCSAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpIC4KKwkJICAgICAgZXNjX2F0dHIoaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaD0+JGhhc2gsCisJCSAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpKSAuCiAJCSAgICAgIHFxISIgLz5cbiE7CiAJfSBlbHNlIHsKIAkJbXkgJG5yOwpAQCAtODIzOSw2ICs4MjQxLDcgQEAKIAl9IGVsc2UgewogCQkkYWx0X3VybCA9IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+InN1bW1hcnkiKTsKIAl9CisJJGFsdF91cmwgPSBlc2NfYXR0cigkYWx0X3VybCk7CiAJcHJpbnQgcXEhPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbiE7CiAJaWYgKCRmb3JtYXQgZXEgJ3JzcycpIHsKIAkJcHJpbnQgPDxYTUw7CkBAIC04Mjc2LDcgKzgyNzksNyBAQAogCQkgICAgICAkYWx0X3VybCAuICciIC8+JyAuICJcbiIgLgogCQkgICAgICAnPGxpbmsgcmVsPSJzZWxmIiB0eXBlPSInIC4gJGNvbnRlbnRfdHlwZSAuICciIGhyZWY9IicgLgogCQkgICAgICAkY2dpLT5zZWxmX3VybCgpIC4gJyIgLz4nIC4gIlxuIiAuCi0JCSAgICAgICI8aWQ+IiAuIGhyZWYoLWZ1bGw9PjEpIC4gIjwvaWQ+XG4iIC4KKwkJICAgICAgIjxpZD4iIC4gZXNjX3VybChocmVmKC1mdWxsPT4xKSkgLiAiPC9pZD5cbiIgLgogCQkgICAgICAjIHVzZSBwcm9qZWN0IG93bmVyIGZvciBmZWVkIGF1dGhvcgogCQkgICAgICAiPGF1dGhvcj48bmFtZT4kb3duZXI8L25hbWU+PC9hdXRob3I+XG4iOwogCQlpZiAoZGVmaW5lZCAkZmF2aWNvbikgewpAQCAtODMyMiw3ICs4MzI1LDcgQEAKIAkJCSAgICAgICI8YXV0aG9yPiIgLiBlc2NfaHRtbCgkY297J2F1dGhvcid9KSAuICI8L2F1dGhvcj5cbiIgLgogCQkJICAgICAgIjxwdWJEYXRlPiRjZHsncmZjMjgyMid9PC9wdWJEYXRlPlxuIiAuCiAJCQkgICAgICAiPGd1aWQgaXNQZXJtYUxpbms9XCJ0cnVlXCI+JGNvX3VybDwvZ3VpZD5cbiIgLgotCQkJICAgICAgIjxsaW5rPiRjb191cmw8L2xpbms+XG4iIC4KKwkJCSAgICAgICI8bGluaz4iIC4gZXNjX2h0bWwoJGNvX3VybCkgLiAiPC9saW5rPlxuIiAuCiAJCQkgICAgICAiPGRlc2NyaXB0aW9uPiIgLiBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gIjwvZGVzY3JpcHRpb24+XG4iIC4KIAkJCSAgICAgICI8Y29udGVudDplbmNvZGVkPiIgLgogCQkJICAgICAgIjwhW0NEQVRBW1xuIjsKQEAgLTgzNDQsOCArODM0Nyw4IEBACiAJCQl9CiAJCQlwcmludCAiPC9jb250cmlidXRvcj5cbiIgLgogCQkJICAgICAgIjxwdWJsaXNoZWQ+JGNkeydpc28tODYwMSd9PC9wdWJsaXNoZWQ+XG4iIC4KLQkJCSAgICAgICI8bGluayByZWw9XCJhbHRlcm5hdGVcIiB0eXBlPVwidGV4dC9odG1sXCIgaHJlZj1cIiRjb191cmxcIiAvPlxuIiAuCi0JCQkgICAgICAiPGlkPiRjb191cmw8L2lkPlxuIiAuCisJCQkgICAgICAiPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgdHlwZT1cInRleHQvaHRtbFwiIGhyZWY9XCIiIC4gZXNjX2F0dHIoJGNvX3VybCkgLiAiXCIgLz5cbiIgLgorCQkJICAgICAgIjxpZD4iIC4gZXNjX2h0bWwoJGNvX3VybCkgLiAiPC9pZD5cbiIgLgogCQkJICAgICAgIjxjb250ZW50IHR5cGU9XCJ4aHRtbFwiIHhtbDpiYXNlPVwiIiAuIGVzY191cmwoJG15X3VybCkgLiAiXCI+XG4iIC4KIAkJCSAgICAgICI8ZGl2IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIjsKIAkJfQpAQCAtODQ1Miw4ICs4NDU1LDggQEAKIAkJfQogCiAJCW15ICRwYXRoID0gZXNjX2h0bWwoY2hvcF9zdHIoJHByb2p7J3BhdGgnfSwgMjUsIDUpKTsKLQkJbXkgJHJzcyAgPSBocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAncnNzJywgLWZ1bGwgPT4gMSk7Ci0JCW15ICRodG1sID0gaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3N1bW1hcnknLCAtZnVsbCA9PiAxKTsKKwkJbXkgJHJzcyAgPSBlc2NfYXR0cihocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAncnNzJywgLWZ1bGwgPT4gMSkpOworCQlteSAkaHRtbCA9IGVzY19hdHRyKGhyZWYoJ3Byb2plY3QnID0+ICRwcm9qeydwYXRoJ30sICdhY3Rpb24nID0+ICdzdW1tYXJ5JywgLWZ1bGwgPT4gMSkpOwogCQlwcmludCAiPG91dGxpbmUgdHlwZT1cInJzc1wiIHRleHQ9XCIkcGF0aFwiIHRpdGxlPVwiJHBhdGhcIiB4bWxVcmw9XCIkcnNzXCIgaHRtbFVybD1cIiRodG1sXCIvPlxuIjsKIAl9CiAJcHJpbnQgPDxYTUw7CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmMgYi9ncGctaW50ZXJmYWNlLmMKaW5kZXggZDYwMTE1Yy4uNTEzNGNlMiAxMDA2NDQKLS0tIGEvZ3BnLWludGVyZmFjZS5jCisrKyBiL2dwZy1pbnRlcmZhY2UuYwpAQCAtMTA1LDYgKzEwNSwxNiBAQAogCXsgMCwgIlZBTElEU0lHICIsIEdQR19TVEFUVVNfRklOR0VSUFJJTlQgfSwKIH07CiAKK3N0YXRpYyB2b2lkIHJlcGxhY2VfY3N0cmluZyhjaGFyICoqZmllbGQsIGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJZnJlZSgqZmllbGQpOworCisJaWYgKGxpbmUgJiYgbmV4dCkKKwkJKmZpZWxkID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCWVsc2UKKwkJKmZpZWxkID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgcGFyc2VfZ3BnX291dHB1dChzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKQogewogCWNvbnN0IGNoYXIgKmJ1ZiA9IHNpZ2MtPmdwZ19zdGF0dXM7CkBAIC0xMzYsMzMgKzE0Niw0MyBAQAogCQkJCS8qIERvIHdlIGhhdmUga2V5IGluZm9ybWF0aW9uPyAqLwogCQkJCWlmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLmZsYWdzICYgR1BHX1NUQVRVU19LRVlJRCkgewogCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICcgJyk7Ci0JCQkJCWZyZWUoc2lnYy0+a2V5KTsKLQkJCQkJc2lnYy0+a2V5ID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPmtleSwgbGluZSwgbmV4dCk7CiAJCQkJCS8qIERvIHdlIGhhdmUgc2lnbmVyIGluZm9ybWF0aW9uPyAqLwogCQkJCQlpZiAoKm5leHQgJiYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX1VJRCkpIHsKIAkJCQkJCWxpbmUgPSBuZXh0ICsgMTsKIAkJCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7Ci0JCQkJCQlmcmVlKHNpZ2MtPnNpZ25lcik7Ci0JCQkJCQlzaWdjLT5zaWduZXIgPSB4bWVtZHVweihsaW5lLCBuZXh0IC0gbGluZSk7CisJCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPnNpZ25lciwgbGluZSwgbmV4dCk7CiAJCQkJCX0KIAkJCQl9CiAJCQkJLyogRG8gd2UgaGF2ZSBmaW5nZXJwcmludD8gKi8KIAkJCQlpZiAoc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5mbGFncyAmIEdQR19TVEFUVVNfRklOR0VSUFJJTlQpIHsKLQkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOwotCQkJCQlmcmVlKHNpZ2MtPmZpbmdlcnByaW50KTsKLQkJCQkJc2lnYy0+ZmluZ2VycHJpbnQgPSB4bWVtZHVweihsaW5lLCBuZXh0IC0gbGluZSk7CisJCQkJCWNvbnN0IGNoYXIgKmxpbWl0OworCQkJCQljaGFyICoqZmllbGQ7CiAKLQkJCQkJLyogU2tpcCBpbnRlcmltIGZpZWxkcyAqLworCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICcgJyk7CisJCQkJCXJlcGxhY2VfY3N0cmluZygmc2lnYy0+ZmluZ2VycHJpbnQsIGxpbmUsIG5leHQpOworCisJCQkJCS8qCisJCQkJCSAqIFNraXAgaW50ZXJpbSBmaWVsZHMuICBUaGUgc2VhcmNoIGlzCisJCQkJCSAqIGxpbWl0ZWQgdG8gdGhlIHNhbWUgbGluZSBzaW5jZSBvbmx5CisJCQkJCSAqIE9wZW5QR1Agc2lnbmF0dXJlcyBoYXMgYSBmaWVsZCB3aXRoCisJCQkJCSAqIHRoZSBwcmltYXJ5IGZpbmdlcnByaW50LgorCQkJCQkgKi8KKwkJCQkJbGltaXQgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CiAJCQkJCWZvciAoaiA9IDk7IGogPiAwOyBqLS0pIHsKLQkJCQkJCWlmICghKm5leHQpCisJCQkJCQlpZiAoISpuZXh0IHx8IGxpbWl0IDw9IG5leHQpCiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlsaW5lID0gbmV4dCArIDE7CiAJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICcgJyk7CiAJCQkJCX0KIAotCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOwotCQkJCQlmcmVlKHNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50KTsKLQkJCQkJc2lnYy0+cHJpbWFyeV9rZXlfZmluZ2VycHJpbnQgPSB4bWVtZHVweihsaW5lLCBuZXh0IC0gbGluZSk7CisJCQkJCWZpZWxkID0gJnNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50OworCQkJCQlpZiAoIWopIHsKKwkJCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CisJCQkJCQlyZXBsYWNlX2NzdHJpbmcoZmllbGQsIGxpbmUsIG5leHQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKGZpZWxkLCBOVUxMLCBOVUxMKTsKKwkJCQkJfQogCQkJCX0KIAogCQkJCWJyZWFrOwpAQCAtMTg3LDYgKzIwNyw1NSBAQAogCUZSRUVfQU5EX05VTEwoc2lnYy0+a2V5KTsKIH0KIAorc3RhdGljIGludCB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplLAorCQkJCWNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZV9zaXplLAorCQkJCXN0cnVjdCBzdHJidWYgKmdwZ19vdXRwdXQsCisJCQkJc3RydWN0IHN0cmJ1ZiAqZ3BnX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGcgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGdwZ19mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXA7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJdGVtcCA9IG1rc190ZW1wZmlsZV90KCIuZ2l0X3Z0YWdfdG1wWFhYWFhYIik7CisJaWYgKCF0ZW1wKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKKwlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT5mZCwgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSkgPCAwIHx8CisJICAgIGNsb3NlX3RlbXBmaWxlX2dlbnRseSh0ZW1wKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciKSwKKwkJCSAgICB0ZW1wLT5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUoJnRlbXApOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gZ2V0X2Zvcm1hdF9ieV9zaWcoc2lnbmF0dXJlKTsKKwlpZiAoIWZtdCkKKwkJQlVHKCJiYWQgc2lnbmF0dXJlICclcyciLCBzaWduYXR1cmUpOworCisJYXJndl9hcnJheV9wdXNoKCZncGcuYXJncywgZm10LT5wcm9ncmFtKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZncGcuYXJncywgZm10LT52ZXJpZnlfYXJncyk7CisJYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCisJCQkgIi0tc3RhdHVzLWZkPTEiLAorCQkJICItLXZlcmlmeSIsIHRlbXAtPmZpbGVuYW1lLmJ1ZiwgIi0iLAorCQkJIE5VTEwpOworCisJaWYgKCFncGdfc3RhdHVzKQorCQlncGdfc3RhdHVzID0gJmJ1ZjsKKworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisJcmV0ID0gcGlwZV9jb21tYW5kKCZncGcsIHBheWxvYWQsIHBheWxvYWRfc2l6ZSwKKwkJCSAgIGdwZ19zdGF0dXMsIDAsIGdwZ19vdXRwdXQsIDApOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7CisKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLT5idWYsICJcbltHTlVQRzpdIEdPT0RTSUcgIik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7IC8qIG5vIG1hdHRlciBpdCB3YXMgdXNlZCBvciBub3QgKi8KKworCXJldHVybiByZXQ7Cit9CisKIGludCBjaGVja19zaWduYXR1cmUoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwKIAlzaXplX3Qgc2xlbiwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKIHsKQEAgLTMzMSw1MSArNDAwLDMgQEAKIAogCXJldHVybiAwOwogfQotCi1pbnQgdmVyaWZ5X3NpZ25lZF9idWZmZXIoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfc2l6ZSwKLQkJCSBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwKLQkJCSBzdHJ1Y3Qgc3RyYnVmICpncGdfb3V0cHV0LCBzdHJ1Y3Qgc3RyYnVmICpncGdfc3RhdHVzKQotewotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGdwZyA9IENISUxEX1BST0NFU1NfSU5JVDsKLQlzdHJ1Y3QgZ3BnX2Zvcm1hdCAqZm10OwotCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcDsKLQlpbnQgcmV0OwotCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0KLQl0ZW1wID0gbWtzX3RlbXBmaWxlX3QoIi5naXRfdnRhZ190bXBYWFhYWFgiKTsKLQlpZiAoIXRlbXApCi0JCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIikpOwotCWlmICh3cml0ZV9pbl9mdWxsKHRlbXAtPmZkLCBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplKSA8IDAgfHwKLQkgICAgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHRlbXApIDwgMCkgewotCQllcnJvcl9lcnJubyhfKCJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIpLAotCQkJICAgIHRlbXAtPmZpbGVuYW1lLmJ1Zik7Ci0JCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmbXQgPSBnZXRfZm9ybWF0X2J5X3NpZyhzaWduYXR1cmUpOwotCWlmICghZm10KQotCQlCVUcoImJhZCBzaWduYXR1cmUgJyVzJyIsIHNpZ25hdHVyZSk7Ci0KLQlhcmd2X2FycmF5X3B1c2goJmdwZy5hcmdzLCBmbXQtPnByb2dyYW0pOwotCWFyZ3ZfYXJyYXlfcHVzaHYoJmdwZy5hcmdzLCBmbXQtPnZlcmlmeV9hcmdzKTsKLQlhcmd2X2FycmF5X3B1c2hsKCZncGcuYXJncywKLQkJCSAiLS1zdGF0dXMtZmQ9MSIsCi0JCQkgIi0tdmVyaWZ5IiwgdGVtcC0+ZmlsZW5hbWUuYnVmLCAiLSIsCi0JCQkgTlVMTCk7Ci0KLQlpZiAoIWdwZ19zdGF0dXMpCi0JCWdwZ19zdGF0dXMgPSAmYnVmOwotCi0Jc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKLQlyZXQgPSBwaXBlX2NvbW1hbmQoJmdwZywgcGF5bG9hZCwgcGF5bG9hZF9zaXplLAotCQkJICAgZ3BnX3N0YXR1cywgMCwgZ3BnX291dHB1dCwgMCk7Ci0Jc2lnY2hhaW5fcG9wKFNJR1BJUEUpOwotCi0JZGVsZXRlX3RlbXBmaWxlKCZ0ZW1wKTsKLQotCXJldCB8PSAhc3Ryc3RyKGdwZ19zdGF0dXMtPmJ1ZiwgIlxuW0dOVVBHOl0gR09PRFNJRyAiKTsKLQlzdHJidWZfcmVsZWFzZSgmYnVmKTsgLyogbm8gbWF0dGVyIGl0IHdhcyB1c2VkIG9yIG5vdCAqLwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2dwZy1pbnRlcmZhY2UuaCBiL2dwZy1pbnRlcmZhY2UuaAppbmRleCAzZTYyNGVjLi45M2NjM2FmIDEwMDY0NAotLS0gYS9ncGctaW50ZXJmYWNlLmgKKysrIGIvZ3BnLWludGVyZmFjZS5oCkBAIC00NiwxNSArNDYsNiBAQAogaW50IHNpZ25fYnVmZmVyKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgc3RydWN0IHN0cmJ1ZiAqc2lnbmF0dXJlLAogCQljb25zdCBjaGFyICpzaWduaW5nX2tleSk7CiAKLS8qCi0gKiBSdW4gImdwZyIgdG8gc2VlIGlmIHRoZSBwYXlsb2FkIG1hdGNoZXMgdGhlIGRldGFjaGVkIHNpZ25hdHVyZS4KLSAqIGdwZ19vdXRwdXQsIHdoZW4gc2V0LCByZWNlaXZlcyB0aGUgZGlhZ25vc3RpYyBvdXRwdXQgZnJvbSBHUEcuCi0gKiBncGdfc3RhdHVzLCB3aGVuIHNldCwgcmVjZWl2ZXMgdGhlIHN0YXR1cyBvdXRwdXQgZnJvbSBHUEcuCi0gKi8KLWludCB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplLAotCQkJIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZV9zaXplLAotCQkJIHN0cnVjdCBzdHJidWYgKmdwZ19vdXRwdXQsIHN0cnVjdCBzdHJidWYgKmdwZ19zdGF0dXMpOwotCiBpbnQgZ2l0X2dwZ19jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CiB2b2lkIHNldF9zaWduaW5nX2tleShjb25zdCBjaGFyICopOwogY29uc3QgY2hhciAqZ2V0X3NpZ25pbmdfa2V5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZ3JhcGguYyBiL2dyYXBoLmMKaW5kZXggZjUzMTM1NC4uNjZhZTE4YSAxMDA2NDQKLS0tIGEvZ3JhcGguYworKysgYi9ncmFwaC5jCkBAIC0zNCw2ICszNCw3IEBACiAgKiBoYW5kbGUgZGlyZWN0bHkuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGZpbGUgaGFuZGxlIGFzIHRoZQogICogZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGdyYXBoIGRpZmYgb3B0aW9ucy4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdAogICogZ3JhcGhfc2hvd19zdHJidWYgY2FuIGJlIGNhbGxlZCBldmVuIHdpdGggYSBOVUxMIGdyYXBoLgorICogSWYgYSBOVUxMIGdyYXBoIGlzIHN1cHBsaWVkLCB0aGUgc3RyYnVmIGlzIHByaW50ZWQgYXMtaXMuCiAgKi8KIHN0YXRpYyB2b2lkIGdyYXBoX3Nob3dfc3RyYnVmKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAogCQkJICAgICAgRklMRSAqZmlsZSwKQEAgLTExMiwxNCArMTEzLDQyIEBACiAJcmV0dXJuIGNvbHVtbl9jb2xvcnNbY29sb3JdOwogfQogCi1zdGF0aWMgdm9pZCBzdHJidWZfd3JpdGVfY29sdW1uKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3QgY29sdW1uICpjLAotCQkJCWNoYXIgY29sX2NoYXIpCitzdHJ1Y3QgZ3JhcGhfbGluZSB7CisJc3RydWN0IHN0cmJ1ZiAqYnVmOworCXNpemVfdCB3aWR0aDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNoKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBpbnQgYykKK3sKKwlzdHJidWZfYWRkY2gobGluZS0+YnVmLCBjKTsKKwlsaW5lLT53aWR0aCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRjaGFycyhzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgaW50IGMsIHNpemVfdCBuKQoreworCXN0cmJ1Zl9hZGRjaGFycyhsaW5lLT5idWYsIGMsIG4pOworCWxpbmUtPndpZHRoICs9IG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZHN0cihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgY29uc3QgY2hhciAqcykKK3sKKwlzdHJidWZfYWRkc3RyKGxpbmUtPmJ1Ziwgcyk7CisJbGluZS0+d2lkdGggKz0gc3RybGVuKHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRjb2xvcihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgdW5zaWduZWQgc2hvcnQgY29sb3IpCit7CisJc3RyYnVmX2FkZHN0cihsaW5lLT5idWYsIGNvbHVtbl9nZXRfY29sb3JfY29kZShjb2xvcikpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9saW5lX3dyaXRlX2NvbHVtbihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGNvbHVtbiAqYywKKwkJCQkgICAgY2hhciBjb2xfY2hhcikKIHsKIAlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKLQkJc3RyYnVmX2FkZHN0cihzYiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGMtPmNvbG9yKSk7Ci0Jc3RyYnVmX2FkZGNoKHNiLCBjb2xfY2hhcik7CisJCWdyYXBoX2xpbmVfYWRkY29sb3IobGluZSwgYy0+Y29sb3IpOworCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgY29sX2NoYXIpOwogCWlmIChjLT5jb2xvciA8IGNvbHVtbl9jb2xvcnNfbWF4KQotCQlzdHJidWZfYWRkc3RyKHNiLCBjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoY29sdW1uX2NvbG9yc19tYXgpKTsKKwkJZ3JhcGhfbGluZV9hZGRjb2xvcihsaW5lLCBjb2x1bW5fY29sb3JzX21heCk7CiB9CiAKIHN0cnVjdCBnaXRfZ3JhcGggewpAQCAtMTc1LDkgKzIwNCw2MyBAQAogCSAqLwogCWludCBwcmV2X2NvbW1pdF9pbmRleDsKIAkvKgorCSAqIFdoaWNoIGxheW91dCB2YXJpYW50IHRvIHVzZSB0byBkaXNwbGF5IG1lcmdlIGNvbW1pdHMuIElmIHRoZQorCSAqIGNvbW1pdCdzIGZpcnN0IHBhcmVudCBpcyBrbm93biB0byBiZSBpbiBhIGNvbHVtbiB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBtZXJnZSwgdGhlbiB0aGlzIHZhbHVlIGlzIDAgYW5kIHdlIHVzZSB0aGUgbGF5b3V0IG9uIHRoZSBsZWZ0LgorCSAqIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIDEgYW5kIHRoZSBsYXlvdXQgb24gdGhlIHJpZ2h0IGlzIHVzZWQuIFRoaXMKKwkgKiBmaWVsZCB0ZWxscyB1cyBob3cgbWFueSBjb2x1bW5zIHRoZSBmaXJzdCBwYXJlbnQgb2NjdXBpZXMuCisJICoKKwkgKiAJCTApCQkJMSkKKwkgKgorCSAqIAkJfCB8IHwgKi0uCQl8IHwgKi0tLS4KKwkgKiAJCXwgfF98L3xcIFwJCXwgfCB8XCBcIFwKKwkgKiAJCXwvfCB8IHwgfCB8CQl8IHwgfCB8IHwgKgorCSAqLworCWludCBtZXJnZV9sYXlvdXQ7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgYWRkZWQgdG8gdGhlIGdyYXBoIGJ5IHRoZSBjdXJyZW50IGNvbW1pdC4gRm9yCisJICogMi13YXkgYW5kIG9jdG9wdXMgbWVyZ2VzLCB0aGlzIGlzIHVzdWFsbHkgb25lIGxlc3MgdGhhbiB0aGUKKwkgKiBudW1iZXIgb2YgcGFyZW50czoKKwkgKgorCSAqIAkJfCB8IHwJCQl8IHwgICAgXAorCSAqCQl8ICogfAkJCXwgKi0tLS4gXAorCSAqCQl8IHxcIFwJCQl8IHxcIFwgXCBcCisJICoJCXwgfCB8IHwgICAgICAgICAJfCB8IHwgfCB8IHwKKwkgKgorCSAqCQludW1fcGFyZW50czogMgkJbnVtX3BhcmVudHM6IDQKKwkgKgkJZWRnZXNfYWRkZWQ6IDEJCWVkZ2VzX2FkZGVkOiAzCisJICoKKwkgKiBGb3IgbGVmdC1za2V3ZWQgbWVyZ2VzLCB0aGUgZmlyc3QgcGFyZW50IGZ1c2VzIHdpdGggaXRzIG5laWdoYm9yIGFuZAorCSAqIHNvIG9uZSBsZXNzIGNvbHVtbiBpcyBhZGRlZDoKKwkgKgorCSAqCQl8IHwgfAkJCXwgfCAgXAorCSAqCQl8ICogfAkJCXwgKi0uIFwKKwkgKgkJfC98IHwJCQl8L3xcIFwgXAorCSAqCQl8IHwgfAkJCXwgfCB8IHwgfAorCSAqCisJICoJCW51bV9wYXJlbnRzOiAyCQludW1fcGFyZW50czogNAorCSAqCQllZGdlc19hZGRlZDogMAkJZWRnZXNfYWRkZWQ6IDIKKwkgKgorCSAqIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IGVkZ2VzIHRvIHRoZSByaWdodCBvZiB0aGUgbWVyZ2UgYXJlCisJICogZGlzcGxheWVkIGluIGNvbW1pdCBhbmQgcG9zdC1tZXJnZSBsaW5lczsgaWYgbm8gY29sdW1ucyBoYXZlIGJlZW4KKwkgKiBhZGRlZCB0aGVuIGEgdmVydGljYWwgbGluZSBzaG91bGQgYmUgdXNlZCB3aGVyZSBhIHJpZ2h0LXRyYWNraW5nCisJICogbGluZSB3b3VsZCBvdGhlcndpc2UgYmUgdXNlZC4KKwkgKgorCSAqCQl8ICogXAkJCXwgKiB8CisJICoJCXwgfFwgXAkJCXwvfCB8CisJICoJCXwgfCAqIFwJCQl8ICogfAorCSAqLworCWludCBlZGdlc19hZGRlZDsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhZGRlZCBieSB0aGUgcHJldmlvdXMgY29tbWl0LCB3aGljaCBpcyB1c2VkIHRvCisJICogc21vb3RoIGVkZ2VzIGFwcGVhcmluZyB0byB0aGUgcmlnaHQgb2YgYSBjb21taXQgaW4gYSBjb21taXQgbGluZQorCSAqIGZvbGxvd2luZyBhIHBvc3QtbWVyZ2UgbGluZS4KKwkgKi8KKwlpbnQgcHJldl9lZGdlc19hZGRlZDsKKwkvKgogCSAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgY29sdW1ucwogCSAqIGFuZCBuZXdfY29sdW1ucyBhcnJheXMuICBUaGlzIGlzIGFsc28gaGFsZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMKLQkgKiB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIG1hcHBpbmcgYW5kIG5ld19tYXBwaW5nIGFycmF5cy4KKwkgKiB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIG1hcHBpbmcgYW5kIG9sZF9tYXBwaW5nIGFycmF5cy4KIAkgKi8KIAlpbnQgY29sdW1uX2NhcGFjaXR5OwogCS8qCkBAIC0yMTUsMTIgKzI5OCwxMiBAQAogCSAqLwogCWludCAqbWFwcGluZzsKIAkvKgotCSAqIEEgdGVtcG9yYXJ5IGFycmF5IGZvciBjb21wdXRpbmcgdGhlIG5leHQgbWFwcGluZyBzdGF0ZQotCSAqIHdoaWxlIHdlIGFyZSBvdXRwdXR0aW5nIGEgbWFwcGluZyBsaW5lLiAgVGhpcyBpcyBzdG9yZWQgYXMgcGFydAotCSAqIG9mIHRoZSBnaXRfZ3JhcGggc2ltcGx5IHNvIHdlIGRvbid0IGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcKLQkgKiB0ZW1wb3JhcnkgYXJyYXkgZWFjaCB0aW1lIHdlIGhhdmUgdG8gb3V0cHV0IGEgY29sbGFwc2luZyBsaW5lLgorCSAqIEEgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIG1hcHBpbmcgYXJyYXkgZnJvbSB0aGUgbGFzdCBjb21taXQsCisJICogd2hpY2ggd2UgdXNlIHRvIGltcHJvdmUgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyB0aGF0IGFyZSB0cmFja2luZworCSAqIGZyb20gcmlnaHQgdG8gbGVmdCB0aHJvdWdoIGEgY29tbWl0IGxpbmUuICBXZSBhbHNvIHVzZSB0aGlzIHRvCisJICogYXZvaWQgYWxsb2NhdGluZyBhIGZyZXNoIGFycmF5IHdoZW4gd2UgY29tcHV0ZSB0aGUgbmV4dCBtYXBwaW5nLgogCSAqLwotCWludCAqbmV3X21hcHBpbmc7CisJaW50ICpvbGRfbWFwcGluZzsKIAkvKgogCSAqIFRoZSBjdXJyZW50IGRlZmF1bHQgY29sdW1uIGNvbG9yIGJlaW5nIHVzZWQuICBUaGlzIGlzCiAJICogc3RvcmVkIGFzIGFuIGluZGV4IGludG8gdGhlIGFycmF5IGNvbHVtbl9jb2xvcnMuCkBAIC0yODUsNiArMzY4LDkgQEAKIAlncmFwaC0+cHJldl9zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CiAJZ3JhcGgtPmNvbW1pdF9pbmRleCA9IDA7CiAJZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4ID0gMDsKKwlncmFwaC0+bWVyZ2VfbGF5b3V0ID0gMDsKKwlncmFwaC0+ZWRnZXNfYWRkZWQgPSAwOworCWdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID0gMDsKIAlncmFwaC0+bnVtX2NvbHVtbnMgPSAwOwogCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOwogCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAwOwpAQCAtMzAzLDcgKzM4OSw3IEBACiAJQUxMT0NfQVJSQVkoZ3JhcGgtPmNvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwogCUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfY29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CiAJQUxMT0NfQVJSQVkoZ3JhcGgtPm1hcHBpbmcsIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKLQlBTExPQ19BUlJBWShncmFwaC0+bmV3X21hcHBpbmcsIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlBTExPQ19BUlJBWShncmFwaC0+b2xkX21hcHBpbmcsIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKIAogCS8qCiAJICogVGhlIGRpZmYgb3V0cHV0IHByZWZpeCBjYWxsYmFjaywgd2l0aCB0aGlzIHdlIGNhbiBtYWtlCkBAIC0zMzMsNyArNDE5LDcgQEAKIAlSRUFMTE9DX0FSUkFZKGdyYXBoLT5jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKIAlSRUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfY29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CiAJUkVBTExPQ19BUlJBWShncmFwaC0+bWFwcGluZywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqIDIpOwotCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19tYXBwaW5nLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICogMik7CisJUkVBTExPQ19BUlJBWShncmFwaC0+b2xkX21hcHBpbmcsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKiAyKTsKIH0KIAogLyoKQEAgLTQzMiw3NCArNTE4LDc2IEBACiAJcmV0dXJuIGdyYXBoX2dldF9jdXJyZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKLQkJCQkJICBpbnQgKm1hcHBpbmdfaW5kZXgpCitzdGF0aWMgaW50IGdyYXBoX2ZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlpbnQgaTsKLQotCS8qCi0JICogSWYgdGhlIGNvbW1pdCBpcyBhbHJlYWR5IGluIHRoZSBuZXdfY29sdW1ucyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvCi0JICogYWRkIGl0LiAgSnVzdCB1cGRhdGUgdGhlIG1hcHBpbmcgY29ycmVjdGx5LgotCSAqLwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKLQkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KSB7Ci0JCQlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBpOwotCQkJKm1hcHBpbmdfaW5kZXggKz0gMjsKLQkJCXJldHVybjsKLQkJfQorCQlpZiAoZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpCisJCQlyZXR1cm4gaTsKIAl9Ci0KLQkvKgotCSAqIFRoaXMgY29tbWl0IGlzbid0IGFscmVhZHkgaW4gbmV3X2NvbHVtbnMuICBBZGQgaXQuCi0JICovCi0JZ3JhcGgtPm5ld19jb2x1bW5zW2dyYXBoLT5udW1fbmV3X2NvbHVtbnNdLmNvbW1pdCA9IGNvbW1pdDsKLQlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29sb3IgPSBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihncmFwaCwgY29tbWl0KTsKLQlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBncmFwaC0+bnVtX25ld19jb2x1bW5zOwotCSptYXBwaW5nX2luZGV4ICs9IDI7Ci0JZ3JhcGgtPm51bV9uZXdfY29sdW1ucysrOworCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX3dpZHRoKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJICAgICAgIGludCBpc19jb21taXRfaW5fZXhpc3RpbmdfY29sdW1ucykKK3N0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICBpbnQgaWR4KQogewotCS8qCi0JICogQ29tcHV0ZSB0aGUgd2lkdGggbmVlZGVkIHRvIGRpc3BsYXkgdGhlIGdyYXBoIGZvciB0aGlzIGNvbW1pdC4KLQkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHdpZHRoIG5lZWRlZCBmb3IgYW55IHJvdy4gIEFsbCBvdGhlciByb3dzCi0JICogd2lsbCBiZSBwYWRkZWQgdG8gdGhpcyB3aWR0aC4KLQkgKgotCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB3aWRlc3Qgcm93OgotCSAqIENvdW50IGVhY2ggZXhpc3RpbmcgY29sdW1uIChncmFwaC0+bnVtX2NvbHVtbnMpLCBhbmQgZWFjaCBuZXcKLQkgKiBjb2x1bW4gYWRkZWQgYnkgdGhpcyBjb21taXQuCi0JICovCi0JaW50IG1heF9jb2xzID0gZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzOworCWludCBpID0gZ3JhcGhfZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgY29tbWl0KTsKKwlpbnQgbWFwcGluZ19pZHg7CiAKIAkvKgotCSAqIEV2ZW4gaWYgdGhlIGN1cnJlbnQgY29tbWl0IGhhcyBubyBwYXJlbnRzIHRvIGJlIHByaW50ZWQsIGl0Ci0JICogc3RpbGwgdGFrZXMgdXAgYSBjb2x1bW4gZm9yIGl0c2VsZi4KKwkgKiBJZiB0aGUgY29tbWl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBuZXdfY29sdW1ucyBhcnJheSwgdGhlbiBhZGQgaXQKKwkgKiBhbmQgcmVjb3JkIGl0IGFzIGJlaW5nIGluIHRoZSBmaW5hbCBjb2x1bW4uCiAJICovCi0JaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDEpCi0JCW1heF9jb2xzKys7CisJaWYgKGkgPCAwKSB7CisJCWkgPSBncmFwaC0+bnVtX25ld19jb2x1bW5zKys7CisJCWdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPSBjb21taXQ7CisJCWdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb2xvciA9IGdyYXBoX2ZpbmRfY29tbWl0X2NvbG9yKGdyYXBoLCBjb21taXQpOworCX0KIAotCS8qCi0JICogV2UgYWRkZWQgYSBjb2x1bW4gZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBhcyBwYXJ0IG9mCi0JICogZ3JhcGgtPm51bV9wYXJlbnRzLiAgSWYgdGhlIGN1cnJlbnQgY29tbWl0IHdhcyBhbHJlYWR5IGluCi0JICogZ3JhcGgtPmNvbHVtbnMsIHRoZW4gd2UgaGF2ZSBkb3VibGUgY291bnRlZCBpdC4KLQkgKi8KLQlpZiAoaXNfY29tbWl0X2luX2V4aXN0aW5nX2NvbHVtbnMpCi0JCW1heF9jb2xzLS07CisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDEgJiYgaWR4ID4gLTEgJiYgZ3JhcGgtPm1lcmdlX2xheW91dCA9PSAtMSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgYSBtZXJnZSwgY2hvb3NlIGEgbGF5b3V0IGZvcgorCQkgKiB0aGUgbWVyZ2UgbGluZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBwYXJlbnQgYXBwZWFycyBpbiBhCisJCSAqIGNvbHVtbiB0byB0aGUgbGVmdCBvZiB0aGUgbWVyZ2UKKwkJICovCisJCWludCBkaXN0LCBzaGlmdDsKIAotCS8qCi0JICogRWFjaCBjb2x1bW4gdGFrZXMgdXAgMiBzcGFjZXMKLQkgKi8KLQlncmFwaC0+d2lkdGggPSBtYXhfY29scyAqIDI7CisJCWRpc3QgPSBpZHggLSBpOworCQlzaGlmdCA9IChkaXN0ID4gMSkgPyAyICogZGlzdCAtIDMgOiAxOworCisJCWdyYXBoLT5tZXJnZV9sYXlvdXQgPSAoZGlzdCA+IDApID8gMCA6IDE7CisJCWdyYXBoLT5lZGdlc19hZGRlZCA9IGdyYXBoLT5udW1fcGFyZW50cyArIGdyYXBoLT5tZXJnZV9sYXlvdXQgIC0gMjsKKworCQltYXBwaW5nX2lkeCA9IGdyYXBoLT53aWR0aCArIChncmFwaC0+bWVyZ2VfbGF5b3V0IC0gMSkgKiBzaGlmdDsKKwkJZ3JhcGgtPndpZHRoICs9IDIgKiBncmFwaC0+bWVyZ2VfbGF5b3V0OworCisJfSBlbHNlIGlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPiAwICYmIGkgPT0gZ3JhcGgtPm1hcHBpbmdbZ3JhcGgtPndpZHRoIC0gMl0pIHsKKwkJLyoKKwkJICogSWYgc29tZSBjb2x1bW5zIGhhdmUgYmVlbiBhZGRlZCBieSBhIG1lcmdlLCBidXQgdGhpcyBjb21taXQKKwkJICogd2FzIGZvdW5kIGluIHRoZSBsYXN0IGV4aXN0aW5nIGNvbHVtbiwgdGhlbiBhZGp1c3QgdGhlCisJCSAqIG51bWJlcnMgc28gdGhhdCB0aGUgdHdvIGVkZ2VzIGltbWVkaWF0ZWx5IGpvaW4sIGkuZS46CisJCSAqCisJCSAqCQkqIHwJCSogfAorCQkgKgkJfFwgXAk9Pgl8XHwKKwkJICoJCXwgfC8JCXwgKgorCQkgKgkJfCAqCisJCSAqLworCQltYXBwaW5nX2lkeCA9IGdyYXBoLT53aWR0aCAtIDI7CisJCWdyYXBoLT5lZGdlc19hZGRlZCA9IC0xOworCX0gZWxzZSB7CisJCW1hcHBpbmdfaWR4ID0gZ3JhcGgtPndpZHRoOworCQlncmFwaC0+d2lkdGggKz0gMjsKKwl9CisKKwlncmFwaC0+bWFwcGluZ1ttYXBwaW5nX2lkeF0gPSBpOwogfQogCiBzdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfY29sdW1ucyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKIAlpbnQgbWF4X25ld19jb2x1bW5zOwotCWludCBtYXBwaW5nX2lkeDsKIAlpbnQgaSwgc2Vlbl90aGlzLCBpc19jb21taXRfaW5fY29sdW1uczsKIAogCS8qCkBAIC01MzIsNiArNjIwLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykKIAkJZ3JhcGgtPm1hcHBpbmdbaV0gPSAtMTsKIAorCWdyYXBoLT53aWR0aCA9IDA7CisJZ3JhcGgtPnByZXZfZWRnZXNfYWRkZWQgPSBncmFwaC0+ZWRnZXNfYWRkZWQ7CisJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gMDsKKwogCS8qCiAJICogUG9wdWxhdGUgZ3JhcGgtPm5ld19jb2x1bW5zIGFuZCBncmFwaC0+bWFwcGluZwogCSAqCkBAIC01NDIsNyArNjM0LDYgQEAKIAkgKiBzdXBwb3NlZCB0byBlbmQgdXAgYWZ0ZXIgdGhlIGNvbGxhcHNpbmcgaXMgcGVyZm9ybWVkLgogCSAqLwogCXNlZW5fdGhpcyA9IDA7Ci0JbWFwcGluZ19pZHggPSAwOwogCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMTsKIAlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CkBAIC01NTYsOSArNjQ3LDkgQEAKIAkJfQogCiAJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKLQkJCWludCBvbGRfbWFwcGluZ19pZHggPSBtYXBwaW5nX2lkeDsKIAkJCXNlZW5fdGhpcyA9IDE7CiAJCQlncmFwaC0+Y29tbWl0X2luZGV4ID0gaTsKKwkJCWdyYXBoLT5tZXJnZV9sYXlvdXQgPSAtMTsKIAkJCWZvciAocGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKIAkJCSAgICAgcGFyZW50OwogCQkJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkgewpAQCAtNTcxLDIxICs2NjIsMTggQEAKIAkJCQkgICAgIWlzX2NvbW1pdF9pbl9jb2x1bW5zKSB7CiAJCQkJCWdyYXBoX2luY3JlbWVudF9jb2x1bW5fY29sb3IoZ3JhcGgpOwogCQkJCX0KLQkJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwKLQkJCQkJCQkgICAgICBwYXJlbnQtPml0ZW0sCi0JCQkJCQkJICAgICAgJm1hcHBpbmdfaWR4KTsKKwkJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgcGFyZW50LT5pdGVtLCBpKTsKIAkJCX0KIAkJCS8qCi0JCQkgKiBXZSBhbHdheXMgbmVlZCB0byBpbmNyZW1lbnQgbWFwcGluZ19pZHggYnkgYXQKKwkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBncmFwaC0+d2lkdGggYnkgYXQKIAkJCSAqIGxlYXN0IDIsIGV2ZW4gaWYgaXQgaGFzIG5vIGludGVyZXN0aW5nIHBhcmVudHMuCiAJCQkgKiBUaGUgY3VycmVudCBjb21taXQgYWx3YXlzIHRha2VzIHVwIGF0IGxlYXN0IDIKIAkJCSAqIHNwYWNlcy4KIAkJCSAqLwotCQkJaWYgKG1hcHBpbmdfaWR4ID09IG9sZF9tYXBwaW5nX2lkeCkKLQkJCQltYXBwaW5nX2lkeCArPSAyOworCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA9PSAwKQorCQkJCWdyYXBoLT53aWR0aCArPSAyOwogCQl9IGVsc2UgewotCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIGNvbF9jb21taXQsCi0JCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIGNvbF9jb21taXQsIC0xKTsKIAkJfQogCX0KIApAQCAtNTk1LDExICs2ODMsNDMgQEAKIAl3aGlsZSAoZ3JhcGgtPm1hcHBpbmdfc2l6ZSA+IDEgJiYKIAkgICAgICAgZ3JhcGgtPm1hcHBpbmdbZ3JhcGgtPm1hcHBpbmdfc2l6ZSAtIDFdIDwgMCkKIAkJZ3JhcGgtPm1hcHBpbmdfc2l6ZS0tOworfQogCitzdGF0aWMgaW50IGdyYXBoX251bV9kYXNoZWRfcGFyZW50cyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlyZXR1cm4gZ3JhcGgtPm51bV9wYXJlbnRzICsgZ3JhcGgtPm1lcmdlX2xheW91dCAtIDM7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfbnVtX2V4cGFuc2lvbl9yb3dzKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQorewogCS8qCi0JICogQ29tcHV0ZSBncmFwaC0+d2lkdGggZm9yIHRoaXMgY29tbWl0CisJICogTm9ybWFsbHksIHdlIG5lZWQgdHdvIGV4cGFuc2lvbiByb3dzIGZvciBlYWNoIGRhc2hlZCBwYXJlbnQgbGluZSBmcm9tCisJICogYW4gb2N0b3B1cyBtZXJnZToKKwkgKgorCSAqIAkJfCAqCisJICogCQl8IHxcCisJICogCQl8IHwgXAorCSAqIAkJfCB8ICBcCisJICogCQl8ICotLiBcCisJICogCQl8IHxcIFwgXAorCSAqCisJICogSWYgdGhlIG1lcmdlIGlzIHNrZXdlZCB0byB0aGUgbGVmdCwgdGhlbiBpdHMgcGFyZW50cyBvY2N1cHkgb25lIGxlc3MKKwkgKiBjb2x1bW4sIGFuZCB3ZSBkb24ndCBuZWVkIGFzIG1hbnkgZXhwYW5zaW9uIHJvd3MgdG8gcm91dGUgYXJvdW5kIGl0OworCSAqIGluIHNvbWUgY2FzZXMgdGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIGFueSBleHBhbnNpb24gcm93cyBhdCBhbGw6CisJICoKKwkgKiAJCXwgKgorCSAqIAkJfCB8XAorCSAqIAkJfCAqIFwKKwkgKiAJCXwvfFwgXAogCSAqLwotCWdyYXBoX3VwZGF0ZV93aWR0aChncmFwaCwgaXNfY29tbWl0X2luX2NvbHVtbnMpOworCXJldHVybiBncmFwaF9udW1fZGFzaGVkX3BhcmVudHMoZ3JhcGgpICogMjsKK30KKworc3RhdGljIGludCBncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJcmV0dXJuIGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCisJICAgICAgIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkgJiYKKwkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3MoZ3JhcGgpOwogfQogCiB2b2lkIGdyYXBoX3VwZGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtNjU3LDggKzc3Nyw3IEBACiAJICovCiAJaWYgKGdyYXBoLT5zdGF0ZSAhPSBHUkFQSF9QQURESU5HKQogCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9TS0lQOwotCWVsc2UgaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCi0JCSBncmFwaC0+Y29tbWl0X2luZGV4IDwgKGdyYXBoLT5udW1fY29sdW1ucyAtIDEpKQorCWVsc2UgaWYgKGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShncmFwaCkpCiAJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BSRV9DT01NSVQ7CiAJZWxzZQogCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9DT01NSVQ7CkBAIC02ODYsOCArODA1LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IsCi0JCQkJICAgaW50IGNoYXJzX3dyaXR0ZW4pCitzdGF0aWMgdm9pZCBncmFwaF9wYWRfaG9yaXpvbnRhbGx5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAkvKgogCSAqIEFkZCBhZGRpdGlvbmFsIHNwYWNlcyB0byB0aGUgZW5kIG9mIHRoZSBzdHJidWYsIHNvIHRoYXQgYWxsCkBAIC02OTYsMzQgKzgxNCwyMiBAQAogCSAqIFRoaXMgd2F5LCBmaWVsZHMgcHJpbnRlZCB0byB0aGUgcmlnaHQgb2YgdGhlIGdyYXBoIHdpbGwgcmVtYWluCiAJICogYWxpZ25lZCBmb3IgdGhlIGVudGlyZSBjb21taXQuCiAJICovCi0JaWYgKGNoYXJzX3dyaXR0ZW4gPCBncmFwaC0+d2lkdGgpCi0JCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBncmFwaC0+d2lkdGggLSBjaGFyc193cml0dGVuKTsKKwlpZiAobGluZS0+d2lkdGggPCBncmFwaC0+d2lkdGgpCisJCWdyYXBoX2xpbmVfYWRkY2hhcnMobGluZSwgJyAnLCBncmFwaC0+d2lkdGggLSBsaW5lLT53aWR0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCisJCQkJICAgICAgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJaW50IGk7CiAKIAkvKgotCSAqIFdlIGNvdWxkIGNvbmNlaXZhYmxlIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjb21taXQKLQkgKiBpZiBvdXIgY2FsbGVyIGhhcyBhIGJ1ZywgYW5kIGludm9rZXMgZ3JhcGhfbmV4dF9saW5lKCkKLQkgKiBpbW1lZGlhdGVseSBhZnRlciBncmFwaF9pbml0KCksIHdpdGhvdXQgZmlyc3QgY2FsbGluZwotCSAqIGdyYXBoX3VwZGF0ZSgpLiAgUmV0dXJuIHdpdGhvdXQgb3V0cHV0dGluZyBhbnl0aGluZyBpbiB0aGlzCi0JICogY2FzZS4KLQkgKi8KLQlpZiAoIWdyYXBoLT5jb21taXQpCi0JCXJldHVybjsKLQotCS8qCiAJICogT3V0cHV0IGEgcGFkZGluZyByb3csIHRoYXQgbGVhdmVzIGFsbCBicmFuY2ggbGluZXMgdW5jaGFuZ2VkCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgewotCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOwotCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbaV0sICd8Jyk7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKIAl9Ci0KLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm51bV9uZXdfY29sdW1ucyAqIDIpOwogfQogCiAKQEAgLTczMywyOCArODM5LDI0IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfc2tpcF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAkvKgogCSAqIE91dHB1dCBhbiBlbGxpcHNpcyB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbgogCSAqIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgogCSAqLwotCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi4iKTsKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgMyk7CisJZ3JhcGhfbGluZV9hZGRzdHIobGluZSwgIi4uLiIpOwogCi0JaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCi0JICAgIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJaWYgKGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShncmFwaCkpCiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUFJFX0NPTU1JVCk7CiAJZWxzZQogCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkJCSBzdHJ1Y3Qgc3RyYnVmICpzYikKKwkJCQkJIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewotCWludCBudW1fZXhwYW5zaW9uX3Jvd3M7CiAJaW50IGksIHNlZW5fdGhpczsKLQlpbnQgY2hhcnNfd3JpdHRlbjsKIAogCS8qCiAJICogVGhpcyBmdW5jdGlvbiBmb3JtYXRzIGEgcm93IHRoYXQgaW5jcmVhc2VzIHRoZSBzcGFjZSBhcm91bmQgYSBjb21taXQKQEAgLTc2NCwyNyArODY2LDI0IEBACiAJICogV2UgbmVlZCAyIGV4dHJhIHJvd3MgZm9yIGV2ZXJ5IHBhcmVudCBvdmVyIDIuCiAJICovCiAJYXNzZXJ0KGdyYXBoLT5udW1fcGFyZW50cyA+PSAzKTsKLQludW1fZXhwYW5zaW9uX3Jvd3MgPSAoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyOwogCiAJLyoKIAkgKiBncmFwaC0+ZXhwYW5zaW9uX3JvdyB0cmFja3MgdGhlIGN1cnJlbnQgZXhwYW5zaW9uIHJvdyB3ZSBhcmUgb24uCiAJICogSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBbMCwgbnVtX2V4cGFuc2lvbl9yb3dzIC0gMV0KIAkgKi8KIAlhc3NlcnQoMCA8PSBncmFwaC0+ZXhwYW5zaW9uX3JvdyAmJgotCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IG51bV9leHBhbnNpb25fcm93cyk7CisJICAgICAgIGdyYXBoLT5leHBhbnNpb25fcm93IDwgZ3JhcGhfbnVtX2V4cGFuc2lvbl9yb3dzKGdyYXBoKSk7CiAKIAkvKgogCSAqIE91dHB1dCB0aGUgcm93CiAJICovCiAJc2Vlbl90aGlzID0gMDsKLQljaGFyc193cml0dGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKIAkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCQlpZiAoY29sLT5jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgewogCQkJc2Vlbl90aGlzID0gMTsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBncmFwaC0+ZXhwYW5zaW9uX3Jvdyk7Ci0JCQljaGFyc193cml0dGVuICs9IDEgKyBncmFwaC0+ZXhwYW5zaW9uX3JvdzsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJCWdyYXBoX2xpbmVfYWRkY2hhcnMobGluZSwgJyAnLCBncmFwaC0+ZXhwYW5zaW9uX3Jvdyk7CiAJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA9PSAwKSkgewogCQkJLyoKIAkJCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHByZS1jb21taXQgb3V0cHV0LgpAQCAtNzk3LDMzICs4OTYsMjcgQEAKIAkJCSAqLwogCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKIAkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQotCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKIAkJCWVsc2UKLQkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOwogCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPiAwKSkgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CiAJCX0gZWxzZSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CiAJCX0KLQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQljaGFyc193cml0dGVuKys7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKIAl9CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7Ci0KIAkvKgogCSAqIEluY3JlbWVudCBncmFwaC0+ZXhwYW5zaW9uX3JvdywKIAkgKiBhbmQgbW92ZSB0byBzdGF0ZSBHUkFQSF9DT01NSVQgaWYgbmVjZXNzYXJ5CiAJICovCiAJZ3JhcGgtPmV4cGFuc2lvbl9yb3crKzsKLQlpZiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPj0gbnVtX2V4cGFuc2lvbl9yb3dzKQorCWlmICghZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKIAkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT01NSVQpOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAkvKgogCSAqIEZvciBib3VuZGFyeSBjb21taXRzLCBwcmludCAnbycKQEAgLTgzMSw3MiArOTI0LDY3IEBACiAJICovCiAJaWYgKGdyYXBoLT5jb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSB7CiAJCWFzc2VydChncmFwaC0+cmV2cy0+Ym91bmRhcnkpOwotCQlzdHJidWZfYWRkY2goc2IsICdvJyk7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJ28nKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogZ2V0X3JldmlzaW9uX21hcmsoKSBoYW5kbGVzIGFsbCBvdGhlciBjYXNlcyB3aXRob3V0IGFzc2VydCgpCiAJICovCi0Jc3RyYnVmX2FkZHN0cihzYiwgZ2V0X3JldmlzaW9uX21hcmsoZ3JhcGgtPnJldnMsIGdyYXBoLT5jb21taXQpKTsKKwlncmFwaF9saW5lX2FkZHN0cihsaW5lLCBnZXRfcmV2aXNpb25fbWFyayhncmFwaC0+cmV2cywgZ3JhcGgtPmNvbW1pdCkpOwogfQogCiAvKgotICogRHJhdyB0aGUgaG9yaXpvbnRhbCBkYXNoZXMgb2YgYW4gb2N0b3B1cyBtZXJnZSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKLSAqIGNoYXJhY3RlcnMgd3JpdHRlbi4KKyAqIERyYXcgdGhlIGhvcml6b250YWwgZGFzaGVzIG9mIGFuIG9jdG9wdXMgbWVyZ2UuCiAgKi8KLXN0YXRpYyBpbnQgZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJLyoKLQkgKiBIZXJlIGRhc2hsZXNzX3BhcmVudHMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHBhcmVudHMgd2hpY2ggZG9uJ3QKLQkgKiBuZWVkIHRvIGhhdmUgZGFzaGVzICh0aGUgZWRnZXMgbGFiZWxlZCAiMCIgYW5kICIxIikuICBBbmQKLQkgKiBkYXNoZnVsX3BhcmVudHMgYXJlIHRoZSByZW1haW5pbmcgb25lcy4KKwkgKiBUaGUgcGFyZW50cyBvZiBhIG1lcmdlIGNvbW1pdCBjYW4gYmUgYXJiaXRyYXJpbHkgcmVvcmRlcmVkIGFzIHRoZXkKKwkgKiBhcmUgbWFwcGVkIG9udG8gZGlzcGxheSBjb2x1bW5zLCBmb3IgZXhhbXBsZSB0aGlzIGlzIGEgdmFsaWQgbWVyZ2U6CiAJICoKLQkgKiB8ICotLS0uCi0JICogfCB8XCBcIFwKLQkgKiB8IHwgfCB8IHwKLQkgKiB4IDAgMSAyIDMKKwkgKgl8IHwgKi0tLS4KKwkgKgl8IHwgfFwgXCBcCisJICoJfCB8IHwvIC8gLworCSAqCXwgfC98IHwgLworCSAqCXwgfF98X3wvCisJICoJfC98IHwgfAorCSAqCTMgMSAwIDIKIAkgKgorCSAqIFRoZSBudW1iZXJzIGRlbm90ZSB3aGljaCBwYXJlbnQgb2YgdGhlIG1lcmdlIGVhY2ggdmlzdWFsIGNvbHVtbgorCSAqIGNvcnJlc3BvbmRzIHRvOyB3ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcGFyZW50cyB3aWxsIGluaXRpYWxseQorCSAqIGRpc3BsYXkgaW4gdGhlIG9yZGVyIGdpdmVuIGJ5IG5ld19jb2x1bW5zLgorCSAqCisJICogVG8gZmluZCB0aGUgcmlnaHQgY29sb3IgZm9yIGVhY2ggZGFzaCwgd2UgbmVlZCB0byBjb25zdWx0IHRoZQorCSAqIG1hcHBpbmcgYXJyYXksIHN0YXJ0aW5nIGZyb20gdGhlIGNvbHVtbiAyIHBsYWNlcyB0byB0aGUgcmlnaHQgb2YgdGhlCisJICogbWVyZ2UgY29tbWl0LCBhbmQgdXNlIHRoYXQgdG8gZmluZCBvdXQgd2hpY2ggbG9naWNhbCBjb2x1bW4gZWFjaAorCSAqIGVkZ2Ugd2lsbCBjb2xsYXBzZSB0by4KKwkgKgorCSAqIENvbW1pdHMgYXJlIHJlbmRlcmVkIG9uY2UgYWxsIGVkZ2VzIGhhdmUgY29sbGFwc2VkIHRvIHRoZWlyIGNvcnJlY3QKKwkgKiBsb2djaWFsIGNvbHVtbiwgc28gY29tbWl0X2luZGV4IGdpdmVzIHVzIHRoZSByaWdodCB2aXN1YWwgb2Zmc2V0IGZvcgorCSAqIHRoZSBtZXJnZSBjb21taXQuCiAJICovCi0JY29uc3QgaW50IGRhc2hsZXNzX3BhcmVudHMgPSAyOwotCWludCBkYXNoZnVsX3BhcmVudHMgPSBncmFwaC0+bnVtX3BhcmVudHMgLSBkYXNobGVzc19wYXJlbnRzOwogCi0JLyoKLQkgKiBVc3VhbGx5LCB3ZSBhZGQgb25lIG5ldyBjb2x1bW4gZm9yIGVhY2ggcGFyZW50IChsaWtlIHRoZSBkaWFncmFtCi0JICogYWJvdmUpIGJ1dCBzb21ldGltZXMgdGhlIGZpcnN0IHBhcmVudCBnb2VzIGludG8gYW4gZXhpc3RpbmcgY29sdW1uLAotCSAqIGxpa2UgdGhpczoKLQkgKgotCSAqIHwgKi0tLS4KLQkgKiB8IHxcIFwgXAotCSAqIHwvIC8gLyAvCi0JICogeCAwIDEgMgotCSAqCi0JICogSW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIG9mIHBhcmVudHMgd2lsbCBiZSBvbmUgZ3JlYXRlciB0aGFuIHRoZQotCSAqIG51bWJlciBvZiBhZGRlZCBjb2x1bW5zLgotCSAqLwotCWludCBhZGRlZF9jb2xzID0gKGdyYXBoLT5udW1fbmV3X2NvbHVtbnMgLSBncmFwaC0+bnVtX2NvbHVtbnMpOwotCWludCBwYXJlbnRfaW5fb2xkX2NvbHMgPSBncmFwaC0+bnVtX3BhcmVudHMgLSBhZGRlZF9jb2xzOworCWludCBpLCBqOworCXN0cnVjdCBjb2x1bW4gKmNvbDsKIAotCS8qCi0JICogSW4gYm90aCBjYXNlcywgY29tbWl0X2luZGV4IGNvcnJlc3BvbmRzIHRvIHRoZSBlZGdlIGxhYmVsZWQgIjAiLgotCSAqLwotCWludCBmaXJzdF9jb2wgPSBncmFwaC0+Y29tbWl0X2luZGV4ICsgZGFzaGxlc3NfcGFyZW50cwotCSAgICAtIHBhcmVudF9pbl9vbGRfY29sczsKKwlpbnQgZGFzaGVkX3BhcmVudHMgPSBncmFwaF9udW1fZGFzaGVkX3BhcmVudHMoZ3JhcGgpOwogCi0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGRhc2hmdWxfcGFyZW50czsgaSsrKSB7Ci0JCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbaStmaXJzdF9jb2xdLCAnLScpOwotCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2krZmlyc3RfY29sXSwKLQkJCQkgICAgaSA9PSBkYXNoZnVsX3BhcmVudHMtMSA/ICcuJyA6ICctJyk7CisJZm9yIChpID0gMDsgaSA8IGRhc2hlZF9wYXJlbnRzOyBpKyspIHsKKwkJaiA9IGdyYXBoLT5tYXBwaW5nWyhncmFwaC0+Y29tbWl0X2luZGV4ICsgaSArIDIpICogMl07CisJCWNvbCA9ICZncmFwaC0+bmV3X2NvbHVtbnNbal07CisKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnLScpOworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsIChpID09IGRhc2hlZF9wYXJlbnRzIC0gMSkgPyAnLicgOiAnLScpOwogCX0KLQlyZXR1cm4gMiAqIGRhc2hmdWxfcGFyZW50czsKKworCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJaW50IHNlZW5fdGhpcyA9IDA7Ci0JaW50IGksIGNoYXJzX3dyaXR0ZW47CisJaW50IGk7CiAKIAkvKgogCSAqIE91dHB1dCB0aGUgcm93IGNvbnRhaW5pbmcgdGhpcyBjb21taXQKQEAgLTkwNiw3ICs5OTQsNiBAQAogCSAqIGNoaWxkcmVuIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4pCiAJICovCiAJc2Vlbl90aGlzID0gMDsKLQljaGFyc193cml0dGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CiAJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKIAkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKQEAgLTkyMCwxOSArMTAwNywxNyBAQAogCiAJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKIAkJCXNlZW5fdGhpcyA9IDE7Ci0JCQlncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoZ3JhcGgsIHNiKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWdyYXBoX291dHB1dF9jb21taXRfY2hhcihncmFwaCwgbGluZSk7CiAKIAkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAyKQotCQkJCWNoYXJzX3dyaXR0ZW4gKz0gZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKGdyYXBoLAotCQkJCQkJCQkJICBzYik7Ci0JCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+bnVtX3BhcmVudHMgPiAyKSkgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKLQkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5udW1fcGFyZW50cyA9PSAyKSkgeworCQkJCWdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShncmFwaCwgbGluZSk7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZWRnZXNfYWRkZWQgPiAxKSkgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5lZGdlc19hZGRlZCA9PSAxKSkgewogCQkJLyoKLQkJCSAqIFRoaXMgaXMgYSAyLXdheSBtZXJnZSBjb21taXQuCi0JCQkgKiBUaGVyZSBpcyBubyBHUkFQSF9QUkVfQ09NTUlUIHN0YWdlIGZvciAyLXdheQorCQkJICogVGhpcyBpcyBlaXRoZXIgYSByaWdodC1za2V3ZWQgMi13YXkgbWVyZ2UKKwkJCSAqIGNvbW1pdCwgb3IgYSBsZWZ0LXNrZXdlZCAzLXdheSBtZXJnZS4KKwkJCSAqIFRoZXJlIGlzIG5vIEdSQVBIX1BSRV9DT01NSVQgc3RhZ2UgZm9yIHN1Y2gKIAkJCSAqIG1lcmdlcywgc28gdGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBvdXRwdXQKIAkJCSAqIGZvciB0aGlzIGNvbW1pdC4gIENoZWNrIHRvIHNlZSB3aGF0IHRoZSBwcmV2aW91cwogCQkJICogbGluZSBvZiBvdXRwdXQgd2FzLgpAQCAtOTQ0LDIxICsxMDI5LDIxIEBACiAJCQkgKiBtYWtlcyB0aGUgb3V0cHV0IGxvb2sgbmljZXIuCiAJCQkgKi8KIAkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCisJCQkgICAgZ3JhcGgtPnByZXZfZWRnZXNfYWRkZWQgPiAwICYmCiAJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKLQkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CiAJCQllbHNlCi0JCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJfSBlbHNlIGlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9DT0xMQVBTSU5HICYmCisJCQkgICBncmFwaC0+b2xkX21hcHBpbmdbMiAqIGkgKyAxXSA9PSBpICYmCisJCQkgICBncmFwaC0+bWFwcGluZ1syICogaV0gPCBpKSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICcvJyk7CiAJCX0gZWxzZSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CiAJCX0KLQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQljaGFyc193cml0dGVuKys7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKIAl9CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7Ci0KIAkvKgogCSAqIFVwZGF0ZSBncmFwaC0+c3RhdGUKIAkgKi8KQEAgLTk3MCwyNiArMTA1NSwxOSBAQAogCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbHVtbiAqZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCQkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7Ci0JCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKLQkJCXJldHVybiAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KK2NvbnN0IGNoYXIgbWVyZ2VfY2hhcnNbXSA9IHsnLycsICd8JywgJ1xcJ307CiAKLXN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJaW50IHNlZW5fdGhpcyA9IDA7Ci0JaW50IGksIGosIGNoYXJzX3dyaXR0ZW47CisJaW50IGksIGo7CisKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X3BhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJaW50IHNlZW5fcGFyZW50ID0gMDsKIAogCS8qCiAJICogT3V0cHV0IHRoZSBwb3N0LW1lcmdlIHJvdwogCSAqLwotCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKIAkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OwpAQCAtMTAwOCwzNyArMTA4Niw0NCBAQAogCQkJICogbmV3X2NvbHVtbnMgYW5kIHVzZSB0aG9zZSB0byBmb3JtYXQgdGhlCiAJCQkgKiBlZGdlcy4KIAkJCSAqLwotCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKLQkJCXN0cnVjdCBjb2x1bW4gKnBhcl9jb2x1bW47CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBmaXJzdF9wYXJlbnQ7CisJCQlpbnQgcGFyX2NvbHVtbjsKKwkJCWludCBpZHggPSBncmFwaC0+bWVyZ2VfbGF5b3V0OworCQkJY2hhciBjOwogCQkJc2Vlbl90aGlzID0gMTsKLQkJCXBhcmVudHMgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOwotCQkJYXNzZXJ0KHBhcmVudHMpOwotCQkJcGFyX2NvbHVtbiA9IGZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIHBhcmVudHMtPml0ZW0pOwotCQkJYXNzZXJ0KHBhcl9jb2x1bW4pOwogCi0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBwYXJfY29sdW1uLCAnfCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOwotCQkJZm9yIChqID0gMDsgaiA8IGdyYXBoLT5udW1fcGFyZW50cyAtIDE7IGorKykgeworCQkJZm9yIChqID0gMDsgaiA8IGdyYXBoLT5udW1fcGFyZW50czsgaisrKSB7CisJCQkJcGFyX2NvbHVtbiA9IGdyYXBoX2ZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIHBhcmVudHMtPml0ZW0pOworCQkJCWFzc2VydChwYXJfY29sdW1uID49IDApOworCisJCQkJYyA9IG1lcmdlX2NoYXJzW2lkeF07CisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgJmdyYXBoLT5uZXdfY29sdW1uc1twYXJfY29sdW1uXSwgYyk7CisJCQkJaWYgKGlkeCA9PSAyKSB7CisJCQkJCWlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPiAwIHx8IGogPCBncmFwaC0+bnVtX3BhcmVudHMgLSAxKQorCQkJCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCQkJCX0gZWxzZSB7CisJCQkJCWlkeCsrOworCQkJCX0KIAkJCQlwYXJlbnRzID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudHMpOwotCQkJCWFzc2VydChwYXJlbnRzKTsKLQkJCQlwYXJfY29sdW1uID0gZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7Ci0JCQkJYXNzZXJ0KHBhcl9jb2x1bW4pOwotCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIHBhcl9jb2x1bW4sICdcXCcpOwotCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKIAkJCX0KLQkJCWNoYXJzX3dyaXR0ZW4gKz0gaiAqIDI7Ci0JCX0gZWxzZSBpZiAoc2Vlbl90aGlzKSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOwotCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQkJY2hhcnNfd3JpdHRlbiArPSAyOwotCQl9IGVsc2UgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQkJY2hhcnNfd3JpdHRlbiArPSAyOwotCQl9Ci0JfQorCQkJaWYgKGdyYXBoLT5lZGdlc19hZGRlZCA9PSAwKQorCQkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMpIHsKKwkJCWlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPiAwKQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCQllbHNlCisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCQl9IGVsc2UgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJaWYgKGdyYXBoLT5tZXJnZV9sYXlvdXQgIT0gMCB8fCBpICE9IGdyYXBoLT5jb21taXRfaW5kZXggLSAxKQorCQkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgc2Vlbl9wYXJlbnQgPyAnXycgOiAnICcpOworCQl9CisKKwkJaWYgKGNvbF9jb21taXQgPT0gZmlyc3RfcGFyZW50LT5pdGVtKQorCQkJc2Vlbl9wYXJlbnQgPSAxOworCX0KIAogCS8qCiAJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQpAQCAtMTA0OSw3ICsxMTM0LDcgQEAKIAkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT0xMQVBTSU5HKTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAlpbnQgaTsKIAlzaG9ydCB1c2VkX2hvcml6b250YWwgPSAwOwpAQCAtMTA1NywxMyArMTE0MiwxOCBAQAogCWludCBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gLTE7CiAKIAkvKgotCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKKwkgKiBTd2FwIHRoZSBtYXBwaW5nIGFuZCBvbGRfbWFwcGluZyBhcnJheXMKKwkgKi8KKwlTV0FQKGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+b2xkX21hcHBpbmcpOworCisJLyoKKwkgKiBDbGVhciBvdXQgdGhlIG1hcHBpbmcgYXJyYXkKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQotCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJZ3JhcGgtPm1hcHBpbmdbaV0gPSAtMTsKIAogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKLQkJaW50IHRhcmdldCA9IGdyYXBoLT5tYXBwaW5nW2ldOworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm9sZF9tYXBwaW5nW2ldOwogCQlpZiAodGFyZ2V0IDwgMCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDg0LDE0ICsxMTc0LDE0IEBACiAJCQkgKiBUaGlzIGNvbHVtbiBpcyBhbHJlYWR5IGluIHRoZQogCQkJICogY29ycmVjdCBwbGFjZQogCQkJICovCi0JCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2ldID09IC0xKTsKLQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IHRhcmdldDsKLQkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdIDwgMCkgeworCQkJYXNzZXJ0KGdyYXBoLT5tYXBwaW5nW2ldID09IC0xKTsKKwkJCWdyYXBoLT5tYXBwaW5nW2ldID0gdGFyZ2V0OworCQl9IGVsc2UgaWYgKGdyYXBoLT5tYXBwaW5nW2kgLSAxXSA8IDApIHsKIAkJCS8qCiAJCQkgKiBOb3RoaW5nIGlzIHRvIHRoZSBsZWZ0LgogCQkJICogTW92ZSB0byB0aGUgbGVmdCBieSBvbmUKIAkJCSAqLwotCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9IHRhcmdldDsKKwkJCWdyYXBoLT5tYXBwaW5nW2kgLSAxXSA9IHRhcmdldDsKIAkJCS8qCiAJCQkgKiBJZiB0aGVyZSBpc24ndCBhbHJlYWR5IGFuIGVkZ2UgbW92aW5nIGhvcml6b250YWxseQogCQkJICogc2VsZWN0IHRoaXMgb25lLgpAQCAtMTEwNyw5ICsxMTk3LDkgQEAKIAkJCQkgKiBsaW5lLgogCQkJCSAqLwogCQkJCWZvciAoaiA9ICh0YXJnZXQgKiAyKSszOyBqIDwgKGkgLSAyKTsgaiArPSAyKQotCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbal0gPSB0YXJnZXQ7CisJCQkJCWdyYXBoLT5tYXBwaW5nW2pdID0gdGFyZ2V0OwogCQkJfQotCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPT0gdGFyZ2V0KSB7CisJCX0gZWxzZSBpZiAoZ3JhcGgtPm1hcHBpbmdbaSAtIDFdID09IHRhcmdldCkgewogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGEgYnJhbmNoIGxpbmUgdG8gb3VyIGxlZnQKIAkJCSAqIGFscmVhZHksIGFuZCBpdCBpcyBvdXIgdGFyZ2V0LiAgV2UKQEAgLTExMTcsNyArMTIwNyw3IEBACiAJCQkgKiB0aGUgc2FtZSBwYXJlbnQgY29tbWl0LgogCQkJICoKIAkJCSAqIFdlIGRvbid0IGhhdmUgdG8gYWRkIGFueXRoaW5nIHRvIHRoZQotCQkJICogb3V0cHV0IG9yIG5ld19tYXBwaW5nLCBzaW5jZSB0aGUKKwkJCSAqIG91dHB1dCBvciBtYXBwaW5nLCBzaW5jZSB0aGUKIAkJCSAqIGV4aXN0aW5nIGJyYW5jaCBsaW5lIGhhcyBhbHJlYWR5IHRha2VuCiAJCQkgKiBjYXJlIG9mIGl0LgogCQkJICovCkBAIC0xMTMzLDEwICsxMjIzLDEwIEBACiAJCQkgKiBUaGUgYnJhbmNoIHRvIHRoZSBsZWZ0IG9mIHRoYXQgc3BhY2UKIAkJCSAqIHNob3VsZCBiZSBvdXIgZXZlbnR1YWwgdGFyZ2V0LgogCQkJICovCi0JCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA+IHRhcmdldCk7Ci0JCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA8IDApOwotCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gM10gPT0gdGFyZ2V0KTsKLQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMl0gPSB0YXJnZXQ7CisJCQlhc3NlcnQoZ3JhcGgtPm1hcHBpbmdbaSAtIDFdID4gdGFyZ2V0KTsKKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpIC0gMl0gPCAwKTsKKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpIC0gM10gPT0gdGFyZ2V0KTsKKwkJCWdyYXBoLT5tYXBwaW5nW2kgLSAyXSA9IHRhcmdldDsKIAkJCS8qCiAJCQkgKiBNYXJrIHRoaXMgYnJhbmNoIGFzIHRoZSBob3Jpem9udGFsIGVkZ2UgdG8KIAkJCSAqIHByZXZlbnQgYW55IG90aGVyIGVkZ2VzIGZyb20gbW92aW5nCkBAIC0xMTQ4LDIwICsxMjM4LDI1IEBACiAJfQogCiAJLyoKKwkgKiBDb3B5IHRoZSBjdXJyZW50IG1hcHBpbmcgYXJyYXkgaW50byBvbGRfbWFwcGluZworCSAqLworCUNPUFlfQVJSQVkoZ3JhcGgtPm9sZF9tYXBwaW5nLCBncmFwaC0+bWFwcGluZywgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7CisKKwkvKgogCSAqIFRoZSBuZXcgbWFwcGluZyBtYXkgYmUgMSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBtYXBwaW5nCiAJICovCi0JaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQorCWlmIChncmFwaC0+bWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQogCQlncmFwaC0+bWFwcGluZ19zaXplLS07CiAKIAkvKgogCSAqIE91dHB1dCBvdXQgYSBsaW5lIGJhc2VkIG9uIHRoZSBuZXcgbWFwcGluZyBpbmZvCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgewotCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm5ld19tYXBwaW5nW2ldOworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CiAJCWlmICh0YXJnZXQgPCAwKQotCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOwogCQllbHNlIGlmICh0YXJnZXQgKiAyID09IGkpCi0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICd8Jyk7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICd8Jyk7CiAJCWVsc2UgaWYgKHRhcmdldCA9PSBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ICYmCiAJCQkgaSAhPSBob3Jpem9udGFsX2VkZ2UgLSAxKSB7CiAJCQkJLyoKQEAgLTExNzAsMjQgKzEyNjUsMTcgQEAKIAkJCQkgKiB3b24ndCBjb250aW51ZSBpbnRvIHRoZSBuZXh0IGxpbmUuCiAJCQkJICovCiAJCQkJaWYgKGkgIT0gKHRhcmdldCAqIDIpKzMpCi0JCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOworCQkJCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOwogCQkJCXVzZWRfaG9yaXpvbnRhbCA9IDE7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICdfJyk7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICdfJyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAodXNlZF9ob3Jpem9udGFsICYmIGkgPCBob3Jpem9udGFsX2VkZ2UpCi0JCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICcvJyk7CisJCQkJZ3JhcGgtPm1hcHBpbmdbaV0gPSAtMTsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJy8nKTsKIAogCQl9CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGdyYXBoLT5tYXBwaW5nX3NpemUpOwotCi0JLyoKLQkgKiBTd2FwIG1hcHBpbmcgYW5kIG5ld19tYXBwaW5nCi0JICovCi0JU1dBUChncmFwaC0+bWFwcGluZywgZ3JhcGgtPm5ld19tYXBwaW5nKTsKLQogCS8qCiAJICogSWYgZ3JhcGgtPm1hcHBpbmcgaW5kaWNhdGVzIHRoYXQgYWxsIG9mIHRoZSBicmFuY2ggbGluZXMKIAkgKiBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbnMsIHdlIGFyZSBkb25lLgpAQCAtMTE5OSwzNSArMTI4Nyw0OSBAQAogCiBpbnQgZ3JhcGhfbmV4dF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKIHsKKwlpbnQgc2hvd25fY29tbWl0X2xpbmUgPSAwOworCXN0cnVjdCBncmFwaF9saW5lIGxpbmUgPSB7IC5idWYgPSBzYiwgLndpZHRoID0gMCB9OworCisJLyoKKwkgKiBXZSBjb3VsZCBjb25jZWl2YWJsZSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgY29tbWl0CisJICogaWYgb3VyIGNhbGxlciBoYXMgYSBidWcsIGFuZCBpbnZva2VzIGdyYXBoX25leHRfbGluZSgpCisJICogaW1tZWRpYXRlbHkgYWZ0ZXIgZ3JhcGhfaW5pdCgpLCB3aXRob3V0IGZpcnN0IGNhbGxpbmcKKwkgKiBncmFwaF91cGRhdGUoKS4gIFJldHVybiB3aXRob3V0IG91dHB1dHRpbmcgYW55dGhpbmcgaW4gdGhpcworCSAqIGNhc2UuCisJICovCisJaWYgKCFncmFwaC0+Y29tbWl0KQorCQlyZXR1cm4gLTE7CisKIAlzd2l0Y2ggKGdyYXBoLT5zdGF0ZSkgewogCWNhc2UgR1JBUEhfUEFERElORzoKLQkJZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMDsKKwkJZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKIAljYXNlIEdSQVBIX1NLSVA6Ci0JCWdyYXBoX291dHB1dF9za2lwX2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDA7CisJCWdyYXBoX291dHB1dF9za2lwX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CiAJY2FzZSBHUkFQSF9QUkVfQ09NTUlUOgotCQlncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAwOworCQlncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOwogCWNhc2UgR1JBUEhfQ09NTUlUOgotCQlncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDE7CisJCWdyYXBoX291dHB1dF9jb21taXRfbGluZShncmFwaCwgJmxpbmUpOworCQlzaG93bl9jb21taXRfbGluZSA9IDE7CisJCWJyZWFrOwogCWNhc2UgR1JBUEhfUE9TVF9NRVJHRToKLQkJZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMDsKKwkJZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKIAljYXNlIEdSQVBIX0NPTExBUFNJTkc6Ci0JCWdyYXBoX291dHB1dF9jb2xsYXBzaW5nX2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDA7CisJCWdyYXBoX291dHB1dF9jb2xsYXBzaW5nX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CiAJfQogCi0JYXNzZXJ0KDApOwotCXJldHVybiAwOworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsICZsaW5lKTsKKwlyZXR1cm4gc2hvd25fY29tbWl0X2xpbmU7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCiB7CiAJaW50IGk7Ci0JaW50IGNoYXJzX3dyaXR0ZW4gPSAwOworCXN0cnVjdCBncmFwaF9saW5lIGxpbmUgPSB7IC5idWYgPSBzYiwgLndpZHRoID0gMCB9OwogCiAJaWYgKGdyYXBoLT5zdGF0ZSAhPSBHUkFQSF9DT01NSVQpIHsKIAkJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCBzYik7CkBAIC0xMjQ0LDIwICsxMzQ2LDE3IEBACiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CiAJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKIAotCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCWNoYXJzX3dyaXR0ZW4rKzsKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4oJmxpbmUsIGNvbCwgJ3wnKTsKIAogCQlpZiAoY29sLT5jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCAmJiBncmFwaC0+bnVtX3BhcmVudHMgPiAyKSB7CiAJCQlpbnQgbGVuID0gKGdyYXBoLT5udW1fcGFyZW50cyAtIDIpICogMjsKLQkJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBsZW4pOwotCQkJY2hhcnNfd3JpdHRlbiArPSBsZW47CisJCQlncmFwaF9saW5lX2FkZGNoYXJzKCZsaW5lLCAnICcsIGxlbik7CiAJCX0gZWxzZSB7Ci0JCQlzdHJidWZfYWRkY2goc2IsICcgJyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQlncmFwaF9saW5lX2FkZGNoKCZsaW5lLCAnICcpOwogCQl9CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsICZsaW5lKTsKIAogCS8qCiAJICogVXBkYXRlIGdyYXBoLT5wcmV2X3N0YXRlIHNpbmNlIHdlIGhhdmUgb3V0cHV0IGEgcGFkZGluZyBsaW5lCmRpZmYgLS1naXQgYS9ncmFwaC5oIGIvZ3JhcGguaAppbmRleCBhZjYyMzM5Li44MzEzZTI5IDEwMDY0NAotLS0gYS9ncmFwaC5oCisrKyBiL2dyYXBoLmgKQEAgLTIsNiArMiwxMDMgQEAKICNkZWZpbmUgR1JBUEhfSAogI2luY2x1ZGUgImRpZmYuaCIKIAorLyoqCisgKiBUaGUgZ3JhcGggQVBJIGlzIHVzZWQgdG8gZHJhdyBhIHRleHQtYmFzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1pdAorICogaGlzdG9yeS4gVGhlIEFQSSBnZW5lcmF0ZXMgdGhlIGdyYXBoIGluIGEgbGluZS1ieS1saW5lIGZhc2hpb24uCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gQ3JlYXRlIGEgYHN0cnVjdCBnaXRfZ3JhcGhgIGJ5IGNhbGxpbmcgYGdyYXBoX2luaXQoKWAuICBXaGVuIHVzaW5nIHRoZQorICogICByZXZpc2lvbiB3YWxraW5nIEFQSSwgdGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgYHNldHVwX3JldmlzaW9ucygpYCBpZgorICogICB0aGUgJy0tZ3JhcGgnIG9wdGlvbiBpcyBzdXBwbGllZC4KKyAqCisgKiAtIFVzZSB0aGUgcmV2aXNpb24gd2Fsa2luZyBBUEkgdG8gd2FsayB0aHJvdWdoIGEgZ3JvdXAgb2YgY29udGlndW91cyBjb21taXRzLgorICogICBUaGUgYGdldF9yZXZpc2lvbigpYCBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGNhbGxzIGBncmFwaF91cGRhdGUoKWAgZWFjaCB0aW1lCisgKiAgIGl0IGlzIGludm9rZWQuCisgKgorICogLSBGb3IgZWFjaCBjb21taXQsIGNhbGwgYGdyYXBoX25leHRfbGluZSgpYCByZXBlYXRlZGx5LCB1bnRpbAorICogICBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIHJldHVybnMgbm9uLXplcm8uICBFYWNoIGNhbGwgdG8KKyAqICAgYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhIHNpbmdsZSBsaW5lIG9mIHRoZSBncmFwaC4gIFRoZSByZXN1bHRpbmcKKyAqICAgbGluZXMgd2lsbCBub3QgY29udGFpbiBhbnkgbmV3bGluZXMuICBgZ3JhcGhfbmV4dF9saW5lKClgIHJldHVybnMgMSBpZiB0aGUKKyAqICAgcmVzdWx0aW5nIGxpbmUgY29udGFpbnMgdGhlIGN1cnJlbnQgY29tbWl0LCBvciAwIGlmIHRoaXMgaXMgbWVyZWx5IGEgbGluZQorICogICBuZWVkZWQgdG8gYWRqdXN0IHRoZSBncmFwaCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgY29tbWl0LiAgVGhpcyByZXR1cm4KKyAqICAgdmFsdWUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHByaW50IHRoZSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbgorICogICBhbG9uZ3NpZGUgdGhlIGdyYXBoIG91dHB1dC4KKyAqCisgKiBMaW1pdGF0aW9ucworICogLS0tLS0tLS0tLS0KKyAqIC0gQ2hlY2sgdGhlIGdyYXBoX3VwZGF0ZSgpIGZ1bmN0aW9uIGZvciBpdHMgbGltaXRhdGlvbnMuCisgKgorICogLSBUaGUgZ3JhcGggQVBJIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHJldmVyc2UgY29tbWl0IG9yZGVyaW5nLiAgSW4KKyAqICAgb3JkZXIgdG8gaW1wbGVtZW50IHJldmVyc2Ugb3JkZXJpbmcsIHRoZSBncmFwaGluZyBBUEkgbmVlZHMgYW4KKyAqICAgKGVmZmljaWVudCkgbWVjaGFuaXNtIHRvIGZpbmQgdGhlIGNoaWxkcmVuIG9mIGEgY29tbWl0LgorICoKKyAqIFNhbXBsZSB1c2FnZQorICogLS0tLS0tLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tCisgKiBzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisgKiBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGdyYXBoX2luaXQob3B0cyk7CisgKgorICogd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ob3B0cykpICE9IE5VTEwpIHsKKyAqIAl3aGlsZSAoIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpCisgKiAJeworICogCQlzdHJ1Y3Qgc3RyYnVmIHNiOworICogCQlpbnQgaXNfY29tbWl0X2xpbmU7CisgKgorICogCQlzdHJidWZfaW5pdCgmc2IsIDApOworICogCQlpc19jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJnNiKTsKKyAqIAkJZnB1dHMoc2IuYnVmLCBzdGRvdXQpOworICoKKyAqIAkJaWYgKGlzX2NvbW1pdF9saW5lKQorICogCQkJbG9nX3RyZWVfY29tbWl0KG9wdHMsIGNvbW1pdCk7CisgKiAJCWVsc2UKKyAqIAkJCXB1dGNoYXIob3B0cy0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKyAqIAl9CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqIFNhbXBsZSBvdXRwdXQKKyAqIC0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgdGhlIG91dHB1dCBmcm9tIHRoZSBncmFwaCBBUEkuICBUaGlzIG91dHB1dCBkb2VzCisgKiBub3QgaW5jbHVkZSBhbnkgY29tbWl0IHN1bW1hcnkgaW5mb3JtYXRpb24tLWNhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvcgorICogb3V0cHV0dGluZyB0aGF0IGluZm9ybWF0aW9uLCBpZiBkZXNpcmVkLgorICogLS0tLS0tLS0tLS0tCisgKiAqCisgKiAqCisgKiAqCisgKiB8XAorICogKiB8CisgKiB8IHwgKgorICogfCBcIFwKKyAqIHwgIFwgXAorICogKi0uIFwgXAorICogfFwgXCBcIFwKKyAqIHwgfCAqIHwgfAorICogfCB8IHwgfCB8ICoKKyAqIHwgfCB8IHwgfCAqCisgKiB8IHwgfCB8IHwgKgorICogfCB8IHwgfCB8IHxcCisgKiB8IHwgfCB8IHwgfCAqCisgKiB8ICogfCB8IHwgfCB8CisgKiB8IHwgfCB8IHwgKiAgXAorICogfCB8IHwgfCB8IHxcICB8CisgKiB8IHwgfCB8ICogfCB8IHwKKyAqIHwgfCB8IHwgKiB8IHwgfAorICogKiB8IHwgfCB8IHwgfCB8CisgKiB8IHwvIC8gLyAvIC8gLworICogfC98IC8gLyAvIC8gLworICogKiB8IHwgfCB8IHwgfAorICogfC8gLyAvIC8gLyAvCisgKiAqIHwgfCB8IHwgfAorICogfCB8IHwgfCB8ICoKKyAqIHwgfCB8IHwgfC8KKyAqIHwgfCB8IHwgKgorICogLS0tLS0tLS0tLS0tCisgKgorICovCisKIC8qIEEgZ3JhcGggaXMgYSBwb2ludGVyIHRvIHRoaXMgb3BhcXVlIHN0cnVjdHVyZSAqLwogc3RydWN0IGdpdF9ncmFwaDsKIApAQCAtNTAsNiArMTQ3LDIxIEBACiAgKiBJZiBncmFwaF91cGRhdGUoKSBpcyBjYWxsZWQgYmVmb3JlIGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpIHJldHVybnMgMSwKICAqIHRoZSBuZXh0IGNhbGwgdG8gZ3JhcGhfbmV4dF9saW5lKCkgd2lsbCBvdXRwdXQgYW4gZWxsaXBzaXMgKCIuLi4iKQogICogdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisgKgorICogTGltaXRhdGlvbnM6CisgKiAtLS0tLS0tLS0tLQorICoKKyAqIC0gYGdyYXBoX3VwZGF0ZSgpYCBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIuICBJdCBzaG91bGQKKyAqICAgbm90IGJlIGNhbGxlZCBvbiBhIGNvbW1pdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQgd2l0aCBhbiBhbmNlc3RvciBvZgorICogICB0aGF0IGNvbW1pdCwgb3IgdGhlIGdyYXBoIG91dHB1dCB3aWxsIGJlIGluY29ycmVjdC4KKyAqCisgKiAtIGBncmFwaF91cGRhdGUoKWAgbXVzdCBiZSBjYWxsZWQgb24gYSBjb250aWd1b3VzIGdyb3VwIG9mIGNvbW1pdHMuICBJZgorICogICBgZ3JhcGhfdXBkYXRlKClgIGlzIGNhbGxlZCBvbiBhIHBhcnRpY3VsYXIgY29tbWl0LCBpdCBzaG91bGQgbGF0ZXIgYmUgY2FsbGVkCisgKiAgIG9uIGFsbCBwYXJlbnRzIG9mIHRoYXQgY29tbWl0LiAgUGFyZW50cyBtdXN0IG5vdCBiZSBza2lwcGVkLCBvciB0aGUgZ3JhcGgKKyAqICAgb3V0cHV0IHdpbGwgYXBwZWFyIGluY29ycmVjdC4KKyAqCisgKiAtIGBncmFwaF91cGRhdGUoKWAgbWF5IGJlIHVzZWQgb24gYSBwcnVuZWQgc2V0IG9mIGNvbW1pdHMgb25seSBpZiB0aGUgcGFyZW50IGxpc3QKKyAqICAgaGFzIGJlZW4gcmV3cml0dGVuIHNvIGFzIHRvIGluY2x1ZGUgb25seSBhbmNlc3RvcnMgZnJvbSB0aGUgcHJ1bmVkIHNldC4KICAqLwogdm9pZCBncmFwaF91cGRhdGUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiAKQEAgLTYyLDYgKzE3NCwxMCBAQAogICogZm9yIHRoaXMgY29tbWl0LiAgSWYgMCBpcyByZXR1cm5lZCwgZ3JhcGhfbmV4dF9saW5lKCkgbWF5IHN0aWxsIGJlCiAgKiBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIGdyYXBoX3VwZGF0ZSgpLCBhbmQgaXQgd2lsbCBtZXJlbHkgb3V0cHV0CiAgKiBhcHByb3ByaWF0ZSAidmVydGljYWwgcGFkZGluZyIgaW4gdGhlIGdyYXBoLgorICoKKyAqIElmIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIGJlZm9yZSBhbGwgbGluZXMgZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBoYXZlCisgKiBiZWVuIHByaW50ZWQsIHRoZSBuZXh0IGNhbGwgdG8gYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhbiBlbGxpcHNpcywKKyAqIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBncmFwaCB3YXMgb21pdHRlZC4KICAqLwogaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCk7CiAKQEAgLTExMiw2ICsyMjgsNyBAQAogLyoKICAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgdGhlIHJlc3Qgb2YgdGhlIGhpc3RvcnkgZ3JhcGggZm9yIHRoaXMKICAqIGNvbW1pdCB0byBzdGRvdXQuICBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqIFJldHVybnMgMSBpZiBvdXRwdXQgd2FzIHByaW50ZWQsIGFuZCAwIGlmIG5vIG91dHB1dCB3YXMgbmVjZXNzYXJ5LgogICovCiBpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOwogCkBAIC0xMjEsNiArMjM4LDEwIEBACiAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ3JhcGhfc2hvd19zdHJidWYoKSwgYnV0IGl0IGFsd2F5cyBwcmludHMgdGhlCiAgKiByZW1haW5kZXIgb2YgdGhlIGdyYXBoLgogICoKKyAqIEl0IGlzIGJldHRlciB0aGFuIGRpcmVjdGx5IGNhbGxpbmcgYGdyYXBoX3Nob3dfc3RyYnVmKClgIGZvbGxvd2VkIGJ5CisgKiBgZ3JhcGhfc2hvd19yZW1haW5kZXIoKWAgc2luY2UgaXQgcHJvcGVybHkgaGFuZGxlcyBidWZmZXJzIHRoYXQgZG8gbm90IGVuZCBpbgorICogYSB0ZXJtaW5hdGluZyBuZXdsaW5lLgorICoKICAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCBwcmludGVkIGJ5CiAgKiBncmFwaF9zaG93X2NvbW1pdF9tc2coKSB3aWxsIGVuZCB3aXRoIGEgbmV3bGluZS4gIElmIHRoZSBzdHJidWYgaXMKICAqIG1pc3NpbmcgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIChpbmNsdWRpbmcgaWYgaXQgaXMgZW1wdHkpLCB0aGUgb3V0cHV0CmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKaW5kZXggYjdhZTVhNC4uMDU1MmIxMiAxMDA2NDQKLS0tIGEvZ3JlcC5jCisrKyBiL2dyZXAuYwpAQCAtMjYsNyArMjYsNyBAQAogCiBzdGF0aWMgdm9pZCBwY3JlMl9mcmVlKHZvaWQgKnBvaW50ZXIsIE1BWUJFX1VOVVNFRCB2b2lkICptZW1vcnlfZGF0YSkKIHsKLQlyZXR1cm4gZnJlZShwb2ludGVyKTsKKwlmcmVlKHBvaW50ZXIpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2hhc2htYXAuYyBiL2hhc2htYXAuYwppbmRleCAzOWMxMzExLi4wOTgxM2UxIDEwMDY0NAotLS0gYS9oYXNobWFwLmMKKysrIGIvaGFzaG1hcC5jCkBAIC01MSw3ICs1MSw3IEBACiB9CiAKIC8qCi0gKiBJbmNvcG9yYXRlIGFub3RoZXIgY2h1bmsgb2YgZGF0YSBpbnRvIGEgbWVtaWhhc2gKKyAqIEluY29ycG9yYXRlIGFub3RoZXIgY2h1bmsgb2YgZGF0YSBpbnRvIGEgbWVtaWhhc2gKICAqIGNvbXB1dGF0aW9uLgogICovCiB1bnNpZ25lZCBpbnQgbWVtaWhhc2hfY29udCh1bnNpZ25lZCBpbnQgaGFzaF9zZWVkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCmRpZmYgLS1naXQgYS9oYXNobWFwLmggYi9oYXNobWFwLmgKaW5kZXggYmQyNzAxNS4uNzlhZTlmOCAxMDA2NDQKLS0tIGEvaGFzaG1hcC5oCisrKyBiL2hhc2htYXAuaApAQCAtNTksNyArNTksNyBAQAogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoInByaW50X2FsbF9ieV9rZXkiLCBhY3Rpb24pKSB7CiAgKiAgICAgICAgICAgICBzdHJ1Y3QgbG9uZzJzdHJpbmcgaywgKmU7Ci0gKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmstPmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZW50cnlfaW5pdCgmay5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CiAgKiAgICAgICAgICAgICBrLmtleSA9IGtleTsKICAqCiAgKiAgICAgICAgICAgICBmbGFncyAmPSB+Q09NUEFSRV9WQUxVRTsKQEAgLTg3LDEyICs4NywxMiBAQAogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoImhhc19leGFjdF9tYXRjaF9ub19oZWFwX2FsbG9jIiwgYWN0aW9uKSkgewogICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nIGs7Ci0gKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmstPmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZW50cnlfaW5pdCgmay5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CiAgKiAgICAgICAgICAgICBrLmtleSA9IGtleTsKICAqCiAgKiAgICAgICAgICAgICBmbGFncyB8PSBDT01QQVJFX1ZBTFVFOwogICogICAgICAgICAgICAgcHJpbnRmKCIlc2ZvdW5kXG4iLAotICogICAgICAgICAgICAgICAgICAgIGhhc2htYXBfZ2V0KCZtYXAsICZrLT5lbnQsIHZhbHVlKSA/ICIiIDogIm5vdCAiKTsKKyAqICAgICAgICAgICAgICAgICAgICBoYXNobWFwX2dldCgmbWFwLCAmay5lbnQsIHZhbHVlKSA/ICIiIDogIm5vdCAiKTsKICAqICAgICAgICAgfQogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoImVuZCIsIGFjdGlvbikpIHsKQEAgLTUwMiw3ICs1MDIsNyBAQAogfQogCiAvKgotICogUmUtZW5hYmxlIGl0ZW0gY291dGluZyB3aGVuIGFkZGluZy9yZW1vdmluZyBpdGVtcy4KKyAqIFJlLWVuYWJsZSBpdGVtIGNvdW50aW5nIHdoZW4gYWRkaW5nL3JlbW92aW5nIGl0ZW1zLgogICogSWYgY291bnRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkLCBpdCB3aWxsIGZvcmNlIGNvdW50IHRoZW0uCiAgKiBJdCBXSUxMIE5PVCBhdXRvbWF0aWNhbGx5IHJlaGFzaCB0aGVtLgogICovCmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggOWZmMmJlNi4uY2Y2NzYyNCAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtMzQsNyArMzQsNyBAQAogCXsgQ0FUX2ZvcmVpZ25zY21pbnRlcmZhY2UsIE5fKCJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIpIH0sCiAJeyBDQVRfcGx1bWJpbmdtYW5pcHVsYXRvcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiKSB9LAogCXsgQ0FUX3BsdW1iaW5naW50ZXJyb2dhdG9ycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiKSB9LAotCXsgQ0FUX3N5bmNoaW5ncmVwb3NpdG9yaWVzLCBOXygiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2hpbmcgUmVwb3NpdG9yaWVzIikgfSwKKwl7IENBVF9zeW5jaGluZ3JlcG9zaXRvcmllcywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIikgfSwKIAl7IENBVF9wdXJlaGVscGVycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiKSB9LAogCXsgMCwgTlVMTCB9CiB9OwpkaWZmIC0tZ2l0IGEvaGV4LmMgYi9oZXguYwppbmRleCA3ODUwYTg4Li5mZDdmMDBjIDEwMDY0NAotLS0gYS9oZXguYworKysgYi9oZXguYwpAQCAtOTAsMTEgKzkwLDYgQEAKIAlyZXR1cm4gYnVmZmVyOwogfQogCi1jaGFyICpzaGExX3RvX2hleF9yKGNoYXIgKmJ1ZmZlciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihidWZmZXIsIHNoYTEsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKTsKLX0KLQogY2hhciAqb2lkX3RvX2hleF9yKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewogCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcF9yKGJ1ZmZlciwgb2lkLT5oYXNoLCB0aGVfaGFzaF9hbGdvKTsKQEAgLTEwOCwxMSArMTAzLDYgQEAKIAlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihoZXhidWZmZXJbYnVmbm9dLCBoYXNoLCBhbGdvcCk7CiB9CiAKLWNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wKHNoYTEsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKTsKLX0KLQogY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCkKIHsKIAlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3AoaGFzaCwgdGhlX2hhc2hfYWxnbyk7CmRpZmYgLS1naXQgYS9odHRwLmMgYi9odHRwLmMKaW5kZXggMDI3YTg2ZC4uNWYzNDgxNiAxMDA2NDQKLS0tIGEvaHR0cC5jCisrKyBiL2h0dHAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqcHJhZ21hX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKLXN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqZXh0cmFfaHR0cF9oZWFkZXJzOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9odHRwX2hlYWRlcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAogc3RhdGljIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICphY3RpdmVfcXVldWVfaGVhZDsKIApAQCAtNDE0LDExICs0MTQsOSBAQAogCQlpZiAoIXZhbHVlKSB7CiAJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKIAkJfSBlbHNlIGlmICghKnZhbHVlKSB7Ci0JCQljdXJsX3NsaXN0X2ZyZWVfYWxsKGV4dHJhX2h0dHBfaGVhZGVycyk7Ci0JCQlleHRyYV9odHRwX2hlYWRlcnMgPSBOVUxMOworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2h0dHBfaGVhZGVycywgMCk7CiAJCX0gZWxzZSB7Ci0JCQlleHRyYV9odHRwX2hlYWRlcnMgPQotCQkJCWN1cmxfc2xpc3RfYXBwZW5kKGV4dHJhX2h0dHBfaGVhZGVycywgdmFsdWUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9odHRwX2hlYWRlcnMsIHZhbHVlKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjAyLDggKzEyMDAsNyBAQAogI2VuZGlmCiAJY3VybF9nbG9iYWxfY2xlYW51cCgpOwogCi0JY3VybF9zbGlzdF9mcmVlX2FsbChleHRyYV9odHRwX2hlYWRlcnMpOwotCWV4dHJhX2h0dHBfaGVhZGVycyA9IE5VTEw7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2h0dHBfaGVhZGVycywgMCk7CiAKIAljdXJsX3NsaXN0X2ZyZWVfYWxsKHByYWdtYV9oZWFkZXIpOwogCXByYWdtYV9oZWFkZXIgPSBOVUxMOwpAQCAtMTYyNywxMCArMTYyNCwxMSBAQAogCiBzdHJ1Y3QgY3VybF9zbGlzdCAqaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycyh2b2lkKQogewotCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTCwgKmg7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCi0JZm9yIChoID0gZXh0cmFfaHR0cF9oZWFkZXJzOyBoOyBoID0gaC0+bmV4dCkKLQkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGgtPmRhdGEpOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmV4dHJhX2h0dHBfaGVhZGVycykKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGl0ZW0tPnN0cmluZyk7CiAKIAlyZXR1cm4gaGVhZGVyczsKIH0KZGlmZiAtLWdpdCBhL2t3c2V0LmggYi9rd3NldC5oCmluZGV4IGRmOTlhOTIuLmY1MGVjYWUgMTAwNjQ0Ci0tLSBhL2t3c2V0LmgKKysrIGIva3dzZXQuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgS1dTRVRfSAorI2RlZmluZSBLV1NFVF9ICisKIC8qIFRoaXMgZmlsZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSBjb21taXQgZTdhYzcxM2ReIGluIHRoZSBHTlUgZ3JlcCBnaXQKICAqIHJlcG9zaXRvcnkuIEEgZmV3IHNtYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWRhcHQgdGhlIGNvZGUgdG8KICAqIEdpdC4KQEAgLTU5LDMgKzYyLDQgQEAKIC8qIERlYWxsb2NhdGUgdGhlIGdpdmVuIGtleXdvcmQgc2V0IGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3RvcmFnZS4gKi8KIHZvaWQga3dzZnJlZShrd3NldF90KTsKIAorI2VuZGlmIC8qIEtXU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2xsLW1lcmdlLmggYi9sbC1tZXJnZS5oCmluZGV4IGU3ODk3M2QuLmFjZWIxYjIgMTAwNjQ0Ci0tLSBhL2xsLW1lcmdlLmgKKysrIGIvbGwtbWVyZ2UuaApAQCAtNywxNiArNyw4NyBAQAogCiAjaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKIAorLyoqCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAtIFByZXBhcmUgYSBgc3RydWN0IGxsX21lcmdlX29wdGlvbnNgIHRvIHJlY29yZCBvcHRpb25zLgorICogICBJZiB5b3UgaGF2ZSBubyBzcGVjaWFsIHJlcXVlc3RzLCBza2lwIHRoaXMgYW5kIHBhc3MgYE5VTExgCisgKiAgIGFzIHRoZSBgb3B0c2AgcGFyYW1ldGVyIHRvIHVzZSB0aGUgZGVmYXVsdCBvcHRpb25zLgorICoKKyAqIC0gQWxsb2NhdGUgYW4gbW1idWZmZXJfdCB2YXJpYWJsZSBmb3IgdGhlIHJlc3VsdC4KKyAqCisgKiAtIEFsbG9jYXRlIGFuZCBmaWxsIHZhcmlhYmxlcyB3aXRoIHRoZSBmaWxlJ3Mgb3JpZ2luYWwgY29udGVudAorICogICBhbmQgdHdvIG1vZGlmaWVkIHZlcnNpb25zICh1c2luZyBgcmVhZF9tbWZpbGVgLCBmb3IgZXhhbXBsZSkuCisgKgorICogLSBDYWxsIGBsbF9tZXJnZSgpYC4KKyAqCisgKiAtIFJlYWQgdGhlIG1lcmdlZCBjb250ZW50IGZyb20gYHJlc3VsdF9idWYucHRyYCBhbmQgYHJlc3VsdF9idWYuc2l6ZWAuCisgKgorICogLSBSZWxlYXNlIGJ1ZmZlcnMgd2hlbiBmaW5pc2hlZC4gIEEgc2ltcGxlCisgKiAgIGBmcmVlKGFuY2VzdG9yLnB0cik7IGZyZWUob3Vycy5wdHIpOyBmcmVlKHRoZWlycy5wdHIpOworICogICBmcmVlKHJlc3VsdF9idWYucHRyKTtgIHdpbGwgZG8uCisgKgorICogSWYgdGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IG1lcmdlIGNsZWFubHksIGBsbF9tZXJnZWAgd2lsbCByZXR1cm4gYQorICogbm9uemVybyB2YWx1ZSBhbmQgYHJlc3VsdF9idWZgIHdpbGwgZ2VuZXJhbGx5IGluY2x1ZGUgYSBkZXNjcmlwdGlvbiBvZgorICogdGhlIGNvbmZsaWN0IGJyYWNrZXRlZCBieSBtYXJrZXJzIHN1Y2ggYXMgdGhlIHRyYWRpdGlvbmFsIGA8PDw8PDw8YAorICogYW5kIGA+Pj4+Pj4+YC4KKyAqCisgKiBUaGUgYGFuY2VzdG9yX2xhYmVsYCwgYG91cl9sYWJlbGAsIGFuZCBgdGhlaXJfbGFiZWxgIHBhcmFtZXRlcnMgYXJlCisgKiB1c2VkIHRvIGxhYmVsIHRoZSBkaWZmZXJlbnQgc2lkZXMgb2YgYSBjb25mbGljdCBpZiB0aGUgbWVyZ2UgZHJpdmVyCisgKiBzdXBwb3J0cyB0aGlzLgorICovCisKKwogc3RydWN0IGluZGV4X3N0YXRlOwogCisvKioKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBzZXQgb2Ygb3B0aW9ucyB0aGUgY2FsbGluZyBwcm9ncmFtIHdhbnRzIHRvIGFmZmVjdAorICogdGhlIG9wZXJhdGlvbiBvZiBhIGxvdy1sZXZlbCAoc2luZ2xlIGZpbGUpIG1lcmdlLgorICovCiBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyB7CisKKwkvKioKKwkgKiBCZWhhdmUgYXMgdGhvdWdoIHRoaXMgd2VyZSBwYXJ0IG9mIGEgbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzIGluCisJICogYSByZWN1cnNpdmUgbWVyZ2UgKG1lcmdlcyBvZiBiaW5hcnkgZmlsZXMgbWF5IG5lZWQgdG8gYmUgaGFuZGxlZAorCSAqIGRpZmZlcmVudGx5IGluIHN1Y2ggY2FzZXMsIGZvciBleGFtcGxlKS4gSWYgYSBoZWxwZXIgcHJvZ3JhbSBpcworCSAqIHNwZWNpZmllZCBieSB0aGUgYFttZXJnZSAiPGRyaXZlcj4iXSByZWN1cnNpdmVgIGNvbmZpZ3VyYXRpb24sIGl0IHdpbGwKKwkgKiBiZSB1c2VkLgorCSAqLwogCXVuc2lnbmVkIHZpcnR1YWxfYW5jZXN0b3IgOiAxOwotCXVuc2lnbmVkIHZhcmlhbnQgOiAyOwkvKiBmYXZvciBvdXJzLCBmYXZvciB0aGVpcnMsIG9yIHVuaW9uIG1lcmdlICovCisKKwkvKioKKwkgKiBSZXNvbHZlIGxvY2FsIGNvbmZsaWN0cyBhdXRvbWF0aWNhbGx5IGluIGZhdm9yIG9mIG9uZSBzaWRlIG9yIHRoZSBvdGhlcgorCSAqIChhcyBpbiAnZ2l0IG1lcmdlLWZpbGUnIGAtLW91cnNgL2AtLXRoZWlyc2AvYC0tdW5pb25gKS4gIENhbiBiZSBgMGAsCisJICogYFhETF9NRVJHRV9GQVZPUl9PVVJTYCwgYFhETF9NRVJHRV9GQVZPUl9USEVJUlNgLAorCSAqIG9yIGBYRExfTUVSR0VfRkFWT1JfVU5JT05gLgorCSAqLworCXVuc2lnbmVkIHZhcmlhbnQgOiAyOworCisJLyoqCisJICogUmVzbXVkZ2UgYW5kIGNsZWFuIHRoZSAiYmFzZSIsICJ0aGVpcnMiIGFuZCAib3VycyIgZmlsZXMgYmVmb3JlIG1lcmdpbmcuCisJICogVXNlIHRoaXMgd2hlbiB0aGUgbWVyZ2UgaXMgbGlrZWx5IHRvIGhhdmUgb3ZlcmxhcHBlZCB3aXRoIGEgY2hhbmdlIGluCisJICogc211ZGdlL2NsZWFuIG9yIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gcnVsZXMuCisJICovCiAJdW5zaWduZWQgcmVub3JtYWxpemUgOiAxOworCisJLyoqCisJICogSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBjb25mbGljdCBtYXJrZXJzIHNvIHRoYXQgbmVzdGVkIGNvbmZsaWN0cworCcKgKiBjYW4gYmUgZGlmZmVyZW50aWF0ZWQuCisJICovCiAJdW5zaWduZWQgZXh0cmFfbWFya2VyX3NpemU7CisKKwkvKiBFeHRyYSB4cHBhcmFtX3QgZmxhZ3MgYXMgZGVmaW5lZCBpbiB4ZGlmZi94ZGlmZi5oLiAqLwogCWxvbmcgeGRsX29wdHM7CiB9OwogCisvKioKKyAqIFBlcmZvcm0gYSB0aHJlZS13YXkgc2luZ2xlLWZpbGUgbWVyZ2UgaW4gY29yZS4gIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIKKyAqIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZCBhbnkgbWVyZ2UgYmFja2VuZCBzcGVjaWZpZWQgaW4KKyAqIGAuZ2l0YXR0cmlidXRlc2Agb3IgYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuCisgKiBSZXR1cm5zIDAgZm9yIGEgY2xlYW4gbWVyZ2UuCisgKi8KIGludCBsbF9tZXJnZShtbWJ1ZmZlcl90ICpyZXN1bHRfYnVmLAogCSAgICAgY29uc3QgY2hhciAqcGF0aCwKIAkgICAgIG1tZmlsZV90ICphbmNlc3RvciwgY29uc3QgY2hhciAqYW5jZXN0b3JfbGFiZWwsCmRpZmYgLS1naXQgYS9sb2ctdHJlZS5jIGIvbG9nLXRyZWUuYwppbmRleCA5MjNhMjk5Li40ZTMyNjM4IDEwMDY0NAotLS0gYS9sb2ctdHJlZS5jCisrKyBiL2xvZy10cmVlLmMKQEAgLTQ0OSwyMiArNDQ5LDIyIEBACiB7CiAJc3RydWN0IHN0cmJ1ZiBwYXlsb2FkID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHN0cmJ1ZiBzaWduYXR1cmUgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3Qgc3RyYnVmIGdwZ19vdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ2MgPSB7IDAgfTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LCAmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKIAkJZ290byBvdXQ7CiAKLQlzdGF0dXMgPSB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihwYXlsb2FkLmJ1ZiwgcGF5bG9hZC5sZW4sCi0JCQkJICAgICAgc2lnbmF0dXJlLmJ1Ziwgc2lnbmF0dXJlLmxlbiwKLQkJCQkgICAgICAmZ3BnX291dHB1dCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyAmJiAhZ3BnX291dHB1dC5sZW4pCi0JCXN0cmJ1Zl9hZGRzdHIoJmdwZ19vdXRwdXQsICJObyBzaWduYXR1cmVcbiIpOwotCi0Jc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIGdwZ19vdXRwdXQuYnVmKTsKKwlzdGF0dXMgPSBjaGVja19zaWduYXR1cmUocGF5bG9hZC5idWYsIHBheWxvYWQubGVuLCBzaWduYXR1cmUuYnVmLAorCQkJCSBzaWduYXR1cmUubGVuLCAmc2lnYyk7CisJaWYgKHN0YXR1cyAmJiBzaWdjLnJlc3VsdCA9PSAnTicpCisJCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCAiTm8gc2lnbmF0dXJlXG4iKTsKKwllbHNlIHsKKwkJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIHNpZ2MuZ3BnX291dHB1dCk7CisJCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnYyk7CisJfQogCiAgb3V0OgotCXN0cmJ1Zl9yZWxlYXNlKCZncGdfb3V0cHV0KTsKIAlzdHJidWZfcmVsZWFzZSgmcGF5bG9hZCk7CiAJc3RyYnVmX3JlbGVhc2UoJnNpZ25hdHVyZSk7CiB9CkBAIC00OTcsNiArNDk3LDcgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKIAlzdHJ1Y3QgdGFnICp0YWc7CiAJc3RydWN0IHN0cmJ1ZiB2ZXJpZnlfbWVzc2FnZTsKKwlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ2MgPSB7IDAgfTsKIAlpbnQgc3RhdHVzLCBudGg7CiAJc2l6ZV90IHBheWxvYWRfc2l6ZSwgZ3BnX21lc3NhZ2Vfb2Zmc2V0OwogCkBAIC01MjUsMTIgKzUyNiwxMyBAQAogCXN0YXR1cyA9IC0xOwogCWlmIChleHRyYS0+bGVuID4gcGF5bG9hZF9zaXplKSB7CiAJCS8qIGNvdWxkIGhhdmUgYSBnb29kIHNpZ25hdHVyZSAqLwotCQlpZiAoIXZlcmlmeV9zaWduZWRfYnVmZmVyKGV4dHJhLT52YWx1ZSwgcGF5bG9hZF9zaXplLAotCQkJCQkgIGV4dHJhLT52YWx1ZSArIHBheWxvYWRfc2l6ZSwKLQkJCQkJICBleHRyYS0+bGVuIC0gcGF5bG9hZF9zaXplLAotCQkJCQkgICZ2ZXJpZnlfbWVzc2FnZSwgTlVMTCkpCisJCWlmICghY2hlY2tfc2lnbmF0dXJlKGV4dHJhLT52YWx1ZSwgcGF5bG9hZF9zaXplLAorCQkJCSAgICAgZXh0cmEtPnZhbHVlICsgcGF5bG9hZF9zaXplLAorCQkJCSAgICAgZXh0cmEtPmxlbiAtIHBheWxvYWRfc2l6ZSwgJnNpZ2MpKSB7CisJCQlzdHJidWZfYWRkc3RyKCZ2ZXJpZnlfbWVzc2FnZSwgc2lnYy5ncGdfb3V0cHV0KTsKKwkJCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnYyk7CiAJCQlzdGF0dXMgPSAwOyAvKiBnb29kICovCi0JCWVsc2UgaWYgKHZlcmlmeV9tZXNzYWdlLmxlbiA8PSBncGdfbWVzc2FnZV9vZmZzZXQpCisJCX0gZWxzZSBpZiAodmVyaWZ5X21lc3NhZ2UubGVuIDw9IGdwZ19tZXNzYWdlX29mZnNldCkKIAkJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAiTm8gc2lnbmF0dXJlXG4iKTsKIAkJLyogb3RoZXJ3aXNlIHdlIGNvdWxkbid0IHZlcmlmeSwgd2hpY2ggaXMgc2hvd24gYXMgYmFkICovCiAJfQpAQCAtNzcwLDcgKzc3Miw3IEBACiAJCW9wdHMudXNlX2NvbG9yID0gb3B0LT5kaWZmb3B0LnVzZV9jb2xvcjsKIAkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKIAkJc2hvd19yYW5nZV9kaWZmKG9wdC0+cmRpZmYxLCBvcHQtPnJkaWZmMiwKLQkJCQlvcHQtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMpOworCQkJCW9wdC0+Y3JlYXRpb25fZmFjdG9yLCAxLCAmb3B0cywgTlVMTCk7CiAKIAkJbWVtY3B5KCZkaWZmX3F1ZXVlZF9kaWZmLCAmZHEsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CiAJfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwppbmRleCA0MmJlN2M5Li4xMTg2OWFkIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuYworKysgYi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtMTk1MSw2ICsxOTUxLDE2IEBACiAJCXJldHVybiBOVUxMOwogCiAJb2xkbGVuID0gc3RybGVuKGVudHJ5LT5kaXIpOworCWlmIChlbnRyeS0+bmV3X2Rpci5sZW4gPT0gMCkKKwkJLyoKKwkJICogSWYgc29tZW9uZSByZW5hbWVkL21lcmdlZCBhIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290CisJCSAqIGRpcmVjdG9yeSAoZS5nLiAnc29tZS9zdWJkaXInIC0+ICcnKSwgdGhlbiB3ZSB3YW50IHRvCisJCSAqIGF2b2lkIHJldHVybmluZworCQkgKiAgICAgJycgKyAnL2ZpbGVuYW1lJworCQkgKiBhcyB0aGUgcmVuYW1lOyB3ZSBuZWVkIHRvIG1ha2Ugb2xkX3BhdGggKyBvbGRsZW4gYWR2YW5jZQorCQkgKiBwYXN0IHRoZSAnLycgY2hhcmFjdGVyLgorCQkgKi8KKwkJb2xkbGVuKys7CiAJbmV3bGVuID0gZW50cnktPm5ld19kaXIubGVuICsgKHN0cmxlbihvbGRfcGF0aCkgLSBvbGRsZW4pICsgMTsKIAlzdHJidWZfZ3JvdygmbmV3X3BhdGgsIG5ld2xlbik7CiAJc3RyYnVmX2FkZGJ1ZigmbmV3X3BhdGgsICZlbnRyeS0+bmV3X2Rpcik7CkBAIC0xOTYzLDggKzE5NzMsOCBAQAogCQkJCSAgICBjaGFyICoqb2xkX2RpciwgY2hhciAqKm5ld19kaXIpCiB7CiAJY2hhciAqZW5kX29mX29sZCwgKmVuZF9vZl9uZXc7Ci0JaW50IG9sZF9sZW4sIG5ld19sZW47CiAKKwkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZXM6IE5VTEwsIG1lYW5pbmcgbm8gcmVuYW1lICovCiAJKm9sZF9kaXIgPSBOVUxMOwogCSpuZXdfZGlyID0gTlVMTDsKIApAQCAtMTk3NSw0MyArMTk4NSw5MSBAQAogCSAqICAgICJhL2IvYy9kIiB3YXMgcmVuYW1lZCB0byAiYS9iL3NvbWUvdGhpbmcvZWxzZSIKIAkgKiBzbywgZm9yIHRoaXMgZXhhbXBsZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zICJhL2IvYy9kIiBpbgogCSAqICpvbGRfZGlyIGFuZCAiYS9iL3NvbWUvdGhpbmcvZWxzZSIgaW4gKm5ld19kaXIuCi0JICoKLQkgKiBBbHNvLCBpZiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgY2hhbmdlZCwgd2UgZG9uJ3QgY2FyZS4gIFdlCi0JICogd2FudCB0byBrbm93IHdoaWNoIHBvcnRpb24gb2YgdGhlIGRpcmVjdG9yeSwgaWYgYW55LCBjaGFuZ2VkLgorCSAqLworCisJLyoKKwkgKiBJZiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgY2hhbmdlZCwgd2UgZG9uJ3QgY2FyZS4gIFdlIHdhbnQKKwkgKiB0byBrbm93IHdoaWNoIHBvcnRpb24gb2YgdGhlIGRpcmVjdG9yeSwgaWYgYW55LCBjaGFuZ2VkLgogCSAqLwogCWVuZF9vZl9vbGQgPSBzdHJyY2hyKG9sZF9wYXRoLCAnLycpOwogCWVuZF9vZl9uZXcgPSBzdHJyY2hyKG5ld19wYXRoLCAnLycpOwogCi0JaWYgKGVuZF9vZl9vbGQgPT0gTlVMTCB8fCBlbmRfb2ZfbmV3ID09IE5VTEwpCisJLyoKKwkgKiBJZiBlbmRfb2Zfb2xkIGlzIE5VTEwsIG9sZF9wYXRoIHdhc24ndCBpbiBhIGRpcmVjdG9yeSwgc28gdGhlcmUKKwkgKiBjb3VsZCBub3QgYmUgYSBkaXJlY3RvcnkgcmVuYW1lIChvdXIgcnVsZSBlbHNld2hlcmUgdGhhdCBhCisJICogZGlyZWN0b3J5IHdoaWNoIHN0aWxsIGV4aXN0cyBpcyBub3QgY29uc2lkZXJlZCB0byBoYXZlIGJlZW4KKwkgKiByZW5hbWVkIG1lYW5zIHRoZSByb290IGRpcmVjdG9yeSBjYW4gbmV2ZXIgYmUgcmVuYW1lZCAtLSBiZWNhdXNlCisJICogdGhlIHJvb3QgZGlyZWN0b3J5IGFsd2F5cyBleGlzdHMpLgorCSAqLworCWlmIChlbmRfb2Zfb2xkID09IE5VTEwpCisJCXJldHVybjsgLyogTm90ZTogKm9sZF9kaXIgYW5kICpuZXdfZGlyIGFyZSBzdGlsbCBOVUxMICovCisKKwkvKgorCSAqIElmIG5ld19wYXRoIGNvbnRhaW5zIG5vIGRpcmVjdG9yeSAoZW5kX29mX25ldyBpcyBOVUxMKSwgdGhlbiB3ZQorCSAqIGhhdmUgYSByZW5hbWUgb2Ygb2xkX3BhdGgncyBkaXJlY3RvcnkgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LgorCSAqLworCWlmIChlbmRfb2ZfbmV3ID09IE5VTEwpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgZW5kX29mX29sZCAtIG9sZF9wYXRoKTsKKwkJKm5ld19kaXIgPSB4c3RyZHVwKCIiKTsKIAkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgdHJhdmVyc2luZyBiYWNrd2FyZHMgKi8KIAl3aGlsZSAoKi0tZW5kX29mX25ldyA9PSAqLS1lbmRfb2Zfb2xkICYmCiAJICAgICAgIGVuZF9vZl9vbGQgIT0gb2xkX3BhdGggJiYKIAkgICAgICAgZW5kX29mX25ldyAhPSBuZXdfcGF0aCkKIAkJOyAvKiBEbyBub3RoaW5nOyBhbGwgaW4gdGhlIHdoaWxlIGxvb3AgKi8KKworCS8qCisJICogSWYgYm90aCBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIHN0cmluZ3MsIHRoZW4gdGhlCisJICogZGlyZWN0b3J5IGRpZG4ndCBjaGFuZ2UgYXQgYWxsLCBvbmx5IHRoZSBiYXNlbmFtZSBkaWQuCisJICovCisJaWYgKGVuZF9vZl9vbGQgPT0gb2xkX3BhdGggJiYgZW5kX29mX25ldyA9PSBuZXdfcGF0aCAmJgorCSAgICAqZW5kX29mX29sZCA9PSAqZW5kX29mX25ldykKKwkJcmV0dXJuOyAvKiBOb3RlOiAqb2xkX2RpciBhbmQgKm5ld19kaXIgYXJlIHN0aWxsIE5VTEwgKi8KKworCS8qCisJICogSWYgZW5kX29mX25ldyBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGl0cyBzdHJpbmcsIGFuZAorCSAqIGVuZF9vZl9vbGQgZ290IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBzb21lIHN1YmRpcmVjdG9yeSwgdGhlbgorCSAqIHdlIGhhdmUgYSByZW5hbWUvbWVyZ2Ugb2YgYSBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdCwgd2hpY2gKKwkgKiBuZWVkcyBzbGlnaHRseSBzcGVjaWFsIGhhbmRsaW5nLgorCSAqCisJICogTm90ZTogVGhlcmUgaXMgbm8gbmVlZCB0byBjb25zaWRlciB0aGUgb3Bwb3NpdGUgY2FzZSwgd2l0aCBhCisJICogcmVuYW1lL21lcmdlIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbnRvIHNvbWUgc3ViZGlyZWN0b3J5CisJICogYmVjYXVzZSBhcyBub3RlZCBhYm92ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cyBzbyBpdAorCSAqIGNhbm5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIHJlbmFtZWQuCisJICovCisJaWYgKGVuZF9vZl9uZXcgPT0gbmV3X3BhdGggJiYKKwkgICAgZW5kX29mX29sZCAhPSBvbGRfcGF0aCAmJiBlbmRfb2Zfb2xkWy0xXSA9PSAnLycpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgLS1lbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCQkqbmV3X2RpciA9IHhzdHJkdXAoIiIpOworCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiBXZSd2ZSBmb3VuZCB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBpbiB0aGUgZGlyZWN0b3J5Ci0JICogcGF0aHMuICBUaGF0IG1lYW5zIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3ZSB3ZXJlIGNvbXBhcmluZwotCSAqIHJlcHJlc2VudHMgdGhlIHJlbmFtZS4gIE1vdmUgZW5kX29mX29sZCBhbmQgZW5kX29mX25ldyBiYWNrCi0JICogdG8gdGhlIGZ1bGwgZGlyZWN0b3J5IG5hbWUuCisJICogcGF0aHMuICBUaGF0IG1lYW5zIHRoZSBjdXJyZW50IGNoYXJhY3RlcnMgd2Ugd2VyZSBsb29raW5nIGF0CisJICogd2VyZSBwYXJ0IG9mIHRoZSBmaXJzdCBub24tbWF0Y2hpbmcgc3ViZGlyIG5hbWUgZ29pbmcgYmFjayBmcm9tCisJICogdGhlIGVuZCBvZiB0aGUgc3RyaW5ncy4gIEdldCB0aGUgd2hvbGUgbmFtZSBieSBhZHZhbmNpbmcgYm90aAorCSAqIGVuZF9vZl9vbGQgYW5kIGVuZF9vZl9uZXcgdG8gdGhlIE5FWFQgJy8nIGNoYXJhY3Rlci4gIFRoYXQgd2lsbAorCSAqIHJlcHJlc2VudCB0aGUgZW50aXJlIGRpcmVjdG9yeSByZW5hbWUuCisJICoKKwkgKiBUaGUgcmVhc29uIGZvciB0aGUgaW5jcmVtZW50IGlzIGNhc2VzIGxpa2UKKwkgKiAgICBhL2Ivc3Rhci9mb28vd2hhdGV2ZXIuYyAtPiBhL2IvdGFyL2Zvby9yYW5kb20uYworCSAqIEFmdGVyIGRyb3BwaW5nIHRoZSBiYXNlbmFtZSBhbmQgZ29pbmcgYmFjayB0byB0aGUgZmlyc3QKKwkgKiBub24tbWF0Y2hpbmcgY2hhcmFjdGVyLCB3ZSdyZSBub3cgY29tcGFyaW5nOgorCSAqICAgIGEvYi9zICAgICAgICAgIGFuZCAgICAgICAgIGEvYi8KKwkgKiBhbmQgd2Ugd2FudCB0byBiZSBjb21wYXJpbmc6CisJICogICAgYS9iL3N0YXIvICAgICAgYW5kICAgICAgICAgYS9iL3Rhci8KKwkgKiBidXQgd2l0aG91dCB0aGUgcHJlLWluY3JlbWVudCwgdGhlIG9uZSBvbiB0aGUgcmlnaHQgd291bGQgc3RheQorCSAqIGEvYi8uCiAJICovCi0JaWYgKCplbmRfb2Zfb2xkID09ICcvJykKLQkJZW5kX29mX29sZCsrOwotCWlmICgqZW5kX29mX29sZCAhPSAnLycpCi0JCWVuZF9vZl9uZXcrKzsKLQllbmRfb2Zfb2xkID0gc3RyY2hyKGVuZF9vZl9vbGQsICcvJyk7Ci0JZW5kX29mX25ldyA9IHN0cmNocihlbmRfb2ZfbmV3LCAnLycpOworCWVuZF9vZl9vbGQgPSBzdHJjaHIoKytlbmRfb2Zfb2xkLCAnLycpOworCWVuZF9vZl9uZXcgPSBzdHJjaHIoKytlbmRfb2ZfbmV3LCAnLycpOwogCi0JLyoKLQkgKiBJdCBtYXkgaGF2ZSBiZWVuIHRoZSBjYXNlIHRoYXQgb2xkX3BhdGggYW5kIG5ld19wYXRoIHdlcmUgdGhlIHNhbWUKLQkgKiBkaXJlY3RvcnkgYWxsIGFsb25nLiAgRG9uJ3QgY2xhaW0gYSByZW5hbWUgaWYgdGhleSdyZSB0aGUgc2FtZS4KLQkgKi8KLQlvbGRfbGVuID0gZW5kX29mX29sZCAtIG9sZF9wYXRoOwotCW5ld19sZW4gPSBlbmRfb2ZfbmV3IC0gbmV3X3BhdGg7Ci0KLQlpZiAob2xkX2xlbiAhPSBuZXdfbGVuIHx8IHN0cm5jbXAob2xkX3BhdGgsIG5ld19wYXRoLCBvbGRfbGVuKSkgewotCQkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCBvbGRfbGVuKTsKLQkJKm5ld19kaXIgPSB4c3RybmR1cChuZXdfcGF0aCwgbmV3X2xlbik7Ci0JfQorCS8qIENvcHkgdGhlIG9sZCBhbmQgbmV3IGRpcmVjdG9yaWVzIGludG8gKm9sZF9kaXIgYW5kICpuZXdfZGlyLiAqLworCSpvbGRfZGlyID0geHN0cm5kdXAob2xkX3BhdGgsIGVuZF9vZl9vbGQgLSBvbGRfcGF0aCk7CisJKm5ld19kaXIgPSB4c3RybmR1cChuZXdfcGF0aCwgZW5kX29mX25ldyAtIG5ld19wYXRoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX2hhc2htYXBfZW50cmllcyhzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCmRpZmYgLS1naXQgYS9taWR4LmMgYi9taWR4LmMKaW5kZXggZjI5YWZjMC4uMzdlYzI4NiAxMDA2NDQKLS0tIGEvbWlkeC5jCisrKyBiL21pZHguYwpAQCAtNDQ4LDYgKzQ0OCw4IEBACiAJdWludDMyX3QgbnI7CiAJdWludDMyX3QgYWxsb2M7CiAJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwl1bnNpZ25lZCBwYWNrX3BhdGhzX2NoZWNrZWQ7CiB9OwogCiBzdGF0aWMgdm9pZCBhZGRfcGFja190b19taWR4KGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc2l6ZV90IGZ1bGxfcGF0aF9sZW4sCkBAIC00NTYsNiArNDU4LDcgQEAKIAlzdHJ1Y3QgcGFja19saXN0ICpwYWNrcyA9IChzdHJ1Y3QgcGFja19saXN0ICopZGF0YTsKIAogCWlmIChlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLmlkeCIpKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocGFja3MtPnByb2dyZXNzLCArK3BhY2tzLT5wYWNrX3BhdGhzX2NoZWNrZWQpOwogCQlpZiAocGFja3MtPm0gJiYgbWlkeF9jb250YWluc19wYWNrKHBhY2tzLT5tLCBmaWxlX25hbWUpKQogCQkJcmV0dXJuOwogCkBAIC03ODUsNyArNzg4LDcgQEAKIH0KIAogc3RhdGljIGludCB3cml0ZV9taWR4X2ludGVybmFsKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAotCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja3NfdG9fZHJvcCkKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tzX3RvX2Ryb3AsIHVuc2lnbmVkIGZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgY3VyX2NodW5rLCBudW1fY2h1bmtzID0gMDsKIAljaGFyICptaWR4X25hbWU7CkBAIC03OTksNiArODAyLDcgQEAKIAl1aW50NjRfdCBjaHVua19vZmZzZXRzW01JRFhfTUFYX0NIVU5LUyArIDFdOwogCXVpbnQzMl90IG5yX2VudHJpZXMsIG51bV9sYXJnZV9vZmZzZXRzID0gMDsKIAlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyaWVzID0gTlVMTDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAlpbnQgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAwOwogCWludCBwYWNrX25hbWVfY29uY2F0X2xlbiA9IDA7CiAJaW50IGRyb3BwZWRfcGFja3MgPSAwOwpAQCAtODMzLDcgKzgzNywxNCBAQAogCQl9CiAJfQogCisJcGFja3MucGFja19wYXRoc19jaGVja2VkID0gMDsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwYWNrcy5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIpLCAwKTsKKwllbHNlCisJCXBhY2tzLnByb2dyZXNzID0gTlVMTDsKKwogCWZvcl9lYWNoX2ZpbGVfaW5fcGFja19kaXIob2JqZWN0X2RpciwgYWRkX3BhY2tfdG9fbWlkeCwgJnBhY2tzKTsKKwlzdG9wX3Byb2dyZXNzKCZwYWNrcy5wcm9ncmVzcyk7CiAKIAlpZiAocGFja3MubSAmJiBwYWNrcy5uciA9PSBwYWNrcy5tLT5udW1fcGFja3MgJiYgIXBhY2tzX3RvX2Ryb3ApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTk1OCw2ICs5NjksOSBAQAogCQl3cml0dGVuICs9IE1JRFhfQ0hVTktMT09LVVBfV0lEVEg7CiAJfQogCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IiksCisJCQkJCSAgbnVtX2NodW5rcyk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgewogCQlpZiAod3JpdHRlbiAhPSBjaHVua19vZmZzZXRzW2ldKQogCQkJQlVHKCJpbmNvcnJlY3QgY2h1bmsgb2Zmc2V0ICglIlBSSXU2NCIgIT0gJSJQUkl1NjQiKSBmb3IgY2h1bmsgaWQgJSJQUkl4MzIsCkBAIC05OTAsNyArMTAwNCwxMCBAQAogCQkJCUJVRygidHJ5aW5nIHRvIHdyaXRlIHVua25vd24gY2h1bmsgaWQgJSJQUkl4MzIsCiAJCQkJICAgIGNodW5rX2lkc1tpXSk7CiAJCX0KKworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CiAJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAogCWlmICh3cml0dGVuICE9IGNodW5rX29mZnNldHNbbnVtX2NodW5rc10pCiAJCUJVRygiaW5jb3JyZWN0IGZpbmFsIG9mZnNldCAlIlBSSXU2NCIgIT0gJSJQUkl1NjQsCkBAIC0xMDE2LDkgKzEwMzMsOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLWludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK2ludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0JcmV0dXJuIHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgTlVMTCwgTlVMTCwgZmxhZ3MpOwogfQogCiB2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKQEAgLTEwNzYsMTkgKzEwOTMsMjAgQEAKIAkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIF9uKTsgXAogCX0gd2hpbGUgKDApCiAKLWludCB2ZXJpZnlfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyKQoraW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBwYWlyX3Bvc192c19pZCAqcGFpcnMgPSBOVUxMOwogCXVpbnQzMl90IGk7Ci0Jc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKIAl2ZXJpZnlfbWlkeF9lcnJvciA9IDA7CiAKIAlpZiAoIW0pCiAJCXJldHVybiAwOwogCi0JcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIpLAotCQkJCSAgbS0+bnVtX3BhY2tzKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIiksCisJCQkJCSAgbS0+bnVtX3BhY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKIAkJaWYgKHByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIGkpKQogCQkJbWlkeF9yZXBvcnQoImZhaWxlZCB0byBsb2FkIHBhY2sgaW4gcG9zaXRpb24gJWQiLCBpKTsKQEAgLTExMDYsOCArMTEyNCw5IEBACiAJCQkJICAgIGksIG9pZF9mYW5vdXQxLCBvaWRfZmFub3V0MiwgaSArIDEpOwogCX0KIAotCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gTUlEWCIpLAotCQkJCQkgbS0+bnVtX29iamVjdHMgLSAxKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiKSwKKwkJCQkJCSBtLT5udW1fb2JqZWN0cyAtIDEpOwogCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0cyAtIDE7IGkrKykgewogCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDEsIG9pZDI7CiAKQEAgLTExMzQsMTMgKzExNTMsMTUgQEAKIAkJcGFpcnNbaV0ucGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOwogCX0KIAotCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIpLAotCQkJCQkgbS0+bnVtX29iamVjdHMpOworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIpLAorCQkJCQkJIG0tPm51bV9vYmplY3RzKTsKIAlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCAwKTsgLyogVE9ETzogTWVhc3VyZSBRU09SVCgpIHByb2dyZXNzICovCiAJUVNPUlQocGFpcnMsIG0tPm51bV9vYmplY3RzLCBjb21wYXJlX3BhaXJfcG9zX3ZzX2lkKTsKIAlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CiAKLQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiKSwgbS0+bnVtX29iamVjdHMpOworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIpLCBtLT5udW1fb2JqZWN0cyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJCXN0cnVjdCBwYWNrX2VudHJ5IGU7CkBAIC0xMTgzLDIzICsxMjA0LDM0IEBACiAJcmV0dXJuIHZlcmlmeV9taWR4X2Vycm9yOwogfQogCi1pbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpCitpbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQogewogCXVpbnQzMl90IGksICpjb3VudCwgcmVzdWx0ID0gMDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFja3NfdG9fZHJvcCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwogCiAJaWYgKCFtKQogCQlyZXR1cm4gMDsKIAogCWNvdW50ID0geGNhbGxvYyhtLT5udW1fcGFja3MsIHNpemVvZih1aW50MzJfdCkpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiKSwKKwkJCQkJICBtLT5udW1fb2JqZWN0cyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKIAkJaW50IHBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBpKTsKIAkJY291bnRbcGFja19pbnRfaWRdKys7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKIAl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOwogCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIiksCisJCQkJCSAgbS0+bnVtX3BhY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKIAkJY2hhciAqcGFja19uYW1lOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CiAKIAkJaWYgKGNvdW50W2ldKQogCQkJY29udGludWU7CkBAIC0xMjE3LDExICsxMjQ5LDEyIEBACiAJCXVubGlua19wYWNrX3BhdGgocGFja19uYW1lLCAwKTsKIAkJZnJlZShwYWNrX25hbWUpOwogCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CiAKIAlmcmVlKGNvdW50KTsKIAogCWlmIChwYWNrc190b19kcm9wLm5yKQotCQlyZXN1bHQgPSB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIG0sICZwYWNrc190b19kcm9wKTsKKwkJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCAmcGFja3NfdG9fZHJvcCwgZmxhZ3MpOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIoJnBhY2tzX3RvX2Ryb3AsIDApOwogCXJldHVybiByZXN1bHQ7CkBAIC0xMzE1LDcgKzEzNDgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplKQoraW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJdWludDMyX3QgaTsKQEAgLTEzNDAsNiArMTM3MywxMiBAQAogCXN0cmJ1Zl9hZGRzdHIoJmJhc2VfbmFtZSwgb2JqZWN0X2Rpcik7CiAJc3RyYnVmX2FkZHN0cigmYmFzZV9uYW1lLCAiL3BhY2svcGFjayIpOwogCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGJhc2VfbmFtZS5idWYpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItcSIpOworCiAJc3RyYnVmX3JlbGVhc2UoJmJhc2VfbmFtZSk7CiAKIAljbWQuZ2l0X2NtZCA9IDE7CkBAIC0xMzcwLDcgKzE0MDksNyBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCBOVUxMKTsKKwlyZXN1bHQgPSB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIG0sIE5VTEwsIGZsYWdzKTsKIAltID0gTlVMTDsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL21pZHguaCBiL21pZHguaAppbmRleCBmMGFlNjU2Li5lNmZhMzU2IDEwMDY0NAotLS0gYS9taWR4LmgKKysrIGIvbWlkeC5oCkBAIC0zNyw2ICszNyw4IEBACiAJY2hhciBvYmplY3RfZGlyW0ZMRVhfQVJSQVldOwogfTsKIAorI2RlZmluZSBNSURYX1BST0dSRVNTICAgICAoMSA8PCAwKQorCiBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbG9hZF9tdWx0aV9wYWNrX2luZGV4KGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIGludCBsb2NhbCk7CiBpbnQgcHJlcGFyZV9taWR4X3BhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCBwYWNrX2ludF9pZCk7CiBpbnQgYnNlYXJjaF9taWR4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90ICpyZXN1bHQpOwpAQCAtNDcsMTEgKzQ5LDExIEBACiBpbnQgbWlkeF9jb250YWluc19wYWNrKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCBjb25zdCBjaGFyICppZHhfb3JfcGFja19uYW1lKTsKIGludCBwcmVwYXJlX211bHRpX3BhY2tfaW5kZXhfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBpbnQgbG9jYWwpOwogCi1pbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOworaW50IHdyaXRlX21pZHhfZmlsZShjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CiB2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Ci1pbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpcik7Ci1pbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOwotaW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSk7CitpbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpOworaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CitpbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplLCB1bnNpZ25lZCBmbGFncyk7CiAKIHZvaWQgY2xvc2VfbWlkeChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSk7CiAKZGlmZiAtLWdpdCBhL25hbWUtaGFzaC5jIGIvbmFtZS1oYXNoLmMKaW5kZXggY2ViMWQ3Yi4uZmI1MjZhMyAxMDA2NDQKLS0tIGEvbmFtZS1oYXNoLmMKKysrIGIvbmFtZS1oYXNoLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAvKgogICogU2V0IGEgbWluaW11bSBudW1iZXIgb2YgY2FjaGVfZW50cmllcyB0aGF0IHdlIHdpbGwgaGFuZGxlIHBlcgotICogdGhyZWFkIGFuZCB1c2UgdGhhdCB0byBkZWNpZGUgaG93IG1hbnkgdGhyZWFkcyB0byBydW4gKHVwdG8KKyAqIHRocmVhZCBhbmQgdXNlIHRoYXQgdG8gZGVjaWRlIGhvdyBtYW55IHRocmVhZHMgdG8gcnVuICh1cCB0bwogICogdGhlIG51bWJlciBvbiB0aGUgc3lzdGVtKS4KICAqCiAgKiBGb3IgZ3VpZGFuY2Ugc2V0dGluZyB0aGUgbG93ZXIgcGVyLXRocmVhZCBib3VuZCwgc2VlOgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgKiBIb3dldmVyLCB0aGUgaGFzaG1hcCBpcyBnb2luZyB0byBwdXQgaXRlbXMgaW50byBidWNrZXQKICAqIGNoYWlucyBiYXNlZCBvbiB0aGVpciBoYXNoIHZhbHVlcy4gIFVzZSB0aGF0IHRvIGNyZWF0ZSBuCiAgKiBtdXRleGVzIGFuZCBsb2NrIG9uIG11dGV4W2J1Y2tldChoYXNoKSAlIG5dLiAgVGhpcyB3aWxsCi0gKiBkZWNyZWFzZSB0aGUgY29sbGlzaW9uIHJhdGUgYnkgKGhvcGVmdWxseSkgYnkgYSBmYWN0b3Igb2Ygbi4KKyAqIGRlY3JlYXNlIHRoZSBjb2xsaXNpb24gcmF0ZSBieSAoaG9wZWZ1bGx5KSBhIGZhY3RvciBvZiBuLgogICovCiBzdGF0aWMgdm9pZCBpbml0X2Rpcl9tdXRleCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvbm90ZXMuYyBiL25vdGVzLmMKaW5kZXggMDNlN2QwYy4uMGM3OTk2NCAxMDA2NDQKLS0tIGEvbm90ZXMuYworKysgYi9ub3Rlcy5jCkBAIC0xMDQzLDYgKzEwNDMsMzkgQEAKIAogdm9pZCBpbml0X2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQpCiB7CisJbWVtc2V0KG9wdCwgMCwgc2l6ZW9mKCpvcHQpKTsKKwlvcHQtPnVzZV9kZWZhdWx0X25vdGVzID0gLTE7Cit9CisKK3ZvaWQgZW5hYmxlX2RlZmF1bHRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCwgaW50ICpzaG93X25vdGVzKQoreworCW9wdC0+dXNlX2RlZmF1bHRfbm90ZXMgPSAxOworCSpzaG93X25vdGVzID0gMTsKK30KKwordm9pZCBlbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQsIGludCAqc2hvd19ub3RlcywKKwkJY29uc3QgY2hhciAqcmVmKSB7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJlZik7CisJZXhwYW5kX25vdGVzX3JlZigmYnVmKTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJm9wdC0+ZXh0cmFfbm90ZXNfcmVmcywKKwkJCXN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCSpzaG93X25vdGVzID0gMTsKK30KKwordm9pZCBkaXNhYmxlX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQsIGludCAqc2hvd19ub3RlcykKK3sKKwlvcHQtPnVzZV9kZWZhdWx0X25vdGVzID0gLTE7CisJLyogd2UgaGF2ZSBiZWVuIHN0cmR1cCdpbmcgb3Vyc2VsdmVzLCBzbyB0cmljaworCSAqIHN0cmluZ19saXN0IGludG8gZnJlZSgpaW5nIHN0cmluZ3MgKi8KKwlvcHQtPmV4dHJhX25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyKCZvcHQtPmV4dHJhX25vdGVzX3JlZnMsIDApOworCW9wdC0+ZXh0cmFfbm90ZXNfcmVmcy5zdHJkdXBfc3RyaW5ncyA9IDA7CisJKnNob3dfbm90ZXMgPSAwOworfQorCit2b2lkIGxvYWRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCkKK3sKIAljaGFyICpkaXNwbGF5X3JlZl9lbnY7CiAJaW50IGxvYWRfY29uZmlnX3JlZnMgPSAwOwogCWRpc3BsYXlfbm90ZXNfcmVmcy5zdHJkdXBfc3RyaW5ncyA9IDE7CmRpZmYgLS1naXQgYS9ub3Rlcy5oIGIvbm90ZXMuaAppbmRleCA3NjMzN2YyLi5jMTY4MmMzIDEwMDY0NAotLS0gYS9ub3Rlcy5oCisrKyBiL25vdGVzLmgKQEAgLTI2MSw2ICsyNjEsMjYgQEAKIH07CiAKIC8qCisgKiBJbml0aWFsaXplIGEgZGlzcGxheV9ub3Rlc19vcHQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgKi8KK3ZvaWQgaW5pdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KTsKKworLyoKKyAqIFRoaXMgZmFtaWx5IG9mIGZ1bmN0aW9ucyBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBkaXNwbGF5IG9mIG5vdGVzLiBJbgorICogcGFydGljdWxhciwgJ2VuYWJsZV9kZWZhdWx0X2Rpc3BsYXlfbm90ZXMnIHdpbGwgZGlzcGxheSB0aGUgZGVmYXVsdCBub3RlcywKKyAqICdlbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMnIHdpbGwgZGlzcGxheSB0aGUgbm90ZXMgcmVmICdyZWYnIGFuZAorICogJ2Rpc2FibGVfZGlzcGxheV9ub3Rlcycgd2lsbCBkaXNhYmxlIG5vdGVzLCBpbmNsdWRpbmcgdGhvc2UgYWRkZWQgYnkgcHJldmlvdXMKKyAqIGludm9jYXRpb25zIG9mIHRoZSAnZW5hYmxlXypfZGlzcGxheV9ub3RlcycgZnVuY3Rpb25zLgorICoKKyAqICdzaG93X25vdGVzJyBpcyBhIHBvaW50ZXIgdG8gYSBib29sZWFuIHdoaWNoIHdpbGwgYmUgc2V0IHRvIDEgaWYgbm90ZXMgYXJlCisgKiBkaXNwbGF5ZWQsIGVsc2UgMC4gSXQgbXVzdCBub3QgYmUgTlVMTC4KKyAqLwordm9pZCBlbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpOwordm9pZCBlbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQsIGludCAqc2hvd19ub3RlcywKKwkJY29uc3QgY2hhciAqcmVmKTsKK3ZvaWQgZGlzYWJsZV9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpOworCisvKgogICogTG9hZCB0aGUgbm90ZXMgbWFjaGluZXJ5IGZvciBkaXNwbGF5aW5nIHNldmVyYWwgbm90ZXMgdHJlZXMuCiAgKgogICogSWYgJ29wdCcgaXMgbm90IE5VTEwsIHRoZW4gaXQgc3BlY2lmaWVzIGFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZQpAQCAtMjcyLDE2ICsyOTIsMTYgQEAKICAqIC0gZXh0cmFfbm90ZXNfcmVmcyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgZ2xvYnMgKGluIHRoZSBzYW1lIHN0eWxlCiAgKiAgIGFzIG5vdGVzLmRpc3BsYXlSZWYpIHdoZXJlIG5vdGVzIHNob3VsZCBiZSBsb2FkZWQgZnJvbS4KICAqLwotdm9pZCBpbml0X2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQpOwordm9pZCBsb2FkX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQpOwogCiAvKgogICogQXBwZW5kIG5vdGVzIGZvciB0aGUgZ2l2ZW4gJ29iamVjdF9zaGExJyBmcm9tIGFsbCB0cmVlcyBzZXQgdXAgYnkKLSAqIGluaXRfZGlzcGxheV9ub3RlcygpIHRvICdzYicuCisgKiBsb2FkX2Rpc3BsYXlfbm90ZXMoKSB0byAnc2InLgogICoKICAqIElmICdyYXcnIGlzIGZhbHNlIHRoZSBub3RlIHdpbGwgYmUgaW5kZW50ZWQgYnkgNCBwbGFjZXMgYW5kCiAgKiBhICdOb3RlcyAocmVmbmFtZSk6JyBoZWFkZXIgYWRkZWQuCiAgKgotICogWW91ICptdXN0KiBjYWxsIGluaXRfZGlzcGxheV9ub3RlcygpIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICogWW91ICptdXN0KiBjYWxsIGxvYWRfZGlzcGxheV9ub3RlcygpIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgogICovCiB2b2lkIGZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCiAJCQkgIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCByYXcpOwpkaWZmIC0tZ2l0IGEvb2JqZWN0LXN0b3JlLmggYi9vYmplY3Qtc3RvcmUuaAppbmRleCA3ZjdiM2NkLi41NWVlNjM5IDEwMDY0NAotLS0gYS9vYmplY3Qtc3RvcmUuaAorKysgYi9vYmplY3Qtc3RvcmUuaApAQCAtNjAsNiArNjAsNyBAQAogdm9pZCBvZGJfY2xlYXJfbG9vc2VfY2FjaGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CiAKIHN0cnVjdCBwYWNrZWRfZ2l0IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBwYWNrbWFwX2VudDsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV4dDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1ydTsKIAlzdHJ1Y3QgcGFja193aW5kb3cgKndpbmRvd3M7CkBAIC04OCw2ICs4OSwyMCBAQAogCiBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleDsKIAorc3RhdGljIGlubGluZSBpbnQgcGFja19tYXBfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeTIsCisJCQkJICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IGNoYXIgKmtleSA9IGtleWRhdGE7CisJY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnBnMSwgKnBnMjsKKworCXBnMSA9IGNvbnRhaW5lcl9vZihlbnRyeSwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQsIHBhY2ttYXBfZW50KTsKKwlwZzIgPSBjb250YWluZXJfb2YoZW50cnkyLCBjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCwgcGFja21hcF9lbnQpOworCisJcmV0dXJuIHN0cmNtcChwZzEtPnBhY2tfbmFtZSwga2V5ID8ga2V5IDogcGcyLT5wYWNrX25hbWUpOworfQorCiBzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSB7CiAJLyoKIAkgKiBTZXQgb2YgYWxsIG9iamVjdCBkaXJlY3RvcmllczsgdGhlIG1haW4gZGlyZWN0b3J5IGlzIGZpcnN0IChhbmQKQEAgLTEzMiw2ICsxNDcsMTIgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhY2tlZF9naXRfbXJ1OwogCiAJLyoKKwkgKiBBIG1hcCBvZiBwYWNrZmlsZXMgdG8gcGFja2VkX2dpdCBzdHJ1Y3RzIGZvciB0cmFja2luZyB3aGljaAorCSAqIHBhY2tzIGhhdmUgYmVlbiBsb2FkZWQgYWxyZWFkeS4KKwkgKi8KKwlzdHJ1Y3QgaGFzaG1hcCBwYWNrX21hcDsKKworCS8qCiAJICogQSBmYXN0LCByb3VnaCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkuCiAJICogVGhlc2UgdHdvIGZpZWxkcyBhcmUgbm90IG1lYW50IGZvciBkaXJlY3QgYWNjZXNzLiBVc2UKIAkgKiBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKSBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmplY3QuYwppbmRleCAzYjhiOGM1Li4xNDJlZjY5IDEwMDY0NAotLS0gYS9vYmplY3QuYworKysgYi9vYmplY3QuYwpAQCAtNDc5LDYgKzQ3OSw3IEBACiAKIAltZW1zZXQobywgMCwgc2l6ZW9mKCpvKSk7CiAJSU5JVF9MSVNUX0hFQUQoJm8tPnBhY2tlZF9naXRfbXJ1KTsKKwloYXNobWFwX2luaXQoJm8tPnBhY2tfbWFwLCBwYWNrX21hcF9lbnRyeV9jbXAsIE5VTEwsIDApOwogCXJldHVybiBvOwogfQogCkBAIC01MTgsNiArNTE5LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmby0+cGFja2VkX2dpdF9tcnUpOwogCWNsb3NlX29iamVjdF9zdG9yZShvKTsKIAlvLT5wYWNrZWRfZ2l0ID0gTlVMTDsKKworCWhhc2htYXBfZnJlZSgmby0+cGFja19tYXApOwogfQogCiB2b2lkIHBhcnNlZF9vYmplY3RfcG9vbF9jbGVhcihzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpvKQpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmMgYi9wYWNrLW9iamVjdHMuYwppbmRleCBjNjI1MGQ3Li41ZTVhM2M2IDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuYworKysgYi9wYWNrLW9iamVjdHMuYwpAQCAtMTE5LDcgKzExOSwxMCBAQAogewogCXVpbnQzMl90IGk7CiAKLQlSRUFMTE9DX0FSUkFZKHBhY2stPmluX3BhY2ssIHBhY2stPm5yX2FsbG9jKTsKKwlpZiAocGFjay0+aW5fcGFjaykKKwkJQlVHKCJwYWNraW5nX2RhdGEgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gcGFjayBhcnJheSIpOworCisJQUxMT0NfQVJSQVkocGFjay0+aW5fcGFjaywgcGFjay0+bnJfYWxsb2MpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhY2stPm5yX29iamVjdHM7IGkrKykKIAkJcGFjay0+aW5fcGFja1tpXSA9IG9lX2luX3BhY2socGFjaywgcGFjay0+b2JqZWN0cyArIGkpOwpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmggYi9wYWNrLW9iamVjdHMuaAppbmRleCA2ZmU2YWU1Li5kMzk3NWUwIDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuaAorKysgYi9wYWNrLW9iamVjdHMuaApAQCAtMjUxLDEyICsyNTEsMjEgQEAKIAkJCQkgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCiAJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKIHsKLQlpZiAoIXAtPmluZGV4KQorCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkgeworCQlpZiAocC0+aW5kZXgpIHsKKwkJCWUtPmluX3BhY2tfaWR4ID0gcC0+aW5kZXg7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogV2UncmUgYWNjZXNzaW5nIHBhY2tzIGJ5IGluZGV4LCBidXQgdGhpcyBwYWNrIGRvZXNuJ3QgaGF2ZQorCQkgKiBhbiBpbmRleCAoZS5nLiwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgc2luY2Ugd2UgY3JlYXRlZCB0aGUKKwkJICogaW5fcGFja19ieV9pZHggYXJyYXkpLiBCYWlsIHRvIG9lX21hcF9uZXdfcGFjaygpLCB3aGljaAorCQkgKiB3aWxsIGNvbnZlcnQgdXMgdG8gdXNpbmcgdGhlIGZ1bGwgaW5fcGFjayBhcnJheSwgYW5kIHRoZW4KKwkJICogZmFsbCB0aHJvdWdoIHRvIG91ciBpbl9wYWNrIGhhbmRsaW5nLgorCQkgKi8KIAkJb2VfbWFwX25ld19wYWNrKHBhY2spOwotCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkKLQkJZS0+aW5fcGFja19pZHggPSBwLT5pbmRleDsKLQllbHNlCi0JCXBhY2stPmluX3BhY2tbZSAtIHBhY2stPm9iamVjdHNdID0gcDsKKwl9CisJcGFjay0+aW5fcGFja1tlIC0gcGFjay0+b2JqZWN0c10gPSBwOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmplY3RfZW50cnkgKm9lX2RlbHRhKApkaWZmIC0tZ2l0IGEvcGFja2ZpbGUuYyBiL3BhY2tmaWxlLmMKaW5kZXggMzU1MDY2ZC4uZjBkYzYzZSAxMDA2NDQKLS0tIGEvcGFja2ZpbGUuYworKysgYi9wYWNrZmlsZS5jCkBAIC03NTcsNiArNzU3LDkgQEAKIAogCXBhY2stPm5leHQgPSByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OwogCXItPm9iamVjdHMtPnBhY2tlZF9naXQgPSBwYWNrOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZwYWNrLT5wYWNrbWFwX2VudCwgc3RyaGFzaChwYWNrLT5wYWNrX25hbWUpKTsKKwloYXNobWFwX2FkZCgmci0+b2JqZWN0cy0+cGFja19tYXAsICZwYWNrLT5wYWNrbWFwX2VudCk7CiB9CiAKIHZvaWQgKCpyZXBvcnRfZ2FyYmFnZSkodW5zaWduZWQgc2Vlbl9iaXRzLCBjb25zdCBjaGFyICpwYXRoKTsKQEAgLTg1NiwyMCArODU5LDE4IEBACiAKIAlpZiAoc3RyaXBfc3VmZml4X21lbShmdWxsX25hbWUsICZiYXNlX2xlbiwgIi5pZHgiKSAmJgogCSAgICAhKGRhdGEtPm0gJiYgbWlkeF9jb250YWluc19wYWNrKGRhdGEtPm0sIGZpbGVfbmFtZSkpKSB7Ci0JCS8qIERvbid0IHJlb3BlbiBhIHBhY2sgd2UgYWxyZWFkeSBoYXZlLiAqLwotCQlmb3IgKHAgPSBkYXRhLT5yLT5vYmplY3RzLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgewotCQkJc2l6ZV90IGxlbjsKLQkJCWlmIChzdHJpcF9zdWZmaXgocC0+cGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSAmJgotCQkJICAgIGxlbiA9PSBiYXNlX2xlbiAmJgotCQkJICAgICFtZW1jbXAocC0+cGFja19uYW1lLCBmdWxsX25hbWUsIGxlbikpCi0JCQkJYnJlYWs7Ci0JCX0KKwkJc3RydWN0IGhhc2htYXBfZW50cnkgaGVudDsKKwkJY2hhciAqcGFja19uYW1lID0geHN0cmZtdCgiJS4qcy5wYWNrIiwgKGludCliYXNlX2xlbiwgZnVsbF9uYW1lKTsKKwkJdW5zaWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKHBhY2tfbmFtZSk7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmaGVudCwgaGFzaCk7CiAKLQkJaWYgKCFwKSB7CisJCS8qIERvbid0IHJlb3BlbiBhIHBhY2sgd2UgYWxyZWFkeSBoYXZlLiAqLworCQlpZiAoIWhhc2htYXBfZ2V0KCZkYXRhLT5yLT5vYmplY3RzLT5wYWNrX21hcCwgJmhlbnQsIHBhY2tfbmFtZSkpIHsKIAkJCXAgPSBhZGRfcGFja2VkX2dpdChmdWxsX25hbWUsIGZ1bGxfbmFtZV9sZW4sIGRhdGEtPmxvY2FsKTsKIAkJCWlmIChwKQogCQkJCWluc3RhbGxfcGFja2VkX2dpdChkYXRhLT5yLCBwKTsKIAkJfQorCQlmcmVlKHBhY2tfbmFtZSk7CiAJfQogCiAJaWYgKCFyZXBvcnRfZ2FyYmFnZSkKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMtY2IuYyBiL3BhcnNlLW9wdGlvbnMtY2IuYwppbmRleCAxMjQwYTg1Li5jMjA2MmFlIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLWNiLmMKKysrIGIvcGFyc2Utb3B0aW9ucy1jYi5jCkBAIC0xNjEsNiArMTYxLDcgQEAKIAogc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19kdXAoY29uc3Qgc3RydWN0IG9wdGlvbiAqbykKIHsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcmlnID0gbzsKIAlzdHJ1Y3Qgb3B0aW9uICpvcHRzOwogCWludCBuciA9IDA7CiAKQEAgLTE3MCw3ICsxNzEsNyBAQAogCX0KIAogCUFMTE9DX0FSUkFZKG9wdHMsIG5yICsgMSk7Ci0JbWVtY3B5KG9wdHMsIG8gLSBuciwgc2l6ZW9mKCpvKSAqIG5yKTsKKwlDT1BZX0FSUkFZKG9wdHMsIG9yaWcsIG5yKTsKIAltZW1zZXQob3B0cyArIG5yLCAwLCBzaXplb2YoKm9wdHMpKTsKIAlvcHRzW25yXS50eXBlID0gT1BUSU9OX0VORDsKIAlyZXR1cm4gb3B0czsKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuYyBiL3BhcnNlLW9wdGlvbnMuYwppbmRleCBiNDJmNTRkLi42MGZhZTNhIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmMKKysrIGIvcGFyc2Utb3B0aW9ucy5jCkBAIC02MjMsNyArNjIzLDcgQEAKICAqIFNjYW4gYW5kIG1heSBwcm9kdWNlIGEgbmV3IG9wdGlvbltdIGFycmF5LCB3aGljaCBzaG91bGQgYmUgdXNlZAogICogaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgJ29wdGlvbnMnLgogICoKLSAqIFJpZ2h0IG5vdyB0aGlzIGlzIG9ubHkgdXNlZCB0byBwcmVwcm9jZXNzIGFuZCBzdWJzdGl0dWUKKyAqIFJpZ2h0IG5vdyB0aGlzIGlzIG9ubHkgdXNlZCB0byBwcmVwcm9jZXNzIGFuZCBzdWJzdGl0dXRlCiAgKiBPUFRJT05fQUxJQVMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uICpwcmVwcm9jZXNzX29wdGlvbnMoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LApkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCmluZGV4IDM4YTMzYTAuLmZkYzBjMWMgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuaAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTEsNiArMSwxMCBAQAogI2lmbmRlZiBQQVJTRV9PUFRJT05TX0gKICNkZWZpbmUgUEFSU0VfT1BUSU9OU19ICiAKKy8qKgorICogUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGZvciB0aGUgQVBJIGRvYy4KKyAqLworCiBlbnVtIHBhcnNlX29wdF90eXBlIHsKIAkvKiBzcGVjaWFsIHR5cGVzICovCiAJT1BUSU9OX0VORCwKQEAgLTMzMCw1ICszMzQsNyBAQAogI2RlZmluZSBPUFRfV0lUSCh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoIndpdGgiLCB2LCBoLCBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PTkVHKQogI2RlZmluZSBPUFRfV0lUSE9VVCh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoIndpdGhvdXQiLCB2LCBoLCBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PTkVHKQogI2RlZmluZSBPUFRfQ0xFQU5VUCh2KSBPUFRfU1RSSU5HKDAsICJjbGVhbnVwIiwgdiwgTl8oIm1vZGUiKSwgTl8oImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiKSkKKyNkZWZpbmUgT1BUX1BBVEhTUEVDX0ZST01fRklMRSh2KSBPUFRfRklMRU5BTUUoMCwgInBhdGhzcGVjLWZyb20tZmlsZSIsIHYsIE5fKCJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIpKQorI2RlZmluZSBPUFRfUEFUSFNQRUNfRklMRV9OVUwodikgIE9QVF9CT09MKDAsICJwYXRoc3BlYy1maWxlLW51bCIsIHYsIE5fKCJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3BhdGguYyBiL3BhdGguYwppbmRleCBlNDJiYmE2Li5hNzZlZWM4IDEwMDY0NAotLS0gYS9wYXRoLmMKKysrIGIvcGF0aC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSAicGF0aC5oIgogI2luY2x1ZGUgInBhY2tmaWxlLmgiCiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKIAogc3RhdGljIGludCBnZXRfc3RfbW9kZV9iaXRzKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqbW9kZSkKIHsKQEAgLTEwMSwzNiArMTAyLDM2IEBACiAJLyogTm90IGNvbnNpZGVyZWQgZ2FyYmFnZSBmb3IgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlICovCiAJdW5zaWduZWQgaWdub3JlX2dhcmJhZ2U6MTsKIAl1bnNpZ25lZCBpc19kaXI6MTsKLQkvKiBOb3QgY29tbW9uIGV2ZW4gdGhvdWdoIGl0cyBwYXJlbnQgaXMgKi8KLQl1bnNpZ25lZCBleGNsdWRlOjE7Ci0JY29uc3QgY2hhciAqZGlybmFtZTsKKwkvKiBCZWxvbmdzIHRvIHRoZSBjb21tb24gZGlyLCB0aG91Z2ggaXQgbWF5IGNvbnRhaW4gcGF0aHMgdGhhdCBkb24ndCAqLworCXVuc2lnbmVkIGlzX2NvbW1vbjoxOworCWNvbnN0IGNoYXIgKnBhdGg7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbW1vbl9kaXIgY29tbW9uX2xpc3RbXSA9IHsKLQl7IDAsIDEsIDAsICJicmFuY2hlcyIgfSwKLQl7IDAsIDEsIDAsICJjb21tb24iIH0sCi0JeyAwLCAxLCAwLCAiaG9va3MiIH0sCi0JeyAwLCAxLCAwLCAiaW5mbyIgfSwKLQl7IDAsIDAsIDEsICJpbmZvL3NwYXJzZS1jaGVja291dCIgfSwKLQl7IDEsIDEsIDAsICJsb2dzIiB9LAotCXsgMSwgMSwgMSwgImxvZ3MvSEVBRCIgfSwKLQl7IDAsIDEsIDEsICJsb2dzL3JlZnMvYmlzZWN0IiB9LAotCXsgMCwgMSwgMSwgImxvZ3MvcmVmcy9yZXdyaXR0ZW4iIH0sCi0JeyAwLCAxLCAxLCAibG9ncy9yZWZzL3dvcmt0cmVlIiB9LAotCXsgMCwgMSwgMCwgImxvc3QtZm91bmQiIH0sCi0JeyAwLCAxLCAwLCAib2JqZWN0cyIgfSwKLQl7IDAsIDEsIDAsICJyZWZzIiB9LAotCXsgMCwgMSwgMSwgInJlZnMvYmlzZWN0IiB9LAotCXsgMCwgMSwgMSwgInJlZnMvcmV3cml0dGVuIiB9LAotCXsgMCwgMSwgMSwgInJlZnMvd29ya3RyZWUiIH0sCi0JeyAwLCAxLCAwLCAicmVtb3RlcyIgfSwKLQl7IDAsIDEsIDAsICJ3b3JrdHJlZXMiIH0sCi0JeyAwLCAxLCAwLCAicnItY2FjaGUiIH0sCi0JeyAwLCAxLCAwLCAic3ZuIiB9LAotCXsgMCwgMCwgMCwgImNvbmZpZyIgfSwKLQl7IDEsIDAsIDAsICJnYy5waWQiIH0sCi0JeyAwLCAwLCAwLCAicGFja2VkLXJlZnMiIH0sCi0JeyAwLCAwLCAwLCAic2hhbGxvdyIgfSwKKwl7IDAsIDEsIDEsICJicmFuY2hlcyIgfSwKKwl7IDAsIDEsIDEsICJjb21tb24iIH0sCisJeyAwLCAxLCAxLCAiaG9va3MiIH0sCisJeyAwLCAxLCAxLCAiaW5mbyIgfSwKKwl7IDAsIDAsIDAsICJpbmZvL3NwYXJzZS1jaGVja291dCIgfSwKKwl7IDEsIDEsIDEsICJsb2dzIiB9LAorCXsgMSwgMCwgMCwgImxvZ3MvSEVBRCIgfSwKKwl7IDAsIDEsIDAsICJsb2dzL3JlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgImxvZ3MvcmVmcy9yZXdyaXR0ZW4iIH0sCisJeyAwLCAxLCAwLCAibG9ncy9yZWZzL3dvcmt0cmVlIiB9LAorCXsgMCwgMSwgMSwgImxvc3QtZm91bmQiIH0sCisJeyAwLCAxLCAxLCAib2JqZWN0cyIgfSwKKwl7IDAsIDEsIDEsICJyZWZzIiB9LAorCXsgMCwgMSwgMCwgInJlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgInJlZnMvcmV3cml0dGVuIiB9LAorCXsgMCwgMSwgMCwgInJlZnMvd29ya3RyZWUiIH0sCisJeyAwLCAxLCAxLCAicmVtb3RlcyIgfSwKKwl7IDAsIDEsIDEsICJ3b3JrdHJlZXMiIH0sCisJeyAwLCAxLCAxLCAicnItY2FjaGUiIH0sCisJeyAwLCAxLCAxLCAic3ZuIiB9LAorCXsgMCwgMCwgMSwgImNvbmZpZyIgfSwKKwl7IDEsIDAsIDEsICJnYy5waWQiIH0sCisJeyAwLCAwLCAxLCAicGFja2VkLXJlZnMiIH0sCisJeyAwLCAwLCAxLCAic2hhbGxvdyIgfSwKIAl7IDAsIDAsIDAsIE5VTEwgfQogfTsKIApAQCAtMjM2LDMwICsyMzcsNDEgQEAKIAlyZXR1cm4gb2xkOwogfQogCi10eXBlZGVmIGludCAoKm1hdGNoX2ZuKShjb25zdCBjaGFyICp1bm1hdGNoZWQsIHZvaWQgKmRhdGEsIHZvaWQgKmJhdG9uKTsKK3R5cGVkZWYgaW50ICgqbWF0Y2hfZm4pKGNvbnN0IGNoYXIgKnVubWF0Y2hlZCwgdm9pZCAqdmFsdWUsIHZvaWQgKmJhdG9uKTsKIAogLyoKICAqIFNlYXJjaCBhIHRyaWUgZm9yIHNvbWUga2V5LiAgRmluZCB0aGUgbG9uZ2VzdCAvLW9yLVwwLXRlcm1pbmF0ZWQKLSAqIHByZWZpeCBvZiB0aGUga2V5IGZvciB3aGljaCB0aGUgdHJpZSBjb250YWlucyBhIHZhbHVlLiAgQ2FsbCBmbgotICogd2l0aCB0aGUgdW5tYXRjaGVkIHBvcnRpb24gb2YgdGhlIGtleSBhbmQgdGhlIGZvdW5kIHZhbHVlLCBhbmQKLSAqIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlLiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBwcmVmaXgsIHJldHVybiAtMS4KKyAqIHByZWZpeCBvZiB0aGUga2V5IGZvciB3aGljaCB0aGUgdHJpZSBjb250YWlucyBhIHZhbHVlLiAgSWYgdGhlcmUgaXMKKyAqIG5vIHN1Y2ggcHJlZml4LCByZXR1cm4gLTEuICBPdGhlcndpc2UgY2FsbCBmbiB3aXRoIHRoZSB1bm1hdGNoZWQKKyAqIHBvcnRpb24gb2YgdGhlIGtleSBhbmQgdGhlIGZvdW5kIHZhbHVlLiAgSWYgZm4gcmV0dXJucyAwIG9yCisgKiBwb3NpdGl2ZSwgdGhlbiByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS4gIElmIGZuIHJldHVybnMgbmVnYXRpdmUsCisgKiB0aGVuIGNhbGwgZm4gd2l0aCB0aGUgbmV4dC1sb25nZXN0IC8tdGVybWluYXRlZCBwcmVmaXggb2YgdGhlIGtleQorICogKGkuZS4gYSBwYXJlbnQgZGlyZWN0b3J5KSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZSwgYW5kCisgKiBoYW5kbGUgaXRzIHJldHVybiB2YWx1ZSB0aGUgc2FtZSB3YXkuICBJZiB0aGVyZSBpcyBubyBzaG9ydGVyCisgKiAvLXRlcm1pbmF0ZWQgcHJlZml4IHdpdGggYSB2YWx1ZSBsZWZ0LCB0aGVuIHJldHVybiB0aGUgbmVnYXRpdmUKKyAqIHJldHVybiB2YWx1ZSBvZiB0aGUgbW9zdCByZWNlbnQgZm4gaW52b2NhdGlvbi4KICAqCiAgKiBUaGUga2V5IGlzIHBhcnRpYWxseSBub3JtYWxpemVkOiBjb25zZWN1dGl2ZSBzbGFzaGVzIGFyZSBza2lwcGVkLgogICoKLSAqIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHJpZSBjb250YWluaW5nIG9ubHkgW3JlZnMsCi0gKiByZWZzL3dvcmt0cmVlXSAoYm90aCB3aXRoIHZhbHVlcykuCisgKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIHRyaWUgY29udGFpbmluZyBvbmx5IFtsb2dzLAorICogbG9ncy9yZWZzL2Jpc2VjdF0sIGJvdGggd2l0aCB2YWx1ZXMsIGJ1dCBub3QgbG9ncy9yZWZzLgogICoKLSAqIHwga2V5ICAgICAgICAgICAgIHwgdW5tYXRjaGVkICB8IHZhbCBmcm9tIG5vZGUgfCByZXR1cm4gdmFsdWUgfAotICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18Ci0gKiB8IGEgICAgICAgICAgICAgICB8IG5vdCBjYWxsZWQgfCBuL2EgICAgICAgICAgIHwgLTEgICAgICAgICAgIHwKLSAqIHwgcmVmcyAgICAgICAgICAgIHwgXDAgICAgICAgICB8IHJlZnMgICAgICAgICAgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzLyAgICAgICAgICAgfCAvICAgICAgICAgIHwgcmVmcyAgICAgICAgICB8IGFzIHBlciBmbiAgICB8Ci0gKiB8IHJlZnMvdyAgICAgICAgICB8IC93ICAgICAgICAgfCByZWZzICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwgcmVmcy93b3JrdHJlZSAgIHwgXDAgICAgICAgICB8IHJlZnMvd29ya3RyZWUgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzL3dvcmt0cmVlLyAgfCAvICAgICAgICAgIHwgcmVmcy93b3JrdHJlZSB8IGFzIHBlciBmbiAgICB8Ci0gKiB8IHJlZnMvd29ya3RyZWUvYSB8IC9hICAgICAgICAgfCByZWZzL3dvcmt0cmVlIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAotICoKKyAqIHwga2V5ICAgICAgICAgICAgICAgIHwgdW5tYXRjaGVkICAgICAgfCBwcmVmaXggdG8gbm9kZSAgIHwgcmV0dXJuIHZhbHVlIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKKyAqIHwgYSAgICAgICAgICAgICAgICAgIHwgbm90IGNhbGxlZCAgICAgfCBuL2EgICAgICAgICAgICAgIHwgLTEgICAgICAgICAgIHwKKyAqIHwgbG9nc3RvcmUgICAgICAgICAgIHwgbm90IGNhbGxlZCAgICAgfCBuL2EgICAgICAgICAgICAgIHwgLTEgICAgICAgICAgIHwKKyAqIHwgbG9ncyAgICAgICAgICAgICAgIHwgXDAgICAgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy8gICAgICAgICAgICAgIHwgLyAgICAgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzICAgICAgICAgIHwgL3JlZnMgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzLyAgICAgICAgIHwgL3JlZnMvICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2IgICAgICAgIHwgL3JlZnMvYiAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdGVkIHwgL3JlZnMvYmlzZWN0ZWQgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdCAgIHwgXDAgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC8gIHwgLyAgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC9hIHwgL2EgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgKElmIGZuIGluIHRoZSBwcmV2aW91cyBsaW5lIHJldHVybnMgLTEsIHRoZW4gZm4gaXMgY2FsbGVkIG9uY2UgbW9yZTopIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC9hIHwgL3JlZnMvYmlzZWN0L2EgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAqLwogc3RhdGljIGludCB0cmllX2ZpbmQoc3RydWN0IHRyaWUgKnJvb3QsIGNvbnN0IGNoYXIgKmtleSwgbWF0Y2hfZm4gZm4sCiAJCSAgICAgdm9pZCAqYmF0b24pCkBAIC0yODgsOSArMzAwLDEzIEBACiAKIAkvKiBNYXRjaGVkIHRoZSBlbnRpcmUgY29tcHJlc3NlZCBzZWN0aW9uICovCiAJa2V5ICs9IGk7Ci0JaWYgKCEqa2V5KQorCWlmICghKmtleSkgewogCQkvKiBFbmQgb2Yga2V5ICovCi0JCXJldHVybiBmbihrZXksIHJvb3QtPnZhbHVlLCBiYXRvbik7CisJCWlmIChyb290LT52YWx1ZSkKKwkJCXJldHVybiBmbihrZXksIHJvb3QtPnZhbHVlLCBiYXRvbik7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBQYXJ0aWFsIHBhdGggbm9ybWFsaXphdGlvbjogc2tpcCBjb25zZWN1dGl2ZSBzbGFzaGVzICovCiAJd2hpbGUgKGtleVswXSA9PSAnLycgJiYga2V5WzFdID09ICcvJykKQEAgLTMyMCw4ICszMzYsOCBAQAogCWlmIChjb21tb25fdHJpZV9kb25lX3NldHVwKQogCQlyZXR1cm47CiAKLQlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+ZGlybmFtZTsgcCsrKQotCQlhZGRfdG9fdHJpZSgmY29tbW9uX3RyaWUsIHAtPmRpcm5hbWUsIHApOworCWZvciAocCA9IGNvbW1vbl9saXN0OyBwLT5wYXRoOyBwKyspCisJCWFkZF90b190cmllKCZjb21tb25fdHJpZSwgcC0+cGF0aCwgcCk7CiAKIAljb21tb25fdHJpZV9kb25lX3NldHVwID0gMTsKIH0KQEAgLTMzNCwxNCArMzUwLDExIEBACiB7CiAJc3RydWN0IGNvbW1vbl9kaXIgKmRpciA9IHZhbHVlOwogCi0JaWYgKCFkaXIpCi0JCXJldHVybiAwOwotCiAJaWYgKGRpci0+aXNfZGlyICYmICh1bm1hdGNoZWRbMF0gPT0gMCB8fCB1bm1hdGNoZWRbMF0gPT0gJy8nKSkKLQkJcmV0dXJuICFkaXItPmV4Y2x1ZGU7CisJCXJldHVybiBkaXItPmlzX2NvbW1vbjsKIAogCWlmICghZGlyLT5pc19kaXIgJiYgdW5tYXRjaGVkWzBdID09IDApCi0JCXJldHVybiAhZGlyLT5leGNsdWRlOworCQlyZXR1cm4gZGlyLT5pc19jb21tb247CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MCw5ICszNjMsMTQgQEAKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbW1vbl9kaXIpCiB7CiAJY2hhciAqYmFzZSA9IGJ1Zi0+YnVmICsgZ2l0X2Rpcl9sZW47CisJaW50IGhhc19sb2NrX3N1ZmZpeCA9IHN0cmJ1Zl9zdHJpcF9zdWZmaXgoYnVmLCBMT0NLX1NVRkZJWCk7CisKIAlpbml0X2NvbW1vbl90cmllKCk7CiAJaWYgKHRyaWVfZmluZCgmY29tbW9uX3RyaWUsIGJhc2UsIGNoZWNrX2NvbW1vbiwgTlVMTCkgPiAwKQogCQlyZXBsYWNlX2RpcihidWYsIGdpdF9kaXJfbGVuLCBjb21tb25fZGlyKTsKKworCWlmIChoYXNfbG9ja19zdWZmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBMT0NLX1NVRkZJWCk7CiB9CiAKIHZvaWQgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKHZvaWQpCkBAIC0zNjUsOCArMzgzLDggQEAKIAkJcmV0dXJuOwogCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLyIsIGdldF9naXRfZGlyKCkpOwogCWxlbiA9IHNiLmxlbjsKLQlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+ZGlybmFtZTsgcCsrKSB7Ci0JCWNvbnN0IGNoYXIgKnBhdGggPSBwLT5kaXJuYW1lOworCWZvciAocCA9IGNvbW1vbl9saXN0OyBwLT5wYXRoOyBwKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPnBhdGg7CiAJCWlmIChwLT5pZ25vcmVfZ2FyYmFnZSkKIAkJCWNvbnRpbnVlOwogCQlzdHJidWZfc2V0bGVuKCZzYiwgbGVuKTsKZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmMgYi9wYXRoc3BlYy5jCmluZGV4IDEyYzJiMzIuLjEyOGYyN2YgMTAwNjQ0Ci0tLSBhL3BhdGhzcGVjLmMKKysrIGIvcGF0aHNwZWMuYwpAQCAtMyw2ICszLDggQEAKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJwYXRoc3BlYy5oIgogI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogLyoKICAqIEZpbmRzIHdoaWNoIG9mIHRoZSBnaXZlbiBwYXRoc3BlY3MgbWF0Y2ggaXRlbXMgaW4gdGhlIGluZGV4LgpAQCAtNjEzLDYgKzYxNSw0MiBAQAogCX0KIH0KIAordm9pZCBwYXJzZV9wYXRoc3BlY19maWxlKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIHVuc2lnbmVkIG1hZ2ljX21hc2ssCisJCQkgdW5zaWduZWQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBjb25zdCBjaGFyICpmaWxlLCBpbnQgbnVsX3Rlcm1fbGluZSkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBwYXJzZWRfZmlsZSA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6CisJCQkJCQkgICAgICAgc3RyYnVmX2dldGxpbmU7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqaW47CisKKwlpZiAoIXN0cmNtcChmaWxlLCAiLSIpKQorCQlpbiA9IHN0ZGluOworCWVsc2UKKwkJaW4gPSB4Zm9wZW4oZmlsZSwgInIiKTsKKworCXdoaWxlIChnZXRsaW5lX2ZuKCZidWYsIGluKSAhPSBFT0YpIHsKKwkJaWYgKCFudWxfdGVybV9saW5lICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVucXVvdGVkKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoXygibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIiksIGJ1Zi5idWYpOworCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJnVucXVvdGVkKTsKKwkJfQorCQlhcmd2X2FycmF5X3B1c2goJnBhcnNlZF9maWxlLCBidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZ1bnF1b3RlZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKGluICE9IHN0ZGluKQorCQlmY2xvc2UoaW4pOworCisJcGFyc2VfcGF0aHNwZWMocGF0aHNwZWMsIG1hZ2ljX21hc2ssIGZsYWdzLCBwcmVmaXgsIHBhcnNlZF9maWxlLmFyZ3YpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJnBhcnNlZF9maWxlKTsKK30KKwogdm9pZCBjb3B5X3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqZHN0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnNyYykKIHsKIAlpbnQgaSwgajsKZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmggYi9wYXRoc3BlYy5oCmluZGV4IDFjMThhMmMuLjQ1NGNlMzYgMTAwNjQ0Ci0tLSBhL3BhdGhzcGVjLmgKKysrIGIvcGF0aHNwZWMuaApAQCAtMjIsNiArMjIsMTEgQEAKIAogI2RlZmluZSBQQVRIU1BFQ19PTkVTVEFSIDEJLyogdGhlIHBhdGhzcGVjIHBhdHRlcm4gc2F0aXNmaWVzIEdGTk1fT05FU1RBUiAqLwogCisvKioKKyAqIFNlZSBnbG9zc2FyeS1jb250ZXh0LnR4dCBmb3IgdGhlIHN5bnRheCBvZiBwYXRoc3BlYy4KKyAqIEluIG1lbW9yeSwgYSBwYXRoc3BlYyBzZXQgaXMgcmVwcmVzZW50ZWQgYnkgInN0cnVjdCBwYXRoc3BlYyIgYW5kIGlzCisgKiBwcmVwYXJlZCBieSBwYXJzZV9wYXRoc3BlYygpLgorICovCiBzdHJ1Y3QgcGF0aHNwZWMgewogCWludCBucjsKIAl1bnNpZ25lZCBpbnQgaGFzX3dpbGRjYXJkOjE7CkBAIC03MywxOCArNzgsNTYgQEAKICAqLwogI2RlZmluZSBQQVRIU1BFQ19MSVRFUkFMX1BBVEggKDE8PDYpCiAKLS8qCisvKioKICAqIEdpdmVuIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGEgcHJlZml4LCBjb252ZXJ0IHRoZSBpbnB1dCB0bwogICogcGF0aHNwZWMuIGRpZSgpIGlmIGFueSBtYWdpYyBpbiBtYWdpY19tYXNrIGlzIHVzZWQuCiAgKgogICogQW55IGFyZ3VtZW50cyB1c2VkIGFyZSBjb3BpZWQuIEl0IGlzIHNhZmUgZm9yIHRoZSBjYWxsZXIgdG8gbW9kaWZ5CiAgKiBvciBmcmVlICdwcmVmaXgnIGFuZCAnYXJncycgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIC0gbWFnaWNfbWFzayBzcGVjaWZpZXMgd2hhdCBmZWF0dXJlcyB0aGF0IGFyZSBOT1Qgc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcKKyAqIGNvZGUuIElmIGEgdXNlciBhdHRlbXB0cyB0byB1c2Ugc3VjaCBhIGZlYXR1cmUsIHBhcnNlX3BhdGhzcGVjKCkgY2FuIHJlamVjdAorICogaXQgZWFybHkuCisgKgorICogLSBmbGFncyBzcGVjaWZpZXMgb3RoZXIgdGhpbmdzIHRoYXQgdGhlIGNhbGxlciB3YW50cyBwYXJzZV9wYXRoc3BlYyB0bworICogcGVyZm9ybS4KKyAqCisgKiAtIHByZWZpeCBhbmQgYXJncyBjb21lIGZyb20gY21kXyogZnVuY3Rpb25zCisgKgorICogcGFyc2VfcGF0aHNwZWMoKSBoZWxwcyBjYXRjaCB1bnN1cHBvcnRlZCBmZWF0dXJlcyBhbmQgcmVqZWN0IHRoZW0gcG9saXRlbHkuCisgKiBBdCBhIGxvd2VyIGxldmVsLCBkaWZmZXJlbnQgcGF0aHNwZWMtcmVsYXRlZCBmdW5jdGlvbnMgbWF5IG5vdCBzdXBwb3J0IHRoZQorICogc2FtZSBzZXQgb2YgZmVhdHVyZXMuIFN1Y2ggcGF0aHNwZWMtc2Vuc2l0aXZlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCB3aXRoCisgKiBHVUFSRF9QQVRIU1BFQygpLCB3aGljaCB3aWxsIGRpZSBpbiBhbiB1bmZyaWVuZGx5IHdheSB3aGVuIGFuIHVuc3VwcG9ydGVkCisgKiBmZWF0dXJlIGlzIHJlcXVlc3RlZC4KKyAqCisgKiBUaGUgY29tbWFuZCBkZXNpZ25lcnMgYXJlIHN1cHBvc2VkIHRvIG1ha2Ugc3VyZSB0aGF0IEdVQVJEX1BBVEhTUEVDKCkgbmV2ZXIKKyAqIGRpZXMuIFRoZXkgaGF2ZSB0byBtYWtlIHN1cmUgYWxsIHVuc3VwcG9ydGVkIGZlYXR1cmVzIGFyZSBjYXVnaHQgYnkKKyAqIHBhcnNlX3BhdGhzcGVjKCksIG5vdCBieSBHVUFSRF9QQVRIU1BFQy4gZ3JlcHBpbmcgR1VBUkRfUEFUSFNQRUMoKSBzaG91bGQKKyAqIGdpdmUgdGhlIGRlc2lnbmVycyBhbGwgcGF0aHNwZWMtc2Vuc2l0aXZlIGNvZGVwYXRocyBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5CisgKiBzdXBwb3J0LgorICoKKyAqIEEgc2ltaWxhciBwcm9jZXNzIGlzIGFwcGxpZWQgd2hlbiBhIG5ldyBwYXRoc3BlYyBtYWdpYyBpcyBhZGRlZC4gVGhlIGRlc2lnbmVyCisgKiBsaWZ0cyB0aGUgR1VBUkRfUEFUSFNQRUMgcmVzdHJpY3Rpb24gaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgdGhlIG5ldworICogbWFnaWMuIEF0IHRoZSBzYW1lIHRpbWUgKHMpaGUgaGFzIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmZWF0dXJlIHdpbGwgYmUKKyAqIGNhdWdodCBhdCBwYXJzZV9wYXRoc3BlYygpIGluIGNvbW1hbmRzIHRoYXQgY2Fubm90IGhhbmRsZSB0aGUgbmV3IG1hZ2ljIGluCisgKiBzb21lIGNhc2VzLiBncmVwcGluZyBwYXJzZV9wYXRoc3BlYygpIHNob3VsZCBoZWxwLgogICovCiB2b2lkIHBhcnNlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCiAJCSAgICB1bnNpZ25lZCBtYWdpY19tYXNrLAogCQkgICAgdW5zaWduZWQgZmxhZ3MsCiAJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsCiAJCSAgICBjb25zdCBjaGFyICoqYXJncyk7CisvKgorICogU2FtZSBhcyBwYXJzZV9wYXRoc3BlYygpIGJ1dCB1c2VzIGZpbGUgYXMgaW5wdXQuCisgKiBXaGVuICdmaWxlJyBpcyBleGFjdGx5ICItIiBpdCB1c2VzICdzdGRpbicgaW5zdGVhZC4KKyAqLwordm9pZCBwYXJzZV9wYXRoc3BlY19maWxlKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgdW5zaWduZWQgbWFnaWNfbWFzaywKKwkJCSB1bnNpZ25lZCBmbGFncywKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgY29uc3QgY2hhciAqZmlsZSwKKwkJCSBpbnQgbnVsX3Rlcm1fbGluZSk7CisKIHZvaWQgY29weV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKmRzdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpzcmMpOwogdm9pZCBjbGVhcl9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CiAKZGlmZiAtLWdpdCBhL3BlcmwvR2l0LnBtIGIvcGVybC9HaXQucG0KaW5kZXggNjJjNDcyZS4uNTRjOWVkMCAxMDA2NDQKLS0tIGEvcGVybC9HaXQucG0KKysrIGIvcGVybC9HaXQucG0KQEAgLTU2Myw3ICs1NjMsNyBAQAogUXVlcnkgdXNlciBDPFBST01QVD4gYW5kIHJldHVybiBhbnN3ZXIgZnJvbSB1c2VyLgogCiBIb25vdXJzIEdJVF9BU0tQQVNTIGFuZCBTU0hfQVNLUEFTUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHF1ZXJ5aW5nCi10aGUgdXNlci4gSWYgbm8gKl9BU0tQQVNTIHZhcmlhYmxlIGlzIHNldCBvciBhbiBlcnJvciBvY2NvdXJlZCwKK3RoZSB1c2VyLiBJZiBubyAqX0FTS1BBU1MgdmFyaWFibGUgaXMgc2V0IG9yIGFuIGVycm9yIG9jY3VycmVkLAogdGhlIHRlcm1pbmFsIGlzIHRyaWVkIGFzIGEgZmFsbGJhY2suCiBJZiBDPElTUEFTU1dPUkQ+IGlzIHNldCBhbmQgdHJ1ZSwgdGhlIHRlcm1pbmFsIGRpc2FibGVzIGVjaG8uCiAKZGlmZiAtLWdpdCBhL3BrdC1saW5lLmggYi9wa3QtbGluZS5oCmluZGV4IDVjNjIwMTUuLmZlZjNhMGQgMTAwNjQ0Ci0tLSBhL3BrdC1saW5lLmgKKysrIGIvcGt0LWxpbmUuaApAQCAtNzcsNyArNzcsNyBAQAogLyoKICAqIFJlYWQgYSBwYWNrZXRpemVkIGxpbmUgaW50byBhIGJ1ZmZlciBsaWtlIHRoZSAncGFja2V0X3JlYWQoKScgZnVuY3Rpb24gYnV0CiAgKiByZXR1cm5zIGFuICdlbnVtIHBhY2tldF9yZWFkX3N0YXR1cycgd2hpY2ggaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgdGhlIHJlYWQuCi0gKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2lsbCBiZSBhc3NpZ2luZWQgdG8gKnBrdGxlbiBpZiB0aGUgc3RhdHVzIG9mIHRoZQorICogVGhlIG51bWJlciBvZiBieXRlcyByZWFkIHdpbGwgYmUgYXNzaWduZWQgdG8gKnBrdGxlbiBpZiB0aGUgc3RhdHVzIG9mIHRoZQogICogcmVhZCB3YXMgJ1BBQ0tFVF9SRUFEX05PUk1BTCcuCiAgKi8KIGVudW0gcGFja2V0X3JlYWRfc3RhdHVzIHsKZGlmZiAtLWdpdCBhL3ByZXR0eS5jIGIvcHJldHR5LmMKaW5kZXggYjMyZjAzNi4uMzA1ZTkwMyAxMDA2NDQKLS0tIGEvcHJldHR5LmMKKysrIGIvcHJldHR5LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAlpbnQgaXNfdGZvcm1hdDsKIAlpbnQgZXhwYW5kX3RhYnNfaW5fbG9nOwogCWludCBpc19hbGlhczsKKwllbnVtIGRhdGVfbW9kZV90eXBlIGRlZmF1bHRfZGF0ZV9tb2RlX3R5cGU7CiAJY29uc3QgY2hhciAqdXNlcl9mb3JtYXQ7CiB9ICpjb21taXRfZm9ybWF0czsKIHN0YXRpYyBzaXplX3QgYnVpbHRpbl9mb3JtYXRzX2xlbjsKQEAgLTk3LDcgKzk4LDkgQEAKIAkJeyAibWJveHJkIiwJQ01JVF9GTVRfTUJPWFJELAkwLAkwIH0sCiAJCXsgImZ1bGxlciIsCUNNSVRfRk1UX0ZVTExFUiwJMCwJOCB9LAogCQl7ICJmdWxsIiwJQ01JVF9GTVRfRlVMTCwJCTAsCTggfSwKLQkJeyAib25lbGluZSIsCUNNSVRfRk1UX09ORUxJTkUsCTEsCTAgfQorCQl7ICJvbmVsaW5lIiwJQ01JVF9GTVRfT05FTElORSwJMSwJMCB9LAorCQl7ICJyZWZlcmVuY2UiLAlDTUlUX0ZNVF9VU0VSRk9STUFULAkxLAkwLAorCQkJMCwgREFURV9TSE9SVCwgIiVDKGF1dG8pJWggKCVzLCAlYWQpIiB9LAogCQkvKgogCQkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMgaW4KIAkJICogZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IGZvcm1hdHMuCkBAIC0xODEsNiArMTg0LDggQEAKIAlyZXYtPmNvbW1pdF9mb3JtYXQgPSBjb21taXRfZm9ybWF0LT5mb3JtYXQ7CiAJcmV2LT51c2VfdGVybWluYXRvciA9IGNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQ7CiAJcmV2LT5leHBhbmRfdGFic19pbl9sb2dfZGVmYXVsdCA9IGNvbW1pdF9mb3JtYXQtPmV4cGFuZF90YWJzX2luX2xvZzsKKwlpZiAoIXJldi0+ZGF0ZV9tb2RlX2V4cGxpY2l0ICYmIGNvbW1pdF9mb3JtYXQtPmRlZmF1bHRfZGF0ZV9tb2RlX3R5cGUpCisJCXJldi0+ZGF0ZV9tb2RlLnR5cGUgPSBjb21taXRfZm9ybWF0LT5kZWZhdWx0X2RhdGVfbW9kZV90eXBlOwogCWlmIChjb21taXRfZm9ybWF0LT5mb3JtYXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgewogCQlzYXZlX3VzZXJfZm9ybWF0KHJldiwgY29tbWl0X2Zvcm1hdC0+dXNlcl9mb3JtYXQsCiAJCQkJIGNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQpOwpAQCAtNjk2LDcgKzcwMSw3IEBACiAJbWFpbCA9IHMubWFpbF9iZWdpbjsKIAltYWlsbGVuID0gcy5tYWlsX2VuZCAtIHMubWFpbF9iZWdpbjsKIAotCWlmIChwYXJ0ID09ICdOJyB8fCBwYXJ0ID09ICdFJykgLyogbWFpbG1hcCBsb29rdXAgKi8KKwlpZiAocGFydCA9PSAnTicgfHwgcGFydCA9PSAnRScgfHwgcGFydCA9PSAnTCcpIC8qIG1haWxtYXAgbG9va3VwICovCiAJCW1haWxtYXBfbmFtZSgmbWFpbCwgJm1haWxsZW4sICZuYW1lLCAmbmFtZWxlbik7CiAJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ04nKSB7CS8qIG5hbWUgKi8KIAkJc3RyYnVmX2FkZChzYiwgbmFtZSwgbmFtZWxlbik7CkBAIC03MDYsNiArNzExLDEzIEBACiAJCXN0cmJ1Zl9hZGQoc2IsIG1haWwsIG1haWxsZW4pOwogCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOwogCX0KKwlpZiAocGFydCA9PSAnbCcgfHwgcGFydCA9PSAnTCcpIHsJLyogbG9jYWwtcGFydCAqLworCQljb25zdCBjaGFyICphdCA9IG1lbWNocihtYWlsLCAnQCcsIG1haWxsZW4pOworCQlpZiAoYXQpCisJCQltYWlsbGVuID0gYXQgLSBtYWlsOworCQlzdHJidWZfYWRkKHNiLCBtYWlsLCBtYWlsbGVuKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CiAKIAlpZiAoIXMuZGF0ZV9iZWdpbikKIAkJZ290byBza2lwOwpAQCAtNzMxLDYgKzc0Myw5IEBACiAJY2FzZSAnSSc6CS8qIGRhdGUsIElTTyA4NjAxIHN0cmljdCAqLwogCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShJU084NjAxX1NUUklDVCkpKTsKIAkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdzJzoKKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoU0hPUlQpKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CiAJfQogCiBza2lwOgpAQCAtMTYxMCwxNCArMTYyNSwxNCBAQAogCQkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCiAJCQkJY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcmV0dHlfY3R4KQogewotCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0IGNvbnRleHQgPSB7CisJCS5jb21taXQgPSBjb21taXQsCisJCS5wcmV0dHlfY3R4ID0gcHJldHR5X2N0eCwKKwkJLndyYXBfc3RhcnQgPSBzYi0+bGVuCisJfTsKIAljb25zdCBjaGFyICpvdXRwdXRfZW5jID0gcHJldHR5X2N0eC0+b3V0cHV0X2VuY29kaW5nOwogCWNvbnN0IGNoYXIgKnV0ZjggPSAiVVRGLTgiOwogCi0JbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YoY29udGV4dCkpOwotCWNvbnRleHQuY29tbWl0ID0gY29tbWl0OwotCWNvbnRleHQucHJldHR5X2N0eCA9IHByZXR0eV9jdHg7Ci0JY29udGV4dC53cmFwX3N0YXJ0ID0gc2ItPmxlbjsKIAkvKgogCSAqIGNvbnZlcnQgYSBjb21taXQgbWVzc2FnZSB0byBVVEYtOCBmaXJzdAogCSAqIGFzIGZhciBhcyAnZm9ybWF0X2NvbW1pdF9pdGVtJyBhc3N1bWVzIGl0IGluIFVURi04CmRpZmYgLS1naXQgYS9wcm9ncmVzcy5jIGIvcHJvZ3Jlc3MuYwppbmRleCAwMDYzNTU5Li4xOTgwNWFjIDEwMDY0NAotLS0gYS9wcm9ncmVzcy5jCisrKyBiL3Byb2dyZXNzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2RlZmluZSBUUF9JRFhfTUFYICAgICAgOAogCkBAIC0yNjcsOSArMjY4LDE5IEBACiAJcmV0dXJuIHByb2dyZXNzOwogfQogCitzdGF0aWMgaW50IGdldF9kZWZhdWx0X2RlbGF5KHZvaWQpCit7CisJc3RhdGljIGludCBkZWxheV9pbl9zZWNzID0gLTE7CisKKwlpZiAoZGVsYXlfaW5fc2VjcyA8IDApCisJCWRlbGF5X2luX3NlY3MgPSBnaXRfZW52X3Vsb25nKCJHSVRfUFJPR1JFU1NfREVMQVkiLCAyKTsKKworCXJldHVybiBkZWxheV9pbl9zZWNzOworfQorCiBzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsIHVpbnQ2NF90IHRvdGFsKQogewotCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDIsIDApOworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIGdldF9kZWZhdWx0X2RlbGF5KCksIDApOwogfQogCiBzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCkKQEAgLTI5NCw3ICszMDUsNyBAQAogc3RydWN0IHByb2dyZXNzICpzdGFydF9kZWxheWVkX3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwKIAkJCQkJICAgICAgIHVpbnQ2NF90IHRvdGFsKQogewotCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDIsIDEpOworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIGdldF9kZWZhdWx0X2RlbGF5KCksIDEpOwogfQogCiBzdGF0aWMgdm9pZCBmaW5pc2hfaWZfc3BhcnNlKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MpCmRpZmYgLS1naXQgYS9wcm9taXNvci1yZW1vdGUuYyBiL3Byb21pc29yLXJlbW90ZS5jCmluZGV4IDliZDViNzkuLjlmMzM4YzkgMTAwNjQ0Ci0tLSBhL3Byb21pc29yLXJlbW90ZS5jCisrKyBiL3Byb21pc29yLXJlbW90ZS5jCkBAIC0xNiwxMCArMTYsOCBAQAogewogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIAlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0JaW50IG9yaWdpbmFsX2ZldGNoX2lmX21pc3NpbmcgPSBmZXRjaF9pZl9taXNzaW5nOwogCWludCByZXM7CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKIAlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKIAlpZiAoIXJlbW90ZS0+dXJsWzBdKQogCQlkaWUoXygiUmVtb3RlIHdpdGggbm8gVVJMIikpOwpAQCAtMjgsNyArMjYsNiBAQAogCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZST01fUFJPTUlTT1IsICIxIik7CiAJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfTk9fREVQRU5ERU5UUywgIjEiKTsKIAlyZXMgPSB0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZik7Ci0JZmV0Y2hfaWZfbWlzc2luZyA9IG9yaWdpbmFsX2ZldGNoX2lmX21pc3Npbmc7CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvcmFuZ2UtZGlmZi5jIGIvcmFuZ2UtZGlmZi5jCmluZGV4IDdmZWQ1YTMuLmY3NDU1NjcgMTAwNjQ0Ci0tLSBhL3JhbmdlLWRpZmYuYworKysgYi9yYW5nZS1kaWZmLmMKQEAgLTQwLDcgKzQwLDggQEAKICAqIFJlYWRzIHRoZSBwYXRjaGVzIGludG8gYSBzdHJpbmcgbGlzdCwgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIGJlaW5nIHBvcHVsYXRlZAogICogYXMgc3RydWN0IG9iamVjdF9pZCAod2lsbCBuZWVkIHRvIGJlIGZyZWUoKWQpLgogICovCi1zdGF0aWMgaW50IHJlYWRfcGF0Y2hlcyhjb25zdCBjaGFyICpyYW5nZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQorc3RhdGljIGludCByZWFkX3BhdGNoZXMoY29uc3QgY2hhciAqcmFuZ2UsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCWNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpvdGhlcl9hcmcpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgY29udGVudHMgPSBTVFJCVUZfSU5JVDsKQEAgLTYxLDggKzYyLDExIEBACiAJCQkiLS1vdXRwdXQtaW5kaWNhdG9yLW5ldz0+IiwKIAkJCSItLW91dHB1dC1pbmRpY2F0b3Itb2xkPTwiLAogCQkJIi0tb3V0cHV0LWluZGljYXRvci1jb250ZXh0PSMiLAotCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsIHJhbmdlLAorCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsCiAJCQlOVUxMKTsKKwlpZiAob3RoZXJfYXJnKQorCQlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBvdGhlcl9hcmctPmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmFuZ2UpOwogCWNwLm91dCA9IC0xOwogCWNwLm5vX3N0ZGluID0gMTsKIAljcC5naXRfY21kID0gMTsKQEAgLTE0NCw2ICsxNDgsMTIgQEAKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOwogCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuXG4iKTsKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgIyMgQ29tbWl0IG1lc3NhZ2UgIyNcbiIpOworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiTm90ZXMiKSAmJgorCQkJCSAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJzonKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQkJCS8qIHN0cmlwIHRoZSB0cmFpbGluZyBjb2xvbiAqLworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIyMgJS4qcyAjI1xuIiwKKwkJCQkJICAgIChpbnQpKHN0cmxlbihsaW5lKSAtIDEpLCBsaW5lKTsKIAkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgIiAgICAiKSkgewogCQkJCXAgPSBsaW5lICsgbGVuIC0gMjsKIAkJCQl3aGlsZSAoaXNzcGFjZSgqcCkgJiYgcCA+PSBsaW5lKQpAQCAtNDk2LDE2ICs1MDYsMTcgQEAKIAogaW50IHNob3dfcmFuZ2VfZGlmZihjb25zdCBjaGFyICpyYW5nZTEsIGNvbnN0IGNoYXIgKnJhbmdlMiwKIAkJICAgIGludCBjcmVhdGlvbl9mYWN0b3IsIGludCBkdWFsX2NvbG9yLAotCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKKwkJICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKQogewogCWludCByZXMgPSAwOwogCiAJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaDEgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoMiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogCi0JaWYgKHJlYWRfcGF0Y2hlcyhyYW5nZTEsICZicmFuY2gxKSkKKwlpZiAocmVhZF9wYXRjaGVzKHJhbmdlMSwgJmJyYW5jaDEsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UxKTsKLQlpZiAoIXJlcyAmJiByZWFkX3BhdGNoZXMocmFuZ2UyLCAmYnJhbmNoMikpCisJaWYgKCFyZXMgJiYgcmVhZF9wYXRjaGVzKHJhbmdlMiwgJmJyYW5jaDIsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UyKTsKIAogCWlmICghcmVzKSB7CmRpZmYgLS1naXQgYS9yYW5nZS1kaWZmLmggYi9yYW5nZS1kaWZmLmgKaW5kZXggMDhhNTBiNi4uZTExOTc2ZCAxMDA2NDQKLS0tIGEvcmFuZ2UtZGlmZi5oCisrKyBiL3JhbmdlLWRpZmYuaApAQCAtMiwxNiArMiwxOCBAQAogI2RlZmluZSBSQU5HRV9ESUZGX0gKIAogI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCiAKICNkZWZpbmUgUkFOR0VfRElGRl9DUkVBVElPTl9GQUNUT1JfREVGQVVMVCA2MAogCiAvKgotICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbW1pdHMgaW4gUkFOR0UxIGFuZCBSQU5HRTIsIGFuZCBlbWl0IHRvIHRoZQorICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbWl0cyBpbiBSQU5HRTEgYW5kIFJBTkdFMiwgYW5kIGVtaXQgdG8gdGhlCiAgKiBzdGFuZGFyZCBvdXRwdXQuICBOVUxMIGNhbiBiZSBwYXNzZWQgdG8gRElGRk9QVCB0byB1c2UgdGhlIGJ1aWx0LWluCiAgKiBkZWZhdWx0LgogICovCiBpbnQgc2hvd19yYW5nZV9kaWZmKGNvbnN0IGNoYXIgKnJhbmdlMSwgY29uc3QgY2hhciAqcmFuZ2UyLAogCQkgICAgaW50IGNyZWF0aW9uX2ZhY3RvciwgaW50IGR1YWxfY29sb3IsCi0JCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KTsKKwkJICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggZmM4MGQ3OS4uYWQwYjQ4YyAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMTgwMSw3ICsxODAxLDcgQEAKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKW5hbWU7CiAJCXNpemVfdCBzdHJpcF9sZW4sIHByZXZpb3VzX2xlbjsKIAotCQkvKiBJZiB3ZSdyZSBhdCB0aGUgYmVnaW5pbmcgb2YgYSBibG9jaywgaWdub3JlIHRoZSBwcmV2aW91cyBuYW1lICovCisJCS8qIElmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jaywgaWdub3JlIHRoZSBwcmV2aW91cyBuYW1lICovCiAJCXN0cmlwX2xlbiA9IGRlY29kZV92YXJpbnQoJmNwKTsKIAkJaWYgKHByZXZpb3VzX2NlKSB7CiAJCQlwcmV2aW91c19sZW4gPSBwcmV2aW91c19jZS0+Y2VfbmFtZWxlbjsKZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCA3MzBkMDVhLi41NDUwMjljIDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC0zMTAsMTkgKzMxMCwzNSBAQAogaW50IHJlZnNfZm9yX2VhY2hfcmVtb3RlX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAogCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiAKKy8qIGp1c3QgaXRlcmF0ZXMgdGhlIGhlYWQgcmVmLiAqLwogaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyogaXRlcmF0ZXMgYWxsIHJlZnMuICovCiBpbnQgZm9yX2VhY2hfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoqCisgKiBpdGVyYXRlcyBhbGwgcmVmcyB3aGljaCBoYXZlIGEgZGVmaW5lZCBwcmVmaXggYW5kIHN0cmlwcyB0aGF0IHByZWZpeCBmcm9tCisgKiB0aGUgcGFzc2VkIHZhcmlhYmxlIHJlZm5hbWUuCisgKi8KIGludCBmb3JfZWFjaF9yZWZfaW4oY29uc3QgY2hhciAqcHJlZml4LCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKIGludCByZWZzX2Zvcl9lYWNoX2Z1bGxyZWZfaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcHJlZml4LAogCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSwKIAkJCSAgICAgdW5zaWduZWQgaW50IGJyb2tlbik7CiBpbnQgZm9yX2VhY2hfZnVsbHJlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAogCQkJdW5zaWduZWQgaW50IGJyb2tlbik7CisKKy8qKgorICogaXRlcmF0ZSByZWZzIGZyb20gdGhlIHJlc3BlY3RpdmUgYXJlYS4KKyAqLwogaW50IGZvcl9lYWNoX3RhZ19yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogaW50IGZvcl9lYWNoX3JlbW90ZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogaW50IGZvcl9lYWNoX3JlcGxhY2VfcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBlYWNoX3JlcG9fcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyogaXRlcmF0ZXMgYWxsIHJlZnMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGdsb2IgcGF0dGVybi4gKi8KIGludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSk7CisKIGludCBmb3JfZWFjaF9nbG9iX3JlZl9pbihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpOwogCkBAIC03OTEsNiArODA3LDQxIEBACiBpbnQgcmVmX3N0b3JhZ2VfYmFja2VuZF9leGlzdHMoY29uc3QgY2hhciAqbmFtZSk7CiAKIHN0cnVjdCByZWZfc3RvcmUgKmdldF9tYWluX3JlZl9zdG9yZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qKgorICogU3VibW9kdWxlcworICogLS0tLS0tLS0tLQorICoKKyAqIElmIHlvdSB3YW50IHRvIGl0ZXJhdGUgdGhlIHJlZnMgb2YgYSBzdWJtb2R1bGUgeW91IGZpcnN0IG5lZWQgdG8gYWRkIHRoZQorICogc3VibW9kdWxlcyBvYmplY3QgZGF0YWJhc2UuIFlvdSBjYW4gZG8gdGhpcyBieSBhIGNvZGUtc25pcHBldCBsaWtlCisgKiB0aGlzOgorICoKKyAqIAljb25zdCBjaGFyICpwYXRoID0gInBhdGgvdG8vc3VibW9kdWxlIgorICogCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKyAqIAkJZGllKCJFcnJvciBzdWJtb2R1bGUgJyVzJyBub3QgcG9wdWxhdGVkLiIsIHBhdGgpOworICoKKyAqIGBhZGRfc3VibW9kdWxlX29kYigpYCB3aWxsIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIElmIHlvdQorICogZG8gbm90IGRvIHRoaXMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGZvciBlYWNoIHJlZiB0aGF0IGl0IGRvZXMgbm90IHBvaW50CisgKiB0byBhIHZhbGlkIG9iamVjdC4KKyAqCisgKiBOb3RlOiBBcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgeW91IGNhbm5vdCBzYWZlbHkgYXNzdW1lIHRoYXQgYWxsCisgKiBvYmplY3RzIHlvdSBsb29rdXAgYXJlIGF2YWlsYWJsZSBpbiBzdXBlcnByb2plY3QuIEFsbCBzdWJtb2R1bGUgb2JqZWN0cworICogd2lsbCBiZSBhdmFpbGFibGUgdGhlIHNhbWUgd2F5IGFzIHRoZSBzdXBlcnByb2plY3RzIG9iamVjdHMuCisgKgorICogRXhhbXBsZToKKyAqIC0tLS0tLS0tCisgKgorICogLS0tLQorICogc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorICogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCisgKiB7CisgKiAJc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKKyAqIAlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7CisgKiAJcmV0dXJuIDA7CisgKiB9CisgKgorICovCisKIC8qCiAgKiBSZXR1cm4gdGhlIHJlZl9zdG9yZSBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUuIEZvciB0aGUKICAqIG1haW4gcmVwb3NpdG9yeSwgdXNlIHN1Ym1vZHVsZT09TlVMTDsgc3VjaCBhIGNhbGwgY2Fubm90IGZhaWwuIEZvcgpkaWZmIC0tZ2l0IGEvcmVmcy9maWxlcy1iYWNrZW5kLmMgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwppbmRleCBkNjA3NjdhLi4wZWE2NmEyIDEwMDY0NAotLS0gYS9yZWZzL2ZpbGVzLWJhY2tlbmQuYworKysgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIHsKIAlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KIAkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfV1JJVEUsICJyZW5hbWVfcmVmIik7Ci0Jc3RydWN0IG9iamVjdF9pZCBvaWQsIG9yaWdfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgb3JpZ19vaWQ7CiAJaW50IGZsYWcgPSAwLCBsb2dtb3ZlZCA9IDA7CiAJc3RydWN0IHJlZl9sb2NrICpsb2NrOwogCXN0cnVjdCBzdGF0IGxvZ2luZm87CkBAIC0xMzk1LDcgKzEzOTUsNyBAQAogCSAqLwogCWlmICghY29weSAmJiAhcmVmc19yZWFkX3JlZl9mdWxsKCZyZWZzLT5iYXNlLCBuZXdyZWZuYW1lLAogCQkJCVJFU09MVkVfUkVGX1JFQURJTkcgfCBSRVNPTFZFX1JFRl9OT19SRUNVUlNFLAotCQkJCSZvaWQsIE5VTEwpICYmCisJCQkJTlVMTCwgTlVMTCkgJiYKIAkgICAgcmVmc19kZWxldGVfcmVmKCZyZWZzLT5iYXNlLCBOVUxMLCBuZXdyZWZuYW1lLAogCQkJICAgIE5VTEwsIFJFRl9OT19ERVJFRikpIHsKIAkJaWYgKGVycm5vID09IEVJU0RJUikgewpkaWZmIC0tZ2l0IGEvcmVmcy9yZWZzLWludGVybmFsLmggYi9yZWZzL3JlZnMtaW50ZXJuYWwuaAppbmRleCBmMmQ4YzAxLi5mZjI0MzZjIDEwMDY0NAotLS0gYS9yZWZzL3JlZnMtaW50ZXJuYWwuaAorKysgYi9yZWZzL3JlZnMtaW50ZXJuYWwuaApAQCAtMjYyLDcgKzI2Miw3IEBACiAgKiBhZnRlciBjYWxsaW5nIHJlZl9pdGVyYXRvcl9hZHZhbmNlKCkgYWdhaW4gb3IgY2FsbGluZwogICogcmVmX2l0ZXJhdG9yX2Fib3J0KCksIHlvdSBtdXN0IG1ha2UgYSBjb3B5LiBXaGVuIHRoZSBpdGVyYXRpb24gaGFzCiAgKiBiZWVuIGV4aGF1c3RlZCwgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSByZWxlYXNlcyBhbnkgcmVzb3VyY2VzCi0gKiBhc3NvY2F0ZWQgd2l0aCB0aGUgaXRlcmF0aW9uLCBmcmVlcyB0aGUgcmVmX2l0ZXJhdG9yIG9iamVjdCwgYW5kCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZXJhdGlvbiwgZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QsIGFuZAogICogcmV0dXJucyBJVEVSX0RPTkUuIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZSBpdGVyYXRpb24gZWFybHksIGNhbGwKICAqIHJlZl9pdGVyYXRvcl9hYm9ydCgpLCB3aGljaCBhbHNvIGZyZWVzIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0IGFuZAogICogYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBJZiB0aGVyZSB3YXMgYW4gaW50ZXJuYWwgZXJyb3IgYWR2YW5jaW5nCmRpZmYgLS1naXQgYS9yZWZzcGVjLmggYi9yZWZzcGVjLmgKaW5kZXggOWI2ZTY0YS4uM2YyYmQ0YSAxMDA2NDQKLS0tIGEvcmVmc3BlYy5oCisrKyBiL3JlZnNwZWMuaApAQCAtMjAsNiArMjAsMjIgQEAKICNkZWZpbmUgUkVGU1BFQ19JTklUX0ZFVENIIHsgLmZldGNoID0gUkVGU1BFQ19GRVRDSCB9CiAjZGVmaW5lIFJFRlNQRUNfSU5JVF9QVVNIIHsgLmZldGNoID0gUkVGU1BFQ19QVVNIIH0KIAorLyoqCisgKiBBIHN0cnVjdCByZWZzcGVjIGhvbGRzIHRoZSBwYXJzZWQgaW50ZXJwcmV0YXRpb24gb2YgYSByZWZzcGVjLiAgSWYgaXQgd2lsbAorICogZm9yY2UgdXBkYXRlcyAoc3RhcnRzIHdpdGggYSAnKycpLCBmb3JjZSBpcyB0cnVlLiAgSWYgaXQgaXMgYSBwYXR0ZXJuCisgKiAoc2lkZXMgZW5kIHdpdGggJyonKSBwYXR0ZXJuIGlzIHRydWUuICBzcmMgYW5kIGRlc3QgYXJlIHRoZSB0d28gc2lkZXMKKyAqIChpbmNsdWRpbmcgJyonIGNoYXJhY3RlcnMgaWYgcHJlc2VudCk7IGlmIHRoZXJlIGlzIG9ubHkgb25lIHNpZGUsIGl0IGlzIHNyYywKKyAqIGFuZCBkc3QgaXMgTlVMTDsgaWYgc2lkZXMgZXhpc3QgYnV0IGFyZSBlbXB0eSAoaS5lLiwgdGhlIHJlZnNwZWMgZWl0aGVyCisgKiBzdGFydHMgb3IgZW5kcyB3aXRoICc6JyksIHRoZSBjb3JyZXNwb25kaW5nIHNpZGUgaXMgIiIuCisgKgorICogQW4gYXJyYXkgb2Ygc3RyaW5ncyBjYW4gYmUgcGFyc2VkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0IHJlZnNwZWNzIHVzaW5nCisgKiBwYXJzZV9mZXRjaF9yZWZzcGVjKCkgb3IgcGFyc2VfcHVzaF9yZWZzcGVjKCkuCisgKgorICogcmVtb3RlX2ZpbmRfdHJhY2tpbmcoKSwgZ2l2ZW4gYSByZW1vdGUgYW5kIGEgc3RydWN0IHJlZnNwZWMgd2l0aCBlaXRoZXIgc3JjCisgKiBvciBkc3QgZmlsbGVkIG91dCwgd2lsbCBmaWxsIG91dCB0aGUgb3RoZXIgc3VjaCB0aGF0IHRoZSByZXN1bHQgaXMgaW4gdGhlCisgKiAiZmV0Y2giIHNwZWNpZmljYXRpb24gZm9yIHRoZSByZW1vdGUgKG5vdGUgdGhhdCB0aGlzIGV2YWx1YXRlcyBwYXR0ZXJucyBhbmQKKyAqIHJldHVybnMgYSBzaW5nbGUgcmVzdWx0KS4KKyAqLwogc3RydWN0IHJlZnNwZWMgewogCXN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW1zOwogCWludCBhbGxvYzsKZGlmZiAtLWdpdCBhL3JlbW90ZS5oIGIvcmVtb3RlLmgKaW5kZXggMGUxZDJiMi4uYjEzNGNjMiAxMDA2NDQKLS0tIGEvcmVtb3RlLmgKKysrIGIvcmVtb3RlLmgKQEAgLTYsNiArNiwxNCBAQAogI2luY2x1ZGUgImhhc2htYXAuaCIKICNpbmNsdWRlICJyZWZzcGVjLmgiCiAKKy8qKgorICogVGhlIEFQSSBnaXZlcyBhY2Nlc3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byByZW1vdGVzLiBJdCBoYW5kbGVzCisgKiBhbGwgdGhyZWUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIGhpc3RvcmljYWxseSBhbmQgY3VycmVudGx5IHVzZWQgYnkgR2l0LAorICogYW5kIHByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHVuaWZvcm0gZmFzaGlvbi4gTm90ZSB0aGF0IHRoZSBjb2RlIGFsc28KKyAqIGhhbmRsZXMgcGxhaW4gVVJMcyB3aXRob3V0IGFueSBjb25maWd1cmF0aW9uLCBnaXZpbmcgdGhlbSBqdXN0IHRoZSBkZWZhdWx0CisgKiBpbmZvcm1hdGlvbi4KKyAqLworCiBlbnVtIHsKIAlSRU1PVEVfVU5DT05GSUdVUkVEID0gMCwKIAlSRU1PVEVfQ09ORklHLApAQCAtMTYsMTYgKzI0LDIyIEBACiBzdHJ1Y3QgcmVtb3RlIHsKIAlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CiAKKwkvKiBUaGUgdXNlcidzIG5pY2tuYW1lIGZvciB0aGUgcmVtb3RlICovCiAJY29uc3QgY2hhciAqbmFtZTsKKwogCWludCBvcmlnaW4sIGNvbmZpZ3VyZWRfaW5fcmVwbzsKIAogCWNvbnN0IGNoYXIgKmZvcmVpZ25fdmNzOwogCisJLyogQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSB1cmxfbnIgVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlICovCiAJY29uc3QgY2hhciAqKnVybDsKKwogCWludCB1cmxfbnI7CiAJaW50IHVybF9hbGxvYzsKIAorCS8qIEFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZSAqLwogCWNvbnN0IGNoYXIgKipwdXNodXJsOworCiAJaW50IHB1c2h1cmxfbnI7CiAJaW50IHB1c2h1cmxfYWxsb2M7CiAKQEAgLTM0LDMyICs0OCw0NyBAQAogCXN0cnVjdCByZWZzcGVjIGZldGNoOwogCiAJLyoKKwkgKiBUaGUgc2V0dGluZyBmb3Igd2hldGhlciB0byBmZXRjaCB0YWdzIChhcyBhIHNlcGFyYXRlIHJ1bGUgZnJvbSB0aGUKKwkgKiBjb25maWd1cmVkIHJlZnNwZWNzKTsKIAkgKiAtMSB0byBuZXZlciBmZXRjaCB0YWdzCiAJICogMCB0byBhdXRvLWZvbGxvdyB0YWdzIG9uIGhldXJpc3RpYyAoZGVmYXVsdCkKIAkgKiAxIHRvIGFsd2F5cyBhdXRvLWZvbGxvdyB0YWdzCiAJICogMiB0byBhbHdheXMgZmV0Y2ggdGFncwogCSAqLwogCWludCBmZXRjaF90YWdzOworCiAJaW50IHNraXBfZGVmYXVsdF91cGRhdGU7CiAJaW50IG1pcnJvcjsKIAlpbnQgcHJ1bmU7CiAJaW50IHBydW5lX3RhZ3M7CiAKKwkvKioKKwkgKiBUaGUgY29uZmlndXJlZCBoZWxwZXIgcHJvZ3JhbXMgdG8gcnVuIG9uIHRoZSByZW1vdGUgc2lkZSwgZm9yCisJICogR2l0LW5hdGl2ZSBwcm90b2NvbHMuCisJICovCiAJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CiAJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKIAotCS8qCi0JICogZm9yIGN1cmwgcmVtb3RlcyBvbmx5Ci0JICovCisJLyogVGhlIHByb3h5IHRvIHVzZSBmb3IgY3VybCAoaHR0cCwgaHR0cHMsIGZ0cCwgZXRjLikgVVJMcy4gKi8KIAljaGFyICpodHRwX3Byb3h5OworCisJLyogVGhlIG1ldGhvZCB1c2VkIGZvciBhdXRoZW50aWNhdGluZyBhZ2FpbnN0IGBodHRwX3Byb3h5YC4gKi8KIAljaGFyICpodHRwX3Byb3h5X2F1dGhtZXRob2Q7CiB9OwogCisvKioKKyAqIHN0cnVjdCByZW1vdGVzIGNhbiBiZSBmb3VuZCBieSBuYW1lIHdpdGggcmVtb3RlX2dldCgpLgorICogcmVtb3RlX2dldChOVUxMKSB3aWxsIHJldHVybiB0aGUgZGVmYXVsdCByZW1vdGUsIGdpdmVuIHRoZSBjdXJyZW50IGJyYW5jaAorICogYW5kIGNvbmZpZ3VyYXRpb24uCisgKi8KIHN0cnVjdCByZW1vdGUgKnJlbW90ZV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CisKIHN0cnVjdCByZW1vdGUgKnB1c2hyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHJlbW90ZV9pc19jb25maWd1cmVkKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgaW50IGluX3JlcG8pOwogCiB0eXBlZGVmIGludCBlYWNoX3JlbW90ZV9mbihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpOworCisvKiBpdGVyYXRlIHRocm91Z2ggc3RydWN0IHJlbW90ZXMgKi8KIGludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpOwogCiBpbnQgcmVtb3RlX2hhc191cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpOwpAQCAtMTk0LDE2ICsyMjMsMzYgQEAKICAqLwogaW50IHJlbW90ZV9maW5kX3RyYWNraW5nKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYyk7CiAKKy8qKgorICogc3RydWN0IGJyYW5jaCBob2xkcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYSBicmFuY2guIEl0IGNhbiBiZSBsb29rZWQgdXAgd2l0aAorICogYnJhbmNoX2dldChuYW1lKSBmb3IgInJlZnMvaGVhZHMve25hbWV9Iiwgb3Igd2l0aCBicmFuY2hfZ2V0KE5VTEwpIGZvciBIRUFELgorICovCiBzdHJ1Y3QgYnJhbmNoIHsKKworCS8qIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBicmFuY2guICovCiAJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFRoZSBmdWxsIHBhdGggZm9yIHRoZSBicmFuY2ggcmVmLiAqLwogCWNvbnN0IGNoYXIgKnJlZm5hbWU7CiAKKwkvKiBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGxpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gKi8KIAljb25zdCBjaGFyICpyZW1vdGVfbmFtZTsKKwogCWNvbnN0IGNoYXIgKnB1c2hyZW1vdGVfbmFtZTsKIAorCS8qIEFuIGFycmF5IG9mIHRoZSAibWVyZ2UiIGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uLiAqLwogCWNvbnN0IGNoYXIgKiptZXJnZV9uYW1lOworCisJLyoqCisJICogQW4gYXJyYXkgb2YgdGhlIHN0cnVjdCByZWZzcGVjcyB1c2VkIGZvciB0aGUgbWVyZ2UgbGluZXMuIFRoYXQgaXMsCisJICogbWVyZ2VbaV0tPmRzdCBpcyBhIGxvY2FsIHRyYWNraW5nIHJlZiB3aGljaCBzaG91bGQgYmUgbWVyZ2VkIGludG8gdGhpcworCSAqIGJyYW5jaCBieSBkZWZhdWx0LgorCSAqLwogCXN0cnVjdCByZWZzcGVjX2l0ZW0gKiptZXJnZTsKKworCS8qIFRoZSBudW1iZXIgb2YgbWVyZ2UgY29uZmlndXJhdGlvbnMgKi8KIAlpbnQgbWVyZ2VfbnI7CisKIAlpbnQgbWVyZ2VfYWxsb2M7CiAKIAljb25zdCBjaGFyICpwdXNoX3RyYWNraW5nX3JlZjsKQEAgLTIxNSw3ICsyNjQsOSBAQAogY29uc3QgY2hhciAqcmVtb3RlX3JlZl9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50IGZvcl9wdXNoLAogCQkJCSAgaW50ICpleHBsaWNpdCk7CiAKKy8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYnJhbmNoIGhhcyBtZXJnZSBjb25maWd1cmF0aW9uIGdpdmVuLiAqLwogaW50IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKHN0cnVjdCBicmFuY2ggKmJyYW5jaCk7CisKIGludCBicmFuY2hfbWVyZ2VfbWF0Y2hlcyhzdHJ1Y3QgYnJhbmNoICosIGludCBuLCBjb25zdCBjaGFyICopOwogCiAvKioKZGlmZiAtLWdpdCBhL3JlcG9zaXRvcnkuYyBiL3JlcG9zaXRvcnkuYwppbmRleCA2ODJjMjM5Li5hNDE3NGRkIDEwMDY0NAotLS0gYS9yZXBvc2l0b3J5LmMKKysrIGIvcmVwb3NpdG9yeS5jCkBAIC0yMDAsOSArMjAwLDkgQEAKIAogCWlmIChyZXBvX2luaXQoc3VicmVwbywgZ2l0ZGlyLmJ1Ziwgd29ya3RyZWUuYnVmKSkgewogCQkvKgotCQkgKiBJZiBpbml0aWxpemF0aW9uIGZhaWxzIHRoZW4gaXQgbWF5IGJlIGR1ZSB0byB0aGUgc3VibW9kdWxlCisJCSAqIElmIGluaXRpYWxpemF0aW9uIGZhaWxzIHRoZW4gaXQgbWF5IGJlIGR1ZSB0byB0aGUgc3VibW9kdWxlCiAJCSAqIG5vdCBiZWluZyBwb3B1bGF0ZWQgaW4gdGhlIHN1cGVycHJvamVjdCdzIHdvcmt0cmVlLiAgSW5zdGVhZAotCQkgKiB3ZSBjYW4gdHJ5IHRvIGluaXRpbGl6ZSB0aGUgc3VibW9kdWxlIGJ5IGZpbmRpbmcgaXQncyBnaXRkaXIKKwkJICogd2UgY2FuIHRyeSB0byBpbml0aWFsaXplIHRoZSBzdWJtb2R1bGUgYnkgZmluZGluZyBpdCdzIGdpdGRpcgogCQkgKiBpbiB0aGUgc3VwZXJwcm9qZWN0J3MgJ21vZHVsZXMnIGRpcmVjdG9yeS4gIEluIHRoaXMgY2FzZSB0aGUKIAkJICogc3VibW9kdWxlIHdvdWxkIG5vdCBoYXZlIGEgd29ya3RyZWUuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5oIGIvcmVwb3NpdG9yeS5oCmluZGV4IGZlNDIxOTcuLjA0MDA1N2QgMTAwNjQ0Ci0tLSBhL3JlcG9zaXRvcnkuaAorKysgYi9yZXBvc2l0b3J5LmgKQEAgLTE3Miw3ICsxNzIsNyBAQAogICogYmUgYWxsb2NhdGVkIGlmIG5lZWRlZC4KICAqCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpbmRleCBlbnRyaWVzIGluIHRoZSBwb3B1bGF0ZWQgaW5kZXggb3IgYSB2YWx1ZSBsZXNzCi0gKiB0aGFuIHplcm8gaWYgYW4gZXJyb3Igb2NjdXJlZC4gIElmIHRoZSByZXBvc2l0b3J5J3MgaW5kZXggaGFzIGFscmVhZHkgYmVlbgorICogdGhhbiB6ZXJvIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgSWYgdGhlIHJlcG9zaXRvcnkncyBpbmRleCBoYXMgYWxyZWFkeSBiZWVuCiAgKiBwb3B1bGF0ZWQgdGhlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2lsbCBzaW1wbHkgYmUgcmV0dXJuZWQuCiAgKi8KIGludCByZXBvX3JlYWRfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pOwpkaWZmIC0tZ2l0IGEvcmVyZXJlLmMgYi9yZXJlcmUuYwppbmRleCAzZTUxZmRmLi45MjgxMTMxIDEwMDY0NAotLS0gYS9yZXJlcmUuYworKysgYi9yZXJlcmUuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAgKiBhbmQgTlVMIGNvbmNhdGVuYXRlZCB0b2dldGhlci4KICAqCiAgKiBSZXR1cm4gMSBpZiBjb25mbGljdCBodW5rcyBhcmUgZm91bmQsIDAgaWYgdGhlcmUgYXJlIG5vIGNvbmZsaWN0Ci0gKiBodW5rcyBhbmQgLTEgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKyAqIGh1bmtzIGFuZCAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBoYW5kbGVfcGF0aCh1bnNpZ25lZCBjaGFyICpoYXNoLCBzdHJ1Y3QgcmVyZXJlX2lvICppbywgaW50IG1hcmtlcl9zaXplKQogewpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKaW5kZXggMGUzOWIyYi4uODEzNjkyOSAxMDA2NDQKLS0tIGEvcmV2aXNpb24uYworKysgYi9yZXZpc2lvbi5jCkBAIC0xNjY4LDcgKzE2NjgsNyBAQAogCQlyZXZzLT5kaWZmb3B0LnByZWZpeF9sZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKIAl9CiAKLQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKKwlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldnMtPm5vdGVzX29wdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKQEAgLTIyMDMsOSArMjIwMyw4IEBACiAJCQlkaWUoIiclcyc6IG5vdCBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIiwgYXJnKTsKIAkJcmV2cy0+ZXhwYW5kX3RhYnNfaW5fbG9nID0gdmFsOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNob3ctbm90ZXMiKSB8fCAhc3RyY21wKGFyZywgIi0tbm90ZXMiKSkgewotCQlyZXZzLT5zaG93X25vdGVzID0gMTsKKwkJZW5hYmxlX2RlZmF1bHRfZGlzcGxheV9ub3RlcygmcmV2cy0+bm90ZXNfb3B0LCAmcmV2cy0+c2hvd19ub3Rlcyk7CiAJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOwotCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNob3ctc2lnbmF0dXJlIikpIHsKIAkJcmV2cy0+c2hvd19zaWduYXR1cmUgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXNob3ctc2lnbmF0dXJlIikpIHsKQEAgLTIyMjAsMjUgKzIyMTksMTQgQEAKIAkJcmV2cy0+dHJhY2tfZmlyc3RfdGltZSA9IDE7CiAJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXNob3ctbm90ZXM9IiwgJm9wdGFyZykgfHwKIAkJICAgc2tpcF9wcmVmaXgoYXJnLCAiLS1ub3Rlcz0iLCAmb3B0YXJnKSkgewotCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCQlyZXZzLT5zaG93X25vdGVzID0gMTsKLQkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CiAJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXNob3ctbm90ZXM9IikgJiYKIAkJICAgIHJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA8IDApCiAJCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAxOwotCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdGFyZyk7Ci0JCWV4cGFuZF9ub3Rlc19yZWYoJmJ1Zik7Ci0JCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2cy0+bm90ZXNfb3B0LmV4dHJhX25vdGVzX3JlZnMsCi0JCQkJICAgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tbm90ZXMiKSkgewotCQlyZXZzLT5zaG93X25vdGVzID0gMDsKKwkJZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzKCZyZXZzLT5ub3Rlc19vcHQsICZyZXZzLT5zaG93X25vdGVzLCBvcHRhcmcpOwogCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKLQkJcmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID0gLTE7Ci0JCS8qIHdlIGhhdmUgYmVlbiBzdHJkdXAnaW5nIG91cnNlbHZlcywgc28gdHJpY2sKLQkJICogc3RyaW5nX2xpc3QgaW50byBmcmVlKClpbmcgc3RyaW5ncyAqLwotCQlyZXZzLT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcy5zdHJkdXBfc3RyaW5ncyA9IDE7Ci0JCXN0cmluZ19saXN0X2NsZWFyKCZyZXZzLT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywgMCk7Ci0JCXJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1ub3RlcyIpKSB7CisJCWRpc2FibGVfZGlzcGxheV9ub3RlcygmcmV2cy0+bm90ZXNfb3B0LCAmcmV2cy0+c2hvd19ub3Rlcyk7CisJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YW5kYXJkLW5vdGVzIikpIHsKIAkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CiAJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CkBAIC0zMDk4LDcgKzMwODYsNyBAQAogCiB2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCkKIHsKLQljbGVhcl9vYmplY3RfZmxhZ3MoU0VFTiB8IEFEREVEIHwgU0hPV04pOworCWNsZWFyX29iamVjdF9mbGFncyhTRUVOIHwgQURERUQgfCBTSE9XTiB8IFRPUE9fV0FMS19FWFBMT1JFRCB8IFRPUE9fV0FMS19JTkRFR1JFRSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFya191bmludGVyZXN0aW5nKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKQEAgLTMyMTEsMTAgKzMxOTksMjYgQEAKIAkJaW5kZWdyZWVfd2Fsa19zdGVwKHJldnMpOwogfQogCitzdGF0aWMgdm9pZCByZXNldF90b3BvX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCisJY2xlYXJfcHJpb19xdWV1ZSgmaW5mby0+ZXhwbG9yZV9xdWV1ZSk7CisJY2xlYXJfcHJpb19xdWV1ZSgmaW5mby0+aW5kZWdyZWVfcXVldWUpOworCWNsZWFyX3ByaW9fcXVldWUoJmluZm8tPnRvcG9fcXVldWUpOworCWNsZWFyX2luZGVncmVlX3NsYWIoJmluZm8tPmluZGVncmVlKTsKKwljbGVhcl9hdXRob3JfZGF0ZV9zbGFiKCZpbmZvLT5hdXRob3JfZGF0ZSk7CisKKwlGUkVFX0FORF9OVUxMKHJldnMtPnRvcG9fd2Fsa19pbmZvKTsKK30KKwogc3RhdGljIHZvaWQgaW5pdF90b3BvX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQogewogCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJaWYgKHJldnMtPnRvcG9fd2Fsa19pbmZvKQorCQlyZXNldF90b3BvX3dhbGsocmV2cyk7CisKIAlyZXZzLT50b3BvX3dhbGtfaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0b3BvX3dhbGtfaW5mbykpOwogCWluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCB0b3BvX3dhbGtfaW5mbykpOwpAQCAtMzk0NCw3ICszOTQ4LDcgQEAKIAlyZXR1cm4gYzsKIH0KIAotY2hhciAqZ2V0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCitjb25zdCBjaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkKIAkJcmV0dXJuICItIjsKQEAgLTM5NjYsNyArMzk3MCw3IEBACiAKIHZvaWQgcHV0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7Ci0JY2hhciAqbWFyayA9IGdldF9yZXZpc2lvbl9tYXJrKHJldnMsIGNvbW1pdCk7CisJY29uc3QgY2hhciAqbWFyayA9IGdldF9yZXZpc2lvbl9tYXJrKHJldnMsIGNvbW1pdCk7CiAJaWYgKCFzdHJsZW4obWFyaykpCiAJCXJldHVybjsKIAlmcHV0cyhtYXJrLCBzdGRvdXQpOwpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKaW5kZXggNDEzNGRjNi4uNDc1ZjA0OCAxMDA2NDQKLS0tIGEvcmV2aXNpb24uaAorKysgYi9yZXZpc2lvbi5oCkBAIC05LDYgKzksMTkgQEAKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAiY29tbWl0LXNsYWItZGVjbC5oIgogCisvKioKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSBvZmZlcnMgZnVuY3Rpb25zIHRvIGJ1aWxkIGEgbGlzdCBvZiByZXZpc2lvbnMKKyAqIGFuZCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGF0IGxpc3QuCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSB3YWxraW5nIEFQSSBoYXMgYSBnaXZlbiBjYWxsaW5nIHNlcXVlbmNlOiBmaXJzdCB5b3UgbmVlZCB0byBpbml0aWFsaXplCisgKiBhIHJldl9pbmZvIHN0cnVjdHVyZSwgdGhlbiBhZGQgcmV2aXNpb25zIHRvIGNvbnRyb2wgd2hhdCBraW5kIG9mIHJldmlzaW9uCisgKiBsaXN0IGRvIHlvdSB3YW50IHRvIGdldCwgZmluYWxseSB5b3UgY2FuIGl0ZXJhdGUgb3ZlciB0aGUgcmV2aXNpb24gbGlzdC4KKyAqCisgKi8KKwogLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KICNkZWZpbmUgU0VFTgkJKDF1PDwwKQogI2RlZmluZSBVTklOVEVSRVNUSU5HICAgKDF1PDwxKQpAQCAtMTc3LDEwICsxOTAsMTAgQEAKIAkJCWFsd2F5c19zaG93X2hlYWRlcjoxOwogCiAJLyogRm9ybWF0IGluZm8gKi8KKwlpbnQJCXNob3dfbm90ZXM7CiAJdW5zaWduZWQgaW50CXNob3duX29uZToxLAogCQkJc2hvd25fZGFzaGVzOjEsCiAJCQlzaG93X21lcmdlOjEsCi0JCQlzaG93X25vdGVzOjEsCiAJCQlzaG93X25vdGVzX2dpdmVuOjEsCiAJCQlzaG93X3NpZ25hdHVyZToxLAogCQkJcHJldHR5X2dpdmVuOjEsCkBAIC0zMDYsMTEgKzMxOSwyOSBAQAogI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUwogI2RlZmluZSBpbml0X3JldmlzaW9ucyhyZXZzLCBwcmVmaXgpIHJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIHJldnMsIHByZWZpeCkKICNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHRoaXJkIHBhcmFtZXRlciBtYXkKKyAqIGJlIE5VTEwgb3IgY2FuIGJlIHByZWZpeCBwYXRoLCBhbmQgdGhlbiB0aGUgYC5wcmVmaXhgIHZhcmlhYmxlIHdpbGwgYmUgc2V0CisgKiB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdSB3YW50IHRvIGNhbGwgd2hlbiB5b3Ugd2FudAorICogdG8gZGVhbCB3aXRoIGEgcmV2aXNpb24gbGlzdC4gQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8KKyAqIGN1c3RvbWl6ZSBvcHRpb25zLCBsaWtlIHNldCBgLmlnbm9yZV9tZXJnZXNgIHRvIDAgaWYgeW91IGRvbid0IHdhbnQgdG8KKyAqIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4KKyAqLwogdm9pZCByZXBvX2luaXRfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgpOworCisvKioKKyAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisgKiByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gUmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBhcmd1bWVudHMgbGVmdCB0aGF0IHdlcmVuJ3QgcmVjb2duaXplZCwgd2hpY2ggYXJlIGFsc28gbW92ZWQgdG8gdGhlCisgKiBoZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisgKiBwYXJhbWV0ZXIgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMuCisgKi8KIGludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworCiB2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKIAkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCiAJCQljb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CkBAIC0zMTksMTEgKzM1MCwyOCBAQAogaW50IGhhbmRsZV9yZXZpc2lvbl9hcmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCQlpbnQgZmxhZ3MsIHVuc2lnbmVkIHJldmFyZ19vcHQpOwogCisvKioKKyAqIFJlc2V0IHRoZSBmbGFncyB1c2VkIGJ5IHRoZSByZXZpc2lvbiB3YWxraW5nIGFwaS4gWW91IGNhbiB1c2UgdGhpcyB0byBkbworICogbXVsdGlwbGUgc2VxdWVudGlhbCByZXZpc2lvbiB3YWxrcy4KKyAqLwogdm9pZCByZXNldF9yZXZpc2lvbl93YWxrKHZvaWQpOworCisvKioKKyAqIFByZXBhcmVzIHRoZSByZXZfaW5mbyBzdHJ1Y3R1cmUgZm9yIGEgd2Fsay4gWW91IHNob3VsZCBjaGVjayBpZiBpdCByZXR1cm5zCisgKiBhbnkgZXJyb3IgKG5vbi16ZXJvIHJldHVybiBjb2RlKSBhbmQgaWYgaXQgZG9lcyBub3QsIHlvdSBjYW4gc3RhcnQgdXNpbmcKKyAqIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCisgKi8KIGludCBwcmVwYXJlX3JldmlzaW9uX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKTsKKworLyoqCisgKiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgcmV2X2luZm9gIHN0cnVjdHVyZSBhbmQgaXRlcmF0ZXMgb3ZlciBpdCwgcmV0dXJuaW5nIGEKKyAqIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUgcmV2aXNpb24gbGlzdCBpcworICogaW5kaWNhdGVkIGJ5IHJldHVybmluZyBhIE5VTEwgcG9pbnRlci4KKyAqLwogc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7Ci1jaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCi0JCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCitjb25zdCBjaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogdm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogCkBAIC0zMzMsOCArMzgxLDE5IEBACiAKIHZvaWQgc2hvd19vYmplY3Rfd2l0aF9uYW1lKEZJTEUgKiwgc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICopOwogCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisgKiBpbmZvcm1hdGlvbi4gWW91IGNhbiB1c2UgdGhlIGBVTklOVEVSRVNUSU5HYCBvYmplY3QgZmxhZyB0byBpbmRpY2F0ZSBpZgorICogeW91IHdhbnQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSBnaXZlbiBjb21taXQgKGFuZCBjb21taXRzIHJlYWNoYWJsZQorICogZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorICoKKyAqIE5PVEU6IElmIHlvdSBoYXZlIHRoZSBjb21taXRzIGFzIGEgc3RyaW5nIGxpc3QgdGhlbiB5b3UgcHJvYmFibHkgd2FudCB0bworICogdXNlIHNldHVwX3JldmlzaW9ucygpLCBpbnN0ZWFkIG9mIHBhcnNpbmcgZWFjaCBzdHJpbmcgYW5kIHVzaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOworCiB2b2lkIGFkZF9wZW5kaW5nX29pZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5jIGIvcnVuLWNvbW1hbmQuYwppbmRleCAzNDQ5ZGIzLi45OTQyZjEyIDEwMDY0NAotLS0gYS9ydW4tY29tbWFuZC5jCisrKyBiL3J1bi1jb21tYW5kLmMKQEAgLTQxMiw4ICs0MTIsNyBAQAogCWFyZ3ZfYXJyYXlfcHVzaChvdXQsIFNIRUxMX1BBVEgpOwogCiAJaWYgKGNtZC0+Z2l0X2NtZCkgewotCQlhcmd2X2FycmF5X3B1c2gob3V0LCAiZ2l0Iik7Ci0JCWFyZ3ZfYXJyYXlfcHVzaHYob3V0LCBjbWQtPmFyZ3YpOworCQlwcmVwYXJlX2dpdF9jbWQob3V0LCBjbWQtPmFyZ3YpOwogCX0gZWxzZSBpZiAoY21kLT51c2Vfc2hlbGwpIHsKIAkJcHJlcGFyZV9zaGVsbF9jbWQob3V0LCBjbWQtPmFyZ3YpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5oIGIvcnVuLWNvbW1hbmQuaAppbmRleCBmNzY5ZTAzLi41OTJkOWRjIDEwMDY0NAotLS0gYS9ydW4tY29tbWFuZC5oCisrKyBiL3J1bi1jb21tYW5kLmgKQEAgLTUsOCArNSw2MCBAQAogCiAjaW5jbHVkZSAiYXJndi1hcnJheS5oIgogCisvKioKKyAqIFRoZSBydW4tY29tbWFuZCBBUEkgb2ZmZXJzIGEgdmVyc2F0aWxlIHRvb2wgdG8gcnVuIHN1Yi1wcm9jZXNzZXMgd2l0aAorICogcmVkaXJlY3RlZCBpbnB1dCBhbmQgb3V0cHV0IGFzIHdlbGwgYXMgd2l0aCBhIG1vZGlmaWVkIGVudmlyb25tZW50CisgKiBhbmQgYW4gYWx0ZXJuYXRlIGN1cnJlbnQgZGlyZWN0b3J5LgorICoKKyAqIEEgc2ltaWxhciBBUEkgb2ZmZXJzIHRoZSBjYXBhYmlsaXR5IHRvIHJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LAorICogd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgdG8gY2FwdHVyZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZ1bmN0aW9uCisgKiBwcm9kdWNlcyBpbiB0aGUgY2FsbGVyIGluIG9yZGVyIHRvIHByb2Nlc3MgaXQuCisgKi8KKworCisvKioKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKKyAqIGNvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAxLiBhbGxvY2F0ZXMgYW5kIGNsZWFycyAodXNpbmcgY2hpbGRfcHJvY2Vzc19pbml0KCkgb3IKKyAqICAgIENISUxEX1BST0NFU1NfSU5JVCkgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB2YXJpYWJsZTsKKyAqIDIuIGluaXRpYWxpemVzIHRoZSBtZW1iZXJzOworICogMy4gY2FsbHMgc3RhcnRfY29tbWFuZCgpOworICogNC4gcHJvY2Vzc2VzIHRoZSBkYXRhOworICogNS4gY2xvc2VzIGZpbGUgZGVzY3JpcHRvcnMgKGlmIG5lY2Vzc2FyeTsgc2VlIGJlbG93KTsKKyAqIDYuIGNhbGxzIGZpbmlzaF9jb21tYW5kKCkuCisgKgorICogU3BlY2lhbCBmb3JtcyBvZiByZWRpcmVjdGlvbiBhcmUgYXZhaWxhYmxlIGJ5IHNldHRpbmcgdGhlc2UgbWVtYmVycworICogdG8gMToKKyAqCisgKiAgLm5vX3N0ZGluLCAubm9fc3Rkb3V0LCAubm9fc3RkZXJyOiBUaGUgcmVzcGVjdGl2ZSBjaGFubmVsIGlzCisgKgkJcmVkaXJlY3RlZCB0byAvZGV2L251bGwuCisgKgorICoJLnN0ZG91dF90b19zdGRlcnI6IHN0ZG91dCBvZiB0aGUgY2hpbGQgaXMgcmVkaXJlY3RlZCB0byBpdHMKKyAqCQlzdGRlcnIuIFRoaXMgaGFwcGVucyBhZnRlciBzdGRlcnIgaXMgaXRzZWxmIHJlZGlyZWN0ZWQuCisgKgkJU28gc3Rkb3V0IHdpbGwgZm9sbG93IHN0ZGVyciB0byB3aGVyZXZlciBpdCBpcworICoJCXJlZGlyZWN0ZWQuCisgKi8KIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHsKKworCS8qKgorCSAqIFRoZSAuYXJndiBtZW1iZXIgaXMgc2V0IHVwIGFzIGFuIGFycmF5IG9mIHN0cmluZyBwb2ludGVycyAoTlVMTAorCSAqIHRlcm1pbmF0ZWQpLCBvZiB3aGljaCAuYXJndlswXSBpcyB0aGUgcHJvZ3JhbSBuYW1lIHRvIHJ1biAodXN1YWxseQorCSAqIHdpdGhvdXQgYSBwYXRoKS4gSWYgdGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgZ2l0IGNvbW1hbmQsIHNldCBhcmd2WzBdIHRvCisJICogdGhlIGNvbW1hbmQgbmFtZSB3aXRob3V0IHRoZSAnZ2l0LScgcHJlZml4IGFuZCBzZXQgLmdpdF9jbWQgPSAxLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IC5hcmd2IHN0YXlzIHdpdGggdGhlCisJICogY2FsbGVyLCBidXQgaXQgc2hvdWxkIHN1cnZpdmUgdW50aWwgYGZpbmlzaF9jb21tYW5kYCBjb21wbGV0ZXMuIElmIHRoZQorCSAqIC5hcmd2IG1lbWJlciBpcyBOVUxMLCBgc3RhcnRfY29tbWFuZGAgd2lsbCBwb2ludCBpdCBhdCB0aGUgLmFyZ3MKKwkgKiBgYXJndl9hcnJheWAgKHNvIHlvdSBtYXkgdXNlIG9uZSBvciB0aGUgb3RoZXIsIGJ1dCB5b3UgbXVzdCB1c2UgZXhhY3RseQorCSAqIG9uZSkuIFRoZSBtZW1vcnkgaW4gLmFyZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisJICogYGZpbmlzaF9jb21tYW5kYCAob3IgZHVyaW5nIGBzdGFydF9jb21tYW5kYCB3aGVuIGl0IGlzIHVuc3VjY2Vzc2Z1bCkuCisJICoKKwkgKi8KIAljb25zdCBjaGFyICoqYXJndjsKKwogCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3M7CiAJc3RydWN0IGFyZ3ZfYXJyYXkgZW52X2FycmF5OwogCXBpZF90IHBpZDsKQEAgLTE4LDggKzcwLDggQEAKIAogCS8qCiAJICogVXNpbmcgLmluLCAub3V0LCAuZXJyOgotCSAqIC0gU3BlY2lmeSAwIGZvciBubyByZWRpcmVjdGlvbnMgKGNoaWxkIGluaGVyaXRzIHN0ZGluLCBzdGRvdXQsCi0JICogICBzdGRlcnIgZnJvbSBwYXJlbnQpLgorCSAqIC0gU3BlY2lmeSAwIGZvciBubyByZWRpcmVjdGlvbnMuIE5vIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgYWxsb2NhdGVkLgorCSAqIChjaGlsZCBpbmhlcml0cyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgZnJvbSBwYXJlbnQpLgogCSAqIC0gU3BlY2lmeSAtMSB0byBoYXZlIGEgcGlwZSBhbGxvY2F0ZWQgYXMgZm9sbG93czoKIAkgKiAgICAgLmluOiByZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZDsgcGFyZW50IHdyaXRlcyB0byBpdCwKIAkgKiAgICAgICAgICB0aGUgcmVhZGFibGUgcGlwZSBlbmQgYmVjb21lcyBjaGlsZCdzIHN0ZGluCkBAIC0zNywxMyArODksNDMgQEAKIAlpbnQgaW47CiAJaW50IG91dDsKIAlpbnQgZXJyOworCisJLyoqCisJICogVG8gc3BlY2lmeSBhIG5ldyBpbml0aWFsIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgc3ViLXByb2Nlc3MsCisJICogc3BlY2lmeSBpdCBpbiB0aGUgLmRpciBtZW1iZXIuCisJICovCiAJY29uc3QgY2hhciAqZGlyOworCisJLyoqCisJICogVG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgc3ViLXByb2Nlc3MsIHNwZWNpZnkgYW4gYXJyYXkgb2YKKwkgKiBzdHJpbmcgcG9pbnRlcnMgKE5VTEwgdGVybWluYXRlZCkgaW4gLmVudjoKKwkgKgorCSAqIC0gSWYgdGhlIHN0cmluZyBpcyBvZiB0aGUgZm9ybSAiVkFSPXZhbHVlIiwgaS5lLiBpdCBjb250YWlucyAnPScKKwkgKiAgIHRoZSB2YXJpYWJsZSBpcyBhZGRlZCB0byB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgorCSAqCisJICogLSBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gJz0nLCBpdCBuYW1lcyBhbiBlbnZpcm9ubWVudAorCSAqICAgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgorCSAqCisJICogSWYgdGhlIC5lbnYgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZQorCSAqIC5lbnZfYXJyYXkgYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgbm90IGJvdGgpLgorCSAqIFRoZSBtZW1vcnkgaW4gLmVudl9hcnJheSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKKwkgKiBgZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KKwkgKi8KIAljb25zdCBjaGFyICpjb25zdCAqZW52OworCiAJdW5zaWduZWQgbm9fc3RkaW46MTsKIAl1bnNpZ25lZCBub19zdGRvdXQ6MTsKIAl1bnNpZ25lZCBub19zdGRlcnI6MTsKLQl1bnNpZ25lZCBnaXRfY21kOjE7IC8qIGlmIHRoaXMgaXMgdG8gYmUgZ2l0IHN1Yi1jb21tYW5kICovCisgICAgdW5zaWduZWQgZ2l0X2NtZDoxOyAvKiBpZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworCisJLyoqCisJICogSWYgdGhlIHByb2dyYW0gY2Fubm90IGJlIGZvdW5kLCB0aGUgZnVuY3Rpb25zIHJldHVybiAtMSBhbmQgc2V0CisJICogZXJybm8gdG8gRU5PRU5ULiBOb3JtYWxseSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBidXQgaWYKKwkgKiAuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCisJICogc3BlY2lhbCBlcnJvciBjb25kaXRpb24uCisJICovCiAJdW5zaWduZWQgc2lsZW50X2V4ZWNfZmFpbHVyZToxOworCiAJdW5zaWduZWQgc3Rkb3V0X3RvX3N0ZGVycjoxOwogCXVuc2lnbmVkIHVzZV9zaGVsbDoxOwogCXVuc2lnbmVkIGNsZWFuX29uX2V4aXQ6MTsKQEAgLTUzLDEzICsxMzUsNjMgQEAKIH07CiAKICNkZWZpbmUgQ0hJTERfUFJPQ0VTU19JTklUIHsgTlVMTCwgQVJHVl9BUlJBWV9JTklULCBBUkdWX0FSUkFZX0lOSVQgfQorCisvKioKKyAqIFRoZSBmdW5jdGlvbnM6IGNoaWxkX3Byb2Nlc3NfaW5pdCwgc3RhcnRfY29tbWFuZCwgZmluaXNoX2NvbW1hbmQsCisgKiBydW5fY29tbWFuZCwgcnVuX2NvbW1hbmRfdl9vcHQsIHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2VudiwgY2hpbGRfcHJvY2Vzc19jbGVhcgorICogZG8gdGhlIGZvbGxvd2luZzoKKyAqCisgKiAtIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKKyAqICAgaXMgcHJpbnRlZC4KKyAqCisgKiAtIElmIHRoZSBwcm9ncmFtIHdhcyBub3QgZm91bmQsIHRoZW4gLTEgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCB0bworICogICBFTk9FTlQ7IGEgZGlhZ25vc3RpYyBpcyBwcmludGVkIG9ubHkgaWYgLnNpbGVudF9leGVjX2ZhaWx1cmUgaXMgMC4KKyAqCisgKiAtIE90aGVyd2lzZSwgdGhlIHByb2dyYW0gaXMgcnVuLiBJZiBpdCB0ZXJtaW5hdGVzIHJlZ3VsYXJseSwgaXRzIGV4aXQKKyAqICAgY29kZSBpcyByZXR1cm5lZC4gTm8gZGlhZ25vc3RpYyBpcyBwcmludGVkLCBldmVuIGlmIHRoZSBleGl0IGNvZGUgaXMKKyAqICAgbm9uLXplcm8uCisgKgorICogLSBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICogICBzaWduYWwgbnVtYmVyICsgMTI4LCBpZS4gdGhlIHNhbWUgdmFsdWUgdGhhdCBhIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQKKyAqICAgcmVwb3J0LiAgQSBkaWFnbm9zdGljIGlzIHByaW50ZWQuCisgKgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlLgorICovCiB2b2lkIGNoaWxkX3Byb2Nlc3NfaW5pdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworLyoqCisgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJ1Y3QgY2hpbGRfcHJvY2Vzcy4KKyAqIE1vc3QgdXNlcnMgb2YgdGhlIHJ1bi1jb21tYW5kIEFQSSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gZXhwbGljaXRseSBiZWNhdXNlIGBzdGFydF9jb21tYW5kYCBpbnZva2VzIGl0IG9uCisgKiBmYWlsdXJlIGFuZCBgZmluaXNoX2NvbW1hbmRgIGNhbGxzIGl0IGF1dG9tYXRpY2FsbHkgYWxyZWFkeS4KKyAqLwogdm9pZCBjaGlsZF9wcm9jZXNzX2NsZWFyKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCiBpbnQgaXNfZXhlY3V0YWJsZShjb25zdCBjaGFyICpuYW1lKTsKIAorLyoqCisgKiBTdGFydCBhIHN1Yi1wcm9jZXNzLiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCisgKiB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBwaXBlIEZEcyAoaWYgcmVxdWVzdGVkKS4KKyAqIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKyAqLwogaW50IHN0YXJ0X2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKKy8qKgorICogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYSBzdWItcHJvY2VzcyB0aGF0IHdhcyBzdGFydGVkIHdpdGgKKyAqIHN0YXJ0X2NvbW1hbmQoKS4KKyAqLwogaW50IGZpbmlzaF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCiBpbnQgZmluaXNoX2NvbW1hbmRfaW5fc2lnbmFsKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCisvKioKKyAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzZXF1ZW5jZSBvZgorICogc3RhcnRfY29tbWFuZCgpIGZvbGxvd2VkIGJ5IGZpbmlzaF9jb21tYW5kKCkuIFRha2VzIGEgcG9pbnRlcgorICogdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgIHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzLgorICovCiBpbnQgcnVuX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CiAKIC8qCkBAIC02OCw2ICsyMDAsMjAgQEAKICAqIG92ZXJ3cml0dGVuIGJ5IGZ1cnRoZXIgY2FsbHMgdG8gZmluZF9ob29rIGFuZCBydW5faG9va18qLgogICovCiBjb25zdCBjaGFyICpmaW5kX2hvb2soY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogUnVuIGEgaG9vay4KKyAqIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBhdGhuYW1lIHRvIGFuIGluZGV4IGZpbGUsIG9yIE5VTEwKKyAqIGlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCisgKiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBob29rLgorICogVGhlIGZ1cnRoZXIgYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gdGhlIGhvb2sgYXJndW1lbnRzLgorICogVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KKyAqIElmIHRoZSBob29rIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBleGVjdXRhYmxlLCB0aGUgcmV0dXJuCisgKiB2YWx1ZSB3aWxsIGJlIHplcm8uCisgKiBJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAorICogc3RhdHVzIG9mIHRoZSBob29rIGlzIHJldHVybmVkLgorICogT24gZXhlY3V0aW9uLCAuc3Rkb3V0X3RvX3N0ZGVyciBhbmQgLm5vX3N0ZGluIHdpbGwgYmUgc2V0LgorICovCiBMQVNUX0FSR19NVVNUX0JFX05VTEwKIGludCBydW5faG9va19sZShjb25zdCBjaGFyICpjb25zdCAqZW52LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pOwogaW50IHJ1bl9ob29rX3ZlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIHZhX2xpc3QgYXJncyk7CkBAIC03OCw2ICsyMjQsMTggQEAKICNkZWZpbmUgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgOAogI2RlZmluZSBSVU5fVVNJTkdfU0hFTEwgMTYKICNkZWZpbmUgUlVOX0NMRUFOX09OX0VYSVQgMzIKKworLyoqCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhhdCBlbmNhcHN1bGF0ZSBhIHNlcXVlbmNlIG9mCisgKiBzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKKyAqIHNwZWNpZmllcyB0aGUgcHJvZ3JhbSBhbmQgaXRzIGFyZ3VtZW50cy4gVGhlIGFyZ3VtZW50IG9wdCBpcyB6ZXJvCisgKiBvciBtb3JlIG9mIHRoZSBmbGFncyBgUlVOX0NPTU1BTkRfTk9fU1RESU5gLCBgUlVOX0dJVF9DTURgLAorICogYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgLCBvciBgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkVgCisgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgLm5vX3N0ZGluLCAuZ2l0X2NtZCwKKyAqIC5zdGRvdXRfdG9fc3RkZXJyLCAuc2lsZW50X2V4ZWNfZmFpbHVyZSBvZiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgLgorICogVGhlIGFyZ3VtZW50IGRpciBjb3JyZXNwb25kcyB0aGUgbWVtYmVyIC5kaXIuIFRoZSBhcmd1bWVudCBlbnYKKyAqIGNvcnJlc3BvbmRzIHRvIHRoZSBtZW1iZXIgLmVudi4KKyAqLwogaW50IHJ1bl9jb21tYW5kX3Zfb3B0KGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0KTsKIGludCBydW5fY29tbWFuZF92X29wdF90cjIoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKnRyMl9jbGFzcyk7CiAvKgpAQCAtMTI1LDE1ICsyODMsODQgQEAKICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgbm8gc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwgZXhjbHVzaW9uIGJldHdlZW4KICAqIHRoZSBjYWxsZXIgYW5kIHRoZSBmZWVkIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdW5jdGlvbgogICogY2FuIHJ1biBpbiBhIHRocmVhZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgY2FsbGVyOgorICoKKyAqIDEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQorICogICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOworICogMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOworICogMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKKyAqIDQuIHByb2Nlc3NlcyBjb21tdW5pY2F0ZXMgd2l0aCBwcm9jIHRocm91Z2ggLmluIGFuZCAub3V0OworICogNS4gY2xvc2VzIC5pbiBhbmQgLm91dDsKKyAqIDYuIGNhbGxzIGZpbmlzaF9hc3luYygpLgorICoKKyAqIFRoZXJlIGFyZSBzZXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB3aGF0IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY2FuIGRvCisgKiBiZWNhdXNlIHRoaXMgZmFjaWxpdHkgaXMgaW1wbGVtZW50ZWQgYnkgYSB0aHJlYWQgaW4gdGhlIHNhbWUgYWRkcmVzcworICogc3BhY2Ugb24gbW9zdCBwbGF0Zm9ybXMgKHdoZW4gcHRocmVhZHMgaXMgYXZhaWxhYmxlKSwgYnV0IGJ5IGEgcGlwZSB0bworICogYSBmb3JrZWQgcHJvY2VzcyBvdGhlcndpc2U6CisgKgorICogLSBJdCBjYW5ub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgKGdsb2JhbCB2YXJpYWJsZXMsIGVudmlyb25tZW50LAorICogICBldGMuKSBpbiBhIHdheSB0aGF0IHRoZSBjYWxsZXIgbm90aWNlczsgaW4gb3RoZXIgd29yZHMsIC5pbiBhbmQgLm91dAorICogICBhcmUgdGhlIG9ubHkgY29tbXVuaWNhdGlvbiBjaGFubmVscyB0byB0aGUgY2FsbGVyLgorICoKKyAqIC0gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQorICogICBmYWNpbGl0eSBhbHNvIHVzZXMuCisgKgogICovCiBzdHJ1Y3QgYXN5bmMgewotCS8qCi0JICogcHJvYyByZWFkcyBmcm9tIGluOyBjbG9zZXMgaXQgYmVmb3JlIHJldHVybgotCSAqIHByb2Mgd3JpdGVzIHRvIG91dDsgY2xvc2VzIGl0IGJlZm9yZSByZXR1cm4KLQkgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorCisJLyoqCisJICogVGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW4gLnByb2MgaGFzIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgorCSAqCisJICoJaW50IHByb2MoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKKwkgKgorCSAqIC0gaW4sIG91dCBzcGVjaWZpZXMgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCB0aGUgZnVuY3Rpb24KKwkgKiAgbXVzdCByZWFkL3dyaXRlIHRoZSBkYXRhIHRoYXQgaXQgbmVlZHMvcHJvZHVjZXMuICBUaGUgZnVuY3Rpb24KKwkgKiAgKm11c3QqIGNsb3NlIHRoZXNlIGRlc2NyaXB0b3JzIGJlZm9yZSBpdCByZXR1cm5zLiAgQSBkZXNjcmlwdG9yCisJICogIG1heSBiZSAtMSBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29uZmlndXJlIGEgZGVzY3JpcHRvciBmb3IgdGhhdAorCSAqICBkaXJlY3Rpb24uCisJICoKKwkgKiAtIGRhdGEgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIGNhbGxlciBoYXMgc3BlY2lmaWVkIGluIHRoZSAuZGF0YSBtZW1iZXIKKwkgKiAgb2Ygc3RydWN0IGFzeW5jLgorCSAqCisJICogLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyAwIG9uIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvCisJICogIG9uIGZhaWx1cmUuIElmIHRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgZmFpbHVyZSwgZmluaXNoX2FzeW5jKCkgd2lsbAorCSAqICByZXBvcnQgZmFpbHVyZSBhcyB3ZWxsLgorCSAqCiAJICovCiAJaW50ICgqcHJvYykoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKKwogCXZvaWQgKmRhdGE7CisKKwkvKioKKwkgKiBUaGUgbWVtYmVycyAuaW4sIC5vdXQgYXJlIHVzZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBmZCdzIGZvcgorCSAqIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGVyIGFuZCB0aGUgY2FsbGVlIGFzIGZvbGxvd3M6CisJICoKKwkgKiAtIFNwZWNpZnkgMCB0byBoYXZlIG5vIGZpbGUgZGVzY3JpcHRvciBwYXNzZWQuICBUaGUgY2FsbGVlIHdpbGwKKwkgKiAgIHJlY2VpdmUgLTEgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisJICoKKwkgKiAtIFNwZWNpZnkgPCAwIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfYXN5bmMoKSByZXBsYWNlcworCSAqICAgd2l0aCB0aGUgcGlwZSBGRCBpbiB0aGUgZm9sbG93aW5nIHdheToKKwkgKgorCSAqIAkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlcgorCSAqIAl3cml0ZXM7IHRoZSByZWFkYWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCSAqIAlpbiBhcmd1bWVudC4KKwkgKgorCSAqIAkub3V0OiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKKwkgKiAJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCSAqIAlvdXQgYXJndW1lbnQuCisJICoKKwkgKiAgIFRoZSBjYWxsZXIgb2Ygc3RhcnRfYXN5bmMoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMgYWZ0ZXIgaXQKKwkgKiAgIGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgZnJvbSB0aGVtLgorCSAqCisJICogLSBTcGVjaWZ5IGEgZmlsZSBkZXNjcmlwdG9yID4gMCB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbjoKKwkgKgorCSAqIAkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIGluLgorCSAqIAkub3V0OiBUaGUgRkQgbXVzdCBiZSB3cml0YWJsZTsgaXQgYmVjb21lcyB0aGUgZnVuY3Rpb24ncyBvdXQuCisJICoKKwkgKiAgIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2FzeW5jKCksIGV2ZW4gaWYgaXQgZmFpbHMgdG8KKwkgKiAgIHJ1biB0aGUgZnVuY3Rpb24uCisJICovCiAJaW50IGluOwkJLyogY2FsbGVyIHdyaXRlcyBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KIAlpbnQgb3V0OwkvKiBjYWxsZXIgcmVhZHMgZnJvbSBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KICNpZmRlZiBOT19QVEhSRUFEUwpAQCAtMTQ2LDggKzM3MywxOSBAQAogCWludCBpc29sYXRlX3NpZ3BpcGU7CiB9OwogCisvKioKKyAqIFJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0CisgKiBhc3luY2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgYSBzZXQgb2YgcGlwZSBGRHMKKyAqIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisgKi8KIGludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKTsKKworLyoqCisgKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCB3YXMKKyAqIHN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgorICovCiBpbnQgZmluaXNoX2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOworCiBpbnQgaW5fYXN5bmModm9pZCk7CiBpbnQgYXN5bmNfd2l0aF9mb3JrKHZvaWQpOwogdm9pZCBjaGVja19waXBlKGludCBlcnIpOwpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmMgYi9zZW5kLXBhY2suYwppbmRleCAzNGM3N2NiLi4wNDA3ODQxIDEwMDY0NAotLS0gYS9zZW5kLXBhY2suYworKysgYi9zZW5kLXBhY2suYwpAQCAtNDEsNyArNDEsOSBAQAogc3RhdGljIHZvaWQgZmVlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBGSUxFICpmaCwgaW50IG5lZ2F0aXZlKQogewogCWlmIChuZWdhdGl2ZSAmJgotCSAgICAhaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mob2lkLCBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCisJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyhvaWQsCisJCQkJCU9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUIHwKKwkJCQkJT0JKRUNUX0lORk9fUVVJQ0spKQogCQlyZXR1cm47CiAKIAlpZiAobmVnYXRpdmUpCkBAIC01NjUsOCArNTY3LDYgQEAKIAogCWlmIChuZWVkX3BhY2tfZGF0YSAmJiBjbWRzX3NlbnQpIHsKIAkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKLQkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQotCQkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19OT05FOwogCQkJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCiAJCQkJY2xvc2Uob3V0KTsKIAkJCWlmIChnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoY29ubikpCkBAIC01NzQsMTAgKzU3NCwxMiBAQAogCiAJCQkvKgogCQkJICogRG8gbm90IGV2ZW4gYm90aGVyIHdpdGggdGhlIHJldHVybiB2YWx1ZTsgd2Uga25vdyB3ZQotCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLgorCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLAorCQkJICogYXMgd2VsbCBhcyBtYXJraW5nIHJlZnMgd2l0aCB0aGVpciByZW1vdGUgc3RhdHVzIChpZgorCQkJICogd2UgZ2V0IG9uZSkuCiAJCQkgKi8KIAkJCWlmIChzdGF0dXNfcmVwb3J0KQotCQkJCXJlY2VpdmVfdW5wYWNrX3N0YXR1cygmcmVhZGVyKTsKKwkJCQlyZWNlaXZlX3N0YXR1cygmcmVhZGVyLCByZW1vdGVfcmVmcyk7CiAKIAkJCWlmICh1c2Vfc2lkZWJhbmQpIHsKIAkJCQljbG9zZShkZW11eC5vdXQpOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmMgYi9zZXF1ZW5jZXIuYwppbmRleCA5ZDU5NjRmLi43NjNjY2JiIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuYworKysgYi9zZXF1ZW5jZXIuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJInJlYmFzZS1tZXJnZS9yZXdyaXR0ZW4tcGVuZGluZyIpCiAKIC8qCi0gKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBjb250YWluaWcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KKyAqIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KICAqIHRoZSBkdW1teSBjb21taXQgdXNlZCBmb3IgYHJlc2V0IFtuZXcgcm9vdF1gLgogICovCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zcXVhc2hfb250bywgInJlYmFzZS1tZXJnZS9zcXVhc2gtb250byIpCkBAIC0xNDcsNiArMTQ3LDggQEAKICAqIGNvbW1hbmQtbGluZS4KICAqLwogc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0LCAicmViYXNlLW1lcmdlL2dwZ19zaWduX29wdCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9jZGF0ZV9pc19hZGF0ZSwgInJlYmFzZS1tZXJnZS9jZGF0ZV9pc19hZGF0ZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSwgInJlYmFzZS1tZXJnZS9pZ25vcmVfZGF0ZSIpCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9vcmlnX2hlYWQsICJyZWJhc2UtbWVyZ2Uvb3JpZy1oZWFkIikKIHN0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3ZlcmJvc2UsICJyZWJhc2UtbWVyZ2UvdmVyYm9zZSIpCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9xdWlldCwgInJlYmFzZS1tZXJnZS9xdWlldCIpCkBAIC04MjMsOSArODI1LDE5IEBACiAJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciKSk7CiAJaWYgKGRhdGVfaSA8IDAgfHwgZW1haWxfaSA8IDAgfHwgZGF0ZV9pIDwgMCB8fCBlcnIpCiAJCWdvdG8gZmluaXNoOwotCSpuYW1lID0ga3YuaXRlbXNbbmFtZV9pXS51dGlsOwotCSplbWFpbCA9IGt2Lml0ZW1zW2VtYWlsX2ldLnV0aWw7Ci0JKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisKKwlpZiAobmFtZSkKKwkJKm5hbWUgPSBrdi5pdGVtc1tuYW1lX2ldLnV0aWw7CisJZWxzZQorCQlmcmVlKGt2Lml0ZW1zW25hbWVfaV0udXRpbCk7CisJaWYgKGVtYWlsKQorCQkqZW1haWwgPSBrdi5pdGVtc1tlbWFpbF9pXS51dGlsOworCWVsc2UKKwkJZnJlZShrdi5pdGVtc1tlbWFpbF9pXS51dGlsKTsKKwlpZiAoZGF0ZSkKKwkJKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisJZWxzZQorCQlmcmVlKGt2Lml0ZW1zW2RhdGVfaV0udXRpbCk7CiAJcmV0dmFsID0gMDsKIGZpbmlzaDoKIAlzdHJpbmdfbGlzdF9jbGVhcigma3YsICEhcmV0dmFsKTsKQEAgLTg2OCw2ICs4ODAsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyogUmV0dXJucyBhICJkYXRlIiBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBmcmVlKCknZCBieSB0aGUgY2FsbGVyICovCitzdGF0aWMgY2hhciAqcmVhZF9hdXRob3JfZGF0ZV9vcl9udWxsKHZvaWQpCit7CisJY2hhciAqZGF0ZTsKKworCWlmIChyZWFkX2F1dGhvcl9zY3JpcHQocmViYXNlX3BhdGhfYXV0aG9yX3NjcmlwdCgpLAorCQkJICAgICAgIE5VTEwsIE5VTEwsICZkYXRlLCAwKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGRhdGU7Cit9CisKKy8qIENvbnN0cnVjdCBhIGZyZWUoKWFibGUgYXV0aG9yIHN0cmluZyB3aXRoIGN1cnJlbnQgdGltZSBhcyB0aGUgYXV0aG9yIGRhdGUgKi8KK3N0YXRpYyBjaGFyICppZ25vcmVfYXV0aG9yX2RhdGUoY29uc3QgY2hhciAqYXV0aG9yKQoreworCWludCBsZW4gPSBzdHJsZW4oYXV0aG9yKTsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisJc3RydWN0IHN0cmJ1ZiBuZXdfYXV0aG9yID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGF1dGhvciwgbGVuKSA8IDApIHsKKwkJZXJyb3IoXygibWFsZm9ybWVkIGlkZW50IGxpbmUiKSk7CisJCXJldHVybiBOVUxMOworCX0KKwlsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW4gKyAxOworCisJc3RyYnVmX2FkZGYoJm5ld19hdXRob3IsICIlLipzICIsIGxlbiwgaWRlbnQubmFtZV9iZWdpbik7CisJZGF0ZXN0YW1wKCZuZXdfYXV0aG9yKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmbmV3X2F1dGhvciwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfZGF0ZXMoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkLCBpbnQgY2hhbmdlX2NvbW1pdHRlcl9kYXRlKQoreworCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworCXN0cnVjdCBzdHJidWYgZGF0ZSA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmRhdGUsICJAJSJQUkl1TUFYLCAodWludG1heF90KW5vdyk7CisJYXJndl9hcnJheV9wdXNoZigmY2hpbGQtPmVudl9hcnJheSwgIkdJVF9BVVRIT1JfREFURT0lcyIsIGRhdGUuYnVmKTsKKwlpZiAoY2hhbmdlX2NvbW1pdHRlcl9kYXRlKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC0+ZW52X2FycmF5LCAiR0lUX0NPTU1JVFRFUl9EQVRFPSVzIiwgZGF0ZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZkYXRlKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgc3RhZ2VkX2NoYW5nZXNfYWR2aWNlW10gPQogTl8oInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCiAiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCkBAIC05MjcsNiArOTgwLDI1IEBACiAKIAljbWQuZ2l0X2NtZCA9IDE7CiAKKwlpZiAob3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpIHsKKwkJaW50IHJlcyA9IC0xOworCQlzdHJ1Y3Qgc3RyYnVmIGRhdGVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY2hhciAqZGF0ZSA9IHJlYWRfYXV0aG9yX2RhdGVfb3JfbnVsbCgpOworCisJCWlmICghZGF0ZSkKKwkJCXJldHVybiAtMTsKKworCQlzdHJidWZfYWRkZigmZGF0ZWJ1ZiwgIkAlcyIsIGRhdGUpOworCQlyZXMgPSBzZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIsCisJCQkgICAgIG9wdHMtPmlnbm9yZV9kYXRlID8gIiIgOiBkYXRlYnVmLmJ1ZiwgMSk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJmRhdGVidWYpOworCQlmcmVlKGRhdGUpOworCisJCWlmIChyZXMpCisJCQlyZXR1cm4gLTE7CisJfQorCiAJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmIHJlYWRfZW52X3NjcmlwdCgmY21kLmVudl9hcnJheSkpIHsKIAkJY29uc3QgY2hhciAqZ3BnX29wdCA9IGdwZ19zaWduX29wdF9xdW90ZWQob3B0cyk7CiAKQEAgLTk0Miw2ICsxMDE0LDggQEAKIAkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tYW1lbmQiKTsKIAlpZiAob3B0cy0+Z3BnX3NpZ24pCiAJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiLVMlcyIsIG9wdHMtPmdwZ19zaWduKTsKKwlpZiAob3B0cy0+aWdub3JlX2RhdGUpCisJCXB1c2hfZGF0ZXMoJmNtZCwgb3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpOwogCWlmIChkZWZtc2cpCiAJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNtZC5hcmdzLCAiLUYiLCBkZWZtc2csIE5VTEwpOwogCWVsc2UgaWYgKCEoZmxhZ3MgJiBFRElUX01TRykpCkBAIC0xMTI2LDI1ICsxMjAwLDIyIEBACiAJCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm1zZywKIAkJCQkgICAgICAgY29uc3QgY2hhciAqY29tbWl0KQogewotCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOwotCWludCByZXQ7Ci0JY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCBjaGFyICpuYW1lLCAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKIAogCW5hbWUgPSBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpOwogCWlmICh3cml0ZV9tZXNzYWdlKG1zZy0+YnVmLCBtc2ctPmxlbiwgbmFtZSwgMCkpCiAJCXJldHVybiAtMTsKIAotCWFyZ3ZfYXJyYXlfcHVzaGYoJmhvb2tfZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCByLT5pbmRleF9maWxlKTsKLQlhcmd2X2FycmF5X3B1c2goJmhvb2tfZW52LCAiR0lUX0VESVRPUj06Iik7Ci0JaWYgKGNvbW1pdCkKLQkJcmV0ID0gcnVuX2hvb2tfbGUoaG9va19lbnYuYXJndiwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCi0JCQkJICAiY29tbWl0IiwgY29tbWl0LCBOVUxMKTsKLQllbHNlCi0JCXJldCA9IHJ1bl9ob29rX2xlKGhvb2tfZW52LmFyZ3YsICJwcmVwYXJlLWNvbW1pdC1tc2ciLCBuYW1lLAotCQkJCSAgIm1lc3NhZ2UiLCBOVUxMKTsKLQlpZiAocmV0KQorCWlmIChjb21taXQpIHsKKwkJYXJnMSA9ICJjb21taXQiOworCQlhcmcyID0gY29tbWl0OworCX0gZWxzZSB7CisJCWFyZzEgPSAibWVzc2FnZSI7CisJfQorCWlmIChydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCisJCQkgICAgYXJnMSwgYXJnMiwgTlVMTCkpCiAJCXJldCA9IGVycm9yKF8oIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIikpOwotCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzEzLDE0ICsxMzg0LDEzIEBACiAJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBzdHJidWYgY29tbWl0X21zZyA9IFNUUkJVRl9JTklUOwotCWNoYXIgKmFtZW5kX2F1dGhvciA9IE5VTEw7CisJY2hhciAqYXV0aG9yX3RvX2ZyZWUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmhvb2tfY29tbWl0ID0gTlVMTDsKIAllbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXA7CiAJaW50IHJlcyA9IDA7CiAKIAlpZiAocGFyc2VfaGVhZChyLCAmY3VycmVudF9oZWFkKSkKIAkJcmV0dXJuIC0xOwotCiAJaWYgKGZsYWdzICYgQU1FTkRfTVNHKSB7CiAJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnW10gPSB7ICJncGdzaWciLCBOVUxMIH07CiAJCWNvbnN0IGNoYXIgKm91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOwpAQCAtMTMzNSw3ICsxNDA1LDcgQEAKIAkJCXN0cmJ1Zl9hZGRzdHIobXNnLCBvcmlnX21lc3NhZ2UpOwogCQkJaG9va19jb21taXQgPSAiSEVBRCI7CiAJCX0KLQkJYXV0aG9yID0gYW1lbmRfYXV0aG9yID0gZ2V0X2F1dGhvcihtZXNzYWdlKTsKKwkJYXV0aG9yID0gYXV0aG9yX3RvX2ZyZWUgPSBnZXRfYXV0aG9yKG1lc3NhZ2UpOwogCQl1bnVzZV9jb21taXRfYnVmZmVyKGN1cnJlbnRfaGVhZCwgbWVzc2FnZSk7CiAJCWlmICghYXV0aG9yKSB7CiAJCQlyZXMgPSBlcnJvcihfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIpKTsKQEAgLTEzNDgsMTYgKzE0MTgsNTcgQEAKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGN1cnJlbnRfaGVhZCwgJnBhcmVudHMpOwogCX0KIAorCWlmIChvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSkgeworCQlpbnQgbGVuID0gc3RybGVuKGF1dGhvcik7CisJCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwkJc3RydWN0IHN0cmJ1ZiBkYXRlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBhdXRob3IsIGxlbikgPCAwKSB7CisJCQlyZXMgPSBlcnJvcihfKCJtYWxmb3JtZWQgaWRlbnQgbGluZSIpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICghaWRlbnQuZGF0ZV9iZWdpbikgeworCQkJcmVzID0gZXJyb3IoXygiY29ycnVwdGVkIGF1dGhvciB3aXRob3V0IGRhdGUgaW5mb3JtYXRpb24iKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXN0cmJ1Zl9hZGRmKCZkYXRlLCAiQCUuKnMgJS4qcyIsCisJCQkgICAgKGludCkoaWRlbnQuZGF0ZV9lbmQgLSBpZGVudC5kYXRlX2JlZ2luKSwgaWRlbnQuZGF0ZV9iZWdpbiwKKwkJCSAgICAoaW50KShpZGVudC50el9lbmQgLSBpZGVudC50el9iZWdpbiksIGlkZW50LnR6X2JlZ2luKTsKKwkJcmVzID0gc2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiLAorCQkJICAgICBvcHRzLT5pZ25vcmVfZGF0ZSA/ICIiIDogZGF0ZS5idWYsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmZGF0ZSk7CisKKwkJaWYgKHJlcykKKwkJCWdvdG8gb3V0OworCX0KKwogCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZ0cmVlLCByLT5pbmRleCwgci0+aW5kZXhfZmlsZSwgMCwgTlVMTCkpIHsKIAkJcmVzID0gZXJyb3IoXygiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCEoZmxhZ3MgJiBBTExPV19FTVBUWSkgJiYgb2lkZXEoY3VycmVudF9oZWFkID8KLQkJCQkJICAgIGdldF9jb21taXRfdHJlZV9vaWQoY3VycmVudF9oZWFkKSA6Ci0JCQkJCSAgICB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLCAmdHJlZSkpIHsKLQkJcmVzID0gMTsgLyogcnVuICdnaXQgY29tbWl0JyB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgKi8KLQkJZ290byBvdXQ7CisJaWYgKCEoZmxhZ3MgJiBBTExPV19FTVBUWSkpIHsKKwkJc3RydWN0IGNvbW1pdCAqZmlyc3RfcGFyZW50ID0gY3VycmVudF9oZWFkOworCisJCWlmIChmbGFncyAmIEFNRU5EX01TRykgeworCQkJaWYgKGN1cnJlbnRfaGVhZC0+cGFyZW50cykgeworCQkJCWZpcnN0X3BhcmVudCA9IGN1cnJlbnRfaGVhZC0+cGFyZW50cy0+aXRlbTsKKwkJCQlpZiAocmVwb19wYXJzZV9jb21taXQociwgZmlyc3RfcGFyZW50KSkgeworCQkJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiKSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZmlyc3RfcGFyZW50ID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAob2lkZXEoZmlyc3RfcGFyZW50CisJCQkgID8gZ2V0X2NvbW1pdF90cmVlX29pZChmaXJzdF9wYXJlbnQpCisJCQkgIDogdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwKKwkJCSAgJnRyZWUpKSB7CisJCQlyZXMgPSAxOyAvKiBydW4gJ2dpdCBjb21taXQnIHRvIGRpc3BsYXkgZXJyb3IgbWVzc2FnZSAqLworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpZiAoZmluZF9ob29rKCJwcmVwYXJlLWNvbW1pdC1tc2ciKSkgewpAQCAtMTM5MSw2ICsxNTAyLDE1IEBACiAKIAlyZXNldF9pZGVudF9kYXRlKCk7CiAKKwlpZiAob3B0cy0+aWdub3JlX2RhdGUpIHsKKwkJYXV0aG9yID0gaWdub3JlX2F1dGhvcl9kYXRlKGF1dGhvcik7CisJCWlmICghYXV0aG9yKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZyZWUoYXV0aG9yX3RvX2ZyZWUpOworCQlhdXRob3JfdG9fZnJlZSA9IChjaGFyICopYXV0aG9yOworCX0KIAlpZiAoY29tbWl0X3RyZWVfZXh0ZW5kZWQobXNnLT5idWYsIG1zZy0+bGVuLCAmdHJlZSwgcGFyZW50cywKIAkJCQkgb2lkLCBhdXRob3IsIG9wdHMtPmdwZ19zaWduLCBleHRyYSkpIHsKIAkJcmVzID0gZXJyb3IoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CkBAIC0xNDAzLDYgKzE1MjMsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInBvc3QtY29tbWl0IiwgTlVMTCk7CiAJaWYgKGZsYWdzICYgQU1FTkRfTVNHKQogCQljb21taXRfcG9zdF9yZXdyaXRlKHIsIGN1cnJlbnRfaGVhZCwgb2lkKTsKIApAQCAtMTQxMCw3ICsxNTMxLDcgQEAKIAlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKGV4dHJhKTsKIAlzdHJidWZfcmVsZWFzZSgmZXJyKTsKIAlzdHJidWZfcmVsZWFzZSgmY29tbWl0X21zZyk7Ci0JZnJlZShhbWVuZF9hdXRob3IpOworCWZyZWUoYXV0aG9yX3RvX2ZyZWUpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTE1NzYsNiArMTY5Nyw3IEBACiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlpbnQgcmVzOwogCWNvbnN0IGNoYXIgKm1lc3NhZ2UsICpib2R5OworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKIAogCWlmIChvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID4gMCkgewogCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOwpAQCAtMTYwMiw3ICsxNzI0LDcgQEAKIAkJCXJldHVybiBlcnJvcihfKCJuZWVkIGEgSEVBRCB0byBmaXh1cCIpKTsKIAkJaWYgKCEoaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyLCAmaGVhZCkpKQogCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIEhFQUQiKSk7Ci0JCWlmICghKGhlYWRfbWVzc2FnZSA9IGdldF9jb21taXRfYnVmZmVyKGhlYWRfY29tbWl0LCBOVUxMKSkpCisJCWlmICghKGhlYWRfbWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShoZWFkX2NvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSkKIAkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiKSk7CiAKIAkJZmluZF9jb21taXRfc3ViamVjdChoZWFkX21lc3NhZ2UsICZib2R5KTsKQEAgLTE2MjMsNyArMTc0NSw3IEBACiAJCXVudXNlX2NvbW1pdF9idWZmZXIoaGVhZF9jb21taXQsIGhlYWRfbWVzc2FnZSk7CiAJfQogCi0JaWYgKCEobWVzc2FnZSA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCkpKQorCWlmICghKG1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZykpKQogCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiKSwKIAkJCSAgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CiAJZmluZF9jb21taXRfc3ViamVjdChtZXNzYWdlLCAmYm9keSk7CkBAIC0yMDA4LDYgKzIxMzAsNyBAQAogc3RhdGljIHN0cnVjdCB0b2RvX2l0ZW0gKmFwcGVuZF9uZXdfdG9kbyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCiB7CiAJQUxMT0NfR1JPVyh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPm5yICsgMSwgdG9kb19saXN0LT5hbGxvYyk7CisJdG9kb19saXN0LT50b3RhbF9ucisrOwogCXJldHVybiB0b2RvX2xpc3QtPml0ZW1zICsgdG9kb19saXN0LT5ucisrOwogfQogCkBAIC0yMjc5LDYgKzI0MDIsMTYgQEAKIAlzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKCZvcHRzKTsKIH0KIAorc3RhdGljIHZvaWQgdG9kb19saXN0X3dyaXRlX3RvdGFsX25yKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwlGSUxFICpmID0gZm9wZW5fb3Jfd2FybihyZWJhc2VfcGF0aF9tc2d0b3RhbCgpLCAidyIpOworCisJaWYgKGYpIHsKKwkJZnByaW50ZihmLCAiJWRcbiIsIHRvZG9fbGlzdC0+dG90YWxfbnIpOworCQlmY2xvc2UoZik7CisJfQorfQorCiBzdGF0aWMgaW50IHJlYWRfcG9wdWxhdGVfdG9kbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKIAkJCSAgICAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKIAkJCSAgICAgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKQEAgLTIzMjQsNyArMjQ1Nyw2IEBACiAKIAlpZiAoaXNfcmViYXNlX2kob3B0cykpIHsKIAkJc3RydWN0IHRvZG9fbGlzdCBkb25lID0gVE9ET19MSVNUX0lOSVQ7Ci0JCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKHJlYmFzZV9wYXRoX21zZ3RvdGFsKCksICJ3Iik7CiAKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmRvbmUuYnVmLCByZWJhc2VfcGF0aF9kb25lKCksIDApID4gMCAmJgogCQkgICAgIXRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBkb25lLmJ1Zi5idWYsICZkb25lKSkKQEAgLTIzMzYsMTAgKzI0NjgsNyBAQAogCQkJKyBjb3VudF9jb21tYW5kcyh0b2RvX2xpc3QpOwogCQl0b2RvX2xpc3RfcmVsZWFzZSgmZG9uZSk7CiAKLQkJaWYgKGYpIHsKLQkJCWZwcmludGYoZiwgIiVkXG4iLCB0b2RvX2xpc3QtPnRvdGFsX25yKTsKLQkJCWZjbG9zZShmKTsKLQkJfQorCQl0b2RvX2xpc3Rfd3JpdGVfdG90YWxfbnIodG9kb19saXN0KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI0NzAsNiArMjU5OSwxNiBAQAogCQkJb3B0cy0+c2lnbm9mZiA9IDE7CiAJCX0KIAorCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfY2RhdGVfaXNfYWRhdGUoKSkpIHsKKwkJCW9wdHMtPmFsbG93X2ZmID0gMDsKKwkJCW9wdHMtPmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlID0gMTsKKwkJfQorCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSgpKSkgeworCQkJb3B0cy0+YWxsb3dfZmYgPSAwOworCQkJb3B0cy0+aWdub3JlX2RhdGUgPSAxOworCQl9CisKIAkJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX3Jlc2NoZWR1bGVfZmFpbGVkX2V4ZWMoKSkpCiAJCQlvcHRzLT5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjID0gMTsKIApAQCAtMjU1Miw2ICsyNjkxLDEwIEBACiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0KCksICItUyVzXG4iLCBvcHRzLT5ncGdfc2lnbik7CiAJaWYgKG9wdHMtPnNpZ25vZmYpCiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfc2lnbm9mZigpLCAiLS1zaWdub2ZmXG4iKTsKKwlpZiAob3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfY2RhdGVfaXNfYWRhdGUoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5pZ25vcmVfZGF0ZSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSgpLCAiJXMiLCAiIik7CiAJaWYgKG9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMpCiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfcmVzY2hlZHVsZV9mYWlsZWRfZXhlYygpLCAiJXMiLCAiIik7CiAKQEAgLTI1NjQsMTQgKzI3MDcsMTcgQEAKIAllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kID0gb3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLID8KIAkJVE9ET19QSUNLIDogVE9ET19SRVZFUlQ7CiAJY29uc3QgY2hhciAqY29tbWFuZF9zdHJpbmcgPSB0b2RvX2NvbW1hbmRfaW5mb1tjb21tYW5kXS5zdHI7CisJY29uc3QgY2hhciAqZW5jb2Rpbmc7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCiAJaWYgKHByZXBhcmVfcmV2cyhvcHRzKSkKIAkJcmV0dXJuIC0xOwogCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cykpKSB7CiAJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBhcHBlbmRfbmV3X3RvZG8odG9kb19saXN0KTsKLQkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CiAJCWNvbnN0IGNoYXIgKnN1YmplY3Q7CiAJCWludCBzdWJqZWN0X2xlbjsKIApAQCAtMjk2OCw3ICszMTE0LDggQEAKIAogCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9tZXNzYWdlIiwgZ2V0X2RpcihvcHRzKSk7CiAJaWYgKCFmaWxlX2V4aXN0cyhidWYuYnVmKSkgewotCQljb25zdCBjaGFyICpjb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQljb25zdCBjaGFyICpjb21taXRfYnVmZmVyID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOwogCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKIAkJcmVzIHw9IHdyaXRlX21lc3NhZ2Uoc3ViamVjdCwgc3RybGVuKHN1YmplY3QpLCBidWYuYnVmLCAxKTsKIAkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGNvbW1pdF9idWZmZXIpOwpAQCAtMzM3MCw3ICszNTE3LDggQEAKIAl9CiAKIAlpZiAoY29tbWl0KSB7Ci0JCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CiAJCWNvbnN0IGNoYXIgKmJvZHk7CiAJCWludCBsZW47CiAKQEAgLTM0ODcsNiArMzYzNSw4IEBACiAJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CiAJCWlmIChvcHRzLT5ncGdfc2lnbikKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIG9wdHMtPmdwZ19zaWduKTsKKwkJaWYgKG9wdHMtPmlnbm9yZV9kYXRlKQorCQkJcHVzaF9kYXRlcygmY21kLCBvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSk7CiAKIAkJLyogQWRkIHRoZSB0aXBzIHRvIGJlIG1lcmdlZCAqLwogCQlmb3IgKGogPSB0b19tZXJnZTsgajsgaiA9IGotPm5leHQpCkBAIC0zNzU5LDcgKzM5MDksOSBAQAogCXNldGVudihHSVRfUkVGTE9HX0FDVElPTiwgYWN0aW9uX25hbWUob3B0cyksIDApOwogCWlmIChvcHRzLT5hbGxvd19mZikKIAkJYXNzZXJ0KCEob3B0cy0+c2lnbm9mZiB8fCBvcHRzLT5ub19jb21taXQgfHwKLQkJCQlvcHRzLT5yZWNvcmRfb3JpZ2luIHx8IG9wdHMtPmVkaXQpKTsKKwkJCQlvcHRzLT5yZWNvcmRfb3JpZ2luIHx8IG9wdHMtPmVkaXQgfHwKKwkJCQlvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSB8fAorCQkJCW9wdHMtPmlnbm9yZV9kYXRlKSk7CiAJaWYgKHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUociwgb3B0cykpCiAJCXJldHVybiAtMTsKIApAQCAtMzkxMCw3ICs0MDYyLDcgQEAKIAkJCQkJCQlpdGVtLT5jb21taXQsCiAJCQkJCQkJYXJnLCBpdGVtLT5hcmdfbGVuLAogCQkJCQkJCW9wdHMsIHJlcywgMCk7Ci0JCX0gZWxzZSBpZiAoY2hlY2tfdG9kbyAmJiAhcmVzKSB7CisJCX0gZWxzZSBpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgY2hlY2tfdG9kbyAmJiAhcmVzKSB7CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAogCQkJaWYgKHN0YXQoZ2V0X3RvZG9fcGF0aChvcHRzKSwgJnN0KSkgewpAQCAtNDE1MSw5ICs0MzAzLDEwIEBACiAJCQkJICovCiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCWNvbnN0IGNoYXIgKnBhdGggPSByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCk7CisJCQkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOwogCiAJCQkJaWYgKHBhcnNlX2hlYWQociwgJmNvbW1pdCkgfHwKLQkJCQkgICAgIShwID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKSkgfHwKKwkJCQkgICAgIShwID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSB8fAogCQkJCSAgICB3cml0ZV9tZXNzYWdlKHAsIHN0cmxlbihwKSwgcGF0aCwgMCkpIHsKIAkJCQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIHApOwogCQkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGZpbGU6ICIKQEAgLTQyMTAsOCArNDM2MywxMCBAQAogCWlmIChpc19yZWJhc2VfaShvcHRzKSkgewogCQlpZiAoKHJlcyA9IHJlYWRfcG9wdWxhdGVfdG9kbyhyLCAmdG9kb19saXN0LCBvcHRzKSkpCiAJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OwotCQlpZiAoY29tbWl0X3N0YWdlZF9jaGFuZ2VzKHIsIG9wdHMsICZ0b2RvX2xpc3QpKQotCQkJcmV0dXJuIC0xOworCQlpZiAoY29tbWl0X3N0YWdlZF9jaGFuZ2VzKHIsIG9wdHMsICZ0b2RvX2xpc3QpKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gcmVsZWFzZV90b2RvX2xpc3Q7CisJCX0KIAl9IGVsc2UgaWYgKCFmaWxlX2V4aXN0cyhnZXRfdG9kb19wYXRoKG9wdHMpKSkKIAkJcmV0dXJuIGNvbnRpbnVlX3NpbmdsZV9waWNrKHIpOwogCWVsc2UgaWYgKChyZXMgPSByZWFkX3BvcHVsYXRlX3RvZG8ociwgJnRvZG9fbGlzdCwgb3B0cykpKQpAQCAtNDQyNSw3ICs0NTgwLDYgQEAKIAlzdHJ1Y3QgbGFiZWxzX2VudHJ5ICpsYWJlbHNfZW50cnk7CiAJc3RydWN0IHN0cmluZ19lbnRyeSAqc3RyaW5nX2VudHJ5OwogCXN0cnVjdCBvYmplY3RfaWQgZHVtbXk7Ci0Jc2l6ZV90IGxlbjsKIAlpbnQgaTsKIAogCXN0cmluZ19lbnRyeSA9IG9pZG1hcF9nZXQoJnN0YXRlLT5jb21taXQybGFiZWwsIG9pZCk7CkBAIC00NDQ1LDEwICs0NTk5LDEwIEBACiAJICogYWJicmV2aWF0aW9uIGZvciBhbnkgdW5pbnRlcmVzdGluZyBjb21taXQncyBuYW1lcyB0aGF0IGRvZXMgbm90CiAJICogY2xhc2ggd2l0aCBhbnkgb3RoZXIgbGFiZWwuCiAJICovCisJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+YnVmKTsKIAlpZiAoIWxhYmVsKSB7CiAJCWNoYXIgKnA7CiAKLQkJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+YnVmKTsKIAkJc3RyYnVmX2dyb3coJnN0YXRlLT5idWYsIEdJVF9NQVhfSEVYU1opOwogCQlsYWJlbCA9IHAgPSBzdGF0ZS0+YnVmLmJ1ZjsKIApAQCAtNDQ3MSwzMiArNDYyNSw1NSBAQAogCQkJCXBbaV0gPSBzYXZlOwogCQkJfQogCQl9Ci0JfSBlbHNlIGlmICgoKGxlbiA9IHN0cmxlbihsYWJlbCkpID09IHRoZV9oYXNoX2FsZ28tPmhleHN6ICYmCi0JCSAgICAhZ2V0X29pZF9oZXgobGFiZWwsICZkdW1teSkpIHx8Ci0JCSAgIChsZW4gPT0gMSAmJiAqbGFiZWwgPT0gJyMnKSB8fAotCQkgICBoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCi0JCQkJCSBzdHJpaGFzaChsYWJlbCksIGxhYmVsKSkgewotCQkvKgotCQkgKiBJZiB0aGUgbGFiZWwgYWxyZWFkeSBleGlzdHMsIG9yIGlmIHRoZSBsYWJlbCBpcyBhIHZhbGlkIGZ1bGwKLQkJICogT0lELCBvciB0aGUgbGFiZWwgaXMgYSAnIycgKHdoaWNoIHdlIHVzZSBhcyBhIHNlcGFyYXRvcgotCQkgKiBiZXR3ZWVuIG1lcmdlIGhlYWRzIGFuZCBvbmVsaW5lKSwgd2UgYXBwZW5kIGEgZGFzaCBhbmQgYQotCQkgKiBudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuCi0JCSAqLworCX0gZWxzZSB7CiAJCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICZzdGF0ZS0+YnVmOwogCi0JCXN0cmJ1Zl9yZXNldChidWYpOwotCQlzdHJidWZfYWRkKGJ1ZiwgbGFiZWwsIGxlbik7Ci0KLQkJZm9yIChpID0gMjsgOyBpKyspIHsKLQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBsZW4pOwotCQkJc3RyYnVmX2FkZGYoYnVmLCAiLSVkIiwgaSk7Ci0JCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKLQkJCQkJCSAgIHN0cmloYXNoKGJ1Zi0+YnVmKSwKLQkJCQkJCSAgIGJ1Zi0+YnVmKSkKLQkJCQlicmVhazsKKwkJLyoKKwkJICogU2FuaXRpemUgbGFiZWxzIGJ5IHJlcGxhY2luZyBub24tYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzCisJCSAqIChpbmNsdWRpbmcgd2hpdGUtc3BhY2Ugb25lcykgYnkgZGFzaGVzLCBhcyB0aGV5IG1pZ2h0IGJlCisJCSAqIGlsbGVnYWwgaW4gZmlsZSBuYW1lcyAoYW5kIGhlbmNlIGluIHJlZiBuYW1lcykuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSByZXRhaW4gbm9uLUFTQ0lJIFVURi04IGNoYXJhY3RlcnMgKGlkZW50aWZpZWQKKwkJICogdmlhIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCkuIFRoZXkgc2hvdWxkIGJlIGFsbCBhY2NlcHRhYmxlCisJCSAqIGluIGZpbGUgbmFtZXMuIFdlIGRvIG5vdCB2YWxpZGF0ZSB0aGUgVVRGLTggaGVyZSwgdGhhdCdzIG5vdAorCQkgKiB0aGUgam9iIG9mIHRoaXMgZnVuY3Rpb24uCisJCSAqLworCQlmb3IgKDsgKmxhYmVsOyBsYWJlbCsrKQorCQkJaWYgKCgqbGFiZWwgJiAweDgwKSB8fCBpc2FsbnVtKCpsYWJlbCkpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgKmxhYmVsKTsKKwkJCS8qIGF2b2lkIGxlYWRpbmcgZGFzaCBhbmQgZG91YmxlLWRhc2hlcyAqLworCQkJZWxzZSBpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLScpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy0nKTsKKwkJaWYgKCFidWYtPmxlbikgeworCQkJc3RyYnVmX2FkZHN0cihidWYsICJyZXYtIik7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoYnVmLCBvaWQsIGRlZmF1bHRfYWJicmV2KTsKIAkJfQotCiAJCWxhYmVsID0gYnVmLT5idWY7CisKKwkJaWYgKChidWYtPmxlbiA9PSB0aGVfaGFzaF9hbGdvLT5oZXhzeiAmJgorCQkgICAgICFnZXRfb2lkX2hleChsYWJlbCwgJmR1bW15KSkgfHwKKwkJICAgIChidWYtPmxlbiA9PSAxICYmICpsYWJlbCA9PSAnIycpIHx8CisJCSAgICBoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCisJCQkJCSAgc3RyaWhhc2gobGFiZWwpLCBsYWJlbCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbGFiZWwgYWxyZWFkeSBleGlzdHMsIG9yIGlmIHRoZSBsYWJlbCBpcyBhCisJCQkgKiB2YWxpZCBmdWxsIE9JRCwgb3IgdGhlIGxhYmVsIGlzIGEgJyMnICh3aGljaCB3ZSB1c2UKKwkJCSAqIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gbWVyZ2UgaGVhZHMgYW5kIG9uZWxpbmUpLCB3ZQorCQkJICogYXBwZW5kIGEgZGFzaCBhbmQgYSBudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuCisJCQkgKi8KKwkJCXNpemVfdCBsZW4gPSBidWYtPmxlbjsKKworCQkJZm9yIChpID0gMjsgOyBpKyspIHsKKwkJCQlzdHJidWZfc2V0bGVuKGJ1ZiwgbGVuKTsKKwkJCQlzdHJidWZfYWRkZihidWYsICItJWQiLCBpKTsKKwkJCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKKwkJCQkJCQkgICBzdHJpaGFzaChidWYtPmJ1ZiksCisJCQkJCQkJICAgYnVmLT5idWYpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJbGFiZWwgPSBidWYtPmJ1ZjsKKwkJfQogCX0KIAogCUZMRVhfQUxMT0NfU1RSKGxhYmVsc19lbnRyeSwgbGFiZWwsIGxhYmVsKTsKQEAgLTQ1NDAsMTAgKzQ3MTcsMTUgQEAKIAlzdHJidWZfaW5pdCgmc3RhdGUuYnVmLCAzMik7CiAKIAlpZiAocmV2cy0+Y21kbGluZS5uciAmJiAocmV2cy0+Y21kbGluZS5yZXZbMF0uZmxhZ3MgJiBCT1RUT00pKSB7CisJCXN0cnVjdCBsYWJlbHNfZW50cnkgKm9udG9fbGFiZWxfZW50cnk7CiAJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZyZXZzLT5jbWRsaW5lLnJldlswXS5pdGVtLT5vaWQ7CiAJCUZMRVhfQUxMT0NfU1RSKGVudHJ5LCBzdHJpbmcsICJvbnRvIik7CiAJCW9pZGNweSgmZW50cnktPmVudHJ5Lm9pZCwgb2lkKTsKIAkJb2lkbWFwX3B1dCgmc3RhdGUuY29tbWl0MmxhYmVsLCBlbnRyeSk7CisKKwkJRkxFWF9BTExPQ19TVFIob250b19sYWJlbF9lbnRyeSwgbGFiZWwsICJvbnRvIik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmb250b19sYWJlbF9lbnRyeS0+ZW50cnksIHN0cmloYXNoKCJvbnRvIikpOworCQloYXNobWFwX2FkZCgmc3RhdGUubGFiZWxzLCAmb250b19sYWJlbF9lbnRyeS0+ZW50cnkpOwogCX0KIAogCS8qCkBAIC00NTk4LDEwICs0NzgwLDYgQEAKIAkJZWxzZQogCQkJc3RyYnVmX2FkZGJ1ZigmbGFiZWwsICZvbmVsaW5lKTsKIAotCQlmb3IgKHAxID0gbGFiZWwuYnVmOyAqcDE7IHAxKyspCi0JCQlpZiAoaXNzcGFjZSgqcDEpKQotCQkJCSooY2hhciAqKXAxID0gJy0nOwotCiAJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIC1DICVzIiwKIAkJCSAgICBjbWRfbWVyZ2UsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwpAQCAtNDY0NCw3ICs0ODIyLDcgQEAKIAkJCQlsYWJlbF9vaWQob2lkLCAiYnJhbmNoLXBvaW50IiwgJnN0YXRlKTsKIAkJfQogCi0JCS8qIEFkZCBIRUFEIGFzIGltcGxpY3QgInRpcCBvZiBicmFuY2giICovCisJCS8qIEFkZCBIRUFEIGFzIGltcGxpY2l0ICJ0aXAgb2YgYnJhbmNoIiAqLwogCQlpZiAoIWl0ZXItPm5leHQpCiAJCQl0aXBzX3RhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZXItPml0ZW0sCiAJCQkJCQkJdGlwc190YWlsKS0+bmV4dDsKQEAgLTQ4MjYsNyArNTAwNCw3IEBACiAJICogYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcGljaywgc28gd2UgaW5zZXJ0IHRoZSBjb21tYW5kcyAqYWZ0ZXIqCiAJICogdGhvc2UgY2hhaW5zIGlmIHRoZXJlIGFyZSBhbnkuCiAJICoKLQkgKiBBcyB3ZSBpbnNlcnQgdGhlIGV4ZWMgY29tbWFuZHMgaW1tZWRpYXRseSBhZnRlciByZWFycmFuZ2luZworCSAqIEFzIHdlIGluc2VydCB0aGUgZXhlYyBjb21tYW5kcyBpbW1lZGlhdGVseSBhZnRlciByZWFycmFuZ2luZwogCSAqIGFueSBmaXh1cHMgYW5kIGJlZm9yZSB0aGUgdXNlciBlZGl0cyB0aGUgbGlzdCwgYSBmaXh1cCBjaGFpbgogCSAqIGNhbiBuZXZlciBjb250YWluIGNvbW1lbnRzIChhbnkgY29tbWVudHMgYXJlIGVtcHR5IHBpY2tzIHRoYXQKIAkgKiBoYXZlIGJlZW4gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeQpAQCAtNTAwNSw2ICs1MTgzLDcgQEAKIAkJTU9WRV9BUlJBWSh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPml0ZW1zICsgaSwgdG9kb19saXN0LT5uciAtIGkpOwogCQl0b2RvX2xpc3QtPm5yIC09IGk7CiAJCXRvZG9fbGlzdC0+Y3VycmVudCA9IDA7CisJCXRvZG9fbGlzdC0+ZG9uZV9uciArPSBpOwogCiAJCWlmIChpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpCiAJCQlyZWNvcmRfaW5fcmV3cml0dGVuKGJhc2Vfb2lkLCBwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSk7CkBAIC01MDg0LDE1ICs1MjYzLDIxIEBACiAJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCB0b2RvX2ZpbGUpOwogCX0KIAotCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisJcmVzID0gLTE7CiAKIAlpZiAoY2hlY2tvdXRfb250byhyLCBvcHRzLCBvbnRvX25hbWUsICZvaWQsIG9yaWdfaGVhZCkpCi0JCXJldHVybiAtMTsKKwkJZ290byBjbGVhbnVwOwogCiAJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCAiIiwgMSwgMSkpCi0JCXJldHVybiAtMTsKKwkJZ290byBjbGVhbnVwOwogCi0JcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZShyLCBvcHRzKTsKKwl0b2RvX2xpc3Rfd3JpdGVfdG90YWxfbnIoJm5ld190b2RvKTsKKwlyZXMgPSBwaWNrX2NvbW1pdHMociwgJm5ld190b2RvLCBvcHRzKTsKKworY2xlYW51cDoKKwl0b2RvX2xpc3RfcmVsZWFzZSgmbmV3X3RvZG8pOworCisJcmV0dXJuIHJlczsKIH0KIAogc3RydWN0IHN1YmplY3QyaXRlbV9lbnRyeSB7CkBAIC01MTY5LDcgKzUzNTQsNyBAQAogCQkqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGl0ZW0tPmNvbW1pdCkgPSBpdGVtOwogCiAJCXBhcnNlX2NvbW1pdChpdGVtLT5jb21taXQpOwotCQljb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoaXRlbS0+Y29tbWl0LCBOVUxMKTsKKwkJY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShpdGVtLT5jb21taXQsIE5VTEwsICJVVEYtOCIpOwogCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKIAkJZm9ybWF0X3N1YmplY3QoJmJ1Ziwgc3ViamVjdCwgIiAiKTsKIAkJc3ViamVjdCA9IHN1YmplY3RzW2ldID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc3ViamVjdF9sZW4pOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaAppbmRleCA1NzQyNjBmLi5lOWEwZTAzIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuaAorKysgYi9zZXF1ZW5jZXIuaApAQCAtNDMsNiArNDMsOCBAQAogCWludCB2ZXJib3NlOwogCWludCBxdWlldDsKIAlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYzsKKwlpbnQgY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU7CisJaW50IGlnbm9yZV9kYXRlOwogCiAJaW50IG1haW5saW5lOwogCkBAIC0yMDIsMTEgKzIwNCwxMCBAQAogCiBpbnQgcmVhZF9hdXRob3Jfc2NyaXB0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipuYW1lLCBjaGFyICoqZW1haWwsIGNoYXIgKipkYXRlLAogCQkgICAgICAgaW50IGFsbG93X21pc3NpbmcpOwotI2VuZGlmCi0KIHZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKTsKIGludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKIAkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKTsKIHZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKIGludCBzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSogciwKIAkJCSAgICAgICBlbnVtIHJlcGxheV9hY3Rpb24gKmFjdGlvbik7CisjZW5kaWYgLyogU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDRkODE5OWIuLmJhZTJjZGYgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtOTMsNyArOTMsNyBAQAogCQl1aWMub2xkX2ZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOwogCiAJLyoKLQkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnaW5zdCBvbGRfZnAKKwkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnYWluc3Qgb2xkX2ZwCiAJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAogCSAqLwogCXJldCA9IGdlbmVyYXRlKCZ1aWMpOwpkaWZmIC0tZ2l0IGEvc2hhMS1hcnJheS5jIGIvc2hhMS1hcnJheS5jCmluZGV4IGQ5MjJlOTQuLjNlZWFkZmUgMTAwNjQ0Ci0tLSBhL3NoYTEtYXJyYXkuYworKysgYi9zaGExLWFycmF5LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHsKIAlpbnQgaTsKIAotCS8qIE5vIG9pZF9hcnJheV9zb3J0KCkgaGVyZSEgU2VlIHRoZSBhcGktb2lkLWFycmF5LnR4dCBkb2NzISAqLworCS8qIE5vIG9pZF9hcnJheV9zb3J0KCkgaGVyZSEgU2VlIHNoYTEtYXJyYXkuaCAqLwogCiAJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CiAJCWludCByZXQgPSBmbihhcnJheS0+b2lkICsgaSwgZGF0YSk7CmRpZmYgLS1naXQgYS9zaGExLWFycmF5LmggYi9zaGExLWFycmF5LmgKaW5kZXggNTVkMDE2Yy4uZGMxYmNhOSAxMDA2NDQKLS0tIGEvc2hhMS1hcnJheS5oCisrKyBiL3NoYTEtYXJyYXkuaApAQCAtMSw2ICsxLDUyIEBACiAjaWZuZGVmIFNIQTFfQVJSQVlfSAogI2RlZmluZSBTSEExX0FSUkFZX0gKIAorLyoqCisgKiBUaGUgQVBJIHByb3ZpZGVzIHN0b3JhZ2UgYW5kIG1hbmlwdWxhdGlvbiBvZiBzZXRzIG9mIG9iamVjdCBpZGVudGlmaWVycy4KKyAqIFRoZSBlbXBoYXNpcyBpcyBvbiBzdG9yYWdlIGFuZCBwcm9jZXNzaW5nIGVmZmljaWVuY3ksIG1ha2luZyB0aGVtIHN1aXRhYmxlCisgKiBmb3IgbGFyZ2UgbGlzdHMuIE5vdGUgdGhhdCB0aGUgb3JkZXJpbmcgb2YgaXRlbXMgaXMgbm90IHByZXNlcnZlZCBvdmVyIHNvbWUKKyAqIG9wZXJhdGlvbnMuCisgKgorICogRXhhbXBsZXMKKyAqIC0tLS0tLS0tCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IHByaW50X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKyAqIAkJICAgIHZvaWQgKmRhdGEpCisgKiB7CisgKiAJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKyAqIAlyZXR1cm4gMDsgLy8gYWx3YXlzIGNvbnRpbnVlCisgKiB9CisgKgorICogdm9pZCBzb21lX2Z1bmModm9pZCkKKyAqIHsKKyAqICAgICBzdHJ1Y3Qgc2hhMV9hcnJheSBoYXNoZXMgPSBPSURfQVJSQVlfSU5JVDsKKyAqICAgICBzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKyAqCisgKiAgICAgLy8gUmVhZCBvYmplY3RzIGludG8gb3VyIHNldAorICogICAgIHdoaWxlIChyZWFkX29iamVjdF9mcm9tX3N0ZGluKG9pZC5oYXNoKSkKKyAqICAgICAgICAgb2lkX2FycmF5X2FwcGVuZCgmaGFzaGVzLCAmb2lkKTsKKyAqCisgKiAgICAgLy8gQ2hlY2sgaWYgc29tZSBvYmplY3RzIGFyZSBpbiBvdXIgc2V0CisgKiAgICAgd2hpbGUgKHJlYWRfb2JqZWN0X2Zyb21fc3RkaW4ob2lkLmhhc2gpKSB7CisgKiAgICAgICAgIGlmIChvaWRfYXJyYXlfbG9va3VwKCZoYXNoZXMsICZvaWQpID49IDApCisgKiAgICAgICAgICAgICBwcmludGYoIml0J3MgaW4gdGhlcmUhXG4iKTsKKyAqCisgKiAgICAgICAgICAvLyBQcmludCB0aGUgdW5pcXVlIHNldCBvZiBvYmplY3RzLiBXZSBjb3VsZCBhbHNvIGhhdmUKKyAqICAgICAgICAgIC8vIGF2b2lkZWQgYWRkaW5nIGR1cGxpY2F0ZSBvYmplY3RzIGluIHRoZSBmaXJzdCBwbGFjZSwKKyAqICAgICAgICAgIC8vIGJ1dCB3ZSB3b3VsZCBlbmQgdXAgcmUtc29ydGluZyB0aGUgYXJyYXkgcmVwZWF0ZWRseS4KKyAqICAgICAgICAgIC8vIEluc3RlYWQsIHRoaXMgd2lsbCBzb3J0IG9uY2UgYW5kIHRoZW4gc2tpcCBkdXBsaWNhdGVzCisgKiAgICAgICAgICAvLyBpbiBsaW5lYXIgdGltZS4KKyAqCisgKiAgICAgICAgIG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmhhc2hlcywgcHJpbnRfY2FsbGJhY2ssIE5VTEwpOworICogICAgIH0KKyAqLworCisvKioKKyAqIEEgc2luZ2xlIGFycmF5IG9mIG9iamVjdCBJRHMuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQorICogYE9JRF9BUlJBWV9JTklUYC4gVGhlIGBvaWRgIG1lbWJlciBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEuIFRoZSBgbnJgIG1lbWJlcgorICogY29udGFpbnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2V0LiBUaGUgYGFsbG9jYCBhbmQgYHNvcnRlZGAgbWVtYmVycworICogYXJlIHVzZWQgaW50ZXJuYWxseSwgYW5kIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IEFQSSBjYWxsZXJzLgorICovCiBzdHJ1Y3Qgb2lkX2FycmF5IHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CiAJaW50IG5yOwpAQCAtMTAsMTggKzU2LDUyIEBACiAKICNkZWZpbmUgT0lEX0FSUkFZX0lOSVQgeyBOVUxMLCAwLCAwLCAwIH0KIAorLyoqCisgKiBBZGQgYW4gaXRlbSB0byB0aGUgc2V0LiBUaGUgb2JqZWN0IElEIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CisgKiAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcyBvcmRlcmluZykuCisgKi8KIHZvaWQgb2lkX2FycmF5X2FwcGVuZChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoqCisgKiBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgb2JqZWN0IElELiBJZiBmb3VuZCwKKyAqIHJldHVybnMgdGhlIG9mZnNldCAoaW4gbnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgb2JqZWN0IElELiBJZiBub3QgZm91bmQsCisgKiByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlci4gSWYgdGhlIGFycmF5IGlzIG5vdCBzb3J0ZWQsIHRoaXMgZnVuY3Rpb24gaGFzCisgKiB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KKyAqLwogaW50IG9pZF9hcnJheV9sb29rdXAoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUgaW5pdGlhbCwKKyAqIGVtcHR5IHN0YXRlLgorICovCiB2b2lkIG9pZF9hcnJheV9jbGVhcihzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSk7CiAKIHR5cGVkZWYgaW50ICgqZm9yX2VhY2hfb2lkX2ZuKShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCiAJCQkgICAgICAgdm9pZCAqZGF0YSk7CisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QsIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiBlYWNoIG9uZS4gRG9lcyBub3Qgc29ydCB0aGUgbGlzdCwgc28gYW55IGN1c3RvbSBoYXNoIG9yZGVyIGlzIHJldGFpbmVkLgorICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlIGl0ZXJhdGlvbiBlbmRzIGltbWVkaWF0ZWx5CisgKiBhbmQgdGhlIGNhbGxiYWNrJ3MgcmV0dXJuIGlzIHByb3BhZ2F0ZWQ7IG90aGVyd2lzZSwgMCBpcyByZXR1cm5lZC4KKyAqLwogaW50IG9pZF9hcnJheV9mb3JfZWFjaChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKIAkJICAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKIAkJICAgICAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIHVuaXF1ZSBlbGVtZW50IG9mIHRoZSBsaXN0IGluIHNvcnRlZCBvcmRlciwgYnV0IG90aGVyd2lzZQorICogYmVoYXZlIGxpa2UgYG9pZF9hcnJheV9mb3JfZWFjaGAuIElmIHRoZSBhcnJheSBpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uCisgKiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcgaXQuCisgKi8KIGludCBvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAogCQkJICAgICAgZm9yX2VhY2hfb2lkX2ZuIGZuLAogCQkJICAgICAgdm9pZCAqZGF0YSk7CisKKy8qKgorICogQXBwbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGB3YW50YCB0byBlYWNoIGVudHJ5IGluIHRoZSBhcnJheSwgcmV0YWluaW5nCisgKiBvbmx5IHRoZSBlbnRyaWVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiBQcmVzZXJ2ZSB0aGUgb3JkZXIKKyAqIG9mIHRoZSBlbnRyaWVzIHRoYXQgYXJlIHJldGFpbmVkLgorICovCiB2b2lkIG9pZF9hcnJheV9maWx0ZXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCiAJCSAgICAgIGZvcl9lYWNoX29pZF9mbiB3YW50LAogCQkgICAgICB2b2lkICpjYmRhdGEpOwpkaWZmIC0tZ2l0IGEvc2hhMWRjL3NoYTEuYyBiL3NoYTFkYy9zaGExLmMKaW5kZXggOWQzY2Y4MS4uZGVkZTJjYiAxMDA2NDQKLS0tIGEvc2hhMWRjL3NoYTEuYworKysgYi9zaGExZGMvc2hhMS5jCkBAIC03Miw3ICs3Miw3IEBACiAvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjICovCiAjZWxpZiBkZWZpbmVkKF9CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKQogLyoKLSAqICpCU0QgYW5kIG5ld2xpYiAoZW1iZWRlZCBsaW51eCwgY3lnd2luLCBldGMpLgorICogKkJTRCBhbmQgbmV3bGliIChlbWJlZGRlZCBsaW51eCwgY3lnd2luLCBldGMpLgogICogdGhlIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pIHBhcnQgcHJldmVudHMKICAqIHRoaXMgY29uZGl0aW9uIGZyb20gbWF0Y2hpbmcgd2l0aCBTb2xhcmlzL3NwYXJjLgogICogKFNvbGFyaXMgZGVmaW5lcyBvbmx5IG9uZSBlbmRpYW4gbWFjcm8pCkBAIC05OCw3ICs5OCw3IEBACiAvKgogICogRGVmaW5lcyBCaWcgRW5kaWFuIG9uIGEgd2hpdGVsaXN0IG9mIE9TcyB0aGF0IGFyZSBrbm93biB0byBiZSBCaWcKICAqIEVuZGlhbi1vbmx5LiBTZWUKLSAqIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvOTMwNTY4MjMtMjc0MC1kMDcyLTFlYmQtNDZiNDQwYjMzZDdlQGZlbHQuZGVtb24ubmwvCisgKiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvOTMwNTY4MjMtMjc0MC1kMDcyLTFlYmQtNDZiNDQwYjMzZDdlQGZlbHQuZGVtb24ubmwvCiAgKi8KICNkZWZpbmUgU0hBMURDX0JJR0VORElBTgogCmRpZmYgLS1naXQgYS9zaGExZGNfZ2l0LmMgYi9zaGExZGNfZ2l0LmMKaW5kZXggZTBjYzlkOS4uNWMzMDBlOCAxMDA2NDQKLS0tIGEvc2hhMWRjX2dpdC5jCisrKyBiL3NoYTFkY19naXQuYwpAQCAtMTksNyArMTksNyBAQAogCWlmICghU0hBMURDRmluYWwoaGFzaCwgY3R4KSkKIAkJcmV0dXJuOwogCWRpZSgiU0hBLTEgYXBwZWFycyB0byBiZSBwYXJ0IG9mIGEgY29sbGlzaW9uIGF0dGFjazogJXMiLAotCSAgICBzaGExX3RvX2hleChoYXNoKSk7CisJICAgIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwppbmRleCA0MDA4NGEzLi41NGNjYTc0IDEwMDY0NAotLS0gYS9zaGVsbC5jCisrKyBiL3NoZWxsLmMKQEAgLTE2LDEwICsxNiwxMCBAQAogCXNldHVwX3BhdGgoKTsKIAlpZiAoIWFyZyB8fCAhKGFyZyA9IHNxX2RlcXVvdGUoYXJnKSkgfHwgKmFyZyA9PSAnLScpCiAJCWRpZSgiYmFkIGFyZ3VtZW50Iik7Ci0JaWYgKCFzdGFydHNfd2l0aChtZSwgImdpdC0iKSkKKwlpZiAoIXNraXBfcHJlZml4KG1lLCAiZ2l0LSIsICZtZSkpCiAJCWRpZSgiYmFkIGNvbW1hbmQiKTsKIAotCW15X2FyZ3ZbMF0gPSBtZSArIDQ7CisJbXlfYXJndlswXSA9IG1lOwogCW15X2FyZ3ZbMV0gPSBhcmc7CiAJbXlfYXJndlsyXSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NpZ2NoYWluLmggYi9zaWdjaGFpbi5oCmluZGV4IDEzOGIyMGYuLjhlNmJhZGEgMTAwNjQ0Ci0tLSBhL3NpZ2NoYWluLmgKKysrIGIvc2lnY2hhaW4uaApAQCAtMSwxMiArMSw1NyBAQAogI2lmbmRlZiBTSUdDSEFJTl9ICiAjZGVmaW5lIFNJR0NIQUlOX0gKIAorLyoqCisgKiBDb2RlIG9mdGVuIHdhbnRzIHRvIHNldCBhIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBvcgorICogb3RoZXIgd29yay1pbi1wcm9ncmVzcyB3aGVuIHdlIGRpZSB1bmV4cGVjdGVkbHkuIEZvciBtdWx0aXBsZSBwaWVjZXMgb2YKKyAqIGNvZGUgdG8gZG8gdGhpcyB3aXRob3V0IGNvbmZsaWN0aW5nLCBlYWNoIHBpZWNlIG9mIGNvZGUgbXVzdCByZW1lbWJlcgorICogdGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGFuZGxlciBhbmQgcmVzdG9yZSBpdCBlaXRoZXIgd2hlbjoKKyAqCisgKiAgIDEuIFRoZSB3b3JrLWluLXByb2dyZXNzIGlzIGZpbmlzaGVkLCBhbmQgdGhlIGhhbmRsZXIgaXMgbm8gbG9uZ2VyCisgKiAgICAgIG5lY2Vzc2FyeS4gVGhlIGhhbmRsZXIgc2hvdWxkIHJldmVydCB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3IKKyAqICAgICAgKGVpdGhlciBhbm90aGVyIGhhbmRsZXIsIFNJR19ERkwsIG9yIFNJR19JR04pLgorICoKKyAqICAgMi4gVGhlIHNpZ25hbCBpcyByZWNlaXZlZC4gV2Ugc2hvdWxkIHRoZW4gZG8gb3VyIGNsZWFudXAsIHRoZW4gY2hhaW4KKyAqICAgICAgdG8gdGhlIG5leHQgaGFuZGxlciAob3IgZGllIGlmIGl0IGlzIFNJR19ERkwpLgorICoKKyAqIFNpZ2NoYWluIGlzIGEgdGlueSBsaWJyYXJ5IGZvciBrZWVwaW5nIGEgc3RhY2sgb2YgaGFuZGxlcnMuIFlvdXIgaGFuZGxlcgorICogYW5kIGluc3RhbGxhdGlvbiBjb2RlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICB2b2lkIGNsZWFuX2Zvb19vbl9zaWduYWwoaW50IHNpZykKKyAqICAgeworICogCSAgY2xlYW5fZm9vKCk7CisgKiAJICBzaWdjaGFpbl9wb3Aoc2lnKTsKKyAqIAkgIHJhaXNlKHNpZyk7CisgKiAgIH0KKyAqCisgKiAgIHZvaWQgb3RoZXJfZnVuYygpCisgKiAgIHsKKyAqIAkgIHNpZ2NoYWluX3B1c2hfY29tbW9uKGNsZWFuX2Zvb19vbl9zaWduYWwpOworICogCSAgbWVzc191cF9mb28oKTsKKyAqIAkgIGNsZWFuX2ZvbygpOworICogICB9CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKworLyoqCisgKiBIYW5kbGVycyBhcmUgZ2l2ZW4gdGhlIHR5cGVkZWYgb2Ygc2lnY2hhaW5fZnVuLiBUaGlzIGlzIHRoZSBzYW1lIHR5cGUKKyAqIHRoYXQgaXMgZ2l2ZW4gdG8gc2lnbmFsKCkgb3Igc2lnYWN0aW9uKCkuIEl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCisgKiBwdXNoIFNJR19ERkwgb3IgU0lHX0lHTiBvbnRvIHRoZSBzdGFjay4KKyAqLwogdHlwZWRlZiB2b2lkICgqc2lnY2hhaW5fZnVuKShpbnQpOwogCisvKiBZb3UgY2FuIHNpZ2NoYWluX3B1c2ggYW5kIHNpZ2NoYWluX3BvcCBpbmRpdmlkdWFsIHNpZ25hbHMuICovCiBpbnQgc2lnY2hhaW5fcHVzaChpbnQgc2lnLCBzaWdjaGFpbl9mdW4gZik7CiBpbnQgc2lnY2hhaW5fcG9wKGludCBzaWcpOwogCisvKioKKyAqIHB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgc3RhY2sgZm9yIHRoZSBjb21tb24gc2lnbmFsczoKKyAqIFNJR0lOVCwgU0lHSFVQLCBTSUdURVJNLCBTSUdRVUlUIGFuZCBTSUdQSVBFLgorICovCiB2b2lkIHNpZ2NoYWluX3B1c2hfY29tbW9uKHNpZ2NoYWluX2Z1biBmKTsKKwogdm9pZCBzaWdjaGFpbl9wb3BfY29tbW9uKHZvaWQpOwogCiAjZW5kaWYgLyogU0lHQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3RyYnVmLmMgYi9zdHJidWYuYwppbmRleCBhYTQ4ZDE3Li5mMTlkYTU1IDEwMDY0NAotLS0gYS9zdHJidWYuYworKysgYi9zdHJidWYuYwpAQCAtMTEyNSwzICsxMTI1LDMxIEBACiAJc3RyYnVmX3JlbGVhc2UoJmRzdCk7CiAJcmV0dXJuIDA7CiB9CisKK2ludCBzdHJidWZfZWRpdF9pbnRlcmFjdGl2ZWx5KHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpCit7CisJY2hhciAqcGF0aDIgPSBOVUxMOworCWludCBmZCwgcmVzID0gMDsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcGF0aCA9IHBhdGgyID0geHN0cmR1cChnaXRfcGF0aCgiJXMiLCBwYXRoKSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJcmVzID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBwYXRoKTsKKwllbHNlIGlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pIDwgMCkgeworCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBwYXRoKTsKKwkJY2xvc2UoZmQpOworCX0gZWxzZSBpZiAoY2xvc2UoZmQpIDwgMCkKKwkJcmVzID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNsb3NlICclcyciKSwgcGF0aCk7CisJZWxzZSB7CisJCXN0cmJ1Zl9yZXNldChidWZmZXIpOworCQlpZiAobGF1bmNoX2VkaXRvcihwYXRoLCBidWZmZXIsIGVudikgPCAwKQorCQkJcmVzID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGVkaXQgJyVzJyIpLCBwYXRoKTsKKwkJdW5saW5rKHBhdGgpOworCX0KKworCWZyZWUocGF0aDIpOworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zdHJidWYuaCBiL3N0cmJ1Zi5oCmluZGV4IDg0Y2Y5NjkuLmJmYTY2NTYgMTAwNjQ0Ci0tLSBhL3N0cmJ1Zi5oCisrKyBiL3N0cmJ1Zi5oCkBAIC02MjEsNiArNjIxLDE3IEBACiBpbnQgbGF1bmNoX3NlcXVlbmNlX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsCiAJCQkgICBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKIAorLyoKKyAqIEluIGNvbnRyYXN0IHRvIGBsYXVuY2hfZWRpdG9yKClgLCB0aGlzIGZ1bmN0aW9uIHdyaXRlcyBvdXQgdGhlIGNvbnRlbnRzCisgKiBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZmlyc3QsIHRoZW4gY2xlYXJzIHRoZSBgYnVmZmVyYCwgdGhlbiBsYXVuY2hlcworICogdGhlIGVkaXRvciBhbmQgcmVhZHMgYmFjayBpbiB0aGUgZmlsZSBjb250ZW50cyBpbnRvIHRoZSBgYnVmZmVyYC4KKyAqIEZpbmFsbHksIGl0IGRlbGV0ZXMgdGhlIHRlbXBvcmFyeSBmaWxlLgorICoKKyAqIElmIGBwYXRoYCBpcyByZWxhdGl2ZSwgaXQgcmVmZXJzIHRvIGEgZmlsZSBpbiB0aGUgYC5naXRgIGRpcmVjdG9yeS4KKyAqLworaW50IHN0cmJ1Zl9lZGl0X2ludGVyYWN0aXZlbHkoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmVudik7CisKIHZvaWQgc3RyYnVmX2FkZF9saW5lcyhzdHJ1Y3Qgc3RyYnVmICpzYiwKIAkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAogCQkgICAgICBjb25zdCBjaGFyICpidWYsCmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5oIGIvc3RyaW5nLWxpc3QuaAppbmRleCBmOTY0Mzk5Li43YmIwYWQwIDEwMDY0NAotLS0gYS9zdHJpbmctbGlzdC5oCisrKyBiL3N0cmluZy1saXN0LmgKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAvKioKICAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgcGFydCBvZiBhIHNvcnRlZCBsaXN0LiBJZiBpdCBpcyBwYXJ0IG9mIHRoZSBsaXN0LAotICogcmV0dXJuIHRoZSBjb3Jlc3BvbmRpbmcgc3RyaW5nX2xpc3RfaXRlbSwgTlVMTCBvdGhlcndpc2UuCisgKiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nX2xpc3RfaXRlbSwgTlVMTCBvdGhlcndpc2UuCiAgKi8KIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOwogCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUtY29uZmlnLmMgYi9zdWJtb2R1bGUtY29uZmlnLmMKaW5kZXggYjkzNDgyZC4uODUwNjQ4MSAxMDA2NDQKLS0tIGEvc3VibW9kdWxlLWNvbmZpZy5jCisrKyBiL3N1Ym1vZHVsZS1jb25maWcuYwpAQCAtNjI2LDcgKzYyNiw3IEBACiAKIC8qCiAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIHByaXZhdGUgZm9yIGEgcmVhc29uLCB0aGUgJy5naXRtb2R1bGVzJyBmaWxlIHNob3VsZAotICogbm90IGJlIHVzZWQgYXMgYXMgYSBtZWNoYW5pc20gdG8gcmV0cmlldmUgYXJiaXRyYXJ5IGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluCisgKiBub3QgYmUgdXNlZCBhcyBhIG1lY2hhbmlzbSB0byByZXRyaWV2ZSBhcmJpdHJhcnkgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4KICAqIHRoZSByZXBvc2l0b3J5LgogICoKICAqIFJ1bnMgdGhlIHByb3ZpZGVkIGNvbmZpZyBmdW5jdGlvbiBvbiB0aGUgJy5naXRtb2R1bGVzJyBmaWxlIGZvdW5kIGluIHRoZQpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLWNvbmZpZy5oIGIvc3VibW9kdWxlLWNvbmZpZy5oCmluZGV4IDFiNGUyZGEuLjQyOTE4YjUgMTAwNjQ0Ci0tLSBhL3N1Ym1vZHVsZS1jb25maWcuaAorKysgYi9zdWJtb2R1bGUtY29uZmlnLmgKQEAgLTcsOSArNywzMSBAQAogI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgogI2luY2x1ZGUgInN0cmJ1Zi5oIgogCisvKioKKyAqIFRoZSBzdWJtb2R1bGUgY29uZmlnIGNhY2hlIEFQSSBhbGxvd3MgdG8gcmVhZCBzdWJtb2R1bGUKKyAqIGNvbmZpZ3VyYXRpb25zL2luZm9ybWF0aW9uIGZyb20gc3BlY2lmaWVkIHJldmlzaW9ucy4gSW50ZXJuYWxseQorICogaW5mb3JtYXRpb24gaXMgbGF6aWx5IHJlYWQgaW50byBhIGNhY2hlIHRoYXQgaXMgdXNlZCB0byBhdm9pZAorICogdW5uZWNlc3NhcnkgcGFyc2luZyBvZiB0aGUgc2FtZSAuZ2l0bW9kdWxlcyBmaWxlcy4gTG9va3VwcyBjYW4gYmUgZG9uZSBieQorICogc3VibW9kdWxlIHBhdGggb3IgbmFtZS4KKyAqCisgKiBVc2FnZQorICogLS0tLS0KKyAqCisgKiBUaGUgY2FsbGVyIGNhbiBsb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHN1Ym1vZHVsZXMgYnkgdXNpbmcgdGhlCisgKiBgc3VibW9kdWxlX2Zyb21fcGF0aCgpYCBvciBgc3VibW9kdWxlX2Zyb21fbmFtZSgpYCBmdW5jdGlvbnMuIFRoZXkgcmV0dXJuCisgKiBhIGBzdHJ1Y3Qgc3VibW9kdWxlYCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzLiBUaGUgQVBJIGF1dG9tYXRpY2FsbHkKKyAqIGluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgdGhlIG5lZWRlZCBpbmZyYXN0cnVjdHVyZSBvbi1kZW1hbmQuIElmIHRoZQorICogY2FsbGVyIGRvZXMgb25seSB3YW50IHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSByZXZpc2lvbnMgdGhlIGluaXRpYWxpemF0aW9uCisgKiBjYW4gYmUgc2tpcHBlZC4KKyAqCisgKiBJZiB0aGUgaW50ZXJuYWwgY2FjaGUgbWlnaHQgZ3JvdyB0b28gYmlnIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lIHdpdGgKKyAqIHRoZSBBUEksIGFsbCBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMgY2FuIGJlIGZyZWVkIHdpdGggc3VibW9kdWxlX2ZyZWUoKS4KKyAqCisgKi8KKwogLyoKICAqIFN1Ym1vZHVsZSBlbnRyeSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNlcnRhaW4gc3VibW9kdWxlCi0gKiBpbiBhIGNlcnRhaW4gcmV2aXNpb24uCisgKiBpbiBhIGNlcnRhaW4gcmV2aXNpb24uIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBsb29rdXAgZnVuY3Rpb25zLgogICovCiBzdHJ1Y3Qgc3VibW9kdWxlIHsKIAljb25zdCBjaGFyICpwYXRoOwpAQCAtNDEsMTMgKzYzLDI3IEBACiBpbnQgcGFyc2VfcHVzaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKIHZvaWQgcmVwb19yZWFkX2dpdG1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pOwogdm9pZCBnaXRtb2R1bGVzX2NvbmZpZ19vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZCk7CisKKy8qKgorICogU2FtZSBhcyBzdWJtb2R1bGVfZnJvbV9wYXRoIGJ1dCBsb29rdXAgYnkgbmFtZS4KKyAqLwogY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlX2Zyb21fbmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNvbW1pdF9vcl90cmVlLAogCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogR2l2ZW4gYSB0cmVlLWlzaCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBhIHBhdGgsIHJldHVybiB0aGUgc3VibW9kdWxlIHRoYXQKKyAqIGlzIGJvdW5kIGF0IHRoZSBwYXRoIGluIHRoZSBuYW1lZCB0cmVlLgorICovCiBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29yX3RyZWUsCiAJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoKTsKKworLyoqCisgKiBVc2UgdGhlc2UgdG8gZnJlZSB0aGUgaW50ZXJuYWxseSBjYWNoZWQgdmFsdWVzLgorICovCiB2b2lkIHN1Ym1vZHVsZV9mcmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKwogaW50IHByaW50X2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSk7CiBpbnQgY29uZmlnX3NldF9pbl9naXRtb2R1bGVzX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpOwogCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCmluZGV4IDYwZDViNzcuLmNhYTEyNWIgMTAwNjQ0Ci0tLSBhL3QvUkVBRE1FCisrKyBiL3QvUkVBRE1FCkBAIC0zOTcsNiArMzk3LDEwIEBACiBidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdC1zdGFzaC4gU2VlICdzdGFzaC51c2VCdWlsdGluJyBpbgogZ2l0LWNvbmZpZygxKS4KIAorR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU49PGJvb2xlYW4+LCB3aGVuIHRydWUsIGVuYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdCBhZGQgLWkuIFNlZSAnYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW4nIGluCitnaXQtY29uZmlnKDEpLgorCiBHSVRfVEVTVF9JTkRFWF9USFJFQURTPTxuPiBlbmFibGVzIGV4ZXJjaXNpbmcgdGhlIG11bHRpLXRocmVhZGVkIGxvYWRpbmcKIG9mIHRoZSBpbmRleCBmb3IgdGhlIHdob2xlIHRlc3Qgc3VpdGUgYnkgYnlwYXNzaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZgogY2FjaGUgZW50cmllcyBhbmQgdGhyZWFkIG1pbmltdW1zLiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIG1ha2UgdGhlCkBAIC05NzgsNiArOTgyLDE1IEBACiAgICBvdXRwdXQgdG8gdGhlIGRvd25zdHJlYW0tLS11bmxpa2UgdGhlIHJlYWwgdmVyc2lvbiwgaXQgZ2VuZXJhdGVzCiAgICBvbmx5IHVwIHRvIDk5IGxpbmVzLgogCisgLSB0ZXN0X2Jvb2xfZW52IDxlbnYtdmFyaWFibGUtbmFtZT4gPGRlZmF1bHQtdmFsdWU+CisKKyAgIEdpdmVuIHRoZSBuYW1lIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggYSBib29sIHZhbHVlLAorICAgbm9ybWFsaXplIGl0cyB2YWx1ZSB0byBhIDAgKHRydWUpIG9yIDEgKGZhbHNlIG9yIGVtcHR5IHN0cmluZykKKyAgIHJldHVybiBjb2RlLiAgUmV0dXJuIHdpdGggY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBkZWZhdWx0CisgICB2YWx1ZSBpZiB0aGUgdmFyaWFibGUgaXMgdW5zZXQuCisgICBBYm9ydCB0aGUgdGVzdCBzY3JpcHQgaWYgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgb3IgdGhlCisgICBkZWZhdWx0IGFyZSBub3QgdmFsaWQgYm9vbCB2YWx1ZXMuCisKIAogUHJlcmVxdWlzaXRlcwogLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdC9naXR3ZWItbGliLnNoIGIvdC9naXR3ZWItbGliLnNoCmluZGV4IDAwNmQyYTguLjFmMzJjYTYgMTAwNjQ0Ci0tLSBhL3QvZ2l0d2ViLWxpYi5zaAorKysgYi90L2dpdHdlYi1saWIuc2gKQEAgLTU4LDEwICs1OCwxMSBAQAogCUdBVEVXQVlfSU5URVJGQUNFPSdDR0kvMS4xJwogCUhUVFBfQUNDRVBUPScqLyonCiAJUkVRVUVTVF9NRVRIT0Q9J0dFVCcKLQlRVUVSWV9TVFJJTkc9IiIkMSIiCi0JUEFUSF9JTkZPPSIiJDIiIgorCVFVRVJZX1NUUklORz0kMQorCVBBVEhfSU5GTz0kMgorCVJFUVVFU1RfVVJJPS9naXR3ZWIuY2dpJFBBVEhfSU5GTwogCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBcCi0JCVFVRVJZX1NUUklORyBQQVRIX0lORk8KKwkJUVVFUllfU1RSSU5HIFBBVEhfSU5GTyBSRVFVRVNUX1VSSQogCiAJR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCiAJZXhwb3J0IEdJVFdFQl9DT05GSUcKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jIGIvdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4ODRlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jCkBAIC0wLDAgKzEsNTMgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworaW50IGNtZF9fcmVhZF9ncmFwaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZ3JhcGggPSBOVUxMOworCWNoYXIgKmdyYXBoX25hbWU7CisJaW50IG9wZW5fb2s7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJb2JqZWN0X2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisKKwlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvYmplY3RfZGlyKTsKKworCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7CisJaWYgKCFvcGVuX29rKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciKSwgZ3JhcGhfbmFtZSk7CisKKwlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0KTsKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm4gMTsKKworCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7CisKKwlwcmludGYoImhlYWRlcjogJTA4eCAlZCAlZCAlZCAlZFxuIiwKKwkJbnRvaGwoKih1aW50MzJfdCopZ3JhcGgtPmRhdGEpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDQpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDUpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDYpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDcpKTsKKwlwcmludGYoIm51bV9jb21taXRzOiAldVxuIiwgZ3JhcGgtPm51bV9jb21taXRzKTsKKwlwcmludGYoImNodW5rczoiKTsKKworCWlmIChncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCkKKwkJcHJpbnRmKCIgb2lkX2Zhbm91dCIpOworCWlmIChncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCkKKwkJcHJpbnRmKCIgb2lkX2xvb2t1cCIpOworCWlmIChncmFwaC0+Y2h1bmtfY29tbWl0X2RhdGEpCisJCXByaW50ZigiIGNvbW1pdF9tZXRhZGF0YSIpOworCWlmIChncmFwaC0+Y2h1bmtfZXh0cmFfZWRnZXMpCisJCXByaW50ZigiIGV4dHJhX2VkZ2VzIik7CisJcHJpbnRmKCJcbiIpOworCisJVU5MRUFLKGdyYXBoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jIGIvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jCmluZGV4IDcyNDMyODkuLjE2NDZhYTIgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYworKysgYi90L2hlbHBlci90ZXN0LXJ1bi1jb21tYW5kLmMKQEAgLTMyOCw2ICszMjgsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpbmhlcml0X2hhbmRsZShjb25zdCBjaGFyICphcmd2MCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCB0bXA7CisKKwkvKiBGaXJzdCwgb3BlbiBhbiBpbmhlcml0YWJsZSBoYW5kbGUgKi8KKwl4c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAib3V0LVhYWFhYWCIpOworCXRtcCA9IHhta3N0ZW1wKHBhdGgpOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywKKwkJCSAidGVzdC10b29sIiwgYXJndjAsICJpbmhlcml0ZWQtaGFuZGxlLWNoaWxkIiwgTlVMTCk7CisJY3AuaW4gPSAtMTsKKwljcC5ub19zdGRvdXQgPSBjcC5ub19zdGRlcnIgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCBzdGFydCBjaGlsZCBwcm9jZXNzIik7CisKKwkvKiBUaGVuIGNsb3NlIGl0LCBhbmQgdHJ5IHRvIGRlbGV0ZSBpdC4gKi8KKwljbG9zZSh0bXApOworCWlmICh1bmxpbmsocGF0aCkpCisJCWRpZSgiQ291bGQgbm90IGRlbGV0ZSAnJXMnIiwgcGF0aCk7CisKKwlpZiAoY2xvc2UoY3AuaW4pIDwgMCB8fCBmaW5pc2hfY29tbWFuZCgmY3ApIDwgMCkKKwkJZGllKCJDaGlsZCBkaWQgbm90IGZpbmlzaCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5oZXJpdF9oYW5kbGVfY2hpbGQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDApIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgcmVhZCBzdGRpbiIpOworCXByaW50ZigiUmVjZWl2ZWQgJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBjbWRfX3J1bl9jb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOwpAQCAtMzM1LDYgKzM3NSwxMCBAQAogCiAJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgInRlc3RzdWl0ZSIpKQogCQlleGl0KHRlc3RzdWl0ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZSIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlKGFyZ3ZbMF0pKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZS1jaGlsZCIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlX2NoaWxkKCkpOwogCiAJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJxdW90ZS1zdHJlc3MtdGVzdCIpKQogCQlyZXR1cm4gISFxdW90ZV9zdHJlc3NfdGVzdChhcmdjIC0gMSwgYXJndiArIDEpOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10b29sLmMgYi90L2hlbHBlci90ZXN0LXRvb2wuYwppbmRleCAxOWVlMjZkLi5mMjA5ODlkIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXRvb2wuYworKysgYi90L2hlbHBlci90ZXN0LXRvb2wuYwpAQCAtNDUsNiArNDUsNyBAQAogCXsgInByb2dyZXNzIiwgY21kX19wcm9ncmVzcyB9LAogCXsgInJlYWNoIiwgY21kX19yZWFjaCB9LAogCXsgInJlYWQtY2FjaGUiLCBjbWRfX3JlYWRfY2FjaGUgfSwKKwl7ICJyZWFkLWdyYXBoIiwgY21kX19yZWFkX2dyYXBoIH0sCiAJeyAicmVhZC1taWR4IiwgY21kX19yZWFkX21pZHggfSwKIAl7ICJyZWYtc3RvcmUiLCBjbWRfX3JlZl9zdG9yZSB9LAogCXsgInJlZ2V4IiwgY21kX19yZWdleCB9LApkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10b29sLmggYi90L2hlbHBlci90ZXN0LXRvb2wuaAppbmRleCBjMmFhNTZlLi44ZWQyYWY3IDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXRvb2wuaAorKysgYi90L2hlbHBlci90ZXN0LXRvb2wuaApAQCAtMzUsNiArMzUsNyBAQAogaW50IGNtZF9fcHJvZ3Jlc3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlYWNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19yZWFkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19yZWFkX2dyYXBoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19yZWFkX21pZHgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlZl9zdG9yZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fcmVnZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL3QvbGliLWJhc2guc2ggYi90L2xpYi1iYXNoLnNoCmluZGV4IDJiZTk1NWYuLmIwYjYwNjAgMTAwNjQ0Ci0tLSBhL3QvbGliLWJhc2guc2gKKysrIGIvdC9saWItYmFzaC5zaApAQCAtMiwxMCArMiwxMiBAQAogIyB0byBydW4gdW5kZXIgQmFzaDsgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0ZXN0cyBvZiB0aGUgY29tcGxldGlvbgogIyBzY3JpcHQuCiAKLWlmIHRlc3QgLW4gIiRCQVNIIiAmJiB0ZXN0IC16ICIkUE9TSVhMWV9DT1JSRUNUIjsgdGhlbgoraWYgdGVzdCAtbiAiJEJBU0giICYmIHRlc3QgLXogIiRQT1NJWExZX0NPUlJFQ1QiCit0aGVuCiAJIyB3ZSBhcmUgaW4gZnVsbC1vbiBiYXNoIG1vZGUKIAl0cnVlCi1lbGlmIHR5cGUgYmFzaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK2VsaWYgdHlwZSBiYXNoID4vZGV2L251bGwgMj4mMQordGhlbgogCSMgZXhlY3V0ZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQogCXVuc2V0IFBPU0lYTFlfQ09SUkVDVAogCWV4ZWMgYmFzaCAiJDAiICIkQCIKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1kYWVtb24uc2ggYi90L2xpYi1naXQtZGFlbW9uLnNoCmluZGV4IGZiOGY4ODcuLmU2MjU2OTIgMTAwNjQ0Ci0tLSBhL3QvbGliLWdpdC1kYWVtb24uc2gKKysrIGIvdC9saWItZ2l0LWRhZW1vbi5zaApAQCAtMTUsNyArMTUsNyBAQAogIwogIwl0ZXN0X2RvbmUKIAotaWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXRydWUgLS1leGl0LWNvZGUgR0lUX1RFU1RfR0lUX0RBRU1PTgoraWYgISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dJVF9EQUVNT04gdHJ1ZQogdGhlbgogCXNraXBfYWxsPSJnaXQtZGFlbW9uIHRlc3RpbmcgZGlzYWJsZWQgKHVuc2V0IEdJVF9URVNUX0dJVF9EQUVNT04gdG8gZW5hYmxlKSIKIAl0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1zdm4uc2ggYi90L2xpYi1naXQtc3ZuLnNoCmluZGV4IGJjMGI5YzcuLjdkMjQ4ZTYgMTAwNjQ0Ci0tLSBhL3QvbGliLWdpdC1zdm4uc2gKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtNjksNyArNjksNyBAQAogbWF5YmVfc3RhcnRfaHR0cGQgKCkgewogCWxvYz0kezEtc3ZufQogCi0JaWYgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSBHSVRfVEVTVF9TVk5fSFRUUEQKKwlpZiB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX1NWTl9IVFRQRCBmYWxzZQogCXRoZW4KIAkJLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKIAkJTElCX0hUVFBEX1NWTj0iJGxvYyIKQEAgLTEwNCw3ICsxMDQsNyBAQAogfQogCiByZXF1aXJlX3N2bnNlcnZlICgpIHsKLQlpZiAhIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgLS1leGl0LWNvZGUgR0lUX1RFU1RfU1ZOU0VSVkUKKwlpZiAhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfU1ZOU0VSVkUgZmFsc2UKIAl0aGVuCiAJCXNraXBfYWxsPSdza2lwcGluZyBzdm5zZXJ2ZSB0ZXN0LiAoc2V0ICRHSVRfVEVTVF9TVk5TRVJWRSB0byBlbmFibGUpJwogCQl0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKaW5kZXggMGQ5ODU3NS4uNjU2OTk3YiAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQuc2gKKysrIGIvdC9saWItaHR0cGQuc2gKQEAgLTQxLDcgKzQxLDcgQEAKIAl0ZXN0X2RvbmUKIGZpCiAKLWlmICEgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIEdJVF9URVNUX0hUVFBECitpZiAhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfSFRUUEQgdHJ1ZQogdGhlbgogCXNraXBfYWxsPSJOZXR3b3JrIHRlc3RpbmcgZGlzYWJsZWQgKHVuc2V0IEdJVF9URVNUX0hUVFBEIHRvIGVuYWJsZSkiCiAJdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9hcHBseS1vbmUtdGltZS1zZWQuc2ggYi90L2xpYi1odHRwZC9hcHBseS1vbmUtdGltZS1zZWQuc2gKaW5kZXggZmNlZjcyOC4uYmY3Njg5ZCAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtc2VkLnNoCisrKyBiL3QvbGliLWh0dHBkL2FwcGx5LW9uZS10aW1lLXNlZC5zaApAQCAtNywxMSArNywxMyBAQAogIwogIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIHRoZSBlZmZlY3RzIG9mIHRoZSByZXBvc2l0b3J5IGNoYW5naW5nIGluCiAjIGJldHdlZW4gSFRUUCByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotaWYgWyAtZSBvbmUtdGltZS1zZWQgXTsgdGhlbgoraWYgdGVzdCAtZiBvbmUtdGltZS1zZWQKK3RoZW4KIAkiJEdJVF9FWEVDX1BBVEgvZ2l0LWh0dHAtYmFja2VuZCIgPm91dAotCXNlZCAiJChjYXQgb25lLXRpbWUtc2VkKSIgPG91dCA+b3V0X21vZGlmaWVkCisJc2VkICIkKGNhdCBvbmUtdGltZS1zZWQpIiBvdXQgPm91dF9tb2RpZmllZAogCi0JaWYgZGlmZiBvdXQgb3V0X21vZGlmaWVkID4vZGV2L251bGw7IHRoZW4KKwlpZiBjbXAgLXMgb3V0IG91dF9tb2RpZmllZAorCXRoZW4KIAkJY2F0IG91dAogCWVsc2UKIAkJY2F0IG91dF9tb2RpZmllZApkaWZmIC0tZ2l0IGEvdC9saWItcmViYXNlLnNoIGIvdC9saWItcmViYXNlLnNoCmluZGV4IDZkODc5NjEuLmI3MmMwNTEgMTAwNjQ0Ci0tLSBhL3QvbGliLXJlYmFzZS5zaAorKysgYi90L2xpYi1yZWJhc2Uuc2gKQEAgLTExOSwzICsxMTksMzEgQEAKIAlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIiQxIiAmJgogCWdpdCB0YWcgIiQxIgogfQorCisjIENhbGwgdGhpcyAoaW5zaWRlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MpIGF0IHRoZSBlbmQgb2YgYSB0ZXN0IGZpbGUgdG8KKyMgY2hlY2sgdGhhdCBubyB0ZXN0cyBoYXZlIGNoYW5nZWQgZWRpdG9yIHJlbGF0ZWQgZW52aXJvbm1lbnQKKyMgdmFyaWFibGVzIG9yIGNvbmZpZyBzZXR0aW5ncwordGVzdF9lZGl0b3JfdW5jaGFuZ2VkICgpIHsKKwkjIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBleHBvcnRlZCB2YXJpYWJsZXMgaGVuY2UgJ3NoIC1jJworCXNoIC1jICdjYXQgPmFjdHVhbCA8PC1FT0YKKwlFRElUT1I9JEVESVRPUgorCUZBS0VfQ09NTUlUX0FNRU5EPSRGQUtFX0NPTU1JVF9BTUVORAorCUZBS0VfQ09NTUlUX01FU1NBR0U9JEZBS0VfQ09NTUlUX01FU1NBR0UKKwlGQUtFX0xJTkVTPSRGQUtFX0xJTkVTCisJR0lUX0VESVRPUj0kR0lUX0VESVRPUgorCUdJVF9TRVFVRU5DRV9FRElUT1I9JEdJVF9TRVFVRU5DRV9FRElUT1IKKwljb3JlLmVkaXRvcj0kKGdpdCBjb25maWcgY29yZS5lZGl0b3IpCisJc2VxdWVuY2UuZWRpdG9yPSQoZ2l0IGNvbmZpZyBzZXF1ZW5jZS5lZGl0b3IpCisJRU9GJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YKKwlFRElUT1I9OgorCUZBS0VfQ09NTUlUX0FNRU5EPQorCUZBS0VfQ09NTUlUX01FU1NBR0U9CisJRkFLRV9MSU5FUz0KKwlHSVRfRURJVE9SPQorCUdJVF9TRVFVRU5DRV9FRElUT1I9CisJY29yZS5lZGl0b3I9CisJc2VxdWVuY2UuZWRpdG9yPQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KZGlmZiAtLWdpdCBhL3Qvb2lkLWluZm8vaGFzaC1pbmZvIGIvdC9vaWQtaW5mby9oYXNoLWluZm8KaW5kZXggY2NkYmZkZi4uZDA3MzZkZCAxMDA2NDQKLS0tIGEvdC9vaWQtaW5mby9oYXNoLWluZm8KKysrIGIvdC9vaWQtaW5mby9oYXNoLWluZm8KQEAgLTYsMyArNiwxMiBAQAogCiB6ZXJvIHNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogemVybyBzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCithbGdvIHNoYTE6c2hhMQorYWxnbyBzaGEyNTY6c2hhMjU2CisKK2VtcHR5X2Jsb2Igc2hhMTplNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitlbXB0eV9ibG9iIHNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzCisKK2VtcHR5X3RyZWUgc2hhMTo0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CitlbXB0eV90cmVlIHNoYTI1Njo2ZWYxOWI0MTIyNWM1MzY5ZjFjMTA0ZDQ1ZDhkODVlZmE5YjA1N2I1M2IxNGI0YjliOTM5ZGQ3NGRlY2M1MzIxCmRpZmYgLS1naXQgYS90L3BlcmYvYWdncmVnYXRlLnBlcmwgYi90L3BlcmYvYWdncmVnYXRlLnBlcmwKaW5kZXggNjY1NTRkMi4uMTRlNGNkYSAxMDA3NTUKLS0tIGEvdC9wZXJmL2FnZ3JlZ2F0ZS5wZXJsCisrKyBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybApAQCAtNCw3ICs0LDYgQEAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2UgR2V0b3B0OjpMb25nOwotdXNlIEdpdDsKIHVzZSBDd2QgcXcocmVhbHBhdGgpOwogCiBzdWIgZ2V0X3RpbWVzIHsKQEAgLTg1LDYgKzg0LDExIEBACiAJcmV0dXJuICRvdXQ7CiB9CiAKK3N1YiBzYW5lX2JhY2t0aWNrcyB7CisJb3BlbihteSAkZmgsICctfCcsIEBfKTsKKwlyZXR1cm4gPCRmaD47Cit9CisKIG15IChAZGlycywgJWRpcm5hbWVzLCAlZGlyYWJicmV2cywgJXByZWZpeGVzLCBAdGVzdHMsCiAgICAgJGNvZGVzcGVlZCwgJHNvcnRieSwgJHN1YnNlY3Rpb24sICRyZXBvbmFtZSk7CiAKQEAgLTEwMiw3ICsxMDYsOCBAQAogCW15ICRwcmVmaXggPSAnJzsKIAlsYXN0IGlmIC1mICRhcmcgb3IgJGFyZyBlcSAiLS0iOwogCWlmICghIC1kICRhcmcpIHsKLQkJbXkgJHJldiA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLXZlcmlmeSksICRhcmcpOworCQlteSAkcmV2ID0gc2FuZV9iYWNrdGlja3MocXcoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSksICRhcmcpOworCQljaG9tcCAkcmV2OwogCQkkZGlyID0gImJ1aWxkLyIuJHJldjsKIAl9IGVsc2lmICgkYXJnIGVxICcuJykgewogCQkkZGlyID0gJy4nOwpAQCAtMjE5LDEzICsyMjQsNyBAQAogCQlmb3IgbXkgJGkgKDAuLiQjZGlycykgewogCQkJbXkgJGQgPSAkZGlyc1skaV07CiAJCQlteSAkYmFzZSA9ICIkcmVzdWx0c2Rpci8kcHJlZml4ZXN7JGR9JHQiOwotCQkJJHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9ID0gW107Ci0JCQlmb3JlYWNoIG15ICR0eXBlIChxdyh0aW1lcyBzaXplKSkgewotCQkJCWlmICgtZSAiJGJhc2UuJHR5cGUiKSB7Ci0JCQkJCSR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fSA9IFtnZXRfdGltZXMoIiRiYXNlLiR0eXBlIildOwotCQkJCQlsYXN0OwotCQkJCX0KLQkJCX0KKwkJCSR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fSA9IFtnZXRfdGltZXMoIiRiYXNlLnJlc3VsdCIpXTsKIAkJCW15ICgkciwkdSwkcykgPSBAeyR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fX07CiAJCQlteSAkdyA9IGxlbmd0aCBmb3JtYXRfdGltZXMoJHIsJHUsJHMsJGZpcnN0cik7CiAJCQkkY29sd2lkdGhbJGldID0gJHcgaWYgJHcgPiAkY29sd2lkdGhbJGldOwpAQCAtMjY3LDcgKzI2Niw3IEBACiAJCW15ICgkcHJldnIsICRwcmV2dSwgJHByZXZzLCAkcHJldnJldik7CiAJCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CiAJCQlteSAkZCA9ICRkaXJzWyRpXTsKLQkJCW15ICgkciwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnRpbWVzIik7CisJCQlteSAoJHIsICR1LCAkcykgPSBnZXRfdGltZXMoIiRyZXN1bHRzZGlyLyRwcmVmaXhlc3skZH0kdC5yZXN1bHQiKTsKIAkJCWlmICgkaSA+IDAgYW5kIGRlZmluZWQgJHIgYW5kIGRlZmluZWQgJHByZXZyIGFuZCAkcHJldnIgPiAwKSB7CiAJCQkJbXkgJHBlcmNlbnQgPSAxMDAuMCAqICgkciAtICRwcmV2cikgLyAkcHJldnI7CiAJCQkJcHVzaCBAZXZvbHV0aW9ucywgeyAicGVyY2VudCIgID0+ICRwZXJjZW50LApAQCAtMzI3LDcgKzMyNiw3IEBACiAJCQlteSAkY29tbWl0aWQgPSAkcHJlZml4ZXN7JGR9OwogCQkJJGNvbW1pdGlkID1+IHMvXmJ1aWxkXy8vOwogCQkJJGNvbW1pdGlkID1+IHMvXC4kLy87Ci0JCQlteSAoJHJlc3VsdF92YWx1ZSwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnRpbWVzIik7CisJCQlteSAoJHJlc3VsdF92YWx1ZSwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnJlc3VsdCIpOwogCiAJCQlteSAldmFscyA9ICgKIAkJCQkiY29tbWl0aWQiID0+ICRjb21taXRpZCwKZGlmZiAtLWdpdCBhL3QvcGVyZi9iaXNlY3RfcmVncmVzc2lvbiBiL3QvcGVyZi9iaXNlY3RfcmVncmVzc2lvbgppbmRleCBhOTRkOTk1Li5jZTQ3ZTE2IDEwMDc1NQotLS0gYS90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24KKysrIGIvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uCkBAIC01MSw3ICs1MSw3IEBACiBuZXd0aW1lPSQoZWNobyAiJG5ld3RpbWUiIHwgc2VkIC1lICdzL15cKFswLTldXCtcLlswLTldXCtcKS4qJC9cMS8nKQogCiB0ZXN0ICQoZWNobyAiJG5ld3RpbWUiICIkb2xkdGltZSIgfCBhd2sgJ3sgcHJpbnQgKCQxID4gJDIpIH0nKSA9IDEgfHwKLQlkaWUgIk5ldyB0aW1lICckbmV3dGltZScgc2hvdWQgYmUgZ3JlYXRlciB0aGFuIG9sZCB0aW1lICckb2xkdGltZSciCisJZGllICJOZXcgdGltZSAnJG5ld3RpbWUnIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb2xkIHRpbWUgJyRvbGR0aW1lJyIKIAogdG1wZGlyPSQobWt0ZW1wIC1kIC10IGJpc2VjdF9yZWdyZXNzaW9uX1hYWFhYWCkgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIHRlbXAgZGlyZWN0b3J5IgogZWNobyAiJG9sZHRpbWUiID4iJHRtcGRpci9vbGR0aW1lIiB8fCBkaWUgIkZhaWxlZCB0byB3cml0ZSB0byAnJHRtcGRpci9vbGR0aW1lJyIKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoIGIvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2gKaW5kZXggMzc3OTg1MS4uN2VlNzkxNiAxMDA3NTUKLS0tIGEvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2gKKysrIGIvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2gKQEAgLTc3LDYgKzc3LDcgQEAKIAkjIGFjdHVhbCBwYWNrIGdlbmVyYXRpb24sIHdpdGhvdXQgc211ZGdpbmcgdGhlIG9uLWRpc2sgc2V0dXAKIAkjIGJldHdlZW4gdHJpYWxzLgogCXRlc3RfcGVyZiAicmVwYWNrICgkbnJfcGFja3MpIiAnCisJCUdJVF9URVNUX0ZVTExfSU5fUEFDS19BUlJBWT0xIFwKIAkJZ2l0IHBhY2stb2JqZWN0cyAtLWtlZXAtdHJ1ZS1wYXJlbnRzIFwKIAkJICAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCBcCiAJCSAgLS1yZWZsb2cgLS1pbmRleGVkLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCBcCkBAIC04NCw0ICs4NSwyMiBAQAogCScKIGRvbmUKIAorIyBNZWFzdXJlIHBhY2sgbG9hZGluZyB3aXRoIDEwLDAwMCBwYWNrcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dlbmVyYXRlIGxvdHMgb2YgcGFja3MnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEwMDAwKTsgZG8KKwkJZWNobyAiYmxvYiIKKwkJZWNobyAiZGF0YSA8PEVPRiIKKwkJZWNobyAiYmxvYiAkaSIKKwkJZWNobyAiRU9GIgorCQllY2hvICJjaGVja3BvaW50IgorCWRvbmUgfAorCWdpdCAtYyBmYXN0aW1wb3J0LnVucGFja0xpbWl0PTAgZmFzdC1pbXBvcnQKKycKKworIyBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gZXZhbHVhdGUgbG9hZCB0aW1lIGZvciBhIGxhcmdlIG51bWJlcgorIyBvZiBwYWNrcyB3aGlsZSBkb2luZyBhcyBsaXR0bGUgb3RoZXIgd29yayBhcyBwb3NzaWJsZS4KK3Rlc3RfcGVyZiAibG9hZCAxMCwwMDAgcGFja3MiICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJIRUFEXntjb21taXR9IgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wZXJmLWxpYi5zaCBiL3QvcGVyZi9wZXJmLWxpYi5zaAppbmRleCBiNThhNDNlLi4xM2UzODkzIDEwMDY0NAotLS0gYS90L3BlcmYvcGVyZi1saWIuc2gKKysrIGIvdC9wZXJmL3BlcmYtbGliLnNoCkBAIC0yMTQsNyArMjE0LDcgQEAKIAllbHNlCiAJCXRlc3Rfb2tfICIkMSIKIAlmaQotCSIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYvbWluX3RpbWUucGVybCB0ZXN0X3RpbWUuKiA+IiRiYXNlIi50aW1lcworCSIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYvbWluX3RpbWUucGVybCB0ZXN0X3RpbWUuKiA+IiRiYXNlIi5yZXN1bHQKIH0KIAogdGVzdF9wZXJmICgpIHsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiB0ZXN0X3NpemVfICgpIHsKIAlzYXkgPiYzICJydW5uaW5nOiAkMiIKLQlpZiB0ZXN0X2V2YWxfICIkMiIgMz4iJGJhc2UiLnNpemU7IHRoZW4KKwlpZiB0ZXN0X2V2YWxfICIkMiIgMz4iJGJhc2UiLnJlc3VsdDsgdGhlbgogCQl0ZXN0X29rXyAiJDEiCiAJZWxzZQogCQl0ZXN0X2ZhaWx1cmVfICIkQCIKZGlmZiAtLWdpdCBhL3QvdDAwMDAtYmFzaWMuc2ggYi90L3QwMDAwLWJhc2ljLnNoCmluZGV4IDRkM2Y3YmEuLjhhODFhMjQgMTAwNzU1Ci0tLSBhL3QvdDAwMDAtYmFzaWMuc2gKKysrIGIvdC90MDAwMC1iYXNpYy5zaApAQCAtMjAsOSArMjAsOSBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotdHJ5X2xvY2FsX3ggKCkgewotCWxvY2FsIHg9ImxvY2FsIiAmJgotCWVjaG8gIiR4IgordHJ5X2xvY2FsX3h5ICgpIHsKKwlsb2NhbCB4PSJsb2NhbCIgeT0iYWxzb2xvY2FsIiAmJgorCWVjaG8gIiR4ICR5IgogfQogCiAjIENoZWNrIHdoZXRoZXIgdGhlIHNoZWxsIHN1cHBvcnRzIHRoZSAibG9jYWwiIGtleXdvcmQuICJsb2NhbCIgaXMgbm90CkBAIC0zNSwxMSArMzUsMTIgQEAKICMgcmVseWluZyBvbiAibG9jYWwiLgogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgdGhlIHJ1bm5pbmcgc2hlbGwgc3VwcG9ydHMgImxvY2FsIicgJwogCXg9Im5vdGxvY2FsIiAmJgotCWVjaG8gImxvY2FsIiA+ZXhwZWN0ZWQxICYmCi0JdHJ5X2xvY2FsX3ggPmFjdHVhbDEgJiYKKwl5PSJhbHNvbm90bG9jYWwiICYmCisJZWNobyAibG9jYWwgYWxzb2xvY2FsIiA+ZXhwZWN0ZWQxICYmCisJdHJ5X2xvY2FsX3h5ID5hY3R1YWwxICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEgJiYKLQllY2hvICJub3Rsb2NhbCIgPmV4cGVjdGVkMiAmJgotCWVjaG8gIiR4IiA+YWN0dWFsMiAmJgorCWVjaG8gIm5vdGxvY2FsIGFsc29ub3Rsb2NhbCIgPmV4cGVjdGVkMiAmJgorCWVjaG8gIiR4ICR5IiA+YWN0dWFsMiAmJgogCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyCiAnCiAKQEAgLTEyNiw3ICsxMjcsNyBAQAogCiBjaGVja19zdWJfdGVzdF9saWJfdGVzdF9lcnIgKCkgewogCW5hbWU9IiQxIiAjIHN0ZGluIGlzIHRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSB0aGUgdGVzdAotCSMgZXhwZWN0ZWQgZXJyb3Igb3V0cHV0IGlzIGluIGRlc2NyaXB0aW9yIDMKKwkjIGV4cGVjdGVkIGVycm9yIG91dHB1dCBpcyBpbiBkZXNjcmlwdG9yIDMKIAkoCiAJCWNkICIkbmFtZSIgJiYKIAkJc2VkIC1lICdzL14+IC8vJyAtZSAncy9aJC8vJyA+ZXhwZWN0Lm91dCAmJgpAQCAtOTE2LDYgKzkxNyw0MCBAQAogCXRlc3QgIiRoZXhzeiIgLWVxIDY0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RfYm9vbF9lbnYnICcKKwkoCisJCXNhbmVfdW5zZXQgZW52dmFyICYmCisKKwkJdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPSAmJgorCQlleHBvcnQgZW52dmFyICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPXRydWUgJiYKKwkJdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSAmJgorCQl0ZXN0X2Jvb2xfZW52IGVudnZhciBmYWxzZSAmJgorCisJCWVudnZhcj1mYWxzZSAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIHRydWUgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciBmYWxzZSAmJgorCisJCWVudnZhcj1pbnZhbGlkICYmCisJCSMgV2hlbiBlbmNvdW50ZXJpbmcgYW4gaW52YWxpZCBib29sIHZhbHVlLCB0ZXN0X2Jvb2xfZW52CisJCSMgcHJpbnRzIGl0cyBlcnJvciBtZXNzYWdlIHRvIHRoZSBvcmlnaW5hbCBzdGRlcnIgb2YgdGhlCisJCSMgdGVzdCBzY3JpcHQsIGhlbmNlIHRoZSByZWRpcmVjdGlvbiBvZiBmZCA3LCBhbmQgYWJvcnRzCisJCSMgd2l0aCAiZXhpdCAxIiwgaGVuY2UgdGhlIHN1YnNoZWxsLgorCQkhICggdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSApIDc+ZXJyICYmCisJCWdyZXAgImVycm9yOiB0ZXN0X2Jvb2xfZW52IHJlcXVpcmVzIGJvb2wgdmFsdWVzIiBlcnIgJiYKKworCQllbnZ2YXI9dHJ1ZSAmJgorCQkhICggdGVzdF9ib29sX2VudiBlbnZ2YXIgaW52YWxpZCApIDc+ZXJyICYmCisJCWdyZXAgImVycm9yOiB0ZXN0X2Jvb2xfZW52IHJlcXVpcmVzIGJvb2wgdmFsdWVzIiBlcnIKKwkpCisnCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQmFzaWNzIG9mIHRoZSBiYXNpY3MKIApkaWZmIC0tZ2l0IGEvdC90MDAxNC1hbGlhcy5zaCBiL3QvdDAwMTQtYWxpYXMuc2gKaW5kZXggMjY5NGM4MS4uOGQzZDkxNCAxMDA3NTUKLS0tIGEvdC90MDAxNC1hbGlhcy5zaAorKysgYi90L3QwMDE0LWFsaWFzLnNoCkBAIC0zOCw4ICszOCw4IEBACiAjJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4tY29tbWFuZCBmb3JtYXRzIGVtcHR5IGFyZ3MgcHJvcGVybHknICcKLSAgICBHSVRfVFJBQ0U9MSBnaXQgZnJvdHogYSAiIiBiICIgIiBjIDI+JjEgfAotICAgIHNlZCAtbmUgIi9ydW5fY29tbWFuZDovcy8uKnRyYWNlOiBydW5fY29tbWFuZDogLy9wIiA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRT0xIGdpdCBmcm90eiBhICIiIGIgIiAiIGMgMj5hY3R1YWwucmF3ICYmCisgICAgc2VkIC1uZSAiL3J1bl9jb21tYW5kOi9zLy4qdHJhY2U6IHJ1bl9jb21tYW5kOiAvL3AiIGFjdHVhbC5yYXcgPmFjdHVhbCAmJgogICAgIGVjaG8gImdpdC1mcm90eiBhICdcJycnXCcnIGIgJ1wnJyAnXCcnIGMiID5leHBlY3QgJiYKICAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3QwMDIxLWNvbnZlcnNpb24uc2ggYi90L3QwMDIxLWNvbnZlcnNpb24uc2gKaW5kZXggYzk1NGM3MC4uNmM2ZDc3YiAxMDA3NTUKLS0tIGEvdC90MDAyMS1jb252ZXJzaW9uLnNoCisrKyBiL3QvdDAwMjEtY29udmVyc2lvbi5zaApAQCAtMzUsNyArMzUsNyBAQAogIyBDb21wYXJlIHR3byBmaWxlcyBhbmQgZW5zdXJlIHRoYXQgYGNsZWFuYCBhbmQgYHNtdWRnZWAgcmVzcGVjdGl2ZWx5IGFyZQogIyBjYWxsZWQgYXQgbGVhc3Qgb25jZSBpZiBzcGVjaWZpZWQgaW4gdGhlIGBleHBlY3RgIGZpbGUuIFRoZSBhY3R1YWwKICMgaW52b2NhdGlvbiBjb3VudCBpcyBub3QgcmVsZXZhbnQgYmVjYXVzZSB0aGVpciBudW1iZXIgY2FuIHZhcnkuCi0jIGMuZi4gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L3htcXFzaHYxOGk4aS5mc2ZAZ2l0c3Rlci5tdHYuY29ycC5nb29nbGUuY29tLworIyBjLmYuIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L3htcXFzaHYxOGk4aS5mc2ZAZ2l0c3Rlci5tdHYuY29ycC5nb29nbGUuY29tLwogdGVzdF9jbXBfY291bnQgKCkgewogCWV4cGVjdD0kMQogCWFjdHVhbD0kMgpAQCAtNTAsNyArNTAsNyBAQAogCiAjIENvbXBhcmUgdHdvIGZpbGVzIGJ1dCBleGNsdWRlIGFsbCBgY2xlYW5gIGludm9jYXRpb25zIGJlY2F1c2UgR2l0IGNhbgogIyBjYWxsIGBjbGVhbmAgemVybyBvciBtb3JlIHRpbWVzLgotIyBjLmYuIGh0dHA6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC94bXFxc2h2MThpOGkuZnNmQGdpdHN0ZXIubXR2LmNvcnAuZ29vZ2xlLmNvbS8KKyMgYy5mLiBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC94bXFxc2h2MThpOGkuZnNmQGdpdHN0ZXIubXR2LmNvcnAuZ29vZ2xlLmNvbS8KIHRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gKCkgewogCWV4cGVjdD0kMQogCWFjdHVhbD0kMgpkaWZmIC0tZ2l0IGEvdC90MDAyNy1hdXRvLWNybGYuc2ggYi90L3QwMDI3LWF1dG8tY3JsZi5zaAppbmRleCA5NTliNmRhLi45ZmNkNTZmIDEwMDc1NQotLS0gYS90L3QwMDI3LWF1dG8tY3JsZi5zaAorKysgYi90L3QwMDI3LWF1dG8tY3JsZi5zaApAQCAtMjE1LDcgKzIxNSw3IEBACiB9CiAKIAotIyBjb250cnVjdCB0aGUgYXR0ci8gcmV0dXJuZWQgYnkgZ2l0IGxzLWZpbGVzIC0tZW9sCisjIGNvbnN0cnVjdCB0aGUgYXR0ci8gcmV0dXJuZWQgYnkgZ2l0IGxzLWZpbGVzIC0tZW9sCiAjIFRha2Ugbm9uZSAoPWVtcHR5KSwgb25lIG9yIHR3byBhcmdzCiAjIGNvbnZlcnQuYzogZW9sPVhYIG92ZXJyaWRlcyB0ZXh0PWF1dG8KIGF0dHJfYXNjaWkgKCkgewpkaWZmIC0tZ2l0IGEvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2ggYi90L3QwMDI4LXdvcmtpbmctdHJlZS1lbmNvZGluZy5zaAppbmRleCA3YWEwOTQ1Li5iZmM0ZmI5IDEwMDc1NQotLS0gYS90L3QwMDI4LXdvcmtpbmctdHJlZS1lbmNvZGluZy5zaAorKysgYi90L3QwMDI4LXdvcmtpbmctdHJlZS1lbmNvZGluZy5zaApAQCAtMTcsNyArMTcsNyBAQAogd3JpdGVfdXRmMTYgKCkgewogCWlmIHRlc3RfaGF2ZV9wcmVyZXEgTk9fVVRGMTZfQk9NCiAJdGhlbgotCQlwcmludGYgJ1x4ZmVceGZmJworCQlwcmludGYgJ1wzNzZcMzc3JwogCWZpICYmCiAJaWNvbnYgLWYgVVRGLTggLXQgVVRGLTE2CiB9CkBAIC0yNSw3ICsyNSw3IEBACiB3cml0ZV91dGYzMiAoKSB7CiAJaWYgdGVzdF9oYXZlX3ByZXJlcSBOT19VVEYzMl9CT00KIAl0aGVuCi0JCXByaW50ZiAnXHgwMFx4MDBceGZlXHhmZicKKwkJcHJpbnRmICdcMFwwXDM3NlwzNzcnCiAJZmkgJiYKIAlpY29udiAtZiBVVEYtOCAtdCBVVEYtMzIKIH0KZGlmZiAtLWdpdCBhL3QvdDAwNjAtcGF0aC11dGlscy5zaCBiL3QvdDAwNjAtcGF0aC11dGlscy5zaAppbmRleCBiMTkzZWQ0Li5kZTJkZjU3IDEwMDc1NQotLS0gYS90L3QwMDYwLXBhdGgtdXRpbHMuc2gKKysrIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCkBAIC0yOTQsOSArMjk0LDEzIEBACiB0ZXN0X2dpdF9wYXRoIEdJVF9PQkpFQ1RfRElSRUNUT1JZPWZvbyBvYmplY3RzMiAuZ2l0L29iamVjdHMyCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21tb24gcmVwb3NpdG9yeScgJ2dpdCAtLWdpdC1kaXI9YmFyIGluaXQnCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmRleCAgICAgICAgICAgICAgICAgICAgLmdpdC9pbmRleAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5kZXgubG9jayAgICAgICAgICAgICAgIC5naXQvaW5kZXgubG9jawogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgSEVBRCAgICAgICAgICAgICAgICAgICAgIC5naXQvSEVBRAogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9IRUFEICAgICAgICAgICAgICAgIC5naXQvbG9ncy9IRUFECit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL0hFQUQubG9jayAgICAgICAgICAgLmdpdC9sb2dzL0hFQUQubG9jawogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjdC9mb28gICAgIC5naXQvbG9ncy9yZWZzL2Jpc2VjdC9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcyAgICAgICAgICAgICAgICBiYXIvbG9ncy9yZWZzCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvICAgICAgICAgICAgICAgYmFyL2xvZ3MvcmVmcy8KIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlYy9mb28gICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjL2ZvbwogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjICAgICAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWMKIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlY3Rmb28gICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjdGZvbwpkaWZmIC0tZ2l0IGEvdC90MDA2MS1ydW4tY29tbWFuZC5zaCBiL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2gKaW5kZXggMTdjOWMwZi4uN2Q1OTk2NyAxMDA3NTUKLS0tIGEvdC90MDA2MS1ydW4tY29tbWFuZC5zaAorKysgYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCkBAIC0xMiw2ICsxMiwxMCBAQAogCWNhdCBoZWxsby1zY3JpcHQKIEVPRgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdzdWJwcm9jZXNzIGluaGVyaXRzIG9ubHkgc3RkIGhhbmRsZXMnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgaW5oZXJpdGVkLWhhbmRsZQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydF9jb21tYW5kIHJlcG9ydHMgRU5PRU5UIChzbGFzaCknICcKIAl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgc3RhcnQtY29tbWFuZC1FTk9FTlQgLi9kb2VzLW5vdC1leGlzdCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIlwuL2RvZXMtbm90LWV4aXN0IiBlcnIKZGlmZiAtLWdpdCBhL3QvdDAwOTAtY2FjaGUtdHJlZS5zaCBiL3QvdDAwOTAtY2FjaGUtdHJlZS5zaAppbmRleCBjZTlhNGE1Li41YTYzMzY5IDEwMDc1NQotLS0gYS90L3QwMDkwLWNhY2hlLXRyZWUuc2gKKysrIGIvdC90MDA5MC1jYWNoZS10cmVlLnNoCkBAIC0yMSw5ICsyMSwxMCBAQAogCXBhcmVudD0iJDIiICYmCiAJIyBscy1maWxlcyBtaWdodCBoYXZlIGZvby9iYXIsIGZvby9iYXIvYmF6LCBhbmQgZm9vL2Jhci9xdXV4CiAJIyBXZSB3YW50IHRvIGNvdW50IG9ubHkgZm9vIGJlY2F1c2UgaXQncyB0aGUgb25seSBkaXJlY3QgY2hpbGQKLQlzdWJ0cmVlcz0kKGdpdCBscy1maWxlc3xncmVwIC98Y3V0IC1kIC8gLWYgMXx1bmlxKSAmJgorCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwlzdWJ0cmVlcz0kKGdyZXAgLyBmaWxlc3xjdXQgLWQgLyAtZiAxfHVuaXEpICYmCiAJc3VidHJlZV9jb3VudD0kKGVjaG8gIiRzdWJ0cmVlcyJ8YXdrIC12IGM9MCAnJDEgIT0gIiIgeysrY30gRU5EIHtwcmludCBjfScpICYmCi0JZW50cmllcz0kKGdpdCBscy1maWxlc3x3YyAtbCkgJiYKKwllbnRyaWVzPSQod2MgLWwgPGZpbGVzKSAmJgogCXByaW50ZiAiU0hBICRkaXIgKCVkIGVudHJpZXMsICVkIHN1YnRyZWVzKVxuIiAiJGVudHJpZXMiICIkc3VidHJlZV9jb3VudCIgJiYKIAlmb3Igc3VidHJlZSBpbiAkc3VidHJlZXMKIAlkbwpkaWZmIC0tZ2l0IGEvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoIGIvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoCmluZGV4IDI0Y2NiZDguLmQyZDA4OGQgMTAwNzU1Ci0tLSBhL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaAorKysgYi90L3QwNTAwLXByb2dyZXNzLWRpc3BsYXkuc2gKQEAgLTc2LDcgKzc2LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSBicmVha3MgbG9uZyBsaW5lcyAjMicgJwotCSMgTm90ZTogd2UgZG9udCBuZWVkIHRoYXQgbWFueSBzcGFjZXMgYWZ0ZXIgdGhlIHRpdGxlIHRvIGNvdmVyIHVwCisJIyBOb3RlOiB3ZSBkbyBub3QgbmVlZCB0aGF0IG1hbnkgc3BhY2VzIGFmdGVyIHRoZSB0aXRsZSB0byBjb3ZlciB1cAogCSMgdGhlIGxhc3QgbGluZSBiZWZvcmUgYnJlYWtpbmcgdGhlIHByb2dyZXNzIGxpbmUuCiAJc2VkIC1lICJzL1okLy8iID5leHBlY3QgPDxcRU9GICYmCiBXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjY6ICAgMCUgKDEvMTAwMDAwKTxDUj4KQEAgLTEwNCw3ICsxMDQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBkaXNwbGF5IGJyZWFrcyBsb25nIGxpbmVzICMzIC0gZXZlbiB0aGUgZmlyc3QgaXMgdG9vIGxvbmcnICcKLQkjIE5vdGU6IHdlIGRvbnQgYWN0dWFsbHkgbmVlZCBhbnkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIHRpdGxlCisJIyBOb3RlOiB3ZSBkbyBub3QgYWN0dWFsbHkgbmVlZCBhbnkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIHRpdGxlCiAJIyBsaW5lLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHByb2dyZXNzIGxpbmUgdG8gY292ZXIgdXAuCiAJc2VkIC1lICJzL1okLy8iID5leHBlY3QgPDxcRU9GICYmCiBXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjY6ICAgICAgICAgICAgICAgICAgIFoKZGlmZiAtLWdpdCBhL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaCBiL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaAppbmRleCBiYTcxYjE1Li5lYjQ0YmFmIDEwMDc1NQotLS0gYS90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKKysrIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCkBAIC0yMTUsNyArMjE1LDYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggcmVtb3ZhbCBhbmQgd29ya3RyZWUgbmFycm93aW5nIGF0IHRoZSBzYW1lIHRpbWUnICcKLQk+ZW1wdHkgJiYKIAllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgogCWVjaG8gc3ViL2FkZGVkID4+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgogCWdpdCBjaGVja291dCAtZiB0b3AgJiYKQEAgLTIyMyw3ICsyMjIsNyBAQAogCWdpdCBjaGVja291dCByZW1vdmVkICYmCiAJZ2l0IGxzLWZpbGVzIHN1Yi9hZGRlZCA+cmVzdWx0ICYmCiAJdGVzdCAhIC1mIHN1Yi9hZGRlZCAmJgotCXRlc3RfY21wIGVtcHR5IHJlc3VsdAorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXN1bHQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIC0tcmVzZXQgcmVtb3ZlcyBvdXRzaWRlIHdvcmt0cmVlJyAnCmRpZmYgLS1naXQgYS90L3QxMDUwLWxhcmdlLnNoIGIvdC90MTA1MC1sYXJnZS5zaAppbmRleCBkY2I0ZGJiLi5kM2IyYWRiIDEwMDc1NQotLS0gYS90L3QxMDUwLWxhcmdlLnNoCisrKyBiL3QvdDEwNTAtbGFyZ2Uuc2gKQEAgLTE5NCwxNSArMTk0LDE1IEBACiAJdGVzdF9jbXAgaHVnZSBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFjaGl2aW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYXJjaGl2aW5nJyAnCiAJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQgPi9kZXYvbnVsbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd6aXAgYWNoaXZpbmcsIHN0b3JlIG9ubHknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhcmNoaXZpbmcsIHN0b3JlIG9ubHknICcKIAlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLTAgSEVBRCA+L2Rldi9udWxsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhY2hpdmluZywgZGVmbGF0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFyY2hpdmluZywgZGVmbGF0ZScgJwogCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID4vZGV2L251bGwKICcKIApkaWZmIC0tZ2l0IGEvdC90MTA5MS1zcGFyc2UtY2hlY2tvdXQtYnVpbHRpbi5zaCBiL3QvdDEwOTEtc3BhcnNlLWNoZWNrb3V0LWJ1aWx0aW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY3ZTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwOTEtc3BhcnNlLWNoZWNrb3V0LWJ1aWx0aW4uc2gKQEAgLTAsMCArMSwzMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGFyc2UgY2hlY2tvdXQgYnVpbHRpbiB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK2xpc3RfZmlsZXMoKSB7CisJIyBEbyBub3QgcmVwbGFjZSB0aGlzIHdpdGggJ2xzICIkMSInLCBhcyAibHMiIHdpdGggQlNELWxpbmVhZ2UKKwkjIGVuYWJsZXMgIi1BIiBieSBkZWZhdWx0IGZvciByb290IGFuZCBlbmRzIHVwIGluY2x1ZGluZyAiLmdpdCIgYW5kCisJIyBzdWNoIGluIGl0cyBvdXRwdXQuIChOb3RlLCB0aG91Z2gsIHRoYXQgcnVubmluZyB0aGUgdGVzdCBzdWl0ZSBhcworCSMgcm9vdCBpcyBnZW5lcmFsbHkgbm90IHJlY29tbWVuZGVkLikKKwkoY2QgIiQxIiAmJiBwcmludGYgJyVzXG4nICopCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGluaXQgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQllY2hvICJpbml0aWFsIiA+YSAmJgorCQlta2RpciBmb2xkZXIxIGZvbGRlcjIgZGVlcCAmJgorCQlta2RpciBkZWVwL2RlZXBlcjEgZGVlcC9kZWVwZXIyICYmCisJCW1rZGlyIGRlZXAvZGVlcGVyMS9kZWVwZXN0ICYmCisJCWNwIGEgZm9sZGVyMSAmJgorCQljcCBhIGZvbGRlcjIgJiYKKwkJY3AgYSBkZWVwICYmCisJCWNwIGEgZGVlcC9kZWVwZXIxICYmCisJCWNwIGEgZGVlcC9kZWVwZXIyICYmCisJCWNwIGEgZGVlcC9kZWVwZXIxL2RlZXBlc3QgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0IChlbXB0eSknICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+bGlzdCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBsaXN0ICYmCisJdGVzdF9pMThuZ3JlcCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzcGFyc2UtY2hlY2tvdXQgbGlzdCAocG9wdWxhdGVkKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1FT0YgJiYKKwkJL2ZvbGRlcjEvKgorCQkvZGVlcC8KKwkJKiovYQorCQkhKmJpbioKKwlFT0YKKwljcCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgZXhwZWN0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmxpc3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkvKgorCQkhLyovCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyByZXBvIHRydWUgY29yZS5zcGFyc2VjaGVja291dCAmJgorCWxpc3RfZmlsZXMgcmVwbyA+ZGlyICAmJgorCWVjaG8gYSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3QgYWZ0ZXIgaW5pdCcgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLyoKKwkJIS8qLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCcgJworCWVjaG8gIipmb2xkZXIqIiA+PiByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkvKgorCQkhLyovCisJCSpmb2xkZXIqCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWxpc3RfZmlsZXMgcmVwbyA+ZGlyICAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlhCisJCWZvbGRlcjEKKwkJZm9sZGVyMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1zcGFyc2UnICcKKwlnaXQgY2xvbmUgLS1zcGFyc2UgcmVwbyBjbG9uZSAmJgorCWdpdCAtQyBjbG9uZSBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCS8qCisJCSEvKi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJbGlzdF9maWxlcyBjbG9uZSA+ZGlyICYmCisJZWNobyBhID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBlbmFibGVzIGNvbmZpZycgJworCWdpdCBpbml0IGVtcHR5LWNvbmZpZyAmJgorCSgKKwkJY2QgZW1wdHktY29uZmlnICYmCisJCXRlc3RfY29tbWl0IHRlc3QgZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2NvbmZpZy53b3JrdHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCBub3RoaW5nICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvY29uZmlnLndvcmt0cmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgY29yZS5zcGFyc2VDaGVja291dCAmJgorCQlnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAiLyoiICYmCisJCXRlc3RfY21wX2NvbmZpZyB0cnVlIGNvcmUuc3BhcnNlQ2hlY2tvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBzcGFyc2UtY2hlY2tvdXQgdXNpbmcgYnVpbHRpbicgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgIi8qIiAiIS8qLyIgIipmb2xkZXIqIiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkvKgorCQkhLyovCisJCSpmb2xkZXIqCisJRU9GCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJbGlzdF9maWxlcyByZXBvID5kaXIgICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWEKKwkJZm9sZGVyMQorCQlmb2xkZXIyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc3BhcnNlLWNoZWNrb3V0IHVzaW5nIC0tc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLyoKKwkJIS8qLworCQkvZm9sZGVyMS8KKwkJL2ZvbGRlcjIvCisJRU9GCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCAtLXN0ZGluIDxleHBlY3QgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlsaXN0X2ZpbGVzIHJlcG8gPmRpciAgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJYQorCQlmb2xkZXIxCisJCWZvbGRlcjIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogbWF0Y2ggcGF0dGVybnMnICcKKwlnaXQgLUMgcmVwbyBjb25maWcgLS13b3JrdHJlZSBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZSB0cnVlICYmCisJcm0gLXJmIHJlcG8vYSByZXBvL2ZvbGRlcjEgcmVwby9mb2xkZXIyICYmCisJZ2l0IC1DIHJlcG8gcmVhZC10cmVlIC1tdSBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJucyIgZXJyICYmCisJZ2l0IC1DIHJlcG8gcmVzZXQgLS1oYXJkICYmCisJbGlzdF9maWxlcyByZXBvID5kaXIgICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWEKKwkJZm9sZGVyMQorCQlmb2xkZXIyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IHdhcm4gb24gYmFkIHBhdHRlcm4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgbXYgc3BhcnNlLWNoZWNrb3V0IHJlcG8vLmdpdC9pbmZvLyAmJgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAuICYmCisJZWNobyAiIS9kZWVwL2RlZXBlci8qIiA+PnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHJlYWQtdHJlZSAtbXUgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhcnNlLWNoZWNrb3V0IGRpc2FibGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBkaXNhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIC0tbGlzdCA+Y29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZUNoZWNrb3V0ICYmCisJbGlzdF9maWxlcyByZXBvID5kaXIgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJYQorCQlkZWVwCisJCWZvbGRlcjEKKwkJZm9sZGVyMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZSBtb2RlOiBpbml0IGFuZCBzZXQnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgLS1saXN0ID5jb25maWcgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3JlLnNwYXJzZWNoZWNrb3V0Y29uZT10cnVlIiBjb25maWcgJiYKKwlsaXN0X2ZpbGVzIHJlcG8gPmRpciAgJiYKKwllY2hvIGEgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBkaXIgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMS9kZWVwZXN0LyAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwlsaXN0X2ZpbGVzIHJlcG8gPmRpciAgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJYQorCQlkZWVwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGRpciAmJgorCWxpc3RfZmlsZXMgcmVwby9kZWVwID5kaXIgICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWEKKwkJZGVlcGVyMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBkaXIgJiYKKwlsaXN0X2ZpbGVzIHJlcG8vZGVlcC9kZWVwZXIxID5kaXIgICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWEKKwkJZGVlcGVzdAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBkaXIgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLyoKKwkJIS8qLworCQkvZGVlcC8KKwkJIS9kZWVwLyovCisJCS9kZWVwL2RlZXBlcjEvCisJCSEvZGVlcC9kZWVwZXIxLyovCisJCS9kZWVwL2RlZXBlcjEvZGVlcGVzdC8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCAtLXN0ZGluIDI+ZXJyIDw8LUVPRiAmJgorCQlmb2xkZXIxCisJCWZvbGRlcjIKKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWEKKwkJZm9sZGVyMQorCQlmb2xkZXIyCisJRU9GCisJbGlzdF9maWxlcyByZXBvID5kaXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogc2V0IHdpdGggbmVzdGVkIGZvbGRlcnMnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAgZGVlcC9kZWVwZXIxL2RlZXBlc3QgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVyciAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkvKgorCQkhLyovCisJCS9kZWVwLworCUVPRgorCXRlc3RfY21wIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHRvIG9sZCBzcGFyc2UtY2hlY2tvdXQgb24gYmFkIHVwZGF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgLUMgcmVwbyByZXNldCAtLWhhcmQgJiYKKwllY2hvIHVwZGF0ZSA+cmVwby9kZWVwL2RlZXBlcjIvYSAmJgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNhbm5vdCBzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIiBlcnIgJiYKKwl0ZXN0X2NtcCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgZXhwZWN0ICYmCisJbGlzdF9maWxlcyByZXBvL2RlZXAgPmRpciAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlhCisJCWRlZXBlcjEKKwkJZGVlcGVyMgorCUVPRgorCXRlc3RfY21wIGRpciBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHRvIG9sZCBzcGFyc2UtY2hlY2tvdXQgb24gZW1wdHkgdXBkYXRlJyAnCisJZ2l0IGluaXQgZW1wdHktdGVzdCAmJgorCSgKKwkJZWNobyA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgbm90aGluZyAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJTcGFyc2UgY2hlY2tvdXQgbGVhdmVzIG5vIGVudHJ5IG9uIHdvcmtpbmcgZGlyZWN0b3J5IiBlcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICIuZ2l0L2luZGV4LmxvY2siIGVyciAmJgorCQlnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gbG9jayBpcyB0YWtlbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0LmxvY2sgJiYKKwl0b3VjaCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQubG9jayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgZGVlcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkZpbGUgZXhpc3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSBzaG91bGQgbm90IHdhcm4gYWJvdXQgY29uZSBtb2RlJyAnCisJZ2l0IC1DIHJlcG8gY29uZmlnIC0td29ya3RyZWUgY29yZS5zcGFyc2VDaGVja291dENvbmUgdHJ1ZSAmJgorCWVjaG8gIioqL2Jpbi8qIiA+cmVwby8uZ2l0aWdub3JlICYmCisJZ2l0IC1DIHJlcG8gcmVzZXQgLS1oYXJkIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJucyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZS1jaGVja291dCAoaW5pdHxzZXR8ZGlzYWJsZSkgZmFpbHMgd2l0aCBkaXJ0eSBzdGF0dXMnICcKKwlnaXQgY2xvbmUgcmVwbyBkaXJ0eSAmJgorCWVjaG8gZGlydHkgPmRpcnR5L2ZvbGRlcjEvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlICYmCisJZ2l0IC1DIGRpcnR5IHJlc2V0IC0taGFyZCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogc2V0IHdpdGggY29yZS5pZ25vcmVDYXNlPXRydWUnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwlnaXQgLUMgcmVwbyAtYyBjb3JlLmlnbm9yZUNhc2U9dHJ1ZSBzcGFyc2UtY2hlY2tvdXQgc2V0IGZvbGRlcjEgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLyoKKwkJIS8qLworCQkvZm9sZGVyMS8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJbGlzdF9maWxlcyByZXBvID5kaXIgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJYQorCQlmb2xkZXIxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGRpcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2ggYi90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCmluZGV4IGQyMGI0ZDEuLmYxZTFiMjggMTAwNzU1Ci0tLSBhL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKKysrIGIvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaApAQCAtNjMsNyArNjMsNyBAQAogCXRlc3Qub25lPTEKIAlFT0YKIAlnaXQgY29uZmlnIC0tbGlzdCA+YWN0dWFsLmZ1bGwgJiYKLQlncmVwIC12IF5jb3JlIGFjdHVhbC5mdWxsID5hY3R1YWwgJiYKKwlncmVwIC12IC1lIF5jb3JlIC1lIF5leHRlbnNpb25zIGFjdHVhbC5mdWxsID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDEzMDktZWFybHktY29uZmlnLnNoIGIvdC90MTMwOS1lYXJseS1jb25maWcuc2gKaW5kZXggM2EwZGUwZC4uZWJiOGUxYSAxMDA3NTUKLS0tIGEvdC90MTMwOS1lYXJseS1jb25maWcuc2gKKysrIGIvdC90MTMwOS1lYXJseS1jb25maWcuc2gKQEAgLTI5LDcgKzI5LDcgQEAKIAkJY2Qgc3ViICYmCiAJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnCiAJKSA+b3V0cHV0ICYmCi0JdGVzdCAteiAiJChjYXQgb3V0cHV0KSIKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlaWxpbmcgIzInICcKZGlmZiAtLWdpdCBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaCBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaAppbmRleCAxZmJkOTQwLi5iODE1Y2RkIDEwMDc1NQotLS0gYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKKysrIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCkBAIC0zNDQsMTQgKzM0NCwxNiBAQAogCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0KICcKIAotZ2l0IHVwZGF0ZS1yZWYgJG0gJEQKLWNhdCA+LmdpdC9sb2dzLyRtIDw8RU9GCi0kWiAkQyAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDMyMCAtMDUwMAotJEMgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzNTAgLTA1MDAKLSRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzgwIC0wNTAwCi0kRiAkWiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDY4MCAtMDUwMAotJFogJEUgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA5ODAgLTA1MDAKLUVPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciBxdWVyeWluZyB0aGUgcmVmbG9nJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEQgJiYKKwljYXQgPi5naXQvbG9ncy8kbSA8PC1FT0YKKwkkWiAkQyAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDMyMCAtMDUwMAorCSRDICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzUwIC0wNTAwCisJJEEgJEIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzODAgLTA1MDAKKwkkRiAkWiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDY4MCAtMDUwMAorCSRaICRFICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwOTgwIC0wNTAwCisJRU9GCisnCiAKIGVkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjMyOjAwIC0wNTAwIgogZ2Q9IlRodSwgMjYgTWF5IDIwMDUgMTg6MzM6MDAgLTA1MDAiCkBAIC0zNzgsMTMgKzM4MCwxMyBAQAogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiA+byAyPmUgJiYKIAl0ZXN0ICRDID0gJChjYXQgbykgJiYKLQl0ZXN0ICIiID0gIiQoY2F0IGUpIgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCiAnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjozMH0iIChmaXJzdCBub24tY3JlYXRpb24gY2hhbmdlKScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MzB9IiA+byAyPmUgJiYKIAl0ZXN0ICRBID0gJChjYXQgbykgJiYKLQl0ZXN0ICIiID0gIiQoY2F0IGUpIgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCiAnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMzOjAxfSIgKG1pZGRsZSBvZiBoaXN0b3J5IHdpdGggZ2FwKScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgpAQCAtMzk2LDEzICszOTgsMTMgQEAKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6Mzg6MDB9IiA+byAyPmUgJiYKIAl0ZXN0ICRaID0gJChjYXQgbykgJiYKLQl0ZXN0ICIiID0gIiQoY2F0IGUpIgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCiAnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQzOjAwfSIgKGV4YWN0IGVuZCBvZiBoaXN0b3J5KScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzo0MzowMH0iID5vIDI+ZSAmJgogCXRlc3QgJEUgPSAkKGNhdCBvKSAmJgotCXRlc3QgIiIgPSAiJChjYXQgZSkiCisJdGVzdF9tdXN0X2JlX2VtcHR5IGUKICcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjh9IiAocGFzdCBlbmQgb2YgaGlzdG9yeSknICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKaW5kZXggODI5NTBjMC4uNzZkOWI3NCAxMDA3NTUKLS0tIGEvdC90MTQxMC1yZWZsb2cuc2gKKysrIGIvdC90MTQxMC1yZWZsb2cuc2gKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAJZ2l0IHJlZmxvZyBkZWxldGUgbWFzdGVyQHsxfSAmJgogCWdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgPiBvdXRwdXQgJiYKLQl0ZXN0ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgPSAkKHdjIC1sIDwgb3V0cHV0KSAmJgorCXRlc3RfbGluZV9jb3VudCA9ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgb3V0cHV0ICYmCiAJdGVzdCAkSEVBRF9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgogCSEgZ3JlcCBveCA8IG91dHB1dCAmJgogCkBAIC0yMDksNyArMjA5LDcgQEAKIAogCWdpdCByZWZsb2cgZGVsZXRlIG1hc3RlckB7MDcuMDQuMjAwNS4xNToxNTowMC4tMDcwMH0gJiYKIAlnaXQgcmVmbG9nIHNob3cgbWFzdGVyID4gb3V0cHV0ICYmCi0JdGVzdCAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpID0gJCh3YyAtbCA8IG91dHB1dCkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpIG91dHB1dCAmJgogCSEgZ3JlcCBkcmFnb24gPCBvdXRwdXQKIAogJwpkaWZmIC0tZ2l0IGEvdC90MTQ1MC1mc2NrLnNoIGIvdC90MTQ1MC1mc2NrLnNoCmluZGV4IDc0MzZlNjMuLjAyNDc4YmMgMTAwNzU1Ci0tLSBhL3QvdDE0NTAtZnNjay5zaAorKysgYi90L3QxNDUwLWZzY2suc2gKQEAgLTYxNyw3ICs2MTcsNyBAQAogCQlyZW1vdmVfb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSBqdWxpdXM6Y2Flc2FyLnQpICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tbmFtZS1vYmplY3RzID5vdXQgJiYKIAkJdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkganVsaXVzOikgJiYKLQkJdGVzdF9pMThuZ3JlcCAtRSAiJHRyZWUgXCgocmVmcy9oZWFkcy9tYXN0ZXJ8SEVBRClAXHtbMC05XSpcfToiIG91dAorCQl0ZXN0X2kxOG5ncmVwICIkdHJlZSAocmVmcy90YWdzL2p1bGl1czoiIG91dAogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90MTUwMC1yZXYtcGFyc2Uuc2ggYi90L3QxNTAwLXJldi1wYXJzZS5zaAppbmRleCAwMWFiZWU1Li42MDMwMTliIDEwMDc1NQotLS0gYS90L3QxNTAwLXJldi1wYXJzZS5zaAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtNTksNiArNTksNyBAQAogUk9PVD0kKHB3ZCkKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJbWtkaXIgLXAgc3ViL2RpciB3b3JrICYmCiAJY3AgLVIgLmdpdCByZXBvLmdpdAogJwpAQCAtMTMxLDYgKzEzMiwzMCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0IGluIHJlcG8nICcKKwllY2hvICIkKHRlc3Rfb2lkIGFsZ28pIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3RvcmFnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PW91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3F1ZWFtaXNoLW9zc2lmcmFnZSAyPmVyciAmJgorCWdyZXAgInVua25vd24gbW9kZSBmb3IgLS1zaG93LW9iamVjdC1mb3JtYXQ6IHNxdWVhbWlzaC1vc3NpZnJhZ2UiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctdG9wbGV2ZWwgZnJvbSBzdWJkaXIgb2Ygd29ya2luZyB0cmVlJyAnCisJcHdkID5leHBlY3QgJiYKKwlnaXQgLUMgc3ViL2RpciByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy10b3BsZXZlbCBmcm9tIGluc2lkZSAuZ2l0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIC5naXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRoZSBzdXBlcnByb2plY3QgY29ycmVjdGx5JyAnCiAJZ2l0IHJldi1wYXJzZSAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSA+b3V0ICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgpkaWZmIC0tZ2l0IGEvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoIGIvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoCmluZGV4IDYyNGQwYTUuLjZkOTUxY2EgMTAwNzU1Ci0tLSBhL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaAorKysgYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKQEAgLTEzOCwxMCArMTM4LDEwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgQHtufSByZWZlcmVuY2UnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1hc3RlckB7OTk5OTl9ID5vdXRwdXQgMj5lcnJvciAmJgotCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgogCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvciAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7OTk5OTl9ID5vdXRwdXQgMj5lcnJvciAmJgotCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgogCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvcgogJwogCkBAIC0xNTUsMTMgKzE1NSwxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIG91dHNpZGUgd29ya3RyZWUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6Li4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCi0JdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCiAJdGVzdF9pMThuZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnJvcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIHdoZW4gY3dkIGlzIG91dHNpZGUgd29ya3RyZWUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPS5naXQgLS13b3JrLXRyZWU9c3ViZGlyIHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCi0JdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCiAJZ3JlcCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuLnQgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZS4iIGVycm9yCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKaW5kZXggYzE5ZmI1MC4uMThmYTZjZiAxMDA3NTUKLS0tIGEvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKKysrIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKQEAgLTI4Miw3ICsyODIsNyBAQAogCSMgY29tbWl0cyBjcmVhdGVkIGJ5IGNvbW1pdC10cmVlIGluIGVhcmxpZXIgdGVzdHMgc2hhcmUgYQogCSMgZGlmZmVyZW50IHByZWZpeC4KIAlnaXQgcmV2LXBhcnNlIC0tZGlzYW1iaWd1YXRlPTAwMDAwMDAwMCA+YWN0dWFsICYmCi0JdGVzdCAkKHdjIC1sIDxhY3R1YWwpID0gMTYgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxNiBhY3R1YWwgJiYKIAl0ZXN0ICIkKHNlZCAtZSAicy9eXCguLi4uLi4uLi5cKS4qL1wxLyIgYWN0dWFsIHwgc29ydCAtdSkiID0gMDAwMDAwMDAwCiAnCiAKQEAgLTMzOSw3ICszMzksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBoaW50cyByZXNwZWN0IHR5cGUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMF57Y29tbWl0fSAyPnN0ZGVyciAmJgogCWdyZXAgXmhpbnQ6IHN0ZGVyciA+aGludHMgJiYKLQkjIDUgY29tbWl0cywgMSB0YWcgKHdoaWNoIGlzIGEgY29tbWl0aXNoKSwgcGx1cyBpbnRybyBsaW5lCisJIyA1IGNvbW1pdHMsIDEgdGFnICh3aGljaCBpcyBhIGNvbW1pdHRpc2gpLCBwbHVzIGludHJvIGxpbmUKIAl0ZXN0X2xpbmVfY291bnQgPSA3IGhpbnRzCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDIwMjYtY2hlY2tvdXQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDIwMjYtY2hlY2tvdXQtcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjJmZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNi1jaGVja291dC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZmlsZTAgJiYKKworCWVjaG8gMSA+ZmlsZUEudCAmJgorCWVjaG8gMSA+ZmlsZUIudCAmJgorCWVjaG8gMSA+ZmlsZUMudCAmJgorCWVjaG8gMSA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIDEiICYmCisKKwllY2hvIDIgPmZpbGVBLnQgJiYKKwllY2hvIDIgPmZpbGVCLnQgJiYKKwllY2hvIDIgPmZpbGVDLnQgJiYKKwllY2hvIDIgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyAyIiAmJgorCisJZ2l0IHRhZyBjaGVja3BvaW50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBjaGVja3BvaW50Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9bm8gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlNICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJTSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUEudAorCU0gIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlNICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiXCJmaWxlXFwxMDEudFwiIiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBub3QgY29tcGF0aWJsZSB3aXRoIC0tcGF0aHNwZWMtZmlsZS1udWwnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiXCJmaWxlXFwxMDEudFwiIiA+bGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgSEVBRF4xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVCLnQKKwlNICBmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwNzItcmVzdG9yZS1wYXRoc3BlYy1maWxlLnNoIGIvdC90MjA3Mi1yZXN0b3JlLXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI1OGU4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNzItcmVzdG9yZS1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBmaWxlMCAmJgorCisJZWNobyAxID5maWxlQS50ICYmCisJZWNobyAxID5maWxlQi50ICYmCisJZWNobyAxID5maWxlQy50ICYmCisJZWNobyAxID5maWxlRC50ICYmCisJZ2l0IGFkZCBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgMSIgJiYKKworCWVjaG8gMiA+ZmlsZUEudCAmJgorCWVjaG8gMiA+ZmlsZUIudCAmJgorCWVjaG8gMiA+ZmlsZUMudCAmJgorCWVjaG8gMiA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIDIiICYmCisKKwlnaXQgdGFnIGNoZWNrcG9pbnQKKycKKworcmVzdG9yZV9jaGVja3BvaW50ICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZWNrcG9pbnQKK30KKwordmVyaWZ5X2V4cGVjdCAoKSB7CisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLXVudHJhY2tlZC1maWxlcz1ubyAtLSBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gc3RkaW4nICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBmaWxlJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwlnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tc291cmNlPUhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWlsaW5nIGRlbGltaXRlcicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50IiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJcImZpbGVcXDEwMS50XCIiIHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgIlwiZmlsZVxcMTAxLnRcIiIgPmxpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgLS1zb3VyY2U9SEVBRF4xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUIudAorCSBNIGZpbGVDLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwMC13b3JrdHJlZS1hZGQuc2ggYi90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaAppbmRleCBlODE5YmE3Li5iNWVjZTE5IDEwMDc1NQotLS0gYS90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaAorKysgYi90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaApAQCAtNDM4LDcgKzQzOCw3IEBACiAJCWNkIGZvbyAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLnJlbW90ZSIgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5tZXJnZSIgJiYKLQkJISB0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fYS9mb28gcmVmcy9oZWFkcy9mb28KKwkJdGVzdF9jbXBfcmV2ICEgcmVmcy9yZW1vdGVzL3JlcG9fYS9mb28gcmVmcy9oZWFkcy9mb28KIAkpCiAnCiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCQljZCBmb28gJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5yZW1vdGUiICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ubWVyZ2UiICYmCi0JCSEgdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCisJCXRlc3RfY21wX3JldiAhIHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCiAJKQogJwogCkBAIC01ODcsNCArNTg3LDI4IEBACiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHVuc2V0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdWJtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWJtb2R1bGUgZmlyc3QgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHByb2plY3QgJiYKKwlnaXQgLUMgcHJvamVjdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwcm9qZWN0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgLUMgcHJvamVjdCBjb21taXQgLW0gYWRkX3N1YiAmJgorCWdpdCBjbG9uZSBwcm9qZWN0IHByb2plY3QtY2xvbmUgJiYKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC0yCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHNldCcgJworCWdpdCAtQyBwcm9qZWN0LWNsb25lIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2UgdW5zZXQnICcKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCAtQyBwcm9qZWN0LWNsb25lIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2Ugc2V0JyAnCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgLWMgc3VibW9kdWxlLnJlY3Vyc2Ugd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtNQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKaW5kZXggNDRmMzc4Yy4uNTJlZDY2NSAxMDA3NTUKLS0tIGEvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKKysrIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlnaXQgYWRkIC4KICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1scy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgc3VjY2VlZCBmcm9tIHN1YmRpcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBzdWNjZWVkIGZyb20gc3ViZGlyJyAnCiAJIyBXZSBoYXZlIHRvIHJ1biBmcm9tIGEgc3ViLWRpcmVjdG9yeSB0byB0cmlnZ2VyIHBydW5lX3BhdGgKIAkjIFRoZW4gd2UgZmluYWxseSBnZXQgdG8gcnVuIG91ciAtLXdpdGgtdHJlZSB0ZXN0CiAJKApAQCAtNTcsNyArNTcsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IC1scy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgYWRkIGVudHJpZXMgZnJvbSBuYW1lZCB0cmVlLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIGFkZCBlbnRyaWVzIGZyb20gbmFtZWQgdHJlZS4nIFwKICAgICAndGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0JwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaCBiL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaAppbmRleCAwNTc5Y2Q5Li4wNTc1ZGQ3IDEwMDc1NQotLS0gYS90L3QzMjA2LXJhbmdlLWRpZmYuc2gKKysrIGIvdC90MzIwNi1yYW5nZS1kaWZmLnNoCkBAIC04LDggKzgsOCBAQAogIyBoYXJtIHRoYW4gZ29vZC4gIFdlIG5lZWQgc29tZSByZWFsIGhpc3RvcnkuCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi0JZ2l0IGZhc3QtaW1wb3J0IDwgIiRURVNUX0RJUkVDVE9SWSIvdDMyMDYvaGlzdG9yeS5leHBvcnQgJiYKLQl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwlnaXQgZmFzdC1pbXBvcnQgPCIkVEVTVF9ESVJFQ1RPUlkiL3QzMjA2L2hpc3RvcnkuZXhwb3J0ICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtXEVPRgogCSMgdG9waWMKIAl0MSBzaGExOjRkZTQ1N2QKIAl0MiBzaGExOmZjY2NlMjIKQEAgLTEyMSw4OCArMTIxLDg4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgQS4uQiBBLi5DICh1bm1vZGlmaWVkKScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAogCQk+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBCLi4uQyAodW5tb2RpZmllZCknICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4udW5tb2RpZmllZCA+YWN0dWFsICYmCi0JIyBzYW1lICJleHBlY3RlZCIgYXMgYWJvdmUKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkjIHNhbWUgImV4cGVjdCIgYXMgYWJvdmUKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBBIEIgQyAodW5tb2RpZmllZCknICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyB1bm1vZGlmaWVkID5hY3R1YWwgJiYKLQkjIHNhbWUgImV4cGVjdGVkIiBhcyBhYm92ZQotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSMgc2FtZSAiZXhwZWN0IiBhcyBhYm92ZQorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCByZW9yZGVyaW5nJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgcmVvcmRlcmVkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHIxKSBzLzUvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSAyOiAgJCh0ZXN0X29pZCByMikgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDM6ICAkKHRlc3Rfb2lkIHIzKSBzLzEyL0IvCiAJMjogICQodGVzdF9vaWQgdDIpID0gNDogICQodGVzdF9vaWQgcjQpIHMvNC9BLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlZCBhIGNvbW1pdCcgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHJlbW92ZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgZDEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA8IC06ICAkKHRlc3Rfb2lkIF9fKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSAyOiAgJCh0ZXN0X29pZCBkMikgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDM6ICAkKHRlc3Rfb2lkIGQzKSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBhIGNvbW1pdCcgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIGFkZGVkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGExKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBhMikgcy80L0EvCiAJLTogICQodGVzdF9vaWQgX18pID4gMzogICQodGVzdF9vaWQgYTMpIHMvNi9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDQ6ICAkKHRlc3Rfb2lkIGE0KSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gNTogICQodGVzdF9vaWQgYTUpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBiYXNlLCBBIEIgQycgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHJlYmFzZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYjEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGIyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCBiMykgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIGI0KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYmFzZSwgQi4uLkMnICcKIAkjIHRoaXMgc3ludGF4IGluY2x1ZGVzIHRoZSBjb21taXRzIGZyb20gbWFzdGVyIQogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5yZWJhc2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCS06ICAkKHRlc3Rfb2lkIF9fKSA+IDE6ICAkKHRlc3Rfb2lkIGI1KSB1bnJlbGF0ZWQKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAyOiAgJCh0ZXN0X29pZCBiMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMzogICQodGVzdF9vaWQgYjIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDQ6ICAkKHRlc3Rfb2lkIGIzKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gNTogICQodGVzdF9vaWQgYjQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0JyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBjMykgcy8xMS9CLwpAQCAtMjI2LDIzICsyMjYsMjMgQEAKIAkgICAgICtCCiAJICAgICAgMTMKIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0IHdpdGggLS1uby1wYXRjaCBkaWZmIG9wdGlvbicgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1uby1wYXRjaCB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBjMykgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIGM0KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIC0tc3RhdCBkaWZmIG9wdGlvbicgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdGF0IHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCiAJICAgICBhID0+IGIgfCAwCiAJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQpAQCAtMjU2LDEyICsyNTYsMTIgQEAKIAkgICAgIGEgPT4gYiB8IDAKIAkgICAgIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIHNtIGNvbmZpZycgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYzIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCkBAIC0yODUsMTIgKzI4NSwxMiBAQAogCSAgICAgK0IKIAkgICAgICAxMwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lZCBmaWxlJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN1Ym1vZHVsZT1sb2cgdG9waWMuLi5yZW5hbWVkLWZpbGUgPmFjdHVhbCAmJgotCXNlZCBzL1ovXCAvZyA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgbjEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSAhIDI6ICAkKHRlc3Rfb2lkIG4yKSBzLzQvQS8KIAkgICAgQEAgTWV0YWRhdGEKQEAgLTMzMCwxMiArMzMwLDEyIEBACiAJICAgIFogMTAKIAkgICAgWiBCCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHdpdGggbW9kZSBvbmx5IGNoYW5nZScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4ubW9kZS1vbmx5LWNoYW5nZSA+YWN0dWFsICYmCi0Jc2VkIHMvWi9cIC9nID5leHBlY3RlZCA8PC1FT0YgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgZmNjY2UyMiAhIDE6ICA0ZDM5Y2IzIHMvNC9BLwogCSAgICBAQCBNZXRhZGF0YQogCSAgICBaQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CkBAIC0zNzAsMTIgKzM3MCwxMiBAQAogCSAgICArICMjIG90aGVyLWZpbGUgKG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUpICMjCiAJMzogIGE2M2U5OTIgPSAzOiAgNGMxZTBmNSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZGVkIGFuZCBsYXRlciByZW1vdmVkJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN1Ym1vZHVsZT1sb2cgdG9waWMuLi5hZGRlZC1yZW1vdmVkID5hY3R1YWwgJiYKLQlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHMxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgISAyOiAgJCh0ZXN0X29pZCBzMikgcy80L0EvCiAJICAgIEBAIE1ldGFkYXRhCkBAIC00MTEsNyArNDExLDcgQEAKIAkgICAgKyAjIyBuZXctZmlsZSAoZGVsZXRlZCkgIyMKIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCBzNCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY29tbWl0cyBvbiBvbmUgc2lkZScgJwpAQCAtNDIxLDcgKzQyMSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgbWVzc2FnZScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5jaGFuZ2VkLW1lc3NhZ2UgPmFjdHVhbCAmJgotCXNlZCBzL1ovXCAvZyA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgbTEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSAhIDI6ICAkKHRlc3Rfb2lkIG0yKSBzLzQvQS8KIAkgICAgQEAgTWV0YWRhdGEKQEAgLTQzNiw3ICs0MzYsNyBAQAogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIG0zKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgbTQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1YWwtY29sb3JpbmcnICcKQEAgLTUwNSw0ICs1MDUsMjAyIEBACiAJZ2l0IC1jIGRpZmYubm9wcmVmaXg9dHJ1ZSByYW5nZS1kaWZmIEhFQUReLi4uCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgY29tcGFyZXMgbm90ZXMgYnkgZGVmYXVsdCcgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzICMjCisJICAgIC0gICAgdG9waWMgbm90ZQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiB3aXRoIC0tbm8tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm8tbm90ZXMgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZS1kaWZmIHdpdGggbXVsdGlwbGUgLS1ub3RlcycgJworCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInRvcGljIG5vdGUxIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTEiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidG9waWMgbm90ZTIiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMiIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTIgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm90ZXM9bm90ZTEgLS1ub3Rlcz1ub3RlMiBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCisJCT5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUxKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUxCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTIpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTIKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUyCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIGRvZXMgbm90IGNvbXBhcmUgbm90ZXMgYnkgZGVmYXVsdCcgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICI9IDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJISBncmVwICJOb3RlcyIgMDAwMC0qICYmCisJISBncmVwICJub3RlIiAwMDAwLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIC0tbm8tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbm90ZXMgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICI9IDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJISBncmVwICJOb3RlcyIgMDAwMC0qICYmCisJISBncmVwICJub3RlIiAwMDAwLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIC0tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm90ZXMgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICIhIDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzICMjCisJICAgIC0gICAgdG9waWMgbm90ZQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXNlZCAiL0BAIENvbW1pdCBtZXNzYWdlLywvQEAgZmlsZTogQS8hZCIgMDAwMC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCBmb3JtYXQubm90ZXMgY29uZmlnJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJdGVzdF9jb25maWcgZm9ybWF0Lm5vdGVzIHRydWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggbXVsdGlwbGUgbm90ZXMnICcKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ0b3BpYyBub3RlMSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUxIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMSByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInRvcGljIG5vdGUyIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTIiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzPW5vdGUxIC0tbm90ZXM9bm90ZTIgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICIhIDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMSkgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTEKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUyKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUyCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMgorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXNlZCAiL0BAIENvbW1pdCBtZXNzYWdlLywvQEAgZmlsZTogQS8hZCIgMDAwMC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIxMC1wYWNrLXJlZnMuc2ggYi90L3QzMjEwLXBhY2stcmVmcy5zaAppbmRleCA5ZWE1ZmE0Li5mNDFiMmFmIDEwMDc1NQotLS0gYS90L3QzMjEwLXBhY2stcmVmcy5zaAorKysgYi90L3QzMjEwLXBhY2stcmVmcy5zaApAQCAtMjQwLDcgKzI0MCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3BhY2sgc3ltbGlua2VkIHBhY2tlZC1yZWZzJyAnCiAJIyBGaXJzdCBtYWtlIHN1cmUgdGhhdCBzeW1saW5raW5nIHdvcmtzIHdoZW4gcmVhZGluZzoKLQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvb3N5IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb3NzeSByZWZzL2hlYWRzL21hc3RlciAmJgogCWdpdCBmb3ItZWFjaC1yZWYgPmFsbC1yZWZzLWJlZm9yZSAmJgogCW12IC5naXQvcGFja2VkLXJlZnMgLmdpdC9teS1kZXZpYW50LXBhY2tlZC1yZWZzICYmCiAJbG4gLXMgbXktZGV2aWFudC1wYWNrZWQtcmVmcyAuZ2l0L3BhY2tlZC1yZWZzICYmCmRpZmYgLS1naXQgYS90L3QzMzAxLW5vdGVzLnNoIGIvdC90MzMwMS1ub3Rlcy5zaAppbmRleCBkM2ZhMjk4Li44ZjQzMzAzIDEwMDc1NQotLS0gYS90L3QzMzAxLW5vdGVzLnNoCisrKyBiL3QvdDMzMDEtbm90ZXMuc2gKQEAgLTU0LDcgKzU0LDkgQEAKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKIAlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgogCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCi0JdGVzdCAiYjQiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWVjaG8gYjQgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0IHNob3cgSEVBRF4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgogJwpAQCAtNzksMTQgKzgxLDIxIEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCiAJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgotCXRlc3QgImIzIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdCBzaG93IEhFQUReICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcyBmcm9tIHRyZWVpc2gnICcKLQl0ZXN0ICJiMyIgPSAiJChnaXQgbm90ZXMgLS1yZWYgY29tbWl0c157dHJlZX0gc2hvdykiICYmCi0JdGVzdCAiYjQiID0gIiQoZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNAezF9IHNob3cpIgorCWVjaG8gYjMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyAtLXJlZiBjb21taXRzXnt0cmVlfSBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGI0ID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgLS1yZWYgY29tbWl0c0B7MX0gc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgZWRpdCBub3RlcyBmcm9tIG5vbi1yZWYnICcKQEAgLTk5LDcgKzEwOCw5IEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCiAJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgotCXRlc3QgImIzIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdCBzaG93IEhFQUReICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KICcKQEAgLTEwOSw3ICsxMjAsOSBAQAogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgogCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCiAJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKLQl0ZXN0ICJiMSIgPSAiJChnaXQgbm90ZXMgc2hvdykiICYmCisJZWNobyBiMSA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQgc2hvdyBIRUFEXiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCiAnCkBAIC0xMTksNyArMTMyLDkgQEAKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKIAlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgogCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCi0JdGVzdCAiYjIiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWVjaG8gYjIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0IHNob3cgSEVBRF4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgogJwpAQCAtMTI5LDcgKzE0NCw5IEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCiAJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgotCXRlc3QgImIxIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwllY2hvIGIxID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdCBzaG93IEhFQUReICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KICcKQEAgLTE0Niw3ICsxNjMsOCBAQAogCQlOb3RlczoKIAkJJHtpbmRlbnR9YjEKIAlFT0YKLQkhIChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGIxKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0cyAmJgorCSEgZ3JlcCBiMSBjb21taXRzICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtNDcyLDkgKzQ5MCwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBub3RlcyB3aXRoICJnaXQgbm90ZXMgbGlzdCInICcKIAljb21taXRfMj0kKGdpdCByZXYtcGFyc2UgMm5kKSAmJgogCWNvbW1pdF8zPSQoZ2l0IHJldi1wYXJzZSAzcmQpICYmCisJbm90ZV8yPSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8yKSAmJgorCW5vdGVfMz0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMykgJiYKIAlzb3J0IC10IiAiIC1rMiA+ZXhwZWN0IDw8LUVPRiAmJgotCQkkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMikgJGNvbW1pdF8yCi0JCSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8zKSAkY29tbWl0XzMKKwkJJG5vdGVfMiAkY29tbWl0XzIKKwkJJG5vdGVfMyAkY29tbWl0XzMKIAlFT0YKIAlnaXQgbm90ZXMgbGlzdCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbApAQCAtNDg2LDkgKzUwNiw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Qgc3BlY2lmaWMgbm90ZSB3aXRoICJnaXQgbm90ZXMgbGlzdCA8b2JqZWN0PiInICcKLQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKLQkJJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzMpCi0JRU9GCisJZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8zID5leHBlY3QgJiYKIAlnaXQgbm90ZXMgbGlzdCBIRUFEXl4gPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTUxMiwxMCArNTMwLDExIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbm90ZXMgbGlzdCIgZG9lcyBub3QgZXhwYW5kIHRvICJnaXQgbm90ZXMgbGlzdCBIRUFEIicgJwogCWNvbW1pdF81PSQoZ2l0IHJldi1wYXJzZSA1dGgpICYmCisJbm90ZV81PSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF81KSAmJgogCXNvcnQgLXQiICIgLWsyID5leHBlY3RfbGlzdCA8PC1FT0YgJiYKLQkJJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzIpICRjb21taXRfMgotCQkkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMykgJGNvbW1pdF8zCi0JCSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF81KSAkY29tbWl0XzUKKwkJJG5vdGVfMiAkY29tbWl0XzIKKwkJJG5vdGVfMyAkY29tbWl0XzMKKwkJJG5vdGVfNSAkY29tbWl0XzUKIAlFT0YKIAlnaXQgbm90ZXMgbGlzdCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0X2xpc3QgYWN0dWFsCkBAIC03MjEsNyArNzQwLDggQEAKIAlnaXQgbm90ZXMgc2hvdyBIRUFEOiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWVjaG8gIk5vdGUgb24gYSBibG9iIiA+ZXhwZWN0ICYmCi0JZmlsZW5hbWU9JChnaXQgbHMtdHJlZSAtLW5hbWUtb25seSBIRUFEIHwgaGVhZCAtbjEpICYmCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgSEVBRCA+ZmlsZXMgJiYKKwlmaWxlbmFtZT0kKGhlYWQgLW4xIGZpbGVzKSAmJgogCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgb24gYSBibG9iIiBIRUFEOiRmaWxlbmFtZSAmJgogCWdpdCBub3RlcyBzaG93IEhFQUQ6JGZpbGVuYW1lID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCkBAIC03NDUsMTAgKzc2NSwxMyBAQAogCQlOb3RlczoKIAkJJHtpbmRlbnR9b3JkZXIgdGVzdAogCUVPRgotCWdpdCBub3RlcyBhZGQgLUMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pICYmCisJZ2l0IG5vdGVzIGFkZCAtQyAkbm90ZSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1leGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLUMiIGZhaWxzJyAnCkBAIC03NzcsMTEgKzgwMCwxMiBAQAogCQlOb3RlczoKIAkJJHtpbmRlbnR9VGhpcyBpcyBhIGJsb2Igb2JqZWN0CiAJRU9GCi0JYmxvYj0kKGVjaG8gIlRoaXMgaXMgYSBibG9iIG9iamVjdCIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKLQlnaXQgbm90ZXMgYWRkIC1DICRibG9iICYmCisJZWNobyAiVGhpcyBpcyBhIGJsb2Igb2JqZWN0IiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluID5ibG9iICYmCisJZ2l0IG5vdGVzIGFkZCAtQyAkKGNhdCBibG9iKSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkYmxvYiIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBibG9iIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG90aGVyIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtYyInICcKQEAgLTc5Nyw3ICs4MjEsOCBAQAogCQlOb3RlczoKIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCU1TRz0ieWV0IGFub3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFkZCAtYyAkKGdpdCBub3RlcyBsaXN0IEhFQUReXikgJiYKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF5eKSAmJgorCU1TRz0ieWV0IGFub3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFkZCAtYyAkbm90ZSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTgyMiw3ICs4NDcsOCBAQAogCQkke2luZGVudH0KIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCWdpdCBub3RlcyBhcHBlbmQgLUMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgSEVBRF4gJiYKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtQyAkbm90ZSBIRUFEXiAmJgogCWdpdCBsb2cgLTEgSEVBRF4gPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTgzOSw3ICs4NjUsOCBAQAogCQlOb3RlczoKIAkJJHtpbmRlbnR9b3RoZXIgbm90ZQogCUVPRgotCU1TRz0ib3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFwcGVuZCAtYyAkKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlNU0c9Im90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJG5vdGUgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC04NTgsMTIgKzg4NSwzMyBAQAogCQkke2luZGVudH0KIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCU1TRz0ieWV0IGFub3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFwcGVuZCAtYyAkKGdpdCBub3RlcyBsaXN0IEhFQUQpICYmCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUQpICYmCisJTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiBnaXQgbm90ZXMgYXBwZW5kIC1jICRub3RlICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSA0dGgpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSA4dGggNHRoICYmCisJZ2l0IGxvZyAzcmQuLjR0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IDR0aCA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgOHRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgbm90ZSB3aXRoICJnaXQgbm90ZXMgY29weSIgd2l0aCBkZWZhdWx0JyAnCiAJdGVzdF9jb21taXQgMTF0aCAmJgogCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAljYXQgPmV4cGVjdCA8PC1FT0YgJiYKQEAgLTg3OCwxNyArOTI2LDMzIEBACiAJCSR7aW5kZW50fQogCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCiAJRU9GCi0JZ2l0IG5vdGVzIGNvcHkgSEVBRF4gSEVBRCAmJgorCWdpdCBub3RlcyBjb3B5IEhFQUReICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgotCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIgorCWdpdCBub3RlcyBsaXN0IEhFQUReID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXZlbnQgb3ZlcndyaXRlIHdpdGggImdpdCBub3RlcyBjb3B5IicgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IEhFQUR+MiBIRUFEICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTExdGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBvdmVyd3JpdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkgLWYiJyAnCkBAIC05MDEsMTQgKzk2NSwzNiBAQAogCQkke2luZGVudH0xMXRoCiAKIAkJTm90ZXM6CisJCSR7aW5kZW50fVRoaXMgaXMgYSBibG9iIG9iamVjdAorCUVPRgorCWdpdCBub3RlcyBjb3B5IC1mIEhFQUR+MyBIRUFEICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUR+MyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBvdmVyd3JpdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkgLWYiIHdpdGggZGVmYXVsdCcgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTF0aAorCisJCU5vdGVzOgogCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCiAJCSR7aW5kZW50fQogCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCiAJRU9GCi0JZ2l0IG5vdGVzIGNvcHkgLWYgSEVBRH4yIEhFQUQgJiYKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjIgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjIpIgorCWdpdCBub3RlcyBsaXN0IEhFQUR+MiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgY29weSBub3RlIGZyb20gb2JqZWN0IHdpdGhvdXQgbm90ZXMnICcKQEAgLTk0MywxMyArMTAyOSwyMSBAQAogCQkke2luZGVudH0KIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSkgfAotCWdpdCBub3RlcyBjb3B5IC0tc3RkaW4gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiA8Y29weSAmJgogCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUR+MikiICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEXikiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRH4zKSIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKHVuY29uZmlndXJlZCknICcKQEAgLTk3MCw5ICsxMDY0LDEzIEBACiAKIAkJJHtpbmRlbnR9MTR0aAogCUVPRgotCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSkgfAotCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTAwNSwxNyArMTEwMywyMyBAQAogCUVPRgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKLQkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKLQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+PmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoZGlzYWJsZWQpJyAnCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZS5iYXIgZmFsc2UgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1iYXIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1iYXIgPGNvcHkgJiYKIAlnaXQgbG9nIC0yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMDM1LDggKzExMzksMTAgQEAKIAlnaXQgbm90ZXMgYWRkIC1mIC1tImEgZnJlc2ggbm90ZSIgSEVBRF4gJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTEwNDQsOCArMTE1MCwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoaWdub3JlKScgJwogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGlnbm9yZSAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKLQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTA2Nyw4ICsxMTc1LDEwIEBACiAJZ2l0IG5vdGVzIGFkZCAtZiAtbSJhbm90aGVyIGZyZXNoIG5vdGUiIEhFQUReICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTEwOTUsOSArMTIwNSwxMyBAQAogCWdpdCBub3RlcyBhZGQgLWYgLW0iYXBwZW5kIDIiIEhFQUReXiAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgotCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKLQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMTA2LDggKzEyMjAsMTAgQEAKIAlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTExMjcsOCArMTI0MywxMCBAQAogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgogCWdpdCBub3RlcyBhZGQgLWYgLW0icmVwbGFjZW1lbnQgbm90ZSAxIiBIRUFEXiAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAotCUdJVF9OT1RFU19SRVdSSVRFX01PREU9b3ZlcndyaXRlIGdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1vdmVyd3JpdGUgZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMTQ4LDkgKzEyNjYsMTEgQEAKIAlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMiIgSEVBRF4gJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKIAl0ZXN0X3VuY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKIAlHSVRfTk9URVNfUkVXUklURV9SRUY9cmVmcy9ub3Rlcy9jb21taXRzOnJlZnMvbm90ZXMvb3RoZXIgXAotCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTExNTksNDEgKzEyNzksNTUgQEAKIAlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMyIgSEVBRF4gJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKIAlHSVRfTk9URVNfUkVXUklURV9SRUY9cmVmcy9ub3Rlcy9jb21taXRzIFwKLQkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAlncmVwICJyZXBsYWNlbWVudCBub3RlIDMiIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSBkaWFnbm9zZXMgdG9vIG1hbnkgb3IgdG9vIGZldyBwYXJhbWV0ZXJzJyAnCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBvbmUgdHdvIHRocmVlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInRvbyBmZXcgcGFyYW1ldGVycyIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBvbmUgdHdvIHRocmVlIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0b28gbWFueSBwYXJhbWV0ZXJzIiBlcnJvcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiBleHBhbmRzIHJlZnMvaGVhZHMvbWFzdGVyIHRvIHJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXInICcKIAl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKIAlzYW5lX3Vuc2V0IEdJVF9OT1RFU19SRUYgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyAtLXJlZj1yZWZzL2hlYWRzL21hc3RlciBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9yZWZzL2hlYWRzL21hc3RlciIKKwllY2hvIHJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyAtLXJlZj1yZWZzL2hlYWRzL21hc3RlciBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChubyBvdmVycmlkZXMpJyAnCiAJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCiAJc2FuZV91bnNldCBHSVRfTk9URVNfUkVGICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgZ2V0LXJlZikiID0gInJlZnMvbm90ZXMvY29tbWl0cyIKKwllY2hvIHJlZnMvbm90ZXMvY29tbWl0cyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKGNvcmUubm90ZXNSZWYpJyAnCiAJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2ZvbyAmJgotCXRlc3QgIiQoZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2ZvbyIKKwllY2hvIHJlZnMvbm90ZXMvZm9vID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgZ2V0LXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAoR0lUX05PVEVTX1JFRiknICcKLQl0ZXN0ICIkKEdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2JhciIKKwllY2hvIHJlZnMvbm90ZXMvYmFyID5leHBlY3QgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmICgtLXJlZiknICcKLQl0ZXN0ICIkKEdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIC0tcmVmPWJheiBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9iYXoiCisJZWNobyByZWZzL25vdGVzL2JheiA+ZXhwZWN0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL2JhciBnaXQgbm90ZXMgLS1yZWY9YmF6IGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdGluZyBvZiBlbXB0eSBub3RlcycgJwpkaWZmIC0tZ2l0IGEvdC90MzQwMC1yZWJhc2Uuc2ggYi90L3QzNDAwLXJlYmFzZS5zaAppbmRleCBhYjE4YWM1Li4yMjFiMzVmIDEwMDc1NQotLS0gYS90L3QzNDAwLXJlYmFzZS5zaAorKysgYi90L3QzNDAwLXJlYmFzZS5zaApAQCAtNjQsNyArNjQsNyBAQAogCXByZT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgogCWdpdCByZWJhc2UgbWFzdGVyICYmCiAJdGVzdF9jbXBfcmV2ICIkcHJlIiBPUklHX0hFQUQgJiYKLQkhIHRlc3RfY21wX3JldiAiJHByZSIgSEVBRAorCXRlc3RfY21wX3JldiAhICIkcHJlIiBIRUFECiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSwgd2l0aCA8b250bz4gYW5kIDx1cHN0cmVhbT4gc3BlY2lmaWVkIGFzIDovcXV1eGVyeScgJwpAQCAtMTU5LDYgKzE1OSwxMiBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdvcmtzIHdpdGggZm9ybWF0LnVzZUF1dG9CYXNlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmViYXNlIG1hc3RlcgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRvIGNvbW1vbiBiYXNlIGluIEB7dXBzdHJlYW19cyByZWZsb2cgaWYgbm8gdXBzdHJlYW0gYXJnJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQtYmFzZSBtYXN0ZXIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgZGVmYXVsdCB0b3BpYyAmJgpkaWZmIC0tZ2l0IGEvdC90MzQwMy1yZWJhc2Utc2tpcC5zaCBiL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKaW5kZXggMWY1MTIyYi4uZWU4YThkYiAxMDA3NTUKLS0tIGEvdC90MzQwMy1yZWJhc2Utc2tpcC5zaAorKysgYi90L3QzNDAzLXJlYmFzZS1za2lwLnNoCkBAIC03LDYgKzcsOCBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKICMgd2UgYXNzdW1lIHRoZSBkZWZhdWx0IGdpdCBhbSAtMyAtLXNraXAgc3RyYXRlZ3kgaXMgdGVzdGVkIGluZGVwZW5kZW50bHkKICMgYW5kIGFsd2F5cyB3b3JrcyA6KQogCkBAIC0yMCw2ICsyMiwxMyBAQAogCWdpdCBjb21taXQgLWEgLW0gImhlbGxvIHdvcmxkIiAmJgogCWVjaG8gZ29vZGJ5ZSA+PiBoZWxsbyAmJgogCWdpdCBjb21taXQgLWEgLW0gImdvb2RieWUiICYmCisJZ2l0IHRhZyBnb29kYnllICYmCisKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmV2ZXJ0ZWQtZ29vZGJ5ZSAmJgorCWdpdCB0YWcgcmV2ZXJ0ZWQtZ29vZGJ5ZSAmJgogCiAJZ2l0IGNoZWNrb3V0IC1mIHNraXAtcmVmZXJlbmNlICYmCiAJZWNobyBtb28gPiBoZWxsbyAmJgpAQCAtNzYsNCArODUsMjcgQEAKIAogdGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmIHNsZWVwIDEnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeHVwIHRoYXQgZW1wdGllcyBjb21taXQgZmFpbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIFwKKwkJCWdvb2RieWVeIHJldmVydGVkLWdvb2RieWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCB0aGF0IGVtcHRpZXMgY29tbWl0IGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgXAorCQkJZ29vZGJ5ZV4gcmV2ZXJ0ZWQtZ29vZGJ5ZQorCSkKKycKKworIyBNdXN0IGJlIHRoZSBsYXN0IHRlc3QgaW4gdGhpcyBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckRURJVE9SIGFuZCBmcmllbmRzIGFyZSB1bmNoYW5nZWQnICcKKwl0ZXN0X2VkaXRvcl91bmNoYW5nZWQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCmluZGV4IGQyZGZiZTQuLmFlNmU1NWMgMTAwNzU1Ci0tLSBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCisrKyBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCkBAIC03Niw4ICs3NiwxMSBAQAogCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKIAllcnJvcjogbm90aGluZyB0byBkbwogCUVPRgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfdHJ1ZSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBleGVjX3RydWUiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxCisJKSAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKQEAgLTEzNiw4ICsxMzksMTEgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggdGhlIGV4ZWMgY29tbWFuZCBjaGVja3MgdHJlZSBjbGVhbm5lc3MnICcKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfZWNob19mb29fPmZpbGUxIDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY19lY2hvX2Zvb18+ZmlsZTEgMSIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKIAl0ZXN0X2NtcF9yZXYgbWFzdGVyXiBIRUFEICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZQpAQCAtMTYzLDkgKzE2OSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggZXhlYyBvZiBpbmV4aXN0ZW50IGNvbW1hbmQnICcKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfdGhpcy1jb21tYW5kLWRvZXMtbm90LWV4aXN0IDEiIFwKLQlnaXQgcmViYXNlIC1pIEhFQUReID5hY3R1YWwgMj4mMSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJleGVjX3RoaXMtY29tbWFuZC1kb2VzLW5vdC1leGlzdCAxIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUReID5hY3R1YWwgMj4mMQorCSkgJiYKIAkhIGdyZXAgIk1heWJlIGdpdC1yZWJhc2UgaXMgYnJva2VuIiBhY3R1YWwKICcKIApAQCAtMTc2LDcgKzE4NCw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgYXJlIGEgbm9wJyAnCiAJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIEYgJiYKIAl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMiIgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQpAQCAtMTg2LDcgKzE5Myw2IEBACiAJZ2l0IGNoZWNrb3V0IC1iIGRlYWQtZW5kICYmCiAJZ2l0IHJtIGZpbGU2ICYmCiAJZ2l0IGNvbW1pdCAtbSAic3RvcCBoZXJlIiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgRiBicmFuY2gyICYmCiAJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikgJiYKQEAgLTE5NSw3ICsyMDEsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tb250byA8YnJhbmNoPicgJwogCWdpdCBjaGVja291dCAtYiB0ZXN0LW9udG8gYnJhbmNoMiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLS1vbnRvIGJyYW5jaDEgRiAmJgogCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy90ZXN0LW9udG8iICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDEpICYmCkBAIC0yMDUsNyArMjEwLDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvbiB0b3Agb2YgYSBub24tY29uZmxpY3RpbmcgY29tbWl0JyAnCiAJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKIAlnaXQgdGFnIG9yaWdpbmFsLWJyYW5jaDEgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIGJyYW5jaDIgJiYKIAl0ZXN0IGZpbGU2ID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSBvcmlnaW5hbC1icmFuY2gxKSAmJgogCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gxIiAmJgpAQCAtMjI1LDggKzIyOSwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNoYW5nZSB0d28gY29tbWl0cycgJwotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgogCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJYmxvYjE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF46ZmlsZTEpICYmCkBAIC0yNTIsNyArMjU4LDYgQEAKIAk+Pj4+Pj4+ICRjb21taXQuLi4gRwogCUVPRgogCWdpdCB0YWcgbmV3LWJyYW5jaDEgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIgJiYKIAl0ZXN0X2NtcCBleHBlY3QgLmdpdC9yZWJhc2UtbWVyZ2UvcGF0Y2ggJiYKQEAgLTI4MSw3ICsyODYsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgd2l0aCBlcnJvciB3aGVuIG5ldyBiYXNlIGNhbm5vdCBiZSBjaGVja2VkIG91dCcgJwogCWdpdCBybSAtLWNhY2hlZCBmaWxlMSAmJgogCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGluIGJhc2UiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgPiBvdXRwdXQgMj4mMSAmJgogCXRlc3RfaTE4bmdyZXAgIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoiIFwKIAkJb3V0cHV0ICYmCkBAIC0yOTYsNyArMzAwLDYgQEAKIAl0ZXN0X3RpY2sgJiYKIAlHSVRfQVVUSE9SX05BTUU9IlR3ZXJwIFNub2ciIGdpdCBjb21taXQgLW0gImRpZmZlcmVudCBhdXRob3IiICYmCiAJZ2l0IHRhZyB0d2VycCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEXiAmJgogCWdpdCBzaG93IEhFQUQgfCBncmVwICJeQXV0aG9yOiBUd2VycCBTbm9nIgogJwpAQCAtMzE0LDcgKzMxNyw2IEBACiAJdGVzdF9jb21taXQgYiBjb25mbGljdCBiIGNvbmZsaWN0LWIgJiYKIAlHSVRfQVVUSE9SX05BTUU9JG9HSVRfQVVUSE9SX05BTUUgJiYKIAotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgY29uZmxpY3QtYSAmJgogCWVjaG8gcmVzb2x2ZWQgPmNvbmZsaWN0ICYmCiAJZ2l0IGFkZCBjb25mbGljdCAmJgpAQCAtMzMwLDkgKzMzMiwxMSBAQAogCXRlc3RfdGljayAmJgogCUdJVF9BVVRIT1JfTkFNRT0iTml0Zm9sIiBnaXQgY29tbWl0IC1tICJuaXRmb2wiIGZpbGU3ICYmCiAJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCi0JCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEfjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUR+MgorCSkgJiYKIAl0ZXN0IEIgPSAkKGNhdCBmaWxlNykgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKQogJwpAQCAtMzQzLDcgKzM0Nyw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJy1wIGhhbmRsZXMgIm5vIGNoYW5nZXMiIGdyYWNlZnVsbHknICcKIAlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLXAgSEVBRF4gJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgogCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKQEAgLTM1Myw4ICszNTYsMTAgQEAKIAogdGVzdF9leHBlY3RfZmFpbHVyZSBSRUJBU0VfUCAnZXhjaGFuZ2UgdHdvIGNvbW1pdHMgd2l0aCAtcCcgJwogCWdpdCBjaGVja291dCBIICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIC1wIEhFQUR+MiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjIKKwkpICYmCiAJdGVzdCBIID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBHID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKICcKQEAgLTM4OCw3ICszOTMsNiBAQAogCWdpdCBjb21taXQgLW0gTSBmaWxlMSAmJgogCWdpdCBjaGVja291dCAtYiB0by1iZS1yZWJhc2VkICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtcCAtLW9udG8gYnJhbmNoMSBtYXN0ZXIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgogCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKQEAgLTQwMyw4ICs0MDcsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAnZWRpdCBhbmNlc3RvciB3aXRoIC1wJyAnCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSAyIGVkaXQgMyA0IiBnaXQgcmViYXNlIC1pIC1wIEhFQUR+MyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiBlZGl0IDMgNCIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjMKKwkpICYmCiAJZWNobyAyID4gdW5yZWxhdGVkLWZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIEwyLW1vZGlmaWVkIC0tYW1lbmQgdW5yZWxhdGVkLWZpbGUgJiYKQEAgLTQxOCwxMSArNDI0LDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHRyaWVzIHRvIGNvbW1pdCcgJwogCWdpdCByZXNldCAtLWhhcmQgRCAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCi0JZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCi0JZ2l0IGFkZCBmaWxlMSAmJgotCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbmV3LWJyYW5jaDEgSEVBRF4gJiYKKwkJZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIG5ldy1icmFuY2gxKSAmJgogCWdpdCBzaG93IEhFQUQgfCBncmVwIGNob3VldHRlCiAnCkBAIC00MzAsNyArNDM4LDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZmxhZyBpcyBoZWVkZWQsIGV2ZW4gYWZ0ZXIgLS1jb250aW51ZScgJwogCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyQHsxfSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCiAJZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCiAJZ2l0IGFkZCBmaWxlMSAmJgpAQCAtNDQwLDEwICs0NDcsMTMgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ211bHRpLXNxdWFzaCBvbmx5IGZpcmVzIHVwIGVkaXRvciBvbmNlJyAnCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIHNxdWFzaCAzIHNxdWFzaCA0IiBcCi0JCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCi0JCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiBzcXVhc2ggMyBzcXVhc2ggNCIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpCiAnCkBAIC00NTEsOSArNDYxLDEyIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnbXVsdGktZml4dXAgZG9lcyBub3QgZmlyZSB1cCBlZGl0b3InICcKIAlnaXQgY2hlY2tvdXQgLWIgbXVsdGktZml4dXAgRSAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iTkVWRVIiIEZBS0VfTElORVM9IjEgZml4dXAgMiBmaXh1cCAzIGZpeHVwIDQiIFwKLQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJORVZFUiIgXAorCQkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIGZpeHVwIDMgZml4dXAgNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMCA9ICQoZ2l0IHNob3cgfCBncmVwIE5FVkVSIHwgd2MgLWwpICYmCiAJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCkBAIC00NjMsMTIgKzQ3NiwxNSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgdXNlZCBhZnRlciBjb25mbGljdCcgJwogCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1maXh1cCBjb25mbGljdC1icmFuY2ggJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IiBnaXQgcmViYXNlIC1pICRiYXNlICYmCi0JZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCi0JZ2l0IGFkZCBjb25mbGljdCAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAotCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkJZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCisJCWdpdCBhZGQgY29uZmxpY3QgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCiAJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCkBAIC00NzgsMTIgKzQ5NCwxNSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgcmV0YWluZWQgYWZ0ZXIgY29uZmxpY3QnICcKIAlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3Qtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIHNxdWFzaCA0IiBnaXQgcmViYXNlIC1pICRiYXNlICYmCi0JZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCi0JZ2l0IGFkZCBjb25mbGljdCAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJUV0lDRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKLQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBzcXVhc2ggNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCQllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKKwkJZ2l0IGFkZCBjb25mbGljdCAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iVFdJQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDIgPSAkKGdpdCBzaG93IHwgZ3JlcCBUV0lDRSB8IHdjIC1sKSAmJgogCWdpdCBjaGVja291dCBAey0xfSAmJgpAQCAtNTAwLDEwICs1MTksMTMgQEAKIAlFT0YKIAlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLWZpeHVwIEUgJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IjEgZml4dXAgMiBzcXVhc2ggMyBmaXh1cCA0IiBcCi0JCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCi0JCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIHNxdWFzaCAzIGZpeHVwIDQiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAxLC9eXCQvZCA+IGFjdHVhbC1zcXVhc2gtZml4dXAgJiYKIAl0ZXN0X2NtcCBleHBlY3Qtc3F1YXNoLWZpeHVwIGFjdHVhbC1zcXVhc2gtZml4dXAgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQURAezJ9IHwKQEAgLTUxNywxMCArNTM5LDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGlnbm9yZXMgY29tbWVudHMnICcKIAlnaXQgY2hlY2tvdXQgLWIgc2tpcC1jb21tZW50cyBFICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIjIDEgIyBzcXVhc2ggMiAjIHNxdWFzaCAzICMgc3F1YXNoIDQgIyIgXAotCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAotCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9IiMgMSAjIHNxdWFzaCAyICMgc3F1YXNoIDMgIyBzcXVhc2ggNCAjIiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKIAlnaXQgY2hlY2tvdXQgQHstMX0gJiYKQEAgLTUzMCwxMCArNTU1LDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGlnbm9yZXMgYmxhbmsgbGluZXMnICcKIAlnaXQgY2hlY2tvdXQgLWIgc2tpcC1ibGFuay1saW5lcyBFICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSI+IDEgPiBzcXVhc2ggMiA+IHNxdWFzaCAzID4gc3F1YXNoIDQgPiIgXAotCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAotCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9Ij4gMSA+IHNxdWFzaCAyID4gc3F1YXNoIDMgPiBzcXVhc2ggNCA+IiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKIAlnaXQgY2hlY2tvdXQgQHstMX0gJiYKQEAgLTU0MywxNyArNTcxLDIxIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKIAlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLXdvcmtzIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgogCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgcyAzIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCi0JCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzIDMgMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIGdpdCByZWJhc2UgLWkgSEVBRH4zCisJKSAmJgogCXRlc3QgJG9uZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIHNxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCcgJwogCWdpdCBjaGVja291dCAtYiBpbnRlcnJ1cHRlZC1zcXVhc2ggY29uZmxpY3QtYnJhbmNoICYmCiAJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMyAyIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKIAl0ZXN0X3dyaXRlX2xpbmVzIG9uZSB0d28gZm91ciA+IGNvbmZsaWN0ICYmCiAJZ2l0IGFkZCBjb25mbGljdCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgpAQCAtNTY2LDggKzU5OCwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkIChjYXNlIDIpJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaDIgY29uZmxpY3QtYnJhbmNoICYmCiAJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjMgc3F1YXNoIDEgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMyBzcXVhc2ggMSAyIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKIAl0ZXN0X3dyaXRlX2xpbmVzIG9uZSBmb3VyID4gY29uZmxpY3QgJiYKIAlnaXQgYWRkIGNvbmZsaWN0ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCkBAIC01ODcsMTEgKzYyMiwxMyBAQAogCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCBjaGFuZ2UiICYmCiAJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKLQllY2hvIGVkaXRlZCA+IGZpbGU3ICYmCi0JZ2l0IGFkZCBmaWxlNyAmJgotCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWVjaG8gZWRpdGVkID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjaG91ZXR0ZSEiIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0IGVkaXRlZCA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlNykgJiYKIAlnaXQgc2hvdyBIRUFEIHwgZ3JlcCBjaG91ZXR0ZSAmJgogCXRlc3QgJHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKQEAgLTYwMCwzNCArNjM3LDQxIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydGVkIC0tY29udGludWUgZG9lcyBub3Qgc3F1YXNoIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCiAJb2xkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgotCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgotCWdpdCBhZGQgZmlsZTcgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0NPTU1JVF9NRVNTQUdFPSIgIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCAkb2xkID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJZ2l0IHJlYmFzZSAtLWFib3J0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8tYW1lbmQgb25seSBlZGl0ZWQgY29tbWl0cyBhZnRlciAiZWRpdCInICcKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKLQllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JRkFLRV9DT01NSVRfTUVTU0FHRT0iZWRpdGVkIGZpbGU3IGFnYWluIiBnaXQgY29tbWl0ICYmCi0JZWNobyAiYW5kIGFnYWluIiA+IGZpbGU3ICYmCi0JZ2l0IGFkZCBmaWxlNyAmJgotCXRlc3RfdGljayAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJhbmQgYWdhaW4iIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJlZGl0ZWQgZmlsZTcgYWdhaW4iIGdpdCBjb21taXQgJiYKKwkJZWNobyAiYW5kIGFnYWluIiA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJdGVzdF90aWNrICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJhbmQgYWdhaW4iIFwKKwkJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAlnaXQgcmViYXNlIC0tYWJvcnQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gZXJyb3IgYWZ0ZXIgZmFpbGVkICJleGVjIicgJwogCXRlc3RfdGljayAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDoiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY19mYWxzZSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfZmFsc2UiIGdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCiAJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCiAJZ2l0IGFkZCBmaWxlNyAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAyPmVycm9yICYmCkBAIC02MzgsOCArNjgyLDEwIEBACiAJZ3JhbmRwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKIAlnaXQgY2hlY2tvdXQgJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpICYmCiAJdGVzdCAkZ3JhbmRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQogJwogCkBAIC02NTQsOSArNzAwLDEwIEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBkb2VzbnQtdmVyaWZ5IGZpbGUxICYmCiAJZ2l0IGNvbW1pdCAtbSBkb2VzbnQtdmVyaWZ5IC0tbm8tdmVyaWZ5IGZpbGUxICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0yIGdpdCByZWJhc2UgLWkgSEVBRH4yCi0KKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGEgZmlsZSBuYW1lZCBIRUFEIGluIHdvcmt0cmVlJyAnCkBAIC02NzYsOCArNzIzLDEwIEBACiAJCWdpdCBjb21taXQgLW0gIkFkZCBib2R5IgogCSkgJiYKIAotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQHstMX0gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEB7LTF9CisJKSAmJgogCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVhbikiID0gIlNxdWFzaGVkIEF3YXkiCiAKICcKQEAgLTY4OCw3ICs3MzcsNiBAQAogCUdJVF9FRElUT1I9OiBnaXQgY29tbWl0IC0tYW1lbmQgXAogCQktLWF1dGhvcj0iU29tZWJvZHkgZWxzZSA8c29tZWJvZHlAZWxzZS5jb20+IiAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpICE9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2g0KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgYnJhbmNoMyAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpCiAKQEAgLTcxMywxMyArNzYxLDE0IEBACiAJCWdpdCBjb21taXQgLWEgLW0gInN1Ym1vZHVsZSBzZWNvbmQiCiAJKSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCBjb21taXQgLWEgLW0gIlRocmVlIGNoYW5nZXMgc3VibW9kdWxlIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgcmViYXNlIC1pJyAnCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiAzIiBnaXQgcmViYXNlIC1pIEEKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIDMiIGdpdCByZWJhc2UgLWkgQQorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbmZsaWN0IHNldHVwJyAnCkBAIC03MzYsNyArNzg1LDYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbnRpbnVlIHdpdGggb25seSBzdWJtb2R1bGUgc3RhZ2VkJyAnCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBzdWJtb2R1bGUtYmFzZSAmJgogCWdpdCBhZGQgc3ViICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCkBAIC03NDYsNyArNzk0LDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb250aW51ZSB3aXRoIHVuc3RhZ2VkIHN1Ym1vZHVsZScgJwogCWdpdCBjaGVja291dCBzdWJtb2R1bGUtdG9waWMgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBzdWJtb2R1bGUtYmFzZSAmJgogCWdpdCByZXNldCAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgpAQCAtNzU5LDcgKzgwNiw2IEBACiAJdGVzdC10b29sIGNobXRpbWUgPTEyMzQ1Njc4OSBmaWxlMyAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCiAJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIEhFQUR+NCAmJgogCXRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAlNVElNRT0kKHRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGZpbGUzKSAmJgpAQCAtNzY4LDE2ICs4MTQsMjIgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3b3JkJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHJld29yZC1icmFuY2ggbWFzdGVyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSAyIDMgcmV3b3JkIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkUgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCi0JZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKLQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgotCUZBS0VfTElORVM9IjEgMiByZXdvcmQgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJEIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgotCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiRCBjaGFuZ2VkIiAmJgotCUZBS0VfTElORVM9InJld29yZCAxIDIgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJCIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgotCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgIkIgY2hhbmdlZCIgJiYKLQlGQUtFX0xJTkVTPSIxIHIgMiBwaWNrIDMgcCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIHJld29yZCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJFIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQSAmJgorCQlnaXQgc2hvdyBIRUFEIHwgZ3JlcCAiRSBjaGFuZ2VkIiAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIHJld29yZCAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkQgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBICYmCisJCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiRCBjaGFuZ2VkIiAmJgorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQiBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAiQiBjaGFuZ2VkIiAmJgorCQlGQUtFX0xJTkVTPSIxIHIgMiBwaWNrIDMgcCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQQorCSkgJiYKIAlnaXQgc2hvdyBIRUFEfjIgfCBncmVwICJDIGNoYW5nZWQiCiAnCiAKQEAgLTc4OCw3ICs4NDAsNiBAQAogCXRlc3RfY29tbWl0IG4yICYmCiAJdGVzdF9jb21taXQgbjMgJiYKIAlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgbjMgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC0tb250byBuMSBuMiAmJgogCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKICcKQEAgLTgwMSw4ICs4NTIsMTEgQEAKIAlFT0YKIAlnaXQgcmVzZXQgLS1oYXJkIG4zICYmCiAJZ2l0IG5vdGVzIGFkZCAtbSJhbiBlYXJsaWVyIG5vdGUiIG4yICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1jb25jYXRlbmF0ZSBGQUtFX0xJTkVTPSIxIGYgMiIgZ2l0IHJlYmFzZSAtaSBuMSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUdJVF9OT1RFU19SRVdSSVRFX01PREU9Y29uY2F0ZW5hdGUgRkFLRV9MSU5FUz0iMSBmIDIiIFwKKwkJCWdpdCByZWJhc2UgLWkgbjEKKwkpICYmCiAJZ2l0IG5vdGVzIHNob3cgPiBvdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCkBAIC04MTEsOCArODY1LDEwIEBACiAJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCiAJZ3JhbmRwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yIEhFQUReMCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgSEVBRF4wCisJKSAmJgogCXRlc3QgJGdyYW5kcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKICcKQEAgLTgyMSw3ICs4NzcsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx3YXlzIGNoZXJyeS1waWNrIHdpdGggLS1uby1mZicgJwogCWdpdCBjaGVja291dCBuby1mZi1icmFuY2ggJiYKIAlnaXQgdGFnIG9yaWdpbmFsLW5vLWZmLWJyYW5jaCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLS1uby1mZiBBICYmCiAJZm9yIHAgaW4gMCAxIDIKIAlkbwpAQCAtODUzLDggKzkwOCwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLWkgaGlzdG9yeSB3aXRoIGZ1bm55IG1lc3NhZ2VzJyAnCiAJZ2l0IHJldi1saXN0IEEuLmZ1bm55ID5leHBlY3QgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIEEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCiAJZ2l0IHJldi1saXN0IEEuLiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtODY4LDkgKzkyNSw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWkgLS1leGVjIGdpdCBzaG93IEhFQUQiJyAnCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCiAJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgogCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CkBAIC04ODEsOSArOTM4LDkgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtLWV4ZWMgZ2l0IHNob3cgSEVBRCAtaSInICcKIAlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlnaXQgcmViYXNlIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLWkgSEVBRH4yID5hY3R1YWwgJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLWkgSEVBRH4yID5hY3R1YWwgJiYKIAkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCiAJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKQEAgLTg5NCw5ICs5NTEsOSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC1peCBnaXQgc2hvdyBIRUFEIicgJwogCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCWdpdCByZWJhc2UgLWl4ICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLWl4ICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgogCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKIAkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdApAQCAtOTA4LDkgKzk2NSw5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCBzZXZlcmFsIDxDTUQ+JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQ7IHB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRDsgcHdkIiBIRUFEfjIgPmFjdHVhbCAmJgogCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRDtfcHdkIDIgZXhlY19naXRfc2hvd19IRUFEO19wd2QiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCiAJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKQEAgLTkyMSw5ICs5NzgsOSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWl4IHdpdGggc2V2ZXJhbCBpbnN0YW5jZXMgb2YgLS1leGVjJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tZXhlYyAicHdkIiBIRUFEfjIgPmFjdHVhbCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWV4ZWMgInB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKIAkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgZXhlY19wd2QgMgogCQkJCWV4ZWNfZ2l0X3Nob3dfSEVBRCBleGVjX3B3ZCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKQEAgLTk0MiwxMyArOTk5LDExIEBACiAJZWNobyBiaXMgPmJpcy50eHQgJiYKIAlnaXQgYWRkIGJpcy50eHQgJiYKIAlnaXQgY29tbWl0IC1tICJmaXh1cCEgdHdvX2V4ZWMiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JKAotCQlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaF9hY3R1YWwgJiYKLQkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tYXV0b3NxdWFzaCBIRUFEfjQgPmFjdHVhbAotCSkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaF9hY3R1YWwgJiYKKwlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLS1hdXRvc3F1YXNoIEhFQUR+NCA+YWN0dWFsICYmCiAJZ2l0IGNoZWNrb3V0IGF1dG9zcXVhc2ggJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgogCQlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaF9leHBlY3RlZCAmJgogCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDMgZml4dXAgNCBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCkBAIC05NjksNyArMTAyNCw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWV4ZWMgd2l0aG91dCA8Q01EPicgJwogCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1leGVjIDI+YWN0dWFsICYmCiAJdGVzdF9pMThuZ3JlcCAicmVxdWlyZXMgYSB2YWx1ZSIgYWN0dWFsICYmCiAJZ2l0IGNoZWNrb3V0IG1hc3RlcgpAQCAtOTc3LDggKzEwMzEsMTAgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZS1vcmRlciBhbmQgZHJvcCBjb21taXRzJyAnCiAJZ2l0IGNoZWNrb3V0IEUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIzIDEgMiA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjMgMSAyIDUiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBBID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXiB8IHNlZCAtbmUgXCRwKSAmJgpAQCAtOTkxLDI0ICsxMDQ3LDMwIEBACiAJZWNobyBCID5maWxlNyAmJgogCWdpdCBhZGQgZmlsZTcgJiYKIAlHSVRfQVVUSE9SX05BTUU9IlR3ZXJwIFNub2ciIGdpdCBjb21taXQgLW0gImRpZmZlcmVudCBhdXRob3IiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1xICJeYXV0aG9yIFR3ZXJwIFNub2ciICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtcSAiXmRpZmZlcmVudCBhdXRob3IkIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHRlbXBvcmFyeSBzZW50aW5lbCBjb21taXQnICcKIAlnaXQgY2hlY2tvdXQgQiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwICJedHJlZSAkRU1QVFlfVFJFRSIgJiYKIAlnaXQgcmViYXNlIC0tYWJvcnQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCBmaXh1cCByb290IGNvbW1pdCcgJwogCWdpdCBjaGVja291dCBCICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJdGVzdCBBID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEIgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTEpICYmCiAJdGVzdCAwID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1jIF5wYXJlbnRcICkKQEAgLTEwMTcsOSArMTA3OSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXdvcmQgb3JpZ2luYWwgcm9vdCBjb21taXQnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHJld29yZC1vcmlnaW5hbC1yb290LWJyYW5jaCBtYXN0ZXIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJBIGNoYW5nZWQiIFwKLQlnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9InJld29yZCAxIDIiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkEgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJZ2l0IHNob3cgSEVBRF4gfCBncmVwICJBIGNoYW5nZWQiICYmCiAJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcCBIRUFEXikiCiAnCkBAIC0xMDI3LDkgKzEwOTEsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIG5ldyByb290IGNvbW1pdCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLW5vdy1yb290LWJyYW5jaCBtYXN0ZXIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJyZXdvcmQgMyAxIiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIFwKLQlnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9InJld29yZCAzIDEiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgXAorCQlnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkMgY2hhbmdlZCIgJiYKIAl0ZXN0IC16ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVwIEhFQUReKSIKICcKQEAgLTEwNDEsOCArMTEwNywxMCBAQAogCWdpdCBybSBmaWxlMSAmJgogCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIDEgYWRkIGZpbGUgMiIgJiYKIAllY2hvIHogPmZpbGUxICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlybSBmaWxlMSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQikiID0gInJlbW92ZSBmaWxlIDEgYWRkIGZpbGUgMiIgJiYKQEAgLTEwNTIsMTEgKzExMjAsMTMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIHJvb3Qgd2hlbiByb290IGhhcyB1bnRyYWNrZWQgZmlsZSBjb25mbGljdCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgogCWVjaG8gej5maWxlMSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBcCi0JCUZBS0VfQ09NTUlUX01FU1NBR0U9Ik1vZGlmaWVkIEEiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCi0Jcm0gZmlsZTEgJiYKLQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJSZXdvcmRlZCBBIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgXAorCQkJRkFLRV9DT01NSVRfTUVTU0FHRT0iTW9kaWZpZWQgQSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkJcm0gZmlsZTEgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iUmV3b3JkZWQgQSIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiBIRUFEXikiID0gIlJld29yZGVkIEEiICYmCiAJdGVzdCAiJChnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSIgPSAyCiAnCkBAIC0xMDY1LDE5ICsxMTM1LDIzIEBACiAJZ2l0IGNoZWNrb3V0IHJld29yZC1vcmlnaW5hbC1yb290LWJyYW5jaCAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgY29uZmxpY3QtYnJhbmNoICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtZiAtLW9udG8gSEVBRH4yIEhFQUR+ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWYgLS1vbnRvIEhFQUR+MiBIRUFEfiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgogCWdpdCByZWJhc2UgLS1hYm9ydAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1lZGl0LXRvZG8gY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRvZG8nICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IG5vLWNvbmZsaWN0LWJyYW5jaF4wICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIDIgMyIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKLQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKLQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiAzIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgTSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgTCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCkBAIC0xMDg1LDcgKzExNTksNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHByb2R1Y2VzIHJlYWRhYmxlIHJlZmxvZycgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgYnJhbmNoIC1mIGJyYW5jaC1yZWZsb2ctdGVzdCBIICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtLW9udG8gSSBGIGJyYW5jaC1yZWZsb2ctdGVzdCAmJgogCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKIAlyZWJhc2UgLWkgKGZpbmlzaCk6IHJldHVybmluZyB0byByZWZzL2hlYWRzL2JyYW5jaC1yZWZsb2ctdGVzdApAQCAtMTEwNiw4ICsxMTc5LDEwIEBACiAJc2VkIC1lICIyLFwkcy9eL1xcXFwvIiAiJDEiID4iJDEudG1wIiAmJgogCW12ICIkMS50bXAiICIkMSIKIAlFT0YKLQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9yZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCIgJiYKLQlnaXQgcmViYXNlIC1pIEIgJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL3JlbW92ZS1hbGwtYnV0LWZpcnN0LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEIKKwkpICYmCiAJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCiAnCiAKQEAgLTExMTYsOSArMTE5MSwxMSBAQAogCXdyaXRlX3NjcmlwdCBjb3B5LWVkaXQtc2NyaXB0LnNoIDw8LVxFT0YgJiYKIAljcCAiJDEiIGVkaXQtc2NyaXB0CiAJRU9GCi0JdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvY29weS1lZGl0LXNjcmlwdC5zaCIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCA6IiAmJgotCWdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2NvcHktZWRpdC1zY3JpcHQuc2giICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCiAJdGVzdCAteiAiJChncmVwIC12ZSAiXiMiIC1lICJeXCQiIC1lICJecGljayIgZWRpdC1zY3JpcHQpIgogJwogCkBAIC0xMTUzLDggKzEyMzAsMTEgQEAKIAllY2hvIGZpdmUgPmNvbmZsaWN0ICYmCiAJZWNobyBaID5maWxlMSAmJgogCWdpdCBjb21taXQgLWEgLW0gIm9uZSBmaWxlIGNvbmZsaWN0IiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIC1Yb3VycyBjb25mbGljdC1icmFuY2ggJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBcCisJCQktWG91cnMgY29uZmxpY3QtYnJhbmNoCisJKSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgJChnaXQgc2hvdyBjb25mbGljdC1icmFuY2g6Y29uZmxpY3QpID0gJChjYXQgY29uZmxpY3QpICYmCiAJdGVzdCAkKGNhdCBmaWxlMSkgPSBaCkBAIC0xMTg1LDE4ICsxMjY1LDIwIEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKIAlnaXQgY2hlY2tvdXQgY29sbGlkZSAmJgogCSgKLQl1bnNldCB0ZXN0X3RpY2sgJiYKLQl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjb2xsaWRlMiBhYzRmMmVlIiBcCi0JRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkJdW5zZXQgdGVzdF90aWNrICYmCisJCXRlc3RfdGljayAmJgorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iY29sbGlkZTIgYWM0ZjJlZSIgXAorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBnaXQgcmViYXNlIC1pIEhFQUR+MgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdCBjb3JlLmFiYnJldicgJwogCWdpdCBjb25maWcgY29yZS5hYmJyZXYgMTIgJiYKLQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPnRvZG8tbGlzdCAmJgorCSgKKwkJc2V0X2NhdF90b2RvX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+NCA+dG9kby1saXN0CisJKSAmJgogCXRlc3QgNCA9ICQoZ3JlcCAtYyAicGljayBbMC05YS1mXVx7MTIsXH0iIHRvZG8tbGlzdCkKICcKIApAQCAtMTIwNCwxNiArMTI4NiwyMCBAQAogCXdyaXRlX3NjcmlwdCBkdW1wLXJhdy5zaCA8PC1cRU9GICYmCiAJCWNhdCAiJDEiCiAJRU9GCi0JdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZHVtcC1yYXcuc2giICYmCi0JZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPmFjdHVhbCAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZHVtcC1yYXcuc2giICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH40ID5hY3R1YWwKKwkpICYmCiAJdGVzdF9pMThuZ3JlcCAiXiMgUmViYXNlIC4uKiBvbnRvIC4uKiAoWzAtOV0iIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0cyB0aGF0IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMgKHBpY2spJyAnCiAJZ2l0IGNoZWNrb3V0IC0tZm9yY2UgYnJhbmNoMiAmJgogCWdpdCBjbGVhbiAtZiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIEEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgogCXRlc3RfY21wX3JldiBIRUFEIEYgJiYKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgogCT5maWxlNiAmJgpAQCAtMTIyOCw4ICsxMzE0LDEwIEBACiAJZ2l0IGNoZWNrb3V0IC0tZm9yY2UgYnJhbmNoMiAmJgogCWdpdCBjbGVhbiAtZiAmJgogCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBBICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCiAJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCiAJPmZpbGU2ICYmCkBAIC0xMjQ0LDggKzEzMzIsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb21taXRzIHRoYXQgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcyAobm8gZmYpJyAnCiAJZ2l0IGNoZWNrb3V0IC0tZm9yY2UgYnJhbmNoMiAmJgogCWdpdCBjbGVhbiAtZiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIC0tbm8tZmYgQSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIC0tbm8tZmYgQQorCSkgJiYKIAl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApID0gRiAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCiAJPmZpbGU2ICYmCkBAIC0xMjY4LDggKzEzNTgsMTAgQEAKIAlnaXQgdGFnIHNlcS1vbnRvICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKIAlnaXQgY2hlcnJ5LXBpY2sgc2VxLW9udG8gJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0gZ2l0IHJlYmFzZSAtaSBzZXEtb250byAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSBnaXQgcmViYXNlIC1pIHNlcS1vbnRvCisJKSAmJgogCXRlc3QgLWQgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZXEtb250byAmJgpAQCAtMTI4OCw4ICsxMzgwLDEwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AnICcKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGRyb3AtdGVzdCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgZHJvcCAyIDMgZCA0IDUiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBkcm9wIDIgMyBkIDQgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEMgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eIHwgc2VkIC1uZSBcJHApCkBAIC0xMjk4LDkgKzEzOTIsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayA9IGlnbm9yZScgJwogCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGlnbm9yZSAmJgogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBcCi0JCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwKKwkpICYmCiAJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0X2kxOG5ncmVwIFwKIAkJIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvbWlzc2luZy1jb21taXQiIFwKQEAgLTEzMTYsOSArMTQxMSwxMCBAQAogCUVPRgogCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIHdhcm4gJiYKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSAyIDMgNCIgXAotCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbC4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwuMgorCSkgJiYKIAloZWFkIC1uNCBhY3R1YWwuMiA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKIAl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQpAQCAtMTM0MCwxNCArMTQzNiwxNSBAQAogCUVPRgogCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGVycm9yICYmCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgNCIgXAotCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgotCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCi0JY3AgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCBcCi0JCS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgotCUZBS0VfTElORVM9IjEgMiBkcm9wIDMgNCBkcm9wIDUiIFwKLQkJZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJY3AgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCBcCisJCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwkJRkFLRV9MSU5FUz0iMSAyIGRyb3AgMyA0IGRyb3AgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQpAQCAtMTM2OCwyMSArMTQ2NSwyNyBAQAogCXggZ2l0IHNob3cgSEVBRAogCUVPRgogCWdpdCBjaGVja291dCBhYmJyZXZjbWQgJiYKLQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCiAJdGVzdF9jb25maWcgcmViYXNlLmFiYnJldmlhdGVDb21tYW5kcyB0cnVlICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIFwKLQkJLS1hdXRvc3F1YXNoIG1hc3RlciA+YWN0dWFsICYmCisJKAorCQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBcCisJCQktLWF1dG9zcXVhc2ggbWFzdGVyID5hY3R1YWwKKwkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBjaGVjayBvZiBiYWQgY29tbWFuZCcgJwogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYmFkLWNtZCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgMyBiYWQgNCA1IiBcCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIGJhZCA0IDUiIFwKIAkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKLQl0ZXN0X2kxOG5ncmVwICJiYWRjbWQgJChnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0xIG1hc3Rlcn4xKSIgYWN0dWFsICYmCi0JdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIGFjdHVhbCAmJgotCUZBS0VfTElORVM9IjEgMiAzIGRyb3AgNCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCXRlc3RfaTE4bmdyZXAgImJhZGNtZCAkKGdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLTEgbWFzdGVyfjEpIiBcCisJCQkJYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgIllvdSBjYW4gZml4IHRoaXMgd2l0aCAuZ2l0IHJlYmFzZSAtLWVkaXQtdG9kby4uIiBcCisJCQkJYWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgMiAzIGRyb3AgNCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCkBAIC0xMzk4LDE5ICsxNTAxLDI0IEBACiAJKSA+IiQxLm5ldyIKIAltdiAiJDEubmV3IiAiJDEiCiAJRU9GCi0JdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWRkLWluZGVudC5zaCIgJiYKLQlnaXQgcmViYXNlIC1pIEhFQUReXl4gJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2FkZC1pbmRlbnQuc2giICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRF5eXgorCSkgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0aWMgY2hlY2sgb2YgYmFkIFNIQS0xJyAnCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBiYWQtc2hhICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiBlZGl0IGZha2VzaGEgMyA0IDUgIyIgXAotCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgotCXRlc3RfaTE4bmdyZXAgImVkaXQgWFhYWFhYWCBGYWxzZSBjb21taXQiIGFjdHVhbCAmJgotCXRlc3RfaTE4bmdyZXAgIllvdSBjYW4gZml4IHRoaXMgd2l0aCAuZ2l0IHJlYmFzZSAtLWVkaXQtdG9kby4uIiBhY3R1YWwgJiYKLQlGQUtFX0xJTkVTPSIxIDIgNCA1IDYiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIGVkaXQgZmFrZXNoYSAzIDQgNSAjIiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgorCQkJdGVzdF9pMThuZ3JlcCAiZWRpdCBYWFhYWFhYIEZhbHNlIGNvbW1pdCIgYWN0dWFsICYmCisJCQl0ZXN0X2kxOG5ncmVwICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggLmdpdCByZWJhc2UgLS1lZGl0LXRvZG8uLiIgXAorCQkJCQlhY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDQgNSA2IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCkBAIC0xNDI5LDM5ICsxNTM3LDcxIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWdwZy1zaWduPTxrZXktaWQ+JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSAtLWdwZy1zaWduPSJcIlMgSSBHbmVyXCIiIEhFQUReIFwKLQkJPm91dCAyPmVyciAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSAtLWdwZy1zaWduPSJcIlMgSSBHbmVyXCIiIFwKKwkJCUhFQUReID5vdXQgMj5lcnIKKwkpICYmCiAJdGVzdF9pMThuZ3JlcCAiJFNRLVNcIlMgSSBHbmVyXCIkU1EiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1ncGctc2lnbj08a2V5LWlkPiBvdmVycmlkZXMgY29tbWl0LmdwZ1NpZ24nICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCiAJdGVzdF9jb25maWcgY29tbWl0LmdwZ3NpZ24gdHJ1ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSAtLWdwZy1zaWduPSJcIlMgSSBHbmVyXCIiIEhFQUReIFwKLQkJPm91dCAyPmVyciAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSAtLWdwZy1zaWduPSJcIlMgSSBHbmVyXCIiIFwKKwkJCUhFQUReID5vdXQgMj5lcnIKKwkpICYmCiAJdGVzdF9pMThuZ3JlcCAiJFNRLVNcIlMgSSBHbmVyXCIkU1EiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBhdXRob3IgaGVhZGVyIGFmdGVyIC0tcm9vdCBzd2FwJyAnCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBhdXRob3ItaGVhZGVyIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iQXUgJHtTUX10aG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiAtLW5vLWVkaXQgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIF5hdXRob3IgPmV4cGVjdGVkICYmCi0JRkFLRV9MSU5FUz0iNSAxIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjUgMSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgXmF1dGhvciA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIGF1dGhvciBoZWFkZXIgd2hlbiBhdXRob3IgY29udGFpbnMgc2luZ2xlIHF1b3RlJyAnCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBhdXRob3ItaGVhZGVyIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iQXUgJHtTUX10aG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiAtLW5vLWVkaXQgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIF5hdXRob3IgPmV4cGVjdGVkICYmCi0JRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIF5hdXRob3IgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNvbW1pdCBob29rIGlzIGNhbGxlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wb3N0LWNvbW1pdCIgJiYKKwk+YWN0dWFsICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtY29tbWl0IDw8LVxFT1MgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPj5hY3R1YWwKKwlFT1MKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDQgMSByZXdvcmQgMiBmaXh1cCAzIiBnaXQgcmViYXNlIC1pIEEgRSAmJgorCQllY2hvIHg+ZmlsZTMgJiYKKwkJZ2l0IGFkZCBmaWxlMyAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPWVkaXRlZCBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEQHs1fSBIRUFEQHs0fSBIRUFEQHszfSBIRUFEQHsyfSBIRUFEQHsxfSBIRUFEIFwKKwkJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgdGVzdCBpbiB0aGlzIGZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRFRElUT1IgYW5kIGZyaWVuZHMgYXJlIHVuY2hhbmdlZCcgJworCXRlc3RfZWRpdG9yX3VuY2hhbmdlZAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaCBiL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaAppbmRleCBiODQ3MDY0Li4zMjUwNzJiIDEwMDc1NQotLS0gYS90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2gKKysrIGIvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoCkBAIC02MSw3ICs2MSw3IEBACiAJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIHJld3JpdGVzIGV2ZW4gaWYgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKIAkJcmVzZXRfcmViYXNlICYmCiAJCWdpdCByZWJhc2UgJCogLWYgYiBlICYmCi0JCSEgdGVzdF9jbXBfcmV2IGUgSEVBRCAmJgorCQl0ZXN0X2NtcF9yZXYgISBlIEhFQUQgJiYKIAkJdGVzdF9jbXBfcmV2IGIgSEVBRH4yICYmCiAJCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGIuLgogCSIKQEAgLTc4LDcgKzc4LDcgQEAKIAl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgcmV3cml0ZXMgZXZlbiBpZiByZW1vdGUgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKIAkJcmVzZXRfcmViYXNlICYmCiAJCWdpdCByZWJhc2UgJCogLWYgYnJhbmNoLWIgYnJhbmNoLWUgJiYKLQkJISB0ZXN0X2NtcF9yZXYgYnJhbmNoLWUgb3JpZ2luL2JyYW5jaC1lICYmCisJCXRlc3RfY21wX3JldiAhIGJyYW5jaC1lIG9yaWdpbi9icmFuY2gtZSAmJgogCQl0ZXN0X2NtcF9yZXYgYnJhbmNoLWIgSEVBRH4yICYmCiAJCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGJyYW5jaC1iLi4KIAkiCkBAIC0zNjgsNyArMzY4LDcgQEAKIAl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGNhdXNlcyByZS13cml0ZSIgIgogCQlyZXNldF9yZWJhc2UgJiYKIAkJZ2l0IHJlYmFzZSAkKiAtZiAtLXJvb3QgYyAmJgotCQkhIHRlc3RfY21wX3JldiBhIEhFQUR+MiAmJgorCQl0ZXN0X2NtcF9yZXYgISBhIEhFQUR+MiAmJgogCQl0ZXN0X2xpbmVhcl9yYW5nZSAnYSBiIGMnIEhFQUQKIAkiCiB9CmRpZmYgLS1naXQgYS90L3QzNDIyLXJlYmFzZS1pbmNvbXBhdGlibGUtb3B0aW9ucy5zaCBiL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoCmluZGV4IDUwZTc5NjAuLmM4MjM0MDYgMTAwNzU1Ci0tLSBhL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoCisrKyBiL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoCkBAIC02MSw4ICs2MSw2IEBACiB9CiAKIHRlc3RfcmViYXNlX2FtX29ubHkgLS13aGl0ZXNwYWNlPWZpeAotdGVzdF9yZWJhc2VfYW1fb25seSAtLWlnbm9yZS13aGl0ZXNwYWNlCi10ZXN0X3JlYmFzZV9hbV9vbmx5IC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUKIHRlc3RfcmViYXNlX2FtX29ubHkgLUM0CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJy0tcHJlc2VydmUtbWVyZ2VzIGluY29tcGF0aWJsZSB3aXRoIC0tc2lnbm9mZicgJwpkaWZmIC0tZ2l0IGEvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoIGIvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoCmluZGV4IDg3MzljYjYuLjcwMjRkNDkgMTAwNzU1Ci0tLSBhL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaAorKysgYi90L3QzNDI5LXJlYmFzZS1lZGl0LXRvZG8uc2gKQEAgLTE3LDcgKzE3LDcgQEAKIAl0ZXN0IC1lIEYKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdsb29zZSBvYmplY3QgY2FjaGUgdnMgcmUtcmVhZGluZyB0b2RvIGxpc3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdCBjYWNoZSB2cyByZS1yZWFkaW5nIHRvZG8gbGlzdCcgJwogCUdJVF9SRUJBU0VfVE9ETz0uZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKIAlleHBvcnQgR0lUX1JFQkFTRV9UT0RPICYmCiAJd3JpdGVfc2NyaXB0IGFwcGVuZC10b2RvLnNoIDw8LVxFT1MgJiYKQEAgLTUyLDQgKzUyLDM0IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLXJlYWRpbmcgdG9kbyBkb2VzbnQgaW50ZXJmZXJlIHdpdGggcmV2ZXJ0IC0tZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKworCWdpdCByZXZlcnQgLS1lZGl0IHRoaXJkIHNlY29uZCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVJldmVydCAic2Vjb25kIgorCVJldmVydCAidGhpcmQiCisJdGhpcmQKKwlzZWNvbmQKKwlmaXJzdAorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1yZWFkaW5nIHRvZG8gZG9lc250IGludGVyZmVyZSB3aXRoIGNoZXJyeS1waWNrIC0tZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKworCWdpdCBjaGVycnktcGljayAtLWVkaXQgc2Vjb25kIHRoaXJkICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdGhpcmQKKwlzZWNvbmQKKwlmaXJzdAorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaCBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaAppbmRleCA5ZWZjZjQ4Li5lNzJjYTM0IDEwMDc1NQotLS0gYS90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2gKKysrIGIvdC90MzQzMC1yZWJhc2UtbWVyZ2VzLnNoCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIGtobnVtICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IHJlYmFzZSAtZiAtciBIRUFEXiAmJgotCSEgdGVzdF9jbXBfcmV2IEhFQUReMiBraG51bSAmJgorCXRlc3RfY21wX3JldiAhIEhFQUReMiBraG51bSAmJgogCXRlc3RfY21wX2dyYXBoIEhFQUReLi4gPDwtXEVPRiAmJgogCSogICBNZXJnZSBicmFuY2ggJ1wnJ2tobnVtJ1wnJyBpbnRvIGFzaGVyYWgKIAl8XApAQCAtNDA4LDcgKzQwOCw3IEBACiAJfCB8ICogdGhyZWUKIAl8ICogfCB0d28KIAl8IHwvCi0JKiB8IG9uZQorCSogLyBvbmUKIAl8LwogCW8gYmVmb3JlLW9jdG9wdXMKIAlFT0YKQEAgLTQ2OCw0ICs0NjgsMzEgQEAKIAl0ZXN0X2NtcCBleHBlY3QgRy50CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlLW1lcmdlcyB3aXRoIGNvbW1pdCB0aGF0IGNhbiBnZW5lcmF0ZSBiYWQgY2hhcmFjdGVycyBmb3IgZmlsZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29sb24taW4tbGFiZWwgRSAmJgorCWdpdCBtZXJnZSAtbSAiY29sb246IHRoaXMgc2hvdWxkIHdvcmsiIEcgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyAtLWZvcmNlLXJlYmFzZSBFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlLW1lcmdlcyB3aXRoIG1lc3NhZ2UgbWF0Y2hlZCB3aXRoIG9udG8gbGFiZWwnICcKKwlnaXQgY2hlY2tvdXQgLWIgb250by1sYWJlbCBFICYmCisJZ2l0IG1lcmdlIC1tIG9udG8gRyAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIC0tZm9yY2UtcmViYXNlIEUgJiYKKwl0ZXN0X2NtcF9ncmFwaCA8PC1cRU9GCisJKiAgIG9udG8KKwl8XAorCXwgKiBHCisJfCAqIEYKKwkqIHwgICBFCisJfFwgXAorCXwgKiB8IEIKKwkqIHwgfCBECisJfCB8LworCXwvfAorCSogfCBDCisJfC8KKwkqIEEKKwlFT0YKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDMyLXJlYmFzZS1mYXN0LWZvcndhcmQuc2ggYi90L3QzNDMyLXJlYmFzZS1mYXN0LWZvcndhcmQuc2gKaW5kZXggMDM0ZmZjNy4uOTJmOTViNSAxMDA3NTUKLS0tIGEvdC90MzQzMi1yZWJhc2UtZmFzdC1mb3J3YXJkLnNoCisrKyBiL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaApAQCAtNjQsNyArNjQsNyBAQAogCQkJdGVzdF9jbXBfcmV2IFwkb2xkaGVhZCBcJG5ld2hlYWQKIAkJZWxpZiB0ZXN0ICRjbXAgPSBkaWZmCiAJCXRoZW4KLQkJCSEgdGVzdF9jbXBfcmV2IFwkb2xkaGVhZCBcJG5ld2hlYWQKKwkJCXRlc3RfY21wX3JldiAhIFwkb2xkaGVhZCBcJG5ld2hlYWQKIAkJZmkKIAkiCiB9CmRpZmYgLS1naXQgYS90L3QzNDMzLXJlYmFzZS1vcHRpb25zLWNvbXBhdGliaWxpdHkuc2ggYi90L3QzNDMzLXJlYmFzZS1vcHRpb25zLWNvbXBhdGliaWxpdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTE2NmYxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzMtcmViYXNlLW9wdGlvbnMtY29tcGF0aWJpbGl0eS5zaApAQCAtMCwwICsxLDEzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBSb2hpdCBBc2hpd2FsCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3RzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gYW0gYW5kIGludGVyYWN0aXZlIGJhY2tlbmRzJworCisuIC4vdGVzdC1saWIuc2gKKworR0lUX0FVVEhPUl9EQVRFPSIxOTk5LTA0LTAyVDA4OjAzOjIwKzA1OjMwIgorZXhwb3J0IEdJVF9BVVRIT1JfREFURQorCisjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaW4gd2hpY2ggYm90aCBhbSBhbmQgaW50ZXJhY3RpdmUgYmFja2VuZHMKKyMgcHJvdmlkZSB0aGUgc2FtZSBvdXRwdXQuIEl0IHdhcyBkb25lIGludGVudGlvbmFsbHkgYmVjYXVzZQorIyBib3RoIHRoZSBiYWNrZW5kcyBmYWxsIHNob3J0IG9mIG9wdGltYWwgYmVoYXZpb3VyLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlxX3RvX3RhYiA+ZmlsZSA8PC1cRU9GICYmCisJbGluZSAxCisJUWxpbmUgMgorCWxpbmUgMworCUVPRgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIiAmJgorCWNhdCA+ZmlsZSA8PC1cRU9GICYmCisJbGluZSAxCisJbmV3IGxpbmUgMgorCWxpbmUgMworCUVPRgorCWdpdCBjb21taXQgLWFtICJ1cGRhdGUgZmlsZSIgJiYKKwlnaXQgdGFnIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQxIGZvbyBmb28xICYmCisJdGVzdF9jb21taXQgY29tbWl0MiBmb28gZm9vMiAmJgorCXRlc3RfY29tbWl0IGNvbW1pdDMgZm9vIGZvbzMgJiYKKworCWdpdCBjaGVja291dCAtLW9ycGhhbiBtYXN0ZXIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgZm9vICYmCisJcm0gZm9vICYmCisJc2VkIC1lICJzL158Ly8iID5maWxlIDw8LVxFT0YgJiYKKwl8bGluZSAxCisJfCAgICAgICAgbGluZSAyCisJfGxpbmUgMworCUVPRgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIiAmJgorCWdpdCB0YWcgbWFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS13aGl0ZXNwYWNlIHdvcmtzIHdpdGggYW0gYmFja2VuZCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlsaW5lIDEKKwluZXcgbGluZSAyCisJbGluZSAzCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYWluIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwlnaXQgcmViYXNlIC0taWdub3JlLXdoaXRlc3BhY2UgbWFpbiBzaWRlICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtd2hpdGVzcGFjZSB3b3JrcyB3aXRoIGludGVyYWN0aXZlIGJhY2tlbmQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbGluZSAxCisJbmV3IGxpbmUgMgorCWxpbmUgMworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSBtYWluIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgLS1pZ25vcmUtd2hpdGVzcGFjZSBtYWluIHNpZGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIHdvcmtzIHdpdGggYW0gYmFja2VuZCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCWdpdCByZWJhc2UgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSBIRUFEXiAmJgorCWdpdCBzaG93IEhFQUQgLS1wcmV0dHk9ImZvcm1hdDolYWkiID5hdXRob3J0aW1lICYmCisJZ2l0IHNob3cgSEVBRCAtLXByZXR0eT0iZm9ybWF0OiVjaSIgPmNvbW1pdHRlcnRpbWUgJiYKKwl0ZXN0X2NtcCBhdXRob3J0aW1lIGNvbW1pdHRlcnRpbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSB3b3JrcyB3aXRoIGludGVyYWN0aXZlIGJhY2tlbmQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwlnaXQgcmViYXNlIC1pIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgSEVBRF4gJiYKKwlnaXQgc2hvdyBIRUFEIC0tcHJldHR5PSJmb3JtYXQ6JWFpIiA+YXV0aG9ydGltZSAmJgorCWdpdCBzaG93IEhFQUQgLS1wcmV0dHk9ImZvcm1hdDolY2kiID5jb21taXR0ZXJ0aW1lICYmCisJdGVzdF9jbXAgYXV0aG9ydGltZSBjb21taXR0ZXJ0aW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgd29ya3Mgd2l0aCByZWJhc2UgLXInICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIGNvbW1pdDMgJiYKKwlnaXQgcmViYXNlIC1yIC0tcm9vdCAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPnJldl9saXN0ICYmCisJd2hpbGUgcmVhZCBIQVNICisJZG8KKwkJZ2l0IHNob3cgJEhBU0ggLS1wcmV0dHk9ImZvcm1hdDolYWkiID5hdXRob3J0aW1lCisJCWdpdCBzaG93ICRIQVNIIC0tcHJldHR5PSJmb3JtYXQ6JWNpIiA+Y29tbWl0dGVydGltZQorCQl0ZXN0X2NtcCBhdXRob3J0aW1lIGNvbW1pdHRlcnRpbWUKKwlkb25lIDxyZXZfbGlzdAorJworCisjIENoZWNraW5nIGZvciArMDAwMCBpbiBhdXRob3IgdGltZSBpcyBlbm91Z2ggc2luY2UgZGVmYXVsdAorIyB0aW1lem9uZSBpcyBVVEMsIGJ1dCB0aGUgdGltZXpvbmUgdXNlZCB3aGlsZSBjb21taXR0aW5nCisjIHNldHMgdG8gKzA1MzAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1kYXRlIHdvcmtzIHdpdGggYW0gYmFja2VuZCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9IiRHSVRfQVVUSE9SX0RBVEUiICYmCisJZ2l0IHJlYmFzZSAtLWlnbm9yZS1kYXRlIEhFQUReICYmCisJZ2l0IHNob3cgSEVBRCAtLXByZXR0eT0iZm9ybWF0OiVhaSIgPmF1dGhvcnRpbWUgJiYKKwlncmVwICIrMDAwMCIgYXV0aG9ydGltZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1kYXRlIHdvcmtzIHdpdGggaW50ZXJhY3RpdmUgYmFja2VuZCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9IiRHSVRfQVVUSE9SX0RBVEUiICYmCisJZ2l0IHJlYmFzZSAtLWlnbm9yZS1kYXRlIC1pIEhFQUReICYmCisJZ2l0IHNob3cgSEVBRCAtLXByZXR0eT0iZm9ybWF0OiVhaSIgPmF1dGhvcnRpbWUgJiYKKwlncmVwICIrMDAwMCIgYXV0aG9ydGltZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1kYXRlIHdvcmtzIHdpdGggcmViYXNlIC1yJyAnCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBjb21taXQzICYmCisJZ2l0IHJlYmFzZSAtciAtLXJvb3QgLS1pZ25vcmUtZGF0ZSAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5yZXZfbGlzdCAmJgorCXdoaWxlIHJlYWQgSEFTSAorCWRvCisJCWdpdCBzaG93ICRIQVNIIC0tcHJldHR5PSJmb3JtYXQ6JWFpIiA+YXV0aG9ydGltZQorCQlncmVwICIrMDAwMCIgYXV0aG9ydGltZQorCWRvbmUgPHJldl9saXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzNC1yZWJhc2UtaTE4bi5zaCBiL3QvdDM0MzQtcmViYXNlLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzdjODM1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQtcmViYXNlLWkxOG4uc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEb2FuIFRyYW4gQ29uZyBEYW5oCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSB3aXRoIGNoYW5naW5nIGVuY29kaW5nCisKK0luaXRpYWwgc2V0dXA6CisKKzEgLSAyICAgICAgICAgICAgICBtYXN0ZXIKKyBcCisgIDMgLSA0ICAgICAgICAgICAgZmlyc3QKKyAgIFwKKyAgICA1IC0gNiAgICAgICAgICBzZWNvbmQKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbXBhcmVfbXNnICgpIHsKKwlpY29udiAtZiAiJDIiIC10ICIkMyIgIiRURVNUX0RJUkVDVE9SWS90MzQzNC8kMSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGJyYW5jaCBmaXJzdCAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBzd2l0Y2ggZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBicmFuY2ggc2Vjb25kICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCBzd2l0Y2ggc2Vjb25kICYmCisJdGVzdF9jb21taXQgZml2ZSAmJgorCXRlc3RfY29tbWl0IHNpeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIHVwZGF0ZSBlbmNvZGluZyBldWNKUCB0byBVVEYtOCcgJworCWdpdCBzd2l0Y2ggLWMgbWVyZ2UtZXVjSlAtVVRGLTggZmlyc3QgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgbWVyZ2UgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC9ldWNKUC50eHQiIHNlY29uZCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIG1hc3RlciAmJgorCWNvbXBhcmVfbXNnIGV1Y0pQLnR4dCBldWNKUCBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIHVwZGF0ZSBlbmNvZGluZyBldWNKUCB0byBJU08tMjAyMi1KUCcgJworCWdpdCBzd2l0Y2ggLWMgbWVyZ2UtZXVjSlAtSVNPLTIwMjItSlAgZmlyc3QgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgbWVyZ2UgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC9ldWNKUC50eHQiIHNlY29uZCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tMjAyMi1KUCAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIG1hc3RlciAmJgorCWNvbXBhcmVfbXNnIGV1Y0pQLnR4dCBldWNKUCBJU08tMjAyMi1KUAorJworCit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlICgpIHsKKwlvbGQ9JDEKKwluZXc9JDIKKwltc2dmaWxlPSQzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC0tY29udGludWUgdXBkYXRlIGZyb20gJG9sZCB0byAkbmV3IiAnCisJCShnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiBhYm9ydCBjdXJyZW50IGdpdC1yZWJhc2UgZmFpbHVyZSkgJiYKKwkJZ2l0IHN3aXRjaCAtYyBjb25mbGljdC0kb2xkLSRuZXcgb25lICYmCisJCWVjaG8gZm9yLWNvbmZsaWN0ID50d28udCAmJgorCQlnaXQgYWRkIHR3by50ICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkb2xkICYmCisJCWdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC8kbXNnZmlsZSIgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRuZXcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgJiYKKwkJdGVzdCAtZiAuZ2l0L3JlYmFzZS1tZXJnZS9tZXNzYWdlICYmCisJCWdpdCBzdHJpcHNwYWNlIDwuZ2l0L3JlYmFzZS1tZXJnZS9tZXNzYWdlID50d28udCAmJgorCQlnaXQgYWRkIHR3by50ICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCQljb21wYXJlX21zZyAkbXNnZmlsZSAkb2xkICRuZXcgJiYKKwkJOiBnaXQtY29tbWl0IGFzc3VtZSBpbnZhbGlkIHV0Zi04IGlzIGxhdGluMSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgdHdvLnQKKwknCit9CisKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgSVNPLTg4NTktMSBVVEYtOCBJU084ODU5LTEudHh0Cit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlIGV1Y0pQIFVURi04IGV1Y0pQLnR4dAordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSBldWNKUCBJU08tMjAyMi1KUCBldWNKUC50eHQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDM0L0lTTzg4NTktMS50eHQgYi90L3QzNDM0L0lTTzg4NTktMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZWYwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQvSVNPODg1OS0xLnR4dApAQCAtMCwwICsxLDMgQEAKK8TL0c/WCisKK8Fi52ToZmcKZGlmZiAtLWdpdCBhL3QvdDM0MzQvZXVjSlAudHh0IGIvdC90MzQzNC9ldWNKUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQvZXVjSlAudHh0CkBAIC0wLDAgKzEsNCBAQAorpM+k7KTSpNuk1QorCiukt6TGpKSk66TOpKyhoqSkpOukzqTHoaMKK9/Ayc2k26TspNek6qTdpOyk3qTTpLCk6qTtpNihowpkaWZmIC0tZ2l0IGEvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2ggYi90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaAppbmRleCBkMWM2OGFmLi4xYzUxYTkxIDEwMDc1NQotLS0gYS90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaAorKysgYi90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaApAQCAtMTA2LDcgKzEwNiw3IEBACiAJcm0gLXJmICogJiYKIAlnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbCAmJgogCWdpdCBkaWZmIC0tcXVpZXQgaW5pdGlhbCAmJgotCSEgdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRAorCXRlc3RfY21wX3JldiAhIGluaXRpYWwgSEVBRAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAiLSIgdG8gcGljayBmcm9tIHByZXZpb3VzIGJyYW5jaCcgJwpkaWZmIC0tZ2l0IGEvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2ggYi90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaAppbmRleCBiNDU3MzMzLi4yMzA3MGE3IDEwMDc1NQotLS0gYS90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaAorKysgYi90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaApAQCAtNSw3ICs1LDcgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiBjaGVja19oZWFkX2RpZmZlcnNfZnJvbSgpIHsKLQkhIHRlc3RfY21wX3JldiBIRUFEICIkMSIKKwl0ZXN0X2NtcF9yZXYgISBIRUFEICIkMSIKIH0KIAogY2hlY2tfaGVhZF9lcXVhbHMoKSB7CmRpZmYgLS1naXQgYS90L3QzNjAwLXJtLnNoIGIvdC90MzYwMC1ybS5zaAppbmRleCA4YzhjY2E1Li4wZWE4NThkIDEwMDc1NQotLS0gYS90L3QzNjAwLXJtLnNoCisrKyBiL3QvdDM2MDAtcm0uc2gKQEAgLTExMyw5ICsxMTMsMTAgQEAKIAllY2hvIGZyb3R6ID50ZXN0LWZpbGUgJiYKIAlnaXQgYWRkIHRlc3QtZmlsZSAmJgogCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIGZvciBybSB0ZXN0IiAmJgotCWdpdCBybSB0ZXN0LWZpbGUgPnJtLW91dHB1dCAmJgotCXRlc3QgJChncmVwICJecm0gIiBybS1vdXRwdXQgfCB3YyAtbCkgPSAxICYmCi0Jcm0gLWYgdGVzdC1maWxlIHJtLW91dHB1dCAmJgorCWdpdCBybSB0ZXN0LWZpbGUgPnJtLW91dHB1dC5yYXcgJiYKKwlncmVwICJecm0gIiBybS1vdXRwdXQucmF3ID5ybS1vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHJtLW91dHB1dCAmJgorCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQucmF3IHJtLW91dHB1dCAmJgogCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGZyb20gcm0gdGVzdCIKICcKIApAQCAtMjUwLDYgKzI1MSw3IEBACiAJCWVjaG8gIjEwMDY0NCAkaGFzaCAwCXNvbWUtZmlsZS0kaSIKIAkJaT0kKCggJGkgKyAxICkpCiAJZG9uZSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJIyBnaXQgY29tbWFuZCBpcyBpbnRlbnRpb25hbGx5IHBsYWNlZCB1cHN0cmVhbSBvZiBwaXBlIHRvIGluZHVjZSBTSUdQSVBFCiAJZ2l0IHJtIC1uICJzb21lLWZpbGUtKiIgfCA6ICYmCiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmRleC5sb2NrCiAnCkBAIC0zMDMsNyArMzA1LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyBlbXB0eSBzdWJtb2R1bGVzIGZyb20gd29yayB0cmVlJyAnCiAJbWtkaXIgc3VibW9kICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHN1Ym1vZCAmJgorCWhhc2g9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgIiRoYXNoIiBzdWJtb2QgJiYKIAlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4vLiAmJgogCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1Ym1vZCAmJgogCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgpAQCAtNjIyLDcgKzYyNSw4IEBACiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKIAkoCiAJCWNkIHN1Ym1vZCAmJgotCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgc3Vic3VibW9kICYmCisJCWhhc2g9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICIkaGFzaCIgc3Vic3VibW9kICYmCiAJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgLi4vLiAmJgogCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCBzdWJzdWJtb2QgJiYKIAkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCmRpZmYgLS1naXQgYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCmluZGV4IGQ1MGUxNjUuLjEyZWUzMjEgMTAwNzU1Ci0tLSBhL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCisrKyBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCkBAIC0yMyw2ICsyMywxNyBAQAogCXRlc3RfY21wICIkMS5maWx0ZXJlZCIgIiQyLmZpbHRlcmVkIgogfQogCisjIFRoaXMgZnVuY3Rpb24gdXNlcyBhIHRyaWNrIHRvIG1hbmlwdWxhdGUgdGhlIGludGVyYWN0aXZlIGFkZCB0byB1c2UgY29sb3I6CisjIHRoZSBgd2FudF9jb2xvcigpYCBmdW5jdGlvbiBzcGVjaWFsLWNhc2VzIHRoZSBzaXR1YXRpb24gd2hlcmUgYSBwYWdlciB3YXMKKyMgc3Bhd25lZCBhbmQgR2l0IG5vdyB3YW50cyB0byBvdXRwdXQgY29sb3JlZCB0ZXh0OiB0byBkZXRlY3QgdGhhdCBzaXR1YXRpb24sCisjIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX1BBR0VSX0lOX1VTRWAgaXMgc2V0LiBIb3dldmVyLCBjb2xvciBpcworIyBzdXBwcmVzc2VkIGRlc3BpdGUgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB0aGUgYFRFUk1gIHZhcmlhYmxlCisjIGluZGljYXRlcyBhIGR1bWIgdGVybWluYWwsIHNvIHdlIHNldCB0aGF0IHZhcmlhYmxlLCB0b28uCisKK2ZvcmNlX2NvbG9yICgpIHsKKwllbnYgR0lUX1BBR0VSX0lOX1VTRT10cnVlIFRFUk09dnQxMDAgIiRAIgorfQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAoaW5pdGlhbCknICcKIAllY2hvIGNvbnRlbnQgPmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTk0LDcgKzEwNSw2IEBACiAJZ3JlcCAidW5jaGFuZ2VkICorMy8tMCBmaWxlIiBvdXRwdXQKICcKIAotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJwogCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgogCUVPRgpAQCAtMjYzLDYgKzI3MywzNSBAQAogCiAjIGVuZCBvZiB0ZXN0cyBkaXNhYmxlZCB3aGVuIGZpbGVtb2RlIGlzIG5vdCB1c2FibGUKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZmVyZW50IHByb21wdHMgZm9yIG1vZGUgY2hhbmdlL2RlbGV0ZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPmZpbGUgJiYKKwk+ZGVsZXRlZCAmJgorCWdpdCBhZGQgLS1jaG1vZD0reCBmaWxlIGRlbGV0ZWQgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwlybSBkZWxldGVkICYmCisJdGVzdF93cml0ZV9saW5lcyBuIG4gbiB8CisJZ2l0IC1jIGNvcmUuZmlsZW1vZGU9dHJ1ZSBhZGQgLXAgPmFjdHVhbCAmJgorCXNlZCAtbiAicy9eXCgoWzAtOS9dKikgU3RhZ2UgLio/XCkuKi9cMS9wIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkoMS8xKSBTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkLD9dPworCSgxLzIpIFN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQsaixKLGcsLyw/XT8KKwkoMi8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxLLGcsLyxlLD9dPworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBtZXNzYWdlIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkbycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYWRkIC1wIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiTm8gY2hhbmdlcyIgZXJyICYmCisJcHJpbnRmICJcXDAxMjMiID5iaW5hcnkgJiYKKwlnaXQgYWRkIGJpbmFyeSAmJgorCXByaW50ZiAiXFwwYWJjIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCAtcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQiIGVycgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhZ2FpbicgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAl0ZXN0X2NobW9kICt4IGZpbGUgJiYKQEAgLTM3NCw2ICs0MTMsMzYgQEAKIAl0ZXN0X3dyaXRlX2xpbmVzIDEwIDE1IDIwIDIxIDIyIDIzIDI0IDMwIDQwIDUwIDYwID50ZXN0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvdG8gaHVuaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IiAmJgorCXRyIF8gIiAiID5leHBlY3QgPDwtRU9GICYmCisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8gKyAxOiAgLTEsMiArMSwzICAgICAgICAgICsxNQorCV8gMjogIC0yLDQgKzMsOCAgICAgICAgICArMjEKKwlnbyB0byB3aGljaCBodW5rPyBAQCAtMSwyICsxLDMgQEAKKwlfMTAKKwkrMTUKKwlfMjAKKwkoMS8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxqLEosZywvLGUsP10/XworCUVPRgorCXRlc3Rfd3JpdGVfbGluZXMgcyB5IGcgMSB8IGdpdCBhZGQgLXAgPmFjdHVhbCAmJgorCXRhaWwgLW4gNyA8YWN0dWFsID5hY3R1YWwudHJpbW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwudHJpbW1lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYXZpZ2F0ZSB0byBodW5rIHZpYSByZWdleCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IiAmJgorCXRyIF8gIiAiID5leHBlY3QgPDwtRU9GICYmCisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8gQEAgLTEsMiArMSwzIEBACisJXzEwCisJKzE1CisJXzIwCisJKDEvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsaixKLGcsLyxlLD9dP18KKwlFT0YKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgeSAvMSwyIHwgZ2l0IGFkZCAtcCA+YWN0dWFsICYmCisJdGFpbCAtbiA1IDxhY3R1YWwgPmFjdHVhbC50cmltbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC50cmltbWVkCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGh1bmsgImFkZCAtcCAoZWRpdCkiJyAnCiAJIyBTcGxpdCwgc2F5IEVkaXQgYW5kIGRvIG5vdGhpbmcuICBUaGVuOgogCSMKQEAgLTQwMyw2ICs0NzIsNDAgQEAKIAkhIGdyZXAgIl4rMzEiIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBodW5rIHdpdGggaW5jb21wbGV0ZSBsaW5lIGF0IGVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlwcmludGYgIm1pc3NpbmcgTEYiID4+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYmVmb3JlIDEwIDIwIDMwIDQwIDUwIDYwIDcwID50ZXN0ICYmCisJZ2l0IGdyZXAgLS1jYWNoZWQgbWlzc2luZyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyBuIHkgcSB8IGdpdCBhZGQgLXAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLWNhY2hlZCBtaXNzaW5nICYmCisJZ2l0IGdyZXAgYmVmb3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1jYWNoZWQgYmVmb3JlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2VkaXQsIGFkZGluZyBsaW5lcyB0byB0aGUgZmlyc3QgaHVuaycgJworCXRlc3Rfd3JpdGVfbGluZXMgMTAgMTEgMjAgMzAgNDAgNTAgNTEgNjAgPnRlc3QgJiYKKwlnaXQgcmVzZXQgJiYKKwl0ciBfICIgIiA+cGF0Y2ggPDwtRU9GICYmCisJQEAgLTEsNSArMSw2IEBACisJXzEwCisJKzExCisJKzEyCisJXzIwCisJKzIxCisJKzIyCisJXzMwCisJRU9GCisJIyB0ZXN0IHNlcXVlbmNlIGlzIHMocGxpdCksIGUoZGl0KSwgbihvKQorCSMgcSBuIHEgcSBpcyB0aGVyZSB0byBtYWtlIHN1cmUgd2UgZXhpdCBhdCB0aGUgZW5kLgorCXByaW50ZiAiJXNcbiIgcyBlIG4gICBxIG4gcSBxIHwKKwlFRElUT1I9Li9mYWtlX2VkaXRvci5zaCBnaXQgYWRkIC1wIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJZ3JlcCAiXisyMiIgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIG1vZGUgaWdub3JlcyB1bm1lcmdlZCBlbnRyaWVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCXRlc3RfY29tbWl0IGNvbmZsaWN0ICYmCkBAIC00MjksMzUgKzUzMiw0OCBAQAogCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2RpZmZzIGNhbiBiZSBjb2xvcml6ZWQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZzIGNhbiBiZSBjb2xvcml6ZWQnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAKIAllY2hvIGNvbnRlbnQgPnRlc3QgJiYKLQlwcmludGYgeSB8IHRlc3RfdGVybWluYWwgZ2l0IGFkZCAtcCA+b3V0cHV0IDI+JjEgJiYKKwlwcmludGYgeSA+eSAmJgorCWZvcmNlX2NvbG9yIGdpdCBhZGQgLXAgPm91dHB1dCAyPiYxIDx5ICYmCiAKIAkjIFdlIGRvIG5vdCB3YW50IHRvIGRlcGVuZCBvbiB0aGUgZXhhY3QgY29sb3Jpbmcgc2NoZW1lCiAJIyBnaXQgdXNlcyBmb3IgZGlmZnMsIHNvIGp1c3QgY2hlY2sgdGhhdCB3ZSBzYXcgc29tZSBraW5kIG9mIGNvbG9yLgogCWdyZXAgIiQocHJpbnRmICJcXDAzMyIpIiBvdXRwdXQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2RpZmZGaWx0ZXIgZmlsdGVycyBkaWZmJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmRmlsdGVyIGZpbHRlcnMgZGlmZicgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAogCWVjaG8gY29udGVudCA+dGVzdCAmJgogCXRlc3RfY29uZmlnIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIgInNlZCBzL14vZm9vOi8iICYmCi0JcHJpbnRmIHkgfCB0ZXN0X3Rlcm1pbmFsIGdpdCBhZGQgLXAgPm91dHB1dCAyPiYxICYmCisJcHJpbnRmIHkgPnkgJiYKKwlmb3JjZV9jb2xvciBnaXQgYWRkIC1wID5vdXRwdXQgMj4mMSA8eSAmJgogCiAJIyBhdm9pZCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IGNvbG9yaW5nIG9yIGNvbnRlbnQgb2YgdGhlIHByb21wdHMsCiAJIyBhbmQganVzdCBtYWtlIHN1cmUgd2Ugc2F3IG91ciBkaWZmIHByZWZpeGVkCiAJZ3JlcCBmb286Lipjb250ZW50IG91dHB1dAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZGV0ZWN0IGJvZ3VzIGRpZmZGaWx0ZXIgb3V0cHV0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYm9ndXMgZGlmZkZpbHRlciBvdXRwdXQnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAKIAllY2hvIGNvbnRlbnQgPnRlc3QgJiYKIAl0ZXN0X2NvbmZpZyBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyICJlY2hvIHRvby1zaG9ydCIgJiYKLQlwcmludGYgeSB8IHRlc3RfbXVzdF9mYWlsIHRlc3RfdGVybWluYWwgZ2l0IGFkZCAtcAorCXByaW50ZiB5ID55ICYmCisJdGVzdF9tdXN0X2ZhaWwgZm9yY2VfY29sb3IgZ2l0IGFkZCAtcCA8eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmFsZ29yaXRobSBpcyBwYXNzZWQgdG8gYGdpdCBkaWZmLWZpbGVzYCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYuYWxnb3JpdGhtPWJvZ3VzIGFkZCAtcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yOiBvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyAiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1tb2RlIHZpYSAtaSBwcm9tcHRzIGZvciBmaWxlcycgJwpAQCAtNjQ3LDQgKzc2MywyOSBAQAogCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGEgYiBhIGEgYiBhIGIgYSA+ZXhwZWN0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IGEKICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBoZWxwIGZyb20gYWRkLS1oZWxwZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisKKwk8Qk9MRD4qKiogQ29tbWFuZHMgKioqPFJFU0VUPgorCSAgMTogPEJPTEQ7QkxVRT5zPFJFU0VUPnRhdHVzCSAgMjogPEJPTEQ7QkxVRT51PFJFU0VUPnBkYXRlCSAgMzogPEJPTEQ7QkxVRT5yPFJFU0VUPmV2ZXJ0CSAgNDogPEJPTEQ7QkxVRT5hPFJFU0VUPmRkIHVudHJhY2tlZAorCSAgNTogPEJPTEQ7QkxVRT5wPFJFU0VUPmF0Y2gJICA2OiA8Qk9MRDtCTFVFPmQ8UkVTRVQ+aWZmCSAgNzogPEJPTEQ7QkxVRT5xPFJFU0VUPnVpdAkgIDg6IDxCT0xEO0JMVUU+aDxSRVNFVD5lbHAKKwk8Qk9MRDtCTFVFPldoYXQgbm93PFJFU0VUPj4gPEJPTEQ7UkVEPnN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlczxSRVNFVD4KKwk8Qk9MRDtSRUQ+dXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlczxSRVNFVD4KKwk8Qk9MRDtSRUQ+cmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uPFJFU0VUPgorCTxCT0xEO1JFRD5wYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5PFJFU0VUPgorCTxCT0xEO1JFRD5kaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXg8UkVTRVQ+CisJPEJPTEQ7UkVEPmFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXM8UkVTRVQ+CisJPEJPTEQ+KioqIENvbW1hbmRzICoqKjxSRVNFVD4KKwkgIDE6IDxCT0xEO0JMVUU+czxSRVNFVD50YXR1cwkgIDI6IDxCT0xEO0JMVUU+dTxSRVNFVD5wZGF0ZQkgIDM6IDxCT0xEO0JMVUU+cjxSRVNFVD5ldmVydAkgIDQ6IDxCT0xEO0JMVUU+YTxSRVNFVD5kZCB1bnRyYWNrZWQKKwkgIDU6IDxCT0xEO0JMVUU+cDxSRVNFVD5hdGNoCSAgNjogPEJPTEQ7QkxVRT5kPFJFU0VUPmlmZgkgIDc6IDxCT0xEO0JMVUU+cTxSRVNFVD51aXQJICA4OiA8Qk9MRDtCTFVFPmg8UkVTRVQ+ZWxwCisJPEJPTEQ7QkxVRT5XaGF0IG5vdzxSRVNFVD4+JFNQCisJQnllLgorCUVPRgorCXRlc3Rfd3JpdGVfbGluZXMgaCB8IGZvcmNlX2NvbG9yIGdpdCBhZGQgLWkgPmFjdHVhbC5jb2xvcmVkICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5jb2xvcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDQtYWRkLXBhdGhzcGVjLWZpbGUuc2ggYi90L3QzNzA0LWFkZC1wYXRoc3BlYy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjZmRiNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzA0LWFkZC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpbGUwICYmCisJZWNobyBBID5maWxlQS50ICYmCisJZWNobyBCID5maWxlQi50ICYmCisJZWNobyBDID5maWxlQy50ICYmCisJZWNobyBEID5maWxlRC50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9bm8gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1wYXRoc3BlYy1maWxlLW51bCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlBICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJQSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUEudAorCUEgIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlBICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiXCJmaWxlXFwxMDEudFwiIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBub3QgY29tcGF0aWJsZSB3aXRoIC0tcGF0aHNwZWMtZmlsZS1udWwnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiXCJmaWxlXFwxMDEudFwiIiA+bGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXBhdGhzcGVjLWZpbGUtbnVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVCLnQKKwlBICBmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDAtaTE4bi1jb21taXQuc2ggYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCmluZGV4IGI5MmZmOTUuLmQyNzdhOWYgMTAwNzU1Ci0tLSBhL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKKysrIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaApAQCAtMjA0LDQgKzIwNCw0MSBAQAogCiB0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX2ZsYWdzIElTTy0yMDIyLUpQIHNxdWFzaAogCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nICgpIHsKKwlmbGFnPSQxCisJb2xkPSQyCisJbmV3PSQzCisJbXNnPSQ0CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IC0tJGZsYWcgaW50byAkb2xkIGZyb20gJG5ldyIgJworCQlnaXQgY2hlY2tvdXQgLWIgJGZsYWctJG9sZC0kbmV3IEMwICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkb2xkICYmCisJCWVjaG8gJG9sZCA+PkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kbXNnICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvIGludGVybWVkaWF0ZSBzdHVmZiA+PkcgJiYKKwkJZ2l0IGFkZCBHICYmCisJCWdpdCBjb21taXQgLWEgLW0gImludGVybWVkaWF0ZSBjb21taXQiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG5ldyAmJgorCQllY2hvICRuZXctJGZsYWcgPj5GICYmCisJCWdpdCBjb21taXQgLWEgLS0kZmxhZyBIRUFEXiAmJgorCQlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJCWdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwkJaWNvbnYgLWYgJG9sZCAtdCBVVEYtOCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kbXNnID5leHBlY3QgJiYKKwkJaWYgdGVzdCAkZmxhZyA9IHNxdWFzaDsgdGhlbgorCQkJc3ViamVjdD0iJChoZWFkIC0xIGV4cGVjdCkiICYmCisJCQlwcmludGYgIlxuc3F1YXNoISAlc1xuIiAiJHN1YmplY3QiID4+ZXhwZWN0CisJCWZpICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPnJhdyAmJgorCQkoc2VkICIxLC9eJC9kIiByYXcgfCBpY29udiAtZiAkbmV3IC10IHV0Zi04KSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCit9CisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2RpbmcgZml4dXAgVVRGLTggSVNPLTg4NTktMSAxLVVURi04LnR4dAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBzcXVhc2ggSVNPLTg4NTktMSBVVEYtOCBJU084ODU5LTEudHh0Cit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIHNxdWFzaCBldWNKUCBJU08tMjAyMi1KUCBldWNKUC50eHQKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2RpbmcgZml4dXAgSVNPLTIwMjItSlAgVVRGLTggSVNPLTIwMjItSlAudHh0CisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMy1zdGFzaC5zaCBiL3QvdDM5MDMtc3Rhc2guc2gKaW5kZXggNTgwYmZiZC4uZWE1NmU4NSAxMDA3NTUKLS0tIGEvdC90MzkwMy1zdGFzaC5zaAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC0yNDQsOCArMjQ0LDExIEBACiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIGlzIHF1aWV0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3AgLXEgd29ya3MgYW5kIGlzIHF1aWV0JyAnCiAJZ2l0IHN0YXNoIHBvcCAtcSA+b3V0cHV0Lm91dCAyPiYxICYmCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCBzaG93IDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIApAQCAtMjU0LDYgKzI1Nyw4IEBACiAJZ2l0IGFkZCBmaWxlICYmCiAJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCAmJgogCWdpdCBzdGFzaCBwb3AgLXEgLS1pbmRleCA+b3V0cHV0Lm91dCAyPiYxICYmCisJZ2l0IGRpZmYtZmlsZXMgZmlsZTIgPmZpbGUyLmRpZmYgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZmlsZTIuZGlmZiAmJgogCXRlc3QgZm9vID0gIiQoZ2l0IHNob3cgOmZpbGUpIiAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CiAnCkBAIC0xMjY5LDQgKzEyNzQsMTUgQEAKIAlnaXQgc3Rhc2ggYXBwbHkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggaGFuZGxlcyBza2lwLXdvcmt0cmVlIGVudHJpZXMgbmljZWx5JyAnCisJdGVzdF9jb21taXQgQSAmJgorCWVjaG8gY2hhbmdlZCA+QS50ICYmCisJZ2l0IGFkZCBBLnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBBLnQgJiYKKwlybSBBLnQgJiYKKwlnaXQgc3Rhc2ggJiYKKworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9zdGFzaDpBLnQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoIGIvdC90MzkwNS1zdGFzaC1pbmNsdWRlLXVudHJhY2tlZC5zaAppbmRleCAyOWNhNzZmLi5mMDc1YzdmIDEwMDc1NQotLS0gYS90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCisrKyBiL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2gKQEAgLTI3Nyw4ICsyNzcsOCBAQAogCXRlc3RfcGF0aF9pc19maWxlIGlnbm9yZWQuZC9iYXIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgLS0gPG5vbi1leGlzdGFudD4gc2hvd3Mgbm8gY2hhbmdlcyB3aGVuIHRoZXJlIGFyZSBub25lJyAnCi0JZ2l0IHN0YXNoIHB1c2ggLXUgLS0gbm9uLWV4aXN0YW50ID5hY3R1YWwgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC11IC0tIDxub24tZXhpc3RlbnQ+IHNob3dzIG5vIGNoYW5nZXMgd2hlbiB0aGVyZSBhcmUgbm9uZScgJworCWdpdCBzdGFzaCBwdXNoIC11IC0tIG5vbi1leGlzdGVudCA+YWN0dWFsICYmCiAJZWNobyAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIiA+ZXhwZWN0ICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKZGlmZiAtLWdpdCBhL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaCBiL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaAppbmRleCAyODFmOGZhLi5lNWNhMzU5IDEwMDc1NQotLS0gYS90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKKysrIGIvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoCkBAIC0xNywxMSArMTcsMTUgQEAKICAgICAnZWNobyBmcm90eiA+ZmlsZTAgJiYKICAgICAgbWtkaXIgcGF0aDEgJiYKICAgICAgZWNobyByZXpyb3YgPnBhdGgxL2ZpbGUxICYmCisgICAgIGJlZm9yZTA9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisgICAgIGJlZm9yZTE9JChnaXQgaGFzaC1vYmplY3QgcGF0aDEvZmlsZTEpICYmCiAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTAgcGF0aDEvZmlsZTEgJiYKICAgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgogICAgICBlY2hvICIkdHJlZSIgJiYKICAgICAgZWNobyBuaXRmb2wgPmZpbGUwICYmCiAgICAgIGVjaG8geW9taW4gPnBhdGgxL2ZpbGUxICYmCisgICAgIGFmdGVyMD0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMCkgJiYKKyAgICAgYWZ0ZXIxPSQoZ2l0IGhhc2gtb2JqZWN0IHBhdGgxL2ZpbGUxKSAmJgogICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIHBhdGgxL2ZpbGUxJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgpAQCAtMzEsMzIgKzM1LDMyIEBACiAgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGggPmN1cnJlbnQgJiYKICAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotOjEwMDY0NCAxMDA2NDQgNzY2NDk4ZDkzYTRiMDYwNTdhOGU0OWQyM2Y0MDY4ZjExNzBmZjM4ZiAwYTQxZTExNWFiNjFiZTAzMjhhMTliMjlmMThjZGNiNDkzMzhkNTE2IE0JcGF0aDEvZmlsZTEKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRiZWZvcmUxICRhZnRlcjEgTQlwYXRoMS9maWxlMQogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbGltaXQgdG8gcGF0aDEgc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKICAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gcGF0aDEgPmN1cnJlbnQgJiYKICAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotOjEwMDY0NCAxMDA2NDQgNzY2NDk4ZDkzYTRiMDYwNTdhOGU0OWQyM2Y0MDY4ZjExNzBmZjM4ZiAwYTQxZTExNWFiNjFiZTAzMjhhMTliMjlmMThjZGNiNDkzMzhkNTE2IE0JcGF0aDEvZmlsZTEKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRiZWZvcmUxICRhZnRlcjEgTQlwYXRoMS9maWxlMQogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbGltaXQgdG8gcGF0aDEvIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCiAgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGgxLyA+Y3VycmVudCAmJgogICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi06MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlwYXRoMS9maWxlMQorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTEgJGFmdGVyMSBNCXBhdGgxL2ZpbGUxCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICciKmZpbGUxIiBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAogICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSAiKmZpbGUxIiA+Y3VycmVudCAmJgogICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi06MTAwNjQ0IDEwMDY0NCA4ZTQwMjBiYjVhOGQ4Yzg3M2IyNWRlMTU5MzNlNzVjYzBmYzI3NWRmIGRjYTZiOTIzMDNiZWZjOTMwODZhYTAyNWQ5MGE1ZmFjZDdlYjI4MTIgTQlmaWxlMAorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTAgJGFmdGVyMCBNCWZpbGUwCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdsaW1pdCB0byBmaWxlMCBzaG91bGQgc2hvdyBmaWxlMCcgXApkaWZmIC0tZ2l0IGEvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2ggYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaAppbmRleCA1YWUxOWI5Li43MTcwMzRiIDEwMDc1NQotLS0gYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaAorKysgYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaApAQCAtOSwxMSArOSwyNCBAQAogLiAuL3Rlc3QtbGliLnNoCiAuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCiAKKyMgUHJpbnQgdGhlIHNob3J0IE9JRCBvZiBhIHN5bWxpbmsgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KK3N5bWxpbmtfb2lkICgpIHsKKwlsb2NhbCBvaWQ9JChwcmludGYgIiVzIiAiJDEiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2lkIgorfQorCisjIFByaW50IHRoZSBzaG9ydCBPSUQgb2YgdGhlIGdpdmVuIGZpbGUuCitzaG9ydF9vaWQgKCkgeworCWxvY2FsIG9pZD0kKGdpdCBoYXNoLW9iamVjdCAiJDEiKSAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9pZCIKK30KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBuZXcgc3ltbGluayBhbmQgZmlsZScgJwotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXN5bWxpbms9JChzeW1saW5rX29pZCB4eXp6eSkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CiAJbmV3IGZpbGUgbW9kZSAxMjAwMDAKLQlpbmRleCAwMDAwMDAwLi43YzQ2NWFmCisJaW5kZXggMDAwMDAwMC4uJHN5bWxpbmsKIAktLS0gL2Rldi9udWxsCiAJKysrIGIvZnJvdHoKIAlAQCAtMCwwICsxIEBACkBAIC0yMSw3ICszNCw3IEBACiAJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCiAJZGlmZiAtLWdpdCBhL25pdGZvbCBiL25pdGZvbAogCW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0JaW5kZXggMDAwMDAwMC4uN2M0NjVhZgorCWluZGV4IDAwMDAwMDAuLiRzeW1saW5rCiAJLS0tIC9kZXYvbnVsbAogCSsrKyBiL25pdGZvbAogCUBAIC0wLDAgKzEgQEAKQEAgLTQ2LDEwICs1OSwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHJlbW92ZWQgc3ltbGluayBhbmQgZmlsZScgJwotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKIAlkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKLQlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJaW5kZXggJHN5bWxpbmsuLjAwMDAwMDAKIAktLS0gYS9mcm90egogCSsrKyAvZGV2L251bGwKIAlAQCAtMSArMCwwIEBACkBAIC01Nyw3ICs3MCw3IEBACiAJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCiAJZGlmZiAtLWdpdCBhL25pdGZvbCBiL25pdGZvbAogCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotCWluZGV4IDdjNDY1YWYuLjAwMDAwMDAKKwlpbmRleCAkc3ltbGluay4uMDAwMDAwMAogCS0tLSBhL25pdGZvbAogCSsrKyAvZGV2L251bGwKIAlAQCAtMSArMCwwIEBACkBAIC05MCw5ICsxMDMsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkaWZmZXJlbnQgc3ltbGluayBhbmQgZmlsZScgJwotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW5ldz0kKHN5bWxpbmtfb2lkIHl4eXl6KSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKLQlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEyMDAwMAorCWluZGV4ICRzeW1saW5rLi4kbmV3IDEyMDAwMAogCS0tLSBhL2Zyb3R6CiAJKysrIGIvZnJvdHoKIAlAQCAtMSArMSBAQApAQCAtMTAxLDcgKzExNSw3IEBACiAJK3l4eXl6CiAJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCiAJZGlmZiAtLWdpdCBhL25pdGZvbCBiL25pdGZvbAotCWluZGV4IDdjNDY1YWYuLmRmMWRiNTQgMTAwNjQ0CisJaW5kZXggJHN5bWxpbmsuLiRuZXcgMTAwNjQ0CiAJLS0tIGEvbml0Zm9sCiAJKysrIGIvbml0Zm9sCiAJQEAgLTEgKzEgQEAKQEAgLTEzNywxNCArMTUxLDE2IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmtzIGRvIG5vdCByZXNwZWN0IHVzZXJkaWZmIGNvbmZpZyBieSBwYXRoJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU9JChzaG9ydF9vaWQgZmlsZS5iaW4pICYmCisJbGluaz0kKHN5bWxpbmtfb2lkIGZpbGUuYmluKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCWRpZmYgLS1naXQgYS9maWxlLmJpbiBiL2ZpbGUuYmluCiAJbmV3IGZpbGUgbW9kZSAxMDA2NDQKLQlpbmRleCAwMDAwMDAwLi5kOTVmM2FkCisJaW5kZXggMDAwMDAwMC4uJGZpbGUKIAlCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL2ZpbGUuYmluIGRpZmZlcgogCWRpZmYgLS1naXQgYS9saW5rLmJpbiBiL2xpbmsuYmluCiAJbmV3IGZpbGUgbW9kZSAxMjAwMDAKLQlpbmRleCAwMDAwMDAwLi5kY2U0MWVjCisJaW5kZXggMDAwMDAwMC4uJGxpbmsKIAktLS0gL2Rldi9udWxsCiAJKysrIGIvbGluay5iaW4KIAlAQCAtMCwwICsxIEBACmRpZmYgLS1naXQgYS90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaCBiL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoCmluZGV4IGI4OTY5OTkuLmI2NTNkZDcgMTAwNzU1Ci0tLSBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoCisrKyBiL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoCkBAIC03OTMsNiArNzkzLDM4IEBACiAJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3aXRoIG11bHRpcGxlIG5vdGVzIHJlZnMgaW4gY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X3VuY29uZmlnIGZvcm1hdC5ub3RlcyIgJiYKKworCWdpdCBub3RlcyAtLXJlZiBub3RlMSBhZGQgLW0gInRoaXMgaXMgbm90ZSAxIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZiBub3RlMSByZW1vdmUgSEVBRCAmJgorCWdpdCBub3RlcyAtLXJlZiBub3RlMiBhZGQgLW0gInRoaXMgaXMgbm90ZSAyIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZiBub3RlMiByZW1vdmUgSEVBRCAmJgorCisJZ2l0IGNvbmZpZyBmb3JtYXQubm90ZXMgbm90ZTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGNvbmZpZyBmb3JtYXQubm90ZXMgbm90ZTIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQubm90ZXMgbm90ZTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5ub3RlcyBub3RlMSAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0Lm5vdGVzIGZhbHNlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQubm90ZXMgbm90ZTIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0CisnCisKIGVjaG8gImZhdGFsOiAtLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIiA+ZXhwZWN0Lm5hbWUtb25seQogZWNobyAiZmF0YWw6IC0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIgPmV4cGVjdC5uYW1lLXN0YXR1cwogZWNobyAiZmF0YWw6IC0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIgPmV4cGVjdC5jaGVjawpAQCAtMTUxNyw2ICsxNTQ5LDE3OCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggaW52YWxpZCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYW5kIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZ2FyYmFnZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IGRlZmF1bHQnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBkZWZhdWx0ICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZGVmYXVsdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gbm9uZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gbm9uZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG5vbmUgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gbWVzc2FnZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG1lc3NhZ2UgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG1lc3NhZ2UnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBtZXNzYWdlIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBzdWJqZWN0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gc3ViamVjdCAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBzdWJqZWN0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBhdXRvIChzaG9ydCBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gYXV0byAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIChzaG9ydCBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBhdXRvIChsb25nIHN1YmplY3QgbGluZSknICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJ0aGlzIGlzIGEgcmVhbGx5IGxvbmcgZmlyc3QgbGluZSBhbmQgaXQgaXMgb3ZlciAxMDAgY2hhcmFjdGVycyBsb25nIHdoaWNoIGlzIHRoZSB0aHJlc2hvbGQgZm9yIGxvbmcgc3ViamVjdHMKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gYXV0byAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJedGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzJCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGF1dG8gKGxvbmcgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gInRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cworCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJedGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzJCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggY29tbWFuZC1saW5lIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBvdmVycmlkZXMgY29uZmlnJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gbm9uZSAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBzdWJqZWN0IG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB1c2luZyBicmFuY2ggZGVzY3JpcHRpb24gKDEpJyAnCiAJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gaGVsbG8gJiYKQEAgLTE3NjcsMTAgKzE5NzEsOSBAQAogCXRlc3RfbXVzdF9mYWlsIAlnaXQgZm9ybWF0LXBhdGNoIC0tYmFzZT1hdXRvIC0xCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBmb3JtYXQudXNlQXV0b0Jhc2VvcHRpb24nICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBmb3JtYXQudXNlQXV0b0Jhc2UiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZm9ybWF0LnVzZUF1dG9CYXNlIG9wdGlvbicgJwogCWdpdCBjaGVja291dCBsb2NhbCAmJgotCWdpdCBjb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudXNlQXV0b0Jhc2UgdHJ1ZSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCiAJZ3JlcCAiXmJhc2UtY29tbWl0OiIgcGF0Y2ggPmFjdHVhbCAmJgogCWdpdCByZXYtcGFyc2UgdXBzdHJlYW0gPmNvbW1pdC1pZC1iYXNlICYmCkBAIC0xNzc5LDggKzE5ODIsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlIG92ZXJyaWRlcyBmb3JtYXQudXNlQXV0b0Jhc2UnICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBmb3JtYXQudXNlQXV0b0Jhc2UiICYmCi0JZ2l0IGNvbmZpZyBmb3JtYXQudXNlQXV0b0Jhc2UgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC51c2VBdXRvQmFzZSB0cnVlICYmCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWJhc2U9SEVBRH4xIC0xID5wYXRjaCAmJgogCWdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoID5hY3R1YWwgJiYKIAlnaXQgcmV2LXBhcnNlIEhFQUR+MSA+Y29tbWl0LWlkLWJhc2UgJiYKQEAgLTE3ODgsNiArMTk5MCwxMiBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbm8tYmFzZSBvdmVycmlkZXMgZm9ybWF0LnVzZUF1dG9CYXNlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tYmFzZSAtMSA+cGF0Y2ggJiYKKwkhIGdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWJhc2Ugd2l0aCAtLWF0dGFjaCcgJwogCWdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2g9bWltZW1pbWUgLS1zdGRvdXQgLS1iYXNlPUhFQUR+IC0xID5wYXRjaCAmJgogCXNlZCAtbiAtZSAiL15iYXNlLWNvbW1pdDovcy8uKi8xL3AiIC1lICIvXi0tLSptaW1lbWltZS0tJC9zLy4qLzIvcCIgXApkaWZmIC0tZ2l0IGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2ggYi90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaAppbmRleCA2YjA4N2RmLi44OGQzMDI2IDEwMDc1NQotLS0gYS90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaAorKysgYi90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaApAQCAtMTYsNiArMTYsOCBAQAogCX0gd2hpbGUgKDApOwogCUVPRgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeCAmJgorCW9sZF9oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRfaGFzaF94IikgJiYKIAogCWNhdCA8PC1cRU9GID54ICYmCiAJZG8KQEAgLTI0LDEwICsyNiwxMiBAQAogCX0KIAl3aGlsZSAoMCk7CiAJRU9GCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCiAKLQljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCiAJZGlmZiAtLWdpdCBhL3ggYi94Ci0JaW5kZXggYWRmMzkzNy4uNmVkYzE3MiAxMDA2NDQKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CiAJLS0tIGEveAogCSsrKyBiL3gKIAlAQCAtMSwzICsxLDUgQEAKQEAgLTYxLDYgKzY1LDggQEAKIAlFT0YKIAogCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCW9sZF9oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRfaGFzaF94IikgJiYKIAogCXRyICJfIiAiICIgPDwtXEVPRiA+eCAmJgogCV8Jd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKQEAgLTcwLDEwICs3NiwxMiBAQAogCXVuY2hhbmdlZCBsaW5lCiAJQ1IgYXQgZW5kCiAJRU9GCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCiAKLQl0ciAiUV8iICJcMDE1ICIgPDwtXEVPRiA+ZXhwZWN0ICYmCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCiAJZGlmZiAtLWdpdCBhL3ggYi94Ci0JaW5kZXggZDk5YWYyMy4uMjJkOWY3MyAxMDA2NDQKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CiAJLS0tIGEveAogCSsrKyBiL3gKIAlAQCAtMSw2ICsxLDYgQEAKQEAgLTEwOCw5ICsxMTYsOSBAQAogCWdpdCBkaWZmIC13IC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgogCi0JdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCXRyICJRXyIgIlwwMTUgIiA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4IGQ5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsNiArMSw2IEBACkBAIC0xMzIsOSArMTQwLDkgQEAKIAlnaXQgZGlmZiAtYiAtLWlnbm9yZS1jci1hdC1lb2wgPm91dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKIAotCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwl0ciAiUV8iICJcMDE1ICIgPDwtRU9GID5leHBlY3QgJiYKIAlkaWZmIC0tZ2l0IGEveCBiL3gKLQlpbmRleCBkOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKIAktLS0gYS94CiAJKysrIGIveAogCUBAIC0xLDYgKzEsNiBAQApAQCAtMTU0LDkgKzE2Miw5IEBACiAJZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgogCi0JdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCXRyICJRXyIgIlwwMTUgIiA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4X2Q5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJaW5kZXhfJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsNiArMSw2IEBACkBAIC01MjIsMTMgKzUzMCwxNSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWl4ZWQgc3BhY2VzIGFuZCB0YWJzIGluIGluZGVudCcgJwogCSMgVGhpcyBpcyBpbmRlbnRlZCB3aXRoIFNQIEhUIFNQLgogCWVjaG8gIiAJIGZvbygpOyIgPnggJiYKLQlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+Y2hlY2sgJiYKKwlncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIgY2hlY2sKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWl4ZWQgdGFicyBhbmQgc3BhY2VzIGluIGluZGVudCcgJwogCSMgVGhpcyBpcyBpbmRlbnRlZCB3aXRoIEhUIFNQIEhULgogCWVjaG8gIgkgCWZvbygpOyIgPnggJiYKLQlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+Y2hlY2sgJiYKKwlncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIgY2hlY2sKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCBubyB3aGl0ZXNwYWNlIGVycm9ycycgJwpAQCAtNzQ5LDIwICs3NTksMjMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpbmUgbnVtYmVycyBpbiAtLWNoZWNrIG91dHB1dCBhcmUgY29ycmVjdCcgJwogCWVjaG8gIiIgPnggJiYKIAllY2hvICJmb28oKTsgIiA+PnggJiYKLQlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAieDoyOiIKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrID5jaGVjayAmJgorCWdyZXAgIng6MjoiIGNoZWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMSknICcKIAllY2hvICJmb28oKTsiID54ICYmCiAJZWNobyAiIiA+PnggJiYKLQlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAibmV3IGJsYW5rIGxpbmUiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+Y2hlY2sgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSIgY2hlY2sKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tkaWZmIGRldGVjdHMgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzICgyKScgJwotCXsgZWNobyBhOyBlY2hvIGI7IGVjaG87IGVjaG87IH0gPnggJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYiAiIiAiIiA+eCAmJgogCWdpdCBhZGQgeCAmJgotCXsgZWNobyBhOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyB9ID54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgIm5ldyBibGFuayBsaW5lIgorCXRlc3Rfd3JpdGVfbGluZXMgYSAiIiAiIiAiIiAiIiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUiIGNoZWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBhbGxvd3MgbmV3IGJsYW5rIGxpbmVzJyAnCkBAIC03ODYsMjMgKzc5OSwyNyBAQAogCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKICcKIAotY2F0IDw8RU9GID5leHBlY3QKLWRpZmYgLS1naXQgYS94IGIvegotc2ltaWxhcml0eSBpbmRleCBOVU0lCi1yZW5hbWUgZnJvbSB4Ci1yZW5hbWUgdG8gegotaW5kZXggMzgwYzMyYS4uYTk3Yjc4NSAxMDA2NDQKLUVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1vbmx5IGNoYW5nZXMgcmVwb3J0ZWQgYWNyb3NzIHJlbmFtZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gIiRpJGkkaSRpJGkkaSI7IGRvbmUgPnggJiYKIAlnaXQgYWRkIHggJiYKKwloYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRoYXNoX3giKSAmJgogCWdpdCBjb21taXQgLW0gImJhc2UiICYmCiAJc2VkIC1lICI1cy9eLyAvIiB4ID56ICYmCiAJZ2l0IHJtIHggJiYKIAlnaXQgYWRkIHogJiYKLQlnaXQgZGlmZiAtdyAtTSAtLWNhY2hlZCB8Ci0Jc2VkIC1lICIvXnNpbWlsYXJpdHkgaW5kZXggL3MvWzAtOV1bMC05XSovTlVNLyIgPmFjdHVhbCAmJgorCWhhc2hfej0kKGdpdCBoYXNoLW9iamVjdCB6KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkaGFzaF96IikgJiYKKwlnaXQgZGlmZiAtdyAtTSAtLWNhY2hlZCA+YWN0dWFsLnJhdyAmJgorCXNlZCAtZSAiL15zaW1pbGFyaXR5IGluZGV4IC9zL1swLTldWzAtOV0qL05VTS8iIGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS94IGIvegorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIHgKKwlyZW5hbWUgdG8gegorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKQEAgLTgzNCw3ICs4NTEsOCBAQAogCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCi0JZ2l0IGRpZmYgfCBzZWQgLWUgIjEsL15AQEAvZCIgPmFjdHVhbCAmJgorCWdpdCBkaWZmID5hY3R1YWwucmF3ICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIGFjdHVhbC5yYXcgPmFjdHVhbCAmJgogCSEgZ3JlcCAiXi0iIGFjdHVhbAogCiAnCkBAIC04NTgsMTMgKzg3NiwxOCBAQAogCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGJsYW5rLWF0LWVvbCAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKIAllY2hvICJ0ZXN0IiA+eCAmJgorCW9sZF9oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRfaGFzaF94IikgJiYKIAlnaXQgY29tbWl0IC1tICJpbml0aWFsIiB4ICYmCiAJZWNobyAie05UTn0iIHwgdHIgIk5UIiAiXG5cdCIgPj54ICYmCi0JZ2l0IGRpZmYgLS1jb2xvciB8IHRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCisJZ2l0IGRpZmYgLS1jb2xvciA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IDlkYWVhZmIuLjI4NzRiOTEgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xICsxLDQgQEA8UkVTRVQ+CkBAIC04ODMsMTkgKzkwNiwyMyBAQAogCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIxLiBibGFuay1hdC1lb2wgIgogCX0gPnggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCiAJZ2l0IGNvbW1pdCAtYSAtLWFsbG93LWVtcHR5IC1tIHByZWltYWdlICYmCiAJewogCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIxLiBzdGlsbC1ibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIyLiBhbmQgYSBuZXcgbGluZSAiCiAJfSA+eCAmJgorCW5ld19oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld19oYXNoX3giKSAmJgogCi0JZ2l0IGRpZmYgLS1jb2xvciB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCi0JY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS94PFJFU0VUPgogCTxCT0xEPisrKyBiL3g8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgpAQCAtOTE1LDE2ICs5NDIsMjAgQEAKIAkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMS4gYmxhbmstYXQtZW9sICIKIAl9ID54ICYmCisJb2xkX2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9sZF9oYXNoX3giKSAmJgogCWdpdCBjb21taXQgLWEgLS1hbGxvdy1lbXB0eSAtbSBwcmVpbWFnZSAmJgogCXsKIAkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMS4gc3RpbGwtYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMi4gYW5kIGEgbmV3IGxpbmUgIgogCX0gPnggJiYKKwluZXdfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRuZXdfaGFzaF94IikgJiYKIAotCWNhdCA+ZXhwZWN0LmRlZmF1bHQtb2xkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdC5kZWZhdWx0LW9sZCA8PC1FT0YgJiYKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS94PFJFU0VUPgogCTxCT0xEPisrKyBiL3g8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgpAQCAtOTM0LDkgKzk2NSw5IEBACiAJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjIuIGFuZCBhIG5ldyBsaW5lPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CiAJRU9GCiAKLQljYXQgPmV4cGVjdC5hbGwgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0LmFsbCA8PC1FT0YgJiYKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS94PFJFU0VUPgogCTxCT0xEPisrKyBiL3g8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgpAQCAtOTQ2LDkgKzk3Nyw5IEBACiAJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjIuIGFuZCBhIG5ldyBsaW5lPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CiAJRU9GCiAKLQljYXQgPmV4cGVjdC5ub25lIDw8LVxFT0YKKwljYXQgPmV4cGVjdC5ub25lIDw8LUVPRgogCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KLQk8Qk9MRD5pbmRleCBkMDIzM2EyLi43MDA4ODZlIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CiAJPEJPTEQ+KysrIGIveDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSwyICsxLDMgQEA8UkVTRVQ+CkBAIC05NjIsMzIgKzk5MywzMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0td3MtZXJyb3ItaGlnaGxpZ2h0IG9wdGlvbicgJwogCi0JZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1kZWZhdWx0LG9sZCB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWRlZmF1bHQsb2xkID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5kZWZhdWx0LW9sZCBjdXJyZW50ICYmCiAKLQlnaXQgZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWFsbCB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWFsbCA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3QuYWxsIGN1cnJlbnQgJiYKIAotCWdpdCBkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9bm9uZSB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PW5vbmUgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgY3VycmVudAogCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlmZi53c0Vycm9ySGlnaGxpZ2h0IGNvbmZpZycgJwogCi0JZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1kZWZhdWx0LG9sZCBkaWZmIC0tY29sb3IgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1kZWZhdWx0LG9sZCBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0LmRlZmF1bHQtb2xkIGN1cnJlbnQgJiYKIAotCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9YWxsIGRpZmYgLS1jb2xvciB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PWFsbCBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0LmFsbCBjdXJyZW50ICYmCiAKLQlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PW5vbmUgZGlmZiAtLWNvbG9yIHwKLQl0ZXN0X2RlY29kZV9jb2xvciA+Y3VycmVudCAmJgorCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9bm9uZSBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgY3VycmVudAogCiAnCkBAIC05OTUsMTggKzEwMjYsMTggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiBvdmVycmlkZXMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0JyAnCiAKIAlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PW5vbmUgXAotCQlkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9ZGVmYXVsdCxvbGQgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJCWRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1kZWZhdWx0LG9sZCA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3QuZGVmYXVsdC1vbGQgY3VycmVudCAmJgogCiAJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1kZWZhdWx0IFwKLQkJZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWFsbCB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwkJZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWFsbCA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3QuYWxsIGN1cnJlbnQgJiYKIAogCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9YWxsIFwKLQkJZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PW5vbmUgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJCWRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1ub25lID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5ub25lIGN1cnJlbnQKIAogJwpAQCAtMTAyMiwxNCArMTA1MywxNiBAQAogCUVPRgogCWdpdCBhZGQgdGVzdC5jICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkIG1haW4gZnVuY3Rpb24iICYmCisJZmlsZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRlc3QuYykgJiYKIAlnaXQgbXYgdGVzdC5jIG1haW4uYyAmJgogCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWQgIm5vcm1hbCByZWQiICYmCiAJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZCAibm9ybWFsIGdyZWVuIiAmJgotCWdpdCBkaWZmIEhFQUQgLS1jb2xvci1tb3ZlZD16ZWJyYSAtLWNvbG9yIC0tbm8tcmVuYW1lcyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlnaXQgZGlmZiBIRUFEIC0tY29sb3ItbW92ZWQ9emVicmEgLS1jb2xvciAtLW5vLXJlbmFtZXMgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jPFJFU0VUPgogCTxCT0xEPm5ldyBmaWxlIG1vZGUgMTAwNjQ0PFJFU0VUPgotCTxCT0xEPmluZGV4IDAwMDAwMDAuLmE5ODZjNTc8UkVTRVQ+CisJPEJPTEQ+aW5kZXggMDAwMDAwMC4uJGZpbGU8UkVTRVQ+CiAJPEJPTEQ+LS0tIC9kZXYvbnVsbDxSRVNFVD4KIAk8Qk9MRD4rKysgYi9tYWluLmM8UkVTRVQ+CiAJPENZQU4+QEAgLTAsMCArMSw1IEBAPFJFU0VUPgpAQCAtMTA0MCw3ICsxMDczLDcgQEAKIAk8QkdSRUVOPis8UkVTRVQ+PEJHUkVFTj59PFJFU0VUPgogCTxCT0xEPmRpZmYgLS1naXQgYS90ZXN0LmMgYi90ZXN0LmM8UkVTRVQ+CiAJPEJPTEQ+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0PFJFU0VUPgotCTxCT0xEPmluZGV4IGE5ODZjNTcuLjAwMDAwMDA8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGZpbGUuLjAwMDAwMDA8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvdGVzdC5jPFJFU0VUPgogCTxCT0xEPisrKyAvZGV2L251bGw8UkVTRVQ+CiAJPENZQU4+QEAgLTEsNSArMCwwIEBAPFJFU0VUPgpAQCAtMTA5NCw2ICsxMTI3LDggQEAKIAlFT0YKIAlnaXQgYWRkIG1haW4uYyB0ZXN0LmMgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgbWFpbiBhbmQgdGVzdCBmaWxlIiAmJgorCWJlZm9yZV9tYWluPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6bWFpbi5jKSAmJgorCWJlZm9yZV90ZXN0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGVzdC5jKSAmJgogCWNhdCA8PC1cRU9GID5tYWluLmMgJiYKIAkJI2luY2x1ZGU8c3RkaW8uaD4KIAkJaW50IHN0dWZmKCkKQEAgLTExMjYsMTAgKzExNjEsMTUgQEAKIAkJCWJhcigpOwogCQl9CiAJRU9GCi0JZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZD16ZWJyYSAtLWNvbG9yIHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgotCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWhhc2hfbWFpbj0kKGdpdCBoYXNoLW9iamVjdCBtYWluLmMpICYmCisJYWZ0ZXJfbWFpbj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJGhhc2hfbWFpbiIpICYmCisJaGFzaF90ZXN0PSQoZ2l0IGhhc2gtb2JqZWN0IHRlc3QuYykgJiYKKwlhZnRlcl90ZXN0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkaGFzaF90ZXN0IikgJiYKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkPXplYnJhIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jPFJFU0VUPgotCTxCT0xEPmluZGV4IDI3YTYxOWMuLjdjZjkzMzYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmVfbWFpbi4uJGFmdGVyX21haW4gMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL21haW4uYzxSRVNFVD4KIAk8Qk9MRD4rKysgYi9tYWluLmM8UkVTRVQ+CiAJPENZQU4+QEAgLTUsMTMgKzUsNiBAQDxSRVNFVD4gPFJFU0VUPnByaW50ZigiSGVsbG8gIik7PFJFU0VUPgpAQCAtMTE0Nyw3ICsxMTg3LDcgQEAKIAkgezxSRVNFVD4KIAkgZm9vKCk7PFJFU0VUPgogCTxCT0xEPmRpZmYgLS1naXQgYS90ZXN0LmMgYi90ZXN0LmM8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMWRjMWQ4NS4uMmJlZGVjOSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZV90ZXN0Li4kYWZ0ZXJfdGVzdCAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvdGVzdC5jPFJFU0VUPgogCTxCT0xEPisrKyBiL3Rlc3QuYzxSRVNFVD4KIAk8Q1lBTj5AQCAtNCw2ICs0LDEzIEBAPFJFU0VUPiA8UkVTRVQ+aW50IGJhcigpPFJFU0VUPgpAQCAtMTE3NSwxMCArMTIxNSwxMSBAQAogCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWRBbHRlcm5hdGl2ZSAiYmx1ZSIgJiYKIAl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkQWx0ZXJuYXRpdmUgInllbGxvdyIgJiYKIAkjIG5lZWRzIHByZXZpb3VzIHRlc3QgYXMgc2V0dXAKLQlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkPXBsYWluIC0tY29sb3IgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCi0JY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZD1wbGFpbiAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYzxSRVNFVD4KLQk8Qk9MRD5pbmRleCAyN2E2MTljLi43Y2Y5MzM2IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX21haW4uLiRhZnRlcl9tYWluIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS9tYWluLmM8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvbWFpbi5jPFJFU0VUPgogCTxDWUFOPkBAIC01LDEzICs1LDYgQEA8UkVTRVQ+IDxSRVNFVD5wcmludGYoIkhlbGxvICIpOzxSRVNFVD4KQEAgLTExOTYsNyArMTIzNyw3IEBACiAJIHs8UkVTRVQ+CiAJIGZvbygpOzxSRVNFVD4KIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvdGVzdC5jIGIvdGVzdC5jPFJFU0VUPgotCTxCT0xEPmluZGV4IDFkYzFkODUuLjJiZWRlYzkgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmVfdGVzdC4uJGFmdGVyX3Rlc3QgMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL3Rlc3QuYzxSRVNFVD4KIAk8Qk9MRD4rKysgYi90ZXN0LmM8UkVTRVQ+CiAJPENZQU4+QEAgLTQsNiArNCwxMyBAQDxSRVNFVD4gPFJFU0VUPmludCBiYXIoKTxSRVNFVD4KQEAgLTE3NTQsNyArMTc5NSw4IEBACiAJISBncmVwIEJSRUQgZGVjb2RlZF9hY3R1YWwgJiYKIAogCSMgbm9yIGRpZCB3ZSBtZXNzIHdpdGggaXQgYW5vdGhlciB3YXkKLQlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmIC0tY29sb3IgfCB0ZXN0X2RlY29kZV9jb2xvciA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiAtLWNvbG9yID5leHBlY3QucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGV4cGVjdC5yYXcgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBkZWNvZGVkX2FjdHVhbCAmJgogCXJtIC1yZiBiYW5hbmFzICYmCiAJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgYmFuYW5hcwpAQCAtMjAwOCwxMSArMjA1MCw2IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLSMgTm90ZSB0aGF0IHRoZSAiNiIgaW4gdGhlIGV4cGVjdGVkIGh1bmsgaGVhZGVyIGJlbG93IGlzIGZ1bm55LCBzaW5jZSB3ZSBvbmx5Ci0jIHNob3cgNSBsaW5lcyAodGhlIG1pc3Npbmcgb25lIHdhcyBibGFuayBhbmQgdGh1cyBpZ25vcmVkKS4gVGhpcyBpcyBob3cKLSMgLS1pZ25vcmUtYmxhbmstbGluZXMgYmVoYXZlcyBldmVuIHdpdGhvdXQgLS1mdW5jdGlvbi1jb250ZXh0LCBhbmQgdGhpcyB0ZXN0Ci0jIGlzIGp1c3QgY2hlY2tpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZSB0d28gZmVhdHVyZXMuIERvbid0IHRha2UgaXQgYXMgYW4KLSMgZW5kb3JzZW1lbnQgb2YgdGhhdCBvdXRwdXQuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIC0taWdub3JlLWJsYW5rLWxpbmVzIHdpdGggLS1mdW5jdGlvbi1jb250ZXh0JyAnCiAJdGVzdF93cml0ZV9saW5lcyAxICIiIDIgMyA0IDUgPmEgJiYKIAl0ZXN0X3dyaXRlX2xpbmVzIDEgICAgMiAzIDQgICA+YiAmJgpAQCAtMjAyMiw2ICsyMDU5LDcgQEAKIAljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCiAJQEAgLTEsNiArMSw0IEBACiAJIDEKKwktCiAJIDIKIAkgMwogCSA0CkBAIC0yMDMwLDQgKzIwNjgsMjcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgLS1pZ25vcmUtYmxhbmstbGluZXMgd2l0aCAtLWZ1bmN0aW9uLWNvbnRleHQgMicgJworCXRlc3Rfd3JpdGVfbGluZXMgICAgYSBiIGMgIiIgZnVuY3Rpb24gMSAyIDMgNCA1ICIiIDYgNyA4IDkgPmEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICIiIGEgYiBjICIiIGZ1bmN0aW9uIDEgMiAzIDQgNSAgICA2IDcgOCAgID5iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBcCisJCS0taWdub3JlLWJsYW5rLWxpbmVzIC0tZnVuY3Rpb24tY29udGV4dCBhIGIgPmFjdHVhbC5yYXcgJiYKKwlzZWQgLW4gIi9AQC8sXCRwIiA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCUBAIC01LDExICs2LDkgQEAgYworCSBmdW5jdGlvbgorCSAxCisJIDIKKwkgMworCSA0CisJIDUKKwktCisJIDYKKwkgNworCSA4CisJLTkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCmluZGV4IDZmNWVmMDAuLmMwZjQ4MzkgMTAwNzU1Ci0tLSBhL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTMyLDYgKzMyLDcgQEAKIAljc2hhcnAKIAljc3MKIAlkdHMKKwllbGl4aXIKIAlmb3J0cmFuCiAJZm91bnRhaW4KIAlnb2xhbmcKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZCBiL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZG8tbm90LXBpY2stZW5kCkBAIC0wLDAgKzEsNSBAQAorZGVmbW9kdWxlIFJJR0hUIGRvCitlbmQKKyMKKyMKKyMgQ2hhbmdlTWU7IGRvIG5vdCBwaWNrIHVwICdlbmQnIGxpbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdCBiL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZXgtdW5pdC10ZXN0CkBAIC0wLDAgKzEsNiBAQAorZGVmbW9kdWxlIFRlc3QgZG8KKyAgdGVzdCAiUklHSFQiIGRvCisgICAgYXNzZXJ0IHRydWUgPT0gdHJ1ZQorICAgIGFzc2VydCBDaGFuZ2VNZQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDUyZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24KQEAgLTAsMCArMSw1IEBACitkZWYgZnVuY3Rpb24oUklHSFQsIGFyZykgZG8KKyAgIyBjb21tZW50CisgICMgY29tbWVudAorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tYWNybyBiL3QvdDQwMTgvZWxpeGlyLW1hY3JvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tYWNybwpAQCAtMCwwICsxLDUgQEAKK2RlZm1hY3JvIGZvbyhSSUdIVCkgZG8KKyAgIyBDb2RlCisgICMgQ29kZQorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhNGU3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZQpAQCAtMCwwICsxLDkgQEAKK2RlZm1vZHVsZSBSSUdIVCBkbworICBAbW9kdWxlZG9jICIiIgorICBGb28gYmFyCisgICIiIgorCisgIGRlZiBDaGFuZ2VNZShhKSB3aGVyZSBpc19tYXAoYSkgZG8KKyAgICBhCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZS1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTEwZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYwpAQCAtMCwwICsxLDggQEAKK2RlZm1vZHVsZSBGb28gZG8KKyAgZGVmIGZ1bihSSUdIVCkgZG8KKyAgICAgIyBDb2RlCisgICAgICMgQ29kZQorICAgICAjIENvZGUKKyAgICAgQ2hhbmdlTWUKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW5lc3RlZC1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCkBAIC0wLDAgKzEsOSBAQAorZGVmbW9kdWxlIE15QXBwLlJJR0hUIGRvCisgIEBtb2R1bGVkb2MgIiIiCisgIEZvbyBiYXIKKyAgIiIiCisKKyAgZGVmIENoYW5nZU1lKGEpIHdoZXJlIGlzX21hcChhKSBkbworICAgIGEKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByaXZhdGUtZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWJlMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmcCBmdW5jdGlvbihSSUdIVCwgYXJnKSBkbworICAjIGNvbW1lbnQKKyAgIyBjb21tZW50CisgIENoYW5nZU1lCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MTczNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sCkBAIC0wLDAgKzEsNiBAQAorZGVmcHJvdG9jb2wgUklHSFQgZG8KKyAgQGRvYyAiIiIKKyAgQ2FsY3VsYXRlcyB0aGUgc2l6ZSAoYW5kIG5vdCB0aGUgbGVuZ3RoISkgb2YgYSBkYXRhIHN0cnVjdHVyZQorICAiIiIKKyAgZGVmIHNpemUoZGF0YSwgQ2hhbmdlTWUpCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wtaW1wbGVtZW50YXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMzRiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmaW1wbCBSSUdIVCBkbworICAjIERvY3MKKyAgIyBEb2NzCisgIGRlZiBmb28oQ2hhbmdlTWUpLCBkbzogOm9rCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWFzeW5jLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWFzeW5jLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY0MGUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24tYXN5bmMtZGVmCkBAIC0wLDAgKzEsNCBAQAorYXN5bmMgZGVmIFJJR0hUKHBpOiBpbnQgPSAzLjE0KToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIHJldHVybiBDaGFuZ2VNZSgpCmRpZmYgLS1naXQgYS90L3Q0MDE4L3B5dGhvbi1jbGFzcyBiL3QvdDQwMTgvcHl0aG9uLWNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWU3NDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1jbGFzcwpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFJJR0hUKGludCwgc3RyKToKKyAgICAjIGNvbW1lbnQKKyAgICAjIGFub3RoZXIgY29tbWVudAorICAgICMgQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTBiMzFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24tZGVmCkBAIC0wLDAgKzEsNCBAQAorZGVmIFJJR0hUKHBpOiBpbnQgPSAzLjE0KToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIHJldHVybiBDaGFuZ2VNZSgpCmRpZmYgLS1naXQgYS90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1hc3luYy1kZWYgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1hc3luYy1kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMDMyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbzoKKyAgICBhc3luYyBkZWYgUklHSFQoc2VsZiwgeDogaW50KToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAyLAorICAgICAgICAgICAgQ2hhbmdlTWUsCisgICAgICAgIF0KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWNsYXNzIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNGYzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWNsYXNzCkBAIC0wLDAgKzEsNSBAQAoraWYgVFlQRV9DSEVDS0lORzoKKyAgICBjbGFzcyBSSUdIVDoKKyAgICAgICAgIyBjb21tZW50CisgICAgICAgICMgYW5vdGhlciBjb21tZW50CisgICAgICAgICMgQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhmYmFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vOgorICAgIGRlZiBSSUdIVChzZWxmLCB4OiBpbnQpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICBDaGFuZ2VNZSwKKyAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaCBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKaW5kZXggOWFhOGUyYi4uZTI5ZGVhZiAxMDA3NTUKLS0tIGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAorKysgYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCkBAIC02LDYgKzYsNyBAQAogLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJdGVzdF90aWNrICYmCiAJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKIAkoCkBAIC0zNiw3ICszNyw4IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tcmF3IEhFQUQnICcKLQlnaXQgZGlmZiAtLXJhdyAtLWFiYnJldj00MCBIRUFEID5hY3R1YWwgJiYKKwloZXhzej0kKHRlc3Rfb2lkIGhleHN6KSAmJgorCWdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PSRoZXhzeiBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKQEAgLTI0NSwyMyArMjQ3LDIxIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0ZWQgc3VibW9kdWxlIHNldHVwJyAnCi0KLQkjIDM5IGVmcwotCWM9ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmICYmCisJYz0kKHRlc3Rfb2lkIGZmXzEpICYmCiAJKAogCQllY2hvICIwMDAwMDAgJFpFUk9fT0lEIDAJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMSRjIDEJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMiRjIDIJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMyRjIDMJc3ViIgogCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgotCWVjaG8gPmV4cGVjdC5ub3N1YiAnXCcnZGlmZiAtLWNjIHN1YgorCWVjaG8gPmV4cGVjdC5ub3N1YiAiZGlmZiAtLWNjIHN1YgogaW5kZXggMmZmZmZmZiwzZmZmZmZmLi4wMDAwMDAwCiAtLS0gYS9zdWIKICsrKyBiL3N1YgogQEBAIC0xLDEgLTEsMSArMSwxIEBAQAotLSBTdWJwcm9qZWN0IGNvbW1pdCAyZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCi0gLVN1YnByb2plY3QgY29tbWl0IDNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKLSsrU3VicHJvamVjdCBjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcJycgJiYKKy0gU3VicHJvamVjdCBjb21taXQgMiRjCisgLVN1YnByb2plY3QgY29tbWl0IDMkYworKytTdWJwcm9qZWN0IGNvbW1pdCAkWkVST19PSUQiICYmCiAKIAloaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAlzZWQgLWUgInMvJFpFUk9fT0lELyRoaC8iIGV4cGVjdC5ub3N1YiA+ZXhwZWN0LndpdGhzdWIKZGlmZiAtLWdpdCBhL3QvdDQwMzQtZGlmZi13b3Jkcy5zaCBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaAppbmRleCA5YTkzYzJhLi5mYjE0NWFhIDEwMDc1NQotLS0gYS90L3Q0MDM0LWRpZmYtd29yZHMuc2gKKysrIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCkBAIC0xOSw5ICsxOSwxMSBAQAogCiAJYWVmZiA9IGFlZmYgKiAoIGFhYSApCiBFT0YKLWNhdCA+ZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyA8PC1cRU9GCitwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlLnNpbXBsZSkpCitwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3Quc2ltcGxlKSkKK2NhdCA+ZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyA8PC1FT0YKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMzMsOSArMzUsOSBAQAogCiAJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWE8UkVTRVQ+ICkKIEVPRgotY2F0ID5leHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZCA8PC1cRU9GCitjYXQgPmV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIDw8LUVPRgogCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC00OSw5ICs1MSwxMiBAQAogRU9GCiAKIHdvcmRfZGlmZiAoKSB7CisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4ICIkQCIgcHJlIHBvc3QgPm91dHB1dCAmJgogCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPm91dHB1dC5kZWNyeXB0ZWQgJiYKLQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0LmRlY3J5cHRlZAorCXNlZCAtZSAiMnMvaW5kZXggW14gXSovaW5kZXggJHByZS4uJHBvc3QvIiBleHBlY3QgPmV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmRlY3J5cHRlZAogfQogCiB0ZXN0X2xhbmd1YWdlX2RyaXZlciAoKSB7CkBAIC03Nyw5ICs4Miw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRoIHJ1bnMgb2Ygd2hpdGVzcGFjZScgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtOTcsOSArMTAyLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cG9yY2VsYWluJyAnCi0Jc2VkICdzLyMuKiQvLycgPmV4cGVjdCA8PC1cRU9GICYmCisJc2VkICdzLyMuKiQvLycgPmV4cGVjdCA8PC1FT0YgJiYKIAkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQkJaW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQKKwkJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CiAJCS0tLSBhL3ByZQogCQkrKysgYi9wb3N0CiAJCUBAIC0xLDMgKzEsNyBAQApAQCAtMTIxLDkgKzEyNiw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPXBsYWluJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCQlpbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKIAkJLS0tIGEvcHJlCiAJCSsrKyBiL3Bvc3QKIAkJQEAgLTEsMyArMSw3IEBACkBAIC0xNDAsOSArMTQ1LDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cGxhaW4gLS1jb2xvcicgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMTU4LDkgKzE2Myw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRob3V0IGNvbnRleHQnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgpAQCAtMjA3LDkgKzIxMiw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQtbGluZSBvdmVycmlkZXMgY29uZmlnOiAtLXdvcmQtZGlmZi1yZWdleCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMjM0LDkgKzIzOSw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb25maWd1cmVkIHJlZ2V4JyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC0yNTQsOSArMjU5LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHBhcnNpbmcgd29yZHMgZm9yIG5ld2xpbmUnICcKIAllY2hvICJhYWEgKGFhYSkiID5wcmUgJiYKIAllY2hvICJhYWEgKGFhYSkgYWFhIiA+cG9zdCAmJgotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggYzI5NDUzYi4uYmUyMmYzNyAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KQEAgLTI2OCw5ICsyNzUsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgd2hlbiB3b3JkcyBhcmUgb25seSByZW1vdmVkIGF0IHRoZSBlbmQnICcKIAllY2hvICIoOiIgPnByZSAmJgogCWVjaG8gIigiID5wb3N0ICYmCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCAyODljYjlkLi4yZDA2ZjM3IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgpAQCAtMjgyLDkgKzI5MSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9bm9uZScgJwogCWVjaG8gIig6IiA+cHJlICYmCiAJZWNobyAiKCIgPnBvc3QgJiYKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQkJaW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQKKwkJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CiAJCS0tLSBhL3ByZQogCQkrKysgYi9wb3N0CiAJCUBAIC0xICsxIEBACkBAIC0zMTcsMTYgKzMyOCw2IEBACiB0ZXN0X2xhbmd1YWdlX2RyaXZlciB0ZXgKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZC1kaWZmIHdpdGggZGlmZi5zYmUnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCi0JZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQlpbmRleCBhMWE1M2I1Li5iYzhmZTZkIDEwMDY0NAotCS0tLSBhL3ByZQotCSsrKyBiL3Bvc3QKLQlAQCAtMSwzICsxLDMgQEAKLQlhCi0KLQlbLWItXXsrYyt9Ci0JRU9GCiAJY2F0ID5wcmUgPDwtXEVPRiAmJgogCWEKIApAQCAtMzM3LDIxICszMzgsMzUgQEAKIAogCWMKIAlFT0YKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0CisJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CisJLS0tIGEvcHJlCisJKysrIGIvcG9zdAorCUBAIC0xLDMgKzEsMyBAQAorCWEKKworCVstYi1deytjK30KKwlFT0YKIAl0ZXN0X2NvbmZpZyBkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IHRydWUgJiYKIAl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZC1kaWZmIHdpdGggbm8gbmV3bGluZSBhdCBFT0YnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcHJpbnRmICIlcyIgImEgYSBhIGEgYSIgPnByZSAmJgorCXByaW50ZiAiJXMiICJhIGEgYWIgYSBhIiA+cG9zdCAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQlpbmRleCA3YmYzMTZlLi4zZGQwMzAzIDEwMDY0NAorCWluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NAogCS0tLSBhL3ByZQogCSsrKyBiL3Bvc3QKIAlAQCAtMSArMSBAQAogCWEgYSBbLWEtXXsrYWIrfSBhIGEKIAlFT0YKLQlwcmludGYgIiVzIiAiYSBhIGEgYSBhIiA+cHJlICYmCi0JcHJpbnRmICIlcyIgImEgYSBhYiBhIGEiID5wb3N0ICYmCiAJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaCBiL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaAppbmRleCBiOWQ4NzZlLi45NDY4MDgzIDEwMDc1NQotLS0gYS90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKKysrIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCkBAIC0zNTQsNyArMzU0LDcgQEAKICcKIAogIyBUZXN0IGZvciBhIGJ1ZyByZXBvcnRlZCBhdAotIyBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTMwNTE1MTQzNTA4LkdPMjU3NDJAbG9naW4uZHJzbnVnZ2xlcy5zdGRlcnIubmwvCisjIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDEzMDUxNTE0MzUwOC5HTzI1NzQyQGxvZ2luLmRyc251Z2dsZXMuc3RkZXJyLm5sLwogIyB3aGVyZSBhIGRlbGV0ZSBsaW5lcyB3ZXJlIG1pc3NpbmcgZnJvbSBjb21iaW5lZCBkaWZmIG91dHB1dCB3aGVuIHRoZXkKICMgb2NjdXJyZWQgZXhhY3RseSBiZWZvcmUgdGhlIGNvbnRleHQgbGluZXMgb2YgYSBsYXRlciBjaGFuZ2UuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIGRpZmYgbWlzc2luZyBkZWxldGUgYnVnJyAnCkBAIC00NDAsMTEgKzQ0MCwxMyBAQAogCWdpdCBicmFuY2ggc2lkZTJjICYmCiAJZ2l0IGNoZWNrb3V0IHNpZGUxYyAmJgogCXRlc3Rfc2VxIDEgMTAgPmZpbGVuYW1lLXNpZGUxYyAmJgorCXNpZGUxY2Y9JChnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWUtc2lkZTFjKSAmJgogCWdpdCBhZGQgZmlsZW5hbWUtc2lkZTFjICYmCiAJZ2l0IGNvbW1pdCAtbSB3aXRoICYmCiAJZ2l0IGNoZWNrb3V0IHNpZGUyYyAmJgogCXRlc3Rfc2VxIDEgOSA+ZmlsZW5hbWUtc2lkZTJjICYmCiAJZWNobyB0ZW4gPj5maWxlbmFtZS1zaWRlMmMgJiYKKwlzaWRlMmNmPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVuYW1lLXNpZGUyYykgJiYKIAlnaXQgYWRkIGZpbGVuYW1lLXNpZGUyYyAmJgogCWdpdCBjb21taXQgLW0gaWFtICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlcnkgc2lkZTFjICYmCkBAIC00NTIsMTMgKzQ1NCwxNCBAQAogCWdpdCBybSBmaWxlbmFtZS1zaWRlMWMgJiYKIAllY2hvIGVsZXZlbiA+PmZpbGVuYW1lLXNpZGUyYyAmJgogCWdpdCBtdiBmaWxlbmFtZS1zaWRlMmMgZmlsZW5hbWUtbWVyZ2VkICYmCisJbWVyZ2VkZj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlbmFtZS1tZXJnZWQpICYmCiAJZ2l0IGFkZCBmaWxlbmFtZS1tZXJnZWQgJiYKIAlnaXQgY29tbWl0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLXJhdycgJwotCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKLQk6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGYwMGM5NjVkODMwNzMwODQ2OWU1MzczMDJiYWE3MzA0ODQ4OGYxNjIgMDg4YmQ1ZDkyYzJhOGUwMjAzY2E4ZTdlNGMyYTVjNjkyZjZhZTNmNyAzMzNiOWM2MjUxOWYyODVlMTg1NDgzMGFkZTBmZTFlZjFkNDBlZTFiIFJSCWZpbGVuYW1lLXNpZGUxYwlmaWxlbmFtZS1zaWRlMmMJZmlsZW5hbWUtbWVyZ2VkCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFjZiAkc2lkZTJjZiAkbWVyZ2VkZiBSUglmaWxlbmFtZS1zaWRlMWMJZmlsZW5hbWUtc2lkZTJjCWZpbGVuYW1lLW1lcmdlZAogCUVPRgogCWdpdCBkaWZmLXRyZWUgLWMgLU0gLS1yYXcgLS1jb21iaW5lZC1hbGwtcGF0aHMgSEVBRCA+YWN0dWFsLnRtcCAmJgogCXNlZCAxZCA8YWN0dWFsLnRtcCA+YWN0dWFsICYmCkBAIC00ODIsMTEgKzQ4NSwxMyBAQAogCWdpdCBjaGVja291dCBzaWRlMWQgJiYKIAl0ZXN0X3NlcSAxIDEwID4iJChwcmludGYgImZpbGVcdHdpdGhcdHRhYnMiKSIgJiYKIAlnaXQgYWRkIGZpbGUqICYmCisJc2lkZTFkZj0kKGdpdCBoYXNoLW9iamVjdCAqdGFicykgJiYKIAlnaXQgY29tbWl0IC1tIHdpdGggJiYKIAlnaXQgY2hlY2tvdXQgc2lkZTJkICYmCiAJdGVzdF9zZXEgMSA5ID4iJChwcmludGYgImlcdGFtXHR0YWJiZWQiKSIgJiYKIAllY2hvIHRlbiA+PiIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAmJgogCWdpdCBhZGQgKnRhYmJlZCAmJgorCXNpZGUyZGY9JChnaXQgaGFzaC1vYmplY3QgKnRhYmJlZCkgJiYKIAlnaXQgY29tbWl0IC1tIGlhbSAmJgogCWdpdCBjaGVja291dCAtYiBmdW5ueS1uYW1lcy1tZXJnZXJ5IHNpZGUxZCAmJgogCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlMmQgJiYKQEAgLTQ5NCwxMiArNDk5LDE0IEBACiAJZWNobyBlbGV2ZW4gPj4iJChwcmludGYgImlcdGFtXHR0YWJiZWQiKSIgJiYKIAlnaXQgbXYgIiQocHJpbnRmICJpXHRhbVx0dGFiYmVkIikiICIkKHByaW50ZiAiZmlja2xlXHRuYW1pbmciKSIgJiYKIAlnaXQgYWRkIGZpY2tsZSogJiYKLQlnaXQgY29tbWl0CisJaGVhZGY9JChnaXQgaGFzaC1vYmplY3QgZmlja2xlKikgJiYKKwlnaXQgY29tbWl0ICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICctLWNvbWJpbmVkLWFsbC1wYXRocyBhbmQgLS1yYXcgYW5kIGZ1bm55IG5hbWVzJyAnCi0JY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgotCTo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZjAwYzk2NWQ4MzA3MzA4NDY5ZTUzNzMwMmJhYTczMDQ4NDg4ZjE2MiAwODhiZDVkOTJjMmE4ZTAyMDNjYThlN2U0YzJhNWM2OTJmNmFlM2Y3IDMzM2I5YzYyNTE5ZjI4NWUxODU0ODMwYWRlMGZlMWVmMWQ0MGVlMWIgUlIJImZpbGVcdHdpdGhcdHRhYnMiCSJpXHRhbVx0dGFiYmVkIgkiZmlja2xlXHRuYW1pbmciCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFkZiAkc2lkZTJkZiAkaGVhZGYgUlIJImZpbGVcdHdpdGhcdHRhYnMiCSJpXHRhbVx0dGFiYmVkIgkiZmlja2xlXHRuYW1pbmciCiAJRU9GCiAJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCiAJc2VkIDFkIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKQEAgLTUwNyw3ICs1MTQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLXJhdyAtYW5kIC16IGFuZCBmdW5ueSBuYW1lcycgJwotCXByaW50ZiAiYWFmODA4N2MzY2JkNGRiOGUxODVhMmQwNzRjZjI3YzUzY2ZiNzVkN1wwOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBmMDBjOTY1ZDgzMDczMDg0NjllNTM3MzAyYmFhNzMwNDg0ODhmMTYyIDA4OGJkNWQ5MmMyYThlMDIwM2NhOGU3ZTRjMmE1YzY5MmY2YWUzZjcgMzMzYjljNjI1MTlmMjg1ZTE4NTQ4MzBhZGUwZmUxZWYxZDQwZWUxYiBSUlwwZmlsZVx0d2l0aFx0dGFic1wwaVx0YW1cdHRhYmJlZFwwZmlja2xlXHRuYW1pbmdcMCIgPmV4cGVjdCAmJgorCXByaW50ZiAiJGhlYWRcMDo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgJHNpZGUxZGYgJHNpZGUyZGYgJGhlYWRmIFJSXDBmaWxlXHR3aXRoXHR0YWJzXDBpXHRhbVx0dGFiYmVkXDBmaWNrbGVcdG5hbWluZ1wwIiA+ZXhwZWN0ICYmCiAJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyAteiBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaCBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCmluZGV4IDUzYWM0NGIuLjBlYjAzMTQgMTAwNzU1Ci0tLSBhL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCisrKyBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0xMiw2ICsxMiw3IEBACiAJZ2l0IGNvbW1pdCAtbSB6ZXJvICYmCiAJZWNobyBvbmUgPiBvbmUgJiYKIAllY2hvIHR3byA+IHR3byAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3Qgb25lKSAmJgogCWdpdCBhZGQgb25lIHR3byAmJgogCWdpdCBjb21taXQgLW0gb25ldHdvICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgb25lICYmCkBAIC0yMCw3ICsyMSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKLQlnaXQgZGlmZi1pbmRleCBIRUFEXiAtLSBvbmUgfCBncmVwIC1xIDU2MjZhYmYwZjcyZTU4ZDdhMTUzMzY4YmE1N2RiNGM2NzNjMGUxNzEKKwlnaXQgZGlmZi1pbmRleCBIRUFEXiAtLSBvbmUgfCBncmVwIC1xICRibG9iCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKZGlmZiAtLWdpdCBhL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoIGIvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKaW5kZXggNjE5YmY5Ny4uZjg1MjEzNiAxMDA3NTUKLS0tIGEvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKKysrIGIvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKQEAgLTI4NCw3ICsyODQsNyBAQAogCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50JyAnCiAJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMjk0LDcgKzI5NCw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKIAllY2hvIG5ldyA+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0zMDMsMTkgKzMwMywxOSBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgJwogCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKIAllY2hvIG5ldyA+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJwogCXJtIC1mIHNtMS9uZXctZmlsZSAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzY5LDcgKzM2OSw3IEBACiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQnICcKIAllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzgxLDcgKzM4MSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKIAllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzkyLDcgKzM5Miw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCiAJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtNDAyLDEzICs0MDIsMTMgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJwogCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJwogCXJtIC1mIHNtMS9uZXctZmlsZSAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpkaWZmIC0tZ2l0IGEvdC90NDA0NC1kaWZmLWluZGV4LXVuaXF1ZS1hYmJyZXYuc2ggYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaAppbmRleCA2NDc5MDVlLi40NzAxNzk2IDEwMDc1NQotLS0gYS90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaAorKysgYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaApAQCAtMywzNCArMyw0OCBAQAogdGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bmlxdWUgc2hhMSBhYmJyZXZpYXRpb24gb24gImluZGV4IGZyb20uLnRvIiBsaW5lJwogLiAuL3Rlc3QtbGliLnNoCiAKLWlmICEgdGVzdF9oYXZlX3ByZXJlcSBTSEExCi10aGVuCi0gICAgICAgc2tpcF9hbGw9J25vdCB1c2luZyBTSEEtMSBmb3Igb2JqZWN0cycKLSAgICAgICB0ZXN0X2RvbmUKLWZpCi0KLWNhdCA+ZXhwZWN0X2luaXRpYWwgPDxFT0YKLTEwMDY0NCBibG9iIDUxZDI3Mzg0NjNlYTRjYTY2Zjg2OTFjOTFlMzNjZTY0YjdkNDFiYjEJZm9vCi1FT0YKLQotY2F0ID5leHBlY3RfdXBkYXRlIDw8RU9GCi0xMDA2NDQgYmxvYiA1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CWZvbwotRU9GCi0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi0JZWNobyA0ODI3ID4gZm9vICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GICYmCisJdmFsMSBzaGExOjQ4MjcKKwl2YWwxIHNoYTI1Njo1NjY0CisKKwl2YWwyIHNoYTE6MTE3NDIKKwl2YWwyIHNoYTI1NjoxMDYyNQorCisJaGFzaDEgc2hhMTo1MWQyNzM4NDYzZWE0Y2E2NmY4NjkxYzkxZTMzY2U2NGI3ZDQxYmIxCisJaGFzaDEgc2hhMjU2OmFlMzFkZmZmMGFmOTNiMmM2MmIwMDk4YTAzOWIzODU2OWM0M2IwYTdlOTdiODczMDAwY2E0MmQxMjhmMjczNTAKKworCWhhc2h0MSBzaGExOjUxZDI3Mzg0CisJaGFzaHQxIHNoYTI1NjphZTMxZGZmZgorCisJaGFzaDIgc2hhMTo1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CisJaGFzaDIgc2hhMjU2OmFlMzFkZmZhZGE4OGE0NmZkNWY1M2M3ZWQ1YWEyNWE3YTg5NTFmMWQ1ZTg4NDU2YzMxN2M4ZDU0ODRkMjYzZTUKKworCWhhc2h0MiBzaGExOjUxZDI3MzhlCisJaGFzaHQyIHNoYTI1NjphZTMxZGZmYQorCUVPRgorCisJY2F0ID5leHBlY3RfaW5pdGlhbCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gxKQlmb28KKwlFT0YKKworCWNhdCA+ZXhwZWN0X3VwZGF0ZSA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gyKQlmb28KKwlFT0YKKworCWVjaG8gIiQodGVzdF9vaWQgdmFsMSkiID4gZm9vICYmCiAJZ2l0IGFkZCBmb28gJiYKIAlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgogCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdF9pbml0aWFsIGFjdHVhbCAmJgotCWVjaG8gMTE3NDIgPiBmb28gJiYKKwllY2hvICIkKHRlc3Rfb2lkIHZhbDIpIiA+IGZvbyAmJgogCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSIgJiYKIAlnaXQgY2F0LWZpbGUgLXAgSEVBRDogPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RfdXBkYXRlIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgotaW5kZXggNTFkMjczODQuLjUxZDI3MzhlIDEwMDY0NAoraW5kZXggJCh0ZXN0X29pZCBoYXNodDEpLi4kKHRlc3Rfb2lkIGhhc2h0MikgMTAwNjQ0CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkb2VzIG5vdCBwcm9kdWNlIGFtYmlndW91cyBpbmRleCBsaW5lJyAnCmRpZmYgLS1naXQgYS90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2ggYi90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2gKaW5kZXggMzZmOGVkOC4uMjU4ODA4NyAxMDA3NTUKLS0tIGEvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCisrKyBiL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaApAQCAtNzAsNyArNzAsNyBAQAogCWV4cGVjdD0kMQogCXNoaWZ0CiAJY2F0ID5leHBlY3RlZCA8PC1FT0YKLQk6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICRibG9iIEEJJGV4cGVjdAorCTowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkYmxvYiBBCSRleHBlY3QKIAlFT0YKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJhdyAkKiIgIgogCQlnaXQgLUMgJyRkaXInIGRpZmYgLS1uby1hYmJyZXYgLS1yYXcgJCogSEVBRF4gPmFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaCBiL3QvdDQwNDgtZGlmZi1jb21iaW5lZC1iaW5hcnkuc2gKaW5kZXggODdhODk0OS4uN2Y5YWQ5ZiAxMDA3NTUKLS0tIGEvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaAorKysgYi90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoCkBAIC05LDI0ICs5LDI3IEBACiAJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKIAllY2hvIHR3b1EyIHwgcV90b19udWwgPmJpbmFyeSAmJgogCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmluYXJ5KSAmJgogCWdpdCBjaGVja291dCAtYiBicmFuY2gtYmluYXJ5IEhFQUReICYmCiAJZWNobyB0aHJlZVEzIHwgcV90b19udWwgPmJpbmFyeSAmJgogCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwl0aHJlZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOmJpbmFyeSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCiAJZWNobyByZXNvbHZlZFFob29yYXkgfCBxX3RvX251bCA+YmluYXJ5ICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSByZXNvbHZlZAorCWdpdCBjb21taXQgLWEgLW0gcmVzb2x2ZWQgJiYKKwlyZXM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpiaW5hcnkpCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiByZXNvbHZlZAogCiBkaWZmIC0tZ2l0IGEvYmluYXJ5IGIvYmluYXJ5Ci1pbmRleCA3ZWE2ZGVkLi45NTYzNjkxIDEwMDY0NAoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAogQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS9iaW5hcnkgYi9iaW5hcnkKLWluZGV4IDYxOTc1NzAuLjk1NjM2OTEgMTAwNjQ0CitpbmRleCAkdHdvLi4kcmVzIDEwMDY0NAogQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKQEAgLTM0LDExICszNywxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jb21iaW5lZCBiaW5hcnkKLWluZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKQEAgLTQ2LDExICs0OSwxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jYyBiaW5hcnkKLWluZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIGluZGljYXRlcyBiaW5hcnktbmVzcycgJwpAQCAtNjIsMjMgKzY1LDI2IEBACiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCXRlc3RfY29tbWl0IG9uZSB0ZXh0ICYmCiAJdGVzdF9jb21taXQgdHdvIHRleHQgJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXh0KSAmJgogCWdpdCBjaGVja291dCAtYiBicmFuY2gtdGV4dCBIRUFEXiAmJgogCXRlc3RfY29tbWl0IHRocmVlIHRleHQgJiYKKwl0aHJlZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRleHQpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3RfY29tbWl0IHJlc29sdmVkIHRleHQgJiYKKwlyZXM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXh0KSAmJgogCWVjaG8gdGV4dCAtZGlmZiA+LmdpdGF0dHJpYnV0ZXMKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAotaW5kZXggMmJkZjY3YS4uMmFiMTlhZSAxMDA2NDQKK2luZGV4ICR0aHJlZS4uJHJlcyAxMDA2NDQKIEJpbmFyeSBmaWxlcyBhL3RleHQgYW5kIGIvdGV4dCBkaWZmZXIKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAotaW5kZXggZjcxOWVmZC4uMmFiMTlhZSAxMDA2NDQKK2luZGV4ICR0d28uLiRyZXMgMTAwNjQ0CiBCaW5hcnkgZmlsZXMgYS90ZXh0IGFuZCBiL3RleHQgZGlmZmVyCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLW0gcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJwpAQCAtODYsMTEgKzkyLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNvbWJpbmVkIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCkBAIC05OCwxMSArMTA0LDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNjIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKQEAgLTExNSwxMSArMTIxLDExIEBACiAJZ2l0IGNvbmZpZyBkaWZmLnVwY2FzZS50ZXh0Y29udiAidHIgYS16IEEtWiA8IgogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCAyYmRmNjdhLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEAgLTEgKzEgQEAKQEAgLTEyOCw3ICsxMzQsNyBAQAogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCBmNzE5ZWZkLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHR3by4uJHJlcyAxMDA2NDQKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAIC0xICsxIEBACkBAIC0xNDAsMTEgKzE0NiwxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jb21iaW5lZCB0ZXh0Ci1pbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACkBAIC0xNTcsMTEgKzE2MywxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jYyB0ZXh0Ci1pbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACkBAIC0xNzQsOSArMTgwLDkgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiBkaWZmIC0tY29tYmluZWQgdGV4dAotaW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEBAIC0xLDEgLTEsMSArMSwxIEBAQApAQCAtMTkwLDkgKzE5Niw5IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogZGlmZiAtLWNjIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMDAwMDAwMAoraW5kZXggJHRocmVlLCR0d28uLjAwMDAwMDAKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAQCAtMSwxIC0xLDEgKzEsNSBAQEAKZGlmZiAtLWdpdCBhL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaCBiL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaAppbmRleCBkZmYzNmI3Li40ZjRiNTQxIDEwMDc1NQotLS0gYS90L3Q0MDU3LWRpZmYtY29tYmluZWQtcGF0aHMuc2gKKysrIGIvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoCkBAIC0zMyw3ICszMyw3IEBACiAnCiAKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBvbmUgdHJ1bGx5IGNvbmZsaWN0aW5nIHBhdGgnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgb25lIHRydWx5IGNvbmZsaWN0aW5nIHBhdGgnICcKIAlnaXQgY2hlY2tvdXQgc2lkZSAmJgogCWZvciBpIGluICQodGVzdF9zZXEgMiA5KQogCWRvCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCmluZGV4IDkwYWI1NGYuLjQzMzk0ZjggMTAwNjQ0Ci0tLSBhL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCisrKyBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCkBAIC03NSw4ICs3NSw4IEBACiArbGluazpnaXQtc3NoLXB1bGwuaHRtbFtnaXQtc3NoLXB1bGxdOjoKICAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KICAKLSBJbnRlcm9nYXRvcnM6Ci1AQCAtMTU2LDggKzE1Niw4IEBAIEludGVyb2dhdG9yczoKKyBJbnRlcnJvZ2F0b3JzOgorQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcnJvZ2F0b3JzOgogIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CiAgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCiAgCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCmluZGV4IDkwY2RiYWEuLmNhYzE3MmUgMTAwNjQ0Ci0tLSBhL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCisrKyBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCkBAIC0yMTEsNyArMjExLDcgQEAKIC0KIC0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQogLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCi0tCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGFjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGF0Y2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAogLQkJICogdG8gdHJ5IHRvIG1hdGNoIGFnYWluLgogLQkJICovCiAtCQlpZiAobXR5cGUgPT0gMCkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKaW5kZXggNWY2ZGRjMS4uNTdlYzc5ZCAxMDA2NDQKLS0tIGEvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKKysrIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKQEAgLTE4NSw4ICsxODUsOCBAQAogK2xpbms6Z2l0LXNzaC1wdWxsLmh0bWxbZ2l0LXNzaC1wdWxsXTo6CiAgCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCiAgCi0gSW50ZXJvZ2F0b3JzOgotQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcm9nYXRvcnM6CisgSW50ZXJyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJyb2dhdG9yczoKICBsaW5rOmdpdC1kaWZmLWhlbHBlci5odG1sW2dpdC1kaWZmLWhlbHBlcl06OgogIAlHZW5lcmF0ZXMgcGF0Y2ggZm9ybWF0IG91dHB1dCBmb3IgZ2l0LWRpZmYtKgogIApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTcucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaAppbmRleCAwN2M2NTg5Li5mYTI0MzA1IDEwMDY0NAotLS0gYS90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaAorKysgYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaApAQCAtMzM1LDcgKzMzNSw3IEBACiAgCiAtCQkvKiBJZiB0aGlzIGlzIGFuIGV4YWN0IGRpcmVjdG9yeSBtYXRjaCwgd2UgbWF5IGhhdmUKIC0JCSAqIGRpcmVjdG9yeSBmaWxlcyBmb2xsb3dpbmcgdGhpcyBwYXRoLiBNYXRjaCBvbiB0aGVtLgotLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhY2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAorLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhdGNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKIC0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KICsJaWYgKGUtPmRpcmVjdG9yeSkgewogKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgpkaWZmIC0tZ2l0IGEvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaCBiL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2gKaW5kZXggZmE1ZDRlZi4uZDczNDljZSAxMDA3NTUKLS0tIGEvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaAorKysgYi90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoCkBAIC00LDIzICs0LDE3IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1jcmVhdGVfZmlsZSAoKSB7Ci0JZm9yIGkKLQlkbwotCQllY2hvICIkaSIKLQlkb25lCi19Ci0KLXNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiAoKSB7CitwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmICgpIHsKKwlnaXQgZGlmZiBIRUFEID5kaWZmLnJhdyAmJgogCXNlZCAtZSAnCiAJCS9eaW5kZXggL2QKLQkJcy9eXCgrWzw+XVs8Pl1bPD5dWzw+XSpcKSAuKi9cMS8KLQknCisJCXMvXlwoK1s8PnxdWzw+fF1bPD58XVs8PnxdKlwpIC4qL1wxLworCScgZGlmZi5yYXcKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJdGVzdF90aWNrICYmCi0JY3JlYXRlX2ZpbGUgPm9uZSAxIDIgMyA0IDUgNiA3ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID5vbmUgJiYKIAljYXQgb25lID50d28gJiYKIAlnaXQgYWRkIG9uZSB0d28gJiYKIAlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKQEAgLTI4LDEzICsyMiwxMyBAQAogCWdpdCBicmFuY2ggc2lkZSAmJgogCiAJdGVzdF90aWNrICYmCi0JY3JlYXRlX2ZpbGUgPm9uZSAxIHR3byAzIDQgNSBzaXggNyAmJgotCWNyZWF0ZV9maWxlID50d28gMSB0d28gMyA0IDUgNiA3ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgNSBzaXggNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgNSA2IDcgPnR3byAmJgogCWdpdCBjb21taXQgLWEgLW0gbWFzdGVyICYmCiAKIAlnaXQgY2hlY2tvdXQgc2lkZSAmJgotCWNyZWF0ZV9maWxlID5vbmUgMSAyIDMgNCBmaXZlIDYgNyAmJgotCWNyZWF0ZV9maWxlID50d28gMSAyIDMgNCBmaXZlIDYgNyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCBmaXZlIDYgNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3ID50d28gJiYKIAlnaXQgY29tbWl0IC1hIC1tIHNpZGUgJiYKIAogCWdpdCBjaGVja291dCBtYXN0ZXIKQEAgLTUyLDcgKzQ2LDcgQEAKIAlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCit0ZXN0X2FwcGx5X3dpdGhfM3dheSAoKSB7CiAJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAogCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgogCkBAIC02MSwyMiArNTUsMzEgQEAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgogCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCi0JZ2l0IGRpZmYgSEVBRCB8IHNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYgJiYKKwlwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZiAmJgogCiAJIyBzaG91bGQgZmFpbCB0byBhcHBseQogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCiAKIAkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCiAJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgogCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbC5kaWZmCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCisJdGVzdF9hcHBseV93aXRoXzN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCBtZXJnZS5jb25mbGljdFN0eWxlID0gZGlmZjMnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5jb25mbGljdFN0eWxlIGRpZmYzICYmCisJdGVzdF9hcHBseV93aXRoXzN3YXkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCByZXJlcmUgZW5hYmxlZCcgJwotCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKIAogCSMgTWVyZ2luZyBzaWRlIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKIAlnaXQgZGlmZiAuLi5zaWRlID5QLmRpZmYgJiYKQEAgLTg3LDcgKzkwLDcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgogCiAJIyBNYW51YWxseSByZXNvbHZlIGFuZCByZWNvcmQgdGhlIHJlc29sdXRpb24KLQljcmVhdGVfZmlsZSAxIHR3byAzIDQgZml2ZSBzaXggNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgZml2ZSBzaXggNyA+b25lICYmCiAJZ2l0IHJlcmVyZSAmJgogCWNhdCBvbmUgPmV4cGVjdCAmJgogCkBAIC0xMDQsMTQgKzEwNywxNCBAQAogCWdpdCByZXNldCAtLWhhcmQgJiYKIAogCWdpdCBjaGVja291dCAtYiBhZGRlciAmJgotCWNyZWF0ZV9maWxlIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCi0JY3JlYXRlX2ZpbGUgMSAyIDMgNCA1IDYgNyA+Zm91ciAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPmZvdXIgJiYKIAlnaXQgYWRkIHRocmVlIGZvdXIgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCiAKIAlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBhZGRlcl4gJiYKLQljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgotCWNyZWF0ZV9maWxlIDEgMiAzIGZvdXIgNSA2IDcgPmZvdXIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyBmb3VyIDUgNiA3ID5mb3VyICYmCiAJZ2l0IGFkZCB0aHJlZSBmb3VyICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkIHRocmVlIGFuZCBmb3VyIiAmJgogCkBAIC0xMjEsNyArMTI0LDcgQEAKIAlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBhbm90aGVyICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0zIHdpdGggYWRkL2FkZCBjb25mbGljdCcgJwpAQCAtMTMxLDcgKzEzNCw3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgogCSMgLi4uIGFuZCBsZWF2ZSBjb25mbGljdHMgaW4gdGhlIGluZGV4IGFuZCBpbiB0aGUgd29ya2luZyB0cmVlCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCiAKIAkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCiAJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgpkaWZmIC0tZ2l0IGEvdC90NDEzOC1hcHBseS13cy1leHBhbnNpb24uc2ggYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaAppbmRleCAzYjYzNmE2Li5iMTlmYWViIDEwMDc1NQotLS0gYS90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaAorKysgYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaApAQCAtMTcsOCArMTcsOCBAQAogCXByaW50ZiAiXHQlc1xuIiAxIDIgMyA+YWZ0ZXIgJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5hZnRlciAmJgogCXByaW50ZiAiXHQlc1xuIiA0IDUgNiA+PmFmdGVyICYmCi0JZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAotCQlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMS8iIC1lICJzL2FmdGVyL3Rlc3QtMS8iID5wYXRjaDEucGF0Y2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoMS5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMS8iIC1lICJzL2FmdGVyL3Rlc3QtMS8iIHBhdGNoMS5wYXRjaC5yYXcgPnBhdGNoMS5wYXRjaCAmJgogCXByaW50ZiAiJTY0c1xuIiAxIDIgMyA0IDUgNiA+dGVzdC0xICYmCiAJcHJpbnRmICIlNjRzXG4iIDEgMiAzIGEgYiBjIDQgNSA2ID5leHBlY3QtMSAmJgogCkBAIC0zMyw4ICszMyw4IEBACiAJCXg9JCgoICR4ICsgMSApKQogCWRvbmUgJiYKIAlwcmludGYgIlx0JXNcbiIgZCBlIGYgPj5hZnRlciAmJgotCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKLQkJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTIvIiAtZSAicy9hZnRlci90ZXN0LTIvIiA+cGF0Y2gyLnBhdGNoICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyID5wYXRjaDIucGF0Y2gucmF3ICYmCisJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTIvIiAtZSAicy9hZnRlci90ZXN0LTIvIiBwYXRjaDIucGF0Y2gucmF3ID5wYXRjaDIucGF0Y2ggJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgZCBlIGYgPnRlc3QtMiAmJgogCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+ZXhwZWN0LTIgJiYKIAl4PTEgJiYKQEAgLTU2LDggKzU2LDggQEAKIAkJeD0kKCggJHggKyAxICkpCiAJZG9uZSAmJgogCXByaW50ZiAiXHQlc1xuIiBkIGUgZiA+PmFmdGVyICYmCi0JZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAotCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgPnBhdGNoMy5wYXRjaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGJlZm9yZSBhZnRlciA+cGF0Y2gzLnBhdGNoLnJhdyAmJgorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgcGF0Y2gzLnBhdGNoLnJhdyA+cGF0Y2gzLnBhdGNoICYmCiAJcHJpbnRmICIlNjRzXG4iIGEgYiBjIGQgZSBmID50ZXN0LTMgJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgPmV4cGVjdC0zICYmCiAJeD0wICYmCkBAIC04NCw4ICs4NCw4IEBACiAJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YWZ0ZXIKIAkJeD0kKCggJHggKyAxICkpCiAJZG9uZSAmJgotCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKLQlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtNC8iIC1lICJzL2FmdGVyL3Rlc3QtNC8iID5wYXRjaDQucGF0Y2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoNC5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtNC8iIC1lICJzL2FmdGVyL3Rlc3QtNC8iIHBhdGNoNC5wYXRjaC5yYXcgPnBhdGNoNC5wYXRjaCAmJgogCT50ZXN0LTQgJiYKIAl4PTAgJiYKIAl3aGlsZSB0ZXN0ICR4IC1sdCA1MApkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaAppbmRleCBlODAzYmE0Li4yYzk0ODk0IDEwMDc1NQotLS0gYS90L3Q0MjAyLWxvZy5zaAorKysgYi90L3Q0MjAyLWxvZy5zaApAQCAtNjY3LDcgKzY2Nyw3IEBACiAqIHwgfCBmaWZ0aAogKiB8IHwgZm91cnRoCiB8LyAvCi0qIHwgdGhpcmQKKyogLyB0aGlyZAogfC8KICogc2Vjb25kCiAqIGluaXRpYWwKQEAgLTE1NzAsNiArMTU3MCwxNCBAQAogCWdpdCBjb21taXQgLVMgLW0gc2lnbmVkX2NvbW1pdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2V0dXAgc2lnbmVkIGJyYW5jaCB3aXRoIHN1YmtleScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWduZWQtc3Via2V5IG1hc3RlciAmJgorCWVjaG8gZm9vID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLVNCNzIyNzE4OSAtbSBzaWduZWRfY29tbWl0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3NldHVwIHNpZ25lZCBicmFuY2ggeDUwOScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCWdpdCBjaGVja291dCAtYiBzaWduZWQteDUwOSBtYXN0ZXIgJiYKQEAgLTE1ODAsNiArMTU4OCwxOCBAQAogCWdpdCBjb21taXQgLVMgLW0gc2lnbmVkX2NvbW1pdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdsb2cgeDUwOSBmaW5nZXJwcmludCcgJworCWVjaG8gIkY4QkY2MkUwNjkzRDA2OTQ4MTYzNzcwOTk5MDlDNzc5RkEyM0ZENjUgfCAiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1uMSAtLWZvcm1hdD0iJUdGIHwgJUdQIiBzaWduZWQteDUwOSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdsb2cgT3BlblBHUCBmaW5nZXJwcmludCcgJworCWVjaG8gIkQ0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODkiID4gZXhwZWN0ICYmCisJZ2l0IGxvZyAtbjEgLS1mb3JtYXQ9IiVHUCIgc2lnbmVkLXN1YmtleSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZScgJwogCWdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBzaWduZWQgPmFjdHVhbCAmJgogCWdyZXAgIl58IGdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90NDIwMy1tYWlsbWFwLnNoIGIvdC90NDIwMy1tYWlsbWFwLnNoCmluZGV4IDkxOGFkYTYuLjU4NmMzYTggMTAwNzU1Ci0tLSBhL3QvdDQyMDMtbWFpbG1hcC5zaAorKysgYi90L3Q0MjAzLW1haWxtYXAuc2gKQEAgLTEzLDggKzEzLDggQEAKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCi0JY2F0ID5jb250YWN0cyA8PC1cRU9GICYmCi0JQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwljYXQgPmNvbnRhY3RzIDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIAluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgogCUVPRgogCkBAIC0zMywxOSArMzMsMTkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBhcmd1bWVudHMnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCi0JQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KIAlFT0YKIAlnaXQgY2hlY2stbWFpbG1hcCBcCi0JCSJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQkiJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IiBcCiAJCSJuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCAtLXN0ZGluJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgotCUEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJY2F0ID5leHBlY3QgPDwtIEVPRiAmJgorCSRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCiAJZ2l0IGNoZWNrLW1haWxtYXAgLS1zdGRpbiA8Y29udGFjdHMgPmFjdHVhbCAmJgpAQCAtNjYsOCArNjYsOCBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1tYWlsbWFwIGJvZ3VzCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgotQSBVIFRob3IgKDEpOgorY2F0ID5leHBlY3QgPDwgRU9GCiskR0lUX0FVVEhPUl9OQU1FICgxKToKICAgICAgIGluaXRpYWwKIAogbmljazEgKDEpOgpAQCAtOTAsNyArOTAsNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgLm1haWxtYXAnICcKLQllY2hvICJSZXBvIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPiAubWFpbG1hcCAmJgorCWVjaG8gIlJlcG8gR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4gLm1haWxtYXAgJiYKIAlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG92ZXJyaWRlJyAnCi0JZWNobyAiRXh0ZXJuYWwgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiRXh0ZXJuYWwgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAlnaXQgY29uZmlnIG1haWxtYXAuZmlsZSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCiAJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTE3OCw4ICsxNzgsOCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDxcRU9GCi1BIFUgVGhvciAoMSk6CitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgKDEpOgogICAgICAgaW5pdGlhbAogCiBuaWNrMSAoMSk6CkBAIC0xOTUsMTggKzE5NSwxOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWFpbG1hcCBibG9iIHRlc3RzJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIG1hcCAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKLQljYXQgPmp1c3QtYnVncyA8PC1cRU9GICYmCisJY2F0ID5qdXN0LWJ1Z3MgPDwtIEVPRiAmJgogCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCi0JY2F0ID5ib3RoIDw8LVxFT0YgJiYKLQlCbG9iIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPgorCWNhdCA+Ym90aCA8PC0gRU9GICYmCisJQmxvYiBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPgogCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCi0JcHJpbnRmICJUcmlja3kgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+bm8tbmV3bGluZSAmJgorCXByaW50ZiAiVHJpY2t5IEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+bm8tbmV3bGluZSAmJgogCWdpdCBhZGQganVzdC1idWdzIGJvdGggbm8tbmV3bGluZSAmJgogCWdpdCBjb21taXQgLW0gIm15IG1haWxtYXBzIiAmJgotCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+Lm1haWxtYXAgJiYKLQllY2hvICJJbnRlcm5hbCBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID5pbnRlcm5hbC5tYXAKKwllY2hvICJSZXBvIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPmludGVybmFsLm1hcAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2Igc2V0JyAnCkBAIC0yNjYsMTIgKzI2NiwxMiBAQAogCWdpdCBpbml0IG5vbi1iYXJlICYmCiAJKAogCQljZCBub24tYmFyZSAmJgotCQl0ZXN0X2NvbW1pdCBvbmUgLm1haWxtYXAgIkZha2UgTmFtZSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgJiYKKwkJdGVzdF9jb21taXQgb25lIC5tYWlsbWFwICJGYWtlIE5hbWUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgJiYKIAkJZWNobyAiICAgICAxCUZha2UgTmFtZSIgPmV4cGVjdCAmJgogCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgogCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJCXJtIC5tYWlsbWFwICYmCi0JCWVjaG8gIiAgICAgMQlBIFUgVGhvciIgPmV4cGVjdCAmJgorCQllY2hvICIgICAgIDEJJEdJVF9BVVRIT1JfTkFNRSIgPmV4cGVjdCAmJgogCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgogCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAJKQpAQCAtMzA1LDI2ICszMDUsMjYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lJyAnCi0JZWNobyAiICAgICAxCUEgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJQSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+ZXhwZWN0ICYmCiAJZWNobyAiICAgICAxCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+PmV4cGVjdCAmJgotCWVjaG8gIkEgPGF1dGhvckBleGFtcGxlLmNvbT4iID4ubWFpbG1hcCAmJgorCWVjaG8gIkEgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKIAlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgY2Fub25pY2FsIGVtYWlsIGNhc2UnICcKLQllY2hvICIgICAgIDEJQSBVIFRob3IgPEFVVEhPUkBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJJEdJVF9BVVRIT1JfTkFNRSA8QVVUSE9SQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgogCWVjaG8gIiAgICAgMQluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj5leHBlY3QgJiYKLQllY2hvICI8QVVUSE9SQGV4YW1wbGUuY29tPiA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPi5tYWlsbWFwICYmCisJZWNobyAiPEFVVEhPUkBleGFtcGxlLmNvbT4gPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKIAlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyBFeHRlbmRlZCBtYWlsbWFwIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBnaXZlIHVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZvciBzaG9ydGxvZwotY2F0ID5leHBlY3QgPDxcRU9GCi1BIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAoMSk6CitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAoMSk6CiAgICAgICBpbml0aWFsCiAKIENUTyA8Y3RvQGNvbXBhbnkueHg+ICgxKToKQEAgLTM3MCw3ICszNzAsNyBAQAogCWdpdCBjb21taXQgLS1hdXRob3IgIkNUTyA8Y3RvQGNvb21wYW55Lnh4PiIgLW0gc2V2ZW50aCAmJgogCiAJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgotCWVjaG8gIkNvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgogCWVjaG8gIjxjdG9AY29tcGFueS54eD4gICAgICAgICAgICAgICAgICAgICAgIDxjdG9AY29vbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCiAJZWNobyAiU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICAgICAgICAgbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAllY2hvICJPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgpAQCAtMzg0LDI3ICszODQsMjcgQEAKICcKIAogIyBnaXQgbG9nIHdpdGggLS1wcmV0dHkgZm9ybWF0IHdoaWNoIHVzZXMgdGhlIG5hbWUgYW5kIGVtYWlsIG1haWxtYXAgcGxhY2VtYXJrZXJzCi1jYXQgPmV4cGVjdCA8PFxFT0YKK2NhdCA+ZXhwZWN0IDw8IEVPRgogQXV0aG9yIENUTyA8Y3RvQGNvb21wYW55Lnh4PiBtYXBzIHRvIENUTyA8Y3RvQGNvbXBhbnkueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKIEF1dGhvciBjbGF1cyA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3Igc2FudGEgPG1lQGNvbXBhbnkueHg+IG1hcHMgdG8gU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAogQXV0aG9yIG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PiBtYXBzIHRvIE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3IgbmljazIgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAogQXV0aG9yIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+IG1hcHMgdG8gU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKLUF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiBtYXBzIHRvIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiBtYXBzIHRvICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJwpAQCAtNDEyLDE0ICs0MTIsNDIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgorY2F0ID5leHBlY3QgPDwgRU9GCitBdXRob3IgZW1haWwgY3RvQGNvb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGN0bworQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIG1lQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgbWUKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBtZUBjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IG1lCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgbmljazJAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBuaWNrMgorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIGJ1Z3NAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBidWdzCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgYnVnc0Bjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGJ1Z3MKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBhdXRob3JAZXhhbXBsZS5jb20gaGFzIGxvY2FsLXBhcnQgYXV0aG9yCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgKGxvY2FsLXBhcnQgZW1haWwgYWRkcmVzcyknICcKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiQXV0aG9yIGVtYWlsICVhZSBoYXMgbG9jYWwtcGFydCAlYWwlbkNvbW1pdHRlciBlbWFpbCAlY2UgaGFzIGxvY2FsLXBhcnQgJWNsJW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgogQXV0aG9yOiBDVE8gPGN0b0Bjb21wYW55Lnh4PgogQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgogQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgogQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KIEF1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CiBBdXRob3I6IFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgotQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IHdpdGggLS11c2UtbWFpbG1hcCcgJwpAQCAtNDI3LDE0ICs0NTUsMTQgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgorY2F0ID5leHBlY3QgPDwgRU9GCiBBdXRob3I6IENUTyA8Y3RvQGNvbXBhbnkueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgogQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KIEF1dGhvcjogU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+Ci1BdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgd2l0aCBsb2cubWFpbG1hcCcgJwpAQCAtNDQzLDI4ICs0NzEsMjggQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLm1haWxtYXA9ZmFsc2UgZGlzYWJsZXMgbWFpbG1hcCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCiAJQXV0aG9yOiBDVE8gPGN0b0Bjb29tcGFueS54eD4KIAlBdXRob3I6IGNsYXVzIDxtZUBjb21wYW55Lnh4PgogCUF1dGhvcjogc2FudGEgPG1lQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBuaWNrMiA8bmljazJAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2syIDxidWdzQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgotCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogCUVPRgogCWdpdCAtYyBsb2cubWFpbG1hcD1GYWxzZSBsb2cgfCBncmVwIEF1dGhvciA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby11c2UtbWFpbG1hcCBkaXNhYmxlcyBtYWlsbWFwJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKIAlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgogCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgogCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+Ci0JQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUF1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJRU9GCiAJZ2l0IGxvZyAtLW5vLXVzZS1tYWlsbWFwIHwgZ3JlcCBBdXRob3IgPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCkBAIC01MDAsOCArNTI4LDggQEAKICcKIAogIyBnaXQgYmxhbWUKLWNhdCA+ZXhwZWN0IDw8XEVPRgotXk9CSkkgKEEgVSBUaG9yICAgICBEQVRFIDEpIG9uZQorY2F0ID5leHBlY3QgPDxFT0YKK15PQkpJICgkR0lUX0FVVEhPUl9OQU1FICAgICBEQVRFIDEpIG9uZQogT0JKSUQgKFNvbWUgRHVkZSAgICBEQVRFIDIpIHR3bwogT0JKSUQgKE90aGVyIEF1dGhvciBEQVRFIDMpIHRocmVlCiBPQkpJRCAoT3RoZXIgQXV0aG9yIERBVEUgNCkgZm91cgpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAppbmRleCBmNDJhNjlmLi4yMDRjMTQ5IDEwMDc1NQotLS0gYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAorKysgYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApAQCAtMTM0LDYgKzEzNCwzNiBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCitmb3IgcCBpbiBzaG9ydCBtZWRpdW0gZnVsbCBmdWxsZXIgZW1haWwgcmF3CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PSRwIiAnCisJCXJldnM9IiQoZ2l0IHJldi1saXN0IC0tcmVmbG9nKSIgJiYKKwkJZm9yIHIgaW4gJHJldnMKKwkJZG8KKwkJCWdpdCBzaG93IC1zICIkciIgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIgfHwgcmV0dXJuIDEKKwkJZG9uZSA+ZXhwZWN0ICYmCisJCXsKKwkJCWdpdCBsb2cgLXogLS1yZWZsb2cgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIKKwkJfSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PW9uZWxpbmUnICcKKwlyZXZzPSIkKGdpdCByZXYtbGlzdCAtLXJlZmxvZykiICYmCisJZm9yIHIgaW4gJHJldnMKKwlkbworCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lICIkciIgPnJhdyAmJgorCQljYXQgcmF3IHwgbGZfdG9fbnVsIHx8IGV4aXQgMQorCWRvbmUgPmV4cGVjdCAmJgorCSMgdGhlIHRyYWlsaW5nIE5VTCBpcyBhbHJlYWR5IHByb2R1Y2VkIHNvIHdlIGRvIG5vdCBuZWVkIHRvCisJIyBvdXRwdXQgYW5vdGhlciBvbmUKKwlnaXQgbG9nIC16IC0tcHJldHR5PW9uZWxpbmUgLS1yZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbW9yZSBjb21taXRzJyAnCiAJdGVzdF9jb21taXQgIm1lc3NhZ2Ugb25lIiBvbmUgb25lIG1lc3NhZ2Utb25lICYmCiAJdGVzdF9jb21taXQgIm1lc3NhZ2UgdHdvIiB0d28gdHdvIG1lc3NhZ2UtdHdvICYmCkBAIC01MDMsNiArNTMzLDEyIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tZm9ybWF0PSVhZCVuJWNkIC0tZGF0ZT1zaG9ydCA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVhcyVuJWNzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwogIyBnZXQgbmV3IGRpZ2VzdHMgKHdpdGggbm8gYWJicmV2aWF0aW9ucykKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBsb2cgZGVjb3JhdGlvbiB0ZXN0cycgJwogCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjApICYmCkBAIC02NDAsNyArNjc2LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PW5vbmV4aXN0YW50KSBiZWNvbWVzIGVtcHR5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1ub25leGlzdGVudCkgYmVjb21lcyBlbXB0eScgJwogCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJ4JSh0cmFpbGVyczprZXk9TmFja2VkLWJ5KXgiID5hY3R1YWwgJiYKIAllY2hvICJ4eCIgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTc4OCw0ICs4MjQsNDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2Ugd2l0aCBsb2cuZGF0ZSBpcyBvdmVycmlkZGVuIGJ5IHNob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCXRlc3RfY29uZmlnIGxvZy5kYXRlIHJmYyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2Ugd2l0aCBleHBsaWNpdCBkYXRlIG92ZXJyaWRlcyBzaG9ydCBkYXRlJyAnCisJZ2l0IGxvZyAtLWRhdGU9cmZjIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFkKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1kYXRlPXJmYyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBpcyBuZXZlciB1bmFiYnJldmlhdGVkJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tbm8tYWJicmV2LWNvbW1pdCAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBpcyBuZXZlciBkZWNvcmF0ZWQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBkb2VzIG5vdCBvdXRwdXQgcmVmbG9nIGluZm8nICcKKwlnaXQgbG9nIC0td2Fsay1yZWZsb2dzIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS13YWxrLXJlZmxvZ3MgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UgaXMgY29sb3JlZCBhcHByb3ByaWF0ZWx5JyAnCisJZ2l0IGxvZyAtLWNvbG9yPWFsd2F5cyAtLXByZXR0eT0idGZvcm1hdDolQyhhdXRvKSVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1jb2xvcj1hbHdheXMgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMC1sb2ctaTE4bi5zaCBiL3QvdDQyMTAtbG9nLWkxOG4uc2gKaW5kZXggNmU2MWY1Ny4uYzM3OTIwOCAxMDA3NTUKLS0tIGEvdC90NDIxMC1sb2ctaTE4bi5zaAorKysgYi90L3Q0MjEwLWxvZy1pMThuLnNoCkBAIC03MCw3ICs3MCw3IEBACiAJdGhlbgogCSAgICBmb3JjZV9yZWdleD0uKgogCWZpCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xICsgbG9jYWxlKSIgIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFSRUdFWF9JTExTRVEsR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xICsgbG9jYWxlKSIgIgogCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJCWxhdGluMQogCQl1dGY4CkBAIC04NCw3ICs4NCw3IEBACiAJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKIAkiCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBkaWUgb24gaW52YWxpZCBVVEYtOCB2YWx1ZSAobGF0aW4xICsgbG9jYWxlICsgaW52YWxpZCBuZWVkbGUpIiAiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIVJFR0VYX0lMTFNFUSxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBkaWUgb24gaW52YWxpZCBVVEYtOCB2YWx1ZSAobGF0aW4xICsgbG9jYWxlICsgaW52YWxpZCBuZWVkbGUpIiAiCiAJCUxDX0FMTD1cIiRpc19JU19sb2NhbGVcIiBnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPVwiJGZvcmNlX3JlZ2V4JGludmFsaWRfZVwiID5hY3R1YWwgJiYKIAkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogCSIKZGlmZiAtLWdpdCBhL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaCBiL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaAppbmRleCA3ZjkwZjU4Li41M2E0YWYzIDEwMDc1NQotLS0gYS90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2gKKysrIGIvdC90NDIxMy1sb2ctdGFiZXhwYW5kLnNoCkBAIC0zNiw3ICszNiw3IEBACiAJZXNhYwogCiAJIyBQcmVmaXggdGhlIG91dHB1dCB3aXRoIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBhbmQKLQkjIHJlcGxhY2UgU1Agd2l0aCBhIGRvdCBib3RoIGluIHRoZSBleHBlY3RlIGFuZCBhY3R1YWwgb3V0cHV0CisJIyByZXBsYWNlIFNQIHdpdGggYSBkb3QgYm90aCBpbiB0aGUgZXhwZWN0ZWQgYW5kIGFjdHVhbCBvdXRwdXQKIAkjIHNvIHRoYXQgdGVzdF9jbXAgd291bGQgc2hvdyB0aGUgZGlmZmVyZW5jZSB0b2dldGhlciB3aXRoIHRoZQogCSMgYnJlYWthZ2UgaW4gYSB3YXkgZWFzaWVyIHRvIGNvbnN1bWUgYnkgdGhlIGRlYnVnZ2luZyB1c2VyLgogCXsKZGlmZiAtLWdpdCBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2ggYi90L3Q0MjE0LWxvZy1ncmFwaC1vY3RvcHVzLnNoCmluZGV4IDNhZThlNTEuLjQwZDI3ZGIgMTAwNzU1Ci0tLSBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2gKKysrIGIvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaApAQCAtMjYsMTUgKzI2LDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlLCBubyBjb2xvcicgJwogCWNhdCA+ZXhwZWN0LnVuY29sb3JlZCA8PC1cRU9GICYmCiAJKiBsZWZ0Ci0JfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKLQl8IHxcIFwgXAotCXwvIC8gLyAvCisJfCAqLS4gICBvY3RvcHVzLW1lcmdlCisJfC98XCBcCiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC00NywxNSArNDYsMTQgQEAKIAl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgogCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCiAJKiBsZWZ0Ci0JPFJFRD58PFJFU0VUPiAqPEJMVUU+LTxSRVNFVD48QkxVRT4tPFJFU0VUPjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCi0JPFJFRD58PFJFU0VUPiA8UkVEPnw8UkVTRVQ+PFlFTExPVz5cPFJFU0VUPiA8QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPgotCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+IDxZRUxMT1c+LzxSRVNFVD4gPEJMVUU+LzxSRVNFVD4gPE1BR0VOVEE+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICo8TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+CiAJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogNAogCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDxNQUdFTlRBPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgotCTxSRUQ+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAyCisJPFJFRD58PFJFU0VUPiAqIDxNQUdFTlRBPi88UkVTRVQ+IDIKIAk8UkVEPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KLQkqIDxNQUdFTlRBPnw8UkVTRVQ+IDEKKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKIAk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CiAJKiBpbml0aWFsCiAJRU9GCkBAIC03NCw5ICs3Miw5IEBACiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC05Miw5ICs5MCw5IEBACiAJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDQKIAk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8QkxVRT58PFJFU0VUPjxCTFVFPi88UkVTRVQ+Ci0JPFJFRD58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDIKKwk8UkVEPnw8UkVTRVQ+ICogPEJMVUU+LzxSRVNFVD4gMgogCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48QkxVRT4vPFJFU0VUPgotCSogPEJMVUU+fDxSRVNFVD4gMQorCSogPEJMVUU+LzxSRVNFVD4gMQogCTxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KIAkqIGluaXRpYWwKIAlFT0YKQEAgLTExMiw5ICsxMTAsOSBAQAogCXwgfCB8ICogNAogCXwgfCAqIHwgMwogCXwgfCB8LwotCXwgKiB8IDIKKwl8ICogLyAyCiAJfCB8LwotCSogfCAxCisJKiAvIDEKIAl8LwogCSogaW5pdGlhbAogCUVPRgpAQCAtMTIzLDcgKzEyMSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBhbmQgY2hpbGQgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbm9ybWFsIG9jdG9wdXMgYW5kIGNoaWxkIG1lcmdlIHdpdGggY29sb3JzJyAnCiAJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKIAkqIGFmdGVyLW1lcmdlCiAJKjxCTFVFPi08UkVTRVQ+PEJMVUU+LTxSRVNFVD48TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQpAQCAtMTMxLDkgKzEyOSw5IEBACiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA0CiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAzCiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgotCTxHUkVFTj58PFJFU0VUPiAqIDxNQUdFTlRBPnw8UkVTRVQ+IDIKKwk8R1JFRU4+fDxSRVNFVD4gKiA8TUFHRU5UQT4vPFJFU0VUPiAyCiAJPEdSRUVOPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KLQkqIDxNQUdFTlRBPnw8UkVTRVQ+IDEKKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKIAk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CiAJKiBpbml0aWFsCiAJRU9GCkBAIC0xNDcsMTUgKzE0NSwxNCBAQAogCWNhdCA+ZXhwZWN0LnVuY29sb3JlZCA8PC1cRU9GICYmCiAJKiBsZWZ0CiAJfCAqIGFmdGVyLW1lcmdlCi0JfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKLQl8IHxcIFwgXAotCXwvIC8gLyAvCisJfCAqLS4gICBvY3RvcHVzLW1lcmdlCisJfC98XCBcCiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC0xNjQsMjAgKzE2MSwxOSBAQAogCXRlc3RfY21wIGV4cGVjdC51bmNvbG9yZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xvZyAtLWdyYXBoIHdpdGggdHJpY2t5IG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB0cmlja3kgb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCiAJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKIAljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgogCSogbGVmdAogCTxSRUQ+fDxSRVNFVD4gKiBhZnRlci1tZXJnZQotCTxSRUQ+fDxSRVNFVD4gKjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48Q1lBTj4tPFJFU0VUPjxDWUFOPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQotCTxSRUQ+fDxSRVNFVD4gPFJFRD58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+IDxDWUFOPlw8UkVTRVQ+Ci0JPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD4gPEJMVUU+LzxSRVNFVD4gPE1BR0VOVEE+LzxSRVNFVD4gPENZQU4+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICo8Q1lBTj4tPFJFU0VUPjxDWUFOPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEJMVUU+fDxSRVNFVD48TUFHRU5UQT5cPFJFU0VUPiA8Q1lBTj5cPFJFU0VUPgogCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD4gKiA0CiAJPFJFRD58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiAqIDxDWUFOPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD4KLQk8UkVEPnw8UkVTRVQ+ICogPENZQU4+fDxSRVNFVD4gMgorCTxSRUQ+fDxSRVNFVD4gKiA8Q1lBTj4vPFJFU0VUPiAyCiAJPFJFRD58PFJFU0VUPiA8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+Ci0JKiA8Q1lBTj58PFJFU0VUPiAxCisJKiA8Q1lBTj4vPFJFU0VUPiAxCiAJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgogCSogaW5pdGlhbAogCUVPRgpAQCAtMjA5LDcgKzIwNSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJwogCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCiAJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKIAkqIGFmdGVyLTQKQEAgLTI1Nyw3ICsyNTMsNyBAQAogCXRlc3RfY21wIGV4cGVjdC51bmNvbG9yZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xvZyAtLWdyYXBoIHdpdGggY3Jvc3NvdmVyIGluIG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCiAJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKIAljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgogCSogYWZ0ZXItNApAQCAtMzUzLDcgKzM0OSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCB1bnJlbGF0ZWQgY29tbWl0IGFuZCBvY3RvcHVzIGNoaWxkIHdpdGggY29sb3JzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHVucmVsYXRlZCBjb21taXQgYW5kIG9jdG9wdXMgY2hpbGQgd2l0aCBjb2xvcnMnICcKIAl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgogCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCiAJKiBhZnRlci1pbml0aWFsCmRpZmYgLS1naXQgYS90L3Q0MjE1LWxvZy1za2V3ZWQtbWVyZ2VzLnNoIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODcwOWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApAQCAtMCwwICsxLDI0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBsb2cgLS1ncmFwaCBvZiBza2V3ZWQgbWVyZ2VzJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZ3JhcGggKCkgeworCWNhdCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tcHJldHR5PXRmb3JtYXQ6JXMgIiRAIiA+YWN0dWFsLnJhdyAmJgorCXNlZCAicy8gKiQvLyIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlIGZ1c2luZyB3aXRoIGl0cyBsZWZ0IGFuZCByaWdodCBuZWlnaGJvcnMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gX3AgJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCAtYiBfcSBAXiAmJiB0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIF9yIEBeICYmIHRlc3RfY29tbWl0IEQgJiYKKwlnaXQgY2hlY2tvdXQgX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgX3EgX3IgLW0gRSAmJgorCWdpdCBjaGVja291dCBfciAmJiB0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IGNoZWNrb3V0IF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9yIC1tIEcgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9wIC1tIEggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgSAorCXxcCisJfCAqICAgRworCXwgfFwKKwl8IHwgKiBGCisJfCAqIHwgRQorCXwvfFx8CisJfCB8ICogRAorCXwgKiB8IEMKKwl8IHwvCisJKiAvIEIKKwl8LworCSogQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGxlZnQtc2tld2VkIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0EgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9xIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0IgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9yIDBfcCAmJgorCXRlc3RfY29tbWl0IDBfQyAmJgorCXRlc3RfY29tbWl0IDBfRCAmJgorCWdpdCBjaGVja291dCAtYiAwX3MgMF9wICYmIHRlc3RfY29tbWl0IDBfRSAmJgorCWdpdCBjaGVja291dCAtYiAwX3QgMF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDBfcl4gMF9zIC1tIDBfRiAmJgorCWdpdCBjaGVja291dCAwX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMF9zIC1tIDBfRyAmJgorCWdpdCBjaGVja291dCBAXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiAwX3EgMF9yIDBfdCAwX3AgLW0gMF9IICYmCisKKwljaGVja19ncmFwaCA8PC1cRU9GCisJKi0tLS0tLiAgIDBfSAorCXxcIFwgXCBcCisJfCB8IHwgfCAqIDBfRworCXwgfF98X3wvfAorCXwvfCB8IHwgfAorCXwgfCB8ICogfCAwX0YKKwl8IHxffC98XHwKKwl8L3wgfCB8IHwKKwl8IHwgfCB8ICogMF9FCisJfCB8X3xffC8KKwl8L3wgfCB8CisJfCB8ICogfCAwX0QKKwl8IHwgfC8KKwl8IHwgKiAwX0MKKwl8IHwvCisJfC98CisJfCAqIDBfQgorCXwvCisJKiAwX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gMV9wICYmCisJdGVzdF9jb21taXQgMV9BICYmCisJdGVzdF9jb21taXQgMV9CICYmCisJdGVzdF9jb21taXQgMV9DICYmCisJZ2l0IGNoZWNrb3V0IC1iIDFfcSBAXiAmJiB0ZXN0X2NvbW1pdCAxX0QgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcSAtbSAxX0UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMV9yIEB+MyAmJiB0ZXN0X2NvbW1pdCAxX0YgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfciAtbSAxX0cgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcCAtbSAxX0ggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMV9ICisJfFwKKwl8ICogICAxX0cKKwl8IHxcCisJfCB8ICogMV9GCisJfCAqIHwgMV9FCisJfC98IHwKKwl8ICogfCAxX0QKKwkqIHwgfCAxX0MKKwl8LyAvCisJKiAvIDFfQgorCXwvCisJKiAxX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UgZm9sbG93aW5nIG5vcm1hbCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAyX3AgJiYKKwl0ZXN0X2NvbW1pdCAyX0EgJiYKKwl0ZXN0X2NvbW1pdCAyX0IgJiYKKwl0ZXN0X2NvbW1pdCAyX0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMl9xIEBeXiAmJgorCXRlc3RfY29tbWl0IDJfRCAmJgorCXRlc3RfY29tbWl0IDJfRSAmJgorCWdpdCBjaGVja291dCAtYiAyX3IgQF4gJiYgdGVzdF9jb21taXQgMl9GICYmCisJZ2l0IGNoZWNrb3V0IDJfcSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDJfciAtbSAyX0cgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAyX3BeIC1tIDJfSCAmJgorCWdpdCBjaGVja291dCAtYiAyX3MgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcSAtbSAyX0ogJiYKKwlnaXQgY2hlY2tvdXQgMl9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcyAtbSAyX0sgJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMl9LCisJfFwKKwl8ICogICAyX0oKKwl8IHxcCisJfCB8ICogICAyX0gKKwl8IHwgfFwKKwl8IHwgKiB8IDJfRworCXwgfC98IHwKKwl8IHwgKiB8IDJfRgorCXwgKiB8IHwgMl9FCisJfCB8LyAvCisJfCAqIHwgMl9ECisJKiB8IHwgMl9DCisJfCB8LworCXwvfAorCSogfCAyX0IKKwl8LworCSogMl9BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbmVzdGVkIHJpZ2h0LXNrZXdlZCBtZXJnZSBmb2xsb3dpbmcgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gM19wICYmCisJdGVzdF9jb21taXQgM19BICYmCisJZ2l0IGNoZWNrb3V0IC1iIDNfcSAmJgorCXRlc3RfY29tbWl0IDNfQiAmJgorCXRlc3RfY29tbWl0IDNfQyAmJgorCWdpdCBjaGVja291dCAtYiAzX3IgQF4gJiYKKwl0ZXN0X2NvbW1pdCAzX0QgJiYKKwlnaXQgY2hlY2tvdXQgM19xICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfciAtbSAzX0UgJiYKKwlnaXQgY2hlY2tvdXQgM19wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfcSAtbSAzX0YgJiYKKwlnaXQgY2hlY2tvdXQgM19yICYmIHRlc3RfY29tbWl0IDNfRyAmJgorCWdpdCBjaGVja291dCAzX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19yIC1tIDNfSCAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19wIC1tIDNfSiAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAzX0oKKwl8XAorCXwgKiAgIDNfSAorCXwgfFwKKwl8IHwgKiAzX0cKKwl8ICogfCAzX0YKKwl8L3wgfAorCXwgKiB8IDNfRQorCXwgfFx8CisJfCB8ICogM19ECisJfCAqIHwgM19DCisJfCB8LworCXwgKiAzX0IKKwl8LworCSogM19BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggcmlnaHQtc2tld2VkIG1lcmdlIGZvbGxvd2luZyBhIGxlZnQtc2tld2VkIG9uZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA0X3AgJiYKKwl0ZXN0X2NvbW1pdCA0X0EgJiYKKwl0ZXN0X2NvbW1pdCA0X0IgJiYKKwl0ZXN0X2NvbW1pdCA0X0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9xIEBeXiAmJiB0ZXN0X2NvbW1pdCA0X0QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9yIDRfcF4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9xIC1tIDRfRSAmJgorCWdpdCBjaGVja291dCAtYiA0X3MgNF9wXl4gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA0X3IgLW0gNF9GICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNF9wIC1tIDRfRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9zIC1tIDRfSCAmJgorCisJY2hlY2tfZ3JhcGggLS1kYXRlLW9yZGVyIDw8LVxFT0YKKwkqICAgNF9ICisJfFwKKwl8ICogICA0X0cKKwl8IHxcCisJfCAqIHwgNF9GCisJfC98IHwKKwl8ICogfCAgIDRfRQorCXwgfFwgXAorCXwgfCAqIHwgNF9ECisJfCB8LyAvCisJfC98IHwKKwl8IHwgKiA0X0MKKwl8IHwvCisJfCAqIDRfQgorCXwvCisJKiA0X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBvY3RvcHVzIG1lcmdlIHdpdGggY29sdW1uIGpvaW5pbmcgaXRzIHBlbnVsdGltYXRlIHBhcmVudCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA1X3AgJiYKKwl0ZXN0X2NvbW1pdCA1X0EgJiYKKwlnaXQgYnJhbmNoIDVfcSAmJgorCWdpdCBicmFuY2ggNV9yICYmCisJdGVzdF9jb21taXQgNV9CICYmCisJZ2l0IGNoZWNrb3V0IDVfcSAmJiB0ZXN0X2NvbW1pdCA1X0MgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmIHRlc3RfY29tbWl0IDVfRCAmJgorCWdpdCBjaGVja291dCA1X3AgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3EgNV9yIC1tIDVfRSAmJgorCWdpdCBjaGVja291dCA1X3EgJiYgdGVzdF9jb21taXQgNV9GICYmCisJZ2l0IGNoZWNrb3V0IC1iIDVfcyA1X3BeICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9wIDVfcSAtbSA1X0cgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9zIC1tIDVfSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICA1X0gKKwl8XAorCXwgKi0uICAgNV9HCisJfCB8XCBcCisJfCB8IHwgKiA1X0YKKwl8IHwgKiB8ICAgNV9FCisJfCB8L3xcIFwKKwl8IHxffC8gLworCXwvfCB8IC8KKwl8IHwgfC8KKwkqIHwgfCA1X0QKKwl8IHwgKiA1X0MKKwl8IHwvCisJfC98CisJfCAqIDVfQgorCXwvCisJKiA1X0EKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaCBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCmluZGV4IDg1MmRjZDkuLjFhZDRlY2MgMTAwNzU1Ci0tLSBhL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCisrKyBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCkBAIC00LDYgKzQsMTIgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHJlcXVlc3QtcHVsbCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKIAogCWdpdCBpbml0IC0tYmFyZSB1cHN0cmVhbS5naXQgJiYKZGlmZiAtLWdpdCBhL3QvdDUzMTQtcGFjay1jeWNsZS1kZXRlY3Rpb24uc2ggYi90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoCmluZGV4IGU1MjU0NjYuLjBhZWM4NjEgMTAwNzU1Ci0tLSBhL3QvdDUzMTQtcGFjay1jeWNsZS1kZXRlY3Rpb24uc2gKKysrIGIvdC90NTMxNC1wYWNrLWN5Y2xlLWRldGVjdGlvbi5zaApAQCAtNTMsNyArNTMsNyBAQAogCiAKIAotIyBDcmVhdGUgYSBwYWNrIGNvbnRhaW5pbmcgdGhlIHRoZSB0cmVlICQxIGFuZCBibG9iICQxOmZpbGUsIHdpdGgKKyMgQ3JlYXRlIGEgcGFjayBjb250YWluaW5nIHRoZSB0cmVlICQxIGFuZCBibG9iICQxOmZpbGUsIHdpdGgKICMgdGhlIGxhdHRlciBzdG9yZWQgYXMgYSBkZWx0YSBhZ2FpbnN0ICQyOmZpbGUuCiAjCiAjIFdlIGNvbnZpbmNlIHBhY2stb2JqZWN0cyB0byBtYWtlIHRoZSBkZWx0YSBpbiB0aGUgZGlyZWN0aW9uIG9mIG91ciBjaG9vc2luZwpkaWZmIC0tZ2l0IGEvdC90NTMxNy1wYWNrLW9iamVjdHMtZmlsdGVyLW9iamVjdHMuc2ggYi90L3Q1MzE3LXBhY2stb2JqZWN0cy1maWx0ZXItb2JqZWN0cy5zaAppbmRleCAyZDJmNWQwLi5kYzA0NDY1IDEwMDc1NQotLS0gYS90L3Q1MzE3LXBhY2stb2JqZWN0cy1maWx0ZXItb2JqZWN0cy5zaAorKysgYi90L3Q1MzE3LXBhY2stb2JqZWN0cy1maWx0ZXItb2JqZWN0cy5zaApAQCAtNDUsMTIgKzQ1LDcgQEAKIAlnaXQgLUMgcjEgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgogCiAJZ2l0IC1DIHIxIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCi0JZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAotCWF3ayAtZiBwcmludF8xLmF3ayB8Ci0Jc29ydCA+b2JzZXJ2ZWQgJiYKLQotCW5yPSQod2MgLWwgPG9ic2VydmVkKSAmJgotCXRlc3QgMCAtZXEgJG5yCisJISBncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm9ybWFsIGFuZCBibG9iOm5vbmUgcGFja2ZpbGVzIGhhdmUgc2FtZSBjb21taXRzL3RyZWVzJyAnCkBAIC03Miw3ICs2Nyw4IEBACiAJZWNobyBmb28gPnI1L2ZvbyAmJgogCWdpdCAtQyByNSBhZGQgZm9vICYmCiAJZ2l0IC1DIHI1IGNvbW1pdCAtbSAiZm9vIiAmJgotCWRlbD0kKGdpdCAtQyByNSByZXYtcGFyc2UgSEVBRF57dHJlZX0gfCBzZWQgInN8Li58Ji98IikgJiYKKwlnaXQgLUMgcjUgcmV2LXBhcnNlIEhFQURee3RyZWV9ID50cmVlICYmCisJZGVsPSQoc2VkICJzfC4ufCYvfCIgdHJlZSkgJiYKIAlybSByNS8uZ2l0L29iamVjdHMvJGRlbCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByNSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IDI+YmFkX3RyZWUgPDwtRU9GICYmCiAJSEVBRApAQCAtMTQ4LDEyICsxNDQsNyBAQAogCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCiAKIAlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKLQlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8Ci0JYXdrIC1mIHByaW50XzEuYXdrIHwKLQlzb3J0ID5vYnNlcnZlZCAmJgotCi0JbnI9JCh3YyAtbCA8b2JzZXJ2ZWQpICYmCi0JdGVzdCAwIC1lcSAkbnIKKwkhIGdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDAnICcKQEAgLTE2MywxMiArMTU0LDcgQEAKIAlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgogCiAJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCi0JZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAotCWF3ayAtZiBwcmludF8xLmF3ayB8Ci0Jc29ydCA+b2JzZXJ2ZWQgJiYKLQotCW5yPSQod2MgLWwgPG9ic2VydmVkKSAmJgotCXRlc3QgMCAtZXEgJG5yCisJISBncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xMDAxJyAnCkBAIC0yMzAsMTAgKzIxNiw5IEBACiAJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CiAJc29ydCA+ZXhwZWN0ZWQgJiYKIAotCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MWsgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgotCUhFQUQKLQkkKGdpdCAtQyByMiByZXYtcGFyc2UgSEVBRDpsYXJnZS4xMDAwMCkKLQlFT0YKKwllY2hvIEhFQUQgPm9iamVjdHMgJiYKKwlnaXQgLUMgcjIgcmV2LXBhcnNlIEhFQUQ6bGFyZ2UuMTAwMDAgPj5vYmplY3RzICYmCisJZ2l0IC1DIHIyIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9YmxvYjpsaW1pdD0xayA8b2JqZWN0cyA+ZmlsdGVyLnBhY2sgJiYKIAlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgogCiAJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCkBAIC0zNzcsNyArMzYyLDggQEAKIAlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKIAlzb3J0ID5leHBlY3RlZCAmJgogCi0Jb2lkPSQoZ2l0IC1DIHI0IGxzLWZpbGVzIC1zIHBhdHRlcm4gfCBhd2sgLWYgcHJpbnRfMi5hd2spICYmCisJZ2l0IC1DIHI0IGxzLWZpbGVzIC1zIHBhdHRlcm4gPnN0YWdlZCAmJgorCW9pZD0kKGF3ayAtZiBwcmludF8yLmF3ayBzdGFnZWQpICYmCiAJZ2l0IC1DIHI0IHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9c3BhcnNlOm9pZD0kb2lkID5maWx0ZXIucGFjayA8PC1FT0YgJiYKIAlIRUFECiAJRU9GCmRpZmYgLS1naXQgYS90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaCBiL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCmluZGV4IGQ0MmIzZWYuLjNmMDNkZTYgMTAwNzU1Ci0tLSBhL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCisrKyBiL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCkBAIC04NSw3ICs4NSw3IEBACiAJbnVtX2NvbW1pdHM6ICQxCiAJY2h1bmtzOiBvaWRfZmFub3V0IG9pZF9sb29rdXAgY29tbWl0X21ldGFkYXRhJE9QVElPTkFMCiAJRU9GCi0JZ2l0IGNvbW1pdC1ncmFwaCByZWFkID5vdXRwdXQgJiYKKwl0ZXN0LXRvb2wgcmVhZC1ncmFwaCA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHdyaXRlIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKIAljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgotCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1wcm9ncmVzcyAyPmVyciAmJgorCUdJVF9QUk9HUkVTU19ERUxBWT0wIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1wcm9ncmVzcyAyPmVyciAmJgogCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCiAnCiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggdmVyaWZ5IGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKIAljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgotCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwlHSVRfUFJPR1JFU1NfREVMQVk9MCBnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXByb2dyZXNzIDI+ZXJyICYmCiAJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKICcKIApAQCAtNjYwLDcgKzY2MCw3IEBACiAJCWdpdCBjb21taXQtdHJlZSAtcCAiJGJyb2tlbiIgLW0gImdvb2QiICIkdHJlZSIgPmdvb2QgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgXAogCQkJPGdvb2QgMj50ZXN0X2VyciAmJgotCQl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gZ2V0IHRyZWUgZm9yIiB0ZXN0X2VycgorCQl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IiB0ZXN0X2VycgogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoIGIvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCmluZGV4IGM3MmNhMDQuLmNkMmY4N2IgMTAwNzU1Ci0tLSBhL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaAorKysgYi90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2gKQEAgLTE0Nyw2ICsxNDcsMjEgQEAKIAogY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAidHdvIHBhY2tzIgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgd3JpdGUgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyB3cml0ZSAyPmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1uby1wcm9ncmVzcyB3cml0ZSAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtb3JlIHBhY2tzJyAnCiAJZm9yIGogaW4gJCh0ZXN0X3NlcSAxMSAyMCkKIAlkbwpAQCAtMTY5LDYgKzE4NCwyMSBAQAogCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpcgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpciAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1uby1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKICMgdXNhZ2U6IGNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5IDxwb3M+IDxkYXRhPiA8b2JqZGlyPiA8c3RyaW5nPgogY29ycnVwdF9taWR4X2FuZF92ZXJpZnkoKSB7CiAJUE9TPSQxICYmCkBAIC0yODQsNiArMzE0LDIxIEBACiAJCSJnaXQgLWMgY29yZS5tdWx0aXBhY2tpbmRleD10cnVlIGZzY2siCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgcmVwYWNrIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLXByb2dyZXNzIHJlcGFjayAyPmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tbm8tcHJvZ3Jlc3MgcmVwYWNrIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHJlbW92ZXMgbXVsdGktcGFjay1pbmRleCcgJwogCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvcGFjay9tdWx0aS1wYWNrLWluZGV4ICYmCiAJR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWD0wIGdpdCByZXBhY2sgLWFkZiAmJgpAQCAtNDEzLDYgKzQ1OCwzMCBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgMj5lcnIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggLS1wcm9ncmVzcyBleHBpcmUgMj5lcnIgJiYKKwkJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tbm8tcHJvZ3Jlc3MgZXhwaXJlIDI+ZXJyICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgcmVtb3ZlcyB1bnJlZmVyZW5jZWQgcGFja3MnICcKIAkoCiAJCWNkIGR1cCAmJgpkaWZmIC0tZ2l0IGEvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaAppbmRleCAxMTVhYWJkLi5jMjQ4MjM0IDEwMDc1NQotLS0gYS90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaAorKysgYi90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaApAQCAtMjUsNyArMjUsNyBAQAogCW51bV9jb21taXRzOiAkMQogCWNodW5rczogb2lkX2Zhbm91dCBvaWRfbG9va3VwIGNvbW1pdF9tZXRhZGF0YQogCUVPRgotCWdpdCBjb21taXQtZ3JhcGggcmVhZCA+b3V0cHV0ICYmCisJdGVzdC10b29sIHJlYWQtZ3JhcGggPm91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIH0KIApkaWZmIC0tZ2l0IGEvdC90NTUxMi1scy1yZW1vdGUuc2ggYi90L3Q1NTEyLWxzLXJlbW90ZS5zaAppbmRleCA0M2UxZDhkLi5kN2I5ZjkwIDEwMDc1NQotLS0gYS90L3Q1NTEyLWxzLXJlbW90ZS5zaAorKysgYi90L3Q1NTEyLWxzLXJlbW90ZS5zaApAQCAtMjY3LDcgKzI2Nyw3IEBACiAnCiAKIHRlc3RfbGF6eV9wcmVyZXEgR0lUX0RBRU1PTiAnCi0JZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIEdJVF9URVNUX0dJVF9EQUVNT04KKwl0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dJVF9EQUVNT04gdHJ1ZQogJwogCiAjIFRoaXMgdGVzdCBzcGF3bnMgYSBkYWVtb24sIHNvIHJ1biBpdCBvbmx5IGlmIHRoZSB1c2VyIHdvdWxkIGJlIE9LIHdpdGgKZGlmZiAtLWdpdCBhL3QvdDU1MjAtcHVsbC5zaCBiL3QvdDU1MjAtcHVsbC5zaAppbmRleCBjZjRjYzMyLi42MDJkOTk2IDEwMDc1NQotLS0gYS90L3Q1NTIwLXB1bGwuc2gKKysrIGIvdC90NTUyMC1wdWxsLnNoCkBAIC01LDcgKzUsNyBAQAogLiAuL3Rlc3QtbGliLnNoCiAKIG1vZGlmeSAoKSB7Ci0Jc2VkIC1lICIkMSIgPCIkMiIgPiIkMi54IiAmJgorCXNlZCAtZSAiJDEiICIkMiIgPiIkMi54IiAmJgogCW12ICIkMi54IiAiJDIiCiB9CiAKQEAgLTE1LDggKzE1LDEwIEBACiAJZ2l0IGFkZCBuZXdfZmlsZSAmJgogCWdpdCBwdWxsICIkQCIgLiBjb3B5ICYmCiAJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKLQl0ZXN0ICIkKGNhdCBuZXdfZmlsZSkiID0gZGlydHkgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSAibW9kaWZpZWQgYWdhaW4iCisJZWNobyBkaXJ0eSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG5ld19maWxlICYmCisJZWNobyAibW9kaWZpZWQgYWdhaW4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQogfQogCiB0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgKCkgewpAQCAtMzksOCArNDEsOCBAQAogCQljZCBjbG9uZWQgJiYKIAkJZ2l0IHB1bGwgLi4KIAkpICYmCi0JdGVzdCAtZiBmaWxlICYmCi0JdGVzdCAtZiBjbG9uZWQvZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjbG9uZWQvZmlsZSAmJgogCXRlc3RfY21wIGZpbGUgY2xvbmVkL2ZpbGUKICcKIApAQCAtNTAsOCArNTIsOCBAQAogCQljZCBjbG9uZWQtdWhvICYmCiAJCWdpdCBwdWxsIC4uIG1hc3RlcjptYXN0ZXIKIAkpICYmCi0JdGVzdCAtZiBmaWxlICYmCi0JdGVzdCAtZiBjbG9uZWQtdWhvL2ZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgY2xvbmVkLXVoby9maWxlICYmCiAJdGVzdF9jbXAgZmlsZSBjbG9uZWQtdWhvL2ZpbGUKICcKIApAQCAtOTksNyArMTAxLDcgQEAKIAkoCiAJCWNkIGNsb25lZC1vY3RvcHVzICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4uIG1hc3RlciBtYXN0ZXIgJiYKLQkJISB0ZXN0IC1mIGZpbGUKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZQogCSkKICcKIApAQCAtMTEwLDkgKzExMiwxMSBAQAogCWVjaG8gdXBkYXRlZCA+ZmlsZSAmJgogCWdpdCBjb21taXQgLWEgLW0gdXBkYXRlZCAmJgogCWdpdCBjaGVja291dCBjb3B5ICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAlnaXQgcHVsbCAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IHVwZGF0ZWQgJiYKKwllY2hvIHVwZGF0ZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgogCXNlZCAicy9eWzAtOWEtZl1bMC05YS1mXSovT0JKSUQvIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKIAllY2hvICJPQkpJRCBIRUFEQHswfTogcHVsbDogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCkBAIC0xMjUsOSArMTI5LDExIEBACiAJZ2l0IGNvbW1pdCAtYSAtbSBtb2RpZmllZCAmJgogCWdpdCBjaGVja291dCBjb3B5ICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJZ2l0IHB1bGwgLiBzZWNvbmQgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBtb2RpZmllZCAmJgorCWVjaG8gbW9kaWZpZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgogCXNlZCAicy9eWzAtOWEtZl1bMC05YS1mXSovT0JKSUQvIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKIAllY2hvICJPQkpJRCBIRUFEQHswfTogcHVsbCAuIHNlY29uZDogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCkBAIC0xMzcsMTAgKzE0MywxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB3aWxkY2FyZCBzcGVjIGRvZXMgbm90IG1hdGNoIGFueSByZWZzJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgY29weV4gJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGVzdCIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gInJlZnMvbm9uZXhpc3RpbmcxLyo6cmVmcy9ub25leGlzdGluZzIvKiIgMj5lcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBubyBicmFuY2hlcyBzcGVjaWZpZWQgd2l0aCBub24tZGVmYXVsdCByZW1vdGUnICcKQEAgLTE0OCwxMSArMTU1LDEyIEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSB0ZXN0X3JlbW90ZSIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIG9yaWdpbiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIHRlc3RfcmVtb3RlIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAic3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBub3Qgb24gYSBicmFuY2gnICcKQEAgLTE2MCwxMCArMTY4LDExIEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4iICYmCiAJZ2l0IGNoZWNrb3V0IEhFQUReICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAibm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaCIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZQorCXRlc3RfY21wIGV4cGVjdCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm8gY29uZmlndXJhdGlvbiBmb3IgY3VycmVudCBicmFuY2gnICcKQEAgLTE3MiwxMCArMTgxLDExIEBACiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgY29weV4gJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGVzdCIgJiYKIAl0ZXN0X2NvbmZpZyBicmFuY2gudGVzdC5yZW1vdGUgdGVzdF9yZW1vdGUgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAibm8gdHJhY2tpbmcgaW5mb3JtYXRpb24iIGVyciAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYWxsOiBmYWlsIGlmIG5vIGNvbmZpZ3VyYXRpb24gZm9yIGN1cnJlbnQgYnJhbmNoJyAnCkBAIC0xODQsMTAgKzE5NCwxMSBAQAogCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIHRlc3RfcmVtb3RlICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWFsbCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB1cHN0cmVhbSBicmFuY2ggZG9lcyBub3QgZXhpc3QnICcKQEAgLTE5NSwyNiArMjA2LDMxIEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIC4gJiYKIAl0ZXN0X2NvbmZpZyBicmFuY2gudGVzdC5tZXJnZSByZWZzL2hlYWRzL25vbmV4aXN0aW5nICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIm5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB0aGUgaW5kZXggaGFzIHVucmVzb2x2ZWQgZW50cmllcycgJwogCWdpdCBjaGVja291dCAtYiB0aGlyZCBzZWNvbmReICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRoaXJkIiAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJdGVzdF9jb21taXQgbW9kaWZpZWQyIGZpbGUgJiYKLQl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJZ2l0IGxzLWZpbGVzIC11ID51bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bm1lcmdlZCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kICYmCi0JdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCBscy1maWxlcyAtdSA+dW5tZXJnZWQgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IHVubWVyZ2VkICYmCiAJY3AgZmlsZSBleHBlY3RlZCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iIGVyciAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJZ2l0IGxzLWZpbGVzIC11ID51bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bm1lcmdlZCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIiBlcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCkBAIC0yMjMsMzYgKzIzOSw0MiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkcyB3b3JraW5nIHRyZWUgaWYgYnJhbmNoIGhlYWQgaXMgdXBkYXRlZCcgJwogCWdpdCBjaGVja291dCAtYiB0aGlyZCBzZWNvbmReICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRoaXJkIiAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJZ2l0IHB1bGwgLiBzZWNvbmQ6dGhpcmQgMj5lcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBtb2RpZmllZCAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIgorCWVjaG8gbW9kaWZpZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJdGVzdF9jbXBfcmV2IHRoaXJkIHNlY29uZAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgZmFpbHMgd2l0aCBjb25mbGljdGluZyB3b3JrIHRyZWUnICcKIAlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCWVjaG8gY29uZmxpY3QgPmZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZDp0aGlyZCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUiIGVyciAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGNvbmZsaWN0ICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIHRoaXJkKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiCisJZWNobyBjb25mbGljdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X2NtcF9yZXYgdGhpcmQgc2Vjb25kCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlJyAnCiAJZ2l0IGJyYW5jaCB0by1yZWJhc2UgJiYKLQllY2hvIG1vZGlmaWVkIGFnYWluID4gZmlsZSAmJgorCWVjaG8gbW9kaWZpZWQgYWdhaW4gPmZpbGUgJiYKIAlnaXQgY29tbWl0IC1tIGZpbGUgZmlsZSAmJgogCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKLQllY2hvIG5ldyA+IGZpbGUyICYmCisJZWNobyBuZXcgPmZpbGUyICYmCiAJZ2l0IGFkZCBmaWxlMiAmJgogCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIiAmJgogCWdpdCB0YWcgYmVmb3JlLXJlYmFzZSAmJgogCWdpdCBwdWxsIC0tcmViYXNlIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UgZmFzdCBmb3J3YXJkJyAnCkBAIC0yNjMsNyArMjg1LDcgQEAKIAogCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAuIGZmICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgZmYpIiAmJgorCXRlc3RfY21wX3JldiBIRUFEIGZmICYmCiAKIAkjIFRoZSBhYm92ZSBvbmx5IHZhbGlkYXRlcyB0aGUgcmVzdWx0LiAgRGlkIHdlIGFjdHVhbGx5IGJ5cGFzcyByZWJhc2U/CiAJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgpAQCAtMjg3LDcgKzMwOSw3IEBACiAJZ2l0IGNoZWNrb3V0IGJlaGluZCAmJgogCWVjaG8gZGlydHkgPmZpbGUgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAtLWF1dG9zdGFzaCAuIHRvLXJlYmFzZS1mZiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZS1mZikiCisJdGVzdF9jbXBfcmV2IEhFQUQgdG8tcmViYXNlLWZmCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggY29uZmxpY3RzIHNob3dzIGFkdmljZScgJwpAQCAtMzI1LDkgKzM0NywxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UgZmFpbHMgd2l0aCBtdWx0aXBsZSBicmFuY2hlcycgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlIC4gY29weSBtYXN0ZXIgMj5lcnIgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBiZWZvcmUtcmViYXNlKSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBiZWZvcmUtcmViYXNlICYmCiAJdGVzdF9pMThuZ3JlcCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzIiBlcnIgJiYKLQl0ZXN0IG1vZGlmaWVkID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlKSIKKwllY2hvIG1vZGlmaWVkID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBzdWNjZWVkcyB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCByZWJhc2UuYXV0b3N0YXNoIHNldCcgJwpAQCAtMzc3LDggKzQwMSwxMCBAQAogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1hdXRvc3Rhc2ggJiBwdWxsLnJlYmFzZT10cnVlJyAnCkBAIC0zOTUsOCArNDIxLDEwIEBACiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgogCWdpdCBwdWxsIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2Ugc2hvdWxkIG92ZXJyaWRlIHB1bGwucmViYXNlJyAnCkBAIC00MDQsMjMgKzQzMiwyOSBAQAogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKIAl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSBmYWxzZSAmJgogCWdpdCBwdWxsIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiICE9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKwl0ZXN0X2NtcF9yZXYgISBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVsbCAtLXJlYmFzZSB3YXJucyBvbiAtLXZlcmlmeS1zaWduYXR1cmVzIiAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIHdhcm5zIG9uIC0tdmVyaWZ5LXNpZ25hdHVyZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAtLXZlcmlmeS1zaWduYXR1cmVzIC4gY29weSAyPmVyciAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIiAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiIGVycgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIC0tcmViYXNlIGRvZXMgbm90IHdhcm4gb24gLS1uby12ZXJpZnktc2lnbmF0dXJlcyIgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBkb2VzIG5vdCB3YXJuIG9uIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAtLW5vLXZlcmlmeS1zaWduYXR1cmVzIC4gY29weSAyPmVyciAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIiAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAl0ZXN0X2kxOG5ncmVwICEgInZlcmlmeS1zaWduYXR1cmVzIiBlcnIKICcKIApAQCAtNDQwLDI1ICs0NzQsMzEgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBmYWxzZSAmJgogCWdpdCBwdWxsIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSkiICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IGZpbGUzID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMy50KSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF4xIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9dHJ1ZSBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgogCWdpdCBwdWxsIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPTEgaXMgdHJlYXRlZCBhcyB0cnVlIGFuZCBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgMSAmJgogCWdpdCBwdWxsIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgXApAQCAtNDY2LDggKzUwNiw4IEBACiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgcHJlc2VydmUgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2Uga2VlcC1tZXJnZSkiCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBrZWVwLW1lcmdlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWludGVyYWN0aXZlJyAnCkBAIC00NzgsNyArNTE4LDggQEAKIAl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZS1lZGl0b3IiICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlPWludGVyYWN0aXZlIC4gY29weSAmJgotCXRlc3QgIkkgd2FzIGhlcmUiID0gIiQoY2F0IGZha2Uub3V0KSIKKwllY2hvICJJIHdhcyBoZXJlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZha2Uub3V0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2U9aScgJwpAQCAtNDg5LDMwICs1MzAsMzUgQEAKIAl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZS1lZGl0b3IiICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlPWkgLiBjb3B5ICYmCi0JdGVzdCAiSSB3YXMgaGVyZSwgdG9vIiA9ICIkKGNhdCBmYWtlLm91dCkiCisJZWNobyAiSSB3YXMgaGVyZSwgdG9vIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZha2Uub3V0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWludmFsaWQgZmFpbHMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBpbnZhbGlkICYmCi0JISBnaXQgcHVsbCAuIGNvcHkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIGNvcHkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2U9ZmFsc2UgY3JlYXRlIGEgbmV3IG1lcmdlIGNvbW1pdCcgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZT1mYWxzZSAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UpIiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisJdGVzdF9jbXBfcmV2IEhFQUReMSBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPXRydWUgcmViYXNlcyBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2U9dHJ1ZSAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKQEAgLTUyMCw1OCArNTY2LDYyIEBACiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgogCWdpdCBwdWxsIC0tcmViYXNlPXByZXNlcnZlIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBrZWVwLW1lcmdlKSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yIGtlZXAtbWVyZ2UKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2U9aW52YWxpZCBmYWlscycgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgotCSEgZ2l0IHB1bGwgLS1yZWJhc2U9aW52YWxpZCAuIGNvcHkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZT1pbnZhbGlkIC4gY29weQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSBvdmVycmlkZXMgcHVsbC5yZWJhc2U9cHJlc2VydmUgYW5kIGZsYXR0ZW5zIGtlZXAtbWVyZ2UnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBwcmVzZXJ2ZSAmJgogCWdpdCBwdWxsIC0tcmViYXNlIC4gY29weSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggcmViYXNlZCB1cHN0cmVhbScgJwotCiAJZ2l0IHJlbW90ZSBhZGQgLWYgbWUgLiAmJgogCWdpdCBjaGVja291dCBjb3B5ICYmCiAJZ2l0IHRhZyBjb3B5LW9yaWcgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCi0JZWNobyBjb25mbGljdGluZyBtb2RpZmljYXRpb24gPiBmaWxlICYmCisJZWNobyBjb25mbGljdGluZyBtb2RpZmljYXRpb24gPmZpbGUgJiYKIAlnaXQgY29tbWl0IC1tIGNvbmZsaWN0IGZpbGUgJiYKIAlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCi0JZWNobyBmaWxlID4gZmlsZTIgJiYKKwllY2hvIGZpbGUgPmZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSB0by1yZWJhc2UgZmlsZTIgJiYKIAlnaXQgdGFnIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgbWUgY29weSAmJgotCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCi0JdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKLQorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UgLWYgd2l0aCByZWJhc2VkIHVwc3RyZWFtJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAtZiBtZSBjb3B5ICYmCi0JdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKLQl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIGRlZmF1bHQgdXBzdHJlYW0nICcKLQogCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgogCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTIgbWUvY29weSAmJgogCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAmJgotCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCi0JdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKLQorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlZCB1cHN0cmVhbSArIGZldGNoICsgcHVsbCAtLXJlYmFzZScgJwpAQCAtNTgyLDEzICs2MzIsMTQgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IGZldGNoICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKLQl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgotCXRlc3QgZmlsZSA9ICIkKGNhdCBmaWxlMikiCisJZWNobyAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgogCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZGllcyBlYXJseSB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCi0KIAlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weV4gJiYKIAlDT1BZPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkiICYmCkBAIC01OTYsMjMgKzY0NywyMyBAQAogCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmVtb3RlIG1lICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5tZXJnZSByZWZzL2hlYWRzL2NvcHkgJiYKIAl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCi0JZWNobyBkaXJ0eSA+PiBmaWxlICYmCisJZWNobyBkaXJ0eSA+PmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAmJgotCXRlc3QgIiRDT1BZIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkiICYmCisJdGVzdF9jbXBfcmV2ICIkQ09QWSIgbWUvY29weSAmJgogCWdpdCBjaGVja291dCBIRUFEIC0tIGZpbGUgJiYKIAlnaXQgcHVsbCAmJgotCXRlc3QgIiRDT1BZIiAhPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIgotCisJdGVzdF9jbXBfcmV2ICEgIiRDT1BZIiBtZS9jb3B5CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugd29ya3Mgb24gYnJhbmNoIHlldCB0byBiZSBib3JuJyAnCiAJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdCAmJgogCW1rZGlyIGVtcHR5X3JlcG8gJiYKLQkoY2QgZW1wdHlfcmVwbyAmJgotCSBnaXQgaW5pdCAmJgotCSBnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgJiYKLQkgZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9hY3R1YWwKKwkoCisJCWNkIGVtcHR5X3JlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHB1bGwgLS1yZWJhc2UgLi4gbWFzdGVyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vYWN0dWFsCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTYyNCwxMCArNjc1LDE0IEBACiAJCWNkIGVtcHR5X3JlcG8yICYmCiAJCWVjaG8gc3RhZ2VkLWZpbGUgPnN0YWdlZC1maWxlICYmCiAJCWdpdCBhZGQgc3RhZ2VkLWZpbGUgJiYKLQkJdGVzdCAiJChnaXQgbHMtZmlsZXMpIiA9IHN0YWdlZC1maWxlICYmCisJCWVjaG8gc3RhZ2VkLWZpbGUgPmV4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlIC4uIG1hc3RlciAyPmVyciAmJgotCQl0ZXN0ICIkKGdpdCBscy1maWxlcykiID0gc3RhZ2VkLWZpbGUgJiYKLQkJdGVzdCAiJChnaXQgc2hvdyA6c3RhZ2VkLWZpbGUpIiA9IHN0YWdlZC1maWxlICYmCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IHNob3cgOnN0YWdlZC1maWxlID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCQl0ZXN0X2kxOG5ncmVwICJ1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiIGVycgogCSkKICcKQEAgLTYzOCw3ICs2OTMsOCBAQAogCSgKIAkJY2QgY29ycnVwdCAmJgogCQl0ZXN0X2NvbW1pdCBvbmUgJiYKLQkJb2JqPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIHwgc2VkICJzI14uLiMmLyMiKSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmhlYWQgJiYKKwkJb2JqPSQoc2VkICJzI14uLiMmLyMiIGhlYWQpICYmCiAJCXJtIC1mIC5naXQvb2JqZWN0cy8kb2JqICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlCiAJKQpAQCAtNjQ2LDY2ICs3MDIsNzcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGRldGVjdGluZyB1cHN0cmVhbWVkIGNoYW5nZXMnICcKIAlta2RpciBzcmMgJiYKLQkoY2Qgc3JjICYmCi0JIGdpdCBpbml0ICYmCi0JIHByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPiBzdHVmZiAmJgotCSBnaXQgYWRkIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG45XG4xMFxuIiA+IHN0dWZmICYmCisJCWdpdCBhZGQgc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCByZXZpc2lvbiIKIAkpICYmCiAJZ2l0IGNsb25lIHNyYyBkc3QgJiYKLQkoY2Qgc3JjICYmCi0JIG1vZGlmeSBzLzUvNDMvIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLWEgLW0gIjUtPjQzIiAmJgotCSBtb2RpZnkgcy82LzQyLyBzdHVmZiAmJgotCSBnaXQgY29tbWl0IC1hIC1tICJNYWtlIGl0IGJpZ2dlciIKKwkoCisJCWNkIHNyYyAmJgorCQltb2RpZnkgcy81LzQzLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICI1LT40MyIgJiYKKwkJbW9kaWZ5IHMvNi80Mi8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiTWFrZSBpdCBiaWdnZXIiCiAJKSAmJgotCShjZCBkc3QgJiYKLQkgbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKLQkgZ2l0IGNvbW1pdCAtYSAtbSAiSW5kZXBlbmRlbnQgZGlzY292ZXJ5IG9mIDUtPjQzIgorCSgKKwkJY2QgZHN0ICYmCisJCW1vZGlmeSBzLzUvNDMvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkluZGVwZW5kZW50IGRpc2NvdmVyeSBvZiA1LT40MyIKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGRldGVjdHMgdXBzdHJlYW1lZCBjaGFuZ2VzJyAnCi0JKGNkIGRzdCAmJgotCSBnaXQgcHVsbCAtLXJlYmFzZSAmJgotCSB0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID51bnRyYWNrZWQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGF2b2lkaW5nIHJlYXBwbHlpbmcgb2xkIHBhdGNoZXMnICcKLQkoY2QgZHN0ICYmCi0JIHRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgJiYKLQkgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIKIAkpICYmCiAJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLXJlcGxhY2UuZ2l0ICYmCiAJcm0gLXJmIHNyYyAmJgogCW12IHNyYy1yZXBsYWNlLmdpdCBzcmMgJiYKLQkoY2QgZHN0ICYmCi0JIG1vZGlmeSBzLzIvMjIvIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAyIiAmJgotCSBtb2RpZnkgcy8zLzMzLyBzdHVmZiAmJgotCSBnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgMyIgJiYKLQkgbW9kaWZ5IHMvNC80NC8gc3R1ZmYgJiYKLQkgZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDQiICYmCi0JIGdpdCBwdXNoICYmCisJKAorCQljZCBkc3QgJiYKKwkJbW9kaWZ5IHMvMi8yMi8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDIiICYmCisJCW1vZGlmeSBzLzMvMzMvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAzIiAmJgorCQltb2RpZnkgcy80LzQ0LyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgNCIgJiYKKwkJZ2l0IHB1c2ggJiYKIAotCSBtb2RpZnkgcy80NC81NS8gc3R1ZmYgJiYKLQkgZ2l0IGNvbW1pdCAtLWFtZW5kIC1hIC1tICJNb2RpZmllZCBDaGFuZ2UgNCIKKwkJbW9kaWZ5IHMvNDQvNTUvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLS1hbWVuZCAtYSAtbSAiTW9kaWZpZWQgQ2hhbmdlIDQiCiAJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBkb2VzIG5vdCByZWFwcGx5IG9sZCBwYXRjaGVzJyAnCi0JKGNkIGRzdCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAmJgotCSB0ZXN0IDEgPSAkKGZpbmQgLmdpdC9yZWJhc2UtYXBwbHkgLW5hbWUgIjAwMCoiIHwgd2MgLWwpCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwkJZmluZCAuZ2l0L3JlYmFzZS1hcHBseSAtbmFtZSAiMDAwKiIgPnBhdGNoZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBwYXRjaGVzCiAJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBhZ2FpbnN0IGxvY2FsIGJyYW5jaCcgJwogCWdpdCBjaGVja291dCAtYiBjb3B5MiB0by1yZWJhc2Utb3JpZyAmJgogCWdpdCBwdWxsIC0tcmViYXNlIC4gdG8tcmViYXNlICYmCi0JdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKLQl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaCBiL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCmluZGV4IDQ0MzA5NTYuLjRkMWUwYzMgMTAwNzU1Ci0tLSBhL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCisrKyBiL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCkBAIC0xNjMsNyArMTYzLDcgQEAKICMgdXBkYXRlIHBhcmVudDEncyBmb28gKHdoaWNoIGlzIG91ciB1cHN0cmVhbSkKIHRlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyB1cHN0cmVhbSBmb28KIAotIyB1cHNyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCisjIHVwc3RyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCiB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgc2ltcGxlIG1hc3RlcgogCiAjIG1hc3RlciBhbmQgZm9vIGFyZSB1cGRhdGVkCmRpZmYgLS1naXQgYS90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoIGIvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaAppbmRleCA4ZWQ1OGQyLi5lOGY2ZDIzIDEwMDc1NQotLS0gYS90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoCisrKyBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotdGVzdF9kZXNjcmlwdGlvbj0nYXZvaWRpbmcgY29uZmxpY3RpbmcgdXBkYXRlIHRocnUgc3ltcmVmIGFsaWFzaW5nJwordGVzdF9kZXNjcmlwdGlvbj0nYXZvaWRpbmcgY29uZmxpY3RpbmcgdXBkYXRlIHRocm91Z2ggc3ltcmVmIGFsaWFzaW5nJwogCiAuIC4vdGVzdC1saWIuc2gKIApkaWZmIC0tZ2l0IGEvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2ggYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaAppbmRleCAwNGIzNGM0Li4zOGU2ZjczIDEwMDc1NQotLS0gYS90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaAorKysgYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaApAQCAtMTE1LDcgKzExNSw3IEBACiAKIAlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vdXBzdHJlYW0gd29ya2JlbmNoICYmCiAJZ2l0IC1DIHBhcmVudC93b3JrYmVuY2ggcmVtb3RlIGFkZCB1cCAuLi8uLi91cHN0cmVhbSAmJgotCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW91bGUiICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCiAKIAl0ZXN0X2NvbW1pdCAtQyBwYXJlbnQvd29ya2JlbmNoIHR3byAmJgogCWdpdCAtQyBwYXJlbnQgYWRkIHdvcmtiZW5jaCAmJgpkaWZmIC0tZ2l0IGEvdC90NTYwOC1jbG9uZS0yZ2Iuc2ggYi90L3Q1NjA4LWNsb25lLTJnYi5zaAppbmRleCAyYzZiYzA3Li5lZWUwODQyIDEwMDc1NQotLS0gYS90L3Q1NjA4LWNsb25lLTJnYi5zaAorKysgYi90L3Q1NjA4LWNsb25lLTJnYi5zaApAQCAtMyw3ICszLDcgQEAKIHRlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZScKIC4gLi90ZXN0LWxpYi5zaAogCi1pZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ0xPTkVfMkdCIgoraWYgISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0NMT05FXzJHQiBmYWxzZQogdGhlbgogCXNheSAnU2tpcHBpbmcgZXhwZW5zaXZlIDJHQiBjbG9uZSB0ZXN0OyBlbmFibGUgaXQgd2l0aCBHSVRfVEVTVF9DTE9ORV8yR0I9dCcKIGVsc2UKZGlmZiAtLWdpdCBhL3QvdDU2MTYtcGFydGlhbC1jbG9uZS5zaCBiL3QvdDU2MTYtcGFydGlhbC1jbG9uZS5zaAppbmRleCA3OWY3YjY1Li5mZWE1NmNkIDEwMDc1NQotLS0gYS90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2gKKysrIGIvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoCkBAIC00Niw2ICs0NiwxNCBAQAogCXRlc3QgIiQoZ2l0IC1DIHBjMSBjb25maWcgLS1sb2NhbCByZW1vdGUub3JpZ2luLnBhcnRpYWxjbG9uZWZpbHRlcikiID0gImJsb2I6bm9uZSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgLnByb21pc29yIGZpbGUgY29udGFpbnMgcmVmcyBmZXRjaGVkJyAnCisJbHMgcGMxLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlnaXQgLUMgc3J2LmJhcmUgcmV2LWxpc3QgSEVBRCA+aGVhZGhhc2ggJiYKKwlncmVwICIkKGNhdCBoZWFkaGFzaCkgSEVBRCIgJChjYXQgcHJvbWlzb3JsaXN0KSAmJgorCWdyZXAgIiQoY2F0IGhlYWRoYXNoKSByZWZzL2hlYWRzL21hc3RlciIgJChjYXQgcHJvbWlzb3JsaXN0KQorJworCiAjIGNoZWNrb3V0IG1hc3RlciB0byBmb3JjZSBkeW5hbWljIG9iamVjdCBmZXRjaCBvZiBibG9icyBhdCBIRUFELgogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGNoZWNrb3V0IHdpdGggZHluYW1pYyBvYmplY3QgZmV0Y2gnICcKIAlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBIRUFEID5vYnNlcnZlZCAmJgpAQCAtMjk2LDYgKzMwNCw3NiBAQAogCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4iIGVycgogJwogCitzZXR1cF90cmlhbmdsZSAoKSB7CisJcm0gLXJmIGJpZy1ibG9iLnR4dCBzZXJ2ZXIgY2xpZW50IHByb21pc29yLXJlbW90ZSAmJgorCisJcHJpbnRmICJsaW5lICVkXG4iICQodGVzdF9zZXEgMSAxMDApID5iaWctYmxvYi50eHQgJiYKKworCSMgQ3JlYXRlIGEgc2VydmVyIHdpdGggMiBjb21taXRzOiBhIGNvbW1pdCB3aXRoIGEgYmlnIGJsb2IgYW5kIGEgY2hpbGQKKwkjIGNvbW1pdCB3aXRoIGFuIGluY3JlbWVudGFsIGNoYW5nZS4gQWxzbywgY3JlYXRlIGEgcGFydGlhbCBjbG9uZQorCSMgY2xpZW50IHRoYXQgb25seSBjb250YWlucyB0aGUgZmlyc3QgY29tbWl0LgorCWdpdCBpbml0IHNlcnZlciAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJY3AgYmlnLWJsb2IudHh0IHNlcnZlciAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGJpZy1ibG9iLnR4dCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1maWx0ZXI9dHJlZTowICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJZWNobyBhbm90aGVyIGxpbmUgPj5zZXJ2ZXIvYmlnLWJsb2IudHh0ICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLWFtICJhcHBlbmQgbGluZSB0byBiaWcgYmxvYiIgJiYKKworCSMgQ3JlYXRlIGEgcHJvbWlzb3IgcmVtb3RlIHRoYXQgb25seSBjb250YWlucyB0aGUgYmxvYiBmcm9tIHRoZSBmaXJzdAorCSMgY29tbWl0LCBhbmQgc2V0IGl0IGFzIHRoZSBwcm9taXNvciByZW1vdGUgb2YgY2xpZW50LiBUaHVzLCB3aGVuZXZlcgorCSMgdGhlIGNsaWVudCBsYXp5IGZldGNoZXMsIHRoZSBsYXp5IGZldGNoIHdpbGwgc3VjY2VlZCBvbmx5IGlmIGl0IGlzCisJIyBmb3IgdGhpcyBibG9iLgorCWdpdCBpbml0IHByb21pc29yLXJlbW90ZSAmJgorCXRlc3RfY29tbWl0IC1DIHByb21pc29yLXJlbW90ZSBvbmUgJiYgIyBzbyB0aGF0IHJlZiBhZHZlcnRpc2VtZW50IGlzIG5vdCBlbXB0eQorCWdpdCAtQyBwcm9taXNvci1yZW1vdGUgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWdpdCAtQyBwcm9taXNvci1yZW1vdGUgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8YmlnLWJsb2IudHh0ICYmCisJZ2l0IC1DIGNsaWVudCByZW1vdGUgc2V0LXVybCBvcmlnaW4gImZpbGU6Ly8kKHB3ZCkvcHJvbWlzb3ItcmVtb3RlIgorfQorCisjIE5FRURTV09SSzogVGhlIHRlc3RzIGJlZ2lubmluZyB3aXRoICJmZXRjaCBsYXp5LWZldGNoZXMiIGJlbG93IG9ubHkKKyMgdGVzdCB0aGF0ICJmZXRjaCIgYXZvaWQgZmV0Y2hpbmcgdHJlZXMgYW5kIGJsb2JzLCBidXQgbm90IGNvbW1pdHMgb3IKKyMgdGFncy4gUmV2aXNpdCB0aGlzIGlmIEdpdCBpcyBldmVyIHRhdWdodCB0byBzdXBwb3J0IHBhcnRpYWwgY2xvbmVzCisjIHdpdGggY29tbWl0cyBhbmQvb3IgdGFncyBmaWx0ZXJlZCBvdXQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGxhenktZmV0Y2hlcyBvbmx5IHRvIHJlc29sdmUgZGVsdGFzJyAnCisJc2V0dXBfdHJpYW5nbGUgJiYKKworCSMgRXhlcmNpc2UgdG8gbWFrZSBzdXJlIGl0IHdvcmtzLiBHaXQgd2lsbCBub3QgZmV0Y2ggYW55dGhpbmcgZnJvbSB0aGUKKwkjIHByb21pc29yIHJlbW90ZSBvdGhlciB0aGFuIGZvciB0aGUgYmlnIGJsb2IgKGJlY2F1c2UgaXQgbmVlZHMgdG8KKwkjIHJlc29sdmUgdGhlIGRlbHRhKS4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgXAorCQlmZXRjaCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIG1hc3RlciAmJgorCisJIyBWZXJpZnkgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY2xpZW50IG5lZWRlZCB0byBmZXRjaCB0aGUgZGVsdGEgYmFzZQorCSMgdG8gcmVzb2x2ZSB0aGUgZGVsdGEuCisJZ2l0IGhhc2gtb2JqZWN0IGJpZy1ibG9iLnR4dCA+aGFzaCAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaCkiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGxhenktZmV0Y2hlcyBvbmx5IHRvIHJlc29sdmUgZGVsdGFzLCBwcm90b2NvbCB2MicgJworCXNldHVwX3RyaWFuZ2xlICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyAtLWxvY2FsIHByb3RvY29sLnZlcnNpb24gMiAmJgorCWdpdCAtQyBjbGllbnQgY29uZmlnIC0tbG9jYWwgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIHByb21pc29yLXJlbW90ZSBjb25maWcgLS1sb2NhbCBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCSMgRXhlcmNpc2UgdG8gbWFrZSBzdXJlIGl0IHdvcmtzLiBHaXQgd2lsbCBub3QgZmV0Y2ggYW55dGhpbmcgZnJvbSB0aGUKKwkjIHByb21pc29yIHJlbW90ZSBvdGhlciB0aGFuIGZvciB0aGUgYmlnIGJsb2IgKGJlY2F1c2UgaXQgbmVlZHMgdG8KKwkjIHJlc29sdmUgdGhlIGRlbHRhKS4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgXAorCQlmZXRjaCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIG1hc3RlciAmJgorCisJIyBWZXJpZnkgdGhhdCBwcm90b2NvbCB2ZXJzaW9uIDIgd2FzIHVzZWQuCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgdHJhY2UgJiYKKworCSMgVmVyaWZ5IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNsaWVudCBuZWVkZWQgdG8gZmV0Y2ggdGhlIGRlbHRhIGJhc2UKKwkjIHRvIHJlc29sdmUgdGhlIGRlbHRhLgorCWdpdCBoYXNoLW9iamVjdCBiaWctYmxvYi50eHQgPmhhc2ggJiYKKwlncmVwICJ3YW50ICQoY2F0IGhhc2gpIiB0cmFjZQorJworCiAuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAogc3RhcnRfaHR0cGQKIApkaWZmIC0tZ2l0IGEvdC90NTcwMi1wcm90b2NvbC12Mi5zaCBiL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKaW5kZXggYWU5MTc1Yy4uZTczMDY3ZCAxMDA3NTUKLS0tIGEvdC90NTcwMi1wcm90b2NvbC12Mi5zaAorKysgYi90L3Q1NzAyLXByb3RvY29sLXYyLnNoCkBAIC0zMiw3ICszMiw3IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgogCiAJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc21lbnQgaXMgZmlsdGVyZWQgd2l0aCBscy1yZW1vdGUgdXNpbmcgcHJvdG9jb2wgdjInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCiAKIAlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIGxvZwogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNtZW50IGlzIGZpbHRlcmVkIGR1cmluZyBmZXRjaCB1c2luZyBwcm90b2NvbCB2MicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzZW1lbnQgaXMgZmlsdGVyZWQgZHVyaW5nIGZldGNoIHVzaW5nIHByb3RvY29sIHYyJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCiAKIAl0ZXN0X2NvbW1pdCAtQyBmaWxlX3BhcmVudCB0aHJlZSAmJgpAQCAtNjgyLDkgKzY4Miw5IEBACiAJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCi0JIyBDbGllbnQgZGlkbnQgcmVxdWVzdCB0byB1c2UgcHJvdG9jb2wgdjIKKwkjIENsaWVudCBkaWQgbm90IHJlcXVlc3QgdG8gdXNlIHByb3RvY29sIHYyCiAJISBncmVwICJHaXQtUHJvdG9jb2w6IHZlcnNpb249MiIgbG9nICYmCi0JIyBTZXJ2ZXIgZGlkbnQgcmVzcG9uZCB1c2luZyBwcm90b2NvbCB2MgorCSMgU2VydmVyIGRpZCBub3QgcmVzcG9uZCB1c2luZyBwcm90b2NvbCB2MgogCSEgZ3JlcCAiZ2l0PCB2ZXJzaW9uIDIiIGxvZwogJwogCmRpZmYgLS1naXQgYS90L3Q1NzAzLXVwbG9hZC1wYWNrLXJlZi1pbi13YW50LnNoIGIvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaAppbmRleCAzYTJjMTQzLi4xNDI0ZmFiIDEwMDc1NQotLS0gYS90L3Q1NzAzLXVwbG9hZC1wYWNrLXJlZi1pbi13YW50LnNoCisrKyBiL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2gKQEAgLTE4LDE0ICsxOCwxNiBAQAogCQlwCiAJCX0nIDxvdXQgfCB0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrLXNpZGViYW5kID5vLnBhY2sgJiYKIAlnaXQgaW5kZXgtcGFjayBvLnBhY2sgJiYKLQlnaXQgdmVyaWZ5LXBhY2sgLXYgby5pZHggfCBncmVwIGNvbW1pdCB8IGN1dCAtYy00MCB8IHNvcnQgPmFjdHVhbF9jb21taXRzCisJZ2l0IHZlcmlmeS1wYWNrIC12IG8uaWR4ID5vYmpzICYmCisJZ3JlcCBjb21taXQgb2JqcyB8IGN1dCAtYy00MCB8IHNvcnQgPmFjdHVhbF9jb21taXRzCiB9CiAKIGNoZWNrX291dHB1dCAoKSB7CiAJZ2V0X2FjdHVhbF9yZWZzICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWRfcmVmcyBhY3R1YWxfcmVmcyAmJgogCWdldF9hY3R1YWxfY29tbWl0cyAmJgotCXRlc3RfY21wIGV4cGVjdGVkX2NvbW1pdHMgYWN0dWFsX2NvbW1pdHMKKwlzb3J0IGV4cGVjdGVkX2NvbW1pdHMgPnNvcnRlZF9jb21taXRzICYmCisJdGVzdF9jbXAgc29ydGVkX2NvbW1pdHMgYWN0dWFsX2NvbW1pdHMKIH0KIAogIyBjKG8vZm9vKSBkKG8vYmFyKQpAQCAtNzUsMTcgKzc3LDE5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHdhbnQtcmVmJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBmKSAmJgogCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKLQkkKGdpdCByZXYtcGFyc2UgZikgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkb2lkIHJlZnMvaGVhZHMvbWFzdGVyCiAJRU9GCi0JZ2l0IHJldi1wYXJzZSBmIHwgc29ydCA+ZXhwZWN0ZWRfY29tbWl0cyAmJgorCWdpdCByZXYtcGFyc2UgZiA+ZXhwZWN0ZWRfY29tbWl0cyAmJgogCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBhKSAmJgogCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKIAljb21tYW5kPWZldGNoCiAJMDAwMQogCW5vLXByb2dyZXNzCiAJd2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIKLQloYXZlICQoZ2l0IHJldi1wYXJzZSBhKQorCWhhdmUgJG9pZAogCWRvbmUKIAkwMDAwCiAJRU9GCkBAIC05NSwxOSArOTksMjIgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgd2FudC1yZWYgbGluZXMnICcKKwlvaWRfYz0kKGdpdCByZXYtcGFyc2UgYykgJiYKKwlvaWRfZD0kKGdpdCByZXYtcGFyc2UgZCkgJiYKIAljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCi0JJChnaXQgcmV2LXBhcnNlIGMpIHJlZnMvaGVhZHMvby9mb28KLQkkKGdpdCByZXYtcGFyc2UgZCkgcmVmcy9oZWFkcy9vL2JhcgorCSRvaWRfYyByZWZzL2hlYWRzL28vZm9vCisJJG9pZF9kIHJlZnMvaGVhZHMvby9iYXIKIAlFT0YKLQlnaXQgcmV2LXBhcnNlIGMgZCB8IHNvcnQgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKwlnaXQgcmV2LXBhcnNlIGMgZCA+ZXhwZWN0ZWRfY29tbWl0cyAmJgogCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBiKSAmJgogCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKIAljb21tYW5kPWZldGNoCiAJMDAwMQogCW5vLXByb2dyZXNzCiAJd2FudC1yZWYgcmVmcy9oZWFkcy9vL2ZvbwogCXdhbnQtcmVmIHJlZnMvaGVhZHMvby9iYXIKLQloYXZlICQoZ2l0IHJldi1wYXJzZSBiKQorCWhhdmUgJG9pZAogCWRvbmUKIAkwMDAwCiAJRU9GCkBAIC0xMTcsMTAgKzEyNCwxMSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXggd2FudCBhbmQgd2FudC1yZWYnICcKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGYpICYmCiAJY2F0ID5leHBlY3RlZF9yZWZzIDw8LUVPRiAmJgotCSQoZ2l0IHJldi1wYXJzZSBmKSByZWZzL2hlYWRzL21hc3RlcgorCSRvaWQgcmVmcy9oZWFkcy9tYXN0ZXIKIAlFT0YKLQlnaXQgcmV2LXBhcnNlIGUgZiB8IHNvcnQgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKwlnaXQgcmV2LXBhcnNlIGUgZiA+ZXhwZWN0ZWRfY29tbWl0cyAmJgogCiAJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgogCWNvbW1hbmQ9ZmV0Y2gKQEAgLTEzOCwxNyArMTQ2LDE5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhbnQtcmVmIHdpdGggcmVmIHdlIGFscmVhZHkgaGF2ZSBjb21taXQgZm9yJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBjKSAmJgogCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKLQkkKGdpdCByZXYtcGFyc2UgYykgcmVmcy9oZWFkcy9vL2ZvbworCSRvaWQgcmVmcy9oZWFkcy9vL2ZvbwogCUVPRgogCT5leHBlY3RlZF9jb21taXRzICYmCiAKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGMpICYmCiAJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgogCWNvbW1hbmQ9ZmV0Y2gKIAkwMDAxCiAJbm8tcHJvZ3Jlc3MKIAl3YW50LXJlZiByZWZzL2hlYWRzL28vZm9vCi0JaGF2ZSAkKGdpdCByZXYtcGFyc2UgYykKKwloYXZlICRvaWQKIAlkb25lCiAJMDAwMAogCUVPRgpAQCAtMjExLDEzICsyMjEsMTQgQEAKIAogCXJtIC1yZiBsb2NhbCAmJgogCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJb2lkPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGQpICYmCiAJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiBcCi0JCSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGQpOnJlZnMvaGVhZHMvYWN0dWFsICYmCisJCSIkb2lkIjpyZWZzL2hlYWRzL2FjdHVhbCAmJgogCiAJZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICJkIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgLUMgbG9jYWwgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYWN0dWFsID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKLQlncmVwICJ3YW50ICQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGQpIiBsb2cKKwlncmVwICJ3YW50ICRvaWQiIGxvZwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBtdWx0aXBsZSByZWZzJyAnCkBAIC0yMzksMTMgKzI1MCwxNCBAQAogCiAJcm0gLXJmIGxvY2FsICYmCiAJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlvaWQ9JChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgYikgJiYKIAlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgbG9jYWwgZmV0Y2ggb3JpZ2luIFwKLQkJbWFzdGVyICQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGIpOnJlZnMvaGVhZHMvYWN0dWFsICYmCisJCW1hc3RlciAiJG9pZCI6cmVmcy9oZWFkcy9hY3R1YWwgJiYKIAogCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAibWFzdGVyIiAiYiIgPmV4cGVjdGVkICYmCiAJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciByZWZzL2hlYWRzL2FjdHVhbCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCi0JZ3JlcCAid2FudCAkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBiKSIgbG9nICYmCisJZ3JlcCAid2FudCAkb2lkIiBsb2cgJiYKIAlncmVwICJ3YW50LXJlZiByZWZzL2hlYWRzL21hc3RlciIgbG9nCiAnCiAKQEAgLTMxMiwxMCArMzI0LDkgQEAKIAkjIHJlcG9zaXRvcnkgYXBwZWFycyB0byBjaGFuZ2UgZHVyaW5nIG5lZ290aWF0aW9uLCBmb3IgZXhhbXBsZSwgd2hlbgogCSMgZGlmZmVyZW50IHNlcnZlcnMgaW4gYSBsb2FkLWJhbGFuY2luZyBhcnJhbmdlbWVudCBzZXJ2ZSAoc3RhdGVsZXNzKQogCSMgUlBDcyBkdXJpbmcgYSBzaW5nbGUgbmVnb3RpYXRpb24uCi0JcHJpbnRmICJzLyVzLyVzLyIgXAotCSAgICAgICAkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAkMSB8IHRyIC1kICJcbiIpIFwKLQkgICAgICAgJChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgJDIgfCB0ciAtZCAiXG4iKSBcCi0JICAgICAgID4iJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1zZWQiCisJb2lkMT0kKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAkMSkgJiYKKwlvaWQyPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICQyKSAmJgorCWVjaG8gInMvJG9pZDEvJG9pZDIvIiA+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtc2VkIgogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXIgaXMgaW5pdGlhbGx5IGFoZWFkIC0gbm8gcmVmIGluIHdhbnQnICcKZGlmZiAtLWdpdCBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKaW5kZXggY2ZiNzRkMC4uZWJkYzQ5YyAxMDA3NTUKLS0tIGEvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKKysrIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKQEAgLTEwOSwzMSArMTA5LDM1IEBACiBFT0YKIAogIyB3ZSBkb24ndCB0ZXN0IHJlbGF0aXZlIGhlcmUKLXRlc3RfZm9ybWF0IGF1dGhvciAlYW4lbiVhZSVuJWFkJW4lYUQlbiVhdCA8PEVPRgordGVzdF9mb3JtYXQgYXV0aG9yICVhbiVuJWFlJW4lYWwlbiVhZCVuJWFEJW4lYXQgPDxFT0YKIGNvbW1pdCAkaGVhZDIKLUEgVSBUaG9yCi1hdXRob3JAZXhhbXBsZS5jb20KKyRHSVRfQVVUSE9SX05BTUUKKyRHSVRfQVVUSE9SX0VNQUlMCiskVEVTVF9BVVRIT1JfTE9DQUxOQU1FCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCiBjb21taXQgJGhlYWQxCi1BIFUgVGhvcgotYXV0aG9yQGV4YW1wbGUuY29tCiskR0lUX0FVVEhPUl9OQU1FCiskR0lUX0FVVEhPUl9FTUFJTAorJFRFU1RfQVVUSE9SX0xPQ0FMTkFNRQogVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKIFRodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAogMTExMjkxMTk5MwogRU9GCiAKLXRlc3RfZm9ybWF0IGNvbW1pdHRlciAlY24lbiVjZSVuJWNkJW4lY0QlbiVjdCA8PEVPRgordGVzdF9mb3JtYXQgY29tbWl0dGVyICVjbiVuJWNlJW4lY2wlbiVjZCVuJWNEJW4lY3QgPDxFT0YKIGNvbW1pdCAkaGVhZDIKLUMgTyBNaXR0ZXIKLWNvbW1pdHRlckBleGFtcGxlLmNvbQorJEdJVF9DT01NSVRURVJfTkFNRQorJEdJVF9DT01NSVRURVJfRU1BSUwKKyRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCiBUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKIDExMTI5MTE5OTMKIGNvbW1pdCAkaGVhZDEKLUMgTyBNaXR0ZXIKLWNvbW1pdHRlckBleGFtcGxlLmNvbQorJEdJVF9DT01NSVRURVJfTkFNRQorJEdJVF9DT01NSVRURVJfRU1BSUwKKyRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCiBUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKIDExMTI5MTE5OTMKQEAgLTQxMCw3ICs0MTQsNyBAQAogCXRlc3RfdGljayAmJgogCUM9JChHSVRfQVVUSE9SX0VNQUlMPSBnaXQgY29tbWl0LXRyZWUgSEVBRF57dHJlZX0gPC9kZXYvbnVsbCkgJiYKIAlBPSQoZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVhbiwlYWUsJWFkJW4gLXMgJEMpICYmCi0JdmVyYm9zZSB0ZXN0ICIkQSIgPSAiQSBVIFRob3IsLFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwIgorCXZlcmJvc2UgdGVzdCAiJEEiID0gIiRHSVRfQVVUSE9SX05BTUUsLFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgxKScgJwpAQCAtNDk1LDcgKzQ5OSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBpZGVudGl0eScgJwotCWVjaG8gIkMgTyBNaXR0ZXI6Y29tbWl0dGVyQGV4YW1wbGUuY29tIiA+ZXhwZWN0ICYmCisJZWNobyAiJEdJVF9DT01NSVRURVJfTkFNRTokR0lUX0NPTU1JVFRFUl9FTUFJTCIgPmV4cGVjdCAmJgogCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbjolZ2UiID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2ggYi90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2gKaW5kZXggZjcxODFkMS4uZjVlNmU5MiAxMDA3NTUKLS0tIGEvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoCisrKyBiL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaApAQCAtNjcsMTEgKzY3LDEwIEBACiAJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8IHwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqLS4gfCAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcfCAiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCB8ICogJEMyIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgfCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogfCAkQjIiID4+IGV4cGVjdGVkICYmCkBAIC05NywxMSArOTYsMTAgQEAKIAllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgKiAkQzMiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8IHwgICAgICIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8ICBcXCAgICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAiKi0uIFxcICAgJEE0IiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInxcXCBcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInwgfCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiB8ICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFx8ICIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8IHwgKiAkQzIiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCB8ICogJEMxIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgKiB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKQEAgLTEzMSw5ICsxMjksOCBAQAogCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgotCWVjaG8gIiogfCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8XFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFx8ICIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogJEMyIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgKiAkQzEiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiKiB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKQEAgLTE1MSw5ICsxNDgsOCBAQAogCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICIqIHwgICAkQTQiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifFxcIFxcICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcfCAiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiKiB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgpAQCAtMjU1LDcgKzI1MSw3IEBACiAJZWNobyAiKiB8IHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCiAJZWNobyAibyB8IHwgfCAkQTIiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifC8gLyAvICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAibyB8IHwgJEExIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIm8gLyAvICRBMSIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICIgLyAvICAiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCBvICRDMyIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgpkaWZmIC0tZ2l0IGEvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCmluZGV4IGJlYWRhZjYuLjM1M2Y4NDMgMTAwNzU1Ci0tLSBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaAorKysgYi90L3Q2MDE5LXJldi1saXN0LWFuY2VzdHJ5LXBhdGguc2gKQEAgLTE0MywxNCArMTQzLDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zczogcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIGNiLi5iYycgJwogCShjZCBjcmlzcy1jcm9zcyAmJgogCSBnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIHhjYi4ueGJjID4gYWN0dWFsICYmCi0JIHRlc3QgLXogIiQoY2F0IGFjdHVhbCkiKQorCSB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsKQogJwogCiAjIG5vIGNvbW1pdHMgaW4gcmVwb3NpdG9yeSBkZXNjZW5kIGZyb20gY2IKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzOiByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXmNiJyAnCiAJKGNkIGNyaXNzLWNyb3NzICYmCiAJIGdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXnhjYiA+IGFjdHVhbCAmJgotCSB0ZXN0IC16ICIkKGNhdCBhY3R1YWwpIikKKwkgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCkKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIxLW1lcmdlLWNyaXNzLWNyb3NzLnNoIGIvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaAppbmRleCAyMTNkZWVjLi5kMjU0ZTAyIDEwMDc1NQotLS0gYS90L3Q2MDIxLW1lcmdlLWNyaXNzLWNyb3NzLnNoCisrKyBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoYykgMjAwNSBGcmVkcmlrIEt1aXZpbmVuCiAjCiAKLSMgU2VlIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTExNDYzMzU4NTAwMzYyJnc9MiBmb3IgYQorIyBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L1BpbmUuTE5YLjQuNDQuMDUwNDI3MTI1NDEyMC40Njc4LTEwMDAwMEB3YXguZWRzLm9yZy8gZm9yIGEKICMgbmljZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgaXMgYWJvdXQuCiAKIApkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAppbmRleCAyN2M3ZGU5Li4wYzllM2MyIDEwMDc1NQotLS0gYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAorKysgYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApAQCAtMTQsODUgKzE0LDkwIEBACiBHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMTItMTIgMjM6Mjg6MDAgKzAxMDAiCiBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHRlc3RzIiAnCi1lY2hvIDEgPiBhMSAmJgotZ2l0IGFkZCBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAwIiBnaXQgY29tbWl0IC1tIDEgYTEgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzJyAnCisJZWNobyAxID5hMSAmJgorCWdpdCBhZGQgYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDAiIGdpdCBjb21taXQgLW0gMSBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgQSBtYXN0ZXIgJiYKLWVjaG8gQSA+IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDEiIGdpdCBjb21taXQgLW0gQSBhMSAmJgorCWdpdCBjaGVja291dCAtYiBBIG1hc3RlciAmJgorCWVjaG8gQSA+YTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDEiIGdpdCBjb21taXQgLW0gQSBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgQiBtYXN0ZXIgJiYKLWVjaG8gQiA+IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDIiIGdpdCBjb21taXQgLW0gQiBhMSAmJgorCWdpdCBjaGVja291dCAtYiBCIG1hc3RlciAmJgorCWVjaG8gQiA+YTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDIiIGdpdCBjb21taXQgLW0gQiBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgRCBBICYmCi1naXQgcmV2LXBhcnNlIEIgPiAuZ2l0L01FUkdFX0hFQUQgJiYKLWVjaG8gRCA+IGExICYmCi1naXQgdXBkYXRlLWluZGV4IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDMiIGdpdCBjb21taXQgLW0gRCAmJgorCWdpdCBjaGVja291dCAtYiBEIEEgJiYKKwlnaXQgcmV2LXBhcnNlIEIgPi5naXQvTUVSR0VfSEVBRCAmJgorCWVjaG8gRCA+YTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAzIiBnaXQgY29tbWl0IC1tIEQgJiYKIAotZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvb3RoZXIgJiYKLWVjaG8gMiA+IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDQiIGdpdCBjb21taXQgLW0gMiBhMSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCisJZWNobyAyID5hMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNCIgZ2l0IGNvbW1pdCAtbSAyIGExICYmCiAKLWdpdCBjaGVja291dCAtYiBDICYmCi1lY2hvIEMgPiBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA1IiBnaXQgY29tbWl0IC1tIEMgYTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQyAmJgorCWVjaG8gQyA+YTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDUiIGdpdCBjb21taXQgLW0gQyBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgRSBDICYmCi1naXQgcmV2LXBhcnNlIEIgPiAuZ2l0L01FUkdFX0hFQUQgJiYKLWVjaG8gRSA+IGExICYmCi1naXQgdXBkYXRlLWluZGV4IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDYiIGdpdCBjb21taXQgLW0gRSAmJgorCWdpdCBjaGVja291dCAtYiBFIEMgJiYKKwlnaXQgcmV2LXBhcnNlIEIgPi5naXQvTUVSR0VfSEVBRCAmJgorCWVjaG8gRSA+YTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA2IiBnaXQgY29tbWl0IC1tIEUgJiYKIAotZ2l0IGNoZWNrb3V0IC1iIEcgRSAmJgotZ2l0IHJldi1wYXJzZSBBID4gLmdpdC9NRVJHRV9IRUFEICYmCi1lY2hvIEcgPiBhMSAmJgotZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA3IiBnaXQgY29tbWl0IC1tIEcgJiYKKwlnaXQgY2hlY2tvdXQgLWIgRyBFICYmCisJZ2l0IHJldi1wYXJzZSBBID4uZ2l0L01FUkdFX0hFQUQgJiYKKwllY2hvIEcgPmExICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNyIgZ2l0IGNvbW1pdCAtbSBHICYmCiAKLWdpdCBjaGVja291dCAtYiBGIEQgJiYKLWdpdCByZXYtcGFyc2UgQyA+IC5naXQvTUVSR0VfSEVBRCAmJgotZWNobyBGID4gYTEgJiYKLWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKLUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowOCIgZ2l0IGNvbW1pdCAtbSBGCisJZ2l0IGNoZWNrb3V0IC1iIEYgRCAmJgorCWdpdCByZXYtcGFyc2UgQyA+LmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyBGID5hMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDgiIGdpdCBjb21taXQgLW0gRgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lZCBtZXJnZSBjb25mbGljdHMnICcKIAl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAgZ2l0IG1lcmdlIC1tIGZpbmFsIEcKICcKIAotY2F0ID4gZXhwZWN0IDw8IEVPRgotPDw8PDw8PCBIRUFECi1GCi09PT09PT09Ci1HCi0+Pj4+Pj4+IEcKLUVPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdWx0IGNvbnRhaW5zIGEgY29uZmxpY3QnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPDw8PDw8PCBIRUFECisJRgorCT09PT09PT0KKwlHCisJPj4+Pj4+PiBHCisJRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgorCXRlc3RfY21wIGV4cGVjdCBhMQorJwogCi1naXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAotY2F0ID4gZXhwZWN0IDw8IEVPRgotMTAwNjQ0IGVjM2ZlMmE3OTE3MDY3MzNmMmQ4ZmE3YWQ0NWQ5YTk2NzIwMzFmNWUgMQlhMQotMTAwNjQ0IGNmODQ0NDNlNDllMWIzNjZmYWM5Mzg3MTFkZGY0YmUyZDRkMWQ5ZTkgMglhMQotMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQotRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2aXJ0dWFsIHRyZWVzIHdlcmUgcHJvY2Vzc2VkJyAnCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPm91dCAmJgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJ2aXJ0dWFsIHRyZWVzIHdlcmUgcHJvY2Vzc2VkIiAidGVzdF9jbXAgZXhwZWN0IG91dCIKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMTAwNjQ0IGVjM2ZlMmE3OTE3MDY3MzNmMmQ4ZmE3YWQ0NWQ5YTk2NzIwMzFmNWUgMQlhMQorCTEwMDY0NCBjZjg0NDQzZTQ5ZTFiMzY2ZmFjOTM4NzExZGRmNGJlMmQ0ZDFkOWU5IDIJYTEKKwkxMDA2NDQgZmQ3OTIzNTI5ODU1ZDBiMjc0Nzk1YWUzMzQ5YzVlMDQzODMzMzk3OSAzCWExCisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBtZXJnZSBiaW5hcnkgZmlsZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0JcHJpbnRmICJcMCIgPiBiaW5hcnktZmlsZSAmJgorCXByaW50ZiAiXDAiID5iaW5hcnktZmlsZSAmJgogCWdpdCBhZGQgYmluYXJ5LWZpbGUgJiYKIAlnaXQgY29tbWl0IC1tIGJpbmFyeSAmJgogCWdpdCBjaGVja291dCBHICYmCi0JcHJpbnRmICJcMFwwIiA+IGJpbmFyeS1maWxlICYmCisJcHJpbnRmICJcMFwwIiA+YmluYXJ5LWZpbGUgJiYKIAlnaXQgYWRkIGJpbmFyeS1maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBiaW5hcnkyICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEYgPiBtZXJnZS5vdXQgMj4gbWVyZ2UuZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEYgPm1lcmdlLm91dCAyPm1lcmdlLmVyciAmJgogCWdyZXAgIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXM6IGJpbmFyeS1maWxlIChIRUFEIHZzLiBGKSIgbWVyZ2UuZXJyCiAnCiAKQEAgLTExNiw3ICsxMjEsNiBAQAogCXRlc3QgMSA9ICQoZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfCB3YyAtbCkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDoyOmEyICYmCiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MzphMgotCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCmluZGV4IDdmZGRjYzguLjdkNzNhZmQgMTAwNzU1Ci0tLSBhL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaAorKysgYi90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKQEAgLTE1MzIsNyArMTUzMiw3IEBACiAJCW12IC1mIGJfUjEgYiAmJgogCQltdiAtZiBhX1IxIGEgJiYKIAkJZ2l0IGFkZCBiIGEgJiYKLQkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInZlcnNvbiBSMSBvZiBmaWxlcyIgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInZlcnNpb24gUjEgb2YgZmlsZXMiICYmCiAJCWdpdCB0YWcgUjEgJiYKIAogCQkjIENyZWF0ZSBmaXJzdCBtZXJnZSBvbiBsZWZ0IHNpZGUKQEAgLTE2OTYsNyArMTY5Niw3IEBACiAJCWdpdCBjaGVja291dCBSICYmCiAJCWVjaG8gcmlnaHQgPj5jb250ZW50ICYmCiAJCWdpdCBhZGQgY29udGVudCAmJgotCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc29uIFIxIG9mIGNvbnRlbnQiICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzaW9uIFIxIG9mIGNvbnRlbnQiICYmCiAJCWdpdCB0YWcgUjEgJiYKIAogCQkjIENyZWF0ZSBMMgpkaWZmIC0tZ2l0IGEvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoCmluZGV4IGM1YjU3ZjQuLmIwNDdjZjEgMTAwNzU1Ci0tLSBhL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaAorKysgYi90L3Q2MDQyLW1lcmdlLXJlbmFtZS1jb3JuZXItY2FzZXMuc2gKQEAgLTUsNyArNSw3IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvZGVsZXRlICsgdW50cmFja2VkIGZpbGUnICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX2RlbGV0ZV91bnRyYWNrZWQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLWRlbGV0ZS11bnRyYWNrZWQgJiYKIAkoCiAJCWNkIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCkBAIC0yOSw5ICsyOSwxMCBAQAogCQlnaXQgY29tbWl0IC1tIHRyYWNrLXBlb3BsZS1pbnN0ZWFkLW9mLW9iamVjdHMgJiYKIAkJZWNobyAiTXl5eSBQUkVDSU9VU1NTIiA+cmluZwogCSkKLScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiRG9lcyBnaXQgcHJlc2VydmUgR29sbHVtJ3MgcHJlY2lvdXMgYXJ0aWZhY3Q/IiAnCisJdGVzdF9zZXR1cF9yZW5hbWVfZGVsZXRlX3VudHJhY2tlZCAmJgogCSgKIAkJY2QgcmVuYW1lLWRlbGV0ZS11bnRyYWNrZWQgJiYKIApAQCAtNDksNyArNTAsNyBAQAogIwogIyBXZSBzaG91bGQgYmUgYWJsZSB0byBtZXJnZSBCICYgQyBjbGVhbmx5CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9tb2RpZnkvYWRkLXNvdXJjZSBjb25mbGljdCcgJwordGVzdF9zZXR1cF9yZW5hbWVfbW9kaWZ5X2FkZF9zb3VyY2UgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLW1vZGlmeS1hZGQtc291cmNlICYmCiAJKAogCQljZCByZW5hbWUtbW9kaWZ5LWFkZC1zb3VyY2UgJiYKQEAgLTcwLDkgKzcxLDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tIEMKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlbmFtZS9tb2RpZnkvYWRkLXNvdXJjZSBjb25mbGljdCByZXNvbHZhYmxlJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfbW9kaWZ5X2FkZF9zb3VyY2UgJiYKIAkoCiAJCWNkIHJlbmFtZS1tb2RpZnktYWRkLXNvdXJjZSAmJgogCkBAIC04OCw3ICs5MCw3IEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXNvbHZhYmxlIGNvbmZsaWN0IG1pc3NlZCBpZiByZW5hbWUgbWlzc2VkJyAnCit0ZXN0X3NldHVwX2JyZWFrX2RldGVjdGlvbl8xICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIGJyZWFrLWRldGVjdGlvbi0xICYmCiAJKAogCQljZCBicmVhay1kZXRlY3Rpb24tMSAmJgpAQCAtMTEwLDkgKzExMiwxMCBAQAogCQlnaXQgYWRkIGEgJiYKIAkJZ2l0IGNvbW1pdCAtbSBDCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb25mbGljdCBjYXVzZWQgaWYgcmVuYW1lIG5vdCBkZXRlY3RlZCcgJworCXRlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzEgJiYKIAkoCiAJCWNkIGJyZWFrLWRldGVjdGlvbi0xICYmCiAKQEAgLTEzNSw3ICsxMzgsNyBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmxpY3QgcmVzb2x2ZWQgd3JvbmcgaWYgcmVuYW1lIG1pc3NlZCcgJwordGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyBicmVhay1kZXRlY3Rpb24tMiAmJgogCSgKIAkJY2QgYnJlYWstZGV0ZWN0aW9uLTIgJiYKQEAgLTE2MCw5ICsxNjMsMTAgQEAKIAkJZ2l0IGFkZCBhICYmCiAJCWdpdCBjb21taXQgLW0gRQogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAnbWlzc2VkIGNvbmZsaWN0IGlmIHJlbmFtZSBub3QgZGV0ZWN0ZWQnICcKKwl0ZXN0X3NldHVwX2JyZWFrX2RldGVjdGlvbl8yICYmCiAJKAogCQljZCBicmVhay1kZXRlY3Rpb24tMiAmJgogCkBAIC0xODIsNyArMTg2LDcgQEAKICMgICBDb21taXQgQjogcmVuYW1lIGEtPmIKICMgICBDb21taXQgQzogcmVuYW1lIGEtPmIsIGFkZCB1bnJlbGF0ZWQgYQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmRldGVjdGVkIHJlbmFtZS9hZGQtc291cmNlIGNhdXNlcyBkYXRhIGxvc3MnICcKK3Rlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gYnJlYWstZGV0ZWN0aW9uLTMgJiYKIAkoCiAJCWNkIGJyZWFrLWRldGVjdGlvbi0zICYmCkBAIC0yMDIsOSArMjA2LDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tIEMKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCByZW5hbWUvYWRkLXNvdXJjZSBhbmQgcHJlc2VydmUgYWxsIGRhdGEnICcKKwl0ZXN0X3NldHVwX2JyZWFrX2RldGVjdGlvbl8zICYmCiAJKAogCQljZCBicmVhay1kZXRlY3Rpb24tMyAmJgogCkBAIC0yMzEsNiArMjM2LDcgQEAKICcKIAogdGVzdF9leHBlY3RfZmFpbHVyZSAnZGV0ZWN0IHJlbmFtZS9hZGQtc291cmNlIGFuZCBwcmVzZXJ2ZSBhbGwgZGF0YSwgbWVyZ2Ugb3RoZXIgd2F5JyAnCisJdGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMyAmJgogCSgKIAkJY2QgYnJlYWstZGV0ZWN0aW9uLTMgJiYKIApAQCAtMjU2LDEwICsyNjIsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbnRlbnQgbWVyZ2UgKyByZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0JyAnCi0JdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtZGlyZWN0b3J5LTEgJiYKK3Rlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtZGlyZWN0b3J5LSQxICYmCiAJKAotCQljZCByZW5hbWUtZGlyZWN0b3J5LTEgJiYKKwkJY2QgcmVuYW1lLWRpcmVjdG9yeS0kMSAmJgogCiAJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuIiA+ZmlsZSAmJgogCQlnaXQgYWRkIGZpbGUgJiYKQEAgLTI5MCwxMSArMjk2LDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tIGxlZnQKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgKyBjbGVhbiBjb250ZW50IG1lcmdlJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfZGlyZWN0b3J5IDFhICYmCiAJKAotCQljZCByZW5hbWUtZGlyZWN0b3J5LTEgJiYKKwkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xYSAmJgogCiAJCWdpdCBjaGVja291dCBsZWZ0LWNsZWFuXjAgJiYKIApAQCAtMzIwLDggKzMyNyw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgKyBjb250ZW50IG1lcmdlIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfZGlyZWN0b3J5IDFiICYmCiAJKAotCQljZCByZW5hbWUtZGlyZWN0b3J5LTEgJiYKKwkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xYiAmJgogCiAJCWdpdCByZXNldCAtLWhhcmQgJiYKIAkJZ2l0IGNsZWFuIC1mZHF4ICYmCkBAIC0zNTgsNyArMzY2LDcgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbnRlbnQgbWVyZ2UgKyByZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0IHcvIGRpc2FwcGVhcmluZyBkaXInICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeV8yICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1kaXJlY3RvcnktMiAmJgogCSgKIAkJY2QgcmVuYW1lLWRpcmVjdG9yeS0yICYmCkBAIC0zODUsOSArMzkzLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tIGxlZnQKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FwcGVhcmluZyBkaXIgaW4gcmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCBoYW5kbGVkJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfZGlyZWN0b3J5XzIgJiYKIAkoCiAJCWNkIHJlbmFtZS1kaXJlY3RvcnktMiAmJgogCkBAIC00MTYsMTAgKzQyNSwxMCBAQAogIyAgIENvbW1pdCBBOiByZW5hbWUgYS0+YiwgbW9kaWZ5aW5nIGIgdG9vCiAjICAgQ29tbWl0IEI6IG1vZGlmeSBhLCBhZGQgZGlmZmVyZW50IGIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZSB2cy4gYWRkJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQgJiYKK3Rlc3Rfc2V0dXBfcmVuYW1lX3dpdGhfY29udGVudF9tZXJnZV9hbmRfYWRkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZC0kMSAmJgogCSgKLQkJY2QgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkICYmCisJCWNkIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZC0kMSAmJgogCiAJCXRlc3Rfc2VxIDEgNSA+YSAmJgogCQlnaXQgYWRkIGEgJiYKQEAgLTQzOCwxMSArNDQ3LDEyIEBACiAJCWdpdCBhZGQgYSBiICYmCiAJCWdpdCBjb21taXQgLW0gQgogCSkKLScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UgdnMuIGFkZCcgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3dpdGhfY29udGVudF9tZXJnZV9hbmRfYWRkIEFCICYmCiAJKAotCQljZCByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQgJiYKKwkJY2QgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkLUFCICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC00ODMsOCArNDkzLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UgdnMuIGFkZCwgbWVyZ2Ugb3RoZXIgd2F5JyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfd2l0aF9jb250ZW50X21lcmdlX2FuZF9hZGQgQkEgJiYKIAkoCi0JCWNkIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZCAmJgorCQljZCByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQtQkEgJiYKIAogCQlnaXQgcmVzZXQgLS1oYXJkICYmCiAJCWdpdCBjbGVhbiAtZmR4ICYmCkBAIC01MzksNyArNTUwLDcgQEAKICMgICAqIFRoZSB3b3JraW5nIGNvcHkgc2hvdWxkIGhhdmUgdHdvIGZpbGVzLCBib3RoIG9mIGZvcm0gY348dW5pcXVlPjsgZG9lcyBpdD8KICMgICAqIE5vdGhpbmcgZWxzZSBzaG91bGQgYmUgcHJlc2VudC4gIElzIGFueXRoaW5nPwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvcmVuYW1lICgydG8xKSArIG1vZGlmeS9tb2RpZnknICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8ydG8xICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtMnRvMSAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0ydG8xICYmCkBAIC01NjIsOSArNTczLDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tIEMKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUvcmVuYW1lICgydG8xKSBjb25mbGljdCBjb3JyZWN0bHknICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMnRvMSAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0ydG8xICYmCiAKQEAgLTYxMCw3ICs2MjIsNyBAQAogIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQogIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgogIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YwotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2ltcGxlIHJlbmFtZS9yZW5hbWUgKDF0bzIpIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTF0bzIgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMXRvMiAmJgpAQCAtNjMxLDkgKzY0MywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSBDCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBoYXMgY29ycmVjdCB3b3JraW5nIHRyZWUgY29udGVudHMnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMiAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yICYmCiAKQEAgLTY2Nyw3ICs2ODAsNyBAQAogIwogIyBNZXJnaW5nIG9mIEIgJiBDIHNob3VsZCBOT1QgYmUgY2xlYW47IHRoZXJlJ3MgYSByZW5hbWUvcmVuYW1lIGNvbmZsaWN0CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSBjb25mbGljdCcgJwordGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzJfYWRkX3NvdXJjZV8xICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtc291cmNlLTEgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtc291cmNlLTEgJiYKQEAgLTY4Nyw5ICs3MDAsMTAgQEAKIAkJZ2l0IGFkZCBhICYmCiAJCWdpdCBjb21taXQgLW0gQwogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAnZGV0ZWN0IGNvbmZsaWN0IHdpdGggcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtc291cmNlIG1lcmdlJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzJfYWRkX3NvdXJjZV8xICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0xICYmCiAKQEAgLTcxNCw3ICs3MjgsNyBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtc291cmNlIHJlc29sdmFibGUgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0yICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0yICYmCkBAIC03MzcsOSArNzUxLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tIHR3bwogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAncmVuYW1lL3JlbmFtZS9hZGQtc291cmNlIHN0aWxsIHRyYWNrcyBuZXcgYSBmaWxlJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzJfYWRkX3NvdXJjZV8yICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0yICYmCiAKQEAgLTc1OSw3ICs3NzQsNyBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtZGVzdCBjb25mbGljdCcgJwordGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzJfYWRkX2Rlc3QgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1kZXN0ICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLWRlc3QgJiYKQEAgLTc4NCw5ICs3OTksMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gdHdvCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvcmVuYW1lL2FkZC1kZXN0IG1lcmdlIHN0aWxsIGtub3dzIGFib3V0IGNvbmZsaWN0aW5nIGZpbGUgdmVyc2lvbnMnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMl9hZGRfZGVzdCAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1kZXN0ICYmCiAKQEAgLTgzOCw3ICs4NTQsNyBAQAogIyAgIENvbW1pdCBCOiByZW5hbWUgZm9vLT5iYXIKICMgICBFeHBlY3RlZDogQ09ORkxJQ1QgKHJlbmFtZS9hZGQvZGVsZXRlKSwgdHdvLXdheSBtZXJnZWQgYmFyCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhZC1zZXR1cDogcmVuYW1lL2FkZC9kZWxldGUgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfcmFkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJhZCAmJgogCSgKIAkJY2QgcmFkICYmCkBAIC04NjAsOSArODc2LDEwIEBACiAJCWdpdCBtdiBmb28gYmFyICYmCiAJCWdpdCBjb21taXQgLW0gInJlbmFtZSBmb28gdG8gYmFyIgogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAncmFkLWNoZWNrOiByZW5hbWUvYWRkL2RlbGV0ZSBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfcmFkICYmCiAJKAogCQljZCByYWQgJiYKIApAQCAtOTA0LDcgKzkyMSw3IEBACiAjICAgQ29tbWl0IEI6IHJlbmFtZSBiYXItPmJheiwgcm0gZm9vCiAjICAgRXhwZWN0ZWQ6IENPTkZMSUNUIChyZW5hbWUvcmVuYW1lL2RlbGV0ZS9kZWxldGUpLCB0d28td2F5IG1lcmdlZCBiYXoKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncnJkZC1zZXR1cDogcmVuYW1lL3JlbmFtZSgydG8xKS9kZWxldGUvZGVsZXRlIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwX3JyZGQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcnJkZCAmJgogCSgKIAkJY2QgcnJkZCAmJgpAQCAtOTI3LDkgKzk0NCwxMCBAQAogCQlnaXQgcm0gZm9vICYmCiAJCWdpdCBjb21taXQgLW0gIlJlbmFtZSBiYXIsIHJlbW92ZSBmb28iCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdycmRkLWNoZWNrOiByZW5hbWUvcmVuYW1lKDJ0bzEpL2RlbGV0ZS9kZWxldGUgY29uZmxpY3QnICcKKwl0ZXN0X3NldHVwX3JyZGQgJiYKIAkoCiAJCWNkIHJyZGQgJiYKIApAQCAtOTczLDcgKzk5MSw3IEBACiAjICAgRXhwZWN0ZWQ6IHNpeCBDT05GTElDVChyZW5hbWUvcmVuYW1lKSBtZXNzYWdlcywgZWFjaCBwYXRoIGluIHR3byBvZiB0aGUKICMgICAgICAgICAgICAgbXVsdGktd2F5IG1lcmdlZCBjb250ZW50cyBmb3VuZCBpbiB0d28sIGZvdXIsIHNpeAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2Q2LXNldHVwOiBjaGFpbnMgb2YgcmVuYW1lL3JlbmFtZSgxdG8yKSBhbmQgcmVuYW1lL3JlbmFtZSgydG8xKScgJwordGVzdF9zZXR1cF9tb2Q2ICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIG1vZDYgJiYKIAkoCiAJCWNkIG1vZDYgJiYKQEAgLTEwMDksOSArMTAyNywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ21vZDYtY2hlY2s6IGNoYWlucyBvZiByZW5hbWUvcmVuYW1lKDF0bzIpIGFuZCByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCisJdGVzdF9zZXR1cF9tb2Q2ICYmCiAJKAogCQljZCBtb2Q2ICYmCiAKQEAgLTExMDgsNyArMTEyNyw4IEBACiAJIyAgICAgIGZpbGVzLiAgSXMgaXQgcHJlc2VudD8KIAkjICAgNCkgVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdGhyZWV+KiBmaWxlcyBpbiB0aGUgd29ya2luZwogCSMgICAgICB0cmVlCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgc2ltcGxlICRzaWRlTC8kc2lkZVIgY29uZmxpY3QiICcKKwl0ZXN0X3NldHVwX2NvbGxpc2lvbl9jb25mbGljdCAoKSB7CisJI3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHNpbXBsZSAkc2lkZUwvJHNpZGVSIGNvbmZsaWN0IiAnCiAJCXRlc3RfY3JlYXRlX3JlcG8gc2ltcGxlXyR7c2lkZUx9XyR7c2lkZVJ9ICYmCiAJCSgKIAkJCWNkIHNpbXBsZV8ke3NpZGVMfV8ke3NpZGVSfSAmJgpAQCAtMTE4NSw5ICsxMjA1LDExIEBACiAJCQlmaSAmJgogCQkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gUgogCQkpCi0JJworCSMnCisJfQogCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgc2ltcGxlICRzaWRlTC8kc2lkZVIgY29uZmxpY3QiICcKKwkJdGVzdF9zZXR1cF9jb2xsaXNpb25fY29uZmxpY3QgJiYKIAkJKAogCQkJY2Qgc2ltcGxlXyR7c2lkZUx9XyR7c2lkZVJ9ICYmCiAKQEAgLTEyNTQsNyArMTI3Niw3IEBACiAjCiAjICAgU28sIHdlIGhhdmUgZm91ciBkaWZmZXJlbnQgY29uZmxpY3RpbmcgZmlsZXMgdGhhdCBhbGwgZW5kIHVwIGF0IHBhdGgKICMgICAndGhyZWUnLgotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbmVzdGVkIGNvbmZsaWN0cyBmcm9tIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKK3Rlc3Rfc2V0dXBfbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgJiYKIAkoCiAJCWNkIG5lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICYmCkBAIC0xMzA1LDkgKzEzMjcsMTAgQEAKIAkJZ2l0IGFkZCBvbmUgdGhyZWUgJiYKIAkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gZ2VybWFuCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBuZXN0ZWQgY29uZmxpY3RzIGZyb20gcmVuYW1lL3JlbmFtZSgydG8xKScgJworCXRlc3Rfc2V0dXBfbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgJiYKIAkoCiAJCWNkIG5lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICYmCiAKZGlmZiAtLWdpdCBhL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoIGIvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2gKaW5kZXggYzk2NjE0Ny4uODM3OTJjNSAxMDA3NTUKLS0tIGEvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2gKKysrIGIvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2gKQEAgLTM4LDcgKzM4LDcgQEAKICMgICBDb21taXQgQjogei97YixjLGQsZS9mfQogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlL2Z9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLXNldHVwOiBTaW1wbGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24nICcKK3Rlc3Rfc2V0dXBfMWEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWEgJiYKIAkoCiAJCWNkIDFhICYmCkBAIC02Nyw5ICs2NywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLWNoZWNrOiBTaW1wbGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhOiBTaW1wbGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24nICcKKwl0ZXN0X3NldHVwXzFhICYmCiAJKAogCQljZCAxYSAmJgogCkBAIC0xMDMsNyArMTA0LDcgQEAKICMgICBDb21taXQgQjogeS97YixjLGR9CiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxkLGV9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFiLXNldHVwOiBNZXJnZSBhIGRpcmVjdG9yeSB3aXRoIGFub3RoZXInICcKK3Rlc3Rfc2V0dXBfMWIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWIgJiYKIAkoCiAJCWNkIDFiICYmCkBAIC0xMzQsOSArMTM1LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWItY2hlY2s6IE1lcmdlIGEgZGlyZWN0b3J5IHdpdGggYW5vdGhlcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWI6IE1lcmdlIGEgZGlyZWN0b3J5IHdpdGggYW5vdGhlcicgJworCXRlc3Rfc2V0dXBfMWIgJiYKIAkoCiAJCWNkIDFiICYmCiAKQEAgLTE2NSw3ICsxNjcsNyBAQAogIyAgIENvbW1pdCBCOiB6L3tiLGMsZH0KICMgICBFeHBlY3RlZDogeS97YixjLGR9ICAoYmVjYXVzZSB4L2QgLT4gei9kIC0+IHkvZCkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWMtc2V0dXA6IFRyYW5zaXRpdmUgcmVuYW1pbmcnICcKK3Rlc3Rfc2V0dXBfMWMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWMgJiYKIAkoCiAJCWNkIDFjICYmCkBAIC0xOTMsOSArMTk1LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWMtY2hlY2s6IFRyYW5zaXRpdmUgcmVuYW1pbmcnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFjOiBUcmFuc2l0aXZlIHJlbmFtaW5nJyAnCisJdGVzdF9zZXR1cF8xYyAmJgogCSgKIAkJY2QgMWMgJiYKIApAQCAtMjI3LDcgKzIzMCw3IEBACiAjICAgTm90ZTogeS9tICYgei9uIHNob3VsZCBkZWZpbml0ZWx5IG1vdmUgaW50byB4LiAgQnkgdGhlIHNhbWUgdG9rZW4sIGJvdGgKICMgICAgICAgICB5L3doYW1fMSAmIHovd2hhbV8yIHNob3VsZCB0b28uLi5naXZpbmcgdXMgYSBjb25mbGljdC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWQtc2V0dXA6IERpcmVjdG9yeSByZW5hbWVzIGNhdXNlIGEgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdCcgJwordGVzdF9zZXR1cF8xZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxZCAmJgogCSgKIAkJY2QgMWQgJiYKQEAgLTI2Miw5ICsyNjUsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxZC1jaGVjazogRGlyZWN0b3J5IHJlbmFtZXMgY2F1c2UgYSByZW5hbWUvcmVuYW1lKDJ0bzEpIGNvbmZsaWN0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZDogRGlyZWN0b3J5IHJlbmFtZXMgY2F1c2UgYSByZW5hbWUvcmVuYW1lKDJ0bzEpIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xZCAmJgogCSgKIAkJY2QgMWQgJiYKIApAQCAtMzEzLDcgKzMxNyw3IEBACiAjICAgQ29tbWl0IEI6IHove29sZGIsb2xkYyxkfQogIyAgIEV4cGVjdGVkOiB5L3tuZXdiLG5ld2MsZH0KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWUtc2V0dXA6IFJlbmFtZWQgZGlyZWN0b3J5LCB3aXRoIGFsbCBmaWxlcyBiZWluZyByZW5hbWVkIHRvbycgJwordGVzdF9zZXR1cF8xZSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxZSAmJgogCSgKIAkJY2QgMWUgJiYKQEAgLTM0Miw5ICszNDYsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxZS1jaGVjazogUmVuYW1lZCBkaXJlY3RvcnksIHdpdGggYWxsIGZpbGVzIGJlaW5nIHJlbmFtZWQgdG9vJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZTogUmVuYW1lZCBkaXJlY3RvcnksIHdpdGggYWxsIGZpbGVzIGJlaW5nIHJlbmFtZWQgdG9vJyAnCisJdGVzdF9zZXR1cF8xZSAmJgogCSgKIAkJY2QgMWUgJiYKIApAQCAtMzcxLDcgKzM3Niw3IEBACiAjICAgQ29tbWl0IEI6IHkve2IsY30sIHgve2QsZSxmfQogIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCB4L3tkLGUsZixnfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxZi1zZXR1cDogU3BsaXQgYSBkaXJlY3RvcnkgaW50byB0d28gb3RoZXIgZGlyZWN0b3JpZXMnICcKK3Rlc3Rfc2V0dXBfMWYgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWYgJiYKIAkoCiAJCWNkIDFmICYmCkBAIC00MDgsOSArNDEzLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWYtY2hlY2s6IFNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG90aGVyIGRpcmVjdG9yaWVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZjogU3BsaXQgYSBkaXJlY3RvcnkgaW50byB0d28gb3RoZXIgZGlyZWN0b3JpZXMnICcKKwl0ZXN0X3NldHVwXzFmICYmCiAJKAogCQljZCAxZiAmJgogCkBAIC00NTksNyArNDY1LDcgQEAKICMgICBDb21taXQgQTogeS9iLCB3L2MKICMgICBDb21taXQgQjogei97YixjLGR9CiAjICAgRXhwZWN0ZWQ6IHkvYiwgdy9jLCB6L2QsIHdpdGggd2FybmluZyBhYm91dCB6LyAtPiAoeS8gdnMuIHcvKSBjb25mbGljdAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmEtc2V0dXA6IERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzJyAnCit0ZXN0X3NldHVwXzJhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDJhICYmCiAJKAogCQljZCAyYSAmJgpAQCAtNDg5LDkgKzQ5NSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLWNoZWNrOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmE6IERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzJyAnCisJdGVzdF9zZXR1cF8yYSAmJgogCSgKIAkJY2QgMmEgJiYKIApAQCAtNTIwLDcgKzUyNyw3IEBACiAjICAgQ29tbWl0IEE6IHkvYiwgdy9jCiAjICAgQ29tbWl0IEI6IHove2IsY30sIHgvZAogIyAgIEV4cGVjdGVkOiB5L2IsIHcvYywgeC9kOyBObyB3YXJuaW5nIGFib3V0IHovIC0+ICh5LyB2cy4gdy8pIGNvbmZsaWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYi1zZXR1cDogRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMnICcKK3Rlc3Rfc2V0dXBfMmIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMmIgJiYKIAkoCiAJCWNkIDJiICYmCkBAIC01NTEsOSArNTU4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmItY2hlY2s6IERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYjogRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMnICcKKwl0ZXN0X3NldHVwXzJiICYmCiAJKAogCQljZCAyYiAmJgogCkBAIC02MDEsNyArNjA5LDcgQEAKICMgICBDb21taXQgQTogei97YixjLGR9IChubyBjaGFuZ2UpCiAjICAgQ29tbWl0IEI6IHkve2IsY30sIHgvZAogIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCB4L2QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLXNldHVwOiBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUnICcKK3Rlc3Rfc2V0dXBfM2EgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gM2EgJiYKIAkoCiAJCWNkIDNhICYmCkBAIC02MzIsOSArNjQwLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2EtY2hlY2s6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gb3RoZXIgc2lkZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2E6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gb3RoZXIgc2lkZScgJworCXRlc3Rfc2V0dXBfM2EgJiYKIAkoCiAJCWNkIDNhICYmCiAKQEAgLTY2NCw3ICs2NzMsNyBAQAogIyAgICAgICAgIGdldCBpdCBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4gIElmIGl0IHdlcmUsIHdlIG1pZ2h0CiAjICAgICAgICAgZW5kIHVwIHdpdGggQ09ORkxJQ1Q6KHovZCAtPiB5L2QgdnMuIHgvZCB2cy4gdy9kKSwgaS5lLiBhCiAjICAgICAgICAgcmVuYW1lL3JlbmFtZS9yZW5hbWUoMXRvMykgY29uZmxpY3QsIHdoaWNoIGlzIGp1c3Qgd2VpcmQuCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYi1zZXR1cDogQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBjdXJyZW50IHNpZGUnICcKK3Rlc3Rfc2V0dXBfM2IgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gM2IgJiYKIAkoCiAJCWNkIDNiICYmCkBAIC02OTcsOSArNzA2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItY2hlY2s6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gY3VycmVudCBzaWRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYjogQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBjdXJyZW50IHNpZGUnICcKKwl0ZXN0X3NldHVwXzNiICYmCiAJKAogCQljZCAzYiAmJgogCkBAIC03NDQsNyArNzU0LDcgQEAKICMKICMgV2hhdCBpZiB3ZSB3ZXJlIHRvIGF0dGVtcHQgdG8gZG8gZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gd2hlbiBzb21lb25lCiAjICJtb3N0bHkiIG1vdmVkIGEgZGlyZWN0b3J5IGJ1dCBzdGlsbCBsZWZ0IHNvbWUgZmlsZXMgYXJvdW5kLCBvciwKLSMgZXF1aXZhbGVudGx5LCBmdWxseSByZW5hbWVkIGEgZGlyZWN0b3J5IGluIG9uZSBjb21tbWl0IGFuZCB0aGVuIHJlY3JlYXRlZAorIyBlcXVpdmFsZW50bHksIGZ1bGx5IHJlbmFtZWQgYSBkaXJlY3RvcnkgaW4gb25lIGNvbW1pdCBhbmQgdGhlbiByZWNyZWF0ZWQKICMgdGhhdCBkaXJlY3RvcnkgaW4gYSBsYXRlciBjb21taXQgYWRkaW5nIHNvbWUgbmV3IGZpbGVzIGFuZCB0aGVuIHRyaWVkIHRvCiAjIG1lcmdlPwogIwpAQCAtNzg2LDcgKzc5Niw3IEBACiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxkfSwgei97ZSxmfQogIyAgIE5PVEU6IEV2ZW4gdGhvdWdoIG1vc3QgZmlsZXMgZnJvbSB6IG1vdmVkIHRvIHksIHdlIGRvbid0IHdhbnQgZiB0byBmb2xsb3cuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRhLXNldHVwOiBEaXJlY3Rvcnkgc3BsaXQsIHdpdGggb3JpZ2luYWwgZGlyZWN0b3J5IHN0aWxsIHByZXNlbnQnICcKK3Rlc3Rfc2V0dXBfNGEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNGEgJiYKIAkoCiAJCWNkIDRhICYmCkBAIC04MTgsOSArODI4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNGEtY2hlY2s6IERpcmVjdG9yeSBzcGxpdCwgd2l0aCBvcmlnaW5hbCBkaXJlY3Rvcnkgc3RpbGwgcHJlc2VudCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNGE6IERpcmVjdG9yeSBzcGxpdCwgd2l0aCBvcmlnaW5hbCBkaXJlY3Rvcnkgc3RpbGwgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGEgJiYKIAkoCiAJCWNkIDRhICYmCiAKQEAgLTg3NCw3ICs4ODUsNyBAQAogIyAgICAgICAgIG9mIGhpc3RvcnksIGdpdmluZyB1cyBubyB3YXkgdG8gcmVwcmVzZW50IHRoaXMgY29uZmxpY3QgaW4gdGhlCiAjICAgICAgICAgaW5kZXguCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVhLXNldHVwOiBNZXJnZSBkaXJlY3Rvcmllcywgb3RoZXIgc2lkZSBhZGRzIGZpbGVzIHRvIG9yaWdpbmFsIGFuZCB0YXJnZXQnICcKK3Rlc3Rfc2V0dXBfNWEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNWEgJiYKIAkoCiAJCWNkIDVhICYmCkBAIC05MDcsOSArOTE4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNWEtY2hlY2s6IE1lcmdlIGRpcmVjdG9yaWVzLCBvdGhlciBzaWRlIGFkZHMgZmlsZXMgdG8gb3JpZ2luYWwgYW5kIHRhcmdldCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWE6IE1lcmdlIGRpcmVjdG9yaWVzLCBvdGhlciBzaWRlIGFkZHMgZmlsZXMgdG8gb3JpZ2luYWwgYW5kIHRhcmdldCcgJworCXRlc3Rfc2V0dXBfNWEgJiYKIAkoCiAJCWNkIDVhICYmCiAKQEAgLTk0MSwxNCArOTUzLDE0IEBACiAjICAgQ29tbWl0IEI6IHove2IsYyxkXzEsZX0sIHkvZF8zCiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxlfSwgQ09ORkxJQ1QoYWRkL2FkZDogeS9kXzIgdnMuIHkvZF8zKQogIyAgIE5PVEU6IElmIHovZF8xIGluIGNvbW1pdCBCIHdlcmUgdG8gYmUgaW52b2x2ZWQgaW4gZGlyIHJlbmFtZSBkZXRlY3Rpb24sIGFzCi0jICAgICAgICAgd2Ugbm9ybWFseSB3b3VsZCBzaW5jZSB6LyBpcyBiZWluZyByZW5hbWVkIHRvIHkvLCB0aGVuIHRoaXMgd291bGQgYmUKKyMgICAgICAgICB3ZSBub3JtYWxseSB3b3VsZCBzaW5jZSB6LyBpcyBiZWluZyByZW5hbWVkIHRvIHkvLCB0aGVuIHRoaXMgd291bGQgYmUKICMgICAgICAgICBhIHJlbmFtZS9kZWxldGUgKHovZF8xIC0+IHkvZF8xIHZzLiBkZWxldGVkKSBBTkQgYW4gYWRkL2FkZC9hZGQKICMgICAgICAgICBjb25mbGljdCBvZiB5L2RfMSB2cy4geS9kXzIgdnMuIHkvZF8zLiAgQWRkL2FkZC9hZGQgaXMgbm90CiAjICAgICAgICAgcmVwcmVzZW50YWJsZSBpbiB0aGUgaW5kZXgsIHNvIHRoZSBleGlzdGVuY2Ugb2YgeS9kXzMgbmVlZHMgdG8KICMgICAgICAgICBjYXVzZSB1cyB0byBiYWlsIG9uIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGZvciB0aGF0IHBhdGgsIGZhbGxpbmcKICMgICAgICAgICBiYWNrIHRvIGdpdCBiZWhhdmlvciB3aXRob3V0IHRoZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNWItc2V0dXA6IFJlbmFtZS9kZWxldGUgaW4gb3JkZXIgdG8gZ2V0IGFkZC9hZGQvYWRkIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwXzViICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDViICYmCiAJKAogCQljZCA1YiAmJgpAQCAtOTgxLDkgKzk5MywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzViLWNoZWNrOiBSZW5hbWUvZGVsZXRlIGluIG9yZGVyIHRvIGdldCBhZGQvYWRkL2FkZCBjb25mbGljdCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWI6IFJlbmFtZS9kZWxldGUgaW4gb3JkZXIgdG8gZ2V0IGFkZC9hZGQvYWRkIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF81YiAmJgogCSgKIAkJY2QgNWIgJiYKIApAQCAtMTAyNCw3ICsxMDM3LDcgQEAKICMgICAgICAgICAgICAgeS9kIGFyZSB5L2RfMiBhbmQgeS9kXzQuICBXZSBzdGlsbCBkbyB0aGUgbW92ZSBmcm9tIHovZSB0byB5L2UsCiAjICAgICAgICAgICAgIHRob3VnaCwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW55dGhpbmcgaW4gdGhlIHdheS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNWMtc2V0dXA6IFRyYW5zaXRpdmUgcmVuYW1lIHdvdWxkIGNhdXNlIHJlbmFtZS9yZW5hbWUvcmVuYW1lL2FkZC9hZGQvYWRkJyAnCit0ZXN0X3NldHVwXzVjICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDVjICYmCiAJKAogCQljZCA1YyAmJgpAQCAtMTA2MSw5ICsxMDc0LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNWMtY2hlY2s6IFRyYW5zaXRpdmUgcmVuYW1lIHdvdWxkIGNhdXNlIHJlbmFtZS9yZW5hbWUvcmVuYW1lL2FkZC9hZGQvYWRkJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1YzogVHJhbnNpdGl2ZSByZW5hbWUgd291bGQgY2F1c2UgcmVuYW1lL3JlbmFtZS9yZW5hbWUvYWRkL2FkZC9hZGQnICcKKwl0ZXN0X3NldHVwXzVjICYmCiAJKAogCQljZCA1YyAmJgogCkBAIC0xMTEzLDcgKzExMjcsNyBAQAogIyAgICAgICAgIGRldGVjdGlvbiBmb3Igei9kXzIsIGJ1dCB0aGF0IGRvZXNuJ3QgcHJldmVudCB1cyBmcm9tIGFwcGx5aW5nIHRoZQogIyAgICAgICAgIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGZvciB6L2YgLT4geS9mLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc1ZC1zZXR1cDogRGlyZWN0b3J5L2ZpbGUvZmlsZSBjb25mbGljdCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZScgJwordGVzdF9zZXR1cF81ZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA1ZCAmJgogCSgKIAkJY2QgNWQgJiYKQEAgLTExNDUsOSArMTE1OSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVkLWNoZWNrOiBEaXJlY3RvcnkvZmlsZS9maWxlIGNvbmZsaWN0IGR1ZSB0byBkaXJlY3RvcnkgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1ZDogRGlyZWN0b3J5L2ZpbGUvZmlsZSBjb25mbGljdCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZScgJworCXRlc3Rfc2V0dXBfNWQgJiYKIAkoCiAJCWNkIDVkICYmCiAKQEAgLTEyMDUsNyArMTIyMCw3IEBACiAjICAgICAgICAgdGhlbSB1bmRlciB5LyBkb2Vzbid0IGFjY2lkZW50YWxseSBjYXRjaCB6L2QgYW5kIG1ha2UgaXQgbG9vayBsaWtlCiAjICAgICAgICAgaXQgaXMgYWxzbyBpbnZvbHZlZCBpbiBhIHJlbmFtZS9kZWxldGUgY29uZmxpY3QuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZhLXNldHVwOiBUcmlja3kgcmVuYW1lL2RlbGV0ZScgJwordGVzdF9zZXR1cF82YSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA2YSAmJgogCSgKIAkJY2QgNmEgJiYKQEAgLTEyMzUsOSArMTI1MCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZhLWNoZWNrOiBUcmlja3kgcmVuYW1lL2RlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmE6IFRyaWNreSByZW5hbWUvZGVsZXRlJyAnCisJdGVzdF9zZXR1cF82YSAmJgogCSgKIAkJY2QgNmEgJiYKIApAQCAtMTI3MSw3ICsxMjg3LDcgQEAKICMgICAgICAgICBidXQgQiBkaWQgdGhhdCByZW5hbWUgYW5kIHN0aWxsIGRlY2lkZWQgdG8gcHV0IHRoZSBmaWxlIGludG8gei8sCiAjICAgICAgICAgc28gd2UgcHJvYmFibHkgc2hvdWxkbid0IGFwcGx5IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGZvciBpdC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmItc2V0dXA6IFNhbWUgcmVuYW1lIGRvbmUgb24gYm90aCBzaWRlcycgJwordGVzdF9zZXR1cF82YiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA2YiAmJgogCSgKIAkJY2QgNmIgJiYKQEAgLTEzMDAsOSArMTMxNiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZiLWNoZWNrOiBTYW1lIHJlbmFtZSBkb25lIG9uIGJvdGggc2lkZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZiOiBTYW1lIHJlbmFtZSBkb25lIG9uIGJvdGggc2lkZXMnICcKKwl0ZXN0X3NldHVwXzZiICYmCiAJKAogCQljZCA2YiAmJgogCkBAIC0xMzM0LDcgKzEzNTEsNyBAQAogIyAgIE5PVEU6IFNlZW1zIG9idmlvdXMsIGJ1dCBqdXN0IGNoZWNraW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QKICMgICAgICAgICAiYWNjaWRlbnRhbGx5IGRldGVjdCBhIHJlbmFtZSIgYW5kIGdpdmUgdXMgeS97YixjLGR9LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2Yy1zZXR1cDogUmVuYW1lIG9ubHkgZG9uZSBvbiBzYW1lIHNpZGUnICcKK3Rlc3Rfc2V0dXBfNmMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNmMgJiYKIAkoCiAJCWNkIDZjICYmCkBAIC0xMzYyLDkgKzEzNzksMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2Yy1jaGVjazogUmVuYW1lIG9ubHkgZG9uZSBvbiBzYW1lIHNpZGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZjOiBSZW5hbWUgb25seSBkb25lIG9uIHNhbWUgc2lkZScgJworCXRlc3Rfc2V0dXBfNmMgJiYKIAkoCiAJCWNkIDZjICYmCiAKQEAgLTEzOTYsNyArMTQxNCw3IEBACiAjICAgTk9URTogQWdhaW4sIHRoaXMgc2VlbXMgb2J2aW91cyBidXQganVzdCBjaGVja2luZyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgogIyAgICAgICAgIGRvZXNuJ3QgImFjY2lkZW50YWxseSBkZXRlY3QgYSByZW5hbWUiIGFuZCBnaXZlIHVzIHkve2IsYyxkfS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmQtc2V0dXA6IFdlIGRvIG5vdCBhbHdheXMgd2FudCB0cmFuc2l0aXZlIHJlbmFtaW5nJyAnCit0ZXN0X3NldHVwXzZkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDZkICYmCiAJKAogCQljZCA2ZCAmJgpAQCAtMTQyNCw5ICsxNDQyLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmQtY2hlY2s6IFdlIGRvIG5vdCBhbHdheXMgd2FudCB0cmFuc2l0aXZlIHJlbmFtaW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2ZDogV2UgZG8gbm90IGFsd2F5cyB3YW50IHRyYW5zaXRpdmUgcmVuYW1pbmcnICcKKwl0ZXN0X3NldHVwXzZkICYmCiAJKAogCQljZCA2ZCAmJgogCkBAIC0xNDU4LDcgKzE0NzcsNyBAQAogIyAgICAgICAgIGRvZXNuJ3QgImFjY2lkZW50YWxseSBkZXRlY3QgYSByZW5hbWUiIGFuZCBnaXZlIHVzIHkve2IsY30gKwogIyAgICAgICAgIGFkZC9hZGQgY29uZmxpY3Qgb24geS9kXzEgdnMgeS9kXzIuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZlLXNldHVwOiBBZGQvYWRkIGZyb20gb25lIHNpZGUnICcKK3Rlc3Rfc2V0dXBfNmUgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNmUgJiYKIAkoCiAJCWNkIDZlICYmCkBAIC0xNDg3LDkgKzE1MDYsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2ZS1jaGVjazogQWRkL2FkZCBmcm9tIG9uZSBzaWRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2ZTogQWRkL2FkZCBmcm9tIG9uZSBzaWRlJyAnCisJdGVzdF9zZXR1cF82ZSAmJgogCSgKIAkJY2QgNmUgJiYKIApAQCAtMTU1Miw3ICsxNTcyLDcgQEAKICMgICBFeHBlY3RlZDogeS9kLCBDT05GTElDVChyZW5hbWUvcmVuYW1lIGZvciBib3RoIHovYiBhbmQgei9jKQogIyAgIE5PVEU6IFRoZXJlJ3MgYSByZW5hbWUgb2Ygei8gaGVyZSwgeS8gaGFzIG1vcmUgcmVuYW1lcywgc28gei9kIC0+IHkvZC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2Etc2V0dXA6IHJlbmFtZS1kaXIgdnMuIHJlbmFtZS1kaXIgKE5PVCBzcGxpdCBldmVubHkpIFBMVVMgYWRkLW90aGVyLWZpbGUnICcKK3Rlc3Rfc2V0dXBfN2EgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gN2EgJiYKIAkoCiAJCWNkIDdhICYmCkBAIC0xNTgzLDkgKzE2MDMsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3YS1jaGVjazogcmVuYW1lLWRpciB2cy4gcmVuYW1lLWRpciAoTk9UIHNwbGl0IGV2ZW5seSkgUExVUyBhZGQtb3RoZXItZmlsZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2E6IHJlbmFtZS1kaXIgdnMuIHJlbmFtZS1kaXIgKE5PVCBzcGxpdCBldmVubHkpIFBMVVMgYWRkLW90aGVyLWZpbGUnICcKKwl0ZXN0X3NldHVwXzdhICYmCiAJKAogCQljZCA3YSAmJgogCkBAIC0xNjIzLDcgKzE2NDQsNyBAQAogIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8xfSwgICAgICAgIHcvZF8yCiAjICAgRXhwZWN0ZWQ6IHkve2IsY30sIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUoMnRvMSk6IHgvZF8xLCB3L2RfMiAtPiB5X2QpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdiLXNldHVwOiByZW5hbWUvcmVuYW1lKDJ0bzEpLCBidXQgb25seSBkdWUgdG8gdHJhbnNpdGl2ZSByZW5hbWUnICcKK3Rlc3Rfc2V0dXBfN2IgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gN2IgJiYKIAkoCiAJCWNkIDdiICYmCkBAIC0xNjU1LDkgKzE2NzYsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3Yi1jaGVjazogcmVuYW1lL3JlbmFtZSgydG8xKSwgYnV0IG9ubHkgZHVlIHRvIHRyYW5zaXRpdmUgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3YjogcmVuYW1lL3JlbmFtZSgydG8xKSwgYnV0IG9ubHkgZHVlIHRvIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF83YiAmJgogCSgKIAkJY2QgN2IgJiYKIApAQCAtMTcwMiw3ICsxNzI0LDcgQEAKICMgICAgICAgICBuZWl0aGVyIENPTkZMSUNUKHgvZCAtPiB3L2QgdnMuIHovZCkKICMgICAgICAgICBub3IgQ09ORkxpQ1QgeC9kIC0+IHcvZCB2cy4geS9kIHZzLiB6L2QpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdjLXNldHVwOiByZW5hbWUvcmVuYW1lKDF0by4uLjJvcjMpOyB0cmFuc2l0aXZlIHJlbmFtZSBtYXkgYWRkIGNvbXBsZXhpdHknICcKK3Rlc3Rfc2V0dXBfN2MgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gN2MgJiYKIAkoCiAJCWNkIDdjICYmCkBAIC0xNzMyLDkgKzE3NTQsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3Yy1jaGVjazogcmVuYW1lL3JlbmFtZSgxdG8uLi4yb3IzKTsgdHJhbnNpdGl2ZSByZW5hbWUgbWF5IGFkZCBjb21wbGV4aXR5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3YzogcmVuYW1lL3JlbmFtZSgxdG8uLi4yb3IzKTsgdHJhbnNpdGl2ZSByZW5hbWUgbWF5IGFkZCBjb21wbGV4aXR5JyAnCisJdGVzdF9zZXR1cF83YyAmJgogCSgKIAkJY2QgN2MgJiYKIApAQCAtMTc2Niw3ICsxNzg5LDcgQEAKICMgICBFeHBlY3RlZDogeS97YixjfSwgQ09ORkxJQ1QoZGVsZXRlIHgvZCB2cyByZW5hbWUgdG8geS9kKQogIyAgIE5PVEU6IHotPnkgc28gTk9UIENPTkZMSUNUKGRlbGV0ZSB4L2QgdnMgcmVuYW1lIHRvIHovZCkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2Qtc2V0dXA6IHRyYW5zaXRpdmUgcmVuYW1lIGludm9sdmVkIGluIHJlbmFtZS9kZWxldGU7IGhvdyBpcyBpdCByZXBvcnRlZD8nICcKK3Rlc3Rfc2V0dXBfN2QgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gN2QgJiYKIAkoCiAJCWNkIDdkICYmCkBAIC0xNzk2LDkgKzE4MTksMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3ZC1jaGVjazogdHJhbnNpdGl2ZSByZW5hbWUgaW52b2x2ZWQgaW4gcmVuYW1lL2RlbGV0ZTsgaG93IGlzIGl0IHJlcG9ydGVkPycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2Q6IHRyYW5zaXRpdmUgcmVuYW1lIGludm9sdmVkIGluIHJlbmFtZS9kZWxldGU7IGhvdyBpcyBpdCByZXBvcnRlZD8nICcKKwl0ZXN0X3NldHVwXzdkICYmCiAJKAogCQljZCA3ZCAmJgogCkBAIC0xODUxLDcgKzE4NzUsNyBAQAogIyAgICAgICAgIHNlZSB0ZXN0Y2FzZXMgOWMgYW5kIDlkIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24gb2YgdGhpcyBpc3N1ZSBhbmQKICMgICAgICAgICBob3cgaXQncyByZXNvbHZlZC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2Utc2V0dXA6IHRyYW5zaXRpdmUgcmVuYW1lIGluIHJlbmFtZS9kZWxldGUgQU5EIGRpcnMgaW4gdGhlIHdheScgJwordGVzdF9zZXR1cF83ZSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA3ZSAmJgogCSgKIAkJY2QgN2UgJiYKQEAgLTE4ODYsOSArMTkxMCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdlLWNoZWNrOiB0cmFuc2l0aXZlIHJlbmFtZSBpbiByZW5hbWUvZGVsZXRlIEFORCBkaXJzIGluIHRoZSB3YXknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdlOiB0cmFuc2l0aXZlIHJlbmFtZSBpbiByZW5hbWUvZGVsZXRlIEFORCBkaXJzIGluIHRoZSB3YXknICcKKwl0ZXN0X3NldHVwXzdlICYmCiAJKAogCQljZCA3ZSAmJgogCkBAIC0xOTQ1LDcgKzE5NzAsNyBAQAogIyBzaW1wbGUgcnVsZSBmcm9tIHNlY3Rpb24gNSBwcmV2ZW50cyBtZSBmcm9tIGhhbmRsaW5nIHRoaXMgYXMgb3B0aW1hbGx5IGFzCiAjIHdlIHBvdGVudGlhbGx5IGNvdWxkLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4YS1zZXR1cDogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheScgJwordGVzdF9zZXR1cF84YSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA4YSAmJgogCSgKIAkJY2QgOGEgJiYKQEAgLTE5NzcsOSArMjAwMiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhhLWNoZWNrOiBEdWFsLWRpcmVjdG9yeSByZW5hbWUsIG9uZSBpbnRvIHRoZSBvdGhlcnMgd2F5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YTogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheScgJworCXRlc3Rfc2V0dXBfOGEgJiYKIAkoCiAJCWNkIDhhICYmCiAKQEAgLTIwMjMsNyArMjA0OSw3IEBACiAjIG1ha2luZyB1cyBmYWxsIGJhY2sgdG8gcHJlLWRpcmVjdG9yeS1yZW5hbWUtZGV0ZWN0aW9uIGJlaGF2aW9yIGZvciBib3RoCiAjIGVfMSBhbmQgZV8yLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4Yi1zZXR1cDogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheSwgd2l0aCBjb25mbGljdGluZyBmaWxlbmFtZXMnICcKK3Rlc3Rfc2V0dXBfOGIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOGIgJiYKIAkoCiAJCWNkIDhiICYmCkBAIC0yMDU1LDkgKzIwODEsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4Yi1jaGVjazogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheSwgd2l0aCBjb25mbGljdGluZyBmaWxlbmFtZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhiOiBEdWFsLWRpcmVjdG9yeSByZW5hbWUsIG9uZSBpbnRvIHRoZSBvdGhlcnMgd2F5LCB3aXRoIGNvbmZsaWN0aW5nIGZpbGVuYW1lcycgJworCXRlc3Rfc2V0dXBfOGIgJiYKIAkoCiAJCWNkIDhiICYmCiAKQEAgLTIwODksMTQgKzIxMTYsMTQgQEAKICMKICMgICBOb3RlOiBJdCBjb3VsZCBlYXNpbHkgYmUgYXJndWVkIHRoYXQgdGhlIGNvcnJlY3QgcmVzb2x1dGlvbiBoZXJlIGlzCiAjICAgICAgICAgeS97YixjLGV9LCBDT05GTElDVChyZW5hbWUvZGVsZXRlOiB6L2QgLT4geS9kIHZzIGRlbGV0ZWQpCi0jICAgICAgICAgYW5kIHRoYXQgdGhlIG1vZGlmZWQgdmVyc2lvbiBvZiBkIHNob3VsZCBiZSBwcmVzZW50IGluIHkvIGFmdGVyCisjICAgICAgICAgYW5kIHRoYXQgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgZCBzaG91bGQgYmUgcHJlc2VudCBpbiB5LyBhZnRlcgogIyAgICAgICAgIHRoZSBtZXJnZSwganVzdCBtYXJrZWQgYXMgY29uZmxpY3RlZC4gIEluZGVlZCwgSSBwcmV2aW91c2x5IGRpZAogIyAgICAgICAgIGFyZ3VlIHRoYXQuICBCdXQgYXBwbHlpbmcgZGlyZWN0b3J5IHJlbmFtZXMgdG8gdGhlIHNpZGUgb2YKICMgICAgICAgICBoaXN0b3J5IHdoZXJlIGEgZmlsZSBpcyBtZXJlbHkgbW9kaWZpZWQgcmVzdWx0cyBpbiBzcHVyaW91cwogIyAgICAgICAgIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3RzIC0tIHNlZSB0ZXN0Y2FzZSA5aC4gIFNlZSBhbHNvCiAjICAgICAgICAgbm90ZXMgaW4gOGQuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhjLXNldHVwOiBtb2RpZnkvZGVsZXRlIG9yIHJlbmFtZSttb2RpZnkvZGVsZXRlPycgJwordGVzdF9zZXR1cF84YyAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA4YyAmJgogCSgKIAkJY2QgOGMgJiYKQEAgLTIxMjcsOSArMjE1NCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhjLWNoZWNrOiBtb2RpZnkvZGVsZXRlIG9yIHJlbmFtZSttb2RpZnkvZGVsZXRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YzogbW9kaWZ5L2RlbGV0ZSBvciByZW5hbWUrbW9kaWZ5L2RlbGV0ZScgJworCXRlc3Rfc2V0dXBfOGMgJiYKIAkoCiAJCWNkIDhjICYmCiAKQEAgLTIxNzUsNyArMjIwMyw3IEBACiAjICAgZHVyaW5nIG1lcmdpbmcgYXJlIHN1cHBvc2VkIHRvIGJlIGFib3V0IG9wcG9zaXRlIHNpZGVzIGRvaW5nIHRoaW5ncwogIyAgIGRpZmZlcmVudGx5LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZC1zZXR1cDogcmVuYW1lL2RlbGV0ZS4uLm9yIG5vdD8nICcKK3Rlc3Rfc2V0dXBfOGQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOGQgJiYKIAkoCiAJCWNkIDhkICYmCkBAIC0yMjA0LDkgKzIyMzIsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZC1jaGVjazogcmVuYW1lL2RlbGV0ZS4uLm9yIG5vdD8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhkOiByZW5hbWUvZGVsZXRlLi4ub3Igbm90PycgJworCXRlc3Rfc2V0dXBfOGQgJiYKIAkoCiAJCWNkIDhkICYmCiAKQEAgLTIyNTAsNyArMjI3OSw3IEBACiAjICAgICAgICBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyBvZiBkb2luZyB0aGF0LCBJIGRpZG4ndCBrbm93IGhvdyB0byBydWxlIG91dAogIyAgICAgICAgdGhhdCBvcGVuaW5nIG90aGVyIHdlaXJkIGVkZ2UgYW5kIGNvcm5lciBjYXNlcyBzbyBJIGp1c3QgcHVudGVkLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZS1zZXR1cDogQm90aCBzaWRlcyByZW5hbWUsIG9uZSBzaWRlIGFkZHMgdG8gb3JpZ2luYWwgZGlyZWN0b3J5JyAnCit0ZXN0X3NldHVwXzhlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDhlICYmCiAJKAogCQljZCA4ZSAmJgpAQCAtMjI3OSw5ICsyMzA4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGUtY2hlY2s6IEJvdGggc2lkZXMgcmVuYW1lLCBvbmUgc2lkZSBhZGRzIHRvIG9yaWdpbmFsIGRpcmVjdG9yeScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOGU6IEJvdGggc2lkZXMgcmVuYW1lLCBvbmUgc2lkZSBhZGRzIHRvIG9yaWdpbmFsIGRpcmVjdG9yeScgJworCXRlc3Rfc2V0dXBfOGUgJiYKIAkoCiAJCWNkIDhlICYmCiAKQEAgLTIzMzMsNyArMjM2Myw3IEBACiAjICAgICAgICAgb2Ygd2hpY2ggb25lIGhhZCB0aGUgbW9zdCBwYXRocyBnb2luZyB0byBpdC4gIEEgbmFpdmUgaW1wbGVtZW50YXRpb24KICMgICAgICAgICBvZiB0aGF0IGNvdWxkIHRha2UgdGhlIG5ldyBmaWxlIGluIGNvbW1pdCBCIGF0IHovaSB0byB4L3cvaSBvciB4L2kuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlhLXNldHVwOiBJbm5lciByZW5hbWVkIGRpcmVjdG9yeSB3aXRoaW4gb3V0ZXIgcmVuYW1lZCBkaXJlY3RvcnknICcKK3Rlc3Rfc2V0dXBfOWEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOWEgJiYKIAkoCiAJCWNkIDlhICYmCkBAIC0yMzY2LDkgKzIzOTYsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5YS1jaGVjazogSW5uZXIgcmVuYW1lZCBkaXJlY3Rvcnkgd2l0aGluIG91dGVyIHJlbmFtZWQgZGlyZWN0b3J5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5YTogSW5uZXIgcmVuYW1lZCBkaXJlY3Rvcnkgd2l0aGluIG91dGVyIHJlbmFtZWQgZGlyZWN0b3J5JyAnCisJdGVzdF9zZXR1cF85YSAmJgogCSgKIAkJY2QgOWEgJiYKIApAQCAtMjQwNCw3ICsyNDM1LDcgQEAKICMgICBDb21taXQgQjogei97YixjLGRfM30KICMgICBFeHBlY3RlZDogeS97YixjLGRfbWVyZ2VkfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5Yi1zZXR1cDogVHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb250ZW50IG1lcmdlJyAnCit0ZXN0X3NldHVwXzliICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDliICYmCiAJKAogCQljZCA5YiAmJgpAQCAtMjQzNiw5ICsyNDY3LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWItY2hlY2s6IFRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29udGVudCBtZXJnZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWI6IFRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29udGVudCBtZXJnZScgJworCXRlc3Rfc2V0dXBfOWIgJiYKIAkoCiAJCWNkIDliICYmCiAKQEAgLTI0OTEsNyArMjUyMyw3IEBACiAjICAgICAgICAgYXdheSwgdGhlbiBpZ25vcmUgdGhhdCBwYXJ0aWN1bGFyIHJlbmFtZSBmcm9tIHRoZSBvdGhlciBzaWRlIG9mCiAjICAgICAgICAgaGlzdG9yeSBmb3IgYW55IGltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5Yy1zZXR1cDogRG91Ymx5IHRyYW5zaXRpdmUgcmVuYW1lPycgJwordGVzdF9zZXR1cF85YyAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5YyAmJgogCSgKIAkJY2QgOWMgJiYKQEAgLTI1MjYsOSArMjU1OCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzljLWNoZWNrOiBEb3VibHkgdHJhbnNpdGl2ZSByZW5hbWU/JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5YzogRG91Ymx5IHRyYW5zaXRpdmUgcmVuYW1lPycgJworCXRlc3Rfc2V0dXBfOWMgJiYKIAkoCiAJCWNkIDljICYmCiAKQEAgLTI1NzksNyArMjYxMiw3IEBACiAjICAgc2ltcGxlIHJ1bGVzIHRoYXQgYXJlIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHdlIG5lZWQgZm9yIGFsbCB0aGUgb3RoZXIKICMgICB0ZXN0Y2FzZXMgYW5kIHNpbXBsaWZpZXMgdGhpbmdzIGZvciB0aGUgdXNlci4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWQtc2V0dXA6IE4td2F5IHRyYW5zaXRpdmUgcmVuYW1lPycgJwordGVzdF9zZXR1cF85ZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5ZCAmJgogCSgKIAkJY2QgOWQgJiYKQEAgLTI2MTQsOSArMjY0NywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlkLWNoZWNrOiBOLXdheSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlkOiBOLXdheSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKKwl0ZXN0X3NldHVwXzlkICYmCiAJKAogCQljZCA5ZCAmJgogCkBAIC0yNjUzLDcgKzI2ODcsNyBAQAogIyAgIEV4cGVjdGVkOiBjb21iaW5lZC97YSxiLGMsZCxlLGYsZyxoLGksaixrLGx9LCBDT05GTElDVChOdG8xKSB3YXJuaW5ncywKICMgICAgICAgICAgICAgZGlyMS95bywgZGlyMi95bywgZGlyMy95bywgZGlyTi95bwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5ZS1zZXR1cDogTi10by0xIHdoYW1tbycgJwordGVzdF9zZXR1cF85ZSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5ZSAmJgogCSgKIAkJY2QgOWUgJiYKQEAgLTI2OTYsOSArMjczMCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICc5ZS1jaGVjazogTi10by0xIHdoYW1tbycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJzllOiBOLXRvLTEgd2hhbW1vJyAnCisJdGVzdF9zZXR1cF85ZSAmJgogCSgKIAkJY2QgOWUgJiYKIApAQCAtMjc0NSw3ICsyNzgwLDcgQEAKICMgICBDb21taXQgQjogZ29hbC97YSxifS8kbW9yZV9maWxlcywgZ29hbC9jCiAjICAgRXhwZWN0ZWQ6IHByaW9yaXR5L3thLGJ9LyRtb3JlX2ZpbGVzLCBwcmlvcml0eS9jCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlmLXNldHVwOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzJyAnCit0ZXN0X3NldHVwXzlmICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDlmICYmCiAJKAogCQljZCA5ZiAmJgpAQCAtMjc3NCw5ICsyODA5LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWYtY2hlY2s6IFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlmOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzJyAnCisJdGVzdF9zZXR1cF85ZiAmJgogCSgKIAkJY2QgOWYgJiYKIApAQCAtMjgwOSw3ICsyODQ1LDcgQEAKICMgICBDb21taXQgQjogZ29hbC97YSxifS8kbW9yZV9maWxlcywgZ29hbC9jCiAjICAgRXhwZWN0ZWQ6IHByaW9yaXR5L3thbHBoYSxicmF2b30vJG1vcmVfZmlsZXMsIHByaW9yaXR5L2MKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWctc2V0dXA6IFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMsIGltbWVkaWF0ZSBzdWJkaXJzIHJlbmFtZWQnICcKK3Rlc3Rfc2V0dXBfOWcgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOWcgJiYKIAkoCiAJCWNkIDlnICYmCkBAIC0yODQxLDkgKzI4NzcsOSBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJzlnLWNoZWNrOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzLCBpbW1lZGlhdGUgc3ViZGlycyByZW5hbWVkJyAnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICc5ZzogUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycywgaW1tZWRpYXRlIHN1YmRpcnMgcmVuYW1lZCcgJwogCSgKIAkJY2QgOWcgJiYKIApAQCAtMjg3Nyw3ICsyOTEzLDcgQEAKICMgICBFeHBlY3RlZDogeS97YixjfSwgeC9kXzIKICMgICBOT1RFOiBJZiB3ZSBhcHBsaWVkIHRoZSB6LyAtPiB5LyByZW5hbWUgdG8gei9kLCB0aGVuIHdlJ2QgZW5kIHVwIHdpdGgKICMgICAgICAgICBhIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3QgKHovZCAtPiB5L2QgdnMuIHgvZCkKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzloLXNldHVwOiBBdm9pZCBkaXIgcmVuYW1lIG9uIG1lcmVseSBtb2RpZmllZCBwYXRoJyAnCit0ZXN0X3NldHVwXzloICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDloICYmCiAJKAogCQljZCA5aCAmJgpAQCAtMjkxMCw5ICsyOTQ2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWgtY2hlY2s6IEF2b2lkIGRpciByZW5hbWUgb24gbWVyZWx5IG1vZGlmaWVkIHBhdGgnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzloOiBBdm9pZCBkaXIgcmVuYW1lIG9uIG1lcmVseSBtb2RpZmllZCBwYXRoJyAnCisJdGVzdF9zZXR1cF85aCAmJgogCSgKIAkJY2QgOWggJiYKIApAQCAtMjk1Nyw3ICsyOTk0LDcgQEAKICMgICBFeHBlY3RlZDogQWJvcnRlZCBNZXJnZSArCiAjICAgICAgIEVSUk9SX01TRyh1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGEtc2V0dXA6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBub3JtYWwgcmVuYW1lL2RlbGV0ZScgJwordGVzdF9zZXR1cF8xMGEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTBhICYmCiAJKAogCQljZCAxMGEgJiYKQEAgLTI5ODMsOSArMzAyMCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYS1jaGVjazogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIG5vcm1hbCByZW5hbWUvZGVsZXRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGE6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBub3JtYWwgcmVuYW1lL2RlbGV0ZScgJworCXRlc3Rfc2V0dXBfMTBhICYmCiAJKAogCQljZCAxMGEgJiYKIApAQCAtMzAyMSw3ICszMDU5LDcgQEAKICMgICAgICAgICAgICAgei9jXzEgLT4gei9kXzEgcmVuYW1lIHJlY29yZGVkIGF0IHN0YWdlIDMgZm9yIHkvZCArCiAjICAgICAgIEVSUk9SX01TRyhyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICd5L2QnKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGItc2V0dXA6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lICsgZGVsZXRlJyAnCit0ZXN0X3NldHVwXzEwYiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMGIgJiYKIAkoCiAJCWNkIDEwYiAmJgpAQCAtMzA1MCw5ICszMDg4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBiLWNoZWNrOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZSArIGRlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBiOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZSArIGRlbGV0ZScgJworCXRlc3Rfc2V0dXBfMTBiICYmCiAJKAogCQljZCAxMGIgJiYKIApAQCAtMzA5OCwxMCArMzEzNywxMCBAQAogIyAgICAgICAgICAgICB5L2N+Ql4wICsKICMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS9jKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMtc2V0dXA6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKScgJwotCXRlc3RfY3JlYXRlX3JlcG8gMTBjICYmCit0ZXN0X3NldHVwXzEwYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMGNfJDEgJiYKIAkoCi0JCWNkIDEwYyAmJgorCQljZCAxMGNfJDEgJiYKIAogCQlta2RpciB6IHggJiYKIAkJZWNobyBhID56L2EgJiYKQEAgLTMxMjgsMTEgKzMxNjcsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMtY2hlY2s6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBjMTogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDF0bzIpJyAnCisJdGVzdF9zZXR1cF8xMGMgMSAmJgogCSgKLQkJY2QgMTBjICYmCisJCWNkIDEwY18xICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCQllY2hvIGltcG9ydGFudCA+eS9jICYmCkBAIC0zMTYzLDkgKzMyMDMsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYy1jaGVjazogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDF0bzIpLCBvdGhlciBkaXJlY3Rpb24nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYzI6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKSwgb3RoZXIgZGlyZWN0aW9uJyAnCisJdGVzdF9zZXR1cF8xMGMgMiAmJgogCSgKLQkJY2QgMTBjICYmCisJCWNkIDEwY18yICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2xlYW4gLWZkcXggJiYKQEAgLTMyMDgsNyArMzI0OSw3IEBACiAjICAgICAgICAgICAgIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUpIHovY18xIHZzIHgvZl8yIC0+IHkvd2hhbQogIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L3doYW0pCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwZC1zZXR1cDogRGVsZXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCit0ZXN0X3NldHVwXzEwZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMGQgJiYKIAkoCiAJCWNkIDEwZCAmJgpAQCAtMzI0MCw5ICszMjgxLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBkLWNoZWNrOiBEZWxldGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwZDogRGVsZXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCisJdGVzdF9zZXR1cF8xMGQgJiYKIAkoCiAJCWNkIDEwZCAmJgogCkBAIC0zMjkwLDcgKzMzMzIsNyBAQAogIyAgIENvbW1pdCBCOiB6L3thLGIsY30KICMgICBFeHBlY3RlZDogeS97YSxiLGN9ICsgdW50cmFja2VkIHovYwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGUtc2V0dXA6IERvZXMgZ2l0IGNvbXBsYWluIGFib3V0IHVudHJhY2tlZCBmaWxlIHRoYXQgaXMgbm90IHJlYWxseSBpbiB0aGUgd2F5PycgJwordGVzdF9zZXR1cF8xMGUgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTBlICYmCiAJKAogCQljZCAxMGUgJiYKQEAgLTMzMTcsOSArMzM1OSw5IEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnMTBlLWNoZWNrOiBEb2VzIGdpdCBjb21wbGFpbiBhYm91dCB1bnRyYWNrZWQgZmlsZSB0aGF0IGlzIG5vdCByZWFsbHkgaW4gdGhlIHdheT8nICcKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJzEwZTogRG9lcyBnaXQgY29tcGxhaW4gYWJvdXQgdW50cmFja2VkIGZpbGUgdGhhdCBpcyBub3QgcmVhbGx5IGluIHRoZSB3YXk/JyAnCiAJKAogCQljZCAxMGUgJiYKIApAQCAtMzM3MSw3ICszNDEzLDcgQEAKICMgICAgICAgICAgICAgei9jfkhFQUQgd2l0aCBjb250ZW50cyBvZiBCOnovYl92MiwKICMgICAgICAgICAgICAgei9jIHdpdGggdW5jb21taXR0ZWQgbW9kcyBvbiB0b3Agb2YgQTp6L2NfdjEKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFhLXNldHVwOiBBdm9pZCBsb3NpbmcgZGlydHkgY29udGVudHMgd2l0aCBzaW1wbGUgcmVuYW1lJyAnCit0ZXN0X3NldHVwXzExYSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMWEgJiYKIAkoCiAJCWNkIDExYSAmJgpAQCAtMzM5OCw5ICszNDQwLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFhLWNoZWNrOiBBdm9pZCBsb3NpbmcgZGlydHkgY29udGVudHMgd2l0aCBzaW1wbGUgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWE6IEF2b2lkIGxvc2luZyBkaXJ0eSBjb250ZW50cyB3aXRoIHNpbXBsZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzExYSAmJgogCSgKIAkJY2QgMTFhICYmCiAKQEAgLTM0NDEsNyArMzQ4NCw3IEBACiAjICAgICAgICAgICAgIEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jKQogCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYi1zZXR1cDogQXZvaWQgbG9zaW5nIGRpcnR5IGZpbGUgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZScgJwordGVzdF9zZXR1cF8xMWIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTFiICYmCiAJKAogCQljZCAxMWIgJiYKQEAgLTM0NzAsOSArMzUxMywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYi1jaGVjazogQXZvaWQgbG9zaW5nIGRpcnR5IGZpbGUgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFiOiBBdm9pZCBsb3NpbmcgZGlydHkgZmlsZSBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xMWIgJiYKIAkoCiAJCWNkIDExYiAmJgogCkBAIC0zNTE1LDcgKzM1NTksNyBAQAogIyAgIEV4cGVjdGVkOiBBYm9ydF9tc2coImZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIpICsKICMgICAgICAgICAgICAgeS9jIGxlZnQgdW50b3VjaGVkIChzdGlsbCBoYXMgdW5jb21taXR0ZWQgbW9kcykKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFjLXNldHVwOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwXzExYyAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMWMgJiYKIAkoCiAJCWNkIDExYyAmJgpAQCAtMzU0NSw5ICszNTg5LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFjLWNoZWNrOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWM6IEF2b2lkIGxvc2luZyBub3QtdXB0b2RhdGUgd2l0aCByZW5hbWUgKyBEL0YgY29uZmxpY3QnICcKKwl0ZXN0X3NldHVwXzExYyAmJgogCSgKIAkJY2QgMTFjICYmCiAKQEAgLTM1ODEsNyArMzYyNiw3IEBACiAjICAgICAgICAgICAgIFdhcm5pbmdfTXNnKCJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jKSArCiAjICAgICAgICAgICAgIHkve2EsY35IRUFELGMvZH0sIHgvYiwgbm93LXVudHJhY2tlZCB6L2NfdjEgd2l0aCB1bmNvbW1pdHRlZCBtb2RzCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZC1zZXR1cDogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJwordGVzdF9zZXR1cF8xMWQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTFkICYmCiAJKAogCQljZCAxMWQgJiYKQEAgLTM2MTIsOSArMzY1NywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZC1jaGVjazogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFkOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xMWQgJiYKIAkoCiAJCWNkIDExZCAmJgogCkBAIC0zNjU5LDcgKzM3MDUsNyBAQAogIyAgICAgICAgICAgICB5L2N+SEVBRCBoYXMgQTp5L2NfMiBjb250ZW50cwogIyAgICAgICAgICAgICB5L2MgaGFzIGRpcnR5IGZpbGUgZnJvbSBiZWZvcmUgbWVyZ2UKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFlLXNldHVwOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQnICcKK3Rlc3Rfc2V0dXBfMTFlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDExZSAmJgogCSgKIAkJY2QgMTFlICYmCkBAIC0zNjkxLDkgKzM3MzcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWUtY2hlY2s6IEF2b2lkIGRlbGV0aW5nIG5vdC11cHRvZGF0ZSB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFlOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQnICcKKwl0ZXN0X3NldHVwXzExZSAmJgogCSgKIAkJY2QgMTFlICYmCiAKQEAgLTM3NDQsNyArMzc5MSw3IEBACiAjICAgICAgICAgICAgIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUpIHgvYyB2cyB4L2QgLT4geS93aGFtCiAjICAgICAgICAgICAgIEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgeS93aGFtKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWYtc2V0dXA6IEF2b2lkIGRlbGV0aW5nIG5vdC11cHRvZGF0ZSB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCit0ZXN0X3NldHVwXzExZiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMWYgJiYKIAkoCiAJCWNkIDExZiAmJgpAQCAtMzc3Myw5ICszODIwLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFmLWNoZWNrOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFmOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJworCXRlc3Rfc2V0dXBfMTFmICYmCiAJKAogCQljZCAxMWYgJiYKIApAQCAtMzgzMiw3ICszODgwLDcgQEAKICMgICBDb21taXQgQjogbm9kZTEve2xlYWYxLGxlYWYyLGxlYWY1fSwgbm9kZTIve2xlYWYzLGxlYWY0LGxlYWY2fQogIyAgIEV4cGVjdGVkOiBub2RlMS97bGVhZjEsbGVhZjIsbGVhZjUsbm9kZTIve2xlYWYzLGxlYWY0LGxlYWY2fX0KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJhLXNldHVwOiBNb3Zpbmcgb25lIGRpcmVjdG9yeSBoaWVyYXJjaHkgaW50byBhbm90aGVyJyAnCit0ZXN0X3NldHVwXzEyYSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMmEgJiYKIAkoCiAJCWNkIDEyYSAmJgpAQCAtMzg2Miw5ICszOTEwLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJhLWNoZWNrOiBNb3Zpbmcgb25lIGRpcmVjdG9yeSBoaWVyYXJjaHkgaW50byBhbm90aGVyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmE6IE1vdmluZyBvbmUgZGlyZWN0b3J5IGhpZXJhcmNoeSBpbnRvIGFub3RoZXInICcKKwl0ZXN0X3NldHVwXzEyYSAmJgogCSgKIAkJY2QgMTJhICYmCiAKQEAgLTM5MTAsNyArMzk1OSw3IEBACiAjICAgICAgICAgVG8gd2hpY2gsIEkgY2FuIGRvIG5vIG1vcmUgdGhhbiBzaHJ1ZyBteSBzaG91bGRlcnMgYW5kIHNheSB0aGF0CiAjICAgICAgICAgZXZlbiBzaW1wbGUgcnVsZXMgZ2l2ZSB3ZWlyZCByZXN1bHRzIHdoZW4gZ2l2ZW4gd2VpcmQgaW5wdXRzLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmItc2V0dXA6IE1vdmluZyB0d28gZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGludG8gZWFjaCBvdGhlcicgJwordGVzdF9zZXR1cF8xMmIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTJiICYmCiAJKAogCQljZCAxMmIgJiYKQEAgLTM5MzgsOSArMzk4NywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYi1jaGVjazogTW92aW5nIHR3byBkaXJlY3RvcnkgaGllcmFyY2hpZXMgaW50byBlYWNoIG90aGVyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmI6IE1vdmluZyB0d28gZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGludG8gZWFjaCBvdGhlcicgJworCXRlc3Rfc2V0dXBfMTJiICYmCiAJKAogCQljZCAxMmIgJiYKIApAQCAtMzk3Niw3ICs0MDI2LDcgQEAKICMgICBOT1RFOiBUaGlzIGlzICpleGFjdGx5KiBsaWtlIDEyYywgZXhjZXB0IHRoYXQgZXZlcnkgcGF0aCBpcyBtb2RpZmllZCBvbgogIyAgICAgICAgIGVhY2ggc2lkZSBvZiB0aGUgbWVyZ2UuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYy1zZXR1cDogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlciB3LyBjb250ZW50IG1lcmdlJyAnCit0ZXN0X3NldHVwXzEyYyAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMmMgJiYKIAkoCiAJCWNkIDEyYyAmJgpAQCAtNDAwOCw5ICs0MDU4LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJjLWNoZWNrOiBNb3Zpbmcgb25lIGRpcmVjdG9yeSBoaWVyYXJjaHkgaW50byBhbm90aGVyIHcvIGNvbnRlbnQgbWVyZ2UnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYzogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlciB3LyBjb250ZW50IG1lcmdlJyAnCisJdGVzdF9zZXR1cF8xMmMgJiYKIAkoCiAJCWNkIDEyYyAmJgogCkBAIC00MDUxLDYgKzQxMDIsMTIyIEBACiAJKQogJwogCisjIFRlc3RjYXNlIDEyZCwgUmVuYW1lL21lcmdlIG9mIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290CisjICAgQ29tbWl0IE86IGEvYi9zdWJkaXIvZm9vCisjICAgQ29tbWl0IEE6IHN1YmRpci9mb28KKyMgICBDb21taXQgQjogYS9iL3N1YmRpci9mb28sIGEvYi9iYXIKKyMgICBFeHBlY3RlZDogc3ViZGlyL2ZvbywgYmFyCisKK3Rlc3Rfc2V0dXBfMTJkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyZCAmJgorCSgKKwkJY2QgMTJkICYmCisKKwkJbWtkaXIgLXAgYS9iL3N1YmRpciAmJgorCQl0ZXN0X2NvbW1pdCBhL2Ivc3ViZGlyL2ZvbyAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWdpdCBtdiBhL2Ivc3ViZGlyL2Zvby50IHN1YmRpci9mb28udCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X2NvbW1pdCBhL2IvYmFyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmQ6IFJlbmFtZS9tZXJnZSBzdWJkaXIgaW50byB0aGUgcm9vdCwgdmFyaWFudCAxJyAnCisJdGVzdF9zZXR1cF8xMmQgJiYKKwkoCisJCWNkIDEyZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnN1YmRpci9mb28udCAgIEhFQUQ6YmFyLnQgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86YS9iL3N1YmRpci9mb28udCAgQjphL2IvYmFyLnQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIudCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjphL2IvYmFyLnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9zdWJkaXIvZm9vLnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9iYXIudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhLyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIudAorCSkKKycKKworIyBUZXN0Y2FzZSAxMmUsIFJlbmFtZS9tZXJnZSBvZiBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdAorIyAgIENvbW1pdCBPOiBhL2IvZm9vCisjICAgQ29tbWl0IEE6IGZvbworIyAgIENvbW1pdCBCOiBhL2IvZm9vLCBhL2IvYmFyCisjICAgRXhwZWN0ZWQ6IGZvbywgYmFyCisKK3Rlc3Rfc2V0dXBfMTJlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyZSAmJgorCSgKKwkJY2QgMTJlICYmCisKKwkJbWtkaXIgLXAgYS9iICYmCisJCXRlc3RfY29tbWl0IGEvYi9mb28gJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQlnaXQgbXYgYS9iL2Zvby50IGZvby50ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3RfY29tbWl0IGEvYi9iYXIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyZTogUmVuYW1lL21lcmdlIHN1YmRpciBpbnRvIHRoZSByb290LCB2YXJpYW50IDInICcKKwl0ZXN0X3NldHVwXzEyZSAmJgorCSgKKwkJY2QgMTJlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6Zm9vLnQgICBIRUFEOmJhci50ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmEvYi9mb28udCAgQjphL2IvYmFyLnQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIudCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjphL2IvYmFyLnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9mb28udCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YS9iL2Jhci50ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGEvICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci50CisJKQorJworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU0VDVElPTiAxMzogQ2hlY2tpbmcgaW5mb3JtYXRpb25hbCBhbmQgY29uZmxpY3QgbWVzc2FnZXMKICMKQEAgLTQwNjgsMTAgKzQyMzUsMTAgQEAKICMgICBDb21taXQgQjogei97YixjLGQsZS9mfQogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlL2Z9LCB3aXRoIG5vdGljZXMvY29uZmxpY3RzIGZvciBib3RoIHkvZCBhbmQgeS9lL2YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNhLXNldHVwOiBtZXNzYWdlcyBmb3IgbmV3bHkgYWRkZWQgZmlsZXMnICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDEzYSAmJgordGVzdF9zZXR1cF8xM2EgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTNhXyQxICYmCiAJKAotCQljZCAxM2EgJiYKKwkJY2QgMTNhXyQxICYmCiAKIAkJbWtkaXIgeiAmJgogCQllY2hvIGIgPnovYiAmJgpAQCAtNDA5NywxMSArNDI2NCwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYS1jaGVjayhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciBuZXdseSBhZGRlZCBmaWxlcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNhKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCisJdGVzdF9zZXR1cF8xM2EgY29uZmxpY3QgJiYKIAkoCi0JCWNkIDEzYSAmJgorCQljZCAxM2FfY29uZmxpY3QgJiYKIAogCQlnaXQgY2hlY2tvdXQgQV4wICYmCiAKQEAgLTQxMjEsOSArNDI4OSwxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNhLWNoZWNrKGluZm8pOiBtZXNzYWdlcyBmb3IgbmV3bHkgYWRkZWQgZmlsZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYShpbmZvKTogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCisJdGVzdF9zZXR1cF8xM2EgaW5mbyAmJgogCSgKLQkJY2QgMTNhICYmCisJCWNkIDEzYV9pbmZvICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2hlY2tvdXQgQV4wICYmCkBAIC00MTUzLDEwICs0MzIyLDEwIEBACiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxkX21lcmdlZH0sIHdpdGggdHdvIGNvbmZsaWN0IG1lc3NhZ2VzIGZvciB5L2QsCiAjICAgICAgICAgICAgIG9uZSBhYm91dCBjb250ZW50LCBhbmQgb25lIGFib3V0IGZpbGUgbG9jYXRpb24KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiLXNldHVwOiBtZXNzYWdlcyBmb3IgdHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQnICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDEzYiAmJgordGVzdF9zZXR1cF8xM2IgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTNiXyQxICYmCiAJKAotCQljZCAxM2IgJiYKKwkJY2QgMTNiXyQxICYmCiAKIAkJbWtkaXIgeCAmJgogCQlta2RpciB6ICYmCkBAIC00MTg1LDExICs0MzU0LDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiLWNoZWNrKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2IoY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgdHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQnICcKKwl0ZXN0X3NldHVwXzEzYiBjb25mbGljdCAmJgogCSgKLQkJY2QgMTNiICYmCisJCWNkIDEzYl9jb25mbGljdCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtNDIwNyw5ICs0Mzc3LDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2ItY2hlY2soaW5mbyk6IG1lc3NhZ2VzIGZvciB0cmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbmZsaWN0ZWQgY29udGVudCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiKGluZm8pOiBtZXNzYWdlcyBmb3IgdHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQnICcKKwl0ZXN0X3NldHVwXzEzYiBpbmZvICYmCiAJKAotCQljZCAxM2IgJiYKKwkJY2QgMTNiX2luZm8gJiYKIAogCQlnaXQgcmVzZXQgLS1oYXJkICYmCiAJCWdpdCBjaGVja291dCBBXjAgJiYKQEAgLTQyMzgsMTAgKzQ0MDksMTAgQEAKICMgICAgICAgICAgICAgZCBhbmQgQiBoYWQgZnVsbCBrbm93bGVkZ2UsIGJ1dCB0aGF0J3MgYSBzbGlwcGVyeSBzbG9wZSBhcwogIyAgICAgICAgICAgICBzaG93biBpbiB0ZXN0Y2FzZSAxM2QuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYy1zZXR1cDogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIHRyYW5zaXRpdmUgcmVuYW1lJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAxM2MgJiYKK3Rlc3Rfc2V0dXBfMTNjICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzY18kMSAmJgogCSgKLQkJY2QgMTNjICYmCisJCWNkIDEzY18kMSAmJgogCiAJCW1rZGlyIHggJiYKIAkJbWtkaXIgeiAmJgpAQCAtNDI2OSwxMSArNDQ0MCwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYy1jaGVjayhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNjKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xM2MgY29uZmxpY3QgJiYKIAkoCi0JCWNkIDEzYyAmJgorCQljZCAxM2NfY29uZmxpY3QgJiYKIAogCQlnaXQgY2hlY2tvdXQgQV4wICYmCiAKQEAgLTQyOTAsOSArNDQ2MiwxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNjLWNoZWNrKGluZm8pOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgdHJhbnNpdGl2ZSByZW5hbWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYyhpbmZvKTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xM2MgaW5mbyAmJgogCSgKLQkJY2QgMTNjICYmCisJCWNkIDEzY19pbmZvICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2hlY2tvdXQgQV4wICYmCkBAIC00MzI0LDEwICs0NDk3LDEwIEBACiAjICAgICAgICAgICAgICAgKiBCIHJlbmFtZXMgYS95IHRvIGMveSwgYW5kIEEgcmVuYW1lcyBjLy0+ZC8gPT4gYS95IC0+IGQveQogIyAgICAgICAgICAgICAgIE5vIGNvbmZsaWN0IGluIHdoZXJlIGEveSBlbmRzIHVwLCBzbyBwdXQgaXQgaW4gZC95LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2Qtc2V0dXA6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSBkdWFsIHRyYW5zaXRpdmUgcmVuYW1lJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAxM2QgJiYKK3Rlc3Rfc2V0dXBfMTNkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzZF8kMSAmJgogCSgKLQkJY2QgMTNkICYmCisJCWNkIDEzZF8kMSAmJgogCiAJCW1rZGlyIGEgJiYKIAkJbWtkaXIgYiAmJgpAQCAtNDM1NiwxMSArNDUyOSwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZC1jaGVjayhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSBkdWFsIHRyYW5zaXRpdmUgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QoY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgZHVhbCB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNkIGNvbmZsaWN0ICYmCiAJKAotCQljZCAxM2QgJiYKKwkJY2QgMTNkX2NvbmZsaWN0ICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC00MzgwLDkgKzQ1NTQsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZC1jaGVjayhpbmZvKTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIGR1YWwgdHJhbnNpdGl2ZSByZW5hbWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZChpbmZvKTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIGR1YWwgdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzEzZCBpbmZvICYmCiAJKAotCQljZCAxM2QgJiYKKwkJY2QgMTNkX2luZm8gJiYKIAogCQlnaXQgcmVzZXQgLS1oYXJkICYmCiAJCWdpdCBjaGVja291dCBBXjAgJiYKQEAgLTQ0NDgsNyArNDYyMyw3IEBACiAjICAgICAgICAgIGluIHRoZSBvdXRlciBtZXJnZSBmb3IgdGhpcyBzcGVjaWFsIGtpbmQgb2Ygc2V0dXAsIGJ1dCBpdCBhdAogIyAgICAgICAgICBsZWFzdCBhdm9pZHMgaGl0dGluZyBhIEJVRygpLgogIwotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNlLXNldHVwOiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBpbiByZWN1cnNpdmUgY2FzZScgJwordGVzdF9zZXR1cF8xM2UgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTNlICYmCiAJKAogCQljZCAxM2UgJiYKQEAgLTQ0OTMsOSArNDY2OCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiRCIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZS1jaGVjazogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW4gcmVjdXJzaXZlIGNhc2UnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZTogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW4gcmVjdXJzaXZlIGNhc2UnICcKKwl0ZXN0X3NldHVwXzEzZSAmJgogCSgKIAkJY2QgMTNlICYmCiAKZGlmZiAtLWdpdCBhL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoIGIvdC90NjA0Ni1tZXJnZS1za2lwLXVubmVlZGVkLXVwZGF0ZXMuc2gKaW5kZXggM2E0NzYyMy4uYjdlNDY2OSAxMDA3NTUKLS0tIGEvdC90NjA0Ni1tZXJnZS1za2lwLXVubmVlZGVkLXVwZGF0ZXMuc2gKKysrIGIvdC90NjA0Ni1tZXJnZS1za2lwLXVubmVlZGVkLXVwZGF0ZXMuc2gKQEAgLTM2LDEwICszNiwxMCBAQAogIyAgIENvbW1pdCBCOiBiXzMKICMgICBFeHBlY3RlZDogYl8yCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLXNldHVwOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJwotCXRlc3RfY3JlYXRlX3JlcG8gMWEgJiYKK3Rlc3Rfc2V0dXBfMWEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWFfJDEgJiYKIAkoCi0JCWNkIDFhICYmCisJCWNkIDFhXyQxICYmCiAKIAkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggOSAxMCA+YiAmJgogCQlnaXQgYWRkIGIgJiYKQEAgLTYyLDEzICs2MiwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLWNoZWNrLUw6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMWEgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDFhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLUw6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8xYSBMICYmCiAJKAotCQljZCAxYSAmJgorCQljZCAxYV9MICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC05NiwxMSArOTUsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLWNoZWNrLVI6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMWEgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDFhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLVI6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8xYSBSICYmCiAJKAotCQljZCAxYSAmJgorCQljZCAxYV9SICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEJeMCAmJgogCkBAIC0xMzMsMTAgKzEzMSwxMCBAQAogIyAgIENvbW1pdCBCOiBjXzEKICMgICBFeHBlY3RlZDogY18yCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLXNldHVwOiBNb2RpZnkoQSkvcmVuYW1lKEIpJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAyYSAmJgordGVzdF9zZXR1cF8yYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAyYV8kMSAmJgogCSgKLQkJY2QgMmEgJiYKKwkJY2QgMmFfJDEgJiYKIAogCQl0ZXN0X3NlcSAxIDEwID5iICYmCiAJCWdpdCBhZGQgYiAmJgpAQCAtMTU4LDEzICsxNTYsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1jaGVjay1MOiBNb2RpZnkvcmVuYW1lLCBtZXJnZSBpbnRvIG1vZGlmeSBzaWRlJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmEgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLUw6IE1vZGlmeS9yZW5hbWUsIG1lcmdlIGludG8gbW9kaWZ5IHNpZGUnICcKKwl0ZXN0X3NldHVwXzJhIEwgJiYKIAkoCi0JCWNkIDJhICYmCisJCWNkIDJhX0wgJiYKIAogCQlnaXQgY2hlY2tvdXQgQV4wICYmCiAKQEAgLTE4OSwxMSArMTg2LDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1jaGVjay1SOiBNb2RpZnkvcmVuYW1lLCBtZXJnZSBpbnRvIHJlbmFtZSBzaWRlJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmEgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLVI6IE1vZGlmeS9yZW5hbWUsIG1lcmdlIGludG8gcmVuYW1lIHNpZGUnICcKKwl0ZXN0X3NldHVwXzJhIFIgJiYKIAkoCi0JCWNkIDJhICYmCisJCWNkIDJhX1IgJiYKIAogCQlnaXQgY2hlY2tvdXQgQl4wICYmCiAKQEAgLTIyNCwxMCArMjIwLDEwIEBACiAjICAgQ29tbWl0IEI6IGJfMwogIyAgIEV4cGVjdGVkOiBjXzIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmItc2V0dXA6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDJiICYmCit0ZXN0X3NldHVwXzJiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDJiXyQxICYmCiAJKAotCQljZCAyYiAmJgorCQljZCAyYl8kMSAmJgogCiAJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgMTAgPmIgJiYKIAkJZ2l0IGFkZCBiICYmCkBAIC0yNTEsMTMgKzI0NywxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLWNoZWNrLUw6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAyYiByZXNldCAtLWhhcmQiICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmIgY2xlYW4gLWZkIiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmItTDogUmVuYW1lK01vZChBKS9Nb2QoQiksIEIgbW9kcyBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMmIgTCAmJgogCSgKLQkJY2QgMmIgJiYKKwkJY2QgMmJfTCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtMjg4LDExICsyODMsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLWNoZWNrLVI6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAyYiByZXNldCAtLWhhcmQiICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmIgY2xlYW4gLWZkIiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmItUjogUmVuYW1lK01vZChBKS9Nb2QoQiksIEIgbW9kcyBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMmIgUiAmJgogCSgKLQkJY2QgMmIgJiYKKwkJY2QgMmJfUiAmJgogCiAJCWdpdCBjaGVja291dCBCXjAgJiYKIApAQCAtMzMyLDcgKzMyNiw3IEBACiAjICAgICAgICAgc2tpcCB0aGUgdXBkYXRlLCB0aGVuIHdlJ3JlIGluIHRyb3VibGUuICBUaGlzIHRlc3QgdmVyaWZpZXMgd2UgZG8KICMgICAgICAgICBub3QgbWFrZSB0aGF0IHBhcnRpY3VsYXIgbWlzdGFrZS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmMtc2V0dXA6IE1vZGlmeSBiICYgYWRkIGMgVlMgcmVuYW1lIGItPmMnICcKK3Rlc3Rfc2V0dXBfMmMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMmMgJiYKIAkoCiAJCWNkIDJjICYmCkBAIC0zNTgsOSArMzUyLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmMtY2hlY2s6IE1vZGlmeSBiICYgYWRkIGMgVlMgcmVuYW1lIGItPmMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJjOiBNb2RpZnkgYiAmIGFkZCBjIFZTIHJlbmFtZSBiLT5jJyAnCisJdGVzdF9zZXR1cF8yYyAmJgogCSgKIAkJY2QgMmMgJiYKIApAQCAtNDI4LDEwICs0MjMsMTAgQEAKICMgICBDb21taXQgQjogYnFfMSwgYmFyL3doYXRldmVyCiAjICAgRXhwZWN0ZWQ6IGJhci97YnFfMiwgd2hhdGV2ZXJ9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLXNldHVwOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDNhICYmCit0ZXN0X3NldHVwXzNhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDNhXyQxICYmCiAJKAotCQljZCAzYSAmJgorCQljZCAzYV8kMSAmJgogCiAJCW1rZGlyIGZvbyAmJgogCQl0ZXN0X3NlcSAxIDEwID5icSAmJgpAQCAtNDU2LDEzICs0NTEsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYS1jaGVjay1MOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAzYSByZXNldCAtLWhhcmQiICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2EgY2xlYW4gLWZkIiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2EtTDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCisJdGVzdF9zZXR1cF8zYSBMICYmCiAJKAotCQljZCAzYSAmJgorCQljZCAzYV9MICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC00ODcsMTEgKzQ4MSwxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2EtY2hlY2stUjogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2EgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2EgUiAmJgogCSgKLQkJY2QgM2EgJiYKKwkJY2QgM2FfUiAmJgogCiAJCWdpdCBjaGVja291dCBCXjAgJiYKIApAQCAtNTIyLDEwICs1MTUsMTAgQEAKICMgICBDb21taXQgQjogYnFfMiwgYmFyL3doYXRldmVyCiAjICAgRXhwZWN0ZWQ6IGJhci97YnFfMiwgd2hhdGV2ZXJ9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLXNldHVwOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDNiICYmCit0ZXN0X3NldHVwXzNiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDNiXyQxICYmCiAJKAotCQljZCAzYiAmJgorCQljZCAzYl8kMSAmJgogCiAJCW1rZGlyIGZvbyAmJgogCQl0ZXN0X3NlcSAxIDEwID5icSAmJgpAQCAtNTUwLDEzICs1NDMsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYi1jaGVjay1MOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAzYiByZXNldCAtLWhhcmQiICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2IgY2xlYW4gLWZkIiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItTDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCisJdGVzdF9zZXR1cF8zYiBMICYmCiAJKAotCQljZCAzYiAmJgorCQljZCAzYl9MICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC01ODEsMTEgKzU3MywxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItY2hlY2stUjogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2IgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNiIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2IgUiAmJgogCSgKLQkJY2QgM2IgJiYKKwkJY2QgM2JfUiAmJgogCiAJCWdpdCBjaGVja291dCBCXjAgJiYKIApAQCAtNjIxLDcgKzYxMiw3IEBACiAjICAgV29ya2luZyBjb3B5OiBiXzQKICMgICBFeHBlY3RlZDogYl8yIGZvciBtZXJnZSwgYl80IGluIHdvcmtpbmcgY29weQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc0YS1zZXR1cDogQ2hhbmdlIG9uIEEsIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBLCBkaXJ0eSBtb2RzIHByZXNlbnQnICcKK3Rlc3Rfc2V0dXBfNGEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNGEgJiYKIAkoCiAJCWNkIDRhICYmCkBAIC02NDcsNyArNjM4LDcgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCiAjIE5PVEU6IEZvciBhcyBsb25nIGFzIHdlIGNvbnRpbnVlIHVzaW5nIHVucGFja190cmVlcygpIHdpdGhvdXQgaW5kZXhfb25seQogIyAgIHNldCB0byB0cnVlLCBpdCB3aWxsIGVycm9yIG91dCBvbiBhIGNhc2UgbGlrZSB0aGlzIGNsYWltaW5nIHRoZSB0aGUgbG9jYWxseQpAQCAtNjU1LDkgKzY0Niw4IEBACiAjICAgY29ycmVjdCByZXF1aXJlcyBkb2luZyB0aGUgbWVyZ2UgaW4tbWVtb3J5IGZpcnN0LCB0aGVuIHJlYWxpemluZyB0aGF0IG5vCiAjICAgdXBkYXRlcyB0byB0aGUgZmlsZSBhcmUgbmVjZXNzYXJ5LCBhbmQgdGh1cyB0aGF0IHdlIGNhbiBqdXN0IGxlYXZlIHRoZSBwYXRoCiAjICAgYWxvbmUuCi10ZXN0X2V4cGVjdF9mYWlsdXJlICc0YS1jaGVjazogQ2hhbmdlIG9uIEEsIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBLCBkaXJ0eSBtb2RzIHByZXNlbnQnICcKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyA0YSByZXNldCAtLWhhcmQiICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgNGEgY2xlYW4gLWZkIiAmJgordGVzdF9leHBlY3RfZmFpbHVyZSAnNGE6IENoYW5nZSBvbiBBLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQSwgZGlydHkgbW9kcyBwcmVzZW50JyAnCisJdGVzdF9zZXR1cF80YSAmJgogCSgKIAkJY2QgNGEgJiYKIApAQCAtNjk1LDcgKzY4NSw3IEBACiAjICAgV29ya2luZyBjb3B5OiBjXzQKICMgICBFeHBlY3RlZDogY18yCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRiLXNldHVwOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJwordGVzdF9zZXR1cF80YiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA0YiAmJgogCSgKIAkJY2QgNGIgJiYKQEAgLTcyMiwxMSArNzEyLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNGItY2hlY2s6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQSwgZGlydHkgbW9kcyBwcmVzZW50JyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgNGIgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDRiIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRiOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGIgJiYKIAkoCiAJCWNkIDRiICYmCiAKZGlmZiAtLWdpdCBhL3QvdDYxMDItcmV2LWxpc3QtdW5leHBlY3RlZC1vYmplY3RzLnNoIGIvdC90NjEwMi1yZXYtbGlzdC11bmV4cGVjdGVkLW9iamVjdHMuc2gKaW5kZXggMjg2MTFjOS4uNTJjZGUwOSAxMDA3NTUKLS0tIGEvdC90NjEwMi1yZXYtbGlzdC11bmV4cGVjdGVkLW9iamVjdHMuc2gKKysrIGIvdC90NjEwMi1yZXYtbGlzdC11bmV4cGVjdGVkLW9iamVjdHMuc2gKQEAgLTUyLDcgKzUyLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tY29tbWl0IHBhcmVudCAoc2VlbiknICcKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgJGJyb2tlbl9jb21taXQgXAorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGJsb2IgJGJyb2tlbl9jb21taXQgXAogCQk+b3V0cHV0IDI+JjEgJiYKIAl0ZXN0X2kxOG5ncmVwICJub3QgYSBjb21taXQiIG91dHB1dAogJwpkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKaW5kZXggNDUwNDdkMC4uMDljNTBmMyAxMDA3NTUKLS0tIGEvdC90NjEyMC1kZXNjcmliZS5zaAorKysgYi90L3Q2MTIwLWRlc2NyaWJlLnNoCkBAIC0xLDI4ICsxLDI3IEBACiAjIS9iaW4vc2gKIAotdGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkZXNjcmliZQordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkZXNjcmliZScKIAotICAgICAgICAgICAgICAgICAgICAgICBCCi0gICAgICAgIC4tLS0tLS0tLS0tLS0tLW8tLS0tby0tLS1vLS0tLXgKLSAgICAgICAvICAgICAgICAgICAgICAgICAgIC8gICAgLwotIG8tLS0tby0tLS1vLS0tLW8tLS0tby0tLS0uICAgIC8KLSAgICAgICBcICAgICAgICBBICAgIGMgICAgICAgIC8KLSAgICAgICAgLi0tLS0tLS0tLS0tLW8tLS1vLS0tbwotICAgICAgICAgICAgICAgICAgIEQsUiAgIGUKLScKKyMgIG8tLS1vLS0tLS1vLS0tLW8tLS0tby0tLS0tLS1vLS0tLXgKKyMgICAgICAgXCAgIEQsUiAgIGUgICAgICAgICAgIC8KKyMgICAgICAgIFwtLS1vLS0tLS0tLS0tLS0tLW8tJworIyAgICAgICAgIFwgIEIgICAgICAgICAgICAvCisjICAgICAgICAgIGAtby0tLS1vLS0tLW8tJworIyAgICAgICAgICAgICAgICAgQSAgICBjCisjCisjIEZpcnN0IHBhcmVudCBvZiBhIG1lcmdlIGNvbW1pdCBpcyBvbiB0aGUgc2FtZSBsaW5lLCBzZWNvbmQgcGFyZW50IGJlbG93LgorCiAuIC4vdGVzdC1saWIuc2gKIAogY2hlY2tfZGVzY3JpYmUgKCkgewogCWV4cGVjdD0iJDEiCiAJc2hpZnQKLQlSPSQoZ2l0IGRlc2NyaWJlICIkQCIgMj5lcnIuYWN0dWFsKQotCVM9JD8KLQljYXQgZXJyLmFjdHVhbCA+JjMKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXNjcmliZSAkKiIgJwotCXRlc3QgJFMgPSAwICYmCisJZGVzY3JpYmVfb3B0cz0iJEAiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVzY3JpYmUgJGRlc2NyaWJlX29wdHMiICcKKwlSPSQoZ2l0IGRlc2NyaWJlICRkZXNjcmliZV9vcHRzIDI+ZXJyLmFjdHVhbCkgJiYKIAljYXNlICIkUiIgaW4KIAkkZXhwZWN0KQllY2hvIGhhcHB5IDs7Ci0JKikJZWNobyAiT29wcyAtICRSIGlzIG5vdCAkZXhwZWN0IjsKKwkqKQllY2hvICJPb3BzIC0gJFIgaXMgbm90ICRleHBlY3QiICYmCiAJCWZhbHNlIDs7CiAJZXNhYwogCScKQEAgLTM4Miw3ICszODEsNyBAQAogCXRlc3RfaTE4bmdyZXAgImZhdGFsOiB0ZXN0LWJsb2ItMSBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIiBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSBVTElNSVRfU1RBQ0tfU0laRSAnbmFtZS1yZXYgd29ya3MgaW4gYSBkZWVwIHJlcG8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVUxJTUlUX1NUQUNLX1NJWkUgJ25hbWUtcmV2IHdvcmtzIGluIGEgZGVlcCByZXBvJyAnCiAJaT0xICYmCiAJd2hpbGUgdGVzdCAkaSAtbHQgODAwMAogCWRvCkBAIC00MzksNCArNDM4LDQ1IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCisjIEEtLS0tLS0tLS0tLS0tLW1hc3RlcgorIyAgXCAgICAgICAgICAgIC8KKyMgICBcLS0tLS0tLS0tLU0yCisjICAgIFwgICAgICAgIC8KKyMgICAgIFwtLS1NMS1DCisjICAgICAgXCAvCisjICAgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IGNvdmVycyBhbGwgY29uZGl0aW9ucyB3aGlsZSBsb29raW5nIGF0IHBhcmVudHMnICcKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisKKwkJZWNobyBBID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJQT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwkJZWNobyBCID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gQiBmaWxlICYmCisJCUI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJZ2l0IGNoZWNrb3V0ICRBICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmICRCICYmICAjIE0xCisKKwkJZWNobyBDID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gQyBmaWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0ICRBICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmIEhFQURAezF9ICYmICMgTTIKKworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmIEhFQURAezF9ICYmCisKKwkJZWNobyAiJEIgbWFzdGVyXjJeMn4xXjIiID5leHBlY3QgJiYKKwkJZ2l0IG5hbWUtcmV2ICRCID5hY3R1YWwgJiYKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDY1MDAtZ2Muc2ggYi90L3Q2NTAwLWdjLnNoCmluZGV4IGMwZjA0ZGMuLjBhNjlhNjcgMTAwNzU1Ci0tLSBhL3QvdDY1MDAtZ2Muc2gKKysrIGIvdC90NjUwMC1nYy5zaApAQCAtMTAzLDE0ICsxMDMsMTQgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1uby1xdWlldCcgJwotCWdpdCAtYyBnYy53cml0ZUNvbW1pdEdyYXBoPXRydWUgZ2MgLS1uby1xdWlldCA+c3Rkb3V0IDI+c3RkZXJyICYmCisJR0lUX1BST0dSRVNTX0RFTEFZPTAgZ2l0IC1jIGdjLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZSBnYyAtLW5vLXF1aWV0ID5zdGRvdXQgMj5zdGRlcnIgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgc3Rkb3V0ICYmCi0JdGVzdF9saW5lX2NvdW50ID0gMSBzdGRlcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIgc3RkZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICd3aXRoIFRUWTogZ2MgLS1uby1xdWlldCcgJwotCXRlc3RfdGVybWluYWwgZ2l0IC1jIGdjLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZSBnYyAtLW5vLXF1aWV0ID5zdGRvdXQgMj5zdGRlcnIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGVudiBHSVRfUFJPR1JFU1NfREVMQVk9MCBcCisJCWdpdCAtYyBnYy53cml0ZUNvbW1pdEdyYXBoPXRydWUgZ2MgLS1uby1xdWlldCA+c3Rkb3V0IDI+c3RkZXJyICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZG91dCAmJgogCXRlc3RfaTE4bmdyZXAgIkVudW1lcmF0aW5nIG9iamVjdHMiIHN0ZGVyciAmJgogCXRlc3RfaTE4bmdyZXAgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiBzdGRlcnIKZGlmZiAtLWdpdCBhL3QvdDcwMDQtdGFnLnNoIGIvdC90NzAwNC10YWcuc2gKaW5kZXggODBlYjEzZC4uNGEwOWJlYSAxMDA3NTUKLS0tIGEvdC90NzAwNC10YWcuc2gKKysrIGIvdC90NzAwNC10YWcuc2gKQEAgLTIyNywxMCArMjI3LDEwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkndHJ5aW5nIHRvIGRlbGV0ZSB0d28gdGFncywgZXhpc3RpbmcgYW5kIG5vdCwgc2hvdWxkIGZhaWwgaW4gdGhlIDJuZCcgJwogCXRhZ19leGlzdHMgbXl0YWcgJiYKLQkhIHRhZ19leGlzdHMgbXloZWFkICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtZCBteXRhZyBhbm90aGVydGFnICYmCisJISB0YWdfZXhpc3RzIG5vbmV4aXN0aW5ndGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtZCBteXRhZyBub25leGlzdGluZ3RhZyAmJgogCSEgdGFnX2V4aXN0cyBteXRhZyAmJgotCSEgdGFnX2V4aXN0cyBteWhlYWQKKwkhIHRhZ19leGlzdHMgbm9uZXhpc3Rpbmd0YWcKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5aW5nIHRvIGRlbGV0ZSBhbiBhbHJlYWR5IGRlbGV0ZWQgdGFnIHNob3VsZCBmYWlsJyBcCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogZ2V0X3RhZ19oZWFkZXIgcmV1c2UgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAogZWNobyAiQW4gYW5ub3RhdGlvbiB0byBiZSByZXVzZWQiID4+IGV4cGVjdAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JJ292ZXJ3cml0aW5nIGFuIGFubm90ZWQgdGFnIHNob3VsZCB1c2UgaXRzIHByZXZpb3VzIGJvZHknICcKKwknb3ZlcndyaXRpbmcgYW4gYW5ub3RhdGVkIHRhZyBzaG91bGQgdXNlIGl0cyBwcmV2aW91cyBib2R5JyAnCiAJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGlvbiB0byBiZSByZXVzZWQiIHJldXNlICYmCiAJR0lUX0VESVRPUj10cnVlIGdpdCB0YWcgLWYgLWEgcmV1c2UgJiYKIAlnZXRfdGFnX21zZyByZXVzZSA+YWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaCBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCmluZGV4IDlkMWFiZTUuLjc0NzY3ODEgMTAwNzU1Ci0tLSBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCisrKyBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCkBAIC0xMzQsNiArMTM0LDIxIEBACiAJdGVzdF9pMThuY21wIGV4cGVjdGVkIHJlc3VsdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMgbGVhdmVzIHdvcmt0cmVlIGFsb25lJyAnCisJdGVzdF9jb21taXQga2VlcC1tZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGtlZXAtbWUudCAmJgorCXJtIGtlZXAtbWUudCAmJgorCisJOiBpZ25vcmluZyB0aGUgd29ya3RyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBrZWVwLW1lLnQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisKKwk6IG5vdCBpZ25vcmluZyB0aGUgd29ya3RyZWUsIGEgZGVsZXRpb24gaXMgc3RhZ2VkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBrZWVwLW1lLnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEIFwKKwkJLS1kaWZmLWZpbHRlcj1EIC0tIGtlZXAtbWUudAorJworCiAjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgYWRkcyBmaWxlJyBmYWxzZQogI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHVwZGF0ZXMgZmlsZScgZmFsc2UKICNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSByZW1vdmVzIGZpbGUnIGZhbHNlCmRpZmYgLS1naXQgYS90L3Q3MDMwLXZlcmlmeS10YWcuc2ggYi90L3Q3MDMwLXZlcmlmeS10YWcuc2gKaW5kZXggMDQxZTMxOS4uOGYwNzdiZSAxMDA3NTUKLS0tIGEvdC90NzAzMC12ZXJpZnktdGFnLnNoCisrKyBiL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaApAQCAtNDQsOCArNDQsOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAnY3JlYXRlIHNpZ25lZCB0YWdzIHg1MDkgJyAnCiAJdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCiAJdGVzdF9jb25maWcgdXNlci5zaWduaW5na2V5ICRHSVRfQ09NTUlUVEVSX0VNQUlMICYmCi0JZWNobyA5ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJuaW5ldGggZ3Bnc20tc2lnbmVkIiAmJgotCWdpdCB0YWcgLXMgLW0gbmluZXRoIG5pbmV0aC1zaWduZWQteDUwOQorCWVjaG8gOSA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAibmludGggZ3Bnc20tc2lnbmVkIiAmJgorCWdpdCB0YWcgLXMgLW0gbmludGggbmludGgtc2lnbmVkLXg1MDkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBhbmQgc2hvdyBzaWduYXR1cmVzJyAnCkBAIC04MCwxMCArODAsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMgeDUwOScgJwotCWdpdCB2ZXJpZnktdGFnIG5pbmV0aC1zaWduZWQteDUwOSAyPmFjdHVhbCAmJgorCWdpdCB2ZXJpZnktdGFnIG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCiAJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCiAJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgotCWVjaG8gbmluZXRoLXNpZ25lZC14NTA5IE9LCisJZWNobyBuaW50aC1zaWduZWQteDUwOSBPSwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUnICcKQEAgLTEyNywxMCArMTI3LDEwIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcgeDUwOScgJwotCWdpdCB2ZXJpZnktdGFnIC0tcmF3IG5pbmV0aC1zaWduZWQteDUwOSAyPmFjdHVhbCAmJgorCWdpdCB2ZXJpZnktdGFnIC0tcmF3IG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCiAJZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCiAJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgotCWVjaG8gbmluZXRoLXNpZ25lZC14NTA5IE9LCisJZWNobyBuaW50aC1zaWduZWQteDUwOSBPSwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IG11bHRpcGxlIHRhZ3MnICcKQEAgLTE0Nyw3ICsxNDcsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgbXVsdGlwbGUgdGFncyB4NTA5JyAnCi0JdGFncz0ic2V2ZW50aC1zaWduZWQgbmluZXRoLXNpZ25lZC14NTA5IiAmJgorCXRhZ3M9InNldmVudGgtc2lnbmVkIG5pbnRoLXNpZ25lZC14NTA5IiAmJgogCWZvciBpIGluICR0YWdzCiAJZG8KIAkJZ2l0IHZlcmlmeS10YWcgLXYgLS1yYXcgJGkgfHwgcmV0dXJuIDEKZGlmZiAtLWdpdCBhL3QvdDcxMDUtcmVzZXQtcGF0Y2guc2ggYi90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoCmluZGV4IGJkMTBhOTYuLmZjMmE2Y2YgMTAwNzU1Ci0tLSBhL3QvdDcxMDUtcmVzZXQtcGF0Y2guc2gKKysrIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApAQCAtMzgsNiArMzgsMjcgQEAKIAl0ZXN0X2kxOG5ncmVwICJBcHBseSIgb3V0cHV0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReXnt0cmVlfScgJworCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IHJlc2V0IC1wIEhFQUReXnt0cmVlfSA+b3V0cHV0ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBwYXJlbnQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdGVzdF9pMThuZ3JlcCAiQXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCBIRUFEXjpkaXIvZm9vIChibG9iIGZhaWxzKScgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtcCBIRUFEXjpkaXIvZm9vICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIGFhYWFhYWFhICh1bmtub3duIGZhaWxzKScgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtcCBhYWFhYWFhYSAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCiAjIFRoZSBpZGVhIGluIHRoZSByZXN0IGlzIHRoYXQgYmFyIHNvcnRzIGZpcnN0LCBzbyB3ZSBhbHdheXMgc2F5ICd5JwogIyBmaXJzdCBhbmQgaWYgdGhlIHBhdGggbGltaXRlciBmYWlscyBpdCdsbCBhcHBseSB0byBiYXIgaW5zdGVhZCBvZgogIyBkaXIvZm9vLiAgVGhlcmUncyBhbHdheXMgYW4gZXh0cmEgJ24nIHRvIHJlamVjdCBlZGl0cyB0byBkaXIvZm9vIGluCmRpZmYgLS1naXQgYS90L3Q3MTA3LXJlc2V0LXBhdGhzcGVjLWZpbGUuc2ggYi90L3Q3MTA3LXJlc2V0LXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmIxYTczMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDctcmVzZXQtcGF0aHNwZWMtZmlsZS5zaApAQCAtMCwwICsxLDE1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gQSA+ZmlsZUEudCAmJgorCWVjaG8gQiA+ZmlsZUIudCAmJgorCWVjaG8gQyA+ZmlsZUMudCAmJgorCWVjaG8gRCA+ZmlsZUQudCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLS1pbmNsdWRlIC4gLW0gIkNvbW1pdCIgJiYKKwlnaXQgdGFnIGNoZWNrcG9pbnQKKycKKworcmVzdG9yZV9jaGVja3BvaW50ICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZWNrcG9pbnQKK30KKwordmVyaWZ5X2V4cGVjdCAoKSB7CisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLSBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gc3RkaW4nICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50ICYmCisJZWNobyBmaWxlQS50IHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgZmlsZUIudCAmJgorCXByaW50ZiAiZmlsZUEudFwwZmlsZUIudFwwIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJIEQgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgZmlsZUIudCAmJgorCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCSBEIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWlsaW5nIGRlbGltaXRlcicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgZmlsZUIudCAmJgorCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudCIgfCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwkgRCBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50IGZpbGVCLnQgJiYKKwlwcmludGYgImZpbGVBLnRcclxuZmlsZUIudFxyXG4iIHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJIEQgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCAmJgorCXByaW50ZiAiXCJmaWxlXFwxMDEudFwiIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgJiYKKwlwcmludGYgIlwiZmlsZVxcMTAxLnRcIiIgPmxpc3QgJiYKKwkjIE5vdGU6ICJnaXQgcmVzZXQiIGhhcyBub3QgeWV0IGxlYXJuZWQgdG8gZmFpbCBvbiB3cm9uZyBwYXRoc3BlY3MKKwlnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXBhdGhzcGVjLWZpbGUtbnVsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIHZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXNvZnQgb3IgLS1oYXJkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCAmJgorCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRCAgZmlsZUEudAorCSBEIGZpbGVCLnQKKwkgRCBmaWxlQy50CisJRCAgZmlsZUQudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaCBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCmluZGV4IDY5MWI1ZmMuLjdmNzViYjEgMTAwNzU1Ci0tLSBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC0zNTYsNiArMzU2LDI4IEBACiAJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZnJvbSBzdWJkaXJlY3Rvcnkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgU0hBMScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgYWRkdGVzdC9zdWJkaXIiICYmCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+b3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDxvdXRwdXQgPmV4cGVjdCAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPi4uL291dHB1dCAmJgorCQlhd2sgIntwcmludCBcJDF9IiA8Li4vb3V0cHV0ID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kIGNoZWNrb3V0IEhFQUReICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID4uLi9vdXRwdXQgJiYKKwkJYXdrICJ7cHJpbnQgXCQxfSIgPC4uL291dHB1dCA+Li4vYWN0dWFsMiAmJgorCQljZCAuLiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+b3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDxvdXRwdXQgPmV4cGVjdDIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBhY3R1YWwyICYmCisJCSEgdGVzdF9jbXAgYWN0dWFsIGFjdHVhbDIKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gZmV0Y2ggY29tbWl0IG5hbWUgZnJvbSBzdWJtb2R1bGUnICcKIAlyZXYxPSQoY2QgLnN1YnJlcG8gJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCXByaW50ZiAicmV2MTogJXNcbiIgIiRyZXYxIiAmJgpkaWZmIC0tZ2l0IGEvdC90NzQyMC1zdWJtb2R1bGUtc2V0LXVybC5zaCBiL3QvdDc0MjAtc3VibW9kdWxlLXNldC11cmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWYwY2I2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MjAtc3VibW9kdWxlLXNldC11cmwuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEZW50b24gTGl1CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBzZXQtdXJsIHN1YmNvbW1hbmQKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIHNldC11cmwgc3ViY29tbWFuZCBvZiBnaXQtc3VibW9kdWxlIGlzIHdvcmtpbmcKK2FzIGV4cGVjdGVkLgorJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29uZmlnIGNhY2hlIHNldHVwJyAnCisJbWtkaXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tYQorCSkgJiYKKwlta2RpciBzdXBlciAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHN1Ym1vZHVsZSBzZXQtdXJsJyAnCisJIyBhZGQgYSBjb21taXQgYW5kIG1vdmUgdGhlIHN1Ym1vZHVsZSAoY2hhbmdlIHRoZSB1cmwpCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBiID4+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbWIKKwkpICYmCisJbXYgc3VibW9kdWxlIG5ld3N1Ym1vZHVsZSAmJgorCisJZ2l0IC1DIG5ld3N1Ym1vZHVsZSBzaG93ID5leHBlY3QgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LXVybCBzdWJtb2R1bGUgLi4vbmV3c3VibW9kdWxlICYmCisJCWdyZXAgLUYgInVybCA9IC4uL25ld3N1Ym1vZHVsZSIgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUKKwkpICYmCisJZ2l0IC1DIHN1cGVyL3N1Ym1vZHVsZSBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaCBiL3QvdDc1MDEtY29tbWl0LWJhc2ljLWZ1bmN0aW9uYWxpdHkuc2gKaW5kZXggZjEzNDlhZi4uMTEwYjRiZiAxMDA3NTUKLS0tIGEvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaAorKysgYi90L3Q3NTAxLWNvbW1pdC1iYXNpYy1mdW5jdGlvbmFsaXR5LnNoCkBAIC0xNTAsNyArMTUwLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNvbW1pdCcgJwogCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKIAkjIS9iaW4vc2gKLQlzZWQgLWUgInMvYSBmaWxlL2FuIGFtZW5kIGNvbW1pdC9nIiA8ICIkMSIgPiAiJDEtIgorCXNlZCAtZSAicy9hIGZpbGUvYW4gYW1lbmQgY29tbWl0L2ciIDwiJDEiID4iJDEtIgogCW12ICIkMS0iICIkMSIKIAlFT0YKIAljaG1vZCA3NTUgZWRpdG9yICYmCkBAIC0yNjMsNyArMjYzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRpbmcgbWVzc2FnZSBmcm9tIG90aGVyIGNvbW1pdCcgJwogCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKIAkjIS9iaW4vc2gKLQlzZWQgLWUgInMvYW1lbmQvb2xkZXIvZyIgIDwgIiQxIiA+ICIkMS0iCisJc2VkIC1lICJzL2FtZW5kL29sZGVyL2ciICA8IiQxIiA+IiQxLSIKIAltdiAiJDEtIiAiJDEiCiAJRU9GCiAJY2htb2QgNzU1IGVkaXRvciAmJgpAQCAtMjg1LDkgKzI4NSw4IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW50ZXJhY3RpdmUgYWRkJyAnCi0JZWNobyA3IHwKLQlnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUgfAotCWdyZXAgIldoYXQgbm93IgorCWVjaG8gNyB8IHRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZSA+b3V0ICYmCisJZ3JlcCAiV2hhdCBub3ciIG91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgImNvbW1pdCAtLWludGVyYWN0aXZlIGRvZXNuJ3QgY2hhbmdlIGluZGV4IGlmIGVkaXRvciBhYm9ydHMiICcKQEAgLTM2MiwxMiArMzYxLDEyIEBACiAJb2xkdGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgotCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHwKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y29tbWl0ICYmCiAJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRvbGR0aWNrLyIgXAotCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCi0JCWV4cGVjdGVkICYmCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiBcCisJCWNvbW1pdCA+ZXhwZWN0ZWQgJiYKIAlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IiRhdXRob3IiICYmCi0JZ2l0IGNhdC1maWxlIC1wIEhFQUQgPiBjdXJyZW50ICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CiAKICcKQEAgLTM3NywxMiArMzc2LDEyIEBACiAJdGVzdF90aWNrICYmCiAJbmV3dGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgotCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHwKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y29tbWl0ICYmCiAJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRuZXd0aWNrLyIgXAotCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCi0JCWV4cGVjdGVkICYmCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiBcCisJCWNvbW1pdCA+ZXhwZWN0ZWQgJiYKIAlnaXQgY29tbWl0IC0tYW1lbmQgLS1kYXRlPSIkbmV3dGljayIgJiYKLQlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+IGN1cnJlbnQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIAogJwpAQCAtNDA5LDEyICs0MDgsMTMgQEAKIAllY2hvIDEgPnBvc2l0aXZlICYmCiAJZ2l0IGFkZCBwb3NpdGl2ZSAmJgogCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdSIgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyB0aGFuayB5b3UgJiYKIAkJZWNobyAmJgotCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAotCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAogCSkgPmV4cGVjdGVkICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKQEAgLTQyOCwxMyArNDI4LDE0IEBACiAJZ2l0IGNvbW1pdCAtcyAtbSAidGhhbmsgeW91CiAKICRleGlzdGluZyIgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyB0aGFuayB5b3UgJiYKIAkJZWNobyAmJgogCQllY2hvICRleGlzdGluZyAmJgotCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAotCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAogCSkgPmV4cGVjdGVkICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKQEAgLTQ0OCwxMyArNDQ5LDE0IEBACiAJZ2l0IGNvbW1pdCAtcyAtbSAid2VsY29tZQogCiAkYWx0IiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyB3ZWxjb21lICYmCiAJCWVjaG8gJiYKIAkJZWNobyAkYWx0ICYmCi0JCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8Ci0JCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iIGlkZW50CiAJKSA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTQ2OCwxNSArNDcwLDE2IEBACiAKIFdlIGhhdmUgbm93CiAkYWx0IiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyB3ZWxjb21lICYmCiAJCWVjaG8gJiYKIAkJZWNobyBXZSBoYXZlIG5vdyAmJgogCQllY2hvICRhbHQgJiYKIAkJZWNobyAmJgotCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAotCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAogCSkgPmV4cGVjdGVkICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC00ODksNyArNDkyLDggQEAKIAogbm9uLXRyYWlsZXIgbGluZQogTXlmb290ZXI6IHgiICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHN1YmplY3QgJiYKIAkJZWNobyAmJgpAQCAtNTA2LDcgKzUxMCw4IEBACiAKIG5vbi10cmFpbGVyIGxpbmUKIE15Zm9vdGVyOiB4IiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyBzdWJqZWN0ICYmCiAJCWVjaG8gJiYKQEAgLTUzOCw3ICs1NDMsOCBAQAogCT5uZWdhdGl2ZSAmJgogCWdpdCBhZGQgbmVnYXRpdmUgJiYKIAlnaXQgY29tbWl0IC1tICJvbmUiIC1tICJ0d28iIC1tICJ0aHJlZSIgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgogCSgKIAkJZWNobyBvbmUgJiYKIAkJZWNobyAmJgpAQCAtNTU1LDIzICs1NjEsMjUgQEAKIAlvbGR0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0JZ2l0IGNhdC1maWxlIC1wIEhFQUQgfAorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jb21taXQgJiYKIAlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG9sZHRpY2svIiBcCi0JCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiA+IFwKLQkJZXhwZWN0ZWQgJiYKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iIFwKKwkJY29tbWl0ID5leHBlY3RlZCAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJGF1dGhvciIgJiYKLQlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+IGN1cnJlbnQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IDxmaWxlPiB3aXRoIGRpcnR5IGluZGV4JyAnCi0JZWNobyB0YWNvY2F0ID4gZWxpZiAmJgotCWVjaG8gdGVobHVseiA+IGNoeiAmJgorCWVjaG8gdGFjb2NhdCA+ZWxpZiAmJgorCWVjaG8gdGVobHVseiA+Y2h6ICYmCiAJZ2l0IGFkZCBjaHogJiYKIAlnaXQgY29tbWl0IGVsaWYgLW0gInRhY29jYXQgaXMgYSBwYWxpbmRyb21lIiAmJgotCWdpdCBzaG93IC0tc3RhdCB8IGdyZXAgZWxpZiAmJgotCWdpdCBkaWZmIC0tY2FjaGVkIHwgZ3JlcCBjaHoKKwlnaXQgc2hvdyAtLXN0YXQgPnN0YXQgJiYKKwlncmVwIGVsaWYgc3RhdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZ3JlcCBjaHogZGlmZgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHRyZWUgKHNpbmdsZSBwYXJlbnQpJyAnCkBAIC01ODQsNyArNTkyLDggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCkgLS1hbGxvdy1lbXB0eScgJwogCiAJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmb3JjZWQgZW1wdHkiICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBmb3JjZWQKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCWdyZXAgZm9yY2VkIGNvbW1pdAogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDc1MDgtc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKaW5kZXggNGU2NzZjZC4uNDgyY2UzNSAxMDA3NTUKLS0tIGEvdC90NzUwOC1zdGF0dXMuc2gKKysrIGIvdC90NzUwOC1zdGF0dXMuc2gKQEAgLTE1NzEsNyArMTU3MSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWRfd2l0aG91dF9zdGFzaCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYWRkaXRpb25uYWwgaW5mbyBpZiBubyBzdGFzaCBlbnRyaWVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhZGRpdGlvbmFsIGluZm8gaWYgbm8gc3Rhc2ggZW50cmllcycgJwogCWdpdCBzdGFzaCBjbGVhciAmJgogCWdpdCAtYyBzdGF0dXMuc2hvd1N0YXNoPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZF93aXRob3V0X3N0YXNoIGFjdHVhbApkaWZmIC0tZ2l0IGEvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2ggYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaAppbmRleCBmMTkyMDJiLi42NjAyNzkwIDEwMDc1NQotLS0gYS90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaAorKysgYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaApAQCAtMTIzNCw3ICsxMjM0LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21tYW5kIHVzaW5nIGNvbW1pdGVyIGluZm9ybWF0aW9uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgY29tbWl0dGVyIGluZm9ybWF0aW9uJyAnCiAJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uaWZFeGlzdHMgImFkZElmRGlmZmVyZW50IiAmJgogCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gXCJcJEdJVF9DT01NSVRURVJfTkFNRSA8XCRHSVRfQ09NTUlUVEVSX0VNQUlMPlwiIiAmJgogCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaCBiL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaAppbmRleCA5OTdkNWZiLi5jZjBmZGEyIDEwMDc1NQotLS0gYS90L3Q3NTE5LXN0YXR1cy1mc21vbml0b3Iuc2gKKysrIGIvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoCkBAIC0xMDYsNiArMTA2LDggQEAKIAogIyB0ZXN0IHRoYXQgInVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvci12YWxpZCIgc2V0cyB0aGUgZnNtb25pdG9yIHZhbGlkIGJpdAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIiBzZXRzIHRoZSBmc21vbml0b3IgdmFsaWQgYml0JyAnCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GICYmCisJRU9GCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQgZGlyMS9tb2RpZmllZCAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQgZGlyMi9tb2RpZmllZCAmJgpAQCAtMTY0LDYgKzE2Niw4IEBACiAKICMgdGVzdCB0aGF0IG5ld2x5IGFkZGVkIGZpbGVzIGFyZSBtYXJrZWQgdmFsaWQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ld2x5IGFkZGVkIGZpbGVzIGFyZSBtYXJrZWQgdmFsaWQnICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwlFT0YKIAlnaXQgYWRkIG5ldyAmJgogCWdpdCBhZGQgZGlyMS9uZXcgJiYKIAlnaXQgYWRkIGRpcjIvbmV3ICYmCkBAIC0yMTgsMTEgKzIyMiwxMiBAQAogIyBFbnN1cmUgY29tbWFuZHMgdGhhdCBjYWxsIHJlZnJlc2hfaW5kZXgoKSB0byBtb3ZlIHRoZSBpbmRleCBiYWNrIGluIHRpbWUKICMgcHJvcGVybHkgaW52YWxpZGF0ZSB0aGUgZnNtb25pdG9yIGNhY2hlCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZyZXNoX2luZGV4KCkgaW52YWxpZGF0ZXMgZnNtb25pdG9yIGNhY2hlJyAnCi0Jd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GICYmCi0JRU9GCiAJY2xlYW5fcmVwbyAmJgogCWRpcnR5X3JlcG8gJiYKKwl3cml0ZV9pbnRlZ3JhdGlvbl9zY3JpcHQgJiYKIAlnaXQgYWRkIC4gJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwlFT0YKIAlnaXQgY29tbWl0IC1tICJ0byByZXNldCIgJiYKIAlnaXQgcmVzZXQgSEVBRH4xICYmCiAJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCkBAIC0yOTQsNyArMjk5LDcgQEAKIAlkb25lCiBkb25lCiAKLSMgdGVzdCB0aGF0IHNwbGl0dGluZyB0aGUgaW5kZXggZG9zbid0IGludGVyZmVyZQorIyB0ZXN0IHRoYXQgc3BsaXR0aW5nIHRoZSBpbmRleCBkb2Vzbid0IGludGVyZmVyZQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXR0aW5nIHRoZSBpbmRleCByZXN1bHRzIGluIHRoZSBzYW1lIHN0YXRlJyAnCiAJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCiAJZGlydHlfcmVwbyAmJgpkaWZmIC0tZ2l0IGEvdC90NzUxOS9mc21vbml0b3Itd2F0Y2htYW4gYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgppbmRleCA1NTE0ZWRjLi5kOGU3YTFlIDEwMDc1NQotLS0gYS90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgpAQCAtMjMsNyArMjMsOCBAQAogCiBpZiAoJHZlcnNpb24gPT0gMSkgewogCSMgY29udmVydCBuYW5vc2Vjb25kcyB0byBzZWNvbmRzCi0JJHRpbWUgPSBpbnQgJHRpbWUgLyAxMDAwMDAwMDAwOworCSMgc3VidHJhY3Qgb25lIHNlY29uZCB0byBtYWtlIHN1cmUgd2F0Y2htYW4gd2lsbCByZXR1cm4gYWxsIGNoYW5nZXMKKwkkdGltZSA9IGludCAoJHRpbWUgLyAxMDAwMDAwMDAwKSAtIDE7CiB9IGVsc2UgewogCWRpZSAiVW5zdXBwb3J0ZWQgcXVlcnktZnNtb25pdG9yIGhvb2sgdmVyc2lvbiAnJHZlcnNpb24nLlxuIiAuCiAJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7CkBAIC01NCwxOCArNTUsMTIgQEAKIAkjCiAJIyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlJ3JlIHVzaW5nIHRoZSAic2luY2UiIGdlbmVyYXRvciB0byB1c2UgdGhlCiAJIyByZWNlbmN5IGluZGV4IHRvIHNlbGVjdCBjYW5kaWRhdGUgbm9kZXMgYW5kICJmaWVsZHMiIHRvIGxpbWl0IHRoZQotCSMgb3V0cHV0IHRvIGZpbGUgbmFtZXMgb25seS4gVGhlbiB3ZSdyZSB1c2luZyB0aGUgImV4cHJlc3Npb24iIHRlcm0gdG8KLQkjIGZ1cnRoZXIgY29uc3RyYWluIHRoZSByZXN1bHRzLgotCSMKLQkjIFRoZSBjYXRlZ29yeSBvZiB0cmFuc2llbnQgZmlsZXMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSB3aWxsIGhhdmUgYQotCSMgY3JlYXRpb24gY2xvY2sgKGNjbG9jaykgbmV3ZXIgdGhhbiAkdGltZV90IHZhbHVlIGFuZCB3aWxsIGFsc28gbm90Ci0JIyBjdXJyZW50bHkgZXhpc3QuCisJIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LgogCiAJbXkgJHF1ZXJ5ID0gPDwiCUVORCI7CiAJCVsicXVlcnkiLCAiJGdpdF93b3JrX3RyZWUiLCB7CiAJCQkic2luY2UiOiAkdGltZSwKLQkJCSJmaWVsZHMiOiBbIm5hbWUiXSwKLQkJCSJleHByZXNzaW9uIjogWyJub3QiLCBbImFsbG9mIiwgWyJzaW5jZSIsICR0aW1lLCAiY2Nsb2NrIl0sIFsibm90IiwgImV4aXN0cyJdXV0KKwkJCSJmaWVsZHMiOiBbIm5hbWUiXQogCQl9XQogCUVORAogCQpkaWZmIC0tZ2l0IGEvdC90NzUyNi1jb21taXQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDc1MjYtY29tbWl0LXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGI1ODkwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MjYtY29tbWl0LXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSwxMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZmlsZTAgJiYKKwlnaXQgdGFnIGNoZWNrcG9pbnQgJiYKKworCWVjaG8gQSA+ZmlsZUEudCAmJgorCWVjaG8gQiA+ZmlsZUIudCAmJgorCWVjaG8gQyA+ZmlsZUMudCAmJgorCWVjaG8gRCA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLXNvZnQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tbmFtZS1zdGF0dXMgLXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gZmlsZScgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlBCWZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtbSAiQ29tbWl0IiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEJZmlsZUEudAorCUEJZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJQQlmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxyXG5maWxlQi50XHJcbiIgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlBCWZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJcImZpbGVcXDEwMS50XCIiIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJcImZpbGVcXDEwMS50XCIiID5saXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgLW0gIkNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0b3VjaGVzIHdoYXQgd2FzIGxpc3RlZCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQi50CisJQQlmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBhbmQgLS1hbGwgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1hbGwgLW0gIkNvbW1pdCIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbLV0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzcwMC1yZXBhY2suc2ggYi90L3Q3NzAwLXJlcGFjay5zaAppbmRleCA0ZTg1NWJjMi4uMjViMjM1YyAxMDA3NTUKLS0tIGEvdC90NzcwMC1yZXBhY2suc2gKKysrIGIvdC90NzcwMC1yZXBhY2suc2gKQEAgLTQsMTI5ICs0LDEwNCBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotY29tbWl0X2FuZF9wYWNrKCkgewotCXRlc3RfY29tbWl0ICIkQCIgPi9kZXYvbnVsbCAmJgotCVNIQTE9JChnaXQgcGFjay1vYmplY3RzIC0tYWxsIC0tdW5wYWNrZWQgLS1pbmNyZW1lbnRhbCAuZ2l0L29iamVjdHMvcGFjay9wYWNrIDwvZGV2L251bGwpICYmCi0JZWNobyBwYWNrLSR7U0hBMX0ucGFjaworY29tbWl0X2FuZF9wYWNrICgpIHsKKwl0ZXN0X2NvbW1pdCAiJEAiIDE+JjIgJiYKKwlpbmNycGFja2lkPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWFsbCAtLXVucGFja2VkIC0taW5jcmVtZW50YWwgLmdpdC9vYmplY3RzL3BhY2svcGFjayA8L2Rldi9udWxsKSAmJgorCWVjaG8gcGFjay0ke2luY3JwYWNraWR9LnBhY2sKK30KKwordGVzdF9ub19taXNzaW5nX2luX3BhY2tzICgpIHsKKwlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkbXlpZHgiICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12IGFsdF9vYmplY3RzL3BhY2svKi5pZHggPm9yaWcucmF3ICYmCisJc2VkIC1uIC1lICJzL15cKCRPSURfUkVHRVhcKS4qL1wxL3AiIG9yaWcucmF3IHwgc29ydCA+b3JpZyAmJgorCWdpdCB2ZXJpZnktcGFjayAtdiAkbXlpZHggPmRlc3QucmF3ICYmCisJY3V0IC1kIiAiIC1mMSBkZXN0LnJhdyB8IHNvcnQgPmRlc3QgJiYKKwljb21tIC0yMyBvcmlnIGRlc3QgPm1pc3NpbmcgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbWlzc2luZworfQorCisjIHdlIGV4cGVjdCAkcGFja2lkIGFuZCAkb2lkIHRvIGJlIGRlZmluZWQKK3Rlc3RfaGFzX2R1cGxpY2F0ZV9vYmplY3QgKCkgeworCXdhbnRfZHVwbGljYXRlX29iamVjdD0iJDEiCisJZm91bmRfZHVwbGljYXRlX29iamVjdD1mYWxzZQorCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4CisJZG8KKwkJaWR4PSQoYmFzZW5hbWUgJHApCisJCXRlc3QgInBhY2stJHBhY2tpZC5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCisJCWdpdCB2ZXJpZnktcGFjayAtdiAkcCA+cGFja2xpc3QgfHwgcmV0dXJuICQ/CisJCWlmIGdyZXAgIl4kb2lkIiBwYWNrbGlzdAorCQl0aGVuCisJCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PXRydWUKKwkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCisJCQlicmVhaworCQlmaQorCWRvbmUgJiYKKwl0ZXN0ICIkd2FudF9kdXBsaWNhdGVfb2JqZWN0IiA9ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgLmtlZXAgYXJlIG5vdCByZXBhY2tlZCcgJwotCWVjaG8gY29udGVudDEgPiBmaWxlMSAmJgotCWVjaG8gY29udGVudDIgPiBmaWxlMiAmJgorCWVjaG8gY29udGVudDEgPmZpbGUxICYmCisJZWNobyBjb250ZW50MiA+ZmlsZTIgJiYKIAlnaXQgYWRkIC4gJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIGluaXRpYWxfY29tbWl0ICYmCiAJIyBDcmVhdGUgdHdvIHBhY2tzCiAJIyBUaGUgZmlyc3QgcGFjayB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSBvYmplY3RzIGV4Y2VwdCBvbmUKLQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tYWxsIHwgZ3JlcCAtdiBmaWxlMiB8Ci0JCWdpdCBwYWNrLW9iamVjdHMgcGFjayA+IC9kZXYvbnVsbCAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgPm9ianMgJiYKKwlncmVwIC12IGZpbGUyIG9ianMgfCBnaXQgcGFjay1vYmplY3RzIHBhY2sgJiYKIAkjIFRoZSBzZWNvbmQgcGFjayB3aWxsIGNvbnRhaW4gdGhlIGV4Y2x1ZGVkIG9iamVjdAotCXBhY2tzaGExPSQoZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IGdyZXAgZmlsZTIgfAotCQlnaXQgcGFjay1vYmplY3RzIHBhY2spICYmCi0JPnBhY2stJHBhY2tzaGExLmtlZXAgJiYKLQlvYmpzaGExPSQoZ2l0IHZlcmlmeS1wYWNrIC12IHBhY2stJHBhY2tzaGExLmlkeCB8IGhlYWQgLW4gMSB8Ci0JCXNlZCAtZSAicy9eXChbMC05YS1mXVx7NDBcfVwpLiovXDEvIikgJiYKKwlwYWNraWQ9JChncmVwIGZpbGUyIG9ianMgfCBnaXQgcGFjay1vYmplY3RzIHBhY2spICYmCisJPnBhY2stJHBhY2tpZC5rZWVwICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12IHBhY2stJHBhY2tpZC5pZHggPnBhY2tsaXN0ICYmCisJb2lkPSQoaGVhZCAtbiAxIHBhY2tsaXN0IHwgc2VkIC1lICJzL15cKCRPSURfUkVHRVhcKS4qL1wxLyIpICYmCiAJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgogCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKIAlnaXQgcHJ1bmUtcGFja2VkICYmCi0JZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCi0JCWlkeD0kKGJhc2VuYW1lICRwKQotCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCi0JCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCi0JCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKLQkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCi0JCQlicmVhawotCQlmaQotCWRvbmUgJiYKLQl0ZXN0IC16ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IGZhbHNlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgYml0bWFwcyB2aWEgY29tbWFuZC1saW5lIGNhbiBkdXBsaWNhdGUgLmtlZXAgb2JqZWN0cycgJwotCSMgYnVpbGQgb24gJG9ianNoYTEsICRwYWNrc2hhMSwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKKwkjIGJ1aWxkIG9uICRvaWQsICRwYWNraWQsIGFuZCAua2VlcCBzdGF0ZSBmcm9tIHByZXZpb3VzCiAJZ2l0IHJlcGFjayAtQWRibCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZm91bmRfZHVwbGljYXRlX29iamVjdD0iICYmCi0JZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCi0JCWlkeD0kKGJhc2VuYW1lICRwKQotCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCi0JCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCi0JCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKLQkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCi0JCQlicmVhawotCQlmaQotCWRvbmUgJiYKLQl0ZXN0ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIgPSAxCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCB0cnVlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgYml0bWFwcyB2aWEgY29uZmlnIGNhbiBkdXBsaWNhdGUgLmtlZXAgb2JqZWN0cycgJwotCSMgYnVpbGQgb24gJG9ianNoYTEsICRwYWNrc2hhMSwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKKwkjIGJ1aWxkIG9uICRvaWQsICRwYWNraWQsIGFuZCAua2VlcCBzdGF0ZSBmcm9tIHByZXZpb3VzCiAJZ2l0IC1jIHJlcGFjay53cml0ZWJpdG1hcHM9dHJ1ZSByZXBhY2sgLUFkbCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZm91bmRfZHVwbGljYXRlX29iamVjdD0iICYmCi0JZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCi0JCWlkeD0kKGJhc2VuYW1lICRwKQotCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCi0JCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCi0JCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKLQkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCi0JCQlicmVhawotCQlmaQotCWRvbmUgJiYKLQl0ZXN0ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIgPSAxCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCB0cnVlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdHMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IHJlcGFja2VkJyAnCiAJbWtkaXIgYWx0X29iamVjdHMgJiYKLQllY2hvICQocHdkKS9hbHRfb2JqZWN0cyA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKLQllY2hvIGNvbnRlbnQzID4gZmlsZTMgJiYKLQlvYmpzaGExPSQoR0lUX09CSkVDVF9ESVJFQ1RPUlk9YWx0X29iamVjdHMgZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUzKSAmJgorCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyBjb250ZW50MyA+ZmlsZTMgJiYKKwlvaWQ9JChHSVRfT0JKRUNUX0RJUkVDVE9SWT1hbHRfb2JqZWN0cyBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTMpICYmCiAJZ2l0IGFkZCBmaWxlMyAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gY29tbWl0X2ZpbGUzICYmCiAJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgogCWdpdCBwcnVuZS1wYWNrZWQgJiYKLQlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJaWYgZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgZWdyZXAgIl4kb2Jqc2hhMSI7IHRoZW4KLQkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9MQotCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKLQkJCWJyZWFrCi0JCWZpCi0JZG9uZSAmJgotCXRlc3QgLXogIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IgorCXRlc3RfaGFzX2R1cGxpY2F0ZV9vYmplY3QgZmFsc2UKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHQgT0RCIGFyZSByZXBhY2tlZCBldmVuIHdoZW4gbG9jYWwgcmVwbyBpcyBwYWNrbGVzcycgJwogCW1rZGlyIGFsdF9vYmplY3RzL3BhY2sgJiYKIAltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdF9vYmplY3RzL3BhY2sgJiYKIAlnaXQgcmVwYWNrIC1hICYmCi0JbXlpZHg9JChscyAtMSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCkgJiYKLQl0ZXN0IC1mICIkbXlpZHgiICYmCi0JZm9yIHAgaW4gYWx0X29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgc2VkIC1uIC1lICIvXlswLTlhLWZdXHs0MFx9L3AiCi0JZG9uZSB8IHdoaWxlIHJlYWQgc2hhMSByZXN0OyBkbwotCQlpZiAhICggZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCB8IGdyZXAgIl4kc2hhMSIgKTsgdGhlbgotCQkJZWNobyAiTWlzc2luZyBvYmplY3QgaW4gbG9jYWwgcGFjazogJHNoYTEiCi0JCQlyZXR1cm4gMQotCQlmaQotCWRvbmUKKwl0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHQgT0RCIGFyZSByZXBhY2tlZCB3aGVuIGxvY2FsIHJlcG8gaGFzIHBhY2tzJyAnCiAJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgotCWVjaG8gbmV3X2NvbnRlbnQgPj4gZmlsZTEgJiYKKwllY2hvIG5ld19jb250ZW50ID4+ZmlsZTEgJiYKIAlnaXQgYWRkIGZpbGUxICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBtb3JlX2NvbnRlbnQgJiYKIAlnaXQgcmVwYWNrICYmCiAJZ2l0IHJlcGFjayAtYSAtZCAmJgotCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCi0JdGVzdCAtZiAiJG15aWR4IiAmJgotCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5pZHg7IGRvCi0JCWdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IHNlZCAtbiAtZSAiL15bMC05YS1mXVx7NDBcfS9wIgotCWRvbmUgfCB3aGlsZSByZWFkIHNoYTEgcmVzdDsgZG8KLQkJaWYgISAoIGdpdCB2ZXJpZnktcGFjayAtdiAkbXlpZHggfCBncmVwICJeJHNoYTEiICk7IHRoZW4KLQkJCWVjaG8gIk1pc3Npbmcgb2JqZWN0IGluIGxvY2FsIHBhY2s6ICRzaGExIgotCQkJcmV0dXJuIDEKLQkJZmkKLQlkb25lCisJdGVzdF9ub19taXNzaW5nX2luX3BhY2tzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCBvYnMgaW4gYWx0ZXJuYXRlIE9EQiBrZXB0IHBhY2sgYXJlIHJlcGFja2VkJyAnCkBAIC0xMzQsNyArMTA5LDcgQEAKIAlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyoucGFjawogCWRvCiAJCWJhc2VfbmFtZT0kKGJhc2VuYW1lICRwIC5wYWNrKSAmJgotCQlpZiB0ZXN0IC1mIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCisJCWlmIHRlc3RfcGF0aF9pc19maWxlIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCiAJCXRoZW4KIAkJCXJtIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCiAJCWVsc2UKQEAgLTE0MiwyMiArMTE3LDEzIEBACiAJCWZpCiAJZG9uZSAmJgogCWdpdCByZXBhY2sgLWEgLWQgJiYKLQlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgotCXRlc3QgLWYgIiRteWlkeCIgJiYKLQlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4OyBkbwotCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBzZWQgLW4gLWUgIi9eWzAtOWEtZl1cezQwXH0vcCIKLQlkb25lIHwgd2hpbGUgcmVhZCBzaGExIHJlc3Q7IGRvCi0JCWlmICEgKCBnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4IHwgZ3JlcCAiXiRzaGExIiApOyB0aGVuCi0JCQllY2hvICJNaXNzaW5nIG9iamVjdCBpbiBsb2NhbCBwYWNrOiAkc2hhMSIKLQkJCXJldHVybiAxCi0JCWZpCi0JZG9uZQorCXRlc3Rfbm9fbWlzc2luZ19pbl9wYWNrcwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgdW5yZWFjaGFibGUgb2JzIGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJwogCXJtIC1mIGFsdF9vYmplY3RzL3BhY2svKi5rZWVwICYmCiAJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHRfb2JqZWN0cy9wYWNrLyAmJgotCWNzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXntjb21taXR9KSAmJgorCWNvaWQ9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgogCXRlc3RfdGljayAmJgogCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSR0ZXN0X3RpY2sgLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgpAQCAtMTY3LDE1ICsxMzMsMTUgQEAKIAkgICAgLS11bnBhY2stdW5yZWFjaGFibGUgPC9kZXYvbnVsbCBwYWNrICYmCiAJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgogCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKLQl0ZXN0IDAgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8Ci0JCWVncmVwICJeJGNzaGExICIgfCBzb3J0IHwgdW5pcSB8IHdjIC1sKSAmJgotCWVjaG8gPiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgJGNzaGExCisJZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4ID5wYWNrbGlzdCAmJgorCSEgZ3JlcCAiXiRjb2lkICIgcGFja2xpc3QgJiYKKwllY2hvID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgJGNvaWQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgcGFja2VkIHVucmVhY2hhYmxlIG9icyB0aGF0IGV4aXN0IGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJwotCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgotCWVjaG8gIiRjc2hhMSIgfCBnaXQgcGFjay1vYmplY3RzIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nIHBhY2sgJiYKKwllY2hvICQocHdkKS9hbHRfb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gIiRjb2lkIiB8IGdpdCBwYWNrLW9iamVjdHMgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgcGFjayAmJgogCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKIAltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCiAJIyBUaGUgcGFjay1vYmplY3RzIGNhbGwgb24gdGhlIG5leHQgbGluZSBpcyBlcXVpdmFsZW50IHRvCkBAIC0xODQsMTAgKzE1MCwxMCBAQAogCSAgICAtLXVucGFjay11bnJlYWNoYWJsZSA8L2Rldi9udWxsIHBhY2sgJiYKIAlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCiAJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgotCXRlc3QgMCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKLQkJZWdyZXAgIl4kY3NoYTEgIiB8IHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCi0JZWNobyA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggPnBhY2tsaXN0ICYmCisJISBncmVwICJeJGNvaWQgIiAmJgorCWVjaG8gPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY29pZAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIG1hZGUgdW5yZWFjaGFibGUgYnkgZ3JhZnRzIG9ubHkgYXJlIGtlcHQnICcKQEAgLTE5Niw3ICsxNjIsNyBAQAogCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCUgxPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAlIMj0kKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAmJgotCWVjaG8gIiRIMCAkSDIiID4gLmdpdC9pbmZvL2dyYWZ0cyAmJgorCWVjaG8gIiRIMCAkSDIiID4uZ2l0L2luZm8vZ3JhZnRzICYmCiAJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHRlc3RfdGljayAtLWV4cGlyZS11bnJlYWNoYWJsZT0kdGVzdF90aWNrIC0tYWxsICYmCiAJZ2l0IHJlcGFjayAtYSAtZCAmJgogCWdpdCBjYXQtZmlsZSAtdCAkSDEKQEAgLTIzNSw3ICsyMDEsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXRtYXBzIGNhbiBiZSBkaXNhYmxlZCBvbiBiYXJlIHJlcG9zJyAnCiAJZ2l0IC1jIHJlcGFjay53cml0ZUJpdG1hcHM9ZmFsc2UgLUMgYmFyZS5naXQgcmVwYWNrIC1hZCAmJgotCWJpdG1hcD0kKGxzIGJhcmUuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCAyPi9kZXYvbnVsbCB8fCA6KSAmJgorCWJpdG1hcD0kKGxzIGJhcmUuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCB8fCA6KSAmJgogCXRlc3QgLXogIiRiaXRtYXAiCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDc4MTEtZ3JlcC1vcGVuLnNoIGIvdC90NzgxMS1ncmVwLW9wZW4uc2gKaW5kZXggZDFlYmZkOC4uYTk4Nzg1ZCAxMDA3NTUKLS0tIGEvdC90NzgxMS1ncmVwLW9wZW4uc2gKKysrIGIvdC90NzgxMS1ncmVwLW9wZW4uc2gKQEAgLTExMyw3ICsxMTMsNiBAQAogCXN1YmRpci9ncmVwLmMKIAl1bnJlbGF0ZWQKIAlFT0YKLQk+ZW1wdHkgJiYKIAogCWVjaG8gImVudW0gZ3JlcF9wYXRfdG9rZW4iID51bnJlbGF0ZWQgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBIRUFEIHVucmVsYXRlZCIgJiYKZGlmZiAtLWdpdCBhL3QvdDc4MTItZ3JlcC1pY2FzZS1ub24tYXNjaWkuc2ggYi90L3Q3ODEyLWdyZXAtaWNhc2Utbm9uLWFzY2lpLnNoCmluZGV4IDUzMWViNTkuLjAzZGJhNjYgMTAwNzU1Ci0tLSBhL3QvdDc4MTItZ3JlcC1pY2FzZS1ub24tYXNjaWkuc2gKKysrIGIvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaApAQCAtNzAsMTUgKzcwLDE4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFLExJQlBDUkUyICdQQ1JFIHYyOiBncmVwIG5vbi1BU0NJSSBmcm9tIGludmFsaWQgVVRGLTggZGF0YScgJwogCWdpdCBncmVwIC1oICLDpiIgaW52YWxpZC0weDgwID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKLQlnaXQgZ3JlcCAtaCAiKCpOT19KSVQpw6YiIGludmFsaWQtMHg4MCAmJgorCWdpdCBncmVwIC1oICIoKk5PX0pJVCnDpiIgaW52YWxpZC0weDgwID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSxMSUJQQ1JFMiAnUENSRSB2MjogZ3JlcCBub24tQVNDSUkgZnJvbSBpbnZhbGlkIFVURi04IGRhdGEgd2l0aCAtaScgJwogCXRlc3RfbWlnaHRfZmFpbCBnaXQgZ3JlcCAtaGkgIsOGIiBpbnZhbGlkLTB4ODAgPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1oaSAiKCpOT19KSVQpw4YiIGludmFsaWQtMHg4MCAmJgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWlmIHRlc3QgLXMgYWN0dWFsCisJdGhlbgorCSAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwlmaSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1oaSAiKCpOT19KSVQpw4YiIGludmFsaWQtMHg4MCA+YWN0dWFsICYmCisJISB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAxLXNlbmQtZW1haWwuc2ggYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKaW5kZXggOTk3ZjkwYi4uYTgzNGFmYSAxMDA3NTUKLS0tIGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoCisrKyBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApAQCAtMTI2MCw3ICsxMjYwLDcgQEAKIAlncmVwICJUbzogZGVmYXVsdEBleGFtcGxlLmNvbSIgc3Rkb3V0CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiBib29sIGlkZW50aXR5IHZhcmlhYmxlIGV4aXN0YW5jZSBvdmVycmlkZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiBib29sIGlkZW50aXR5IHZhcmlhYmxlIGV4aXN0ZW5jZSBvdmVycmlkZXMnICcKIAlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIFwKIAkJLWMgc2VuZGVtYWlsLnhtYWlsZXI9dHJ1ZSBcCiAJCS1jIHNlbmRlbWFpbC5jbG91ZC54bWFpbGVyPWZhbHNlIFwKQEAgLTIwNjYsNyArMjA2Niw3IEBACiAJVE8xPSQoZWNobyAiUVRvIDEgPHRvMUBleGFtcGxlLmNvbT4iIHwgcV90b190YWIpICYmCiAJVE8yPSQoZWNobyAiUVp0bzIiIHwgcXpfdG9fdGFiX3NwYWNlKSAmJgogCUNDMT0kKGVjaG8gImNjMSIgfCBhcHBlbmRfY3IpICYmCi0JQkNDMT0kKGVjaG8gIlEgYmNjMUBleGFtcGxlLmNvbSBRIiB8IHFfdG9fbnVsKSAmJgorCUJDQzE9JChlY2hvICIgYmNjMUBleGFtcGxlLmNvbSBRIiB8IHFfdG9fbnVsKSAmJgogCWdpdCBzZW5kLWVtYWlsIFwKIAktLWRyeS1ydW4gXAogCS0tZnJvbT0iCUV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCmRpZmYgLS1naXQgYS90L3Q5MDEwLXN2bi1mZS5zaCBiL3QvdDkwMTAtc3ZuLWZlLnNoCmluZGV4IDBiMjBiMDcuLmM5MGZkYzUgMTAwNzU1Ci0tLSBhL3QvdDkwMTAtc3ZuLWZlLnNoCisrKyBiL3QvdDkwMTAtc3ZuLWZlLnNoCkBAIC01Myw4ICs1Myw2IEBACiAJcHJpbnRmICIlc1xuIiAiJHRleHQiCiB9CiAKLT5lbXB0eQotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkdW1wJyAnCiAJcmVpbml0X2dpdCAmJgogCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyIiA+aW5wdXQgJiYKQEAgLTIwOCw3ICsyMDYsNyBAQAogCXRlc3RfY21wIGV4cGVjdC5kYXRlIGFjdHVhbC5kYXRlICYmCiAJdGVzdF9jbXAgZXhwZWN0LmZpbGVzIGFjdHVhbC5maWxlcyAmJgogCWdpdCBjaGVja291dCBIRUFEIGVtcHR5LWZpbGUgJiYKLQl0ZXN0X2NtcCBlbXB0eSBmaWxlCisJdGVzdF9tdXN0X2JlX2VtcHR5IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IHdpdGggZmlsZXMnICcKZGlmZiAtLWdpdCBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2ggYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCmluZGV4IDE3YmI2ZGMuLmFlOTk1MGEgMTAwNzU1Ci0tLSBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKKysrIGIvdC90OTMwMC1mYXN0LWltcG9ydC5zaApAQCAtMjUwNyw5ICsyNTA3LDYgQEAKIAllY2hvICRleHBlY3RfaWQgYmxvYiAkZXhwZWN0X2xlbiA+ZXhwZWN0LnJlc3BvbnNlICYmCiAKIAlybSAtZiBibG9icyAmJgotCWNhdCA+ZnJvbnRlbmQgPDwtXEZST05URU5EX0VORCAmJgotCSMhL2Jpbi9zaAotCUZST05URU5EX0VORAogCiAJbWtmaWZvIGJsb2JzICYmCiAJKApAQCAtMzE5NCwxMyArMzE5MSwyMiBAQAogCWV4ZWMgOTw+Vi5vdXRwdXQKIAlybSBWLm91dHB1dAogCi0JZ2l0IGZhc3QtaW1wb3J0ICRvcHRpb25zIDwmOCA+JjkgJgotCWVjaG8gJCEgPlYucGlkCisJKAorCQlnaXQgZmFzdC1pbXBvcnQgJG9wdGlvbnMgPCY4ID4mOSAmCisJCWVjaG8gJCEgPiY5CisJCXdhaXQgJCEKKwkJZWNobyA+JjIgImJhY2tncm91bmQgZmFzdC1pbXBvcnQgdGVybWluYXRlZCB0b28gZWFybHkgd2l0aCBleGl0IGNvZGUgJD8iCisJCSMgVW4tYmxvY2sgdGhlIHJlYWQgbG9vcCBpbiB0aGUgbWFpbiBzaGVsbCBwcm9jZXNzLgorCQllY2hvID4mOSBVTkVYUEVDVEVECisJKSAmCisJc2hfcGlkPSQhCisJcmVhZCBmaV9waWQgPCY5CiAJIyBXZSBkb24ndCBtaW5kIGlmIGZhc3QtaW1wb3J0IGhhcyBhbHJlYWR5IGRpZWQgYnkgdGhlIHRpbWUgdGhlIHRlc3QKIAkjIGVuZHMuCiAJdGVzdF93aGVuX2ZpbmlzaGVkICIKIAkJZXhlYyA4PiYtOyBleGVjIDk+Ji07Ci0JCWtpbGwgJChjYXQgVi5waWQpICYmIHdhaXQgJChjYXQgVi5waWQpCisJCWtpbGwgJHNoX3BpZCAmJiB3YWl0ICRzaF9waWQKKwkJa2lsbCAkZmlfcGlkICYmIHdhaXQgJGZpX3BpZAogCQl0cnVlIgogCiAJIyBTdGFydCBpbiB0aGUgYmFja2dyb3VuZCB0byBlbnN1cmUgd2UgYWRoZXJlIHN0cmljdGx5IHRvIChibG9ja2luZykKQEAgLTMyMjAsNiArMzIyNiw5IEBACiAJCXRoZW4KIAkJCWVycm9yPTAKIAkJCWJyZWFrCisJCWVsaWYgdGVzdCAiJG91dHB1dCIgPSAiVU5FWFBFQ1RFRCIKKwkJdGhlbgorCQkJYnJlYWsKIAkJZmkKIAkJIyBvdGhlcndpc2UgaWdub3JlIGNydWZ0CiAJCWVjaG8gPiYyICJjcnVmdDogJG91dHB1dCIKQEAgLTMyMzIsNyArMzI0MSw3IEBACiB9CiAKIGJhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcgKCkgewotCWlmICEga2lsbCAtMCAiJChjYXQgVi5waWQpIgorCWlmICEga2lsbCAtMCAiJGZpX3BpZCIKIAl0aGVuCiAJCWVjaG8gPiYyICJiYWNrZ3JvdW5kIGZhc3QtaW1wb3J0IHRlcm1pbmF0ZWQgdG9vIGVhcmx5IgogCQlmYWxzZQpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaCBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKaW5kZXggZGFkYzcwYi4uY2EyMjNkYyAxMDA3NTUKLS0tIGEvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaAorKysgYi90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoCkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICB0aGlyZCBub3RlIGZvciBmaXJzdCBjb21taXQKIEVYUEVDVF9FTkQKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGNvbmNhdGVudGF0aW9uIG5vdGVzIHdpdGggTSBjb21tYW5kJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgY29uY2F0ZW5hdGlvbiBub3RlcyB3aXRoIE0gY29tbWFuZCcgJwogCiAJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgogCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKZGlmZiAtLWdpdCBhL3QvdDkzNTAtZmFzdC1leHBvcnQuc2ggYi90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCmluZGV4IDVhYzlkZWYuLjY5MGM5MGYgMTAwNzU1Ci0tLSBhL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtNTQxLDcgKzU0MSw3IEBACiAKICMgTkVFRFNXT1JLOiBub3QganVzdCBjaGVjayByZXR1cm4gc3RhdHVzLCBidXQgdmFsaWRhdGUgdGhlIG91dHB1dAogIyBOb3RlIHRoYXQgdGhlc2UgdGVzdHMgRE8gTk9USElORyBvdGhlciB0aGFuIHByaW50IGEgd2FybmluZyB0aGF0Ci0jIHRoZXkgYXJlIG9tbWl0dGluZyB0aGUgb25lIHRhZyB3ZSBhc2tlZCB0aGVtIHRvIGV4cG9ydCAoYmVjYXVzZSB0aGUKKyMgdGhleSBhcmUgb21pdHRpbmcgdGhlIG9uZSB0YWcgd2UgYXNrZWQgdGhlbSB0byBleHBvcnQgKGJlY2F1c2UgdGhlCiAjIHRhZ3MgcmVzb2x2ZSB0byBhIHRyZWUpLiAgVGhleSBleGlzdCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QKICMgYWJvcnQgYnV0IGluc3RlYWQganVzdCB3YXJuLgogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV90YWctb2JqJyAgICAnZ2l0IGZhc3QtZXhwb3J0IHRyZWVfdGFnLW9iaicKZGlmZiAtLWdpdCBhL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoIGIvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKaW5kZXggMDc5NmE0My4uZTM4Y2JjOSAxMDA3NTUKLS0tIGEvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKKysrIGIvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKQEAgLTE4OCw4ICsxODgsOCBAQAogJwogCiB4c3MoKSB7Ci0JZWNobyA+JjIgIkNoZWNraW5nICQxLi4uIiAmJgotCWdpdHdlYl9ydW4gIiQxIiAmJgorCWVjaG8gPiYyICJDaGVja2luZyAkKi4uLiIgJiYKKwlnaXR3ZWJfcnVuICIkQCIgJiYKIAlpZiBncmVwICIkVEFHIiBnaXR3ZWIuYm9keTsgdGhlbgogCQllY2hvID4mMiAieHNzOiAkVEFHIHNob3VsZCBoYXZlIGJlZW4gcXVvdGVkIGluIG91dHB1dCIKIAkJcmV0dXJuIDEKQEAgLTIwMCw3ICsyMDAsOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAneHNzIGNoZWNrcycgJwogCVRBRz0iPG1hZ2ljLXhzcy10YWc+IiAmJgogCXhzcyAiYT1yc3MmcD0kVEFHIiAmJgotCXhzcyAiYT1yc3MmcD1mb28uZ2l0JmY9JFRBRyIKKwl4c3MgImE9cnNzJnA9Zm9vLmdpdCZmPSRUQUciICYmCisJeHNzICIiICIkVEFHKyIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaCBiL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCmluZGV4IDNjZmYxZmMuLjljOTcxMGQgMTAwNzU1Ci0tLSBhL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCisrKyBiL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCkBAIC00MDcsNyArNDA3LDcgQEAKICcKIAogIwotIyBXaGF0IGhhcHBlbnMgd2hlbiB0d28gZmlsZXMgb2YgdGhlIHNhbWUgbmFtZSBhcmUgb3ZlcmxheWVkIHRvZ2V0aGVyPworIyBXaGF0IGhhcHBlbnMgd2hlbiB0d28gZmlsZXMgb2YgdGhlIHNhbWUgbmFtZSBhcmUgb3ZlcmxhaWQgdG9nZXRoZXI/CiAjIFRoZSBsYXN0LWxpc3RlZCBmaWxlIHNob3VsZCB0YWtlIHByZWZlcmVuY2UuCiAjCiAjIC8vZGVwb3QKZGlmZiAtLWdpdCBhL3QvdDk5MDItY29tcGxldGlvbi5zaCBiL3QvdDk5MDItY29tcGxldGlvbi5zaAppbmRleCA1NGY4Y2UxLi45Mzg3N2JhIDEwMDc1NQotLS0gYS90L3Q5OTAyLWNvbXBsZXRpb24uc2gKKysrIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCkBAIC0zNzgsNyArMzc4LDcgQEAKICcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIHJldHVybnMgZXJyb3Igd2hlbiBjYW50IGZpbmQgcmVwbycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZXR1cm5zIGVycm9yIHdoZW4gY2Fubm90IGZpbmQgcmVwbycgJwogCSgKIAkJX19naXRfZGlyPSJub24tZXhpc3RpbmciICYmCiAJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyID4iJGFjdHVhbCIKQEAgLTk0NSw3ICs5NDUsNyBAQAogCXJtIC1mIC5naXQvRkVUQ0hfSEVBRAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gZG9udCBmaWx0ZXIgcmVmcyB1bmxlc3MgdG9sZCBzbycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGRvIG5vdCBmaWx0ZXIgcmVmcyB1bmxlc3MgdG9sZCBzbycgJwogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJSEVBRAogCW1hc3RlcgpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAKIAkJIyBJbiB0aGUgZm9sbG93aW5nIHRlc3RzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3ZSBvbmx5CiAJCSMgY2FyZSBhYm91dCBob3cgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSgpIGRlYWxzIHdpdGgKIAkJIyB1bnVzdWFsIGNoYXJhY3RlcnMgaW4gcGF0aCBuYW1lcy4gIEJ5IHJlcXVlc3Rpbmcgb25seQotCQkjIHVudHJhY2tlZCBmaWxlcyB3ZSBkb250IGhhdmUgdG8gYm90aGVyIGFkZGluZyBhbnkKKwkJIyB1bnRyYWNrZWQgZmlsZXMgd2UgZG8gbm90IGhhdmUgdG8gYm90aGVyIGFkZGluZyBhbnkKIAkJIyBwYXRocyB0byB0aGUgaW5kZXggaW4gdGhvc2UgdGVzdHMuCiAJCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgLS1vdGhlcnMgJiYKIAkJcHJpbnRfY29tcApAQCAtMTQzOCw2ICsxNDM4LDggQEAKIAktLW5vLWd1ZXNzIFoKIAktLW5vLS4uLiBaCiAJLS1vdmVybGF5IFoKKwktLXBhdGhzcGVjLWZpbGUtbnVsIFoKKwktLXBhdGhzcGVjLWZyb20tZmlsZT1aCiAJRU9GCiAnCiAKQEAgLTE1NDgsNyArMTU1MCwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NlbmQtZW1haWwnICcKLQl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIC0tY292IiAiLS1jb3Zlci1sZXR0ZXIgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNlbmQtZW1haWwgLS1jb3YiIDw8LVxFT0YgJiYKKwktLWNvdmVyLWZyb20tZGVzY3JpcHRpb249WgorCS0tY292ZXItbGV0dGVyIFoKKwlFT0YKIAl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIG1hIiAibWFzdGVyICIKICcKIApkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2ggYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaAppbmRleCBiMjk5ZWNjLi4yODRjNTJkIDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaAorKysgYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApAQCAtMzA4LDcgKzMwOCw3IEBACiAJdG90YWw9JDEKIAogCWFkZF9mcm9tPQotCWlmIGdpdCAtQyAiJGluZGlyIiByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWYiCisJaWYgZ2l0IC1DICIkaW5kaXIiIHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkcmVmIgogCXRoZW4KIAkJYWRkX2Zyb209dAogCWZpCkBAIC0xMDEyLDE5ICsxMDEyLDMwIEBACiAJZmkKIH0KIAotIyBUZXN0cyB0aGF0IGl0cyB0d28gcGFyYW1ldGVycyByZWZlciB0byB0aGUgc2FtZSByZXZpc2lvbgorIyBUZXN0cyB0aGF0IGl0cyB0d28gcGFyYW1ldGVycyByZWZlciB0byB0aGUgc2FtZSByZXZpc2lvbiwgb3IgaWYgJyEnIGlzCisjIHByb3ZpZGVkIGZpcnN0LCB0aGF0IGl0cyBvdGhlciB0d28gcGFyYW1ldGVycyByZWZlciB0byBkaWZmZXJlbnQKKyMgcmV2aXNpb25zLgogdGVzdF9jbXBfcmV2ICgpIHsKKwlsb2NhbCBvcD0nPScgd3JvbmdfcmVzdWx0PWRpZmZlcmVudAorCisJaWYgdGVzdCAkIyAtZ2UgMSAmJiB0ZXN0ICJ4JDEiID0gJ3ghJworCXRoZW4KKwkgICAgb3A9JyE9JworCSAgICB3cm9uZ19yZXN1bHQ9J3RoZSBzYW1lJworCSAgICBzaGlmdAorCWZpCiAJaWYgdGVzdCAkIyAhPSAyCiAJdGhlbgogCQllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogdGVzdF9jbXBfcmV2IHJlcXVpcmVzIHR3byByZXZpc2lvbnMsIGJ1dCBnb3QgJCMiCiAJZWxzZQogCQlsb2NhbCByMSByMgogCQlyMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgJiYKLQkJcjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIpICYmCi0JCWlmIHRlc3QgIiRyMSIgIT0gIiRyMiIKKwkJcjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIpIHx8IHJldHVybiAxCisKKwkJaWYgISB0ZXN0ICIkcjEiICIkb3AiICIkcjIiCiAJCXRoZW4KIAkJCWNhdCA+JjQgPDwtRU9GCi0JCQllcnJvcjogdHdvIHJldmlzaW9ucyBwb2ludCB0byBkaWZmZXJlbnQgb2JqZWN0czoKKwkJCWVycm9yOiB0d28gcmV2aXNpb25zIHBvaW50IHRvICR3cm9uZ19yZXN1bHQgb2JqZWN0czoKIAkJCSAgJyQxJzogJHIxCiAJCQkgICckMic6ICRyMgogCQkJRU9GCkBAIC0xMTc1LDYgKzExODYsMzQgQEAKIAljb21tYW5kICIkUEVSTF9QQVRIIiAiJEAiIDI+JjcKIH0gNz4mMiAyPiY0CiAKKyMgR2l2ZW4gdGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIGJvb2wgdmFsdWUsIG5vcm1hbGl6ZQorIyBpdHMgdmFsdWUgdG8gYSAwICh0cnVlKSBvciAxIChmYWxzZSBvciBlbXB0eSBzdHJpbmcpIHJldHVybiBjb2RlLgorIworIyAgIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfSFRUUEQgPGRlZmF1bHQtdmFsdWU+CisjCisjIFJldHVybiB3aXRoIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFyaWFibGUKKyMgaXMgdW5zZXQuCisjIEFib3J0IHRoZSB0ZXN0IHNjcmlwdCBpZiBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBvciB0aGUgZGVmYXVsdAorIyBhcmUgbm90IHZhbGlkIGJvb2wgdmFsdWVzLgorCit0ZXN0X2Jvb2xfZW52ICgpIHsKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCUJVRyAidGVzdF9ib29sX2VudiByZXF1aXJlcyB0d28gcGFyYW1ldGVycyAodmFyaWFibGUgbmFtZSBhbmQgZGVmYXVsdCB2YWx1ZSkiCisJZmkKKworCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9IiQyIiAtLWV4aXQtY29kZSAiJDEiCisJcmV0PSQ/CisJY2FzZSAkcmV0IGluCisJMHwxKQkjIHVuc2V0IG9yIHZhbGlkIGJvb2wgdmFsdWUKKwkJOzsKKwkqKQkjIGludmFsaWQgYm9vbCB2YWx1ZSBvciBzb21ldGhpbmcgdW5leHBlY3RlZAorCQllcnJvciA+JjcgInRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMgYm90aCBmb3IgXCQkMSBhbmQgZm9yIHRoZSBkZWZhdWx0IGZhbGxiYWNrIgorCQk7OworCWVzYWMKKwlyZXR1cm4gJHJldAorfQorCiAjIEV4aXQgdGhlIHRlc3Qgc3VpdGUsIGVpdGhlciBieSBza2lwcGluZyBhbGwgcmVtYWluaW5nIHRlc3RzIG9yIGJ5CiAjIGV4aXRpbmcgd2l0aCBhbiBlcnJvci4gSWYgb3VyIHByZXJlcXVpc2l0ZSB2YXJpYWJsZSAkMSBmYWxscyBiYWNrCiAjIG9uIGEgZGVmYXVsdCBhc3N1bWUgd2Ugd2VyZSBvcHBvcnR1bmlzdGljYWxseSB0cnlpbmcgdG8gc2V0IHVwIHNvbWUKQEAgLTExODMsNyArMTIyMiw3IEBACiAjIFRoZSBlcnJvci9za2lwIG1lc3NhZ2Ugc2hvdWxkIGJlIGdpdmVuIGJ5ICQyLgogIwogdGVzdF9za2lwX29yX2RpZSAoKSB7Ci0JaWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIC0tZXhpdC1jb2RlICQxCisJaWYgISB0ZXN0X2Jvb2xfZW52ICIkMSIgZmFsc2UKIAl0aGVuCiAJCXNraXBfYWxsPSQyCiAJCXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKaW5kZXggZTA2ZmEwMi4uNDRkZjUxYiAxMDA2NDQKLS0tIGEvdC90ZXN0LWxpYi5zaAorKysgYi90L3Rlc3QtbGliLnNoCkBAIC00MDQsOSArNDA0LDEzIEBACiB1bnNldCBYREdfQ0FDSEVfSE9NRQogdW5zZXQgWERHX0NPTkZJR19IT01FCiB1bnNldCBHSVRQRVJMTElCCi1HSVRfQVVUSE9SX0VNQUlMPWF1dGhvckBleGFtcGxlLmNvbQorVEVTVF9BVVRIT1JfTE9DQUxOQU1FPWF1dGhvcgorVEVTVF9BVVRIT1JfRE9NQUlOPWV4YW1wbGUuY29tCitHSVRfQVVUSE9SX0VNQUlMPSR7VEVTVF9BVVRIT1JfTE9DQUxOQU1FfUAke1RFU1RfQVVUSE9SX0RPTUFJTn0KIEdJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InCi1HSVRfQ09NTUlUVEVSX0VNQUlMPWNvbW1pdHRlckBleGFtcGxlLmNvbQorVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FPWNvbW1pdHRlcgorVEVTVF9DT01NSVRURVJfRE9NQUlOPWV4YW1wbGUuY29tCitHSVRfQ09NTUlUVEVSX0VNQUlMPSR7VEVTVF9DT01NSVRURVJfTE9DQUxOQU1FfUAke1RFU1RfQ09NTUlUVEVSX0RPTUFJTn0KIEdJVF9DT01NSVRURVJfTkFNRT0nQyBPIE1pdHRlcicKIEdJVF9NRVJHRV9WRVJCT1NJVFk9NQogR0lUX01FUkdFX0FVVE9FRElUPW5vCkBAIC0xMDAwLDYgKzEwMDQsMTIgQEAKIAkJdG9fc2tpcD10CiAJCXNraXBwZWRfcmVhc29uPSJHSVRfU0tJUF9URVNUUyIKIAlmaQorCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkcnVuX2xpc3QiICYmCisJICAgISBtYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgJy0tcnVuJyAkdGVzdF9jb3VudCAiJHJ1bl9saXN0IgorCXRoZW4KKwkJdG9fc2tpcD10CisJCXNraXBwZWRfcmVhc29uPSItLXJ1biIKKwlmaQogCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkdGVzdF9wcmVyZXEiICYmCiAJICAgISB0ZXN0X2hhdmVfcHJlcmVxICIkdGVzdF9wcmVyZXEiCiAJdGhlbgpAQCAtMTAxMiwxMiArMTAyMiw2IEBACiAJCWZpCiAJCXNraXBwZWRfcmVhc29uPSJtaXNzaW5nICRtaXNzaW5nX3ByZXJlcSR7b2ZfcHJlcmVxfSIKIAlmaQotCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkcnVuX2xpc3QiICYmCi0JCSEgbWF0Y2hfdGVzdF9zZWxlY3Rvcl9saXN0ICctLXJ1bicgJHRlc3RfY291bnQgIiRydW5fbGlzdCIKLQl0aGVuCi0JCXRvX3NraXA9dAotCQlza2lwcGVkX3JlYXNvbj0iLS1ydW4iCi0JZmkKIAogCWNhc2UgIiR0b19za2lwIiBpbgogCXQpCkBAIC0xNDAyLDIzICsxNDA2LDIzIEBACiAjIFRoZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgY29kZSBob29rcyBpbnRvIHRlc3Rfc2V0X3ByZXJlcSgpLCBhbmQKICMgdGh1cyBuZWVkcyB0byBiZSBzZXQgdXAgcmVhbGx5IGVhcmx5LCBhbmQgc2V0IGFuIGludGVybmFsIHZhcmlhYmxlCiAjIGZvciBjb252ZW5pZW5jZSBzbyB0aGUgaG90IHRlc3Rfc2V0X3ByZXJlcSgpIGNvZGVwYXRoIGRvZXNuJ3QgbmVlZAotIyB0byBjYWxsICJnaXQgZW52LS1oZWxwZXIiLiBPbmx5IGRvIHRoYXQgd29yayBpZiBuZWVkZWQgYnkgc2VlaW5nIGlmCi0jIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBpcyBzZXQgYXQgYWxsLgorIyB0byBjYWxsICJnaXQgZW52LS1oZWxwZXIiICh2aWEgdGVzdF9ib29sX2VudikuIE9ubHkgZG8gdGhhdCB3b3JrCisjIGlmIG5lZWRlZCBieSBzZWVpbmcgaWYgR0lUX1RFU1RfRkFJTF9QUkVSRVFTIGlzIHNldCBhdCBhbGwuCiBHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUw9CiBpZiB0ZXN0IC1uICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTIgogdGhlbgotCWlmIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCAtLWV4aXQtY29kZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMKKwlpZiB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBmYWxzZQogCXRoZW4KIAkJR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMPXRydWUKIAkJdGVzdF9zZXRfcHJlcmVxIEZBSUxfUFJFUkVRUwogCWZpCiBlbHNlCiAJdGVzdF9sYXp5X3ByZXJlcSBGQUlMX1BSRVJFUVMgJwotCQlnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfRkFJTF9QUkVSRVFTCisJCXRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfRkFJTF9QUkVSRVFTIGZhbHNlCiAJJwogZmkKIAotIyBGaXggc29tZSBjb21tYW5kcyBvbiBXaW5kb3dzCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MsIGFuZCBvdGhlciBPUy1zcGVjaWZpYyB0aGluZ3MKIHVuYW1lX3M9JCh1bmFtZSAtcykKIGNhc2UgJHVuYW1lX3MgaW4KICpNSU5HVyopCkBAIC0xNDQ5LDYgKzE0NTMsMTIgQEAKIAl0ZXN0X3NldF9wcmVyZXEgU0VEX1NUUklQU19DUgogCXRlc3Rfc2V0X3ByZXJlcSBHUkVQX1NUUklQU19DUgogCTs7CitGcmVlQlNEKQorCXRlc3Rfc2V0X3ByZXJlcSBSRUdFWF9JTExTRVEKKwl0ZXN0X3NldF9wcmVyZXEgUE9TSVhQRVJNCisJdGVzdF9zZXRfcHJlcmVxIEJTTEFTSFBTUEVDCisJdGVzdF9zZXRfcHJlcmVxIEVYRUNLRUVQU1BJRAorCTs7CiAqKQogCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KIAl0ZXN0X3NldF9wcmVyZXEgQlNMQVNIUFNQRUMKQEAgLTE0NzMsNyArMTQ4Myw3IEBACiBmaQogCiB0ZXN0X2xhenlfcHJlcmVxIENfTE9DQUxFX09VVFBVVCAnCi0JISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KKwkhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gZmFsc2UKICcKIAogaWYgdGVzdCAteiAiJEdJVF9URVNUX0NIRUNLX0NBQ0hFX1RSRUUiCmRpZmYgLS1naXQgYS90YWcuYyBiL3RhZy5jCmluZGV4IGJmYTBlMzEuLjcxYjU0NDQgMTAwNjQ0Ci0tLSBhL3RhZy5jCisrKyBiL3RhZy5jCkBAIC0xNDEsNyArMTQxLDE2IEBACiAKIAlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKIAkJcmV0dXJuIDA7Ci0JaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlpZiAoaXRlbS0+dGFnKSB7CisJCS8qCisJCSAqIFByZXN1bWFibHkgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBmYWlsZWQgcGFyc2U7CisJCSAqIGNsZWFyIGl0IG91dCBpbiBwcmVwYXJhdGlvbiBmb3IgcmUtcGFyc2luZyAod2UnbGwgcHJvYmFibHkKKwkJICogaGl0IHRoZSBzYW1lIGVycm9yLCB3aGljaCBsZXRzIHVzIHRlbGwgb3VyIGN1cnJlbnQgY2FsbGVyCisJCSAqIGFib3V0IHRoZSBwcm9ibGVtKS4KKwkJICovCisJCUZSRUVfQU5EX05VTEwoaXRlbS0+dGFnKTsKKwl9CiAKIAlpZiAoc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMjQpCiAJCXJldHVybiAtMTsKQEAgLTE2NywxMCArMTc2LDE1IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRhZ190eXBlKSkgewogCQlpdGVtLT50YWdnZWQgPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90YWcociwgJm9pZCk7CiAJfSBlbHNlIHsKLQkJZXJyb3IoIlVua25vd24gdHlwZSAlcyIsIHR5cGUpOwotCQlpdGVtLT50YWdnZWQgPSBOVUxMOworCQlyZXR1cm4gZXJyb3IoInVua25vd24gdGFnIHR5cGUgJyVzJyBpbiAlcyIsCisJCQkgICAgIHR5cGUsIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKIAl9CiAKKwlpZiAoIWl0ZW0tPnRhZ2dlZCkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdGFnIHBvaW50ZXIgdG8gJXMgaW4gJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZvaWQpLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisKIAlpZiAoYnVmcHRyICsgNCA8IHRhaWwgJiYgc3RhcnRzX3dpdGgoYnVmcHRyLCAidGFnICIpKQogCQk7IAkJLyogZ29vZCAqLwogCWVsc2UKQEAgLTE4Nyw2ICsyMDEsNyBAQAogCWVsc2UKIAkJaXRlbS0+ZGF0ZSA9IDA7CiAKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdGFyLmggYi90YXIuaAppbmRleCAzNDY3NzA1Li42YjI1OGM0IDEwMDY0NAotLS0gYS90YXIuaAorKysgYi90YXIuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgVEFSX0gKKyNkZWZpbmUgVEFSX0gKKwogI2RlZmluZSBUWVBFRkxBR19BVVRPCQknXDAnCiAjZGVmaW5lIFRZUEVGTEFHX1JFRwkJJzAnCiAjZGVmaW5lIFRZUEVGTEFHX0xOSwkJJzInCkBAIC0yMywzICsyNiw1IEBACiAJY2hhciBkZXZtaW5vcls4XTsJLyogMzM3ICovCiAJY2hhciBwcmVmaXhbMTU1XTsJLyogMzQ1ICovCiB9OworCisjZW5kaWYgLyogVEFSX0ggKi8KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZQppbmRleCBlNjczYmIzLi5lZjk0ZmEyIDEwMDc1NQotLS0gYS90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1mc21vbml0b3Itd2F0Y2htYW4uc2FtcGxlCkBAIC0yMiw3ICsyMiw4IEBACiAKIGlmICgkdmVyc2lvbiA9PSAxKSB7CiAJIyBjb252ZXJ0IG5hbm9zZWNvbmRzIHRvIHNlY29uZHMKLQkkdGltZSA9IGludCAkdGltZSAvIDEwMDAwMDAwMDA7CisJIyBzdWJ0cmFjdCBvbmUgc2Vjb25kIHRvIG1ha2Ugc3VyZSB3YXRjaG1hbiB3aWxsIHJldHVybiBhbGwgY2hhbmdlcworCSR0aW1lID0gaW50ICgkdGltZSAvIDEwMDAwMDAwMDApIC0gMTsKIH0gZWxzZSB7CiAJZGllICJVbnN1cHBvcnRlZCBxdWVyeS1mc21vbml0b3IgaG9vayB2ZXJzaW9uICckdmVyc2lvbicuXG4iIC4KIAkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIjsKQEAgLTUzLDE4ICs1NCwxMiBAQAogCSMKIAkjIFRvIGFjY29tcGxpc2ggdGhpcywgd2UncmUgdXNpbmcgdGhlICJzaW5jZSIgZ2VuZXJhdG9yIHRvIHVzZSB0aGUKIAkjIHJlY2VuY3kgaW5kZXggdG8gc2VsZWN0IGNhbmRpZGF0ZSBub2RlcyBhbmQgImZpZWxkcyIgdG8gbGltaXQgdGhlCi0JIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LiBUaGVuIHdlJ3JlIHVzaW5nIHRoZSAiZXhwcmVzc2lvbiIgdGVybSB0bwotCSMgZnVydGhlciBjb25zdHJhaW4gdGhlIHJlc3VsdHMuCi0JIwotCSMgVGhlIGNhdGVnb3J5IG9mIHRyYW5zaWVudCBmaWxlcyB0aGF0IHdlIHdhbnQgdG8gaWdub3JlIHdpbGwgaGF2ZSBhCi0JIyBjcmVhdGlvbiBjbG9jayAoY2Nsb2NrKSBuZXdlciB0aGFuICR0aW1lX3QgdmFsdWUgYW5kIHdpbGwgYWxzbyBub3QKLQkjIGN1cnJlbnRseSBleGlzdC4KKwkjIG91dHB1dCB0byBmaWxlIG5hbWVzIG9ubHkuCiAKIAlteSAkcXVlcnkgPSA8PCIJRU5EIjsKIAkJWyJxdWVyeSIsICIkZ2l0X3dvcmtfdHJlZSIsIHsKIAkJCSJzaW5jZSI6ICR0aW1lLAotCQkJImZpZWxkcyI6IFsibmFtZSJdLAotCQkJImV4cHJlc3Npb24iOiBbIm5vdCIsIFsiYWxsb2YiLCBbInNpbmNlIiwgJHRpbWUsICJjY2xvY2siXSwgWyJub3QiLCAiZXhpc3RzIl1dXQorCQkJImZpZWxkcyI6IFsibmFtZSJdCiAJCX1dCiAJRU5ECiAKZGlmZiAtLWdpdCBhL3RyYWNlLmggYi90cmFjZS5oCmluZGV4IDlmYTNlN2EuLjk4MjY2MTggMTAwNjQ0Ci0tLSBhL3RyYWNlLmgKKysrIGIvdHJhY2UuaApAQCAtNCw2ICs0LDgyIEBACiAjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCiAKKy8qKgorICogVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQorICogY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50CisgKiB2YXJpYWJsZXMuCisgKgorICogVGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIGF1dG9tYXRpY2FsbHkgYWRkcyBgdGltZXN0YW1wIGZpbGU6bGluZSAuLi4gXG5gIHRvCisgKiBhbGwgdHJhY2UgbWVzc2FnZXMuIEUuZy46CisgKgorICogLS0tLS0tLS0tLS0tCisgKiAyMzo1OTo1OS4xMjM0NTYgZ2l0LmM6MzEyICAgICAgICAgICAgICAgdHJhY2U6IGJ1aWx0LWluOiBnaXQgJ2ZvbycKKyAqIDAwOjAwOjAwLjAwMDAwMSBidWlsdGluL2Zvby5jOjk5ICAgICAgICBmb286IHNvbWUgbWVzc2FnZQorICogLS0tLS0tLS0tLS0tCisgKgorICogQnVncyAmIENhdmVhdHMKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogR0lUX1RSQUNFXyogZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIHRvIHRlbGwgR2l0IHRvIHNob3cKKyAqIHRyYWNlIG91dHB1dCB0byBpdHMgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLiBHaXQgY2FuIG9mdGVuIHNwYXduIGEgcGFnZXIKKyAqIGludGVybmFsbHkgdG8gcnVuIGl0cyBzdWJjb21tYW5kIGFuZCBzZW5kIGl0cyBzdGFuZGFyZCBvdXRwdXQgYW5kCisgKiBzdGFuZGFyZCBlcnJvciB0byBpdC4KKyAqCisgKiBCZWNhdXNlIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSB0cmFjZSBpcyBnZW5lcmF0ZWQgb25seSBhdCB0aGUgdmVyeSBlbmQKKyAqIG9mIHRoZSBwcm9ncmFtIHdpdGggYXRleGl0KCksIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgdGhlIHBhZ2VyIGV4aXRzLCBpdAorICogd291bGQgbm90IHdvcmsgd2VsbCBpZiB5b3Ugc2VuZCBpdHMgbG9nIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQKKyAqIGFuZCBsZXQgR2l0IHNwYXduIHRoZSBwYWdlciBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqIEFzIGEgd29yayBhcm91bmQsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlICctLW5vLXBhZ2VyJywgb3Igc2V0CisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgdG8gYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgcmVkaXJlY3RlZAorICogdG8gc3RkZXJyLCBvciBzZXQgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRvIGEgZmlsZSBzcGVjaWZpZWQgYnkgaXRzCisgKiBhYnNvbHV0ZSBwYXRoLgorICoKKyAqIEZvciBleGFtcGxlIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdoaWNoIGJ5IGRlZmF1bHQgbWF5IG5vdAorICogcHJpbnQgYW55IHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPTIgZ2l0IGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogeW91IG1heSB3YW50IHRvIHVzZToKKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIEdJVF9UUkFDRV9QRVJGT1JNQU5DRT0yIGdpdCAtLW5vLXBhZ2VyIGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogb3I6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MyAzPiYyIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIG9yOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPS9wYXRoL3RvL2xvZy9maWxlIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKioKKyAqIERlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKKyAqIGRvbid0IHRha2UgYSBrZXkpIGlzIGBHSVRfVFJBQ0VgLgorICoKKyAqIEUuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZm9vID0gVFJBQ0VfS0VZX0lOSVQoRk9PKTsKKyAqCisgKiBzdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKKyAqIHsKKyAqIAl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mb28sICIlcyIsIG1lc3NhZ2UpOworICogfQorICogLS0tLS0tLS0tLS0tCisgKgorICogTm90ZTogZG9uJ3QgdXNlIGBjb25zdGAgYXMgdGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIHN0b3JlcyBpbnRlcm5hbCBzdGF0ZSBpbgorICogdGhlIGB0cmFjZV9rZXlgIHN0cnVjdHVyZS4KKyAqLwogc3RydWN0IHRyYWNlX2tleSB7CiAJY29uc3QgY2hhciAqIGNvbnN0IGtleTsKIAlpbnQgZmQ7CkBAIC0xOCwzMSArOTQsODQgQEAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3NldHVwX2tleTsKIAogdm9pZCB0cmFjZV9yZXBvX3NldHVwKGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKy8qKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYWNlIGtleSBpcyBlbmFibGVkLiBVc2VkIHRvIHByZXZlbnQgZXhwZW5zaXZlCisgKiBzdHJpbmcgZm9ybWF0dGluZyBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIHByaW50aW5nIEFQSXMuCisgKi8KIGludCB0cmFjZV93YW50KHN0cnVjdCB0cmFjZV9rZXkgKmtleSk7CisKKy8qKgorICogRGlzYWJsZXMgdHJhY2luZyBmb3IgdGhlIHNwZWNpZmllZCBrZXksIGV2ZW4gaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiB3YXMgc2V0LgorICovCiB2b2lkIHRyYWNlX2Rpc2FibGUoc3RydWN0IHRyYWNlX2tleSAqa2V5KTsKKworLyoqCisgKiBSZXR1cm5zIG5hbm9zZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoMDEvMDEvMTk3MCksIHR5cGljYWxseSB1c2VkCisgKiBmb3IgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzLgorICogQ3VycmVudGx5IHRoZXJlIGFyZSBoaWdoIHByZWNpc2lvbiB0aW1lciBpbXBsZW1lbnRhdGlvbnMgZm9yIExpbnV4ICh1c2luZworICogYGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDKWApIGFuZCBXaW5kb3dzIChgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXJgKS4KKyAqIE90aGVyIHBsYXRmb3JtcyB1c2UgYGdldHRpbWVvZmRheWAgYXMgdGltZSBzb3VyY2UuCisgKi8KIHVpbnQ2NF90IGdldG5hbm90aW1lKHZvaWQpOworCiB2b2lkIHRyYWNlX2NvbW1hbmRfcGVyZm9ybWFuY2UoY29uc3QgY2hhciAqKmFyZ3YpOwogdm9pZCB0cmFjZV92ZXJiYXRpbShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKTsKIHVpbnQ2NF90IHRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKHZvaWQpOwogCiAjaWZuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCiAKKy8qKgorICogUHJpbnRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UsIHNpbWlsYXIgdG8gcHJpbnRmLgorICovCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQogdm9pZCB0cmFjZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQogdm9pZCB0cmFjZV9wcmludGZfa2V5KHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCisvKioKKyAqIFByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBmb2xsb3dlZCBieSBhIHF1b3RlZCBsaXN0IG9mIGFyZ3VtZW50cy4KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfYXJndl9wcmludGYoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAorLyoqCisgKiBQcmludHMgdGhlIHN0cmJ1Ziwgd2l0aG91dCBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgKGkuZS4gZG9lc24ndAorICogY2hva2Ugb24gYCVgIG9yIGV2ZW4gYFwwYCkuCisgKi8KIHZvaWQgdHJhY2Vfc3RyYnVmKHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSk7CiAKLS8qIFByaW50cyBlbGFwc2VkIHRpbWUgKGluIG5hbm9zZWNvbmRzKSBpZiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgaXMgZW5hYmxlZC4gKi8KKy8qKgorICogUHJpbnRzIGVsYXBzZWQgdGltZSAoaW4gbmFub3NlY29uZHMpIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLgorICoKKyAqIEV4YW1wbGU6CisgKiAtLS0tLS0tLS0tLS0KKyAqIHVpbnQ2NF90IHQgPSAwOworICogZm9yICg7OykgeworICogCS8vIGlnbm9yZQorICogdCAtPSBnZXRuYW5vdGltZSgpOworICogLy8gY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUKKyAqIHQgKz0gZ2V0bmFub3RpbWUoKTsKKyAqIC8vIGlnbm9yZQorICogfQorICogdHJhY2VfcGVyZm9ybWFuY2UodCwgImZyb3R6Iik7CisgKiAtLS0tLS0tLS0tLS0KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAotLyogUHJpbnRzIGVsYXBzZWQgdGltZSBzaW5jZSAnc3RhcnQnIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLiAqLworLyoqCisgKiBQcmludHMgZWxhcHNlZCB0aW1lIHNpbmNlICdzdGFydCcgaWYgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIGlzIGVuYWJsZWQuCisgKgorICogRXhhbXBsZToKKyAqIC0tLS0tLS0tLS0tLQorICogdWludDY0X3Qgc3RhcnQgPSBnZXRuYW5vdGltZSgpOworICogLy8gY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUKKyAqIHRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHN0YXJ0LCAiZm9vYmFyIik7CisgKiAtLS0tLS0tLS0tLS0KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2Vfc2luY2UodWludDY0X3Qgc3RhcnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIApkaWZmIC0tZ2l0IGEvdHJhY2UyLmggYi90cmFjZTIuaAppbmRleCAwNTBiZjNjLi5lNWU4MWMwIDEwMDY0NAotLS0gYS90cmFjZTIuaAorKysgYi90cmFjZTIuaApAQCAtMSw2ICsxLDQwIEBACiAjaWZuZGVmIFRSQUNFMl9ICiAjZGVmaW5lIFRSQUNFMl9ICiAKKy8qKgorICogVGhlIFRyYWNlMiBBUEkgY2FuIGJlIHVzZWQgdG8gcHJpbnQgZGVidWcsIHBlcmZvcm1hbmNlLCBhbmQgdGVsZW1ldHJ5CisgKiBpbmZvcm1hdGlvbiB0byBzdGRlcnIgb3IgYSBmaWxlLiAgVGhlIFRyYWNlMiBmZWF0dXJlIGlzIGluYWN0aXZlIHVubGVzcworICogZXhwbGljaXRseSBlbmFibGVkIGJ5IGVuYWJsaW5nIG9uZSBvciBtb3JlIFRyYWNlMiBUYXJnZXRzLgorICoKKyAqIFRoZSBUcmFjZTIgQVBJIGlzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIChUcmFjZTEpCisgKiBwcmludGYtc3R5bGUgdHJhY2luZyBwcm92aWRlZCBieSB0aGUgZXhpc3RpbmcgYEdJVF9UUkFDRWAgYW5kCisgKiBgR0lUX1RSQUNFX1BFUkZPUk1BTkNFYCBmYWNpbGl0aWVzLiAgRHVyaW5nIGluaXRpYWwgaW1wbGVtZW50YXRpb24sCisgKiBUcmFjZTIgYW5kIFRyYWNlMSBtYXkgb3BlcmF0ZSBpbiBwYXJhbGxlbC4KKyAqCisgKiBUaGUgVHJhY2UyIEFQSSBkZWZpbmVzIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgbWVzc2FnZXMgd2l0aCBrbm93biBmaWVsZHMsCisgKiBzdWNoIGFzIChgc3RhcnRgOiBgYXJndmApIGFuZCAoYGV4aXRgOiB7YGV4aXQtY29kZWAsIGBlbGFwc2VkLXRpbWVgfSkuCisgKgorICogVHJhY2UyIGluc3RydW1lbnRhdGlvbiB0aHJvdWdob3V0IHRoZSBHaXQgY29kZSBiYXNlIHNlbmRzIFRyYWNlMgorICogbWVzc2FnZXMgdG8gdGhlIGVuYWJsZWQgVHJhY2UyIFRhcmdldHMuICBUYXJnZXRzIHRyYW5zZm9ybSB0aGVzZQorICogbWVzc2FnZXMgY29udGVudCBpbnRvIHB1cnBvc2Utc3BlY2lmaWMgZm9ybWF0cyBhbmQgd3JpdGUgZXZlbnRzIHRvCisgKiB0aGVpciBkYXRhIHN0cmVhbXMuICBJbiB0aGlzIG1hbm5lciwgdGhlIFRyYWNlMiBBUEkgY2FuIGRyaXZlCisgKiBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBhbmFseXNpcy4KKyAqCisgKiBUYXJnZXRzIGFyZSBkZWZpbmVkIHVzaW5nIGEgVlRhYmxlIGFsbG93aW5nIGVhc3kgZXh0ZW5zaW9uIHRvIG90aGVyCisgKiBmb3JtYXRzIGluIHRoZSBmdXR1cmUuICBUaGlzIG1pZ2h0IGJlIHVzZWQgdG8gZGVmaW5lIGEgYmluYXJ5IGZvcm1hdCwKKyAqIGZvciBleGFtcGxlLgorICoKKyAqIFRyYWNlMiBpcyBjb250cm9sbGVkIHVzaW5nIGB0cmFjZTIuKmAgY29uZmlnIHZhbHVlcyBpbiB0aGUgc3lzdGVtIGFuZAorICogZ2xvYmFsIGNvbmZpZyBmaWxlcyBhbmQgYEdJVF9UUkFDRTIqYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUcmFjZTIgZG9lcworICogbm90IHJlYWQgZnJvbSByZXBvIGxvY2FsIG9yIHdvcmt0cmVlIGNvbmZpZyBmaWxlcyBvciByZXNwZWN0IGAtY2AKKyAqIGNvbW1hbmQgbGluZSBjb25maWcgc2V0dGluZ3MuCisgKgorICogRm9yIG1vcmUgaW5mbyBhYm91dDogdHJhY2UyIHRhcmdldHMsIGNvbnZlbnRpb25zIGZvciBwdWJsaWMgZnVuY3Rpb25zIGFuZAorICogbWFjcm9zLCB0cmFjZTIgdGFyZ2V0IGZvcm1hdHMgYW5kIGV4YW1wbGVzIG9uIHRyYWNlMiBBUEkgdXNhZ2UgcmVmZXIgdG8KKyAqIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CisgKgorICovCisKIHN0cnVjdCBjaGlsZF9wcm9jZXNzOwogc3RydWN0IHJlcG9zaXRvcnk7CiBzdHJ1Y3QganNvbl93cml0ZXI7CkBAIC0zOSw3ICs3MywxMiBAQAogLyoKICAqIEluaXRpYWxpemUgVFJBQ0UyIHRyYWNpbmcgZmFjaWxpdHkgaWYgYW55IG9mIHRoZSBidWlsdGluIFRSQUNFMgogICogdGFyZ2V0cyBhcmUgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZyBvciB0aGUgZW52aXJvbm1lbnQuCi0gKiBFbWl0cyBhICd2ZXJzaW9uJyBldmVudC4KKyAqIFRoaXMgaW5jbHVkZXMgc2V0dGluZyB1cCB0aGUgVHJhY2UyIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpLgorICogRW1pdHMgYSAndmVyc2lvbicgbWVzc2FnZSBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIGdpdAorICogYW5kIHRoZSBUcmFjZTIgcHJvdG9jb2wuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gYG1haW4oKWAgYXMgZWFybHkgYXMgcG9zc2libGUgaW4KKyAqIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzIGFmdGVyIGVzc2VudGlhbCBwcm9jZXNzIGluaXRpYWxpemF0aW9uLgogICoKICAqIENsZWFudXAvVGVybWluYXRpb24gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGEgcmVnaXN0ZXJlZAogICogYXRleGl0KCkgcm91dGluZS4KQEAgLTQ5LDcgKzg4LDcgQEAKICNkZWZpbmUgdHJhY2UyX2luaXRpYWxpemUoKSB0cmFjZTJfaW5pdGlhbGl6ZV9mbChfX0ZJTEVfXywgX19MSU5FX18pCiAKIC8qCi0gKiBSZXR1cm4gdHJ1ZSBpZiB0cmFjZTIgaXMgZW5hYmxlZC4KKyAqIFJldHVybiAxIGlmIHRyYWNlMiBpcyBlbmFibGVkIChhdCBsZWFzdCBvbmUgdGFyZ2V0IGlzIGFjdGl2ZSkuCiAgKi8KIGludCB0cmFjZTJfaXNfZW5hYmxlZCh2b2lkKTsKIApAQCAtMTE0LDcgKzE1Myw4IEBACiAjZGVmaW5lIHRyYWNlMl9jbWRfbW9kZShzdikgdHJhY2UyX2NtZF9tb2RlX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKHN2KSkKIAogLyoKLSAqIEVtaXQgYW4gJ2FsaWFzJyBleHBhbnNpb24gZXZlbnQuCisgKiBFbWl0cyBhbiAiYWxpYXMiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgYWxpYXMgdXNlZCBhbmQgdGhlIGFyZ3VtZW50CisgKiBleHBhbnNpb24uCiAgKi8KIHZvaWQgdHJhY2UyX2NtZF9hbGlhc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqYWxpYXMsCiAJCQkgY29uc3QgY2hhciAqKmFyZ3YpOwpAQCAtMTIzLDcgKzE2Myw3IEBACiAJdHJhY2UyX2NtZF9hbGlhc19mbChfX0ZJTEVfXywgX19MSU5FX18sIChhbGlhcyksIChhcmd2KSkKIAogLyoKLSAqIEVtaXQgb25lIG9yIG1vcmUgJ2RlZl9wYXJhbScgZXZlbnRzIGZvciAiaW50ZXJlc3RpbmciIGNvbmZpZ3VyYXRpb24KKyAqIEVtaXQgb25lIG9yIG1vcmUgJ2RlZl9wYXJhbScgZXZlbnRzIGZvciAiaW1wb3J0YW50IiBjb25maWd1cmF0aW9uCiAgKiBzZXR0aW5ncy4KICAqCiAgKiBVc2UgdGhlIFRSMl9TWVNFTlZfQ0ZHX1BBUkFNIHNldHRpbmcgdG8gcmVnaXN0ZXIgYSBjb21tYS1zZXBhcmF0ZWQKQEAgLTE0NCw3ICsxODQsNyBAQAogCiAvKgogICogRW1pdCBhICJkZWZfcGFyYW0iIGV2ZW50IGZvciB0aGUgZ2l2ZW4gY29uZmlnIGtleS92YWx1ZSBwYWlyIElGCi0gKiB3ZSBjb25zaWRlciB0aGUga2V5IHRvIGJlICJpbnRlcmVzdGluZyIuCisgKiB3ZSBjb25zaWRlciB0aGUga2V5IHRvIGJlICJpbXBvcnRhbnQiLgogICoKICAqIFVzZSB0aGlzIGZvciBuZXcvdXBkYXRlZCBjb25maWcgc2V0dGluZ3MgY3JlYXRlZC91cGRhdGVkIGFmdGVyCiAgKiB0cmFjZTJfY21kX2xpc3RfY29uZmlnKCkgaXMgY2FsbGVkLgpAQCAtMTU1LDIwICsxOTUsMzQgQEAKICNkZWZpbmUgdHJhY2UyX2NtZF9zZXRfY29uZmlnKGssIHYpIFwKIAl0cmFjZTJfY21kX3NldF9jb25maWdfZmwoX19GSUxFX18sIF9fTElORV9fLCAoayksICh2KSkKIAotLyoKLSAqIEVtaXQgYSAnY2hpbGRfc3RhcnQnIGV2ZW50IHByaW9yIHRvIHNwYXduaW5nIGEgY2hpbGQgcHJvY2Vzcy4KKy8qKgorICogRW1pdHMgYSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgImNoaWxkLWlkIiwKKyAqICJjaGlsZC1hcmd2IiwgYW5kICJjaGlsZC1jbGFzc2lmaWNhdGlvbiIuCiAgKgogICogQmVmb3JlIGNhbGxpbmcgb3B0aW9uYWxseSBzZXQgImNtZC0+dHJhY2UyX2NoaWxkX2NsYXNzIiB0byBhIHN0cmluZwogICogZGVzY3JpYmluZyB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4gIEZvciBleGFtcGxlLCAiZWRpdG9yIiBvcgogICogInBhZ2VyIi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSB1bmlxdWUgImNoaWxkLWlkIiB0byBgY21kLT50cmFjZTJfY2hpbGRfaWRgLgorICogVGhpcyBmaWVsZCBpcyB1c2VkIGxhdGVyIGR1cmluZyB0aGUgImNoaWxkX2V4aXQiIG1lc3NhZ2UgdG8gYXNzb2NpYXRlCisgKiBpdCB3aXRoIHRoZSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBzcGF3bmluZyB0aGUgY2hpbGQgcHJvY2Vzcy4KICAqLwogdm9pZCB0cmFjZTJfY2hpbGRfc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAJCQkgICBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKTsKIAogI2RlZmluZSB0cmFjZTJfY2hpbGRfc3RhcnQoY21kKSB0cmFjZTJfY2hpbGRfc3RhcnRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY21kKSkKIAotLyoKLSAqIEVtaXQgYSAnY2hpbGRfZXhpdCcgZXZlbnQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGVzLgorLyoqCisgKiBFbWl0cyBhICJjaGlsZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlICJjaGlsZC1pZCIsCisgKiB0aGUgY2hpbGQncyBlbGFwc2VkIHRpbWUgYW5kIGV4aXQtY29kZS4KKyAqCisgKiBUaGUgcmVwb3J0ZWQgZWxhcHNlZCB0aW1lIGluY2x1ZGVzIHRoZSBwcm9jZXNzIGNyZWF0aW9uIG92ZXJoZWFkIGFuZAorICogdGltZSBzcGVuZCB3YWl0aW5nIGZvciBpdCB0byBleGl0LCBzbyBpdCBtYXkgYmUgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4KKyAqIHRoZSB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBjaGlsZCBpdHNlbGYuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHJlYXBpbmcgdGhlIGNoaWxkIHByb2Nlc3MuCiAgKi8KIHZvaWQgdHJhY2UyX2NoaWxkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCiAJCQkgIGludCBjaGlsZF9leGl0X2NvZGUpOwpAQCAtMTc2LDIxICsyMzAsMjIgQEAKICNkZWZpbmUgdHJhY2UyX2NoaWxkX2V4aXQoY21kLCBjb2RlKSBcCiAJdHJhY2UyX2NoaWxkX2V4aXRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY21kKSwgKGNvZGUpKQogCi0vKgorLyoqCiAgKiBFbWl0IGFuICdleGVjJyBldmVudCBwcmlvciB0byBjYWxsaW5nIG9uZSBvZiBleGVjKCksIGV4ZWN2KCksCiAgKiBleGVjdnAoKSwgYW5kIGV0Yy4gIE9uIFVuaXgtZGVyaXZlZCBzeXN0ZW1zLCB0aGlzIHdpbGwgYmUgdGhlCiAgKiBsYXN0IGV2ZW50IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHVubGVzcyB0aGUgZXhlYwogICogZmFpbHMuICBPbiBXaW5kb3dzLCBleGVjKCkgYmVoYXZlcyBsaWtlICdjaGlsZF9zdGFydCcgYW5kIGEKICAqIHdhaXRwaWQoKSwgc28gYWRkaXRpb25hbCBldmVudHMgbWF5IGJlIGVtaXR0ZWQuCiAgKgotICogUmV0dXJucyB0aGUgImV4ZWNfaWQiLgorICogUmV0dXJucyBhIHVuaXF1ZSAiZXhlYy1pZCIuICBUaGlzIHZhbHVlIGlzIHVzZWQgbGF0ZXIKKyAqIGlmIHRoZSBleGVjKCkgZmFpbHMgYW5kIGEgImV4ZWMtcmVzdWx0IiBtZXNzYWdlIGlzIG5lY2Vzc2FyeS4KICAqLwogaW50IHRyYWNlMl9leGVjX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpleGUsCiAJCSAgIGNvbnN0IGNoYXIgKiphcmd2KTsKIAogI2RlZmluZSB0cmFjZTJfZXhlYyhleGUsIGFyZ3YpIHRyYWNlMl9leGVjX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGV4ZSksIChhcmd2KSkKIAotLyoKKy8qKgogICogRW1pdCBhbiAnZXhlY19yZXN1bHQnIHdoZW4gcG9zc2libGUuICBPbiBVbml4LWRlcml2ZWQgc3lzdGVtcywKICAqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBleGVjKCkgcmV0dXJucyAod2hpY2ggb25seSBoYXBwZW5zCiAgKiB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIHN0YXJ0aW5nIHRoZSBuZXcgcHJvY2VzcykuICBPbiBXaW5kb3dzLApAQCAtMjI2LDExICsyODEsMTIgQEAKICNkZWZpbmUgdHJhY2UyX3RocmVhZF9leGl0KCkgdHJhY2UyX3RocmVhZF9leGl0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXykKIAogLyoKLSAqIEVtaXQgYSAncGFyYW0nIGV2ZW50LgorICogRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlIGNvbnRhaW5pbmcgYSBrZXkvdmFsdWUgcGFpci4KICAqCi0gKiBXcml0ZSBhICI8cGFyYW0+ID0gPHZhbHVlPiIgcGFpciBkZXNjcmliaW5nIHNvbWUgYXNwZWN0IG9mIHRoZQotICogcnVuIHN1Y2ggYXMgYW4gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvciBjb21tYW5kIGxpbmUKLSAqIG9wdGlvbiB0aGF0IHNpZ25pZmljYW50bHkgY2hhbmdlcyBjb21tYW5kIGJlaGF2aW9yLgorICogVGhpcyBtZXNzYWdlIGlzIGludGVuZGVkIHRvIHJlcG9ydCBzb21lIGdsb2JhbCBhc3BlY3Qgb2YgdGhlIGN1cnJlbnQKKyAqIGNvbW1hbmQsIHN1Y2ggYXMgYSBjb25maWd1cmF0aW9uIHNldHRpbmcgb3IgY29tbWFuZCBsaW5lIHN3aXRjaCB0aGF0CisgKiBzaWduaWZpY2FudGx5IGFmZmVjdHMgcHJvZ3JhbSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvciwgc3VjaCBhcworICogYGNvcmUuYWJicmV2YCwgYHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXNgLCBvciBgLS1uby1haGVhZC1iZWhpbmRgLgogICovCiB2b2lkIHRyYWNlMl9kZWZfcGFyYW1fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhcmFtLAogCQkJIGNvbnN0IGNoYXIgKnZhbHVlKTsKQEAgLTI0MywxOCArMjk5LDM1IEBACiAgKiBhIHRyYWNlMi1yZXBvLWlkIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBhY3Rpdml0eSBldmVudHMuCiAgKgogICogRW1pdHMgYSAnd29ya3RyZWUnIGV2ZW50IGZvciB0aGlzIHJlcG8gaW5zdGFuY2UuCisgKgorICogUmVnaW9uIGFuZCBkYXRhIG1lc3NhZ2VzIG1heSByZWZlciB0byB0aGlzIHJlcG8taWQuCisgKgorICogVGhlIG1haW4vdG9wLWxldmVsIHJlcG9zaXRvcnkgd2lsbCBoYXZlIHJlcG8taWQgdmFsdWUgMSAoYWthICJyMSIpLgorICoKKyAqIFRoZSByZXBvLWlkIGZpZWxkIGlzIGluIGFudGljaXBhdGlvbiBvZiBmdXR1cmUgaW4tcHJvYyBzdWJtb2R1bGUKKyAqIHJlcG9zaXRvcmllcy4KICAqLwogdm9pZCB0cmFjZTJfZGVmX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKTsKIAogI2RlZmluZSB0cmFjZTJfZGVmX3JlcG8ocmVwbykgdHJhY2UyX2RlZl9yZXBvX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgcmVwbykKIAotLyoKKy8qKgogICogRW1pdCBhICdyZWdpb25fZW50ZXInIGV2ZW50IGZvciA8Y2F0ZWdvcnk+LjxsYWJlbD4gd2l0aCBvcHRpb25hbAogICogcmVwby1pZCBhbmQgcHJpbnRmIG1lc3NhZ2UuCiAgKgotICogRW50ZXIgYSBuZXcgbmVzdGluZyBsZXZlbCBvbiB0aGUgY3VycmVudCB0aHJlYWQgYW5kIHJlbWVtYmVyIHRoZQotICogY3VycmVudCB0aW1lLiAgVGhpcyBjb250cm9scyB0aGUgaW5kZW50aW5nIG9mIGFsbCBzdWJzZXF1ZW50IGV2ZW50cwotICogb24gdGhpcyB0aHJlYWQuCisgKiBUaGlzIGZ1bmN0aW9uIHB1c2hlcyBhIG5ldyByZWdpb24gbmVzdGluZyBzdGFjayBsZXZlbCBvbiB0aGUgY3VycmVudAorICogdGhyZWFkIGFuZCBzdGFydHMgYSBjbG9jayBmb3IgdGhlIG5ldyBzdGFjayBmcmFtZS4KKyAqCisgKiBUaGUgYGNhdGVnb3J5YCBmaWVsZCBpcyBhbiBhcmJpdHJhcnkgY2F0ZWdvcnkgbmFtZSB1c2VkIHRvIGNsYXNzaWZ5CisgKiByZWdpb25zIGJ5IGZlYXR1cmUgYXJlYSwgc3VjaCBhcyAic3RhdHVzIiBvciAiaW5kZXgiLiAgQXQgdGhpcyB0aW1lCisgKiBpdCBpcyBvbmx5IGp1c3QgcHJpbnRlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLiAgSXQgbWF5CisgKiBiZSB1c2VkIGluIHRoZSBmdXR1cmUgdG8gZmlsdGVyIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBgbGFiZWxgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBsYWJlbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpdml0eQorICogYmVpbmcgc3RhcnRlZCwgc3VjaCBhcyAicmVhZF9yZWN1cnNpdmUiIG9yICJkb19yZWFkX2luZGV4Ii4KKyAqCisgKiBUaGUgYHJlcG9gIGZpZWxkLCBpZiBzZXQsIHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlICJyZXBvLWlkIiwgc28gdGhhdAorICogcmVjdXJzaXZlIG9lcmF0aW9ucyBjYW4gYmUgYXR0cmlidXRlZCB0byB0aGUgY29ycmVjdCByZXBvc2l0b3J5LgogICovCiB2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAogCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKQEAgLTI4OSwxMiArMzYyLDE3IEBACiAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICNlbmRpZgogCi0vKgorLyoqCiAgKiBFbWl0IGEgJ3JlZ2lvbl9sZWF2ZScgZXZlbnQgZm9yIDxjYXRlZ29yeT4uPGxhYmVsPiB3aXRoIG9wdGlvbmFsCiAgKiByZXBvLWlkIGFuZCBwcmludGYgbWVzc2FnZS4KICAqCiAgKiBMZWF2ZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgYW5kIHJlcG9ydCB0aGUgZWxhcHNlZCB0aW1lIHNwZW50CiAgKiBpbiB0aGlzIG5lc3RpbmcgbGV2ZWwuCisgKgorICogVGhlIGBjYXRlZ29yeWAsIGBsYWJlbGAsIGFuZCBgcmVwb2AgZmllbGRzIGFyZSB0aGUgc2FtZSBhcworICogdHJhY2UyX3JlZ2lvbl9lbnRlcl9mbC4gVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90CisgKiBuZWVkIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nICJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsCisgKiBidXQgaXQgbWFrZXMgdGhlIGRhdGEgc3RyZWFtIGVhc2llciB0byB1bmRlcnN0YW5kLgogICovCiB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAogCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKQEAgLTMyOSwxMCArNDA3LDEyIEBACiAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICNlbmRpZgogCi0vKgorLyoqCiAgKiBFbWl0IGEga2V5LXZhbHVlIHBhaXIgJ2RhdGEnIGV2ZW50IG9mIHRoZSBmb3JtIDxjYXRlZ29yeT4uPGtleT4gPSA8dmFsdWU+LgogICogVGhpcyBldmVudCBpbXBsaWNpdGx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRocmVhZCwgbmVzdGluZyByZWdpb24sCiAgKiBhbmQgb3B0aW9uYWwgcmVwby1pZC4KKyAqIFRoaXMgY291bGQgYmUgdXNlZCB0byBwcmludCB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IGR1cmluZworICogYSBtdWx0aS10aHJlYWRlZCByZWN1cnNpdmUgdHJlZSB3YWxrLgogICoKICAqIE9uIGV2ZW50LWJhc2VkIFRSQUNFMiB0YXJnZXRzLCB0aGlzIGdlbmVyYXRlcyBhICdkYXRhJyBldmVudCBzdWl0YWJsZQogICogZm9yIHBvc3QtcHJvY2Vzc2luZy4gIE9uIHByaW50Zi1iYXNlZCBUUkFDRTIgdGFyZ2V0cywgdGhpcyBpcyBjb252ZXJ0ZWQKZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfc2lkLmMgYi90cmFjZTIvdHIyX3NpZC5jCmluZGV4IDY5NDhmZDQuLmRjNmU3NWUgMTAwNjQ0Ci0tLSBhL3RyYWNlMi90cjJfc2lkLmMKKysrIGIvdHJhY2UyL3RyMl9zaWQuYwpAQCAtMTksNyArMTksNyBAQAogICogICAgIkg8Zmlyc3RfOF9jaGFyc19vZl9zaGExX29mX2hvc3RuYW1lPiIKICAqICAgICJMb2NhbGhvc3QiIHdoZW4gbm8gaG9zdG5hbWUuCiAgKgotICogd2hlcmUgPHByb2Nlc3M+IGlzIGEgOSBjaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxlYXN0IHNpZ25pZmNhbnQKKyAqIHdoZXJlIDxwcm9jZXNzPiBpcyBhIDkgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBsZWFzdCBzaWduaWZpY2FudAogICogMzIgYml0cyBpbiB0aGUgcHJvY2Vzcy1pZC4KICAqICAgICJQPHBpZD4iCiAgKiAoVGhpcyBpcyBhbiBhYnJpYnJhcnkgY2hvaWNlLiAgT24gbW9zdCBzeXN0ZW1zIHBpZF90IGlzIGEgMzIgYml0IHZhbHVlLApkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90Z3RfcGVyZi5jIGIvdHJhY2UyL3RyMl90Z3RfcGVyZi5jCmluZGV4IGZmYWM4MDIuLmE4MDE4ZjEgMTAwNjQ0Ci0tLSBhL3RyYWNlMi90cjJfdGd0X3BlcmYuYworKysgYi90cmFjZTIvdHIyX3RndF9wZXJmLmMKQEAgLTI2LDEyICsyNiw5IEBACiAjZGVmaW5lIFRSMkZNVF9QRVJGX1JFUE9fV0lEVEggKDMpCiAjZGVmaW5lIFRSMkZNVF9QRVJGX0NBVEVHT1JZX1dJRFRIICgxMikKIAotI2RlZmluZSBUUjJfRE9UU19CVUZGRVJfU0laRSAoMTAwKQogI2RlZmluZSBUUjJfSU5ERU5UICgyKQogI2RlZmluZSBUUjJfSU5ERU5UX0xFTkdUSChjdHgpICgoKGN0eCktPm5yX29wZW5fcmVnaW9ucyAtIDEpICogVFIyX0lOREVOVCkKIAotc3RhdGljIHN0cnVjdCBzdHJidWYgZG90cyA9IFNUUkJVRl9JTklUOwotCiBzdGF0aWMgaW50IGZuX2luaXQodm9pZCkKIHsKIAlpbnQgd2FudCA9IHRyMl9kc3RfdHJhY2Vfd2FudCgmdHIyZHN0X3BlcmYpOwpAQCAtNDEsOCArMzgsNiBAQAogCWlmICghd2FudCkKIAkJcmV0dXJuIHdhbnQ7CiAKLQlzdHJidWZfYWRkY2hhcnMoJmRvdHMsICcuJywgVFIyX0RPVFNfQlVGRkVSX1NJWkUpOwotCiAJYnJpZWYgPSB0cjJfc3lzZW52X2dldChUUjJfU1lTRU5WX1BFUkZfQlJJRUYpOwogCWlmIChicmllZiAmJiAqYnJpZWYgJiYKIAkgICAgKCh3YW50X2JyaWVmID0gZ2l0X3BhcnNlX21heWJlX2Jvb2woYnJpZWYpKSAhPSAtMSkpCkBAIC01NCw4ICs0OSw2IEBACiBzdGF0aWMgdm9pZCBmbl90ZXJtKHZvaWQpCiB7CiAJdHIyX2RzdF90cmFjZV9kaXNhYmxlKCZ0cjJkc3RfcGVyZik7Ci0KLQlzdHJidWZfcmVsZWFzZSgmZG90cyk7CiB9CiAKIC8qCkBAIC0xMzgsMTQgKzEzMSw4IEBACiAJc3RyYnVmX2FkZGYoYnVmLCAiJS0qLipzIHwgIiwgVFIyRk1UX1BFUkZfQ0FURUdPUllfV0lEVEgsCiAJCSAgICBUUjJGTVRfUEVSRl9DQVRFR09SWV9XSURUSCwgKGNhdGVnb3J5ID8gY2F0ZWdvcnkgOiAiIikpOwogCi0JaWYgKGN0eC0+bnJfb3Blbl9yZWdpb25zID4gMCkgewotCQlpbnQgbGVuX2luZGVudCA9IFRSMl9JTkRFTlRfTEVOR1RIKGN0eCk7Ci0JCXdoaWxlIChsZW5faW5kZW50ID4gZG90cy5sZW4pIHsKLQkJCXN0cmJ1Zl9hZGRidWYoYnVmLCAmZG90cyk7Ci0JCQlsZW5faW5kZW50IC09IGRvdHMubGVuOwotCQl9Ci0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUuKnMiLCBsZW5faW5kZW50LCBkb3RzLmJ1Zik7Ci0JfQorCWlmIChjdHgtPm5yX29wZW5fcmVnaW9ucyA+IDApCisJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcuJywgVFIyX0lOREVOVF9MRU5HVEgoY3R4KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfaW9fd3JpdGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmV2ZW50X25hbWUsCmRpZmYgLS1naXQgYS90cmVlLXdhbGsuYyBiL3RyZWUtd2Fsay5jCmluZGV4IDMxY2VjMmEuLmIzZDE2MjAgMTAwNjQ0Ci0tLSBhL3RyZWUtd2Fsay5jCisrKyBiL3RyZWUtd2Fsay5jCkBAIC0xMTMwLDcgKzExMzAsNyBAQAogCQkgKiBsYXRlciBvbi4KIAkJICogbWF4X2RlcHRoIGlzIGlnbm9yZWQgYnV0IHdlIG1heSBjb25zaWRlciBzdXBwb3J0IGl0CiAJCSAqIGluIGZ1dHVyZSwgc2VlCi0JCSAqIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvN3ZteG81bDJnNC5mc2ZAYWx0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCQkgKiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZteG81bDJnNC5mc2ZAYWx0ZXIuc2lhbWVzZS5keW5kbnMub3JnLwogCQkgKi8KIAkJaWYgKHBzLT5yZWN1cnNpdmUgJiYgU19JU0RJUihlbnRyeS0+bW9kZSkpCiAJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CmRpZmYgLS1naXQgYS90cmVlLXdhbGsuaCBiL3RyZWUtd2Fsay5oCmluZGV4IGFiZTJjYWYuLjgyNjM5NmMgMTAwNjQ0Ci0tLSBhL3RyZWUtd2Fsay5oCisrKyBiL3RyZWUtd2Fsay5oCkBAIC0zLDYgKzMsMTMgQEAKIAogI2luY2x1ZGUgImNhY2hlLmgiCiAKKy8qKgorICogVGhlIHRyZWUgd2Fsa2luZyBBUEkgaXMgdXNlZCB0byB0cmF2ZXJzZSBhbmQgaW5zcGVjdCB0cmVlcy4KKyAqLworCisvKioKKyAqIEFuIGVudHJ5IGluIGEgdHJlZS4gRWFjaCBlbnRyeSBoYXMgYSBzaGExIGlkZW50aWZpZXIsIHBhdGhuYW1lLCBhbmQgbW9kZS4KKyAqLwogc3RydWN0IG5hbWVfZW50cnkgewogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCWNvbnN0IGNoYXIgKnBhdGg7CkBAIC0xMCwxMiArMTcsMjkgQEAKIAl1bnNpZ25lZCBpbnQgbW9kZTsKIH07CiAKKy8qKgorICogQSBzZW1pLW9wYXF1ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB3YWxrLgorICovCiBzdHJ1Y3QgdHJlZV9kZXNjIHsKKwkvKgorCSAqIHBvaW50ZXIgaW50byB0aGUgbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlLiBJdCBhbHdheXMKKwkgKiBwb2ludHMgYXQgdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4KKwkgKi8KIAljb25zdCB2b2lkICpidWZmZXI7CisKKwkvKiBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4gKi8KIAlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCS8qIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGBidWZmZXJgLiAqLwogCXVuc2lnbmVkIGludCBzaXplOwogfTsKIAorLyoqCisgKiBEZWNvZGUgdGhlIGVudHJ5IGN1cnJlbnRseSBiZWluZyB2aXNpdGVkICh0aGUgb25lIHBvaW50ZWQgdG8gYnkKKyAqIGB0cmVlX2Rlc2Mnc2AgYGVudHJ5YCBtZW1iZXIpIGFuZCByZXR1cm4gdGhlIHNoYTEgb2YgdGhlIGVudHJ5LiBUaGUKKyAqIGBwYXRocGAgYW5kIGBtb2RlcGAgYXJndW1lbnRzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3MgcGF0aG5hbWUgYW5kIG1vZGUKKyAqIHJlc3BlY3RpdmVseS4KKyAqLwogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX2VudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqKnBhdGhwLCB1bnNpZ25lZCBzaG9ydCAqbW9kZXApCiB7CiAJKnBhdGhwID0gZGVzYy0+ZW50cnkucGF0aDsKQEAgLTIzLDYgKzQ3LDExIEBACiAJcmV0dXJuICZkZXNjLT5lbnRyeS5vaWQ7CiB9CiAKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSB0cmVlIGVudHJ5J3MgcGF0aG5hbWUuIFRoaXMgdXRpbGl6ZXMgdGhlCisgKiBtZW1vcnkgc3RydWN0dXJlIG9mIGEgdHJlZSBlbnRyeSB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgYQorICogZ2VuZXJpYyBzdHJsZW4oKS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgdHJlZV9lbnRyeV9sZW4oY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm5lKQogewogCXJldHVybiBuZS0+cGF0aGxlbjsKQEAgLTMzLDUyICs2MiwxNDEgQEAKICAqIGNvcnJ1cHQgdHJlZSBlbnRyeSByYXRoZXIgdGhhbiBkeWluZywKICAqLwogCisvKioKKyAqIFdhbGsgdG8gdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gY29uanVuY3Rpb24KKyAqIHdpdGggYHRyZWVfZW50cnlfZXh0cmFjdGAgdG8gaW5zcGVjdCB0aGUgY3VycmVudCBlbnRyeS4KKyAqLwogdm9pZCB1cGRhdGVfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICopOworCiBpbnQgdXBkYXRlX3RyZWVfZW50cnlfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKik7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5LiBUaGUgYnVmZmVyIGFuZAorICogc2l6ZSBwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBidWZmZXIgYW5kIHNpemUKKyAqIG1lbWJlcnMgb2YgYHN0cnVjdCB0cmVlYC4KKyAqLwogdm9pZCBpbml0X3RyZWVfZGVzYyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKIGludCBpbml0X3RyZWVfZGVzY19nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKgotICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgZG9lcyBib3RoIHRyZWVfZW50cnlfZXh0cmFjdCgpIGFuZCB1cGRhdGVfdHJlZV9lbnRyeSgpCi0gKiBhbmQgcmV0dXJucyB0cnVlIGZvciBzdWNjZXNzCisgKiBWaXNpdCB0aGUgbmV4dCBlbnRyeSBpbiBhIHRyZWUuIFJldHVybnMgMSB3aGVuIHRoZXJlIGFyZSBtb3JlIGVudHJpZXMKKyAqIGxlZnQgdG8gdmlzaXQgYW5kIDAgd2hlbiBhbGwgZW50cmllcyBoYXZlIGJlZW4gdmlzaXRlZC4gVGhpcyBpcworICogY29tbW9ubHkgdXNlZCBpbiB0aGUgdGVzdCBvZiBhIHdoaWxlIGxvb3AuCiAgKi8KIGludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKiwgc3RydWN0IG5hbWVfZW50cnkgKik7CisKIGludCB0cmVlX2VudHJ5X2dlbnRseShzdHJ1Y3QgdHJlZV9kZXNjICosIHN0cnVjdCBuYW1lX2VudHJ5ICopOwogCisvKioKKyAqIEluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeSBnaXZlbiB0aGUKKyAqIG9iamVjdCBJRCBvZiBhIHRyZWUuIFJldHVybnMgdGhlIGBidWZmZXJgIG1lbWJlciBpZiB0aGUgbGF0dGVyCisgKiBpcyBhIHZhbGlkIHRyZWUgaWRlbnRpZmllciBhbmQgTlVMTCBvdGhlcndpc2UuCisgKi8KIHZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJICAgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywKIAkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CiAKIHN0cnVjdCB0cmF2ZXJzZV9pbmZvOwogdHlwZWRlZiBpbnQgKCp0cmF2ZXJzZV9jYWxsYmFja190KShpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGRpcm1hc2ssIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYXZlcnNlX2luZm8gKik7CisKKy8qKgorICogVHJhdmVyc2UgYG5gIG51bWJlciBvZiB0cmVlcyBpbiBwYXJhbGxlbC4gVGhlIGBmbmAgY2FsbGJhY2sgbWVtYmVyIG9mCisgKiBgdHJhdmVyc2VfaW5mb2AgaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggdHJlZSBlbnRyeS4KKyAqLwogaW50IHRyYXZlcnNlX3RyZWVzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pOwogCiBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF90cmVlX2VudHJ5X2ZvbGxvd19zeW1saW5rcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0X3BhdGgsIHVuc2lnbmVkIHNob3J0ICptb2RlKTsKIAorLyoqCisgKiBBIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBzdGF0ZSBvZiBhIHRyYXZlcnNhbC4KKyAqLwogc3RydWN0IHRyYXZlcnNlX2luZm8gewogCWNvbnN0IGNoYXIgKnRyYXZlcnNlX3BhdGg7CisKKwkvKgorCSAqIHBvaW50cyB0byB0aGUgdHJhdmVyc2VfaW5mbyB3aGljaCB3YXMgdXNlZCB0byBkZXNjZW5kIGludG8gdGhlCisJICogY3VycmVudCB0cmVlLiBJZiB0aGlzIGlzIHRoZSB0b3AtbGV2ZWwgdHJlZSBgcHJldmAgd2lsbCBwb2ludCB0bworCSAqIGEgZHVtbXkgdHJhdmVyc2VfaW5mby4KKwkgKi8KIAlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqcHJldjsKKworCS8qIGlzIHRoZSBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgdHJlZSAoaWYgdGhlIHRyZWUgaXMgYSBzdWJ0cmVlKS4gKi8KIAljb25zdCBjaGFyICpuYW1lOworCiAJc2l6ZV90IG5hbWVsZW47CiAJdW5zaWduZWQgbW9kZTsKIAorCS8qIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGN1cnJlbnQgdHJlZS4gKi8KIAlzaXplX3QgcGF0aGxlbjsKKwogCXN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWM7CiAKKwkvKiBjYW4gYmUgdXNlZCBieSBjYWxsYmFja3MgdG8gbWFpbnRhaW4gZGlyZWN0b3J5LWZpbGUgY29uZmxpY3RzLiAqLwogCXVuc2lnbmVkIGxvbmcgZGZfY29uZmxpY3RzOworCisJLyogYSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHRyZWUuCisJICoKKwkgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhdmVyc2UgY2FsbGJhY2sgYXJlIGFzIGZvbGxvd3M6CisJICoKKwkgKiAtIGBuYCBjb3VudHMgdGhlIG51bWJlciBvZiB0cmVlcyBiZWluZyB0cmF2ZXJzZWQuCisJICoKKwkgKiAtIGBtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gdGhlIG50aCBlbnRyeS4KKwkgKgorCSAqIC0gYGRpcm1hc2tgIGhhcyBpdHMgbnRoIGJpdCBzZXQgaWYgdGhlIG50aCB0cmVlJ3MgZW50cnkgaXMgYSBkaXJlY3RvcnkuCisJICoKKwkgKiAtIGBlbnRyeWAgaXMgYW4gYXJyYXkgb2Ygc2l6ZSBgbmAgd2hlcmUgdGhlIG50aCBlbnRyeSBpcyBmcm9tIHRoZSBudGggdHJlZS4KKwkgKgorCSAqIC0gYGluZm9gIG1haW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbC4KKwkgKgorCSAqIFJldHVybmluZyBhIG5lZ2F0aXZlIHZhbHVlIHdpbGwgdGVybWluYXRlIHRoZSB0cmF2ZXJzYWwuIE90aGVyd2lzZSB0aGUKKwkgKiByZXR1cm4gdmFsdWUgaXMgdHJlYXRlZCBhcyBhbiB1cGRhdGUgbWFzay4gSWYgdGhlIG50aCBiaXQgaXMgc2V0IHRoZSBudGggdHJlZQorCSAqIHdpbGwgYmUgdXBkYXRlZCBhbmQgaWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBudGggdHJlZSBlbnRyeSB3aWxsIGJlIHRoZQorCSAqIHNhbWUgaW4gdGhlIG5leHQgY2FsbGJhY2sgaW52b2NhdGlvbi4KKwkgKi8KIAl0cmF2ZXJzZV9jYWxsYmFja190IGZuOworCisJLyogY2FuIGJlIGFueXRoaW5nIHRoZSBgZm5gIGNhbGxiYWNrIHdvdWxkIHdhbnQgdG8gdXNlLiAqLwogCXZvaWQgKmRhdGE7CisKKwkvKiB0ZWxscyB3aGV0aGVyIHRvIHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yIG9yIG5vdC4gKi8KIAlpbnQgc2hvd19hbGxfZXJyb3JzOwogfTsKIAorLyoqCisgKiBGaW5kIGFuIGVudHJ5IGluIGEgdHJlZSBnaXZlbiBhIHBhdGhuYW1lIGFuZCB0aGUgc2hhMSBvZiBhIHRyZWUgdG8KKyAqIHNlYXJjaC4gUmV0dXJucyAwIGlmIHRoZSBlbnRyeSBpcyBmb3VuZCBhbmQgLTEgb3RoZXJ3aXNlLiBUaGUgdGhpcmQKKyAqIGFuZCBmb3VydGggcGFyYW1ldGVycyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHNoYTEgYW5kIG1vZGUgcmVzcGVjdGl2ZWx5LgorICovCiBpbnQgZ2V0X3RyZWVfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBvYmplY3RfaWQgKiwgdW5zaWduZWQgc2hvcnQgKik7CisKKy8qKgorICogR2VuZXJhdGUgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgYSB0cmVlIGVudHJ5IGJhc2VkIGZyb20gdGhlIHJvb3Qgb2YgdGhlCisgKiB0cmF2ZXJzYWwuIEZvciBleGFtcGxlLCBpZiB0aGUgdHJhdmVyc2FsIGhhcyByZWN1cnNlZCBpbnRvIGFub3RoZXIKKyAqIHRyZWUgbmFtZWQgImJhciIgdGhlIHBhdGhuYW1lIG9mIGFuIGVudHJ5ICJiYXoiIGluIHRoZSAiYmFyIgorICogdHJlZSB3b3VsZCBiZSAiYmFyL2JheiIuCisgKi8KIGNoYXIgKm1ha2VfdHJhdmVyc2VfcGF0aChjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCiAJCQkgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pOworCisvKioKKyAqIENvbnZlbmllbmNlIHdyYXBwZXIgdG8gYG1ha2VfdHJhdmVyc2VfcGF0aGAgaW50byBhIHN0cmJ1Zi4KKyAqLwogdm9pZCBzdHJidWZfbWFrZV90cmF2ZXJzZV9wYXRoKHN0cnVjdCBzdHJidWYgKm91dCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKIAkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbik7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIGB0cmF2ZXJzZV9pbmZvYCBnaXZlbiB0aGUgcGF0aG5hbWUgb2YgdGhlIHRyZWUgdG8gc3RhcnQKKyAqIHRyYXZlcnNpbmcgZnJvbS4KKyAqLwogdm9pZCBzZXR1cF90cmF2ZXJzZV9pbmZvKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpiYXNlKTsKIAorLyoqCisgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHBhdGhuYW1lIHJldHVybmVkIGJ5IGBtYWtlX3RyYXZlcnNlX3BhdGhgLgorICogVGhpcyB1dGlsaXplcyB0aGUgbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlCisgKiBvdmVyaGVhZCBvZiB1c2luZyBhIGdlbmVyaWMgc3RybGVuKCkuCisgKi8KIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHRyYXZlcnNlX3BhdGhfbGVuKGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAogCQkJCSAgICAgICBzaXplX3QgbmFtZWxlbikKIHsKZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5jIGIvdW5wYWNrLXRyZWVzLmMKaW5kZXggMmRlNjM2OC4uMjM5OWI2OCAxMDA2NDQKLS0tIGEvdW5wYWNrLXRyZWVzLmMKKysrIGIvdW5wYWNrLXRyZWVzLmMKQEAgLTI3NSw5ICsyNzUsOSBAQAogfQogCiAvKgotICogUHJlZm9ybSB0aGUgbG9hZGluZyBvZiB0aGUgcmVwb3NpdG9yeSdzIGdpdG1vZHVsZXMgZmlsZS4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIFBlcmZvcm0gdGhlIGxvYWRpbmcgb2YgdGhlIHJlcG9zaXRvcnkncyBnaXRtb2R1bGVzIGZpbGUuICBUaGlzIGZ1bmN0aW9uIGlzCiAgKiB1c2VkIGJ5ICdjaGVja191cGRhdGUoKScgdG8gcGVyZm9ybSBsb2FkaW5nIG9mIHRoZSBnaXRtb2R1bGVzIGZpbGUgaW4gdHdvCi0gKiBkaWZmZXJudCBzaXR1YXRpb25zOgorICogZGlmZmVyZW50IHNpdHVhdGlvbnM6CiAgKiAoMSkgYmVmb3JlIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGlmIHRoZSBnaXRtb2R1bGVzIGZpbGUgaGFzCiAgKiAgICAgYmVlbiBtYXJrZWQgZm9yIHJlbW92YWwuICBUaGlzIHNpdHVhdGlvbiBpcyBzcGVjaWZpZWQgYnkgJ3N0YXRlJyA9PSBOVUxMLgogICogKDIpIGJlZm9yZSBjaGVja2luZyBvdXQgZW50cmllcyB0byB0aGUgd29ya2luZyB0cmVlIGlmIHRoZSBnaXRtb2R1bGVzIGZpbGUKQEAgLTEyNjksNyArMTI2OSw4IEBACiAJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcHJlZml4LAogCQkJICAgIGludCBzZWxlY3RfbWFzaywgaW50IGNsZWFyX21hc2ssCiAJCQkgICAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCi0JCQkgICAgZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBkZWZhdWx0X21hdGNoKTsKKwkJCSAgICBlbnVtIHBhdHRlcm5fbWF0Y2hfcmVzdWx0IGRlZmF1bHRfbWF0Y2gsCisJCQkgICAgaW50IHByb2dyZXNzX25yKTsKIAogLyogV2hvbGUgZGlyZWN0b3J5IG1hdGNoaW5nICovCiBzdGF0aWMgaW50IGNsZWFyX2NlX2ZsYWdzX2RpcihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKQEAgLTEyNzgsMjAgKzEyNzksMjMgQEAKIAkJCSAgICAgIGNoYXIgKmJhc2VuYW1lLAogCQkJICAgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKIAkJCSAgICAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAotCQkJICAgICAgZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBkZWZhdWx0X21hdGNoKQorCQkJICAgICAgZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBkZWZhdWx0X21hdGNoLAorCQkJICAgICAgaW50IHByb2dyZXNzX25yKQogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlX2VuZDsKIAlpbnQgZHR5cGUgPSBEVF9ESVI7CiAJaW50IHJjOwotCWVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgcmV0OwotCXJldCA9IHBhdGhfbWF0Y2hlc19wYXR0ZXJuX2xpc3QocHJlZml4LT5idWYsIHByZWZpeC0+bGVuLAotCQkJCQliYXNlbmFtZSwgJmR0eXBlLCBwbCwgaXN0YXRlKTsKKwllbnVtIHBhdHRlcm5fbWF0Y2hfcmVzdWx0IHJldCwgb3JpZ19yZXQ7CisJb3JpZ19yZXQgPSBwYXRoX21hdGNoZXNfcGF0dGVybl9saXN0KHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbiwKKwkJCQkJICAgICBiYXNlbmFtZSwgJmR0eXBlLCBwbCwgaXN0YXRlKTsKIAogCXN0cmJ1Zl9hZGRjaChwcmVmaXgsICcvJyk7CiAKIAkvKiBJZiB1bmRlY2lkZWQsIHVzZSBtYXRjaGluZyByZXN1bHQgb2YgcGFyZW50IGRpciBpbiBkZWZ2YWwgKi8KLQlpZiAocmV0ID09IFVOREVDSURFRCkKKwlpZiAob3JpZ19yZXQgPT0gVU5ERUNJREVEKQogCQlyZXQgPSBkZWZhdWx0X21hdGNoOworCWVsc2UKKwkJcmV0ID0gb3JpZ19yZXQ7CiAKIAlmb3IgKGNhY2hlX2VuZCA9IGNhY2hlOyBjYWNoZV9lbmQgIT0gY2FjaGUgKyBucjsgY2FjaGVfZW5kKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjYWNoZV9lbmQ7CkBAIC0xMjk5LDE3ICsxMzAzLDI0IEBACiAJCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIFRPRE86IGNoZWNrIHBsLCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgdGhhdCBtYXkgY29uZmxpY3QKLQkgKiB3aXRoIHJldCAoaW93LCB3ZSBrbm93IGluIGFkdmFuY2UgdGhlIGluY2wvZXhjbAotCSAqIGRlY2lzaW9uIGZvciB0aGUgZW50aXJlIGRpcmVjdG9yeSksIGNsZWFyIGZsYWcgaGVyZSB3aXRob3V0Ci0JICogY2FsbGluZyBjbGVhcl9jZV9mbGFnc18xKCkuIFRoYXQgZnVuY3Rpb24gd2lsbCBjYWxsCi0JICogdGhlIGV4cGVuc2l2ZSBwYXRoX21hdGNoZXNfcGF0dGVybl9saXN0KCkgb24gZXZlcnkgZW50cnkuCi0JICovCi0JcmMgPSBjbGVhcl9jZV9mbGFnc18xKGlzdGF0ZSwgY2FjaGUsIGNhY2hlX2VuZCAtIGNhY2hlLAotCQkJICAgICAgcHJlZml4LAotCQkJICAgICAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssCi0JCQkgICAgICBwbCwgcmV0KTsKKwlpZiAocGwtPnVzZV9jb25lX3BhdHRlcm5zICYmIG9yaWdfcmV0ID09IE1BVENIRURfUkVDVVJTSVZFKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlID0gY2FjaGU7CisJCXJjID0gKGNhY2hlX2VuZCAtIGNhY2hlKSAvIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKik7CisKKwkJd2hpbGUgKGNlIDwgY2FjaGVfZW5kKSB7CisJCQkoKmNlKS0+Y2VfZmxhZ3MgJj0gfmNsZWFyX21hc2s7CisJCQljZSsrOworCQl9CisJfSBlbHNlIGlmIChwbC0+dXNlX2NvbmVfcGF0dGVybnMgJiYgb3JpZ19yZXQgPT0gTk9UX01BVENIRUQpIHsKKwkJcmMgPSAoY2FjaGVfZW5kIC0gY2FjaGUpIC8gc2l6ZW9mKHN0cnVjdCBjYWNoZV9lbnRyeSAqKTsKKwl9IGVsc2UgeworCQlyYyA9IGNsZWFyX2NlX2ZsYWdzXzEoaXN0YXRlLCBjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJICAgICAgcHJlZml4LAorCQkJCSAgICAgIHNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAorCQkJCSAgICAgIHBsLCByZXQsCisJCQkJICAgICAgcHJvZ3Jlc3NfbnIpOworCX0KKwogCXN0cmJ1Zl9zZXRsZW4ocHJlZml4LCBwcmVmaXgtPmxlbiAtIDEpOwogCXJldHVybiByYzsKIH0KQEAgLTEzMzQsNyArMTM0NSw4IEBACiAJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcHJlZml4LAogCQkJICAgIGludCBzZWxlY3RfbWFzaywgaW50IGNsZWFyX21hc2ssCiAJCQkgICAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCi0JCQkgICAgZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBkZWZhdWx0X21hdGNoKQorCQkJICAgIGVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgZGVmYXVsdF9tYXRjaCwKKwkJCSAgICBpbnQgcHJvZ3Jlc3NfbnIpCiB7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGVfZW5kID0gY2FjaGUgKyBucjsKIApAQCAtMTM0OCw4ICsxMzYwLDExIEBACiAJCWludCBsZW4sIGR0eXBlOwogCQllbnVtIHBhdHRlcm5fbWF0Y2hfcmVzdWx0IHJldDsKIAorCQlkaXNwbGF5X3Byb2dyZXNzKGlzdGF0ZS0+cHJvZ3Jlc3MsIHByb2dyZXNzX25yKTsKKwogCQlpZiAoc2VsZWN0X21hc2sgJiYgIShjZS0+Y2VfZmxhZ3MgJiBzZWxlY3RfbWFzaykpIHsKIAkJCWNhY2hlKys7CisJCQlwcm9ncmVzc19ucisrOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTM3MCwyMCArMTM4NSwyNiBAQAogCQkJCQkJICAgICAgIHByZWZpeCwKIAkJCQkJCSAgICAgICBwcmVmaXgtPmJ1ZiArIHByZWZpeC0+bGVuIC0gbGVuLAogCQkJCQkJICAgICAgIHNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAotCQkJCQkJICAgICAgIHBsLCBkZWZhdWx0X21hdGNoKTsKKwkJCQkJCSAgICAgICBwbCwgZGVmYXVsdF9tYXRjaCwKKwkJCQkJCSAgICAgICBwcm9ncmVzc19ucik7CiAKIAkJCS8qIGNsZWFyX2NfZl9kaXIgZWF0cyBhIHdob2xlIGRpciBhbHJlYWR5PyAqLwogCQkJaWYgKHByb2Nlc3NlZCkgewogCQkJCWNhY2hlICs9IHByb2Nlc3NlZDsKKwkJCQlwcm9ncmVzc19uciArPSBwcm9jZXNzZWQ7CiAJCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIHByZWZpeC0+bGVuIC0gbGVuKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAogCQkJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKLQkJCWNhY2hlICs9IGNsZWFyX2NlX2ZsYWdzXzEoaXN0YXRlLCBjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCi0JCQkJCQkgIHByZWZpeCwKLQkJCQkJCSAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssIHBsLAotCQkJCQkJICBkZWZhdWx0X21hdGNoKTsKKwkJCXByb2Nlc3NlZCA9IGNsZWFyX2NlX2ZsYWdzXzEoaXN0YXRlLCBjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJCQkgICAgIHByZWZpeCwKKwkJCQkJCSAgICAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssIHBsLAorCQkJCQkJICAgICBkZWZhdWx0X21hdGNoLCBwcm9ncmVzc19ucik7CisKKwkJCWNhY2hlICs9IHByb2Nlc3NlZDsKKwkJCXByb2dyZXNzX25yICs9IHByb2Nlc3NlZDsKKwogCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIHByZWZpeC0+bGVuIC0gbGVuIC0gMSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTM5OCwyNCArMTQxOSw0MSBAQAogCQlpZiAocmV0ID09IE1BVENIRUQpCiAJCQljZS0+Y2VfZmxhZ3MgJj0gfmNsZWFyX21hc2s7CiAJCWNhY2hlKys7CisJCXByb2dyZXNzX25yKys7CiAJfQorCisJZGlzcGxheV9wcm9ncmVzcyhpc3RhdGUtPnByb2dyZXNzLCBwcm9ncmVzc19ucik7CiAJcmV0dXJuIG5yIC0gKGNhY2hlX2VuZCAtIGNhY2hlKTsKIH0KIAogc3RhdGljIGludCBjbGVhcl9jZV9mbGFncyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKIAkJCSAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKLQkJCSAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCisJCQkgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJICBpbnQgc2hvd19wcm9ncmVzcykKIHsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwcmVmaXggPSBTVFJCVUZfSU5JVDsKKwljaGFyIGxhYmVsWzEwMF07CisJaW50IHJ2YWw7CiAKIAlzdHJidWZfcmVzZXQoJnByZWZpeCk7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCWlzdGF0ZS0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJVcGRhdGluZyBpbmRleCBmbGFncyIpLAorCQkJCQlpc3RhdGUtPmNhY2hlX25yKTsKIAotCXJldHVybiBjbGVhcl9jZV9mbGFnc18xKGlzdGF0ZSwKKwl4c25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksICJjbGVhcl9jZV9mbGFncygweCUwOGx4LDB4JTA4bHgpIiwKKwkJICAodW5zaWduZWQgbG9uZylzZWxlY3RfbWFzaywgKHVuc2lnbmVkIGxvbmcpY2xlYXJfbWFzayk7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcigidW5wYWNrX3RyZWVzIiwgbGFiZWwsIHRoZV9yZXBvc2l0b3J5KTsKKwlydmFsID0gY2xlYXJfY2VfZmxhZ3NfMShpc3RhdGUsCiAJCQkJaXN0YXRlLT5jYWNoZSwKIAkJCQlpc3RhdGUtPmNhY2hlX25yLAogCQkJCSZwcmVmaXgsCiAJCQkJc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssCi0JCQkJcGwsIDApOworCQkJCXBsLCAwLCAwKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ1bnBhY2tfdHJlZXMiLCBsYWJlbCwgdGhlX3JlcG9zaXRvcnkpOworCisJc3RvcF9wcm9ncmVzcygmaXN0YXRlLT5wcm9ncmVzcyk7CisJcmV0dXJuIHJ2YWw7CiB9CiAKIC8qCkBAIC0xNDIzLDcgKzE0NjEsOCBAQAogICovCiBzdGF0aWMgdm9pZCBtYXJrX25ld19za2lwX3dvcmt0cmVlKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAogCQkJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAotCQkJCSAgIGludCBzZWxlY3RfZmxhZywgaW50IHNraXBfd3RfZmxhZykKKwkJCQkgICBpbnQgc2VsZWN0X2ZsYWcsIGludCBza2lwX3d0X2ZsYWcsCisJCQkJICAgaW50IHNob3dfcHJvZ3Jlc3MpCiB7CiAJaW50IGk7CiAKQEAgLTE0NDcsNyArMTQ4Niw3IEBACiAJICogMi4gV2lkZW4gd29ya3RyZWUgYWNjb3JkaW5nIHRvIHNwYXJzZS1jaGVja291dCBmaWxlLgogCSAqIE1hdGNoZWQgZW50cmllcyB3aWxsIGhhdmUgc2tpcF93dF9mbGFnIGNsZWFyZWQgKGkuZS4gImluIikKIAkgKi8KLQljbGVhcl9jZV9mbGFncyhpc3RhdGUsIHNlbGVjdF9mbGFnLCBza2lwX3d0X2ZsYWcsIHBsKTsKKwljbGVhcl9jZV9mbGFncyhpc3RhdGUsIHNlbGVjdF9mbGFnLCBza2lwX3d0X2ZsYWcsIHBsLCBzaG93X3Byb2dyZXNzKTsKIH0KIAogc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqLApAQCAtMTQ3Miw4ICsxNTExLDkgQEAKIAltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKIAlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0IHx8ICFvLT51cGRhdGUpCiAJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKLQlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KSB7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiAhby0+cGwpIHsKIAkJY2hhciAqc3BhcnNlID0gZ2l0X3BhdGhkdXAoImluZm8vc3BhcnNlLWNoZWNrb3V0Iik7CisJCXBsLnVzZV9jb25lX3BhdHRlcm5zID0gY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKIAkJaWYgKGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2UsICIiLCAwLCAmcGwsIE5VTEwpIDwgMCkKIAkJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKIAkJZWxzZQpAQCAtMTUwNCwxMSArMTU0NCwxNSBAQAogCW8tPm1lcmdlX3NpemUgPSBsZW47CiAJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CiAKKwlpZiAoby0+c3JjX2luZGV4LT5mc21vbml0b3JfbGFzdF91cGRhdGUpCisJCW8tPnJlc3VsdC5mc21vbml0b3JfbGFzdF91cGRhdGUgPSBvLT5zcmNfaW5kZXgtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZTsKKwogCS8qCiAJICogU3BhcnNlIGNoZWNrb3V0IGxvb3AgIzE6IHNldCBORVdfU0tJUF9XT1JLVFJFRSBvbiBleGlzdGluZyBlbnRyaWVzCiAJICovCiAJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCkKLQkJbWFya19uZXdfc2tpcF93b3JrdHJlZShvLT5wbCwgby0+c3JjX2luZGV4LCAwLCBDRV9ORVdfU0tJUF9XT1JLVFJFRSk7CisJCW1hcmtfbmV3X3NraXBfd29ya3RyZWUoby0+cGwsIG8tPnNyY19pbmRleCwgMCwKKwkJCQkgICAgICAgQ0VfTkVXX1NLSVBfV09SS1RSRUUsIG8tPnZlcmJvc2VfdXBkYXRlKTsKIAogCWlmICghZGZjKQogCQlkZmMgPSB4Y2FsbG9jKDEsIGNhY2hlX2VudHJ5X3NpemUoMCkpOwpAQCAtMTU3Myw3ICsxNjE3LDkgQEAKIAkJICogSWYgdGhlIHdpbGwgaGF2ZSBORVdfU0tJUF9XT1JLVFJFRSwgYWxzbyBzZXQgQ0VfU0tJUF9XT1JLVFJFRQogCQkgKiBzbyBhcHBseV9zcGFyc2VfY2hlY2tvdXQoKSB3b24ndCBhdHRlbXB0IHRvIHJlbW92ZSBpdCBmcm9tIHdvcmt0cmVlCiAJCSAqLwotCQltYXJrX25ld19za2lwX3dvcmt0cmVlKG8tPnBsLCAmby0+cmVzdWx0LCBDRV9BRERFRCwgQ0VfU0tJUF9XT1JLVFJFRSB8IENFX05FV19TS0lQX1dPUktUUkVFKTsKKwkJbWFya19uZXdfc2tpcF93b3JrdHJlZShvLT5wbCwgJm8tPnJlc3VsdCwKKwkJCQkgICAgICAgQ0VfQURERUQsIENFX1NLSVBfV09SS1RSRUUgfCBDRV9ORVdfU0tJUF9XT1JLVFJFRSwKKwkJCQkgICAgICAgby0+dmVyYm9zZV91cGRhdGUpOwogCiAJCXJldCA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCBvLT5yZXN1bHQuY2FjaGVfbnI7IGkrKykgewpAQCAtMTY0MSw3ICsxNjg3LDggQEAKIAogZG9uZToKIAl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgidW5wYWNrX3RyZWVzIik7Ci0JY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisJaWYgKCFvLT5rZWVwX3BhdHRlcm5fbGlzdCkKKwkJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CiAJcmV0dXJuIHJldDsKIAogcmV0dXJuX2ZhaWxlZDoKQEAgLTIzODUsNyArMjQzMiw4IEBACiAKIAlpZiAob2xkICYmIHNhbWUob2xkLCBhKSkgewogCQlpbnQgdXBkYXRlID0gMDsKLQkJaWYgKG8tPnJlc2V0ICYmIG8tPnVwZGF0ZSAmJiAhY2VfdXB0b2RhdGUob2xkKSAmJiAhY2Vfc2tpcF93b3JrdHJlZShvbGQpKSB7CisJCWlmIChvLT5yZXNldCAmJiBvLT51cGRhdGUgJiYgIWNlX3VwdG9kYXRlKG9sZCkgJiYgIWNlX3NraXBfd29ya3RyZWUob2xkKSAmJgorCQkJIShvbGQtPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSkgewogCQkJc3RydWN0IHN0YXQgc3Q7CiAJCQlpZiAobHN0YXQob2xkLT5uYW1lLCAmc3QpIHx8CiAJCQkgICAgaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIG9sZCwgJnN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpKQpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmggYi91bnBhY2stdHJlZXMuaAppbmRleCBmMmVlZTBjLi5jYTk0YTQyIDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuaAorKysgYi91bnBhY2stdHJlZXMuaApAQCAtNTksNyArNTksOCBAQAogCQkgICAgIHF1aWV0LAogCQkgICAgIGV4aXRpbmdfZWFybHksCiAJCSAgICAgc2hvd19hbGxfZXJyb3JzLAotCQkgICAgIGRyeV9ydW47CisJCSAgICAgZHJ5X3J1biwKKwkJICAgICBrZWVwX3BhdHRlcm5fbGlzdDsKIAljb25zdCBjaGFyICpwcmVmaXg7CiAJaW50IGNhY2hlX2JvdHRvbTsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyOwpkaWZmIC0tZ2l0IGEvdXJsLmMgYi91cmwuYwppbmRleCBlMzRlNWU3Li5lMDRiZDYwIDEwMDY0NAotLS0gYS91cmwuYworKysgYi91cmwuYwpAQCAtNSw3ICs1LDcgQEAKIHsKIAkvKgogCSAqIFRoZSBzZXQgb2YgdmFsaWQgVVJMIHNjaGVtZXMsIGFzIHBlciBTVEQ2NiAoUkZDMzk4NikgaXMKLQkgKiAnW0EtWmEtel1bQS1aYS16MC05Ky4tXSonLiBCdXQgdXNlIHNpZ2h0bHkgbG9vc2VyIGNoZWNrCisJICogJ1tBLVphLXpdW0EtWmEtejAtOSsuLV0qJy4gQnV0IHVzZSBzbGlnaHRseSBsb29zZXIgY2hlY2sKIAkgKiBvZiAnW0EtWmEtejAtOV1bQS1aYS16MC05Ky4tXSonIGJlY2F1c2UgZWFybGllciB2ZXJzaW9uCiAJICogb2YgY2hlY2sgdXNlZCAnW0EtWmEtejAtOV0rJyBzbyBub3QgdG8gYnJlYWsgYW55IHJlbW90ZQogCSAqIGhlbHBlcnMuCmRpZmYgLS1naXQgYS91c2FnZS5jIGIvdXNhZ2UuYwppbmRleCAyZmRiMjAwLi41OGZiNWZmIDEwMDY0NAotLS0gYS91c2FnZS5jCisrKyBiL3VzYWdlLmMKQEAgLTksMTQgKzksMjYgQEAKIHZvaWQgdnJlcG9ydGYoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQogewogCWNoYXIgbXNnWzQwOTZdOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnBlbmQgPSBtc2cgKyBzaXplb2YobXNnKTsKKwlzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOwogCi0JdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKLQlmb3IgKHAgPSBtc2c7ICpwOyBwKyspIHsKKwlpZiAoc2l6ZW9mKG1zZykgPD0gcHJlZml4X2xlbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJVRyEhISB0b28gbG9uZyBhIHByZWZpeCAnJXMnXG4iLCBwcmVmaXgpOworCQlhYm9ydCgpOworCX0KKwltZW1jcHkobXNnLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCXAgPSBtc2cgKyBwcmVmaXhfbGVuOworCWlmICh2c25wcmludGYocCwgcGVuZCAtIHAsIGVyciwgcGFyYW1zKSA8IDApCisJCSpwID0gJ1wwJzsgLyogdnNucHJpbnRmKCkgZmFpbGVkLCBjbGlwIGF0IHByZWZpeCAqLworCisJZm9yICg7IHAgIT0gcGVuZCAtIDEgJiYgKnA7IHArKykgewogCQlpZiAoaXNjbnRybCgqcCkgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nKQogCQkJKnAgPSAnPyc7CiAJfQotCWZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgcHJlZml4LCBtc2cpOworCisJKihwKyspID0gJ1xuJzsgLyogd2Ugbm8gbG9uZ2VyIG5lZWQgYSBOVUwgKi8KKwlmZmx1c2goc3RkZXJyKTsKKwl3cml0ZV9pbl9mdWxsKDIsIG1zZywgcCAtIG1zZyk7CiB9CiAKIHN0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmMgYi91c2VyZGlmZi5jCmluZGV4IGUxODdkMzUuLmVmYmUwNWUgMTAwNjQ0Ci0tLSBhL3VzZXJkaWZmLmMKKysrIGIvdXNlcmRpZmYuYwpAQCAtMzIsNiArMzIsMTkgQEAKIAkgLyogUHJvcGVydHkgbmFtZXMgYW5kIG1hdGggb3BlcmF0b3JzICovCiAJICJbYS16QS1aMC05LC5fKz8jLV0rIgogCSAifFstKyovJSZefCF+XXw+Pnw8PHwmJnxcXHxcXHwiKSwKK1BBVFRFUk5TKCJlbGl4aXIiLAorCSAiXlsgXHRdKigoZGVmKG1hY3JvfG1vZHVsZXxpbXBsfHByb3RvY29sfHApP3x0ZXN0KVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJIC8qIEF0b21zLCBuYW1lcywgYW5kIG1vZHVsZSBhdHRyaWJ1dGVzICovCisJICJbQDpdP1thLXpBLVowLTlAXz8hXSsiCisJIC8qIE51bWJlcnMgd2l0aCBzcGVjaWZpYyBiYXNlICovCisJICJ8Wy0rXT8wW3hvYl1bMC05YS1mQS1GXSsiCisJIC8qIE51bWJlcnMgKi8KKwkgInxbLStdP1swLTldWzAtOV8uXSooW2VFXVstK10/WzAtOV9dKyk/IgorCSAvKiBPcGVyYXRvcnMgYW5kIGF0b21zIHRoYXQgcmVwcmVzZW50IHRoZW0gKi8KKwkgInw6PyhcXCtcXCt8LS18XFwuXFwufH5+fnw8PnxcXF5cXF5cXF58PD9cXHw+fDw8PD98Pj8+Pnw8PD9+fH4+Pz58PH4+fDw9fD49fD09PT98IT09P3w9fnwmJiY/fFxcfFxcfFxcfD98PT58PC18XFxcXFxcXFx8LT4pIgorCSAvKiBOb3QgcmVhbCBvcGVyYXRvcnMsIGJ1dCBzaG91bGQgYmUgZ3JvdXBlZCAqLworCSAifDo/JVtBLVphLXowLTlfLl1cXHtcXH0/IiksCiBJUEFUVEVSTigiZm9ydHJhbiIsCiAJICIhXihbQypdfFsgXHRdKiEpXG4iCiAJICIhXlsgXHRdKk1PRFVMRVsgXHRdK1BST0NFRFVSRVsgXHRdXG4iCkBAIC0xMzMsNyArMTQ2LDcgQEAKIAkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCiAJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdKyIKIAkgInxbLSsqLzw+JSZefD0hLl09fC0tfFxcK1xcK3w8PD0/fD4+PT98PT09fCYmfFxcfFxcfHw6OnwtPiIpLAotUEFUVEVSTlMoInB5dGhvbiIsICJeWyBcdF0qKChjbGFzc3xkZWYpWyBcdF0uKikkIiwKK1BBVFRFUk5TKCJweXRob24iLCAiXlsgXHRdKigoY2xhc3N8KGFzeW5jWyBcdF0rKT9kZWYpWyBcdF0uKikkIiwKIAkgLyogLS0gKi8KIAkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCiAJICJ8Wy0rMC05LmVdK1tqSmxMXT98MFt4WF0/WzAtOWEtZkEtRl0rW2xMXT8iCmRpZmYgLS1naXQgYS91dGY4LmMgYi91dGY4LmMKaW5kZXggNWM4ZjE1MS4uNWIzOTM2MSAxMDA2NDQKLS0tIGEvdXRmOC5jCisrKyBiL3V0ZjguYwpAQCAtNDExLDExICs0MTEsMTAgQEAKICAqLwogc3RhdGljIGludCBzYW1lX3V0Zl9lbmNvZGluZyhjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCkKIHsKLQlpZiAoaXN0YXJ0c193aXRoKHNyYywgInV0ZiIpICYmIGlzdGFydHNfd2l0aChkc3QsICJ1dGYiKSkgewotCQkvKiBzcmNbM10gb3IgZHN0WzNdIG1pZ2h0IGJlICdcMCcgKi8KLQkJaW50IGkgPSAoc3JjWzNdID09ICctJyA/IDQgOiAzKTsKLQkJaW50IGogPSAoZHN0WzNdID09ICctJyA/IDQgOiAzKTsKLQkJcmV0dXJuICFzdHJjYXNlY21wKHNyYytpLCBkc3Qraik7CisJaWYgKHNraXBfaXByZWZpeChzcmMsICJ1dGYiLCAmc3JjKSAmJiBza2lwX2lwcmVmaXgoZHN0LCAidXRmIiwgJmRzdCkpIHsKKwkJc2tpcF9wcmVmaXgoc3JjLCAiLSIsICZzcmMpOworCQlza2lwX3ByZWZpeChkc3QsICItIiwgJmRzdCk7CisJCXJldHVybiAhc3RyY2FzZWNtcChzcmMsIGRzdCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmggYi94ZGlmZi1pbnRlcmZhY2UuaAppbmRleCBlZGU0MjQ2Li45M2RmMjY5IDEwMDY0NAotLS0gYS94ZGlmZi1pbnRlcmZhY2UuaAorKysgYi94ZGlmZi1pbnRlcmZhY2UuaApAQCAtNDQsNyArNDQsNyBAQAogICogQ29tcGFyZSB0aGUgc3RyaW5ncyBsMSB3aXRoIGwyIHdoaWNoIGFyZSBvZiBzaXplIHMxIGFuZCBzMiByZXNwZWN0aXZlbHkuCiAgKiBSZXR1cm5zIDEgaWYgdGhlIHN0cmluZ3MgYXJlIGRlZW1lZCBlcXVhbCwgMCBvdGhlcndpc2UuCiAgKiBUaGUgYGZsYWdzYCBnaXZlbiBhcyBYREZfV0hJVEVTUEFDRV9GTEFHUyBkZXRlcm1pbmUgaG93IHdoaXRlIHNwYWNlcwotICogYXJlIHRyZWF0ZWQgZm9yIHRoZSBjb21wYXJpc2lvbi4KKyAqIGFyZSB0cmVhdGVkIGZvciB0aGUgY29tcGFyaXNvbi4KICAqLwogaW50IHhkaWZmX2NvbXBhcmVfbGluZXMoY29uc3QgY2hhciAqbDEsIGxvbmcgczEsCiAJCQljb25zdCBjaGFyICpsMiwgbG9uZyBzMiwgbG9uZyBmbGFncyk7CmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5jIGIveGRpZmYveGVtaXQuYwppbmRleCAzMDcxM2FlLi45ZDdkNmM1IDEwMDY0NAotLS0gYS94ZGlmZi94ZW1pdC5jCisrKyBiL3hkaWZmL3hlbWl0LmMKQEAgLTE3MiwxMCArMTcyLDEyIEBACiAJc3RydWN0IGZ1bmNfbGluZSBmdW5jX2xpbmUgPSB7IDAgfTsKIAogCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhkY2hhbmdlX3QgKnhjaHAgPSB4Y2g7CiAJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoJnhjaCwgeGVjZmcpOwogCQlpZiAoIXhjaCkKIAkJCWJyZWFrOwogCitwcmVfY29udGV4dF9jYWxjdWxhdGlvbjoKIAkJczEgPSBYRExfTUFYKHhjaC0+aTEgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKIAkJczIgPSBYRExfTUFYKHhjaC0+aTIgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKIApAQCAtMjEyLDYgKzIxNCwyMSBAQAogCQkJaWYgKGZzMSA8IHMxKSB7CiAJCQkJczIgPSBYRExfTUFYKHMyIC0gKHMxIC0gZnMxKSwgMCk7CiAJCQkJczEgPSBmczE7CisKKwkJCQkvKgorCQkJCSAqIERpZCB3ZSBleHRlbmQgY29udGV4dCB1cHdhcmRzIGludG8gYW4KKwkJCQkgKiBpZ25vcmVkIGNoYW5nZT8KKwkJCQkgKi8KKwkJCQl3aGlsZSAoeGNocCAhPSB4Y2ggJiYKKwkJCQkgICAgICAgeGNocC0+aTEgKyB4Y2hwLT5jaGcxIDw9IHMxICYmCisJCQkJICAgICAgIHhjaHAtPmkyICsgeGNocC0+Y2hnMiA8PSBzMikKKwkJCQkJeGNocCA9IHhjaHAtPm5leHQ7CisKKwkJCQkvKiBJZiBzbywgc2hvdyBpdCBhZnRlciBhbGwuICovCisJCQkJaWYgKHhjaHAgIT0geGNoKSB7CisJCQkJCXhjaCA9IHhjaHA7CisJCQkJCWdvdG8gcHJlX2NvbnRleHRfY2FsY3VsYXRpb247CisJCQkJfQogCQkJfQogCQl9CiAK