ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwppbmRleCBmNDVkYjViLi5lZDRlNDQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCkBAIC03NSw3ICs3NSw3IEBACiAKICAtIElmIHlvdSB3YW50IHRvIGZpbmQgb3V0IGlmIGEgY29tbWFuZCBpcyBhdmFpbGFibGUgb24gdGhlIHVzZXIncwogICAgJFBBVEgsIHlvdSBzaG91bGQgdXNlICd0eXBlIDxjb21tYW5kPicsIGluc3RlYWQgb2YgJ3doaWNoIDxjb21tYW5kPicuCi0gICBUaGUgb3V0cHV0IG9mICd3aGljaCcgaXMgbm90IG1hY2hpbmUgcGFyc2VhYmxlIGFuZCBpdHMgZXhpdCBjb2RlCisgICBUaGUgb3V0cHV0IG9mICd3aGljaCcgaXMgbm90IG1hY2hpbmUgcGFyc2FibGUgYW5kIGl0cyBleGl0IGNvZGUKICAgIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLgogCiAgLSBXZSB1c2UgUE9TSVggY29tcGxpYW50IHBhcmFtZXRlciBzdWJzdGl0dXRpb25zIGFuZCBhdm9pZCBiYXNoaXNtczsKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgLiBzaW5jZSBlYXJseSAyMDEyIHdpdGggZTEzMjcwMjNlYSwgd2UgaGF2ZSBiZWVuIHVzaW5nIGFuIGVudW0KICAgICAgZGVmaW5pdGlvbiB3aG9zZSBsYXN0IGVsZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBjb21tYS4gIFRoaXMsIGxpa2UKICAgICAgYW4gYXJyYXkgaW5pdGlhbGl6ZXIgdGhhdCBlbmRzIHdpdGggYSB0cmFpbGluZyBjb21tYSwgY2FuIGJlIHVzZWQKLSAgICAgdG8gcmVkdWNlIHRoZSBwYXRjaCBub2lzZSB3aGVuIGFkZGluZyBhIG5ldyBpZGVudGlmZXIgYXQgdGhlIGVuZC4KKyAgICAgdG8gcmVkdWNlIHRoZSBwYXRjaCBub2lzZSB3aGVuIGFkZGluZyBhIG5ldyBpZGVudGlmaWVyIGF0IHRoZSBlbmQuCiAKICAgIC4gc2luY2UgbWlkIDIwMTcgd2l0aCBjYmMwZjgxZCwgd2UgaGF2ZSBiZWVuIHVzaW5nIGRlc2lnbmF0ZWQKICAgICAgaW5pdGlhbGl6ZXJzIGZvciBzdHJ1Y3QgKGUuZy4gInN0cnVjdCB0IHYgPSB7IC52YWwgPSAnYScgfTsiKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCmluZGV4IDA2ZDg1YWQuLjhmZTgyOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtNzcsNiArNzcsNyBAQAogU1BfQVJUSUNMRVMgKz0gJChBUElfRE9DUykKIAogVEVDSF9ET0NTICs9IE15Rmlyc3RDb250cmlidXRpb24KK1RFQ0hfRE9DUyArPSBNeUZpcnN0T2JqZWN0V2FsawogVEVDSF9ET0NTICs9IFN1Ym1pdHRpbmdQYXRjaGVzCiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbgogVEVDSF9ET0NTICs9IHRlY2huaWNhbC9odHRwLXByb3RvY29sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dAppbmRleCA1ZTliODA4Li5iNTU4MzdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHQKQEAgLTM4LDYgKzM4LDI2IEBACiAkIGNkIGdpdAogLS0tLQogCitbW2RlcGVuZGVuY2llc11dCis9PT0gSW5zdGFsbGluZyBEZXBlbmRlbmNpZXMKKworVG8gYnVpbGQgR2l0IGZyb20gc291cmNlLCB5b3UgbmVlZCB0byBoYXZlIGEgaGFuZGZ1bCBvZiBkZXBlbmRlbmNpZXMgaW5zdGFsbGVkCitvbiB5b3VyIHN5c3RlbS4gRm9yIGEgaGludCBvZiB3aGF0J3MgbmVlZGVkLCB5b3UgY2FuIHRha2UgYSBsb29rIGF0CitgSU5TVEFMTGAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlY3Rpb24gYWJvdXQgR2l0J3MgZGVwZW5kZW5jaWVzIG9uCitleHRlcm5hbCBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLiBUaGF0IGRvY3VtZW50IG1lbnRpb25zIGEgd2F5IHRvICJ0ZXN0LWRyaXZlIgorb3VyIGZyZXNobHkgYnVpbHQgR2l0IHdpdGhvdXQgaW5zdGFsbGluZzsgdGhhdCdzIHRoZSBtZXRob2Qgd2UnbGwgYmUgdXNpbmcgaW4KK3RoaXMgdHV0b3JpYWwuCisKK01ha2Ugc3VyZSB0aGF0IHlvdXIgZW52aXJvbm1lbnQgaGFzIGV2ZXJ5dGhpbmcgeW91IG5lZWQgYnkgYnVpbGRpbmcgeW91ciBicmFuZAorbmV3IGNsb25lIG9mIEdpdCBmcm9tIHRoZSBhYm92ZSBzdGVwOgorCistLS0tCiskIG1ha2UKKy0tLS0KKworTk9URTogVGhlIEdpdCBidWlsZCBpcyBwYXJhbGxlbGl6YWJsZS4gYC1qI2AgaXMgbm90IGluY2x1ZGVkIGFib3ZlIGJ1dCB5b3UgY2FuCit1c2UgaXQgYXMgeW91IHByZWZlciwgaGVyZSBhbmQgZWxzZXdoZXJlLgorCiBbW2lkZW50aWZ5LXByb2JsZW1dXQogPT09IElkZW50aWZ5IFByb2JsZW0gdG8gU29sdmUKIApAQCAtMTM4LDkgKzE1OCw2IEBACiBgREVWRUxPUEVSYCBmbGFnOyBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIGl0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB5b3UgY2FuIHR1cm4KIGl0IG9mZiwgYnV0IGl0J3MgYSBnb29kIGlkZWEgdG8gbWVudGlvbiB0aGUgcHJvYmxlbSB0byB0aGUgbWFpbGluZyBsaXN0LgogCi1OT1RFOiBUaGUgR2l0IGJ1aWxkIGlzIHBhcmFsbGVsaXphYmxlLiBgLWojYCBpcyBub3QgaW5jbHVkZWQgYWJvdmUgYnV0IHlvdSBjYW4KLXVzZSBpdCBhcyB5b3UgcHJlZmVyLCBoZXJlIGFuZCBlbHNld2hlcmUuCi0KIEdyZWF0LCBub3cgeW91ciBuZXcgY29tbWFuZCBidWlsZHMgaGFwcGlseSBvbiBpdHMgb3duLiBCdXQgbm9ib2R5IGludm9rZXMgaXQuCiBMZXQncyBjaGFuZ2UgdGhhdC4KIApAQCAtNTM0LDYgKzU1MSwyOCBAQAogYSBmbGFnLikgYHBhcnNlX29wdGlvbnMoKWAgd2lsbCB0ZXJtaW5hdGUgcGFyc2luZyB3aGVuIGl0IHJlYWNoZXMgYC0tYCBhbmQgZ2l2ZQogeW91IHRoZSByZXN0IG9mIHRoZSBvcHRpb25zIGFmdGVyd2FyZHMsIHVudG91Y2hlZC4KIAorTm93IHRoYXQgeW91IGhhdmUgYSB1c2FnZSBoaW50LCB5b3UgY2FuIHRlYWNoIEdpdCBob3cgdG8gc2hvdyBpdCBpbiB0aGUgZ2VuZXJhbAorY29tbWFuZCBsaXN0IHNob3duIGJ5IGBnaXQgaGVscCBnaXRgIG9yIGBnaXQgaGVscCAtYWAsIHdoaWNoIGlzIGdlbmVyYXRlZCBmcm9tCitgY29tbWFuZC1saXN0LnR4dGAuIEZpbmQgdGhlIGxpbmUgZm9yICdnaXQtcHVsbCcgc28geW91IGNhbiBhZGQgeW91ciAnZ2l0LXBzdWgnCitsaW5lIGFib3ZlIGl0IGluIGFscGhhYmV0aWNhbCBvcmRlci4gTm93LCB3ZSBjYW4gYWRkIHNvbWUgYXR0cmlidXRlcyBhYm91dCB0aGUKK2NvbW1hbmQgd2hpY2ggaW1wYWN0cyB3aGVyZSBpdCBzaG93cyB1cCBpbiB0aGUgYWZvcmVtZW50aW9uZWQgaGVscCBjb21tYW5kcy4gVGhlCit0b3Agb2YgYGNvbW1hbmQtbGlzdC50eHRgIHNoYXJlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgZWFjaCBhdHRyaWJ1dGUKK21lYW5zOyBpbiB0aG9zZSBoZWxwIHBhZ2VzLCB0aGUgY29tbWFuZHMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlc2UKK2F0dHJpYnV0ZXMuIGBnaXQgcHN1aGAgaXMgdXNlci1mYWNpbmcsIG9yIHBvcmNlbGFpbiAtIHNvIHdlIHdpbGwgbWFyayBpdCBhcworIm1haW5wb3JjZWxhaW4iLiBGb3IgIm1haW5wb3JjZWxhaW4iIGNvbW1hbmRzLCB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZgorYGNvbW1hbmQtbGlzdC50eHRgIGluZGljYXRlIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgYWRkIGFuIGF0dHJpYnV0ZSBmcm9tIGFub3RoZXIKK2xpc3Q7IHNpbmNlIGBnaXQgcHN1aGAgc2hvd3Mgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcidzIHdvcmtzcGFjZSBidXQKK2RvZXNuJ3QgbW9kaWZ5IGFueXRoaW5nLCBsZXQncyBtYXJrIGl0IGFzICJpbmZvIi4gTWFrZSBzdXJlIHRvIGtlZXAgeW91cgorYXR0cmlidXRlcyBpbiB0aGUgc2FtZSBzdHlsZSBhcyB0aGUgcmVzdCBvZiBgY29tbWFuZC1saXN0LnR4dGAgdXNpbmcgc3BhY2VzIHRvCithbGlnbiBhbmQgZGVsaW5lYXRlIHRoZW06CisKKy0tLS0KK2dpdC1wcnVuZS1wYWNrZWQgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXBzdWggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4JCWluZm8KK2dpdC1wdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKKy0tLS0KKwogQnVpbGQgYWdhaW4uIE5vdywgd2hlbiB5b3UgcnVuIHdpdGggYC1oYCwgeW91IHNob3VsZCBzZWUgeW91ciB1c2FnZSBwcmludGVkIGFuZAogeW91ciBjb21tYW5kIHRlcm1pbmF0ZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVucy4gR3JlYXQhCiAKQEAgLTc0Niw2ICs3ODUsMTQgQEAKIGJ1dCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBgL3N1Ym1pdGAgeW91ciBjaGFuZ2VzIHVudGlsIHNvbWVvbmUgYWxsb3dzIHlvdSB0bwogdXNlIHRoZSB0b29sLgogCitOT1RFOiBZb3UgY2FuIHR5cGljYWxseSBmaW5kIHNvbWVvbmUgd2hvIGNhbiBgL2FsbG93YCB5b3Ugb24gR2l0R2l0R2FkZ2V0IGJ5CitlaXRoZXIgZXhhbWluaW5nIHJlY2VudCBwdWxsIHJlcXVlc3RzIHdoZXJlIHNvbWVvbmUgaGFzIGJlZW4gZ3JhbnRlZCBgL2FsbG93YAorKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0L3B1bGxzP3V0Zjg9JUUyJTlDJTkzJnE9aXMlM0FwcitpcyUzQW9wZW4rJTIyJTJGYWxsb3clMjJbU2VhcmNoOgoraXM6cHIgaXM6b3BlbiAiL2FsbG93Il0pLCBpbiB3aGljaCBjYXNlIGJvdGggdGhlIGF1dGhvciBhbmQgdGhlIHBlcnNvbiB3aG8KK2dyYW50ZWQgdGhlIGAvYWxsb3dgIGNhbiBub3cgYC9hbGxvd2AgeW91LCBvciBieSBpbnF1aXJpbmcgb24gdGhlCitodHRwczovL3dlYmNoYXQuZnJlZW5vZGUubmV0LyNnaXQtZGV2ZWxbI2dpdC1kZXZlbF0gSVJDIGNoYW5uZWwgb24gRnJlZW5vZGUKK2xpbmtpbmcgeW91ciBwdWxsIHJlcXVlc3QgYW5kIGFza2luZyBmb3Igc29tZW9uZSB0byBgL2FsbG93YCB5b3UuCisKIElmIHRoZSBDSSBmYWlscywgeW91IGNhbiB1cGRhdGUgeW91ciBjaGFuZ2VzIHdpdGggYGdpdCByZWJhc2UgLWlgIGFuZCBwdXNoIHlvdXIKIGJyYW5jaCBhZ2FpbjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RPYmplY3RXYWxrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDI0ZGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQKQEAgLTAsMCArMSw5MDYgQEAKKz0gTXkgRmlyc3QgT2JqZWN0IFdhbGsKKworPT0gV2hhdCdzIGFuIE9iamVjdCBXYWxrPworCitUaGUgb2JqZWN0IHdhbGsgaXMgYSBrZXkgY29uY2VwdCBpbiBHaXQgLSB0aGlzIGlzIHRoZSBwcm9jZXNzIHRoYXQgdW5kZXJwaW5zCitvcGVyYXRpb25zIGxpa2Ugb2JqZWN0IHRyYW5zZmVyIGFuZCBmc2NrLiBCZWdpbm5pbmcgZnJvbSBhIGdpdmVuIGNvbW1pdCwgdGhlCitsaXN0IG9mIG9iamVjdHMgaXMgZm91bmQgYnkgd2Fsa2luZyBwYXJlbnQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGNvbW1pdHMgKGNvbW1pdAorWCBiYXNlZCBvbiBjb21taXQgVykgYW5kIGNvbnRhaW5tZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBvYmplY3RzICh0cmVlIFkgaXMKK2NvbnRhaW5lZCB3aXRoaW4gY29tbWl0IFgsIGFuZCBibG9iIFogaXMgbG9jYXRlZCB3aXRoaW4gdHJlZSBZLCBnaXZpbmcgb3VyCit3b3JraW5nIHRyZWUgZm9yIGNvbW1pdCBYIHNvbWV0aGluZyBsaWtlIGB5L3oudHh0YCkuCisKK0EgcmVsYXRlZCBjb25jZXB0IGlzIHRoZSByZXZpc2lvbiB3YWxrLCB3aGljaCBpcyBmb2N1c2VkIG9uIGNvbW1pdCBvYmplY3RzIGFuZAordGhlaXIgcGFyZW50IHJlbGF0aW9uc2hpcHMgYW5kIGRvZXMgbm90IGRlbHZlIGludG8gb3RoZXIgb2JqZWN0IHR5cGVzLiBUaGUKK3JldmlzaW9uIHdhbGsgaXMgdXNlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBnaXQgbG9nYC4KKworPT09IFJlbGF0ZWQgUmVhZGluZworCistIGBEb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dGAgdW5kZXIgIkhhY2tpbmcgR2l0IiBjb250YWlucyBzb21lIGNvdmVyYWdlIG9mCisgIHRoZSByZXZpc2lvbiB3YWxrZXIgaW4gaXRzIHZhcmlvdXMgaW5jYXJuYXRpb25zLgorLSBgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0YAorLSBodHRwczovL2VhZ2Fpbi5uZXQvYXJ0aWNsZXMvZ2l0LWZvci1jb21wdXRlci1zY2llbnRpc3RzL1tHaXQgZm9yIENvbXB1dGVyIFNjaWVudGlzdHNdCisgIGdpdmVzIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0cyBpbiBHaXQgYW5kIHdoYXQgeW91ciBvYmplY3QKKyAgd2FsayBpcyByZWFsbHkgZGVzY3JpYmluZy4KKworPT0gU2V0dGluZyBVcAorCitDcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gYG1hc3RlcmAuCisKKy0tLS0KK2dpdCBjaGVja291dCAtYiByZXZ3YWxrIG9yaWdpbi9tYXN0ZXIKKy0tLS0KKworV2UnbGwgcHV0IG91ciBmaWRkbGluZyBpbnRvIGEgbmV3IGNvbW1hbmQuIEZvciBmdW4sIGxldCdzIG5hbWUgaXQgYGdpdCB3YWxrZW5gLgorT3BlbiB1cCBhIG5ldyBmaWxlIGBidWlsdGluL3dhbGtlbi5jYCBhbmQgc2V0IHVwIHRoZSBjb21tYW5kIGhhbmRsZXI6CisKKy0tLS0KKy8qCisgKiAiZ2l0IHdhbGtlbiIKKyAqCisgKiBQYXJ0IG9mIHRoZSAiTXkgRmlyc3QgT2JqZWN0IFdhbGsiIHR1dG9yaWFsLgorICovCisKKyNpbmNsdWRlICJidWlsdGluLmgiCisKK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXRyYWNlX3ByaW50ZihfKCJjbWRfd2Fsa2VuIGluY29taW5nLi4uXG4iKSk7CisJcmV0dXJuIDA7Cit9CistLS0tCisKK05PVEU6IGB0cmFjZV9wcmludGYoKWAgZGlmZmVycyBmcm9tIGBwcmludGYoKWAgaW4gdGhhdCBpdCBjYW4gYmUgdHVybmVkIG9uIG9yCitvZmYgYXQgcnVudGltZS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHR1dG9yaWFsLCB3ZSB3aWxsIHdyaXRlIGB3YWxrZW5gIGFzCit0aG91Z2ggaXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhICJwbHVtYmluZyIgY29tbWFuZDogdGhhdCBpcywgYSBjb21tYW5kIHdoaWNoCitpcyB1c2VkIHByaW1hcmlseSBpbiBzY3JpcHRzLCByYXRoZXIgdGhhbiBpbnRlcmFjdGl2ZWx5IGJ5IGh1bWFucyAoYSAicG9yY2VsYWluIgorY29tbWFuZCkuIFNvIHdlIHdpbGwgc2VuZCBvdXIgZGVidWcgb3V0cHV0IHRvIGB0cmFjZV9wcmludGYoKWAgaW5zdGVhZC4gV2hlbgorcnVubmluZywgZW5hYmxlIHRyYWNlIG91dHB1dCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX1RSQUNFYC4KKworQWRkIHVzYWdlIHRleHQgYW5kIGAtaGAgaGFuZGxpbmcsIGxpa2UgYWxsIHN1YmNvbW1hbmRzIHNob3VsZCBjb25zaXN0ZW50bHkgZG8KKyhvdXIgdGVzdCBzdWl0ZSB3aWxsIG5vdGljZSBhbmQgY29tcGxhaW4gaWYgeW91IGZhaWwgdG8gZG8gc28pLgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICogY29uc3Qgd2Fsa2VuX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgd2Fsa2VuIiksCisJCU5VTEwsCisJfQorCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB3YWxrZW5fdXNhZ2UsIDApOworCisJLi4uCit9CistLS0tCisKK0Fsc28gYWRkIHRoZSByZWxldmFudCBsaW5lIGluIGBidWlsdGluLmhgIG5lYXIgYGNtZF93aGF0Y2hhbmdlZCgpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworLS0tLQorCitJbmNsdWRlIHRoZSBjb21tYW5kIGluIGBnaXQuY2AgaW4gYGNvbW1hbmRzW11gIG5lYXIgdGhlIGVudHJ5IGZvciBgd2hhdGNoYW5nZWRgLAorbWFpbnRhaW5pbmcgYWxwaGFiZXRpY2FsIG9yZGVyaW5nOgorCistLS0tCit7ICJ3YWxrZW4iLCBjbWRfd2Fsa2VuLCBSVU5fU0VUVVAgfSwKKy0tLS0KKworQWRkIGl0IHRvIHRoZSBgTWFrZWZpbGVgIG5lYXIgdGhlIGxpbmUgZm9yIGBidWlsdGluL3dvcmt0cmVlLm9gOgorCistLS0tCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi93YWxrZW4ubworLS0tLQorCitCdWlsZCBhbmQgdGVzdCBvdXQgeW91ciBjb21tYW5kLCB3aXRob3V0IGZvcmdldHRpbmcgdG8gZW5zdXJlIHRoZSBgREVWRUxPUEVSYAorZmxhZyBpcyBzZXQsIGFuZCB3aXRoIGBHSVRfVFJBQ0VgIGVuYWJsZWQgc28gdGhlIGRlYnVnIG91dHB1dCBjYW4gYmUgc2VlbjoKKworLS0tLQorJCBlY2hvIERFVkVMT1BFUj0xID4+Y29uZmlnLm1haworJCBtYWtlCiskIEdJVF9UUkFDRT0xIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4KKy0tLS0KKworTk9URTogRm9yIGEgbW9yZSBleGhhdXN0aXZlIG92ZXJ2aWV3IG9mIHRoZSBuZXcgY29tbWFuZCBwcm9jZXNzLCB0YWtlIGEgbG9vayBhdAorYERvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHRgLgorCitOT1RFOiBBIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9uYXNhbXVmZmluL2dpdC90cmVlL3JldndhbGsuCisKKz09PSBgc3RydWN0IHJldl9jbWRsaW5lX2luZm9gCisKK1RoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mb2AgY2FuIGJlIGZvdW5kIGluIGByZXZpc2lvbi5oYC4KKworVGhpcyBzdHJ1Y3QgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHJldl9pbmZvYCBzdHJ1Y3QgYW5kIGlzIHVzZWQgdG8gcmVmbGVjdAorcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgdXNlciBvdmVyIHRoZSBDTEkuCisKK2BucmAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGByZXZfY21kbGluZV9lbnRyeWAgcHJlc2VudCBpbiB0aGUgYXJyYXkuCisKK2BhbGxvY2AgaXMgdXNlZCBieSB0aGUgYEFMTE9DX0dST1dgIG1hY3JvLiBDaGVjaworYERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hbGxvY2F0aW9uLWdyb3dpbmcudHh0YCAtIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0bwordHJhY2sgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBsaXN0LgorCitQZXIgZW50cnksIHdlIGZpbmQ6CisKK2BpdGVtYCBpcyB0aGUgb2JqZWN0IHByb3ZpZGVkIHVwb24gd2hpY2ggdG8gYmFzZSB0aGUgb2JqZWN0IHdhbGsuIEl0ZW1zIGluIEdpdAorY2FuIGJlIGJsb2JzLCB0cmVlcywgY29tbWl0cywgb3IgdGFncy4gKFNlZSBgRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dGAuKQorCitgbmFtZWAgaXMgdGhlIG9iamVjdCBJRCAoT0lEKSBvZiB0aGUgb2JqZWN0IC0gYSBoZXggc3RyaW5nIHlvdSBtYXkgYmUgZmFtaWxpYXIKK3dpdGggZnJvbSB1c2luZyBHaXQgdG8gb3JnYW5pemUgeW91ciBzb3VyY2UgaW4gdGhlIHBhc3QuIENoZWNrIHRoZSB0dXRvcmlhbAorbWVudGlvbmVkIGFib3ZlIHRvd2FyZHMgdGhlIHRvcCBmb3IgYSBkaXNjdXNzaW9uIG9mIHdoZXJlIHRoZSBPSUQgY2FuIGNvbWUKK2Zyb20uCisKK2B3aGVuY2VgIGluZGljYXRlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50cyBvZiB0aGUKK3NwZWNpZmllZCBvYmplY3QuIFdlJ2xsIGV4cGxvcmUgdGhpcyBmbGFnIG1vcmUgbGF0ZXIgb247IHRha2UgYSBsb29rIGF0CitgRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0YCB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGNvdWxkIHNldCB0aGUgYHdoZW5jZWAKK3ZhbHVlLgorCitgZmxhZ3NgIGFyZSB1c2VkIHRvIGhpbnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmV2aXNpb24gd2FsayBhbmQgYXJlIHRoZSBmaXJzdAorYmxvY2sgdW5kZXIgdGhlIGAjaW5jbHVkZWBzIGluIGByZXZpc2lvbi5oYC4gVGhlIG1vc3QgbGlrZWx5IG9uZXMgdG8gYmUgc2V0IGluCit0aGUgYHJldl9jbWRsaW5lX2luZm9gIGFyZSBgVU5JTlRFUkVTVElOR2AgYW5kIGBCT1RUT01gLCBidXQgdGhlc2Ugc2FtZSBmbGFncworY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSB3YWxrLCBhcyB3ZWxsLgorCis9PT0gYHN0cnVjdCByZXZfaW5mb2AKKworVGhpcyBvbmUgaXMgcXVpdGUgYSBiaXQgbG9uZ2VyLCBhbmQgbWFueSBmaWVsZHMgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHdhbGsKK2J5IGByZXZpc2lvbi5jYCAtIG5vdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1vc3Qgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmbGFncyBpbgorYHN0cnVjdCByZXZfaW5mb2AgaGF2ZSBhIG1pcnJvciBpbiBgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dGAuIEl0J3MgYQorZ29vZCBpZGVhIHRvIHRha2Ugc29tZSB0aW1lIGFuZCByZWFkIHRocm91Z2ggdGhhdCBkb2N1bWVudC4KKworPT0gQmFzaWMgQ29tbWl0IFdhbGsKKworRmlyc3QsIGxldCdzIHNlZSBpZiB3ZSBjYW4gcmVwbGljYXRlIHRoZSBvdXRwdXQgb2YgYGdpdCBsb2cgLS1vbmVsaW5lYC4gV2UnbGwKK3JlZmVyIGJhY2sgdG8gdGhlIGltcGxlbWVudGF0aW9uIGZyZXF1ZW50bHkgdG8gZGlzY292ZXIgbm9ybXMgd2hlbiBwZXJmb3JtaW5nCithbiBvYmplY3Qgd2FsayBvZiBvdXIgb3duLgorCitUbyBkbyBzbywgd2UnbGwgZmlyc3QgZmluZCBhbGwgdGhlIGNvbW1pdHMsIGluIG9yZGVyLCB3aGljaCBwcmVjZWRlZCB0aGUgY3VycmVudAorY29tbWl0LiBXZSdsbCBleHRyYWN0IHRoZSBuYW1lIGFuZCBzdWJqZWN0IG9mIHRoZSBjb21taXQgZnJvbSBlYWNoLgorCitJZGVhbGx5LCB3ZSB3aWxsIGFsc28gYmUgYWJsZSB0byBmaW5kIG91dCB3aGljaCBvbmVzIGFyZSBjdXJyZW50bHkgYXQgdGhlIHRpcCBvZgordmFyaW91cyBicmFuY2hlcy4KKworPT09IFNldHRpbmcgVXAKKworUHJlcGFyaW5nIGZvciB5b3VyIG9iamVjdCB3YWxrIGhhcyBzb21lIGRpc3RpbmN0IHN0YWdlcy4KKworMS4gUGVyZm9ybSBkZWZhdWx0IHNldHVwIGZvciB0aGlzIG1vZGUsIGFuZCBvdGhlcnMgd2hpY2ggbWF5IGJlIGludm9rZWQuCisyLiBDaGVjayBjb25maWd1cmF0aW9uIGZpbGVzIGZvciByZWxldmFudCBzZXR0aW5ncy4KKzMuIFNldCB1cCB0aGUgYHJldl9pbmZvYCBzdHJ1Y3QuCis0LiBUd2VhayB0aGUgaW5pdGlhbGl6ZWQgYHJldl9pbmZvYCB0byBzdWl0IHRoZSBjdXJyZW50IHdhbGsuCis1LiBQcmVwYXJlIHRoZSBgcmV2X2luZm9gIGZvciB0aGUgd2Fsay4KKzYuIEl0ZXJhdGUgb3ZlciB0aGUgb2JqZWN0cywgcHJvY2Vzc2luZyBlYWNoIG9uZS4KKworPT09PSBEZWZhdWx0IFNldHVwcworCitCZWZvcmUgZXhhbWluaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hpY2ggbWF5IG1vZGlmeSBjb21tYW5kIGJlaGF2aW9yLCBzZXQgdXAKK2RlZmF1bHQgc3RhdGUgZm9yIHN3aXRjaGVzIG9yIG9wdGlvbnMgeW91ciBjb21tYW5kIG1heSBoYXZlLiBJZiB5b3VyIGNvbW1hbmQKK3V0aWxpemVzIG90aGVyIEdpdCBjb21wb25lbnRzLCBhc2sgdGhlbSB0byBzZXQgdXAgdGhlaXIgZGVmYXVsdCBzdGF0ZXMgYXMgd2VsbC4KK0ZvciBpbnN0YW5jZSwgYGdpdCBsb2dgIHRha2VzIGFkdmFudGFnZSBvZiBgZ3JlcGAgYW5kIGBkaWZmYCBmdW5jdGlvbmFsaXR5LCBzbworaXRzIGBpbml0X2xvZ19kZWZhdWx0cygpYCBzZXRzIGl0cyBvd24gc3RhdGUgKGBkZWNvcmF0aW9uX3N0eWxlYCkgYW5kIGFza3MKK2BncmVwYCBhbmQgYGRpZmZgIHRvIGluaXRpYWxpemUgdGhlbXNlbHZlcyBieSBjYWxsaW5nIGVhY2ggb2YgdGhlaXIKK2luaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKworRm9yIG91ciBmaXJzdCBleGFtcGxlIHdpdGhpbiBgZ2l0IHdhbGtlbmAsIHdlIGRvbid0IGludGVuZCB0byB1c2UgYW55IG90aGVyCitjb21wb25lbnRzIHdpdGhpbiBHaXQsIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBjb25maWd1cmF0aW9uIHRvIGRvLiAgSG93ZXZlciwgd2UKK21heSB3YW50IHRvIGFkZCBzb21lIGxhdGVyLCBzbyBmb3Igbm93LCB3ZSBjYW4gYWRkIGFuIGVtcHR5IHBsYWNlaG9sZGVyLiBDcmVhdGUKK2EgbmV3IGZ1bmN0aW9uIGluIGBidWlsdGluL3dhbGtlbi5jYDoKKworLS0tLQorc3RhdGljIHZvaWQgaW5pdF93YWxrZW5fZGVmYXVsdHModm9pZCkKK3sKKwkvKgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHNhbWUgY29tcG9uZW50cyBgZ2l0IGxvZ2AgZG9lczsgbGVhdmUgdGhpcworCSAqIGVtcHR5IGZvciBub3cuCisJICovCit9CistLS0tCisKK01ha2Ugc3VyZSB0byBhZGQgYSBsaW5lIGludm9raW5nIGl0IGluc2lkZSBvZiBgY21kX3dhbGtlbigpYC4KKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW5pdF93YWxrZW5fZGVmYXVsdHMoKTsKK30KKy0tLS0KKworPT09PSBDb25maWd1cmluZyBGcm9tIGAuZ2l0Y29uZmlnYAorCitOZXh0LCB3ZSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKGkuZS4sCitzZXR0aW5ncyByZWFkYWJsZSBhbmQgc2V0dGFibGUgZnJvbSBgZ2l0IGNvbmZpZ2ApLiBUaGlzIGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEKK2NhbGxiYWNrIHRvIGBnaXRfY29uZmlnKClgOyB3aXRoaW4gdGhhdCBjYWxsYmFjaywgeW91IGNhbiBhbHNvIGludm9rZSBtZXRob2RzCitmcm9tIG90aGVyIGNvbXBvbmVudHMgeW91IG1heSBuZWVkIHRoYXQgbmVlZCB0byBpbnRlcmNlcHQgdGhlc2Ugb3B0aW9ucy4gWW91cgorY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIG9uY2UgcGVyIGVhY2ggY29uZmlndXJhdGlvbiB2YWx1ZSB3aGljaCBHaXQga25vd3MgYWJvdXQKKyhnbG9iYWwsIGxvY2FsLCB3b3JrdHJlZSwgZXRjLikuCisKK1NpbWlsYXJseSB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8gaGVyZSB5ZXQKK291cnNlbHZlczsgaG93ZXZlciwgd2Ugc2hvdWxkIGNhbGwgYGdpdF9kZWZhdWx0X2NvbmZpZygpYCBpZiB3ZSBhcmVuJ3QgY2FsbGluZworYW55IG90aGVyIGV4aXN0aW5nIGNvbmZpZyBjYWxsYmFja3MuCisKK0FkZCBhIG5ldyBmdW5jdGlvbiB0byBgYnVpbHRpbi93YWxrZW4uY2A6CisKKy0tLS0KK3N0YXRpYyBpbnQgZ2l0X3dhbGtlbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJLyoKKwkgKiBGb3Igbm93LCB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiwgc28gZmFsbCBiYWNrIHRvCisJICogdGhlIGRlZmF1bHQgY29uZmlnLgorCSAqLworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorLS0tLQorCitNYWtlIHN1cmUgdG8gaW52b2tlIGBnaXRfY29uZmlnKClgIHdpdGggaXQgaW4geW91ciBgY21kX3dhbGtlbigpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLi4uCisKKwlnaXRfY29uZmlnKGdpdF93YWxrZW5fY29uZmlnLCBOVUxMKTsKKworCS4uLgorfQorLS0tLQorCis9PT09IFNldHRpbmcgVXAgYHJldl9pbmZvYAorCitOb3cgdGhhdCB3ZSd2ZSBnYXRoZXJlZCBleHRlcm5hbCBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zLCBpdCdzIHRpbWUgdG8KK2luaXRpYWxpemUgdGhlIGByZXZfaW5mb2Agb2JqZWN0IHdoaWNoIHdlIHdpbGwgdXNlIHRvIHBlcmZvcm0gdGhlIHdhbGsuIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IGNhbGxpbmcgYHJlcG9faW5pdF9yZXZpc2lvbnMoKWAgd2l0aCB0aGUgcmVwb3NpdG9yeSB5b3UgaW50ZW5kCit0byB0YXJnZXQsIGFzIHdlbGwgYXMgdGhlIGBwcmVmaXhgIGFyZ3VtZW50IG9mIGBjbWRfd2Fsa2VuYCBhbmQgeW91ciBgcmV2X2luZm9gCitzdHJ1Y3QuCisKK0FkZCB0aGUgYHN0cnVjdCByZXZfaW5mb2AgYW5kIHRoZSBgcmVwb19pbml0X3JldmlzaW9ucygpYCBjYWxsOgorLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyogVGhpcyBjYW4gZ28gd2hlcmV2ZXIgeW91IGxpa2UgaW4geW91ciBkZWNsYXJhdGlvbnMuKi8KKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCS4uLgorCisJLyogVGhpcyBzaG91bGQgZ28gYWZ0ZXIgdGhlIGdpdF9jb25maWcoKSBjYWxsLiAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwkuLi4KK30KKy0tLS0KKworPT09PSBUd2Vha2luZyBgcmV2X2luZm9gIEZvciB0aGUgV2FsaworCitXZSdyZSBnZXR0aW5nIGNsb3NlLCBidXQgd2UncmUgc3RpbGwgbm90IHF1aXRlIHJlYWR5IHRvIGdvLiBOb3cgdGhhdCBgcmV2YCBpcworaW5pdGlhbGl6ZWQsIHdlIGNhbiBtb2RpZnkgaXQgdG8gZml0IG91ciBuZWVkcy4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aGluIGEKK2hlbHBlciBmb3IgY2xhcml0eSwgc28gbGV0J3MgYWRkIG9uZToKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLyoKKwkgKiBXZSB3YW50IHRvIG1pbWljIHRoZSBhcHBlYXJhbmNlIG9mIGBnaXQgbG9nIC0tb25lbGluZWAsIHNvIGxldCdzCisJICogZm9yY2Ugb25lbGluZSBmb3JtYXQuCisJICovCisJZ2V0X2NvbW1pdF9mb3JtYXQoIm9uZWxpbmUiLCByZXYpOworCisJLyogU3RhcnQgb3VyIG9iamVjdCB3YWxrIGF0IEhFQUQuICovCisJYWRkX2hlYWRfdG9fcGVuZGluZyhyZXYpOworfQorLS0tLQorCitbTk9URV0KKz09PT0KK0luc3RlYWQgb2YgdXNpbmcgdGhlIHNob3J0aGFuZCBgYWRkX2hlYWRfdG9fcGVuZGluZygpYCwgeW91IGNvdWxkIGRvCitzb21ldGhpbmcgbGlrZSB0aGlzOgorLS0tLQorCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC5yZXZhcmdfb3B0ID0gUkVWQVJHX0NPTU1JVFRJU0g7CisJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgJm9wdCk7CistLS0tCitVc2luZyBhIGBzZXR1cF9yZXZpc2lvbl9vcHRgIGdpdmVzIHlvdSBmaW5lciBjb250cm9sIG92ZXIgeW91ciB3YWxrJ3Mgc3RhcnRpbmcKK3BvaW50LgorPT09PQorCitUaGVuIGxldCdzIGludm9rZSBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgYWZ0ZXIgdGhlIGNhbGwgdG8KK2ByZXBvX2luaXRfcmV2aXNpb25zKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkuLi4KKworCWZpbmFsX3Jldl9pbmZvX3NldHVwKCZyZXYpOworCisJLi4uCit9CistLS0tCisKK0xhdGVyLCB3ZSBtYXkgd2lzaCB0byBhZGQgbW9yZSBhcmd1bWVudHMgdG8gYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgLiBCdXQgZm9yCitub3csIHRoaXMgaXMgYWxsIHdlIG5lZWQuCisKKz09PT0gUHJlcGFyaW5nIGByZXZfaW5mb2AgRm9yIHRoZSBXYWxrCisKK05vdyB0aGF0IGByZXZgIGlzIGFsbCBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCwgd2UndmUgZ290IG9uZSBtb3JlIHNldHVwIHN0ZXAKK2JlZm9yZSB3ZSBnZXQgcm9sbGluZy4gV2UgY2FuIGRvIHRoaXMgaW4gYSBoZWxwZXIsIHdoaWNoIHdpbGwgYm90aCBwcmVwYXJlIHRoZQorYHJldl9pbmZvYCBmb3IgdGhlIHdhbGssIGFuZCBwZXJmb3JtIHRoZSB3YWxrIGl0c2VsZi4gTGV0J3Mgc3RhcnQgdGhlIGhlbHBlcgord2l0aCB0aGUgY2FsbCB0byBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgLCB3aGljaCBjYW4gcmV0dXJuIGFuIGVycm9yIHdpdGhvdXQKK2R5aW5nIG9uIGl0cyBvd246CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKK30KKy0tLS0KKworTk9URTogYGRpZSgpYCBwcmludHMgdG8gYHN0ZGVycmAgYW5kIGV4aXRzIHRoZSBwcm9ncmFtLiBTaW5jZSBpdCB3aWxsIHByaW50IHRvCitgc3RkZXJyYCBpdCdzIGxpa2VseSB0byBiZSBzZWVuIGJ5IGEgaHVtYW4sIHNvIHdlIHdpbGwgbG9jYWxpemUgaXQuCisKKz09PT0gUGVyZm9ybWluZyB0aGUgV2FsayEKKworRmluYWxseSEgV2UgYXJlIHJlYWR5IHRvIGJlZ2luIHRoZSB3YWxrIGl0c2VsZi4gTm93IHdlIGNhbiBzZWUgdGhhdCBgcmV2X2luZm9gCitjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIGl0ZXJhdG9yOyB3ZSBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHdhbGsgYnkgdXNpbmcKK2BnZXRfcmV2aXNpb24oKWAgcmVwZWF0ZWRseS4gQWRkIHRoZSBsaXN0ZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AgYW5kCit0aGUgd2FsayBsb29wIGJlbG93IHRoZSBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgIGNhbGwgd2l0aGluIHlvdXIKK2B3YWxrZW5fY29tbWl0X3dhbGsoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBwcmV0dHlidWYgPSBTVFJCVUZfSU5JVDsKKworCS4uLgorCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKKwkJaWYgKCFjb21taXQpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfcmVzZXQoJnByZXR0eWJ1Zik7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnByZXR0eWJ1Zik7CisJCXB1dHMocHJldHR5YnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV0dHlidWYpOworfQorLS0tLQorCitOT1RFOiBgcHV0cygpYCBwcmludHMgYSBgY2hhcipgIHRvIGBzdGRvdXRgLiBTaW5jZSB0aGlzIGlzIHRoZSBwYXJ0IG9mIHRoZQorY29tbWFuZCB3ZSBleHBlY3QgdG8gYmUgbWFjaGluZS1wYXJzZWQsIHdlJ3JlIHNlbmRpbmcgaXQgZGlyZWN0bHkgdG8gc3Rkb3V0LgorCitHaXZlIGl0IGEgc2hvdC4KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4KKy0tLS0KKworWW91IHNob3VsZCBzZWUgYWxsIG9mIHRoZSBzdWJqZWN0IGxpbmVzIG9mIGFsbCB0aGUgY29tbWl0cyBpbgoreW91ciB0cmVlJ3MgaGlzdG9yeSwgaW4gb3JkZXIsIGVuZGluZyB3aXRoIHRoZSBpbml0aWFsIGNvbW1pdCwgIkluaXRpYWwgcmV2aXNpb24KK29mICJnaXQiLCB0aGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwiLiBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSB3cml0dGVuCit5b3VyIGZpcnN0IHJldmlzaW9uIHdhbGsuIFlvdSBjYW4gcGxheSB3aXRoIHByaW50aW5nIHNvbWUgYWRkaXRpb25hbCBmaWVsZHMKK2Zyb20gZWFjaCBjb21taXQgaWYgeW91J3JlIGN1cmlvdXM7IGhhdmUgYSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGluCitgY29tbWl0LmhgLgorCis9PT0gQWRkaW5nIGEgRmlsdGVyCisKK05leHQsIGxldCdzIHRyeSB0byBmaWx0ZXIgdGhlIGNvbW1pdHMgd2Ugc2VlIGJhc2VkIG9uIHRoZWlyIGF1dGhvci4gVGhpcyBpcworZXF1aXZhbGVudCB0byBydW5uaW5nIGBnaXQgbG9nIC0tYXV0aG9yPTxwYXR0ZXJuPmAuIFdlIGNhbiBhZGQgYSBmaWx0ZXIgYnkKK21vZGlmeWluZyBgcmV2X2luZm8uZ3JlcF9maWx0ZXJgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgZ3JlcF9vcHRgLgorCitGaXJzdCBzb21lIHNldHVwLiBBZGQgYGluaXRfZ3JlcF9kZWZhdWx0cygpYCB0byBgaW5pdF93YWxrZW5fZGVmYXVsdHMoKWAgYW5kIGFkZAorYGdyZXBfY29uZmlnKClgIHRvIGBnaXRfd2Fsa2VuX2NvbmZpZygpYDoKKworLS0tLQorc3RhdGljIHZvaWQgaW5pdF93YWxrZW5fZGVmYXVsdHModm9pZCkKK3sKKwlpbml0X2dyZXBfZGVmYXVsdHModGhlX3JlcG9zaXRvcnkpOworfQorCisuLi4KKworc3RhdGljIGludCBnaXRfd2Fsa2VuX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlncmVwX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CistLS0tCisKK05leHQsIHdlIGNhbiBtb2RpZnkgdGhlIGBncmVwX2ZpbHRlcmAuIFRoaXMgaXMgZG9uZSB3aXRoIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworZm91bmQgaW4gYGdyZXAuaGAuIEZvciBmdW4sIHdlJ3JlIGZpbHRlcmluZyB0byBvbmx5IGNvbW1pdHMgZnJvbSBmb2xrcyB1c2luZyBhCitgZ21haWwuY29tYCBlbWFpbCBhZGRyZXNzIC0gYSBub3QtdmVyeS1wcmVjaXNlIGd1ZXNzIGF0IHdobyBtYXkgYmUgd29ya2luZyBvbgorR2l0IGFzIGEgaG9iYnkuIFNpbmNlIHdlJ3JlIGNoZWNraW5nIHRoZSBhdXRob3IsIHdoaWNoIGlzIGEgc3BlY2lmaWMgbGluZSBpbiB0aGUKK2hlYWRlciwgd2UnbGwgdXNlIHRoZSBgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgaGVscGVyLiBXZSBjYW4gdXNlCit0aGUgYGVudW0gZ3JlcF9oZWFkZXJfZmllbGRgIHRvIGluZGljYXRlIHdoaWNoIHBhcnQgb2YgdGhlIGNvbW1pdCBoZWFkZXIgd2Ugd2FudAordG8gc2VhcmNoLgorCitJbiBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAsIGFkZCB5b3VyIGZpbHRlciBsaW5lOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigmcmV2LT5ncmVwX2ZpbHRlciwgR1JFUF9IRUFERVJfQVVUSE9SLAorCQkiZ21haWwiKTsKKwljb21waWxlX2dyZXBfcGF0dGVybnMoJnJldi0+Z3JlcF9maWx0ZXIpOworCisJLi4uCit9CistLS0tCisKK2BhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigpYCBhZGRzIHlvdXIgbmV3ICJnbWFpbCIgcGF0dGVybiB0byBgcmV2X2luZm9gLCBidXQKK2l0IHdvbid0IHdvcmsgdW5sZXNzIHdlIGNvbXBpbGUgaXQgd2l0aCBgY29tcGlsZV9ncmVwX3BhdHRlcm5zKClgLgorCitOT1RFOiBJZiB5b3UgYXJlIHVzaW5nIGBzZXR1cF9yZXZpc2lvbnMoKWAgKGZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHBhc3NpbmcgYQorYHNldHVwX3JldmlzaW9uX29wdGAgaW5zdGVhZCBvZiB1c2luZyBgYWRkX2hlYWRfdG9fcGVuZGluZygpYCksIHlvdSBkb24ndCBuZWVkCit0byBjYWxsIGBjb21waWxlX2dyZXBfcGF0dGVybnMoKWAgYmVjYXVzZSBgc2V0dXBfcmV2aXNpb25zKClgIGNhbGxzIGl0IGZvciB5b3UuCisKK05PVEU6IFdlIGNvdWxkIGFkZCB0aGUgc2FtZSBmaWx0ZXIgdmlhIHRoZSBgYXBwZW5kX2dyZXBfcGF0dGVybigpYCBoZWxwZXIgaWYgd2UKK3dhbnRlZCB0bywgYnV0IGBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigpYCBhZGRzIHRoZSBgZW51bSBncmVwX2NvbnRleHRgIGFuZAorYGVudW0gZ3JlcF9wYXRfdG9rZW5gIGZvciB1cy4KKworPT09IENoYW5naW5nIHRoZSBPcmRlcgorCitUaGVyZSBhcmUgYSBmZXcgd2F5cyB0aGF0IHdlIGNhbiBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBjb21taXRzIGR1cmluZyBhCityZXZpc2lvbiB3YWxrLiBGaXJzdGx5LCB3ZSBjYW4gdXNlIHRoZSBgZW51bSByZXZfc29ydF9vcmRlcmAgdG8gY2hvb3NlIGZyb20gc29tZQordHlwaWNhbCBvcmRlcmluZ3MuCisKK2B0b3BvX29yZGVyYCBpcyB0aGUgc2FtZSBhcyBgZ2l0IGxvZyAtLXRvcG8tb3JkZXJgOiB3ZSBhdm9pZCBzaG93aW5nIGEgcGFyZW50CitiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gc2hvd24sIGFuZCB3ZSBhdm9pZCBtaXhpbmcgY29tbWl0cyB3aGljaAorYXJlIGluIGRpZmZlcmVudCBsaW5lcyBvZiBoaXN0b3J5LiAoYGdpdCBoZWxwIGxvZ2AncyBzZWN0aW9uIG9uIGAtLXRvcG8tb3JkZXJgCitoYXMgYSB2ZXJ5IG5pY2UgZGlhZ3JhbSB0byBpbGx1c3RyYXRlIHRoaXMuKQorCitMZXQncyBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gd2UgcnVuIHdpdGggYFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFYCBhcyBvcHBvc2VkIHRvCitgUkVWX1NPUlRfQllfQVVUSE9SX0RBVEVgLiBBZGQgdGhlIGZvbGxvd2luZzoKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJcmV2LT50b3BvX29yZGVyID0gMTsKKwlyZXYtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9DT01NSVRfREFURTsKKworCS4uLgorfQorLS0tLQorCitMZXQncyBvdXRwdXQgdGhpcyBpbnRvIGEgZmlsZSBzbyB3ZSBjYW4gZWFzaWx5IGRpZmYgaXQgd2l0aCB0aGUgd2FsayBzb3J0ZWQgYnkKK2F1dGhvciBkYXRlLgorCistLS0tCiskIG1ha2UKKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbiA+IGNvbW1pdC1kYXRlLnR4dAorLS0tLQorCitUaGVuLCBsZXQncyBzb3J0IGJ5IGF1dGhvciBkYXRlIGFuZCBydW4gaXQgYWdhaW4uCisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+dG9wb19vcmRlciA9IDE7CisJcmV2LT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEU7CisKKwkuLi4KK30KKy0tLS0KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4gPiBhdXRob3ItZGF0ZS50eHQKKy0tLS0KKworRmluYWxseSwgY29tcGFyZSB0aGUgdHdvLiBUaGlzIGlzIGEgbGl0dGxlIGxlc3MgaGVscGZ1bCB3aXRob3V0IG9iamVjdCBuYW1lcyBvcgorZGF0ZXMsIGJ1dCBob3BlZnVsbHkgd2UgZ2V0IHRoZSBpZGVhLgorCistLS0tCiskIGRpZmYgLXUgY29tbWl0LWRhdGUudHh0IGF1dGhvci1kYXRlLnR4dAorLS0tLQorCitUaGlzIGRpc3BsYXkgaW5kaWNhdGVzIHRoYXQgY29tbWl0cyBjYW4gYmUgcmVvcmRlcmVkIGFmdGVyIHRoZXkncmUgd3JpdHRlbiwgZm9yCitleGFtcGxlIHdpdGggYGdpdCByZWJhc2VgLgorCitMZXQncyB0cnkgb25lIG1vcmUgcmVvcmRlcmluZyBvZiBjb21taXRzLiBgcmV2X2luZm9gIGV4cG9zZXMgYSBgcmV2ZXJzZWAgZmxhZy4KK1NldCB0aGF0IGZsYWcgc29tZXdoZXJlIGluc2lkZSBvZiBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQlzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+cmV2ZXJzZSA9IDE7CisKKwkuLi4KK30KKy0tLS0KKworUnVuIHlvdXIgd2FsayBhZ2FpbiBhbmQgbm90ZSB0aGUgZGlmZmVyZW5jZSBpbiBvcmRlci4gKElmIHlvdSByZW1vdmUgdGhlIGdyZXAKK3BhdHRlcm4sIHlvdSBzaG91bGQgc2VlIHRoZSBsYXN0IGNvbW1pdCB0aGlzIGNhbGwgZ2l2ZXMgeW91IGFzIHlvdXIgY3VycmVudAorSEVBRC4pCisKKz09IEJhc2ljIE9iamVjdCBXYWxrCisKK1NvIGZhciB3ZSd2ZSBiZWVuIHdhbGtpbmcgb25seSBjb21taXRzLiBCdXQgR2l0IGhhcyBtb3JlIHR5cGVzIG9mIG9iamVjdHMgdGhhbgordGhhdCEgTGV0J3Mgc2VlIGlmIHdlIGNhbiB3YWxrIF9hbGxfIG9iamVjdHMsIGFuZCBmaW5kIG91dCBzb21lIGluZm9ybWF0aW9uCithYm91dCBlYWNoIG9uZS4KKworV2UgY2FuIGJhc2Ugb3VyIHdvcmsgb24gYW4gZXhhbXBsZS4gYGdpdCBwYWNrLW9iamVjdHNgIHByZXBhcmVzIGFsbCBraW5kcyBvZgorb2JqZWN0cyBmb3IgcGFja2luZyBpbnRvIGEgYml0bWFwIG9yIHBhY2tmaWxlLiBUaGUgd29yayB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorcmVzaWRlcyBpbiBgYnVpbHRpbnMvcGFjay1vYmplY3RzLmM6Z2V0X29iamVjdF9saXN0KClgOyBleGFtaW5hdGlvbiBvZiB0aGF0CitmdW5jdGlvbiBzaG93cyB0aGF0IHRoZSBhbGwtb2JqZWN0IHdhbGsgaXMgYmVpbmcgcGVyZm9ybWVkIGJ5CitgdHJhdmVyc2VfY29tbWl0X2xpc3QoKWAgb3IgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLiBUaG9zZSB0d28KK2Z1bmN0aW9ucyByZXNpZGUgaW4gYGxpc3Qtb2JqZWN0cy5jYDsgZXhhbWluaW5nIHRoZSBzb3VyY2Ugc2hvd3MgdGhhdCwgZGVzcGl0ZQordGhlIG5hbWUsIHRoZXNlIGZ1bmN0aW9ucyB0cmF2ZXJzZSBhbGwga2luZHMgb2Ygb2JqZWN0cy4gTGV0J3MgaGF2ZSBhIGxvb2sgYXQKK3RoZSBhcmd1bWVudHMgdG8gYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aGUKK2FyZ3VtZW50cyB0byB0aGUgdW5maWx0ZXJlZCB2ZXJzaW9uLgorCistIGBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9uc2A6IFRoaXMgaXMgYSBzdHJ1Y3Qgd2hpY2gKKyAgc3RvcmVzIGEgZmlsdGVyLXNwZWMgYXMgb3V0bGluZWQgaW4gYERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHRgLgorLSBgc3RydWN0IHJldl9pbmZvICpyZXZzYDogVGhpcyBpcyB0aGUgYHJldl9pbmZvYCB1c2VkIGZvciB0aGUgd2Fsay4KKy0gYHNob3dfY29tbWl0X2ZuIHNob3dfY29tbWl0YDogQSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIGVhY2gKKyAgaW5kaXZpZHVhbCBjb21taXQgb2JqZWN0LgorLSBgc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3RgOiBBIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZWFjaAorICBub24tY29tbWl0IG9iamVjdCAoc28gZWFjaCBibG9iLCB0cmVlLCBvciB0YWcpLgorLSBgdm9pZCAqc2hvd19kYXRhYDogQSBjb250ZXh0IGJ1ZmZlciB3aGljaCBpcyBwYXNzZWQgaW4gdHVybiB0byBgc2hvd19jb21taXRgCisgIGFuZCBgc2hvd19vYmplY3RgLgorLSBgc3RydWN0IG9pZHNldCAqb21pdHRlZGA6IEEgbGlua2VkLWxpc3Qgb2Ygb2JqZWN0IElEcyB3aGljaCB0aGUgcHJvdmlkZWQKKyAgZmlsdGVyIGNhdXNlZCB0byBiZSBvbWl0dGVkLgorCitJdCBsb29rcyBsaWtlIHRoaXMgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgIHVzZXMgY2FsbGJhY2tzIHdlIHByb3ZpZGUKK2luc3RlYWQgb2YgbmVlZGluZyB1cyB0byBjYWxsIGl0IHJlcGVhdGVkbHkgb3Vyc2VsdmVzLiBDb29sISBMZXQncyBhZGQgdGhlCitjYWxsYmFja3MgZmlyc3QuCisKK0ZvciB0aGUgc2FrZSBvZiB0aGlzIHR1dG9yaWFsLCB3ZSdsbCBzaW1wbHkga2VlcCB0cmFjayBvZiBob3cgbWFueSBvZiBlYWNoIGtpbmQKK29mIG9iamVjdCB3ZSBmaW5kLiBBdCBmaWxlIHNjb3BlIGluIGBidWlsdGluL3dhbGtlbi5jYCBhZGQgdGhlIGZvbGxvd2luZwordHJhY2tpbmcgdmFyaWFibGVzOgorCistLS0tCitzdGF0aWMgaW50IGNvbW1pdF9jb3VudDsKK3N0YXRpYyBpbnQgdGFnX2NvdW50Oworc3RhdGljIGludCBibG9iX2NvdW50Oworc3RhdGljIGludCB0cmVlX2NvdW50OworLS0tLQorCitDb21taXRzIGFyZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IGNhbGxiYWNrIHRoYW4gb3RoZXIgb2JqZWN0czsgbGV0J3MgZG8gdGhhdAorb25lIGZpcnN0OgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY210LCB2b2lkICpidWYpCit7CisJY29tbWl0X2NvdW50Kys7Cit9CistLS0tCisKK1RoZSBgY210YCBhcmd1bWVudCBpcyBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gQnV0IGl0J3Mgd29ydGggbWVudGlvbmluZyB0aGF0Cit0aGUgYGJ1ZmAgYXJndW1lbnQgaXMgYWN0dWFsbHkgdGhlIGNvbnRleHQgYnVmZmVyIHRoYXQgd2UgY2FuIHByb3ZpZGUgdG8gdGhlCit0cmF2ZXJzYWwgY2FsbHMgLSBgc2hvd19kYXRhYCwgd2hpY2ggd2UgbWVudGlvbmVkIGEgbW9tZW50IGFnby4KKworU2luY2Ugd2UgaGF2ZSB0aGUgYHN0cnVjdCBjb21taXRgIG9iamVjdCwgd2UgY2FuIGxvb2sgYXQgYWxsIHRoZSBzYW1lIHBhcnRzIHRoYXQKK3dlIGxvb2tlZCBhdCBpbiBvdXIgZWFybGllciBjb21taXQtb25seSB3YWxrLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyB0dXRvcmlhbCwKK3Rob3VnaCwgd2UnbGwganVzdCBpbmNyZW1lbnQgdGhlIGNvbW1pdCBjb3VudGVyIGFuZCBtb3ZlIG9uLgorCitUaGUgY2FsbGJhY2sgZm9yIG5vbi1jb21taXRzIGlzIGEgbGl0dGxlIGRpZmZlcmVudCwgYXMgd2UnbGwgbmVlZCB0byBjaGVjaword2hpY2gga2luZCBvZiBvYmplY3Qgd2UncmUgZGVhbGluZyB3aXRoOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpzdHIsIHZvaWQgKmJ1ZikKK3sKKwlzd2l0Y2ggKG9iai0+dHlwZSkgeworCWNhc2UgT0JKX1RSRUU6CisJCXRyZWVfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJYmxvYl9jb3VudCsrOworCQlicmVhazsKKwljYXNlIE9CSl9UQUc6CisJCXRhZ19jb3VudCsrOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJCUJVRygidW5leHBlY3RlZCBjb21taXQgb2JqZWN0IGluIHdhbGtlbl9zaG93X29iamVjdFxuIik7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmV4cGVjdGVkIG9iamVjdCB0eXBlICVzIGluIHdhbGtlbl9zaG93X29iamVjdFxuIiwKKwkJCXR5cGVfbmFtZShvYmotPnR5cGUpKTsKKwl9Cit9CistLS0tCisKK0FnYWluLCBgb2JqYCBpcyBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSwgYW5kIHdlIGNhbiBndWVzcyB0aGF0IGBidWZgIGlzIHRoZSBzYW1lCitjb250ZXh0IHBvaW50ZXIgdGhhdCBgd2Fsa2VuX3Nob3dfY29tbWl0KClgIHJlY2VpdmVzOiB0aGUgYHNob3dfZGF0YWAgYXJndW1lbnQKK3RvIGB0cmF2ZXJzZV9jb21taXRfbGlzdCgpYCBhbmQgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLiBGaW5hbGx5LAorYHN0cmAgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIG9iamVjdCwgd2hpY2ggZW5kcyB1cCBiZWluZyBzb21ldGhpbmcgbGlrZQorYGZvby50eHRgIChibG9iKSwgYGJhci9iYXpgICh0cmVlKSwgb3IgYHYxLjIuM2AgKHRhZykuCisKK1RvIGhlbHAgYXNzdXJlIHVzIHRoYXQgd2UgYXJlbid0IGRvdWJsZS1jb3VudGluZyBjb21taXRzLCB3ZSdsbCBpbmNsdWRlIHNvbWUKK2NvbXBsYWluaW5nIGlmIGEgY29tbWl0IG9iamVjdCBpcyByb3V0ZWQgdGhyb3VnaCBvdXIgbm9uLWNvbW1pdCBjYWxsYmFjazsgd2UnbGwKK2Fsc28gY29tcGxhaW4gaWYgd2Ugc2VlIGFuIGludmFsaWQgb2JqZWN0IHR5cGUuIFNpbmNlIHRob3NlIHR3byBjYXNlcyBzaG91bGQgYmUKK3VucmVhY2hhYmxlLCBhbmQgd291bGQgb25seSBjaGFuZ2UgaW4gdGhlIGV2ZW50IG9mIGEgc2VtYW50aWMgY2hhbmdlIHRvIHRoZSBHaXQKK2NvZGViYXNlLCB3ZSBjb21wbGFpbiBieSB1c2luZyBgQlVHKClgIC0gd2hpY2ggaXMgYSBzaWduYWwgdG8gYSBkZXZlbG9wZXIgdGhhdAordGhlIGNoYW5nZSB0aGV5IG1hZGUgY2F1c2VkIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLCBhbmQgdGhlIHJlc3Qgb2YgdGhlCitjb2RlYmFzZSBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjaGFuZ2UuIGBCVUcoKWAgaXMgbm90IGludGVuZGVkCit0byBiZSBzZWVuIGJ5IHRoZSBwdWJsaWMsIHNvIGl0IGlzIG5vdCBsb2NhbGl6ZWQuCisKK091ciBtYWluIG9iamVjdCB3YWxrIGltcGxlbWVudGF0aW9uIGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gb3VyIGNvbW1pdAord2FsayBpbXBsZW1lbnRhdGlvbiwgc28gbGV0J3MgbWFrZSBhIG5ldyBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvYmplY3Qgd2Fsay4gV2UKK2NhbiBwZXJmb3JtIHNldHVwIHdoaWNoIGlzIGFwcGxpY2FibGUgdG8gYWxsIG9iamVjdHMgaGVyZSwgdG9vLCB0byBrZWVwIHNlcGFyYXRlCitmcm9tIHNldHVwIHdoaWNoIGlzIGFwcGxpY2FibGUgdG8gY29tbWl0LW9ubHkgd2Fsa3MuCisKK1dlJ2xsIHN0YXJ0IGJ5IGVuYWJsaW5nIGFsbCB0eXBlcyBvZiBvYmplY3RzIGluIHRoZSBgc3RydWN0IHJldl9pbmZvYC4gIFdlJ2xsCithbHNvIHR1cm4gb24gYHRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyYCwgd2hpY2ggbWVhbnMgdGhhdCB3ZSB3aWxsIHdhbGsgYQorY29tbWl0J3MgdHJlZSBhbmQgZXZlcnl0aGluZyBpdCBwb2ludHMgdG8gaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgZmluZCBlYWNoIGNvbW1pdCwKK2FzIG9wcG9zZWQgdG8gd2FpdGluZyBmb3IgdGhlIGVuZCBhbmQgd2Fsa2luZyB0aHJvdWdoIGFsbCB0cmVlcyBhZnRlciB0aGUgY29tbWl0CitoaXN0b3J5IGhhcyBiZWVuIGRpc2NvdmVyZWQuIFdpdGggdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIGNvbmZpZ3VyZWQsIHdlIGFyZQorcmVhZHkgdG8gY2FsbCBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgLgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJcmV2LT50cmVlX29iamVjdHMgPSAxOworCXJldi0+YmxvYl9vYmplY3RzID0gMTsKKwlyZXYtPnRhZ19vYmplY3RzID0gMTsKKwlyZXYtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyID0gMTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJY29tbWl0X2NvdW50ID0gMDsKKwl0YWdfY291bnQgPSAwOworCWJsb2JfY291bnQgPSAwOworCXRyZWVfY291bnQgPSAwOworLS0tLQorCitMZXQncyBzdGFydCBieSBjYWxsaW5nIGp1c3QgdGhlIHVuZmlsdGVyZWQgd2FsayBhbmQgcmVwb3J0aW5nIG91ciBjb3VudHMuCitDb21wbGV0ZSB5b3VyIGltcGxlbWVudGF0aW9uIG9mIGB3YWxrZW5fb2JqZWN0X3dhbGsoKWA6CisKKy0tLS0KKwl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXYsIHdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMKTsKKworCXByaW50ZigiY29tbWl0cyAlZFxuYmxvYnMgJWRcbnRhZ3MgJWRcbnRyZWVzICVkXG4iLCBjb21taXRfY291bnQsCisJCWJsb2JfY291bnQsIHRhZ19jb3VudCwgdHJlZV9jb3VudCk7Cit9CistLS0tCisKK05PVEU6IFRoaXMgb3V0cHV0IGlzIGludGVuZGVkIHRvIGJlIG1hY2hpbmUtcGFyc2VkLiBUaGVyZWZvcmUsIHdlIGFyZSBub3QKK3NlbmRpbmcgaXQgdG8gYHRyYWNlX3ByaW50ZigpYCwgYW5kIHdlIGFyZSBub3QgbG9jYWxpemluZyBpdCAtIHdlIG5lZWQgc2NyaXB0cwordG8gYmUgYWJsZSB0byBjb3VudCBvbiB0aGUgZm9ybWF0dGluZyB0byBiZSBleGFjdGx5IHRoZSB3YXkgaXQgaXMgc2hvd24gaGVyZS4KK0lmIHdlIHdlcmUgaW50ZW5kaW5nIHRoaXMgb3V0cHV0IHRvIGJlIHJlYWQgYnkgaHVtYW5zLCB3ZSB3b3VsZCBuZWVkIHRvIGxvY2FsaXplCitpdCB3aXRoIGBfKClgLgorCitGaW5hbGx5LCB3ZSdsbCBhc2sgYGNtZF93YWxrZW4oKWAgdG8gdXNlIHRoZSBvYmplY3Qgd2FsayBpbnN0ZWFkLiBEaXNjdXNzaW5nCitjb21tYW5kIGxpbmUgb3B0aW9ucyBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgdHV0b3JpYWwsIHNvIHdlJ2xsIGp1c3QgaGFyZGNvZGUKK2EgYnJhbmNoIHdlIGNhbiBjaGFuZ2UgYXQgY29tcGlsZSB0aW1lLiBXaGVyZSB5b3UgY2FsbCBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAKK2FuZCBgd2Fsa2VuX2NvbW1pdF93YWxrKClgLCBpbnN0ZWFkIGJyYW5jaCBsaWtlIHNvOgorCistLS0tCisJaWYgKDEpIHsKKwkJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwkJd2Fsa2VuX29iamVjdF93YWxrKCZyZXYpOworCX0gZWxzZSB7CisJCWZpbmFsX3Jldl9pbmZvX3NldHVwKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldik7CisJCXdhbGtlbl9jb21taXRfd2FsaygmcmV2KTsKKwl9CistLS0tCisKK05PVEU6IEZvciBzaW1wbGljaXR5LCB3ZSd2ZSBhdm9pZGVkIGFsbCB0aGUgZmlsdGVycyBhbmQgc29ydHMgd2UgYXBwbGllZCBpbgorYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgIGFuZCBzaW1wbHkgYWRkZWQgYEhFQURgIHRvIG91ciBwZW5kaW5nIHF1ZXVlLiBJZiB5b3UKK3dhbnQsIHlvdSBjYW4gY2VydGFpbmx5IHVzZSB0aGUgZmlsdGVycyB3ZSBhZGRlZCBiZWZvcmUgYnkgbW92aW5nCitgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgb3V0IG9mIHRoZSBjb25kaXRpb25hbCBhbmQgcmVtb3ZpbmcgdGhlIGNhbGwgdG8KK2BhZGRfaGVhZF90b19wZW5kaW5nKClgLgorCitOb3cgd2UgY2FuIHRyeSB0byBydW4gb3VyIGNvbW1hbmQhIEl0IHNob3VsZCB0YWtlIG5vdGljZWFibHkgbG9uZ2VyIHRoYW4gdGhlCitjb21taXQgd2FsaywgYnV0IGFuIGV4YW1pbmF0aW9uIG9mIHRoZSBvdXRwdXQgd2lsbCBnaXZlIHlvdSBhbiBpZGVhIHdoeS4gWW91cgorb3V0cHV0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhpcyBleGFtcGxlLCBidXQgd2l0aCBkaWZmZXJlbnQgY291bnRzOgorCistLS0tCitPYmplY3Qgd2FsayBjb21wbGV0ZWQuIEZvdW5kIDU1NzMzIGNvbW1pdHMsIDEwMDI3NCBibG9icywgMCB0YWdzLCBhbmQgMTA0MjEwIHRyZWVzLgorLS0tLQorCitUaGlzIG1ha2VzIHNlbnNlLiBXZSBoYXZlIG1vcmUgdHJlZXMgdGhhbiBjb21taXRzIGJlY2F1c2UgdGhlIEdpdCBwcm9qZWN0IGhhcworbG90cyBvZiBzdWJkaXJlY3RvcmllcyB3aGljaCBjYW4gY2hhbmdlLCBwbHVzIGF0IGxlYXN0IG9uZSB0cmVlIHBlciBjb21taXQuIFdlCitoYXZlIG5vIHRhZ3MgYmVjYXVzZSB3ZSBzdGFydGVkIG9uIGEgY29tbWl0IChgSEVBRGApIGFuZCB3aGlsZSB0YWdzIGNhbiBwb2ludCB0bworY29tbWl0cywgY29tbWl0cyBjYW4ndCBwb2ludCB0byB0YWdzLgorCitOT1RFOiBZb3Ugd2lsbCBoYXZlIGRpZmZlcmVudCBjb3VudHMgd2hlbiB5b3UgcnVuIHRoaXMgeW91cnNlbGYhIFRoZSBudW1iZXIgb2YKK29iamVjdHMgZ3Jvd3MgYWxvbmcgd2l0aCB0aGUgR2l0IHByb2plY3QuCisKKz09PSBBZGRpbmcgYSBGaWx0ZXIKKworVGhlcmUgYXJlIGEgaGFuZGZ1bCBvZiBmaWx0ZXJzIHRoYXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBvYmplY3Qgd2FsayBsYWlkIG91dCBpbgorYERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHRgLiBUaGVzZSBmaWx0ZXJzIGFyZSB0eXBpY2FsbHkgdXNlZnVsIGZvcgorb3BlcmF0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIHBhY2tmaWxlcyBvciBwZXJmb3JtaW5nIGEgcGFydGlhbCBjbG9uZS4gVGhleSBhcmUKK2RlZmluZWQgaW4gYGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oYC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHR1dG9yaWFsIHdlCit3aWxsIHVzZSB0aGUgInRyZWU6MSIgZmlsdGVyLCB3aGljaCBjYXVzZXMgdGhlIHdhbGsgdG8gb21pdCBhbGwgdHJlZXMgYW5kIGJsb2JzCit3aGljaCBhcmUgbm90IGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgY29tbWl0IGluCitgcGVuZGluZ2Agd2hlbiB0aGUgd2FsayBiZWdpbnMuIChgcGVuZGluZ2AgaXMgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCBuZWVkIHRvCitiZSB0cmF2ZXJzZWQgZHVyaW5nIGEgd2FsazsgeW91IGNhbiBpbWFnaW5lIGEgYnJlYWR0aC1maXJzdCB0cmVlIHRyYXZlcnNhbCB0bworaGVscCB1bmRlcnN0YW5kLiBJbiBvdXIgY2FzZSwgdGhhdCBtZWFucyB3ZSBvbWl0IHRyZWVzIGFuZCBibG9icyBub3QgZGlyZWN0bHkKK3JlZmVyZW5jZWQgYnkgYEhFQURgIG9yIGBIRUFEYCdzIGhpc3RvcnksIGJlY2F1c2Ugd2UgYmVnaW4gdGhlIHdhbGsgd2l0aCBvbmx5CitgSEVBRGAgaW4gdGhlIGBwZW5kaW5nYCBsaXN0LikKKworRmlyc3QsIHdlJ2xsIG5lZWQgdG8gYCNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaGAiIGFuZCBzZXQgdXAgdGhlCitgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uc2AgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24uCisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9vYmplY3Rfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zID0ge307CisKKwkuLi4KKy0tLS0KKworRm9yIG5vdywgd2UgYXJlIG5vdCBnb2luZyB0byB0cmFjayB0aGUgb21pdHRlZCBvYmplY3RzLCBzbyB3ZSdsbCByZXBsYWNlIHRob3NlCitwYXJhbWV0ZXJzIHdpdGggYE5VTExgLiBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgd2UnbGwgYWRkIGEgc2ltcGxlCitidWlsZC10aW1lIGJyYW5jaCB0byB1c2Ugb3VyIGZpbHRlciBvciBub3QuIFJlcGxhY2UgdGhlIGxpbmUgY2FsbGluZworYHRyYXZlcnNlX2NvbW1pdF9saXN0KClgIHdpdGggdGhlIGZvbGxvd2luZywgd2hpY2ggd2lsbCByZW1pbmQgdXMgd2hpY2gga2luZCBvZgord2FsayB3ZSd2ZSBqdXN0IHBlcmZvcm1lZDoKKworLS0tLQorCWlmICgwKSB7CisJCS8qIFVuZmlsdGVyZWQ6ICovCisJCXRyYWNlX3ByaW50ZihfKCJVbmZpbHRlcmVkIG9iamVjdCB3YWxrLlxuIikpOworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXYsIHdhbGtlbl9zaG93X2NvbW1pdCwKKwkJCQl3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwpOworCX0gZWxzZSB7CisJCXRyYWNlX3ByaW50ZigKKwkJCV8oIkZpbHRlcmVkIG9iamVjdCB3YWxrIHdpdGggZmlsdGVyc3BlYyAndHJlZToxJy5cbiIpKTsKKwkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmZmlsdGVyX29wdGlvbnMsICJ0cmVlOjEiKTsKKworCQl0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgmZmlsdGVyX29wdGlvbnMsIHJldiwKKwkJCXdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMLCBOVUxMKTsKKwl9CistLS0tCisKK2BzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zYCBpcyB1c3VhbGx5IGJ1aWx0IGRpcmVjdGx5IGZyb20gYSBjb21tYW5kCitsaW5lIGFyZ3VtZW50LCBzbyB0aGUgbW9kdWxlIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGJ1aWxkIG9uZSBmcm9tIGEgc3RyaW5nLgorRXZlbiB0aG91Z2ggd2UgYXJlbid0IHRha2luZyB1c2VyIGlucHV0IHJpZ2h0IG5vdywgd2UgY2FuIHN0aWxsIGJ1aWxkIG9uZSB3aXRoCithIGhhcmRjb2RlZCBzdHJpbmcgdXNpbmcgYHBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoKWAuCisKK1dpdGggdGhlIGZpbHRlciBzcGVjICJ0cmVlOjEiLCB3ZSBhcmUgZXhwZWN0aW5nIHRvIHNlZSBfb25seV8gdGhlIHJvb3QgdHJlZSBmb3IKK2VhY2ggY29tbWl0OyB0aGVyZWZvcmUsIHRoZSB0cmVlIG9iamVjdCBjb3VudCBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCit0aGUgbnVtYmVyIG9mIGNvbW1pdHMuIChGb3IgYW4gZXhhbXBsZSBvZiB3aHkgdGhhdCdzIHRydWU6IGBnaXQgY29tbWl0IC0tcmV2ZXJ0YAorcG9pbnRzIHRvIHRoZSBzYW1lIHRyZWUgb2JqZWN0IGFzIGl0cyBncmFuZHBhcmVudC4pCisKKz09PSBDb3VudGluZyBPbWl0dGVkIE9iamVjdHMKKworV2UgYWxzbyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGVudW1lcmF0ZSBhbGwgb2JqZWN0cyB3aGljaCB3ZXJlIG9taXR0ZWQgYnkgYQorZmlsdGVyLCBsaWtlIHdpdGggYGdpdCBsb2cgLS1maWx0ZXI9PHNwZWM+IC0tZmlsdGVyLXByaW50LW9taXR0ZWRgLiBBc2tpbmcKK2B0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB0byBwb3B1bGF0ZSB0aGUgYG9taXR0ZWRgIGxpc3QgbWVhbnMgdGhhdCBvdXIKK29iamVjdCB3YWxrIGRvZXMgbm90IHBlcmZvcm0gYW55IGJldHRlciB0aGFuIGFuIHVuZmlsdGVyZWQgb2JqZWN0IHdhbGs7IGFsbAorcmVhY2hhYmxlIG9iamVjdHMgYXJlIHdhbGtlZCBpbiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgbGlzdC4KKworRmlyc3QsIGFkZCB0aGUgYHN0cnVjdCBvaWRzZXRgIGFuZCByZWxhdGVkIGl0ZW1zIHdlIHdpbGwgdXNlIHRvIGl0ZXJhdGUgaXQ6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9vYmplY3Rfd2FsaygKKwkuLi4KKworCXN0cnVjdCBvaWRzZXQgb21pdHRlZDsKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgb2l0OworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IE5VTEw7CisJaW50IG9taXR0ZWRfY291bnQgPSAwOworCW9pZHNldF9pbml0KCZvbWl0dGVkLCAwKTsKKworCS4uLgorLS0tLQorCitNb2RpZnkgdGhlIGNhbGwgdG8gYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgIHRvIGluY2x1ZGUgeW91ciBgb21pdHRlZGAKK29iamVjdDoKKworLS0tLQorCS4uLgorCisJCXRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKCZmaWx0ZXJfb3B0aW9ucywgcmV2LAorCQkJd2Fsa2VuX3Nob3dfY29tbWl0LCB3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwsICZvbWl0dGVkKTsKKworCS4uLgorLS0tLQorCitUaGVuLCBhZnRlciB5b3VyIHRyYXZlcnNhbCwgdGhlIGBvaWRzZXRgIHRyYXZlcnNhbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgorQ291bnQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBhbmQgbW9kaWZ5IHRoZSBwcmludCBzdGF0ZW1lbnQ6CisKKy0tLS0KKwkvKiBDb3VudCB0aGUgb21pdHRlZCBvYmplY3RzLiAqLworCW9pZHNldF9pdGVyX2luaXQoJm9taXR0ZWQsICZvaXQpOworCisJd2hpbGUgKChvaWQgPSBvaWRzZXRfaXRlcl9uZXh0KCZvaXQpKSkKKwkJb21pdHRlZF9jb3VudCsrOworCisJcHJpbnRmKCJjb21taXRzICVkXG5ibG9icyAlZFxudGFncyAlZFxudHJlZXMlZFxub21pdHRlZCAlZFxuIiwKKwkJY29tbWl0X2NvdW50LCBibG9iX2NvdW50LCB0YWdfY291bnQsIHRyZWVfY291bnQsIG9taXR0ZWRfY291bnQpOworLS0tLQorCitCeSBydW5uaW5nIHlvdXIgd2FsayB3aXRoIGFuZCB3aXRob3V0IHRoZSBmaWx0ZXIsIHlvdSBzaG91bGQgZmluZCB0aGF0IHRoZSB0b3RhbAorb2JqZWN0IGNvdW50IGluIGVhY2ggY2FzZSBpcyBpZGVudGljYWwuIFlvdSBjYW4gYWxzbyB0aW1lIGVhY2ggaW52b2NhdGlvbiBvZgordGhlIGB3YWxrZW5gIHN1YmNvbW1hbmQsIHdpdGggYW5kIHdpdGhvdXQgYG9taXR0ZWRgIGJlaW5nIHBhc3NlZCBpbiwgdG8gY29uZmlybQordG8geW91cnNlbGYgdGhlIHJ1bnRpbWUgaW1wYWN0IG9mIHRyYWNraW5nIGFsbCBvbWl0dGVkIG9iamVjdHMuCisKKz09PSBDaGFuZ2luZyB0aGUgT3JkZXIKKworRmluYWxseSwgbGV0J3MgZGVtb25zdHJhdGUgdGhhdCB5b3UgY2FuIGFsc28gcmVvcmRlciB3YWxrcyBvZiBhbGwgb2JqZWN0cywgbm90CitqdXN0IHdhbGtzIG9mIGNvbW1pdHMuIEZpcnN0LCB3ZSdsbCBtYWtlIG91ciBoYW5kbGVycyBjaGF0dGllciAtIG1vZGlmeQorYHdhbGtlbl9zaG93X2NvbW1pdCgpYCBhbmQgYHdhbGtlbl9zaG93X29iamVjdCgpYCB0byBwcmludCB0aGUgb2JqZWN0IGFzIHRoZXkKK2dvOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY210LCB2b2lkICpidWYpCit7CisJdHJhY2VfcHJpbnRmKCJjb21taXQ6ICVzXG4iLCBvaWRfdG9faGV4KCZjbXQtPm9iamVjdC5vaWQpKTsKKwljb21taXRfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc3RyLCB2b2lkICpidWYpCit7CisJdHJhY2VfcHJpbnRmKCIlczogJXNcbiIsIHR5cGVfbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCisJLi4uCit9CistLS0tCisKK05PVEU6IFNpbmNlIHdlIHdpbGwgYmUgZXhhbWluaW5nIHRoaXMgb3V0cHV0IGRpcmVjdGx5IGFzIGh1bWFucywgd2UnbGwgdXNlCitgdHJhY2VfcHJpbnRmKClgIGhlcmUuIEFkZGl0aW9uYWxseSwgc2luY2UgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50CitudW1iZXIgb2YgcHJpbnRlZCBsaW5lcywgdXNpbmcgYHRyYWNlX3ByaW50ZigpYCB3aWxsIGFsbG93IHVzIHRvIGVhc2lseSBzaWxlbmNlCit0aG9zZSBsaW5lcyB3aXRob3V0IGhhdmluZyB0byByZWNvbXBpbGUuCisKKyhMZWF2ZSB0aGUgY291bnRlciBpbmNyZW1lbnQgbG9naWMgaW4gcGxhY2UuKQorCitXaXRoIG9ubHkgdGhhdCBjaGFuZ2UsIHJ1biBhZ2FpbiAoYnV0IHNhdmUgeW91cnNlbGYgc29tZSBzY3JvbGxiYWNrKToKKworLS0tLQorJCBHSVRfVFJBQ0U9MSAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuIHwgaGVhZCAtbiAxMAorLS0tLQorCitUYWtlIGEgbG9vayBhdCB0aGUgdG9wIGNvbW1pdCB3aXRoIGBnaXQgc2hvd2AgYW5kIHRoZSBvYmplY3QgSUQgeW91IHByaW50ZWQ7IGl0CitzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCBvZiBgZ2l0IHNob3cgSEVBRGAuCisKK05leHQsIGxldCdzIGNoYW5nZSBhIHNldHRpbmcgb24gb3VyIGBzdHJ1Y3QgcmV2X2luZm9gIHdpdGhpbgorYHdhbGtlbl9vYmplY3Rfd2FsaygpYC4gRmluZCB3aGVyZSB5b3UncmUgY2hhbmdpbmcgdGhlIG90aGVyIHNldHRpbmdzIG9uIGByZXZgLAorc3VjaCBhcyBgcmV2LT50cmVlX29iamVjdHNgIGFuZCBgcmV2LT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcmAsIGFuZCBhZGQgdGhlCitgcmV2ZXJzZWAgc2V0dGluZyBhdCB0aGUgYm90dG9tOgorCistLS0tCisJLi4uCisKKwlyZXYtPnRyZWVfb2JqZWN0cyA9IDE7CisJcmV2LT5ibG9iX29iamVjdHMgPSAxOworCXJldi0+dGFnX29iamVjdHMgPSAxOworCXJldi0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXIgPSAxOworCXJldi0+cmV2ZXJzZSA9IDE7CisKKwkuLi4KKy0tLS0KKworTm93LCBydW4gYWdhaW4sIGJ1dCB0aGlzIHRpbWUsIGxldCdzIGdyYWIgdGhlIGxhc3QgaGFuZGZ1bCBvZiBvYmplY3RzIGluc3RlYWQKK29mIHRoZSBmaXJzdCBoYW5kZnVsOgorCistLS0tCiskIG1ha2UKKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMgZ2l0IHdhbGtlbiB8IHRhaWwgLW4gMTAKKy0tLS0KKworVGhlIGxhc3QgY29tbWl0IG9iamVjdCBnaXZlbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBPSUQgYXMgdGhlIG9uZSB3ZSBzYXcgYXQgdGhlCit0b3AgYmVmb3JlLCBhbmQgcnVubmluZyBgZ2l0IHNob3cgPG9pZD5gIHdpdGggdGhhdCBPSUQgc2hvdWxkIGdpdmUgeW91IGFnYWluCit0aGUgc2FtZSByZXN1bHRzIGFzIGBnaXQgc2hvdyBIRUFEYC4gRnVydGhlcm1vcmUsIGlmIHlvdSBydW4gYW5kIGV4YW1pbmUgdGhlCitmaXJzdCB0ZW4gbGluZXMgYWdhaW4gKHdpdGggYGhlYWRgIGluc3RlYWQgb2YgYHRhaWxgIGxpa2Ugd2UgZGlkIGJlZm9yZSBhcHBseWluZwordGhlIGByZXZlcnNlYCBzZXR0aW5nKSwgeW91IHNob3VsZCBzZWUgdGhhdCBub3cgdGhlIGZpcnN0IGNvbW1pdCBwcmludGVkIGlzIHRoZQoraW5pdGlhbCBjb21taXQsIGBlODNjNTE2M2AuCisKKz09IFdyYXBwaW5nIFVwCisKK0xldCdzIHJldmlldy4gSW4gdGhpcyB0dXRvcmlhbCwgd2U6CisKKy0gQnVpbHQgYSBjb21taXQgd2FsayBmcm9tIHRoZSBncm91bmQgdXAKKy0gRW5hYmxlZCBhIGdyZXAgZmlsdGVyIGZvciB0aGF0IGNvbW1pdCB3YWxrCistIENoYW5nZWQgdGhlIHNvcnQgb3JkZXIgb2YgdGhhdCBmaWx0ZXJlZCBjb21taXQgd2FsaworLSBCdWlsdCBhbiBvYmplY3Qgd2FsayAodGFncywgY29tbWl0cywgdHJlZXMsIGFuZCBibG9icykgZnJvbSB0aGUgZ3JvdW5kIHVwCistIExlYXJuZWQgaG93IHRvIGFkZCBhIGZpbHRlci1zcGVjIHRvIGFuIG9iamVjdCB3YWxrCistIENoYW5nZWQgdGhlIGRpc3BsYXkgb3JkZXIgb2YgdGhlIGZpbHRlcmVkIG9iamVjdCB3YWxrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0CmluZGV4IGRhZjRiZGIuLmQ2ZDQyZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0CkBAIC0yNTEsNyArMjUxLDcgQEAKICAgIHRoZSByZXBvc2l0b3J5IHdoZW4gdGhhdCBoYXBwZW5zLgogCiAKLSogQ3J1ZnRzIHJlbW92YWwKKyogQ3J1ZnQgcmVtb3ZhbAogCiAgLSBXZSB1c2VkIHRvIHNheSAib2xkIGNvbW1pdHMgYXJlIHJldHJpZXZhYmxlIHVzaW5nIHJlZmxvZyBhbmQKICAgICdtYXN0ZXJAe3llc3RlcmRheX0nIHN5bnRheCBhcyBsb25nIGFzIHlvdSBoYXZlbid0IHJ1bgpAQCAtMzc5LDcgKzM3OSw3IEBACiAgLSBUaGUgdmFsdWUgb2YgaTE4bi5jb21taXRlbmNvZGluZyBpbiB0aGUgb3JpZ2luYXRpbmcKICAgIHJlcG9zaXRvcnkgaXMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3Qgb24gdGhlICJlbmNvZGluZyIKICAgIGhlYWRlciwgaWYgaXQgaXMgbm90IFVURi04LiAgZ2l0LWxvZyBhbmQgZnJpZW5kcyBub3RpY2UgdGhpcywKLSAgIGFuZCByZWVuY29kZXMgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvZyBvdXRwdXQgZW5jb2Rpbmcgd2hlbgorICAgYW5kIHJlLWVuY29kZXMgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvZyBvdXRwdXQgZW5jb2Rpbmcgd2hlbgogICAgZGlzcGxheWluZywgaWYgdGhleSBhcmUgZGlmZmVyZW50LiAgVGhlIGxvZyBvdXRwdXQgZW5jb2RpbmcKICAgIGlzIGRldGVybWluZWQgYnkgImdpdCBsb2cgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IiwKICAgIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29uZmlndXJhdGlvbiwgb3IgaTE4bi5jb21taXRlbmNvZGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKaW5kZXggZDNhMmEzZS4uMzQ0MzMzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0CkBAIC0xMCw3ICsxMCw3IEBACiAKICAqICJnaXQgcHJ1bmUtcGFja2VkIiBnYXZlIHByb2dyZXNzIG91dHB1dCBldmVuIHdoZW4gaXRzIHN0YW5kYXJkIGVycm9yIGlzCiAgICBub3QgY29ubmVjdGVkIHRvIGEgdGVybWluYWw7IHRoaXMgY2F1c2VkIGNyb24gam9icyB0aGF0IHJ1biBpdCB0bwotICAgcHJvZHVjZSBjcnVmdHMuCisgICBwcm9kdWNlIGNydWZ0LgogCiAgKiAiZ2l0IHBhY2stb2JqZWN0cyAtLWFsbC1wcm9ncmVzcyIgaXMgYW4gb3B0aW9uIHRvIGFzayBwcm9ncmVzcyBvdXRwdXQKICAgIGZyb20gd3JpdGUtb2JqZWN0IHBoYXNlIF9pZl8gcHJvZ3Jlc3Mgb3V0cHV0IHdlcmUgdG8gYmUgcHJvZHVjZWQsIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQKaW5kZXggZmNiNDZjYS4uNzNlZDJiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0CkBAIC0zNCw3ICszNCw3IEBACiAgKiAiZ2l0IHN0YXR1cyIgaW4gMS43LjAgbGFja2VkIHRoZSBvcHRpbWl6YXRpb24gd2UgdXNlZCB0byBoYXZlIGluIDEuNi5YIHNlcmllcwogICAgdG8gc3BlZWQgdXAgc2Nhbm5pbmcgb2YgbGFyZ2Ugd29ya2luZyB0cmVlLgogCi0gKiAiZ2l0d2ViIiBkaWQgbm90IGRpYWdub3NlIHBhcnNpbmcgZXJyb3JzIHByb3Blcmx5IHdoaWxlIHJlYWRpbmcgdGlzIGNvbmZpZ3VyYXRpb24KKyAqICJnaXR3ZWIiIGRpZCBub3QgZGlhZ25vc2UgcGFyc2luZyBlcnJvcnMgcHJvcGVybHkgd2hpbGUgcmVhZGluZyBpdHMgY29uZmlndXJhdGlvbgogICAgZmlsZS4KIAogQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CmluZGV4IDMyNjY3MGQuLjU3NTk3ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CkBAIC03LDcgKzcsNyBAQAogICogVGhlIG1lc3NhZ2UgZmlsZSBmb3IgU3dlZGlzaCB0cmFuc2xhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgogCiAgKiBBIG5hbWUgdGFrZW4gZnJvbSBtYWlsbWFwIHdhcyBjb3BpZWQgaW50byBhbiBpbnRlcm5hbCBidWZmZXIKLSAgIGluY29ycmVjdGx5IGFuZCBjb3VsZCBvdmVydW4gdGhlIGJ1ZmZlciBpZiBpdCBpcyB0b28gbG9uZy4KKyAgIGluY29ycmVjdGx5IGFuZCBjb3VsZCBvdmVycnVuIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuCiAKICAqIEEgbWFsZm9ybWVkIGNvbW1pdCBvYmplY3QgdGhhdCBoYXMgYSBoZWFkZXIgbGluZSBjaG9tcGVkIGluIHRoZQogICAgbWlkZGxlIGNvdWxkIGtpbGwgZ2l0IHdpdGggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CmluZGV4IGVjZGE0MjcuLjRiODIyOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CkBAIC0yNSw3ICsyNSw3IEBACiAgICBpdHMgQWNjZXB0LUVuY29kaW5nIGhlYWRlci4KIAogICogImdpdCByZWNlaXZlLXBhY2siICh0aGUgY291bnRlcnBhcnQgdG8gImdpdCBwdXNoIikgZGlkIG5vdCBnaXZlCi0gICBwcm9ncmVzcyBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZyBvYmplY3RzIGl0IHJlY2VpdmVkIHRvIHRoZSBwdXNlcgorICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgdXNlcgogICAgd2hlbiBydW4gb3ZlciB0aGUgc21hcnQtaHR0cCBwcm90b2NvbC4KIAogICogImdpdCBzdGF0dXMiIGhvbm9yZWQgdGhlIGlnbm9yZT1kaXJ0eSBzZXR0aW5ncyBpbiAuZ2l0bW9kdWxlcyBidXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CmluZGV4IDljMDMzNTMuLjFkMjRlZGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4zLnR4dApAQCAtMjIsNyArMjIsNyBAQAogICogImdpdCBsb2cgLS1zdGRpbiBwYXRoIiB3aXRoIGFuIGlucHV0IHRoYXQgaGFzIGFkZGl0aW9uYWwgcGF0aHNwZWMKICAgIHVzZWQgdG8gY29ycnVwdCBtZW1vcnkuCiAKLSAqICJnaXQgc2VuZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIikgb3ZlciBzbWFsdC1IVFRQIHByb3RvY29sIGNvdWxkCisgKiAiZ2l0IHNlbmQtcGFjayIgKGhlbmNlICJnaXQgcHVzaCIpIG92ZXIgc21hcnQtSFRUUCBwcm90b2NvbCBjb3VsZAogICAgZGVhZGxvY2sgd2hlbiB0aGUgY2xpZW50IHNpZGUgcGFjay1vYmplY3QgZGllZCBlYXJseS4KIAogICogQ29tcHJlc3NlZCB0YXJiYWxsIGdpdHdlYiBnZW5lcmF0ZXMgdXNlZCB0byBiZSBtYWRlIHdpdGggdGhlIHRpbWVzdGFtcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dAppbmRleCA0Mzg4M2MxLi42M2Q2ZTRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dApAQCAtMjMzLDcgKzIzMyw3IEBACiAgICB0b2dldGhlciwgbWlzZGV0ZWN0ZWQgYnJhbmNoZXMuCiAKICAqICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IHRvICJnaXQgcHVzaCIpIGRpZCBub3QgZ2l2ZQotICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgcHVzZXIKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHVzZXIKICAgIHdoZW4gcnVuIG92ZXIgdGhlIHNtYXJ0LWh0dHAgcHJvdG9jb2wuCiAKICAqIFdoZW4geW91IG1pc3NwZWxsIHRoZSBjb21tYW5kIG5hbWUgeW91IGdpdmUgdG8gdGhlICJleGVjIiBhY3Rpb24gaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0CmluZGV4IDk2MDkwZWYuLmMyNTdiZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dApAQCAtMTUsNyArMTUsNyBAQAogICAgaW4gMS44LjQtcmMxKS4KIAogICogImdpdCByZWJhc2UgLWkiIGFuZCBvdGhlciBzY3JpcHRlZCBjb21tYW5kcyB3ZXJlIGZlZWRpbmcgYQotICAgcmFuZG9tLCBkYXRhIGRlcGVuZGFudCBlcnJvciBtZXNzYWdlIHRvICdlY2hvJyBhbmQgZXhwZWN0aW5nIGl0CisgICByYW5kb20sIGRhdGEgZGVwZW5kZW50IGVycm9yIG1lc3NhZ2UgdG8gJ2VjaG8nIGFuZCBleHBlY3RpbmcgaXQKICAgIHRvIGNvbWUgb3V0IGxpdGVyYWxseS4KIAogICogU2V0dGluZyB0aGUgInN1Ym1vZHVsZS48bmFtZT4ucGF0aCIgdmFyaWFibGUgdG8gdGhlIGVtcHR5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0CmluZGV4IGFjYzllYmIuLjBkZmIxN2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0CkBAIC0xMyw3ICsxMyw3IEBACiAgICB0aGV5IGFyZSBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgdGhlIGAtLW91dHB1dGAgb3B0aW9uLgogCiAgKiAiZ2l0IHBhY2stb2JqZWN0cyIgZm9yZ290IHRvIGRpc2FibGUgdGhlIGNvZGVwYXRoIHRvIGdlbmVyYXRlCi0gICBvYmplY3QgcmVjaGVhYmlsaXR5IGJpdG1hcCB3aGVuIGl0IG5lZWRzIHRvIHNwbGl0IHRoZSByZXN1bHRpbmcKKyAgIG9iamVjdCByZWFjaGFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZwogICAgcGFjay4KIAogICogImdpdHdlYiIgdXNlZCBkZXByZWNhdGVkIENHSTo6c3RhcnRmcm9tLCB3aGljaCB3YXMgcmVtb3ZlZCBmcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQKaW5kZXggZjRkYTI4YS4uMzc5MmI3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dApAQCAtNDc4LDcgKzQ3OCw3IEBACiAgKiBPbmUgcGFydCBvZiAiZ2l0IGFtIiBoYWQgYW4gb2RkYmFsbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBjYWxsZWQKICAgIHN0dWZmIGZyb20gb3V0c2lkZSAiaGlzIiBhcyBvcHBvc2VkIHRvIGNhbGxpbmcgd2hhdCB3ZSBoYXZlICJvdXJzIiwKICAgIHdoaWNoIHdhcyBub3QgZ2VuZGVyLW5ldXRyYWwgYW5kIGFsc28gaW5jb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YKLSAgIHRoZSBzeXN0ZW0gd2hlcmUgb3V0c2lkZSBzdHVmZiBpcyB1c3VhbGwgY2FsbGVkICJ0aGVpcnMiIGluCisgICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxseSBjYWxsZWQgInRoZWlycyIgaW4KICAgIGNvbnRyYXN0IHRvICJvdXJzIi4KIAogICogImdpdCBibGFtZSBmaWxlIiBhbGxvd2VkIHRoZSBsaW5lYWdlIG9mIGxpbmVzIGluIHRoZSB1bmNvbW1pdHRlZCwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dAppbmRleCBjNGQ0Mzk3Li5hYmJkMzMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjIudHh0CkBAIC04Niw3ICs4Niw3IEBACiAgICBieSByZWZ1c2luZyB0byBjaGVjayBvdXQgYSBicmFuY2ggdGhhdCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGluCiAgICBhbm90aGVyIHdvcmt0cmVlLiAgSG93ZXZlciwgdGhpcyBhbHNvIHByZXZlbnRlZCBjaGVja2luZyBvdXQgYQogICAgYnJhbmNoLCB3aGljaCBpcyBkZXNpZ25hdGVkIGFzIHRoZSBwcmltYXJ5IGJyYW5jaCBvZiBhIGJhcmUKLSAgIHJlb3BzaXRvcnksIGluIGEgd29ya3RyZWUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIGJhcmUKKyAgIHJlcG9zaXRvcnksIGluIGEgd29ya3RyZWUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIGJhcmUKICAgIHJlcG9zaXRvcnkuICBUaGUgY2hlY2sgaGFzIGJlZW4gY29ycmVjdGVkIHRvIGFsbG93IGl0LgogCiAgKiAiZ2l0IHJlYmFzZSIgaW1tZWRpYXRlbHkgYWZ0ZXIgImdpdCBjbG9uZSIgZmFpbGVkIHRvIGZpbmQgdGhlIGZvcmsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dAppbmRleCA5Y2QxNGM4Li43ZDM1Y2YxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgZnJvbSBhIHN1YmRpcmVjdG9yeSBuZXZlciB3b3JrZWQuIFRoaXMKICAgIGhhcyBiZWVuIGZpeGVkLgogCi0gKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aWxlIHA0IHBhdGhzIGltcG9ydGVkIGEgc2luZ2xlIGNoYW5nZWxpc3QKKyAqICJnaXQgcDQiIHRoYXQgdHJhY2tzIG11bHRpcGxlIHA0IHBhdGhzIGltcG9ydGVkIGEgc2luZ2xlIGNoYW5nZWxpc3QKICAgIHRoYXQgdG91Y2hlcyBmaWxlcyBpbiB0aGVzZSBtdWx0aXBsZSBwYXRocyBhcyBvbmUgY29tbWl0LCBmb2xsb3dlZAogICAgYnkgbWFueSBlbXB0eSBjb21taXRzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0CmluZGV4IGVmOGI5N2QuLmQyZjZhODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQKQEAgLTMxNSw3ICszMTUsNyBAQAogICAgImdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIiBmcm9tIGEgc3ViZGlyZWN0b3J5IG5ldmVyIHdvcmtlZC4gVGhpcwogICAgaGFzIGJlZW4gZml4ZWQuCiAKLSAqICJnaXQgcDQiIHRoYXQgdHJhY2tzIG11bHRpbGUgcDQgcGF0aHMgaW1wb3J0ZWQgYSBzaW5nbGUgY2hhbmdlbGlzdAorICogImdpdCBwNCIgdGhhdCB0cmFja3MgbXVsdGlwbGUgcDQgcGF0aHMgaW1wb3J0ZWQgYSBzaW5nbGUgY2hhbmdlbGlzdAogICAgdGhhdCB0b3VjaGVzIGZpbGVzIGluIHRoZXNlIG11bHRpcGxlIHBhdGhzIGFzIG9uZSBjb21taXQsIGZvbGxvd2VkCiAgICBieSBtYW55IGVtcHR5IGNvbW1pdHMuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQKaW5kZXggYWE5OWQ0Yi4uMmE0N2I0YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4wLnR4dApAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICBiZWVuIGNoYW5nZWQgdG8gZW5hYmxlICItLWRlY29yYXRlIi4KIAogICogVGhlIG91dHB1dCBmcm9tICJnaXQgc3RhdHVzIC0tc2hvcnQiIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHNob3cKLSAgIHZhcmlvdXMga2luZHMgb2YgZGlydHluZXNzIGluIHN1Ym1vZHVsZXMgZGlmZmVyZW50bHk7IGluc3RlYWQgb2YgdG8KKyAgIHZhcmlvdXMga2luZHMgb2YgZGlydGluZXNzIGluIHN1Ym1vZHVsZXMgZGlmZmVyZW50bHk7IGluc3RlYWQgb2YgdG8KICAgICJNIiBmb3IgbW9kaWZpZWQsICdtJyBhbmQgJz8nIGNhbiBiZSBzaG93biB0byBzaWduYWwgY2hhbmdlcyBvbmx5CiAgICB0byB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdWJtb2R1bGUgYnV0IG5vdCB0aGUgY29tbWl0IHRoYXQgaXMKICAgIGNoZWNrZWQgb3V0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0CmluZGV4IDVkNzZhZDUuLjM4NGU0ZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMy50eHQKQEAgLTI1LDcgKzI1LDcgQEAKICAqIFRoZSBjb2RlIHRvIHBpY2sgdXAgYW5kIGV4ZWN1dGUgY29tbWFuZCBhbGlhcyBkZWZpbml0aW9uIGZyb20gdGhlCiAgICBjb25maWd1cmF0aW9uIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmtpbmcgdHJlZSBhbmQKICAgIHRoZW4gY29tZSBiYWNrIHdoZW4gdGhlIGV4cGFuZGVkIGFsaWFzIHdhcyBleGVjdXRlZCwgd2hpY2ggd2FzCi0gICB1bm5lY2Vzc2FyaWx5bCBjb21wbGV4LiAgQXR0ZW1wdCB0byBzaW1wbGlmeSB0aGUgbG9naWMgYnkgdXNpbmcgdGhlCisgICB1bm5lY2Vzc2FyaWx5IGNvbXBsZXguICBBdHRlbXB0IHRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBieSB1c2luZyB0aGUKICAgIGVhcmx5LWNvbmZpZyBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCBjaGRpciBhcm91bmQuCiAKICAqICJnaXQgYWRkIC1wIiB3ZXJlIHVwZGF0ZWQgaW4gMi4xMiB0aW1lZnJhbWUgdG8gY29wZSB3aXRoIGN1c3RvbQpAQCAtMzUsNyArMzUsNyBAQAogICogRml4IGEgcmVjZW50IHJlZ3Jlc3Npb24gdG8gImdpdCByZWJhc2UgLWkiIGFuZCBhZGQgdGVzdHMgdGhhdCB3b3VsZAogICAgaGF2ZSBjYXVnaHQgaXQgYW5kIG90aGVycy4KIAotICogQW4gdW5hbGlnbmVkIDMyLWJpdCBhY2Nlc3MgaW4gcGFjay1iaXRtYXAgY29kZSBhaHMgYmVlbiBjb3JyZWN0ZWQuCisgKiBBbiB1bmFsaWduZWQgMzItYml0IGFjY2VzcyBpbiBwYWNrLWJpdG1hcCBjb2RlIGhhcyBiZWVuIGNvcnJlY3RlZC4KIAogICogVGlnaHRlbiBlcnJvciBjaGVja3MgZm9yIGludmFsaWQgImdpdCBhcHBseSIgaW5wdXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dAppbmRleCA0MjQ2YzY4Li4yNzExYTI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0CkBAIC0xNDEsNyArMTQxLDcgQEAKICAqIFNvbWUgcGxhdGZvcm1zIGhhdmUgdWxvbmcgdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGltZV90LCBhbmQgb3VyCiAgICBoaXN0b3JpY2FsIHVzZSBvZiB1bG9uZyBmb3IgdGltZXN0YW1wIHdvdWxkIG1lYW4gdGhleSBjYW5ub3QKICAgIHJlcHJlc2VudCBzb21lIHRpbWVzdGFtcCB0aGF0IHRoZSBwbGF0Zm9ybSBhbGxvd3MuICBJbnZlbnQgYQotICAgc2VwYXJhdGUgYW5kIGRlZGljYXRlZCB0aW1lc3RhbXBfdCAoc28gdGhhdCB3ZSBjYW4gZGlzdGluZ2l1aXNoCisgICBzZXBhcmF0ZSBhbmQgZGVkaWNhdGVkIHRpbWVzdGFtcF90IChzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaAogICAgdGltZXN0YW1wcyBhbmQgYSB2YW5pbGxhIHVsb25ncywgd2hpY2ggYWxvbmcgaXMgYWxyZWFkeSBhIGdvb2QKICAgIG1vdmUpLCBhbmQgdGhlbiBkZWNsYXJlIHVpbnRtYXhfdCBpcyB0aGUgdHlwZSB0byBiZSB1c2VkIGFzIHRoZQogICAgdGltZXN0YW1wX3QuCkBAIC00NDIsNyArNDQyLDcgQEAKICAqIFRoZSBjb2RlIHRvIHBpY2sgdXAgYW5kIGV4ZWN1dGUgY29tbWFuZCBhbGlhcyBkZWZpbml0aW9uIGZyb20gdGhlCiAgICBjb25maWd1cmF0aW9uIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmtpbmcgdHJlZSBhbmQKICAgIHRoZW4gY29tZSBiYWNrIHdoZW4gdGhlIGV4cGFuZGVkIGFsaWFzIHdhcyBleGVjdXRlZCwgd2hpY2ggd2FzCi0gICB1bm5lY2Vzc2FyaWx5bCBjb21wbGV4LiAgQXR0ZW1wdCB0byBzaW1wbGlmeSB0aGUgbG9naWMgYnkgdXNpbmcgdGhlCisgICB1bm5lY2Vzc2FyaWx5IGNvbXBsZXguICBBdHRlbXB0IHRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBieSB1c2luZyB0aGUKICAgIGVhcmx5LWNvbmZpZyBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCBjaGRpciBhcm91bmQuCiAKICAqIEZpeCBjb25maWd1cmF0aW9uIGNvZGVwYXRoIHRvIHBheSBwcm9wZXIgYXR0ZW50aW9uIHRvIGNvbW1vbmRpcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjAudHh0CmluZGV4IDBjODFjNTkuLmI0NzQ3ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQKQEAgLTQwNyw3ICs0MDcsNyBAQAogICAgKG1lcmdlIGVlZjNkZjVhOTMgYncvcGF0aHNwZWMtbWF0Y2gtc3VibW9kdWxlLWJvdW5kYXJ5IGxhdGVyIHRvIG1haW50KS4KIAogICogQW1lbmRpbmcgY29tbWl0cyBpbiBnaXQtZ3VpIGJyb2tlIHRoZSBhdXRob3IgbmFtZSB0aGF0IGlzIG5vbi1hc2NpaQotICAgZHVlIHRvIGluY29ycmVjdCBlbmNvbmRpbmcgY29udmVyc2lvbi4KKyAgIGR1ZSB0byBpbmNvcnJlY3QgZW5jb2RpbmcgY29udmVyc2lvbi4KIAogICogUmVjZW50IHVwZGF0ZSB0byB0aGUgc3VibW9kdWxlIGNvbmZpZ3VyYXRpb24gY29kZSBicm9rZSAiZGlmZi10cmVlIgogICAgYnkgYWNjaWRlbnRhbGx5IHN0b3BwaW5nIHRvIHJlYWQgZnJvbSB0aGUgaW5kZXggdXBmcm9udC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dAppbmRleCA2NGEwYmNiLi5mMDEyMWE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjMudHh0CkBAIC0yNCw3ICsyNCw3IEBACiAKICAqIFRoZSBodHRwIHRyYWNpbmcgY29kZSwgb2Z0ZW4gdXNlZCB0byBkZWJ1ZyBjb25uZWN0aW9uIGlzc3VlcywKICAgIGxlYXJuZWQgdG8gcmVkYWN0IHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBmcm9tIGl0cyBvdXRwdXQKLSAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJhYmxlLgorICAgc28gdGhhdCBpdCBjYW4gYmUgbW9yZSBzYWZlbHkgc2hhcmVhYmxlLgogCiAgKiBDcmFzaCBmaXggZm9yIGEgY29ybmVyIGNhc2Ugd2hlcmUgYW4gZXJyb3IgY29kZXBhdGggdHJpZWQgdG8gdW5sb2NrCiAgICB3aGF0IGl0IGRpZCBub3QgYWNxdWlyZSBsb2NrIG9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0CmluZGV4IGMyY2Y4OTEuLjhiMTdjMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMC50eHQKQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAgKiBUaGUgaHR0cCB0cmFjaW5nIGNvZGUsIG9mdGVuIHVzZWQgdG8gZGVidWcgY29ubmVjdGlvbiBpc3N1ZXMsCiAgICBsZWFybmVkIHRvIHJlZGFjdCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSBpdHMgb3V0cHV0Ci0gICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyYWJsZS4KKyAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJlYWJsZS4KICAgIChtZXJnZSA4YmExOGU2ZmE0IGp0L2h0dHAtcmVkYWN0LWNvb2tpZXMgbGF0ZXIgdG8gbWFpbnQpLgogCiAgKiBDcmFzaCBmaXggZm9yIGEgY29ybmVyIGNhc2Ugd2hlcmUgYW4gZXJyb3IgY29kZXBhdGggdHJpZWQgdG8gdW5sb2NrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQKaW5kZXggM2VhMjgwYy4uNmM4YTBlOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dApAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAobWVyZ2UgMDBhM2RhMmExMyBuZC9yZW1vdmUtaWdub3JlLWVudi1maWVsZCBsYXRlciB0byBtYWludCkuCiAKICAqIENvZGUgdG8gZmluZCB0aGUgbGVuZ3RoIHRvIHVuaXF1ZWx5IGFiYnJldmlhdGUgb2JqZWN0IG5hbWVzIGJhc2VkCi0gICBvbiBwYWNrZmlsZSBjb250ZW50LCB3aGljaCBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZHRpb24sIGhhcyBiZWVuCisgICBvbiBwYWNrZmlsZSBjb250ZW50LCB3aGljaCBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uLCBoYXMgYmVlbgogICAgb3B0aW1pemVkIHRvIHVzZSB0aGUgc2FtZSBmYW4tb3V0IHRhYmxlLgogCiAgKiBUaGUgbWVjaGFuaXNtIHRvIHVzZSBwYXJzZS1vcHRpb25zIEFQSSB0byBhdXRvbWF0ZSB0aGUgY29tbWFuZCBsaW5lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQKaW5kZXggYTA2Y2NmNi4uODkxYzc5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4wLnR4dApAQCAtMTA2LDcgKzEwNiw3IEBACiAgKiBUaGUgY29udmVyc2lvbiB0byBwYXNzICJ0aGVfcmVwb3NpdG9yeSIgYW5kIHRoZW4gImFfcmVwb3NpdG9yeSIKICAgIHRocm91Z2hvdXQgdGhlIG9iamVjdCBhY2Nlc3MgQVBJIGNvbnRpbnVlcy4KIAotICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1hdGljYWxseSBlbnVtZXJhdGUgdmFyaW91cworICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1tYXRpY2FsbHkgZW51bWVyYXRlIHZhcmlvdXMKICAgIHBpZWNlcyBvZiBkYXRhIHJlcXVpcmVkIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbiwgdGVhY2ggdGhlCiAgICBjb2RlYmFzZSB0byByZXBvcnQgdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKICAgIHN1YmNvbW1hbmRzIGNhcmUgYWJvdXQgdG8gaGVscCBjb21wbGV0ZSB0aGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0CmluZGV4IGU3MWZlM2QuLjNkZDdlNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMC50eHQKQEAgLTExOSw3ICsxMTksNyBAQAogICAgYWxpYXMgZXhwYW5zaW9uLgogCiAgKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiAiZ2l0IGdjIiBoYXMgYmVlbiB1cGRhdGVkIHRvIG1lbnRpb24gdGhhdCBpdAotICAgaXMgbm8gbG9uZ2VyIGxpbWl0ZWQgdG8gInBydW5pbmcgYXdheSBjcnVmdHMiIGJ1dCBhbHNvIHVwZGF0ZXMKKyAgIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvICJwcnVuaW5nIGF3YXkgY3J1ZnQiIGJ1dCBhbHNvIHVwZGF0ZXMKICAgIGFuY2lsbGFyeSBmaWxlcyBsaWtlIGNvbW1pdC1ncmFwaCBhcyBhIHBhcnQgb2YgcmVwb3NpdG9yeQogICAgb3B0aW1pemF0aW9uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiYjA3YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApAQCAtMCwwICsxLDE1NSBAQAorR2l0IDIuMjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSB0dXRvcmlhbCBvbiBvYmplY3QgZW51bWVyYXRpb24gaGFzIGJlZW4gYWRkZWQuCisKKyAqIFRoZSBicmFuY2ggZGVzY3JpcHRpb24gKCJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIpIGhhcyBiZWVuCisgICB1c2VkIHRvIGZpbGwgdGhlIGJvZHkgb2YgdGhlIGNvdmVyIGxldHRlcnMgYnkgdGhlIGZvcm1hdC1wYXRjaAorICAgY29tbWFuZDsgdGhpcyBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IHRoZSBzdWJqZWN0IGNhbiBhbHNvIGJlCisgICBmaWxsZWQuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBoYXMgYmVlbiBtYXJrZWQgYXMgZGVwcmVjYXRlZDsgdGhpcworICAgcmVsZWFzZSBzdG9wcyBhZHZlcnRpc2luZyBpdCBpbiB0aGUgImdpdCByZWJhc2UgLWgiIG91dHB1dC4KKworICogVGhlIGNvZGUgdG8gZ2VuZXJhdGUgbXVsdGktcGFjayBpbmRleCBsZWFybmVkIHRvIHNob3cgKG9yIG5vdCB0bworICAgc2hvdykgcHJvZ3Jlc3MgaW5kaWNhdG9ycy4KKworICogImdpdCBhcHBseSAtLTN3YXkiIGxlYXJuZWQgdG8gaG9ub3IgbWVyZ2UuY29uZmxpY3RTdHlsZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgbGlrZSBtZXJnZXMgd291bGQuCisKKyAqIFRoZSBjdXN0b20gZm9ybWF0IGZvciAiZ2l0IGxvZyAtLWZvcm1hdD08Zm9ybWF0PiIgbGVhcm5lZCB0aGUgbC9MCisgICBwbGFjZWhvbGRlciB0aGF0IGlzIHNpbWlsYXIgdG8gZS9FIHRoYXQgZmlsbHMgaW4gdGhlIGUtbWFpbAorICAgYWRkcmVzcywgYnV0IG9ubHkgdGhlIGxvY2FsIHBhcnQgb24gdGhlIGxlZnQgc2lkZSBvZiAnQCcuCisKKyAqIERvY3VtZW50YXRpb24gcGFnZXMgZm9yICJnaXQgc2hvcnRsb2ciIG5vdyBsaXN0IGNvbW1pdCBsaW1pdGluZworICAgb3B0aW9ucyBleHBsaWNpdGx5LgorCisgKiBUaGUgcGF0dGVybnMgdG8gZGV0ZWN0IGZ1bmN0aW9uIGJvdW5kYXJ5IGZvciBFbGl4aXIgbGFuZ3VhZ2UgaGFzCisgICBiZWVuIGFkZGVkLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRoYXQgdGhlICItLW9udG8iCisgICBvcHRpb24gb2YgImdpdCByZWJhc2UiIGNhbiB0YWtlIGl0cyBhcmd1bWVudCBhcyB0aGUgdmFsdWUgb2YgdGhlCisgICBvcHRpb24uCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogRGVidWdnaW5nIHN1cHBvcnQgZm9yIGxhenkgY2xvbmluZyBoYXMgYmVlbiBhIGJpdCBpbXByb3ZlZC4KKworICogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHNldCBvZiBiaXRtYXNrIGNvbnN0YW50cyBmcm9tIDBjdGFsCisgICBsaXRlcmFsIHRvICgxVTw8Y291bnQpIG5vdGF0aW9uLgorCisgKiBUZXN0IHVwZGF0ZXMgdG8gcHJlcGFyZSBmb3IgU0hBLTIgdHJhbnNpdGlvbiBjb250aW51ZXMuCisKKyAqIENydWZ0eSBjb2RlIGFuZCBsb2dpYyBhY2N1bXVsYXRlZCBvdmVyIHRpbWUgYXJvdW5kIHRoZSBvYmplY3QKKyAgIHBhcnNpbmcgYW5kIGxvdy1sZXZlbCBvYmplY3QgYWNjZXNzIHVzZWQgaW4gImdpdCBmc2NrIiBoYXZlIGJlZW4KKyAgIGNsZWFuZWQgdXAuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IGxvZyAtLWdyYXBoIiBnb3QgcmVmYWN0b3JlZCBhbmQgdGhlbiBpdHMKKyAgIG91dHB1dCBnb3Qgc2ltcGxpZmllZC4KKworICogRm9sbG93IHJlY2VudCBwdXNoIHRvIG1vdmUgQVBJIGRvY3MgZnJvbSBEb2N1bWVudGF0aW9uLyB0byBoZWFkZXIKKyAgIGZpbGVzIGFuZCB1cGRhdGUgY29uZmlnLmgKKworICogImdpdCBidW5kbGUiIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlIHBhcnNlIG9wdGlvbnMgQVBJLiAgImdpdAorICAgYnVuZGxlIHZlcmlmeSIgbGVhcm5lZCAiLS1xdWlldCIgYW5kICJnaXQgYnVuZGxlIGNyZWF0ZSIgbGVhcm5lZAorICAgb3B0aW9ucyB0byBjb250cm9sIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIEhhbmRsaW5nIG9mIGNvbW1pdCBvYmplY3RzIHRoYXQgdXNlIG5vbiBVVEYtOCBlbmNvZGluZyBkdXJpbmcKKyAgICJyZWJhc2UgLWkiIGhhcyBiZWVuIGltcHJvdmVkLgorCisKK0ZpeGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAicmViYXNlIC1pIiBjZWFzZWQgdG8gcnVuIHBvc3QtY29tbWl0IGhvb2sgYnkgbWlzdGFrZSBpbiBhbiBlYXJsaWVyCisgICB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBub3RlcyBjb3B5ICRvcmlnaW5hbCIgb3VnaHQgdG8gY29weSB0aGUgbm90ZXMgYXR0YWNoZWQgdG8gdGhlCisgICBvcmlnaW5hbCBvYmplY3QgdG8gSEVBRCwgYnV0IGEgbWlzdGFrZW4gdGlnaHRlbmluZyB0byBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlciB2YWxpZGF0aW9uIG1hZGUgZWFybGllciBkaXNhYmxlZCB0aGF0IGZlYXR1cmUgYnkgbWlzdGFrZS4KKworICogV2hlbiBhbGwgZmlsZXMgZnJvbSBzb21lIHN1YmRpcmVjdG9yeSB3ZXJlIHJlbmFtZWQgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgdGhlIGRpcmVjdG9yeSByZW5hbWUgaGV1cmlzdGljcyB3b3VsZCBmYWlsIHRvIGRldGVjdCB0aGF0CisgICBhcyBhIHJlbmFtZS9tZXJnZSBvZiB0aGUgc3ViZGlyZWN0b3J5IHRvIHRoZSByb290IGRpcmVjdG9yeSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbi11cCBhbmQgYSBidWdmaXggaW4gdGhlIGxvZ2ljIHVzZWQgdG8gdGVsbCB3b3JrdHJlZSBsb2NhbAorICAgYW5kIHJlcG9zaXRvcnkgZ2xvYmFsIHJlZnMgYXBhcnQuCisgICAobWVyZ2UgZjQ1Zjg4YjJlNCBzZy9kaXItdHJpZS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBpcyBzcGFyc2VseSBjaGVja2VkIG91dAorICAgbWlzdGFrZW5seSByZW1vdmVkIHBhdGhzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFyZWEgb2YgaW50ZXJlc3QuCisgICAobWVyZ2UgNGE1OGMzZDdmNyBqcy91cGRhdGUtaW5kZXgtaWdub3JlLXJlbW92YWwtZm9yLXNraXAtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIEhFQUQubG9jayIgZGlkIG5vdCBnaXZlIHRoZSByaWdodCBwYXRoCisgICB3aGVuIHJ1biBpbiBhIHNlY29uZGFyeSB3b3JrdHJlZS4KKyAgIChtZXJnZSA3NmE1M2Q2NDBmIGpzL2dpdC1wYXRoLWhlYWQtZG90LWxvY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSAtLW5vLWNvbW1pdCIgbmVlZHMgIi0tbm8tZmYiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBtb3ZlCisgICBIRUFELCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgaW4gdGhlIG1hbnVhbCBwYWdlIGZvciAiZ2l0IGJpc2VjdCIuCisgICAobWVyZ2UgOGRkMzI3YjI0NiBtYS9iaXNlY3QtZG9jLXNhbXBsZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgaW50ZXJuYWxseSBjYWxscyAicmVzZXQgLS1oYXJkIiB0aGF0IHNob3VsZCBub3QKKyAgIGRlc2NlbmQgaW50byBzdWJtb2R1bGVzLCBldmVuIHdoZW4gc3VibW9kdWxlLnJlY3Vyc2UgY29uZmlndXJhdGlvbgorICAgaXMgc2V0LCBidXQgaXQgd2FzIGFmZmVjdGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDc4MmNmMmFiNiBwYi9uby1yZWN1cnNpdmUtcmVzZXQtaGFyZC1pbi13b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNZXNzYWdlcyBmcm9tIGRpZSgpIGV0Yy4gY2FuIGJlIG1peGVkIHVwIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCisgICB3aXRob3V0IGV2ZW4gbGluZSBidWZmZXJpbmcgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gd29ya2VkCisgICBhcm91bmQuCisgICAobWVyZ2UgMTE2ZDFmYTZjNiBqcy92cmVwb3J0Zi13by1idWZmZXJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIVFRQIHRyYW5zcG9ydCBoYWQgcG9zc2libGUgYWxsb2NhdG9yL2RlYWxsb2NhdG9yIG1pc21hdGNoLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgd2F0Y2htYW4gaW50ZWdyYXRpb24gZm9yIGZzbW9uaXRvciB3YXMgcmFjeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAgIChtZXJnZSBkZDBiNjFmNTc3IGt3L2ZzbW9uaXRvci13YXRjaG1hbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGZXRjaGluZyBmcm9tIG11bHRpcGxlIHJlbW90ZXMgaW50byB0aGUgc2FtZSByZXBvc2l0b3J5IGluIHBhcmFsbGVsCisgICBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjZW50IGNoYW5nZSB0byAob3B0aW9uYWxseSkgdXBkYXRlCisgICB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGEgZmV0Y2ggam9iIGZpbmlzaGVzLCBhcyB0aGVzZSBwYXJhbGxlbAorICAgZmV0Y2hlcyBjb21wZXRlIHdpdGggZWFjaCBvdGhlci4gIFdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IHN0YXNoIHBvcCIgbWFkZSB0aGUgY29tbWFuZCBlbXB0eSB0aGUgaW5kZXgKKyAgIHdoZW4gcnVuIHdpdGggdGhlICItLXF1aWV0IiBvcHRpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBmZXRjaCIgY29kZXBhdGggaGFkIGEgYmlnICJkbyBub3QgbGF6aWx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cworICAgd2hlbiBJIGFzayBpZiBzb21ldGhpbmcgZXhpc3RzIiBzd2l0Y2guICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieQorICAgbWFya2luZyB0aGUgImRvZXMgdGhpcyB0aGluZyBleGlzdD8iIGNhbGxzIHdpdGggImlmIG5vdCBwbGVhc2UgZG8gbm90CisgICBsYXppbHkgZmV0Y2ggaXQiIGZsYWcuCisKKyAqIFRlc3QgdXBkYXRlIHRvIGF2b2lkIHdhc3RlZCBjeWNsZXMuCisgICAobWVyZ2UgZTAzMTY2OTVlYyBzZy9za2lwLXNraXBwZWQtcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgaGFuZGxpbmcgYWZ0ZXIgImdpdCBwdXNoIiBmaW5pc2hlcyBzZW5kaW5nIHRoZSBwYWNrZGF0YSBhbmQKKyAgIHdhaXRzIGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSBzaWRlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgKG1lcmdlIGFkN2E0MDMyNjggamsvc2VuZC1wYWNrLXJlbW90ZS1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdHdlYiIgdGhhdCBmb3Jnb3QgdG8gZXNjYXBlIFVSTHMgZ2VuZXJhdGVkCisgICBiYXNlZCBvbiBlbmQtdXNlciBpbnB1dCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEzNzZlMzdiMmMgamsvZ2l0d2ViLWFudGkteHNzIGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDgwNzM2ZDdjNWUgamMvYW0tc2hvdy1jdXJyZW50LXBhdGNoLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGI2NTY1NzJjYSBzZy9jb21taXQtZ3JhcGgtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YzAyMDQyMTM5IG1yL2Nsb25lLWRpci1leGlzdHMtdG8tcGF0aC1leGlzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0YWUxMzFlMzggc2cvYmxhbWUtaW5kZW50LWhldXJpc3RpY3MtaXMtbm93LXRoZS1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMTE1ZTVkOTI5IGRsL2RvYy1kaWZmLW5vLWluZGV4LWltcGxpZXMtZXhpdC1jb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzBkZTZhY2JlIGVuL3Q2MDI0LXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNGM0Nzc2ZDc1IG5zL3Rlc3QtZGVzYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGQ0MGYzMGM0IGRqL3R5cG9maXgtbWVyZ2Utc3RyYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2NmUwNDAxYWIgamsvb3B0aW0taW4tcGFjay1pZHgtY29udmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTY5YmVkNzQyMSBycy9wYXJzZS1vcHRpb25zLWR1cC1udWxsLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFiZDZiZTMyZCBycy91c2UtY29weS1hcnJheS1pbi1taW5ndy1zaGVsbC1jb21tYW5kLXByZXBhcmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMDE4NzE5OTI3IG1hL3Q3MDA0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MzI3NTdiMGNjIGFyL2luc3RhbGwtZG9jLXVwZGF0ZS1jbWRzLW5lZWRpbmctdGhlLXNoZWxsIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQKaW5kZXggNWVmMTI2NC4uODUwZGM2OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQKQEAgLTEyLDcgKzEyLDcgQEAKICAqIERlc2NyaXB0aW9uIGdpdmVuIGJ5ICJncmVwIC1oIiBmb3IgaXRzIC0tZXhjbHVkZS1zdGFuZGFyZCBvcHRpb24KICAgIHdhcyBwaHJhc2VkIHBvb3JseS4KIAotICogRG9jdW1lbnRhdG9uIGZvciAiZ2l0IHJlbW90ZSBhZGQiIG1lbnRpb25lZCAiLS10YWdzIiBhbmQKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgcmVtb3RlIGFkZCIgbWVudGlvbmVkICItLXRhZ3MiIGFuZAogICAgIi0tbm8tdGFncyIgYW5kIGl0IHdhcyBub3QgY2xlYXIgdGhhdCBmZXRjaCBmcm9tIHRoZSByZW1vdGUgaW4KICAgIHRoZSBmdXR1cmUgd2lsbCB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIHdoZW4gbmVpdGhlciBpcyBnaXZlbgogICAgdG8gb3ZlcnJpZGUgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0CmluZGV4IGZjOTU4MTIuLjU3NjkxODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0CkBAIC00LDcgKzQsNyBAQAogRml4ZXMgc2luY2UgdjIuMy42CiAtLS0tLS0tLS0tLS0tLS0tLS0KIAotICogQW4gZWFybGllciB1cGRhdGUgdG8gdGhlIHBhcnNlciB0aGF0IGRpc2VjdHMgYSBVUkwgYnJva2UgYW4KKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHRoZSBwYXJzZXIgdGhhdCBkaXNzZWN0cyBhIFVSTCBicm9rZSBhbgogICAgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSBjb2xvbiwgZm9sbG93ZWQgYnkgYW4gZW1wdHkgc3RyaW5nIChpbnN0ZWFkCiAgICBvZiB0aGUgcG9ydCBudW1iZXIpLCBlLmcuIHNzaDovL2V4YW1wbGUuY29tOi9wYXRoL3RvL3JlcG8uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQKaW5kZXggOTE0ZDJjMS4uNDIyZTkzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQKQEAgLTY2LDcgKzY2LDcgQEAKICAqIFNvbWUgdGltZSBhZ28sICJnaXQgYmxhbWUiIChpbmNvcnJlY3RseSkgbG9zdCB0aGUgY29udmVydF90b19naXQoKQogICAgY2FsbCB3aGVuIHN5bnRoZXNpemluZyBhIGZha2UgInRpcCIgY29tbWl0IHRoYXQgcmVwcmVzZW50cyB0aGUKICAgIHN0YXRlIGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIGJyb2tlIGZvbGtzIHdobyByZWNvcmQgdGhlIGhpc3RvcnkKLSAgIHdpdGggTEYgbGluZSBlbmRpbmcgdG8gbWFrZSB0aGVpciBwcm9qZWN0IHBvcnRhYmlsZSBhY3Jvc3MKKyAgIHdpdGggTEYgbGluZSBlbmRpbmcgdG8gbWFrZSB0aGVpciBwcm9qZWN0IHBvcnRhYmxlIGFjcm9zcwogICAgcGxhdGZvcm1zIHdoaWxlIHRlcm1pbmF0aW5nIGxpbmVzIGluIHRoZWlyIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoCiAgICBDUkxGIGZvciB0aGVpciBwbGF0Zm9ybS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAppbmRleCA1NjNkYWRjLi5lM2NiZjNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dApAQCAtNDAsNyArNDAsNyBAQAogCiAgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgY2FuIG5vdyBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgogCi0gKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlZW5jb2RlIHRoZSBwYXRobmFtZSBpdCB1c2VzIHRvIGNvbW11bmljYXRlCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlLWVuY29kZSB0aGUgcGF0aG5hbWUgaXQgdXNlcyB0byBjb21tdW5pY2F0ZQogICAgd2l0aCB0aGUgcDQgZGVwb3Qgd2l0aCBhIG5ldyBvcHRpb24uCiAKICAqIEdpdmUgcHJvZ3Jlc3MgbWV0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMC50eHQKaW5kZXggNWZiZTFiOC4uMjczMjBiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMC50eHQKQEAgLTE4OSw3ICsxODksNyBAQAogICogU29tZSBjYWxscyB0byBzdHJjcHkoMykgdHJpZ2dlcnMgYSBmYWxzZSB3YXJuaW5nIGZyb20gc3RhdGljCiAgICBhbmFseXplcnMgdGhhdCBhcmUgbGVzcyBpbnRlbGxpZ2VudCB0aGFuIGh1bWFucywgYW5kIHJlZHVjaW5nIHRoZQogICAgbnVtYmVyIG9mIHRoZXNlIGZhbHNlIGhpdHMgaGVscHMgdXMgbm90aWNlIHJlYWwgaXNzdWVzLiAgQSBmZXcKLSAgIGNhbGxzIHRvIHN0cmNweSgzKSBpbiBhIGNvdXBsZSBvZiBwcm90cmFtcyB0aGF0IGFyZSBhbHJlYWR5IHNhZmUKKyAgIGNhbGxzIHRvIHN0cmNweSgzKSBpbiBhIGNvdXBsZSBvZiBwcm9ncmFtcyB0aGF0IGFyZSBhbHJlYWR5IHNhZmUKICAgIGhhcyBiZWVuIHJld3JpdHRlbiB0byBhdm9pZCBmYWxzZSB3YXJuaW5ncy4KIAogICogVGhlICJuYW1lX3BhdGgiIEFQSSB3YXMgYW4gYXR0ZW1wdCB0byByZWR1Y2UgdGhlIG5lZWQgdG8gY29uc3RydWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0CmluZGV4IDY5NWI4NmYuLjMwNWUwODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0CkBAIC0zNiw3ICszNiw3IEBACiAgKiBPbmUgcGFydCBvZiAiZ2l0IGFtIiBoYWQgYW4gb2RkYmFsbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBjYWxsZWQKICAgIHN0dWZmIGZyb20gb3V0c2lkZSAiaGlzIiBhcyBvcHBvc2VkIHRvIGNhbGxpbmcgd2hhdCB3ZSBoYXZlICJvdXJzIiwKICAgIHdoaWNoIHdhcyBub3QgZ2VuZGVyLW5ldXRyYWwgYW5kIGFsc28gaW5jb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YKLSAgIHRoZSBzeXN0ZW0gd2hlcmUgb3V0c2lkZSBzdHVmZiBpcyB1c3VhbGwgY2FsbGVkICJ0aGVpcnMiIGluCisgICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxseSBjYWxsZWQgInRoZWlycyIgaW4KICAgIGNvbnRyYXN0IHRvICJvdXJzIi4KIAogICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgYSBuZXcgaGVscGVyIHRlc3RfbWF0Y2hfc2lnbmFsIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKaW5kZXggZjUwZjFiNC4uODNlN2JiYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIGBnaXRkaXIvaWA6OgogCVRoaXMgaXMgdGhlIHNhbWUgYXMgYGdpdGRpcmAgZXhjZXB0IHRoYXQgbWF0Y2hpbmcgaXMgZG9uZQotCWNhc2UtaW5zZW5zaXRpdmVseSAoZS5nLiBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3l0ZW1zKQorCWNhc2UtaW5zZW5zaXRpdmVseSAoZS5nLiBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcykKIAogYG9uYnJhbmNoYDo6CiAJVGhlIGRhdGEgdGhhdCBmb2xsb3dzIHRoZSBrZXl3b3JkIGBvbmJyYW5jaDpgIGlzIHRha2VuIHRvIGJlIGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZGQudHh0CmluZGV4IDRkNzUzZjAuLmM5Zjc0OGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dApAQCAtNSwzICs1LDggQEAKIAlvcHRpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdLiAgYGFkZC5pZ25vcmUtZXJyb3JzYCBpcyBkZXByZWNhdGVkLAogCWFzIGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgdXN1YWwgbmFtaW5nIGNvbnZlbnRpb24gZm9yIGNvbmZpZ3VyYXRpb24KIAl2YXJpYWJsZXMuCisKK2FkZC5pbnRlcmFjdGl2ZS51c2VCdWlsdGluOjoKKwlbRVhQRVJJTUVOVEFMXSBTZXQgdG8gYHRydWVgIHRvIHVzZSB0aGUgZXhwZXJpbWVudGFsIGJ1aWx0LWluCisJaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVyYWN0aXZlIHZlcnNpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdCisJaW5zdGVhZCBvZiB0aGUgUGVybCBzY3JpcHQgdmVyc2lvbi4gSXMgYGZhbHNlYCBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKaW5kZXggNDBjYWQ5Mi4uNTEzZmNkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0CkBAIC0zNiw2ICszNiwxMiBAQAogCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlICdbUEFUQ0hdJwogCXN1YmplY3QgcHJlZml4LiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBwcmVmaXguCiAKK2Zvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbjo6CisJVGhlIGRlZmF1bHQgbW9kZSBmb3IgZm9ybWF0LXBhdGNoIHRvIGRldGVybWluZSB3aGljaCBwYXJ0cyBvZgorCXRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZSBwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzCisJZGVzY3JpcHRpb24uIFNlZSB0aGUgYC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbmAgb3B0aW9uIGluCisJbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCiBmb3JtYXQuc2lnbmF0dXJlOjoKIAlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBhIHNpZ25hdHVyZSBjb250YWluaW5nCiAJdGhlIEdpdCB2ZXJzaW9uIG51bWJlci4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0CmluZGV4IGVmNWFkYjMuLjZkOTExMGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dApAQCAtMTMsNyArMTMsNyBAQAogCVVzZSBvZiB0aGlzIG9wdGlvbiB3aGVuIHJ1bm5pbmcgaW4gYW4gYXV0b21hdGVkIHNjcmlwdCBjYW4KIAlyZXN1bHQgaW4gYSBsYXJnZSBudW1iZXIgb2YgdGFncyBiZWluZyBzaWduZWQuIEl0IGlzIHRoZXJlZm9yZQogCWNvbnZlbmllbnQgdG8gdXNlIGFuIGFnZW50IHRvIGF2b2lkIHR5cGluZyB5b3VyIGdwZyBwYXNzcGhyYXNlCi0Jc2V2ZXJhbCB0aW1lcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXNuJ3QgYWZmZWN0cyB0YWcgc2lnbmluZworCXNldmVyYWwgdGltZXMuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdCB0YWcgc2lnbmluZwogCWJlaGF2aW9yIGVuYWJsZWQgYnkgIi11IDxrZXlpZD4iIG9yICItLWxvY2FsLXVzZXI9PGtleWlkPiIgb3B0aW9ucy4KIAogdGFyLnVtYXNrOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CmluZGV4IDQzYjlmZjMuLmEyZjc4NjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dApAQCAtOTIsNiArOTIsMTAgQEAKIAlSdW4gYGdpdCBnYyAtLWF1dG9gIGF0IHRoZSBlbmQgdG8gcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24KIAlpZiBuZWVkZWQuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgogCistLVtuby1dd3JpdGUtY29tbWl0LWdyYXBoOjoKKwlXcml0ZSBhIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZy4gVGhpcyBvdmVycmlkZXMgdGhlIGNvbmZpZworCXNldHRpbmcgYGZldGNoLndyaXRlQ29tbWl0R3JhcGhgLgorCiAtcDo6CiAtLXBydW5lOjoKIAlCZWZvcmUgZmV0Y2hpbmcsIHJlbW92ZSBhbnkgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgdGhhdCBubwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CmluZGV4IGZjM2I5OTMuLmZjNTc1MGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXVudG91Y2hlZC4KIAogLS1zaG93LWN1cnJlbnQtcGF0Y2g6OgotCVNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQgd2hlbiAiZ2l0IGFtIiBpcyBzdG9wcGVkIGJlY2F1c2UKKwlTaG93IHRoZSBlbnRpcmUgZS1tYWlsIG1lc3NhZ2UgImdpdCBhbSIgaGFzIHN0b3BwZWQgYXQsIGJlY2F1c2UKIAlvZiBjb25mbGljdHMuCiAKIERJU0NVU1NJT04KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKaW5kZXggZTk5OTI1MS4uMjk1N2JjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKQEAgLTE1OCw3ICsxNTgsNyBAQAogc3VwcG9zZWQgdG8gYmUgdXNlZCBzbyB0aGF0IGFsbCB0aGUgdGVzdHMgYXJlIGNoZWNrZWQgYWZ0ZXIgZWFjaAogY29tbWl0LiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IHZlcnkgZWZmaWNpZW50LCBiZWNhdXNlIG1hbnkKIHRlc3RzIGFyZSBydW4gZm9yIG5vIGludGVyZXN0aW5nIHJlc3VsdCwgYW5kIHRoZXkgc3VmZmVyIGZyb20KLWNvbWJpbmF0aW9uYWwgZXhwbG9zaW9uLgorY29tYmluYXRvcmlhbCBleHBsb3Npb24uCiAKIEluIGZhY3QgdGhlIHByb2JsZW0gaXMgdGhhdCBiaWcgc29mdHdhcmUgb2Z0ZW4gaGFzIG1hbnkgZGlmZmVyZW50CiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoYXQgZWFjaCB0ZXN0IGNhc2Ugc2hvdWxkIHBhc3MgZm9yIGVhY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CmluZGV4IDRiNDVkODMuLjc1ODZjNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApAQCAtNDEzLDcgKzQxMyw3IEBACiAKICMgdHdlYWsgdGhlIHdvcmtpbmcgdHJlZSBieSBtZXJnaW5nIHRoZSBob3QtZml4IGJyYW5jaAogIyBhbmQgdGhlbiBhdHRlbXB0IGEgYnVpbGQKLWlmCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBob3QtZml4ICYmCitpZglnaXQgbWVyZ2UgLS1uby1jb21taXQgLS1uby1mZiBob3QtZml4ICYmCiAJbWFrZQogdGhlbgogCSMgcnVuIHByb2plY3Qgc3BlY2lmaWMgdGVzdCBhbmQgcmVwb3J0IGl0cyBzdGF0dXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CmluZGV4IDdkNmM5ZGMuLmNjYWRhODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApAQCAtOSw4ICs5LDggQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBidW5kbGUnIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPgotJ2dpdCBidW5kbGUnIHZlcmlmeSA8ZmlsZT4KKydnaXQgYnVuZGxlJyBjcmVhdGUgWy1xIHwgLS1xdWlldCB8IC0tcHJvZ3Jlc3MgfCAtLWFsbC1wcm9ncmVzc10gWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdIDxmaWxlPiA8Z2l0LXJldi1saXN0LWFyZ3M+CisnZ2l0IGJ1bmRsZScgdmVyaWZ5IFstcSB8IC0tcXVpZXRdIDxmaWxlPgogJ2dpdCBidW5kbGUnIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dCiAnZ2l0IGJ1bmRsZScgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dCiAKQEAgLTMzLDkgKzMzLDExIEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLWNyZWF0ZSA8ZmlsZT46OgorY3JlYXRlIFtvcHRpb25zXSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPjo6CiAJVXNlZCB0byBjcmVhdGUgYSBidW5kbGUgbmFtZWQgJ2ZpbGUnLiAgVGhpcyByZXF1aXJlcyB0aGUKIAknZ2l0LXJldi1saXN0LWFyZ3MnIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KKwknb3B0aW9ucycgY29udGFpbnMgdGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlICdnaXQgYnVuZGxlIGNyZWF0ZScKKwlzdWJjb21tYW5kLgogCiB2ZXJpZnkgPGZpbGU+OjoKIAlVc2VkIHRvIGNoZWNrIHRoYXQgYSBidW5kbGUgZmlsZSBpcyB2YWxpZCBhbmQgd2lsbCBhcHBseQpAQCAtNzUsNiArNzcsMzMgQEAKIAluZWNlc3NhcmlseSBldmVyeXRoaW5nIGluIHRoZSBwYWNrIChpbiB0aGlzIGNhc2UsICdnaXQgYnVuZGxlJyBhY3RzCiAJbGlrZSAnZ2l0IGZldGNoLXBhY2snKS4KIAorLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmCisJdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1hbGwtcHJvZ3Jlc3M6OgorCVdoZW4gLS1zdGRvdXQgaXMgc3BlY2lmaWVkIHRoZW4gcHJvZ3Jlc3MgcmVwb3J0IGlzCisJZGlzcGxheWVkIGR1cmluZyB0aGUgb2JqZWN0IGNvdW50IGFuZCBjb21wcmVzc2lvbiBwaGFzZXMKKwlidXQgaW5oaWJpdGVkIGR1cmluZyB0aGUgd3JpdGUtb3V0IHBoYXNlLiBUaGUgcmVhc29uIGlzCisJdGhhdCBpbiBzb21lIGNhc2VzIHRoZSBvdXRwdXQgc3RyZWFtIGlzIGRpcmVjdGx5IGxpbmtlZAorCXRvIGFub3RoZXIgY29tbWFuZCB3aGljaCBtYXkgd2lzaCB0byBkaXNwbGF5IHByb2dyZXNzCisJc3RhdHVzIG9mIGl0cyBvd24gYXMgaXQgcHJvY2Vzc2VzIGluY29taW5nIHBhY2sgZGF0YS4KKwlUaGlzIGZsYWcgaXMgbGlrZSAtLXByb2dyZXNzIGV4Y2VwdCB0aGF0IGl0IGZvcmNlcyBwcm9ncmVzcworCXJlcG9ydCBmb3IgdGhlIHdyaXRlLW91dCBwaGFzZSBhcyB3ZWxsIGV2ZW4gaWYgLS1zdGRvdXQgaXMKKwl1c2VkLgorCistLWFsbC1wcm9ncmVzcy1pbXBsaWVkOjoKKwlUaGlzIGlzIHVzZWQgdG8gaW1wbHkgLS1hbGwtcHJvZ3Jlc3Mgd2hlbmV2ZXIgcHJvZ3Jlc3MgZGlzcGxheQorCWlzIGFjdGl2YXRlZC4gIFVubGlrZSAtLWFsbC1wcm9ncmVzcyB0aGlzIGZsYWcgZG9lc24ndCBhY3R1YWxseQorCWZvcmNlIGFueSBwcm9ncmVzcyBkaXNwbGF5IGJ5IGl0c2VsZi4KKworLXE6OgorLS1xdWlldDo6CisJVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kIG5vdCB0byByZXBvcnQgaXRzIHByb2dyZXNzCisJb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKwogU1BFQ0lGWUlORyBSRUZFUkVOQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dAppbmRleCAzYzA1NzgyLi44NGY0MWE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApAQCAtMzIsNyArMzIsNyBAQAogCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCiAtejo6Ci0JVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzZWFibGUuCisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzYWJsZS4KIAlJZiBgLS1zdGRpbmAgaXMgYWxzbyBnaXZlbiwgaW5wdXQgcGF0aHMgYXJlIHNlcGFyYXRlZAogCXdpdGggYSBOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSBsaW5lZmVlZCBjaGFyYWN0ZXIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0CmluZGV4IDhiNDJjYjMuLjhiMmQ0OWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApAQCAtMzksNyArMzksNyBAQAogCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCiAtejo6Ci0JVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzZWFibGUgKHNlZQorCVRoZSBvdXRwdXQgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIGJlIG1hY2hpbmUtcGFyc2FibGUgKHNlZQogCWJlbG93KS4gIElmIGAtLXN0ZGluYCBpcyBhbHNvIGdpdmVuLCBpbnB1dCBwYXRocyBhcmUgc2VwYXJhdGVkCiAJd2l0aCBhIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGxpbmVmZWVkIGNoYXJhY3Rlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQKaW5kZXggOGM3MDhhNy4uYmNkODVjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0CkBAIC05LDcgKzksNiBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGNvbW1pdC1ncmFwaCByZWFkJyBbLS1vYmplY3QtZGlyIDxkaXI+XQogJ2dpdCBjb21taXQtZ3JhcGggdmVyaWZ5JyBbLS1vYmplY3QtZGlyIDxkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXQogJ2dpdCBjb21taXQtZ3JhcGggd3JpdGUnIDxvcHRpb25zPiBbLS1vYmplY3QtZGlyIDxkaXI+XSBbLS1bbm8tXXByb2dyZXNzXQogCkBAIC03NCwxMSArNzMsNiBAQAogYmUgdGhlIGN1cnJlbnQgdGltZS4gQWZ0ZXIgd3JpdGluZyB0aGUgc3BsaXQgY29tbWl0LWdyYXBoLCBkZWxldGUgYWxsCiB1bnVzZWQgY29tbWl0LWdyYXBoIHdob3NlIG1vZGlmaWVkIHRpbWVzIGFyZSBvbGRlciB0aGFuIGBkYXRldGltZWAuCiAKLSdyZWFkJzo6Ci0KLVJlYWQgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGFuZCBvdXRwdXQgYmFzaWMgZGV0YWlscyBhYm91dCBpdC4KLVVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLQogJ3ZlcmlmeSc6OgogCiBSZWFkIHRoZSBjb21taXQtZ3JhcGggZmlsZSBhbmQgdmVyaWZ5IGl0cyBjb250ZW50cyBhZ2FpbnN0IHRoZSBvYmplY3QKQEAgLTExOCwxMiArMTEyLDYgQEAKICQgZ2l0IHJldi1wYXJzZSBIRUFEIHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgLS1hcHBlbmQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0qIFJlYWQgYmFzaWMgaW5mb3JtYXRpb24gZnJvbSB0aGUgY29tbWl0LWdyYXBoIGZpbGUuCi0rCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNvbW1pdC1ncmFwaCByZWFkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKaW5kZXggNzllMjJiMS4uMWIxYzcxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CkBAIC0yOTQsNyArMjk0LDcgQEAKIAlHaXQgZGlyZWN0b3J5IG5hbWUKICVnOjoKIAlHaXQgZGlyZWN0b3J5IG5hbWUsIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IKLQlhbHBoYS1udW1lcmljIG9uZXMsIGAuYCwgYW5kIGAtYCBhcmUgcmVwbGFjZWQgd2l0aAorCWFscGhhbnVtZXJpYyBvbmVzLCBgLmAsIGFuZCBgLWAgYXJlIHJlcGxhY2VkIHdpdGgKIAlgX2AgKHRoaXMgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB0aGUgZGlyZWN0b3J5CiAJbmFtZSBpbiBhIGZpbGVuYW1lIGlmIHdhbnRlZCkKICVtOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKaW5kZXggNzIxNzlkOS4uMzc3ODFjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKQEAgLTM2LDcgKzM2LDcgQEAKIAlydW5uaW5nIHRoZSBjb21tYW5kIGluIGEgd29ya2luZyB0cmVlIGNvbnRyb2xsZWQgYnkgR2l0IGFuZAogCWF0IGxlYXN0IG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSwKIAlvciB3aGVuIHJ1bm5pbmcgdGhlIGNvbW1hbmQgb3V0c2lkZSBhIHdvcmtpbmcgdHJlZQotCWNvbnRyb2xsZWQgYnkgR2l0LgorCWNvbnRyb2xsZWQgYnkgR2l0LiBUaGlzIGZvcm0gaW1wbGllcyBgLS1leGl0LWNvZGVgLgogCiAnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIC0tY2FjaGVkIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXTo6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAppbmRleCAzNzYzNGJmLi5lODk1MGRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CkBAIC0xNDIsNyArMTQyLDcgQEAKIAlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgYGVuY29kaW5nYCBoZWFkZXIgaW4gY29tbWl0IG9iamVjdHMuICBXaGVuCiAJYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCiAJd2hlbiBlbmNvdW50ZXJpbmcgc3VjaCBhIGNvbW1pdCBvYmplY3QuICBXaXRoICd5ZXMnLCB0aGUgY29tbWl0Ci0JbWVzc2FnZSB3aWxsIGJlIHJlZW5jb2RlZCBpbnRvIFVURi04LiAgV2l0aCAnbm8nLCB0aGUgb3JpZ2luYWwKKwltZXNzYWdlIHdpbGwgYmUgcmUtZW5jb2RlZCBpbnRvIFVURi04LiAgV2l0aCAnbm8nLCB0aGUgb3JpZ2luYWwKIAllbmNvZGluZyB3aWxsIGJlIHByZXNlcnZlZC4KIAogLS1yZWZzcGVjOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKaW5kZXggNTg3NjU5OC4uMzY4NmE2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKQEAgLTUzNCw3ICs1MzQsNyBAQAogaHR0cHM6Ly9naXRodWIuY29tL25ld3Jlbi9naXQtZmlsdGVyLXJlcG8vYmxvYi9tYXN0ZXIvY29udHJpYi9maWx0ZXItcmVwby1kZW1vcy9maWx0ZXItbGFtZWx5W2ZpbHRlci1sYW1lbHldLAogYSBkcm9wLWluIGdpdC1maWx0ZXItYnJhbmNoIHJlcGxhY2VtZW50ICh3aXRoIGEgZmV3IGNhdmVhdHMpLiAgV2hpbGUKIGZpbHRlci1sYW1lbHkgc3VmZmVycyBmcm9tIGFsbCB0aGUgc2FtZSBzYWZldHkgaXNzdWVzIGFzCi1naXQtZmlsdGVyLWJyYW5jaCwgaXQgYXQgbGVhc3QgYW1lbG9yaWF0ZXMgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBhCitnaXQtZmlsdGVyLWJyYW5jaCwgaXQgYXQgbGVhc3QgYW1lbGlvcmF0ZXMgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBhCiBsaXR0bGUuCiAKIFtbU0FGRVRZXV0KQEAgLTY0OSw3ICs2NDksNyBAQAogY29tbWl0cyBmcm9tIGJlZm9yZSB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvbiBhcmUgYWxzbyBwcnVuZWQgaW5zdGVhZCBvZgoganVzdCBwcnVuaW5nIGNvbW1pdHMgdGhhdCBiZWNhbWUgZW1wdHkgZHVlIHRvIGZpbHRlcmluZyBydWxlcy4KIAotKiBJZiAtLXBydW5lIGVtcHR5IGlzIHNwZWNpZmllZCwgc29tZXRpbWVzIGVtcHR5IGNvbW1pdHMgYXJlIG1pc3NlZAorKiBJZiAtLXBydW5lLWVtcHR5IGlzIHNwZWNpZmllZCwgc29tZXRpbWVzIGVtcHR5IGNvbW1pdHMgYXJlIG1pc3NlZAogYW5kIGxlZnQgYXJvdW5kIGFueXdheSAoYSBzb21ld2hhdCByYXJlIGJ1ZywgYnV0IGl0IGhhcHBlbnMuLi4pCiAKICogQSBtaW5vciBpc3N1ZSwgYnV0IHVzZXJzIHdobyBoYXZlIGEgZ29hbCB0byB1cGRhdGUgYWxsIG5hbWVzIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKaW5kZXggMjAzNWQ0ZC4uMDBiZGY5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC0xOSw2ICsxOSw3IEBACiAJCSAgIFstLXN0YXJ0LW51bWJlciA8bj5dIFstLW51bWJlcmVkLWZpbGVzXQogCQkgICBbLS1pbi1yZXBseS10bz08bWVzc2FnZSBpZD5dIFstLXN1ZmZpeD0uPHNmeD5dCiAJCSAgIFstLWlnbm9yZS1pZi1pbi11cHN0cmVhbV0KKwkJICAgWy0tY292ZXItZnJvbS1kZXNjcmlwdGlvbj08bW9kZT5dCiAJCSAgIFstLXJmY10gWy0tc3ViamVjdC1wcmVmaXg9PHN1YmplY3QgcHJlZml4Pl0KIAkJICAgWygtLXJlcm9sbC1jb3VudHwtdikgPG4+XQogCQkgICBbLS10bz08ZW1haWw+XSBbLS1jYz08ZW1haWw+XQpAQCAtMTcyLDYgKzE3MywyNiBAQAogCXBhdGNoZXMgYmVpbmcgZ2VuZXJhdGVkLCBhbmQgYW55IHBhdGNoIHRoYXQgbWF0Y2hlcyBpcwogCWlnbm9yZWQuCiAKKy0tY292ZXItZnJvbS1kZXNjcmlwdGlvbj08bW9kZT46OgorCUNvbnRyb2xzIHdoaWNoIHBhcnRzIG9mIHRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisJcG9wdWxhdGVkIHVzaW5nIHRoZSBicmFuY2gncyBkZXNjcmlwdGlvbi4KKysKK0lmIGA8bW9kZT5gIGlzIGBtZXNzYWdlYCBvciBgZGVmYXVsdGAsIHRoZSBjb3ZlciBsZXR0ZXIgc3ViamVjdCB3aWxsIGJlCitwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlciB0ZXh0LiBUaGUgYm9keSBvZiB0aGUgY292ZXIgbGV0dGVyIHdpbGwgYmUKK3BvcHVsYXRlZCB3aXRoIHRoZSBicmFuY2gncyBkZXNjcmlwdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4KK25vIGNvbmZpZ3VyYXRpb24gbm9yIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc3BlY2lmaWVkLgorKworSWYgYDxtb2RlPmAgaXMgYHN1YmplY3RgLCB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoZSBicmFuY2ggZGVzY3JpcHRpb24gd2lsbAorcG9wdWxhdGUgdGhlIGNvdmVyIGxldHRlciBzdWJqZWN0LiBUaGUgcmVtYWluZGVyIG9mIHRoZSBkZXNjcmlwdGlvbiB3aWxsCitwb3B1bGF0ZSB0aGUgYm9keSBvZiB0aGUgY292ZXIgbGV0dGVyLgorKworSWYgYDxtb2RlPmAgaXMgYGF1dG9gLCBpZiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoZSBicmFuY2ggZGVzY3JpcHRpb24KK2lzIGdyZWF0ZXIgdGhhbiAxMDAgYnl0ZXMsIHRoZW4gdGhlIG1vZGUgd2lsbCBiZSBgbWVzc2FnZWAsIG90aGVyd2lzZQorYHN1YmplY3RgIHdpbGwgYmUgdXNlZC4KKysKK0lmIGA8bW9kZT5gIGlzIGBub25lYCwgYm90aCB0aGUgY292ZXIgbGV0dGVyIHN1YmplY3QgYW5kIGJvZHkgd2lsbCBiZQorcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXIgdGV4dC4KKwogLS1zdWJqZWN0LXByZWZpeD08c3ViamVjdCBwcmVmaXg+OjoKIAlJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCAnW1BBVENIXScgcHJlZml4IGluIHRoZSBzdWJqZWN0CiAJbGluZSwgaW5zdGVhZCB1c2UgJ1s8c3ViamVjdCBwcmVmaXg+XScuIFRoaXMKQEAgLTM0OCw2ICszNjksNyBAQAogCXNpZ25PZmYgPSB0cnVlCiAJb3V0cHV0RGlyZWN0b3J5ID0gPGRpcmVjdG9yeT4KIAljb3ZlckxldHRlciA9IGF1dG8KKwljb3ZlckZyb21EZXNjcmlwdGlvbiA9IGF1dG8KIC0tLS0tLS0tLS0tLQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKaW5kZXggMjMzYjJiNy4uNjQyZDlhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgbXVsdGktcGFjay1pbmRleCcgWy0tb2JqZWN0LWRpcj08ZGlyPl0gPHN1YmNvbW1hbmQ+CisnZ2l0IG11bHRpLXBhY2staW5kZXgnIFstLW9iamVjdC1kaXI9PGRpcj5dIFstLVtuby1dcHJvZ3Jlc3NdIDxzdWJjb21tYW5kPgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIzLDYgKzIzLDEwIEBACiAJYDxkaXI+L3BhY2tzL211bHRpLXBhY2staW5kZXhgIGZvciB0aGUgY3VycmVudCBNSURYIGZpbGUsIGFuZAogCWA8ZGlyPi9wYWNrc2AgZm9yIHRoZSBwYWNrLWZpbGVzIHRvIGluZGV4LgogCistLVtuby1dcHJvZ3Jlc3M6OgorCVR1cm4gcHJvZ3Jlc3Mgb24vb2ZmIGV4cGxpY2l0bHkuIElmIG5laXRoZXIgaXMgc3BlY2lmaWVkLCBwcm9ncmVzcyBpcworCXNob3duIGlmIHN0YW5kYXJkIGVycm9yIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLgorCiBUaGUgZm9sbG93aW5nIHN1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CiAKIHdyaXRlOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dAppbmRleCBmNTZhNWE5Li5jZWQyZTgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CkBAIC0xMCw3ICsxMCw3IEBACiBbdmVyc2VdCiAnZ2l0IG5vdGVzJyBbbGlzdCBbPG9iamVjdD5dXQogJ2dpdCBub3RlcycgYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstRiA8ZmlsZT4gfCAtbSA8bXNnPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XQotJ2dpdCBub3RlcycgY29weSBbLWZdICggLS1zdGRpbiB8IDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4gKQorJ2dpdCBub3RlcycgY29weSBbLWZdICggLS1zdGRpbiB8IDxmcm9tLW9iamVjdD4gWzx0by1vYmplY3Q+XSApCiAnZ2l0IG5vdGVzJyBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstRiA8ZmlsZT4gfCAtbSA8bXNnPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XQogJ2dpdCBub3RlcycgZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XQogJ2dpdCBub3Rlcycgc2hvdyBbPG9iamVjdD5dCkBAIC02OCw4ICs2OCw4IEBACiAJc3ViY29tbWFuZCkuCiAKIGNvcHk6OgotCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QuCi0JQWJvcnQgaWYgdGhlIHNlY29uZCBvYmplY3QgYWxyZWFkeSBoYXMgbm90ZXMsIG9yIGlmIHRoZSBmaXJzdAorCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QgKGRlZmF1bHRzIHRvCisJSEVBRCkuIEFib3J0IGlmIHRoZSBzZWNvbmQgb2JqZWN0IGFscmVhZHkgaGFzIG5vdGVzLCBvciBpZiB0aGUgZmlyc3QKIAlvYmplY3QgaGFzIG5vbmUgKHVzZSAtZiB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMgdG8gdGhlCiAJc2Vjb25kIG9iamVjdCkuIFRoaXMgc3ViY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvOgogCWBnaXQgbm90ZXMgYWRkIFstZl0gLUMgJChnaXQgbm90ZXMgbGlzdCA8ZnJvbS1vYmplY3Q+KSA8dG8tb2JqZWN0PmAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJhbmdlLWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKaW5kZXggOGE2ZWEyYy4uOTcwMWMxZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKQEAgLTU3LDYgKzU3LDEwIEBACiAJU2VlIHRoZSBgYEFsZ29yaXRobWBgIHNlY3Rpb24gYmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIHdoeSB0aGlzIGlzCiAJbmVlZGVkLgogCistLVtuby1dbm90ZXNbPTxyZWY+XTo6CisJVGhpcyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgYGdpdCBsb2dgIHByb2dyYW0KKwkoc2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSkgdGhhdCBnZW5lcmF0ZXMgdGhlIHBhdGNoZXMuCisKIDxyYW5nZTE+IDxyYW5nZTI+OjoKIAlDb21wYXJlIHRoZSBjb21taXRzIHNwZWNpZmllZCBieSB0aGUgdHdvIHJhbmdlcywgd2hlcmUKIAlgPHJhbmdlMT5gIGlzIGNvbnNpZGVyZWQgYW4gb2xkZXIgdmVyc2lvbiBvZiBgPHJhbmdlMj5gLgpAQCAtNzUsNyArNzksNyBAQAogbGlua2dpdDpnaXQtZGlmZlsxXSksIG1vc3Qgbm90YWJseSB0aGUgYC0tY29sb3I9Wzx3aGVuPl1gIGFuZAogYC0tbm8tY29sb3JgIG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSAiZGlmZgogYmV0d2VlbiBwYXRjaGVzIiwgaS5lLiB0byBjb21wYXJlIHRoZSBhdXRob3IsIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmIG9mCi1jb3JyZXNwb25kaW5nIG9sZC9uZXcgY29tbWl0cy4gVGhlcmUgaXMgY3VycmVudGx5IG5vIG1lYW5zIHRvIHR3ZWFrIHRoZQorY29ycmVzcG9uZGluZyBvbGQvbmV3IGNvbW1pdHMuIFRoZXJlIGlzIGN1cnJlbnRseSBubyBtZWFucyB0byB0d2VhayBtb3N0IG9mIHRoZQogZGlmZiBvcHRpb25zIHBhc3NlZCB0byBgZ2l0IGxvZ2Agd2hlbiBnZW5lcmF0aW5nIHRob3NlIHBhdGNoZXMuCiAKIE9VVFBVVCBTVEFCSUxJVFkKQEAgLTI0Miw3ICsyNDYsNyBAQAogCiBUaGUgb3ZlcmFsbCB0aW1lIG5lZWRlZCB0byBjb21wdXRlIHRoaXMgYWxnb3JpdGhtIGlzIHRoZSB0aW1lIG5lZWRlZCB0bwogY29tcHV0ZSBuK20gY29tbWl0IGRpZmZzIGFuZCB0aGVuIG4qbSBkaWZmcyBvZiBwYXRjaGVzLCBwbHVzIHRoZSB0aW1lCi1uZWVkZWQgdG8gY29tcHV0ZSB0aGUgbGVhc3QtY29zdCBhc3NpZ21lbnQgYmV0d2VlbiBuIGFuZCBtIGRpZmZzLiBHaXQKK25lZWRlZCB0byBjb21wdXRlIHRoZSBsZWFzdC1jb3N0IGFzc2lnbm1lbnQgYmV0d2VlbiBuIGFuZCBtIGRpZmZzLiBHaXQKIHVzZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEpvbmtlci1Wb2xnZW5hbnQgYWxnb3JpdGhtIHRvIHNvbHZlIHRoZQogYXNzaWdubWVudCBwcm9ibGVtLCB3aGljaCBoYXMgY3ViaWMgcnVudGltZSBjb21wbGV4aXR5LiBUaGUgbWF0Y2hpbmcKIGZvdW5kIGluIHRoaXMgY2FzZSB3aWxsIGxvb2sgbGlrZSB0aGlzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKaW5kZXggNjM5YTQxNy4uMGM0ZjAzOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CkBAIC00NDMsOCArNDQzLDggQEAKIG9udG8gYDx1cHN0cmVhbT5gIChvciBgPG9udG8+YCwgaWYgc3BlY2lmaWVkKS4KICsKIFRoZSBgLS1yZWJhc2UtbWVyZ2VzYCBtb2RlIGlzIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBkZXByZWNhdGVkCi1gLS1wcmVzZXJ2ZS1tZXJnZXNgLCBidXQgaW4gY29udHJhc3QgdG8gdGhhdCBvcHRpb24gd29ya3Mgd2VsbCBpbiBpbnRlcmFjdGl2ZQotcmViYXNlczogY29tbWl0cyBjYW4gYmUgcmVvcmRlcmVkLCBpbnNlcnRlZCBhbmQgZHJvcHBlZCBhdCB3aWxsLgorYC0tcHJlc2VydmUtbWVyZ2VzYCBidXQgd29ya3Mgd2l0aCBpbnRlcmFjdGl2ZSByZWJhc2VzLAord2hlcmUgY29tbWl0cyBjYW4gYmUgcmVvcmRlcmVkLCBpbnNlcnRlZCBhbmQgZHJvcHBlZCBhdCB3aWxsLgogKwogSXQgaXMgY3VycmVudGx5IG9ubHkgcG9zc2libGUgdG8gcmVjcmVhdGUgdGhlIG1lcmdlIGNvbW1pdHMgdXNpbmcgdGhlCiBgcmVjdXJzaXZlYCBtZXJnZSBzdHJhdGVneTsgRGlmZmVyZW50IG1lcmdlIHN0cmF0ZWdpZXMgY2FuIGJlIHVzZWQgb25seSB2aWEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CmluZGV4IGU3MmQzMzIuLjE5YjEyYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dApAQCAtMjYyLDcgKzI2Miw4IEBACiAJZGlyZWN0b3J5LgogCiAtLXNob3ctdG9wbGV2ZWw6OgotCVNob3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisJU2hvdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgd29ya2luZworCXRyZWUuIElmIHRoZXJlIGlzIG5vIHdvcmtpbmcgdHJlZSwgcmVwb3J0IGFuIGVycm9yLgogCiAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZTo6CiAJU2hvdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcm9vdCBvZiB0aGUgc3VwZXJwcm9qZWN0J3MKQEAgLTI3NCw2ICsyNzUsMTMgQEAKIAlTaG93IHRoZSBwYXRoIHRvIHRoZSBzaGFyZWQgaW5kZXggZmlsZSBpbiBzcGxpdCBpbmRleCBtb2RlLCBvcgogCWVtcHR5IGlmIG5vdCBpbiBzcGxpdC1pbmRleCBtb2RlLgogCistLXNob3ctb2JqZWN0LWZvcm1hdFs9KHN0b3JhZ2V8aW5wdXR8b3V0cHV0KV06OgorCVNob3cgdGhlIG9iamVjdCBmb3JtYXQgKGhhc2ggYWxnb3JpdGhtKSB1c2VkIGZvciB0aGUgcmVwb3NpdG9yeQorCWZvciBzdG9yYWdlIGluc2lkZSB0aGUgYC5naXRgIGRpcmVjdG9yeSwgaW5wdXQsIG9yIG91dHB1dC4gRm9yCisJaW5wdXQsIG11bHRpcGxlIGFsZ29yaXRobXMgbWF5IGJlIHByaW50ZWQsIHNwYWNlLXNlcGFyYXRlZC4KKwlJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyAic3RvcmFnZSIuCisKKwogT3RoZXIgT3B0aW9ucwogfn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKaW5kZXggYmM4MDkwNS4uYTcyZWE3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dApAQCAtNzYsNiArNzYsOSBAQAogUGF0aHMgbWF5IG5lZWQgdG8gYmUgcHJlZml4ZWQgd2l0aCBgLS1gIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQogb3B0aW9ucyBvciB0aGUgcmV2aXNpb24gcmFuZ2UsIHdoZW4gY29uZnVzaW9uIGFyaXNlcy4KIAorOmdpdC1zaG9ydGxvZzogMQoraW5jbHVkZTo6cmV2LWxpc3Qtb3B0aW9ucy50eHRbXQorCiBNQVBQSU5HIEFVVEhPUlMKIC0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAppbmRleCAxZjQ2MzgwLi5jM2M1MjIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKQEAgLTgwLDYgKzgwLDkgQEAKIAlkb2VzIG5vdCBtYXRjaCB0aGUgU0hBLTEgZm91bmQgaW4gdGhlIGluZGV4IG9mIHRoZSBjb250YWluaW5nCiAJcmVwb3NpdG9yeSBhbmQgYFVgIGlmIHRoZSBzdWJtb2R1bGUgaGFzIG1lcmdlIGNvbmZsaWN0cy4KICsKK0lmIGAtLWNhY2hlZGAgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCBpbnN0ZWFkIHByaW50IHRoZSBTSEEtMQorcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBmb3IgZWFjaCBzdWJtb2R1bGUuCisrCiBJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIG5lc3RlZAogc3VibW9kdWxlcywgYW5kIHNob3cgdGhlaXIgc3RhdHVzIGFzIHdlbGwuCiArCkBAIC0xMzMsNyArMTM2LDggQEAKICsKIC0tCiBVcGRhdGUgdGhlIHJlZ2lzdGVyZWQgc3VibW9kdWxlcyB0byBtYXRjaCB3aGF0IHRoZSBzdXBlcnByb2plY3QKLWV4cGVjdHMgYnkgY2xvbmluZyBtaXNzaW5nIHN1Ym1vZHVsZXMgYW5kIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgb2YKK2V4cGVjdHMgYnkgY2xvbmluZyBtaXNzaW5nIHN1Ym1vZHVsZXMsIGZldGNoaW5nIG1pc3NpbmcgY29tbWl0cworaW4gc3VibW9kdWxlcyBhbmQgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSBvZgogdGhlIHN1Ym1vZHVsZXMuIFRoZSAidXBkYXRpbmciIGNhbiBiZSBkb25lIGluIHNldmVyYWwgd2F5cyBkZXBlbmRpbmcKIG9uIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGUgdmFsdWUgb2YgYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYAogY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gVGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dAppbmRleCA1Mzc3NGY1Li42NjI0YTE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKQEAgLTY3Nyw3ICs2NzcsOCBAQAogLXM8c3RyYXRlZ3k+OjoKIC0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CiAtcDo6Ci0tLXByZXNlcnZlLW1lcmdlczo6CistLXJlYmFzZS1tZXJnZXM6OgorLS1wcmVzZXJ2ZS1tZXJnZXMgKERFUFJFQ0FURUQpOjoKIAlUaGVzZSBhcmUgb25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JyBhbmQgJ3JlYmFzZScgY29tbWFuZHMuCiArCiBQYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCByZWJhc2UnIHdoZW4gdXNpbmcgJ2Rjb21taXQnIGlmIGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CmluZGV4IDJlNTU5OWEuLmY2ZDk3OTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtNjUsNyArNjUsNyBAQAogLS1zaWduOjoKIAlNYWtlIGEgR1BHLXNpZ25lZCB0YWcsIHVzaW5nIHRoZSBkZWZhdWx0IGUtbWFpbCBhZGRyZXNzJ3Mga2V5LgogCVRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRhZyBHUEctc2lnbmluZyBpcyBjb250cm9sbGVkIGJ5IGB0YWcuZ3BnU2lnbmAKLQljb25maWd1cmF0aW9uIHZhcmlhYmxlIGlmIGl0IGV4aXN0cywgb3IgZGlzYWJsZWQgb2RlciBvdGhlcndpc2UuCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGRpc2FibGVkIG90aGVyd2lzZS4KIAlTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgogCiAtLW5vLXNpZ246OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggMWM0ZDE0Ni4uYzdhNjI3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0xNiw2ICsxNiw3IEBACiAJICAgICBbLS1jaG1vZD0oK3wtKXhdCiAJICAgICBbLS1bbm8tXWFzc3VtZS11bmNoYW5nZWRdCiAJICAgICBbLS1bbm8tXXNraXAtd29ya3RyZWVdCisJICAgICBbLS1bbm8tXWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXNdCiAJICAgICBbLS1bbm8tXWZzbW9uaXRvci12YWxpZF0KIAkgICAgIFstLWlnbm9yZS1zdWJtb2R1bGVzXQogCSAgICAgWy0tW25vLV1zcGxpdC1pbmRleF0KQEAgLTExMyw2ICsxMTQsMTEgQEAKIAlzZXQgYW5kIHVuc2V0IHRoZSAic2tpcC13b3JrdHJlZSIgYml0IGZvciB0aGUgcGF0aHMuIFNlZQogCXNlY3Rpb24gIlNraXAtd29ya3RyZWUgYml0IiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorCistLVtuby1daWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllczo6CisJRG8gbm90IHJlbW92ZSBza2lwLXdvcmt0cmVlIChBS0EgImluZGV4LW9ubHkiKSBlbnRyaWVzIGV2ZW4gd2hlbgorCXRoZSBgLS1yZW1vdmVgIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCiAtLVtuby1dZnNtb25pdG9yLXZhbGlkOjoKIAlXaGVuIG9uZSBvZiB0aGVzZSBmbGFncyBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZAogCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCkBAIC00MjYsNyArNDMyLDcgQEAKIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCiAKIFRvIGF2b2lkIGRlbGV0aW5nIGEgc2hhcmVkIGluZGV4IGZpbGUgdGhhdCBpcyBzdGlsbCB1c2VkLCBpdHMKLW1vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBldmVyeXRpbWUgYSBuZXcgc3BsaXQKK21vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBldmVyeSB0aW1lIGEgbmV3IHNwbGl0CiBpbmRleCBiYXNlZCBvbiB0aGUgc2hhcmVkIGluZGV4IGZpbGUgaXMgZWl0aGVyIGNyZWF0ZWQgb3IgcmVhZCBmcm9tLgogCiBVTlRSQUNLRUQgQ0FDSEUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCA5YjgyNTY0Li4xYjY3OGUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0yNzEsOCArMjcxLDggQEAKIHRoZSB3b3JraW5nIHRyZWUuCiAKIAotU3luY2hpbmcgcmVwb3NpdG9yaWVzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1N5bmNpbmcgcmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBpbmNsdWRlOjpjbWRzLXN5bmNoaW5ncmVwb3NpdG9yaWVzLnR4dFtdCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CmluZGV4IGM1YTUyOGMuLjUwOGZlNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMjkzLDEwICsyOTMsMTAgQEAKIAogSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB0ZWxsIEdpdCB0aGUgZW5jb2Rpbmcgb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nCiBkaXJlY3Rvcnkgd2l0aCB0aGUgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgYXR0cmlidXRlLiBJZiBhIGZpbGUgd2l0aCB0aGlzCi1hdHRyaWJ1dGUgaXMgYWRkZWQgdG8gR2l0LCB0aGVuIEdpdCByZWVuY29kZXMgdGhlIGNvbnRlbnQgZnJvbSB0aGUKK2F0dHJpYnV0ZSBpcyBhZGRlZCB0byBHaXQsIHRoZW4gR2l0IHJlLWVuY29kZXMgdGhlIGNvbnRlbnQgZnJvbSB0aGUKIHNwZWNpZmllZCBlbmNvZGluZyB0byBVVEYtOC4gRmluYWxseSwgR2l0IHN0b3JlcyB0aGUgVVRGLTggZW5jb2RlZAogY29udGVudCBpbiBpdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgKGNhbGxlZCAidGhlIGluZGV4IikuIE9uIGNoZWNrb3V0Ci10aGUgY29udGVudCBpcyByZWVuY29kZWQgYmFjayB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLgordGhlIGNvbnRlbnQgaXMgcmUtZW5jb2RlZCBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuCiAKIFBsZWFzZSBub3RlIHRoYXQgdXNpbmcgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZSBtYXkgaGF2ZSBhCiBudW1iZXIgb2YgcGl0ZmFsbHM6CkBAIC00OTgsNyArNDk4LDcgQEAKIFdoZW4gR2l0IGVuY291bnRlcnMgdGhlIGZpcnN0IGZpbGUgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIG9yIHNtdWRnZWQsCiBpdCBzdGFydHMgdGhlIGZpbHRlciBhbmQgcGVyZm9ybXMgdGhlIGhhbmRzaGFrZS4gSW4gdGhlIGhhbmRzaGFrZSwgdGhlCiB3ZWxjb21lIG1lc3NhZ2Ugc2VudCBieSBHaXQgaXMgImdpdC1maWx0ZXItY2xpZW50Iiwgb25seSB2ZXJzaW9uIDIgaXMKLXN1cHBwb3J0ZWQsIGFuZCB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBhcmUgImNsZWFuIiwgInNtdWRnZSIsIGFuZAorc3VwcG9ydGVkLCBhbmQgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgYXJlICJjbGVhbiIsICJzbXVkZ2UiLCBhbmQKICJkZWxheSIuCiAKIEFmdGVyd2FyZHMgR2l0IHNlbmRzIGEgbGlzdCBvZiAia2V5PXZhbHVlIiBwYWlycyB0ZXJtaW5hdGVkIHdpdGgKQEAgLTgxMiw2ICs4MTIsOCBAQAogCiAtIGBkdHNgIHN1aXRhYmxlIGZvciBkZXZpY2V0cmVlIChEVFMpIGZpbGVzLgogCistIGBlbGl4aXJgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgRWxpeGlyIGxhbmd1YWdlLgorCiAtIGBmb3J0cmFuYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEZvcnRyYW4gbGFuZ3VhZ2UuCiAKIC0gYGZvdW50YWluYCBzdWl0YWJsZSBmb3IgRm91bnRhaW4gZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKaW5kZXggZjJhNjViYS4uOTUzYzM4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CkBAIC04MSw3ICs4MSw3IEBACiAJICAgIENvbW1pdHRlZCBkaWZmZXJlbmNlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0cmFja2VkIGZpbGVzIHdpbGwgc2hvdwogCSAgICB1cC4KIAotCW5vbmU7OyBObyBtb2RpZmlhdGlvbnMgdG8gc3VibW9kdWxlcyBhcmUgaWdub3JlZCwgYWxsIG9mIGNvbW1pdHRlZAorCW5vbmU7OyBObyBtb2RpZmljYXRpb25zIHRvIHN1Ym1vZHVsZXMgYXJlIGlnbm9yZWQsIGFsbCBvZiBjb21taXR0ZWQKIAkgICAgZGlmZmVyZW5jZXMsIGFuZCBtb2RpZmljYXRpb25zIHRvIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyBhcmUKIAkgICAgc2hvd24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CmluZGV4IGQ2Mzg4ZjEuLjFhMmVmNGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC05Niw5ICs5Niw5IEBACiAJZGlyZWN0b3J5LiAgVGhlICdnaXQgcHJ1bmUnIGNvbW1hbmQga25vd3MgdG8gcHJlc2VydmUKIAlvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkgYW5kCiAJaXRzIHN1YmRpcmVjdG9yaWVzLgotCVRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCByZWZzL2Jpc2VjdCBhbmQKLQlyZWZzL3dvcmt0cmVlKSBpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZAotCSIkR0lUX0NPTU1PTl9ESVIvcmVmcyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisJVGhpcyBkaXJlY3RvcnkgaXMgaWdub3JlZCAoZXhjZXB0IHJlZnMvYmlzZWN0LAorCXJlZnMvcmV3cml0dGVuIGFuZCByZWZzL3dvcmt0cmVlKSBpZiAkR0lUX0NPTU1PTl9ESVIgaXMKKwlzZXQgYW5kICIkR0lUX0NPTU1PTl9ESVIvcmVmcyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCiAKIHJlZnMvaGVhZHMvYG5hbWVgOjoKIAlyZWNvcmRzIHRpcC1vZi10aGUtdHJlZSBjb21taXQgb2JqZWN0cyBvZiBicmFuY2ggYG5hbWVgCkBAIC0yNDAsOCArMjQwLDggQEAKIGxvZ3M6OgogCVJlY29yZHMgb2YgY2hhbmdlcyBtYWRlIHRvIHJlZnMgYXJlIHN0b3JlZCBpbiB0aGlzIGRpcmVjdG9yeS4KIAlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLXJlZlsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gVGhpcwotCWRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUiBpcyBzZXQgYW5kCi0JIiRHSVRfQ09NTU9OX0RJUi9sb2dzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKwlkaXJlY3RvcnkgaXMgaWdub3JlZCAoZXhjZXB0IGxvZ3MvSEVBRCkgaWYgJEdJVF9DT01NT05fRElSIGlzCisJc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL2xvZ3MiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogCiBsb2dzL3JlZnMvaGVhZHMvYG5hbWVgOjoKIAlSZWNvcmRzIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJyYW5jaCB0aXAgbmFtZWQgYG5hbWVgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0c3VibW9kdWxlcy50eHQKaW5kZXggMGE4OTAyMC4uYzQ3NmY4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHN1Ym1vZHVsZXMudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXRzdWJtb2R1bGVzIC0gbW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIKK2dpdHN1Ym1vZHVsZXMgLSBNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlcgogCiBTWU5PUFNJUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0CmluZGV4IGJkMTAyNzQuLjgxYmUwZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dApAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KIAogVGhlIGxhc3QgZGlmZiBiZXR0ZXIgbm90IHRvIHNob3cgYW55dGhpbmcgb3RoZXIgdGhhbiBjbGVhbnVwcwotZm9yIGNydWZ0cy4gIFRoZW4gSSBjYW4gZmluYWxseSBjbGVhbiB0aGluZ3MgdXA6Citmb3IgY3J1ZnQuICBUaGVuIEkgY2FuIGZpbmFsbHkgY2xlYW4gdGhpbmdzIHVwOgogCiAgICAgICAgICQgZ2l0IGJyYW5jaCAtRCB0b3BpYwogICAgICAgICAkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgbnVrZSBwcmV0ZW5kIG1lcmdlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dAppbmRleCA1OWI4ZmYxLi40MGRjNGY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKQEAgLTM0LDcgKzM0LDcgQEAKIAogLS1jbGVhbnVwPTxtb2RlPjo6CiAJVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyBob3cgdGhlIG1lcmdlIG1lc3NhZ2Ugd2lsbCBiZSBjbGVhbmVkIHVwIGJlZm9yZQotCWNvbW1pdGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBkZXRhaWxzLiBJbiBhZGRpdGlvbiwgaWYKKwljb21taXR0aW5nLiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlIGRldGFpbHMuIEluIGFkZGl0aW9uLCBpZgogCXRoZSAnPG1vZGU+JyBpcyBnaXZlbiBhIHZhbHVlIG9mIGBzY2lzc29yc2AsIHNjaXNzb3JzIHdpbGwgYmUgYXBwZW5kZWQKIAl0byBgTUVSR0VfTVNHYCBiZWZvcmUgYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBjb21taXQgbWFjaGluZXJ5IGluIHRoZQogCWNhc2Ugb2YgYSBtZXJnZSBjb25mbGljdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CmluZGV4IGFhNjZjYmUuLjI5MTJkZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApAQCAtMzIsNyArMzIsNyBAQAogb3Vyczs7CiAJVGhpcyBvcHRpb24gZm9yY2VzIGNvbmZsaWN0aW5nIGh1bmtzIHRvIGJlIGF1dG8tcmVzb2x2ZWQgY2xlYW5seSBieQogCWZhdm9yaW5nICdvdXInIHZlcnNpb24uICBDaGFuZ2VzIGZyb20gdGhlIG90aGVyIHRyZWUgdGhhdCBkbyBub3QKLQljb25mbGljdCB3aXRoIG91ciBzaWRlIGFyZSByZWZsZWN0ZWQgdG8gdGhlIG1lcmdlIHJlc3VsdC4KKwljb25mbGljdCB3aXRoIG91ciBzaWRlIGFyZSByZWZsZWN0ZWQgaW4gdGhlIG1lcmdlIHJlc3VsdC4KIAlGb3IgYSBiaW5hcnkgZmlsZSwgdGhlIGVudGlyZSBjb250ZW50cyBhcmUgdGFrZW4gZnJvbSBvdXIgc2lkZS4KICsKIFRoaXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSAnb3VycycgbWVyZ2Ugc3RyYXRlZ3ksIHdoaWNoIGRvZXMgbm90CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CmluZGV4IGI4N2UyZTguLjMxYzZlOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CkBAIC0xNjMsNiArMTYzLDkgQEAKICclYWUnOjogYXV0aG9yIGVtYWlsCiAnJWFFJzo6IGF1dGhvciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdCiAJb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWFsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVhTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclYWwnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclYWQnOjogYXV0aG9yIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKICclYUQnOjogYXV0aG9yIGRhdGUsIFJGQzI4MjIgc3R5bGUKICclYXInOjogYXV0aG9yIGRhdGUsIHJlbGF0aXZlCkBAIC0xNzUsNiArMTc4LDkgQEAKICclY2UnOjogY29tbWl0dGVyIGVtYWlsCiAnJWNFJzo6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCiAJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVjTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclY2wnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclY2QnOjogY29tbWl0dGVyIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKICclY0QnOjogY29tbWl0dGVyIGRhdGUsIFJGQzI4MjIgc3R5bGUKICclY3InOjogY29tbWl0dGVyIGRhdGUsIHJlbGF0aXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0CmluZGV4IGU0NGZjOGYuLjY4OTNhNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0CkBAIC01Nyw3ICs1Nyw3IEBACiBhbmQgJ2Z1bGxlcicpLgogCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCi0tLW5vdGVzWz08dHJlZWlzaD5dOjoKKy0tbm90ZXNbPTxyZWY+XTo6CiAJU2hvdyB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgdGhhdCBhbm5vdGF0ZSB0aGUKIAljb21taXQsIHdoZW4gc2hvd2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAogCWZvciBgZ2l0IGxvZ2AsIGBnaXQgc2hvd2AgYW5kIGBnaXQgd2hhdGNoYW5nZWRgIGNvbW1hbmRzIHdoZW4KQEAgLTY4LDggKzY4LDggQEAKIGBjb3JlLm5vdGVzUmVmYCBhbmQgYG5vdGVzLmRpc3BsYXlSZWZgIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZwogZW52aXJvbm1lbnQgb3ZlcnJpZGVzKS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgogKwotV2l0aCBhbiBvcHRpb25hbCAnPHRyZWVpc2g+JyBhcmd1bWVudCwgdXNlIHRoZSB0cmVlaXNoIHRvIGZpbmQgdGhlIG5vdGVzCi10byBkaXNwbGF5LiAgVGhlIHRyZWVpc2ggY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucworV2l0aCBhbiBvcHRpb25hbCAnPHJlZj4nIGFyZ3VtZW50LCB1c2UgdGhlIHJlZiB0byBmaW5kIHRoZSBub3RlcwordG8gZGlzcGxheS4gIFRoZSByZWYgY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucwogd2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0IGJlZ2lucyB3aXRoIGBub3Rlcy9gLCBgcmVmcy9gIGFuZCBvdGhlcndpc2UKIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQgdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgogKwpAQCAtODUsNyArODUsNyBAQAogCSItLW5vdGVzIC0tbm90ZXM9Zm9vIC0tbm8tbm90ZXMgLS1ub3Rlcz1iYXIiIHdpbGwgb25seSBzaG93IG5vdGVzCiAJZnJvbSAicmVmcy9ub3Rlcy9iYXIiLgogCi0tLXNob3ctbm90ZXNbPTx0cmVlaXNoPl06OgorLS1zaG93LW5vdGVzWz08cmVmPl06OgogLS1bbm8tXXN0YW5kYXJkLW5vdGVzOjoKIAlUaGVzZSBvcHRpb25zIGFyZSBkZXByZWNhdGVkLiBVc2UgdGhlIGFib3ZlIC0tbm90ZXMvLS1uby1ub3RlcwogCW9wdGlvbnMgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDkwZmY5ZTIuLmY2M2NlZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtNTgsNyArNTgsNyBAQAogCWAtLWFsbC1tYXRjaGApLgogaWZuZGVmOjpnaXQtcmV2LWxpc3RbXQogKwotV2hlbiBgLS1zaG93LW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCitXaGVuIGAtLW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCiBtYXRjaGVkIGFzIGlmIGl0IHdlcmUgcGFydCBvZiB0aGUgbG9nIG1lc3NhZ2UuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KIApAQCAtNTc5LDYgKzU3OSw3IEBACiBjb250ZW50cyBvZiB0aGUgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCBvdGhlcgogY29tbWl0cyBhcmUgbWFya2VkIGFzIFRSRUVTQU1FIChzdWJqZWN0IHRvIGJlIHNpbXBsaWZpZWQgYXdheSkuCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIGlmZGVmOjpnaXQtcmV2LWxpc3RbXQogQmlzZWN0aW9uIEhlbHBlcnMKIH5+fn5+fn5+fn5+fn5+fn5+CkBAIC02MzQsOCArNjM1LDkgQEAKIGFmdGVyIGFsbCB0aGUgc29ydGVkIGNvbW1pdCBvYmplY3RzLCB0aGVyZSB3aWxsIGJlIHRoZSBzYW1lIHRleHQgYXMgaWYKIGAtLWJpc2VjdC12YXJzYCBoYWQgYmVlbiB1c2VkIGFsb25lLgogZW5kaWY6OmdpdC1yZXYtbGlzdFtdCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAotCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBDb21taXQgT3JkZXJpbmcKIH5+fn5+fn5+fn5+fn5+fgogCkBAIC02NzcsNyArNjc5LDkgQEAKIAlPdXRwdXQgdGhlIGNvbW1pdHMgY2hvc2VuIHRvIGJlIHNob3duIChzZWUgQ29tbWl0IExpbWl0aW5nCiAJc2VjdGlvbiBhYm92ZSkgaW4gcmV2ZXJzZSBvcmRlci4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKIAlgLS13YWxrLXJlZmxvZ3NgLgorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIE9iamVjdCBUcmF2ZXJzYWwKIH5+fn5+fn5+fn5+fn5+fn4KIApAQCAtODE3LDcgKzgyMSw5IEBACiAKIC0tZG8td2Fsazo6CiAJT3ZlcnJpZGVzIGEgcHJldmlvdXMgYC0tbm8td2Fsa2AuCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAoraWZuZGVmOjpnaXQtc2hvcnRsb2dbXQogQ29tbWl0IEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTk3Myw3ICs5NzksOSBAQAogCWNvdW50cyBhbmQgcHJpbnQgdGhlIGNvdW50IGZvciBlcXVpdmFsZW50IGNvbW1pdHMgc2VwYXJhdGVkCiAJYnkgYSB0YWIuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KK2VuZGlmOjpnaXQtc2hvcnRsb2dbXQogCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCiBEaWZmIEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fgpAQCAtMTAxNiwzICsxMDI0LDQgQEAKIC10OjoKIAlTaG93IHRoZSB0cmVlIG9iamVjdHMgaW4gdGhlIGRpZmYgb3V0cHV0LiBUaGlzIGltcGxpZXMgYC1yYC4KIGVuZGlmOjpnaXQtcmV2LWxpc3RbXQorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jb25maWcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDIwNzE2Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jb25maWcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLWNvbmZpZyBBUEkKLT09PT09PT09PT0KLQotVGhlIGNvbmZpZyBBUEkgZ2l2ZXMgY2FsbGVycyBhIHdheSB0byBhY2Nlc3MgR2l0IGNvbmZpZ3VyYXRpb24gZmlsZXMKLShhbmQgZmlsZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBzeW50YXgpLiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBhCi1kaXNjdXNzaW9uIG9mIHRoZSBjb25maWcgZmlsZSBzeW50YXguCi0KLUdlbmVyYWwgVXNhZ2UKLS0tLS0tLS0tLS0tLS0KLQotQ29uZmlnIGZpbGVzIGFyZSBwYXJzZWQgbGluZWFybHksIGFuZCBlYWNoIHZhcmlhYmxlIGZvdW5kIGlzIHBhc3NlZCB0byBhCi1jYWxsZXItcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyByZXNwb25zaWJsZQotZm9yIGFueSBhY3Rpb25zIHRvIGJlIHRha2VuIG9uIHRoZSBjb25maWcgb3B0aW9uLCBhbmQgaXMgZnJlZSB0byBpZ25vcmUKLXNvbWUgb3B0aW9ucy4gSXQgaXMgbm90IHVuY29tbW9uIGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBwYXJzZWQKLXNldmVyYWwgdGltZXMgZHVyaW5nIHRoZSBydW4gb2YgYSBHaXQgcHJvZ3JhbSwgd2l0aCBkaWZmZXJlbnQgY2FsbGJhY2tzCi1waWNraW5nIG91dCBkaWZmZXJlbnQgdmFyaWFibGVzIHVzZWZ1bCB0byB0aGVtc2VsdmVzLgotCi1BIGNvbmZpZyBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzOgotCi0tIHRoZSBuYW1lIG9mIHRoZSBwYXJzZWQgdmFyaWFibGUuIFRoaXMgaXMgaW4gY2Fub25pY2FsICJmbGF0IiBmb3JtOiB0aGUKLSAgc2VjdGlvbiwgc3Vic2VjdGlvbiwgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGRvdHMsCi0gIGFuZCB0aGUgc2VjdGlvbiBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBhbGwgbG93ZXJjYXNlLiBFLmcuLAotICBgY29yZS5pZ25vcmVjYXNlYCwgYGRpZmYuU29tZVR5cGUudGV4dGNvbnZgLgotCi0tIHRoZSB2YWx1ZSBvZiB0aGUgZm91bmQgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB0aGUgdmFyaWFibGUgaGFkIG5vCi0gIHZhbHVlIHNwZWNpZmllZCwgdGhlIHZhbHVlIHdpbGwgYmUgTlVMTCAodHlwaWNhbGx5IHRoaXMgbWVhbnMgaXQKLSAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJvb2xlYW4gdHJ1ZSkuCi0KLS0gYSB2b2lkIHBvaW50ZXIgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXIgb2YgdGhlIGNvbmZpZyBBUEk7IHRoaXMgY2FuCi0gIGNvbnRhaW4gY2FsbGJhY2stc3BlY2lmaWMgZGF0YQotCi1BIGNvbmZpZyBjYWxsYmFjayBzaG91bGQgcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG9yIC0xIGlmIHRoZSB2YXJpYWJsZQotY291bGQgbm90IGJlIHBhcnNlZCBwcm9wZXJseS4KLQotQmFzaWMgQ29uZmlnIFF1ZXJ5aW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW9zdCBwcm9ncmFtcyB3aWxsIHNpbXBseSB3YW50IHRvIGxvb2sgdXAgdmFyaWFibGVzIGluIGFsbCBjb25maWcgZmlsZXMKLXRoYXQgR2l0IGtub3dzIGFib3V0LCB1c2luZyB0aGUgbm9ybWFsIHByZWNlZGVuY2UgcnVsZXMuIFRvIGRvIHRoaXMsCi1jYWxsIGBnaXRfY29uZmlnYCB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHZvaWQgZGF0YSBwb2ludGVyLgotCi1gZ2l0X2NvbmZpZ2Agd2lsbCByZWFkIGFsbCBjb25maWcgc291cmNlcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nCi1wcmlvcml0eS4gVGh1cyBhIGNhbGxiYWNrIHNob3VsZCB0eXBpY2FsbHkgb3ZlcndyaXRlIHByZXZpb3VzbHktc2VlbgotZW50cmllcyB3aXRoIG5ldyBvbmVzIChlLmcuLCBpZiBib3RoIHRoZSB1c2VyLXdpZGUgYH4vLmdpdGNvbmZpZ2AgYW5kCi1yZXBvLXNwZWNpZmljIGAuZ2l0L2NvbmZpZ2AgY29udGFpbiBgY29sb3IudWlgLCB0aGUgY29uZmlnIG1hY2hpbmVyeQotd2lsbCBmaXJzdCBmZWVkIHRoZSB1c2VyLXdpZGUgb25lIHRvIHRoZSBjYWxsYmFjaywgYW5kIHRoZW4gdGhlCi1yZXBvLXNwZWNpZmljIG9uZTsgYnkgb3ZlcndyaXRpbmcsIHRoZSBoaWdoZXItcHJpb3JpdHkgcmVwby1zcGVjaWZpYwotdmFsdWUgaXMgbGVmdCBhdCB0aGUgZW5kKS4KLQotVGhlIGBjb25maWdfd2l0aF9vcHRpb25zYCBmdW5jdGlvbiBsZXRzIHRoZSBjYWxsZXIgZXhhbWluZSBjb25maWcKLXdoaWxlIGFkanVzdGluZyBzb21lIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBnaXRfY29uZmlnYC4gSXQgc2hvdWxkCi1hbG1vc3QgbmV2ZXIgYmUgdXNlZCBieSAicmVndWxhciIgR2l0IGNvZGUgdGhhdCBpcyBsb29raW5nIHVwCi1jb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gSXQgaXMgaW50ZW5kZWQgZm9yIGFkdmFuY2VkIGNhbGxlcnMgbGlrZQotYGdpdC1jb25maWdgLCB3aGljaCBhcmUgaW50ZW50aW9uYWxseSB0d2Vha2luZyB0aGUgbm9ybWFsIGNvbmZpZy1sb29rdXAKLXByb2Nlc3MuIEl0IHRha2VzIHR3byBleHRyYSBwYXJhbWV0ZXJzOgotCi1gY29uZmlnX3NvdXJjZWA6OgotSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwsIGl0IHNwZWNpZmllcyB0aGUgc291cmNlIHRvIHBhcnNlIGZvcgotY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gbG9va2luZyBpbiB0aGUgdXN1YWwgZmlsZXMuIFNlZSBgc3RydWN0Ci1naXRfY29uZmlnX3NvdXJjZWAgaW4gYGNvbmZpZy5oYCBmb3IgZGV0YWlscy4gUmVndWxhciBgZ2l0X2NvbmZpZ2AgZGVmYXVsdHMKLXRvIGBOVUxMYC4KLQotYG9wdHNgOjoKLVNwZWNpZnkgb3B0aW9ucyB0byBhZGp1c3QgdGhlIGJlaGF2aW9yIG9mIHBhcnNpbmcgY29uZmlnIGZpbGVzLiBTZWUgYHN0cnVjdAotY29uZmlnX29wdGlvbnNgIGluIGBjb25maWcuaGAgZm9yIGRldGFpbHMuIEFzIGFuIGV4YW1wbGU6IHJlZ3VsYXIgYGdpdF9jb25maWdgCi1zZXRzIGBvcHRzLnJlc3BlY3RfaW5jbHVkZXNgIHRvIGAxYCBieSBkZWZhdWx0LgotCi1SZWFkaW5nIFNwZWNpZmljIEZpbGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIHJlYWQgYSBzcGVjaWZpYyBmaWxlIGluIGdpdC1jb25maWcgZm9ybWF0LCB1c2UKLWBnaXRfY29uZmlnX2Zyb21fZmlsZWAuIFRoaXMgdGFrZXMgdGhlIHNhbWUgY2FsbGJhY2sgYW5kIGRhdGEgcGFyYW1ldGVycwotYXMgYGdpdF9jb25maWdgLgotCi1RdWVyeWluZyBGb3IgU3BlY2lmaWMgVmFyaWFibGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvciBwcm9ncmFtcyB3YW50aW5nIHRvIHF1ZXJ5IGZvciBzcGVjaWZpYyB2YXJpYWJsZXMgaW4gYSBub24tY2FsbGJhY2sKLW1hbm5lciwgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVgCi1hbmQgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpYC4gVGhleSBib3RoIHJlYWQgdmFsdWVzIGZyb20gYW4gaW50ZXJuYWwKLWNhY2hlIGdlbmVyYXRlZCBwcmV2aW91c2x5IGZyb20gcmVhZGluZyB0aGUgY29uZmlnIGZpbGVzLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKWA6OgotCi0JRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLAotCXN0b3JlcyB0aGUgcG9pbnRlciB0byBpdCBpbiBgdmFsdWVgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlCi0JY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCi0JYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0IGlzIG93bmVkCi0JYnkgdGhlIGNhY2hlLgotCi1gY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aShjb25zdCBjaGFyICprZXkpYDo6Ci0KLQlGaW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgcHJpb3JpdHkKLQlmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKLQlga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgTlVMTC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5Ci0JdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KLQotYHZvaWQgZ2l0X2NvbmZpZ19jbGVhcih2b2lkKWA6OgotCi0JUmVzZXRzIGFuZCBpbnZhbGlkYXRlcyB0aGUgY29uZmlnIGNhY2hlLgotCi1UaGUgY29uZmlnIEFQSSBhbHNvIHByb3ZpZGVzIHR5cGUgc3BlY2lmaWMgQVBJIGZ1bmN0aW9ucyB3aGljaCBkbyBjb252ZXJzaW9uCi1hcyB3ZWxsIGFzIHJldHJpZXZhbCBmb3IgdGhlIHF1ZXJpZWQgdmFyaWFibGUsIGluY2x1ZGluZzoKLQotYGludCBnaXRfY29uZmlnX2dldF9pbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpYDo6Ci0KLQlGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSB0byBhbiBpbnRlZ2VyIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQotCWBrZXlgLiBEaWVzIG9uIGVycm9yOyBvdGhlcndpc2UsIHN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBpbnRlZ2VyIGluCi0JYGRlc3RgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLAotCXJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nIGBkZXN0YC4KLQotYGludCBnaXRfY29uZmlnX2dldF91bG9uZyhjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpYDo6Ci0KLQlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9pbnRgIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdClgOjoKLQotCUZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIGludG8gYSBib29sZWFuIHZhbHVlLCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KLQl2YXJpYWJsZSBga2V5YCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZCAiZmFsc2UiLiBJbnRlZ2VyCi0JdmFsdWVzIGFyZSBjb252ZXJ0ZWQgaW50byB0cnVlL2ZhbHNlIHZhbHVlcyAod2hlbiB0aGV5IGFyZSBub24temVybyBvcgotCXplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZiBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsCi0Jc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIHJlc3VsdCBpbiBgZGVzdGAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKLQljb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcKLQlgZGVzdGAuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgKmlzX2Jvb2wsIGludCAqZGVzdClgOjoKLQotCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2Jvb2xgLCBleGNlcHQgdGhhdCBpbnRlZ2VycyBhcmUgY29waWVkIGFzLWlzLAotCWFuZCBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KLQotYGludCBnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfYm9vbGAsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgLTEgb24gZXJyb3IKLQlyYXRoZXIgdGhhbiBkeWluZy4KLQotYGludCBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdClgOjoKLQotCUFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSByZXRyaWV2ZWQgc3RyaW5nIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgZm9yCi0JdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWA7IGlmIE5VTEwgc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4KLQllcnJvciBtZXNzYWdlIGFuZCByZXR1cm5zIC0xLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzCi0Jbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZyBgZGVzdGAuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpYDo6Ci0KLQlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3RgLCBleGNlcHQgdGhhdCByZXRyaWV2ZWQgdmFsdWUKLQljb3BpZWQgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlciBpcyBhIG11dGFibGUgc3RyaW5nLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpYDo6Ci0KLQlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9zdHJpbmdgLCBidXQgZXhwYW5kcyBgfmAgb3IgYH51c2VyYCBpbnRvCi0JdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSB3aGVuIGZvdW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCi0KLWBnaXRfZGllX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmVyciwgLi4uKWA6OgotCi0JRmlyc3QgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIGluIGBlcnJgIGFuZCB0aGVuCi0JZGllcyBwcmludGluZyB0aGUgbGluZSBudW1iZXIgYW5kIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKLQl2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuCi0KLWB2b2lkIGdpdF9kaWVfY29uZmlnX2xpbmVucihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5yKWA6OgotCi0JSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGZvcm1hdHMgdGhlIGRpZSBlcnJvciBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUKLQlwYXJhbWV0ZXJzIGVudGVyZWQuIFVzZWQgYnkgYGdpdF9kaWVfY29uZmlnKClgLiBJdCBjYW4gYmUgdXNlZCBieSBjYWxsZXJzCi0JaGFuZGxpbmcgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKClgIHRvIHByaW50IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UKLQlmb3IgdGhlIGRlc2lyZWQgdmFsdWUuCi0KLVNlZSB0ZXN0LWNvbmZpZy5jIGZvciB1c2FnZSBleGFtcGxlcy4KLQotVmFsdWUgUGFyc2luZyBIZWxwZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gYWlkIGluIHBhcnNpbmcgc3RyaW5nIHZhbHVlcywgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgY2FsbGJhY2tzIHdpdGgKLWEgbnVtYmVyIG9mIGhlbHBlciBmdW5jdGlvbnMsIGluY2x1ZGluZzoKLQotYGdpdF9jb25maWdfaW50YDo6Ci1QYXJzZSB0aGUgc3RyaW5nIHRvIGFuIGludGVnZXIsIGluY2x1ZGluZyB1bml0IGZhY3RvcnMuIERpZXMgb24gZXJyb3I7Ci1vdGhlcndpc2UsIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuCi0KLWBnaXRfY29uZmlnX3Vsb25nYDo6Ci1JZGVudGljYWwgdG8gYGdpdF9jb25maWdfaW50YCwgYnV0IGZvciB1bnNpZ25lZCBsb25ncy4KLQotYGdpdF9jb25maWdfYm9vbGA6OgotUGFyc2UgYSBzdHJpbmcgaW50byBhIGJvb2xlYW4gdmFsdWUsIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kCi0iZmFsc2UiLiBJbnRlZ2VyIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleQotYXJlIG5vbi16ZXJvIG9yIHplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZgotcGFyc2luZyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXN1bHQuCi0KLWBnaXRfY29uZmlnX2Jvb2xfb3JfaW50YDo6Ci1TYW1lIGFzIGBnaXRfY29uZmlnX2Jvb2xgLCBleGNlcHQgdGhhdCBpbnRlZ2VycyBhcmUgcmV0dXJuZWQgYXMtaXMsIGFuZAotYW4gYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCi0KLWBnaXRfcGFyc2VfbWF5YmVfYm9vbGA6OgotU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvciByYXRoZXIKLXRoYW4gZHlpbmcuCi0KLWBnaXRfY29uZmlnX3N0cmluZ2A6OgotQWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIHZhbHVlIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyOyBpZiBubwotc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4KLQotYGdpdF9jb25maWdfcGF0aG5hbWVgOjoKLVNpbWlsYXIgdG8gYGdpdF9jb25maWdfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50byB0aGUKLXVzZXIncyBob21lIGRpcmVjdG9yeSB3aGVuIGZvdW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCi0KLUluY2x1ZGUgRGlyZWN0aXZlcwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJ5IGRlZmF1bHQsIHRoZSBjb25maWcgcGFyc2VyIGRvZXMgbm90IHJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzLgotSG93ZXZlciwgYSBjYWxsZXIgY2FuIHVzZSB0aGUgc3BlY2lhbCBgZ2l0X2NvbmZpZ19pbmNsdWRlYCB3cmFwcGVyCi1jYWxsYmFjayB0byBzdXBwb3J0IHRoZW0uIFRvIGRvIHNvLCB5b3Ugc2ltcGx5IHdyYXAgeW91ciAicmVhbCIgY2FsbGJhY2sKLWZ1bmN0aW9uIGFuZCBkYXRhIHBvaW50ZXIgaW4gYSBgc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGFgLCBhbmQgcGFzcwotdGhlIHdyYXBwZXIgdG8gdGhlIHJlZ3VsYXIgY29uZmlnLXJlYWRpbmcgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IHJlYWRfZmlsZV93aXRoX2luY2x1ZGUoY29uc3QgY2hhciAqZmlsZSwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgaW5jID0gQ09ORklHX0lOQ0xVREVfSU5JVDsKLQlpbmMuZm4gPSBmbjsKLQlpbmMuZGF0YSA9IGRhdGE7Ci0JcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGdpdF9jb25maWdfaW5jbHVkZSwgZmlsZSwgJmluYyk7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBnaXRfY29uZmlnYCByZXNwZWN0cyBpbmNsdWRlcyBhdXRvbWF0aWNhbGx5LiBUaGUgbG93ZXItbGV2ZWwKLWBnaXRfY29uZmlnX2Zyb21fZmlsZWAgZG9lcyBub3QuCi0KLUN1c3RvbSBDb25maWdzZXRzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1BIGBjb25maWdfc2V0YCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYW4gaW4tbWVtb3J5IGNhY2hlIGZvcgotY29uZmlnLWxpa2UgZmlsZXMgdGhhdCB0aGUgY2FsbGVyIHNwZWNpZmllcyAoaS5lLiwgZmlsZXMgbGlrZSBgLmdpdG1vZHVsZXNgLAotYH4vLmdpdGNvbmZpZ2AgZXRjLikuIEZvciBleGFtcGxlLAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdHJ1Y3QgY29uZmlnX3NldCBnbV9jb25maWc7Ci1naXRfY29uZmlnc2V0X2luaXQoJmdtX2NvbmZpZyk7Ci1pbnQgYjsKLS8qIHdlIGFkZCBjb25maWcgZmlsZXMgdG8gdGhlIGNvbmZpZ19zZXQgKi8KLWdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmdtX2NvbmZpZywgIi5naXRtb2R1bGVzIik7Ci1naXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlc19hbHQiKTsKLQotaWYgKCFnaXRfY29uZmlnc2V0X2dldF9ib29sKGdtX2NvbmZpZywgInN1Ym1vZHVsZS5mcm90ei5pZ25vcmUiLCAmYikpIHsKLQkvKiBoYWNrIGhhY2sgaGFjayAqLwotfQotCi0vKiB3aGVuIHdlIGFyZSBkb25lIHdpdGggdGhlIGNvbmZpZ3NldCAqLwotZ2l0X2NvbmZpZ3NldF9jbGVhcigmZ21fY29uZmlnKTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ29uZmlnc2V0IEFQSSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBhYm92ZSBtZW50aW9uZWQgd29yayBmbG93LCBpbmNsdWRpbmc6Ci0KLWB2b2lkIGdpdF9jb25maWdzZXRfaW5pdChzdHJ1Y3QgY29uZmlnX3NldCAqY3MpYDo6Ci0KLQlJbml0aWFsaXplcyB0aGUgY29uZmlnX3NldCBgY3NgLgotCi1gaW50IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICpmaWxlbmFtZSlgOjoKLQotCVBhcnNlcyB0aGUgZmlsZSBhbmQgYWRkcyB0aGUgdmFyaWFibGUtdmFsdWUgcGFpcnMgdG8gdGhlIGBjb25maWdfc2V0YCwKLQlkaWVzIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIHBhcnNpbmcgdGhlIGZpbGUuIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvcgotCS0xIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGluYWNjZXNzaWJsZS4gVGhlIHVzZXIgaGFzIHRvIGRlY2lkZQotCWlmIGhlIHdhbnRzIHRvIGZyZWUgdGhlIGluY29tcGxldGUgY29uZmlnc2V0IG9yIGNvbnRpbnVlIHVzaW5nIGl0IHdoZW4KLQl0aGUgZnVuY3Rpb24gcmV0dXJucyAtMS4KLQotYGludCBnaXRfY29uZmlnc2V0X2dldF92YWx1ZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKWA6OgotCi0JRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgCi0JYW5kIGNvbmZpZyBzZXQgYGNzYCwgc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4KLQlXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQKLQl0b3VjaGluZyBgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQKLQlpcyBvd25lZCBieSB0aGUgY2FjaGUuCi0KLWBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlX211bHRpKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5KWA6OgotCi0JRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5Ci0JZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGFuZCBjb25maWcgc2V0IGBjc2AuIFdoZW4gdGhlCi0JY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgTlVMTC4gVGhlIGNhbGxlcgotCXNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KLQotYHZvaWQgZ2l0X2NvbmZpZ3NldF9jbGVhcihzdHJ1Y3QgY29uZmlnX3NldCAqY3MpYDo6Ci0KLQlDbGVhcnMgYGNvbmZpZ19zZXRgIHN0cnVjdHVyZSwgcmVtb3ZlcyBhbGwgc2F2ZWQgdmFyaWFibGUtdmFsdWUgcGFpcnMuCi0KLUluIGFkZGl0aW9uIHRvIGFib3ZlIGZ1bmN0aW9ucywgdGhlIGBjb25maWdfc2V0YCBBUEkgcHJvdmlkZXMgdHlwZSBzcGVjaWZpYwotZnVuY3Rpb25zIGluIHRoZSB2ZWluIG9mIGBnaXRfY29uZmlnX2dldF9pbnRgIGFuZCBmYW1pbHkgYnV0IHdpdGggYW4gZXh0cmEKLXBhcmFtZXRlciwgcG9pbnRlciB0byBzdHJ1Y3QgYGNvbmZpZ19zZXRgLgotVGhleSBhbGwgYmVoYXZlIHNpbWlsYXJseSB0byB0aGUgYGdpdF9jb25maWdfZ2V0KigpYCBmYW1pbHkgZGVzY3JpYmVkIGluCi0iUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcyIgYWJvdmUuCi0KLVdyaXRpbmcgQ29uZmlnIEZpbGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1HaXQgZ2l2ZXMgbXVsdGlwbGUgZW50cnkgcG9pbnRzIGluIHRoZSBDb25maWcgQVBJIHRvIHdyaXRlIGNvbmZpZyB2YWx1ZXMgdG8KLWZpbGVzIG5hbWVseSBgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZWAgYW5kIGBnaXRfY29uZmlnX3NldGAsIHdoaWNoIHdyaXRlIHRvCi1hIHNwZWNpZmljIGNvbmZpZyBmaWxlIG9yIHRvIGAuZ2l0L2NvbmZpZ2AgcmVzcGVjdGl2ZWx5LiBUaGV5IGJvdGggdGFrZSBhCi1rZXkvdmFsdWUgcGFpciBhcyBwYXJhbWV0ZXIuCi1JbiB0aGUgZW5kIHRoZXkgYm90aCBjYWxsIGBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlYCB3aGljaCB0YWtlcyBmb3VyCi1wYXJhbWV0ZXJzOgotCi0tIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBhcyBhIHN0cmluZywgdG8gd2hpY2gga2V5L3ZhbHVlIHBhaXJzIHdpbGwgYmUgd3JpdHRlbi4KLQotLSB0aGUgbmFtZSBvZiBrZXksIGFzIGEgc3RyaW5nLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlIHNlY3Rpb24sCi0gIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLCBhbmQgdGhlIHNlY3Rpb24KLSAgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4KLSAgRS5nLiwgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KLQotLSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdmFsdWUgaXMgZXF1YWwgdG8gTlVMTCwgaXQgd2lsbAotICByZW1vdmUgdGhlIG1hdGNoaW5nIGtleSBmcm9tIHRoZSBjb25maWcgZmlsZS4KLQotLSB0aGUgdmFsdWUgcmVnZXgsIGFzIGEgc3RyaW5nLiBJdCB3aWxsIGRpc3JlZ2FyZCBrZXkvdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWUKLSAgZG9lcyBub3QgbWF0Y2guCi0KLS0gYSBtdWx0aV9yZXBsYWNlIHZhbHVlLCBhcyBhbiBpbnQuIElmIHZhbHVlIGlzIGVxdWFsIHRvIHplcm8sIG5vdGhpbmcgb3Igb25seQotICBvbmUgbWF0Y2hpbmcga2V5L3ZhbHVlIGlzIHJlcGxhY2VkLCBlbHNlIGFsbCBtYXRjaGluZyBrZXkvdmFsdWVzIChyZWdhcmRsZXNzCi0gIGhvdyBtYW55KSBhcmUgcmVtb3ZlZCwgYmVmb3JlIHRoZSBuZXcgcGFpciBpcyB3cml0dGVuLgotCi1JdCByZXR1cm5zIDAgb24gc3VjY2Vzcy4KLQotQWxzbywgdGhlcmUgYXJlIGZ1bmN0aW9ucyBgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbmAgYW5kCi1gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlYCB3aXRoIHBhcmFtZXRlcnMgYG9sZF9uYW1lYCBhbmQgYG5ld19uYW1lYAotZm9yIHJlbmFtaW5nIG9yIHJlbW92aW5nIHNlY3Rpb25zIGluIHRoZSBjb25maWcgZmlsZXMuIElmIE5VTEwgaXMgcGFzc2VkCi10aHJvdWdoIGBuZXdfbmFtZWAgcGFyYW1ldGVyLCB0aGUgc2VjdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWNjODkuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdyZXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1ncmVwIEFQSQotPT09PT09PT0KLQotVGFsayBhYm91dCA8Z3JlcC5oPiwgdGhpbmdzIGxpa2U6Ci0KLSogZ3JlcF9idWZmZXIoKQotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMjk2MjIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9iamVjdC1hY2Nlc3MudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotb2JqZWN0IGFjY2VzcyBBUEkKLT09PT09PT09PT09PT09PT09Ci0KLVRhbGsgYWJvdXQgPHNoYTEtZmlsZS5jPiBhbmQgPG9iamVjdC5oPiBmYW1pbHksIHRoaW5ncyBsaWtlCi0KLSogcmVhZF9zaGExX2ZpbGUoKQotKiByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSgpCi0qIGhhc19zaGExX2ZpbGUoKQotKiB3cml0ZV9zaGExX2ZpbGUoKQotKiBwcmV0ZW5kX29iamVjdF9maWxlKCkKLSogbG9va3VwX3tvYmplY3QsY29tbWl0LHRhZyxibG9iLHRyZWV9Ci0qIHBhcnNlX3tvYmplY3QsY29tbWl0LHRhZyxibG9iLHRyZWV9Ci0qIFVzZSBvZiBvYmplY3QgZmxhZ3MKLQotKEpDLCBTaGF3biwgRGFuaWVsLCBEc2NobywgTGludXMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcXVvdGUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhMWJjZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcXVvdGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcXVvdGUgQVBJCi09PT09PT09PT0KLQotVGFsayBhYm91dCA8cXVvdGUuaD4sIHRoaW5ncyBsaWtlCi0KLSogc3FfcXVvdGUgYW5kIHVucXVvdGUKLSogY19zdHlsZSBxdW90ZSBhbmQgdW5xdW90ZQotKiBxdW90aW5nIGZvciBmb3JlaWduIGxhbmd1YWdlcwotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3VibW9kdWxlLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3VibW9kdWxlLWNvbmZpZy50eHQKaW5kZXggZmIwNjA4OS4uYzQwOTU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdWJtb2R1bGUtY29uZmlnLnR4dApAQCAtNTgsNyArNTgsNyBAQAogCiBXaGVuZXZlciBhIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGlzIHBhcnNlZCBpbiBgcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb25gCiB2aWEgZS5nLiBgZ2l0bW9kdWxlc19jb25maWcoKWAsIGl0IHdpbGwgb3ZlcndyaXRlIHRoZSBudWxsX3NoYTEgZW50cnkuCi1TbyBpbiB0aGUgbm9ybWFsIGNhc2UsIHdoZW4gSEVBRDouZ2l0bW9kdWxlcyBpcyBwYXJzZWQgZmlyc3QgYW5kIHRoZW4gb3ZlcmxheWVkCitTbyBpbiB0aGUgbm9ybWFsIGNhc2UsIHdoZW4gSEVBRDouZ2l0bW9kdWxlcyBpcyBwYXJzZWQgZmlyc3QgYW5kIHRoZW4gb3ZlcmxhaWQKIHdpdGggdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiwgdGhlIG51bGxfc2hhMSBlbnRyeSBjb250YWlucyB0aGUgbG9jYWwKIGNvbmZpZ3VyYXRpb24gb2YgYSBzdWJtb2R1bGUgKGUuZy4gY29uc29saWRhdGVkIHZhbHVlcyBmcm9tIGxvY2FsIGdpdAogY29uZmlndXJhdGlvbiBhbmQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaW4gdGhlIHdvcmt0cmVlKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKaW5kZXggYTA0NWRiZS4uMTc0OTBiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKQEAgLTE3OCw3ICsxNzgsNyBAQAogCiA9PSBQdWJsaWMgQVBJCiAKLUFsbCBUcmFjZTIgQVBJIGZ1bmN0aW9ucyBzZW5kIGEgbWVzc3NhZ2UgdG8gYWxsIG9mIHRoZSBhY3RpdmUKK0FsbCBUcmFjZTIgQVBJIGZ1bmN0aW9ucyBzZW5kIGEgbWVzc2FnZSB0byBhbGwgb2YgdGhlIGFjdGl2ZQogVHJhY2UyIFRhcmdldHMuICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzZXQgb2YgYXZhaWxhYmxlCiBtZXNzYWdlcy4KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJYW5kIHRoZSB0aHJlYWQgZWxhcHNlZCB0aW1lLgogKwogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkLXByb2MgYmVmb3JlIGl0IHJldHVybnMKLShzbyB0aGF0IHRoZSBjb29yZWN0IFRMUyBkYXRhIGlzIHVzZWQgYW5kIGNsZWFuZWQgdXAuICBJdCBzaG91bGQKKyhzbyB0aGF0IHRoZSBjb3JyZWN0IFRMUyBkYXRhIGlzIHVzZWQgYW5kIGNsZWFuZWQgdXApLiAgSXQgc2hvdWxkCiBub3QgYmUgY2FsbGVkIGJ5IHRoZSBjYWxsZXIgb2YgYHB0aHJlYWRfam9pbigpYC4KIAogPT09IFJlZ2lvbiBhbmQgRGF0YSBNZXNzYWdlcwpAQCAtNDA2LDcgKzQwNiw3IEBACiBiZWluZyBzdGFydGVkLCBzdWNoIGFzICJyZWFkX3JlY3Vyc2l2ZSIgb3IgImRvX3JlYWRfaW5kZXgiLgogKwogVGhlIGByZXBvYCBmaWVsZCwgaWYgc2V0LCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSAicmVwby1pZCIsIHNvIHRoYXQKLXJlY3Vyc2l2ZSBvZXJhdGlvbnMgY2FuIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIGNvcnJlY3QgcmVwb3NpdG9yeS4KK3JlY3Vyc2l2ZSBvcGVyYXRpb25zIGNhbiBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBjb3JyZWN0IHJlcG9zaXRvcnkuCiAKIGB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmUoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbylgOjoKIApAQCAtNDIxLDcgKzQyMSw3IEBACiBhbmQgcmVwb3J0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzdGFjayBmcmFtZS4KICsKIFRoZSBgY2F0ZWdvcnlgLCBgbGFiZWxgLCBhbmQgYHJlcG9gIGZpZWxkcyBhcmUgdGhlIHNhbWUgYXMgYWJvdmUuCi1UaGUgYGNhdGVnb3J5YCBhbmQgYGxhYmVsYCBkbyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY29ycmVwc29uZGluZworVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcKICJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsIGJ1dCBpdCBtYWtlcyB0aGUgZGF0YSBzdHJlYW0gZWFzaWVyIHRvCiB1bmRlcnN0YW5kLgogCkBAIC04MTYsNyArODE2LDcgQEAKIE5vdGUgdGhhdCB0aGUgc2Vzc2lvbi1pZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlIHRvCiB0aGUgY3VycmVudC9zcGF3bmluZyBwcm9jZXNzLCBzbyB0aGUgY2hpbGQncyBQSUQgaXMgcmVwb3J0ZWQgaGVyZSBhcwogYSBoaW50IGZvciBwb3N0LXByb2Nlc3NpbmcuICAoQnV0IGl0IGlzIG9ubHkgYSBoaW50IGJlY2F1c2UgdGhlIGNoaWxkCi1wcm9jZXMgbWF5IGJlIGEgc2hlbGwgc2NyaXB0IHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIHNlc3Npb24taWQuKQorcHJvY2VzcyBtYXkgYmUgYSBzaGVsbCBzY3JpcHQgd2hpY2ggZG9lc24ndCBoYXZlIGEgc2Vzc2lvbi1pZC4pCiArCiBOb3RlIHRoYXQgdGhlIGB0X3JlbGAgZmllbGQgY29udGFpbnMgdGhlIG9ic2VydmVkIHJ1biB0aW1lIGluIHNlY29uZHMKIGZvciB0aGUgY2hpbGQgcHJvY2VzcyAoc3RhcnRpbmcgYmVmb3JlIHRoZSBmb3JrL2V4ZWMvc3Bhd24gYW5kCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogKwogUmVnaW9ucyBtYXkgYmUgbmVzdGVkLiAgVGhpcyBjYXVzZXMgbWVzc2FnZXMgdG8gYmUgaW5kZW50ZWQgaW4gdGhlCiBQRVJGIHRhcmdldCwgZm9yIGV4YW1wbGUuCi1FbGFwc2VkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlcHNvbmRpbmcgbmVzdGluZworRWxhcHNlZCB0aW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIG5lc3RpbmcKIGxldmVsIGFzIGV4cGVjdGVkLiAgRm9yIGV4YW1wbGUsIGlmIHdlIGFkZCByZWdpb24gbWVzc2FnZSB0bzoKICsKIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNzEsNyArMTM3MSw3IEBACiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBwcmVsb2FkIHJlZ2lvbiB0b29rIDAuMDA5MTIyIHNlY29uZHMuICBUaGUgNyB0aHJlYWRzCiB0b29rIGJldHdlZW4gMC4wMDYwNjkgYW5kIDAuMDA4OTQ3IHNlY29uZHMgdG8gd29yayBvbiB0aGVpciBwb3J0aW9uIG9mCiB0aGUgaW5kZXguICBUaHJlYWQgInRoMDEiIHdvcmtlZCBvbiA1MDggaXRlbXMgYXQgb2Zmc2V0IDAuICBUaHJlYWQgInRoMDIiCi13b3JrZWQgb24gNTA4IGl0ZW1zIGF0IG9mZnNldCAyMDMyLiAgVGhyZWFkICJ0aDA0IiB3b3JrZWQgb24gNTA4IGl0ZW10cword29ya2VkIG9uIDUwOCBpdGVtcyBhdCBvZmZzZXQgMjAzMi4gIFRocmVhZCAidGgwNCIgd29ya2VkIG9uIDUwOCBpdGVtcwogYXQgb2Zmc2V0IDUwOC4KICsKIFRoaXMgZXhhbXBsZSBhbHNvIHNob3dzIHRoYXQgdGhyZWFkIG5hbWVzIGFyZSBhc3NpZ25lZCBpbiBhIHJhY3kgbWFubmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk2ZWNhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi14ZGlmZiBpbnRlcmZhY2UgQVBJCi09PT09PT09PT09PT09PT09PT09Ci0KLVRhbGsgYWJvdXQgb3VyIGNhbGxpbmcgY29udmVudGlvbiB0byB4ZGlmZiBsaWJyYXJ5LCBpbmNsdWRpbmcKLXhkaWZmX2VtaXRfY29uc3VtZV9mbi4KLQotKERzY2hvLCBKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0CmluZGV4IDcyOWZiY2IuLjE1MDcxMTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dApAQCAtMjIsMTEgKzIyLDExIEBACiBkaXJlY3Rvcnkgb2YgYW4gYWx0ZXJuYXRlLgogCiBUaGUgY29tbWl0LWdyYXBoIGZpbGUgc3RvcmVzIHRoZSBjb21taXQgZ3JhcGggc3RydWN0dXJlIGFsb25nIHdpdGggc29tZQotZXh0cmEgbWV0YWRhdGEgdG8gc3BlZWQgdXAgZ3JhcGggd2Fsa3MuIEJ5IGxpc3RpbmcgY29tbWl0IE9JRHMgaW4gbGV4aS0KLWNvZ3JhcGhpYyBvcmRlciwgd2UgY2FuIGlkZW50aWZ5IGFuIGludGVnZXIgcG9zaXRpb24gZm9yIGVhY2ggY29tbWl0IGFuZAotcmVmZXIgdG8gdGhlIHBhcmVudHMgb2YgYSBjb21taXQgdXNpbmcgdGhvc2UgaW50ZWdlciBwb3NpdGlvbnMuIFdlIHVzZQotYmluYXJ5IHNlYXJjaCB0byBmaW5kIGluaXRpYWwgY29tbWl0cyBhbmQgdGhlbiB1c2UgdGhlIGludGVnZXIgcG9zaXRpb25zCi1mb3IgZmFzdCBsb29rdXBzIGR1cmluZyB0aGUgd2Fsay4KK2V4dHJhIG1ldGFkYXRhIHRvIHNwZWVkIHVwIGdyYXBoIHdhbGtzLiBCeSBsaXN0aW5nIGNvbW1pdCBPSURzIGluCitsZXhpY29ncmFwaGljIG9yZGVyLCB3ZSBjYW4gaWRlbnRpZnkgYW4gaW50ZWdlciBwb3NpdGlvbiBmb3IgZWFjaCBjb21taXQKK2FuZCByZWZlciB0byB0aGUgcGFyZW50cyBvZiBhIGNvbW1pdCB1c2luZyB0aG9zZSBpbnRlZ2VyIHBvc2l0aW9ucy4gV2UKK3VzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgaW5pdGlhbCBjb21taXRzIGFuZCB0aGVuIHVzZSB0aGUgaW50ZWdlcgorcG9zaXRpb25zIGZvciBmYXN0IGxvb2t1cHMgZHVyaW5nIHRoZSB3YWxrLgogCiBBIGNvbnN1bWVyIG1heSBsb2FkIHRoZSBmb2xsb3dpbmcgaW5mbyBmb3IgYSBjb21taXQgZnJvbSB0aGUgZ3JhcGg6CiAKQEAgLTg1LDcgKzg1LDcgQEAKIFNpbmNlIHRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBjbG9zZWQgdW5kZXIgcmVhY2hhYmlsaXR5LCB3ZSBjYW4gZ3VhcmFudGVlCiB0aGUgZm9sbG93aW5nIHdlYWtlciBjb25kaXRpb24gb24gYWxsIGNvbW1pdHM6CiAKLSAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW1kIE0sIHJlc3BlY3RpdmVseSwKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW5kIE0sIHJlc3BlY3RpdmVseSwKICAgICBhbmQgTiA8IE0sIHRoZW4gQSBjYW5ub3QgcmVhY2ggQi4KIAogTm90ZSBob3cgdGhlIHN0cmljdCBpbmVxdWFsaXR5IGRpZmZlcnMgZnJvbSB0aGUgaW5lcXVhbGl0eSB3aGVuIHdlIGhhdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0CmluZGV4IDJhZThmYTQuLjhhNDU5NmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uLnR4dApAQCAtNTMxLDcgKzUzMSw3IEBACiBvbiBwdWJsaWMtZmFjaW5nIEdpdCBzZXJ2ZXJzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiBPbmNlIEdpdAogcHJvdG9jb2wgZ2FpbnMgU0hBLTI1NiBzdXBwb3J0LCBTSEEtMjU2IGJhc2VkIHNlcnZlcnMgYXJlIGxpa2VseSBub3QKIHRvIHN1cHBvcnQgU0hBLTEgY29tcGF0aWJpbGl0eSwgdG8gYXZvaWQgd2hhdCBtYXkgYmUgYSB2ZXJ5IGV4cGVuc2l2ZQotaGFzaCByZWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCitoYXNoIHJlLWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCiAKIFRoZSBkZXNpZ24gZGVzY3JpYmVkIGhlcmUgYWxsb3dzIGZldGNoZXMgYnkgU0hBLTEgY2xpZW50cyBvZiBhCiBwZXJzb25hbCBTSEEtMjU2IHJlcG9zaXRvcnkgYmVjYXVzZSBpdCdzIG5vdCBtdWNoIG1vcmUgZGlmZmljdWx0IHRoYW4KQEAgLTYwMiw3ICs2MDIsNyBAQAogCiBDaG9pY2Ugb2YgSGFzaAogLS0tLS0tLS0tLS0tLS0KLUluIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgIFhpYW95dW4gV2FuZywKK0luIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgWGlhb3l1biBXYW5nLAogWWlxdW4gTGlzYSBZaW4sIGFuZCBIb25nYm8gWXUgYW5ub3VuY2VkIGFuIGF0dGFjayBmaW5kaW5nIFNIQS0xCiBjb2xsaXNpb25zIGluIDJeNjkgb3BlcmF0aW9ucy4gSW4gQXVndXN0IHRoZXkgcHVibGlzaGVkIGRldGFpbHMuCiBMdWNraWx5LCBubyBwcmFjdGljYWwgZGVtb25zdHJhdGlvbnMgb2YgYSBjb2xsaXNpb24gaW4gZnVsbCBTSEEtMSB3ZXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dAppbmRleCA3YzRkNjdhLi5mYWEyNWM1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQKQEAgLTMxOCw3ICszMTgsNyBAQAogPT0gRW5kIG9mIEluZGV4IEVudHJ5CiAKICAgVGhlIEVuZCBvZiBJbmRleCBFbnRyeSAoRU9JRSkgaXMgdXNlZCB0byBsb2NhdGUgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUKLSAgbGVuZ3RoIGluZGV4IGVudHJpZXMgYW5kIHRoZSBiZWdpbmluZyBvZiB0aGUgZXh0ZW5zaW9ucy4gQ29kZSBjYW4gdGFrZQorICBsZW5ndGggaW5kZXggZW50cmllcyBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZXh0ZW5zaW9ucy4gQ29kZSBjYW4gdGFrZQogICBhZHZhbnRhZ2Ugb2YgdGhpcyB0byBxdWlja2x5IGxvY2F0ZSB0aGUgaW5kZXggZXh0ZW5zaW9ucyB3aXRob3V0IGhhdmluZwogICB0byBwYXJzZSB0aHJvdWdoIGFsbCBvZiB0aGUgaW5kZXggZW50cmllcy4KIApAQCAtMzUxLDcgKzM1MSw3IEBACiAKICAgLSBBIG51bWJlciBvZiBpbmRleCBvZmZzZXQgZW50cmllcyBlYWNoIGNvbnNpc3Rpbmcgb2Y6CiAKLSAgICAtIDMyLWJpdCBvZmZzZXQgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNhY2hlIGVudHJ5CisgICAgLSAzMi1iaXQgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgZmlyc3QgY2FjaGUgZW50cnkKIAlpbiB0aGlzIGJsb2NrIG9mIGVudHJpZXMuCiAKICAgICAtIDMyLWJpdCBjb3VudCBvZiBjYWNoZSBlbnRyaWVzIGluIHRoaXMgYmxvY2sKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKaW5kZXggYzczZTcyZC4uZDVjZTRlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKQEAgLTY0NCw3ICs2NDQsNyBAQAogICBjb21tYW5kLW9rICAgICAgICA9IFBLVC1MSU5FKCJvayIgU1AgcmVmbmFtZSkKICAgY29tbWFuZC1mYWlsICAgICAgPSBQS1QtTElORSgibmciIFNQIHJlZm5hbWUgU1AgZXJyb3ItbXNnKQogCi0gIGVycm9yLW1zZyAgICAgICAgID0gMSooT0NURUNUKSA7IHdoZXJlIG5vdCAib2siCisgIGVycm9yLW1zZyAgICAgICAgID0gMSooT0NURVQpIDsgd2hlcmUgbm90ICJvayIKIC0tLS0KIAogVXBkYXRlcyBjYW4gYmUgdW5zdWNjZXNzZnVsIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlIHJlZmVyZW5jZSBjYW4gaGF2ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYXJ0aWFsLWNsb25lLnR4dAppbmRleCAyMTAzNzNlLi5hNjAzNGQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYXJ0aWFsLWNsb25lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYXJ0aWFsLWNsb25lLnR4dApAQCAtMzIsNyArMzIsNyBAQAogCiBBIHJlbW90ZSB0aGF0IGNhbiBsYXRlciBwcm92aWRlIHRoZSBtaXNzaW5nIG9iamVjdHMgaXMgY2FsbGVkIGEKIHByb21pc29yIHJlbW90ZSwgYXMgaXQgcHJvbWlzZXMgdG8gc2VuZCB0aGUgb2JqZWN0cyB3aGVuCi1yZXF1ZXN0ZWQuIEluaXRpYWx5IEdpdCBzdXBwb3J0ZWQgb25seSBvbmUgcHJvbWlzb3IgcmVtb3RlLCB0aGUgb3JpZ2luCityZXF1ZXN0ZWQuIEluaXRpYWxseSBHaXQgc3VwcG9ydGVkIG9ubHkgb25lIHByb21pc29yIHJlbW90ZSwgdGhlIG9yaWdpbgogcmVtb3RlIGZyb20gd2hpY2ggdGhlIHVzZXIgY2xvbmVkIGFuZCB0aGF0IHdhcyBjb25maWd1cmVkIGluIHRoZQogImV4dGVuc2lvbnMucGFydGlhbENsb25lIiBjb25maWcgb3B0aW9uLiBMYXRlciBzdXBwb3J0IGZvciBtb3JlIHRoYW4KIG9uZSBwcm9taXNvciByZW1vdGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQKaW5kZXggNDBmOTFmNi4uN2UzNzY2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtdjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dApAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgb2ZzLWRlbHRhCiAJSW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IHVuZGVyc3RhbmRzIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZwogCXRvIGl0cyBiYXNlIGJ5IHBvc2l0aW9uIGluIHBhY2sgcmF0aGVyIHRoYW4gYnkgYW4gb2lkLiAgVGhhdCBpcywKLQl0aGV5IGNhbiByZWFkIE9CSl9PRlNfREVMVEEgKGFrZSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisJdGhleSBjYW4gcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgogCiBJZiB0aGUgJ3NoYWxsb3cnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBjYW4gYmUKIGluY2x1ZGVkIGluIHRoZSBjbGllbnRzIHJlcXVlc3QgYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGFkZGl0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcmVyZS50eHQKaW5kZXggYWEyMmQ3YS4uYWY1ZjlmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0CkBAIC0xMTcsNyArMTE3LDcgQEAKIDQgY29tYmluYXRpb25zIG9mICgiQiBvciBDIiwgIkMgb3IgQiIpIHggKCJYIG9yIFkiLCAiWSBvciBYIikuCiAKIEJ5IHNvcnRpbmcsIHRoZSBjb25mbGljdCBpcyBnaXZlbiBpdHMgY2Fub25pY2FsIG5hbWUsIG5hbWVseSwgImFuCi1lYXJseSBwYXJ0IGJlY2FtZSBCIG9yIEMsIGEgbGF0ZSBwYXJ0IGJlY2FtZXMgWCBvciBZIiwgYW5kIHdoZW5ldmVyCitlYXJseSBwYXJ0IGJlY2FtZSBCIG9yIEMsIGEgbGF0ZSBwYXJ0IGJlY2FtZSBYIG9yIFkiLCBhbmQgd2hlbmV2ZXIKIGFueSBvZiB0aGVzZSBmb3VyIHBhdHRlcm5zIGFwcGVhciwgYW5kIHdlIGNhbiBnZXQgdG8gdGhlIHNhbWUgY29uZmxpY3QKIGFuZCByZXNvbHV0aW9uIHRoYXQgd2Ugc2F3IGVhcmxpZXIuCiAKZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCA1MDQ4ZDliLi4yMmU4ZDgzIDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1HSVQtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYyLjI0LjAKK0RFRl9WRVI9djIuMjQuR0lUCiAKIExGPScKICcKZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCmluZGV4IGMzOTAwNmUuLjIyYzM2NGYgMTAwNjQ0Ci0tLSBhL0lOU1RBTEwKKysrIGIvSU5TVEFMTApAQCAtMTA5LDE1ICsxMDksMTUgQEAKIAogIC0gR2l0IGlzIHJlYXNvbmFibHkgc2VsZi1zdWZmaWNpZW50LCBidXQgZG9lcyBkZXBlbmQgb24gYSBmZXcgZXh0ZXJuYWwKICAgIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMuICBHaXQgY2FuIGJlIHVzZWQgd2l0aG91dCBtb3N0IG9mIHRoZW0gYnkgYWRkaW5nCi0gICB0aGUgYXBwcm9yaWF0ZSAiTk9fPExJQlJBUlk+PVllc1BsZWFzZSIgdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIG9yCisgICB0aGUgYXBwcm9wcmlhdGUgIk5PXzxMSUJSQVJZPj1ZZXNQbGVhc2UiIHRvIHRoZSBtYWtlIGNvbW1hbmQgbGluZSBvcgogICAgY29uZmlnLm1hayBmaWxlLgogCiAJLSAiemxpYiIsIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LiBHaXQgd29uJ3QgYnVpbGQgd2l0aG91dCBpdC4KIAogCS0gInNzaCIgaXMgdXNlZCB0byBwdXNoIGFuZCBwdWxsIG92ZXIgdGhlIG5ldC4KIAotCS0gQSBQT1NJWC1jb21wbGlhbnQgc2hlbGwgaXMgcmVxdWlyZWQgdG8gcnVuIG1hbnkgc2NyaXB0cyBuZWVkZWQKLQkgIGZvciBldmVyeWRheSB1c2UgKGUuZy4gImJpc2VjdCIsICJwdWxsIikuCisJLSBBIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBpcyByZXF1aXJlZCB0byBydW4gc29tZSBzY3JpcHRzIG5lZWRlZAorCSAgZm9yIGV2ZXJ5ZGF5IHVzZSAoZS5nLiAiYmlzZWN0IiwgInJlcXVlc3QtcHVsbCIpLgogCiAJLSAiUGVybCIgdmVyc2lvbiA1Ljggb3IgbGF0ZXIgaXMgbmVlZGVkIHRvIHVzZSBzb21lIG9mIHRoZQogCSAgZmVhdHVyZXMgKGUuZy4gcHJlcGFyaW5nIGEgcGFydGlhbCBjb21taXQgdXNpbmcgImdpdCBhZGQgLWkvLXAiLApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA1OGI5MmFmLi5iN2Q3Mzc0IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNzI3LDYgKzcyNyw3IEBACiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1wcm9ncmVzcy5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFjaC5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFkLWNhY2hlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlYWQtZ3JhcGgubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhZC1taWR4Lm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlZi1zdG9yZS5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWdleC5vCkBAIC04MjMsNiArODI0LDcgQEAKIAktbmFtZSAnKi5oJyAtcHJpbnQpKSkKIAogTElCX09CSlMgKz0gYWJzcGF0aC5vCitMSUJfT0JKUyArPSBhZGQtaW50ZXJhY3RpdmUubwogTElCX09CSlMgKz0gYWR2aWNlLm8KIExJQl9PQkpTICs9IGFsaWFzLm8KIExJQl9PQkpTICs9IGFsbG9jLm8KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKaW5kZXggZmM2NTdlNy4uMDkxZGQwMiAxMjAwMDAKLS0tIGEvUmVsTm90ZXMKKysrIGIvUmVsTm90ZXMKQEAgLTEgKzEgQEAKLURvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5jIGIvYWRkLWludGVyYWN0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjYjk4YwotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5jCkBAIC0wLDAgKzEsNjUyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhZGQtaW50ZXJhY3RpdmUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGFkZF9pX3N0YXRlIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcjsKKwlpbnQgdXNlX2NvbG9yOworCWNoYXIgaGVhZGVyX2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBoZWxwX2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBwcm9tcHRfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGVycm9yX2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciByZXNldF9jb2xvcltDT0xPUl9NQVhMRU5dOworfTsKKworc3RhdGljIHZvaWQgaW5pdF9jb2xvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGFkZF9pX3N0YXRlICpzLAorCQkgICAgICAgY29uc3QgY2hhciAqc2xvdF9uYW1lLCBjaGFyICpkc3QsCisJCSAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X2NvbG9yKQoreworCWNoYXIgKmtleSA9IHhzdHJmbXQoImNvbG9yLmludGVyYWN0aXZlLiVzIiwgc2xvdF9uYW1lKTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmICghcy0+dXNlX2NvbG9yKQorCQlkc3RbMF0gPSAnXDAnOworCWVsc2UgaWYgKHJlcG9fY29uZmlnX2dldF92YWx1ZShyLCBrZXksICZ2YWx1ZSkgfHwKKwkJIGNvbG9yX3BhcnNlKHZhbHVlLCBkc3QpKQorCQlzdHJsY3B5KGRzdCwgZGVmYXVsdF9jb2xvciwgQ09MT1JfTUFYTEVOKTsKKworCWZyZWUoa2V5KTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9hZGRfaV9zdGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJcy0+ciA9IHI7CisKKwlpZiAocmVwb19jb25maWdfZ2V0X3ZhbHVlKHIsICJjb2xvci5pbnRlcmFjdGl2ZSIsICZ2YWx1ZSkpCisJCXMtPnVzZV9jb2xvciA9IC0xOworCWVsc2UKKwkJcy0+dXNlX2NvbG9yID0KKwkJCWdpdF9jb25maWdfY29sb3Jib29sKCJjb2xvci5pbnRlcmFjdGl2ZSIsIHZhbHVlKTsKKwlzLT51c2VfY29sb3IgPSB3YW50X2NvbG9yKHMtPnVzZV9jb2xvcik7CisKKwlpbml0X2NvbG9yKHIsIHMsICJoZWFkZXIiLCBzLT5oZWFkZXJfY29sb3IsIEdJVF9DT0xPUl9CT0xEKTsKKwlpbml0X2NvbG9yKHIsIHMsICJoZWxwIiwgcy0+aGVscF9jb2xvciwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwlpbml0X2NvbG9yKHIsIHMsICJwcm9tcHQiLCBzLT5wcm9tcHRfY29sb3IsIEdJVF9DT0xPUl9CT0xEX0JMVUUpOworCWluaXRfY29sb3IociwgcywgImVycm9yIiwgcy0+ZXJyb3JfY29sb3IsIEdJVF9DT0xPUl9CT0xEX1JFRCk7CisJaW5pdF9jb2xvcihyLCBzLCAicmVzZXQiLCBzLT5yZXNldF9jb2xvciwgR0lUX0NPTE9SX1JFU0VUKTsKK30KKworLyoKKyAqIEEgInByZWZpeCBpdGVtIGxpc3QiIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBpZGVudGlmaWVkIGJ5IGEgc3RyaW5nLCBhbmQKKyAqIGEgdW5pcXVlIHByZWZpeCAoaWYgYW55KSBpcyBkZXRlcm1pbmVkIGZvciBlYWNoIGl0ZW0uCisgKgorICogSXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZvcm0gb2YgYSBwYWlyIG9mIGBzdHJpbmdfbGlzdGBzLCB0aGUgZmlyc3Qgb25lCisgKiBkdXBsaWNhdGluZyB0aGUgc3RyaW5ncywgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIHBvaW50aW5nIGF0IGEgc3RydWN0dXJlIHdob3NlCisgKiBmaXJzdCBmaWVsZCBtdXN0IGJlIGBzaXplX3QgcHJlZml4X2xlbmd0aGAuCisgKgorICogVGhhdCBgcHJlZml4X2xlbmd0aGAgZmllbGQgd2lsbCBiZSBjb21wdXRlZCBieSBgZmluZF91bmlxdWVfcHJlZml4ZXMoKWA7IEl0CisgKiB3aWxsIGJlIHNldCB0byB6ZXJvIGlmIG5vIHZhbGlkLCB1bmlxdWUgcHJlZml4IGNvdWxkIGJlIGZvdW5kLgorICoKKyAqIFRoZSBzZWNvbmQgYHN0cmluZ19saXN0YCBpcyBjYWxsZWQgYHNvcnRlZGAgYW5kIGRvZXMgX25vdF8gZHVwbGljYXRlIHRoZQorICogc3RyaW5ncyBidXQgc2ltcGx5IHJldXNlcyB0aGUgZmlyc3Qgb25lJ3MsIHdpdGggdGhlIGB1dGlsYCBmaWVsZCBwb2ludGluZyBhdAorICogdGhlIGBzdHJpbmdfaXRlbV9saXN0YCBvZiB0aGUgZmlyc3QgYHN0cmluZ19saXN0YC4gSXQgIHdpbGwgYmUgcG9wdWxhdGVkIGFuZAorICogc29ydGVkIGJ5IGBmaW5kX3VuaXF1ZV9wcmVmaXhlcygpYC4KKyAqLworc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgeworCXN0cnVjdCBzdHJpbmdfbGlzdCBpdGVtczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc29ydGVkOworCXNpemVfdCBtaW5fbGVuZ3RoLCBtYXhfbGVuZ3RoOworfTsKKyNkZWZpbmUgUFJFRklYX0lURU1fTElTVF9JTklUIFwKKwl7IFNUUklOR19MSVNUX0lOSVRfRFVQLCBTVFJJTkdfTElTVF9JTklUX05PRFVQLCAxLCA0IH0KKworc3RhdGljIHZvaWQgcHJlZml4X2l0ZW1fbGlzdF9jbGVhcihzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqbGlzdCkKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+aXRlbXMsIDEpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LT5zb3J0ZWQsIDApOworfQorCitzdGF0aWMgdm9pZCBleHRlbmRfcHJlZml4X2xlbmd0aChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcCwKKwkJCQkgY29uc3QgY2hhciAqb3RoZXJfc3RyaW5nLCBzaXplX3QgbWF4X2xlbmd0aCkKK3sKKwlzaXplX3QgKmxlbiA9IHAtPnV0aWw7CisKKwlpZiAoISpsZW4gfHwgbWVtY21wKHAtPnN0cmluZywgb3RoZXJfc3RyaW5nLCAqbGVuKSkKKwkJcmV0dXJuOworCisJZm9yICg7OykgeworCQljaGFyIGMgPSBwLT5zdHJpbmdbKmxlbl07CisKKwkJLyoKKwkJICogSXMgYHBgIGEgc3RyaWN0IHByZWZpeCBvZiBgb3RoZXJgPyBPciBoYXZlIHdlIGV4aGF1c3RlZCB0aGUKKwkJICogbWF4aW1hbCBsZW5ndGggb2YgdGhlIHByZWZpeD8gT3IgaXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGEKKwkJICogbXVsdGktYnl0ZSBVVEYtOCBvbmU/IElmIHNvLCB0aGVyZSBpcyBubyB2YWxpZCwgdW5pcXVlCisJCSAqIHByZWZpeC4KKwkJICovCisJCWlmICghYyB8fCArKypsZW4gPiBtYXhfbGVuZ3RoIHx8ICFpc2FzY2lpKGMpKSB7CisJCQkqbGVuID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgIT0gb3RoZXJfc3RyaW5nWypsZW4gLSAxXSkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF91bmlxdWVfcHJlZml4ZXMoc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJc2l6ZV90IGk7CisKKwlpZiAobGlzdC0+c29ydGVkLm5yID09IGxpc3QtPml0ZW1zLm5yKQorCQlyZXR1cm47CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+c29ydGVkLCAwKTsKKwkvKiBBdm9pZCByZWFsbG9jYXRpbmcgaW5jcmVtZW50YWxseSAqLworCWxpc3QtPnNvcnRlZC5pdGVtcyA9IHhtYWxsb2Moc3RfbXVsdChzaXplb2YoKmxpc3QtPnNvcnRlZC5pdGVtcyksCisJCQkJCSAgICAgbGlzdC0+aXRlbXMubnIpKTsKKwlsaXN0LT5zb3J0ZWQubnIgPSBsaXN0LT5zb3J0ZWQuYWxsb2MgPSBsaXN0LT5pdGVtcy5ucjsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5pdGVtcy5ucjsgaSsrKSB7CisJCWxpc3QtPnNvcnRlZC5pdGVtc1tpXS5zdHJpbmcgPSBsaXN0LT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJCWxpc3QtPnNvcnRlZC5pdGVtc1tpXS51dGlsID0gbGlzdC0+aXRlbXMuaXRlbXMgKyBpOworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJmxpc3QtPnNvcnRlZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+c29ydGVkLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnNvcnRlZF9pdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zICsgaTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBzb3J0ZWRfaXRlbS0+dXRpbDsKKwkJc2l6ZV90ICpsZW4gPSBpdGVtLT51dGlsOworCisJCSpsZW4gPSAwOworCQl3aGlsZSAoKmxlbiA8IGxpc3QtPm1pbl9sZW5ndGgpIHsKKwkJCWNoYXIgYyA9IGl0ZW0tPnN0cmluZ1soKmxlbikrK107CisKKwkJCWlmICghYyB8fCAhaXNhc2NpaShjKSkgeworCQkJCSpsZW4gPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGkgPiAwKQorCQkJZXh0ZW5kX3ByZWZpeF9sZW5ndGgoaXRlbSwgc29ydGVkX2l0ZW1bLTFdLnN0cmluZywKKwkJCQkJICAgICBsaXN0LT5tYXhfbGVuZ3RoKTsKKwkJaWYgKGkgKyAxIDwgbGlzdC0+c29ydGVkLm5yKQorCQkJZXh0ZW5kX3ByZWZpeF9sZW5ndGgoaXRlbSwgc29ydGVkX2l0ZW1bMV0uc3RyaW5nLAorCQkJCQkgICAgIGxpc3QtPm1heF9sZW5ndGgpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgZmluZF91bmlxdWUoY29uc3QgY2hhciAqc3RyaW5nLCBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqbGlzdCkKK3sKKwlpbnQgaW5kZXggPSBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleCgmbGlzdC0+c29ydGVkLCBzdHJpbmcsIDEpOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKGxpc3QtPml0ZW1zLm5yICE9IGxpc3QtPnNvcnRlZC5ucikKKwkJQlVHKCJwcmVmaXhfaXRlbV9saXN0IGluIGluY29uc2lzdGVudCBzdGF0ZSAoJSJQUkl1TUFYCisJCSAgICAiIHZzICUiUFJJdU1BWCIpIiwKKwkJICAgICh1aW50bWF4X3QpbGlzdC0+aXRlbXMubnIsICh1aW50bWF4X3QpbGlzdC0+c29ydGVkLm5yKTsKKworCWlmIChpbmRleCA8IDApCisJCWl0ZW0gPSBsaXN0LT5zb3J0ZWQuaXRlbXNbLTEgLSBpbmRleF0udXRpbDsKKwllbHNlIGlmIChpbmRleCA+IDAgJiYKKwkJIHN0YXJ0c193aXRoKGxpc3QtPnNvcnRlZC5pdGVtc1tpbmRleCAtIDFdLnN0cmluZywgc3RyaW5nKSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGluZGV4ICsgMSA8IGxpc3QtPnNvcnRlZC5uciAmJgorCQkgc3RhcnRzX3dpdGgobGlzdC0+c29ydGVkLml0ZW1zW2luZGV4ICsgMV0uc3RyaW5nLCBzdHJpbmcpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoaW5kZXggPCBsaXN0LT5zb3J0ZWQubnIpCisJCWl0ZW0gPSBsaXN0LT5zb3J0ZWQuaXRlbXNbaW5kZXhdLnV0aWw7CisJZWxzZQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGl0ZW0gLSBsaXN0LT5pdGVtcy5pdGVtczsKK30KKworc3RydWN0IGxpc3Rfb3B0aW9ucyB7CisJaW50IGNvbHVtbnM7CisJY29uc3QgY2hhciAqaGVhZGVyOworCXZvaWQgKCpwcmludF9pdGVtKShpbnQgaSwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKnByaW50X2l0ZW1fZGF0YSk7CisJdm9pZCAqcHJpbnRfaXRlbV9kYXRhOworfTsKKworc3RhdGljIHZvaWQgbGlzdChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJIHN0cnVjdCBsaXN0X29wdGlvbnMgKm9wdHMpCit7CisJaW50IGksIGxhc3RfbGYgPSAwOworCisJaWYgKCFsaXN0LT5ucikKKwkJcmV0dXJuOworCisJaWYgKG9wdHMtPmhlYWRlcikKKwkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlYWRlcl9jb2xvciwKKwkJCQkgIiVzIiwgb3B0cy0+aGVhZGVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCW9wdHMtPnByaW50X2l0ZW0oaSwgbGlzdC0+aXRlbXMgKyBpLCBvcHRzLT5wcmludF9pdGVtX2RhdGEpOworCisJCWlmICgob3B0cy0+Y29sdW1ucykgJiYgKChpICsgMSkgJSAob3B0cy0+Y29sdW1ucykpKSB7CisJCQlwdXRjaGFyKCdcdCcpOworCQkJbGFzdF9sZiA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQlwdXRjaGFyKCdcbicpOworCQkJbGFzdF9sZiA9IDE7CisJCX0KKwl9CisKKwlpZiAoIWxhc3RfbGYpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CitzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgeworCXN0cnVjdCBsaXN0X29wdGlvbnMgbGlzdF9vcHRzOworCisJY29uc3QgY2hhciAqcHJvbXB0OworCXZvaWQgKCpwcmludF9oZWxwKShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpOworfTsKKworI2RlZmluZSBMSVNUX0FORF9DSE9PU0VfRVJST1IgKC0xKQorI2RlZmluZSBMSVNUX0FORF9DSE9PU0VfUVVJVCAgKC0yKQorCisvKgorICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgaW5kZXguCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJldHVybnMgYExJU1RfQU5EX0NIT09TRV9FUlJPUmAuIFVwb24gRU9GLAorICogYExJU1RfQU5EX0NIT09TRV9RVUlUYCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIHNzaXplX3QgbGlzdF9hbmRfY2hvb3NlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqaXRlbXMsCisJCQkgICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgaW5wdXQgPSBTVFJCVUZfSU5JVDsKKwlzc2l6ZV90IHJlcyA9IExJU1RfQU5EX0NIT09TRV9FUlJPUjsKKworCWZpbmRfdW5pcXVlX3ByZWZpeGVzKGl0ZW1zKTsKKworCWZvciAoOzspIHsKKwkJY2hhciAqcDsKKworCQlzdHJidWZfcmVzZXQoJmlucHV0KTsKKworCQlsaXN0KHMsICZpdGVtcy0+aXRlbXMsICZvcHRzLT5saXN0X29wdHMpOworCisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5wcm9tcHRfY29sb3IsICIlcyIsIG9wdHMtPnByb21wdCk7CisJCWZwdXRzKCI+ICIsIHN0ZG91dCk7CisJCWZmbHVzaChzdGRvdXQpOworCisJCWlmIChzdHJidWZfZ2V0bGluZSgmaW5wdXQsIHN0ZGluKSA9PSBFT0YpIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlyZXMgPSBMSVNUX0FORF9DSE9PU0VfUVVJVDsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl90cmltKCZpbnB1dCk7CisKKwkJaWYgKCFpbnB1dC5sZW4pCisJCQlicmVhazsKKworCQlpZiAoIXN0cmNtcChpbnB1dC5idWYsICI/IikpIHsKKwkJCW9wdHMtPnByaW50X2hlbHAocyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXAgPSBpbnB1dC5idWY7CisJCWZvciAoOzspIHsKKwkJCXNpemVfdCBzZXAgPSBzdHJjc3BuKHAsICIgXHRcclxuLCIpOworCQkJc3NpemVfdCBpbmRleCA9IC0xOworCisJCQlpZiAoIXNlcCkgeworCQkJCWlmICghKnApCisJCQkJCWJyZWFrOworCQkJCXArKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGlzZGlnaXQoKnApKSB7CisJCQkJY2hhciAqZW5kcDsKKwkJCQlpbmRleCA9IHN0cnRvdWwocCwgJmVuZHAsIDEwKSAtIDE7CisJCQkJaWYgKGVuZHAgIT0gcCArIHNlcCkKKwkJCQkJaW5kZXggPSAtMTsKKwkJCX0KKworCQkJaWYgKHBbc2VwXSkKKwkJCQlwW3NlcCsrXSA9ICdcMCc7CisJCQlpZiAoaW5kZXggPCAwKQorCQkJCWluZGV4ID0gZmluZF91bmlxdWUocCwgaXRlbXMpOworCisJCQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGl0ZW1zLT5pdGVtcy5ucikKKwkJCQljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+ZXJyb3JfY29sb3IsCisJCQkJCQkgXygiSHVoICglcyk/IiksIHApOworCQkJZWxzZSB7CisJCQkJcmVzID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXAgKz0gc2VwOworCQl9CisKKwkJaWYgKHJlcyAhPSBMSVNUX0FORF9DSE9PU0VfRVJST1IpCisJCQlicmVhazsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmaW5wdXQpOworCXJldHVybiByZXM7Cit9CisKK3N0cnVjdCBhZGRkZWwgeworCXVpbnRtYXhfdCBhZGQsIGRlbDsKKwl1bnNpZ25lZCBzZWVuOjEsIGJpbmFyeToxOworfTsKKworc3RydWN0IGZpbGVfaXRlbSB7CisJc3RydWN0IGFkZGRlbCBpbmRleCwgd29ya3RyZWU7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfZmlsZV9pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdCAqZmlsZXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGVfaXRlbSAqaXRlbSA9IHhjYWxsb2Moc2l6ZW9mKCppdGVtKSwgMSk7CisKKwlzdHJpbmdfbGlzdF9hcHBlbmQoZmlsZXMsIG5hbWUpLT51dGlsID0gaXRlbTsKK30KKworc3RydWN0IHBhdGhuYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZmlsZV9pdGVtICppdGVtOworfTsKKworc3RhdGljIGludCBwYXRobmFtZV9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmhlMSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpoZTIsCisJCQkgICAgICBjb25zdCB2b2lkICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZTEgPQorCQljb250YWluZXJfb2YoaGUxLCBjb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisJY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5ICplMiA9CisJCWNvbnRhaW5lcl9vZihoZTIsIGNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKworCXJldHVybiBzdHJjbXAoZTEtPm5hbWUsIG5hbWUgPyAoY29uc3QgY2hhciAqKW5hbWUgOiBlMi0+bmFtZSk7Cit9CisKK3N0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyB7CisJZW51bSB7IEZST01fV09SS1RSRUUgPSAwLCBGUk9NX0lOREVYID0gMSB9IHBoYXNlOworCisJY29uc3QgY2hhciAqcmVmZXJlbmNlOworCisJc3RydWN0IHN0cmluZ19saXN0ICpmaWxlczsKKwlzdHJ1Y3QgaGFzaG1hcCBmaWxlX21hcDsKK307CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RfY2hhbmdlc19jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyAqcyA9IGRhdGE7CisJc3RydWN0IGRpZmZzdGF0X3Qgc3RhdCA9IHsgMCB9OworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCisJY29tcHV0ZV9kaWZmc3RhdChvcHRpb25zLCAmc3RhdCwgcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBzdGF0LmZpbGVzW2ldLT5uYW1lOworCQlpbnQgaGFzaCA9IHN0cmhhc2gobmFtZSk7CisJCXN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCBmaWxlX2l0ZW0gKmZpbGVfaXRlbTsKKwkJc3RydWN0IGFkZGRlbCAqYWRkZGVsOworCisJCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZzLT5maWxlX21hcCwgaGFzaCwgbmFtZSwKKwkJCQkJCSAgICBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisJCWlmICghZW50cnkpIHsKKwkJCWFkZF9maWxlX2l0ZW0ocy0+ZmlsZXMsIG5hbWUpOworCisJCQllbnRyeSA9IHhjYWxsb2Moc2l6ZW9mKCplbnRyeSksIDEpOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZW50LCBoYXNoKTsKKwkJCWVudHJ5LT5uYW1lID0gcy0+ZmlsZXMtPml0ZW1zW3MtPmZpbGVzLT5uciAtIDFdLnN0cmluZzsKKwkJCWVudHJ5LT5pdGVtID0gcy0+ZmlsZXMtPml0ZW1zW3MtPmZpbGVzLT5uciAtIDFdLnV0aWw7CisJCQloYXNobWFwX2FkZCgmcy0+ZmlsZV9tYXAsICZlbnRyeS0+ZW50KTsKKwkJfQorCisJCWZpbGVfaXRlbSA9IGVudHJ5LT5pdGVtOworCQlhZGRkZWwgPSBzLT5waGFzZSA9PSBGUk9NX0lOREVYID8KKwkJCSZmaWxlX2l0ZW0tPmluZGV4IDogJmZpbGVfaXRlbS0+d29ya3RyZWU7CisJCWFkZGRlbC0+c2VlbiA9IDE7CisJCWFkZGRlbC0+YWRkID0gc3RhdC5maWxlc1tpXS0+YWRkZWQ7CisJCWFkZGRlbC0+ZGVsID0gc3RhdC5maWxlc1tpXS0+ZGVsZXRlZDsKKwkJaWYgKHN0YXQuZmlsZXNbaV0tPmlzX2JpbmFyeSkKKwkJCWFkZGRlbC0+YmluYXJ5ID0gMTsKKwl9CisJZnJlZV9kaWZmc3RhdF9pbmZvKCZzdGF0KTsKK30KKworc3RhdGljIGludCBnZXRfbW9kaWZpZWRfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJpbmdfbGlzdCAqZmlsZXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJICAgICAmaGVhZF9vaWQsIE5VTEwpOworCXN0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyBzID0geyBGUk9NX1dPUktUUkVFIH07CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJICAgIHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHIsIHBzLCAwKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXN0cmluZ19saXN0X2NsZWFyKGZpbGVzLCAxKTsKKwlzLmZpbGVzID0gZmlsZXM7CisJaGFzaG1hcF9pbml0KCZzLmZpbGVfbWFwLCBwYXRobmFtZV9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJZm9yIChzLnBoYXNlID0gRlJPTV9XT1JLVFJFRTsgcy5waGFzZSA8PSBGUk9NX0lOREVYOyBzLnBoYXNlKyspIHsKKwkJc3RydWN0IHJldl9pbmZvIHJldjsKKwkJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQgPSB7IDAgfTsKKworCQlvcHQuZGVmID0gaXNfaW5pdGlhbCA/CisJCQllbXB0eV90cmVlX29pZF9oZXgoKSA6IG9pZF90b19oZXgoJmhlYWRfb2lkKTsKKworCQlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwkJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsICZvcHQpOworCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwkJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gY29sbGVjdF9jaGFuZ2VzX2NiOworCQlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZzOworCisJCWlmIChwcykKKwkJCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCBwcyk7CisKKwkJaWYgKHMucGhhc2UgPT0gRlJPTV9JTkRFWCkKKwkJCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCQllbHNlIHsKKwkJCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwkJCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCQl9CisJfQorCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZzLmZpbGVfbWFwLCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisKKwkvKiBXaGlsZSB0aGUgZGlmZnMgYXJlIG9yZGVyZWQgYWxyZWFkeSwgd2UgcmFuICp0d28qIGRpZmZzLi4uICovCisJc3RyaW5nX2xpc3Rfc29ydChmaWxlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyX2FkZGRlbChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJc3RydWN0IGFkZGRlbCAqYWQsIGNvbnN0IGNoYXIgKm5vX2NoYW5nZXMpCit7CisJaWYgKGFkLT5iaW5hcnkpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBfKCJiaW5hcnkiKSk7CisJZWxzZSBpZiAoYWQtPnNlZW4pCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIislIlBSSXVNQVgiLy0lIlBSSXVNQVgsCisJCQkgICAgKHVpbnRtYXhfdClhZC0+YWRkLCAodWludG1heF90KWFkLT5kZWwpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cihidWYsIG5vX2NoYW5nZXMpOworfQorCisvKiBmaWx0ZXJzIG91dCBwcmVmaXhlcyB3aGljaCBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byBsaXN0X2FuZF9jaG9vc2UoKSAqLworc3RhdGljIGludCBpc192YWxpZF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gcHJlZml4X2xlbiAmJiBwcmVmaXggJiYKKwkJLyoKKwkJICogV2UgZXhwZWN0IGBwcmVmaXhgIHRvIGJlIE5VTCB0ZXJtaW5hdGVkLCB0aGVyZWZvcmUgdGhpcworCQkgKiBgc3RyY3NwbigpYCBjYWxsIGlzIG9rYXksIGV2ZW4gaWYgaXQgbWlnaHQgZG8gbXVjaCBtb3JlCisJCSAqIHdvcmsgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkuCisJCSAqLworCQlzdHJjc3BuKHByZWZpeCwgIiBcdFxyXG4sIikgPj0gcHJlZml4X2xlbiAmJgkvKiBzZXBhcmF0b3JzICovCisJCSpwcmVmaXggIT0gJy0nICYmCQkJCS8qIGRlc2VsZWN0aW9uICovCisJCSFpc2RpZ2l0KCpwcmVmaXgpICYmCQkJCS8qIHNlbGVjdGlvbiAqLworCQkocHJlZml4X2xlbiAhPSAxIHx8CisJCSAoKnByZWZpeCAhPSAnKicgJiYJCQkJLyogImFsbCIgd2lsZGNhcmQgKi8KKwkJICAqcHJlZml4ICE9ICc/JykpOwkJCQkvKiBwcm9tcHQgaGVscCAqLworfQorCitzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgeworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiwgaW5kZXgsIHdvcmt0cmVlOworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9pdGVtKGludCBpLCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCSAgICB2b2lkICpwcmludF9maWxlX2l0ZW1fZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZV9pdGVtICpjID0gaXRlbS0+dXRpbDsKKwlzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgKmQgPSBwcmludF9maWxlX2l0ZW1fZGF0YTsKKworCXN0cmJ1Zl9yZXNldCgmZC0+aW5kZXgpOworCXN0cmJ1Zl9yZXNldCgmZC0+d29ya3RyZWUpOworCXN0cmJ1Zl9yZXNldCgmZC0+YnVmKTsKKworCXJlbmRlcl9hZGRkZWwoJmQtPndvcmt0cmVlLCAmYy0+d29ya3RyZWUsIF8oIm5vdGhpbmciKSk7CisJcmVuZGVyX2FkZGRlbCgmZC0+aW5kZXgsICZjLT5pbmRleCwgXygidW5jaGFuZ2VkIikpOworCXN0cmJ1Zl9hZGRmKCZkLT5idWYsIGQtPm1vZGlmaWVkX2ZtdCwKKwkJICAgIGQtPmluZGV4LmJ1ZiwgZC0+d29ya3RyZWUuYnVmLCBpdGVtLT5zdHJpbmcpOworCisJcHJpbnRmKCIgJTJkOiAlcyIsIGkgKyAxLCBkLT5idWYuYnVmKTsKK30KKworc3RhdGljIGludCBydW5fc3RhdHVzKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpmaWxlcywgc3RydWN0IGxpc3Rfb3B0aW9ucyAqb3B0cykKK3sKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIGZpbGVzLCBwcykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0KHMsIGZpbGVzLCBvcHRzKTsKKwlwdXRjaGFyKCdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2hlbHAoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnVudXNlZF9wcywKKwkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqdW51c2VkX2ZpbGVzLAorCQkgICAgc3RydWN0IGxpc3Rfb3B0aW9ucyAqdW51c2VkX29wdHMpCit7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJzdGF0dXMgICAgICAgIC0gJXMiLAorCQkJIF8oInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAidXBkYXRlICAgICAgICAtICVzIiwKKwkJCSBfKCJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJyZXZlcnQgICAgICAgIC0gJXMiLAorCQkJIF8oInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAicGF0Y2ggICAgICAgICAtICVzIiwKKwkJCSBfKCJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJkaWZmICAgICAgICAgIC0gJXMiLAorCQkJIF8oInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiYWRkIHVudHJhY2tlZCAtICVzIiwKKwkJCSBfKCJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCpjb21tYW5kX3QpKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzLAorCQkJIHN0cnVjdCBsaXN0X29wdGlvbnMgKm9wdHMpOworCitzdHJ1Y3QgY29tbWFuZF9pdGVtIHsKKwlzaXplX3QgcHJlZml4X2xlbmd0aDsKKwljb21tYW5kX3QgY29tbWFuZDsKK307CisKK3N0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSB7CisJY29uc3QgY2hhciAqY29sb3IsICpyZXNldDsKK307CisKK3N0YXRpYyB2b2lkIHByaW50X2NvbW1hbmRfaXRlbShpbnQgaSwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICAgICAgdm9pZCAqcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEpCit7CisJc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhICpkID0gcHJpbnRfY29tbWFuZF9pdGVtX2RhdGE7CisJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbCA9IGl0ZW0tPnV0aWw7CisKKwlpZiAoIXV0aWwtPnByZWZpeF9sZW5ndGggfHwKKwkgICAgIWlzX3ZhbGlkX3ByZWZpeChpdGVtLT5zdHJpbmcsIHV0aWwtPnByZWZpeF9sZW5ndGgpKQorCQlwcmludGYoIiAlMmQ6ICVzIiwgaSArIDEsIGl0ZW0tPnN0cmluZyk7CisJZWxzZQorCQlwcmludGYoIiAlMmQ6ICVzJS4qcyVzJXMiLCBpICsgMSwKKwkJICAgICAgIGQtPmNvbG9yLCAoaW50KXV0aWwtPnByZWZpeF9sZW5ndGgsIGl0ZW0tPnN0cmluZywKKwkJICAgICAgIGQtPnJlc2V0LCBpdGVtLT5zdHJpbmcgKyB1dGlsLT5wcmVmaXhfbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgY29tbWFuZF9wcm9tcHRfaGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpCit7CisJY29uc3QgY2hhciAqaGVscF9jb2xvciA9IHMtPmhlbHBfY29sb3I7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICIlcyIsIF8oIlByb21wdCBoZWxwOiIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIjEgICAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgImZvbyAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIiAgICAgICAgICAgLSAlcyIsCisJCQkgXygiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIpKTsKK30KKworaW50IHJ1bl9hZGRfaShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgYWRkX2lfc3RhdGUgcyA9IHsgTlVMTCB9OworCXN0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSBkYXRhID0geyAiWyIsICJdIiB9OworCXN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyBtYWluX2xvb3Bfb3B0cyA9IHsKKwkJeyA0LCBOXygiKioqIENvbW1hbmRzICoqKiIpLCBwcmludF9jb21tYW5kX2l0ZW0sICZkYXRhIH0sCisJCU5fKCJXaGF0IG5vdyIpLCBjb21tYW5kX3Byb21wdF9oZWxwCisJfTsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICpzdHJpbmc7CisJCWNvbW1hbmRfdCBjb21tYW5kOworCX0gY29tbWFuZF9saXN0W10gPSB7CisJCXsgInN0YXR1cyIsIHJ1bl9zdGF0dXMgfSwKKwkJeyAiaGVscCIsIHJ1bl9oZWxwIH0sCisJfTsKKwlzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCBjb21tYW5kcyA9IFBSRUZJWF9JVEVNX0xJU1RfSU5JVDsKKworCXN0cnVjdCBwcmludF9maWxlX2l0ZW1fZGF0YSBwcmludF9maWxlX2l0ZW1fZGF0YSA9IHsKKwkJIiUxMnMgJTEycyAlcyIsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXN0cnVjdCBsaXN0X29wdGlvbnMgb3B0cyA9IHsKKwkJMCwgTlVMTCwgcHJpbnRfZmlsZV9pdGVtLCAmcHJpbnRfZmlsZV9pdGVtX2RhdGEKKwl9OworCXN0cnVjdCBzdHJidWYgaGVhZGVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IGZpbGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3NpemVfdCBpOworCWludCByZXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsgaSsrKSB7CisJCXN0cnVjdCBjb21tYW5kX2l0ZW0gKnV0aWwgPSB4Y2FsbG9jKHNpemVvZigqdXRpbCksIDEpOworCQl1dGlsLT5jb21tYW5kID0gY29tbWFuZF9saXN0W2ldLmNvbW1hbmQ7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmY29tbWFuZHMuaXRlbXMsIGNvbW1hbmRfbGlzdFtpXS5zdHJpbmcpCisJCQktPnV0aWwgPSB1dGlsOworCX0KKworCWluaXRfYWRkX2lfc3RhdGUoJnMsIHIpOworCisJLyoKKwkgKiBXaGVuIGNvbG9yIHdhcyBhc2tlZCBmb3IsIHVzZSB0aGUgcHJvbXB0IGNvbG9yIGZvcgorCSAqIGhpZ2hsaWdodGluZywgb3RoZXJ3aXNlIHVzZSBzcXVhcmUgYnJhY2tldHMuCisJICovCisJaWYgKHMudXNlX2NvbG9yKSB7CisJCWRhdGEuY29sb3IgPSBzLnByb21wdF9jb2xvcjsKKwkJZGF0YS5yZXNldCA9IHMucmVzZXRfY29sb3I7CisJfQorCisJc3RyYnVmX2FkZHN0cigmaGVhZGVyLCAiICAgICAgIik7CisJc3RyYnVmX2FkZGYoJmhlYWRlciwgcHJpbnRfZmlsZV9pdGVtX2RhdGEubW9kaWZpZWRfZm10LAorCQkgICAgXygic3RhZ2VkIiksIF8oInVuc3RhZ2VkIiksIF8oInBhdGgiKSk7CisJb3B0cy5oZWFkZXIgPSBoZWFkZXIuYnVmOworCisJaWYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fAorCSAgICByZXBvX3JlYWRfaW5kZXgocikgPCAwIHx8CisJICAgIHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgociwgUkVGUkVTSF9RVUlFVCwgMCwgMSwKKwkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkKKwkJd2FybmluZyhfKCJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIpKTsKKworCXJlcyA9IHJ1bl9zdGF0dXMoJnMsIHBzLCAmZmlsZXMsICZvcHRzKTsKKworCWZvciAoOzspIHsKKwkJaSA9IGxpc3RfYW5kX2Nob29zZSgmcywgJmNvbW1hbmRzLCAmbWFpbl9sb29wX29wdHMpOworCQlpZiAoaSA9PSBMSVNUX0FORF9DSE9PU0VfUVVJVCkgeworCQkJcHJpbnRmKF8oIkJ5ZS5cbiIpKTsKKwkJCXJlcyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaSAhPSBMSVNUX0FORF9DSE9PU0VfRVJST1IpIHsKKwkJCXN0cnVjdCBjb21tYW5kX2l0ZW0gKnV0aWwgPQorCQkJCWNvbW1hbmRzLml0ZW1zLml0ZW1zW2ldLnV0aWw7CisJCQlyZXMgPSB1dGlsLT5jb21tYW5kKCZzLCBwcywgJmZpbGVzLCAmb3B0cyk7CisJCX0KKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsZXMsIDEpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5pbmRleCk7CisJc3RyYnVmX3JlbGVhc2UoJnByaW50X2ZpbGVfaXRlbV9kYXRhLndvcmt0cmVlKTsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZGVyKTsKKwlwcmVmaXhfaXRlbV9saXN0X2NsZWFyKCZjb21tYW5kcyk7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvYWRkLWludGVyYWN0aXZlLmggYi9hZGQtaW50ZXJhY3RpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQzYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYWRkLWludGVyYWN0aXZlLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIEFERF9JTlRFUkFDVElWRV9ICisjZGVmaW5lIEFERF9JTlRFUkFDVElWRV9ICisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHBhdGhzcGVjOworaW50IHJ1bl9hZGRfaShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwbHkuYyBiL2FwcGx5LmMKaW5kZXggZjhhMDQ2YS4uZDU3YWMwZCAxMDA2NDQKLS0tIGEvYXBwbHkuYworKysgYi9hcHBseS5jCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS53aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm9wdGlvbikKQEAgLTQxODMsOCArNDE4Myw4IEBACiAJCW9sZF9uYW1lID0gc2xhc2hfb2xkICsgMTsKIAkJbmV3X25hbWUgPSBzbGFzaF9uZXcgKyAxOwogCX0KLQkvKiBwLT5vbGRfbmFtZSB0aHJ1IG9sZF9uYW1lIGlzIHRoZSBjb21tb24gcHJlZml4LCBhbmQgb2xkX25hbWUgYW5kIG5ld19uYW1lCi0JICogdGhyb3VnaCB0aGUgZW5kIG9mIG5hbWVzIGFyZSByZW5hbWVzCisJLyogcC0+b2xkX25hbWUgdGhyb3VnaCBvbGRfbmFtZSBpcyB0aGUgY29tbW9uIHByZWZpeCwgYW5kIG9sZF9uYW1lIGFuZAorCSAqIG5ld19uYW1lIHRocm91Z2ggdGhlIGVuZCBvZiBuYW1lcyBhcmUgcmVuYW1lcwogCSAqLwogCWlmIChvbGRfbmFtZSAhPSBwLT5vbGRfbmFtZSkKIAkJcHJpbnRmKCIgJXMgJS4qc3slcyA9PiAlc30gKCVkJSUpXG4iLCByZW5hbWVjb3B5LApkaWZmIC0tZ2l0IGEvYXJndi1hcnJheS5jIGIvYXJndi1hcnJheS5jCmluZGV4IGYzNTJlYTkuLjYxZWY4YzAgMTAwNjQ0Ci0tLSBhL2FyZ3YtYXJyYXkuYworKysgYi9hcmd2LWFycmF5LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAljb25zdCBjaGFyICphcmc7CiAKIAl2YV9zdGFydChhcCwgYXJyYXkpOwotCXdoaWxlKChhcmcgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKikpKQorCXdoaWxlICgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKIAkJYXJndl9hcnJheV9wdXNoKGFycmF5LCBhcmcpOwogCXZhX2VuZChhcCk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwppbmRleCBkZDE4ZTVjLi5kNDY4NmQ1IDEwMDY0NAotLS0gYS9idWlsdGluL2FkZC5jCisrKyBiL2J1aWx0aW4vYWRkLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJidWxrLWNoZWNraW4uaCIKICNpbmNsdWRlICJhcmd2LWFycmF5LmgiCiAjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiYWRkLWludGVyYWN0aXZlLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9hZGRfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iKSwKQEAgLTE4NSw2ICsxODYsMTYgQEAKIHsKIAlpbnQgc3RhdHVzLCBpOwogCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IHVzZV9idWlsdGluX2FkZF9pID0KKwkJZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9BRERfSV9VU0VfQlVJTFRJTiIsIC0xKTsKKworCWlmICghcGF0Y2hfbW9kZSkgeworCQlpZiAodXNlX2J1aWx0aW5fYWRkX2kgPCAwKQorCQkJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiYWRkLmludGVyYWN0aXZlLnVzZWJ1aWx0aW4iLAorCQkJCQkgICAgJnVzZV9idWlsdGluX2FkZF9pKTsKKwkJaWYgKHVzZV9idWlsdGluX2FkZF9pID09IDEpCisJCQlyZXR1cm4gISFydW5fYWRkX2kodGhlX3JlcG9zaXRvcnksIHBhdGhzcGVjKTsKKwl9CiAKIAlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICJhZGQtLWludGVyYWN0aXZlIik7CiAJaWYgKHBhdGNoX21vZGUpCkBAIC0zMTksNiArMzMwLDcgQEAKIAkJaWdub3JlX2FkZF9lcnJvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KKwogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCmRpZmYgLS1naXQgYS9idWlsdGluL2JsYW1lLmMgYi9idWlsdGluL2JsYW1lLmMKaW5kZXggZTk0NmJhNi4uYmYxY2VjZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ibGFtZS5jCisrKyBiL2J1aWx0aW4vYmxhbWUuYwpAQCAtMzE5LDE4ICszMTksMTggQEAKIAlyZXR1cm4gdGltZV9idWYuYnVmOwogfQogCi0jZGVmaW5lIE9VVFBVVF9BTk5PVEFURV9DT01QQVQJMDAxCi0jZGVmaW5lIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FCTAwMgotI2RlZmluZSBPVVRQVVRfUkFXX1RJTUVTVEFNUAkwMDQKLSNkZWZpbmUgT1VUUFVUX1BPUkNFTEFJTgkwMTAKLSNkZWZpbmUgT1VUUFVUX1NIT1dfTkFNRQkwMjAKLSNkZWZpbmUgT1VUUFVUX1NIT1dfTlVNQkVSCTA0MAotI2RlZmluZSBPVVRQVVRfU0hPV19TQ09SRQkwMTAwCi0jZGVmaW5lIE9VVFBVVF9OT19BVVRIT1IJMDIwMAotI2RlZmluZSBPVVRQVVRfU0hPV19FTUFJTAkwNDAwCi0jZGVmaW5lIE9VVFBVVF9MSU5FX1BPUkNFTEFJTgkwMTAwMAotI2RlZmluZSBPVVRQVVRfQ09MT1JfTElORQkwMjAwMAotI2RlZmluZSBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUgkwNDAwMAorI2RlZmluZSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUICAgICAgKDFVPDwwKQorI2RlZmluZSBPVVRQVVRfTE9OR19PQkpFQ1RfTkFNRSAgICAgKDFVPDwxKQorI2RlZmluZSBPVVRQVVRfUkFXX1RJTUVTVEFNUCAgICAgICAgKDFVPDwyKQorI2RlZmluZSBPVVRQVVRfUE9SQ0VMQUlOICAgICAgICAgICAgKDFVPDwzKQorI2RlZmluZSBPVVRQVVRfU0hPV19OQU1FICAgICAgICAgICAgKDFVPDw0KQorI2RlZmluZSBPVVRQVVRfU0hPV19OVU1CRVIgICAgICAgICAgKDFVPDw1KQorI2RlZmluZSBPVVRQVVRfU0hPV19TQ09SRSAgICAgICAgICAgKDFVPDw2KQorI2RlZmluZSBPVVRQVVRfTk9fQVVUSE9SICAgICAgICAgICAgKDFVPDw3KQorI2RlZmluZSBPVVRQVVRfU0hPV19FTUFJTCAgICAgICAgICAgKDFVPDw4KQorI2RlZmluZSBPVVRQVVRfTElORV9QT1JDRUxBSU4gICAgICAgKDFVPDw5KQorI2RlZmluZSBPVVRQVVRfQ09MT1JfTElORSAgICAgICAgICAgKDFVPDwxMCkKKyNkZWZpbmUgT1VUUFVUX1NIT1dfQUdFX1dJVEhfQ09MT1IgICgxVTw8MTEpCiAKIHN0YXRpYyB2b2lkIGVtaXRfcG9yY2VsYWluX2RldGFpbHMoc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCwgaW50IHJlcGVhdCkKIHsKQEAgLTg2MSwxNCArODYxLDYgQEAKIAkJT1BUX1NUUklOR19MSVNUKDAsICJpZ25vcmUtcmV2cy1maWxlIiwgJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgTl8oImZpbGUiKSwgTl8oIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iKSksCiAJCU9QVF9CSVQoMCwgImNvbG9yLWxpbmVzIiwgJm91dHB1dF9vcHRpb24sIE5fKCJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IiksIE9VVFBVVF9DT0xPUl9MSU5FKSwKIAkJT1BUX0JJVCgwLCAiY29sb3ItYnktYWdlIiwgJm91dHB1dF9vcHRpb24sIE5fKCJjb2xvciBsaW5lcyBieSBhZ2UiKSwgT1VUUFVUX1NIT1dfQUdFX1dJVEhfQ09MT1IpLAotCi0JCS8qCi0JCSAqIFRoZSBmb2xsb3dpbmcgdHdvIG9wdGlvbnMgYXJlIHBhcnNlZCBieSBwYXJzZV9yZXZpc2lvbl9vcHQoKQotCQkgKiBhbmQgYXJlIG9ubHkgaW5jbHVkZWQgaGVyZSB0byBnZXQgaW5jbHVkZWQgaW4gdGhlICItaCIKLQkJICogb3V0cHV0OgotCQkgKi8KLQkJeyBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJpbmRlbnQtaGV1cmlzdGljIiwgTlVMTCwgTlVMTCwgTl8oIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiKSwgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAwLCBwYXJzZV9vcHRfdW5rbm93bl9jYiB9LAotCiAJCU9QVF9CSVQoMCwgIm1pbmltYWwiLCAmeGRsX29wdHMsIE5fKCJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giKSwgWERGX05FRURfTUlOSU1BTCksCiAJCU9QVF9TVFJJTkcoJ1MnLCBOVUxMLCAmcmV2c19maWxlLCBOXygiZmlsZSIpLCBOXygiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IikpLAogCQlPUFRfU1RSSU5HKDAsICJjb250ZW50cyIsICZjb250ZW50c19mcm9tLCBOXygiZmlsZSIpLCBOXygiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIpKSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vYnVuZGxlLmMgYi9idWlsdGluL2J1bmRsZS5jCmluZGV4IDFlYTRiZmQuLmYwNDlkMjcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYnVuZGxlLmMKKysrIGIvYnVpbHRpbi9idW5kbGUuYwpAQCAtMSw0ICsxLDYgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImJ1bmRsZS5oIgogCkBAIC05LDU5ICsxMSwxODQgQEAKICAqIGJ1bmRsZSBzdXBwb3J0aW5nICJmZXRjaCIsICJwdWxsIiwgYW5kICJscy1yZW1vdGUiLgogICovCiAKLXN0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fYnVuZGxlX3VzYWdlW10gPQotICAiZ2l0IGJ1bmRsZSBjcmVhdGUgPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz5cbiIKLSAgIiAgIG9yOiBnaXQgYnVuZGxlIHZlcmlmeSA8ZmlsZT5cbiIKLSAgIiAgIG9yOiBnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dXG4iCi0gICIgICBvcjogZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iKSwKKyAgTl8oImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIpLAorICBOXygiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOXygiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV9jcmVhdGVfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfdmVyaWZ5X3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV9saXN0X2hlYWRzX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfdW5idW5kbGVfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5VTEwKK307CisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoaW50IGFyZ2MsCisJCWNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyKiBwcmVmaXgsCisJCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLAorCQljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSwKKwkJY29uc3QgY2hhciAqKmJ1bmRsZV9maWxlKSB7CisJaW50IG5ld2FyZ2M7CisJbmV3YXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2VzdHIsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlc3RyLCBvcHRpb25zKTsKKwkqYnVuZGxlX2ZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdKTsKKwlyZXR1cm4gbmV3YXJnYzsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX2NyZWF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCWludCBhbGxfcHJvZ3Jlc3NfaW1wbGllZCA9IDA7CisJaW50IHByb2dyZXNzID0gaXNhdHR5KFNUREVSUl9GSUxFTk8pOworCXN0cnVjdCBhcmd2X2FycmF5IHBhY2tfb3B0czsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU0VUX0lOVCgncScsICJxdWlldCIsICZwcm9ncmVzcywKKwkJCSAgICBOXygiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiKSwgMCksCisJCU9QVF9TRVRfSU5UKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgICBOXygic2hvdyBwcm9ncmVzcyBtZXRlciIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgImFsbC1wcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgICBOXygic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiKSwgMiksCisJCU9QVF9CT09MKDAsICJhbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCisJCQkgJmFsbF9wcm9ncmVzc19pbXBsaWVkLAorCQkJIE5fKCJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iKSksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX2NyZWF0ZV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJYXJndl9hcnJheV9pbml0KCZwYWNrX29wdHMpOworCWlmIChwcm9ncmVzcyA9PSAwKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tcXVpZXQiKTsKKwllbHNlIGlmIChwcm9ncmVzcyA9PSAxKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tcHJvZ3Jlc3MiKTsKKwllbHNlIGlmIChwcm9ncmVzcyA9PSAyKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tYWxsLXByb2dyZXNzIik7CisJaWYgKHByb2dyZXNzICYmIGFsbF9wcm9ncmVzc19pbXBsaWVkKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tYWxsLXByb2dyZXNzLWltcGxpZWQiKTsKKworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIikpOworCXJldHVybiAhIWNyZWF0ZV9idW5kbGUodGhlX3JlcG9zaXRvcnksIGJ1bmRsZV9maWxlLCBhcmdjLCBhcmd2LCAmcGFja19vcHRzKTsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX3ZlcmlmeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisJaW50IHF1aWV0ID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgncScsICJxdWlldCIsICZxdWlldCwKKwkJCSAgICBOXygiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiKSksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX3ZlcmlmeV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoKGJ1bmRsZV9mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisJY2xvc2UoYnVuZGxlX2ZkKTsKKwlpZiAodmVyaWZ5X2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgIXF1aWV0KSkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG9rYXlcbiIpLCBidW5kbGVfZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV9saXN0X2hlYWRzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV9saXN0X2hlYWRzX3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWlmICgoYnVuZGxlX2ZkID0gcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQorCQlyZXR1cm4gMTsKKwljbG9zZShidW5kbGVfZmQpOworCXJldHVybiAhIWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV91bmJ1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfdW5idW5kbGVfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKChidW5kbGVfZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iKSk7CisJcmV0dXJuICEhdW5idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsIGJ1bmRsZV9mZCwgMCkgfHwKKwkJbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKK30KIAogaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0Jc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOwotCWNvbnN0IGNoYXIgKmNtZCwgKmJ1bmRsZV9maWxlOwotCWludCBidW5kbGVfZmQgPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmVzdWx0OwogCi0JaWYgKGFyZ2MgPCAzKQotCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2J1bmRsZV91c2FnZSwKKwkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAKLQljbWQgPSBhcmd2WzFdOwotCWJ1bmRsZV9maWxlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgYXJndlsyXSk7Ci0JYXJnYyAtPSAyOwotCWFyZ3YgKz0gMjsKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImJ1bmRsZSIpOwogCi0JbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKLQlpZiAoc3RyY21wKGNtZCwgImNyZWF0ZSIpICYmIChidW5kbGVfZmQgPQotCQkJCXJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKLQkJcmV0dXJuIDE7CisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9idW5kbGVfdXNhZ2UsIG9wdGlvbnMpOwogCi0JaWYgKCFzdHJjbXAoY21kLCAidmVyaWZ5IikpIHsKLQkJY2xvc2UoYnVuZGxlX2ZkKTsKLQkJaWYgKGFyZ2MgIT0gMSkgewotCQkJdXNhZ2UoYnVpbHRpbl9idW5kbGVfdXNhZ2UpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKHZlcmlmeV9idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsIDEpKQotCQkJcmV0dXJuIDE7Ci0JCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBva2F5XG4iKSwgYnVuZGxlX2ZpbGUpOwotCQlyZXR1cm4gMDsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJjcmVhdGUiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV9jcmVhdGUoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ2ZXJpZnkiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV92ZXJpZnkoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJsaXN0LWhlYWRzIikpCisJCXJlc3VsdCA9IGNtZF9idW5kbGVfbGlzdF9oZWFkcyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInVuYnVuZGxlIikpCisJCXJlc3VsdCA9IGNtZF9idW5kbGVfdW5idW5kbGUoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIHsKKwkJZXJyb3IoXygiVW5rbm93biBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnVuZGxlX3VzYWdlLCBvcHRpb25zKTsKIAl9Ci0JaWYgKCFzdHJjbXAoY21kLCAibGlzdC1oZWFkcyIpKSB7Ci0JCWNsb3NlKGJ1bmRsZV9mZCk7Ci0JCXJldHVybiAhIWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Ci0JfQotCWlmICghc3RyY21wKGNtZCwgImNyZWF0ZSIpKSB7Ci0JCWlmIChhcmdjIDwgMikgewotCQkJdXNhZ2UoYnVpbHRpbl9idW5kbGVfdXNhZ2UpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKLQkJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIikpOwotCQlyZXR1cm4gISFjcmVhdGVfYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCBidW5kbGVfZmlsZSwgYXJnYywgYXJndik7Ci0JfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInVuYnVuZGxlIikpIHsKLQkJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKLQkJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iKSk7Ci0JCXJldHVybiAhIXVuYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCAmaGVhZGVyLCBidW5kbGVfZmQsIDApIHx8Ci0JCQlsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOwotCX0gZWxzZQotCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7CisJcmV0dXJuIHJlc3VsdCA/IDEgOiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCmluZGV4IGM0NmVlMjkuLjQwYzBiZjIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY2xvbmUuYworKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTg5OSw3ICs4OTksNyBAQAogCWZyZWUoYWx0ZXJuYXRlcyk7CiB9CiAKLXN0YXRpYyBpbnQgZGlyX2V4aXN0cyhjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCBwYXRoX2V4aXN0cyhjb25zdCBjaGFyICpwYXRoKQogewogCXN0cnVjdCBzdGF0IHNiOwogCXJldHVybiAhc3RhdChwYXRoLCAmc2IpOwpAQCAtOTI3LDggKzkyNyw2IEBACiAKIAlzdHJ1Y3QgYXJndl9hcnJheSByZWZfcHJlZml4ZXMgPSBBUkdWX0FSUkFZX0lOSVQ7CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKLQogCXBhY2tldF90cmFjZV9pZGVudGl0eSgiY2xvbmUiKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKIAkJCSAgICAgYnVpbHRpbl9jbG9uZV91c2FnZSwgMCk7CkBAIC05ODEsNyArOTc5LDcgQEAKIAkJZGlyID0gZ3Vlc3NfZGlyX25hbWUocmVwb19uYW1lLCBpc19idW5kbGUsIG9wdGlvbl9iYXJlKTsKIAlzdHJpcF90cmFpbGluZ19zbGFzaGVzKGRpcik7CiAKLQlkZXN0X2V4aXN0cyA9IGRpcl9leGlzdHMoZGlyKTsKKwlkZXN0X2V4aXN0cyA9IHBhdGhfZXhpc3RzKGRpcik7CiAJaWYgKGRlc3RfZXhpc3RzICYmICFpc19lbXB0eV9kaXIoZGlyKSkKIAkJZGllKF8oImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90ICIKIAkJCSJhbiBlbXB0eSBkaXJlY3RvcnkuIiksIGRpcik7CkBAIC05OTIsNyArOTkwLDcgQEAKIAkJd29ya190cmVlID0gTlVMTDsKIAllbHNlIHsKIAkJd29ya190cmVlID0gZ2V0ZW52KCJHSVRfV09SS19UUkVFIik7Ci0JCWlmICh3b3JrX3RyZWUgJiYgZGlyX2V4aXN0cyh3b3JrX3RyZWUpKQorCQlpZiAod29ya190cmVlICYmIHBhdGhfZXhpc3RzKHdvcmtfdHJlZSkpCiAJCQlkaWUoXygid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiksIHdvcmtfdHJlZSk7CiAJfQogCkBAIC0xMDIwLDcgKzEwMTgsNyBAQAogCX0KIAogCWlmIChyZWFsX2dpdF9kaXIpIHsKLQkJaWYgKGRpcl9leGlzdHMocmVhbF9naXRfZGlyKSkKKwkJaWYgKHBhdGhfZXhpc3RzKHJlYWxfZ2l0X2RpcikpCiAJCQlqdW5rX2dpdF9kaXJfZmxhZ3MgfD0gUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOwogCQlqdW5rX2dpdF9kaXIgPSByZWFsX2dpdF9kaXI7CiAJfSBlbHNlIHsKQEAgLTEyNjUsNyArMTI2Myw2IEBACiAJfQogCiAJanVua19tb2RlID0gSlVOS19MRUFWRV9SRVBPOwotCWZldGNoX2lmX21pc3NpbmcgPSAxOwogCWVyciA9IGNoZWNrb3V0KHN1Ym1vZHVsZV9wcm9ncmVzcyk7CiAKIAlzdHJidWZfcmVsZWFzZSgmcmVmbG9nX21zZyk7CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC1ncmFwaC5jIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwppbmRleCBhZGRjOGQ0Li5lMGM2ZmM0IDEwMDY0NAotLS0gYS9idWlsdGluL2NvbW1pdC1ncmFwaC5jCisrKyBiL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKQEAgLTgsOCArOCw2IEBACiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2VbXSA9IHsKLQlOXygiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAotCU5fKCJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iKSwKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iKSwKIAlOVUxMCkBAIC0yMCwxMSArMTgsNiBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfcmVhZF91c2FnZVtdID0gewotCU5fKCJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKLQlOVUxMCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX3VzYWdlW10gPSB7CiAJTl8oImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IiksCiAJTlVMTApAQCAtOTQsNjYgKzg3LDYgQEAKIAlyZXR1cm4gdmVyaWZ5X2NvbW1pdF9ncmFwaCh0aGVfcmVwb3NpdG9yeSwgZ3JhcGgsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBncmFwaF9yZWFkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQlzdHJ1Y3QgY29tbWl0X2dyYXBoICpncmFwaCA9IE5VTEw7Ci0JY2hhciAqZ3JhcGhfbmFtZTsKLQlpbnQgb3Blbl9vazsKLQlpbnQgZmQ7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0KLQlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX29wdGlvbnNbXSA9IHsKLQkJT1BUX1NUUklORygwLCAib2JqZWN0LWRpciIsICZvcHRzLm9ial9kaXIsCi0JCQlOXygiZGlyIiksCi0JCQlOXygiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIikpLAotCQlPUFRfRU5EKCksCi0JfTsKLQotCXRyYWNlMl9jbWRfbW9kZSgicmVhZCIpOwotCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwKLQkJCSAgICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfcmVhZF9vcHRpb25zLAotCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX3VzYWdlLCAwKTsKLQotCWlmICghb3B0cy5vYmpfZGlyKQotCQlvcHRzLm9ial9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOwotCi0JZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUob3B0cy5vYmpfZGlyKTsKLQotCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7Ci0JaWYgKCFvcGVuX29rKQotCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciKSwgZ3JhcGhfbmFtZSk7Ci0KLQlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0KTsKLQlpZiAoIWdyYXBoKQotCQlyZXR1cm4gMTsKLQotCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7Ci0KLQlwcmludGYoImhlYWRlcjogJTA4eCAlZCAlZCAlZCAlZFxuIiwKLQkJbnRvaGwoKih1aW50MzJfdCopZ3JhcGgtPmRhdGEpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDQpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDUpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDYpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDcpKTsKLQlwcmludGYoIm51bV9jb21taXRzOiAldVxuIiwgZ3JhcGgtPm51bV9jb21taXRzKTsKLQlwcmludGYoImNodW5rczoiKTsKLQotCWlmIChncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCkKLQkJcHJpbnRmKCIgb2lkX2Zhbm91dCIpOwotCWlmIChncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCkKLQkJcHJpbnRmKCIgb2lkX2xvb2t1cCIpOwotCWlmIChncmFwaC0+Y2h1bmtfY29tbWl0X2RhdGEpCi0JCXByaW50ZigiIGNvbW1pdF9tZXRhZGF0YSIpOwotCWlmIChncmFwaC0+Y2h1bmtfZXh0cmFfZWRnZXMpCi0JCXByaW50ZigiIGV4dHJhX2VkZ2VzIik7Ci0JcHJpbnRmKCJcbiIpOwotCi0JVU5MRUFLKGdyYXBoKTsKLQotCXJldHVybiAwOwotfQotCiBleHRlcm4gaW50IHJlYWRfcmVwbGFjZV9yZWZzOwogc3RhdGljIHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyBzcGxpdF9vcHRzOwogCkBAIC0yNjksOCArMjAyLDYgQEAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCiAJaWYgKGFyZ2MgPiAwKSB7Ci0JCWlmICghc3RyY21wKGFyZ3ZbMF0sICJyZWFkIikpCi0JCQlyZXR1cm4gZ3JhcGhfcmVhZChhcmdjLCBhcmd2KTsKIAkJaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQogCQkJcmV0dXJuIGdyYXBoX3ZlcmlmeShhcmdjLCBhcmd2KTsKIAkJaWYgKCFzdHJjbXAoYXJndlswXSwgIndyaXRlIikpCmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC5jIGIvYnVpbHRpbi9jb21taXQuYwppbmRleCBlNTg4YmM2Li4yOTRkYzU3IDEwMDY0NAotLS0gYS9idWlsdGluL2NvbW1pdC5jCisrKyBiL2J1aWx0aW4vY29tbWl0LmMKQEAgLTE0NjMsMjggKzE0NjMsNiBAQAogCXJldHVybiBnaXRfc3RhdHVzX2NvbmZpZyhrLCB2LCBzKTsKIH0KIAotaW50IHJ1bl9jb21taXRfaG9vayhpbnQgZWRpdG9yX2lzX3VzZWQsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKLXsKLQlzdHJ1Y3QgYXJndl9hcnJheSBob29rX2VudiA9IEFSR1ZfQVJSQVlfSU5JVDsKLQl2YV9saXN0IGFyZ3M7Ci0JaW50IHJldDsKLQotCWFyZ3ZfYXJyYXlfcHVzaGYoJmhvb2tfZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKLQotCS8qCi0JICogTGV0IHRoZSBob29rIGtub3cgdGhhdCBubyBlZGl0b3Igd2lsbCBiZSBsYXVuY2hlZC4KLQkgKi8KLQlpZiAoIWVkaXRvcl9pc191c2VkKQotCQlhcmd2X2FycmF5X3B1c2goJmhvb2tfZW52LCAiR0lUX0VESVRPUj06Iik7Ci0KLQl2YV9zdGFydChhcmdzLCBuYW1lKTsKLQlyZXQgPSBydW5faG9va192ZShob29rX2Vudi5hcmd2LG5hbWUsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQlhcmd2X2FycmF5X2NsZWFyKCZob29rX2Vudik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgY21kX2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsiZ2MiLCAiLS1hdXRvIiwgTlVMTH07CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLmMgYi9idWlsdGluL2ZldGNoLmMKaW5kZXggODYzYzg1OC4uNDZjZTdjMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mZXRjaC5jCisrKyBiL2J1aWx0aW4vZmV0Y2guYwpAQCAtNzcsNiArNzcsNyBAQAogc3RhdGljIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHNlcnZlcl9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG5lZ290aWF0aW9uX3RpcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA9IC0xOwogCiBzdGF0aWMgaW50IGdpdF9mZXRjaF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CkBAIC0xOTgsNiArMTk5LDggQEAKIAkJIE5fKCJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciKSksCiAJT1BUX0JPT0woMCwgInNob3ctZm9yY2VkLXVwZGF0ZXMiLCAmZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcywKIAkJIE5fKCJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiKSksCisJT1BUX0JPT0woMCwgIndyaXRlLWNvbW1pdC1ncmFwaCIsICZmZXRjaF93cml0ZV9jb21taXRfZ3JhcGgsCisJCSBOXygid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIpKSwKIAlPUFRfRU5EKCkKIH07CiAKQEAgLTEwNzQsNyArMTA3Nyw4IEBACiAJICogd2UgbmVlZCBhbGwgZGlyZWN0IHRhcmdldHMgdG8gZXhpc3QuCiAJICovCiAJZm9yIChyID0gcm07IHI7IHIgPSByLT5uZXh0KSB7Ci0JCWlmICghaGFzX29iamVjdF9maWxlKCZyLT5vbGRfb2lkKSkKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmci0+b2xkX29pZCwKKwkJCQkJCU9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUKSkKIAkJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0MDAsNyArMTQwNCw3IEBACiAKIAkJLyoKIAkJICogV2UncmUgc2V0dGluZyB0aGUgdXBzdHJlYW0gY29uZmlndXJhdGlvbiBmb3IgdGhlCi0JCSAqIGN1cnJlbnQgYnJhbmNoLiBUaGUgcmVsZXZlbnQgdXBzdHJlYW0gaXMgdGhlCisJCSAqIGN1cnJlbnQgYnJhbmNoLiBUaGUgcmVsZXZhbnQgdXBzdHJlYW0gaXMgdGhlCiAJCSAqIGZldGNoZWQgYnJhbmNoIHRoYXQgaXMgbWVhbnQgdG8gYmUgbWVyZ2VkIHdpdGggdGhlCiAJCSAqIGN1cnJlbnQgb25lLCBpLmUuIHRoZSBvbmUgZmV0Y2hlZCB0byBGRVRDSF9IRUFELgogCQkgKgpAQCAtMTQxMSw3ICsxNDE1LDcgQEAKIAkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CiAJCQlpZiAoIXJtLT5wZWVyX3JlZikgewogCQkJCWlmIChzb3VyY2VfcmVmKSB7Ci0JCQkJCXdhcm5pbmcoXygibXVsdGlwbGUgYnJhbmNoIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIpKTsKKwkJCQkJd2FybmluZyhfKCJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iKSk7CiAJCQkJCWdvdG8gc2tpcDsKIAkJCQl9IGVsc2UgewogCQkJCQlzb3VyY2VfcmVmID0gcm07CkBAIC0xNTk5LDcgKzE2MDMsOCBAQAogCQkJcmV0dXJuIGVycmNvZGU7CiAJfQogCi0JYXJndl9hcnJheV9wdXNobCgmYXJndiwgImZldGNoIiwgIi0tYXBwZW5kIiwgIi0tbm8tYXV0by1nYyIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJmZXRjaCIsICItLWFwcGVuZCIsICItLW5vLWF1dG8tZ2MiLAorCQkJIi0tbm8td3JpdGUtY29tbWl0LWdyYXBoIiwgTlVMTCk7CiAJYWRkX29wdGlvbnNfdG9fYXJndigmYXJndik7CiAKIAlpZiAobWF4X2NoaWxkcmVuICE9IDEgJiYgbGlzdC0+bnIgIT0gMSkgewpAQCAtMTgyMiw4ICsxODI3LDYgQEAKIAkJfQogCX0KIAotCWZldGNoX2lmX21pc3NpbmcgPSAwOwotCiAJaWYgKHJlbW90ZSkgewogCQlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlIHx8IGhhc19wcm9taXNvcl9yZW1vdGUoKSkKIAkJCWZldGNoX29uZV9zZXR1cF9wYXJ0aWFsKHJlbW90ZSk7CkBAIC0xODY1LDcgKzE4NjgsOSBAQAogCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKIAogCXByZXBhcmVfcmVwb19zZXR0aW5ncyh0aGVfcmVwb3NpdG9yeSk7Ci0JaWYgKHRoZV9yZXBvc2l0b3J5LT5zZXR0aW5ncy5mZXRjaF93cml0ZV9jb21taXRfZ3JhcGgpIHsKKwlpZiAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoID4gMCB8fAorCSAgICAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoIDwgMCAmJgorCSAgICAgdGhlX3JlcG9zaXRvcnktPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCkpIHsKIAkJaW50IGNvbW1pdF9ncmFwaF9mbGFncyA9IENPTU1JVF9HUkFQSF9XUklURV9TUExJVDsKIAkJc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzIHNwbGl0X29wdHM7CiAJCW1lbXNldCgmc3BsaXRfb3B0cywgMCwgc2l6ZW9mKHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cykpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mc2NrLmMgYi9idWlsdGluL2ZzY2suYwppbmRleCAxODQwM2E5Li44ZDEzNzk0IDEwMDY0NAotLS0gYS9idWlsdGluL2ZzY2suYworKysgYi9idWlsdGluL2ZzY2suYwpAQCAtNTAsNDAgKzUwLDIwIEBACiAjZGVmaW5lIEVSUk9SX1JFRlMgMDEwCiAjZGVmaW5lIEVSUk9SX0NPTU1JVF9HUkFQSCAwMjAKIAotc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCitzdGF0aWMgY29uc3QgY2hhciAqZGVzY3JpYmVfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZzW10gPSB7Ci0JCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCi0JfTsKLQlzdGF0aWMgaW50IGIgPSAwOwotCXN0cnVjdCBzdHJidWYgKmJ1ZjsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCWlmIChuYW1lX29iamVjdHMpCi0JCW5hbWUgPSBsb29rdXBfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsIG9iaik7Ci0KLQlidWYgPSBidWZzICsgYjsKLQliID0gKGIgKyAxKSAlIEFSUkFZX1NJWkUoYnVmcyk7Ci0Jc3RyYnVmX3Jlc2V0KGJ1Zik7Ci0Jc3RyYnVmX2FkZHN0cihidWYsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7Ci0JaWYgKG5hbWUpCi0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiAoJXMpIiwgbmFtZSk7Ci0KLQlyZXR1cm4gYnVmLT5idWY7CisJcmV0dXJuIGZzY2tfZGVzY3JpYmVfb2JqZWN0KCZmc2NrX3dhbGtfb3B0aW9ucywgb2lkKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnByaW50YWJsZV90eXBlKHN0cnVjdCBvYmplY3QgKm9iaikKK3N0YXRpYyBjb25zdCBjaGFyICpwcmludGFibGVfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCiB7CiAJY29uc3QgY2hhciAqcmV0OwogCi0JaWYgKG9iai0+dHlwZSA9PSBPQkpfTk9ORSkgewotCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksCi0JCQkJCQkJJm9iai0+b2lkLCBOVUxMKTsKLQkJaWYgKHR5cGUgPiAwKQotCQkJb2JqZWN0X2FzX3R5cGUodGhlX3JlcG9zaXRvcnksIG9iaiwgdHlwZSwgMCk7Ci0JfQorCWlmICh0eXBlID09IE9CSl9OT05FKQorCQl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOwogCi0JcmV0ID0gdHlwZV9uYW1lKG9iai0+dHlwZSk7CisJcmV0ID0gdHlwZV9uYW1lKHR5cGUpOwogCWlmICghcmV0KQogCQlyZXQgPSBfKCJ1bmtub3duIik7CiAKQEAgLTExOCwyNiArOTgsMzIgQEAKIAllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOwogCS8qIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4gKi8KIAlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZXJyb3IgaW4gJXMgJXM6ICVzIiksCi0JCSAgIHByaW50YWJsZV90eXBlKG9iaiksIGRlc2NyaWJlX29iamVjdChvYmopLCBlcnIpOworCQkgICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCSAgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpLCBlcnIpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBmc2NrX2Vycm9yX2Z1bmMoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCSAgIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKG1zZ190eXBlKSB7CiAJY2FzZSBGU0NLX1dBUk46CiAJCS8qIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLwogCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygid2FybmluZyBpbiAlcyAlczogJXMiKSwKLQkJCSAgIHByaW50YWJsZV90eXBlKG9iaiksIGRlc2NyaWJlX29iamVjdChvYmopLCBtZXNzYWdlKTsKKwkJCSAgIHByaW50YWJsZV90eXBlKG9pZCwgb2JqZWN0X3R5cGUpLAorCQkJICAgZGVzY3JpYmVfb2JqZWN0KG9pZCksIG1lc3NhZ2UpOwogCQlyZXR1cm4gMDsKIAljYXNlIEZTQ0tfRVJST1I6CiAJCS8qIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4gKi8KIAkJZnByaW50Zl9sbihzdGRlcnIsIF8oImVycm9yIGluICVzICVzOiAlcyIpLAotCQkJICAgcHJpbnRhYmxlX3R5cGUob2JqKSwgZGVzY3JpYmVfb2JqZWN0KG9iaiksIG1lc3NhZ2UpOworCQkJICAgcHJpbnRhYmxlX3R5cGUob2lkLCBvYmplY3RfdHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3Qob2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAxOwogCWRlZmF1bHQ6Ci0JCUJVRygiJWQgKEZTQ0tfSUdOT1JFPykgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdGhpcyBjYWxsYmFjayIsIHR5cGUpOworCQlCVUcoIiVkIChGU0NLX0lHTk9SRT8pIHNob3VsZCBuZXZlciB0cmlnZ2VyIHRoaXMgY2FsbGJhY2siLAorCQkgICAgbXNnX3R5cGUpOwogCX0KIH0KIApAQCAtMTU1LDcgKzE0MSw4IEBACiAJaWYgKCFvYmopIHsKIAkJLyogLi4uIHRoZXNlIHJlZmVyZW5jZXMgdG8gcGFyZW50LT5mbGQgYXJlIHNhZmUgaGVyZSAqLwogCQlwcmludGZfbG4oXygiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiKSwKLQkJCSAgcHJpbnRhYmxlX3R5cGUocGFyZW50KSwgZGVzY3JpYmVfb2JqZWN0KHBhcmVudCkpOworCQkJICBwcmludGFibGVfdHlwZSgmcGFyZW50LT5vaWQsIHBhcmVudC0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmcGFyZW50LT5vaWQpKTsKIAkJcHJpbnRmX2xuKF8oImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIiksCiAJCQkgICh0eXBlID09IE9CSl9BTlkgPyBfKCJ1bmtub3duIikgOiB0eXBlX25hbWUodHlwZSkpLAogCQkJICBfKCJ1bmtub3duIikpOwpAQCAtMTgzLDEwICsxNzAsMTAgQEAKIAkJaWYgKHBhcmVudCAmJiAhaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpIHsKIAkJCXByaW50Zl9sbihfKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgogCQkJCSAgICAiICAgICAgICAgICAgICB0byAlN3MgJXMiKSwKLQkJCQkgIHByaW50YWJsZV90eXBlKHBhcmVudCksCi0JCQkJICBkZXNjcmliZV9vYmplY3QocGFyZW50KSwKLQkJCQkgIHByaW50YWJsZV90eXBlKG9iaiksCi0JCQkJICBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCQkJICBwcmludGFibGVfdHlwZSgmcGFyZW50LT5vaWQsIHBhcmVudC0+dHlwZSksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJnBhcmVudC0+b2lkKSwKKwkJCQkgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CiAJCX0KIAkJcmV0dXJuIDE7CkBAIC0yOTIsOCArMjc5LDkgQEAKIAkJCXJldHVybjsKIAkJaWYgKGhhc19vYmplY3RfcGFjaygmb2JqLT5vaWQpKQogCQkJcmV0dXJuOyAvKiBpdCBpcyBpbiBwYWNrIC0gZm9yZ2V0IGFib3V0IGl0ICovCi0JCXByaW50Zl9sbihfKCJtaXNzaW5nICVzICVzIiksIHByaW50YWJsZV90eXBlKG9iaiksCi0JCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJcHJpbnRmX2xuKF8oIm1pc3NpbmcgJXMgJXMiKSwKKwkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CiAJCXJldHVybjsKIAl9CkBAIC0zMTgsOCArMzA2LDkgQEAKIAkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgogCSAqLwogCWlmIChzaG93X3VucmVhY2hhYmxlKSB7Ci0JCXByaW50Zl9sbihfKCJ1bnJlYWNoYWJsZSAlcyAlcyIpLCBwcmludGFibGVfdHlwZShvYmopLAotCQkJICBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCXByaW50Zl9sbihfKCJ1bnJlYWNoYWJsZSAlcyAlcyIpLAorCQkJICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzM3LDEyICszMjYsMTMgQEAKIAkgKi8KIAlpZiAoIShvYmotPmZsYWdzICYgVVNFRCkpIHsKIAkJaWYgKHNob3dfZGFuZ2xpbmcpCi0JCQlwcmludGZfbG4oXygiZGFuZ2xpbmcgJXMgJXMiKSwgcHJpbnRhYmxlX3R5cGUob2JqKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCXByaW50Zl9sbihfKCJkYW5nbGluZyAlcyAlcyIpLAorCQkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOwogCQlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKIAkJCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoImxvc3QtZm91bmQvJXMvJXMiLAogCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUID8gImNvbW1pdCIgOiAib3RoZXIiLAotCQkJCWRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCQlkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCQlGSUxFICpmOwogCiAJCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChmaWxlbmFtZSkpIHsKQEAgLTM1NSw3ICszNDUsNyBAQAogCQkJCWlmIChzdHJlYW1fYmxvYl90b19mZChmaWxlbm8oZiksICZvYmotPm9pZCwgTlVMTCwgMSkpCiAJCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCBmaWxlbmFtZSk7CiAJCQl9IGVsc2UKLQkJCQlmcHJpbnRmKGYsICIlc1xuIiwgZGVzY3JpYmVfb2JqZWN0KG9iaikpOworCQkJCWZwcmludGYoZiwgIiVzXG4iLCBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCQlpZiAoZmNsb3NlKGYpKQogCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgZmluaXNoICclcyciKSwKIAkJCQkJICBmaWxlbmFtZSk7CkBAIC0zNzQsNyArMzY0LDcgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCiB7CiAJaWYgKHZlcmJvc2UpCi0JCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDaGVja2luZyAlcyIpLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDaGVja2luZyAlcyIpLCBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAKIAlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKIAkJY2hlY2tfcmVhY2hhYmxlX29iamVjdChvYmopOwpAQCAtNDMyLDcgKzQyMiw4IEBACiAKIAlpZiAodmVyYm9zZSkKIAkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nICVzICVzIiksCi0JCQkgICBwcmludGFibGVfdHlwZShvYmopLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCQkgICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAKIAlpZiAoZnNja193YWxrKG9iaiwgTlVMTCwgJmZzY2tfb2JqX29wdGlvbnMpKQogCQlvYmplcnJvcihvYmosIF8oImJyb2tlbiBsaW5rcyIpKTsKQEAgLTQ0NSw3ICs0MzYsNyBAQAogCiAJCWlmICghY29tbWl0LT5wYXJlbnRzICYmIHNob3dfcm9vdCkKIAkJCXByaW50Zl9sbihfKCJyb290ICVzIiksCi0JCQkJICBkZXNjcmliZV9vYmplY3QoJmNvbW1pdC0+b2JqZWN0KSk7CisJCQkJICBkZXNjcmliZV9vYmplY3QoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwogCX0KIAogCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgewpAQCAtNDUzLDEwICs0NDQsMTAgQEAKIAogCQlpZiAoc2hvd190YWdzICYmIHRhZy0+dGFnZ2VkKSB7CiAJCQlwcmludGZfbG4oXygidGFnZ2VkICVzICVzICglcykgaW4gJXMiKSwKLQkJCQkgIHByaW50YWJsZV90eXBlKHRhZy0+dGFnZ2VkKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdCh0YWctPnRhZ2dlZCksCisJCQkJICBwcmludGFibGVfdHlwZSgmdGFnLT50YWdnZWQtPm9pZCwgdGFnLT50YWdnZWQtPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPnRhZ2dlZC0+b2lkKSwKIAkJCQkgIHRhZy0+dGFnLAotCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPm9iamVjdCkpOworCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPm9iamVjdC5vaWQpKTsKIAkJfQogCX0KIApAQCAtNDk5LDEwICs0OTAsMTAgQEAKIAlpZiAoIWlzX251bGxfb2lkKG9pZCkpIHsKIAkJb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKIAkJaWYgKG9iaiAmJiAob2JqLT5mbGFncyAmIEhBU19PQkopKSB7Ci0JCQlpZiAodGltZXN0YW1wICYmIG5hbWVfb2JqZWN0cykKLQkJCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQkJCW9iaiwKLQkJCQkJeHN0cmZtdCgiJXNAeyUiUFJJdGltZSJ9IiwgcmVmbmFtZSwgdGltZXN0YW1wKSk7CisJCQlpZiAodGltZXN0YW1wKQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgb2lkLAorCQkJCQkJICAgICAiJXNAeyUiUFJJdGltZSJ9IiwKKwkJCQkJCSAgICAgcmVmbmFtZSwgdGltZXN0YW1wKTsKIAkJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKIAkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCQl9IGVsc2UgaWYgKCFpc19wcm9taXNvcl9vYmplY3Qob2lkKSkgewpAQCAtNTY2LDkgKzU1Nyw4IEBACiAJfQogCWRlZmF1bHRfcmVmcysrOwogCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQlpZiAobmFtZV9vYmplY3RzKQotCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQlvYmosIHhzdHJkdXAocmVmbmFtZSkpOworCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywKKwkJCSAgICAgb2lkLCAiJXMiLCByZWZuYW1lKTsKIAltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAogCXJldHVybiAwOwpAQCAtNzQyLDkgKzczMiw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQlvYmotPmZsYWdzIHw9IFVTRUQ7Ci0JCWlmIChuYW1lX29iamVjdHMpCi0JCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQkJb2JqLCB4c3RyZHVwKCI6IikpOworCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZpdC0+b2lkLCAiOiIpOwogCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBPQkpfVFJFRSkKIAkJCWVyciB8PSBvYmplcnJvcihvYmosIF8oIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiKSk7CkBAIC04MzAsOCArODE4LDcgQEAKIAl9CiAKIAlpZiAobmFtZV9vYmplY3RzKQotCQlmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMgPQotCQkJeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRlY29yYXRpb24pKTsKKwkJZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCZmc2NrX3dhbGtfb3B0aW9ucyk7CiAKIAlnaXRfY29uZmlnKGZzY2tfY29uZmlnLCBOVUxMKTsKIApAQCAtODkwLDkgKzg3Nyw4IEBACiAJCQl9CiAKIAkJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQkJCWlmIChuYW1lX29iamVjdHMpCi0JCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAotCQkJCQlvYmosIHhzdHJkdXAoYXJnKSk7CisJCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZvaWQsCisJCQkJCSAgICAgIiVzIiwgYXJnKTsKIAkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCQkJY29udGludWU7CiAJCX0KQEAgLTkyOCwxMCArOTE0LDggQEAKIAkJCQljb250aW51ZTsKIAkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CiAJCQlvYmotPmZsYWdzIHw9IFVTRUQ7Ci0JCQlpZiAobmFtZV9vYmplY3RzKQotCQkJCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKLQkJCQkJb2JqLAotCQkJCQl4c3RyZm10KCI6JXMiLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpKTsKKwkJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgJm9iai0+b2lkLAorCQkJCQkgICAgICI6JXMiLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCX0KIAkJaWYgKGFjdGl2ZV9jYWNoZV90cmVlKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nYy5jIGIvYnVpbHRpbi9nYy5jCmluZGV4IGZhZGI0NTQuLjNmNzZiZjQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZ2MuYworKysgYi9idWlsdGluL2djLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogLyoKICAqIFJldHVybnMgMCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgZXJyb3IgYW5kIGdjIGNhbiBwcm9jZWVkLCAxIGlmCiAgKiBnYyBzaG91bGQgbm90IHByb2NlZWQgZHVlIHRvIGFuIGVycm9yIGluIHRoZSBsYXN0IHJ1bi4gUHJpbnRzIGEKLSAqIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEgaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIGdjLmxvZworICogbWVzc2FnZSBhbmQgcmV0dXJucyAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGdjLmxvZwogICovCiBzdGF0aWMgaW50IHJlcG9ydF9sYXN0X2djX2Vycm9yKHZvaWQpCiB7CkBAIC02MDEsNyArNjAxLDcgQEAKIAkJaWYgKGRldGFjaF9hdXRvKSB7CiAJCQlpbnQgcmV0ID0gcmVwb3J0X2xhc3RfZ2NfZXJyb3IoKTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCS8qIGFuIEkvTyBlcnJvciBvY2N1cmVkLCBhbHJlYWR5IHJlcG9ydGVkICovCisJCQkJLyogYW4gSS9PIGVycm9yIG9jY3VycmVkLCBhbHJlYWR5IHJlcG9ydGVkICovCiAJCQkJZXhpdCgxMjgpOwogCQkJaWYgKHJldCA9PSAxKQogCQkJCS8qIExhc3QgZ2MgLS1hdXRvIGZhaWxlZC4gU2tpcCB0aGlzIG9uZS4gKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCmluZGV4IDg5ODczZDIuLmUxOTJmMjEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbG9nLmMKKysrIGIvYnVpbHRpbi9sb2cuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInJhbmdlLWRpZmYuaCIKIAogI2RlZmluZSBNQUlMX0RFRkFVTFRfV1JBUCA3MgorI2RlZmluZSBDT1ZFUl9GUk9NX0FVVE9fTUFYX1NVQkpFQ1RfTEVOIDEwMAogCiAvKiBTZXQgYSBkZWZhdWx0IGRhdGUtdGltZSBmb3JtYXQgZm9yIGdpdCBsb2cgKCJsb2cuZGF0ZSIgY29uZmlnIHZhcmlhYmxlKSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfZGF0ZV9tb2RlID0gTlVMTDsKQEAgLTc2NSwyNCArNzY2LDUyIEBACiAJaXRlbS0+c3RyaW5nW2xlbl0gPSAnXDAnOwogfQogCi0jZGVmaW5lIFRIUkVBRF9TSEFMTE9XIDEKLSNkZWZpbmUgVEhSRUFEX0RFRVAgMgotc3RhdGljIGludCB0aHJlYWQ7Ci1zdGF0aWMgaW50IGRvX3NpZ25vZmY7Ci1zdGF0aWMgaW50IGJhc2VfYXV0bzsKLXN0YXRpYyBjaGFyICpmcm9tOwotc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKLXN0YXRpYyBjb25zdCBjaGFyICpzaWduYXR1cmVfZmlsZTsKLXN0YXRpYyBpbnQgY29uZmlnX2NvdmVyX2xldHRlcjsKLXN0YXRpYyBjb25zdCBjaGFyICpjb25maWdfb3V0cHV0X2RpcmVjdG9yeTsKLQotZW51bSB7CitlbnVtIGNvdmVyX3NldHRpbmcgewogCUNPVkVSX1VOU0VULAogCUNPVkVSX09GRiwKIAlDT1ZFUl9PTiwKIAlDT1ZFUl9BVVRPCiB9OwogCitlbnVtIHRocmVhZF9sZXZlbCB7CisJVEhSRUFEX1VOU0VULAorCVRIUkVBRF9TSEFMTE9XLAorCVRIUkVBRF9ERUVQCit9OworCitlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24geworCUNPVkVSX0ZST01fTk9ORSwKKwlDT1ZFUl9GUk9NX01FU1NBR0UsCisJQ09WRVJfRlJPTV9TVUJKRUNULAorCUNPVkVSX0ZST01fQVVUTworfTsKKworc3RhdGljIGVudW0gdGhyZWFkX2xldmVsIHRocmVhZDsKK3N0YXRpYyBpbnQgZG9fc2lnbm9mZjsKK3N0YXRpYyBpbnQgYmFzZV9hdXRvOworc3RhdGljIGNoYXIgKmZyb207CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZV9maWxlOworc3RhdGljIGVudW0gY292ZXJfc2V0dGluZyBjb25maWdfY292ZXJfbGV0dGVyOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19vdXRwdXRfZGlyZWN0b3J5Oworc3RhdGljIGVudW0gY292ZXJfZnJvbV9kZXNjcmlwdGlvbiBjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBDT1ZFUl9GUk9NX01FU1NBR0U7CisKK3N0YXRpYyBlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFhcmcgfHwgIXN0cmNtcChhcmcsICJkZWZhdWx0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJub25lIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtZXNzYWdlIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdWJqZWN0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX1NVQkpFQ1Q7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJhdXRvIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX0FVVE87CisJZWxzZQorCQlkaWUoXygiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIiksIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgZ2l0X2Zvcm1hdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJc3RydWN0IHJldl9pbmZvICpyZXYgPSBjYjsKQEAgLTgzNiw3ICs4NjUsNyBAQAogCQkJdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl0aHJlYWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgJiYgVEhSRUFEX1NIQUxMT1c7CisJCXRocmVhZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IFRIUkVBRF9TSEFMTE9XIDogVEhSRUFEX1VOU0VUOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgewpAQCAtODg4LDYgKzkxNywxMCBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY292ZXJmcm9tZGVzY3JpcHRpb24iKSkgeworCQljb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBwYXJzZV9jb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJcmV0dXJuIGdpdF9sb2dfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KQEAgLTk5NCwyMCArMTAyNyw2IEBACiAJcHV0YygnXG4nLCBmaWxlKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjcmlwdGlvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQotewotCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOwotCWlmICghYnJhbmNoX25hbWUgfHwgISpicmFuY2hfbmFtZSkKLQkJcmV0dXJuOwotCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIGJyYW5jaF9uYW1lKTsKLQlpZiAoZGVzYy5sZW4pIHsKLQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7Ci0JCXN0cmJ1Zl9hZGRidWYoYnVmLCAmZGVzYyk7Ci0JCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOwotCX0KLQlzdHJidWZfcmVsZWFzZSgmZGVzYyk7Ci19Ci0KIHN0YXRpYyBjaGFyICpmaW5kX2JyYW5jaF9uYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpLCBwb3NpdGl2ZSA9IC0xOwpAQCAtMTA1NCw2ICsxMDczLDYzIEBACiAJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfY292ZXJfdGV4dChzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkJICAgICAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCWNvbnN0IGNoYXIgKnN1YmplY3QgPSAiKioqIFNVQkpFQ1QgSEVSRSAqKioiOworCWNvbnN0IGNoYXIgKmJvZHkgPSAiKioqIEJMVVJCIEhFUkUgKioqIjsKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2NyaXB0aW9uX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0X3NiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTk9ORSkKKwkJZ290byBkb19wcDsKKworCWlmIChicmFuY2hfbmFtZSAmJiAqYnJhbmNoX25hbWUpCisJCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2NyaXB0aW9uX3NiLCBicmFuY2hfbmFtZSk7CisJaWYgKCFkZXNjcmlwdGlvbl9zYi5sZW4pCisJCWdvdG8gZG9fcHA7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fU1VCSkVDVCB8fAorCQkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fQVVUTykKKwkJYm9keSA9IGZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0X3NiLCBkZXNjcmlwdGlvbl9zYi5idWYsICIgIik7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTUVTU0FHRSB8fAorCQkJKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9PSBDT1ZFUl9GUk9NX0FVVE8gJiYKKwkJCSBzdWJqZWN0X3NiLmxlbiA+IENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4pKQorCQlib2R5ID0gZGVzY3JpcHRpb25fc2IuYnVmOworCWVsc2UKKwkJc3ViamVjdCA9IHN1YmplY3Rfc2IuYnVmOworCitkb19wcDoKKwlwcF90aXRsZV9saW5lKHBwLCAmc3ViamVjdCwgc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlwcF9yZW1haW5kZXIocHAsICZib2R5LCBzYiwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmZGVzY3JpcHRpb25fc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJqZWN0X3NiKTsKK30KKworc3RhdGljIGludCBnZXRfbm90ZXNfcmVmcyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqYXJnKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoYXJnLCAiLS1ub3Rlcz0lcyIsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9ub3Rlc19hcmdzKHN0cnVjdCBhcmd2X2FycmF5ICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmICghcmV2LT5zaG93X25vdGVzKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmcsICItLW5vLW5vdGVzIik7CisJfSBlbHNlIGlmIChyZXYtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA+IDAgfHwKKwkJICAgKHJldi0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmCisJCSAgICAhcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcy5ucikpIHsKKwkJYXJndl9hcnJheV9wdXNoKGFyZywgIi0tbm90ZXMiKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywgZ2V0X25vdGVzX3JlZnMsIGFyZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtYWtlX2NvdmVyX2xldHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgaW50IHVzZV9zdGRvdXQsCiAJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpvcmlnaW4sCiAJCQkgICAgICBpbnQgbnIsIHN0cnVjdCBjb21taXQgKipsaXN0LApAQCAtMTA2MSw4ICsxMTM3LDYgQEAKIAkJCSAgICAgIGludCBxdWlldCkKIHsKIAljb25zdCBjaGFyICpjb21taXR0ZXI7Ci0JY29uc3QgY2hhciAqYm9keSA9ICIqKiogU1VCSkVDVCBIRVJFICoqKlxuXG4qKiogQkxVUkIgSEVSRSAqKipcbiI7Ci0JY29uc3QgY2hhciAqbXNnOwogCXN0cnVjdCBzaG9ydGxvZyBsb2c7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwogCWludCBpOwpAQCAtMTA5MiwxNSArMTE2NiwxMiBAQAogCWlmICghYnJhbmNoX25hbWUpCiAJCWJyYW5jaF9uYW1lID0gZmluZF9icmFuY2hfbmFtZShyZXYpOwogCi0JbXNnID0gYm9keTsKIAlwcC5mbXQgPSBDTUlUX0ZNVF9FTUFJTDsKIAlwcC5kYXRlX21vZGUudHlwZSA9IERBVEVfUkZDMjgyMjsKIAlwcC5yZXYgPSByZXY7CiAJcHAucHJpbnRfZW1haWxfc3ViamVjdCA9IDE7CiAJcHBfdXNlcl9pbmZvKCZwcCwgTlVMTCwgJnNiLCBjb21taXR0ZXIsIGVuY29kaW5nKTsKLQlwcF90aXRsZV9saW5lKCZwcCwgJm1zZywgJnNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7Ci0JcHBfcmVtYWluZGVyKCZwcCwgJm1zZywgJnNiLCAwKTsKLQlhZGRfYnJhbmNoX2Rlc2NyaXB0aW9uKCZzYiwgYnJhbmNoX25hbWUpOworCXByZXBhcmVfY292ZXJfdGV4dCgmcHAsIGJyYW5jaF9uYW1lLCAmc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKIAlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIHNiLmJ1Zik7CiAKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwpAQCAtMTEzMSwxMyArMTIwMiwxNiBAQAogCQkgKiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgZGVlbWVkIGRlc2lyYWJsZS4KIAkJICovCiAJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgb3RoZXJfYXJnID0gQVJHVl9BUlJBWV9JTklUOwogCQlkaWZmX3NldHVwKCZvcHRzKTsKIAkJb3B0cy5maWxlID0gcmV2LT5kaWZmb3B0LmZpbGU7CiAJCW9wdHMudXNlX2NvbG9yID0gcmV2LT5kaWZmb3B0LnVzZV9jb2xvcjsKIAkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKIAkJZnByaW50Zl9sbihyZXYtPmRpZmZvcHQuZmlsZSwgIiVzIiwgcmV2LT5yZGlmZl90aXRsZSk7CisJCWdldF9ub3Rlc19hcmdzKCZvdGhlcl9hcmcsIHJldik7CiAJCXNob3dfcmFuZ2VfZGlmZihyZXYtPnJkaWZmMSwgcmV2LT5yZGlmZjIsCi0JCQkJcmV2LT5jcmVhdGlvbl9mYWN0b3IsIDEsICZvcHRzKTsKKwkJCQlyZXYtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsICZvdGhlcl9hcmcpOworCQlhcmd2X2FycmF5X2NsZWFyKCZvdGhlcl9hcmcpOwogCX0KIH0KIApAQCAtMTI0OSw5ICsxMzIzLDkgQEAKIAogc3RhdGljIGludCB0aHJlYWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKLQlpbnQgKnRocmVhZCA9IChpbnQgKilvcHQtPnZhbHVlOworCWVudW0gdGhyZWFkX2xldmVsICp0aHJlYWQgPSAoZW51bSB0aHJlYWRfbGV2ZWwgKilvcHQtPnZhbHVlOwogCWlmICh1bnNldCkKLQkJKnRocmVhZCA9IDA7CisJCSp0aHJlYWQgPSBUSFJFQURfVU5TRVQ7CiAJZWxzZSBpZiAoIWFyZyB8fCAhc3RyY21wKGFyZywgInNoYWxsb3ciKSkKIAkJKnRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGVlcCIpKQpAQCAtMTU0Miw2ICsxNjE2LDcgQEAKIAlpbnQgdXNlX3BhdGNoX2Zvcm1hdCA9IDA7CiAJaW50IHF1aWV0ID0gMDsKIAlpbnQgcmVyb2xsX2NvdW50ID0gLTE7CisJY2hhciAqY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcgPSBOVUxMOwogCWNoYXIgKmJyYW5jaF9uYW1lID0gTlVMTDsKIAljaGFyICpiYXNlX2NvbW1pdCA9IE5VTEw7CiAJc3RydWN0IGJhc2VfdHJlZV9pbmZvIGJhc2VzOwpAQCAtMTU3OCw2ICsxNjUzLDkgQEAKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZmMiLCAmcmV2LCBOVUxMLAogCQkJICAgIE5fKCJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIiksCiAJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCByZmNfY2FsbGJhY2sgfSwKKwkJT1BUX1NUUklORygwLCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbiIsICZjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZywKKwkJCSAgICBOXygiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIiksCisJCQkgICAgTl8oImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iKSksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic3ViamVjdC1wcmVmaXgiLCAmcmV2LCBOXygicHJlZml4IiksCiAJCQkgICAgTl8oIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIpLAogCQkJICAgIFBBUlNFX09QVF9OT05FRywgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2sgfSwKQEAgLTE2NjksNiArMTc0Nyw5IEBACiAJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwIHwgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CiAJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAorCWlmIChjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZykKKwkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID0gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbihjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZyk7CisKIAlpZiAoMCA8IHJlcm9sbF9jb3VudCkgewogCQlzdHJ1Y3Qgc3RyYnVmIHNwcmVmaXggPSBTVFJCVUZfSU5JVDsKIAkJc3RyYnVmX2FkZGYoJnNwcmVmaXgsICIlcyB2JWQiLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwppbmRleCBiMWVhMWE2Li41YmY4OGNkIDEwMDY0NAotLS0gYS9idWlsdGluL211bHRpLXBhY2staW5kZXguYworKysgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwpAQCAtNiwyMSArNiwyNSBAQAogI2luY2x1ZGUgInRyYWNlMi5oIgogCiBzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZVtdID0gewotCU5fKCJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC1zaXplPTxzaXplPikiKSwKKwlOXygiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtc2l6ZT08c2l6ZT4pIiksCiAJTlVMTAogfTsKIAogc3RhdGljIHN0cnVjdCBvcHRzX211bHRpX3BhY2tfaW5kZXggewogCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CiAJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplOworCWludCBwcm9ncmVzczsKIH0gb3B0czsKIAogaW50IGNtZF9tdWx0aV9wYWNrX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgpCiB7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCiAJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnNbXSA9IHsKIAkJT1BUX0ZJTEVOQU1FKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqZWN0X2RpciwKIAkJICBOXygib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdHMucHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCiAJCU9QVF9NQUdOSVRVREUoMCwgImJhdGNoLXNpemUiLCAmb3B0cy5iYXRjaF9zaXplLAogCQkgIE5fKCJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSIpKSwKIAkJT1BUX0VORCgpLApAQCAtMjgsMTIgKzMyLDE1IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKIAkJCSAgICAgYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnMsCiAJCQkgICAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZSwgMCk7CiAKIAlpZiAoIW9wdHMub2JqZWN0X2RpcikKIAkJb3B0cy5vYmplY3RfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlpZiAob3B0cy5wcm9ncmVzcykKKwkJZmxhZ3MgfD0gTUlEWF9QUk9HUkVTUzsKIAogCWlmIChhcmdjID09IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2UsCkBAIC00NywxNiArNTQsMTcgQEAKIAl0cmFjZTJfY21kX21vZGUoYXJndlswXSk7CiAKIAlpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVwYWNrIikpCi0JCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCAoc2l6ZV90KW9wdHMuYmF0Y2hfc2l6ZSk7CisJCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLAorCQkJKHNpemVfdClvcHRzLmJhdGNoX3NpemUsIGZsYWdzKTsKIAlpZiAob3B0cy5iYXRjaF9zaXplKQogCQlkaWUoXygiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIikpOwogCiAJaWYgKCFzdHJjbXAoYXJndlswXSwgIndyaXRlIikpCi0JCXJldHVybiB3cml0ZV9taWR4X2ZpbGUob3B0cy5vYmplY3RfZGlyKTsKKwkJcmV0dXJuIHdyaXRlX21pZHhfZmlsZShvcHRzLm9iamVjdF9kaXIsIGZsYWdzKTsKIAlpZiAoIXN0cmNtcChhcmd2WzBdLCAidmVyaWZ5IikpCi0JCXJldHVybiB2ZXJpZnlfbWlkeF9maWxlKHRoZV9yZXBvc2l0b3J5LCBvcHRzLm9iamVjdF9kaXIpOworCQlyZXR1cm4gdmVyaWZ5X21pZHhfZmlsZSh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CiAJaWYgKCFzdHJjbXAoYXJndlswXSwgImV4cGlyZSIpKQotCQlyZXR1cm4gZXhwaXJlX21pZHhfcGFja3ModGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2Rpcik7CisJCXJldHVybiBleHBpcmVfbWlkeF9wYWNrcyh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CiAKIAlkaWUoXygidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ub3Rlcy5jIGIvYnVpbHRpbi9ub3Rlcy5jCmluZGV4IDAyZTk3ZjUuLjk1NDU2ZjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbm90ZXMuYworKysgYi9idWlsdGluL25vdGVzLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGFyZ2MgPCAyKSB7CisJaWYgKGFyZ2MgPCAxKSB7CiAJCWVycm9yKF8oInRvbyBmZXcgcGFyYW1ldGVycyIpKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKIAl9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwppbmRleCA1ODc2NTgzLi4zOTNjMjBhIDEwMDY0NAotLS0gYS9idWlsdGluL3BhY2stb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCWRlbHRhX2J1ZiA9IGRpZmZfZGVsdGEoYmFzZV9idWYsIGJhc2Vfc2l6ZSwKIAkJCSAgICAgICBidWYsIHNpemUsICZkZWx0YV9zaXplLCAwKTsKIAkvKgotCSAqIFdlIHN1Y2Nlc2Z1bGx5IGNvbXB1dGVkIHRoaXMgZGVsdGEgb25jZSBidXQgZHJvcHBlZCBpdCBmb3IKKwkgKiBXZSBzdWNjZXNzZnVsbHkgY29tcHV0ZWQgdGhpcyBkZWx0YSBvbmNlIGJ1dCBkcm9wcGVkIGl0IGZvcgogCSAqIG1lbW9yeSByZWFzb25zLiBTb21ldGhpbmcgaXMgdmVyeSB3cm9uZyBpZiB0aGlzIHRpbWUgd2UKIAkgKiByZWNvbXB1dGUgYW5kIGNyZWF0ZSBhIGRpZmZlcmVudCBkZWx0YS4KIAkgKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmFuZ2UtZGlmZi5jIGIvYnVpbHRpbi9yYW5nZS1kaWZmLmMKaW5kZXggOTIwMmU3NS4uOThhY2YzNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yYW5nZS1kaWZmLmMKKysrIGIvYnVpbHRpbi9yYW5nZS1kaWZmLmMKQEAgLTE1LDEyICsxNSwxNiBAQAogewogCWludCBjcmVhdGlvbl9mYWN0b3IgPSBSQU5HRV9ESUZGX0NSRUFUSU9OX0ZBQ1RPUl9ERUZBVUxUOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdCA9IHsgTlVMTCB9OworCXN0cnVjdCBhcmd2X2FycmF5IG90aGVyX2FyZyA9IEFSR1ZfQVJSQVlfSU5JVDsKIAlpbnQgc2ltcGxlX2NvbG9yID0gLTE7CiAJc3RydWN0IG9wdGlvbiByYW5nZV9kaWZmX29wdGlvbnNbXSA9IHsKIAkJT1BUX0lOVEVHRVIoMCwgImNyZWF0aW9uLWZhY3RvciIsICZjcmVhdGlvbl9mYWN0b3IsCiAJCQkgICAgTl8oIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiKSksCiAJCU9QVF9CT09MKDAsICJuby1kdWFsLWNvbG9yIiwgJnNpbXBsZV9jb2xvciwKIAkJCSAgICBOXygidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIpKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgIm5vdGVzIiwgJm90aGVyX2FyZywKKwkJCQkgIE5fKCJub3RlcyIpLCBOXygicGFzc2VkIHRvICdnaXQgbG9nJyIpLAorCQkJCSAgUEFSU0VfT1BUX09QVEFSRyksCiAJCU9QVF9FTkQoKQogCX07CiAJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKQEAgLTc4LDcgKzgyLDcgQEAKIAlGUkVFX0FORF9OVUxMKG9wdGlvbnMpOwogCiAJcmVzID0gc2hvd19yYW5nZV9kaWZmKHJhbmdlMS5idWYsIHJhbmdlMi5idWYsIGNyZWF0aW9uX2ZhY3RvciwKLQkJCSAgICAgIHNpbXBsZV9jb2xvciA8IDEsICZkaWZmb3B0KTsKKwkJCSAgICAgIHNpbXBsZV9jb2xvciA8IDEsICZkaWZmb3B0LCAmb3RoZXJfYXJnKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZyYW5nZTEpOwogCXN0cmJ1Zl9yZWxlYXNlKCZyYW5nZTIpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWJhc2UuYyBiL2J1aWx0aW4vcmViYXNlLmMKaW5kZXggNGEyMDU4Mi4uZTc1NTA4NyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZWJhc2UuYworKysgYi9idWlsdGluL3JlYmFzZS5jCkBAIC0xNDcxLDkgKzE0NzEsMTAgQEAKIAkJCU5fKCJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIpLAogCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAogCQkJcGFyc2Vfb3B0X2ludGVyYWN0aXZlIH0sCi0JCU9QVF9TRVRfSU5UKCdwJywgInByZXNlcnZlLW1lcmdlcyIsICZvcHRpb25zLnR5cGUsCi0JCQkgICAgTl8oIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgIgotCQkJICAgICAgICJpZ25vcmluZyB0aGVtIiksIFJFQkFTRV9QUkVTRVJWRV9NRVJHRVMpLAorCQlPUFRfU0VUX0lOVF9GKCdwJywgInByZXNlcnZlLW1lcmdlcyIsICZvcHRpb25zLnR5cGUsCisJCQkgICAgICBOXygiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiAiCisJCQkJICJpZ25vcmluZyB0aGVtIiksCisJCQkgICAgICBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTLCBQQVJTRV9PUFRfSElEREVOKSwKIAkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZvcHRpb25zLmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKSwKIAkJT1BUX0JPT0woJ2snLCAia2VlcC1lbXB0eSIsICZvcHRpb25zLmtlZXBfZW1wdHksCiAJCQkgTl8oInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIpKSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwYWNrLmMgYi9idWlsdGluL3JlcGFjay5jCmluZGV4IDA5NGMyZjguLjA3ODE3NjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVwYWNrLmMKKysrIGIvYnVpbHRpbi9yZXBhY2suYwpAQCAtMjMzLDYgKzIzMywxMyBAQAogCQkvKgogCQkgKiBwYWNrLW9iamVjdHMgY3JlYXRlcyB0aGUgLnBhY2sgYW5kIC5pZHggZmlsZXMsIGJ1dCBub3QgdGhlCiAJCSAqIC5wcm9taXNvciBmaWxlLiBDcmVhdGUgdGhlIC5wcm9taXNvciBmaWxlLCB3aGljaCBpcyBlbXB0eS4KKwkJICoKKwkJICogTkVFRFNXT1JLOiBmZXRjaC1wYWNrIHNvbWV0aW1lcyBnZW5lcmF0ZXMgbm9uLWVtcHR5CisJCSAqIC5wcm9taXNvciBmaWxlcyBjb250YWluaW5nIHRoZSByZWYgbmFtZXMgYW5kIGFzc29jaWF0ZWQKKwkJICogaGFzaGVzIGF0IHRoZSBwb2ludCBvZiBnZW5lcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBhY2tmaWxlLCBidXQgdGhpcyB3b3VsZCBub3QgcHJlc2VydmUgdGhlaXIgY29udGVudHMuIE1heWJlCisJCSAqIGNvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiBhbGwgLnByb21pc29yIGZpbGVzIGluc3RlYWQgb2YKKwkJICoganVzdCBjcmVhdGluZyBhIG5ldyBlbXB0eSBmaWxlLgogCQkgKi8KIAkJcHJvbWlzb3JfbmFtZSA9IG1rcGF0aGR1cCgiJXMtJXMucHJvbWlzb3IiLCBwYWNrdG1wLAogCQkJCQkgIGxpbmUuYnVmKTsKQEAgLTU2Miw3ICs1NjksNyBAQAogCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoKTsKIAogCWlmIChnaXRfZW52X2Jvb2woR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWCwgMCkpCi0JCXdyaXRlX21pZHhfZmlsZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwkJd3JpdGVfbWlkeF9maWxlKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDApOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIoJm5hbWVzLCAwKTsKIAlzdHJpbmdfbGlzdF9jbGVhcigmcm9sbGJhY2ssIDApOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXNldC5jIGIvYnVpbHRpbi9yZXNldC5jCmluZGV4IGZkZDU3MjEuLjVjYmZiMjEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVzZXQuYworKysgYi9idWlsdGluL3Jlc2V0LmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCWlmICh1bmJvcm4pIHsKIAkJLyogcmVzZXQgb24gdW5ib3JuIGJyYW5jaDogdHJlYXQgYXMgcmVzZXQgdG8gZW1wdHkgdHJlZSAqLwogCQlvaWRjcHkoJm9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7Ci0JfSBlbHNlIGlmICghcGF0aHNwZWMubnIpIHsKKwl9IGVsc2UgaWYgKCFwYXRoc3BlYy5uciAmJiAhcGF0Y2hfbW9kZSkgewogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJCWlmIChnZXRfb2lkX2NvbW1pdHRpc2gocmV2LCAmb2lkKSkKIAkJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIiksIHJldik7CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1wYXJzZS5jIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwppbmRleCAzMDhjNjdlLi43YTAwZGE4IDEwMDY0NAotLS0gYS9idWlsdGluL3Jldi1wYXJzZS5jCisrKyBiL2J1aWx0aW4vcmV2LXBhcnNlLmMKQEAgLTgwMyw2ICs4MDMsOCBAQAogCQkJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CiAJCQkJaWYgKHdvcmtfdHJlZSkKIAkJCQkJcHV0cyh3b3JrX3RyZWUpOworCQkJCWVsc2UKKwkJCQkJZGllKCJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXN1cGVycHJvamVjdC13b3JraW5nLXRyZWUiKSkgewpAQCAtOTE5LDYgKzkyMSwxNyBAQAogCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZyk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS1zaG93LW9iamVjdC1mb3JtYXQiLCAmYXJnKSkgeworCQkJCWNvbnN0IGNoYXIgKnZhbCA9IGFyZyA/IGFyZyA6ICJzdG9yYWdlIjsKKworCQkJCWlmIChzdHJjbXAodmFsLCAic3RvcmFnZSIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJpbnB1dCIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJvdXRwdXQiKSkKKwkJCQkJZGllKCJ1bmtub3duIG1vZGUgZm9yIC0tc2hvdy1vYmplY3QtZm9ybWF0OiAlcyIsCisJCQkJCSAgICBhcmcpOworCQkJCXB1dHModGhlX2hhc2hfYWxnby0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoc2hvd19mbGFnKGFyZykgJiYgdmVyaWZ5KQogCQkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdGFzaC5jIGIvYnVpbHRpbi9zdGFzaC5jCmluZGV4IDRlODA2MTcuLjRhZDNhZGYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vc3Rhc2guYworKysgYi9idWlsdGluL3N0YXNoLmMKQEAgLTQ4MywxMyArNDgzLDEyIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLTE7CiAKKwkJLyogcmVhZCBiYWNrIHRoZSByZXN1bHQgb2YgdXBkYXRlX2luZGV4KCkgYmFjayBmcm9tIHRoZSBkaXNrICovCiAJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmVhZF9jYWNoZSgpOwogCX0KIAotCWlmIChxdWlldCkgewotCQlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkpCi0JCQl3YXJuaW5nKCJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIpOwotCX0gZWxzZSB7CisJaWYgKCFxdWlldCkgewogCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKIAogCQkvKgpAQCAtMTA4OCw4ICsxMDg3LDkgQEAKIAl9CiAKIAljcF91cGRfaW5kZXguZ2l0X2NtZCA9IDE7Ci0JYXJndl9hcnJheV9wdXNobCgmY3BfdXBkX2luZGV4LmFyZ3MsICJ1cGRhdGUtaW5kZXgiLCAiLXoiLCAiLS1hZGQiLAotCQkJICItLXJlbW92ZSIsICItLXN0ZGluIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmY3BfdXBkX2luZGV4LmFyZ3MsICJ1cGRhdGUtaW5kZXgiLAorCQkJICItLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMiLAorCQkJICIteiIsICItLWFkZCIsICItLXJlbW92ZSIsICItLXN0ZGluIiwgTlVMTCk7CiAJYXJndl9hcnJheV9wdXNoZigmY3BfdXBkX2luZGV4LmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKIAkJCSBzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwppbmRleCBhODdhNGJmLi45MTAwOTY0IDEwMDY0NAotLS0gYS9idWlsdGluL3VucGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCkBAIC0yNCw2ICsyNCw3IEBACiBzdGF0aWMgb2ZmX3QgbWF4X2lucHV0X3NpemU7CiBzdGF0aWMgZ2l0X2hhc2hfY3R4IGN0eDsKIHN0YXRpYyBzdHJ1Y3QgZnNja19vcHRpb25zIGZzY2tfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19TVFJJQ1Q7CitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKIAogLyoKICAqIFdoZW4gcnVubmluZyB1bmRlciAtLXN0cmljdCBtb2RlLCBvYmplY3RzIHdob3NlIHJlYWNoYWJpbGl0eSBhcmUKQEAgLTkyLDYgKzkzLDcgQEAKIAljb25zdW1lZF9ieXRlcyArPSBieXRlczsKIAlpZiAobWF4X2lucHV0X3NpemUgJiYgY29uc3VtZWRfYnl0ZXMgPiBtYXhfaW5wdXRfc2l6ZSkKIAkJZGllKF8oInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIpKTsKKwlkaXNwbGF5X3Rocm91Z2hwdXQocHJvZ3Jlc3MsIGNvbnN1bWVkX2J5dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgKmdldF9kYXRhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTQ4NCw3ICs0ODYsNiBAQAogc3RhdGljIHZvaWQgdW5wYWNrX2FsbCh2b2lkKQogewogCWludCBpOwotCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwogCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyID0gZmlsbChzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7CiAKIAlucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwppbmRleCA0OTMwMmQ5Li5kNTI3YjhmIDEwMDY0NAotLS0gYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jCisrKyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKQEAgLTM1LDYgKzM1LDcgQEAKIHN0YXRpYyBpbnQgbWFya192YWxpZF9vbmx5Owogc3RhdGljIGludCBtYXJrX3NraXBfd29ya3RyZWVfb25seTsKIHN0YXRpYyBpbnQgbWFya19mc21vbml0b3Jfb25seTsKK3N0YXRpYyBpbnQgaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllczsKICNkZWZpbmUgTUFSS19GTEFHIDEKICNkZWZpbmUgVU5NQVJLX0ZMQUcgMgogc3RhdGljIHN0cnVjdCBzdHJidWYgbXRpbWVfZGlyID0gU1RSQlVGX0lOSVQ7CkBAIC0zODEsNyArMzgyLDggQEAKIAkJICogc28gdXBkYXRpbmcgaXQgZG9lcyBub3QgbWFrZSBzZW5zZS4KIAkJICogT24gdGhlIG90aGVyIGhhbmQsIHJlbW92aW5nIGl0IGZyb20gaW5kZXggc2hvdWxkIHdvcmsKIAkJICovCi0JCWlmIChhbGxvd19yZW1vdmUgJiYgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZV9lbnRyaWVzICYmIGFsbG93X3JlbW92ZSAmJgorCQkgICAgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKIAkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCByZW1vdmUgZnJvbSB0aGUgaW5kZXgiLCBwYXRoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTAxNCw2ICsxMDE2LDggQEAKIAkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tc2tpcC13b3JrdHJlZSIsICZtYXJrX3NraXBfd29ya3RyZWVfb25seSwgTlVMTCwKIAkJCU5fKCJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIpLAogCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIiwgJmlnbm9yZV9za2lwX3dvcmt0cmVlX2VudHJpZXMsCisJCQkgTl8oImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiKSksCiAJCU9QVF9TRVRfSU5UKDAsICJpbmZvLW9ubHkiLCAmaW5mb19vbmx5LAogCQkJTl8oImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIiksIDEpLAogCQlPUFRfU0VUX0lOVCgwLCAiZm9yY2UtcmVtb3ZlIiwgJmZvcmNlX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vd29ya3RyZWUuYyBiL2J1aWx0aW4vd29ya3RyZWUuYwppbmRleCA0ZGU0NGY1Li5kNmJjNTI2IDEwMDY0NAotLS0gYS9idWlsdGluL3dvcmt0cmVlLmMKKysrIGIvYnVpbHRpbi93b3JrdHJlZS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlpZiAob3B0cy0+Y2hlY2tvdXQpIHsKIAkJY3AuYXJndiA9IE5VTEw7CiAJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNwLmFyZ3MpOwotCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVzZXQiLCAiLS1oYXJkIiwgTlVMTCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXNldCIsICItLWhhcmQiLCAiLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMiLCBOVUxMKTsKIAkJaWYgKG9wdHMtPnF1aWV0KQogCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1xdWlldCIpOwogCQljcC5lbnYgPSBjaGlsZF9lbnYuYXJndjsKZGlmZiAtLWdpdCBhL2J1bmRsZS5jIGIvYnVuZGxlLmMKaW5kZXggYTg1ZWQzZi4uOTk0MzllMCAxMDA2NDQKLS0tIGEvYnVuZGxlLmMKKysrIGIvYnVuZGxlLmMKQEAgLTI0OSwxNSArMjQ5LDE2IEBACiAKIAogLyogV3JpdGUgdGhlIHBhY2sgZGF0YSB0byBidW5kbGVfZmQgKi8KLXN0YXRpYyBpbnQgd3JpdGVfcGFja19kYXRhKGludCBidW5kbGVfZmQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3N0YXRpYyBpbnQgd3JpdGVfcGFja19kYXRhKGludCBidW5kbGVfZmQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGFyZ3ZfYXJyYXkgKnBhY2tfb3B0aW9ucykKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwYWNrX29iamVjdHMgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAJaW50IGk7CiAKIAlhcmd2X2FycmF5X3B1c2hsKCZwYWNrX29iamVjdHMuYXJncywKLQkJCSAicGFjay1vYmplY3RzIiwgIi0tYWxsLXByb2dyZXNzLWltcGxpZWQiLAorCQkJICJwYWNrLW9iamVjdHMiLAogCQkJICItLXN0ZG91dCIsICItLXRoaW4iLCAiLS1kZWx0YS1iYXNlLW9mZnNldCIsCiAJCQkgTlVMTCk7CisJYXJndl9hcnJheV9wdXNodigmcGFja19vYmplY3RzLmFyZ3MsIHBhY2tfb3B0aW9ucy0+YXJndik7CiAJcGFja19vYmplY3RzLmluID0gLTE7CiAJcGFja19vYmplY3RzLm91dCA9IGJ1bmRsZV9mZDsKIAlwYWNrX29iamVjdHMuZ2l0X2NtZCA9IDE7CkBAIC00MjgsNyArNDI5LDcgQEAKIH0KIAogaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCi0JCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IGFyZ3ZfYXJyYXkgKnBhY2tfb3B0aW9ucykKIHsKIAlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CiAJaW50IGJ1bmRsZV9mZCA9IC0xOwpAQCAtNDcwLDcgKzQ3MSw3IEBACiAJCWdvdG8gZXJyOwogCiAJLyogd3JpdGUgcGFjayAqLwotCWlmICh3cml0ZV9wYWNrX2RhdGEoYnVuZGxlX2ZkLCAmcmV2cykpCisJaWYgKHdyaXRlX3BhY2tfZGF0YShidW5kbGVfZmQsICZyZXZzLCBwYWNrX29wdGlvbnMpKQogCQlnb3RvIGVycjsKIAogCWlmICghYnVuZGxlX3RvX3N0ZG91dCkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlLmggYi9idW5kbGUuaAppbmRleCAzN2MzN2Q3Li5jZWFiMGM3IDEwMDY0NAotLS0gYS9idW5kbGUuaAorKysgYi9idW5kbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgQlVORExFX0gKICNkZWZpbmUgQlVORExFX0gKIAorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogCiBzdHJ1Y3QgcmVmX2xpc3QgewpAQCAtMTksNyArMjAsNyBAQAogaW50IGlzX2J1bmRsZShjb25zdCBjaGFyICpwYXRoLCBpbnQgcXVpZXQpOwogaW50IHJlYWRfYnVuZGxlX2hlYWRlcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyKTsKIGludCBjcmVhdGVfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwYXRoLAotCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgYXJndl9hcnJheSAqcGFja19vcHRpb25zKTsKIGludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBpbnQgdmVyYm9zZSk7CiAjZGVmaW5lIEJVTkRMRV9WRVJCT1NFIDEKIGludCB1bmJ1bmRsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwKZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCmluZGV4IDA0Y2FiYWEuLjY0NjY5YTQgMTAwNjQ0Ci0tLSBhL2NhY2hlLmgKKysrIGIvY2FjaGUuaApAQCAtMTQ1MSw3ICsxNDUxLDggQEAKIGludCBoZXhfdG9fYnl0ZXModW5zaWduZWQgY2hhciAqYmluYXJ5LCBjb25zdCBjaGFyICpoZXgsIHNpemVfdCBsZW4pOwogCiAvKgotICogQ29udmVydCBhIGJpbmFyeSBoYXNoIHRvIGl0cyBoZXggZXF1aXZhbGVudC4gVGhlIGBfcmAgdmFyaWFudCBpcyByZWVudHJhbnQsCisgKiBDb252ZXJ0IGEgYmluYXJ5IGhhc2ggaW4gInVuc2lnbmVkIGNoYXIgW10iIG9yIGFuIG9iamVjdCBuYW1lIGluCisgKiAic3RydWN0IG9iamVjdF9pZCAqIiB0byBpdHMgaGV4IGVxdWl2YWxlbnQuIFRoZSBgX3JgIHZhcmlhbnQgaXMgcmVlbnRyYW50LAogICogYW5kIHdyaXRlcyB0aGUgTlVMLXRlcm1pbmF0ZWQgb3V0cHV0IHRvIHRoZSBidWZmZXIgYG91dGAsIHdoaWNoIG11c3QgYmUgYXQKICAqIGxlYXN0IGBHSVRfTUFYX0hFWFNaICsgMWAgYnl0ZXMsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBvdXQgZm9yCiAgKiBjb252ZW5pZW5jZS4KQEAgLTE0NTksMTMgKzE0NjAsMTIgQEAKICAqIFRoZSBub24tYF9yYCB2YXJpYW50IHJldHVybnMgYSBzdGF0aWMgYnVmZmVyLCBidXQgdXNlcyBhIHJpbmcgb2YgNAogICogYnVmZmVycywgbWFraW5nIGl0IHNhZmUgdG8gbWFrZSBtdWx0aXBsZSBjYWxscyBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBsaWtlOgogICoKLSAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIHNoYTFfdG9faGV4KG9uZSksIHNoYTFfdG9faGV4KHR3bykpOworICogICBwcmludGYoIiVzIC0+ICVzIiwgaGFzaF90b19oZXgob25lKSwgaGFzaF90b19oZXgodHdvKSk7CisgKiAgIHByaW50ZigiJXMgLT4gJXMiLCBvaWRfdG9faGV4KG9uZSksIG9pZF90b19oZXgodHdvKSk7CiAgKi8KIGNoYXIgKmhhc2hfdG9faGV4X2FsZ29wX3IoY2hhciAqYnVmZmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqKTsKLWNoYXIgKnNoYTFfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGNoYXIgKm9pZF90b19oZXhfcihjaGFyICpvdXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CiBjaGFyICpoYXNoX3RvX2hleF9hbGdvcChjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqKTsJLyogc3RhdGljIGJ1ZmZlciByZXN1bHQhICovCi1jaGFyICpzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsJCQkJCQkvKiBzYW1lIHN0YXRpYyBidWZmZXIgKi8KIGNoYXIgKmhhc2hfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gpOwkJCQkJCS8qIHNhbWUgc3RhdGljIGJ1ZmZlciAqLwogY2hhciAqb2lkX3RvX2hleChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwkJCQkJCS8qIHNhbWUgc3RhdGljIGJ1ZmZlciAqLwogCmRpZmYgLS1naXQgYS9jaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCBiL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCmluZGV4IDRlNjRhMTkuLmI2YjRmNDcgMTAwNzU1Ci0tLSBhL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCisrKyBiL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCkBAIC00Miw3ICs0Miw4IEBACiAJYnJldyBsaW5rIC0tZm9yY2UgZ2V0dGV4dAogCWJyZXcgY2FzayBpbnN0YWxsIHBlcmZvcmNlIHx8IHsKIAkJIyBVcGRhdGUgdGhlIGRlZmluaXRpb25zIGFuZCB0cnkgYWdhaW4KLQkJZ2l0IC1DICIkKGJyZXcgLS1yZXBvc2l0b3J5KSIvTGlicmFyeS9UYXBzL2hvbWVicmV3L2hvbWVicmV3LWNhc2sgcHVsbCAmJgorCQljYXNrX3JlcG89IiQoYnJldyAtLXJlcG9zaXRvcnkpIi9MaWJyYXJ5L1RhcHMvaG9tZWJyZXcvaG9tZWJyZXctY2FzayAmJgorCQlnaXQgLUMgIiRjYXNrX3JlcG8iIHB1bGwgLS1uby1zdGF0ICYmCiAJCWJyZXcgY2FzayBpbnN0YWxsIHBlcmZvcmNlCiAJfSB8fAogCWJyZXcgaW5zdGFsbCBjYXNrcm9vbS9jYXNrL3BlcmZvcmNlCmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dAppbmRleCBhOWFjNzJiLi43MmU0MzVjIDEwMDY0NAotLS0gYS9jb21tYW5kLWxpc3QudHh0CisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTIwMyw2ICsyMDMsNyBAQAogZ2l0bmFtZXNwYWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCiBnaXRyZXBvc2l0b3J5LWxheW91dCAgICAgICAgICAgICAgICAgICAgZ3VpZGUKIGdpdHJldmlzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0c3VibW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCiBnaXR0dXRvcmlhbC0yICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKIGdpdHR1dG9yaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQogZ2l0d29ya2Zsb3dzICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCmRpZmYgLS1naXQgYS9jb21taXQtZ3JhcGguYyBiL2NvbW1pdC1ncmFwaC5jCmluZGV4IDBhZWE3YjIuLjc5YmM1NjQgMTAwNjQ0Ci0tLSBhL2NvbW1pdC1ncmFwaC5jCisrKyBiL2NvbW1pdC1ncmFwaC5jCkBAIC00NjQsNyArNDY0LDcgQEAKIC8qCiAgKiBSZXR1cm4gMSBpZiBjb21taXRfZ3JhcGggaXMgbm9uLU5VTEwsIGFuZCAwIG90aGVyd2lzZS4KICAqCi0gKiBPbiB0aGUgZmlyc3QgaW52b2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBhdHRlbXBzIHRvIGxvYWQgdGhlIGNvbW1pdAorICogT24gdGhlIGZpcnN0IGludm9jYXRpb24sIHRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gbG9hZCB0aGUgY29tbWl0CiAgKiBncmFwaCBpZiB0aGVfcmVwb3NpdG9yeSBpcyBjb25maWd1cmVkIHRvIGhhdmUgb25lLgogICovCiBzdGF0aWMgaW50IHByZXBhcmVfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyKQpAQCAtODU4LDkgKzg1OCw2IEBACiAJCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIpLAogCQkJCW9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKIAkJdHJlZSA9IGdldF9jb21taXRfdHJlZV9vaWQoKmxpc3QpOwotCQlpZiAoIXRyZWUpCi0JCQlkaWUoXygidW5hYmxlIHRvIGdldCB0cmVlIGZvciAlcyIpLAotCQkJCW9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKIAkJaGFzaHdyaXRlKGYsIHRyZWUtPmhhc2gsIGhhc2hfbGVuKTsKIAogCQlwYXJlbnQgPSAoKmxpc3QpLT5wYXJlbnRzOwpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwppbmRleCA0MDg5MGFlLi40MzRlYzAzIDEwMDY0NAotLS0gYS9jb21taXQuYworKysgYi9jb21taXQuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImFkdmljZS5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogCiBzdGF0aWMgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKiopOwogCkBAIC00MDEsMTAgKzQwMiwyMiBAQAogCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OwogCWNvbnN0IGludCB0cmVlX2VudHJ5X2xlbiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNTsKIAljb25zdCBpbnQgcGFyZW50X2VudHJ5X2xlbiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNzsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKIAogCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQogCQlyZXR1cm4gMDsKLQlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKworCWlmIChpdGVtLT5wYXJlbnRzKSB7CisJCS8qCisJCSAqIFByZXN1bWFibHkgdGhpcyBpcyBsZWZ0b3ZlciBmcm9tIGFuIGVhcmxpZXIgZmFpbGVkIHBhcnNlOworCQkgKiBjbGVhciBpdCBvdXQgaW4gcHJlcGFyYXRpb24gZm9yIHVzIHJlLXBhcnNpbmcgKHdlJ2xsIGhpdCB0aGUKKwkJICogc2FtZSBlcnJvciwgYnV0IHRoYXQncyBnb29kLCBzaW5jZSBpdCBsZXRzIG91ciBjYWxsZXIga25vdworCQkgKiB0aGUgcmVzdWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorCQkgKi8KKwkJZnJlZV9jb21taXRfbGlzdChpdGVtLT5wYXJlbnRzKTsKKwkJaXRlbS0+cGFyZW50cyA9IE5VTEw7CisJfQorCiAJdGFpbCArPSBzaXplOwogCWlmICh0YWlsIDw9IGJ1ZnB0ciArIHRyZWVfZW50cnlfbGVuICsgMSB8fCBtZW1jbXAoYnVmcHRyLCAidHJlZSAiLCA1KSB8fAogCQkJYnVmcHRyW3RyZWVfZW50cnlfbGVuXSAhPSAnXG4nKQpAQCAtNDEyLDcgKzQyNSwxMiBAQAogCWlmIChnZXRfb2lkX2hleChidWZwdHIgKyA1LCAmcGFyZW50KSA8IDApCiAJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgcG9pbnRlciBpbiBjb21taXQgJXMiLAogCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7Ci0Jc2V0X2NvbW1pdF90cmVlKGl0ZW0sIGxvb2t1cF90cmVlKHIsICZwYXJlbnQpKTsKKwl0cmVlID0gbG9va3VwX3RyZWUociwgJnBhcmVudCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIHBvaW50ZXIgJXMgaW4gY29tbWl0ICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmcGFyZW50KSwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCXNldF9jb21taXRfdHJlZShpdGVtLCB0cmVlKTsKIAlidWZwdHIgKz0gdHJlZV9lbnRyeV9sZW4gKyAxOyAvKiAidHJlZSAiICsgImhleCBzaGExIiArICJcbiIgKi8KIAlwcHRyID0gJml0ZW0tPnBhcmVudHM7CiAKQEAgLTQzMiw4ICs0NTAsMTEgQEAKIAkJaWYgKGdyYWZ0ICYmIChncmFmdC0+bnJfcGFyZW50IDwgMCB8fCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzKSkKIAkJCWNvbnRpbnVlOwogCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChyLCAmcGFyZW50KTsKLQkJaWYgKG5ld19wYXJlbnQpCi0JCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKKwkJaWYgKCFuZXdfcGFyZW50KQorCQkJcmV0dXJuIGVycm9yKCJiYWQgcGFyZW50ICVzIGluIGNvbW1pdCAlcyIsCisJCQkJICAgICBvaWRfdG9faGV4KCZwYXJlbnQpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKIAl9CiAJaWYgKGdyYWZ0KSB7CiAJCWludCBpOwpAQCAtNDQyLDcgKzQ2Myw5IEBACiAJCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChyLAogCQkJCQkJICAgJmdyYWZ0LT5wYXJlbnRbaV0pOwogCQkJaWYgKCFuZXdfcGFyZW50KQotCQkJCWNvbnRpbnVlOworCQkJCXJldHVybiBlcnJvcigiYmFkIGdyYWZ0IHBhcmVudCAlcyBpbiBjb21taXQgJXMiLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmdyYWZ0LT5wYXJlbnRbaV0pLAorCQkJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKIAkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OwogCQl9CiAJfQpAQCAtNDUxLDYgKzQ3NCw3IEBACiAJaWYgKGNoZWNrX2dyYXBoKQogCQlsb2FkX2NvbW1pdF9ncmFwaF9pbmZvKHIsIGl0ZW0pOwogCisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1ODEsMyArMTYwNSwyNiBAQAogCX0KIAlyZXR1cm4gYm9jID8gbGVuIC0gYm9jIDogbGVuIC0gY3V0b2ZmOwogfQorCitpbnQgcnVuX2NvbW1pdF9ob29rKGludCBlZGl0b3JfaXNfdXNlZCwgY29uc3QgY2hhciAqaW5kZXhfZmlsZSwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBob29rX2VudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldDsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmhvb2tfZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKKworCS8qCisJICogTGV0IHRoZSBob29rIGtub3cgdGhhdCBubyBlZGl0b3Igd2lsbCBiZSBsYXVuY2hlZC4KKwkgKi8KKwlpZiAoIWVkaXRvcl9pc191c2VkKQorCQlhcmd2X2FycmF5X3B1c2goJmhvb2tfZW52LCAiR0lUX0VESVRPUj06Iik7CisKKwl2YV9zdGFydChhcmdzLCBuYW1lKTsKKwlyZXQgPSBydW5faG9va192ZShob29rX2Vudi5hcmd2LG5hbWUsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZob29rX2Vudik7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCBmNTI5NWNhLi4yMjFjZGFhIDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAjZW5kaWYKIAogLyoKLSAqIFRlbGwgdGhlIGNvbW1pdCBzdWJzeXRlbSB0aGF0IHdlIGFyZSBkb25lIHdpdGggYSBwYXJ0aWN1bGFyIGNvbW1pdCBidWZmZXIuCisgKiBUZWxsIHRoZSBjb21taXQgc3Vic3lzdGVtIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29tbWl0IGJ1ZmZlci4KICAqIFRoZSBjb21taXQgYW5kIGJ1ZmZlciBzaG91bGQgYmUgdGhlIGlucHV0IGFuZCByZXR1cm4gdmFsdWUsIHJlc3BlY3RpdmVseSwKICAqIGZyb20gYW4gZWFybGllciBjYWxsIHRvIGdldF9jb21taXRfYnVmZmVyLiAgVGhlIGJ1ZmZlciBtYXkgb3IgbWF5IG5vdCBiZQogICogZnJlZWQgYnkgdGhpcyBjYWxsOyBjYWxsZXJzIHNob3VsZCBub3QgYWNjZXNzIHRoZSBtZW1vcnkgYWZ0ZXJ3YXJkcy4KZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5jIGIvY29tcGF0L21pbmd3LmMKaW5kZXggZmU2MDkyMy4uMmY0NjU0YyAxMDA2NDQKLS0tIGEvY29tcGF0L21pbmd3LmMKKysrIGIvY29tcGF0L21pbmd3LmMKQEAgLTE1NjYsNyArMTU2Niw3IEBACiAJCXdoaWxlIChhcmd2W2FyZ2NdKSBhcmdjKys7CiAJCUFMTE9DX0FSUkFZKGFyZ3YyLCBhcmdjICsgMSk7CiAJCWFyZ3YyWzBdID0gKGNoYXIgKiljbWQ7CS8qIGZ1bGwgcGF0aCB0byB0aGUgc2NyaXB0IGZpbGUgKi8KLQkJbWVtY3B5KCZhcmd2MlsxXSwgJmFyZ3ZbMV0sIHNpemVvZigqYXJndikgKiBhcmdjKTsKKwkJQ09QWV9BUlJBWSgmYXJndjJbMV0sICZhcmd2WzFdLCBhcmdjKTsKIAkJZXhlY19pZCA9IHRyYWNlMl9leGVjKHByb2csIGFyZ3YyKTsKIAkJcGlkID0gbWluZ3dfc3Bhd252KHByb2csIGFyZ3YyLCAxKTsKIAkJaWYgKHBpZCA+PSAwKSB7CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuaCBiL2NvbXBhdC9taW5ndy5oCmluZGV4IDlhZDIwNGMuLjFhNDYzMzQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5oCisrKyBiL2NvbXBhdC9taW5ndy5oCkBAIC01NTgsNyArNTU4LDcgQEAKIAogLyoKICAqIEEgY3JpdGljYWwgc2VjdGlvbiB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Bhd24KLSAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbnRpYWxpc2VkIGluCisgKiBmdW5jdGlvbnMgKG1pbmd3X3NwYXdudltwXWUoKSkgYW5kIHdhaXRwaWQoKS4gSW5pdGlhbGlzZWQgaW4KICAqIHRoZSByZXBsYWNlbWVudCBtYWluKCkgbWFjcm8gYmVsb3cuCiAgKi8KIGV4dGVybiBDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOwpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCmluZGV4IDkxMzQzNDkuLjgxNDg0NWQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaAorKysgYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKQEAgLTE1NjQsNyArMTU2NCw3IEBACiAgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNlZCBzZWdtZW50cyAqLworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzY2VkIHNlZ21lbnRzICovCiBzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMybXVubWFwKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOwogICBjaGFyKiBjcHRyID0gKGNoYXIqKXB0cjsKQEAgLTE2NTUsNyArMTY1NSw3IEBACiAgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpICAgICBNRkFJTAogI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLwogCi0vKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCiAjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCiAKIC8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAKIAogICBUcmltIHN1cHBvcnQKICAgICBGaWVsZHMgaG9sZGluZyB0aGUgYW1vdW50IG9mIHVudXNlZCB0b3Btb3N0IG1lbW9yeSB0aGF0IHNob3VsZCB0cmlnZ2VyCi0gICAgdGltbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAorICAgIHRpbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAogICAgIG5vbi10b3Btb3N0IHNlZ21lbnRzLgogCiAgIExvY2tpbmcKZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmggYi9jb21wYXQvb2JzdGFjay5oCmluZGV4IGFlMzZlZDYuLjAxZTdjODEgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9vYnN0YWNrLmgKKysrIGIvY29tcGF0L29ic3RhY2suaApAQCAtNzksNyArNzksNyBAQAogV2hlbiB0aGUgY2hhcnMgYnVyc3Qgb3ZlciBhIGNodW5rIGJvdW5kYXJ5LCB3ZSBhbGxvY2F0ZSBhIGxhcmdlcgogY2h1bmssIGFuZCB0aGVuIGNvcHkgdGhlIHBhcnRseSBmb3JtZWQgb2JqZWN0IGZyb20gdGhlIGVuZCBvZiB0aGUgb2xkCiBjaHVuayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgbGFyZ2VyIGNodW5rLiAgV2UgdGhlbiBjYXJyeSBvbgotYWNjcmV0aW5nIGNoYXJhY3RlcnMgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGFzIHdlIG5vcm1hbGx5IHdvdWxkLgorYWNjcmVkaXRpbmcgY2hhcmFjdGVycyB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgYXMgd2Ugbm9ybWFsbHkgd291bGQuCiAKIEEgc3BlY2lhbCBtYWNybyBpcyBwcm92aWRlZCB0byBhZGQgYSBzaW5nbGUgY2hhciBhdCBhIHRpbWUgdG8gYQogZ3Jvd2luZyBvYmplY3QuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIHJlZ2lzdGVyIHZhcmlhYmxlcywgd2hpY2gKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCmluZGV4IGMwZDgzODguLmQxYmMwOWUgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYwpAQCAtMzQ2Miw3ICszNDYyLDcgQEAKIAkvKiBUaGlzIGlzbid0IGEgdmFsaWQgY2hhcmFjdGVyLiAgKi8KIAlyZXR1cm4gUkVHX0VDT0xMQVRFOwogCi0gICAgICAvKiBCdWlsZCBzaW5nbGUgYnl0ZSBtYXRjaW5nIHRhYmxlIGZvciB0aGlzIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KKyAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNoaW5nIHRhYmxlIGZvciB0aGlzIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KICAgICAgIGNoYXJfYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICdcMCc7CiAgICAgICBsZW4gPSB3ZWlnaHRzW2lkeDEgJiAweGZmZmZmZl07CiAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyArK2NoKQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmggYi9jb21wYXQvcmVnZXgvcmVnZXguaAppbmRleCA0ZDgxMzU4Li4wOGEyNjA5IDEwMDY0NAotLS0gYS9jb21wYXQvcmVnZXgvcmVnZXguaAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXguaApAQCAtMzIyLDcgKzMyMiw3IEBACiAgIC8qIFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhlCiAgICAgIHN0YW5kYXJkLikgICovCiAgIFJFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLwotICBSRUdfRUNPTExBVEUsCQkvKiBJbmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBSRUdfRUNPTExBVEUsCQkvKiBJbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KICAgUkVHX0VDVFlQRSwJCS8qIEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAqLwogICBSRUdfRUVTQ0FQRSwJCS8qIFRyYWlsaW5nIGJhY2tzbGFzaC4gICovCiAgIFJFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gICovCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCmluZGV4IDU5YmYxNTEuLmVjNTFjZjMgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCkBAIC0xNjE2LDcgKzE2MTYsNyBAQAogICByZV9mcmVlIChzdGF0ZSk7CiB9CiAKLS8qIENyZWF0ZSB0aGUgbmV3IHN0YXRlIHdoaWNoIGlzIGluZGVwZW5kIG9mIGNvbnRleHRzLgorLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgY29udGV4dHMuCiAgICBSZXR1cm4gdGhlIG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCiAKIHN0YXRpYyByZV9kZmFzdGF0ZV90ICoKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCmluZGV4IDFiNWQ4OWYuLjQ5MzU4YWUgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYwpAQCAtMjQyMCw3ICsyNDIwLDcgQEAKIC8qIEZyb20gdGhlIG5vZGUgc2V0IENVUl9OT0RFUywgcGljayB1cCB0aGUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCiAgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hpY2ggaGF2ZSBjb3JyZXNwb25kaW5nIGJhY2sgcmVmZXJlbmNlcyBpbiB0aGUgcmVndWxhcgogICAgZXhwcmVzc2lvbi4gQW5kIHJlZ2lzdGVyIHRoZW0gdG8gdXNlIHRoZW0gbGF0ZXIgZm9yIGV2YWx1YXRpbmcgdGhlCi0gICBjb3JyZXNwb2RpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KIAogc3RhdGljIHJlZ19lcnJjb2RlX3QKIGludGVybmFsX2Z1bmN0aW9uCkBAIC0zMzQ3LDcgKzMzNDcsNyBAQAogICBkZXN0c19ub2RlID0gZGVzdHNfYWxsb2MtPmRlc3RzX25vZGU7CiAgIGRlc3RzX2NoID0gZGVzdHNfYWxsb2MtPmRlc3RzX2NoOwogCi0gIC8qIEluaXRpYWxpemUgdHJhbnNpdG9uIHRhYmxlLiAgKi8KKyAgLyogSW5pdGlhbGl6ZSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KICAgc3RhdGUtPndvcmRfdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlID0gTlVMTDsKIAogICAvKiBBdCBmaXJzdCwgZ3JvdXAgYWxsIG5vZGVzIGJlbG9uZ2luZyB0byBgc3RhdGUnIGludG8gc2V2ZXJhbApkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0IGIvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CmluZGV4IDQwMTk0ZGQuLmIzNWQyNjQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC92Y2J1aWxkL2ZpbmRfdnNfZW52LmJhdAorKysgYi9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKQEAgLTE4LDcgKzE4LDcgQEAKIFJFTSBhdHRlbXB0cyB0byBkbyB0aGF0LgogUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFJFTSBUaGlzIEJBVCBmaWxlIHN0YXJ0cyBpbiBhIHBsYWluIChub24tZGV2ZWxvcGVyKSBjb21tYW5kIHByb21wdCwKLVJFTSBzZWFyY2hlcyBmb3IgdGhlICJiZXN0IiBjb21tbWFuZCBwcm9tcHQgc2V0dXAgc2NyaXB0LCBpbnN0YWxscworUkVNIHNlYXJjaGVzIGZvciB0aGUgImJlc3QiIGNvbW1hbmQgcHJvbXB0IHNldHVwIHNjcmlwdCwgaW5zdGFsbHMKIFJFTSBpdCBpbnRvIHRoZSBjdXJyZW50IENNRCBwcm9jZXNzLCBhbmQgZXhwb3J0cyB0aGUgdmFyaW91cyBNU1ZDCiBSRU0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB1c2UgYnkgTUFLRS4KIFJFTQpkaWZmIC0tZ2l0IGEvY29uZmlnLmggYi9jb25maWcuaAppbmRleCBmMGVkNDY0Li45MWZkNGM1IDEwMDY0NAotLS0gYS9jb25maWcuaAorKysgYi9jb25maWcuaApAQCAtNCw2ICs0LDIyIEBACiAjaW5jbHVkZSAiaGFzaG1hcC5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAKKworLyoqCisgKiBUaGUgY29uZmlnIEFQSSBnaXZlcyBjYWxsZXJzIGEgd2F5IHRvIGFjY2VzcyBHaXQgY29uZmlndXJhdGlvbiBmaWxlcworICogKGFuZCBmaWxlcyB3aGljaCBoYXZlIHRoZSBzYW1lIHN5bnRheCkuCisgKgorICogR2VuZXJhbCBVc2FnZQorICogLS0tLS0tLS0tLS0tLQorICoKKyAqIENvbmZpZyBmaWxlcyBhcmUgcGFyc2VkIGxpbmVhcmx5LCBhbmQgZWFjaCB2YXJpYWJsZSBmb3VuZCBpcyBwYXNzZWQgdG8gYQorICogY2FsbGVyLXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUKKyAqIGZvciBhbnkgYWN0aW9ucyB0byBiZSB0YWtlbiBvbiB0aGUgY29uZmlnIG9wdGlvbiwgYW5kIGlzIGZyZWUgdG8gaWdub3JlCisgKiBzb21lIG9wdGlvbnMuIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcGFyc2VkCisgKiBzZXZlcmFsIHRpbWVzIGR1cmluZyB0aGUgcnVuIG9mIGEgR2l0IHByb2dyYW0sIHdpdGggZGlmZmVyZW50IGNhbGxiYWNrcworICogcGlja2luZyBvdXQgZGlmZmVyZW50IHZhcmlhYmxlcyB1c2VmdWwgdG8gdGhlbXNlbHZlcy4KKyAqLworCiBzdHJ1Y3Qgb2JqZWN0X2lkOwogCiAvKiBnaXRfY29uZmlnX3BhcnNlX2tleSgpIHJldHVybnMgdGhlc2UgbmVnYXRlZDogKi8KQEAgLTcxLDkgKzg3LDM0IEBACiAJfSBlcnJvcl9hY3Rpb247CiB9OwogCisvKioKKyAqIEEgY29uZmlnIGNhbGxiYWNrIGZ1bmN0aW9uIHRha2VzIHRocmVlIHBhcmFtZXRlcnM6CisgKgorICogLSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIHZhcmlhYmxlLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlCisgKiAgIHNlY3Rpb24sIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLAorICogICBhbmQgdGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4gRS5nLiwKKyAqICAgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KKyAqCisgKiAtIHRoZSB2YWx1ZSBvZiB0aGUgZm91bmQgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB0aGUgdmFyaWFibGUgaGFkIG5vCisgKiAgIHZhbHVlIHNwZWNpZmllZCwgdGhlIHZhbHVlIHdpbGwgYmUgTlVMTCAodHlwaWNhbGx5IHRoaXMgbWVhbnMgaXQKKyAqICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJvb2xlYW4gdHJ1ZSkuCisgKgorICogLSBhIHZvaWQgcG9pbnRlciBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvZiB0aGUgY29uZmlnIEFQSTsgdGhpcyBjYW4KKyAqICAgY29udGFpbiBjYWxsYmFjay1zcGVjaWZpYyBkYXRhCisgKgorICogQSBjb25maWcgY2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIGZvciBzdWNjZXNzLCBvciAtMSBpZiB0aGUgdmFyaWFibGUKKyAqIGNvdWxkIG5vdCBiZSBwYXJzZWQgcHJvcGVybHkuCisgKi8KIHR5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCiBpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCisvKioKKyAqIFJlYWQgYSBzcGVjaWZpYyBmaWxlIGluIGdpdC1jb25maWcgZm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgc2FtZSBjYWxsYmFjayBhbmQgZGF0YSBwYXJhbWV0ZXJzIGFzIGBnaXRfY29uZmlnYC4KKyAqLwogaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKIGludCBnaXRfY29uZmlnX2Zyb21fZmlsZV93aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwKIAkJCQkgICAgICB2b2lkICosCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICopOwpAQCAtODgsMzQgKzEyOSwxNTcgQEAKIGludCBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSk7CiB2b2lkIHJlYWRfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKTsKIHZvaWQgcmVhZF92ZXJ5X2Vhcmx5X2NvbmZpZyhjb25maWdfZm5fdCBjYiwgdm9pZCAqZGF0YSk7CisKKy8qKgorICogTW9zdCBwcm9ncmFtcyB3aWxsIHNpbXBseSB3YW50IHRvIGxvb2sgdXAgdmFyaWFibGVzIGluIGFsbCBjb25maWcgZmlsZXMKKyAqIHRoYXQgR2l0IGtub3dzIGFib3V0LCB1c2luZyB0aGUgbm9ybWFsIHByZWNlZGVuY2UgcnVsZXMuIFRvIGRvIHRoaXMsCisgKiBjYWxsIGBnaXRfY29uZmlnYCB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHZvaWQgZGF0YSBwb2ludGVyLgorICoKKyAqIGBnaXRfY29uZmlnYCB3aWxsIHJlYWQgYWxsIGNvbmZpZyBzb3VyY2VzIGluIG9yZGVyIG9mIGluY3JlYXNpbmcKKyAqIHByaW9yaXR5LiBUaHVzIGEgY2FsbGJhY2sgc2hvdWxkIHR5cGljYWxseSBvdmVyd3JpdGUgcHJldmlvdXNseS1zZWVuCisgKiBlbnRyaWVzIHdpdGggbmV3IG9uZXMgKGUuZy4sIGlmIGJvdGggdGhlIHVzZXItd2lkZSBgfi8uZ2l0Y29uZmlnYCBhbmQKKyAqIHJlcG8tc3BlY2lmaWMgYC5naXQvY29uZmlnYCBjb250YWluIGBjb2xvci51aWAsIHRoZSBjb25maWcgbWFjaGluZXJ5CisgKiB3aWxsIGZpcnN0IGZlZWQgdGhlIHVzZXItd2lkZSBvbmUgdG8gdGhlIGNhbGxiYWNrLCBhbmQgdGhlbiB0aGUKKyAqIHJlcG8tc3BlY2lmaWMgb25lOyBieSBvdmVyd3JpdGluZywgdGhlIGhpZ2hlci1wcmlvcml0eSByZXBvLXNwZWNpZmljCisgKiB2YWx1ZSBpcyBsZWZ0IGF0IHRoZSBlbmQpLgorICovCiB2b2lkIGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKik7CisKKy8qKgorICogTGV0cyB0aGUgY2FsbGVyIGV4YW1pbmUgY29uZmlnIHdoaWxlIGFkanVzdGluZyBzb21lIG9mIHRoZSBkZWZhdWx0CisgKiBiZWhhdmlvciBvZiBgZ2l0X2NvbmZpZ2AuIEl0IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgdXNlZCBieSAicmVndWxhciIKKyAqIEdpdCBjb2RlIHRoYXQgaXMgbG9va2luZyB1cCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAqIEl0IGlzIGludGVuZGVkIGZvciBhZHZhbmNlZCBjYWxsZXJzIGxpa2UgYGdpdC1jb25maWdgLCB3aGljaCBhcmUKKyAqIGludGVudGlvbmFsbHkgdHdlYWtpbmcgdGhlIG5vcm1hbCBjb25maWctbG9va3VwIHByb2Nlc3MuCisgKiBJdCB0YWtlcyB0d28gZXh0cmEgcGFyYW1ldGVyczoKKyAqCisgKiAtIGBjb25maWdfc291cmNlYAorICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwsIGl0IHNwZWNpZmllcyB0aGUgc291cmNlIHRvIHBhcnNlIGZvcgorICogY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gbG9va2luZyBpbiB0aGUgdXN1YWwgZmlsZXMuIFNlZSBgc3RydWN0CisgKiBnaXRfY29uZmlnX3NvdXJjZWAgaW4gYGNvbmZpZy5oYCBmb3IgZGV0YWlscy4gUmVndWxhciBgZ2l0X2NvbmZpZ2AgZGVmYXVsdHMKKyAqIHRvIGBOVUxMYC4KKyAqCisgKiAtIGBvcHRzYAorICogU3BlY2lmeSBvcHRpb25zIHRvIGFkanVzdCB0aGUgYmVoYXZpb3Igb2YgcGFyc2luZyBjb25maWcgZmlsZXMuIFNlZSBgc3RydWN0CisgKiBjb25maWdfb3B0aW9uc2AgaW4gYGNvbmZpZy5oYCBmb3IgZGV0YWlscy4gQXMgYW4gZXhhbXBsZTogcmVndWxhciBgZ2l0X2NvbmZpZ2AKKyAqIHNldHMgYG9wdHMucmVzcGVjdF9pbmNsdWRlc2AgdG8gYDFgIGJ5IGRlZmF1bHQuCisgKi8KIGludCBjb25maWdfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCB2b2lkICosCiAJCQlzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgKmNvbmZpZ19zb3VyY2UsCiAJCQljb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMpOworCisvKioKKyAqIFZhbHVlIFBhcnNpbmcgSGVscGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIGFpZCBpbiBwYXJzaW5nIHN0cmluZyB2YWx1ZXMKKyAqLworCiBpbnQgZ2l0X3BhcnNlX3NzaXplX3QoY29uc3QgY2hhciAqLCBzc2l6ZV90ICopOwogaW50IGdpdF9wYXJzZV91bG9uZyhjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qKgorICogU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvciByYXRoZXIKKyAqIHRoYW4gZHlpbmcuCisgKi8KIGludCBnaXRfcGFyc2VfbWF5YmVfYm9vbChjb25zdCBjaGFyICopOworCisvKioKKyAqIFBhcnNlIHRoZSBzdHJpbmcgdG8gYW4gaW50ZWdlciwgaW5jbHVkaW5nIHVuaXQgZmFjdG9ycy4gRGllcyBvbiBlcnJvcjsKKyAqIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC4KKyAqLwogaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogaW50NjRfdCBnaXRfY29uZmlnX2ludDY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBJZGVudGljYWwgdG8gYGdpdF9jb25maWdfaW50YCwgYnV0IGZvciB1bnNpZ25lZCBsb25ncy4KKyAqLwogdW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogc3NpemVfdCBnaXRfY29uZmlnX3NzaXplX3QoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIFNhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSByZXR1cm5lZCBhcy1pcywgYW5kCisgKiBhbiBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KKyAqLwogaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKKworLyoqCisgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgcmVzcGVjdGluZyBrZXl3b3JkcyBsaWtlICJ0cnVlIiBhbmQKKyAqICJmYWxzZSIuIEludGVnZXIgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgaW50byB0cnVlL2ZhbHNlIHZhbHVlcyAod2hlbiB0aGV5CisgKiBhcmUgbm9uLXplcm8gb3IgemVybywgcmVzcGVjdGl2ZWx5KS4gT3RoZXIgdmFsdWVzIGNhdXNlIGEgZGllKCkuIElmCisgKiBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJlc3VsdC4KKyAqLwogaW50IGdpdF9jb25maWdfYm9vbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogQWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIHZhbHVlIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyOyBpZiBubworICogc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4KKyAqLwogaW50IGdpdF9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8gdGhlCisgKiB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorICovCiBpbnQgZ2l0X2NvbmZpZ19wYXRobmFtZShjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX2V4cGlyeV9kYXRlKHRpbWVzdGFtcF90ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGludCBnaXRfY29uZmlnX2NvbG9yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIHdyaXRlIGNvbmZpZyB2YWx1ZXMgdG8gYSBzcGVjaWZpYyBjb25maWcgZmlsZSwgdGFrZXMgYSBrZXkvdmFsdWUgcGFpciBhcworICogcGFyYW1ldGVyLgorICovCiB2b2lkIGdpdF9jb25maWdfc2V0X2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX3NldF9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIHdyaXRlIGNvbmZpZyB2YWx1ZXMgdG8gYC5naXQvY29uZmlnYCwgdGFrZXMgYSBrZXkvdmFsdWUgcGFpciBhcyBwYXJhbWV0ZXIuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ19zZXQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCiBpbnQgZ2l0X2NvbmZpZ19wYXJzZV9rZXkoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQgKik7CiBpbnQgZ2l0X2NvbmZpZ19rZXlfaXNfdmFsaWQoY29uc3QgY2hhciAqa2V5KTsKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIHZvaWQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKKy8qKgorICogdGFrZXMgZm91ciBwYXJhbWV0ZXJzOgorICoKKyAqIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGFzIGEgc3RyaW5nLCB0byB3aGljaCBrZXkvdmFsdWUgcGFpcnMgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIC0gdGhlIG5hbWUgb2Yga2V5LCBhcyBhIHN0cmluZy4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZSBzZWN0aW9uLAorICogICBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywgYW5kIHRoZSBzZWN0aW9uCisgKiAgIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuCisgKiAgIEUuZy4sIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCisgKgorICogLSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdmFsdWUgaXMgZXF1YWwgdG8gTlVMTCwgaXQgd2lsbAorICogICByZW1vdmUgdGhlIG1hdGNoaW5nIGtleSBmcm9tIHRoZSBjb25maWcgZmlsZS4KKyAqCisgKiAtIHRoZSB2YWx1ZSByZWdleCwgYXMgYSBzdHJpbmcuIEl0IHdpbGwgZGlzcmVnYXJkIGtleS92YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZQorICogICBkb2VzIG5vdCBtYXRjaC4KKyAqCisgKiAtIGEgbXVsdGlfcmVwbGFjZSB2YWx1ZSwgYXMgYW4gaW50LiBJZiB2YWx1ZSBpcyBlcXVhbCB0byB6ZXJvLCBub3RoaW5nIG9yIG9ubHkKKyAqICAgb25lIG1hdGNoaW5nIGtleS92YWx1ZSBpcyByZXBsYWNlZCwgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcworICogICBob3cgbWFueSkgYXJlIHJlbW92ZWQsIGJlZm9yZSB0aGUgbmV3IHBhaXIgaXMgd3JpdHRlbi4KKyAqCisgKiBJdCByZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLwogdm9pZCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoqCisgKiByZW5hbWUgb3IgcmVtb3ZlIHNlY3Rpb25zIGluIHRoZSBjb25maWcgZmlsZQorICogcGFyYW1ldGVycyBgb2xkX25hbWVgIGFuZCBgbmV3X25hbWVgCisgKiBJZiBOVUxMIGlzIHBhc3NlZCB0aHJvdWdoIGBuZXdfbmFtZWAgcGFyYW1ldGVyLAorICogdGhlIHNlY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlLgorICovCiBpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgZ2l0X2NvbmZpZ19jb3B5X3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IGdpdF9jb25maWdfY29weV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xNDIsNiArMzA2LDMwIEBACiBjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19vcmlnaW5fdHlwZSh2b2lkKTsKIGNvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX25hbWUodm9pZCk7CiAKKy8qKgorICogSW5jbHVkZSBEaXJlY3RpdmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KKyAqIEhvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgorICogY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKKyAqIHRoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IHJlYWRfZmlsZV93aXRoX2luY2x1ZGUoY29uc3QgY2hhciAqZmlsZSwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCisgKiB7CisgKiBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworICogaW5jLmZuID0gZm47CisgKiBpbmMuZGF0YSA9IGRhdGE7CisgKiByZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZ2l0X2NvbmZpZ19pbmNsdWRlLCBmaWxlLCAmaW5jKTsKKyAqIH0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBgZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCisgKiBgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgorICoKKyAqLwogc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgewogCWludCBkZXB0aDsKIAljb25maWdfZm5fdCBmbjsKQEAgLTE2OSw2ICszNTcsMzMgQEAKIAkJICAgICBjb25zdCBjaGFyICoqc3Vic2VjdGlvbiwgaW50ICpzdWJzZWN0aW9uX2xlbiwKIAkJICAgICBjb25zdCBjaGFyICoqa2V5KTsKIAorLyoqCisgKiBDdXN0b20gQ29uZmlnc2V0cworICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBBIGBjb25maWdfc2V0YCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYW4gaW4tbWVtb3J5IGNhY2hlIGZvcgorICogY29uZmlnLWxpa2UgZmlsZXMgdGhhdCB0aGUgY2FsbGVyIHNwZWNpZmllcyAoaS5lLiwgZmlsZXMgbGlrZSBgLmdpdG1vZHVsZXNgLAorICogYH4vLmdpdGNvbmZpZ2AgZXRjLikuIEZvciBleGFtcGxlLAorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHN0cnVjdCBjb25maWdfc2V0IGdtX2NvbmZpZzsKKyAqIGdpdF9jb25maWdzZXRfaW5pdCgmZ21fY29uZmlnKTsKKyAqIGludCBiOworICogLy93ZSBhZGQgY29uZmlnIGZpbGVzIHRvIHRoZSBjb25maWdfc2V0CisgKiBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlcyIpOworICogZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXNfYWx0Iik7CisgKgorICogaWYgKCFnaXRfY29uZmlnc2V0X2dldF9ib29sKGdtX2NvbmZpZywgInN1Ym1vZHVsZS5mcm90ei5pZ25vcmUiLCAmYikpIHsKKyAqIC8vaGFjayBoYWNrIGhhY2sKKyAqIH0KKyAqCisgKiB3aGVuIHdlIGFyZSBkb25lIHdpdGggdGhlIGNvbmZpZ3NldDoKKyAqIGdpdF9jb25maWdzZXRfY2xlYXIoJmdtX2NvbmZpZyk7CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ29uZmlnc2V0IEFQSSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBhYm92ZSBtZW50aW9uZWQgd29yayBmbG93CisgKi8KKwogc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCB7CiAJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OwogCWNoYXIgKmtleTsKQEAgLTE5NywxNiArNDEyLDQ3IEBACiAJc3RydWN0IGNvbmZpZ3NldF9saXN0IGxpc3Q7CiB9OwogCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBjb25maWdfc2V0IGBjc2AuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ3NldF9pbml0KHN0cnVjdCBjb25maWdfc2V0ICpjcyk7CisKKy8qKgorICogUGFyc2VzIHRoZSBmaWxlIGFuZCBhZGRzIHRoZSB2YXJpYWJsZS12YWx1ZSBwYWlycyB0byB0aGUgYGNvbmZpZ19zZXRgLAorICogZGllcyBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBwYXJzaW5nIHRoZSBmaWxlLiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IKKyAqIC0xIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGluYWNjZXNzaWJsZS4gVGhlIHVzZXIgaGFzIHRvIGRlY2lkZQorICogaWYgaGUgd2FudHMgdG8gZnJlZSB0aGUgaW5jb21wbGV0ZSBjb25maWdzZXQgb3IgY29udGludWUgdXNpbmcgaXQgd2hlbgorICogdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEuCisgKi8KIGludCBnaXRfY29uZmlnc2V0X2FkZF9maWxlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisvKioKKyAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBsaXN0LCBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBwcmlvcml0eQorICogZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGFuZCBjb25maWcgc2V0IGBjc2AuIFdoZW4gdGhlCisgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyCisgKiBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpOworCisvKioKKyAqIENsZWFycyBgY29uZmlnX3NldGAgc3RydWN0dXJlLCByZW1vdmVzIGFsbCBzYXZlZCB2YXJpYWJsZS12YWx1ZSBwYWlycy4KKyAqLwogdm9pZCBnaXRfY29uZmlnc2V0X2NsZWFyKHN0cnVjdCBjb25maWdfc2V0ICpjcyk7CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIDEgaWYgbm90IGZvdW5kLCBhbmQgMCBpZiBmb3VuZCwgbGVhdmluZyB0aGUgZm91bmQKICAqIHZhbHVlIGluIHRoZSAnZGVzdCcgcG9pbnRlci4KICAqLworCisvKgorICogRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgCisgKiBhbmQgY29uZmlnIHNldCBgY3NgLCBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLgorICogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0CisgKiB0b3VjaGluZyBgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQKKyAqIGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLwogaW50IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKIGludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmdfY29uc3Qoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKIGludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmcoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KTsKIGludCBnaXRfY29uZmlnc2V0X2dldF9pbnQoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CkBAIC0yNDAsMTcgKzQ4Niw5NCBAQAogaW50IHJlcG9fY29uZmlnX2dldF9wYXRobmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKIAkJCSAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CiAKKy8qKgorICogUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZvciBwcm9ncmFtcyB3YW50aW5nIHRvIHF1ZXJ5IGZvciBzcGVjaWZpYyB2YXJpYWJsZXMgaW4gYSBub24tY2FsbGJhY2sKKyAqIG1hbm5lciwgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVgCisgKiBhbmQgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpYC4gVGhleSBib3RoIHJlYWQgdmFsdWVzIGZyb20gYW4gaW50ZXJuYWwKKyAqIGNhY2hlIGdlbmVyYXRlZCBwcmV2aW91c2x5IGZyb20gcmVhZGluZyB0aGUgY29uZmlnIGZpbGVzLgorICovCisKKy8qKgorICogRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLAorICogc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0IGlzIG93bmVkCisgKiBieSB0aGUgY2FjaGUuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSk7CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5CisgKiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAqIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkKKyAqIHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KTsKKworLyoqCisgKiBSZXNldHMgYW5kIGludmFsaWRhdGVzIHRoZSBjb25maWcgY2FjaGUuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ19jbGVhcih2b2lkKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgcmV0cmlldmVkIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGZvcgorICogdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWA7IGlmIE5VTEwgc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4KKyAqIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMKKyAqIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdGAsIGV4Y2VwdCB0aGF0IHJldHJpZXZlZCB2YWx1ZQorICogY29waWVkIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIHN0cmluZy4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSB0byBhbiBpbnRlZ2VyIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICogYGtleWAuIERpZXMgb24gZXJyb3I7IG90aGVyd2lzZSwgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIgaW4KKyAqIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwKKyAqIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nIGBkZXN0YC4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfaW50YCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfdWxvbmcoY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgZm9yIHRoZSBjb25maWd1cmF0aW9uCisgKiB2YXJpYWJsZSBga2V5YCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZCAiZmFsc2UiLiBJbnRlZ2VyCisgKiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkgYXJlIG5vbi16ZXJvIG9yCisgKiB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAorICogc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIHJlc3VsdCBpbiBgZGVzdGAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYGRlc3RgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSBjb3BpZWQgYXMtaXMsCisgKiBhbmQgYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvcgorICogcmF0aGVyIHRoYW4gZHlpbmcuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9zdHJpbmdgLCBidXQgZXhwYW5kcyBgfmAgb3IgYH51c2VyYCBpbnRvCisgKiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHdoZW4gZm91bmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aC4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCiBpbnQgZ2l0X2NvbmZpZ19nZXRfaW5kZXhfdGhyZWFkcyhpbnQgKmRlc3QpOwogaW50IGdpdF9jb25maWdfZ2V0X3VudHJhY2tlZF9jYWNoZSh2b2lkKTsKIGludCBnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCh2b2lkKTsKQEAgLTI3MCw3ICs1OTMsMTkgQEAKIAllbnVtIGNvbmZpZ19zY29wZSBzY29wZTsKIH07CiAKKy8qKgorICogRmlyc3QgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIGluIGBlcnJgIGFuZCB0aGVuCisgKiBkaWVzIHByaW50aW5nIHRoZSBsaW5lIG51bWJlciBhbmQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQorICogdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLgorICovCiBOT1JFVFVSTiB2b2lkIGdpdF9kaWVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CisKKy8qKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGZvcm1hdHMgdGhlIGRpZSBlcnJvciBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUKKyAqIHBhcmFtZXRlcnMgZW50ZXJlZC4gVXNlZCBieSBgZ2l0X2RpZV9jb25maWcoKWAuIEl0IGNhbiBiZSB1c2VkIGJ5IGNhbGxlcnMKKyAqIGhhbmRsaW5nIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgpYCB0byBwcmludCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlCisgKiBmb3IgdGhlIGRlc2lyZWQgdmFsdWUuCisgKi8KIE5PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpOwogCiAjZGVmaW5lIExPT0tVUF9DT05GSUcobWFwcGluZywgdmFyKSBcCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggYTQzYjQ3Ni4uNjZhZWRiOSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtODUsNyArODUsNyBAQAogCiAjIEdJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihXSVRITkFNRSwgVkFSLCBIRUxQX1RFWFQpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBWQVIgdG8gdGhlIHZhbHVlIHNwZWNpZWQgYnkgLS13aXRoLVdJVEhOQU1FLgorIyBTZXQgVkFSIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgLS13aXRoLVdJVEhOQU1FLgogIyBObyB2ZXJpZmljYXRpb24gb2YgYXJndW1lbnRzIGlzIHBlcmZvcm1lZCwgYnV0IHdhcm5pbmdzIGFyZSBpc3N1ZWQKICMgaWYgZWl0aGVyICd5ZXMnIG9yICdubycgaXMgc3BlY2lmaWVkLgogIyBIRUxQX1RFWFQgaXMgcHJlc2VudGVkIHdoZW4gLS1oZWxwIGlzIGNhbGxlZC4KQEAgLTg0NCwxMiArODQ0LDYxIEBACiBBQ19DT01QSUxFX0lGRUxTRShbT0xESUNPTlZURVNUX1NSQ10sCiAJW0FDX01TR19SRVNVTFQoW25vXSldLAogCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCUFDX0RFRklORShIQVZFX09MRF9JQ09OViwgMSkKIAlPTERfSUNPTlY9VW5mb3J0dW5hdGVseVllc10pCiAKIEdJVF9VTlNUQVNIX0ZMQUdTKCRJQ09OVkRJUikKIAogR0lUX0NPTkZfU1VCU1QoW09MRF9JQ09OVl0pCiAKKyMKKyMgRGVmaW5lIElDT05WX09NSVRTX0JPTSBpZiB5b3UgYXJlIG9uIGEgc3lzdGVtIHdoaWNoCisjIGljb252IG9taXRzIGJvbSBmb3IgdXRmLXsxNiwzMn0KK2lmIHRlc3QgLXogIiROT19JQ09OViI7IHRoZW4KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGljb252IG9taXRzIGJvbSBmb3IgdXRmLTE2IGFuZCB1dGYtMzJdLAorIFthY19jdl9pY29udl9vbWl0c19ib21dLAorWworb2xkX0xJQlM9IiRMSUJTIgoraWYgdGVzdCAtbiAiJE5FRURTX0xJQklDT05WIjsgdGhlbgorCUxJQlM9IiRMSUJTIC1saWNvbnYiCitmaQorCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkjaW5jbHVkZSA8aWNvbnYuaD4KKwkjaWZkZWYgSEFWRV9PTERfSUNPTlYKKwl0eXBlZGVmIGNvbnN0IGNoYXIgKmljb252X2licDsKKwkjZWxzZQorCXR5cGVkZWYgY2hhciAqaWNvbnZfaWJwOworCSNlbmRpZgorCV0sCisJW1sKKwlpbnQgdjsKKwlpY29udl90IGNvbnY7CisJY2hhciBpbltdID0gImEiOyBpY29udl9pYnAgcGluID0gaW47CisJY2hhciBvdXRbMjBdID0gIiI7IGNoYXIgKnBvdXQgPSBvdXQ7CisJc2l6ZV90IGlzeiA9IHNpemVvZiBpbjsKKwlzaXplX3Qgb3N6ID0gc2l6ZW9mIG91dDsKKworCWNvbnYgPSBpY29udl9vcGVuKCJVVEYtMTYiLCAiVVRGLTgiKTsKKwlpY29udihjb252LCAmcGluLCAmaXN6LCAmcG91dCwgJm9zeik7CisJaWNvbnZfY2xvc2UoY29udik7CisJdiA9ICh1bnNpZ25lZCBjaGFyKShvdXRbMF0pICsgKHVuc2lnbmVkIGNoYXIpKG91dFsxXSk7CisJcmV0dXJuIHYgIT0gMHhmZSArIDB4ZmY7CisJXV0pXSwKKwlbYWNfY3ZfaWNvbnZfb21pdHNfYm9tPW5vXSwKKwlbYWNfY3ZfaWNvbnZfb21pdHNfYm9tPXllc10pCisKK0xJQlM9IiRvbGRfTElCUyIKK10pCitpZiB0ZXN0ICJ4JGFjX2N2X2ljb252X29taXRzX2JvbSIgPSB4eWVzOyB0aGVuCisJSUNPTlZfT01JVFNfQk9NPVllcworZWxzZQorCUlDT05WX09NSVRTX0JPTT0KK2ZpCitHSVRfQ09ORl9TVUJTVChbSUNPTlZfT01JVFNfQk9NXSkKK2ZpCisKICMjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCiBBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzXSkKICMKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKaW5kZXggMzZjNGU1ZC4uYzMzN2Y1ZiAxMDA2NDQKLS0tIGEvY29ubmVjdGVkLmMKKysrIGIvY29ubmVjdGVkLmMKQEAgLTYyLDcgKzYyLDggQEAKIAkJICogcmVjZWl2ZWQgdGhlIG9iamVjdHMgcG9pbnRlZCB0byBieSBlYWNoIHdhbnRlZCByZWYuCiAJCSAqLwogCQlkbyB7Ci0JCQlpZiAoIXJlcG9faGFzX29iamVjdF9maWxlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKSkKKwkJCWlmICghcmVwb19oYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwKKwkJCQkJCQkgICAgIE9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUKSkKIAkJCQlyZXR1cm4gMTsKIAkJfSB3aGlsZSAoIWZuKGNiX2RhdGEsICZvaWQpKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvY29tbWl0LmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaQppbmRleCBkMDM0NTMzLi43NzhlNDcwIDEwMDY0NAotLS0gYS9jb250cmliL2NvY2NpbmVsbGUvY29tbWl0LmNvY2NpCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kKQEAgLTIwLDcgKzIwLDcgQEAKICsgc2V0X2NvbW1pdF90cmVlKGMsIHMpCiAgIC4uLj59CiAKLS8vIFRoZXNlIGV4Y2x1ZGVkIGZ1bmN0aW9ucyBtdXN0IGFjY2VzcyBjLT5tYXliZV90cmVlIGRpcmVjbHkuCisvLyBUaGVzZSBleGNsdWRlZCBmdW5jdGlvbnMgbXVzdCBhY2Nlc3MgYy0+bWF5YmVfdHJlZSBkaXJlY3RseS4KIC8vIE5vdGUgdGhhdCBpZiBjLT5tYXliZV90cmVlIGlzIHdyaXR0ZW4gc29tZXdoZXJlIG91dHNpZGUgb2YgdGhlc2UKIC8vIGZ1bmN0aW9ucywgdGhlbiB0aGUgcmVjb21tZW5kZWQgdHJhbnNmb3JtYXRpb24gd2lsbCBiZSBib2d1cyB3aXRoCiAvLyByZXBvX2dldF9jb21taXRfdHJlZSgpIG9uIHRoZSBMSFMuCmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQppbmRleCAzZTUzNmE5Li5kZGY0ZjIyIDEwMDY0NAotLS0gYS9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9vYmplY3RfaWQuY29jY2kKQEAgLTEzLDM4ICsxMyw2IEBACiBAQAogc3RydWN0IG9iamVjdF9pZCBPSUQ7CiBAQAotLSBzaGExX3RvX2hleChPSUQuaGFzaCkKLSsgb2lkX3RvX2hleCgmT0lEKQotCi1AQAotaWRlbnRpZmllciBmICE9IG9pZF90b19oZXg7Ci1zdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFI7Ci1AQAotICBmKC4uLikgezwuLi4KLS0gc2hhMV90b19oZXgoT0lEUFRSLT5oYXNoKQotKyBvaWRfdG9faGV4KE9JRFBUUikKLSAgLi4uPn0KLQotQEAKLWV4cHJlc3Npb24gRTsKLXN0cnVjdCBvYmplY3RfaWQgT0lEOwotQEAKLS0gc2hhMV90b19oZXhfcihFLCBPSUQuaGFzaCkKLSsgb2lkX3RvX2hleF9yKEUsICZPSUQpCi0KLUBACi1pZGVudGlmaWVyIGYgIT0gb2lkX3RvX2hleF9yOwotZXhwcmVzc2lvbiBFOwotc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSOwotQEAKLSAgIGYoLi4uKSB7PC4uLgotLSBzaGExX3RvX2hleF9yKEUsIE9JRFBUUi0+aGFzaCkKLSsgb2lkX3RvX2hleF9yKEUsIE9JRFBUUikKLSAgLi4uPn0KLQotQEAKLXN0cnVjdCBvYmplY3RfaWQgT0lEOwotQEAKIC0gaGFzaGNscihPSUQuaGFzaCkKICsgb2lkY2xyKCZPSUQpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggMDBmYmU2Yy4uNjc3MDVkYSAxMDA2NDQKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTU1MCw3ICs1NTAsNyBAQAogCQkJCQkJIGVzY19pZHgsIDEpCiAJCQl9IGVsc2UgaWYgKGVzYyA9PSAibiIpIHsKIAkJCQkjIFVoLW9oLCBhIG5ld2xpbmUgY2hhcmFjdGVyLgotCQkJCSMgV2UgY2FudCByZWxpYWJseSBwdXQgYSBwYXRobmFtZQorCQkJCSMgV2UgY2Fubm90IHJlbGlhYmx5IHB1dCBhIHBhdGhuYW1lCiAJCQkJIyBjb250YWluaW5nIGEgbmV3bGluZSBpbnRvIENPTVBSRVBMWSwKIAkJCQkjIGFuZCB0aGUgbmV3bGluZSB3b3VsZCBjcmVhdGUgYSBtZXNzLgogCQkJCSMgU2tpcCB0aGlzIHBhdGguCkBAIC01NjUsNyArNTY1LDcgQEAKIAkJCX0KIAkJfQogCQkjIERyb3AgY2xvc2luZyBkb3VibGUgcXVvdGUsIGlmIHRoZXJlIGlzIG9uZS4KLQkJIyAoVGhlcmUgaXNudCBhbnkgaWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgYXMgaXQgd2FzCisJCSMgKFRoZXJlIGlzIG5vdCBhbnkgaWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgYXMgaXQgd2FzCiAJCSMgYWxyZWFkeSBzdHJpcHBlZCB3aXRoIHRoZSB0cmFpbGluZyBwYXRoIGNvbXBvbmVudHMuKQogCQlpZiAoc3Vic3RyKHAsIGxlbmd0aChwKSwgMSkgPT0gIlwiIikKIAkJCW91dCA9IG91dCBzdWJzdHIocCwgMSwgbGVuZ3RoKHApIC0gMSkKQEAgLTIwNDMsNiArMjA0MywxMCBAQAogCQlfX2dpdGNvbXAgIiRfX2dpdF93aGl0ZXNwYWNlbGlzdCIgIiIgIiR7Y3VyIyMtLXdoaXRlc3BhY2U9fSIKIAkJcmV0dXJuCiAJCTs7CisJLS1vbnRvPSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiR7Y3VyIyMtLW9udG89fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXBfYnVpbHRpbiByZWJhc2UgIiIgXAogCQkJIiRfX2dpdF9yZWJhc2VfaW50ZXJhY3RpdmVfaW5wcm9ncmVzc19vcHRpb25zIgpAQCAtMjg0Myw2ICsyODQ3LDcgQEAKIAkJCS0tbG9nLXdpbmRvdy1zaXplPSAtLW5vLWNoZWNrb3V0IC0tcXVpZXQKIAkJCS0tcmVwYWNrLWZsYWdzIC0tdXNlLWxvZy1hdXRob3IgLS1sb2NhbHRpbWUKIAkJCS0tYWRkLWF1dGhvci1mcm9tCisJCQktLXJlY3Vyc2l2ZQogCQkJLS1pZ25vcmUtcGF0aHM9IC0taW5jbHVkZS1wYXRocz0gJHJlbW90ZV9vcHRzCiAJCQkiCiAJCWxvY2FsIGluaXRfb3B0cz0iCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQppbmRleCA4ODIzMzk5Li5mNTYzYmU4IDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKQEAgLTk1LDcgKzk1LDcgQEAKICAgICB1bmljb2RlID0gc3RyCiAKICAgICBkZWYgd3JpdGVfc3RyKGYsIG1zZyk6Ci0gICAgICAgICMgVHJ5IG91dHB1dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKKyAgICAgICAgIyBUcnkgb3V0cHV0dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKICAgICAgICAgIyB0cnkgVVRGLTguCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpKSkKQEAgLTIxMjksNyArMjEyOSw3IEBACiAgICAgICAgICAgICAgICAgIyBlcXVpdmFsZW50IHRvCiAgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5zbXRwLmVobG8oKQogICAgICAgICAgICAgICAgICMgICAgIHNlbGYuc210cC5zdGFydHRscygpCi0gICAgICAgICAgICAgICAgIyB3aXRoIGFjY2VzIHRvIHRoZSBzc2wgbGF5ZXIKKyAgICAgICAgICAgICAgICAjIHdpdGggYWNjZXNzIHRvIHRoZSBzc2wgbGF5ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZWhsbygpCiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc210cC5oYXNfZXh0bigic3RhcnR0bHMiKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc210cGxpYi5TTVRQRXhjZXB0aW9uKCJTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIiKQpAQCAtMjE0OCw3ICsyMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FCiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBXYXJuaW5nLCB0aGUgc2VydmVyIGNlcnRpZmljYXQgaXMgbm90IHZlcmlmaWVkIChzbXRwKSAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcqKiogV2FybmluZywgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdmVyaWZpZWQgKHNtdHApICoqKlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiAgICAgICAgICBzZXQgdGhlIG9wdGlvbiBzbXRwQ0FDZXJ0cyAgICAgICAgICAgICAgICAgICAqKipcbicKICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNtdHAuc29jaywgInJlYWQiKToKQEAgLTMxODksNyArMzE4OSw3IEBACiAgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyArPSBbJ3Byb2plY3RkZXNjJ10KIAogICAgIGRlZiBnZXRfcHJvamVjdGRlc2Moc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG9uZS1saW5lIGRlc2NyaXBpdGlvbiBvZiB0aGUgcHJvamVjdC4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3QuIiIiCiAKICAgICAgICAgZ2l0X2RpciA9IGdldF9naXRfZGlyKCkKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQppbmRleCBiOWJiMTE4Li4wZjk4YzVhIDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQpAQCAtNTYsNyArNTYsNyBAQAogCiAjIFNldCBzb21lIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gRXF1aXZhbGVudCB0byBwYXNzaW5nIHZhcj12YWwKICMgdG8gImdpdCAtYyB2YXI9dmFsIiBlYWNoIHRpbWUgZ2l0IGlzIGNhbGxlZCwgb3IgdG8gYWRkaW5nIHRoZQotIyBjb25maWd1cmF0aW9uIGluIC5naXQvY29uZmlnIChtdXN0IGNvbWUgYmVmb3JlIGluc3RhbmNpYXRpbmcgdGhlCisjIGNvbmZpZ3VyYXRpb24gaW4gLmdpdC9jb25maWcgKG11c3QgY29tZSBiZWZvcmUgaW5zdGFudGlhdGluZyB0aGUKICMgZW52aXJvbm1lbnQpIDoKICNnaXRfbXVsdGltYWlsLkNvbmZpZy5hZGRfY29uZmlnX3BhcmFtZXRlcnMoJ211bHRpbWFpbGhvb2suY29tbWl0RW1haWxGb3JtYXQ9aHRtbCcpCiAjZ2l0X211bHRpbWFpbC5Db25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKCgndXNlci5uYW1lPWZvbycsICd1c2VyLmVtYWlsPWZvb0BleGFtcGxlLmNvbScpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAppbmRleCA4NzQ3Yjg0Li5mZjU2NWViIDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMzI5LDcgKzMyOSw3IEBACiAJIwogCSMgIGdpdCByZXYtcGFyc2UgLS1ub3QgLS1hbGwgfCBncmVwIC12ICQoZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSkKIAkjCi0JIyBHZXQncyB1cyB0byBzb21ldGhpbmcgcHJldHR5IHNhZmUgKGFwYXJ0IGZyb20gdGhlIHNtYWxsIHRpbWUKKwkjIEdldHMgdXMgdG8gc29tZXRoaW5nIHByZXR0eSBzYWZlIChhcGFydCBmcm9tIHRoZSBzbWFsbCB0aW1lCiAJIyBiZXR3ZWVuIHJlZm5hbWUgYmVpbmcgcmVhZCwgYW5kIGdpdCByZXYtcGFyc2UgcnVubmluZyAtIGZvciB0aGF0LAogCSMgSSBnaXZlIHVwKQogCSMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKaW5kZXggZDE4YjMxNy4uMDA5MmQ2NyAxMDA3NTUKLS0tIGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKKysrIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKQEAgLTQ5LDcgKzQ5LDcgQEAKIFJlcG9zaXRvcnkgc2VjdGlvbnMgYXJlIG1hdGNoZWQgb24gdGhlIGJhc2VuYW1lIG9mIHRoZSByZXBvc2l0b3J5CiAoYWZ0ZXIgcmVtb3ZpbmcgdGhlIC5naXQgc3VmZml4KS4KIAotVGhlIG9wY29kZSBhYmJyZXZhdGlvbnMgYXJlOgorVGhlIG9wY29kZSBhYmJyZXZpYXRpb25zIGFyZToKIAogICBDOiBjcmVhdGUgbmV3IHJlZgogICBEOiBkZWxldGUgZXhpc3RpbmcgcmVmCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwppbmRleCAxNTg5NThkLi5iNzMzMzI2IDEwMDY0NAotLS0gYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogIyBUaGlzIHJ1bGUgc3RhdGVzIHRoYXQgZWFjaCBzeXN0ZW0gY2FsbCBzaG91bGQgaGF2ZSBpdHMgcmV0dXJuIHZhbHVlIGNoZWNrZWQKICMgVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBpbmNsdWRlcyB0aGUgcHJpbnQgY2FsbC4gQ2hlY2tpbmcgZXZlcnkgcHJpbnQgY2FsbCdzCi0jIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSBjb2RlIHJlYWRhYmlsdHkuCisjIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgogIyBUaGlzIGNvbmZpZ3VyYXRpb24ga2VlcHMgYWxsIGRlZmF1bHQgZnVuY3Rpb24gYnV0IHByaW50LgogW0lucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZFN5c2NhbGxzXQogZnVuY3Rpb25zID0gb3BlbiBzYXkgY2xvc2UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCmluZGV4IGFmOWNiYzkuLmQ4ZmYyZTYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybApAQCAtNzksNyArNzksNyBAQAogJGV4cG9ydF9tZWRpYSA9ICEoJGV4cG9ydF9tZWRpYSBlcSAnZmFsc2UnKTsKIAogbXkgJHdpa2lfbG9naW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdMb2dpbiIpOwotIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJyYWdlZC4gVXNlIHRoZSBjcmVkZW50aWFsIHN5c3RlbSBpbnN0ZWFkLgorIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJhZ2VkLiBVc2UgdGhlIGNyZWRlbnRpYWwgc3lzdGVtIGluc3RlYWQuCiBteSAkd2lraV9wYXNzd2QgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdQYXNzd29yZCIpOwogbXkgJHdpa2lfZG9tYWluID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13RG9tYWluIik7CiBjaG9tcCgkd2lraV9sb2dpbik7CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9kYl9pbnN0YWxsLnBocCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCmluZGV4IDBmM2Y0ZTAuLmIwMzM4NDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCkBAIC0yNCw3ICsyNCw3IEBACiAkZGJfZGlyID0gdXJsZW5jb2RlKCR0bXApOwogJHRtcF9jb29raWUgPSB0ZW1wbmFtKCR0bXAsICJDT09LSUVfIik7CiAvKgotICogRmV0Y2hzIGEgcGFnZSB3aXRoIGNVUkwuCisgKiBGZXRjaGVzIGEgcGFnZSB3aXRoIGNVUkwuCiAgKi8KIGZ1bmN0aW9uIGdldCgkcGFnZV9uYW1lID0gIiIpIHsKIAkkY3VybCA9IGN1cmxfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2MC1tdy10by1naXQtY2xvbmUuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaAppbmRleCBjZmJmZTdkLi45MTA2ODMzIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaApAQCAtMTQzLDcgKzE0Myw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBtdWx0aXBsZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKIAl3aWtpX3Jlc2V0ICYmCiAJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBiZSB0aGVyZSIgZmFsc2UgJiYKLQl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcGVhciIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcHBlYXIiIGZhbHNlICYmCiAJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgYmUgZXJhc2VkIiBmYWxzZSAmJgogCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4geW91IHdpbGwgbm90IGVyYXNlIG1lIiBmYWxzZSAmJgogCXdpa2lfZGVsZXRlX3BhZ2UgbmFtbmFtICYmCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaAppbmRleCA2NTQ2Mjk0Li4zOTQ4YTAwIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKQEAgLTI3OSw3ICsyNzksNyBAQAogCSIkTElHSFRUUERfRElSIi9saWdodHRwZCAtZiAiJFdFQiIvbGlnaHR0cGQuY29uZgogCiAJaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KLQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkZWFtb24gbGlnaHR0cGQiCisJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uIGxpZ2h0dHBkIgogCQlleGl0IDEKIAlmaQogfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvc3ZucmR1bXBfc2ltLnB5IGIvY29udHJpYi9zdm4tZmUvc3ZucmR1bXBfc2ltLnB5CmluZGV4IDUwYzZhNGYuLjhhM2NlZTYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weQorKysgYi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcHJpbnQoInVzYWdlOiAlcyBkdW1wIFVSTCAtckxPV0VSOlVQUEVSIikKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMV0gPT0gJ2R1bXAnOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdvbmx5ICJkdW1wIiBpcyBzdXBwcG9ydGVkLicpCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ29ubHkgImR1bXAiIGlzIHN1cHBvcnRlZC4nKQogICAgIHVybCA9IHN5cy5hcmd2WzJdCiAgICAgciA9ICgnMCcsICdIRUFEJykKICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDQgYW5kIHN5cy5hcmd2WzNdWzA6Ml0gPT0gJy1yJzoKZGlmZiAtLWdpdCBhL2NvbnZlcnQuYyBiL2NvbnZlcnQuYwppbmRleCAyNWFjNTI1Li43OTdlMGJkIDEwMDY0NAotLS0gYS9jb252ZXJ0LmMKKysrIGIvY29udmVydC5jCkBAIC0yNzAsOCArMjcwLDEyIEBACiBzdGF0aWMgaW50IHZhbGlkYXRlX2VuY29kaW5nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmVuYywKIAkJICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgaW50IGRpZV9vbl9lcnJvcikKIHsKKwljb25zdCBjaGFyICpzdHJpcHBlZDsKKwogCS8qIFdlIG9ubHkgY2hlY2sgZm9yIFVURiBoZXJlIGFzIFVURj8/IGNhbiBiZSBhbiBhbGlhcyBmb3IgVVRGLT8/ICovCi0JaWYgKGlzdGFydHNfd2l0aChlbmMsICJVVEYiKSkgeworCWlmIChza2lwX2lwcmVmaXgoZW5jLCAiVVRGIiwgJnN0cmlwcGVkKSkgeworCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOworCiAJCS8qCiAJCSAqIENoZWNrIGZvciBkZXRlY3RhYmxlIGVycm9ycyBpbiBVVEYgZW5jb2RpbmdzCiAJCSAqLwpAQCAtMjg1LDE1ICsyODksMTAgQEAKIAkJCSAqLwogCQkJY29uc3QgY2hhciAqYWR2aXNlX21zZyA9IF8oCiAJCQkJIlRoZSBmaWxlICclcycgY29udGFpbnMgYSBieXRlIG9yZGVyICIKLQkJCQkibWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXMgYXMgIgorCQkJCSJtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKIAkJCQkid29ya2luZy10cmVlLWVuY29kaW5nLiIpOwotCQkJY29uc3QgY2hhciAqc3RyaXBwZWQgPSBOVUxMOwotCQkJY2hhciAqdXBwZXIgPSB4c3RyZHVwX3RvdXBwZXIoZW5jKTsKLQkJCXVwcGVyW3N0cmxlbih1cHBlciktMl0gPSAnXDAnOwotCQkJaWYgKHNraXBfcHJlZml4KHVwcGVyLCAiVVRGIiwgJnN0cmlwcGVkKSkKLQkJCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOwotCQkJYWR2aXNlKGFkdmlzZV9tc2csIHBhdGgsIHN0cmlwcGVkKTsKLQkJCWZyZWUodXBwZXIpOworCQkJaW50IHN0cmlwcGVkX2xlbiA9IHN0cmxlbihzdHJpcHBlZCkgLSBzdHJsZW4oIkJFIik7CisJCQlhZHZpc2UoYWR2aXNlX21zZywgcGF0aCwgc3RyaXBwZWRfbGVuLCBzdHJpcHBlZCk7CiAJCQlpZiAoZGllX29uX2Vycm9yKQogCQkJCWRpZShlcnJvcl9tc2csIHBhdGgsIGVuYyk7CiAJCQllbHNlIHsKQEAgLTMwOCwxMiArMzA3LDcgQEAKIAkJCQkibWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtJXNMRSAiCiAJCQkJIihkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzICIKIAkJCQkid29ya2luZy10cmVlLWVuY29kaW5nLiIpOwotCQkJY29uc3QgY2hhciAqc3RyaXBwZWQgPSBOVUxMOwotCQkJY2hhciAqdXBwZXIgPSB4c3RyZHVwX3RvdXBwZXIoZW5jKTsKLQkJCWlmIChza2lwX3ByZWZpeCh1cHBlciwgIlVURiIsICZzdHJpcHBlZCkpCi0JCQkJc2tpcF9wcmVmaXgoc3RyaXBwZWQsICItIiwgJnN0cmlwcGVkKTsKIAkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZCwgc3RyaXBwZWQpOwotCQkJZnJlZSh1cHBlcik7CiAJCQlpZiAoZGllX29uX2Vycm9yKQogCQkJCWRpZShlcnJvcl9tc2csIHBhdGgsIGVuYyk7CiAJCQllbHNlIHsKQEAgLTQxOCw3ICs0MTIsNyBAQAogCWlmICghZHN0KSB7CiAJCS8qCiAJCSAqIFdlIGNvdWxkIGFkZCB0aGUgYmxvYiAiYXMtaXMiIHRvIEdpdC4gSG93ZXZlciwgb24gY2hlY2tvdXQKLQkJICogd2Ugd291bGQgdHJ5IHRvIHJlZW5jb2RlIHRvIHRoZSBvcmlnaW5hbCBlbmNvZGluZy4gVGhpcworCQkgKiB3ZSB3b3VsZCB0cnkgdG8gcmUtZW5jb2RlIHRvIHRoZSBvcmlnaW5hbCBlbmNvZGluZy4gVGhpcwogCQkgKiB3b3VsZCBmYWlsIGFuZCB3ZSB3b3VsZCBsZWF2ZSB0aGUgdXNlciB3aXRoIGEgbWVzc2VkLXVwCiAJCSAqIHdvcmtpbmcgdHJlZS4gTGV0J3MgdHJ5IHRvIGF2b2lkIHRoaXMgYnkgc2NyZWFtaW5nIGxvdWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwppbmRleCA5ZDJlMGQyLi5mZDY2OWVkIDEwMDY0NAotLS0gYS9kYWVtb24uYworKysgYi9kYWVtb24uYwpAQCAtNTk4LDcgKzU5OCw3IEBACiAgKiBSZWFkIHRoZSBob3N0IGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBOVUwgYnl0ZSB0ZXJtaW5hdGluZyB0aGUgaG9zdAotICogYXJndWVtbnQsIG9yICdleHRyYV9hcmdzJyBpZiB0aGVyZSBpcyBubyBob3N0IGFyZ3VlbW50LgorICogYXJndW1lbnQsIG9yICdleHRyYV9hcmdzJyBpZiB0aGVyZSBpcyBubyBob3N0IGFyZ3VtZW50LgogICovCiBzdGF0aWMgY2hhciAqcGFyc2VfaG9zdF9hcmcoc3RydWN0IGhvc3RpbmZvICpoaSwgY2hhciAqZXh0cmFfYXJncywgaW50IGJ1ZmxlbikKIHsKQEAgLTY1Miw3ICs2NTIsNyBAQAogCQkgKiBzZXJ2aWNlIHRoYXQgd2lsbCBiZSBydW4uCiAJCSAqCiAJCSAqIElmIHRoZXJlIGVuZHMgdXAgYmVpbmcgYSBwYXJ0aWN1bGFyIGFyZyBpbiB0aGUgZnV0dXJlIHRoYXQKLQkJICogZ2l0LWRhZW1vbiBuZWVkcyB0byBwYXJzZSBzcGVjaWZpY2x5IChsaWtlIHRoZSAnaG9zdCcgYXJnKQorCQkgKiBnaXQtZGFlbW9uIG5lZWRzIHRvIHBhcnNlIHNwZWNpZmljYWxseSAobGlrZSB0aGUgJ2hvc3QnIGFyZykKIAkJICogdGhlbiBpdCBjYW4gYmUgcGFyc2VkIGhlcmUgYW5kIG5vdCBhZGRlZCB0byAnZ2l0X3Byb3RvY29sJy4KIAkJICovCiAJCWlmICgqYXJnKSB7CmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKaW5kZXggYWZlNDQwMC4uOGUyOTE0YyAxMDA2NDQKLS0tIGEvZGlmZi5jCisrKyBiL2RpZmYuYwpAQCAtMjQ5NSwyMiArMjQ5NSw2IEBACiAJfQogfQogCi1zdHJ1Y3QgZGlmZnN0YXRfdCB7Ci0JaW50IG5yOwotCWludCBhbGxvYzsKLQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSB7Ci0JCWNoYXIgKmZyb21fbmFtZTsKLQkJY2hhciAqbmFtZTsKLQkJY2hhciAqcHJpbnRfbmFtZTsKLQkJY29uc3QgY2hhciAqY29tbWVudHM7Ci0JCXVuc2lnbmVkIGlzX3VubWVyZ2VkOjE7Ci0JCXVuc2lnbmVkIGlzX2JpbmFyeToxOwotCQl1bnNpZ25lZCBpc19yZW5hbWVkOjE7Ci0JCXVuc2lnbmVkIGlzX2ludGVyZXN0aW5nOjE7Ci0JCXVpbnRtYXhfdCBhZGRlZCwgZGVsZXRlZDsKLQl9ICoqZmlsZXM7Ci19OwotCiBzdGF0aWMgc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmRpZmZzdGF0X2FkZChzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9hLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWVfYikKQEAgLTI1NTEsNyArMjUzNSw3IEBACiAJLyoKIAkgKiBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgJy0nIG9yICcrJyBpcyBwcmludGVkIGlmCiAJICogdGhlcmUgaXMgYW55IGNoYW5nZSB0byB0aGlzIHBhdGguIFRoZSBlYXNpZXN0IHdheSBpcyB0bwotCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdGVkIHdpZHRoIGlzIG9uZSBjb2x1bW4gc2hvcnRlcgorCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdHRlZCB3aWR0aCBpcyBvbmUgY29sdW1uIHNob3J0ZXIKIAkgKiB0aGFuIGl0IGlzLCBhbmQgdGhlbiBhZGQgMSB0byB0aGUgcmVzdWx0LgogCSAqLwogCXJldHVybiAxICsgKGl0ICogKHdpZHRoIC0gMSkgLyBtYXhfY2hhbmdlKTsKQEAgLTMxNTcsNyArMzE0MSw3IEBACiAJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucywgJmRpciwgY2hhbmdlZCwgIiIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQordm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBkaWZmc3RhdC0+bnI7IGkrKykgewpAQCAtMzE5Niw3ICszMTgwLDcgQEAKIAlmb3IgKGNudCA9IDE7IGNudCA8IG1hcmtlcl9zaXplOyBjbnQrKykKIAkJaWYgKGxpbmVbY250XSAhPSBmaXJzdGNoYXIpCiAJCQlyZXR1cm4gMDsKLQkvKiBsaW5lWzFdIHRocnUgbGluZVttYXJrZXJfc2l6ZS0xXSBhcmUgc2FtZSBhcyBmaXJzdGNoYXIgKi8KKwkvKiBsaW5lWzFdIHRocm91Z2ggbGluZVttYXJrZXJfc2l6ZS0xXSBhcmUgc2FtZSBhcyBmaXJzdGNoYXIgKi8KIAlpZiAobGVuIDwgbWFya2VyX3NpemUgKyAxIHx8ICFpc3NwYWNlKGxpbmVbbWFya2VyX3NpemVdKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CkBAIC02MjgzLDEyICs2MjY3LDcgQEAKIAkgICAgZGlyc3RhdF9ieV9saW5lKSB7CiAJCXN0cnVjdCBkaWZmc3RhdF90IGRpZmZzdGF0OwogCi0JCW1lbXNldCgmZGlmZnN0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZGlmZnN0YXRfdCkpOwotCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgewotCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKLQkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKLQkJCQlkaWZmX2ZsdXNoX3N0YXQocCwgb3B0aW9ucywgJmRpZmZzdGF0KTsKLQkJfQorCQljb21wdXRlX2RpZmZzdGF0KG9wdGlvbnMsICZkaWZmc3RhdCwgcSk7CiAJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTlVNU1RBVCkKIAkJCXNob3dfbnVtc3RhdCgmZGlmZnN0YXQsIG9wdGlvbnMpOwogCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJRkZTVEFUKQpAQCAtNjYyMSw2ICs2NjAwLDIwIEBACiAJcmV0dXJuIGlnbm9yZWQ7CiB9CiAKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgICBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKworCW1lbXNldChkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJZGlmZl9mbHVzaF9zdGF0KHAsIG9wdGlvbnMsIGRpZmZzdGF0KTsKKwl9Cit9CisKIHZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCiAJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggN2Y4ZjAyNC4uZDk4NmRkYyAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtMjQ1LDYgKzI0NSwyMiBAQAogdm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX3BpcGV0aHJvdWdoKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCiAJCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKIAorc3RydWN0IGRpZmZzdGF0X3QgeworCWludCBucjsKKwlpbnQgYWxsb2M7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgeworCQljaGFyICpmcm9tX25hbWU7CisJCWNoYXIgKm5hbWU7CisJCWNoYXIgKnByaW50X25hbWU7CisJCWNvbnN0IGNoYXIgKmNvbW1lbnRzOworCQl1bnNpZ25lZCBpc191bm1lcmdlZDoxOworCQl1bnNpZ25lZCBpc19iaW5hcnk6MTsKKwkJdW5zaWduZWQgaXNfcmVuYW1lZDoxOworCQl1bnNpZ25lZCBpc19pbnRlcmVzdGluZzoxOworCQl1aW50bWF4X3QgYWRkZWQsIGRlbGV0ZWQ7CisJfSAqKmZpbGVzOworfTsKKwogZW51bSBjb2xvcl9kaWZmIHsKIAlESUZGX1JFU0VUID0gMCwKIAlESUZGX0NPTlRFWFQgPSAxLApAQCAtMzM0LDYgKzM1MCwxMCBAQAogCiBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqcGF0aCk7CiAKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSk7Cit2b2lkIGZyZWVfZGlmZnN0YXRfaW5mbyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpOworCiAjZGVmaW5lIERJRkZfU0VUVVBfUkVWRVJTRSAgICAgIAkxCiAjZGVmaW5lIERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUJNAogCmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IDYxZjU1OWY5Li45MDQ3MzczIDEwMDY0NAotLS0gYS9kaXIuYworKysgYi9kaXIuYwpAQCAtMjQ4OSw3ICsyNDg5LDcgQEAKIAkJCQkgKiB3YW50ZWQgYW55d2F5CiAJCQkJICovCiAJCQkJY29udGludWU7Ci0JCQkvKiBmYWxsIHRocnUgKi8KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKIAkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNlKHBhdGgsIGZsYWcsICZrZXB0X2Rvd24pKQogCQkJCWNvbnRpbnVlOyAvKiBoYXBweSAqLwpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCmluZGV4IDAxMzBiNDQuLjE3MzRhNTcgMTAwNjQ0Ci0tLSBhL2ZldGNoLXBhY2suYworKysgYi9mZXRjaC1wYWNrLmMKQEAgLTY2OSwxNyArNjY5LDIwIEBACiAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQlzdHJ1Y3Qgb2JqZWN0ICpvOwogCiAJCWlmICghaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoJnJlZi0+b2xkX29pZCwKLQkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLKSkKKwkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLIHwKKwkJCQkJCQlPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCiAJCQljb250aW51ZTsKIAkJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJnJlZi0+b2xkX29pZCk7CiAJCWlmICghbykKIAkJCWNvbnRpbnVlOwogCi0JCS8qIFdlIGFscmVhZHkgaGF2ZSBpdCAtLSB3aGljaCBtYXkgbWVhbiB0aGF0IHdlIHdlcmUKKwkJLyoKKwkJICogV2UgYWxyZWFkeSBoYXZlIGl0IC0tIHdoaWNoIG1heSBtZWFuIHRoYXQgd2Ugd2VyZQogCQkgKiBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHNpZGUgYXQgc29tZSB0aW1lIGFmdGVyCiAJCSAqIHRoYXQgKGl0IGlzIE9LIGlmIHdlIGd1ZXNzIHdyb25nIGhlcmUpLgogCQkgKi8KQEAgLTY4OSw3ICs2OTIsMTMgQEAKIAkJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CiAJCX0KIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAorCS8qCisJICogVGhpcyBibG9jayBtYXJrcyBhbGwgbG9jYWwgcmVmcyBhcyBDT01QTEVURSwgYW5kIHRoZW4gcmVjdXJzaXZlbHkgbWFya3MgYWxsCisJICogcGFyZW50cyBvZiB0aG9zZSByZWZzIGFzIENPTVBMRVRFLgorCSAqLworCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLCAibWFya19jb21wbGV0ZV9sb2NhbF9yZWZzIiwgTlVMTCk7CiAJaWYgKCFhcmdzLT5kZWVwZW4pIHsKIAkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGVfb2lkLCBOVUxMKTsKIAkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShOVUxMLCBtYXJrX2FsdGVybmF0ZV9jb21wbGV0ZSk7CkBAIC02OTcsMTEgKzcwNiwxMyBAQAogCQlpZiAoY3V0b2ZmKQogCQkJbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhhcmdzLCBjdXRvZmYpOwogCX0KKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tcGxldGVfbG9jYWxfcmVmcyIsIE5VTEwpOwogCiAJLyoKIAkgKiBNYXJrIGFsbCBjb21wbGV0ZSByZW1vdGUgcmVmcyBhcyBjb21tb24gcmVmcy4KIAkgKiBEb24ndCBtYXJrIHRoZW0gY29tbW9uIHlldDsgdGhlIHNlcnZlciBoYXMgdG8gYmUgdG9sZCBzbyBmaXJzdC4KIAkgKi8KKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tbW9uX3JlbW90ZV9yZWZzIiwgTlVMTCk7CiAJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwKIAkJCQkJICAgICBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LApAQCAtNzE0LDYgKzcyNSw3IEBACiAJCW5lZ290aWF0b3ItPmtub3duX2NvbW1vbihuZWdvdGlhdG9yLAogCQkJCQkgKHN0cnVjdCBjb21taXQgKilvKTsKIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJtYXJrX2NvbW1vbl9yZW1vdGVfcmVmcyIsIE5VTEwpOwogCiAJc2F2ZV9jb21taXRfYnVmZmVyID0gb2xkX3NhdmVfY29tbWl0X2J1ZmZlcjsKIH0KQEAgLTc1Niw4ICs3NjgsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB3cml0ZV9wcm9taXNvcl9maWxlKGNvbnN0IGNoYXIgKmtlZXBfbmFtZSwKKwkJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXN0cnVjdCBzdHJidWYgcHJvbWlzb3JfbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBzdWZmaXhfc3RyaXBwZWQ7CisJRklMRSAqb3V0cHV0OworCWludCBpOworCisJc3RyYnVmX2FkZHN0cigmcHJvbWlzb3JfbmFtZSwga2VlcF9uYW1lKTsKKwlzdWZmaXhfc3RyaXBwZWQgPSBzdHJidWZfc3RyaXBfc3VmZml4KCZwcm9taXNvcl9uYW1lLCAiLmtlZXAiKTsKKwlpZiAoIXN1ZmZpeF9zdHJpcHBlZCkKKwkJQlVHKCJuYW1lIG9mIHBhY2sgbG9ja2ZpbGUgc2hvdWxkIGVuZCB3aXRoIC5rZWVwICh3YXMgJyVzJykiLAorCQkgICAga2VlcF9uYW1lKTsKKwlzdHJidWZfYWRkc3RyKCZwcm9taXNvcl9uYW1lLCAiLnByb21pc29yIik7CisKKwlvdXRwdXQgPSB4Zm9wZW4ocHJvbWlzb3JfbmFtZS5idWYsICJ3Iik7CisJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQlmcHJpbnRmKG91dHB1dCwgIiVzICVzXG4iLCBvaWRfdG9faGV4KCZzb3VnaHRbaV0tPm9sZF9vaWQpLAorCQkJc291Z2h0W2ldLT5uYW1lKTsKKwlmY2xvc2Uob3V0cHV0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9taXNvcl9uYW1lKTsKK30KKwogc3RhdGljIGludCBnZXRfcGFjayhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAotCQkgICAgaW50IHhkWzJdLCBjaGFyICoqcGFja19sb2NrZmlsZSkKKwkJICAgIGludCB4ZFsyXSwgY2hhciAqKnBhY2tfbG9ja2ZpbGUsCisJCSAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQogewogCXN0cnVjdCBhc3luYyBkZW11eDsKIAlpbnQgZG9fa2VlcCA9IGFyZ3MtPmtlZXBfcGFjazsKQEAgLTgxOSw3ICs4NTYsMTMgQEAKIAkJfQogCQlpZiAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKTsKLQkJaWYgKGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCS8qCisJCSAqIElmIHdlJ3JlIG9idGFpbmluZyB0aGUgZmlsZW5hbWUgb2YgYSBsb2NrZmlsZSwgd2UnbGwgdXNlCisJCSAqIHRoYXQgZmlsZW5hbWUgdG8gd3JpdGUgYSAucHJvbWlzb3IgZmlsZSB3aXRoIG1vcmUKKwkJICogaW5mb3JtYXRpb24gYmVsb3cuIElmIG5vdCwgd2UgbmVlZCBpbmRleC1wYWNrIHRvIGRvIGl0IGZvcgorCQkgKiB1cy4KKwkJICovCisJCWlmICghKGRvX2tlZXAgJiYgcGFja19sb2NrZmlsZSkgJiYgYXJncy0+ZnJvbV9wcm9taXNvcikKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXByb21pc29yIik7CiAJfQogCWVsc2UgewpAQCAtODczLDYgKzkxNiwxNCBAQAogCQlkaWUoXygiJXMgZmFpbGVkIiksIGNtZF9uYW1lKTsKIAlpZiAodXNlX3NpZGViYW5kICYmIGZpbmlzaF9hc3luYygmZGVtdXgpKQogCQlkaWUoXygiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpKTsKKworCS8qCisJICogTm93IHRoYXQgaW5kZXgtcGFjayBoYXMgc3VjY2VlZGVkLCB3cml0ZSB0aGUgcHJvbWlzb3IgZmlsZSB1c2luZyB0aGUKKwkgKiBvYnRhaW5lZCAua2VlcCBmaWxlbmFtZSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoZG9fa2VlcCAmJiBwYWNrX2xvY2tmaWxlICYmIGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCXdyaXRlX3Byb21pc29yX2ZpbGUoKnBhY2tfbG9ja2ZpbGUsIHNvdWdodCwgbnJfc291Z2h0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04OTUsOCArOTQ2LDE1IEBACiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY29uc3QgY2hhciAqYWdlbnRfZmVhdHVyZTsKIAlpbnQgYWdlbnRfbGVuOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQogCiAJc29ydF9yZWZfbGlzdCgmcmVmLCByZWZfY29tcGFyZV9uYW1lKTsKIAlRU09SVChzb3VnaHQsIG5yX3NvdWdodCwgY21wX3JlZl9ieV9uYW1lKTsKQEAgLTk4Myw3ICsxMDQxLDcgQEAKIAkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIikpOwogCiAJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7Ci0JCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQltYXJrX2NvbXBsZXRlX2FuZF9jb21tb25fcmVmKG5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOwogCQlmaWx0ZXJfcmVmcyhhcmdzLCAmcmVmLCBzb3VnaHQsIG5yX3NvdWdodCk7CiAJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKSB7CiAJCQlwYWNrZXRfZmx1c2goZmRbMV0pOwpAQCAtOTkyLDcgKzEwNTAsNyBAQAogCX0gZWxzZSB7CiAJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKIAl9Ci0JaWYgKGZpbmRfY29tbW9uKCZuZWdvdGlhdG9yLCBhcmdzLCBmZCwgJm9pZCwgcmVmKSA8IDApCisJaWYgKGZpbmRfY29tbW9uKG5lZ290aWF0b3IsIGFyZ3MsIGZkLCAmb2lkLCByZWYpIDwgMCkKIAkJaWYgKCFhcmdzLT5rZWVwX3BhY2spCiAJCQkvKiBXaGVuIGNsb25pbmcsIGl0IGlzIG5vdCB1bnVzdWFsIHRvIGhhdmUKIAkJCSAqIG5vIGNvbW1vbiBjb21taXQuCkBAIC0xMDA4LDExICsxMDY2LDEyIEBACiAJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhzaS0+c2hhbGxvdyk7CiAJZWxzZQogCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKLQlpZiAoZ2V0X3BhY2soYXJncywgZmQsIHBhY2tfbG9ja2ZpbGUpKQorCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQlkaWUoXygiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iKSk7CiAKICBhbGxfZG9uZToKLQluZWdvdGlhdG9yLnJlbGVhc2UoJm5lZ290aWF0b3IpOworCWlmIChuZWdvdGlhdG9yKQorCQluZWdvdGlhdG9yLT5yZWxlYXNlKG5lZ290aWF0b3IpOwogCXJldHVybiByZWY7CiB9CiAKQEAgLTEyMzAsNyArMTI4OSw4IEBACiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCW9pZHNldF9pbnNlcnQoY29tbW9uLCAmb2lkKTsKIAkJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKLQkJCQluZWdvdGlhdG9yLT5hY2sobmVnb3RpYXRvciwgY29tbWl0KTsKKwkJCQlpZiAobmVnb3RpYXRvcikKKwkJCQkJbmVnb3RpYXRvci0+YWNrKG5lZ290aWF0b3IsIGNvbW1pdCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTM4Miw4ICsxNDQyLDE2IEBACiAJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOwogCWludCBpbl92YWluID0gMCwgbmVnb3RpYXRpb25fc3RhcnRlZCA9IDA7CiAJaW50IGhhdmVzX3RvX3NlbmQgPSBJTklUSUFMX0ZMVVNIOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQorCiAJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAogCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CiAJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CkBAIC0xNDA3LDE1ICsxNDc1LDE1IEBACiAKIAkJCS8qIEZpbHRlciAncmVmJyBieSAnc291Z2h0JyBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QgbG9jYWwgKi8KIAkJCWlmICghYXJncy0+bm9fZGVwZW5kZW50cykgewotCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYobmVnb3RpYXRvciwgYXJncywgJnJlZik7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwogCQkJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKQogCQkJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CiAJCQkJZWxzZQogCQkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUkVRVUVTVDsKIAotCQkJCW1hcmtfdGlwcygmbmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7Ci0JCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZSgmbmVnb3RpYXRvciwKKwkJCQltYXJrX3RpcHMobmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7CisJCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShuZWdvdGlhdG9yLAogCQkJCQkJCSAgaW5zZXJ0X29uZV9hbHRlcm5hdGVfb2JqZWN0KTsKIAkJCX0gZWxzZSB7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwpAQCAtMTQyOSw3ICsxNDk3LDcgQEAKIAkJCQkJCSAgICAibmVnb3RpYXRpb25fdjIiLAogCQkJCQkJICAgIHRoZV9yZXBvc2l0b3J5KTsKIAkJCX0KLQkJCWlmIChzZW5kX2ZldGNoX3JlcXVlc3QoJm5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCisJCQlpZiAoc2VuZF9mZXRjaF9yZXF1ZXN0KG5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCiAJCQkJCSAgICAgICAmY29tbW9uLAogCQkJCQkgICAgICAgJmhhdmVzX3RvX3NlbmQsICZpbl92YWluLAogCQkJCQkgICAgICAgcmVhZGVyLnVzZV9zaWRlYmFuZCkpCkBAIC0xNDM5LDcgKzE1MDcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BQ0tTOgogCQkJLyogUHJvY2VzcyBBQ0tzL05BS3MgKi8KLQkJCXN3aXRjaCAocHJvY2Vzc19hY2tzKCZuZWdvdGlhdG9yLCAmcmVhZGVyLCAmY29tbW9uKSkgeworCQkJc3dpdGNoIChwcm9jZXNzX2Fja3MobmVnb3RpYXRvciwgJnJlYWRlciwgJmNvbW1vbikpIHsKIAkJCWNhc2UgMjoKIAkJCQlzdGF0ZSA9IEZFVENIX0dFVF9QQUNLOwogCQkJCWJyZWFrOwpAQCAtMTQ2NCw3ICsxNTMyLDcgQEAKIAogCQkJLyogZ2V0IHRoZSBwYWNrICovCiAJCQlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJwYWNrZmlsZSIsIDApOwotCQkJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlKSkKKwkJCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQkJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIpKTsKIAogCQkJc3RhdGUgPSBGRVRDSF9ET05FOwpAQCAtMTQ3NCw3ICsxNTQyLDggQEAKIAkJfQogCX0KIAotCW5lZ290aWF0b3IucmVsZWFzZSgmbmVnb3RpYXRvcik7CisJaWYgKG5lZ290aWF0b3IpCisJCW5lZ290aWF0b3ItPnJlbGVhc2UobmVnb3RpYXRvcik7CiAJb2lkc2V0X2NsZWFyKCZjb21tb24pOwogCXJldHVybiByZWY7CiB9CmRpZmYgLS1naXQgYS9mc2NrLmMgYi9mc2NrLmMKaW5kZXggY2RiN2Q4ZC4uYWM0YmE0YyAxMDA2NDQKLS0tIGEvZnNjay5jCisrKyBiL2ZzY2suYwpAQCAtNDMsMjEgKzQzLDE3IEBACiAJRlVOQyhNSVNTSU5HX0FVVEhPUiwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfQ09NTUlUVEVSLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19FTUFJTCwgRVJST1IpIFwKLQlGVU5DKE1JU1NJTkdfR1JBRlQsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19PQkpFQ1QsIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1BBUkVOVCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfVEFHLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UQUdfRU5UUlksIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1RBR19PQkpFQ1QsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUVfT0JKRUNULCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFX0VOVFJZLCBFUlJPUikgXAogCUZVTkMoTVVMVElQTEVfQVVUSE9SUywgRVJST1IpIFwKLQlGVU5DKFRBR19PQkpFQ1RfTk9UX1RBRywgRVJST1IpIFwKIAlGVU5DKFRSRUVfTk9UX1NPUlRFRCwgRVJST1IpIFwKIAlGVU5DKFVOS05PV05fVFlQRSwgRVJST1IpIFwKIAlGVU5DKFpFUk9fUEFEREVEX0RBVEUsIEVSUk9SKSBcCkBAIC0yODEsMTQgKzI3NywxNiBAQAogCXN0cmJ1Zl9hZGRzdHIoc2IsICI6ICIpOwogfQogCi1zdGF0aWMgaW50IG9iamVjdF9vbl9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCitzdGF0aWMgaW50IG9iamVjdF9vbl9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXJldHVybiBvcHRzICYmIG9iaiAmJiBvaWRzZXRfY29udGFpbnMoJm9wdHMtPnNraXBsaXN0LCAmb2JqLT5vaWQpOworCXJldHVybiBvcHRzICYmIG9pZCAmJiBvaWRzZXRfY29udGFpbnMoJm9wdHMtPnNraXBsaXN0LCBvaWQpOwogfQogCi1fX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQotc3RhdGljIGludCByZXBvcnQoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqZWN0LAotCWVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDUsIDYpKSkKK3N0YXRpYyBpbnQgcmVwb3J0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkgIGVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwpAQCAtMjk3LDcgKzI5NSw3IEBACiAJaWYgKG1zZ190eXBlID09IEZTQ0tfSUdOT1JFKQogCQlyZXR1cm4gMDsKIAotCWlmIChvYmplY3Rfb25fc2tpcGxpc3Qob3B0aW9ucywgb2JqZWN0KSkKKwlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9pZCkpCiAJCXJldHVybiAwOwogCiAJaWYgKG1zZ190eXBlID09IEZTQ0tfRkFUQUwpCkBAIC0zMDksNDkgKzMwNyw3MSBAQAogCiAJdmFfc3RhcnQoYXAsIGZtdCk7CiAJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7Ci0JcmVzdWx0ID0gb3B0aW9ucy0+ZXJyb3JfZnVuYyhvcHRpb25zLCBvYmplY3QsIG1zZ190eXBlLCBzYi5idWYpOworCXJlc3VsdCA9IG9wdGlvbnMtPmVycm9yX2Z1bmMob3B0aW9ucywgb2lkLCBvYmplY3RfdHlwZSwKKwkJCQkgICAgIG1zZ190eXBlLCBzYi5idWYpOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAJdmFfZW5kKGFwKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBjaGFyICpnZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqKQordm9pZCBmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlpZiAoIW9wdGlvbnMtPm9iamVjdF9uYW1lcykKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqKTsKKwkJb3B0aW9ucy0+b2JqZWN0X25hbWVzID0ga2hfaW5pdF9vaWRfbWFwKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCi0JY29uc3QgY2hhciAqZm10LCAuLi4pCitjb25zdCBjaGFyICpmc2NrX2dldF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hpdGVyX3QgcG9zOworCWlmICghb3B0aW9ucy0+b2JqZWN0X25hbWVzKQorCQlyZXR1cm4gTlVMTDsKKwlwb3MgPSBraF9nZXRfb2lkX21hcChvcHRpb25zLT5vYmplY3RfbmFtZXMsICpvaWQpOworCWlmIChwb3MgPj0ga2hfZW5kKG9wdGlvbnMtPm9iamVjdF9uYW1lcykpCisJCXJldHVybiBOVUxMOworCXJldHVybiBraF92YWx1ZShvcHRpb25zLT5vYmplY3RfbmFtZXMsIHBvcyk7Cit9CisKK3ZvaWQgZnNja19wdXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFwOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqZXhpc3Rpbmc7CisJa2hpdGVyX3QgcG9zOworCWludCBoYXNocmV0OwogCiAJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCiAJCXJldHVybjsKLQlleGlzdGluZyA9IGxvb2t1cF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqKTsKLQlpZiAoZXhpc3RpbmcpCisKKwlwb3MgPSBraF9wdXRfb2lkX21hcChvcHRpb25zLT5vYmplY3RfbmFtZXMsICpvaWQsICZoYXNocmV0KTsKKwlpZiAoIWhhc2hyZXQpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcCwgZm10KTsKIAlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7Ci0JYWRkX2RlY29yYXRpb24ob3B0aW9ucy0+b2JqZWN0X25hbWVzLCBvYmosIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCWtoX3ZhbHVlKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgcG9zKSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiAJdmFfZW5kKGFwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX29iamVjdChzdHJ1Y3QgZnNja19vcHRpb25zICpvLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCitjb25zdCBjaGFyICpmc2NrX2Rlc2NyaWJlX29iamVjdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqbmFtZTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZzW10gPSB7CisJCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCisJfTsKKwlzdGF0aWMgaW50IGIgPSAwOworCXN0cnVjdCBzdHJidWYgKmJ1ZjsKKwljb25zdCBjaGFyICpuYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkKTsKIAotCXN0cmJ1Zl9yZXNldCgmYnVmKTsKLQlzdHJidWZfYWRkc3RyKCZidWYsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7Ci0JaWYgKG8tPm9iamVjdF9uYW1lcyAmJiAobmFtZSA9IGxvb2t1cF9kZWNvcmF0aW9uKG8tPm9iamVjdF9uYW1lcywgb2JqKSkpCi0JCXN0cmJ1Zl9hZGRmKCZidWYsICIgKCVzKSIsIG5hbWUpOworCWJ1ZiA9IGJ1ZnMgKyBiOworCWIgPSAoYiArIDEpICUgQVJSQVlfU0laRShidWZzKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAobmFtZSkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICglcykiLCBuYW1lKTsKIAotCXJldHVybiBidWYuYnVmOworCXJldHVybiBidWYtPmJ1ZjsKIH0KIAogc3RhdGljIGludCBmc2NrX3dhbGtfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKQEAgLTM2NCw3ICszODQsNyBAQAogCWlmIChwYXJzZV90cmVlKHRyZWUpKQogCQlyZXR1cm4gLTE7CiAKLQluYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0cmVlLT5vYmplY3QpOworCW5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdHJlZS0+b2JqZWN0Lm9pZCk7CiAJaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKSkKIAkJcmV0dXJuIC0xOwogCXdoaWxlICh0cmVlX2VudHJ5X2dlbnRseSgmZGVzYywgJmVudHJ5KSkgewpAQCAtMzc3LDIwICszOTcsMjEgQEAKIAkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKIAkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOwogCQkJaWYgKG5hbWUgJiYgb2JqKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlcyVzLyIsIG5hbWUsCi0JCQkJCWVudHJ5LnBhdGgpOworCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZlbnRyeS5vaWQsICIlcyVzLyIsCisJCQkJCQkgICAgIG5hbWUsIGVudHJ5LnBhdGgpOwogCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKIAkJfQogCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpIHsKIAkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOwogCQkJaWYgKG5hbWUgJiYgb2JqKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlcyVzIiwgbmFtZSwKLQkJCQkJZW50cnkucGF0aCk7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgJmVudHJ5Lm9pZCwgIiVzJXMiLAorCQkJCQkJICAgICBuYW1lLCBlbnRyeS5wYXRoKTsKIAkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsob2JqLCBPQkpfQkxPQiwgZGF0YSwgb3B0aW9ucyk7CiAJCX0KIAkJZWxzZSB7CiAJCQlyZXN1bHQgPSBlcnJvcigiaW4gdHJlZSAlczogZW50cnkgJXMgaGFzIGJhZCBtb2RlICUuNm8iLAotCQkJCQlkZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJnRyZWUtPm9iamVjdCksIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUpOworCQkJCSAgICAgICBmc2NrX2Rlc2NyaWJlX29iamVjdChvcHRpb25zLCAmdHJlZS0+b2JqZWN0Lm9pZCksCisJCQkJICAgICAgIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUpOwogCQl9CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTQxMSwxMCArNDMyLDEwIEBACiAJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQogCQlyZXR1cm4gLTE7CiAKLQluYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdCk7CisJbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdC5vaWQpOwogCWlmIChuYW1lKQotCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgJmdldF9jb21taXRfdHJlZShjb21taXQpLT5vYmplY3QsCi0JCQkJIiVzOiIsIG5hbWUpOworCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksCisJCQkJICAgICAiJXM6IiwgbmFtZSk7CiAKIAlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCksCiAJCQkgICAgICAgT0JKX1RSRUUsIGRhdGEsIG9wdGlvbnMpOwpAQCAtNDQyLDE2ICs0NjMsMTcgQEAKIAogCXdoaWxlIChwYXJlbnRzKSB7CiAJCWlmIChuYW1lKSB7Ci0JCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmcGFyZW50cy0+aXRlbS0+b2JqZWN0OworCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQ7CiAKIAkJCWlmIChjb3VudGVyKyspCi0JCQkJcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9iaiwgIiVzXiVkIiwKLQkJCQkJbmFtZSwgY291bnRlcik7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJXNeJWQiLAorCQkJCQkJICAgICBuYW1lLCBjb3VudGVyKTsKIAkJCWVsc2UgaWYgKGdlbmVyYXRpb24gPiAwKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlLipzfiVkIiwKLQkJCQkJbmFtZV9wcmVmaXhfbGVuLCBuYW1lLCBnZW5lcmF0aW9uICsgMSk7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJS4qc34lZCIsCisJCQkJCQkgICAgIG5hbWVfcHJlZml4X2xlbiwgbmFtZSwKKwkJCQkJCSAgICAgZ2VuZXJhdGlvbiArIDEpOwogCQkJZWxzZQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlc14iLCBuYW1lKTsKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvaWQsICIlc14iLCBuYW1lKTsKIAkJfQogCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopcGFyZW50cy0+aXRlbSwgT0JKX0NPTU1JVCwgZGF0YSwgb3B0aW9ucyk7CiAJCWlmIChyZXN1bHQgPCAwKQpAQCAtNDY1LDEyICs0ODcsMTIgQEAKIAogc3RhdGljIGludCBmc2NrX3dhbGtfdGFnKHN0cnVjdCB0YWcgKnRhZywgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKLQljaGFyICpuYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPm9iamVjdCk7CisJY29uc3QgY2hhciAqbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPm9iamVjdC5vaWQpOwogCiAJaWYgKHBhcnNlX3RhZyh0YWcpKQogCQlyZXR1cm4gLTE7CiAJaWYgKG5hbWUpCi0JCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCB0YWctPnRhZ2dlZCwgIiVzIiwgbmFtZSk7CisJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPnRhZ2dlZC0+b2lkLCAiJXMiLCBuYW1lKTsKIAlyZXR1cm4gb3B0aW9ucy0+d2Fsayh0YWctPnRhZ2dlZCwgT0JKX0FOWSwgZGF0YSwgb3B0aW9ucyk7CiB9CiAKQEAgLTQ5Miw3ICs1MTQsOCBAQAogCWNhc2UgT0JKX1RBRzoKIAkJcmV0dXJuIGZzY2tfd2Fsa190YWcoKHN0cnVjdCB0YWcgKilvYmosIGRhdGEsIG9wdGlvbnMpOwogCWRlZmF1bHQ6Ci0JCWVycm9yKCJVbmtub3duIG9iamVjdCB0eXBlIGZvciAlcyIsIGRlc2NyaWJlX29iamVjdChvcHRpb25zLCBvYmopKTsKKwkJZXJyb3IoIlVua25vd24gb2JqZWN0IHR5cGUgZm9yICVzIiwKKwkJICAgICAgZnNja19kZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJm9iai0+b2lkKSk7CiAJCXJldHVybiAtMTsKIAl9CiB9CkBAIC01NDMsNyArNTY2LDkgQEAKIAlyZXR1cm4gYzEgPCBjMiA/IDAgOiBUUkVFX1VOT1JERVJFRDsKIH0KIAotc3RhdGljIGludCBmc2NrX3RyZWUoc3RydWN0IHRyZWUgKml0ZW0sIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgaW50IGZzY2tfdHJlZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaGFzX251bGxfc2hhMSA9IDA7CkBAIC01NjAsOCArNTg1LDggQEAKIAl1bnNpZ25lZCBvX21vZGU7CiAJY29uc3QgY2hhciAqb19uYW1lOwogCi0JaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgaXRlbS0+YnVmZmVyLCBpdGVtLT5zaXplKSkgewotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKKwlpZiAoaW5pdF90cmVlX2Rlc2NfZ2VudGx5KCZkZXNjLCBidWZmZXIsIHNpemUpKSB7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtNTg3LDEzICs2MTIsMTQgQEAKIAkJCWlmICghU19JU0xOSyhtb2RlKSkKIAkJCQlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpOwogCQkJZWxzZQotCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwKKwkJCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsCisJCQkJCQkgb2lkLCBPQkpfVFJFRSwKIAkJCQkJCSBGU0NLX01TR19HSVRNT0RVTEVTX1NZTUxJTkssCiAJCQkJCQkgIi5naXRtb2R1bGVzIGlzIGEgc3ltYm9saWMgbGluayIpOwogCQl9CiAKIAkJaWYgKHVwZGF0ZV90cmVlX2VudHJ5X2dlbnRseSgmZGVzYykpIHsKLQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOworCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19CQURfVFJFRSwgImNhbm5vdCBiZSBwYXJzZWQgYXMgYSB0cmVlIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC02MzgsMzAgKzY2NCwzMSBAQAogCX0KIAogCWlmIChoYXNfbnVsbF9zaGExKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX05VTExfU0hBMSwgImNvbnRhaW5zIGVudHJpZXMgcG9pbnRpbmcgdG8gbnVsbCBzaGExIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfTlVMTF9TSEExLCAiY29udGFpbnMgZW50cmllcyBwb2ludGluZyB0byBudWxsIHNoYTEiKTsKIAlpZiAoaGFzX2Z1bGxfcGF0aCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19GVUxMX1BBVEhOQU1FLCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19GVUxMX1BBVEhOQU1FLCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKIAlpZiAoaGFzX2VtcHR5X25hbWUpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfRU1QVFlfTkFNRSwgImNvbnRhaW5zIGVtcHR5IHBhdGhuYW1lIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfRU1QVFlfTkFNRSwgImNvbnRhaW5zIGVtcHR5IHBhdGhuYW1lIik7CiAJaWYgKGhhc19kb3QpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVCwgImNvbnRhaW5zICcuJyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1QsICJjb250YWlucyAnLiciKTsKIAlpZiAoaGFzX2RvdGRvdCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19IQVNfRE9URE9ULCAiY29udGFpbnMgJy4uJyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1RET1QsICJjb250YWlucyAnLi4nIik7CiAJaWYgKGhhc19kb3RnaXQpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVEdJVCwgImNvbnRhaW5zICcuZ2l0JyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1RHSVQsICJjb250YWlucyAnLmdpdCciKTsKIAlpZiAoaGFzX3plcm9fcGFkKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0ZJTEVNT0RFLCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0ZJTEVNT0RFLCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOwogCWlmIChoYXNfYmFkX21vZGVzKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9GSUxFTU9ERSwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX0ZJTEVNT0RFLCAiY29udGFpbnMgYmFkIGZpbGUgbW9kZXMiKTsKIAlpZiAoaGFzX2R1cF9lbnRyaWVzKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0RVUExJQ0FURV9FTlRSSUVTLCAiY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0RVUExJQ0FURV9FTlRSSUVTLCAiY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIpOwogCWlmIChub3RfcHJvcGVybHlfc29ydGVkKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX1RSRUVfTk9UX1NPUlRFRCwgIm5vdCBwcm9wZXJseSBzb3J0ZWQiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19UUkVFX05PVF9TT1JURUQsICJub3QgcHJvcGVybHkgc29ydGVkIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCB2ZXJpZnlfaGVhZGVycyhjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgIHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJY29uc3QgY2hhciAqYnVmZmVyID0gKGNvbnN0IGNoYXIgKilkYXRhOwogCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTY2OSw3ICs2OTYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJc3dpdGNoIChidWZmZXJbaV0pIHsKIAkJY2FzZSAnXDAnOgotCQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosCisJCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKIAkJCQlGU0NLX01TR19OVUxfSU5fSEVBREVSLAogCQkJCSJ1bnRlcm1pbmF0ZWQgaGVhZGVyOiBOVUwgYXQgb2Zmc2V0ICVsZCIsIGkpOwogCQljYXNlICdcbic6CkBAIC02ODcsMTEgKzcxNCwxMyBAQAogCWlmIChzaXplICYmIGJ1ZmZlcltzaXplIC0gMV0gPT0gJ1xuJykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwKKwlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKIAkJRlNDS19NU0dfVU5URVJNSU5BVEVEX0hFQURFUiwgInVudGVybWluYXRlZCBoZWFkZXIiKTsKIH0KIAotc3RhdGljIGludCBmc2NrX2lkZW50KGNvbnN0IGNoYXIgKippZGVudCwgc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQorc3RhdGljIGludCBmc2NrX2lkZW50KGNvbnN0IGNoYXIgKippZGVudCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJY29uc3QgY2hhciAqcCA9ICppZGVudDsKIAljaGFyICplbmQ7CkBAIC03MDEsMjggKzczMCwyOCBAQAogCQkoKmlkZW50KSsrOwogCiAJaWYgKCpwID09ICc8JykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfTkFNRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOwogCXAgKz0gc3RyY3NwbihwLCAiPD5cbiIpOwogCWlmICgqcCA9PSAnPicpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfTkFNRSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIG5hbWUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9OQU1FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgbmFtZSIpOwogCWlmICgqcCAhPSAnPCcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CiAJaWYgKHBbLTFdICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19TUEFDRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CiAJcCsrOwogCXAgKz0gc3RyY3NwbihwLCAiPD5cbiIpOwogCWlmICgqcCAhPSAnPicpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKIAlwKys7CiAJaWYgKCpwICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKIAlwKys7CiAJaWYgKCpwID09ICcwJyAmJiBwWzFdICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKIAlpZiAoZGF0ZV9vdmVyZmxvd3MocGFyc2VfdGltZXN0YW1wKHAsICZlbmQsIDEwKSkpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfREFURV9PVkVSRkxPVywgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gZGF0ZSBjYXVzZXMgaW50ZWdlciBvdmVyZmxvdyIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0RBVEVfT1ZFUkZMT1csICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGRhdGUgY2F1c2VzIGludGVnZXIgb3ZlcmZsb3ciKTsKIAlpZiAoKGVuZCA9PSBwIHx8ICplbmQgIT0gJyAnKSkKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX0JBRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZGF0ZSIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBkYXRlIik7CiAJcCA9IGVuZCArIDE7CiAJaWYgKCgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKSB8fAogCSAgICAhaXNkaWdpdChwWzFdKSB8fApAQCAtNzMwLDgzICs3NTksNjAgQEAKIAkgICAgIWlzZGlnaXQocFszXSkgfHwKIAkgICAgIWlzZGlnaXQocFs0XSkgfHwKIAkgICAgKHBbNV0gIT0gJ1xuJykpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfVElNRVpPTkUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCB0aW1lIHpvbmUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9USU1FWk9ORSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIHRpbWUgem9uZSIpOwogCXAgKz0gNjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmc2NrX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpidWZmZXIsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQorc3RhdGljIGludCBmc2NrX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7Ci0Jc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgb2lkOwotCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OwotCXVuc2lnbmVkIHBhcmVudF9jb3VudCwgcGFyZW50X2xpbmVfY291bnQgPSAwLCBhdXRob3JfY291bnQ7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgcGFyZW50X29pZDsKKwl1bnNpZ25lZCBhdXRob3JfY291bnQ7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpidWZmZXJfYmVnaW4gPSBidWZmZXI7CiAJY29uc3QgY2hhciAqcDsKIAotCWlmICh2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucykpCisJaWYgKHZlcmlmeV9oZWFkZXJzKGJ1ZmZlciwgc2l6ZSwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKSkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0cmVlICIsICZidWZmZXIpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UUkVFLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTUlTU0lOR19UUkVFLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOwogCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnRyZWVfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgewotCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19CQURfVFJFRV9TSEExLCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19CQURfVFJFRV9TSEExLCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJYnVmZmVyID0gcCArIDE7CiAJd2hpbGUgKHNraXBfcHJlZml4KGJ1ZmZlciwgInBhcmVudCAiLCAmYnVmZmVyKSkgewotCQlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZvaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19CQURfUEFSRU5UX1NIQTEsICJpbnZhbGlkICdwYXJlbnQnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmcGFyZW50X29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKKwkJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX0JBRF9QQVJFTlRfU0hBMSwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWJ1ZmZlciA9IHAgKyAxOwotCQlwYXJlbnRfbGluZV9jb3VudCsrOwotCX0KLQlncmFmdCA9IGxvb2t1cF9jb21taXRfZ3JhZnQodGhlX3JlcG9zaXRvcnksICZjb21taXQtPm9iamVjdC5vaWQpOwotCXBhcmVudF9jb3VudCA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7Ci0JaWYgKGdyYWZ0KSB7Ci0JCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xICYmICFwYXJlbnRfY291bnQpCi0JCQk7IC8qIHNoYWxsb3cgY29tbWl0ICovCi0JCWVsc2UgaWYgKGdyYWZ0LT5ucl9wYXJlbnQgIT0gcGFyZW50X2NvdW50KSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX0dSQUZULCAiZ3JhZnQgb2JqZWN0cyBtaXNzaW5nIik7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGFyZW50X2NvdW50ICE9IHBhcmVudF9saW5lX2NvdW50KSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1BBUkVOVCwgInBhcmVudCBvYmplY3RzIG1pc3NpbmciKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQogCX0KIAlhdXRob3JfY291bnQgPSAwOwogCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJhdXRob3IgIiwgJmJ1ZmZlcikpIHsKIAkJYXV0aG9yX2NvdW50Kys7Ci0JCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgJmNvbW1pdC0+b2JqZWN0LCBvcHRpb25zKTsKKwkJZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCBvaWQsIE9CSl9DT01NSVQsIG9wdGlvbnMpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGF1dGhvcl9jb3VudCA8IDEpCi0JCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfQVVUSE9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnYXV0aG9yJyBsaW5lIik7CisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfQVVUSE9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnYXV0aG9yJyBsaW5lIik7CiAJZWxzZSBpZiAoYXV0aG9yX2NvdW50ID4gMSkKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTVVMVElQTEVfQVVUSE9SUywgImludmFsaWQgZm9ybWF0IC0gbXVsdGlwbGUgJ2F1dGhvcicgbGluZXMiKTsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTVVMVElQTEVfQVVUSE9SUywgImludmFsaWQgZm9ybWF0IC0gbXVsdGlwbGUgJ2F1dGhvcicgbGluZXMiKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAiY29tbWl0dGVyICIsICZidWZmZXIpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19DT01NSVRURVIsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdjb21taXR0ZXInIGxpbmUiKTsKLQllcnIgPSBmc2NrX2lkZW50KCZidWZmZXIsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucyk7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19NSVNTSU5HX0NPTU1JVFRFUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2NvbW1pdHRlcicgbGluZSIpOworCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmICghZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCkpIHsKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUUsICJjb3VsZCBub3QgbG9hZCBjb21taXQncyB0cmVlICVzIiwgb2lkX3RvX2hleCgmdHJlZV9vaWQpKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQogCWlmIChtZW1jaHIoYnVmZmVyX2JlZ2luLCAnXDAnLCBzaXplKSkgewotCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19OVUxfSU5fQ09NTUlULAorCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19OVUxfSU5fQ09NTUlULAogCQkJICAgICAiTlVMIGJ5dGUgaW4gdGhlIGNvbW1pdCBvYmplY3QgYm9keSIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTgxNCw5MSArODIwLDYwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNja19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpkYXRhLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3N0YXRpYyBpbnQgZnNja190YWcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpidWZmZXIsCisJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7Ci0JY29uc3QgY2hhciAqYnVmZmVyID0gZGF0YSA/ICBkYXRhIDogZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCAmc2l6ZSk7Ci0JaW50IHJldCA9IGZzY2tfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlciwgc2l6ZSwgb3B0aW9ucyk7Ci0JaWYgKCFkYXRhKQotCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGZzY2tfdGFnX2J1ZmZlcihzdHJ1Y3QgdGFnICp0YWcsIGNvbnN0IGNoYXIgKmRhdGEsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQotewotCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBvYmplY3RfaWQgdGFnZ2VkX29pZDsKIAlpbnQgcmV0ID0gMDsKLQljb25zdCBjaGFyICpidWZmZXI7Ci0JY2hhciAqdG9fZnJlZSA9IE5VTEwsICplb2w7CisJY2hhciAqZW9sOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpwOwogCi0JaWYgKGRhdGEpCi0JCWJ1ZmZlciA9IGRhdGE7Ci0JZWxzZSB7Ci0JCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKLQotCQlidWZmZXIgPSB0b19mcmVlID0KLQkJCXJlYWRfb2JqZWN0X2ZpbGUoJnRhZy0+b2JqZWN0Lm9pZCwgJnR5cGUsICZzaXplKTsKLQkJaWYgKCFidWZmZXIpCi0JCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwKLQkJCQlGU0NLX01TR19NSVNTSU5HX1RBR19PQkpFQ1QsCi0JCQkJImNhbm5vdCByZWFkIHRhZyBvYmplY3QiKTsKLQotCQlpZiAodHlwZSAhPSBPQkpfVEFHKSB7Ci0JCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LAotCQkJCUZTQ0tfTVNHX1RBR19PQkpFQ1RfTk9UX1RBRywKLQkJCQkiZXhwZWN0ZWQgdGFnIGdvdCAlcyIsCi0JCQkgICAgdHlwZV9uYW1lKHR5cGUpKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCXJldCA9IHZlcmlmeV9oZWFkZXJzKGJ1ZmZlciwgc2l6ZSwgJnRhZy0+b2JqZWN0LCBvcHRpb25zKTsKKwlyZXQgPSB2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsIG9pZCwgT0JKX1RBRywgb3B0aW9ucyk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJvYmplY3QgIiwgJmJ1ZmZlcikpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19PQkpFQ1QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdvYmplY3QnIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19PQkpFQ1QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdvYmplY3QnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZvaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9PQkpFQ1RfU0hBMSwgImludmFsaWQgJ29iamVjdCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnRhZ2dlZF9vaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX0JBRF9PQkpFQ1RfU0hBMSwgImludmFsaWQgJ29iamVjdCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQlpZiAocmV0KQogCQkJZ290byBkb25lOwogCX0KIAlidWZmZXIgPSBwICsgMTsKIAogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHlwZSAiLCAmYnVmZmVyKSkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RZUEVfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0eXBlJyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRV9FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAllb2wgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKIAlpZiAoIWVvbCkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RZUEUsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRSwgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAlpZiAodHlwZV9mcm9tX3N0cmluZ19nZW50bHkoYnVmZmVyLCBlb2wgLSBidWZmZXIsIDEpIDwgMCkKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RZUEUsICJpbnZhbGlkICd0eXBlJyB2YWx1ZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19CQURfVFlQRSwgImludmFsaWQgJ3R5cGUnIHZhbHVlIik7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCWJ1ZmZlciA9IGVvbCArIDE7CiAKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZyAiLCAmYnVmZmVyKSkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RBR19FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZycgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBR19FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZycgbGluZSIpOwogCQlnb3RvIGRvbmU7CiAJfQogCWVvbCA9IHN0cmNocihidWZmZXIsICdcbicpOwogCWlmICghZW9sKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVEFHLCAiaW52YWxpZCBmb3JtYXQgLSB1bmV4cGVjdGVkIGVuZCBhZnRlciAndHlwZScgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBRywgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAlzdHJidWZfYWRkZigmc2IsICJyZWZzL3RhZ3MvJS4qcyIsIChpbnQpKGVvbCAtIGJ1ZmZlciksIGJ1ZmZlcik7CiAJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiLmJ1ZiwgMCkpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RBR19OQU1FLAotCQkJICAgImludmFsaWQgJ3RhZycgbmFtZTogJS4qcyIsCi0JCQkgICAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLAorCQkJICAgICBGU0NLX01TR19CQURfVEFHX05BTUUsCisJCQkgICAgICJpbnZhbGlkICd0YWcnIG5hbWU6ICUuKnMiLAorCQkJICAgICAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOwogCQlpZiAocmV0KQogCQkJZ290byBkb25lOwogCX0KQEAgLTkwNiwzMiArODgxLDIwIEBACiAKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZ2dlciAiLCAmYnVmZmVyKSkgewogCQkvKiBlYXJseSB0YWdzIGRvIG5vdCBjb250YWluICd0YWdnZXInIGxpbmVzOyB3YXJuIG9ubHkgKi8KLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZG9uZTsKIAl9CiAJZWxzZQotCQlyZXQgPSBmc2NrX2lkZW50KCZidWZmZXIsICZ0YWctPm9iamVjdCwgb3B0aW9ucyk7CisJCXJldCA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfVEFHLCBvcHRpb25zKTsKIAogZG9uZToKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwotCWZyZWUodG9fZnJlZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBmc2NrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIGNvbnN0IGNoYXIgKmRhdGEsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQotewotCXN0cnVjdCBvYmplY3QgKnRhZ2dlZCA9IHRhZy0+dGFnZ2VkOwotCi0JaWYgKCF0YWdnZWQpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19CQURfVEFHX09CSkVDVCwgImNvdWxkIG5vdCBsb2FkIHRhZ2dlZCBvYmplY3QiKTsKLQotCXJldHVybiBmc2NrX3RhZ19idWZmZXIodGFnLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKLX0KLQogc3RydWN0IGZzY2tfZ2l0bW9kdWxlc19kYXRhIHsKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOwogCXN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnM7CiAJaW50IHJldDsKIH07CkBAIC05NDksMTkgKzkxMiwyMiBAQAogCiAJbmFtZSA9IHhtZW1kdXB6KHN1YnNlY3Rpb24sIHN1YnNlY3Rpb25fbGVuKTsKIAlpZiAoY2hlY2tfc3VibW9kdWxlX25hbWUobmFtZSkgPCAwKQotCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsIGRhdGEtPm9iaiwKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAogCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX05BTUUsCiAJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSBuYW1lOiAlcyIsCiAJCQkJICAgIG5hbWUpOwogCWlmICghc3RyY21wKGtleSwgInVybCIpICYmIHZhbHVlICYmCiAJICAgIGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCi0JCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywgZGF0YS0+b2JqLAorCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsCisJCQkJICAgIGRhdGEtPm9pZCwgT0JKX0JMT0IsCiAJCQkJICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfVVJMLAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgdXJsOiAlcyIsCiAJCQkJICAgIHZhbHVlKTsKIAlpZiAoIXN0cmNtcChrZXksICJwYXRoIikgJiYgdmFsdWUgJiYKIAkgICAgbG9va3NfbGlrZV9jb21tYW5kX2xpbmVfb3B0aW9uKHZhbHVlKSkKLQkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLCBkYXRhLT5vYmosCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywKKwkJCQkgICAgZGF0YS0+b2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19QQVRILAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgcGF0aDogJXMiLAogCQkJCSAgICB2YWx1ZSk7CkBAIC05NzAsMTcgKzkzNiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZzY2tfYmxvYihzdHJ1Y3QgYmxvYiAqYmxvYiwgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIGludCBmc2NrX2Jsb2IoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpidWYsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCXN0cnVjdCBmc2NrX2dpdG1vZHVsZXNfZGF0YSBkYXRhOwogCXN0cnVjdCBjb25maWdfb3B0aW9ucyBjb25maWdfb3B0cyA9IHsgMCB9OwogCi0JaWYgKCFvaWRzZXRfY29udGFpbnMoJmdpdG1vZHVsZXNfZm91bmQsICZibG9iLT5vYmplY3Qub2lkKSkKKwlpZiAoIW9pZHNldF9jb250YWlucygmZ2l0bW9kdWxlc19mb3VuZCwgb2lkKSkKIAkJcmV0dXJuIDA7Ci0Jb2lkc2V0X2luc2VydCgmZ2l0bW9kdWxlc19kb25lLCAmYmxvYi0+b2JqZWN0Lm9pZCk7CisJb2lkc2V0X2luc2VydCgmZ2l0bW9kdWxlc19kb25lLCBvaWQpOwogCi0JaWYgKG9iamVjdF9vbl9za2lwbGlzdChvcHRpb25zLCAmYmxvYi0+b2JqZWN0KSkKKwlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9pZCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCFidWYpIHsKQEAgLTk4OSwxOCArOTU1LDE4IEBACiAJCSAqIGJsb2IgdG9vIGdpZ2FudGljIHRvIGxvYWQgaW50byBtZW1vcnkuIExldCdzIGp1c3QgY29uc2lkZXIKIAkJICogdGhhdCBhbiBlcnJvci4KIAkJICovCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgJmJsb2ItPm9iamVjdCwKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9CTE9CLAogCQkJICAgICAgRlNDS19NU0dfR0lUTU9EVUxFU19MQVJHRSwKIAkJCSAgICAgICIuZ2l0bW9kdWxlcyB0b28gbGFyZ2UgdG8gcGFyc2UiKTsKIAl9CiAKLQlkYXRhLm9iaiA9ICZibG9iLT5vYmplY3Q7CisJZGF0YS5vaWQgPSBvaWQ7CiAJZGF0YS5vcHRpb25zID0gb3B0aW9uczsKIAlkYXRhLnJldCA9IDA7CiAJY29uZmlnX29wdHMuZXJyb3JfYWN0aW9uID0gQ09ORklHX0VSUk9SX1NJTEVOVDsKIAlpZiAoZ2l0X2NvbmZpZ19mcm9tX21lbShmc2NrX2dpdG1vZHVsZXNfZm4sIENPTkZJR19PUklHSU5fQkxPQiwKIAkJCQkiLmdpdG1vZHVsZXMiLCBidWYsIHNpemUsICZkYXRhLCAmY29uZmlnX29wdHMpKQotCQlkYXRhLnJldCB8PSByZXBvcnQob3B0aW9ucywgJmJsb2ItPm9iamVjdCwKKwkJZGF0YS5yZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0JMT0IsCiAJCQkJICAgRlNDS19NU0dfR0lUTU9EVUxFU19QQVJTRSwKIAkJCQkgICAiY291bGQgbm90IHBhcnNlIGdpdG1vZHVsZXMgYmxvYiIpOwogCkBAIC0xMDExLDMxICs5NzcsMzMgQEAKIAlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCWlmICghb2JqKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBOVUxMLCBPQkpfTk9ORSwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKIAogCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCi0JCXJldHVybiBmc2NrX2Jsb2IoKHN0cnVjdCBibG9iICopb2JqLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfYmxvYigmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCi0JCXJldHVybiBmc2NrX3RyZWUoKHN0cnVjdCB0cmVlICopIG9iaiwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RyZWUoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKIAlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCi0JCXJldHVybiBmc2NrX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBvYmosIChjb25zdCBjaGFyICopIGRhdGEsCi0JCQlzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfY29tbWl0KCZvYmotPm9pZCwgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7CiAJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQotCQlyZXR1cm4gZnNja190YWcoKHN0cnVjdCB0YWcgKikgb2JqLCAoY29uc3QgY2hhciAqKSBkYXRhLAotCQkJc2l6ZSwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RhZygmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCi0JcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1VOS05PV05fVFlQRSwgInVua25vd24gdHlwZSAnJWQnIChpbnRlcm5hbCBmc2NrIGVycm9yKSIsCi0JCQkgIG9iai0+dHlwZSk7CisJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmb2JqLT5vaWQsIG9iai0+dHlwZSwKKwkJICAgICAgRlNDS19NU0dfVU5LTk9XTl9UWVBFLAorCQkgICAgICAidW5rbm93biB0eXBlICclZCcgKGludGVybmFsIGZzY2sgZXJyb3IpIiwKKwkJICAgICAgb2JqLT50eXBlKTsKIH0KIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQlpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgewotCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZGVzY3JpYmVfb2JqZWN0KG8sIG9iaiksIG1lc3NhZ2UpOworCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZnNja19kZXNjcmliZV9vYmplY3Qobywgb2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAwOwogCX0KLQllcnJvcigib2JqZWN0ICVzOiAlcyIsIGRlc2NyaWJlX29iamVjdChvLCBvYmopLCBtZXNzYWdlKTsKKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG8sIG9pZCksIG1lc3NhZ2UpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDQ3LDcgKzEwMTUsNiBAQAogCiAJb2lkc2V0X2l0ZXJfaW5pdCgmZ2l0bW9kdWxlc19mb3VuZCwgJml0ZXIpOwogCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7Ci0JCXN0cnVjdCBibG9iICpibG9iOwogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJY2hhciAqYnVmOwpAQCAtMTA1NSwyOSArMTAyMiwyMiBAQAogCQlpZiAob2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2RvbmUsIG9pZCkpCiAJCQljb250aW51ZTsKIAotCQlibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7Ci0JCWlmICghYmxvYikgewotCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9iaiwKLQkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCi0JCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWJ1ZikgewotCQkJaWYgKGlzX3Byb21pc29yX29iamVjdCgmYmxvYi0+b2JqZWN0Lm9pZCkpCisJCQlpZiAoaXNfcHJvbWlzb3Jfb2JqZWN0KG9pZCkpCiAJCQkJY29udGludWU7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsICZibG9iLT5vYmplY3QsCisJCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsCisJCQkJICAgICAgb2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX01JU1NJTkcsCiAJCQkJICAgICAgInVuYWJsZSB0byByZWFkIC5naXRtb2R1bGVzIGJsb2IiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHR5cGUgPT0gT0JKX0JMT0IpCi0JCQlyZXQgfD0gZnNja19ibG9iKGJsb2IsIGJ1Ziwgc2l6ZSwgb3B0aW9ucyk7CisJCQlyZXQgfD0gZnNja19ibG9iKG9pZCwgYnVmLCBzaXplLCBvcHRpb25zKTsKIAkJZWxzZQotCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLAorCQkJCSAgICAgIG9pZCwgdHlwZSwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCiAJCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7CiAJCWZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaAppbmRleCBiOTU1OTVhLi42OWNmNzE1IDEwMDY0NAotLS0gYS9mc2NrLmgKKysrIGIvZnNjay5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogLyogY2FsbGJhY2sgZm9yIGZzY2tfb2JqZWN0LCB0eXBlIGlzIEZTQ0tfRVJST1Igb3IgRlNDS19XQVJOICovCiB0eXBlZGVmIGludCAoKmZzY2tfZXJyb3IpKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCi0Jc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCSAgaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCWludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIHN0cnVjdCBmc2NrX29wdGlvbnMgewogCWZzY2tfd2Fsa19mdW5jIHdhbGs7CkBAIC0zOCw3ICs0MCw3IEBACiAJdW5zaWduZWQgc3RyaWN0OjE7CiAJaW50ICptc2dfdHlwZTsKIAlzdHJ1Y3Qgb2lkc2V0IHNraXBsaXN0OwotCXN0cnVjdCBkZWNvcmF0aW9uICpvYmplY3RfbmFtZXM7CisJa2hfb2lkX21hcF90ICpvYmplY3RfbmFtZXM7CiB9OwogCiAjZGVmaW5lIEZTQ0tfT1BUSU9OU19ERUZBVUxUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMCwgTlVMTCwgT0lEU0VUX0lOSVQgfQpAQCAtNTIsNyArNTQsMTEgQEAKICAqICAgIDAJCWV2ZXJ5dGhpbmcgT0sKICAqLwogaW50IGZzY2tfd2FsayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOwotLyogSWYgTlVMTCBpcyBwYXNzZWQgZm9yIGRhdGEsIHdlIGFzc3VtZSB0aGUgb2JqZWN0IGlzIGxvY2FsIGFuZCByZWFkIGl0LiAqLworCisvKgorICogQmxvYiBvYmplY3RzIG15IHBhc3MgYSBOVUxMIGRhdGEgcG9pbnRlciwgd2hpY2ggaW5kaWNhdGVzIHRoZXkgYXJlIHRvbyBsYXJnZQorICogdG8gZml0IGluIG1lbW9yeS4gQWxsIG90aGVyIHR5cGVzIG11c3QgcGFzcyBhIHJlYWwgYnVmZmVyLgorICovCiBpbnQgZnNja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CiAKQEAgLTYzLDQgKzY5LDI5IEBACiAgKi8KIGludCBmc2NrX2ZpbmlzaChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKIAorLyoKKyAqIFN1YnN5c3RlbSBmb3Igc3RvcmluZyBodW1hbi1yZWFkYWJsZSBuYW1lcyBmb3IgZWFjaCBvYmplY3QuCisgKgorICogSWYgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgYWxsIG90aGVyIGZ1bmN0aW9ucyBhcmUKKyAqIG5vb3BzLgorICoKKyAqIFVzZSBmc2NrX3B1dF9vYmplY3RfbmFtZSgpIHRvIHNlZWQgaW5pdGlhbCBuYW1lcyAoZS5nLiBmcm9tIHJlZm5hbWVzKTsgdGhlCisgKiBmc2NrIGNvZGUgd2lsbCBleHRlbmQgdGhhdCB3aGlsZSB3YWxraW5nIHRyZWVzLCBldGMuCisgKgorICogVXNlIGZzY2tfZ2V0X29iamVjdF9uYW1lKCkgdG8gZ2V0IGEgc2luZ2xlIG5hbWUgKG9yIE5VTEwgaWYgbm9uZSkuIE9yIHRoZQorICogbW9yZSBjb252ZW5pZW50IGRlc2NyaWJlX29iamVjdCgpLCB3aGljaCBhbHdheXMgcHJvZHVjZXMgYW4gb3V0cHV0IHN0cmluZworICogd2l0aCB0aGUgb2lkIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgKGlmIGFueSkuIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlCisgKiBwb2ludHMgdG8gYSByb3RhdGluZyBhcnJheSBvZiBzdGF0aWMgYnVmZmVycywgYW5kIG1heSBiZSBpbnZhbGlkYXRlZCBieSBhCisgKiBzdWJzZXF1ZW50IGNhbGwuCisgKi8KK3ZvaWQgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworY29uc3QgY2hhciAqZnNja19nZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDMsNCkpKQordm9pZCBmc2NrX3B1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNoYXIgKmZzY2tfZGVzY3JpYmVfb2JqZWN0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnNtb25pdG9yLmMgYi9mc21vbml0b3IuYwppbmRleCAxZjRhYTFiLi4wNDc3NTAwIDEwMDY0NAotLS0gYS9mc21vbml0b3IuYworKysgYi9mc21vbml0b3IuYwpAQCAtNTUsNyArNTUsOCBAQAogCX0KIAlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IGZzbW9uaXRvcl9kaXJ0eTsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApAQCAtODMsNyArODQsOCBAQAogCXVpbnQzMl90IGV3YWhfc2l6ZSA9IDA7CiAJaW50IGZpeHVwID0gMDsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApkaWZmIC0tZ2l0IGEvZ2l0LWN2c2ltcG9ydC5wZXJsIGIvZ2l0LWN2c2ltcG9ydC5wZXJsCmluZGV4IGIzMTYxM2MuLjEwNTdmMzggMTAwNzU1Ci0tLSBhL2dpdC1jdnNpbXBvcnQucGVybAorKysgYi9naXQtY3ZzaW1wb3J0LnBlcmwKQEAgLTYwMCw3ICs2MDAsNyBAQAogc3ViIHBkYXRlKCQpIHsKIAlteSAoJGQpID0gQF87CiAJbSMoXGR7Miw0fSkvKFxkXGQpLyhcZFxkKVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpPyMKLQkJb3IgZGllICJVbnBhcnNlYWJsZSBkYXRlOiAkZFxuIjsKKwkJb3IgZGllICJVbnBhcnNhYmxlIGRhdGU6ICRkXG4iOwogCW15ICR5PSQxOwogCSR5Kz0xMDAgaWYgJHk8NzA7CiAJJHkrPTE5MDAgaWYgJHk8MTAwMDsKZGlmZiAtLWdpdCBhL2dpdC1sZWdhY3ktc3Rhc2guc2ggYi9naXQtbGVnYWN5LXN0YXNoLnNoCmluZGV4IDA3YWQ0YTUuLjUzZmE1NzQgMTAwNzU1Ci0tLSBhL2dpdC1sZWdhY3ktc3Rhc2guc2gKKysrIGIvZ2l0LWxlZ2FjeS1zdGFzaC5zaApAQCAtMTkzLDcgKzE5Myw4IEBACiAJCQlHSVRfSU5ERVhfRklMRT0iJFRNUGluZGV4IiAmJgogCQkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCiAJCQlnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSAteiBIRUFEIC0tICIkQCIgPiIkVE1QLXN0YWdlbmFtZXMiICYmCi0JCQlnaXQgdXBkYXRlLWluZGV4IC16IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gPCIkVE1QLXN0YWdlbmFtZXMiICYmCisJCQlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBcCisJCQkJLXogLS1hZGQgLS1yZW1vdmUgLS1zdGRpbiA8IiRUTVAtc3RhZ2VuYW1lcyIgJiYKIAkJCWdpdCB3cml0ZS10cmVlICYmCiAJCQlybSAtZiAiJFRNUGluZGV4IgogCQkpICkgfHwKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IDVmOTJjODkuLmRjOTU2NTYgMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtMTIyOCw3ICsxMjI4LDcgQEAKICMgZG9tYWluIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0aGUgSVAgYWRkcmVzcyBpbiB0aGUgSEVMTy9FSExPCiAjIGhhbmRzaGFrZS4gVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGUgY29ubmVjdGlvbiBhbmQgcHJldmVudAogIyBzcGFtbWVycyBmcm9tIHRyeWluZyB0byBoaWRlIHRoZWlyIGlkZW50aXR5LiBJZiB0aGUgRE5TIGFuZCBJUCBkb24ndAotIyBtYXRjaCwgdGhlIHJlY2VpdmVpbmcgTVRBIG1heSBkZW55IHRoZSBjb25uZWN0aW9uLgorIyBtYXRjaCwgdGhlIHJlY2VpdmluZyBNVEEgbWF5IGRlbnkgdGhlIGNvbm5lY3Rpb24uCiAjCiAjIEhlcmUgaXMgYSBkZW55IGV4YW1wbGUgb2YgTmV0OjpTTVRQIHdpdGggdGhlIGRlZmF1bHQgImxvY2FsaG9zdC5sb2NhbGRvbWFpbiIKICMKZGlmZiAtLWdpdCBhL2dpdC1zdm4ucGVybCBiL2dpdC1zdm4ucGVybAppbmRleCAwNTBmMmEzLi40YWEyMDhmIDEwMDc1NQotLS0gYS9naXQtc3ZuLnBlcmwKKysrIGIvZ2l0LXN2bi5wZXJsCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkkX3RlbXBsYXRlLCAkX3NoYXJlZCwKIAkkX3ZlcnNpb24sICRfZmV0Y2hfYWxsLCAkX25vX3JlYmFzZSwgJF9mZXRjaF9wYXJlbnQsCiAJJF9iZWZvcmUsICRfYWZ0ZXIsCi0JJF9tZXJnZSwgJF9zdHJhdGVneSwgJF9wcmVzZXJ2ZV9tZXJnZXMsICRfZHJ5X3J1biwgJF9wYXJlbnRzLCAkX2xvY2FsLAorCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfcmViYXNlX21lcmdlcywgJF9kcnlfcnVuLCAkX3BhcmVudHMsICRfbG9jYWwsCiAJJF9wcmVmaXgsICRfbm9fY2hlY2tvdXQsICRfdXJsLCAkX3ZlcmJvc2UsCiAJJF9jb21taXRfdXJsLCAkX3RhZywgJF9tZXJnZV9pbmZvLCAkX2ludGVyYWN0aXZlLCAkX3NldF9zdm5fcHJvcHMpOwogCkBAIC0yNzAsNyArMjcwLDggQEAKIAkJCSAgJ2xvY2FsfGwnID0+IFwkX2xvY2FsLAogCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAogCQkJICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAotCQkJICAncHJlc2VydmUtbWVyZ2VzfHAnID0+IFwkX3ByZXNlcnZlX21lcmdlcywKKwkJCSAgJ3JlYmFzZS1tZXJnZXN8cCcgPT4gXCRfcmViYXNlX21lcmdlcywKKwkJCSAgJ3ByZXNlcnZlLW1lcmdlc3xwJyA9PiBcJF9yZWJhc2VfbWVyZ2VzLAogCQkJICAlZmNfb3B0cyB9IF0sCiAJJ2NvbW1pdC1kaWZmJyA9PiBbIFwmY21kX2NvbW1pdF9kaWZmLAogCSAgICAgICAgICAgICAgICAgICAnQ29tbWl0IGEgZGlmZiBiZXR3ZWVuIHR3byB0cmVlcycsCkBAIC0xMDU0LDcgKzEwNTUsNyBAQAogCQkJCQkgICdJZiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gY29tbWl0ICcsCiAJCQkJCSAgIm1lcmdlcywgdHJ5IHJ1bm5pbmc6XG5cdCIsCiAJCQkJCSAgJ2dpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZScsCi0JCQkJCSAgJy0tcHJlc2VydmUtbWVyZ2VzICcsCisJCQkJCSAgJy0tcmViYXNlLW1lcmdlcyAnLAogCQkJCQkgICRncy0+cmVmbmFtZSwKIAkJCQkJICAiXG5CZWZvcmUgZGNvbW1pdHRpbmciOwogCQkJCX0KQEAgLTE3MTcsNyArMTcxOCw3IEBACiAJcHVzaCBAY21kLCAnLXYnIGlmICRfdmVyYm9zZTsKIAlwdXNoIEBjbWQsIHF3Ly0tbWVyZ2UvIGlmICRfbWVyZ2U7CiAJcHVzaCBAY21kLCAiLS1zdHJhdGVneT0kX3N0cmF0ZWd5IiBpZiAkX3N0cmF0ZWd5OwotCXB1c2ggQGNtZCwgIi0tcHJlc2VydmUtbWVyZ2VzIiBpZiAkX3ByZXNlcnZlX21lcmdlczsKKwlwdXNoIEBjbWQsICItLXJlYmFzZS1tZXJnZXMiIGlmICRfcmViYXNlX21lcmdlczsKIAlAY21kOwogfQogCmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKaW5kZXggN2ZlZjE5Zi4uMGY4NTdkNyAxMDA3NTUKLS0tIGEvZ2l0d2ViL2dpdHdlYi5wZXJsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMTY1NywxNSArMTY1NywxNSBAQAogCW15ICRjbnRybCA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCi0JCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgIChIVCkKLQkJIlxuIiA9PiAnXG4nLCAgICMgbGluZSBmZWVkICAgICAgKExGKQotCQkiXHIiID0+ICdccicsICAgIyBjYXJyaWdlIHJldHVybiAoQ1IpCi0JCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgIChGRikKLQkJIlxiIiA9PiAnXGInLCAgICMgYmFja3NwYWNlICAgICAgKEJTKQotCQkiXGEiID0+ICdcYScsICAgIyBhbGFybSAoYmVsbCkgICAoQkVMKQotCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAoRVNDKQotCQkiXDAxMyIgPT4gJ1x2JywgIyB2ZXJ0aWNhbCB0YWIgICAoVlQpCi0JCSJcMDAwIiA9PiAnXDAnLCAjIG51bCBjaGFyYWN0ZXIgIChOVUwpCisJCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgICAoSFQpCisJCSJcbiIgPT4gJ1xuJywgICAjIGxpbmUgZmVlZCAgICAgICAoTEYpCisJCSJcciIgPT4gJ1xyJywgICAjIGNhcnJpYWdlIHJldHVybiAoQ1IpCisJCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgICAoRkYpCisJCSJcYiIgPT4gJ1xiJywgICAjIGJhY2tzcGFjZSAgICAgICAoQlMpCisJCSJcYSIgPT4gJ1xhJywgICAjIGFsYXJtIChiZWxsKSAgICAoQkVMKQorCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAgKEVTQykKKwkJIlwwMTMiID0+ICdcdicsICMgdmVydGljYWwgdGFiICAgIChWVCkKKwkJIlwwMDAiID0+ICdcMCcsICMgbnVsIGNoYXJhY3RlciAgIChOVUwpCiAJKTsKIAlteSAkY2hyID0gKCAoZXhpc3RzICRlc3skY250cmx9KQogCQkgICAgPyAkZXN7JGNudHJsfQpAQCAtNDA0OCw3ICs0MDQ4LDcgQEAKIAogCQkJJGhyZWZfcGFyYW1zeydleHRyYV9vcHRpb25zJ30gPSB1bmRlZjsKIAkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSAkdHlwZTsKLQkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBocmVmKCVocmVmX3BhcmFtcyk7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gZXNjX2F0dHIoaHJlZiglaHJlZl9wYXJhbXMpKTsKIAkJCXByaW50ICI8bGluayAiLgogCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCiAJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCkBAIC00MDU3LDcgKzQwNTcsNyBAQAogCQkJICAgICAgIi8+XG4iOwogCiAJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9ICctLW5vLW1lcmdlcyc7Ci0JCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGVzY19hdHRyKGhyZWYoJWhyZWZfcGFyYW1zKSk7CiAJCQkkbGlua19hdHRyeyctdGl0bGUnfSAuPSAnIChubyBtZXJnZXMpJzsKIAkJCXByaW50ICI8bGluayAiLgogCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCkBAIC00MDcwLDEwICs0MDcwLDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGxpc3QiICcuCiAJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIC8+Jy4iXG4iLAotCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksIGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSk7CisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwKKwkJICAgICAgIGVzY19hdHRyKGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSkpOwogCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgZmVlZHMiICcuCiAJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQveC1vcG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLCBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIikpOworCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksCisJCSAgICAgICBlc2NfYXR0cihocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIikpKTsKIAl9CiB9CiAKQEAgLTQyODcsOCArNDI4OSw4IEBACiAJaWYgKGRlZmluZWQgJGFjdGlvbiAmJgogCSAgICAkYWN0aW9uIGVxICdibGFtZV9pbmNyZW1lbnRhbCcpIHsKIAkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KLQkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkgLnFxISIsXG4hLgotCQkgICAgICBxcSEgICAgICAgICAgICIhLiBocmVmKCkgLnFxISIpO1xuIS4KKwkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gZXNjX2F0dHIoaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkpIC5xcSEiLFxuIS4KKwkJICAgICAgcXEhICAgICAgICAgICAiIS4gZXNjX2F0dHIoaHJlZigpKSAucXEhIik7XG4hLgogCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CiAJfSBlbHNlIHsKIAkJbXkgKCRqc3RpbWV6b25lLCAkdHpfY29va2llLCAkZGF0ZXRpbWVfY2xhc3MpID0KQEAgLTcxNTUsOCArNzE1Nyw4IEBACiAJCQlwcmludCBxcSEgYWx0PSIhLmVzY19hdHRyKCRmaWxlX25hbWUpLnFxISIgdGl0bGU9IiEuZXNjX2F0dHIoJGZpbGVfbmFtZSkucXEhIiE7CiAJCX0KIAkJcHJpbnQgcXEhIHNyYz0iISAuCi0JCSAgICAgIGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2g9PiRoYXNoLAotCQkgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSAuCisJCSAgICAgIGVzY19hdHRyKGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2g9PiRoYXNoLAorCQkgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSkgLgogCQkgICAgICBxcSEiIC8+XG4hOwogCX0gZWxzZSB7CiAJCW15ICRucjsKQEAgLTgyMzksNiArODI0MSw3IEBACiAJfSBlbHNlIHsKIAkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJzdW1tYXJ5Iik7CiAJfQorCSRhbHRfdXJsID0gZXNjX2F0dHIoJGFsdF91cmwpOwogCXByaW50IHFxITw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4hOwogCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CiAJCXByaW50IDw8WE1MOwpAQCAtODI3Niw3ICs4Mjc5LDcgQEAKIAkJICAgICAgJGFsdF91cmwgLiAnIiAvPicgLiAiXG4iIC4KIAkJICAgICAgJzxsaW5rIHJlbD0ic2VsZiIgdHlwZT0iJyAuICRjb250ZW50X3R5cGUgLiAnIiBocmVmPSInIC4KIAkJICAgICAgJGNnaS0+c2VsZl91cmwoKSAuICciIC8+JyAuICJcbiIgLgotCQkgICAgICAiPGlkPiIgLiBocmVmKC1mdWxsPT4xKSAuICI8L2lkPlxuIiAuCisJCSAgICAgICI8aWQ+IiAuIGVzY191cmwoaHJlZigtZnVsbD0+MSkpIC4gIjwvaWQ+XG4iIC4KIAkJICAgICAgIyB1c2UgcHJvamVjdCBvd25lciBmb3IgZmVlZCBhdXRob3IKIAkJICAgICAgIjxhdXRob3I+PG5hbWU+JG93bmVyPC9uYW1lPjwvYXV0aG9yPlxuIjsKIAkJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKQEAgLTgzMjIsNyArODMyNSw3IEBACiAJCQkgICAgICAiPGF1dGhvcj4iIC4gZXNjX2h0bWwoJGNveydhdXRob3InfSkgLiAiPC9hdXRob3I+XG4iIC4KIAkJCSAgICAgICI8cHViRGF0ZT4kY2R7J3JmYzI4MjInfTwvcHViRGF0ZT5cbiIgLgogCQkJICAgICAgIjxndWlkIGlzUGVybWFMaW5rPVwidHJ1ZVwiPiRjb191cmw8L2d1aWQ+XG4iIC4KLQkJCSAgICAgICI8bGluaz4kY29fdXJsPC9saW5rPlxuIiAuCisJCQkgICAgICAiPGxpbms+IiAuIGVzY19odG1sKCRjb191cmwpIC4gIjwvbGluaz5cbiIgLgogCQkJICAgICAgIjxkZXNjcmlwdGlvbj4iIC4gZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICI8L2Rlc2NyaXB0aW9uPlxuIiAuCiAJCQkgICAgICAiPGNvbnRlbnQ6ZW5jb2RlZD4iIC4KIAkJCSAgICAgICI8IVtDREFUQVtcbiI7CkBAIC04MzQ0LDggKzgzNDcsOCBAQAogCQkJfQogCQkJcHJpbnQgIjwvY29udHJpYnV0b3I+XG4iIC4KIAkJCSAgICAgICI8cHVibGlzaGVkPiRjZHsnaXNvLTg2MDEnfTwvcHVibGlzaGVkPlxuIiAuCi0JCQkgICAgICAiPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgdHlwZT1cInRleHQvaHRtbFwiIGhyZWY9XCIkY29fdXJsXCIgLz5cbiIgLgotCQkJICAgICAgIjxpZD4kY29fdXJsPC9pZD5cbiIgLgorCQkJICAgICAgIjxsaW5rIHJlbD1cImFsdGVybmF0ZVwiIHR5cGU9XCJ0ZXh0L2h0bWxcIiBocmVmPVwiIiAuIGVzY19hdHRyKCRjb191cmwpIC4gIlwiIC8+XG4iIC4KKwkJCSAgICAgICI8aWQ+IiAuIGVzY19odG1sKCRjb191cmwpIC4gIjwvaWQ+XG4iIC4KIAkJCSAgICAgICI8Y29udGVudCB0eXBlPVwieGh0bWxcIiB4bWw6YmFzZT1cIiIgLiBlc2NfdXJsKCRteV91cmwpIC4gIlwiPlxuIiAuCiAJCQkgICAgICAiPGRpdiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj5cbiI7CiAJCX0KQEAgLTg0NTIsOCArODQ1NSw4IEBACiAJCX0KIAogCQlteSAkcGF0aCA9IGVzY19odG1sKGNob3Bfc3RyKCRwcm9qeydwYXRoJ30sIDI1LCA1KSk7Ci0JCW15ICRyc3MgID0gaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpOwotCQlteSAkaHRtbCA9IGhyZWYoJ3Byb2plY3QnID0+ICRwcm9qeydwYXRoJ30sICdhY3Rpb24nID0+ICdzdW1tYXJ5JywgLWZ1bGwgPT4gMSk7CisJCW15ICRyc3MgID0gZXNjX2F0dHIoaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpKTsKKwkJbXkgJGh0bWwgPSBlc2NfYXR0cihocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAnc3VtbWFyeScsIC1mdWxsID0+IDEpKTsKIAkJcHJpbnQgIjxvdXRsaW5lIHR5cGU9XCJyc3NcIiB0ZXh0PVwiJHBhdGhcIiB0aXRsZT1cIiRwYXRoXCIgeG1sVXJsPVwiJHJzc1wiIGh0bWxVcmw9XCIkaHRtbFwiLz5cbiI7CiAJfQogCXByaW50IDw8WE1MOwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCmluZGV4IGQ2MDExNWMuLjEzMWU3ZDUgMTAwNjQ0Ci0tLSBhL2dwZy1pbnRlcmZhY2UuYworKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTEwNSw2ICsxMDUsMTYgQEAKIAl7IDAsICJWQUxJRFNJRyAiLCBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UIH0sCiB9OwogCitzdGF0aWMgdm9pZCByZXBsYWNlX2NzdHJpbmcoY2hhciAqKmZpZWxkLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuZXh0KQoreworCWZyZWUoKmZpZWxkKTsKKworCWlmIChsaW5lICYmIG5leHQpCisJCSpmaWVsZCA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwllbHNlCisJCSpmaWVsZCA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIHBhcnNlX2dwZ19vdXRwdXQoc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKIHsKIAljb25zdCBjaGFyICpidWYgPSBzaWdjLT5ncGdfc3RhdHVzOwpAQCAtMTM2LDMzICsxNDYsNDMgQEAKIAkJCQkvKiBEbyB3ZSBoYXZlIGtleSBpbmZvcm1hdGlvbj8gKi8KIAkJCQlpZiAoc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5mbGFncyAmIEdQR19TVEFUVVNfS0VZSUQpIHsKIAkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOwotCQkJCQlmcmVlKHNpZ2MtPmtleSk7Ci0JCQkJCXNpZ2MtPmtleSA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5rZXksIGxpbmUsIG5leHQpOwogCQkJCQkvKiBEbyB3ZSBoYXZlIHNpZ25lciBpbmZvcm1hdGlvbj8gKi8KIAkJCQkJaWYgKCpuZXh0ICYmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLmZsYWdzICYgR1BHX1NUQVRVU19VSUQpKSB7CiAJCQkJCQlsaW5lID0gbmV4dCArIDE7CiAJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOwotCQkJCQkJZnJlZShzaWdjLT5zaWduZXIpOwotCQkJCQkJc2lnYy0+c2lnbmVyID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5zaWduZXIsIGxpbmUsIG5leHQpOwogCQkJCQl9CiAJCQkJfQogCQkJCS8qIERvIHdlIGhhdmUgZmluZ2VycHJpbnQ/ICovCiAJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UKSB7Ci0JCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJyAnKTsKLQkJCQkJZnJlZShzaWdjLT5maW5nZXJwcmludCk7Ci0JCQkJCXNpZ2MtPmZpbmdlcnByaW50ID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQljb25zdCBjaGFyICpsaW1pdDsKKwkJCQkJY2hhciAqKmZpZWxkOwogCi0JCQkJCS8qIFNraXAgaW50ZXJpbSBmaWVsZHMgKi8KKwkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOworCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPmZpbmdlcnByaW50LCBsaW5lLCBuZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGludGVyaW0gZmllbGRzLiAgVGhlIHNlYXJjaCBpcworCQkJCQkgKiBsaW1pdGVkIHRvIHRoZSBzYW1lIGxpbmUgc2luY2Ugb25seQorCQkJCQkgKiBPcGVuUEdQIHNpZ25hdHVyZXMgaGFzIGEgZmllbGQgd2l0aAorCQkJCQkgKiB0aGUgcHJpbWFyeSBmaW5nZXJwcmludC4KKwkJCQkJICovCisJCQkJCWxpbWl0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOwogCQkJCQlmb3IgKGogPSA5OyBqID4gMDsgai0tKSB7Ci0JCQkJCQlpZiAoISpuZXh0KQorCQkJCQkJaWYgKCEqbmV4dCB8fCBsaW1pdCA8PSBuZXh0KQogCQkJCQkJCWJyZWFrOwogCQkJCQkJbGluZSA9IG5leHQgKyAxOwogCQkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOwogCQkJCQl9CiAKLQkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnXG4nKTsKLQkJCQkJZnJlZShzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludCk7Ci0JCQkJCXNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50ID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQlmaWVsZCA9ICZzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludDsKKwkJCQkJaWYgKCFqKSB7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKGZpZWxkLCBsaW5lLCBuZXh0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlcGxhY2VfY3N0cmluZyhmaWVsZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KIAkJCQl9CiAKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCmluZGV4IGY1MzEzNTQuLmUzZmQwZWEgMTAwNjQ0Ci0tLSBhL2dyYXBoLmMKKysrIGIvZ3JhcGguYwpAQCAtMTEyLDE0ICsxMTIsNDIgQEAKIAlyZXR1cm4gY29sdW1uX2NvbG9yc1tjb2xvcl07CiB9CiAKLXN0YXRpYyB2b2lkIHN0cmJ1Zl93cml0ZV9jb2x1bW4oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb2x1bW4gKmMsCi0JCQkJY2hhciBjb2xfY2hhcikKK3N0cnVjdCBncmFwaF9saW5lIHsKKwlzdHJ1Y3Qgc3RyYnVmICpidWY7CisJc2l6ZV90IHdpZHRoOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkY2goc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIGludCBjKQoreworCXN0cmJ1Zl9hZGRjaChsaW5lLT5idWYsIGMpOworCWxpbmUtPndpZHRoKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNoYXJzKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBpbnQgYywgc2l6ZV90IG4pCit7CisJc3RyYnVmX2FkZGNoYXJzKGxpbmUtPmJ1ZiwgYywgbik7CisJbGluZS0+d2lkdGggKz0gbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkc3RyKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBjb25zdCBjaGFyICpzKQoreworCXN0cmJ1Zl9hZGRzdHIobGluZS0+YnVmLCBzKTsKKwlsaW5lLT53aWR0aCArPSBzdHJsZW4ocyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNvbG9yKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCB1bnNpZ25lZCBzaG9ydCBjb2xvcikKK3sKKwlzdHJidWZfYWRkc3RyKGxpbmUtPmJ1ZiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGNvbG9yKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBjb25zdCBzdHJ1Y3QgY29sdW1uICpjLAorCQkJCSAgICBjaGFyIGNvbF9jaGFyKQogewogCWlmIChjLT5jb2xvciA8IGNvbHVtbl9jb2xvcnNfbWF4KQotCQlzdHJidWZfYWRkc3RyKHNiLCBjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoYy0+Y29sb3IpKTsKLQlzdHJidWZfYWRkY2goc2IsIGNvbF9jaGFyKTsKKwkJZ3JhcGhfbGluZV9hZGRjb2xvcihsaW5lLCBjLT5jb2xvcik7CisJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCBjb2xfY2hhcik7CiAJaWYgKGMtPmNvbG9yIDwgY29sdW1uX2NvbG9yc19tYXgpCi0JCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbHVtbl9nZXRfY29sb3JfY29kZShjb2x1bW5fY29sb3JzX21heCkpOworCQlncmFwaF9saW5lX2FkZGNvbG9yKGxpbmUsIGNvbHVtbl9jb2xvcnNfbWF4KTsKIH0KIAogc3RydWN0IGdpdF9ncmFwaCB7CkBAIC0xNzUsOSArMjAzLDYzIEBACiAJICovCiAJaW50IHByZXZfY29tbWl0X2luZGV4OwogCS8qCisJICogV2hpY2ggbGF5b3V0IHZhcmlhbnQgdG8gdXNlIHRvIGRpc3BsYXkgbWVyZ2UgY29tbWl0cy4gSWYgdGhlCisJICogY29tbWl0J3MgZmlyc3QgcGFyZW50IGlzIGtub3duIHRvIGJlIGluIGEgY29sdW1uIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIG1lcmdlLCB0aGVuIHRoaXMgdmFsdWUgaXMgMCBhbmQgd2UgdXNlIHRoZSBsYXlvdXQgb24gdGhlIGxlZnQuCisJICogT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgMSBhbmQgdGhlIGxheW91dCBvbiB0aGUgcmlnaHQgaXMgdXNlZC4gVGhpcworCSAqIGZpZWxkIHRlbGxzIHVzIGhvdyBtYW55IGNvbHVtbnMgdGhlIGZpcnN0IHBhcmVudCBvY2N1cGllcy4KKwkgKgorCSAqIAkJMCkJCQkxKQorCSAqCisJICogCQl8IHwgfCAqLS4JCXwgfCAqLS0tLgorCSAqIAkJfCB8X3wvfFwgXAkJfCB8IHxcIFwgXAorCSAqIAkJfC98IHwgfCB8IHwJCXwgfCB8IHwgfCAqCisJICovCisJaW50IG1lcmdlX2xheW91dDsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhZGRlZCB0byB0aGUgZ3JhcGggYnkgdGhlIGN1cnJlbnQgY29tbWl0LiBGb3IKKwkgKiAyLXdheSBhbmQgb2N0b3B1cyBtZXJnZXMsIHRoaXMgaXMgaXMgdXN1YWxseSBvbmUgbGVzcyB0aGFuIHRoZQorCSAqIG51bWJlciBvZiBwYXJlbnRzOgorCSAqCisJICogCQl8IHwgfAkJCXwgfCAgICBcCisJICoJCXwgKiB8CQkJfCAqLS0tLiBcCisJICoJCXwgfFwgXAkJCXwgfFwgXCBcIFwKKwkgKgkJfCB8IHwgfCAgICAgICAgIAl8IHwgfCB8IHwgfAorCSAqCisJICoJCW51bV9wYXJlbnRzOiAyCQludW1fcGFyZW50czogNAorCSAqCQllZGdlc19hZGRlZDogMQkJZWRnZXNfYWRkZWQ6IDMKKwkgKgorCSAqIEZvciBsZWZ0LXNrZXdlZCBtZXJnZXMsIHRoZSBmaXJzdCBwYXJlbnQgZnVzZXMgd2l0aCBpdHMgbmVpZ2hib3IgYW5kCisJICogc28gb25lIGxlc3MgY29sdW1uIGlzIGFkZGVkOgorCSAqCisJICoJCXwgfCB8CQkJfCB8ICBcCisJICoJCXwgKiB8CQkJfCAqLS4gXAorCSAqCQl8L3wgfAkJCXwvfFwgXCBcCisJICoJCXwgfCB8CQkJfCB8IHwgfCB8CisJICoKKwkgKgkJbnVtX3BhcmVudHM6IDIJCW51bV9wYXJlbnRzOiA0CisJICoJCWVkZ2VzX2FkZGVkOiAwCQllZGdlc19hZGRlZDogMgorCSAqCisJICogVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgZWRnZXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBtZXJnZSBhcmUKKwkgKiBkaXNwbGF5ZWQgaW4gY29tbWl0IGFuZCBwb3N0LW1lcmdlIGxpbmVzOyBpZiBubyBjb2x1bW5zIGhhdmUgYmVlbgorCSAqIGFkZGVkIHRoZW4gYSB2ZXJ0aWNhbCBsaW5lIHNob3VsZCBiZSB1c2VkIHdoZXJlIGEgcmlnaHQtdHJhY2tpbmcKKwkgKiBsaW5lIHdvdWxkIG90aGVyd2lzZSBiZSB1c2VkLgorCSAqCisJICoJCXwgKiBcCQkJfCAqIHwKKwkgKgkJfCB8XCBcCQkJfC98IHwKKwkgKgkJfCB8ICogXAkJCXwgKiB8CisJICovCisJaW50IGVkZ2VzX2FkZGVkOworCS8qCisJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGFkZGVkIGJ5IHRoZSBwcmV2aW91cyBjb21taXQsIHdoaWNoIGlzIHVzZWQgdG8KKwkgKiBzbW9vdGggZWRnZXMgYXBwZWFyaW5nIHRvIHRoZSByaWdodCBvZiBhIGNvbW1pdCBpbiBhIGNvbW1pdCBsaW5lCisJICogZm9sbG93aW5nIGEgcG9zdC1tZXJnZSBsaW5lLgorCSAqLworCWludCBwcmV2X2VkZ2VzX2FkZGVkOworCS8qCiAJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBjb2x1bW5zCiAJICogYW5kIG5ld19jb2x1bW5zIGFycmF5cy4gIFRoaXMgaXMgYWxzbyBoYWxmIHRoZSBudW1iZXIgb2YgZW50cmllcwotCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcgYXJyYXlzLgorCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgb2xkX21hcHBpbmcgYXJyYXlzLgogCSAqLwogCWludCBjb2x1bW5fY2FwYWNpdHk7CiAJLyoKQEAgLTIxNSwxMiArMjk3LDEyIEBACiAJICovCiAJaW50ICptYXBwaW5nOwogCS8qCi0JICogQSB0ZW1wb3JhcnkgYXJyYXkgZm9yIGNvbXB1dGluZyB0aGUgbmV4dCBtYXBwaW5nIHN0YXRlCi0JICogd2hpbGUgd2UgYXJlIG91dHB1dHRpbmcgYSBtYXBwaW5nIGxpbmUuICBUaGlzIGlzIHN0b3JlZCBhcyBwYXJ0Ci0JICogb2YgdGhlIGdpdF9ncmFwaCBzaW1wbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldwotCSAqIHRlbXBvcmFyeSBhcnJheSBlYWNoIHRpbWUgd2UgaGF2ZSB0byBvdXRwdXQgYSBjb2xsYXBzaW5nIGxpbmUuCisJICogQSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwcGluZyBhcnJheSBmcm9tIHRoZSBsYXN0IGNvbW1pdCwKKwkgKiB3aGljaCB3ZSB1c2UgdG8gaW1wcm92ZSB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIHRoYXQgYXJlIHRyYWNraW5nCisJICogZnJvbSByaWdodCB0byBsZWZ0IHRocm91Z2ggYSBjb21taXQgbGluZS4gIFdlIGFsc28gdXNlIHRoaXMgdG8KKwkgKiBhdm9pZCBhbGxvY2F0aW5nIGEgZnJlc2ggYXJyYXkgd2hlbiB3ZSBjb21wdXRlIHRoZSBuZXh0IG1hcHBpbmcuCiAJICovCi0JaW50ICpuZXdfbWFwcGluZzsKKwlpbnQgKm9sZF9tYXBwaW5nOwogCS8qCiAJICogVGhlIGN1cnJlbnQgZGVmYXVsdCBjb2x1bW4gY29sb3IgYmVpbmcgdXNlZC4gIFRoaXMgaXMKIAkgKiBzdG9yZWQgYXMgYW4gaW5kZXggaW50byB0aGUgYXJyYXkgY29sdW1uX2NvbG9ycy4KQEAgLTI4NSw2ICszNjcsOSBAQAogCWdyYXBoLT5wcmV2X3N0YXRlID0gR1JBUEhfUEFERElORzsKIAlncmFwaC0+Y29tbWl0X2luZGV4ID0gMDsKIAlncmFwaC0+cHJldl9jb21taXRfaW5kZXggPSAwOworCWdyYXBoLT5tZXJnZV9sYXlvdXQgPSAwOworCWdyYXBoLT5lZGdlc19hZGRlZCA9IDA7CisJZ3JhcGgtPnByZXZfZWRnZXNfYWRkZWQgPSAwOwogCWdyYXBoLT5udW1fY29sdW1ucyA9IDA7CiAJZ3JhcGgtPm51bV9uZXdfY29sdW1ucyA9IDA7CiAJZ3JhcGgtPm1hcHBpbmdfc2l6ZSA9IDA7CkBAIC0zMDMsNyArMzg4LDcgQEAKIAlBTExPQ19BUlJBWShncmFwaC0+Y29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CiAJQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKIAlBTExPQ19BUlJBWShncmFwaC0+bWFwcGluZywgMiAqIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwotCUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfbWFwcGluZywgMiAqIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCUFMTE9DX0FSUkFZKGdyYXBoLT5vbGRfbWFwcGluZywgMiAqIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwogCiAJLyoKIAkgKiBUaGUgZGlmZiBvdXRwdXQgcHJlZml4IGNhbGxiYWNrLCB3aXRoIHRoaXMgd2UgY2FuIG1ha2UKQEAgLTMzMyw3ICs0MTgsNyBAQAogCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPmNvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwogCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKIAlSRUFMTE9DX0FSUkFZKGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICogMik7Ci0JUkVBTExPQ19BUlJBWShncmFwaC0+bmV3X21hcHBpbmcsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKiAyKTsKKwlSRUFMTE9DX0FSUkFZKGdyYXBoLT5vbGRfbWFwcGluZywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqIDIpOwogfQogCiAvKgpAQCAtNDMyLDc0ICs1MTcsNzYgQEAKIAlyZXR1cm4gZ3JhcGhfZ2V0X2N1cnJlbnRfY29sdW1uX2NvbG9yKGdyYXBoKTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkJCSAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAotCQkJCQkgIGludCAqbWFwcGluZ19pbmRleCkKK3N0YXRpYyBpbnQgZ3JhcGhfZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewogCWludCBpOwotCi0JLyoKLQkgKiBJZiB0aGUgY29tbWl0IGlzIGFscmVhZHkgaW4gdGhlIG5ld19jb2x1bW5zIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8KLQkgKiBhZGQgaXQuICBKdXN0IHVwZGF0ZSB0aGUgbWFwcGluZyBjb3JyZWN0bHkuCi0JICovCiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgewotCQlpZiAoZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpIHsKLQkJCWdyYXBoLT5tYXBwaW5nWyptYXBwaW5nX2luZGV4XSA9IGk7Ci0JCQkqbWFwcGluZ19pbmRleCArPSAyOwotCQkJcmV0dXJuOwotCQl9CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKKwkJCXJldHVybiBpOwogCX0KLQotCS8qCi0JICogVGhpcyBjb21taXQgaXNuJ3QgYWxyZWFkeSBpbiBuZXdfY29sdW1ucy4gIEFkZCBpdC4KLQkgKi8KLQlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29tbWl0ID0gY29tbWl0OwotCWdyYXBoLT5uZXdfY29sdW1uc1tncmFwaC0+bnVtX25ld19jb2x1bW5zXS5jb2xvciA9IGdyYXBoX2ZpbmRfY29tbWl0X2NvbG9yKGdyYXBoLCBjb21taXQpOwotCWdyYXBoLT5tYXBwaW5nWyptYXBwaW5nX2luZGV4XSA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7Ci0JKm1hcHBpbmdfaW5kZXggKz0gMjsKLQlncmFwaC0+bnVtX25ld19jb2x1bW5zKys7CisJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfd2lkdGgoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkgICAgICAgaW50IGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQorc3RhdGljIHZvaWQgZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIGludCBpZHgpCiB7Ci0JLyoKLQkgKiBDb21wdXRlIHRoZSB3aWR0aCBuZWVkZWQgdG8gZGlzcGxheSB0aGUgZ3JhcGggZm9yIHRoaXMgY29tbWl0LgotCSAqIFRoaXMgaXMgdGhlIG1heGltdW0gd2lkdGggbmVlZGVkIGZvciBhbnkgcm93LiAgQWxsIG90aGVyIHJvd3MKLQkgKiB3aWxsIGJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLgotCSAqCi0JICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHdpZGVzdCByb3c6Ci0JICogQ291bnQgZWFjaCBleGlzdGluZyBjb2x1bW4gKGdyYXBoLT5udW1fY29sdW1ucyksIGFuZCBlYWNoIG5ldwotCSAqIGNvbHVtbiBhZGRlZCBieSB0aGlzIGNvbW1pdC4KLQkgKi8KLQlpbnQgbWF4X2NvbHMgPSBncmFwaC0+bnVtX2NvbHVtbnMgKyBncmFwaC0+bnVtX3BhcmVudHM7CisJaW50IGkgPSBncmFwaF9maW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBjb21taXQpOworCWludCBtYXBwaW5nX2lkeDsKIAogCS8qCi0JICogRXZlbiBpZiB0aGUgY3VycmVudCBjb21taXQgaGFzIG5vIHBhcmVudHMgdG8gYmUgcHJpbnRlZCwgaXQKLQkgKiBzdGlsbCB0YWtlcyB1cCBhIGNvbHVtbiBmb3IgaXRzZWxmLgorCSAqIElmIHRoZSBjb21taXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIG5ld19jb2x1bW5zIGFycmF5LCB0aGVuIGFkZCBpdAorCSAqIGFuZCByZWNvcmQgaXQgYXMgYmVpbmcgaW4gdGhlIGZpbmFsIGNvbHVtbi4KIAkgKi8KLQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzIDwgMSkKLQkJbWF4X2NvbHMrKzsKKwlpZiAoaSA8IDApIHsKKwkJaSA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnMrKzsKKwkJZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9IGNvbW1pdDsKKwkJZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbG9yID0gZ3JhcGhfZmluZF9jb21taXRfY29sb3IoZ3JhcGgsIGNvbW1pdCk7CisJfQogCi0JLyoKLQkgKiBXZSBhZGRlZCBhIGNvbHVtbiBmb3IgdGhlIGN1cnJlbnQgY29tbWl0IGFzIHBhcnQgb2YKLQkgKiBncmFwaC0+bnVtX3BhcmVudHMuICBJZiB0aGUgY3VycmVudCBjb21taXQgd2FzIGFscmVhZHkgaW4KLQkgKiBncmFwaC0+Y29sdW1ucywgdGhlbiB3ZSBoYXZlIGRvdWJsZSBjb3VudGVkIGl0LgotCSAqLwotCWlmIChpc19jb21taXRfaW5fZXhpc3RpbmdfY29sdW1ucykKLQkJbWF4X2NvbHMtLTsKKwlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSAmJiBpZHggPiAtMSAmJiBncmFwaC0+bWVyZ2VfbGF5b3V0ID09IC0xKSB7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhcmVudCBvZiBhIG1lcmdlLCBjaG9vc2UgYSBsYXlvdXQgZm9yCisJCSAqIHRoZSBtZXJnZSBsaW5lIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHBhcmVudCBhcHBlYXJzIGluIGEKKwkJICogY29sdW1uIHRvIHRoZSBsZWZ0IG9mIHRoZSBtZXJnZQorCQkgKi8KKwkJaW50IGRpc3QsIHNoaWZ0OwogCi0JLyoKLQkgKiBFYWNoIGNvbHVtbiB0YWtlcyB1cCAyIHNwYWNlcwotCSAqLwotCWdyYXBoLT53aWR0aCA9IG1heF9jb2xzICogMjsKKwkJZGlzdCA9IGlkeCAtIGk7CisJCXNoaWZ0ID0gKGRpc3QgPiAxKSA/IDIgKiBkaXN0IC0gMyA6IDE7CisKKwkJZ3JhcGgtPm1lcmdlX2xheW91dCA9IChkaXN0ID4gMCkgPyAwIDogMTsKKwkJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gZ3JhcGgtPm51bV9wYXJlbnRzICsgZ3JhcGgtPm1lcmdlX2xheW91dCAgLSAyOworCisJCW1hcHBpbmdfaWR4ID0gZ3JhcGgtPndpZHRoICsgKGdyYXBoLT5tZXJnZV9sYXlvdXQgLSAxKSAqIHNoaWZ0OworCQlncmFwaC0+d2lkdGggKz0gMiAqIGdyYXBoLT5tZXJnZV9sYXlvdXQ7CisKKwl9IGVsc2UgaWYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDAgJiYgaSA9PSBncmFwaC0+bWFwcGluZ1tncmFwaC0+d2lkdGggLSAyXSkgeworCQkvKgorCQkgKiBJZiBzb21lIGNvbHVtbnMgaGF2ZSBiZWVuIGFkZGVkIGJ5IGEgbWVyZ2UsIGJ1dCB0aGlzIGNvbW1pdAorCQkgKiB3YXMgZm91bmQgaW4gdGhlIGxhc3QgZXhpc3RpbmcgY29sdW1uLCB0aGVuIGFkanVzdCB0aGUKKwkJICogbnVtYmVycyBzbyB0aGF0IHRoZSB0d28gZWRnZXMgaW1tZWRpYXRlbHkgam9pbiwgaS5lLjoKKwkJICoKKwkJICoJCSogfAkJKiB8CisJCSAqCQl8XCBcCT0+CXxcfAorCQkgKgkJfCB8LwkJfCAqCisJCSAqCQl8ICoKKwkJICovCisJCW1hcHBpbmdfaWR4ID0gZ3JhcGgtPndpZHRoIC0gMjsKKwkJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gLTE7CisJfSBlbHNlIHsKKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGg7CisJCWdyYXBoLT53aWR0aCArPSAyOworCX0KKworCWdyYXBoLT5tYXBwaW5nW21hcHBpbmdfaWR4XSA9IGk7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OwogCWludCBtYXhfbmV3X2NvbHVtbnM7Ci0JaW50IG1hcHBpbmdfaWR4OwogCWludCBpLCBzZWVuX3RoaXMsIGlzX2NvbW1pdF9pbl9jb2x1bW5zOwogCiAJLyoKQEAgLTUzMiw2ICs2MTksMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQogCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOwogCisJZ3JhcGgtPndpZHRoID0gMDsKKwlncmFwaC0+cHJldl9lZGdlc19hZGRlZCA9IGdyYXBoLT5lZGdlc19hZGRlZDsKKwlncmFwaC0+ZWRnZXNfYWRkZWQgPSAwOworCiAJLyoKIAkgKiBQb3B1bGF0ZSBncmFwaC0+bmV3X2NvbHVtbnMgYW5kIGdyYXBoLT5tYXBwaW5nCiAJICoKQEAgLTU0Miw3ICs2MzMsNiBAQAogCSAqIHN1cHBvc2VkIHRvIGVuZCB1cCBhZnRlciB0aGUgY29sbGFwc2luZyBpcyBwZXJmb3JtZWQuCiAJICovCiAJc2Vlbl90aGlzID0gMDsKLQltYXBwaW5nX2lkeCA9IDA7CiAJaXNfY29tbWl0X2luX2NvbHVtbnMgPSAxOwogCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKIAkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKQEAgLTU1Niw5ICs2NDYsOSBAQAogCQl9CiAKIAkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgewotCQkJaW50IG9sZF9tYXBwaW5nX2lkeCA9IG1hcHBpbmdfaWR4OwogCQkJc2Vlbl90aGlzID0gMTsKIAkJCWdyYXBoLT5jb21taXRfaW5kZXggPSBpOworCQkJZ3JhcGgtPm1lcmdlX2xheW91dCA9IC0xOwogCQkJZm9yIChwYXJlbnQgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOwogCQkJICAgICBwYXJlbnQ7CiAJCQkgICAgIHBhcmVudCA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnQpKSB7CkBAIC01NzEsMjEgKzY2MSwxOCBAQAogCQkJCSAgICAhaXNfY29tbWl0X2luX2NvbHVtbnMpIHsKIAkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CiAJCQkJfQotCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLAotCQkJCQkJCSAgICAgIHBhcmVudC0+aXRlbSwKLQkJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLCBwYXJlbnQtPml0ZW0sIGkpOwogCQkJfQogCQkJLyoKLQkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBtYXBwaW5nX2lkeCBieSBhdAorCQkJICogV2UgYWx3YXlzIG5lZWQgdG8gaW5jcmVtZW50IGdyYXBoLT53aWR0aCBieSBhdAogCQkJICogbGVhc3QgMiwgZXZlbiBpZiBpdCBoYXMgbm8gaW50ZXJlc3RpbmcgcGFyZW50cy4KIAkJCSAqIFRoZSBjdXJyZW50IGNvbW1pdCBhbHdheXMgdGFrZXMgdXAgYXQgbGVhc3QgMgogCQkJICogc3BhY2VzLgogCQkJICovCi0JCQlpZiAobWFwcGluZ19pZHggPT0gb2xkX21hcHBpbmdfaWR4KQotCQkJCW1hcHBpbmdfaWR4ICs9IDI7CisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID09IDApCisJCQkJZ3JhcGgtPndpZHRoICs9IDI7CiAJCX0gZWxzZSB7Ci0JCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwKLQkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CisJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwgLTEpOwogCQl9CiAJfQogCkBAIC01OTUsMTEgKzY4Miw0MyBAQAogCXdoaWxlIChncmFwaC0+bWFwcGluZ19zaXplID4gMSAmJgogCSAgICAgICBncmFwaC0+bWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQogCQlncmFwaC0+bWFwcGluZ19zaXplLS07Cit9CiAKK3N0YXRpYyBpbnQgZ3JhcGhfbnVtX2Rhc2hlZF9wYXJlbnRzKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXJldHVybiBncmFwaC0+bnVtX3BhcmVudHMgKyBncmFwaC0+bWVyZ2VfbGF5b3V0IC0gMzsKK30KKworc3RhdGljIGludCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3Moc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CiAJLyoKLQkgKiBDb21wdXRlIGdyYXBoLT53aWR0aCBmb3IgdGhpcyBjb21taXQKKwkgKiBOb3JtYWxseSwgd2UgbmVlZCB0d28gZXhwYW5zaW9uIHJvd3MgZm9yIGVhY2ggZGFzaGVkIHBhcmVudCBsaW5lIGZyb20KKwkgKiBhbiBvY3RvcHVzIG1lcmdlOgorCSAqCisJICogCQl8ICoKKwkgKiAJCXwgfFwKKwkgKiAJCXwgfCBcCisJICogCQl8IHwgIFwKKwkgKiAJCXwgKi0uIFwKKwkgKiAJCXwgfFwgXCBcCisJICoKKwkgKiBJZiB0aGUgbWVyZ2UgaXMgc2tld2VkIHRvIHRoZSBsZWZ0LCB0aGVuIGl0cyBwYXJlbnRzIG9jY3VweSBvbmUgbGVzcworCSAqIGNvbHVtbiwgYW5kIHdlIGRvbid0IG5lZWQgYXMgbWFueSBleHBhbnNpb24gcm93cyB0byByb3V0ZSBhcm91bmQgaXQ7CisJICogaW4gc29tZSBjYXNlcyB0aGF0IG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGV4cGFuc2lvbiByb3dzIGF0IGFsbDoKKwkgKgorCSAqIAkJfCAqCisJICogCQl8IHxcCisJICogCQl8ICogXAorCSAqIAkJfC98XCBcCiAJICovCi0JZ3JhcGhfdXBkYXRlX3dpZHRoKGdyYXBoLCBpc19jb21taXRfaW5fY29sdW1ucyk7CisJcmV0dXJuIGdyYXBoX251bV9kYXNoZWRfcGFyZW50cyhncmFwaCkgKiAyOworfQorCitzdGF0aWMgaW50IGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlyZXR1cm4gZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkgICAgICAgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSAmJgorCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IGdyYXBoX251bV9leHBhbnNpb25fcm93cyhncmFwaCk7CiB9CiAKIHZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCkBAIC02NTcsOCArNzc2LDcgQEAKIAkgKi8KIAlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX1BBRERJTkcpCiAJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1NLSVA7Ci0JZWxzZSBpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKLQkJIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJZWxzZSBpZiAoZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKIAkJZ3JhcGgtPnN0YXRlID0gR1JBUEhfUFJFX0NPTU1JVDsKIAllbHNlCiAJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX0NPTU1JVDsKQEAgLTY4Niw4ICs4MDQsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF9wYWRfaG9yaXpvbnRhbGx5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYiwKLQkJCQkgICBpbnQgY2hhcnNfd3JpdHRlbikKK3N0YXRpYyB2b2lkIGdyYXBoX3BhZF9ob3Jpem9udGFsbHkoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCS8qCiAJICogQWRkIGFkZGl0aW9uYWwgc3BhY2VzIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmJ1Ziwgc28gdGhhdCBhbGwKQEAgLTY5NiwzNCArODEzLDIyIEBACiAJICogVGhpcyB3YXksIGZpZWxkcyBwcmludGVkIHRvIHRoZSByaWdodCBvZiB0aGUgZ3JhcGggd2lsbCByZW1haW4KIAkgKiBhbGlnbmVkIGZvciB0aGUgZW50aXJlIGNvbW1pdC4KIAkgKi8KLQlpZiAoY2hhcnNfd3JpdHRlbiA8IGdyYXBoLT53aWR0aCkKLQkJc3RyYnVmX2FkZGNoYXJzKHNiLCAnICcsIGdyYXBoLT53aWR0aCAtIGNoYXJzX3dyaXR0ZW4pOworCWlmIChsaW5lLT53aWR0aCA8IGdyYXBoLT53aWR0aCkKKwkJZ3JhcGhfbGluZV9hZGRjaGFycyhsaW5lLCAnICcsIGdyYXBoLT53aWR0aCAtIGxpbmUtPndpZHRoKTsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKKwkJCQkgICAgICBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAlpbnQgaTsKIAogCS8qCi0JICogV2UgY291bGQgY29uY2VpdmFibGUgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGNvbW1pdAotCSAqIGlmIG91ciBjYWxsZXIgaGFzIGEgYnVnLCBhbmQgaW52b2tlcyBncmFwaF9uZXh0X2xpbmUoKQotCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGdyYXBoX2luaXQoKSwgd2l0aG91dCBmaXJzdCBjYWxsaW5nCi0JICogZ3JhcGhfdXBkYXRlKCkuICBSZXR1cm4gd2l0aG91dCBvdXRwdXR0aW5nIGFueXRoaW5nIGluIHRoaXMKLQkgKiBjYXNlLgotCSAqLwotCWlmICghZ3JhcGgtPmNvbW1pdCkKLQkJcmV0dXJuOwotCi0JLyoKIAkgKiBPdXRwdXQgYSBwYWRkaW5nIHJvdywgdGhhdCBsZWF2ZXMgYWxsIGJyYW5jaCBsaW5lcyB1bmNoYW5nZWQKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7Ci0JCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbaV0sICd8Jyk7Ci0JCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgJmdyYXBoLT5uZXdfY29sdW1uc1tpXSwgJ3wnKTsKKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOwogCX0KLQotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX25ld19jb2x1bW5zICogMik7CiB9CiAKIApAQCAtNzMzLDI4ICs4MzgsMjQgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfc2tpcF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9za2lwX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCS8qCiAJICogT3V0cHV0IGFuIGVsbGlwc2lzIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uCiAJICogb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCiAJICovCi0Jc3RyYnVmX2FkZHN0cihzYiwgIi4uLiIpOwotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCAzKTsKKwlncmFwaF9saW5lX2FkZHN0cihsaW5lLCAiLi4uIik7CiAKLQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKLQkgICAgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSkKKwlpZiAoZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKIAkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QUkVfQ09NTUlUKTsKIAllbHNlCiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3ByZV9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCQkJIHN0cnVjdCBzdHJidWYgKnNiKQorCQkJCQkgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7Ci0JaW50IG51bV9leHBhbnNpb25fcm93czsKIAlpbnQgaSwgc2Vlbl90aGlzOwotCWludCBjaGFyc193cml0dGVuOwogCiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgYSByb3cgdGhhdCBpbmNyZWFzZXMgdGhlIHNwYWNlIGFyb3VuZCBhIGNvbW1pdApAQCAtNzY0LDI3ICs4NjUsMjQgQEAKIAkgKiBXZSBuZWVkIDIgZXh0cmEgcm93cyBmb3IgZXZlcnkgcGFyZW50IG92ZXIgMi4KIAkgKi8KIAlhc3NlcnQoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMpOwotCW51bV9leHBhbnNpb25fcm93cyA9IChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDI7CiAKIAkvKgogCSAqIGdyYXBoLT5leHBhbnNpb25fcm93IHRyYWNrcyB0aGUgY3VycmVudCBleHBhbnNpb24gcm93IHdlIGFyZSBvbi4KIAkgKiBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIFswLCBudW1fZXhwYW5zaW9uX3Jvd3MgLSAxXQogCSAqLwogCWFzc2VydCgwIDw9IGdyYXBoLT5leHBhbnNpb25fcm93ICYmCi0JICAgICAgIGdyYXBoLT5leHBhbnNpb25fcm93IDwgbnVtX2V4cGFuc2lvbl9yb3dzKTsKKwkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3MoZ3JhcGgpKTsKIAogCS8qCiAJICogT3V0cHV0IHRoZSByb3cKIAkgKi8KIAlzZWVuX3RoaXMgPSAwOwotCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CiAJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CiAJCQlzZWVuX3RoaXMgPSAxOwotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJc3RyYnVmX2FkZGNoYXJzKHNiLCAnICcsIGdyYXBoLT5leHBhbnNpb25fcm93KTsKLQkJCWNoYXJzX3dyaXR0ZW4gKz0gMSArIGdyYXBoLT5leHBhbnNpb25fcm93OworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJZ3JhcGhfbGluZV9hZGRjaGFycyhsaW5lLCAnICcsIGdyYXBoLT5leHBhbnNpb25fcm93KTsKIAkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID09IDApKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcHJlLWNvbW1pdCBvdXRwdXQuCkBAIC03OTcsMzMgKzg5NSwyNyBAQAogCQkJICovCiAJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgogCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCi0JCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOwogCQkJZWxzZQotCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CiAJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+IDApKSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKIAkJfQotCQlzdHJidWZfYWRkY2goc2IsICcgJyk7Ci0JCWNoYXJzX3dyaXR0ZW4rKzsKKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOwogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKLQogCS8qCiAJICogSW5jcmVtZW50IGdyYXBoLT5leHBhbnNpb25fcm93LAogCSAqIGFuZCBtb3ZlIHRvIHN0YXRlIEdSQVBIX0NPTU1JVCBpZiBuZWNlc3NhcnkKIAkgKi8KIAlncmFwaC0+ZXhwYW5zaW9uX3JvdysrOwotCWlmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+PSBudW1fZXhwYW5zaW9uX3Jvd3MpCisJaWYgKCFncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoZ3JhcGgpKQogCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfY2hhcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCS8qCiAJICogRm9yIGJvdW5kYXJ5IGNvbW1pdHMsIHByaW50ICdvJwpAQCAtODMxLDcyICs5MjMsNjcgQEAKIAkgKi8KIAlpZiAoZ3JhcGgtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpIHsKIAkJYXNzZXJ0KGdyYXBoLT5yZXZzLT5ib3VuZGFyeSk7Ci0JCXN0cmJ1Zl9hZGRjaChzYiwgJ28nKTsKKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnbycpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBnZXRfcmV2aXNpb25fbWFyaygpIGhhbmRsZXMgYWxsIG90aGVyIGNhc2VzIHdpdGhvdXQgYXNzZXJ0KCkKIAkgKi8KLQlzdHJidWZfYWRkc3RyKHNiLCBnZXRfcmV2aXNpb25fbWFyayhncmFwaC0+cmV2cywgZ3JhcGgtPmNvbW1pdCkpOworCWdyYXBoX2xpbmVfYWRkc3RyKGxpbmUsIGdldF9yZXZpc2lvbl9tYXJrKGdyYXBoLT5yZXZzLCBncmFwaC0+Y29tbWl0KSk7CiB9CiAKIC8qCi0gKiBEcmF3IHRoZSBob3Jpem9udGFsIGRhc2hlcyBvZiBhbiBvY3RvcHVzIG1lcmdlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgotICogY2hhcmFjdGVycyB3cml0dGVuLgorICogRHJhdyB0aGUgaG9yaXpvbnRhbCBkYXNoZXMgb2YgYW4gb2N0b3B1cyBtZXJnZS4KICAqLwotc3RhdGljIGludCBncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2Uoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkJICAgIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAkvKgotCSAqIEhlcmUgZGFzaGxlc3NfcGFyZW50cyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcGFyZW50cyB3aGljaCBkb24ndAotCSAqIG5lZWQgdG8gaGF2ZSBkYXNoZXMgKHRoZSBlZGdlcyBsYWJlbGVkICIwIiBhbmQgIjEiKS4gIEFuZAotCSAqIGRhc2hmdWxfcGFyZW50cyBhcmUgdGhlIHJlbWFpbmluZyBvbmVzLgorCSAqIFRoZSBwYXJlbnRzIG9mIGEgbWVyZ2UgY29tbWl0IGNhbiBiZSBhcmJpdHJhcmlseSByZW9yZGVyZWQgYXMgdGhleQorCSAqIGFyZSBtYXBwZWQgb250byBkaXNwbGF5IGNvbHVtbnMsIGZvciBleGFtcGxlIHRoaXMgaXMgYSB2YWxpZCBtZXJnZToKIAkgKgotCSAqIHwgKi0tLS4KLQkgKiB8IHxcIFwgXAotCSAqIHwgfCB8IHwgfAotCSAqIHggMCAxIDIgMworCSAqCXwgfCAqLS0tLgorCSAqCXwgfCB8XCBcIFwKKwkgKgl8IHwgfC8gLyAvCisJICoJfCB8L3wgfCAvCisJICoJfCB8X3xffC8KKwkgKgl8L3wgfCB8CisJICoJMyAxIDAgMgogCSAqCisJICogVGhlIG51bWJlcnMgZGVub3RlIHdoaWNoIHBhcmVudCBvZiB0aGUgbWVyZ2UgZWFjaCB2aXN1YWwgY29sdW1uCisJICogY29ycmVzcG9uZHMgdG87IHdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZSBwYXJlbnRzIHdpbGwgaW5pdGlhbGx5CisJICogZGlzcGxheSBpbiB0aGUgb3JkZXIgZ2l2ZW4gYnkgbmV3X2NvbHVtbnMuCisJICoKKwkgKiBUbyBmaW5kIHRoZSByaWdodCBjb2xvciBmb3IgZWFjaCBkYXNoLCB3ZSBuZWVkIHRvIGNvbnN1bHQgdGhlCisJICogbWFwcGluZyBhcnJheSwgc3RhcnRpbmcgZnJvbSB0aGUgY29sdW1uIDIgcGxhY2VzIHRvIHRoZSByaWdodCBvZiB0aGUKKwkgKiBtZXJnZSBjb21taXQsIGFuZCB1c2UgdGhhdCB0byBmaW5kIG91dCB3aGljaCBsb2dpY2FsIGNvbHVtbiBlYWNoCisJICogZWRnZSB3aWxsIGNvbGxhcHNlIHRvLgorCSAqCisJICogQ29tbWl0cyBhcmUgcmVuZGVyZWQgb25jZSBhbGwgZWRnZXMgaGF2ZSBjb2xsYXBzZWQgdG8gdGhlaXIgY29ycmVjdAorCSAqIGxvZ2NpYWwgY29sdW1uLCBzbyBjb21taXRfaW5kZXggZ2l2ZXMgdXMgdGhlIHJpZ2h0IHZpc3VhbCBvZmZzZXQgZm9yCisJICogdGhlIG1lcmdlIGNvbW1pdC4KIAkgKi8KLQljb25zdCBpbnQgZGFzaGxlc3NfcGFyZW50cyA9IDI7Ci0JaW50IGRhc2hmdWxfcGFyZW50cyA9IGdyYXBoLT5udW1fcGFyZW50cyAtIGRhc2hsZXNzX3BhcmVudHM7CiAKLQkvKgotCSAqIFVzdWFsbHksIHdlIGFkZCBvbmUgbmV3IGNvbHVtbiBmb3IgZWFjaCBwYXJlbnQgKGxpa2UgdGhlIGRpYWdyYW0KLQkgKiBhYm92ZSkgYnV0IHNvbWV0aW1lcyB0aGUgZmlyc3QgcGFyZW50IGdvZXMgaW50byBhbiBleGlzdGluZyBjb2x1bW4sCi0JICogbGlrZSB0aGlzOgotCSAqCi0JICogfCAqLS0tLgotCSAqIHwgfFwgXCBcCi0JICogfC8gLyAvIC8KLQkgKiB4IDAgMSAyCi0JICoKLQkgKiBJbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgcGFyZW50cyB3aWxsIGJlIG9uZSBncmVhdGVyIHRoYW4gdGhlCi0JICogbnVtYmVyIG9mIGFkZGVkIGNvbHVtbnMuCi0JICovCi0JaW50IGFkZGVkX2NvbHMgPSAoZ3JhcGgtPm51bV9uZXdfY29sdW1ucyAtIGdyYXBoLT5udW1fY29sdW1ucyk7Ci0JaW50IHBhcmVudF9pbl9vbGRfY29scyA9IGdyYXBoLT5udW1fcGFyZW50cyAtIGFkZGVkX2NvbHM7CisJaW50IGksIGo7CisJc3RydWN0IGNvbHVtbiAqY29sOwogCi0JLyoKLQkgKiBJbiBib3RoIGNhc2VzLCBjb21taXRfaW5kZXggY29ycmVzcG9uZHMgdG8gdGhlIGVkZ2UgbGFiZWxlZCAiMCIuCi0JICovCi0JaW50IGZpcnN0X2NvbCA9IGdyYXBoLT5jb21taXRfaW5kZXggKyBkYXNobGVzc19wYXJlbnRzCi0JICAgIC0gcGFyZW50X2luX29sZF9jb2xzOworCWludCBkYXNoZWRfcGFyZW50cyA9IGdyYXBoX251bV9kYXNoZWRfcGFyZW50cyhncmFwaCk7CiAKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgZGFzaGZ1bF9wYXJlbnRzOyBpKyspIHsKLQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1tpK2ZpcnN0X2NvbF0sICctJyk7Ci0JCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbaStmaXJzdF9jb2xdLAotCQkJCSAgICBpID09IGRhc2hmdWxfcGFyZW50cy0xID8gJy4nIDogJy0nKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGFzaGVkX3BhcmVudHM7IGkrKykgeworCQlqID0gZ3JhcGgtPm1hcHBpbmdbKGdyYXBoLT5jb21taXRfaW5kZXggKyBpICsgMikgKiAyXTsKKwkJY29sID0gJmdyYXBoLT5uZXdfY29sdW1uc1tqXTsKKworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICctJyk7CisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgKGkgPT0gZGFzaGVkX3BhcmVudHMgLSAxKSA/ICcuJyA6ICctJyk7CiAJfQotCXJldHVybiAyICogZGFzaGZ1bF9wYXJlbnRzOworCisJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAlpbnQgc2Vlbl90aGlzID0gMDsKLQlpbnQgaSwgY2hhcnNfd3JpdHRlbjsKKwlpbnQgaTsKIAogCS8qCiAJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdApAQCAtOTA2LDcgKzk5Myw2IEBACiAJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKIAkgKi8KIAlzZWVuX3RoaXMgPSAwOwotCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKIAkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OwpAQCAtOTIwLDE5ICsxMDA2LDE3IEBACiAKIAkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgewogCQkJc2Vlbl90aGlzID0gMTsKLQkJCWdyYXBoX291dHB1dF9jb21taXRfY2hhcihncmFwaCwgc2IpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKGdyYXBoLCBsaW5lKTsKIAogCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDIpCi0JCQkJY2hhcnNfd3JpdHRlbiArPSBncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2UoZ3JhcGgsCi0JCQkJCQkJCQkgIHNiKTsKLQkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDIpKSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOwotCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID09IDIpKSB7CisJCQkJZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKGdyYXBoLCBsaW5lKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDEpKSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID09IDEpKSB7CiAJCQkvKgotCQkJICogVGhpcyBpcyBhIDItd2F5IG1lcmdlIGNvbW1pdC4KLQkJCSAqIFRoZXJlIGlzIG5vIEdSQVBIX1BSRV9DT01NSVQgc3RhZ2UgZm9yIDItd2F5CisJCQkgKiBUaGlzIGlzIGVpdGhlciBhIHJpZ2h0LXNrZXdlZCAyLXdheSBtZXJnZQorCQkJICogY29tbWl0LCBvciBhIGxlZnQtc2tld2VkIDMtd2F5IG1lcmdlLgorCQkJICogVGhlcmUgaXMgbm8gR1JBUEhfUFJFX0NPTU1JVCBzdGFnZSBmb3Igc3VjaAogCQkJICogbWVyZ2VzLCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIG91dHB1dAogCQkJICogZm9yIHRoaXMgY29tbWl0LiAgQ2hlY2sgdG8gc2VlIHdoYXQgdGhlIHByZXZpb3VzCiAJCQkgKiBsaW5lIG9mIG91dHB1dCB3YXMuCkBAIC05NDQsMjEgKzEwMjgsMjEgQEAKIAkJCSAqIG1ha2VzIHRoZSBvdXRwdXQgbG9vayBuaWNlci4KIAkJCSAqLwogCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKKwkJCSAgICBncmFwaC0+cHJldl9lZGdlc19hZGRlZCA+IDAgJiYKIAkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQotCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKIAkJCWVsc2UKLQkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQl9IGVsc2UgaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX0NPTExBUFNJTkcgJiYKKwkJCSAgIGdyYXBoLT5vbGRfbWFwcGluZ1syICogaSArIDFdID09IGkgJiYKKwkJCSAgIGdyYXBoLT5tYXBwaW5nWzIgKiBpXSA8IGkpIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJy8nKTsKIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKIAkJfQotCQlzdHJidWZfYWRkY2goc2IsICcgJyk7Ci0JCWNoYXJzX3dyaXR0ZW4rKzsKKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOwogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKLQogCS8qCiAJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQogCSAqLwpAQCAtOTcwLDI2ICsxMDU0LDE5IEBACiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09MTEFQU0lORyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29sdW1uICpmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0KQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKLQkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KQotCQkJcmV0dXJuICZncmFwaC0+bmV3X2NvbHVtbnNbaV07Ci0JfQotCXJldHVybiBOVUxMOwotfQorY29uc3QgY2hhciBtZXJnZV9jaGFyc1tdID0geycvJywgJ3wnLCAnXFwnfTsKIAotc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKIAlpbnQgc2Vlbl90aGlzID0gMDsKLQlpbnQgaSwgaiwgY2hhcnNfd3JpdHRlbjsKKwlpbnQgaSwgajsKKworCXN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3RfcGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwlpbnQgc2Vlbl9wYXJlbnQgPSAwOwogCiAJLyoKIAkgKiBPdXRwdXQgdGhlIHBvc3QtbWVyZ2Ugcm93CiAJICovCi0JY2hhcnNfd3JpdHRlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CiAJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CkBAIC0xMDA4LDM3ICsxMDg1LDQ0IEBACiAJCQkgKiBuZXdfY29sdW1ucyBhbmQgdXNlIHRob3NlIHRvIGZvcm1hdCB0aGUKIAkJCSAqIGVkZ2VzLgogCQkJICovCi0JCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOwotCQkJc3RydWN0IGNvbHVtbiAqcGFyX2NvbHVtbjsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGZpcnN0X3BhcmVudDsKKwkJCWludCBwYXJfY29sdW1uOworCQkJaW50IGlkeCA9IGdyYXBoLT5tZXJnZV9sYXlvdXQ7CisJCQljaGFyIGM7CiAJCQlzZWVuX3RoaXMgPSAxOwotCQkJcGFyZW50cyA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7Ci0JCQlhc3NlcnQocGFyZW50cyk7Ci0JCQlwYXJfY29sdW1uID0gZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7Ci0JCQlhc3NlcnQocGFyX2NvbHVtbik7CiAKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIHBhcl9jb2x1bW4sICd8Jyk7Ci0JCQljaGFyc193cml0dGVuKys7Ci0JCQlmb3IgKGogPSAwOyBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzIC0gMTsgaisrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzOyBqKyspIHsKKwkJCQlwYXJfY29sdW1uID0gZ3JhcGhfZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7CisJCQkJYXNzZXJ0KHBhcl9jb2x1bW4gPj0gMCk7CisKKwkJCQljID0gbWVyZ2VfY2hhcnNbaWR4XTsKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3Bhcl9jb2x1bW5dLCBjKTsKKwkJCQlpZiAoaWR4ID09IDIpIHsKKwkJCQkJaWYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDAgfHwgaiA8IGdyYXBoLT5udW1fcGFyZW50cyAtIDEpCisJCQkJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWR4Kys7CisJCQkJfQogCQkJCXBhcmVudHMgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50cyk7Ci0JCQkJYXNzZXJ0KHBhcmVudHMpOwotCQkJCXBhcl9jb2x1bW4gPSBmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKLQkJCQlhc3NlcnQocGFyX2NvbHVtbik7Ci0JCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgcGFyX2NvbHVtbiwgJ1xcJyk7Ci0JCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwogCQkJfQotCQkJY2hhcnNfd3JpdHRlbiArPSBqICogMjsKLQkJfSBlbHNlIGlmIChzZWVuX3RoaXMpIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7Ci0JCQlzdHJidWZfYWRkY2goc2IsICcgJyk7Ci0JCQljaGFyc193cml0dGVuICs9IDI7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQlzdHJidWZfYWRkY2goc2IsICcgJyk7Ci0JCQljaGFyc193cml0dGVuICs9IDI7Ci0JCX0KLQl9CisJCQlpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID09IDApCisJCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOwogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcykgeworCQkJaWYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDApCisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKKwkJCWVsc2UKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CisJCX0gZWxzZSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCQlpZiAoZ3JhcGgtPm1lcmdlX2xheW91dCAhPSAwIHx8IGkgIT0gZ3JhcGgtPmNvbW1pdF9pbmRleCAtIDEpCisJCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCBzZWVuX3BhcmVudCA/ICdfJyA6ICcgJyk7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBmaXJzdF9wYXJlbnQtPml0ZW0pCisJCQlzZWVuX3BhcmVudCA9IDE7CisJfQogCiAJLyoKIAkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCkBAIC0xMDQ5LDcgKzExMzMsNyBAQAogCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb2xsYXBzaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCWludCBpOwogCXNob3J0IHVzZWRfaG9yaXpvbnRhbCA9IDA7CkBAIC0xMDU3LDEzICsxMTQxLDE4IEBACiAJaW50IGhvcml6b250YWxfZWRnZV90YXJnZXQgPSAtMTsKIAogCS8qCi0JICogQ2xlYXIgb3V0IHRoZSBuZXdfbWFwcGluZyBhcnJheQorCSAqIFN3YXAgdGhlIG1hcHBpbmcgYW5kIG9sZF9tYXBwaW5nIGFycmF5cworCSAqLworCVNXQVAoZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5vbGRfbWFwcGluZyk7CisKKwkvKgorCSAqIENsZWFyIG91dCB0aGUgbWFwcGluZyBhcnJheQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCi0JCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOworCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOwogCiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgewotCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWludCB0YXJnZXQgPSBncmFwaC0+b2xkX21hcHBpbmdbaV07CiAJCWlmICh0YXJnZXQgPCAwKQogCQkJY29udGludWU7CiAKQEAgLTEwODQsMTQgKzExNzMsMTQgQEAKIAkJCSAqIFRoaXMgY29sdW1uIGlzIGFscmVhZHkgaW4gdGhlCiAJCQkgKiBjb3JyZWN0IHBsYWNlCiAJCQkgKi8KLQkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaV0gPT0gLTEpOwotCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gdGFyZ2V0OwotCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPCAwKSB7CisJCQlhc3NlcnQoZ3JhcGgtPm1hcHBpbmdbaV0gPT0gLTEpOworCQkJZ3JhcGgtPm1hcHBpbmdbaV0gPSB0YXJnZXQ7CisJCX0gZWxzZSBpZiAoZ3JhcGgtPm1hcHBpbmdbaSAtIDFdIDwgMCkgewogCQkJLyoKIAkJCSAqIE5vdGhpbmcgaXMgdG8gdGhlIGxlZnQuCiAJCQkgKiBNb3ZlIHRvIHRoZSBsZWZ0IGJ5IG9uZQogCQkJICovCi0JCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID0gdGFyZ2V0OworCQkJZ3JhcGgtPm1hcHBpbmdbaSAtIDFdID0gdGFyZ2V0OwogCQkJLyoKIAkJCSAqIElmIHRoZXJlIGlzbid0IGFscmVhZHkgYW4gZWRnZSBtb3ZpbmcgaG9yaXpvbnRhbGx5CiAJCQkgKiBzZWxlY3QgdGhpcyBvbmUuCkBAIC0xMTA3LDkgKzExOTYsOSBAQAogCQkJCSAqIGxpbmUuCiAJCQkJICovCiAJCQkJZm9yIChqID0gKHRhcmdldCAqIDIpKzM7IGogPCAoaSAtIDIpOyBqICs9IDIpCi0JCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tqXSA9IHRhcmdldDsKKwkJCQkJZ3JhcGgtPm1hcHBpbmdbal0gPSB0YXJnZXQ7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9PSB0YXJnZXQpIHsKKwkJfSBlbHNlIGlmIChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPT0gdGFyZ2V0KSB7CiAJCQkvKgogCQkJICogVGhlcmUgaXMgYSBicmFuY2ggbGluZSB0byBvdXIgbGVmdAogCQkJICogYWxyZWFkeSwgYW5kIGl0IGlzIG91ciB0YXJnZXQuICBXZQpAQCAtMTExNyw3ICsxMjA2LDcgQEAKIAkJCSAqIHRoZSBzYW1lIHBhcmVudCBjb21taXQuCiAJCQkgKgogCQkJICogV2UgZG9uJ3QgaGF2ZSB0byBhZGQgYW55dGhpbmcgdG8gdGhlCi0JCQkgKiBvdXRwdXQgb3IgbmV3X21hcHBpbmcsIHNpbmNlIHRoZQorCQkJICogb3V0cHV0IG9yIG1hcHBpbmcsIHNpbmNlIHRoZQogCQkJICogZXhpc3RpbmcgYnJhbmNoIGxpbmUgaGFzIGFscmVhZHkgdGFrZW4KIAkJCSAqIGNhcmUgb2YgaXQuCiAJCQkgKi8KQEAgLTExMzMsMTAgKzEyMjIsMTAgQEAKIAkJCSAqIFRoZSBicmFuY2ggdG8gdGhlIGxlZnQgb2YgdGhhdCBzcGFjZQogCQkJICogc2hvdWxkIGJlIG91ciBldmVudHVhbCB0YXJnZXQuCiAJCQkgKi8KLQkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID4gdGFyZ2V0KTsKLQkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdIDwgMCk7Ci0JCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAzXSA9PSB0YXJnZXQpOwotCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA9IHRhcmdldDsKKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPiB0YXJnZXQpOworCQkJYXNzZXJ0KGdyYXBoLT5tYXBwaW5nW2kgLSAyXSA8IDApOworCQkJYXNzZXJ0KGdyYXBoLT5tYXBwaW5nW2kgLSAzXSA9PSB0YXJnZXQpOworCQkJZ3JhcGgtPm1hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OwogCQkJLyoKIAkJCSAqIE1hcmsgdGhpcyBicmFuY2ggYXMgdGhlIGhvcml6b250YWwgZWRnZSB0bwogCQkJICogcHJldmVudCBhbnkgb3RoZXIgZWRnZXMgZnJvbSBtb3ZpbmcKQEAgLTExNDgsMjAgKzEyMzcsMjUgQEAKIAl9CiAKIAkvKgorCSAqIENvcHkgdGhlIGN1cnJlbnQgbWFwcGluZyBhcnJheSBpbnRvIG9sZF9tYXBwaW5nCisJICovCisJQ09QWV9BUlJBWShncmFwaC0+b2xkX21hcHBpbmcsIGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+bWFwcGluZ19zaXplKTsKKworCS8qCiAJICogVGhlIG5ldyBtYXBwaW5nIG1heSBiZSAxIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG1hcHBpbmcKIAkgKi8KLQlpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJaWYgKGdyYXBoLT5tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCiAJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKIAogCS8qCiAJICogT3V0cHV0IG91dCBhIGxpbmUgYmFzZWQgb24gdGhlIG5ldyBtYXBwaW5nIGluZm8KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7Ci0JCWludCB0YXJnZXQgPSBncmFwaC0+bmV3X21hcHBpbmdbaV07CisJCWludCB0YXJnZXQgPSBncmFwaC0+bWFwcGluZ1tpXTsKIAkJaWYgKHRhcmdldCA8IDApCi0JCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CiAJCWVsc2UgaWYgKHRhcmdldCAqIDIgPT0gaSkKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ3wnKTsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ3wnKTsKIAkJZWxzZSBpZiAodGFyZ2V0ID09IGhvcml6b250YWxfZWRnZV90YXJnZXQgJiYKIAkJCSBpICE9IGhvcml6b250YWxfZWRnZSAtIDEpIHsKIAkJCQkvKgpAQCAtMTE3MCwyNCArMTI2NCwxNyBAQAogCQkJCSAqIHdvbid0IGNvbnRpbnVlIGludG8gdGhlIG5leHQgbGluZS4KIAkJCQkgKi8KIAkJCQlpZiAoaSAhPSAodGFyZ2V0ICogMikrMykKLQkJCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisJCQkJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CiAJCQkJdXNlZF9ob3Jpem9udGFsID0gMTsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ18nKTsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ18nKTsKIAkJfSBlbHNlIHsKIAkJCWlmICh1c2VkX2hvcml6b250YWwgJiYgaSA8IGhvcml6b250YWxfZWRnZSkKLQkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJy8nKTsKKwkJCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnLycpOwogCiAJCX0KIAl9CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7Ci0KLQkvKgotCSAqIFN3YXAgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcKLQkgKi8KLQlTV0FQKGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+bmV3X21hcHBpbmcpOwotCiAJLyoKIAkgKiBJZiBncmFwaC0+bWFwcGluZyBpbmRpY2F0ZXMgdGhhdCBhbGwgb2YgdGhlIGJyYW5jaCBsaW5lcwogCSAqIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9ucywgd2UgYXJlIGRvbmUuCkBAIC0xMTk5LDM1ICsxMjg2LDQ5IEBACiAKIGludCBncmFwaF9uZXh0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQogeworCWludCBzaG93bl9jb21taXRfbGluZSA9IDA7CisJc3RydWN0IGdyYXBoX2xpbmUgbGluZSA9IHsgLmJ1ZiA9IHNiLCAud2lkdGggPSAwIH07CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbmNlaXZhYmxlIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjb21taXQKKwkgKiBpZiBvdXIgY2FsbGVyIGhhcyBhIGJ1ZywgYW5kIGludm9rZXMgZ3JhcGhfbmV4dF9saW5lKCkKKwkgKiBpbW1lZGlhdGVseSBhZnRlciBncmFwaF9pbml0KCksIHdpdGhvdXQgZmlyc3QgY2FsbGluZworCSAqIGdyYXBoX3VwZGF0ZSgpLiAgUmV0dXJuIHdpdGhvdXQgb3V0cHV0dGluZyBhbnl0aGluZyBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoIWdyYXBoLT5jb21taXQpCisJCXJldHVybiAtMTsKKwogCXN3aXRjaCAoZ3JhcGgtPnN0YXRlKSB7CiAJY2FzZSBHUkFQSF9QQURESU5HOgotCQlncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAwOworCQlncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOwogCWNhc2UgR1JBUEhfU0tJUDoKLQkJZ3JhcGhfb3V0cHV0X3NraXBfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMDsKKwkJZ3JhcGhfb3V0cHV0X3NraXBfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKIAljYXNlIEdSQVBIX1BSRV9DT01NSVQ6Ci0JCWdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDA7CisJCWdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CiAJY2FzZSBHUkFQSF9DT01NSVQ6Ci0JCWdyYXBoX291dHB1dF9jb21taXRfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMTsKKwkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKGdyYXBoLCAmbGluZSk7CisJCXNob3duX2NvbW1pdF9saW5lID0gMTsKKwkJYnJlYWs7CiAJY2FzZSBHUkFQSF9QT1NUX01FUkdFOgotCQlncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAwOworCQlncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOwogCWNhc2UgR1JBUEhfQ09MTEFQU0lORzoKLQkJZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMDsKKwkJZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKIAl9CiAKLQlhc3NlcnQoMCk7Ci0JcmV0dXJuIDA7CisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgJmxpbmUpOworCXJldHVybiBzaG93bl9jb21taXRfbGluZTsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKIHsKIAlpbnQgaTsKLQlpbnQgY2hhcnNfd3JpdHRlbiA9IDA7CisJc3RydWN0IGdyYXBoX2xpbmUgbGluZSA9IHsgLmJ1ZiA9IHNiLCAud2lkdGggPSAwIH07CiAKIAlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX0NPTU1JVCkgewogCQlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsIHNiKTsKQEAgLTEyNDQsMjAgKzEzNDUsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKIAkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCi0JCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJY2hhcnNfd3JpdHRlbisrOworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbigmbGluZSwgY29sLCAnfCcpOwogCiAJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0ICYmIGdyYXBoLT5udW1fcGFyZW50cyA+IDIpIHsKIAkJCWludCBsZW4gPSAoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyOwotCQkJc3RyYnVmX2FkZGNoYXJzKHNiLCAnICcsIGxlbik7Ci0JCQljaGFyc193cml0dGVuICs9IGxlbjsKKwkJCWdyYXBoX2xpbmVfYWRkY2hhcnMoJmxpbmUsICcgJywgbGVuKTsKIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWdyYXBoX2xpbmVfYWRkY2goJmxpbmUsICcgJyk7CiAJCX0KIAl9CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7CisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgJmxpbmUpOwogCiAJLyoKIAkgKiBVcGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUgc2luY2Ugd2UgaGF2ZSBvdXRwdXQgYSBwYWRkaW5nIGxpbmUKZGlmZiAtLWdpdCBhL2hhc2htYXAuYyBiL2hhc2htYXAuYwppbmRleCAzOWMxMzExLi4wOTgxM2UxIDEwMDY0NAotLS0gYS9oYXNobWFwLmMKKysrIGIvaGFzaG1hcC5jCkBAIC01MSw3ICs1MSw3IEBACiB9CiAKIC8qCi0gKiBJbmNvcG9yYXRlIGFub3RoZXIgY2h1bmsgb2YgZGF0YSBpbnRvIGEgbWVtaWhhc2gKKyAqIEluY29ycG9yYXRlIGFub3RoZXIgY2h1bmsgb2YgZGF0YSBpbnRvIGEgbWVtaWhhc2gKICAqIGNvbXB1dGF0aW9uLgogICovCiB1bnNpZ25lZCBpbnQgbWVtaWhhc2hfY29udCh1bnNpZ25lZCBpbnQgaGFzaF9zZWVkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCmRpZmYgLS1naXQgYS9oYXNobWFwLmggYi9oYXNobWFwLmgKaW5kZXggYmQyNzAxNS4uNzlhZTlmOCAxMDA2NDQKLS0tIGEvaGFzaG1hcC5oCisrKyBiL2hhc2htYXAuaApAQCAtNTksNyArNTksNyBAQAogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoInByaW50X2FsbF9ieV9rZXkiLCBhY3Rpb24pKSB7CiAgKiAgICAgICAgICAgICBzdHJ1Y3QgbG9uZzJzdHJpbmcgaywgKmU7Ci0gKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmstPmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZW50cnlfaW5pdCgmay5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CiAgKiAgICAgICAgICAgICBrLmtleSA9IGtleTsKICAqCiAgKiAgICAgICAgICAgICBmbGFncyAmPSB+Q09NUEFSRV9WQUxVRTsKQEAgLTg3LDEyICs4NywxMiBAQAogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoImhhc19leGFjdF9tYXRjaF9ub19oZWFwX2FsbG9jIiwgYWN0aW9uKSkgewogICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nIGs7Ci0gKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmstPmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZW50cnlfaW5pdCgmay5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CiAgKiAgICAgICAgICAgICBrLmtleSA9IGtleTsKICAqCiAgKiAgICAgICAgICAgICBmbGFncyB8PSBDT01QQVJFX1ZBTFVFOwogICogICAgICAgICAgICAgcHJpbnRmKCIlc2ZvdW5kXG4iLAotICogICAgICAgICAgICAgICAgICAgIGhhc2htYXBfZ2V0KCZtYXAsICZrLT5lbnQsIHZhbHVlKSA/ICIiIDogIm5vdCAiKTsKKyAqICAgICAgICAgICAgICAgICAgICBoYXNobWFwX2dldCgmbWFwLCAmay5lbnQsIHZhbHVlKSA/ICIiIDogIm5vdCAiKTsKICAqICAgICAgICAgfQogICoKICAqICAgICAgICAgaWYgKCFzdHJjbXAoImVuZCIsIGFjdGlvbikpIHsKQEAgLTUwMiw3ICs1MDIsNyBAQAogfQogCiAvKgotICogUmUtZW5hYmxlIGl0ZW0gY291dGluZyB3aGVuIGFkZGluZy9yZW1vdmluZyBpdGVtcy4KKyAqIFJlLWVuYWJsZSBpdGVtIGNvdW50aW5nIHdoZW4gYWRkaW5nL3JlbW92aW5nIGl0ZW1zLgogICogSWYgY291bnRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkLCBpdCB3aWxsIGZvcmNlIGNvdW50IHRoZW0uCiAgKiBJdCBXSUxMIE5PVCBhdXRvbWF0aWNhbGx5IHJlaGFzaCB0aGVtLgogICovCmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggOWZmMmJlNi4uY2Y2NzYyNCAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtMzQsNyArMzQsNyBAQAogCXsgQ0FUX2ZvcmVpZ25zY21pbnRlcmZhY2UsIE5fKCJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIpIH0sCiAJeyBDQVRfcGx1bWJpbmdtYW5pcHVsYXRvcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiKSB9LAogCXsgQ0FUX3BsdW1iaW5naW50ZXJyb2dhdG9ycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiKSB9LAotCXsgQ0FUX3N5bmNoaW5ncmVwb3NpdG9yaWVzLCBOXygiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2hpbmcgUmVwb3NpdG9yaWVzIikgfSwKKwl7IENBVF9zeW5jaGluZ3JlcG9zaXRvcmllcywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIikgfSwKIAl7IENBVF9wdXJlaGVscGVycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiKSB9LAogCXsgMCwgTlVMTCB9CiB9OwpkaWZmIC0tZ2l0IGEvaGV4LmMgYi9oZXguYwppbmRleCA3ODUwYTg4Li5mZDdmMDBjIDEwMDY0NAotLS0gYS9oZXguYworKysgYi9oZXguYwpAQCAtOTAsMTEgKzkwLDYgQEAKIAlyZXR1cm4gYnVmZmVyOwogfQogCi1jaGFyICpzaGExX3RvX2hleF9yKGNoYXIgKmJ1ZmZlciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihidWZmZXIsIHNoYTEsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKTsKLX0KLQogY2hhciAqb2lkX3RvX2hleF9yKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewogCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcF9yKGJ1ZmZlciwgb2lkLT5oYXNoLCB0aGVfaGFzaF9hbGdvKTsKQEAgLTEwOCwxMSArMTAzLDYgQEAKIAlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihoZXhidWZmZXJbYnVmbm9dLCBoYXNoLCBhbGdvcCk7CiB9CiAKLWNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wKHNoYTEsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKTsKLX0KLQogY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCkKIHsKIAlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3AoaGFzaCwgdGhlX2hhc2hfYWxnbyk7CmRpZmYgLS1naXQgYS9odHRwLmMgYi9odHRwLmMKaW5kZXggMDI3YTg2ZC4uNWYzNDgxNiAxMDA2NDQKLS0tIGEvaHR0cC5jCisrKyBiL2h0dHAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqcHJhZ21hX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKLXN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqZXh0cmFfaHR0cF9oZWFkZXJzOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9odHRwX2hlYWRlcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAogc3RhdGljIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICphY3RpdmVfcXVldWVfaGVhZDsKIApAQCAtNDE0LDExICs0MTQsOSBAQAogCQlpZiAoIXZhbHVlKSB7CiAJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKIAkJfSBlbHNlIGlmICghKnZhbHVlKSB7Ci0JCQljdXJsX3NsaXN0X2ZyZWVfYWxsKGV4dHJhX2h0dHBfaGVhZGVycyk7Ci0JCQlleHRyYV9odHRwX2hlYWRlcnMgPSBOVUxMOworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2h0dHBfaGVhZGVycywgMCk7CiAJCX0gZWxzZSB7Ci0JCQlleHRyYV9odHRwX2hlYWRlcnMgPQotCQkJCWN1cmxfc2xpc3RfYXBwZW5kKGV4dHJhX2h0dHBfaGVhZGVycywgdmFsdWUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9odHRwX2hlYWRlcnMsIHZhbHVlKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjAyLDggKzEyMDAsNyBAQAogI2VuZGlmCiAJY3VybF9nbG9iYWxfY2xlYW51cCgpOwogCi0JY3VybF9zbGlzdF9mcmVlX2FsbChleHRyYV9odHRwX2hlYWRlcnMpOwotCWV4dHJhX2h0dHBfaGVhZGVycyA9IE5VTEw7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2h0dHBfaGVhZGVycywgMCk7CiAKIAljdXJsX3NsaXN0X2ZyZWVfYWxsKHByYWdtYV9oZWFkZXIpOwogCXByYWdtYV9oZWFkZXIgPSBOVUxMOwpAQCAtMTYyNywxMCArMTYyNCwxMSBAQAogCiBzdHJ1Y3QgY3VybF9zbGlzdCAqaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycyh2b2lkKQogewotCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTCwgKmg7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCi0JZm9yIChoID0gZXh0cmFfaHR0cF9oZWFkZXJzOyBoOyBoID0gaC0+bmV4dCkKLQkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGgtPmRhdGEpOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmV4dHJhX2h0dHBfaGVhZGVycykKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGl0ZW0tPnN0cmluZyk7CiAKIAlyZXR1cm4gaGVhZGVyczsKIH0KZGlmZiAtLWdpdCBhL2t3c2V0LmggYi9rd3NldC5oCmluZGV4IGRmOTlhOTIuLmY1MGVjYWUgMTAwNjQ0Ci0tLSBhL2t3c2V0LmgKKysrIGIva3dzZXQuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgS1dTRVRfSAorI2RlZmluZSBLV1NFVF9ICisKIC8qIFRoaXMgZmlsZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSBjb21taXQgZTdhYzcxM2ReIGluIHRoZSBHTlUgZ3JlcCBnaXQKICAqIHJlcG9zaXRvcnkuIEEgZmV3IHNtYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWRhcHQgdGhlIGNvZGUgdG8KICAqIEdpdC4KQEAgLTU5LDMgKzYyLDQgQEAKIC8qIERlYWxsb2NhdGUgdGhlIGdpdmVuIGtleXdvcmQgc2V0IGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3RvcmFnZS4gKi8KIHZvaWQga3dzZnJlZShrd3NldF90KTsKIAorI2VuZGlmIC8qIEtXU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2xvZy10cmVlLmMgYi9sb2ctdHJlZS5jCmluZGV4IDkyM2EyOTkuLjE1MWUxMmYgMTAwNjQ0Ci0tLSBhL2xvZy10cmVlLmMKKysrIGIvbG9nLXRyZWUuYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAJCW9wdHMudXNlX2NvbG9yID0gb3B0LT5kaWZmb3B0LnVzZV9jb2xvcjsKIAkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKIAkJc2hvd19yYW5nZV9kaWZmKG9wdC0+cmRpZmYxLCBvcHQtPnJkaWZmMiwKLQkJCQlvcHQtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMpOworCQkJCW9wdC0+Y3JlYXRpb25fZmFjdG9yLCAxLCAmb3B0cywgTlVMTCk7CiAKIAkJbWVtY3B5KCZkaWZmX3F1ZXVlZF9kaWZmLCAmZHEsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CiAJfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwppbmRleCA0MmJlN2M5Li4xMTg2OWFkIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuYworKysgYi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtMTk1MSw2ICsxOTUxLDE2IEBACiAJCXJldHVybiBOVUxMOwogCiAJb2xkbGVuID0gc3RybGVuKGVudHJ5LT5kaXIpOworCWlmIChlbnRyeS0+bmV3X2Rpci5sZW4gPT0gMCkKKwkJLyoKKwkJICogSWYgc29tZW9uZSByZW5hbWVkL21lcmdlZCBhIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290CisJCSAqIGRpcmVjdG9yeSAoZS5nLiAnc29tZS9zdWJkaXInIC0+ICcnKSwgdGhlbiB3ZSB3YW50IHRvCisJCSAqIGF2b2lkIHJldHVybmluZworCQkgKiAgICAgJycgKyAnL2ZpbGVuYW1lJworCQkgKiBhcyB0aGUgcmVuYW1lOyB3ZSBuZWVkIHRvIG1ha2Ugb2xkX3BhdGggKyBvbGRsZW4gYWR2YW5jZQorCQkgKiBwYXN0IHRoZSAnLycgY2hhcmFjdGVyLgorCQkgKi8KKwkJb2xkbGVuKys7CiAJbmV3bGVuID0gZW50cnktPm5ld19kaXIubGVuICsgKHN0cmxlbihvbGRfcGF0aCkgLSBvbGRsZW4pICsgMTsKIAlzdHJidWZfZ3JvdygmbmV3X3BhdGgsIG5ld2xlbik7CiAJc3RyYnVmX2FkZGJ1ZigmbmV3X3BhdGgsICZlbnRyeS0+bmV3X2Rpcik7CkBAIC0xOTYzLDggKzE5NzMsOCBAQAogCQkJCSAgICBjaGFyICoqb2xkX2RpciwgY2hhciAqKm5ld19kaXIpCiB7CiAJY2hhciAqZW5kX29mX29sZCwgKmVuZF9vZl9uZXc7Ci0JaW50IG9sZF9sZW4sIG5ld19sZW47CiAKKwkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZXM6IE5VTEwsIG1lYW5pbmcgbm8gcmVuYW1lICovCiAJKm9sZF9kaXIgPSBOVUxMOwogCSpuZXdfZGlyID0gTlVMTDsKIApAQCAtMTk3NSw0MyArMTk4NSw5MSBAQAogCSAqICAgICJhL2IvYy9kIiB3YXMgcmVuYW1lZCB0byAiYS9iL3NvbWUvdGhpbmcvZWxzZSIKIAkgKiBzbywgZm9yIHRoaXMgZXhhbXBsZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zICJhL2IvYy9kIiBpbgogCSAqICpvbGRfZGlyIGFuZCAiYS9iL3NvbWUvdGhpbmcvZWxzZSIgaW4gKm5ld19kaXIuCi0JICoKLQkgKiBBbHNvLCBpZiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgY2hhbmdlZCwgd2UgZG9uJ3QgY2FyZS4gIFdlCi0JICogd2FudCB0byBrbm93IHdoaWNoIHBvcnRpb24gb2YgdGhlIGRpcmVjdG9yeSwgaWYgYW55LCBjaGFuZ2VkLgorCSAqLworCisJLyoKKwkgKiBJZiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgY2hhbmdlZCwgd2UgZG9uJ3QgY2FyZS4gIFdlIHdhbnQKKwkgKiB0byBrbm93IHdoaWNoIHBvcnRpb24gb2YgdGhlIGRpcmVjdG9yeSwgaWYgYW55LCBjaGFuZ2VkLgogCSAqLwogCWVuZF9vZl9vbGQgPSBzdHJyY2hyKG9sZF9wYXRoLCAnLycpOwogCWVuZF9vZl9uZXcgPSBzdHJyY2hyKG5ld19wYXRoLCAnLycpOwogCi0JaWYgKGVuZF9vZl9vbGQgPT0gTlVMTCB8fCBlbmRfb2ZfbmV3ID09IE5VTEwpCisJLyoKKwkgKiBJZiBlbmRfb2Zfb2xkIGlzIE5VTEwsIG9sZF9wYXRoIHdhc24ndCBpbiBhIGRpcmVjdG9yeSwgc28gdGhlcmUKKwkgKiBjb3VsZCBub3QgYmUgYSBkaXJlY3RvcnkgcmVuYW1lIChvdXIgcnVsZSBlbHNld2hlcmUgdGhhdCBhCisJICogZGlyZWN0b3J5IHdoaWNoIHN0aWxsIGV4aXN0cyBpcyBub3QgY29uc2lkZXJlZCB0byBoYXZlIGJlZW4KKwkgKiByZW5hbWVkIG1lYW5zIHRoZSByb290IGRpcmVjdG9yeSBjYW4gbmV2ZXIgYmUgcmVuYW1lZCAtLSBiZWNhdXNlCisJICogdGhlIHJvb3QgZGlyZWN0b3J5IGFsd2F5cyBleGlzdHMpLgorCSAqLworCWlmIChlbmRfb2Zfb2xkID09IE5VTEwpCisJCXJldHVybjsgLyogTm90ZTogKm9sZF9kaXIgYW5kICpuZXdfZGlyIGFyZSBzdGlsbCBOVUxMICovCisKKwkvKgorCSAqIElmIG5ld19wYXRoIGNvbnRhaW5zIG5vIGRpcmVjdG9yeSAoZW5kX29mX25ldyBpcyBOVUxMKSwgdGhlbiB3ZQorCSAqIGhhdmUgYSByZW5hbWUgb2Ygb2xkX3BhdGgncyBkaXJlY3RvcnkgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LgorCSAqLworCWlmIChlbmRfb2ZfbmV3ID09IE5VTEwpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgZW5kX29mX29sZCAtIG9sZF9wYXRoKTsKKwkJKm5ld19kaXIgPSB4c3RyZHVwKCIiKTsKIAkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgdHJhdmVyc2luZyBiYWNrd2FyZHMgKi8KIAl3aGlsZSAoKi0tZW5kX29mX25ldyA9PSAqLS1lbmRfb2Zfb2xkICYmCiAJICAgICAgIGVuZF9vZl9vbGQgIT0gb2xkX3BhdGggJiYKIAkgICAgICAgZW5kX29mX25ldyAhPSBuZXdfcGF0aCkKIAkJOyAvKiBEbyBub3RoaW5nOyBhbGwgaW4gdGhlIHdoaWxlIGxvb3AgKi8KKworCS8qCisJICogSWYgYm90aCBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIHN0cmluZ3MsIHRoZW4gdGhlCisJICogZGlyZWN0b3J5IGRpZG4ndCBjaGFuZ2UgYXQgYWxsLCBvbmx5IHRoZSBiYXNlbmFtZSBkaWQuCisJICovCisJaWYgKGVuZF9vZl9vbGQgPT0gb2xkX3BhdGggJiYgZW5kX29mX25ldyA9PSBuZXdfcGF0aCAmJgorCSAgICAqZW5kX29mX29sZCA9PSAqZW5kX29mX25ldykKKwkJcmV0dXJuOyAvKiBOb3RlOiAqb2xkX2RpciBhbmQgKm5ld19kaXIgYXJlIHN0aWxsIE5VTEwgKi8KKworCS8qCisJICogSWYgZW5kX29mX25ldyBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGl0cyBzdHJpbmcsIGFuZAorCSAqIGVuZF9vZl9vbGQgZ290IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBzb21lIHN1YmRpcmVjdG9yeSwgdGhlbgorCSAqIHdlIGhhdmUgYSByZW5hbWUvbWVyZ2Ugb2YgYSBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdCwgd2hpY2gKKwkgKiBuZWVkcyBzbGlnaHRseSBzcGVjaWFsIGhhbmRsaW5nLgorCSAqCisJICogTm90ZTogVGhlcmUgaXMgbm8gbmVlZCB0byBjb25zaWRlciB0aGUgb3Bwb3NpdGUgY2FzZSwgd2l0aCBhCisJICogcmVuYW1lL21lcmdlIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbnRvIHNvbWUgc3ViZGlyZWN0b3J5CisJICogYmVjYXVzZSBhcyBub3RlZCBhYm92ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cyBzbyBpdAorCSAqIGNhbm5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIHJlbmFtZWQuCisJICovCisJaWYgKGVuZF9vZl9uZXcgPT0gbmV3X3BhdGggJiYKKwkgICAgZW5kX29mX29sZCAhPSBvbGRfcGF0aCAmJiBlbmRfb2Zfb2xkWy0xXSA9PSAnLycpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgLS1lbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCQkqbmV3X2RpciA9IHhzdHJkdXAoIiIpOworCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiBXZSd2ZSBmb3VuZCB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBpbiB0aGUgZGlyZWN0b3J5Ci0JICogcGF0aHMuICBUaGF0IG1lYW5zIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3ZSB3ZXJlIGNvbXBhcmluZwotCSAqIHJlcHJlc2VudHMgdGhlIHJlbmFtZS4gIE1vdmUgZW5kX29mX29sZCBhbmQgZW5kX29mX25ldyBiYWNrCi0JICogdG8gdGhlIGZ1bGwgZGlyZWN0b3J5IG5hbWUuCisJICogcGF0aHMuICBUaGF0IG1lYW5zIHRoZSBjdXJyZW50IGNoYXJhY3RlcnMgd2Ugd2VyZSBsb29raW5nIGF0CisJICogd2VyZSBwYXJ0IG9mIHRoZSBmaXJzdCBub24tbWF0Y2hpbmcgc3ViZGlyIG5hbWUgZ29pbmcgYmFjayBmcm9tCisJICogdGhlIGVuZCBvZiB0aGUgc3RyaW5ncy4gIEdldCB0aGUgd2hvbGUgbmFtZSBieSBhZHZhbmNpbmcgYm90aAorCSAqIGVuZF9vZl9vbGQgYW5kIGVuZF9vZl9uZXcgdG8gdGhlIE5FWFQgJy8nIGNoYXJhY3Rlci4gIFRoYXQgd2lsbAorCSAqIHJlcHJlc2VudCB0aGUgZW50aXJlIGRpcmVjdG9yeSByZW5hbWUuCisJICoKKwkgKiBUaGUgcmVhc29uIGZvciB0aGUgaW5jcmVtZW50IGlzIGNhc2VzIGxpa2UKKwkgKiAgICBhL2Ivc3Rhci9mb28vd2hhdGV2ZXIuYyAtPiBhL2IvdGFyL2Zvby9yYW5kb20uYworCSAqIEFmdGVyIGRyb3BwaW5nIHRoZSBiYXNlbmFtZSBhbmQgZ29pbmcgYmFjayB0byB0aGUgZmlyc3QKKwkgKiBub24tbWF0Y2hpbmcgY2hhcmFjdGVyLCB3ZSdyZSBub3cgY29tcGFyaW5nOgorCSAqICAgIGEvYi9zICAgICAgICAgIGFuZCAgICAgICAgIGEvYi8KKwkgKiBhbmQgd2Ugd2FudCB0byBiZSBjb21wYXJpbmc6CisJICogICAgYS9iL3N0YXIvICAgICAgYW5kICAgICAgICAgYS9iL3Rhci8KKwkgKiBidXQgd2l0aG91dCB0aGUgcHJlLWluY3JlbWVudCwgdGhlIG9uZSBvbiB0aGUgcmlnaHQgd291bGQgc3RheQorCSAqIGEvYi8uCiAJICovCi0JaWYgKCplbmRfb2Zfb2xkID09ICcvJykKLQkJZW5kX29mX29sZCsrOwotCWlmICgqZW5kX29mX29sZCAhPSAnLycpCi0JCWVuZF9vZl9uZXcrKzsKLQllbmRfb2Zfb2xkID0gc3RyY2hyKGVuZF9vZl9vbGQsICcvJyk7Ci0JZW5kX29mX25ldyA9IHN0cmNocihlbmRfb2ZfbmV3LCAnLycpOworCWVuZF9vZl9vbGQgPSBzdHJjaHIoKytlbmRfb2Zfb2xkLCAnLycpOworCWVuZF9vZl9uZXcgPSBzdHJjaHIoKytlbmRfb2ZfbmV3LCAnLycpOwogCi0JLyoKLQkgKiBJdCBtYXkgaGF2ZSBiZWVuIHRoZSBjYXNlIHRoYXQgb2xkX3BhdGggYW5kIG5ld19wYXRoIHdlcmUgdGhlIHNhbWUKLQkgKiBkaXJlY3RvcnkgYWxsIGFsb25nLiAgRG9uJ3QgY2xhaW0gYSByZW5hbWUgaWYgdGhleSdyZSB0aGUgc2FtZS4KLQkgKi8KLQlvbGRfbGVuID0gZW5kX29mX29sZCAtIG9sZF9wYXRoOwotCW5ld19sZW4gPSBlbmRfb2ZfbmV3IC0gbmV3X3BhdGg7Ci0KLQlpZiAob2xkX2xlbiAhPSBuZXdfbGVuIHx8IHN0cm5jbXAob2xkX3BhdGgsIG5ld19wYXRoLCBvbGRfbGVuKSkgewotCQkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCBvbGRfbGVuKTsKLQkJKm5ld19kaXIgPSB4c3RybmR1cChuZXdfcGF0aCwgbmV3X2xlbik7Ci0JfQorCS8qIENvcHkgdGhlIG9sZCBhbmQgbmV3IGRpcmVjdG9yaWVzIGludG8gKm9sZF9kaXIgYW5kICpuZXdfZGlyLiAqLworCSpvbGRfZGlyID0geHN0cm5kdXAob2xkX3BhdGgsIGVuZF9vZl9vbGQgLSBvbGRfcGF0aCk7CisJKm5ld19kaXIgPSB4c3RybmR1cChuZXdfcGF0aCwgZW5kX29mX25ldyAtIG5ld19wYXRoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX2hhc2htYXBfZW50cmllcyhzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCmRpZmYgLS1naXQgYS9taWR4LmMgYi9taWR4LmMKaW5kZXggZjI5YWZjMC4uMzdlYzI4NiAxMDA2NDQKLS0tIGEvbWlkeC5jCisrKyBiL21pZHguYwpAQCAtNDQ4LDYgKzQ0OCw4IEBACiAJdWludDMyX3QgbnI7CiAJdWludDMyX3QgYWxsb2M7CiAJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwl1bnNpZ25lZCBwYWNrX3BhdGhzX2NoZWNrZWQ7CiB9OwogCiBzdGF0aWMgdm9pZCBhZGRfcGFja190b19taWR4KGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc2l6ZV90IGZ1bGxfcGF0aF9sZW4sCkBAIC00NTYsNiArNDU4LDcgQEAKIAlzdHJ1Y3QgcGFja19saXN0ICpwYWNrcyA9IChzdHJ1Y3QgcGFja19saXN0ICopZGF0YTsKIAogCWlmIChlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLmlkeCIpKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocGFja3MtPnByb2dyZXNzLCArK3BhY2tzLT5wYWNrX3BhdGhzX2NoZWNrZWQpOwogCQlpZiAocGFja3MtPm0gJiYgbWlkeF9jb250YWluc19wYWNrKHBhY2tzLT5tLCBmaWxlX25hbWUpKQogCQkJcmV0dXJuOwogCkBAIC03ODUsNyArNzg4LDcgQEAKIH0KIAogc3RhdGljIGludCB3cml0ZV9taWR4X2ludGVybmFsKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAotCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja3NfdG9fZHJvcCkKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tzX3RvX2Ryb3AsIHVuc2lnbmVkIGZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgY3VyX2NodW5rLCBudW1fY2h1bmtzID0gMDsKIAljaGFyICptaWR4X25hbWU7CkBAIC03OTksNiArODAyLDcgQEAKIAl1aW50NjRfdCBjaHVua19vZmZzZXRzW01JRFhfTUFYX0NIVU5LUyArIDFdOwogCXVpbnQzMl90IG5yX2VudHJpZXMsIG51bV9sYXJnZV9vZmZzZXRzID0gMDsKIAlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyaWVzID0gTlVMTDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAlpbnQgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAwOwogCWludCBwYWNrX25hbWVfY29uY2F0X2xlbiA9IDA7CiAJaW50IGRyb3BwZWRfcGFja3MgPSAwOwpAQCAtODMzLDcgKzgzNywxNCBAQAogCQl9CiAJfQogCisJcGFja3MucGFja19wYXRoc19jaGVja2VkID0gMDsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwYWNrcy5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIpLCAwKTsKKwllbHNlCisJCXBhY2tzLnByb2dyZXNzID0gTlVMTDsKKwogCWZvcl9lYWNoX2ZpbGVfaW5fcGFja19kaXIob2JqZWN0X2RpciwgYWRkX3BhY2tfdG9fbWlkeCwgJnBhY2tzKTsKKwlzdG9wX3Byb2dyZXNzKCZwYWNrcy5wcm9ncmVzcyk7CiAKIAlpZiAocGFja3MubSAmJiBwYWNrcy5uciA9PSBwYWNrcy5tLT5udW1fcGFja3MgJiYgIXBhY2tzX3RvX2Ryb3ApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTk1OCw2ICs5NjksOSBAQAogCQl3cml0dGVuICs9IE1JRFhfQ0hVTktMT09LVVBfV0lEVEg7CiAJfQogCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IiksCisJCQkJCSAgbnVtX2NodW5rcyk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgewogCQlpZiAod3JpdHRlbiAhPSBjaHVua19vZmZzZXRzW2ldKQogCQkJQlVHKCJpbmNvcnJlY3QgY2h1bmsgb2Zmc2V0ICglIlBSSXU2NCIgIT0gJSJQUkl1NjQiKSBmb3IgY2h1bmsgaWQgJSJQUkl4MzIsCkBAIC05OTAsNyArMTAwNCwxMCBAQAogCQkJCUJVRygidHJ5aW5nIHRvIHdyaXRlIHVua25vd24gY2h1bmsgaWQgJSJQUkl4MzIsCiAJCQkJICAgIGNodW5rX2lkc1tpXSk7CiAJCX0KKworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CiAJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAogCWlmICh3cml0dGVuICE9IGNodW5rX29mZnNldHNbbnVtX2NodW5rc10pCiAJCUJVRygiaW5jb3JyZWN0IGZpbmFsIG9mZnNldCAlIlBSSXU2NCIgIT0gJSJQUkl1NjQsCkBAIC0xMDE2LDkgKzEwMzMsOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLWludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK2ludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0JcmV0dXJuIHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgTlVMTCwgTlVMTCwgZmxhZ3MpOwogfQogCiB2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKQEAgLTEwNzYsMTkgKzEwOTMsMjAgQEAKIAkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIF9uKTsgXAogCX0gd2hpbGUgKDApCiAKLWludCB2ZXJpZnlfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyKQoraW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBwYWlyX3Bvc192c19pZCAqcGFpcnMgPSBOVUxMOwogCXVpbnQzMl90IGk7Ci0Jc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKIAl2ZXJpZnlfbWlkeF9lcnJvciA9IDA7CiAKIAlpZiAoIW0pCiAJCXJldHVybiAwOwogCi0JcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIpLAotCQkJCSAgbS0+bnVtX3BhY2tzKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIiksCisJCQkJCSAgbS0+bnVtX3BhY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKIAkJaWYgKHByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIGkpKQogCQkJbWlkeF9yZXBvcnQoImZhaWxlZCB0byBsb2FkIHBhY2sgaW4gcG9zaXRpb24gJWQiLCBpKTsKQEAgLTExMDYsOCArMTEyNCw5IEBACiAJCQkJICAgIGksIG9pZF9mYW5vdXQxLCBvaWRfZmFub3V0MiwgaSArIDEpOwogCX0KIAotCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gTUlEWCIpLAotCQkJCQkgbS0+bnVtX29iamVjdHMgLSAxKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiKSwKKwkJCQkJCSBtLT5udW1fb2JqZWN0cyAtIDEpOwogCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0cyAtIDE7IGkrKykgewogCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDEsIG9pZDI7CiAKQEAgLTExMzQsMTMgKzExNTMsMTUgQEAKIAkJcGFpcnNbaV0ucGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOwogCX0KIAotCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIpLAotCQkJCQkgbS0+bnVtX29iamVjdHMpOworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIpLAorCQkJCQkJIG0tPm51bV9vYmplY3RzKTsKIAlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCAwKTsgLyogVE9ETzogTWVhc3VyZSBRU09SVCgpIHByb2dyZXNzICovCiAJUVNPUlQocGFpcnMsIG0tPm51bV9vYmplY3RzLCBjb21wYXJlX3BhaXJfcG9zX3ZzX2lkKTsKIAlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CiAKLQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiKSwgbS0+bnVtX29iamVjdHMpOworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIpLCBtLT5udW1fb2JqZWN0cyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJCXN0cnVjdCBwYWNrX2VudHJ5IGU7CkBAIC0xMTgzLDIzICsxMjA0LDM0IEBACiAJcmV0dXJuIHZlcmlmeV9taWR4X2Vycm9yOwogfQogCi1pbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpCitpbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQogewogCXVpbnQzMl90IGksICpjb3VudCwgcmVzdWx0ID0gMDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFja3NfdG9fZHJvcCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwogCiAJaWYgKCFtKQogCQlyZXR1cm4gMDsKIAogCWNvdW50ID0geGNhbGxvYyhtLT5udW1fcGFja3MsIHNpemVvZih1aW50MzJfdCkpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiKSwKKwkJCQkJICBtLT5udW1fb2JqZWN0cyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKIAkJaW50IHBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBpKTsKIAkJY291bnRbcGFja19pbnRfaWRdKys7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKIAl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOwogCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIiksCisJCQkJCSAgbS0+bnVtX3BhY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKIAkJY2hhciAqcGFja19uYW1lOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CiAKIAkJaWYgKGNvdW50W2ldKQogCQkJY29udGludWU7CkBAIC0xMjE3LDExICsxMjQ5LDEyIEBACiAJCXVubGlua19wYWNrX3BhdGgocGFja19uYW1lLCAwKTsKIAkJZnJlZShwYWNrX25hbWUpOwogCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CiAKIAlmcmVlKGNvdW50KTsKIAogCWlmIChwYWNrc190b19kcm9wLm5yKQotCQlyZXN1bHQgPSB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIG0sICZwYWNrc190b19kcm9wKTsKKwkJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCAmcGFja3NfdG9fZHJvcCwgZmxhZ3MpOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIoJnBhY2tzX3RvX2Ryb3AsIDApOwogCXJldHVybiByZXN1bHQ7CkBAIC0xMzE1LDcgKzEzNDgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplKQoraW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJdWludDMyX3QgaTsKQEAgLTEzNDAsNiArMTM3MywxMiBAQAogCXN0cmJ1Zl9hZGRzdHIoJmJhc2VfbmFtZSwgb2JqZWN0X2Rpcik7CiAJc3RyYnVmX2FkZHN0cigmYmFzZV9uYW1lLCAiL3BhY2svcGFjayIpOwogCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGJhc2VfbmFtZS5idWYpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItcSIpOworCiAJc3RyYnVmX3JlbGVhc2UoJmJhc2VfbmFtZSk7CiAKIAljbWQuZ2l0X2NtZCA9IDE7CkBAIC0xMzcwLDcgKzE0MDksNyBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCBOVUxMKTsKKwlyZXN1bHQgPSB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIG0sIE5VTEwsIGZsYWdzKTsKIAltID0gTlVMTDsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL21pZHguaCBiL21pZHguaAppbmRleCBmMGFlNjU2Li5lNmZhMzU2IDEwMDY0NAotLS0gYS9taWR4LmgKKysrIGIvbWlkeC5oCkBAIC0zNyw2ICszNyw4IEBACiAJY2hhciBvYmplY3RfZGlyW0ZMRVhfQVJSQVldOwogfTsKIAorI2RlZmluZSBNSURYX1BST0dSRVNTICAgICAoMSA8PCAwKQorCiBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbG9hZF9tdWx0aV9wYWNrX2luZGV4KGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIGludCBsb2NhbCk7CiBpbnQgcHJlcGFyZV9taWR4X3BhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCBwYWNrX2ludF9pZCk7CiBpbnQgYnNlYXJjaF9taWR4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90ICpyZXN1bHQpOwpAQCAtNDcsMTEgKzQ5LDExIEBACiBpbnQgbWlkeF9jb250YWluc19wYWNrKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCBjb25zdCBjaGFyICppZHhfb3JfcGFja19uYW1lKTsKIGludCBwcmVwYXJlX211bHRpX3BhY2tfaW5kZXhfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBpbnQgbG9jYWwpOwogCi1pbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOworaW50IHdyaXRlX21pZHhfZmlsZShjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CiB2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Ci1pbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpcik7Ci1pbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOwotaW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSk7CitpbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpOworaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CitpbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplLCB1bnNpZ25lZCBmbGFncyk7CiAKIHZvaWQgY2xvc2VfbWlkeChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSk7CiAKZGlmZiAtLWdpdCBhL25hbWUtaGFzaC5jIGIvbmFtZS1oYXNoLmMKaW5kZXggY2ViMWQ3Yi4uZmI1MjZhMyAxMDA2NDQKLS0tIGEvbmFtZS1oYXNoLmMKKysrIGIvbmFtZS1oYXNoLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAvKgogICogU2V0IGEgbWluaW11bSBudW1iZXIgb2YgY2FjaGVfZW50cmllcyB0aGF0IHdlIHdpbGwgaGFuZGxlIHBlcgotICogdGhyZWFkIGFuZCB1c2UgdGhhdCB0byBkZWNpZGUgaG93IG1hbnkgdGhyZWFkcyB0byBydW4gKHVwdG8KKyAqIHRocmVhZCBhbmQgdXNlIHRoYXQgdG8gZGVjaWRlIGhvdyBtYW55IHRocmVhZHMgdG8gcnVuICh1cCB0bwogICogdGhlIG51bWJlciBvbiB0aGUgc3lzdGVtKS4KICAqCiAgKiBGb3IgZ3VpZGFuY2Ugc2V0dGluZyB0aGUgbG93ZXIgcGVyLXRocmVhZCBib3VuZCwgc2VlOgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgKiBIb3dldmVyLCB0aGUgaGFzaG1hcCBpcyBnb2luZyB0byBwdXQgaXRlbXMgaW50byBidWNrZXQKICAqIGNoYWlucyBiYXNlZCBvbiB0aGVpciBoYXNoIHZhbHVlcy4gIFVzZSB0aGF0IHRvIGNyZWF0ZSBuCiAgKiBtdXRleGVzIGFuZCBsb2NrIG9uIG11dGV4W2J1Y2tldChoYXNoKSAlIG5dLiAgVGhpcyB3aWxsCi0gKiBkZWNyZWFzZSB0aGUgY29sbGlzaW9uIHJhdGUgYnkgKGhvcGVmdWxseSkgYnkgYSBmYWN0b3Igb2Ygbi4KKyAqIGRlY3JlYXNlIHRoZSBjb2xsaXNpb24gcmF0ZSBieSAoaG9wZWZ1bGx5KSBhIGZhY3RvciBvZiBuLgogICovCiBzdGF0aWMgdm9pZCBpbml0X2Rpcl9tdXRleCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmMgYi9wYWNrLW9iamVjdHMuYwppbmRleCBjNjI1MGQ3Li41ZTVhM2M2IDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuYworKysgYi9wYWNrLW9iamVjdHMuYwpAQCAtMTE5LDcgKzExOSwxMCBAQAogewogCXVpbnQzMl90IGk7CiAKLQlSRUFMTE9DX0FSUkFZKHBhY2stPmluX3BhY2ssIHBhY2stPm5yX2FsbG9jKTsKKwlpZiAocGFjay0+aW5fcGFjaykKKwkJQlVHKCJwYWNraW5nX2RhdGEgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gcGFjayBhcnJheSIpOworCisJQUxMT0NfQVJSQVkocGFjay0+aW5fcGFjaywgcGFjay0+bnJfYWxsb2MpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhY2stPm5yX29iamVjdHM7IGkrKykKIAkJcGFjay0+aW5fcGFja1tpXSA9IG9lX2luX3BhY2socGFjaywgcGFjay0+b2JqZWN0cyArIGkpOwpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmggYi9wYWNrLW9iamVjdHMuaAppbmRleCA2ZmU2YWU1Li5kMzk3NWUwIDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuaAorKysgYi9wYWNrLW9iamVjdHMuaApAQCAtMjUxLDEyICsyNTEsMjEgQEAKIAkJCQkgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCiAJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKIHsKLQlpZiAoIXAtPmluZGV4KQorCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkgeworCQlpZiAocC0+aW5kZXgpIHsKKwkJCWUtPmluX3BhY2tfaWR4ID0gcC0+aW5kZXg7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogV2UncmUgYWNjZXNzaW5nIHBhY2tzIGJ5IGluZGV4LCBidXQgdGhpcyBwYWNrIGRvZXNuJ3QgaGF2ZQorCQkgKiBhbiBpbmRleCAoZS5nLiwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgc2luY2Ugd2UgY3JlYXRlZCB0aGUKKwkJICogaW5fcGFja19ieV9pZHggYXJyYXkpLiBCYWlsIHRvIG9lX21hcF9uZXdfcGFjaygpLCB3aGljaAorCQkgKiB3aWxsIGNvbnZlcnQgdXMgdG8gdXNpbmcgdGhlIGZ1bGwgaW5fcGFjayBhcnJheSwgYW5kIHRoZW4KKwkJICogZmFsbCB0aHJvdWdoIHRvIG91ciBpbl9wYWNrIGhhbmRsaW5nLgorCQkgKi8KIAkJb2VfbWFwX25ld19wYWNrKHBhY2spOwotCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkKLQkJZS0+aW5fcGFja19pZHggPSBwLT5pbmRleDsKLQllbHNlCi0JCXBhY2stPmluX3BhY2tbZSAtIHBhY2stPm9iamVjdHNdID0gcDsKKwl9CisJcGFjay0+aW5fcGFja1tlIC0gcGFjay0+b2JqZWN0c10gPSBwOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmplY3RfZW50cnkgKm9lX2RlbHRhKApkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy1jYi5jIGIvcGFyc2Utb3B0aW9ucy1jYi5jCmluZGV4IDEyNDBhODUuLmMyMDYyYWUgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMtY2IuYworKysgYi9wYXJzZS1vcHRpb25zLWNiLmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogCiBzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2R1cChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvKQogeworCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9yaWcgPSBvOwogCXN0cnVjdCBvcHRpb24gKm9wdHM7CiAJaW50IG5yID0gMDsKIApAQCAtMTcwLDcgKzE3MSw3IEBACiAJfQogCiAJQUxMT0NfQVJSQVkob3B0cywgbnIgKyAxKTsKLQltZW1jcHkob3B0cywgbyAtIG5yLCBzaXplb2YoKm8pICogbnIpOworCUNPUFlfQVJSQVkob3B0cywgb3JpZywgbnIpOwogCW1lbXNldChvcHRzICsgbnIsIDAsIHNpemVvZigqb3B0cykpOwogCW9wdHNbbnJdLnR5cGUgPSBPUFRJT05fRU5EOwogCXJldHVybiBvcHRzOwpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCmluZGV4IGI0MmY1NGQuLjYwZmFlM2EgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuYworKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTYyMyw3ICs2MjMsNyBAQAogICogU2NhbiBhbmQgbWF5IHByb2R1Y2UgYSBuZXcgb3B0aW9uW10gYXJyYXksIHdoaWNoIHNob3VsZCBiZSB1c2VkCiAgKiBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCAnb3B0aW9ucycuCiAgKgotICogUmlnaHQgbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIHByZXByb2Nlc3MgYW5kIHN1YnN0aXR1ZQorICogUmlnaHQgbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIHByZXByb2Nlc3MgYW5kIHN1YnN0aXR1dGUKICAqIE9QVElPTl9BTElBUy4KICAqLwogc3RhdGljIHN0cnVjdCBvcHRpb24gKnByZXByb2Nlc3Nfb3B0aW9ucyhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKaW5kZXggZTNkYTFmMy4uMDYwNzE1NiAxMDA2NDQKLS0tIGEvcGF0aC5jCisrKyBiL3BhdGguYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInBhdGguaCIKICNpbmNsdWRlICJwYWNrZmlsZS5oIgogI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCiAKIHN0YXRpYyBpbnQgZ2V0X3N0X21vZGVfYml0cyhjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCiB7CkBAIC0xMDEsMzYgKzEwMiwzNiBAQAogCS8qIE5vdCBjb25zaWRlcmVkIGdhcmJhZ2UgZm9yIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSAqLwogCXVuc2lnbmVkIGlnbm9yZV9nYXJiYWdlOjE7CiAJdW5zaWduZWQgaXNfZGlyOjE7Ci0JLyogTm90IGNvbW1vbiBldmVuIHRob3VnaCBpdHMgcGFyZW50IGlzICovCi0JdW5zaWduZWQgZXhjbHVkZToxOwotCWNvbnN0IGNoYXIgKmRpcm5hbWU7CisJLyogQmVsb25ncyB0byB0aGUgY29tbW9uIGRpciwgdGhvdWdoIGl0IG1heSBjb250YWluIHBhdGhzIHRoYXQgZG9uJ3QgKi8KKwl1bnNpZ25lZCBpc19jb21tb246MTsKKwljb25zdCBjaGFyICpwYXRoOwogfTsKIAogc3RhdGljIHN0cnVjdCBjb21tb25fZGlyIGNvbW1vbl9saXN0W10gPSB7Ci0JeyAwLCAxLCAwLCAiYnJhbmNoZXMiIH0sCi0JeyAwLCAxLCAwLCAiY29tbW9uIiB9LAotCXsgMCwgMSwgMCwgImhvb2tzIiB9LAotCXsgMCwgMSwgMCwgImluZm8iIH0sCi0JeyAwLCAwLCAxLCAiaW5mby9zcGFyc2UtY2hlY2tvdXQiIH0sCi0JeyAxLCAxLCAwLCAibG9ncyIgfSwKLQl7IDEsIDEsIDEsICJsb2dzL0hFQUQiIH0sCi0JeyAwLCAxLCAxLCAibG9ncy9yZWZzL2Jpc2VjdCIgfSwKLQl7IDAsIDEsIDEsICJsb2dzL3JlZnMvcmV3cml0dGVuIiB9LAotCXsgMCwgMSwgMSwgImxvZ3MvcmVmcy93b3JrdHJlZSIgfSwKLQl7IDAsIDEsIDAsICJsb3N0LWZvdW5kIiB9LAotCXsgMCwgMSwgMCwgIm9iamVjdHMiIH0sCi0JeyAwLCAxLCAwLCAicmVmcyIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL2Jpc2VjdCIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL3Jld3JpdHRlbiIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL3dvcmt0cmVlIiB9LAotCXsgMCwgMSwgMCwgInJlbW90ZXMiIH0sCi0JeyAwLCAxLCAwLCAid29ya3RyZWVzIiB9LAotCXsgMCwgMSwgMCwgInJyLWNhY2hlIiB9LAotCXsgMCwgMSwgMCwgInN2biIgfSwKLQl7IDAsIDAsIDAsICJjb25maWciIH0sCi0JeyAxLCAwLCAwLCAiZ2MucGlkIiB9LAotCXsgMCwgMCwgMCwgInBhY2tlZC1yZWZzIiB9LAotCXsgMCwgMCwgMCwgInNoYWxsb3ciIH0sCisJeyAwLCAxLCAxLCAiYnJhbmNoZXMiIH0sCisJeyAwLCAxLCAxLCAiY29tbW9uIiB9LAorCXsgMCwgMSwgMSwgImhvb2tzIiB9LAorCXsgMCwgMSwgMSwgImluZm8iIH0sCisJeyAwLCAwLCAwLCAiaW5mby9zcGFyc2UtY2hlY2tvdXQiIH0sCisJeyAxLCAxLCAxLCAibG9ncyIgfSwKKwl7IDEsIDAsIDAsICJsb2dzL0hFQUQiIH0sCisJeyAwLCAxLCAwLCAibG9ncy9yZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJsb2dzL3JlZnMvcmV3cml0dGVuIiB9LAorCXsgMCwgMSwgMCwgImxvZ3MvcmVmcy93b3JrdHJlZSIgfSwKKwl7IDAsIDEsIDEsICJsb3N0LWZvdW5kIiB9LAorCXsgMCwgMSwgMSwgIm9iamVjdHMiIH0sCisJeyAwLCAxLCAxLCAicmVmcyIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3Jld3JpdHRlbiIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3dvcmt0cmVlIiB9LAorCXsgMCwgMSwgMSwgInJlbW90ZXMiIH0sCisJeyAwLCAxLCAxLCAid29ya3RyZWVzIiB9LAorCXsgMCwgMSwgMSwgInJyLWNhY2hlIiB9LAorCXsgMCwgMSwgMSwgInN2biIgfSwKKwl7IDAsIDAsIDEsICJjb25maWciIH0sCisJeyAxLCAwLCAxLCAiZ2MucGlkIiB9LAorCXsgMCwgMCwgMSwgInBhY2tlZC1yZWZzIiB9LAorCXsgMCwgMCwgMSwgInNoYWxsb3ciIH0sCiAJeyAwLCAwLCAwLCBOVUxMIH0KIH07CiAKQEAgLTIzNiwzMCArMjM3LDQxIEBACiAJcmV0dXJuIG9sZDsKIH0KIAotdHlwZWRlZiBpbnQgKCptYXRjaF9mbikoY29uc3QgY2hhciAqdW5tYXRjaGVkLCB2b2lkICpkYXRhLCB2b2lkICpiYXRvbik7Cit0eXBlZGVmIGludCAoKm1hdGNoX2ZuKShjb25zdCBjaGFyICp1bm1hdGNoZWQsIHZvaWQgKnZhbHVlLCB2b2lkICpiYXRvbik7CiAKIC8qCiAgKiBTZWFyY2ggYSB0cmllIGZvciBzb21lIGtleS4gIEZpbmQgdGhlIGxvbmdlc3QgLy1vci1cMC10ZXJtaW5hdGVkCi0gKiBwcmVmaXggb2YgdGhlIGtleSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZS4gIENhbGwgZm4KLSAqIHdpdGggdGhlIHVubWF0Y2hlZCBwb3J0aW9uIG9mIHRoZSBrZXkgYW5kIHRoZSBmb3VuZCB2YWx1ZSwgYW5kCi0gKiByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggcHJlZml4LCByZXR1cm4gLTEuCisgKiBwcmVmaXggb2YgdGhlIGtleSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZS4gIElmIHRoZXJlIGlzCisgKiBubyBzdWNoIHByZWZpeCwgcmV0dXJuIC0xLiAgT3RoZXJ3aXNlIGNhbGwgZm4gd2l0aCB0aGUgdW5tYXRjaGVkCisgKiBwb3J0aW9uIG9mIHRoZSBrZXkgYW5kIHRoZSBmb3VuZCB2YWx1ZS4gIElmIGZuIHJldHVybnMgMCBvcgorICogcG9zaXRpdmUsIHRoZW4gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuICBJZiBmbiByZXR1cm5zIG5lZ2F0aXZlLAorICogdGhlbiBjYWxsIGZuIHdpdGggdGhlIG5leHQtbG9uZ2VzdCAvLXRlcm1pbmF0ZWQgcHJlZml4IG9mIHRoZSBrZXkKKyAqIChpLmUuIGEgcGFyZW50IGRpcmVjdG9yeSkgZm9yIHdoaWNoIHRoZSB0cmllIGNvbnRhaW5zIGEgdmFsdWUsIGFuZAorICogaGFuZGxlIGl0cyByZXR1cm4gdmFsdWUgdGhlIHNhbWUgd2F5LiAgSWYgdGhlcmUgaXMgbm8gc2hvcnRlcgorICogLy10ZXJtaW5hdGVkIHByZWZpeCB3aXRoIGEgdmFsdWUgbGVmdCwgdGhlbiByZXR1cm4gdGhlIG5lZ2F0aXZlCisgKiByZXR1cm4gdmFsdWUgb2YgdGhlIG1vc3QgcmVjZW50IGZuIGludm9jYXRpb24uCiAgKgogICogVGhlIGtleSBpcyBwYXJ0aWFsbHkgbm9ybWFsaXplZDogY29uc2VjdXRpdmUgc2xhc2hlcyBhcmUgc2tpcHBlZC4KICAqCi0gKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIHRyaWUgY29udGFpbmluZyBvbmx5IFtyZWZzLAotICogcmVmcy93b3JrdHJlZV0gKGJvdGggd2l0aCB2YWx1ZXMpLgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSB0cmllIGNvbnRhaW5pbmcgb25seSBbbG9ncywKKyAqIGxvZ3MvcmVmcy9iaXNlY3RdLCBib3RoIHdpdGggdmFsdWVzLCBidXQgbm90IGxvZ3MvcmVmcy4KICAqCi0gKiB8IGtleSAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgfCB2YWwgZnJvbSBub2RlIHwgcmV0dXJuIHZhbHVlIHwKLSAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAotICogfCBhICAgICAgICAgICAgICAgfCBub3QgY2FsbGVkIHwgbi9hICAgICAgICAgICB8IC0xICAgICAgICAgICB8Ci0gKiB8IHJlZnMgICAgICAgICAgICB8IFwwICAgICAgICAgfCByZWZzICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwgcmVmcy8gICAgICAgICAgIHwgLyAgICAgICAgICB8IHJlZnMgICAgICAgICAgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzL3cgICAgICAgICAgfCAvdyAgICAgICAgIHwgcmVmcyAgICAgICAgICB8IGFzIHBlciBmbiAgICB8Ci0gKiB8IHJlZnMvd29ya3RyZWUgICB8IFwwICAgICAgICAgfCByZWZzL3dvcmt0cmVlIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwgcmVmcy93b3JrdHJlZS8gIHwgLyAgICAgICAgICB8IHJlZnMvd29ya3RyZWUgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzL3dvcmt0cmVlL2EgfCAvYSAgICAgICAgIHwgcmVmcy93b3JrdHJlZSB8IGFzIHBlciBmbiAgICB8Ci0gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKLSAqCisgKiB8IGtleSAgICAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgICAgIHwgcHJlZml4IHRvIG5vZGUgICB8IHJldHVybiB2YWx1ZSB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CisgKiB8IGEgICAgICAgICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3N0b3JlICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3MgICAgICAgICAgICAgICB8IFwwICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvICAgICAgICAgICAgICB8IC8gICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcyAgICAgICAgICB8IC9yZWZzICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy8gICAgICAgICB8IC9yZWZzLyAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iICAgICAgICB8IC9yZWZzL2IgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3RlZCB8IC9yZWZzL2Jpc2VjdGVkIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QgICB8IFwwICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvICB8IC8gICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9hICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IChJZiBmbiBpbiB0aGUgcHJldmlvdXMgbGluZSByZXR1cm5zIC0xLCB0aGVuIGZuIGlzIGNhbGxlZCBvbmNlIG1vcmU6KSB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9yZWZzL2Jpc2VjdC9hIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgKi8KIHN0YXRpYyBpbnQgdHJpZV9maW5kKHN0cnVjdCB0cmllICpyb290LCBjb25zdCBjaGFyICprZXksIG1hdGNoX2ZuIGZuLAogCQkgICAgIHZvaWQgKmJhdG9uKQpAQCAtMjg4LDkgKzMwMCwxMyBAQAogCiAJLyogTWF0Y2hlZCB0aGUgZW50aXJlIGNvbXByZXNzZWQgc2VjdGlvbiAqLwogCWtleSArPSBpOwotCWlmICghKmtleSkKKwlpZiAoISprZXkpIHsKIAkJLyogRW5kIG9mIGtleSAqLwotCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQlpZiAocm9vdC0+dmFsdWUpCisJCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCiAJLyogUGFydGlhbCBwYXRoIG5vcm1hbGl6YXRpb246IHNraXAgY29uc2VjdXRpdmUgc2xhc2hlcyAqLwogCXdoaWxlIChrZXlbMF0gPT0gJy8nICYmIGtleVsxXSA9PSAnLycpCkBAIC0zMjAsOCArMzM2LDggQEAKIAlpZiAoY29tbW9uX3RyaWVfZG9uZV9zZXR1cCkKIAkJcmV0dXJuOwogCi0JZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPmRpcm5hbWU7IHArKykKLQkJYWRkX3RvX3RyaWUoJmNvbW1vbl90cmllLCBwLT5kaXJuYW1lLCBwKTsKKwlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+cGF0aDsgcCsrKQorCQlhZGRfdG9fdHJpZSgmY29tbW9uX3RyaWUsIHAtPnBhdGgsIHApOwogCiAJY29tbW9uX3RyaWVfZG9uZV9zZXR1cCA9IDE7CiB9CkBAIC0zMzQsMTQgKzM1MCwxMSBAQAogewogCXN0cnVjdCBjb21tb25fZGlyICpkaXIgPSB2YWx1ZTsKIAotCWlmICghZGlyKQotCQlyZXR1cm4gMDsKLQogCWlmIChkaXItPmlzX2RpciAmJiAodW5tYXRjaGVkWzBdID09IDAgfHwgdW5tYXRjaGVkWzBdID09ICcvJykpCi0JCXJldHVybiAhZGlyLT5leGNsdWRlOworCQlyZXR1cm4gZGlyLT5pc19jb21tb247CiAKIAlpZiAoIWRpci0+aXNfZGlyICYmIHVubWF0Y2hlZFswXSA9PSAwKQotCQlyZXR1cm4gIWRpci0+ZXhjbHVkZTsKKwkJcmV0dXJuIGRpci0+aXNfY29tbW9uOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTAsOSArMzYzLDE0IEBACiAJCQkgICAgICBjb25zdCBjaGFyICpjb21tb25fZGlyKQogewogCWNoYXIgKmJhc2UgPSBidWYtPmJ1ZiArIGdpdF9kaXJfbGVuOworCWludCBoYXNfbG9ja19zdWZmaXggPSBzdHJidWZfc3RyaXBfc3VmZml4KGJ1ZiwgTE9DS19TVUZGSVgpOworCiAJaW5pdF9jb21tb25fdHJpZSgpOwogCWlmICh0cmllX2ZpbmQoJmNvbW1vbl90cmllLCBiYXNlLCBjaGVja19jb21tb24sIE5VTEwpID4gMCkKIAkJcmVwbGFjZV9kaXIoYnVmLCBnaXRfZGlyX2xlbiwgY29tbW9uX2Rpcik7CisKKwlpZiAoaGFzX2xvY2tfc3VmZml4KQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgTE9DS19TVUZGSVgpOwogfQogCiB2b2lkIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSh2b2lkKQpAQCAtMzY1LDggKzM4Myw4IEBACiAJCXJldHVybjsKIAlzdHJidWZfYWRkZigmc2IsICIlcy8iLCBnZXRfZ2l0X2RpcigpKTsKIAlsZW4gPSBzYi5sZW47Ci0JZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPmRpcm5hbWU7IHArKykgewotCQljb25zdCBjaGFyICpwYXRoID0gcC0+ZGlybmFtZTsKKwlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+cGF0aDsgcCsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBwLT5wYXRoOwogCQlpZiAocC0+aWdub3JlX2dhcmJhZ2UpCiAJCQljb250aW51ZTsKIAkJc3RyYnVmX3NldGxlbigmc2IsIGxlbik7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC5wbSBiL3BlcmwvR2l0LnBtCmluZGV4IDYyYzQ3MmUuLjU0YzllZDAgMTAwNjQ0Ci0tLSBhL3BlcmwvR2l0LnBtCisrKyBiL3BlcmwvR2l0LnBtCkBAIC01NjMsNyArNTYzLDcgQEAKIFF1ZXJ5IHVzZXIgQzxQUk9NUFQ+IGFuZCByZXR1cm4gYW5zd2VyIGZyb20gdXNlci4KIAogSG9ub3VycyBHSVRfQVNLUEFTUyBhbmQgU1NIX0FTS1BBU1MgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBxdWVyeWluZwotdGhlIHVzZXIuIElmIG5vICpfQVNLUEFTUyB2YXJpYWJsZSBpcyBzZXQgb3IgYW4gZXJyb3Igb2Njb3VyZWQsCit0aGUgdXNlci4gSWYgbm8gKl9BU0tQQVNTIHZhcmlhYmxlIGlzIHNldCBvciBhbiBlcnJvciBvY2N1cnJlZCwKIHRoZSB0ZXJtaW5hbCBpcyB0cmllZCBhcyBhIGZhbGxiYWNrLgogSWYgQzxJU1BBU1NXT1JEPiBpcyBzZXQgYW5kIHRydWUsIHRoZSB0ZXJtaW5hbCBkaXNhYmxlcyBlY2hvLgogCmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IGIzMmYwMzYuLjkzZWI2ZTggMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAltYWlsID0gcy5tYWlsX2JlZ2luOwogCW1haWxsZW4gPSBzLm1haWxfZW5kIC0gcy5tYWlsX2JlZ2luOwogCi0JaWYgKHBhcnQgPT0gJ04nIHx8IHBhcnQgPT0gJ0UnKSAvKiBtYWlsbWFwIGxvb2t1cCAqLworCWlmIChwYXJ0ID09ICdOJyB8fCBwYXJ0ID09ICdFJyB8fCBwYXJ0ID09ICdMJykgLyogbWFpbG1hcCBsb29rdXAgKi8KIAkJbWFpbG1hcF9uYW1lKCZtYWlsLCAmbWFpbGxlbiwgJm5hbWUsICZuYW1lbGVuKTsKIAlpZiAocGFydCA9PSAnbicgfHwgcGFydCA9PSAnTicpIHsJLyogbmFtZSAqLwogCQlzdHJidWZfYWRkKHNiLCBuYW1lLCBuYW1lbGVuKTsKQEAgLTcwNiw2ICs3MDYsMTMgQEAKIAkJc3RyYnVmX2FkZChzYiwgbWFpbCwgbWFpbGxlbik7CiAJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CiAJfQorCWlmIChwYXJ0ID09ICdsJyB8fCBwYXJ0ID09ICdMJykgewkvKiBsb2NhbC1wYXJ0ICovCisJCWNvbnN0IGNoYXIgKmF0ID0gbWVtY2hyKG1haWwsICdAJywgbWFpbGxlbik7CisJCWlmIChhdCkKKwkJCW1haWxsZW4gPSBhdCAtIG1haWw7CisJCXN0cmJ1Zl9hZGQoc2IsIG1haWwsIG1haWxsZW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KIAogCWlmICghcy5kYXRlX2JlZ2luKQogCQlnb3RvIHNraXA7CmRpZmYgLS1naXQgYS9wcm9taXNvci1yZW1vdGUuYyBiL3Byb21pc29yLXJlbW90ZS5jCmluZGV4IDliZDViNzkuLjlmMzM4YzkgMTAwNjQ0Ci0tLSBhL3Byb21pc29yLXJlbW90ZS5jCisrKyBiL3Byb21pc29yLXJlbW90ZS5jCkBAIC0xNiwxMCArMTYsOCBAQAogewogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIAlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0JaW50IG9yaWdpbmFsX2ZldGNoX2lmX21pc3NpbmcgPSBmZXRjaF9pZl9taXNzaW5nOwogCWludCByZXM7CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKIAlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKIAlpZiAoIXJlbW90ZS0+dXJsWzBdKQogCQlkaWUoXygiUmVtb3RlIHdpdGggbm8gVVJMIikpOwpAQCAtMjgsNyArMjYsNiBAQAogCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZST01fUFJPTUlTT1IsICIxIik7CiAJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfTk9fREVQRU5ERU5UUywgIjEiKTsKIAlyZXMgPSB0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZik7Ci0JZmV0Y2hfaWZfbWlzc2luZyA9IG9yaWdpbmFsX2ZldGNoX2lmX21pc3Npbmc7CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvcmFuZ2UtZGlmZi5jIGIvcmFuZ2UtZGlmZi5jCmluZGV4IDdmZWQ1YTMuLmY1NmI0MDEgMTAwNjQ0Ci0tLSBhL3JhbmdlLWRpZmYuYworKysgYi9yYW5nZS1kaWZmLmMKQEAgLTQwLDcgKzQwLDggQEAKICAqIFJlYWRzIHRoZSBwYXRjaGVzIGludG8gYSBzdHJpbmcgbGlzdCwgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIGJlaW5nIHBvcHVsYXRlZAogICogYXMgc3RydWN0IG9iamVjdF9pZCAod2lsbCBuZWVkIHRvIGJlIGZyZWUoKWQpLgogICovCi1zdGF0aWMgaW50IHJlYWRfcGF0Y2hlcyhjb25zdCBjaGFyICpyYW5nZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQorc3RhdGljIGludCByZWFkX3BhdGNoZXMoY29uc3QgY2hhciAqcmFuZ2UsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCXN0cnVjdCBhcmd2X2FycmF5ICpvdGhlcl9hcmcpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgY29udGVudHMgPSBTVFJCVUZfSU5JVDsKQEAgLTYxLDggKzYyLDExIEBACiAJCQkiLS1vdXRwdXQtaW5kaWNhdG9yLW5ldz0+IiwKIAkJCSItLW91dHB1dC1pbmRpY2F0b3Itb2xkPTwiLAogCQkJIi0tb3V0cHV0LWluZGljYXRvci1jb250ZXh0PSMiLAotCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsIHJhbmdlLAorCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsCiAJCQlOVUxMKTsKKwlpZiAob3RoZXJfYXJnKQorCQlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBvdGhlcl9hcmctPmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmFuZ2UpOwogCWNwLm91dCA9IC0xOwogCWNwLm5vX3N0ZGluID0gMTsKIAljcC5naXRfY21kID0gMTsKQEAgLTE0NCw2ICsxNDgsMTIgQEAKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOwogCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuXG4iKTsKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgIyMgQ29tbWl0IG1lc3NhZ2UgIyNcbiIpOworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiTm90ZXMiKSAmJgorCQkJCSAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJzonKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQkJCS8qIHN0cmlwIHRoZSB0cmFpbGluZyBjb2xvbiAqLworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIyMgJS4qcyAjI1xuIiwKKwkJCQkJICAgIChpbnQpKHN0cmxlbihsaW5lKSAtIDEpLCBsaW5lKTsKIAkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgIiAgICAiKSkgewogCQkJCXAgPSBsaW5lICsgbGVuIC0gMjsKIAkJCQl3aGlsZSAoaXNzcGFjZSgqcCkgJiYgcCA+PSBsaW5lKQpAQCAtNDk2LDE2ICs1MDYsMTcgQEAKIAogaW50IHNob3dfcmFuZ2VfZGlmZihjb25zdCBjaGFyICpyYW5nZTEsIGNvbnN0IGNoYXIgKnJhbmdlMiwKIAkJICAgIGludCBjcmVhdGlvbl9mYWN0b3IsIGludCBkdWFsX2NvbG9yLAotCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKKwkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKQogewogCWludCByZXMgPSAwOwogCiAJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaDEgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoMiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogCi0JaWYgKHJlYWRfcGF0Y2hlcyhyYW5nZTEsICZicmFuY2gxKSkKKwlpZiAocmVhZF9wYXRjaGVzKHJhbmdlMSwgJmJyYW5jaDEsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UxKTsKLQlpZiAoIXJlcyAmJiByZWFkX3BhdGNoZXMocmFuZ2UyLCAmYnJhbmNoMikpCisJaWYgKCFyZXMgJiYgcmVhZF9wYXRjaGVzKHJhbmdlMiwgJmJyYW5jaDIsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UyKTsKIAogCWlmICghcmVzKSB7CmRpZmYgLS1naXQgYS9yYW5nZS1kaWZmLmggYi9yYW5nZS1kaWZmLmgKaW5kZXggMDhhNTBiNi4uYzU3ZWM3ZCAxMDA2NDQKLS0tIGEvcmFuZ2UtZGlmZi5oCisrKyBiL3JhbmdlLWRpZmYuaApAQCAtMiwxNiArMiwxOCBAQAogI2RlZmluZSBSQU5HRV9ESUZGX0gKIAogI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCiAKICNkZWZpbmUgUkFOR0VfRElGRl9DUkVBVElPTl9GQUNUT1JfREVGQVVMVCA2MAogCiAvKgotICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbW1pdHMgaW4gUkFOR0UxIGFuZCBSQU5HRTIsIGFuZCBlbWl0IHRvIHRoZQorICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbWl0cyBpbiBSQU5HRTEgYW5kIFJBTkdFMiwgYW5kIGVtaXQgdG8gdGhlCiAgKiBzdGFuZGFyZCBvdXRwdXQuICBOVUxMIGNhbiBiZSBwYXNzZWQgdG8gRElGRk9QVCB0byB1c2UgdGhlIGJ1aWx0LWluCiAgKiBkZWZhdWx0LgogICovCiBpbnQgc2hvd19yYW5nZV9kaWZmKGNvbnN0IGNoYXIgKnJhbmdlMSwgY29uc3QgY2hhciAqcmFuZ2UyLAogCQkgICAgaW50IGNyZWF0aW9uX2ZhY3RvciwgaW50IGR1YWxfY29sb3IsCi0JCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KTsKKwkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggMTMzZjc5MC4uMDY3NDQyOCAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKW5hbWU7CiAJCXNpemVfdCBzdHJpcF9sZW4sIHByZXZpb3VzX2xlbjsKIAotCQkvKiBJZiB3ZSdyZSBhdCB0aGUgYmVnaW5pbmcgb2YgYSBibG9jaywgaWdub3JlIHRoZSBwcmV2aW91cyBuYW1lICovCisJCS8qIElmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jaywgaWdub3JlIHRoZSBwcmV2aW91cyBuYW1lICovCiAJCXN0cmlwX2xlbiA9IGRlY29kZV92YXJpbnQoJmNwKTsKIAkJaWYgKHByZXZpb3VzX2NlKSB7CiAJCQlwcmV2aW91c19sZW4gPSBwcmV2aW91c19jZS0+Y2VfbmFtZWxlbjsKZGlmZiAtLWdpdCBhL3JlZnMvcmVmcy1pbnRlcm5hbC5oIGIvcmVmcy9yZWZzLWludGVybmFsLmgKaW5kZXggZjJkOGMwMS4uZmYyNDM2YyAxMDA2NDQKLS0tIGEvcmVmcy9yZWZzLWludGVybmFsLmgKKysrIGIvcmVmcy9yZWZzLWludGVybmFsLmgKQEAgLTI2Miw3ICsyNjIsNyBAQAogICogYWZ0ZXIgY2FsbGluZyByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIGFnYWluIG9yIGNhbGxpbmcKICAqIHJlZl9pdGVyYXRvcl9hYm9ydCgpLCB5b3UgbXVzdCBtYWtlIGEgY29weS4gV2hlbiB0aGUgaXRlcmF0aW9uIGhhcwogICogYmVlbiBleGhhdXN0ZWQsIHJlZl9pdGVyYXRvcl9hZHZhbmNlKCkgcmVsZWFzZXMgYW55IHJlc291cmNlcwotICogYXNzb2NhdGVkIHdpdGggdGhlIGl0ZXJhdGlvbiwgZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QsIGFuZAorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVyYXRpb24sIGZyZWVzIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0LCBhbmQKICAqIHJldHVybnMgSVRFUl9ET05FLiBJZiB5b3Ugd2FudCB0byBhYm9ydCB0aGUgaXRlcmF0aW9uIGVhcmx5LCBjYWxsCiAgKiByZWZfaXRlcmF0b3JfYWJvcnQoKSwgd2hpY2ggYWxzbyBmcmVlcyB0aGUgcmVmX2l0ZXJhdG9yIG9iamVjdCBhbmQKICAqIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gSWYgdGhlcmUgd2FzIGFuIGludGVybmFsIGVycm9yIGFkdmFuY2luZwpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5jIGIvcmVwb3NpdG9yeS5jCmluZGV4IDY4MmMyMzkuLmE0MTc0ZGQgMTAwNjQ0Ci0tLSBhL3JlcG9zaXRvcnkuYworKysgYi9yZXBvc2l0b3J5LmMKQEAgLTIwMCw5ICsyMDAsOSBAQAogCiAJaWYgKHJlcG9faW5pdChzdWJyZXBvLCBnaXRkaXIuYnVmLCB3b3JrdHJlZS5idWYpKSB7CiAJCS8qCi0JCSAqIElmIGluaXRpbGl6YXRpb24gZmFpbHMgdGhlbiBpdCBtYXkgYmUgZHVlIHRvIHRoZSBzdWJtb2R1bGUKKwkJICogSWYgaW5pdGlhbGl6YXRpb24gZmFpbHMgdGhlbiBpdCBtYXkgYmUgZHVlIHRvIHRoZSBzdWJtb2R1bGUKIAkJICogbm90IGJlaW5nIHBvcHVsYXRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0J3Mgd29ya3RyZWUuICBJbnN0ZWFkCi0JCSAqIHdlIGNhbiB0cnkgdG8gaW5pdGlsaXplIHRoZSBzdWJtb2R1bGUgYnkgZmluZGluZyBpdCdzIGdpdGRpcgorCQkgKiB3ZSBjYW4gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZSBieSBmaW5kaW5nIGl0J3MgZ2l0ZGlyCiAJCSAqIGluIHRoZSBzdXBlcnByb2plY3QncyAnbW9kdWxlcycgZGlyZWN0b3J5LiAgSW4gdGhpcyBjYXNlIHRoZQogCQkgKiBzdWJtb2R1bGUgd291bGQgbm90IGhhdmUgYSB3b3JrdHJlZS4KIAkJICovCmRpZmYgLS1naXQgYS9yZXBvc2l0b3J5LmggYi9yZXBvc2l0b3J5LmgKaW5kZXggZmU0MjE5Ny4uMDQwMDU3ZCAxMDA2NDQKLS0tIGEvcmVwb3NpdG9yeS5oCisrKyBiL3JlcG9zaXRvcnkuaApAQCAtMTcyLDcgKzE3Miw3IEBACiAgKiBiZSBhbGxvY2F0ZWQgaWYgbmVlZGVkLgogICoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGluZGV4IGVudHJpZXMgaW4gdGhlIHBvcHVsYXRlZCBpbmRleCBvciBhIHZhbHVlIGxlc3MKLSAqIHRoYW4gemVybyBpZiBhbiBlcnJvciBvY2N1cmVkLiAgSWYgdGhlIHJlcG9zaXRvcnkncyBpbmRleCBoYXMgYWxyZWFkeSBiZWVuCisgKiB0aGFuIHplcm8gaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBJZiB0aGUgcmVwb3NpdG9yeSdzIGluZGV4IGhhcyBhbHJlYWR5IGJlZW4KICAqIHBvcHVsYXRlZCB0aGVuIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aWxsIHNpbXBseSBiZSByZXR1cm5lZC4KICAqLwogaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CmRpZmYgLS1naXQgYS9yZXJlcmUuYyBiL3JlcmVyZS5jCmluZGV4IDNlNTFmZGYuLjkyODExMzEgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5jCisrKyBiL3JlcmVyZS5jCkBAIC00MzEsNyArNDMxLDcgQEAKICAqIGFuZCBOVUwgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgogICoKICAqIFJldHVybiAxIGlmIGNvbmZsaWN0IGh1bmtzIGFyZSBmb3VuZCwgMCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3QKLSAqIGh1bmtzIGFuZCAtMSBpZiBhbiBlcnJvciBvY2N1cmVkLgorICogaHVua3MgYW5kIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IGhhbmRsZV9wYXRoKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHN0cnVjdCByZXJlcmVfaW8gKmlvLCBpbnQgbWFya2VyX3NpemUpCiB7CmRpZmYgLS1naXQgYS9zZW5kLXBhY2suYyBiL3NlbmQtcGFjay5jCmluZGV4IDM0Yzc3Y2IuLmE3MzIyZDMgMTAwNjQ0Ci0tLSBhL3NlbmQtcGFjay5jCisrKyBiL3NlbmQtcGFjay5jCkBAIC01NjUsOCArNTY1LDYgQEAKIAogCWlmIChuZWVkX3BhY2tfZGF0YSAmJiBjbWRzX3NlbnQpIHsKIAkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKLQkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQotCQkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19OT05FOwogCQkJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCiAJCQkJY2xvc2Uob3V0KTsKIAkJCWlmIChnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoY29ubikpCkBAIC01NzQsMTAgKzU3MiwxMiBAQAogCiAJCQkvKgogCQkJICogRG8gbm90IGV2ZW4gYm90aGVyIHdpdGggdGhlIHJldHVybiB2YWx1ZTsgd2Uga25vdyB3ZQotCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLgorCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLAorCQkJICogYXMgd2VsbCBhcyBtYXJraW5nIHJlZnMgd2l0aCB0aGVpciByZW1vdGUgc3RhdHVzIChpZgorCQkJICogd2UgZ2V0IG9uZSkuCiAJCQkgKi8KIAkJCWlmIChzdGF0dXNfcmVwb3J0KQotCQkJCXJlY2VpdmVfdW5wYWNrX3N0YXR1cygmcmVhZGVyKTsKKwkJCQlyZWNlaXZlX3N0YXR1cygmcmVhZGVyLCByZW1vdGVfcmVmcyk7CiAKIAkJCWlmICh1c2Vfc2lkZWJhbmQpIHsKIAkJCQljbG9zZShkZW11eC5vdXQpOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmMgYi9zZXF1ZW5jZXIuYwppbmRleCA5ZDU5NjRmLi5kMThhYmE2IDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuYworKysgYi9zZXF1ZW5jZXIuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJInJlYmFzZS1tZXJnZS9yZXdyaXR0ZW4tcGVuZGluZyIpCiAKIC8qCi0gKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBjb250YWluaWcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KKyAqIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KICAqIHRoZSBkdW1teSBjb21taXQgdXNlZCBmb3IgYHJlc2V0IFtuZXcgcm9vdF1gLgogICovCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zcXVhc2hfb250bywgInJlYmFzZS1tZXJnZS9zcXVhc2gtb250byIpCkBAIC0xMTI2LDI1ICsxMTI2LDIyIEBACiAJCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm1zZywKIAkJCQkgICAgICAgY29uc3QgY2hhciAqY29tbWl0KQogewotCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOwotCWludCByZXQ7Ci0JY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCBjaGFyICpuYW1lLCAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKIAogCW5hbWUgPSBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpOwogCWlmICh3cml0ZV9tZXNzYWdlKG1zZy0+YnVmLCBtc2ctPmxlbiwgbmFtZSwgMCkpCiAJCXJldHVybiAtMTsKIAotCWFyZ3ZfYXJyYXlfcHVzaGYoJmhvb2tfZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCByLT5pbmRleF9maWxlKTsKLQlhcmd2X2FycmF5X3B1c2goJmhvb2tfZW52LCAiR0lUX0VESVRPUj06Iik7Ci0JaWYgKGNvbW1pdCkKLQkJcmV0ID0gcnVuX2hvb2tfbGUoaG9va19lbnYuYXJndiwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCi0JCQkJICAiY29tbWl0IiwgY29tbWl0LCBOVUxMKTsKLQllbHNlCi0JCXJldCA9IHJ1bl9ob29rX2xlKGhvb2tfZW52LmFyZ3YsICJwcmVwYXJlLWNvbW1pdC1tc2ciLCBuYW1lLAotCQkJCSAgIm1lc3NhZ2UiLCBOVUxMKTsKLQlpZiAocmV0KQorCWlmIChjb21taXQpIHsKKwkJYXJnMSA9ICJjb21taXQiOworCQlhcmcyID0gY29tbWl0OworCX0gZWxzZSB7CisJCWFyZzEgPSAibWVzc2FnZSI7CisJfQorCWlmIChydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCisJCQkgICAgYXJnMSwgYXJnMiwgTlVMTCkpCiAJCXJldCA9IGVycm9yKF8oIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIikpOwotCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzUzLDExICsxMzUwLDI3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghKGZsYWdzICYgQUxMT1dfRU1QVFkpICYmIG9pZGVxKGN1cnJlbnRfaGVhZCA/Ci0JCQkJCSAgICBnZXRfY29tbWl0X3RyZWVfb2lkKGN1cnJlbnRfaGVhZCkgOgotCQkJCQkgICAgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwgJnRyZWUpKSB7Ci0JCXJlcyA9IDE7IC8qIHJ1biAnZ2l0IGNvbW1pdCcgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlICovCi0JCWdvdG8gb3V0OworCWlmICghKGZsYWdzICYgQUxMT1dfRU1QVFkpKSB7CisJCXN0cnVjdCBjb21taXQgKmZpcnN0X3BhcmVudCA9IGN1cnJlbnRfaGVhZDsKKworCQlpZiAoZmxhZ3MgJiBBTUVORF9NU0cpIHsKKwkJCWlmIChjdXJyZW50X2hlYWQtPnBhcmVudHMpIHsKKwkJCQlmaXJzdF9wYXJlbnQgPSBjdXJyZW50X2hlYWQtPnBhcmVudHMtPml0ZW07CisJCQkJaWYgKHJlcG9fcGFyc2VfY29tbWl0KHIsIGZpcnN0X3BhcmVudCkpIHsKKwkJCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IikpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZpcnN0X3BhcmVudCA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKG9pZGVxKGZpcnN0X3BhcmVudAorCQkJICA/IGdldF9jb21taXRfdHJlZV9vaWQoZmlyc3RfcGFyZW50KQorCQkJICA6IHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUsCisJCQkgICZ0cmVlKSkgeworCQkJcmVzID0gMTsgLyogcnVuICdnaXQgY29tbWl0JyB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgKi8KKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJaWYgKGZpbmRfaG9vaygicHJlcGFyZS1jb21taXQtbXNnIikpIHsKQEAgLTE0MDMsNiArMTQxNiw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXJ1bl9jb21taXRfaG9vaygwLCByLT5pbmRleF9maWxlLCAicG9zdC1jb21taXQiLCBOVUxMKTsKIAlpZiAoZmxhZ3MgJiBBTUVORF9NU0cpCiAJCWNvbW1pdF9wb3N0X3Jld3JpdGUociwgY3VycmVudF9oZWFkLCBvaWQpOwogCkBAIC0xNTc2LDYgKzE1OTAsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IHJlczsKIAljb25zdCBjaGFyICptZXNzYWdlLCAqYm9keTsKKwljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CiAKIAlpZiAob3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCA+IDApIHsKIAkJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKQEAgLTE2MDIsNyArMTYxNyw3IEBACiAJCQlyZXR1cm4gZXJyb3IoXygibmVlZCBhIEhFQUQgdG8gZml4dXAiKSk7CiAJCWlmICghKGhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJmhlYWQpKSkKIAkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBIRUFEIikpOwotCQlpZiAoIShoZWFkX21lc3NhZ2UgPSBnZXRfY29tbWl0X2J1ZmZlcihoZWFkX2NvbW1pdCwgTlVMTCkpKQorCQlpZiAoIShoZWFkX21lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoaGVhZF9jb21taXQsIE5VTEwsIGVuY29kaW5nKSkpCiAJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIikpOwogCiAJCWZpbmRfY29tbWl0X3N1YmplY3QoaGVhZF9tZXNzYWdlLCAmYm9keSk7CkBAIC0xNjIzLDcgKzE2MzgsNyBAQAogCQl1bnVzZV9jb21taXRfYnVmZmVyKGhlYWRfY29tbWl0LCBoZWFkX21lc3NhZ2UpOwogCX0KIAotCWlmICghKG1lc3NhZ2UgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpKSkKKwlpZiAoIShtZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSkKIAkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIiksCiAJCQkgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwogCWZpbmRfY29tbWl0X3N1YmplY3QobWVzc2FnZSwgJmJvZHkpOwpAQCAtMjU2NCwxNCArMjU3OSwxNyBAQAogCWVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQgPSBvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0sgPwogCQlUT0RPX1BJQ0sgOiBUT0RPX1JFVkVSVDsKIAljb25zdCBjaGFyICpjb21tYW5kX3N0cmluZyA9IHRvZG9fY29tbWFuZF9pbmZvW2NvbW1hbmRdLnN0cjsKKwljb25zdCBjaGFyICplbmNvZGluZzsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAKIAlpZiAocHJlcGFyZV9yZXZzKG9wdHMpKQogCQlyZXR1cm4gLTE7CiAKKwllbmNvZGluZyA9IGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCk7CisKIAl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihvcHRzLT5yZXZzKSkpIHsKIAkJc3RydWN0IHRvZG9faXRlbSAqaXRlbSA9IGFwcGVuZF9uZXdfdG9kbyh0b2RvX2xpc3QpOwotCQljb25zdCBjaGFyICpjb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKIAkJY29uc3QgY2hhciAqc3ViamVjdDsKIAkJaW50IHN1YmplY3RfbGVuOwogCkBAIC0yOTY4LDcgKzI5ODYsOCBAQAogCiAJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzL21lc3NhZ2UiLCBnZXRfZGlyKG9wdHMpKTsKIAlpZiAoIWZpbGVfZXhpc3RzKGJ1Zi5idWYpKSB7Ci0JCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CiAJCWZpbmRfY29tbWl0X3N1YmplY3QoY29tbWl0X2J1ZmZlciwgJnN1YmplY3QpOwogCQlyZXMgfD0gd3JpdGVfbWVzc2FnZShzdWJqZWN0LCBzdHJsZW4oc3ViamVjdCksIGJ1Zi5idWYsIDEpOwogCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CkBAIC0zMzcwLDcgKzMzODksOCBAQAogCX0KIAogCWlmIChjb21taXQpIHsKLQkJY29uc3QgY2hhciAqbWVzc2FnZSA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwkJY29uc3QgY2hhciAqbWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKIAkJY29uc3QgY2hhciAqYm9keTsKIAkJaW50IGxlbjsKIApAQCAtNDE1MSw5ICs0MTcxLDEwIEBACiAJCQkJICovCiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCWNvbnN0IGNoYXIgKnBhdGggPSByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCk7CisJCQkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOwogCiAJCQkJaWYgKHBhcnNlX2hlYWQociwgJmNvbW1pdCkgfHwKLQkJCQkgICAgIShwID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKSkgfHwKKwkJCQkgICAgIShwID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSB8fAogCQkJCSAgICB3cml0ZV9tZXNzYWdlKHAsIHN0cmxlbihwKSwgcGF0aCwgMCkpIHsKIAkJCQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIHApOwogCQkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGZpbGU6ICIKQEAgLTQ0MjUsNyArNDQ0Niw2IEBACiAJc3RydWN0IGxhYmVsc19lbnRyeSAqbGFiZWxzX2VudHJ5OwogCXN0cnVjdCBzdHJpbmdfZW50cnkgKnN0cmluZ19lbnRyeTsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIGR1bW15OwotCXNpemVfdCBsZW47CiAJaW50IGk7CiAKIAlzdHJpbmdfZW50cnkgPSBvaWRtYXBfZ2V0KCZzdGF0ZS0+Y29tbWl0MmxhYmVsLCBvaWQpOwpAQCAtNDQ0NSwxMCArNDQ2NSwxMCBAQAogCSAqIGFiYnJldmlhdGlvbiBmb3IgYW55IHVuaW50ZXJlc3RpbmcgY29tbWl0J3MgbmFtZXMgdGhhdCBkb2VzIG5vdAogCSAqIGNsYXNoIHdpdGggYW55IG90aGVyIGxhYmVsLgogCSAqLworCXN0cmJ1Zl9yZXNldCgmc3RhdGUtPmJ1Zik7CiAJaWYgKCFsYWJlbCkgewogCQljaGFyICpwOwogCi0JCXN0cmJ1Zl9yZXNldCgmc3RhdGUtPmJ1Zik7CiAJCXN0cmJ1Zl9ncm93KCZzdGF0ZS0+YnVmLCBHSVRfTUFYX0hFWFNaKTsKIAkJbGFiZWwgPSBwID0gc3RhdGUtPmJ1Zi5idWY7CiAKQEAgLTQ0NzEsMzIgKzQ0OTEsNTUgQEAKIAkJCQlwW2ldID0gc2F2ZTsKIAkJCX0KIAkJfQotCX0gZWxzZSBpZiAoKChsZW4gPSBzdHJsZW4obGFiZWwpKSA9PSB0aGVfaGFzaF9hbGdvLT5oZXhzeiAmJgotCQkgICAgIWdldF9vaWRfaGV4KGxhYmVsLCAmZHVtbXkpKSB8fAotCQkgICAobGVuID09IDEgJiYgKmxhYmVsID09ICcjJykgfHwKLQkJICAgaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzdGF0ZS0+bGFiZWxzLAotCQkJCQkgc3RyaWhhc2gobGFiZWwpLCBsYWJlbCkpIHsKLQkJLyoKLQkJICogSWYgdGhlIGxhYmVsIGFscmVhZHkgZXhpc3RzLCBvciBpZiB0aGUgbGFiZWwgaXMgYSB2YWxpZCBmdWxsCi0JCSAqIE9JRCwgb3IgdGhlIGxhYmVsIGlzIGEgJyMnICh3aGljaCB3ZSB1c2UgYXMgYSBzZXBhcmF0b3IKLQkJICogYmV0d2VlbiBtZXJnZSBoZWFkcyBhbmQgb25lbGluZSksIHdlIGFwcGVuZCBhIGRhc2ggYW5kIGEKLQkJICogbnVtYmVyIHRvIG1ha2UgaXQgdW5pcXVlLgotCQkgKi8KKwl9IGVsc2UgewogCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAmc3RhdGUtPmJ1ZjsKIAotCQlzdHJidWZfcmVzZXQoYnVmKTsKLQkJc3RyYnVmX2FkZChidWYsIGxhYmVsLCBsZW4pOwotCi0JCWZvciAoaSA9IDI7IDsgaSsrKSB7Ci0JCQlzdHJidWZfc2V0bGVuKGJ1ZiwgbGVuKTsKLQkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIi0lZCIsIGkpOwotCQkJaWYgKCFoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCi0JCQkJCQkgICBzdHJpaGFzaChidWYtPmJ1ZiksCi0JCQkJCQkgICBidWYtPmJ1ZikpCi0JCQkJYnJlYWs7CisJCS8qCisJCSAqIFNhbml0aXplIGxhYmVscyBieSByZXBsYWNpbmcgbm9uLWFscGhhLW51bWVyaWMgY2hhcmFjdGVycworCQkgKiAoaW5jbHVkaW5nIHdoaXRlLXNwYWNlIG9uZXMpIGJ5IGRhc2hlcywgYXMgdGhleSBtaWdodCBiZQorCQkgKiBpbGxlZ2FsIGluIGZpbGUgbmFtZXMgKGFuZCBoZW5jZSBpbiByZWYgbmFtZXMpLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2UgcmV0YWluIG5vbi1BU0NJSSBVVEYtOCBjaGFyYWN0ZXJzIChpZGVudGlmaWVkCisJCSAqIHZpYSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQpLiBUaGV5IHNob3VsZCBiZSBhbGwgYWNjZXB0YWJsZQorCQkgKiBpbiBmaWxlIG5hbWVzLiBXZSBkbyBub3QgdmFsaWRhdGUgdGhlIFVURi04IGhlcmUsIHRoYXQncyBub3QKKwkJICogdGhlIGpvYiBvZiB0aGlzIGZ1bmN0aW9uLgorCQkgKi8KKwkJZm9yICg7ICpsYWJlbDsgbGFiZWwrKykKKwkJCWlmICgoKmxhYmVsICYgMHg4MCkgfHwgaXNhbG51bSgqbGFiZWwpKQorCQkJCXN0cmJ1Zl9hZGRjaChidWYsICpsYWJlbCk7CisJCQkvKiBhdm9pZCBsZWFkaW5nIGRhc2ggYW5kIGRvdWJsZS1kYXNoZXMgKi8KKwkJCWVsc2UgaWYgKGJ1Zi0+bGVuICYmIGJ1Zi0+YnVmW2J1Zi0+bGVuIC0gMV0gIT0gJy0nKQorCQkJCXN0cmJ1Zl9hZGRjaChidWYsICctJyk7CisJCWlmICghYnVmLT5sZW4pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAicmV2LSIpOworCQkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KGJ1Ziwgb2lkLCBkZWZhdWx0X2FiYnJldik7CiAJCX0KLQogCQlsYWJlbCA9IGJ1Zi0+YnVmOworCisJCWlmICgoYnVmLT5sZW4gPT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogJiYKKwkJICAgICAhZ2V0X29pZF9oZXgobGFiZWwsICZkdW1teSkpIHx8CisJCSAgICAoYnVmLT5sZW4gPT0gMSAmJiAqbGFiZWwgPT0gJyMnKSB8fAorCQkgICAgaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzdGF0ZS0+bGFiZWxzLAorCQkJCQkgIHN0cmloYXNoKGxhYmVsKSwgbGFiZWwpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGxhYmVsIGFscmVhZHkgZXhpc3RzLCBvciBpZiB0aGUgbGFiZWwgaXMgYQorCQkJICogdmFsaWQgZnVsbCBPSUQsIG9yIHRoZSBsYWJlbCBpcyBhICcjJyAod2hpY2ggd2UgdXNlCisJCQkgKiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIG1lcmdlIGhlYWRzIGFuZCBvbmVsaW5lKSwgd2UKKwkJCSAqIGFwcGVuZCBhIGRhc2ggYW5kIGEgbnVtYmVyIHRvIG1ha2UgaXQgdW5pcXVlLgorCQkJICovCisJCQlzaXplX3QgbGVuID0gYnVmLT5sZW47CisKKwkJCWZvciAoaSA9IDI7IDsgaSsrKSB7CisJCQkJc3RyYnVmX3NldGxlbihidWYsIGxlbik7CisJCQkJc3RyYnVmX2FkZGYoYnVmLCAiLSVkIiwgaSk7CisJCQkJaWYgKCFoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCisJCQkJCQkJICAgc3RyaWhhc2goYnVmLT5idWYpLAorCQkJCQkJCSAgIGJ1Zi0+YnVmKSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWxhYmVsID0gYnVmLT5idWY7CisJCX0KIAl9CiAKIAlGTEVYX0FMTE9DX1NUUihsYWJlbHNfZW50cnksIGxhYmVsLCBsYWJlbCk7CkBAIC00NTQwLDEwICs0NTgzLDE1IEBACiAJc3RyYnVmX2luaXQoJnN0YXRlLmJ1ZiwgMzIpOwogCiAJaWYgKHJldnMtPmNtZGxpbmUubnIgJiYgKHJldnMtPmNtZGxpbmUucmV2WzBdLmZsYWdzICYgQk9UVE9NKSkgeworCQlzdHJ1Y3QgbGFiZWxzX2VudHJ5ICpvbnRvX2xhYmVsX2VudHJ5OwogCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmcmV2cy0+Y21kbGluZS5yZXZbMF0uaXRlbS0+b2lkOwogCQlGTEVYX0FMTE9DX1NUUihlbnRyeSwgc3RyaW5nLCAib250byIpOwogCQlvaWRjcHkoJmVudHJ5LT5lbnRyeS5vaWQsIG9pZCk7CiAJCW9pZG1hcF9wdXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwgZW50cnkpOworCisJCUZMRVhfQUxMT0NfU1RSKG9udG9fbGFiZWxfZW50cnksIGxhYmVsLCAib250byIpOworCQloYXNobWFwX2VudHJ5X2luaXQoJm9udG9fbGFiZWxfZW50cnktPmVudHJ5LCBzdHJpaGFzaCgib250byIpKTsKKwkJaGFzaG1hcF9hZGQoJnN0YXRlLmxhYmVscywgJm9udG9fbGFiZWxfZW50cnktPmVudHJ5KTsKIAl9CiAKIAkvKgpAQCAtNDU5OCwxMCArNDY0Niw2IEBACiAJCWVsc2UKIAkJCXN0cmJ1Zl9hZGRidWYoJmxhYmVsLCAmb25lbGluZSk7CiAKLQkJZm9yIChwMSA9IGxhYmVsLmJ1ZjsgKnAxOyBwMSsrKQotCQkJaWYgKGlzc3BhY2UoKnAxKSkKLQkJCQkqKGNoYXIgKilwMSA9ICctJzsKLQogCQlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyAtQyAlcyIsCiAJCQkgICAgY21kX21lcmdlLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKQEAgLTQ2NDQsNyArNDY4OCw3IEBACiAJCQkJbGFiZWxfb2lkKG9pZCwgImJyYW5jaC1wb2ludCIsICZzdGF0ZSk7CiAJCX0KIAotCQkvKiBBZGQgSEVBRCBhcyBpbXBsaWN0ICJ0aXAgb2YgYnJhbmNoIiAqLworCQkvKiBBZGQgSEVBRCBhcyBpbXBsaWNpdCAidGlwIG9mIGJyYW5jaCIgKi8KIAkJaWYgKCFpdGVyLT5uZXh0KQogCQkJdGlwc190YWlsID0gJmNvbW1pdF9saXN0X2luc2VydChpdGVyLT5pdGVtLAogCQkJCQkJCXRpcHNfdGFpbCktPm5leHQ7CkBAIC00ODI2LDcgKzQ4NzAsNyBAQAogCSAqIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHBpY2ssIHNvIHdlIGluc2VydCB0aGUgY29tbWFuZHMgKmFmdGVyKgogCSAqIHRob3NlIGNoYWlucyBpZiB0aGVyZSBhcmUgYW55LgogCSAqCi0JICogQXMgd2UgaW5zZXJ0IHRoZSBleGVjIGNvbW1hbmRzIGltbWVkaWF0bHkgYWZ0ZXIgcmVhcnJhbmdpbmcKKwkgKiBBcyB3ZSBpbnNlcnQgdGhlIGV4ZWMgY29tbWFuZHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVhcnJhbmdpbmcKIAkgKiBhbnkgZml4dXBzIGFuZCBiZWZvcmUgdGhlIHVzZXIgZWRpdHMgdGhlIGxpc3QsIGEgZml4dXAgY2hhaW4KIAkgKiBjYW4gbmV2ZXIgY29udGFpbiBjb21tZW50cyAoYW55IGNvbW1lbnRzIGFyZSBlbXB0eSBwaWNrcyB0aGF0CiAJICogaGF2ZSBiZWVuIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgdXNlciBkaWQgbm90IHNwZWNpZnkKQEAgLTUxNjksNyArNTIxMyw3IEBACiAJCSpjb21taXRfdG9kb19pdGVtX2F0KCZjb21taXRfdG9kbywgaXRlbS0+Y29tbWl0KSA9IGl0ZW07CiAKIAkJcGFyc2VfY29tbWl0KGl0ZW0tPmNvbW1pdCk7Ci0JCWNvbW1pdF9idWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihpdGVtLT5jb21taXQsIE5VTEwpOworCQljb21taXRfYnVmZmVyID0gbG9nbXNnX3JlZW5jb2RlKGl0ZW0tPmNvbW1pdCwgTlVMTCwgIlVURi04Iik7CiAJCWZpbmRfY29tbWl0X3N1YmplY3QoY29tbWl0X2J1ZmZlciwgJnN1YmplY3QpOwogCQlmb3JtYXRfc3ViamVjdCgmYnVmLCBzdWJqZWN0LCAiICIpOwogCQlzdWJqZWN0ID0gc3ViamVjdHNbaV0gPSBzdHJidWZfZGV0YWNoKCZidWYsICZzdWJqZWN0X2xlbik7CmRpZmYgLS1naXQgYS9zZXF1ZW5jZXIuaCBiL3NlcXVlbmNlci5oCmluZGV4IDU3NDI2MGYuLjlmOWFlMjkgMTAwNjQ0Ci0tLSBhL3NlcXVlbmNlci5oCisrKyBiL3NlcXVlbmNlci5oCkBAIC0yMDIsMTEgKzIwMiwxMCBAQAogCiBpbnQgcmVhZF9hdXRob3Jfc2NyaXB0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipuYW1lLCBjaGFyICoqZW1haWwsIGNoYXIgKipkYXRlLAogCQkgICAgICAgaW50IGFsbG93X21pc3NpbmcpOwotI2VuZGlmCi0KIHZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKTsKIGludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKIAkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKTsKIHZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKIGludCBzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSogciwKIAkJCSAgICAgICBlbnVtIHJlcGxheV9hY3Rpb24gKmFjdGlvbik7CisjZW5kaWYgLyogU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDRkODE5OWIuLmJhZTJjZGYgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtOTMsNyArOTMsNyBAQAogCQl1aWMub2xkX2ZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOwogCiAJLyoKLQkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnaW5zdCBvbGRfZnAKKwkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnYWluc3Qgb2xkX2ZwCiAJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAogCSAqLwogCXJldCA9IGdlbmVyYXRlKCZ1aWMpOwpkaWZmIC0tZ2l0IGEvc2hhMWRjL3NoYTEuYyBiL3NoYTFkYy9zaGExLmMKaW5kZXggOWQzY2Y4MS4uNjNjZDVjOSAxMDA2NDQKLS0tIGEvc2hhMWRjL3NoYTEuYworKysgYi9zaGExZGMvc2hhMS5jCkBAIC03Miw3ICs3Miw3IEBACiAvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjICovCiAjZWxpZiBkZWZpbmVkKF9CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKQogLyoKLSAqICpCU0QgYW5kIG5ld2xpYiAoZW1iZWRlZCBsaW51eCwgY3lnd2luLCBldGMpLgorICogKkJTRCBhbmQgbmV3bGliIChlbWJlZGRlZCBsaW51eCwgY3lnd2luLCBldGMpLgogICogdGhlIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pIHBhcnQgcHJldmVudHMKICAqIHRoaXMgY29uZGl0aW9uIGZyb20gbWF0Y2hpbmcgd2l0aCBTb2xhcmlzL3NwYXJjLgogICogKFNvbGFyaXMgZGVmaW5lcyBvbmx5IG9uZSBlbmRpYW4gbWFjcm8pCmRpZmYgLS1naXQgYS9zaGExZGNfZ2l0LmMgYi9zaGExZGNfZ2l0LmMKaW5kZXggZTBjYzlkOS4uNWMzMDBlOCAxMDA2NDQKLS0tIGEvc2hhMWRjX2dpdC5jCisrKyBiL3NoYTFkY19naXQuYwpAQCAtMTksNyArMTksNyBAQAogCWlmICghU0hBMURDRmluYWwoaGFzaCwgY3R4KSkKIAkJcmV0dXJuOwogCWRpZSgiU0hBLTEgYXBwZWFycyB0byBiZSBwYXJ0IG9mIGEgY29sbGlzaW9uIGF0dGFjazogJXMiLAotCSAgICBzaGExX3RvX2hleChoYXNoKSk7CisJICAgIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5oIGIvc3RyaW5nLWxpc3QuaAppbmRleCBmOTY0Mzk5Li43YmIwYWQwIDEwMDY0NAotLS0gYS9zdHJpbmctbGlzdC5oCisrKyBiL3N0cmluZy1saXN0LmgKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAvKioKICAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgcGFydCBvZiBhIHNvcnRlZCBsaXN0LiBJZiBpdCBpcyBwYXJ0IG9mIHRoZSBsaXN0LAotICogcmV0dXJuIHRoZSBjb3Jlc3BvbmRpbmcgc3RyaW5nX2xpc3RfaXRlbSwgTlVMTCBvdGhlcndpc2UuCisgKiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nX2xpc3RfaXRlbSwgTlVMTCBvdGhlcndpc2UuCiAgKi8KIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOwogCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCmluZGV4IDYwZDViNzcuLjUxMzJlYzggMTAwNjQ0Ci0tLSBhL3QvUkVBRE1FCisrKyBiL3QvUkVBRE1FCkBAIC0zOTcsNiArMzk3LDEwIEBACiBidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdC1zdGFzaC4gU2VlICdzdGFzaC51c2VCdWlsdGluJyBpbgogZ2l0LWNvbmZpZygxKS4KIAorR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU49PGJvb2xlYW4+LCB3aGVuIHRydWUsIGVuYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdCBhZGQgLWkuIFNlZSAnYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW4nIGluCitnaXQtY29uZmlnKDEpLgorCiBHSVRfVEVTVF9JTkRFWF9USFJFQURTPTxuPiBlbmFibGVzIGV4ZXJjaXNpbmcgdGhlIG11bHRpLXRocmVhZGVkIGxvYWRpbmcKIG9mIHRoZSBpbmRleCBmb3IgdGhlIHdob2xlIHRlc3Qgc3VpdGUgYnkgYnlwYXNzaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZgogY2FjaGUgZW50cmllcyBhbmQgdGhyZWFkIG1pbmltdW1zLiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIG1ha2UgdGhlCmRpZmYgLS1naXQgYS90L2dpdHdlYi1saWIuc2ggYi90L2dpdHdlYi1saWIuc2gKaW5kZXggMDA2ZDJhOC4uMWYzMmNhNiAxMDA2NDQKLS0tIGEvdC9naXR3ZWItbGliLnNoCisrKyBiL3QvZ2l0d2ViLWxpYi5zaApAQCAtNTgsMTAgKzU4LDExIEBACiAJR0FURVdBWV9JTlRFUkZBQ0U9J0NHSS8xLjEnCiAJSFRUUF9BQ0NFUFQ9JyovKicKIAlSRVFVRVNUX01FVEhPRD0nR0VUJwotCVFVRVJZX1NUUklORz0iIiQxIiIKLQlQQVRIX0lORk89IiIkMiIiCisJUVVFUllfU1RSSU5HPSQxCisJUEFUSF9JTkZPPSQyCisJUkVRVUVTVF9VUkk9L2dpdHdlYi5jZ2kkUEFUSF9JTkZPCiAJZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFIEhUVFBfQUNDRVBUIFJFUVVFU1RfTUVUSE9EIFwKLQkJUVVFUllfU1RSSU5HIFBBVEhfSU5GTworCQlRVUVSWV9TVFJJTkcgUEFUSF9JTkZPIFJFUVVFU1RfVVJJCiAKIAlHSVRXRUJfQ09ORklHPSQocHdkKS9naXR3ZWJfY29uZmlnLnBlcmwKIAlleHBvcnQgR0lUV0VCX0NPTkZJRwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmMgYi90L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg4NGVmCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmMKQEAgLTAsMCArMSw1MyBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitpbnQgY21kX19yZWFkX2dyYXBoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpncmFwaCA9IE5VTEw7CisJY2hhciAqZ3JhcGhfbmFtZTsKKwlpbnQgb3Blbl9vazsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJY29uc3QgY2hhciAqb2JqZWN0X2RpcjsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlvYmplY3RfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKworCWdyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKG9iamVjdF9kaXIpOworCisJb3Blbl9vayA9IG9wZW5fY29tbWl0X2dyYXBoKGdyYXBoX25hbWUsICZmZCwgJnN0KTsKKwlpZiAoIW9wZW5fb2spCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIpLCBncmFwaF9uYW1lKTsKKworCWdyYXBoID0gbG9hZF9jb21taXRfZ3JhcGhfb25lX2ZkX3N0KGZkLCAmc3QpOworCWlmICghZ3JhcGgpCisJCXJldHVybiAxOworCisJRlJFRV9BTkRfTlVMTChncmFwaF9uYW1lKTsKKworCXByaW50ZigiaGVhZGVyOiAlMDh4ICVkICVkICVkICVkXG4iLAorCQludG9obCgqKHVpbnQzMl90KilncmFwaC0+ZGF0YSksCisJCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNCksCisJCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNSksCisJCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNiksCisJCSoodW5zaWduZWQgY2hhciopKGdyYXBoLT5kYXRhICsgNykpOworCXByaW50ZigibnVtX2NvbW1pdHM6ICV1XG4iLCBncmFwaC0+bnVtX2NvbW1pdHMpOworCXByaW50ZigiY2h1bmtzOiIpOworCisJaWYgKGdyYXBoLT5jaHVua19vaWRfZmFub3V0KQorCQlwcmludGYoIiBvaWRfZmFub3V0Iik7CisJaWYgKGdyYXBoLT5jaHVua19vaWRfbG9va3VwKQorCQlwcmludGYoIiBvaWRfbG9va3VwIik7CisJaWYgKGdyYXBoLT5jaHVua19jb21taXRfZGF0YSkKKwkJcHJpbnRmKCIgY29tbWl0X21ldGFkYXRhIik7CisJaWYgKGdyYXBoLT5jaHVua19leHRyYV9lZGdlcykKKwkJcHJpbnRmKCIgZXh0cmFfZWRnZXMiKTsKKwlwcmludGYoIlxuIik7CisKKwlVTkxFQUsoZ3JhcGgpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuYyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCmluZGV4IDE5ZWUyNmQuLmYyMDk4OWQgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtdG9vbC5jCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCkBAIC00NSw2ICs0NSw3IEBACiAJeyAicHJvZ3Jlc3MiLCBjbWRfX3Byb2dyZXNzIH0sCiAJeyAicmVhY2giLCBjbWRfX3JlYWNoIH0sCiAJeyAicmVhZC1jYWNoZSIsIGNtZF9fcmVhZF9jYWNoZSB9LAorCXsgInJlYWQtZ3JhcGgiLCBjbWRfX3JlYWRfZ3JhcGggfSwKIAl7ICJyZWFkLW1pZHgiLCBjbWRfX3JlYWRfbWlkeCB9LAogCXsgInJlZi1zdG9yZSIsIGNtZF9fcmVmX3N0b3JlIH0sCiAJeyAicmVnZXgiLCBjbWRfX3JlZ2V4IH0sCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuaCBiL3QvaGVscGVyL3Rlc3QtdG9vbC5oCmluZGV4IGMyYWE1NmUuLjhlZDJhZjcgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtdG9vbC5oCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5oCkBAIC0zNSw2ICszNSw3IEBACiBpbnQgY21kX19wcm9ncmVzcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fcmVhY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlYWRfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlYWRfbWlkeChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fcmVmX3N0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19yZWdleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwpkaWZmIC0tZ2l0IGEvdC9saWItcmViYXNlLnNoIGIvdC9saWItcmViYXNlLnNoCmluZGV4IDZkODc5NjEuLmI3MmMwNTEgMTAwNjQ0Ci0tLSBhL3QvbGliLXJlYmFzZS5zaAorKysgYi90L2xpYi1yZWJhc2Uuc2gKQEAgLTExOSwzICsxMTksMzEgQEAKIAlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIiQxIiAmJgogCWdpdCB0YWcgIiQxIgogfQorCisjIENhbGwgdGhpcyAoaW5zaWRlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MpIGF0IHRoZSBlbmQgb2YgYSB0ZXN0IGZpbGUgdG8KKyMgY2hlY2sgdGhhdCBubyB0ZXN0cyBoYXZlIGNoYW5nZWQgZWRpdG9yIHJlbGF0ZWQgZW52aXJvbm1lbnQKKyMgdmFyaWFibGVzIG9yIGNvbmZpZyBzZXR0aW5ncwordGVzdF9lZGl0b3JfdW5jaGFuZ2VkICgpIHsKKwkjIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBleHBvcnRlZCB2YXJpYWJsZXMgaGVuY2UgJ3NoIC1jJworCXNoIC1jICdjYXQgPmFjdHVhbCA8PC1FT0YKKwlFRElUT1I9JEVESVRPUgorCUZBS0VfQ09NTUlUX0FNRU5EPSRGQUtFX0NPTU1JVF9BTUVORAorCUZBS0VfQ09NTUlUX01FU1NBR0U9JEZBS0VfQ09NTUlUX01FU1NBR0UKKwlGQUtFX0xJTkVTPSRGQUtFX0xJTkVTCisJR0lUX0VESVRPUj0kR0lUX0VESVRPUgorCUdJVF9TRVFVRU5DRV9FRElUT1I9JEdJVF9TRVFVRU5DRV9FRElUT1IKKwljb3JlLmVkaXRvcj0kKGdpdCBjb25maWcgY29yZS5lZGl0b3IpCisJc2VxdWVuY2UuZWRpdG9yPSQoZ2l0IGNvbmZpZyBzZXF1ZW5jZS5lZGl0b3IpCisJRU9GJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YKKwlFRElUT1I9OgorCUZBS0VfQ09NTUlUX0FNRU5EPQorCUZBS0VfQ09NTUlUX01FU1NBR0U9CisJRkFLRV9MSU5FUz0KKwlHSVRfRURJVE9SPQorCUdJVF9TRVFVRU5DRV9FRElUT1I9CisJY29yZS5lZGl0b3I9CisJc2VxdWVuY2UuZWRpdG9yPQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KZGlmZiAtLWdpdCBhL3Qvb2lkLWluZm8vaGFzaC1pbmZvIGIvdC9vaWQtaW5mby9oYXNoLWluZm8KaW5kZXggY2NkYmZkZi4uZDA3MzZkZCAxMDA2NDQKLS0tIGEvdC9vaWQtaW5mby9oYXNoLWluZm8KKysrIGIvdC9vaWQtaW5mby9oYXNoLWluZm8KQEAgLTYsMyArNiwxMiBAQAogCiB6ZXJvIHNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogemVybyBzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCithbGdvIHNoYTE6c2hhMQorYWxnbyBzaGEyNTY6c2hhMjU2CisKK2VtcHR5X2Jsb2Igc2hhMTplNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitlbXB0eV9ibG9iIHNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzCisKK2VtcHR5X3RyZWUgc2hhMTo0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CitlbXB0eV90cmVlIHNoYTI1Njo2ZWYxOWI0MTIyNWM1MzY5ZjFjMTA0ZDQ1ZDhkODVlZmE5YjA1N2I1M2IxNGI0YjliOTM5ZGQ3NGRlY2M1MzIxCmRpZmYgLS1naXQgYS90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24gYi90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24KaW5kZXggYTk0ZDk5NS4uY2U0N2UxNiAxMDA3NTUKLS0tIGEvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uCisrKyBiL3QvcGVyZi9iaXNlY3RfcmVncmVzc2lvbgpAQCAtNTEsNyArNTEsNyBAQAogbmV3dGltZT0kKGVjaG8gIiRuZXd0aW1lIiB8IHNlZCAtZSAncy9eXChbMC05XVwrXC5bMC05XVwrXCkuKiQvXDEvJykKIAogdGVzdCAkKGVjaG8gIiRuZXd0aW1lIiAiJG9sZHRpbWUiIHwgYXdrICd7IHByaW50ICgkMSA+ICQyKSB9JykgPSAxIHx8Ci0JZGllICJOZXcgdGltZSAnJG5ld3RpbWUnIHNob3VkIGJlIGdyZWF0ZXIgdGhhbiBvbGQgdGltZSAnJG9sZHRpbWUnIgorCWRpZSAiTmV3IHRpbWUgJyRuZXd0aW1lJyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9sZCB0aW1lICckb2xkdGltZSciCiAKIHRtcGRpcj0kKG1rdGVtcCAtZCAtdCBiaXNlY3RfcmVncmVzc2lvbl9YWFhYWFgpIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wIGRpcmVjdG9yeSIKIGVjaG8gIiRvbGR0aW1lIiA+IiR0bXBkaXIvb2xkdGltZSIgfHwgZGllICJGYWlsZWQgdG8gd3JpdGUgdG8gJyR0bXBkaXIvb2xkdGltZSciCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaCBiL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoCmluZGV4IDM3Nzk4NTEuLmEzNjkxNTIgMTAwNzU1Ci0tLSBhL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoCisrKyBiL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoCkBAIC03Nyw2ICs3Nyw3IEBACiAJIyBhY3R1YWwgcGFjayBnZW5lcmF0aW9uLCB3aXRob3V0IHNtdWRnaW5nIHRoZSBvbi1kaXNrIHNldHVwCiAJIyBiZXR3ZWVuIHRyaWFscy4KIAl0ZXN0X3BlcmYgInJlcGFjayAoJG5yX3BhY2tzKSIgJworCQlHSVRfVEVTVF9GVUxMX0lOX1BBQ0tfQVJSQVk9MSBcCiAJCWdpdCBwYWNrLW9iamVjdHMgLS1rZWVwLXRydWUtcGFyZW50cyBcCiAJCSAgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgXAogCQkgIC0tcmVmbG9nIC0taW5kZXhlZC1vYmplY3RzIC0tZGVsdGEtYmFzZS1vZmZzZXQgXApkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggYTRhZjIzNC4uYTUxOTVhOCAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyICgpIHsKIAluYW1lPSIkMSIgIyBzdGRpbiBpcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gdGhlIHRlc3QKLQkjIGV4cGVjdGVkIGVycm9yIG91dHB1dCBpcyBpbiBkZXNjcmlwdGlvciAzCisJIyBleHBlY3RlZCBlcnJvciBvdXRwdXQgaXMgaW4gZGVzY3JpcHRvciAzCiAJKAogCQljZCAiJG5hbWUiICYmCiAJCXNlZCAtZSAncy9ePiAvLycgLWUgJ3MvWiQvLycgPmV4cGVjdC5vdXQgJiYKZGlmZiAtLWdpdCBhL3QvdDAwMjctYXV0by1jcmxmLnNoIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKaW5kZXggOTU5YjZkYS4uOWZjZDU2ZiAxMDA3NTUKLS0tIGEvdC90MDAyNy1hdXRvLWNybGYuc2gKKysrIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKQEAgLTIxNSw3ICsyMTUsNyBAQAogfQogCiAKLSMgY29udHJ1Y3QgdGhlIGF0dHIvIHJldHVybmVkIGJ5IGdpdCBscy1maWxlcyAtLWVvbAorIyBjb25zdHJ1Y3QgdGhlIGF0dHIvIHJldHVybmVkIGJ5IGdpdCBscy1maWxlcyAtLWVvbAogIyBUYWtlIG5vbmUgKD1lbXB0eSksIG9uZSBvciB0d28gYXJncwogIyBjb252ZXJ0LmM6IGVvbD1YWCBvdmVycmlkZXMgdGV4dD1hdXRvCiBhdHRyX2FzY2lpICgpIHsKZGlmZiAtLWdpdCBhL3QvdDAwMjgtd29ya2luZy10cmVlLWVuY29kaW5nLnNoIGIvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2gKaW5kZXggN2FhMDk0NS4uYmZjNGZiOSAxMDA3NTUKLS0tIGEvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2gKKysrIGIvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2gKQEAgLTE3LDcgKzE3LDcgQEAKIHdyaXRlX3V0ZjE2ICgpIHsKIAlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5PX1VURjE2X0JPTQogCXRoZW4KLQkJcHJpbnRmICdceGZlXHhmZicKKwkJcHJpbnRmICdcMzc2XDM3NycKIAlmaSAmJgogCWljb252IC1mIFVURi04IC10IFVURi0xNgogfQpAQCAtMjUsNyArMjUsNyBAQAogd3JpdGVfdXRmMzIgKCkgewogCWlmIHRlc3RfaGF2ZV9wcmVyZXEgTk9fVVRGMzJfQk9NCiAJdGhlbgotCQlwcmludGYgJ1x4MDBceDAwXHhmZVx4ZmYnCisJCXByaW50ZiAnXDBcMFwzNzZcMzc3JwogCWZpICYmCiAJaWNvbnYgLWYgVVRGLTggLXQgVVRGLTMyCiB9CmRpZmYgLS1naXQgYS90L3QwMDYwLXBhdGgtdXRpbHMuc2ggYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKaW5kZXggYzdiNTNlNC4uNTUzZTk0YiAxMDA3NTUKLS0tIGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoCisrKyBiL3QvdDAwNjAtcGF0aC11dGlscy5zaApAQCAtMjg1LDkgKzI4NSwxMyBAQAogdGVzdF9naXRfcGF0aCBHSVRfT0JKRUNUX0RJUkVDVE9SWT1mb28gb2JqZWN0czIgLmdpdC9vYmplY3RzMgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbW9uIHJlcG9zaXRvcnknICdnaXQgLS1naXQtZGlyPWJhciBpbml0JwogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5kZXggICAgICAgICAgICAgICAgICAgIC5naXQvaW5kZXgKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZGV4LmxvY2sgICAgICAgICAgICAgICAuZ2l0L2luZGV4LmxvY2sKIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIEhFQUQgICAgICAgICAgICAgICAgICAgICAuZ2l0L0hFQUQKIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvSEVBRCAgICAgICAgICAgICAgICAuZ2l0L2xvZ3MvSEVBRAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9IRUFELmxvY2sgICAgICAgICAgIC5naXQvbG9ncy9IRUFELmxvY2sKIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlY3QvZm9vICAgICAuZ2l0L2xvZ3MvcmVmcy9iaXNlY3QvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMgICAgICAgICAgICAgICAgYmFyL2xvZ3MvcmVmcwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzLyAgICAgICAgICAgICAgIGJhci9sb2dzL3JlZnMvCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWMvZm9vICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlYy9mb28KIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlYyAgICAgICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWN0Zm9vICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlY3Rmb28KZGlmZiAtLWdpdCBhL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaCBiL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaAppbmRleCAyNGNjYmQ4Li5kMmQwODhkIDEwMDc1NQotLS0gYS90L3QwNTAwLXByb2dyZXNzLWRpc3BsYXkuc2gKKysrIGIvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoCkBAIC03Niw3ICs3Niw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2dyZXNzIGRpc3BsYXkgYnJlYWtzIGxvbmcgbGluZXMgIzInICcKLQkjIE5vdGU6IHdlIGRvbnQgbmVlZCB0aGF0IG1hbnkgc3BhY2VzIGFmdGVyIHRoZSB0aXRsZSB0byBjb3ZlciB1cAorCSMgTm90ZTogd2UgZG8gbm90IG5lZWQgdGhhdCBtYW55IHNwYWNlcyBhZnRlciB0aGUgdGl0bGUgdG8gY292ZXIgdXAKIAkjIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGJyZWFraW5nIHRoZSBwcm9ncmVzcyBsaW5lLgogCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0IDw8XEVPRiAmJgogV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42OiAgIDAlICgxLzEwMDAwMCk8Q1I+CkBAIC0xMDQsNyArMTA0LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSBicmVha3MgbG9uZyBsaW5lcyAjMyAtIGV2ZW4gdGhlIGZpcnN0IGlzIHRvbyBsb25nJyAnCi0JIyBOb3RlOiB3ZSBkb250IGFjdHVhbGx5IG5lZWQgYW55IHNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSB0aXRsZQorCSMgTm90ZTogd2UgZG8gbm90IGFjdHVhbGx5IG5lZWQgYW55IHNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSB0aXRsZQogCSMgbGluZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwcm9ncmVzcyBsaW5lIHRvIGNvdmVyIHVwLgogCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0IDw8XEVPRiAmJgogV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42OiAgICAgICAgICAgICAgICAgICBaCmRpZmYgLS1naXQgYS90L3QxMDUwLWxhcmdlLnNoIGIvdC90MTA1MC1sYXJnZS5zaAppbmRleCBkY2I0ZGJiLi5kM2IyYWRiIDEwMDc1NQotLS0gYS90L3QxMDUwLWxhcmdlLnNoCisrKyBiL3QvdDEwNTAtbGFyZ2Uuc2gKQEAgLTE5NCwxNSArMTk0LDE1IEBACiAJdGVzdF9jbXAgaHVnZSBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFjaGl2aW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYXJjaGl2aW5nJyAnCiAJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQgPi9kZXYvbnVsbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd6aXAgYWNoaXZpbmcsIHN0b3JlIG9ubHknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhcmNoaXZpbmcsIHN0b3JlIG9ubHknICcKIAlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLTAgSEVBRCA+L2Rldi9udWxsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhY2hpdmluZywgZGVmbGF0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFyY2hpdmluZywgZGVmbGF0ZScgJwogCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID4vZGV2L251bGwKICcKIApkaWZmIC0tZ2l0IGEvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaCBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKaW5kZXggZDIwYjRkMS4uZjFlMWIyOCAxMDA3NTUKLS0tIGEvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaAorKysgYi90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCkBAIC02Myw3ICs2Myw3IEBACiAJdGVzdC5vbmU9MQogCUVPRgogCWdpdCBjb25maWcgLS1saXN0ID5hY3R1YWwuZnVsbCAmJgotCWdyZXAgLXYgXmNvcmUgYWN0dWFsLmZ1bGwgPmFjdHVhbCAmJgorCWdyZXAgLXYgLWUgXmNvcmUgLWUgXmV4dGVuc2lvbnMgYWN0dWFsLmZ1bGwgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIApkaWZmIC0tZ2l0IGEvdC90MTQwMC11cGRhdGUtcmVmLnNoIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCmluZGV4IDFmYmQ5NDAuLjY5YTdmMjcgMTAwNzU1Ci0tLSBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaAorKysgYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKQEAgLTM0NCwxNCArMzQ0LDE2IEBACiAJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbQogJwogCi1naXQgdXBkYXRlLXJlZiAkbSAkRAotY2F0ID4uZ2l0L2xvZ3MvJG0gPDxFT0YKLSRaICRDICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzIwIC0wNTAwCi0kQyAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM1MCAtMDUwMAotJEEgJEIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzODAgLTA1MDAKLSRGICRaICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwNjgwIC0wNTAwCi0kWiAkRSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCAtMDUwMAotRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIHF1ZXJ5aW5nIHRoZSByZWZsb2cnICcKKwlnaXQgdXBkYXRlLXJlZiAkbSAkRCAmJgorCWNhdCA+LmdpdC9sb2dzLyRtIDw8LUVPRgorCSRaICRDICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzIwIC0wNTAwCisJJEMgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzNTAgLTA1MDAKKwkkQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM4MCAtMDUwMAorCSRGICRaICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwNjgwIC0wNTAwCisJJFogJEUgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA5ODAgLTA1MDAKKwlFT0YKKycKIAogZWQ9IlRodSwgMjYgTWF5IDIwMDUgMTg6MzI6MDAgLTA1MDAiCiBnZD0iVGh1LCAyNiBNYXkgMjAwNSAxODozMzowMCAtMDUwMCIKZGlmZiAtLWdpdCBhL3QvdDE0NTAtZnNjay5zaCBiL3QvdDE0NTAtZnNjay5zaAppbmRleCA1MGQyOGU2Li43YzdmZjdlIDEwMDc1NQotLS0gYS90L3QxNDUwLWZzY2suc2gKKysrIGIvdC90MTQ1MC1mc2NrLnNoCkBAIC02MTYsNyArNjE2LDcgQEAKIAkJcmVtb3ZlX29iamVjdCAkKGdpdCByZXYtcGFyc2UganVsaXVzOmNhZXNhci50KSAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLW5hbWUtb2JqZWN0cyA+b3V0ICYmCiAJCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGp1bGl1czopICYmCi0JCXRlc3RfaTE4bmdyZXAgLUUgIiR0cmVlIFwoKHJlZnMvaGVhZHMvbWFzdGVyfEhFQUQpQFx7WzAtOV0qXH06IiBvdXQKKwkJdGVzdF9pMThuZ3JlcCAiJHRyZWUgKHJlZnMvdGFncy9qdWxpdXM6IiBvdXQKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDE1MDAtcmV2LXBhcnNlLnNoIGIvdC90MTUwMC1yZXYtcGFyc2Uuc2gKaW5kZXggMDFhYmVlNS4uNjAzMDE5YiAxMDA3NTUKLS0tIGEvdC90MTUwMC1yZXYtcGFyc2Uuc2gKKysrIGIvdC90MTUwMC1yZXYtcGFyc2Uuc2gKQEAgLTU5LDYgKzU5LDcgQEAKIFJPT1Q9JChwd2QpCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgogCW1rZGlyIC1wIHN1Yi9kaXIgd29yayAmJgogCWNwIC1SIC5naXQgcmVwby5naXQKICcKQEAgLTEzMSw2ICsxMzIsMzAgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdCBpbiByZXBvJyAnCisJZWNobyAiJCh0ZXN0X29pZCBhbGdvKSIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PXN0b3JhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PWlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdD1vdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PXNxdWVhbWlzaC1vc3NpZnJhZ2UgMj5lcnIgJiYKKwlncmVwICJ1bmtub3duIG1vZGUgZm9yIC0tc2hvdy1vYmplY3QtZm9ybWF0OiBzcXVlYW1pc2gtb3NzaWZyYWdlIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LXRvcGxldmVsIGZyb20gc3ViZGlyIG9mIHdvcmtpbmcgdHJlZScgJworCXB3ZCA+ZXhwZWN0ICYmCisJZ2l0IC1DIHN1Yi9kaXIgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctdG9wbGV2ZWwgZnJvbSBpbnNpZGUgLmdpdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAuZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0aGUgc3VwZXJwcm9qZWN0IGNvcnJlY3RseScgJwogCWdpdCByZXYtcGFyc2UgLS1zaG93LXN1cGVycHJvamVjdC13b3JraW5nLXRyZWUgPm91dCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKZGlmZiAtLWdpdCBhL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKaW5kZXggYzE5ZmI1MC4uMjU3NDRlMiAxMDA3NTUKLS0tIGEvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKKysrIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKQEAgLTMzOSw3ICszMzksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBoaW50cyByZXNwZWN0IHR5cGUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMF57Y29tbWl0fSAyPnN0ZGVyciAmJgogCWdyZXAgXmhpbnQ6IHN0ZGVyciA+aGludHMgJiYKLQkjIDUgY29tbWl0cywgMSB0YWcgKHdoaWNoIGlzIGEgY29tbWl0aXNoKSwgcGx1cyBpbnRybyBsaW5lCisJIyA1IGNvbW1pdHMsIDEgdGFnICh3aGljaCBpcyBhIGNvbW1pdHRpc2gpLCBwbHVzIGludHJvIGxpbmUKIAl0ZXN0X2xpbmVfY291bnQgPSA3IGhpbnRzCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDI0MDAtd29ya3RyZWUtYWRkLnNoIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKaW5kZXggNTJkNDc2OS4uYjVlY2UxOSAxMDA3NTUKLS0tIGEvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKKysrIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKQEAgLTU4Nyw0ICs1ODcsMjggQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggdW5pbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2UgdW5zZXQnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1Ym1vZHVsZSAmJgorCXRlc3RfY29tbWl0IC1DIHN1Ym1vZHVsZSBmaXJzdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcHJvamVjdCAmJgorCWdpdCAtQyBwcm9qZWN0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJZ2l0IC1DIHByb2plY3QgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCAtQyBwcm9qZWN0IGNvbW1pdCAtbSBhZGRfc3ViICYmCisJZ2l0IGNsb25lIHByb2plY3QgcHJvamVjdC1jbG9uZSAmJgorCWdpdCAtQyBwcm9qZWN0LWNsb25lIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggdW5pbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2Ugc2V0JyAnCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgLWMgc3VibW9kdWxlLnJlY3Vyc2Ugd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIGluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSB1bnNldCcgJworCWdpdCAtQyBwcm9qZWN0LWNsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIGluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSBzZXQnICcKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSAtYyBzdWJtb2R1bGUucmVjdXJzZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC01CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2ggYi90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaAppbmRleCA0NGYzNzhjLi41MmVkNjY1IDEwMDc1NQotLS0gYS90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaAorKysgYi90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaApAQCAtNDcsNyArNDcsNyBAQAogCWdpdCBhZGQgLgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBzdWNjZWVkIGZyb20gc3ViZGlyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIHN1Y2NlZWQgZnJvbSBzdWJkaXInICcKIAkjIFdlIGhhdmUgdG8gcnVuIGZyb20gYSBzdWItZGlyZWN0b3J5IHRvIHRyaWdnZXIgcHJ1bmVfcGF0aAogCSMgVGhlbiB3ZSBmaW5hbGx5IGdldCB0byBydW4gb3VyIC0td2l0aC10cmVlIHRlc3QKIAkoCkBAIC01Nyw3ICs1Nyw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgLWxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBhZGQgZW50cmllcyBmcm9tIG5hbWVkIHRyZWUuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgYWRkIGVudHJpZXMgZnJvbSBuYW1lZCB0cmVlLicgXAogICAgICd0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwNi1yYW5nZS1kaWZmLnNoIGIvdC90MzIwNi1yYW5nZS1kaWZmLnNoCmluZGV4IDA1NzljZDkuLmVjMmI0NTYgMTAwNzU1Ci0tLSBhL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaAorKysgYi90L3QzMjA2LXJhbmdlLWRpZmYuc2gKQEAgLTgsOCArOCw4IEBACiAjIGhhcm0gdGhhbiBnb29kLiAgV2UgbmVlZCBzb21lIHJlYWwgaGlzdG9yeS4KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQlnaXQgZmFzdC1pbXBvcnQgPCAiJFRFU1RfRElSRUNUT1JZIi90MzIwNi9oaXN0b3J5LmV4cG9ydCAmJgotCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWdpdCBmYXN0LWltcG9ydCA8IiRURVNUX0RJUkVDVE9SWSIvdDMyMDYvaGlzdG9yeS5leHBvcnQgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1cRU9GCiAJIyB0b3BpYwogCXQxIHNoYTE6NGRlNDU3ZAogCXQyIHNoYTE6ZmNjY2UyMgpAQCAtMTIxLDg4ICsxMjEsODggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBBLi5CIEEuLkMgKHVubW9kaWZpZWQpJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCiAJCT5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIEIuLi5DICh1bm1vZGlmaWVkKScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKLQkjIHNhbWUgImV4cGVjdGVkIiBhcyBhYm92ZQotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSMgc2FtZSAiZXhwZWN0IiBhcyBhYm92ZQorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIEEgQiBDICh1bm1vZGlmaWVkKScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHVubW9kaWZpZWQgPmFjdHVhbCAmJgotCSMgc2FtZSAiZXhwZWN0ZWQiIGFzIGFib3ZlCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIyBzYW1lICJleHBlY3QiIGFzIGFib3ZlCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIHJlb3JkZXJpbmcnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyByZW9yZGVyZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgcjEpIHMvNS9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDI6ICAkKHRlc3Rfb2lkIHIyKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gMzogICQodGVzdF9vaWQgcjMpIHMvMTIvQi8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSA0OiAgJCh0ZXN0X29pZCByNCkgcy80L0EvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmVkIGEgY29tbWl0JyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgcmVtb3ZlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBkMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpIDwgLTogICQodGVzdF9vaWQgX18pIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDI6ICAkKHRlc3Rfb2lkIGQyKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gMzogICQodGVzdF9vaWQgZDMpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIGEgY29tbWl0JyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgYWRkZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYTEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGEyKSBzLzQvQS8KIAktOiAgJCh0ZXN0X29pZCBfXykgPiAzOiAgJCh0ZXN0X29pZCBhMykgcy82L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gNDogICQodGVzdF9vaWQgYTQpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA1OiAgJCh0ZXN0X29pZCBhNSkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJhc2UsIEEgQiBDJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgcmViYXNlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBiMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYjIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIGIzKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgYjQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBiYXNlLCBCLi4uQycgJwogCSMgdGhpcyBzeW50YXggaW5jbHVkZXMgdGhlIGNvbW1pdHMgZnJvbSBtYXN0ZXIhCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLnJlYmFzZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJLTogICQodGVzdF9vaWQgX18pID4gMTogICQodGVzdF9vaWQgYjUpIHVucmVsYXRlZAogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDI6ICAkKHRlc3Rfb2lkIGIxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAzOiAgJCh0ZXN0X29pZCBiMikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gNDogICQodGVzdF9vaWQgYjMpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA1OiAgJCh0ZXN0X29pZCBiNCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYzIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCkBAIC0yMjYsMjMgKzIyNiwyMyBAQAogCSAgICAgK0IKIAkgICAgICAxMwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQgd2l0aCAtLW5vLXBhdGNoIGRpZmYgb3B0aW9uJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vLXBhdGNoIHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYzIpIHMvNC9BLwogCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCiAJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgYzQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0IHdpdGggLS1zdGF0IGRpZmYgb3B0aW9uJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN0YXQgdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KIAkgICAgIGEgPT4gYiB8IDAKIAkgICAgIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCkBAIC0yNTYsMTIgKzI1NiwxMiBAQAogCSAgICAgYSA9PiBiIHwgMAogCSAgICAgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0IHdpdGggc20gY29uZmlnJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN1Ym1vZHVsZT1sb2cgdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KQEAgLTI4NSwxMiArMjg1LDEyIEBACiAJICAgICArQgogCSAgICAgIDEzCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWVkIGZpbGUnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLnJlbmFtZWQtZmlsZSA+YWN0dWFsICYmCi0Jc2VkIHMvWi9cIC9nID5leHBlY3RlZCA8PC1FT0YgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBuMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpICEgMjogICQodGVzdF9vaWQgbjIpIHMvNC9BLwogCSAgICBAQCBNZXRhZGF0YQpAQCAtMzMwLDEyICszMzAsMTIgQEAKIAkgICAgWiAxMAogCSAgICBaIEIKIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgd2l0aCBtb2RlIG9ubHkgY2hhbmdlJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN1Ym1vZHVsZT1sb2cgdG9waWMuLi5tb2RlLW9ubHktY2hhbmdlID5hY3R1YWwgJiYKLQlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICBmY2NjZTIyICEgMTogIDRkMzljYjMgcy80L0EvCiAJICAgIEBAIE1ldGFkYXRhCiAJICAgIFpBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KQEAgLTM3MCwxMiArMzcwLDEyIEBACiAJICAgICsgIyMgb3RoZXItZmlsZSAobW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSkgIyMKIAkzOiAgYTYzZTk5MiA9IDM6ICA0YzFlMGY1IHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkZWQgYW5kIGxhdGVyIHJlbW92ZWQnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLmFkZGVkLXJlbW92ZWQgPmFjdHVhbCAmJgotCXNlZCBzL1ovXCAvZyA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgczEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSAhIDI6ICAkKHRlc3Rfb2lkIHMyKSBzLzQvQS8KIAkgICAgQEAgTWV0YWRhdGEKQEAgLTQxMSw3ICs0MTEsNyBAQAogCSAgICArICMjIG5ldy1maWxlIChkZWxldGVkKSAjIwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIHM0KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb21taXRzIG9uIG9uZSBzaWRlJyAnCkBAIC00MjEsNyArNDIxLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBtZXNzYWdlJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLmNoYW5nZWQtbWVzc2FnZSA+YWN0dWFsICYmCi0Jc2VkIHMvWi9cIC9nID5leHBlY3RlZCA8PC1FT0YgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBtMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpICEgMjogICQodGVzdF9vaWQgbTIpIHMvNC9BLwogCSAgICBAQCBNZXRhZGF0YQpAQCAtNDM2LDcgKzQzNiw3IEBACiAJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgbTMpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCBtNCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVhbC1jb2xvcmluZycgJwpAQCAtNTA1LDQgKzUwNSwyMDIgQEAKIAlnaXQgLWMgZGlmZi5ub3ByZWZpeD10cnVlIHJhbmdlLWRpZmYgSEVBRF4uLi4KICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiBjb21wYXJlcyBub3RlcyBieSBkZWZhdWx0JyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCisJCT5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZS1kaWZmIHdpdGggLS1uby1ub3RlcycgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1uby1ub3RlcyBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCisJCT5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgd2l0aCBtdWx0aXBsZSAtLW5vdGVzJyAnCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidG9waWMgbm90ZTEiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTEgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ0b3BpYyBub3RlMiIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUyIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMiByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1ub3Rlcz1ub3RlMSAtLW5vdGVzPW5vdGUyIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTEpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTEKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUxCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMikgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMgorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTIKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgZG9lcyBub3QgY29tcGFyZSBub3RlcyBieSBkZWZhdWx0JyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIj0gNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwkhIGdyZXAgIk5vdGVzIiAwMDAwLSogJiYKKwkhIGdyZXAgIm5vdGUiIDAwMDAtKgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggLS1uby1ub3RlcycgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1ub3RlcyAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIj0gNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwkhIGdyZXAgIk5vdGVzIiAwMDAwLSogJiYKKwkhIGdyZXAgIm5vdGUiIDAwMDAtKgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggLS1ub3RlcycgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1ub3RlcyAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIiEgNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJc2VkICIvQEAgQ29tbWl0IG1lc3NhZ2UvLC9AQCBmaWxlOiBBLyFkIiAwMDAwLSogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIC0tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQubm90ZXMgdHJ1ZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICIhIDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzICMjCisJICAgIC0gICAgdG9waWMgbm90ZQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXNlZCAiL0BAIENvbW1pdCBtZXNzYWdlLywvQEAgZmlsZTogQS8hZCIgMDAwMC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCBtdWx0aXBsZSBub3RlcycgJworCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInRvcGljIG5vdGUxIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTEiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidG9waWMgbm90ZTIiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMiIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTIgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm90ZXM9bm90ZTEgLS1ub3Rlcz1ub3RlMiAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIiEgNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUxKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUxCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTIpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTIKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUyCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJc2VkICIvQEAgQ29tbWl0IG1lc3NhZ2UvLC9AQCBmaWxlOiBBLyFkIiAwMDAwLSogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjEwLXBhY2stcmVmcy5zaCBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCmluZGV4IDllYTVmYTQuLmY0MWIyYWYgMTAwNzU1Ci0tLSBhL3QvdDMyMTAtcGFjay1yZWZzLnNoCisrKyBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCkBAIC0yNDAsNyArMjQwLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncGFjayBzeW1saW5rZWQgcGFja2VkLXJlZnMnICcKIAkjIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHN5bWxpbmtpbmcgd29ya3Mgd2hlbiByZWFkaW5nOgotCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbG9vc3kgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvc3N5IHJlZnMvaGVhZHMvbWFzdGVyICYmCiAJZ2l0IGZvci1lYWNoLXJlZiA+YWxsLXJlZnMtYmVmb3JlICYmCiAJbXYgLmdpdC9wYWNrZWQtcmVmcyAuZ2l0L215LWRldmlhbnQtcGFja2VkLXJlZnMgJiYKIAlsbiAtcyBteS1kZXZpYW50LXBhY2tlZC1yZWZzIC5naXQvcGFja2VkLXJlZnMgJiYKZGlmZiAtLWdpdCBhL3QvdDMzMDEtbm90ZXMuc2ggYi90L3QzMzAxLW5vdGVzLnNoCmluZGV4IGQzZmEyOTguLmQ2NmE1ZjYgMTAwNzU1Ci0tLSBhL3QvdDMzMDEtbm90ZXMuc2gKKysrIGIvdC90MzMwMS1ub3Rlcy5zaApAQCAtODY0LDYgKzg2NCwyNCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSA0dGgpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSA4dGggNHRoICYmCisJZ2l0IGxvZyAzcmQuLjR0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIiQoZ2l0IG5vdGUgbGlzdCA0dGgpIiA9ICIkKGdpdCBub3RlIGxpc3QgOHRoKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBub3RlIHdpdGggImdpdCBub3RlcyBjb3B5IiB3aXRoIGRlZmF1bHQnICcKIAl0ZXN0X2NvbW1pdCAxMXRoICYmCiAJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgpAQCAtODc4LDcgKzg5Niw3IEBACiAJCSR7aW5kZW50fQogCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCiAJRU9GCi0JZ2l0IG5vdGVzIGNvcHkgSEVBRF4gSEVBRCAmJgorCWdpdCBub3RlcyBjb3B5IEhFQUReICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIgpAQCAtOTAxLDExICs5MTksMjkgQEAKIAkJJHtpbmRlbnR9MTF0aAogCiAJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjMgSEVBRCAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUR+MykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSAtZiIgd2l0aCBkZWZhdWx0JyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAkJJHtpbmRlbnR9CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAlFT0YKLQlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjIgSEVBRCAmJgorCWdpdCBub3RlcyBjb3B5IC1mIEhFQUR+MiAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUR+MikiCkBAIC0xMTY3LDggKzEyMDMsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgZGlhZ25vc2VzIHRvbyBtYW55IG9yIHRvbyBmZXcgcGFyYW1ldGVycycgJwotCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgb25lIHR3byB0aHJlZQorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0b28gZmV3IHBhcmFtZXRlcnMiIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgb25lIHR3byB0aHJlZSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAidG9vIG1hbnkgcGFyYW1ldGVycyIgZXJyb3IKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgZXhwYW5kcyByZWZzL2hlYWRzL21hc3RlciB0byByZWZzL25vdGVzL3JlZnMvaGVhZHMvbWFzdGVyJyAnCmRpZmYgLS1naXQgYS90L3QzNDAzLXJlYmFzZS1za2lwLnNoIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaAppbmRleCAxZjUxMjJiLi5lZThhOGRiIDEwMDc1NQotLS0gYS90L3QzNDAzLXJlYmFzZS1za2lwLnNoCisrKyBiL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKQEAgLTcsNiArNyw4IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwogIyB3ZSBhc3N1bWUgdGhlIGRlZmF1bHQgZ2l0IGFtIC0zIC0tc2tpcCBzdHJhdGVneSBpcyB0ZXN0ZWQgaW5kZXBlbmRlbnRseQogIyBhbmQgYWx3YXlzIHdvcmtzIDopCiAKQEAgLTIwLDYgKzIyLDEzIEBACiAJZ2l0IGNvbW1pdCAtYSAtbSAiaGVsbG8gd29ybGQiICYmCiAJZWNobyBnb29kYnllID4+IGhlbGxvICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAiZ29vZGJ5ZSIgJiYKKwlnaXQgdGFnIGdvb2RieWUgJiYKKworCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZXZlcnRlZC1nb29kYnllICYmCisJZ2l0IHRhZyByZXZlcnRlZC1nb29kYnllICYmCiAKIAlnaXQgY2hlY2tvdXQgLWYgc2tpcC1yZWZlcmVuY2UgJiYKIAllY2hvIG1vbyA+IGhlbGxvICYmCkBAIC03Niw0ICs4NSwyNyBAQAogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAgdGhhdCBlbXB0aWVzIGNvbW1pdCBmYWlscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgXAorCQkJZ29vZGJ5ZV4gcmV2ZXJ0ZWQtZ29vZGJ5ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIHRoYXQgZW1wdGllcyBjb21taXQgZmFpbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBcCisJCQlnb29kYnllXiByZXZlcnRlZC1nb29kYnllCisJKQorJworCisjIE11c3QgYmUgdGhlIGxhc3QgdGVzdCBpbiB0aGlzIGZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRFRElUT1IgYW5kIGZyaWVuZHMgYXJlIHVuY2hhbmdlZCcgJworCXRlc3RfZWRpdG9yX3VuY2hhbmdlZAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKaW5kZXggZDJkZmJlNC4uYmYwZGM3NSAxMDA3NTUKLS0tIGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKKysrIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTc2LDggKzc2LDExIEBACiAJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgogCWVycm9yOiBub3RoaW5nIHRvIGRvCiAJRU9GCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY190cnVlIiBnaXQgcmViYXNlIC1pIEhFQUReID5hY3R1YWwgMj4mMSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfdHJ1ZSIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEKKwkpICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIApAQCAtMTM2LDggKzEzOSwxMSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCB0aGUgZXhlYyBjb21tYW5kIGNoZWNrcyB0cmVlIGNsZWFubmVzcycgJwogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY19lY2hvX2Zvb18+ZmlsZTEgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJleGVjX2VjaG9fZm9vXz5maWxlMSAxIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUReCisJKSAmJgogCXRlc3RfY21wX3JldiBtYXN0ZXJeIEhFQUQgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCkBAIC0xNjMsOSArMTY5LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCBleGVjIG9mIGluZXhpc3RlbnQgY29tbWFuZCcgJwogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY190aGlzLWNvbW1hbmQtZG9lcy1ub3QtZXhpc3QgMSIgXAotCWdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfdGhpcy1jb21tYW5kLWRvZXMtbm90LWV4aXN0IDEiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxCisJKSAmJgogCSEgZ3JlcCAiTWF5YmUgZ2l0LXJlYmFzZSBpcyBicm9rZW4iIGFjdHVhbAogJwogCkBAIC0xNzYsNyArMTg0LDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY2hhbmdlcyBhcmUgYSBub3AnICcKIAlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgRiAmJgogCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCkBAIC0xODYsNyArMTkzLDYgQEAKIAlnaXQgY2hlY2tvdXQgLWIgZGVhZC1lbmQgJiYKIAlnaXQgcm0gZmlsZTYgJiYKIAlnaXQgY29tbWl0IC1tICJzdG9wIGhlcmUiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSBGIGJyYW5jaDIgJiYKIAl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMiIgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gyKSAmJgpAQCAtMTk1LDcgKzIwMSw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1vbnRvIDxicmFuY2g+JyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3Qtb250byBicmFuY2gyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtLW9udG8gYnJhbmNoMSBGICYmCiAJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL3Rlc3Qtb250byIgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMSkgJiYKQEAgLTIwNSw3ICsyMTAsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIHRvcCBvZiBhIG5vbi1jb25mbGljdGluZyBjb21taXQnICcKIAlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgogCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgYnJhbmNoMiAmJgogCXRlc3QgZmlsZTYgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IG9yaWdpbmFsLWJyYW5jaDEpICYmCiAJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDEiICYmCkBAIC0yMjUsOCArMjI5LDEwIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2hhbmdlIHR3byBjb21taXRzJyAnCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpICYmCiAJdGVzdCBIID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBHID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAlibG9iMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXjpmaWxlMSkgJiYKQEAgLTI1Miw3ICsyNTgsNiBAQAogCT4+Pj4+Pj4gJGNvbW1pdC4uLiBHCiAJRU9GCiAJZ2l0IHRhZyBuZXctYnJhbmNoMSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIiAmJgogCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgpAQCAtMjgxLDcgKzI4Niw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCB3aXRoIGVycm9yIHdoZW4gbmV3IGJhc2UgY2Fubm90IGJlIGNoZWNrZWQgb3V0JyAnCiAJZ2l0IHJtIC0tY2FjaGVkIGZpbGUxICYmCiAJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgaW4gYmFzZSIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciA+IG91dHB1dCAyPiYxICYmCiAJdGVzdF9pMThuZ3JlcCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiIgXAogCQlvdXRwdXQgJiYKQEAgLTI5Niw3ICszMDAsNiBAQAogCXRlc3RfdGljayAmJgogCUdJVF9BVVRIT1JfTkFNRT0iVHdlcnAgU25vZyIgZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IGF1dGhvciIgJiYKIAlnaXQgdGFnIHR3ZXJwICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUReICYmCiAJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIl5BdXRob3I6IFR3ZXJwIFNub2ciCiAnCkBAIC0zMTQsNyArMzE3LDYgQEAKIAl0ZXN0X2NvbW1pdCBiIGNvbmZsaWN0IGIgY29uZmxpY3QtYiAmJgogCUdJVF9BVVRIT1JfTkFNRT0kb0dJVF9BVVRIT1JfTkFNRSAmJgogCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBjb25mbGljdC1hICYmCiAJZWNobyByZXNvbHZlZCA+Y29uZmxpY3QgJiYKIAlnaXQgYWRkIGNvbmZsaWN0ICYmCkBAIC0zMzAsOSArMzMyLDExIEBACiAJdGVzdF90aWNrICYmCiAJR0lUX0FVVEhPUl9OQU1FPSJOaXRmb2wiIGdpdCBjb21taXQgLW0gIm5pdGZvbCIgZmlsZTcgJiYKIAllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKLQkJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUR+MiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCQlnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIgSEVBRH4yCisJKSAmJgogCXRlc3QgQiA9ICQoY2F0IGZpbGU3KSAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCiAnCkBAIC0zNDMsNyArMzQ3LDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAnLXAgaGFuZGxlcyAibm8gY2hhbmdlcyIgZ3JhY2VmdWxseScgJwogCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtcCBIRUFEXiAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCiAJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgpAQCAtMzUzLDggKzM1NiwxMCBAQAogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlIFJFQkFTRV9QICdleGNoYW5nZSB0d28gY29tbWl0cyB3aXRoIC1wJyAnCiAJZ2l0IGNoZWNrb3V0IEggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIC1wIEhFQUR+MgorCSkgJiYKIAl0ZXN0IEggPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEcgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQogJwpAQCAtMzg4LDcgKzM5Myw2IEBACiAJZ2l0IGNvbW1pdCAtbSBNIGZpbGUxICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHRvLWJlLXJlYmFzZWQgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC1wIC0tb250byBicmFuY2gxIG1hc3RlciAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCiAJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgpAQCAtNDAzLDggKzQwNywxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdlZGl0IGFuY2VzdG9yIHdpdGggLXAnICcKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIDIgZWRpdCAzIDQiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4zICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIGVkaXQgMyA0IiBnaXQgcmViYXNlIC1pIC1wIEhFQUR+MworCSkgJiYKIAllY2hvIDIgPiB1bnJlbGF0ZWQtZmlsZSAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gTDItbW9kaWZpZWQgLS1hbWVuZCB1bnJlbGF0ZWQtZmlsZSAmJgpAQCAtNDE4LDExICs0MjQsMTMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgdHJpZXMgdG8gY29tbWl0JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBEICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbmV3LWJyYW5jaDEgSEVBRF4gJiYKLQllY2hvIHJlc29sdmVkID4gZmlsZTEgJiYKLQlnaXQgYWRkIGZpbGUxICYmCi0JRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgorCQllY2hvIHJlc29sdmVkID4gZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjaG91ZXR0ZSEiIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgbmV3LWJyYW5jaDEpICYmCiAJZ2l0IHNob3cgSEVBRCB8IGdyZXAgY2hvdWV0dGUKICcKQEAgLTQzMCw3ICs0MzgsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSBmbGFnIGlzIGhlZWRlZCwgZXZlbiBhZnRlciAtLWNvbnRpbnVlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJAezF9ICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtdiAtaSAtLW9udG8gbmV3LWJyYW5jaDEgSEVBRF4gJiYKIAllY2hvIHJlc29sdmVkID4gZmlsZTEgJiYKIAlnaXQgYWRkIGZpbGUxICYmCkBAIC00NDAsMTAgKzQ0NywxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnbXVsdGktc3F1YXNoIG9ubHkgZmlyZXMgdXAgZWRpdG9yIG9uY2UnICcKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IjEgc3F1YXNoIDIgc3F1YXNoIDMgc3F1YXNoIDQiIFwKLQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKLQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIHNxdWFzaCAzIHNxdWFzaCA0IiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkKICcKQEAgLTQ1MSw5ICs0NjEsMTIgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdtdWx0aS1maXh1cCBkb2VzIG5vdCBmaXJlIHVwIGVkaXRvcicgJwogCWdpdCBjaGVja291dCAtYiBtdWx0aS1maXh1cCBFICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJORVZFUiIgRkFLRV9MSU5FUz0iMSBmaXh1cCAyIGZpeHVwIDMgZml4dXAgNCIgXAotCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik5FVkVSIiBcCisJCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDIgZml4dXAgMyBmaXh1cCA0IiBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAwID0gJChnaXQgc2hvdyB8IGdyZXAgTkVWRVIgfCB3YyAtbCkgJiYKIAlnaXQgY2hlY2tvdXQgQHstMX0gJiYKQEAgLTQ2MywxMiArNDc2LDE1IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSB1c2VkIGFmdGVyIGNvbmZsaWN0JyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LWZpeHVwIGNvbmZsaWN0LWJyYW5jaCAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQiIGdpdCByZWJhc2UgLWkgJGJhc2UgJiYKLQllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKLQlnaXQgYWRkIGNvbmZsaWN0ICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCi0JCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgZml4dXAgNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCQllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKKwkJZ2l0IGFkZCBjb25mbGljdCAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKIAlnaXQgY2hlY2tvdXQgQHstMX0gJiYKQEAgLTQ3OCwxMiArNDk0LDE1IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSByZXRhaW5lZCBhZnRlciBjb25mbGljdCcgJwogCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1zcXVhc2ggY29uZmxpY3QtYnJhbmNoICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgc3F1YXNoIDQiIGdpdCByZWJhc2UgLWkgJGJhc2UgJiYKLQllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKLQlnaXQgYWRkIGNvbmZsaWN0ICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9IlRXSUNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAotCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIHNxdWFzaCA0IiBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCQlnaXQgYWRkIGNvbmZsaWN0ICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJUV0lDRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3QgMiA9ICQoZ2l0IHNob3cgfCBncmVwIFRXSUNFIHwgd2MgLWwpICYmCiAJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCkBAIC01MDAsMTAgKzUxOSwxMyBAQAogCUVPRgogCWdpdCBjaGVja291dCAtYiBzcXVhc2gtZml4dXAgRSAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iMSBmaXh1cCAyIHNxdWFzaCAzIGZpeHVwIDQiIFwKLQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKLQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDIgc3F1YXNoIDMgZml4dXAgNCIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lIDEsL15cJC9kID4gYWN0dWFsLXNxdWFzaC1maXh1cCAmJgogCXRlc3RfY21wIGV4cGVjdC1zcXVhc2gtZml4dXAgYWN0dWFsLXNxdWFzaC1maXh1cCAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBREB7Mn0gfApAQCAtNTE3LDEwICs1MzksMTMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzcXVhc2ggaWdub3JlcyBjb21tZW50cycgJwogCWdpdCBjaGVja291dCAtYiBza2lwLWNvbW1lbnRzIEUgJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IiMgMSAjIHNxdWFzaCAyICMgc3F1YXNoIDMgIyBzcXVhc2ggNCAjIiBcCi0JCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCi0JCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iIyAxICMgc3F1YXNoIDIgIyBzcXVhc2ggMyAjIHNxdWFzaCA0ICMiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgogCWdpdCBjaGVja291dCBAey0xfSAmJgpAQCAtNTMwLDEwICs1NTUsMTMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzcXVhc2ggaWdub3JlcyBibGFuayBsaW5lcycgJwogCWdpdCBjaGVja291dCAtYiBza2lwLWJsYW5rLWxpbmVzIEUgJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9Ij4gMSA+IHNxdWFzaCAyID4gc3F1YXNoIDMgPiBzcXVhc2ggNCA+IiBcCi0JCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCi0JCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iPiAxID4gc3F1YXNoIDIgPiBzcXVhc2ggMyA+IHNxdWFzaCA0ID4iIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgogCWdpdCBjaGVja291dCBAey0xfSAmJgpAQCAtNTQzLDE3ICs1NzEsMjEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCcgJwogCWdpdCBjaGVja291dCAtYiBzcXVhc2gtd29ya3Mgbm8tY29uZmxpY3QtYnJhbmNoICYmCiAJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBzIDMgMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKLQkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHMgMyAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCiAJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaCBjb25mbGljdC1icmFuY2ggJiYKIAlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMyAyIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAzIDIiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRH4zCisJKSAmJgogCXRlc3Rfd3JpdGVfbGluZXMgb25lIHR3byBmb3VyID4gY29uZmxpY3QgJiYKIAlnaXQgYWRkIGNvbmZsaWN0ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCkBAIC01NjYsOCArNTk4LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQgKGNhc2UgMiknICcKIAlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoMiBjb25mbGljdC1icmFuY2ggJiYKIAlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMyBzcXVhc2ggMSAyIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIzIHNxdWFzaCAxIDIiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRH4zCisJKSAmJgogCXRlc3Rfd3JpdGVfbGluZXMgb25lIGZvdXIgPiBjb25mbGljdCAmJgogCWdpdCBhZGQgY29uZmxpY3QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKQEAgLTU4NywxMSArNjIyLDEzIEBACiAJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGNoYW5nZSIgJiYKIAlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgotCWVjaG8gZWRpdGVkID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkJZWNobyBlZGl0ZWQgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgZWRpdGVkID0gJChnaXQgc2hvdyBIRUFEOmZpbGU3KSAmJgogCWdpdCBzaG93IEhFQUQgfCBncmVwIGNob3VldHRlICYmCiAJdGVzdCAkcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKQpAQCAtNjAwLDM0ICs2MzcsNDEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0ZWQgLS1jb250aW51ZSBkb2VzIG5vdCBzcXVhc2ggY29tbWl0cyBhZnRlciAiZWRpdCInICcKIAlvbGQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCi0JZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCi0JZ2l0IGFkZCBmaWxlNyAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0NPTU1JVF9NRVNTQUdFPSIgIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9IiAiIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0ICRvbGQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAlnaXQgcmViYXNlIC0tYWJvcnQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0by1hbWVuZCBvbmx5IGVkaXRlZCBjb21taXRzIGFmdGVyICJlZGl0IicgJwogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgotCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgotCWdpdCBhZGQgZmlsZTcgJiYKLQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJlZGl0ZWQgZmlsZTcgYWdhaW4iIGdpdCBjb21taXQgJiYKLQllY2hvICJhbmQgYWdhaW4iID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JdGVzdF90aWNrICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9ImFuZCBhZ2FpbiIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImVkaXRlZCBmaWxlNyBhZ2FpbiIgZ2l0IGNvbW1pdCAmJgorCQllY2hvICJhbmQgYWdhaW4iID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9ImFuZCBhZ2FpbiIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCWdpdCByZWJhc2UgLS1hYm9ydAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBlcnJvciBhZnRlciBmYWlsZWQgImV4ZWMiJyAnCiAJdGVzdF90aWNrICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBleGVjX2ZhbHNlIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY19mYWxzZSIgZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKIAllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKIAlnaXQgYWRkIGZpbGU3ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDI+ZXJyb3IgJiYKQEAgLTYzOCw4ICs2ODIsMTAgQEAKIAlncmFuZHBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgogCWdpdCBjaGVja291dCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkgJiYKIAl0ZXN0ICRncmFuZHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCiAnCiAKQEAgLTY1NCw5ICs3MDAsMTAgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgLS1uby12ZXJpZnkgZmlsZTEgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKLQorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9MiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggYSBmaWxlIG5hbWVkIEhFQUQgaW4gd29ya3RyZWUnICcKQEAgLTY3Niw4ICs3MjMsMTAgQEAKIAkJZ2l0IGNvbW1pdCAtbSAiQWRkIGJvZHkiCiAJKSAmJgogCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBAey0xfSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQHstMX0KKwkpICYmCiAJdGVzdCAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWFuKSIgPSAiU3F1YXNoZWQgQXdheSIKIAogJwpAQCAtNjg4LDcgKzczNyw2IEBACiAJR0lUX0VESVRPUj06IGdpdCBjb21taXQgLS1hbWVuZCBcCiAJCS0tYXV0aG9yPSJTb21lYm9keSBlbHNlIDxzb21lYm9keUBlbHNlLmNvbT4iICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMykgIT0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSBicmFuY2gzICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMykgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoNCkKIApAQCAtNzEzLDEzICs3NjEsMTQgQEAKIAkJZ2l0IGNvbW1pdCAtYSAtbSAic3VibW9kdWxlIHNlY29uZCIKIAkpICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAiVGhyZWUgY2hhbmdlcyBzdWJtb2R1bGUiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSByZWJhc2UgLWknICcKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIDMiIGdpdCByZWJhc2UgLWkgQQorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgMyIgZ2l0IHJlYmFzZSAtaSBBCisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29uZmxpY3Qgc2V0dXAnICcKQEAgLTczNiw3ICs3ODUsNiBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29udGludWUgd2l0aCBvbmx5IHN1Ym1vZHVsZSBzdGFnZWQnICcKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHN1Ym1vZHVsZS1iYXNlICYmCiAJZ2l0IGFkZCBzdWIgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKQEAgLTc0Niw3ICs3OTQsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbnRpbnVlIHdpdGggdW5zdGFnZWQgc3VibW9kdWxlJyAnCiAJZ2l0IGNoZWNrb3V0IHN1Ym1vZHVsZS10b3BpYyAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHN1Ym1vZHVsZS1iYXNlICYmCiAJZ2l0IHJlc2V0ICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCkBAIC03NTksNyArODA2LDYgQEAKIAl0ZXN0LXRvb2wgY2htdGltZSA9MTIzNDU2Nzg5IGZpbGUzICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgSEVBRH40ICYmCiAJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCU1USU1FPSQodGVzdC10b29sIGNobXRpbWUgLS1nZXQgZmlsZTMpICYmCkBAIC03NjgsMTYgKzgxNCwyMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdvcmQnICcKIAlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLWJyYW5jaCBtYXN0ZXIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIDIgMyByZXdvcmQgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRSBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKLQlnaXQgc2hvdyBIRUFEIHwgZ3JlcCAiRSBjaGFuZ2VkIiAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgIT0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCi0JdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCi0JRkFLRV9MSU5FUz0iMSAyIHJld29yZCAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkQgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCi0JZ2l0IHNob3cgSEVBRF4gfCBncmVwICJEIGNoYW5nZWQiICYmCi0JRkFLRV9MSU5FUz0icmV3b3JkIDEgMiAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkIgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCi0JZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAiQiBjaGFuZ2VkIiAmJgotCUZBS0VfTElORVM9IjEgciAyIHBpY2sgMyBwIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgcmV3b3JkIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkUgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBICYmCisJCWdpdCBzaG93IEhFQUQgfCBncmVwICJFIGNoYW5nZWQiICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgIT0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCQlGQUtFX0xJTkVTPSIxIDIgcmV3b3JkIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRCBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRF4gfCBncmVwICJEIGNoYW5nZWQiICYmCisJCUZBS0VfTElORVM9InJld29yZCAxIDIgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJCIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQSAmJgorCQlnaXQgc2hvdyBIRUFEfjMgfCBncmVwICJCIGNoYW5nZWQiICYmCisJCUZBS0VfTElORVM9IjEgciAyIHBpY2sgMyBwIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgogCWdpdCBzaG93IEhFQUR+MiB8IGdyZXAgIkMgY2hhbmdlZCIKICcKIApAQCAtNzg4LDcgKzg0MCw2IEBACiAJdGVzdF9jb21taXQgbjIgJiYKIAl0ZXN0X2NvbW1pdCBuMyAmJgogCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiBuMyAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLS1vbnRvIG4xIG4yICYmCiAJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgogJwpAQCAtODAxLDggKzg1MiwxMSBAQAogCUVPRgogCWdpdCByZXNldCAtLWhhcmQgbjMgJiYKIAlnaXQgbm90ZXMgYWRkIC1tImFuIGVhcmxpZXIgbm90ZSIgbjIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlHSVRfTk9URVNfUkVXUklURV9NT0RFPWNvbmNhdGVuYXRlIEZBS0VfTElORVM9IjEgZiAyIiBnaXQgcmViYXNlIC1pIG4xICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1jb25jYXRlbmF0ZSBGQUtFX0xJTkVTPSIxIGYgMiIgXAorCQkJZ2l0IHJlYmFzZSAtaSBuMQorCSkgJiYKIAlnaXQgbm90ZXMgc2hvdyA+IG91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKQEAgLTgxMSw4ICs4NjUsMTAgQEAKIAlnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKIAlncmFuZHBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgSEVBRF4wICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiBIRUFEXjAKKwkpICYmCiAJdGVzdCAkZ3JhbmRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAogJwpAQCAtODIxLDcgKzg3Nyw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHdheXMgY2hlcnJ5LXBpY2sgd2l0aCAtLW5vLWZmJyAnCiAJZ2l0IGNoZWNrb3V0IG5vLWZmLWJyYW5jaCAmJgogCWdpdCB0YWcgb3JpZ2luYWwtbm8tZmYtYnJhbmNoICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtLW5vLWZmIEEgJiYKIAlmb3IgcCBpbiAwIDEgMgogCWRvCkBAIC04NTMsOCArOTA4LDEwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UtaSBoaXN0b3J5IHdpdGggZnVubnkgbWVzc2FnZXMnICcKIAlnaXQgcmV2LWxpc3QgQS4uZnVubnkgPmV4cGVjdCAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgQSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKIAlnaXQgcmV2LWxpc3QgQS4uID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC04NjgsOSArOTI1LDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgZ2l0IHNob3cgSEVBRCInICcKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKIAkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCiAJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKQEAgLTg4MSw5ICs5MzgsOSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC0tZXhlYyBnaXQgc2hvdyBIRUFEIC1pIicgJwogCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCWdpdCByZWJhc2UgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtaSBIRUFEfjIgPmFjdHVhbCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtaSBIRUFEfjIgPmFjdHVhbCAmJgogCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKIAkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdApAQCAtODk0LDkgKzk1MSw5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWl4IGdpdCBzaG93IEhFQUQiJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCiAJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgogCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CkBAIC05MDgsOSArOTY1LDkgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1peCB3aXRoIHNldmVyYWwgPENNRD4nICcKIAlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRDsgcHdkIiBIRUFEfjIgPmFjdHVhbCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLWl4ICJnaXQgc2hvdyBIRUFEOyBwd2QiIEhFQUR+MiA+YWN0dWFsICYmCiAJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEO19wd2QgMiBleGVjX2dpdF9zaG93X0hFQUQ7X3B3ZCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKIAkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdApAQCAtOTIxLDkgKzk3OCw5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCBzZXZlcmFsIGluc3RhbmNlcyBvZiAtLWV4ZWMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLS1leGVjICJwd2QiIEhFQUR+MiA+YWN0dWFsICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tZXhlYyAicHdkIiBIRUFEfjIgPmFjdHVhbCAmJgogCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCBleGVjX3B3ZCAyCiAJCQkJZXhlY19naXRfc2hvd19IRUFEIGV4ZWNfcHdkIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgpAQCAtOTQyLDEzICs5OTksMTEgQEAKIAllY2hvIGJpcyA+YmlzLnR4dCAmJgogCWdpdCBhZGQgYmlzLnR4dCAmJgogCWdpdCBjb21taXQgLW0gImZpeHVwISB0d29fZXhlYyIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQkoCi0JCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2FjdHVhbCAmJgotCQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLS1hdXRvc3F1YXNoIEhFQUR+NCA+YWN0dWFsCi0JKSAmJgorCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2FjdHVhbCAmJgorCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWF1dG9zcXVhc2ggSEVBRH40ID5hY3R1YWwgJiYKIAlnaXQgY2hlY2tvdXQgYXV0b3NxdWFzaCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCiAJCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2V4cGVjdGVkICYmCiAJCUZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKQEAgLTk2OSw3ICsxMDI0LDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZXhlYyB3aXRob3V0IDxDTUQ+JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgMj5hY3R1YWwgJiYKIAl0ZXN0X2kxOG5ncmVwICJyZXF1aXJlcyBhIHZhbHVlIiBhY3R1YWwgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyCkBAIC05NzcsOCArMTAzMSwxMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJlLW9yZGVyIGFuZCBkcm9wIGNvbW1pdHMnICcKIAlnaXQgY2hlY2tvdXQgRSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjMgMSAyIDUiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMyAxIDIgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eIHwgc2VkIC1uZSBcJHApICYmCkBAIC05OTEsMjQgKzEwNDcsMzAgQEAKIAllY2hvIEIgPmZpbGU3ICYmCiAJZ2l0IGFkZCBmaWxlNyAmJgogCUdJVF9BVVRIT1JfTkFNRT0iVHdlcnAgU25vZyIgZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IGF1dGhvciIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLXEgIl5hdXRob3IgVHdlcnAgU25vZyIgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1xICJeZGlmZmVyZW50IGF1dGhvciQiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgdGVtcG9yYXJ5IHNlbnRpbmVsIGNvbW1pdCcgJwogCWdpdCBjaGVja291dCBCICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl50cmVlICRFTVBUWV9UUkVFIiAmJgogCWdpdCByZWJhc2UgLS1hYm9ydAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IGZpeHVwIHJvb3QgY29tbWl0JyAnCiAJZ2l0IGNoZWNrb3V0IEIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQiA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlMSkgJiYKIAl0ZXN0IDAgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLWMgXnBhcmVudFwgKQpAQCAtMTAxNyw5ICsxMDc5LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJld29yZCBvcmlnaW5hbCByb290IGNvbW1pdCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLW9yaWdpbmFsLXJvb3QtYnJhbmNoIG1hc3RlciAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9InJld29yZCAxIDIiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkEgY2hhbmdlZCIgXAotCWdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQSBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkEgY2hhbmdlZCIgJiYKIAl0ZXN0IC16ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVwIEhFQUReKSIKICcKQEAgLTEwMjcsOSArMTA5MSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXdvcmQgbmV3IHJvb3QgY29tbWl0JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCWdpdCBjaGVja291dCAtYiByZXdvcmQtbm93LXJvb3QtYnJhbmNoIG1hc3RlciAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9InJld29yZCAzIDEiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgXAotCWdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDMgMSIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBcCisJCWdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiQyBjaGFuZ2VkIiAmJgogCXRlc3QgLXogIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXAgSEVBRF4pIgogJwpAQCAtMTA0MSw4ICsxMTA3LDEwIEBACiAJZ2l0IHJtIGZpbGUxICYmCiAJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgMSBhZGQgZmlsZSAyIiAmJgogCWVjaG8geiA+ZmlsZTEgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCXJtIGZpbGUxICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVCKSIgPSAicmVtb3ZlIGZpbGUgMSBhZGQgZmlsZSAyIiAmJgpAQCAtMTA1MiwxMSArMTEyMCwxMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXdvcmQgcm9vdCB3aGVuIHJvb3QgaGFzIHVudHJhY2tlZCBmaWxlIGNvbmZsaWN0JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UiICYmCiAJZWNobyB6PmZpbGUxICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9InJld29yZCAxIDIiIFwKLQkJRkFLRV9DT01NSVRfTUVTU0FHRT0iTW9kaWZpZWQgQSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKLQlybSBmaWxlMSAmJgotCUZBS0VfQ09NTUlUX01FU1NBR0U9IlJld29yZGVkIEEiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBcCisJCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJNb2RpZmllZCBBIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCQlybSBmaWxlMSAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJSZXdvcmRlZCBBIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVCIEhFQUReKSIgPSAiUmV3b3JkZWQgQSIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpIiA9IDIKICcKQEAgLTEwNjUsMTkgKzExMzUsMjMgQEAKIAlnaXQgY2hlY2tvdXQgcmV3b3JkLW9yaWdpbmFsLXJvb3QtYnJhbmNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBjb25mbGljdC1icmFuY2ggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1mIC0tb250byBIRUFEfjIgSEVBRH4gJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtZiAtLW9udG8gSEVBRH4yIEhFQUR+ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWFib3J0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdG9kbycgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgbm8tY29uZmxpY3QtYnJhbmNoXjAgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEgMiAzIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgotCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgotCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSAyIDMiIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCBNID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBMID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKICcKQEAgLTEwODUsNyArMTE1OSw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcHJvZHVjZXMgcmVhZGFibGUgcmVmbG9nJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBicmFuY2ggLWYgYnJhbmNoLXJlZmxvZy10ZXN0IEggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC0tb250byBJIEYgYnJhbmNoLXJlZmxvZy10ZXN0ICYmCiAJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgogCXJlYmFzZSAtaSAoZmluaXNoKTogcmV0dXJuaW5nIHRvIHJlZnMvaGVhZHMvYnJhbmNoLXJlZmxvZy10ZXN0CkBAIC0xMTA2LDggKzExNzksMTAgQEAKIAlzZWQgLWUgIjIsXCRzL14vXFxcXC8iICIkMSIgPiIkMS50bXAiICYmCiAJbXYgIiQxLnRtcCIgIiQxIgogCUVPRgotCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL3JlbW92ZS1hbGwtYnV0LWZpcnN0LnNoIiAmJgotCWdpdCByZWJhc2UgLWkgQiAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvcmVtb3ZlLWFsbC1idXQtZmlyc3Quc2giICYmCisJCWdpdCByZWJhc2UgLWkgQgorCSkgJiYKIAl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKICcKIApAQCAtMTExNiw5ICsxMTkxLDExIEBACiAJd3JpdGVfc2NyaXB0IGNvcHktZWRpdC1zY3JpcHQuc2ggPDwtXEVPRiAmJgogCWNwICIkMSIgZWRpdC1zY3JpcHQKIAlFT0YKLQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9jb3B5LWVkaXQtc2NyaXB0LnNoIiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDoiICYmCi0JZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvY29weS1lZGl0LXNjcmlwdC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKIAl0ZXN0IC16ICIkKGdyZXAgLXZlICJeIyIgLWUgIl5cJCIgLWUgIl5waWNrIiBlZGl0LXNjcmlwdCkiCiAnCiAKQEAgLTExNTMsOCArMTIzMCwxMSBAQAogCWVjaG8gZml2ZSA+Y29uZmxpY3QgJiYKIAllY2hvIFogPmZpbGUxICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAib25lIGZpbGUgY29uZmxpY3QiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1zdHJhdGVneT1yZWN1cnNpdmUgLVhvdXJzIGNvbmZsaWN0LWJyYW5jaCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIFwKKwkJCS1Yb3VycyBjb25mbGljdC1icmFuY2gKKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJdGVzdCAkKGdpdCBzaG93IGNvbmZsaWN0LWJyYW5jaDpjb25mbGljdCkgPSAkKGNhdCBjb25mbGljdCkgJiYKIAl0ZXN0ICQoY2F0IGZpbGUxKSA9IFoKQEAgLTExOTUsOCArMTI3NSwxMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IGNvcmUuYWJicmV2JyAnCiAJZ2l0IGNvbmZpZyBjb3JlLmFiYnJldiAxMiAmJgotCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+NCA+dG9kby1saXN0ICYmCisJKAorCQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRH40ID50b2RvLWxpc3QKKwkpICYmCiAJdGVzdCA0ID0gJChncmVwIC1jICJwaWNrIFswLTlhLWZdXHsxMixcfSIgdG9kby1saXN0KQogJwogCkBAIC0xMjA0LDE2ICsxMjg2LDIwIEBACiAJd3JpdGVfc2NyaXB0IGR1bXAtcmF3LnNoIDw8LVxFT0YgJiYKIAkJY2F0ICIkMSIKIAlFT0YKLQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9kdW1wLXJhdy5zaCIgJiYKLQlnaXQgcmViYXNlIC1pIEhFQUR+NCA+YWN0dWFsICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9kdW1wLXJhdy5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPmFjdHVhbAorCSkgJiYKIAl0ZXN0X2kxOG5ncmVwICJeIyBSZWJhc2UgLi4qIG9udG8gLi4qIChbMC05XSIgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb21taXRzIHRoYXQgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcyAocGljayknICcKIAlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCiAJZ2l0IGNsZWFuIC1mICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgQSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCiAJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCiAJPmZpbGU2ICYmCkBAIC0xMjI4LDggKzEzMTQsMTAgQEAKIAlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCiAJZ2l0IGNsZWFuIC1mICYmCiAJZ2l0IHRhZyBvcmlnaW5hbC1icmFuY2gyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKIAl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKIAk+ZmlsZTYgJiYKQEAgLTEyNDQsOCArMTMzMiwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChubyBmZiknICcKIAlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCiAJZ2l0IGNsZWFuIC1mICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1uby1mZiBBICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1uby1mZiBBCisJKSAmJgogCXRlc3QgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgPSBGICYmCiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKIAk+ZmlsZTYgJiYKQEAgLTEyNjgsOCArMTM1OCwxMCBAQAogCWdpdCB0YWcgc2VxLW9udG8gJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiAmJgogCWdpdCBjaGVycnktcGljayBzZXEtb250byAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSBnaXQgcmViYXNlIC1pIHNlcS1vbnRvICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IGdpdCByZWJhc2UgLWkgc2VxLW9udG8KKwkpICYmCiAJdGVzdCAtZCAuZ2l0L3JlYmFzZS1tZXJnZSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlcS1vbnRvICYmCkBAIC0xMjg4LDggKzEzODAsMTAgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCcgJwogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gZHJvcC10ZXN0ICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSBkcm9wIDIgMyBkIDQgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIGRyb3AgMiAzIGQgNCA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBzZWQgLW5lIFwkcCkKQEAgLTEyOTgsOSArMTM5MiwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gaWdub3JlJyAnCiAJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgaWdub3JlICYmCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgMiAzIDQiIFwKLQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbAorCSkgJiYKIAl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3RfaTE4bmdyZXAgXAogCQkiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9taXNzaW5nLWNvbW1pdCIgXApAQCAtMTMxNiw5ICsxNDExLDEwIEBACiAJRU9GCiAJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgd2FybiAmJgogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBcCi0JCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsLjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbC4yCisJKSAmJgogCWhlYWQgLW40IGFjdHVhbC4yID5hY3R1YWwgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgogCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCkBAIC0xMzQwLDE0ICsxNDM2LDE1IEBACiAJRU9GCiAJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiA0IiBcCi0JCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCi0JdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKLQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwIFwKLQkJLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCi0JRkFLRV9MSU5FUz0iMSAyIGRyb3AgMyA0IGRyb3AgNSIgXAotCQlnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiA0IiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwIFwKKwkJCS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCQlGQUtFX0xJTkVTPSIxIDIgZHJvcCAzIDQgZHJvcCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCkBAIC0xMzY4LDIxICsxNDY1LDI3IEBACiAJeCBnaXQgc2hvdyBIRUFECiAJRU9GCiAJZ2l0IGNoZWNrb3V0IGFiYnJldmNtZCAmJgotCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKIAl0ZXN0X2NvbmZpZyByZWJhc2UuYWJicmV2aWF0ZUNvbW1hbmRzIHRydWUgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgXAotCQktLWF1dG9zcXVhc2ggbWFzdGVyID5hY3R1YWwgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIFwKKwkJCS0tYXV0b3NxdWFzaCBtYXN0ZXIgPmFjdHVhbAorCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGNoZWNrIG9mIGJhZCBjb21tYW5kJyAnCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBiYWQtY21kICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIGJhZCA0IDUiIFwKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIDMgYmFkIDQgNSIgXAogCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgotCXRlc3RfaTE4bmdyZXAgImJhZGNtZCAkKGdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLTEgbWFzdGVyfjEpIiBhY3R1YWwgJiYKLQl0ZXN0X2kxOG5ncmVwICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggLmdpdCByZWJhc2UgLS1lZGl0LXRvZG8uLiIgYWN0dWFsICYmCi0JRkFLRV9MSU5FUz0iMSAyIDMgZHJvcCA0IDUiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJdGVzdF9pMThuZ3JlcCAiYmFkY21kICQoZ2l0IHJldi1saXN0IC0tb25lbGluZSAtMSBtYXN0ZXJ+MSkiIFwKKwkJCQlhY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIFwKKwkJCQlhY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgZHJvcCA0IDUiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEMgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKQEAgLTEzOTgsMTkgKzE1MDEsMjQgQEAKIAkpID4iJDEubmV3IgogCW12ICIkMS5uZXciICIkMSIKIAlFT0YKLQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9hZGQtaW5kZW50LnNoIiAmJgotCWdpdCByZWJhc2UgLWkgSEVBRF5eXiAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWRkLWluZGVudC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXl5eCisJKSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBjaGVjayBvZiBiYWQgU0hBLTEnICcKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGJhZC1zaGEgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIGVkaXQgZmFrZXNoYSAzIDQgNSAjIiBcCi0JCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCi0JdGVzdF9pMThuZ3JlcCAiZWRpdCBYWFhYWFhYIEZhbHNlIGNvbW1pdCIgYWN0dWFsICYmCi0JdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIGFjdHVhbCAmJgotCUZBS0VfTElORVM9IjEgMiA0IDUgNiIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgZWRpdCBmYWtlc2hhIDMgNCA1ICMiIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJCQl0ZXN0X2kxOG5ncmVwICJlZGl0IFhYWFhYWFggRmFsc2UgY29tbWl0IiBhY3R1YWwgJiYKKwkJCXRlc3RfaTE4bmdyZXAgIllvdSBjYW4gZml4IHRoaXMgd2l0aCAuZ2l0IHJlYmFzZSAtLWVkaXQtdG9kby4uIiBcCisJCQkJCWFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIDIgNCA1IDYiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKICcKQEAgLTE0MjksMzkgKzE1MzcsNzEgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZ3BnLXNpZ249PGtleS1pZD4nICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgSEVBRF4gXAotCQk+b3V0IDI+ZXJyICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgXAorCQkJSEVBRF4gPm91dCAyPmVycgorCSkgJiYKIAl0ZXN0X2kxOG5ncmVwICIkU1EtU1wiUyBJIEduZXJcIiRTUSIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWdwZy1zaWduPTxrZXktaWQ+IG92ZXJyaWRlcyBjb21taXQuZ3BnU2lnbicgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAl0ZXN0X2NvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgSEVBRF4gXAotCQk+b3V0IDI+ZXJyICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgXAorCQkJSEVBRF4gPm91dCAyPmVycgorCSkgJiYKIAl0ZXN0X2kxOG5ncmVwICIkU1EtU1wiUyBJIEduZXJcIiRTUSIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIGF1dGhvciBoZWFkZXIgYWZ0ZXIgLS1yb290IHN3YXAnICcKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGF1dGhvci1oZWFkZXIgbm8tY29uZmxpY3QtYnJhbmNoICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSJBdSAke1NRfXRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iIC0tbm8tZWRpdCAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgXmF1dGhvciA+ZXhwZWN0ZWQgJiYKLQlGQUtFX0xJTkVTPSI1IDEiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iNSAxIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBeYXV0aG9yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgYXV0aG9yIGhlYWRlciB3aGVuIGF1dGhvciBjb250YWlucyBzaW5nbGUgcXVvdGUnICcKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGF1dGhvci1oZWFkZXIgbm8tY29uZmxpY3QtYnJhbmNoICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSJBdSAke1NRfXRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iIC0tbm8tZWRpdCAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgXmF1dGhvciA+ZXhwZWN0ZWQgJiYKLQlGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgXmF1dGhvciA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY29tbWl0IGhvb2sgaXMgY2FsbGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3Bvc3QtY29tbWl0IiAmJgorCT5hY3R1YWwgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1jb21taXQgPDwtXEVPUyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+PmFjdHVhbAorCUVPUworCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgNCAxIHJld29yZCAyIGZpeHVwIDMiIGdpdCByZWJhc2UgLWkgQSBFICYmCisJCWVjaG8geD5maWxlMyAmJgorCQlnaXQgYWRkIGZpbGUzICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ZWRpdGVkIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQURAezV9IEhFQURAezR9IEhFQURAezN9IEhFQURAezJ9IEhFQURAezF9IEhFQUQgXAorCQk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCB0ZXN0IGluIHRoaXMgZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnJEVESVRPUiBhbmQgZnJpZW5kcyBhcmUgdW5jaGFuZ2VkJyAnCisJdGVzdF9lZGl0b3JfdW5jaGFuZ2VkCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoIGIvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoCmluZGV4IDg3MzljYjYuLmFhZWFjNmUgMTAwNzU1Ci0tLSBhL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaAorKysgYi90L3QzNDI5LXJlYmFzZS1lZGl0LXRvZG8uc2gKQEAgLTE3LDcgKzE3LDcgQEAKIAl0ZXN0IC1lIEYKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdsb29zZSBvYmplY3QgY2FjaGUgdnMgcmUtcmVhZGluZyB0b2RvIGxpc3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdCBjYWNoZSB2cyByZS1yZWFkaW5nIHRvZG8gbGlzdCcgJwogCUdJVF9SRUJBU0VfVE9ETz0uZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKIAlleHBvcnQgR0lUX1JFQkFTRV9UT0RPICYmCiAJd3JpdGVfc2NyaXB0IGFwcGVuZC10b2RvLnNoIDw8LVxFT1MgJiYKZGlmZiAtLWdpdCBhL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaCBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaAppbmRleCBhYmJkYzI2Li5lNzJjYTM0IDEwMDc1NQotLS0gYS90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2gKKysrIGIvdC90MzQzMC1yZWJhc2UtbWVyZ2VzLnNoCkBAIC00MDgsNyArNDA4LDcgQEAKIAl8IHwgKiB0aHJlZQogCXwgKiB8IHR3bwogCXwgfC8KLQkqIHwgb25lCisJKiAvIG9uZQogCXwvCiAJbyBiZWZvcmUtb2N0b3B1cwogCUVPRgpAQCAtNDY4LDQgKzQ2OCwzMSBAQAogCXRlc3RfY21wIGV4cGVjdCBHLnQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UtbWVyZ2VzIHdpdGggY29tbWl0IHRoYXQgY2FuIGdlbmVyYXRlIGJhZCBjaGFyYWN0ZXJzIGZvciBmaWxlbmFtZScgJworCWdpdCBjaGVja291dCAtYiBjb2xvbi1pbi1sYWJlbCBFICYmCisJZ2l0IG1lcmdlIC1tICJjb2xvbjogdGhpcyBzaG91bGQgd29yayIgRyAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIC0tZm9yY2UtcmViYXNlIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UtbWVyZ2VzIHdpdGggbWVzc2FnZSBtYXRjaGVkIHdpdGggb250byBsYWJlbCcgJworCWdpdCBjaGVja291dCAtYiBvbnRvLWxhYmVsIEUgJiYKKwlnaXQgbWVyZ2UgLW0gb250byBHICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMgLS1mb3JjZS1yZWJhc2UgRSAmJgorCXRlc3RfY21wX2dyYXBoIDw8LVxFT0YKKwkqICAgb250bworCXxcCisJfCAqIEcKKwl8ICogRgorCSogfCAgIEUKKwl8XCBcCisJfCAqIHwgQgorCSogfCB8IEQKKwl8IHwvCisJfC98CisJKiB8IEMKKwl8LworCSogQQorCUVPRgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzQtcmViYXNlLWkxOG4uc2ggYi90L3QzNDM0LXJlYmFzZS1pMThuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiNWIxMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0LXJlYmFzZS1pMThuLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgRG9hbiBUcmFuIENvbmcgRGFuaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWJhc2Ugd2l0aCBjaGFuZ2luZyBlbmNvZGluZworCitJbml0aWFsIHNldHVwOgorCisxIC0gMiAgICAgICAgICAgICAgbWFzdGVyCisgXAorICAzIC0gNCAgICAgICAgICAgIGZpcnN0CisgICBcCisgICAgNSAtIDYgICAgICAgICAgc2Vjb25kCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21wYXJlX21zZyAoKSB7CisJaWNvbnYgLWYgIiQyIiAtdCAiJDMiICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvJDEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAiMSwvXiQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBicmFuY2ggZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgc3dpdGNoIGZpcnN0ICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgc3dpdGNoIHNlY29uZCAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwl0ZXN0X2NvbW1pdCBzaXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcmViYXNlLW1lcmdlcyB1cGRhdGUgZW5jb2RpbmcgZXVjSlAgdG8gVVRGLTgnICcKKwlnaXQgc3dpdGNoIC1jIG1lcmdlLWV1Y0pQLVVURi04IGZpcnN0ICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IG1lcmdlIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvZXVjSlAudHh0IiBzZWNvbmQgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyBtYXN0ZXIgJiYKKwljb21wYXJlX21zZyBldWNKUC50eHQgZXVjSlAgVVRGLTgKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmViYXNlIC0tcmViYXNlLW1lcmdlcyB1cGRhdGUgZW5jb2RpbmcgZXVjSlAgdG8gSVNPLTIwMjItSlAnICcKKwlnaXQgc3dpdGNoIC1jIG1lcmdlLWV1Y0pQLUlTTy0yMDIyLUpQIGZpcnN0ICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IG1lcmdlIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvZXVjSlAudHh0IiBzZWNvbmQgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTIwMjItSlAgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyBtYXN0ZXIgJiYKKwljb21wYXJlX21zZyBldWNKUC50eHQgZXVjSlAgSVNPLTIwMjItSlAKKycKKwordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSAoKSB7CisJb2xkPSQxCisJbmV3PSQyCisJbXNnZmlsZT0kMworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtLWNvbnRpbnVlIHVwZGF0ZSBmcm9tICRvbGQgdG8gJG5ldyIgJworCQkoZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDogYWJvcnQgY3VycmVudCBnaXQtcmViYXNlIGZhaWx1cmUpICYmCisJCWdpdCBzd2l0Y2ggLWMgY29uZmxpY3QtJG9sZC0kbmV3IG9uZSAmJgorCQllY2hvIGZvci1jb25mbGljdCA+dHdvLnQgJiYKKwkJZ2l0IGFkZCB0d28udCAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG9sZCAmJgorCQlnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvJG1zZ2ZpbGUiICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkbmV3ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gbWFzdGVyICYmCisJCXRlc3QgLWYgLmdpdC9yZWJhc2UtbWVyZ2UvbWVzc2FnZSAmJgorCQlnaXQgc3RyaXBzcGFjZSA8LmdpdC9yZWJhc2UtbWVyZ2UvbWVzc2FnZSA+dHdvLnQgJiYKKwkJZ2l0IGFkZCB0d28udCAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJY29tcGFyZV9tc2cgJG1zZ2ZpbGUgJG9sZCAkbmV3ICYmCisJCTogZ2l0LWNvbW1pdCBhc3N1bWUgaW52YWxpZCB1dGYtOCBpcyBsYXRpbjEgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHR3by50CisJJworfQorCit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlIElTTy04ODU5LTEgVVRGLTggSVNPODg1OS0xLnR4dAordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSBldWNKUCBVVEYtOCBldWNKUC50eHQKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgZXVjSlAgSVNPLTIwMjItSlAgZXVjSlAudHh0CisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzNC9JU084ODU5LTEudHh0IGIvdC90MzQzNC9JU084ODU5LTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmVmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0L0lTTzg4NTktMS50eHQKQEAgLTAsMCArMSwzIEBACivEy9HP1gorCivBYudk6GZnCmRpZmYgLS1naXQgYS90L3QzNDM0L2V1Y0pQLnR4dCBiL3QvdDM0MzQvZXVjSlAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0L2V1Y0pQLnR4dApAQCAtMCwwICsxLDQgQEAKK6TPpOyk0qTbpNUKKworpLekxqSkpOukzqSsoaKkpKTrpM6kx6GjCivfwMnNpNuk7KTXpOqk3aTspN6k06SwpOqk7aTYoaMKZGlmZiAtLWdpdCBhL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoIGIvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2gKaW5kZXggZDUwZTE2NS4uZDRmOTM4NiAxMDA3NTUKLS0tIGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2gKKysrIGIvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2gKQEAgLTY0Nyw0ICs2NDcsMjkgQEAKIAl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBhIGIgYSBhIGIgYSBiIGEgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhCiAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgaGVscCBmcm9tIGFkZC0taGVscGVyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCisJPEJPTEQ+KioqIENvbW1hbmRzICoqKjxSRVNFVD4KKwkgIDE6IDxCT0xEO0JMVUU+czxSRVNFVD50YXR1cwkgIDI6IDxCT0xEO0JMVUU+dTxSRVNFVD5wZGF0ZQkgIDM6IDxCT0xEO0JMVUU+cjxSRVNFVD5ldmVydAkgIDQ6IDxCT0xEO0JMVUU+YTxSRVNFVD5kZCB1bnRyYWNrZWQKKwkgIDU6IDxCT0xEO0JMVUU+cDxSRVNFVD5hdGNoCSAgNjogPEJPTEQ7QkxVRT5kPFJFU0VUPmlmZgkgIDc6IDxCT0xEO0JMVUU+cTxSRVNFVD51aXQJICA4OiA8Qk9MRDtCTFVFPmg8UkVTRVQ+ZWxwCisJPEJPTEQ7QkxVRT5XaGF0IG5vdzxSRVNFVD4+IDxCT0xEO1JFRD5zdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXM8UkVTRVQ+CisJPEJPTEQ7UkVEPnVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXM8UkVTRVQ+CisJPEJPTEQ7UkVEPnJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbjxSRVNFVD4KKwk8Qk9MRDtSRUQ+cGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseTxSRVNFVD4KKwk8Qk9MRDtSRUQ+ZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4PFJFU0VUPgorCTxCT0xEO1JFRD5hZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzPFJFU0VUPgorCTxCT0xEPioqKiBDb21tYW5kcyAqKio8UkVTRVQ+CisJICAxOiA8Qk9MRDtCTFVFPnM8UkVTRVQ+dGF0dXMJICAyOiA8Qk9MRDtCTFVFPnU8UkVTRVQ+cGRhdGUJICAzOiA8Qk9MRDtCTFVFPnI8UkVTRVQ+ZXZlcnQJICA0OiA8Qk9MRDtCTFVFPmE8UkVTRVQ+ZGQgdW50cmFja2VkCisJICA1OiA8Qk9MRDtCTFVFPnA8UkVTRVQ+YXRjaAkgIDY6IDxCT0xEO0JMVUU+ZDxSRVNFVD5pZmYJICA3OiA8Qk9MRDtCTFVFPnE8UkVTRVQ+dWl0CSAgODogPEJPTEQ7QkxVRT5oPFJFU0VUPmVscAorCTxCT0xEO0JMVUU+V2hhdCBub3c8UkVTRVQ+PiRTUAorCUJ5ZS4KKwlFT0YKKwl0ZXN0X3dyaXRlX2xpbmVzIGggfCBHSVRfUEFHRVJfSU5fVVNFPXRydWUgVEVSTT12dDEwMCBnaXQgYWRkIC1pID5hY3R1YWwuY29sb3JlZCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwuY29sb3JlZCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCBiOTJmZjk1Li5kMjc3YTlmIDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTIwNCw0ICsyMDQsNDEgQEAKIAogdGVzdF9jb21taXRfYXV0b3NxdWFzaF9mbGFncyBJU08tMjAyMi1KUCBzcXVhc2gKIAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyAoKSB7CisJZmxhZz0kMQorCW9sZD0kMgorCW5ldz0kMworCW1zZz0kNAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCAtLSRmbGFnIGludG8gJG9sZCBmcm9tICRuZXciICcKKwkJZ2l0IGNoZWNrb3V0IC1iICRmbGFnLSRvbGQtJG5ldyBDMCAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG9sZCAmJgorCQllY2hvICRvbGQgPj5GICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJG1zZyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyBpbnRlcm1lZGlhdGUgc3R1ZmYgPj5HICYmCisJCWdpdCBhZGQgRyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJpbnRlcm1lZGlhdGUgY29tbWl0IiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRuZXcgJiYKKwkJZWNobyAkbmV3LSRmbGFnID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC0tJGZsYWcgSEVBRF4gJiYKKwkJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCQlnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJCWljb252IC1mICRvbGQgLXQgVVRGLTggIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJG1zZyA+ZXhwZWN0ICYmCisJCWlmIHRlc3QgJGZsYWcgPSBzcXVhc2g7IHRoZW4KKwkJCXN1YmplY3Q9IiQoaGVhZCAtMSBleHBlY3QpIiAmJgorCQkJcHJpbnRmICJcbnNxdWFzaCEgJXNcbiIgIiRzdWJqZWN0IiA+PmV4cGVjdAorCQlmaSAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5yYXcgJiYKKwkJKHNlZCAiMSwvXiQvZCIgcmF3IHwgaWNvbnYgLWYgJG5ldyAtdCB1dGYtOCkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworfQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIGZpeHVwIFVURi04IElTTy04ODU5LTEgMS1VVEYtOC50eHQKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2Rpbmcgc3F1YXNoIElTTy04ODU5LTEgVVRGLTggSVNPODg1OS0xLnR4dAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBzcXVhc2ggZXVjSlAgSVNPLTIwMjItSlAgZXVjSlAudHh0Cit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIGZpeHVwIElTTy0yMDIyLUpQIFVURi04IElTTy0yMDIyLUpQLnR4dAorCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDMtc3Rhc2guc2ggYi90L3QzOTAzLXN0YXNoLnNoCmluZGV4IDU4MGJmYmQuLmVhNTZlODUgMTAwNzU1Ci0tLSBhL3QvdDM5MDMtc3Rhc2guc2gKKysrIGIvdC90MzkwMy1zdGFzaC5zaApAQCAtMjQ0LDggKzI0NCwxMSBAQAogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSBpcyBxdWlldCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIHdvcmtzIGFuZCBpcyBxdWlldCcgJwogCWdpdCBzdGFzaCBwb3AgLXEgPm91dHB1dC5vdXQgMj4mMSAmJgorCWVjaG8gYmFyID5leHBlY3QgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CiAnCiAKQEAgLTI1NCw2ICsyNTcsOCBAQAogCWdpdCBhZGQgZmlsZSAmJgogCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgJiYKIAlnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXggPm91dHB1dC5vdXQgMj4mMSAmJgorCWdpdCBkaWZmLWZpbGVzIGZpbGUyID5maWxlMi5kaWZmICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGZpbGUyLmRpZmYgJiYKIAl0ZXN0IGZvbyA9ICIkKGdpdCBzaG93IDpmaWxlKSIgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAogJwpAQCAtMTI2OSw0ICsxMjc0LDE1IEBACiAJZ2l0IHN0YXNoIGFwcGx5CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGhhbmRsZXMgc2tpcC13b3JrdHJlZSBlbnRyaWVzIG5pY2VseScgJworCXRlc3RfY29tbWl0IEEgJiYKKwllY2hvIGNoYW5nZWQgPkEudCAmJgorCWdpdCBhZGQgQS50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgQS50ICYmCisJcm0gQS50ICYmCisJZ2l0IHN0YXNoICYmCisKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3Rhc2g6QS50CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwNS1zdGFzaC1pbmNsdWRlLXVudHJhY2tlZC5zaCBiL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2gKaW5kZXggMjljYTc2Zi4uZjA3NWM3ZiAxMDA3NTUKLS0tIGEvdC90MzkwNS1zdGFzaC1pbmNsdWRlLXVudHJhY2tlZC5zaAorKysgYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCkBAIC0yNzcsOCArMjc3LDggQEAKIAl0ZXN0X3BhdGhfaXNfZmlsZSBpZ25vcmVkLmQvYmFyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC11IC0tIDxub24tZXhpc3RhbnQ+IHNob3dzIG5vIGNoYW5nZXMgd2hlbiB0aGVyZSBhcmUgbm9uZScgJwotCWdpdCBzdGFzaCBwdXNoIC11IC0tIG5vbi1leGlzdGFudCA+YWN0dWFsICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtdSAtLSA8bm9uLWV4aXN0ZW50PiBzaG93cyBubyBjaGFuZ2VzIHdoZW4gdGhlcmUgYXJlIG5vbmUnICcKKwlnaXQgc3Rhc2ggcHVzaCAtdSAtLSBub24tZXhpc3RlbnQgPmFjdHVhbCAmJgogCWVjaG8gIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIgPmV4cGVjdCAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2ggYi90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKaW5kZXggMjgxZjhmYS4uZTVjYTM1OSAxMDA3NTUKLS0tIGEvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoCisrKyBiL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaApAQCAtMTcsMTEgKzE3LDE1IEBACiAgICAgJ2VjaG8gZnJvdHogPmZpbGUwICYmCiAgICAgIG1rZGlyIHBhdGgxICYmCiAgICAgIGVjaG8gcmV6cm92ID5wYXRoMS9maWxlMSAmJgorICAgICBiZWZvcmUwPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorICAgICBiZWZvcmUxPSQoZ2l0IGhhc2gtb2JqZWN0IHBhdGgxL2ZpbGUxKSAmJgogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUwIHBhdGgxL2ZpbGUxICYmCiAgICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKICAgICAgZWNobyAiJHRyZWUiICYmCiAgICAgIGVjaG8gbml0Zm9sID5maWxlMCAmJgogICAgICBlY2hvIHlvbWluID5wYXRoMS9maWxlMSAmJgorICAgICBhZnRlcjA9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisgICAgIGFmdGVyMT0kKGdpdCBoYXNoLW9iamVjdCBwYXRoMS9maWxlMSkgJiYKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCBmaWxlMCBwYXRoMS9maWxlMScKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTMxLDMyICszNSwzMiBAQAogICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBwYXRoID5jdXJyZW50ICYmCiAgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKIAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLToxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkYmVmb3JlMSAkYWZ0ZXIxIE0JcGF0aDEvZmlsZTEKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xpbWl0IHRvIHBhdGgxIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCiAgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGgxID5jdXJyZW50ICYmCiAgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKIAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLToxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkYmVmb3JlMSAkYWZ0ZXIxIE0JcGF0aDEvZmlsZTEKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xpbWl0IHRvIHBhdGgxLyBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAogICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBwYXRoMS8gPmN1cnJlbnQgJiYKICAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotOjEwMDY0NCAxMDA2NDQgNzY2NDk4ZDkzYTRiMDYwNTdhOGU0OWQyM2Y0MDY4ZjExNzBmZjM4ZiAwYTQxZTExNWFiNjFiZTAzMjhhMTliMjlmMThjZGNiNDkzMzhkNTE2IE0JcGF0aDEvZmlsZTEKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRiZWZvcmUxICRhZnRlcjEgTQlwYXRoMS9maWxlMQogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnIipmaWxlMSIgc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKICAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gIipmaWxlMSIgPmN1cnJlbnQgJiYKICAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotOjEwMDY0NCAxMDA2NDQgOGU0MDIwYmI1YThkOGM4NzNiMjVkZTE1OTMzZTc1Y2MwZmMyNzVkZiBkY2E2YjkyMzAzYmVmYzkzMDg2YWEwMjVkOTBhNWZhY2Q3ZWIyODEyIE0JZmlsZTAKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRiZWZvcmUwICRhZnRlcjAgTQlmaWxlMAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbGltaXQgdG8gZmlsZTAgc2hvdWxkIHNob3cgZmlsZTAnIFwKZGlmZiAtLWdpdCBhL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoIGIvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2gKaW5kZXggNWFlMTliOS4uNzE3MDM0YiAxMDA3NTUKLS0tIGEvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2gKKysrIGIvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2gKQEAgLTksMTEgKzksMjQgQEAKIC4gLi90ZXN0LWxpYi5zaAogLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAogCisjIFByaW50IHRoZSBzaG9ydCBPSUQgb2YgYSBzeW1saW5rIHdpdGggdGhlIGdpdmVuIG5hbWUuCitzeW1saW5rX29pZCAoKSB7CisJbG9jYWwgb2lkPSQocHJpbnRmICIlcyIgIiQxIiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9pZCIKK30KKworIyBQcmludCB0aGUgc2hvcnQgT0lEIG9mIHRoZSBnaXZlbiBmaWxlLgorc2hvcnRfb2lkICgpIHsKKwlsb2NhbCBvaWQ9JChnaXQgaGFzaC1vYmplY3QgIiQxIikgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvaWQiCit9CisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgbmV3IHN5bWxpbmsgYW5kIGZpbGUnICcKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlzeW1saW5rPSQoc3ltbGlua19vaWQgeHl6enkpICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egogCW5ldyBmaWxlIG1vZGUgMTIwMDAwCi0JaW5kZXggMDAwMDAwMC4uN2M0NjVhZgorCWluZGV4IDAwMDAwMDAuLiRzeW1saW5rCiAJLS0tIC9kZXYvbnVsbAogCSsrKyBiL2Zyb3R6CiAJQEAgLTAsMCArMSBAQApAQCAtMjEsNyArMzQsNyBAQAogCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQogCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKIAluZXcgZmlsZSBtb2RlIDEwMDY0NAotCWluZGV4IDAwMDAwMDAuLjdjNDY1YWYKKwlpbmRleCAwMDAwMDAwLi4kc3ltbGluawogCS0tLSAvZGV2L251bGwKIAkrKysgYi9uaXRmb2wKIAlAQCAtMCwwICsxIEBACkBAIC00NiwxMCArNTksMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiByZW1vdmVkIHN5bWxpbmsgYW5kIGZpbGUnICcKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CiAJZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCi0JaW5kZXggN2M0NjVhZi4uMDAwMDAwMAorCWluZGV4ICRzeW1saW5rLi4wMDAwMDAwCiAJLS0tIGEvZnJvdHoKIAkrKysgL2Rldi9udWxsCiAJQEAgLTEgKzAsMCBAQApAQCAtNTcsNyArNzAsNyBAQAogCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQogCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKIAlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLQlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJaW5kZXggJHN5bWxpbmsuLjAwMDAwMDAKIAktLS0gYS9uaXRmb2wKIAkrKysgL2Rldi9udWxsCiAJQEAgLTEgKzAsMCBAQApAQCAtOTAsOSArMTAzLDEwIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgZGlmZmVyZW50IHN5bWxpbmsgYW5kIGZpbGUnICcKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwluZXc9JChzeW1saW5rX29pZCB5eHl5eikgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6Ci0JaW5kZXggN2M0NjVhZi4uZGYxZGI1NCAxMjAwMDAKKwlpbmRleCAkc3ltbGluay4uJG5ldyAxMjAwMDAKIAktLS0gYS9mcm90egogCSsrKyBiL2Zyb3R6CiAJQEAgLTEgKzEgQEAKQEAgLTEwMSw3ICsxMTUsNyBAQAogCSt5eHl5egogCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQogCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKLQlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEwMDY0NAorCWluZGV4ICRzeW1saW5rLi4kbmV3IDEwMDY0NAogCS0tLSBhL25pdGZvbAogCSsrKyBiL25pdGZvbAogCUBAIC0xICsxIEBACkBAIC0xMzcsMTQgKzE1MSwxNiBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rcyBkbyBub3QgcmVzcGVjdCB1c2VyZGlmZiBjb25maWcgYnkgcGF0aCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmaWxlPSQoc2hvcnRfb2lkIGZpbGUuYmluKSAmJgorCWxpbms9JChzeW1saW5rX29pZCBmaWxlLmJpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAlkaWZmIC0tZ2l0IGEvZmlsZS5iaW4gYi9maWxlLmJpbgogCW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0JaW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorCWluZGV4IDAwMDAwMDAuLiRmaWxlCiAJQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9maWxlLmJpbiBkaWZmZXIKIAlkaWZmIC0tZ2l0IGEvbGluay5iaW4gYi9saW5rLmJpbgogCW5ldyBmaWxlIG1vZGUgMTIwMDAwCi0JaW5kZXggMDAwMDAwMC4uZGNlNDFlYworCWluZGV4IDAwMDAwMDAuLiRsaW5rCiAJLS0tIC9kZXYvbnVsbAogCSsrKyBiL2xpbmsuYmluCiAJQEAgLTAsMCArMSBAQApkaWZmIC0tZ2l0IGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2ggYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAppbmRleCBiODk2OTk5Li42OTI2N2IxIDEwMDc1NQotLS0gYS90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAorKysgYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApAQCAtMTUxNyw2ICsxNTE3LDE3OCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggaW52YWxpZCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYW5kIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZ2FyYmFnZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IGRlZmF1bHQnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBkZWZhdWx0ICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZGVmYXVsdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gbm9uZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gbm9uZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG5vbmUgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gbWVzc2FnZScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG1lc3NhZ2UgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG1lc3NhZ2UnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBtZXNzYWdlIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBzdWJqZWN0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gc3ViamVjdCAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBzdWJqZWN0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBhdXRvIChzaG9ydCBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gYXV0byAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIChzaG9ydCBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBhdXRvIChsb25nIHN1YmplY3QgbGluZSknICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJ0aGlzIGlzIGEgcmVhbGx5IGxvbmcgZmlyc3QgbGluZSBhbmQgaXQgaXMgb3ZlciAxMDAgY2hhcmFjdGVycyBsb25nIHdoaWNoIGlzIHRoZSB0aHJlc2hvbGQgZm9yIGxvbmcgc3ViamVjdHMKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gYXV0byAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJedGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzJCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGF1dG8gKGxvbmcgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gInRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cworCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJedGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzJCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggY29tbWFuZC1saW5lIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBvdmVycmlkZXMgY29uZmlnJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gbm9uZSAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBzdWJqZWN0IG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB1c2luZyBicmFuY2ggZGVzY3JpcHRpb24gKDEpJyAnCiAJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gaGVsbG8gJiYKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKaW5kZXggNmIwODdkZi4uZWFkYWY1NyAxMDA3NTUKLS0tIGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTE2LDYgKzE2LDcgQEAKIAl9IHdoaWxlICgwKTsKIAlFT0YKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgeCkpICYmCiAKIAljYXQgPDwtXEVPRiA+eCAmJgogCWRvCkBAIC0yNCwxMCArMjUsMTEgQEAKIAl9CiAJd2hpbGUgKDApOwogCUVPRgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHgpKSAmJgogCi0JY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4IGFkZjM5MzcuLjZlZGMxNzIgMTAwNjQ0CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsMyArMSw1IEBACkBAIC02MSw2ICs2Myw3IEBACiAJRU9GCiAKIAlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgeCkpICYmCiAKIAl0ciAiXyIgIiAiIDw8LVxFT0YgPnggJiYKIAlfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCkBAIC03MCwxMCArNzMsMTEgQEAKIAl1bmNoYW5nZWQgbGluZQogCUNSIGF0IGVuZAogCUVPRgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHgpKSAmJgogCi0JdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCXRyICJRXyIgIlwwMTUgIiA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4IGQ5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsNiArMSw2IEBACkBAIC0xMDgsOSArMTEyLDkgQEAKIAlnaXQgZGlmZiAtdyAtLWlnbm9yZS1jci1hdC1lb2wgPm91dCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKIAotCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwl0ciAiUV8iICJcMDE1ICIgPDwtRU9GID5leHBlY3QgJiYKIAlkaWZmIC0tZ2l0IGEveCBiL3gKLQlpbmRleCBkOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKIAktLS0gYS94CiAJKysrIGIveAogCUBAIC0xLDYgKzEsNiBAQApAQCAtMTMyLDkgKzEzNiw5IEBACiAJZ2l0IGRpZmYgLWIgLS1pZ25vcmUtY3ItYXQtZW9sID5vdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCiAKLQl0ciAiUV8iICJcMDE1ICIgPDwtXEVPRiA+ZXhwZWN0ICYmCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCiAJZGlmZiAtLWdpdCBhL3ggYi94Ci0JaW5kZXggZDk5YWYyMy4uMjJkOWY3MyAxMDA2NDQKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CiAJLS0tIGEveAogCSsrKyBiL3gKIAlAQCAtMSw2ICsxLDYgQEAKQEAgLTE1NCw5ICsxNTgsOSBAQAogCWdpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCAtLWlnbm9yZS1jci1hdC1lb2wgPm91dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKIAotCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwl0ciAiUV8iICJcMDE1ICIgPDwtRU9GID5leHBlY3QgJiYKIAlkaWZmIC0tZ2l0IGEveCBiL3gKLQlpbmRleF9kOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCWluZGV4XyRiZWZvcmUuLiRhZnRlciAxMDA2NDQKIAktLS0gYS94CiAJKysrIGIveAogCUBAIC0xLDYgKzEsNiBAQApAQCAtNzg2LDIzICs3OTAsMjUgQEAKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLWNhdCA8PEVPRiA+ZXhwZWN0Ci1kaWZmIC0tZ2l0IGEveCBiL3oKLXNpbWlsYXJpdHkgaW5kZXggTlVNJQotcmVuYW1lIGZyb20geAotcmVuYW1lIHRvIHoKLWluZGV4IDM4MGMzMmEuLmE5N2I3ODUgMTAwNjQ0Ci1FT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2Utb25seSBjaGFuZ2VzIHJlcG9ydGVkIGFjcm9zcyByZW5hbWVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvICIkaSRpJGkkaSRpJGkiOyBkb25lID54ICYmCiAJZ2l0IGFkZCB4ICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHgpKSAmJgogCWdpdCBjb21taXQgLW0gImJhc2UiICYmCiAJc2VkIC1lICI1cy9eLyAvIiB4ID56ICYmCiAJZ2l0IHJtIHggJiYKIAlnaXQgYWRkIHogJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCB6KSkgJiYKIAlnaXQgZGlmZiAtdyAtTSAtLWNhY2hlZCB8CiAJc2VkIC1lICIvXnNpbWlsYXJpdHkgaW5kZXggL3MvWzAtOV1bMC05XSovTlVNLyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS94IGIvegorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIHgKKwlyZW5hbWUgdG8gegorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKQEAgLTg1OCwxMyArODY0LDE1IEBACiAJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgYmxhbmstYXQtZW9sICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWVjaG8gInRlc3QiID54ICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHgpKSAmJgogCWdpdCBjb21taXQgLW0gImluaXRpYWwiIHggJiYKIAllY2hvICJ7TlROfSIgfCB0ciAiTlQiICJcblx0IiA+PnggJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCB4KSkgJiYKIAlnaXQgZGlmZiAtLWNvbG9yIHwgdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKIAotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IDlkYWVhZmIuLjI4NzRiOTEgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xICsxLDQgQEA8UkVTRVQ+CkBAIC04ODMsMTkgKzg5MSwyMSBAQAogCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIxLiBibGFuay1hdC1lb2wgIgogCX0gPnggJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgeCkpICYmCiAJZ2l0IGNvbW1pdCAtYSAtLWFsbG93LWVtcHR5IC1tIHByZWltYWdlICYmCiAJewogCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIxLiBzdGlsbC1ibGFuay1hdC1lb2wgIiAmJgogCQllY2hvICIyLiBhbmQgYSBuZXcgbGluZSAiCiAJfSA+eCAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHgpKSAmJgogCiAJZ2l0IGRpZmYgLS1jb2xvciB8CiAJdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKIAotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTkxNSwxNiArOTI1LDE4IEBACiAJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjEuIGJsYW5rLWF0LWVvbCAiCiAJfSA+eCAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCB4KSkgJiYKIAlnaXQgY29tbWl0IC1hIC0tYWxsb3ctZW1wdHkgLW0gcHJlaW1hZ2UgJiYKIAl7CiAJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjEuIHN0aWxsLWJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjIuIGFuZCBhIG5ldyBsaW5lICIKIAl9ID54ICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgeCkpICYmCiAKLQljYXQgPmV4cGVjdC5kZWZhdWx0LW9sZCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QuZGVmYXVsdC1vbGQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTkzNCw5ICs5NDYsOSBAQAogCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgogCUVPRgogCi0JY2F0ID5leHBlY3QuYWxsIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdC5hbGwgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTk0Niw5ICs5NTgsOSBAQAogCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgogCUVPRgogCi0JY2F0ID5leHBlY3Qubm9uZSA8PC1cRU9GCisJY2F0ID5leHBlY3Qubm9uZSA8PC1FT0YKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS94PFJFU0VUPgogCTxCT0xEPisrKyBiL3g8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgpAQCAtMTAyMiwxNCArMTAzNCwxNSBAQAogCUVPRgogCWdpdCBhZGQgdGVzdC5jICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkIG1haW4gZnVuY3Rpb24iICYmCisJZmlsZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRlc3QuYykgJiYKIAlnaXQgbXYgdGVzdC5jIG1haW4uYyAmJgogCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWQgIm5vcm1hbCByZWQiICYmCiAJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZCAibm9ybWFsIGdyZWVuIiAmJgogCWdpdCBkaWZmIEhFQUQgLS1jb2xvci1tb3ZlZD16ZWJyYSAtLWNvbG9yIC0tbm8tcmVuYW1lcyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCTxCT0xEPmRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmM8UkVTRVQ+CiAJPEJPTEQ+bmV3IGZpbGUgbW9kZSAxMDA2NDQ8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMDAwMDAwMC4uYTk4NmM1NzxSRVNFVD4KKwk8Qk9MRD5pbmRleCAwMDAwMDAwLi4kZmlsZTxSRVNFVD4KIAk8Qk9MRD4tLS0gL2Rldi9udWxsPFJFU0VUPgogCTxCT0xEPisrKyBiL21haW4uYzxSRVNFVD4KIAk8Q1lBTj5AQCAtMCwwICsxLDUgQEA8UkVTRVQ+CkBAIC0xMDQwLDcgKzEwNTMsNyBAQAogCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPn08UkVTRVQ+CiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KIAk8Qk9MRD5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQ8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggYTk4NmM1Ny4uMDAwMDAwMDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkZmlsZS4uMDAwMDAwMDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CiAJPEJPTEQ+KysrIC9kZXYvbnVsbDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSw1ICswLDAgQEA8UkVTRVQ+CkBAIC0xMDk0LDYgKzExMDcsOCBAQAogCUVPRgogCWdpdCBhZGQgbWFpbi5jIHRlc3QuYyAmJgogCWdpdCBjb21taXQgLW0gImFkZCBtYWluIGFuZCB0ZXN0IGZpbGUiICYmCisJYmVmb3JlX21haW49JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDptYWluLmMpICYmCisJYmVmb3JlX3Rlc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXN0LmMpICYmCiAJY2F0IDw8LVxFT0YgPm1haW4uYyAmJgogCQkjaW5jbHVkZTxzdGRpby5oPgogCQlpbnQgc3R1ZmYoKQpAQCAtMTEyNiwxMCArMTE0MSwxMiBAQAogCQkJYmFyKCk7CiAJCX0KIAlFT0YKKwlhZnRlcl9tYWluPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IG1haW4uYykpICYmCisJYWZ0ZXJfdGVzdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCB0ZXN0LmMpKSAmJgogCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQ9emVicmEgLS1jb2xvciB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKLQljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgogCTxCT0xEPmRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmM8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMjdhNjE5Yy4uN2NmOTMzNiAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZV9tYWluLi4kYWZ0ZXJfbWFpbiAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvbWFpbi5jPFJFU0VUPgogCTxCT0xEPisrKyBiL21haW4uYzxSRVNFVD4KIAk8Q1lBTj5AQCAtNSwxMyArNSw2IEBAPFJFU0VUPiA8UkVTRVQ+cHJpbnRmKCJIZWxsbyAiKTs8UkVTRVQ+CkBAIC0xMTQ3LDcgKzExNjQsNyBAQAogCSB7PFJFU0VUPgogCSBmb28oKTs8UkVTRVQ+CiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KLQk8Qk9MRD5pbmRleCAxZGMxZDg1Li4yYmVkZWM5IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX3Rlc3QuLiRhZnRlcl90ZXN0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvdGVzdC5jPFJFU0VUPgogCTxDWUFOPkBAIC00LDYgKzQsMTMgQEA8UkVTRVQ+IDxSRVNFVD5pbnQgYmFyKCk8UkVTRVQ+CkBAIC0xMTc2LDkgKzExOTMsOSBAQAogCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWRBbHRlcm5hdGl2ZSAieWVsbG93IiAmJgogCSMgbmVlZHMgcHJldmlvdXMgdGVzdCBhcyBzZXR1cAogCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQ9cGxhaW4gLS1jb2xvciB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKLQljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgogCTxCT0xEPmRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmM8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMjdhNjE5Yy4uN2NmOTMzNiAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZV9tYWluLi4kYWZ0ZXJfbWFpbiAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvbWFpbi5jPFJFU0VUPgogCTxCT0xEPisrKyBiL21haW4uYzxSRVNFVD4KIAk8Q1lBTj5AQCAtNSwxMyArNSw2IEBAPFJFU0VUPiA8UkVTRVQ+cHJpbnRmKCJIZWxsbyAiKTs8UkVTRVQ+CkBAIC0xMTk2LDcgKzEyMTMsNyBAQAogCSB7PFJFU0VUPgogCSBmb28oKTs8UkVTRVQ+CiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KLQk8Qk9MRD5pbmRleCAxZGMxZDg1Li4yYmVkZWM5IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX3Rlc3QuLiRhZnRlcl90ZXN0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvdGVzdC5jPFJFU0VUPgogCTxDWUFOPkBAIC00LDYgKzQsMTMgQEA8UkVTRVQ+IDxSRVNFVD5pbnQgYmFyKCk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2ggYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKaW5kZXggNmY1ZWYwMC4uYzBmNDgzOSAxMDA3NTUKLS0tIGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCisrKyBiL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaApAQCAtMzIsNiArMzIsNyBAQAogCWNzaGFycAogCWNzcwogCWR0cworCWVsaXhpcgogCWZvcnRyYW4KIAlmb3VudGFpbgogCWdvbGFuZwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItZG8tbm90LXBpY2stZW5kIGIvdC90NDAxOC9lbGl4aXItZG8tbm90LXBpY2stZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTA4YmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1kby1ub3QtcGljay1lbmQKQEAgLTAsMCArMSw1IEBACitkZWZtb2R1bGUgUklHSFQgZG8KK2VuZAorIworIworIyBDaGFuZ2VNZTsgZG8gbm90IHBpY2sgdXAgJ2VuZCcgbGluZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItZXgtdW5pdC10ZXN0IGIvdC90NDAxOC9lbGl4aXItZXgtdW5pdC10ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjBhMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1leC11bml0LXRlc3QKQEAgLTAsMCArMSw2IEBACitkZWZtb2R1bGUgVGVzdCBkbworICB0ZXN0ICJSSUdIVCIgZG8KKyAgICBhc3NlcnQgdHJ1ZSA9PSB0cnVlCisgICAgYXNzZXJ0IENoYW5nZU1lCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1mdW5jdGlvbiBiL3QvdDQwMTgvZWxpeGlyLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTJmNDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1mdW5jdGlvbgpAQCAtMCwwICsxLDUgQEAKK2RlZiBmdW5jdGlvbihSSUdIVCwgYXJnKSBkbworICAjIGNvbW1lbnQKKyAgIyBjb21tZW50CisgIENoYW5nZU1lCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW1hY3JvIGIvdC90NDAxOC9lbGl4aXItbWFjcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MjVlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW1hY3JvCkBAIC0wLDAgKzEsNSBAQAorZGVmbWFjcm8gZm9vKFJJR0hUKSBkbworICAjIENvZGUKKyAgIyBDb2RlCisgIENoYW5nZU1lCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW1vZHVsZSBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWE0ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItbW9kdWxlCkBAIC0wLDAgKzEsOSBAQAorZGVmbW9kdWxlIFJJR0hUIGRvCisgIEBtb2R1bGVkb2MgIiIiCisgIEZvbyBiYXIKKyAgIiIiCisKKyAgZGVmIENoYW5nZU1lKGEpIHdoZXJlIGlzX21hcChhKSBkbworICAgIGEKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW1vZHVsZS1mdW5jIGIvdC90NDAxOC9lbGl4aXItbW9kdWxlLWZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5MTBkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZS1mdW5jCkBAIC0wLDAgKzEsOCBAQAorZGVmbW9kdWxlIEZvbyBkbworICBkZWYgZnVuKFJJR0hUKSBkbworICAgICAjIENvZGUKKyAgICAgIyBDb2RlCisgICAgICMgQ29kZQorICAgICBDaGFuZ2VNZQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItbmVzdGVkLW1vZHVsZSBiL3QvdDQwMTgvZWxpeGlyLW5lc3RlZC1tb2R1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxZWJjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW5lc3RlZC1tb2R1bGUKQEAgLTAsMCArMSw5IEBACitkZWZtb2R1bGUgTXlBcHAuUklHSFQgZG8KKyAgQG1vZHVsZWRvYyAiIiIKKyAgRm9vIGJhcgorICAiIiIKKworICBkZWYgQ2hhbmdlTWUoYSkgd2hlcmUgaXNfbWFwKGEpIGRvCisgICAgYQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItcHJpdmF0ZS1mdW5jdGlvbiBiL3QvdDQwMTgvZWxpeGlyLXByaXZhdGUtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhYmUzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByaXZhdGUtZnVuY3Rpb24KQEAgLTAsMCArMSw1IEBACitkZWZwIGZ1bmN0aW9uKFJJR0hULCBhcmcpIGRvCisgICMgY29tbWVudAorICAjIGNvbW1lbnQKKyAgQ2hhbmdlTWUKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wgYi90L3Q0MDE4L2VsaXhpci1wcm90b2NvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDkxNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wKQEAgLTAsMCArMSw2IEBACitkZWZwcm90b2NvbCBSSUdIVCBkbworICBAZG9jICIiIgorICBDYWxjdWxhdGVzIHRoZSBzaXplIChhbmQgbm90IHRoZSBsZW5ndGghKSBvZiBhIGRhdGEgc3RydWN0dXJlCisgICIiIgorICBkZWYgc2l6ZShkYXRhLCBDaGFuZ2VNZSkKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wtaW1wbGVtZW50YXRpb24gYi90L3Q0MDE4L2VsaXhpci1wcm90b2NvbC1pbXBsZW1lbnRhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIzNGJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wtaW1wbGVtZW50YXRpb24KQEAgLTAsMCArMSw1IEBACitkZWZpbXBsIFJJR0hUIGRvCisgICMgRG9jcworICAjIERvY3MKKyAgZGVmIGZvbyhDaGFuZ2VNZSksIGRvOiA6b2sKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tYXN5bmMtZGVmIGIvdC90NDAxOC9weXRob24tYXN5bmMtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQwZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1hc3luYy1kZWYKQEAgLTAsMCArMSw0IEBACithc3luYyBkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWNsYXNzIGIvdC90NDAxOC9weXRob24tY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZTc0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWNsYXNzCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgUklHSFQoaW50LCBzdHIpOgorICAgICMgY29tbWVudAorICAgICMgYW5vdGhlciBjb21tZW50CisgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tZGVmIGIvdC90NDAxOC9weXRob24tZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGIzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1kZWYKQEAgLTAsMCArMSw0IEBACitkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtYXN5bmMtZGVmCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vOgorICAgIGFzeW5jIGRlZiBSSUdIVChzZWxmLCB4OiBpbnQpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICBDaGFuZ2VNZSwKKyAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI0ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MKQEAgLTAsMCArMSw1IEBACitpZiBUWVBFX0NIRUNLSU5HOgorICAgIGNsYXNzIFJJR0hUOgorICAgICAgICAjIGNvbW1lbnQKKyAgICAgICAgIyBhbm90aGVyIGNvbW1lbnQKKyAgICAgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGZiYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1kZWYKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb286CisgICAgZGVmIFJJR0hUKHNlbGYsIHg6IGludCk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAxLAorICAgICAgICAgICAgMiwKKyAgICAgICAgICAgIENoYW5nZU1lLAorICAgICAgICBdCmRpZmYgLS1naXQgYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoIGIvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAppbmRleCA5YWE4ZTJiLi5lMjlkZWFmIDEwMDc1NQotLS0gYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCisrKyBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKQEAgLTYsNiArNiw3IEBACiAuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2luaXQgJiYKIAl0ZXN0X3RpY2sgJiYKIAl0ZXN0X2NyZWF0ZV9yZXBvIHN1YiAmJgogCSgKQEAgLTM2LDcgKzM3LDggQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1yYXcgSEVBRCcgJwotCWdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PTQwIEhFQUQgPmFjdHVhbCAmJgorCWhleHN6PSQodGVzdF9vaWQgaGV4c3opICYmCisJZ2l0IGRpZmYgLS1yYXcgLS1hYmJyZXY9JGhleHN6IEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIApAQCAtMjQ1LDIzICsyNDcsMjEgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBzdWJtb2R1bGUgc2V0dXAnICcKLQotCSMgMzkgZWZzCi0JYz1mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwljPSQodGVzdF9vaWQgZmZfMSkgJiYKIAkoCiAJCWVjaG8gIjAwMDAwMCAkWkVST19PSUQgMAlzdWIiICYmCiAJCWVjaG8gIjE2MDAwMCAxJGMgMQlzdWIiICYmCiAJCWVjaG8gIjE2MDAwMCAyJGMgMglzdWIiICYmCiAJCWVjaG8gIjE2MDAwMCAzJGMgMwlzdWIiCiAJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCi0JZWNobyA+ZXhwZWN0Lm5vc3ViICdcJydkaWZmIC0tY2Mgc3ViCisJZWNobyA+ZXhwZWN0Lm5vc3ViICJkaWZmIC0tY2Mgc3ViCiBpbmRleCAyZmZmZmZmLDNmZmZmZmYuLjAwMDAwMDAKIC0tLSBhL3N1YgogKysrIGIvc3ViCiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACi0tIFN1YnByb2plY3QgY29tbWl0IDJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKLSAtU3VicHJvamVjdCBjb21taXQgM2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgotKytTdWJwcm9qZWN0IGNvbW1pdCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1wnJyAmJgorLSBTdWJwcm9qZWN0IGNvbW1pdCAyJGMKKyAtU3VicHJvamVjdCBjb21taXQgMyRjCisrK1N1YnByb2plY3QgY29tbWl0ICRaRVJPX09JRCIgJiYKIAogCWhoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCXNlZCAtZSAicy8kWkVST19PSUQvJGhoLyIgZXhwZWN0Lm5vc3ViID5leHBlY3Qud2l0aHN1YgpkaWZmIC0tZ2l0IGEvdC90NDAzNC1kaWZmLXdvcmRzLnNoIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCmluZGV4IDlhOTNjMmEuLmZiMTQ1YWEgMTAwNzU1Ci0tLSBhL3QvdDQwMzQtZGlmZi13b3Jkcy5zaAorKysgYi90L3Q0MDM0LWRpZmYtd29yZHMuc2gKQEAgLTE5LDkgKzE5LDExIEBACiAKIAlhZWZmID0gYWVmZiAqICggYWFhICkKIEVPRgotY2F0ID5leHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIDw8LVxFT0YKK3ByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUuc2ltcGxlKSkKK3Bvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdC5zaW1wbGUpKQorY2F0ID5leHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIDw8LUVPRgogCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC0zMyw5ICszNSw5IEBACiAKIAk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYTxSRVNFVD4gKQogRU9GCi1jYXQgPmV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIDw8LVxFT0YKK2NhdCA+ZXhwZWN0Lm5vbi13aGl0ZXNwYWNlLWlzLXdvcmQgPDwtRU9GCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KQEAgLTQ5LDkgKzUxLDEyIEBACiBFT0YKIAogd29yZF9kaWZmICgpIHsKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIiRAIiBwcmUgcG9zdCA+b3V0cHV0ICYmCiAJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+b3V0cHV0LmRlY3J5cHRlZCAmJgotCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQuZGVjcnlwdGVkCisJc2VkIC1lICIycy9pbmRleCBbXiBdKi9pbmRleCAkcHJlLi4kcG9zdC8iIGV4cGVjdCA+ZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZGVjcnlwdGVkCiB9CiAKIHRlc3RfbGFuZ3VhZ2VfZHJpdmVyICgpIHsKQEAgLTc3LDkgKzgyLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGggcnVucyBvZiB3aGl0ZXNwYWNlJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC05Nyw5ICsxMDIsOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1wb3JjZWxhaW4nICcKLQlzZWQgJ3MvIy4qJC8vJyA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzZWQgJ3MvIy4qJC8vJyA+ZXhwZWN0IDw8LUVPRiAmJgogCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCQlpbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKIAkJLS0tIGEvcHJlCiAJCSsrKyBiL3Bvc3QKIAkJQEAgLTEsMyArMSw3IEBACkBAIC0xMjEsOSArMTI2LDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cGxhaW4nICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0Ci0JCWluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0CisJCWluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NAogCQktLS0gYS9wcmUKIAkJKysrIGIvcG9zdAogCQlAQCAtMSwzICsxLDcgQEAKQEAgLTE0MCw5ICsxNDUsOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1wbGFpbiAtLWNvbG9yJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC0xNTgsOSArMTYzLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGhvdXQgY29udGV4dCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEgKzEgQEA8UkVTRVQ+CkBAIC0yMDcsOSArMjEyLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZC1saW5lIG92ZXJyaWRlcyBjb25maWc6IC0td29yZC1kaWZmLXJlZ2V4JyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC0yMzQsOSArMjM5LDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGNvbmZpZ3VyZWQgcmVnZXgnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KQEAgLTI1NCw5ICsyNTksMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcGFyc2luZyB3b3JkcyBmb3IgbmV3bGluZScgJwogCWVjaG8gImFhYSAoYWFhKSIgPnByZSAmJgogCWVjaG8gImFhYSAoYWFhKSBhYWEiID5wb3N0ICYmCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCBjMjk0NTNiLi5iZTIyZjM3IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgpAQCAtMjY4LDkgKzI3NSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB3aGVuIHdvcmRzIGFyZSBvbmx5IHJlbW92ZWQgYXQgdGhlIGVuZCcgJwogCWVjaG8gIig6IiA+cHJlICYmCiAJZWNobyAiKCIgPnBvc3QgJiYKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDI4OWNiOWQuLjJkMDZmMzcgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEgKzEgQEA8UkVTRVQ+CkBAIC0yODIsOSArMjkxLDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1ub25lJyAnCiAJZWNobyAiKDoiID5wcmUgJiYKIAllY2hvICIoIiA+cG9zdCAmJgotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCQlpbmRleCAyODljYjlkLi4yZDA2ZjM3IDEwMDY0NAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKIAkJLS0tIGEvcHJlCiAJCSsrKyBiL3Bvc3QKIAkJQEAgLTEgKzEgQEAKQEAgLTMxNywxNiArMzI4LDYgQEAKIHRlc3RfbGFuZ3VhZ2VfZHJpdmVyIHRleAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkLWRpZmYgd2l0aCBkaWZmLnNiZScgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKLQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCWluZGV4IGExYTUzYjUuLmJjOGZlNmQgMTAwNjQ0Ci0JLS0tIGEvcHJlCi0JKysrIGIvcG9zdAotCUBAIC0xLDMgKzEsMyBAQAotCWEKLQotCVstYi1deytjK30KLQlFT0YKIAljYXQgPnByZSA8PC1cRU9GICYmCiAJYQogCkBAIC0zMzcsMjEgKzMzOCwzNSBAQAogCiAJYwogCUVPRgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKKwlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKKwktLS0gYS9wcmUKKwkrKysgYi9wb3N0CisJQEAgLTEsMyArMSwzIEBACisJYQorCisJWy1iLV17K2MrfQorCUVPRgogCXRlc3RfY29uZmlnIGRpZmYuc3VwcHJlc3MtYmxhbmstZW1wdHkgdHJ1ZSAmJgogCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkLWRpZmYgd2l0aCBubyBuZXdsaW5lIGF0IEVPRicgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlwcmludGYgIiVzIiAiYSBhIGEgYSBhIiA+cHJlICYmCisJcHJpbnRmICIlcyIgImEgYSBhYiBhIGEiID5wb3N0ICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCWluZGV4IDdiZjMxNmUuLjNkZDAzMDMgMTAwNjQ0CisJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CiAJLS0tIGEvcHJlCiAJKysrIGIvcG9zdAogCUBAIC0xICsxIEBACiAJYSBhIFstYS1deythYit9IGEgYQogCUVPRgotCXByaW50ZiAiJXMiICJhIGEgYSBhIGEiID5wcmUgJiYKLQlwcmludGYgIiVzIiAiYSBhIGFiIGEgYSIgPnBvc3QgJiYKIAl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4KICcKIApkaWZmIC0tZ2l0IGEvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCmluZGV4IGI5ZDg3NmUuLmI1YTU2ODkgMTAwNzU1Ci0tLSBhL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaAorKysgYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKQEAgLTQ0MCwxMSArNDQwLDEzIEBACiAJZ2l0IGJyYW5jaCBzaWRlMmMgJiYKIAlnaXQgY2hlY2tvdXQgc2lkZTFjICYmCiAJdGVzdF9zZXEgMSAxMCA+ZmlsZW5hbWUtc2lkZTFjICYmCisJc2lkZTFjZj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlbmFtZS1zaWRlMWMpICYmCiAJZ2l0IGFkZCBmaWxlbmFtZS1zaWRlMWMgJiYKIAlnaXQgY29tbWl0IC1tIHdpdGggJiYKIAlnaXQgY2hlY2tvdXQgc2lkZTJjICYmCiAJdGVzdF9zZXEgMSA5ID5maWxlbmFtZS1zaWRlMmMgJiYKIAllY2hvIHRlbiA+PmZpbGVuYW1lLXNpZGUyYyAmJgorCXNpZGUyY2Y9JChnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWUtc2lkZTJjKSAmJgogCWdpdCBhZGQgZmlsZW5hbWUtc2lkZTJjICYmCiAJZ2l0IGNvbW1pdCAtbSBpYW0gJiYKIAlnaXQgY2hlY2tvdXQgLWIgbWVyZ2VyeSBzaWRlMWMgJiYKQEAgLTQ1MiwxMyArNDU0LDE0IEBACiAJZ2l0IHJtIGZpbGVuYW1lLXNpZGUxYyAmJgogCWVjaG8gZWxldmVuID4+ZmlsZW5hbWUtc2lkZTJjICYmCiAJZ2l0IG12IGZpbGVuYW1lLXNpZGUyYyBmaWxlbmFtZS1tZXJnZWQgJiYKKwltZXJnZWRmPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVuYW1lLW1lcmdlZCkgJiYKIAlnaXQgYWRkIGZpbGVuYW1lLW1lcmdlZCAmJgogCWdpdCBjb21taXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21iaW5lZC1hbGwtcGF0aHMgYW5kIC0tcmF3JyAnCi0JY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgotCTo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZjAwYzk2NWQ4MzA3MzA4NDY5ZTUzNzMwMmJhYTczMDQ4NDg4ZjE2MiAwODhiZDVkOTJjMmE4ZTAyMDNjYThlN2U0YzJhNWM2OTJmNmFlM2Y3IDMzM2I5YzYyNTE5ZjI4NWUxODU0ODMwYWRlMGZlMWVmMWQ0MGVlMWIgUlIJZmlsZW5hbWUtc2lkZTFjCWZpbGVuYW1lLXNpZGUyYwlmaWxlbmFtZS1tZXJnZWQKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwk6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRzaWRlMWNmICRzaWRlMmNmICRtZXJnZWRmIFJSCWZpbGVuYW1lLXNpZGUxYwlmaWxlbmFtZS1zaWRlMmMJZmlsZW5hbWUtbWVyZ2VkCiAJRU9GCiAJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCiAJc2VkIDFkIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKQEAgLTQ4MiwxMSArNDg1LDEzIEBACiAJZ2l0IGNoZWNrb3V0IHNpZGUxZCAmJgogCXRlc3Rfc2VxIDEgMTAgPiIkKHByaW50ZiAiZmlsZVx0d2l0aFx0dGFicyIpIiAmJgogCWdpdCBhZGQgZmlsZSogJiYKKwlzaWRlMWRmPSQoZ2l0IGhhc2gtb2JqZWN0ICp0YWJzKSAmJgogCWdpdCBjb21taXQgLW0gd2l0aCAmJgogCWdpdCBjaGVja291dCBzaWRlMmQgJiYKIAl0ZXN0X3NlcSAxIDkgPiIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAmJgogCWVjaG8gdGVuID4+IiQocHJpbnRmICJpXHRhbVx0dGFiYmVkIikiICYmCiAJZ2l0IGFkZCAqdGFiYmVkICYmCisJc2lkZTJkZj0kKGdpdCBoYXNoLW9iamVjdCAqdGFiYmVkKSAmJgogCWdpdCBjb21taXQgLW0gaWFtICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGZ1bm55LW5hbWVzLW1lcmdlcnkgc2lkZTFkICYmCiAJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHNpZGUyZCAmJgpAQCAtNDk0LDEyICs0OTksMTQgQEAKIAllY2hvIGVsZXZlbiA+PiIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAmJgogCWdpdCBtdiAiJChwcmludGYgImlcdGFtXHR0YWJiZWQiKSIgIiQocHJpbnRmICJmaWNrbGVcdG5hbWluZyIpIiAmJgogCWdpdCBhZGQgZmlja2xlKiAmJgotCWdpdCBjb21taXQKKwloZWFkZj0kKGdpdCBoYXNoLW9iamVjdCBmaWNrbGUqKSAmJgorCWdpdCBjb21taXQgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLXJhdyBhbmQgZnVubnkgbmFtZXMnICcKLQljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCi0JOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBmMDBjOTY1ZDgzMDczMDg0NjllNTM3MzAyYmFhNzMwNDg0ODhmMTYyIDA4OGJkNWQ5MmMyYThlMDIwM2NhOGU3ZTRjMmE1YzY5MmY2YWUzZjcgMzMzYjljNjI1MTlmMjg1ZTE4NTQ4MzBhZGUwZmUxZWYxZDQwZWUxYiBSUgkiZmlsZVx0d2l0aFx0dGFicyIJImlcdGFtXHR0YWJiZWQiCSJmaWNrbGVcdG5hbWluZyIKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwk6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRzaWRlMWRmICRzaWRlMmRmICRoZWFkZiBSUgkiZmlsZVx0d2l0aFx0dGFicyIJImlcdGFtXHR0YWJiZWQiCSJmaWNrbGVcdG5hbWluZyIKIAlFT0YKIAlnaXQgZGlmZi10cmVlIC1jIC1NIC0tcmF3IC0tY29tYmluZWQtYWxsLXBhdGhzIEhFQUQgPmFjdHVhbC50bXAgJiYKIAlzZWQgMWQgPGFjdHVhbC50bXAgPmFjdHVhbCAmJgpAQCAtNTA3LDcgKzUxNCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnLS1jb21iaW5lZC1hbGwtcGF0aHMgYW5kIC0tcmF3IC1hbmQgLXogYW5kIGZ1bm55IG5hbWVzJyAnCi0JcHJpbnRmICJhYWY4MDg3YzNjYmQ0ZGI4ZTE4NWEyZDA3NGNmMjdjNTNjZmI3NWQ3XDA6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGYwMGM5NjVkODMwNzMwODQ2OWU1MzczMDJiYWE3MzA0ODQ4OGYxNjIgMDg4YmQ1ZDkyYzJhOGUwMjAzY2E4ZTdlNGMyYTVjNjkyZjZhZTNmNyAzMzNiOWM2MjUxOWYyODVlMTg1NDgzMGFkZTBmZTFlZjFkNDBlZTFiIFJSXDBmaWxlXHR3aXRoXHR0YWJzXDBpXHRhbVx0dGFiYmVkXDBmaWNrbGVcdG5hbWluZ1wwIiA+ZXhwZWN0ICYmCisJcHJpbnRmICIkaGVhZFwwOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFkZiAkc2lkZTJkZiAkaGVhZGYgUlJcMGZpbGVcdHdpdGhcdHRhYnNcMGlcdGFtXHR0YWJiZWRcMGZpY2tsZVx0bmFtaW5nXDAiID5leHBlY3QgJiYKIAlnaXQgZGlmZi10cmVlIC1jIC1NIC0tcmF3IC0tY29tYmluZWQtYWxsLXBhdGhzIC16IEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKZGlmZiAtLWdpdCBhL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoIGIvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2gKaW5kZXggNTNhYzQ0Yi4uMGViMDMxNCAxMDA3NTUKLS0tIGEvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2gKKysrIGIvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2gKQEAgLTEyLDYgKzEyLDcgQEAKIAlnaXQgY29tbWl0IC1tIHplcm8gJiYKIAllY2hvIG9uZSA+IG9uZSAmJgogCWVjaG8gdHdvID4gdHdvICYmCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCBvbmUpICYmCiAJZ2l0IGFkZCBvbmUgdHdvICYmCiAJZ2l0IGNvbW1pdCAtbSBvbmV0d28gJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBvbmUgJiYKQEAgLTIwLDcgKzIxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycgJwotCWdpdCBkaWZmLWluZGV4IEhFQUReIC0tIG9uZSB8IGdyZXAgLXEgNTYyNmFiZjBmNzJlNThkN2ExNTMzNjhiYTU3ZGI0YzY3M2MwZTE3MQorCWdpdCBkaWZmLWluZGV4IEhFQUReIC0tIG9uZSB8IGdyZXAgLXEgJGJsb2IKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyBkb2VzIG5vdCBleGFtaW5lIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycgJwpkaWZmIC0tZ2l0IGEvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2ggYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaAppbmRleCA2MTliZjk3Li5mODUyMTM2IDEwMDc1NQotLS0gYS90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaAorKysgYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaApAQCAtMjg0LDcgKzI4NCw3IEBACiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQnICcKIAllY2hvIG5ldyA+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0yOTQsNyArMjk0LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJwogCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKQEAgLTMwMywxOSArMzAzLDE5IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCiAJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJwogCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyBtb2RpZmVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyBtb2RpZmllZCBjb250ZW50JyAnCiAJcm0gLWYgc20xL25ldy1maWxlICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0zNjksNyArMzY5LDcgQEAKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCcgJwogCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0zODEsNyArMzgxLDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJwogCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKIAllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC00MDIsMTMgKzQwMiwxMyBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCiAJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyBtb2RpZmVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyBtb2RpZmllZCBjb250ZW50JyAnCiAJcm0gLWYgc20xL25ldy1maWxlICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCmRpZmYgLS1naXQgYS90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaCBiL3QvdDQwNDQtZGlmZi1pbmRleC11bmlxdWUtYWJicmV2LnNoCmluZGV4IDY0NzkwNWUuLjQ3MDE3OTYgMTAwNzU1Ci0tLSBhL3QvdDQwNDQtZGlmZi1pbmRleC11bmlxdWUtYWJicmV2LnNoCisrKyBiL3QvdDQwNDQtZGlmZi1pbmRleC11bmlxdWUtYWJicmV2LnNoCkBAIC0zLDM0ICszLDQ4IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHVuaXF1ZSBzaGExIGFiYnJldmlhdGlvbiBvbiAiaW5kZXggZnJvbS4udG8iIGxpbmUnCiAuIC4vdGVzdC1saWIuc2gKIAotaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNIQTEKLXRoZW4KLSAgICAgICBza2lwX2FsbD0nbm90IHVzaW5nIFNIQS0xIGZvciBvYmplY3RzJwotICAgICAgIHRlc3RfZG9uZQotZmkKLQotY2F0ID5leHBlY3RfaW5pdGlhbCA8PEVPRgotMTAwNjQ0IGJsb2IgNTFkMjczODQ2M2VhNGNhNjZmODY5MWM5MWUzM2NlNjRiN2Q0MWJiMQlmb28KLUVPRgotCi1jYXQgPmV4cGVjdF91cGRhdGUgPDxFT0YKLTEwMDY0NCBibG9iIDUxZDI3MzhlZmI0YWQ4YTFlNDBiZWQ4MzlhYjhlMTE2ZjBhMTVlNDcJZm9vCi1FT0YKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQllY2hvIDQ4MjcgPiBmb28gJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YgJiYKKwl2YWwxIHNoYTE6NDgyNworCXZhbDEgc2hhMjU2OjU2NjQKKworCXZhbDIgc2hhMToxMTc0MgorCXZhbDIgc2hhMjU2OjEwNjI1CisKKwloYXNoMSBzaGExOjUxZDI3Mzg0NjNlYTRjYTY2Zjg2OTFjOTFlMzNjZTY0YjdkNDFiYjEKKwloYXNoMSBzaGEyNTY6YWUzMWRmZmYwYWY5M2IyYzYyYjAwOThhMDM5YjM4NTY5YzQzYjBhN2U5N2I4NzMwMDBjYTQyZDEyOGYyNzM1MAorCisJaGFzaHQxIHNoYTE6NTFkMjczODQKKwloYXNodDEgc2hhMjU2OmFlMzFkZmZmCisKKwloYXNoMiBzaGExOjUxZDI3MzhlZmI0YWQ4YTFlNDBiZWQ4MzlhYjhlMTE2ZjBhMTVlNDcKKwloYXNoMiBzaGEyNTY6YWUzMWRmZmFkYTg4YTQ2ZmQ1ZjUzYzdlZDVhYTI1YTdhODk1MWYxZDVlODg0NTZjMzE3YzhkNTQ4NGQyNjNlNQorCisJaGFzaHQyIHNoYTE6NTFkMjczOGUKKwloYXNodDIgc2hhMjU2OmFlMzFkZmZhCisJRU9GCisKKwljYXQgPmV4cGVjdF9pbml0aWFsIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgaGFzaDEpCWZvbworCUVPRgorCisJY2F0ID5leHBlY3RfdXBkYXRlIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgaGFzaDIpCWZvbworCUVPRgorCisJZWNobyAiJCh0ZXN0X29pZCB2YWwxKSIgPiBmb28gJiYKIAlnaXQgYWRkIGZvbyAmJgogCWdpdCBjb21taXQgLW0gImluaXRpYWwiICYmCiAJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6ID4gYWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0X2luaXRpYWwgYWN0dWFsICYmCi0JZWNobyAxMTc0MiA+IGZvbyAmJgorCWVjaG8gIiQodGVzdF9vaWQgdmFsMikiID4gZm9vICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIiAmJgogCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdF91cGRhdGUgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCi1pbmRleCA1MWQyNzM4NC4uNTFkMjczOGUgMTAwNjQ0CitpbmRleCAkKHRlc3Rfb2lkIGhhc2h0MSkuLiQodGVzdF9vaWQgaGFzaHQyKSAxMDA2NDQKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRvZXMgbm90IHByb2R1Y2UgYW1iaWd1b3VzIGluZGV4IGxpbmUnICcKZGlmZiAtLWdpdCBhL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaCBiL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaAppbmRleCAzNmY4ZWQ4Li4yNTg4MDg3IDEwMDc1NQotLS0gYS90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2gKKysrIGIvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCkBAIC03MCw3ICs3MCw3IEBACiAJZXhwZWN0PSQxCiAJc2hpZnQKIAljYXQgPmV4cGVjdGVkIDw8LUVPRgotCTowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJGJsb2IgQQkkZXhwZWN0CisJOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRibG9iIEEJJGV4cGVjdAogCUVPRgogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcmF3ICQqIiAiCiAJCWdpdCAtQyAnJGRpcicgZGlmZiAtLW5vLWFiYnJldiAtLXJhdyAkKiBIRUFEXiA+YWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoIGIvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaAppbmRleCA4N2E4OTQ5Li43ZjlhZDlmIDEwMDc1NQotLS0gYS90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoCisrKyBiL3QvdDQwNDgtZGlmZi1jb21iaW5lZC1iaW5hcnkuc2gKQEAgLTksMjQgKzksMjcgQEAKIAlnaXQgY29tbWl0IC1tIG9uZSAmJgogCWVjaG8gdHdvUTIgfCBxX3RvX251bCA+YmluYXJ5ICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpiaW5hcnkpICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC1iaW5hcnkgSEVBRF4gJiYKIAllY2hvIHRocmVlUTMgfCBxX3RvX251bCA+YmluYXJ5ICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCXRocmVlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmluYXJ5KSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKIAllY2hvIHJlc29sdmVkUWhvb3JheSB8IHFfdG9fbnVsID5iaW5hcnkgJiYKLQlnaXQgY29tbWl0IC1hIC1tIHJlc29sdmVkCisJZ2l0IGNvbW1pdCAtYSAtbSByZXNvbHZlZCAmJgorCXJlcz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOmJpbmFyeSkKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS9iaW5hcnkgYi9iaW5hcnkKLWluZGV4IDdlYTZkZWQuLjk1NjM2OTEgMTAwNjQ0CitpbmRleCAkdGhyZWUuLiRyZXMgMTAwNjQ0CiBCaW5hcnkgZmlsZXMgYS9iaW5hcnkgYW5kIGIvYmluYXJ5IGRpZmZlcgogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL2JpbmFyeSBiL2JpbmFyeQotaW5kZXggNjE5NzU3MC4uOTU2MzY5MSAxMDA2NDQKK2luZGV4ICR0d28uLiRyZXMgMTAwNjQ0CiBCaW5hcnkgZmlsZXMgYS9iaW5hcnkgYW5kIGIvYmluYXJ5IGRpZmZlcgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1tIGluZGljYXRlcyBiaW5hcnktbmVzcycgJwpAQCAtMzQsMTEgKzM3LDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNvbWJpbmVkIGJpbmFyeQotaW5kZXggN2VhNmRlZCw2MTk3NTcwLi45NTYzNjkxCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogQmluYXJ5IGZpbGVzIGRpZmZlcgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIGluZGljYXRlcyBiaW5hcnktbmVzcycgJwpAQCAtNDYsMTEgKzQ5LDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNjIGJpbmFyeQotaW5kZXggN2VhNmRlZCw2MTk3NTcwLi45NTYzNjkxCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogQmluYXJ5IGZpbGVzIGRpZmZlcgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgaW5kaWNhdGVzIGJpbmFyeS1uZXNzJyAnCkBAIC02MiwyMyArNjUsMjYgQEAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJdGVzdF9jb21taXQgb25lIHRleHQgJiYKIAl0ZXN0X2NvbW1pdCB0d28gdGV4dCAmJgorCXR3bz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRleHQpICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC10ZXh0IEhFQUReICYmCiAJdGVzdF9jb21taXQgdGhyZWUgdGV4dCAmJgorCXRocmVlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGV4dCkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCiAJdGVzdF9jb21taXQgcmVzb2x2ZWQgdGV4dCAmJgorCXJlcz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRleHQpICYmCiAJZWNobyB0ZXh0IC1kaWZmID4uZ2l0YXR0cmlidXRlcwogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCAyYmRmNjdhLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAogQmluYXJ5IGZpbGVzIGEvdGV4dCBhbmQgYi90ZXh0IGRpZmZlcgogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCBmNzE5ZWZkLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHR3by4uJHJlcyAxMDA2NDQKIEJpbmFyeSBmaWxlcyBhL3RleHQgYW5kIGIvdGV4dCBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCkBAIC04NiwxMSArOTIsMTEgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiByZXNvbHZlZAogCiBkaWZmIC0tY29tYmluZWQgdGV4dAotaW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogQmluYXJ5IGZpbGVzIGRpZmZlcgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKQEAgLTk4LDExICsxMDQsMTEgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiByZXNvbHZlZAogCiBkaWZmIC0tY2MgdGV4dAotaW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogQmluYXJ5IGZpbGVzIGRpZmZlcgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJwpAQCAtMTE1LDExICsxMjEsMTEgQEAKIAlnaXQgY29uZmlnIGRpZmYudXBjYXNlLnRleHRjb252ICJ0ciBhLXogQS1aIDwiCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiByZXNvbHZlZAogCiBkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKLWluZGV4IDJiZGY2N2EuLjJhYjE5YWUgMTAwNjQ0CitpbmRleCAkdGhyZWUuLiRyZXMgMTAwNjQ0CiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQCAtMSArMSBAQApAQCAtMTI4LDcgKzEzNCw3IEBACiByZXNvbHZlZAogCiBkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKLWluZGV4IGY3MTllZmQuLjJhYjE5YWUgMTAwNjQ0CitpbmRleCAkdHdvLi4kcmVzIDEwMDY0NAogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEAgLTEgKzEgQEAKQEAgLTE0MCwxMSArMTQ2LDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNvbWJpbmVkIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAQCAtMSwxIC0xLDEgKzEsMSBAQEAKQEAgLTE1NywxMSArMTYzLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNjIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAQCAtMSwxIC0xLDEgKzEsMSBAQEAKQEAgLTE3NCw5ICsxODAsOSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIGRpZmYgLS1jb21iaW5lZCB0ZXh0Ci1pbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACkBAIC0xOTAsOSArMTk2LDkgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiBkaWZmIC0tY2MgdGV4dAotaW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4wMDAwMDAwCitpbmRleCAkdGhyZWUsJHR3by4uMDAwMDAwMAogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEBAIC0xLDEgLTEsMSArMSw1IEBAQApkaWZmIC0tZ2l0IGEvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoIGIvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoCmluZGV4IGRmZjM2YjcuLjRmNGI1NDEgMTAwNzU1Ci0tLSBhL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaAorKysgYi90L3Q0MDU3LWRpZmYtY29tYmluZWQtcGF0aHMuc2gKQEAgLTMzLDcgKzMzLDcgQEAKICcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IG9uZSB0cnVsbHkgY29uZmxpY3RpbmcgcGF0aCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBvbmUgdHJ1bHkgY29uZmxpY3RpbmcgcGF0aCcgJwogCWdpdCBjaGVja291dCBzaWRlICYmCiAJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyIDkpCiAJZG8KZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKaW5kZXggOTBhYjU0Zi4uNDMzOTRmOCAxMDA2NDQKLS0tIGEvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKKysrIGIvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKQEAgLTc1LDggKzc1LDggQEAKICtsaW5rOmdpdC1zc2gtcHVsbC5odG1sW2dpdC1zc2gtcHVsbF06OgogIAlQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgogIAotIEludGVyb2dhdG9yczoKLUBAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJvZ2F0b3JzOgorIEludGVycm9nYXRvcnM6CitAQCAtMTU2LDggKzE1Niw4IEBAIEludGVycm9nYXRvcnM6CiAgbGluazpnaXQtZGlmZi1oZWxwZXIuaHRtbFtnaXQtZGlmZi1oZWxwZXJdOjoKICAJR2VuZXJhdGVzIHBhdGNoIGZvcm1hdCBvdXRwdXQgZm9yIGdpdC1kaWZmLSoKICAKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKaW5kZXggOTBjZGJhYS4uY2FjMTcyZSAxMDA2NDQKLS0tIGEvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKKysrIGIvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKQEAgLTIxMSw3ICsyMTEsNyBAQAogLQogLQkJLyogSWYgdGhpcyBpcyBhbiBleGFjdCBkaXJlY3RvcnkgbWF0Y2gsIHdlIG1heSBoYXZlCiAtCQkgKiBkaXJlY3RvcnkgZmlsZXMgZm9sbG93aW5nIHRoaXMgcGF0aC4gTWF0Y2ggb24gdGhlbS4KLS0JCSAqIE90aGVyd2lzZSwgd2UncmUgYXQgYSBwYWNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKKy0JCSAqIE90aGVyd2lzZSwgd2UncmUgYXQgYSBwYXRjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCiAtCQkgKiB0byB0cnkgdG8gbWF0Y2ggYWdhaW4uCiAtCQkgKi8KIC0JCWlmIChtdHlwZSA9PSAwKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTUucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaAppbmRleCA1ZjZkZGMxLi41N2VjNzlkIDEwMDY0NAotLS0gYS90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaAorKysgYi90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaApAQCAtMTg1LDggKzE4NSw4IEBACiArbGluazpnaXQtc3NoLXB1bGwuaHRtbFtnaXQtc3NoLXB1bGxdOjoKICAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KICAKLSBJbnRlcm9nYXRvcnM6Ci1AQCAtMTU2LDggKzE1Niw4IEBAIEludGVyb2dhdG9yczoKKyBJbnRlcnJvZ2F0b3JzOgorQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcnJvZ2F0b3JzOgogIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CiAgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCiAgCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCmluZGV4IDA3YzY1ODkuLmZhMjQzMDUgMTAwNjQ0Ci0tLSBhL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCisrKyBiL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCkBAIC0zMzUsNyArMzM1LDcgQEAKICAKIC0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQogLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCi0tCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGFjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGF0Y2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAogLQkJICogdG8gdHJ5IHRvIG1hdGNoIGFnYWluLgogKwlpZiAoZS0+ZGlyZWN0b3J5KSB7CiArCQkvKiBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CmRpZmYgLS1naXQgYS90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoIGIvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaAppbmRleCBmYTVkNGVmLi5kNzM0OWNlIDEwMDc1NQotLS0gYS90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoCisrKyBiL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2gKQEAgLTQsMjMgKzQsMTcgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKLWNyZWF0ZV9maWxlICgpIHsKLQlmb3IgaQotCWRvCi0JCWVjaG8gIiRpIgotCWRvbmUKLX0KLQotc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmICgpIHsKK3ByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgKCkgeworCWdpdCBkaWZmIEhFQUQgPmRpZmYucmF3ICYmCiAJc2VkIC1lICcKIAkJL15pbmRleCAvZAotCQlzL15cKCtbPD5dWzw+XVs8Pl1bPD5dKlwpIC4qL1wxLwotCScKKwkJcy9eXCgrWzw+fF1bPD58XVs8PnxdWzw+fF0qXCkgLiovXDEvCisJJyBkaWZmLnJhdwogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAl0ZXN0X3RpY2sgJiYKLQljcmVhdGVfZmlsZSA+b25lIDEgMiAzIDQgNSA2IDcgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPm9uZSAmJgogCWNhdCBvbmUgPnR3byAmJgogCWdpdCBhZGQgb25lIHR3byAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgpAQCAtMjgsMTMgKzIyLDEzIEBACiAJZ2l0IGJyYW5jaCBzaWRlICYmCiAKIAl0ZXN0X3RpY2sgJiYKLQljcmVhdGVfZmlsZSA+b25lIDEgdHdvIDMgNCA1IHNpeCA3ICYmCi0JY3JlYXRlX2ZpbGUgPnR3byAxIHR3byAzIDQgNSA2IDcgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCA1IHNpeCA3ID5vbmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCA1IDYgNyA+dHdvICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBtYXN0ZXIgJiYKIAogCWdpdCBjaGVja291dCBzaWRlICYmCi0JY3JlYXRlX2ZpbGUgPm9uZSAxIDIgMyA0IGZpdmUgNiA3ICYmCi0JY3JlYXRlX2ZpbGUgPnR3byAxIDIgMyA0IGZpdmUgNiA3ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3ID5vbmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgZml2ZSA2IDcgPnR3byAmJgogCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgogCiAJZ2l0IGNoZWNrb3V0IG1hc3RlcgpAQCAtNTIsNyArNDYsNyBAQAogCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXknICcKK3Rlc3RfYXBwbHlfd2l0aF8zd2F5ICgpIHsKIAkjIE1lcmdpbmcgc2lkZSBzaG91bGQgYmUgc2ltaWxhciB0byBhcHBseWluZyB0aGlzIHBhdGNoCiAJZ2l0IGRpZmYgLi4uc2lkZSA+UC5kaWZmICYmCiAKQEAgLTYxLDIyICs1NSwzMSBAQAogCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZiAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmICYmCiAKIAkjIHNob3VsZCBmYWlsIHRvIGFwcGx5CiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKIAlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC5scyAmJgotCWdpdCBkaWZmIEhFQUQgfCBzYW5pdGl6ZV9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+YWN0dWFsLmRpZmYgJiYKIAogCSMgVGhlIHJlc3VsdCBzaG91bGQgcmVzZW1ibGUgdGhlIGNvcnJlc3BvbmRpbmcgbWVyZ2UKIAl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCiAJdGVzdF9jbXAgZXhwZWN0LmRpZmYgYWN0dWFsLmRpZmYKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXknICcKKwl0ZXN0X2FwcGx5X3dpdGhfM3dheQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheSB3aXRoIG1lcmdlLmNvbmZsaWN0U3R5bGUgPSBkaWZmMycgJworCXRlc3RfY29uZmlnIG1lcmdlLmNvbmZsaWN0U3R5bGUgZGlmZjMgJiYKKwl0ZXN0X2FwcGx5X3dpdGhfM3dheQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheSB3aXRoIHJlcmVyZSBlbmFibGVkJyAnCi0JZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgogCiAJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAogCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgpAQCAtODcsNyArOTAsNyBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlICYmCiAKIAkjIE1hbnVhbGx5IHJlc29sdmUgYW5kIHJlY29yZCB0aGUgcmVzb2x1dGlvbgotCWNyZWF0ZV9maWxlIDEgdHdvIDMgNCBmaXZlIHNpeCA3ID5vbmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCBmaXZlIHNpeCA3ID5vbmUgJiYKIAlnaXQgcmVyZXJlICYmCiAJY2F0IG9uZSA+ZXhwZWN0ICYmCiAKQEAgLTEwNCwxNCArMTA3LDE0IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCiAJZ2l0IGNoZWNrb3V0IC1iIGFkZGVyICYmCi0JY3JlYXRlX2ZpbGUgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKLQljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID5mb3VyICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+Zm91ciAmJgogCWdpdCBhZGQgdGhyZWUgZm91ciAmJgogCWdpdCBjb21taXQgLW0gImFkZCB0aHJlZSBhbmQgZm91ciIgJiYKIAogCWdpdCBjaGVja291dCAtYiBhbm90aGVyIGFkZGVyXiAmJgotCWNyZWF0ZV9maWxlIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCi0JY3JlYXRlX2ZpbGUgMSAyIDMgZm91ciA1IDYgNyA+Zm91ciAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIGZvdXIgNSA2IDcgPmZvdXIgJiYKIAlnaXQgYWRkIHRocmVlIGZvdXIgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCiAKQEAgLTEyMSw3ICsxMjQsNyBAQAogCWdpdCBjaGVja291dCBhZGRlcl4wICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGFub3RoZXIgJiYKIAlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdC5scyAmJgotCWdpdCBkaWZmIEhFQUQgfCBzYW5pdGl6ZV9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLTMgd2l0aCBhZGQvYWRkIGNvbmZsaWN0JyAnCkBAIC0xMzEsNyArMTM0LDcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCiAJIyAuLi4gYW5kIGxlYXZlIGNvbmZsaWN0cyBpbiB0aGUgaW5kZXggYW5kIGluIHRoZSB3b3JraW5nIHRyZWUKIAlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC5scyAmJgotCWdpdCBkaWZmIEhFQUQgfCBzYW5pdGl6ZV9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+YWN0dWFsLmRpZmYgJiYKIAogCSMgVGhlIHJlc3VsdCBzaG91bGQgcmVzZW1ibGUgdGhlIGNvcnJlc3BvbmRpbmcgbWVyZ2UKIAl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCmRpZmYgLS1naXQgYS90L3Q0MjAyLWxvZy5zaCBiL3QvdDQyMDItbG9nLnNoCmluZGV4IGU4MDNiYTQuLjJjOTQ4OTQgMTAwNzU1Ci0tLSBhL3QvdDQyMDItbG9nLnNoCisrKyBiL3QvdDQyMDItbG9nLnNoCkBAIC02NjcsNyArNjY3LDcgQEAKICogfCB8IGZpZnRoCiAqIHwgfCBmb3VydGgKIHwvIC8KLSogfCB0aGlyZAorKiAvIHRoaXJkCiB8LwogKiBzZWNvbmQKICogaW5pdGlhbApAQCAtMTU3MCw2ICsxNTcwLDE0IEBACiAJZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzZXR1cCBzaWduZWQgYnJhbmNoIHdpdGggc3Via2V5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZ25lZC1zdWJrZXkgbWFzdGVyICYmCisJZWNobyBmb28gPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtU0I3MjI3MTg5IC1tIHNpZ25lZF9jb21taXQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAnc2V0dXAgc2lnbmVkIGJyYW5jaCB4NTA5JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHNpZ25lZC14NTA5IG1hc3RlciAmJgpAQCAtMTU4MCw2ICsxNTg4LDE4IEBACiAJZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyB4NTA5IGZpbmdlcnByaW50JyAnCisJZWNobyAiRjhCRjYyRTA2OTNEMDY5NDgxNjM3NzA5OTkwOUM3NzlGQTIzRkQ2NSB8ICIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLW4xIC0tZm9ybWF0PSIlR0YgfCAlR1AiIHNpZ25lZC14NTA5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyBPcGVuUEdQIGZpbmdlcnByaW50JyAnCisJZWNobyAiRDRCRTIyMzExQUQzMTMxRTVFREEyOUE0NjEwOTJFODVCNzIyNzE4OSIgPiBleHBlY3QgJiYKKwlnaXQgbG9nIC1uMSAtLWZvcm1hdD0iJUdQIiBzaWduZWQtc3Via2V5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlJyAnCiAJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHNpZ25lZCA+YWN0dWFsICYmCiAJZ3JlcCAiXnwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q0MjAzLW1haWxtYXAuc2ggYi90L3Q0MjAzLW1haWxtYXAuc2gKaW5kZXggOTE4YWRhNi4uNTg2YzNhOCAxMDA3NTUKLS0tIGEvdC90NDIwMy1tYWlsbWFwLnNoCisrKyBiL3QvdDQyMDMtbWFpbG1hcC5zaApAQCAtMTMsOCArMTMsOCBAQAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKLQljYXQgPmNvbnRhY3RzIDw8LVxFT0YgJiYKLQlBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCWNhdCA+Y29udGFjdHMgPDwtIEVPRiAmJgorCSRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCiAKQEAgLTMzLDE5ICszMywxOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIGFyZ3VtZW50cycgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKLQlBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIAluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgogCUVPRgogCWdpdCBjaGVjay1tYWlsbWFwIFwKLQkJIkEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiBcCisJCSIkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4iIFwKIAkJIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIC0tc3RkaW4nICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCi0JQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KIAlFT0YKIAlnaXQgY2hlY2stbWFpbG1hcCAtLXN0ZGluIDxjb250YWN0cyA+YWN0dWFsICYmCkBAIC02Niw4ICs2Niw4IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLW1haWxtYXAgYm9ndXMKICcKIAotY2F0ID5leHBlY3QgPDxcRU9GCi1BIFUgVGhvciAoMSk6CitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgKDEpOgogICAgICAgaW5pdGlhbAogCiBuaWNrMSAoMSk6CkBAIC05MCw3ICs5MCw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAubWFpbG1hcCcgJwotCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+IC5tYWlsbWFwICYmCisJZWNobyAiUmVwbyBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPiAubWFpbG1hcCAmJgogCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgb3ZlcnJpZGUnICcKLQllY2hvICJFeHRlcm5hbCBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJFeHRlcm5hbCBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgogCWdpdCBjb25maWcgbWFpbG1hcC5maWxlIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbApAQCAtMTc4LDggKzE3OCw4IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PFxFT0YKLUEgVSBUaG9yICgxKToKK2NhdCA+ZXhwZWN0IDw8IEVPRgorJEdJVF9BVVRIT1JfTkFNRSAoMSk6CiAgICAgICBpbml0aWFsCiAKIG5pY2sxICgxKToKQEAgLTE5NSwxOCArMTk1LDE4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtYWlsbWFwIGJsb2IgdGVzdHMnICcKIAlnaXQgY2hlY2tvdXQgLWIgbWFwICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgotCWNhdCA+anVzdC1idWdzIDw8LVxFT0YgJiYKKwljYXQgPmp1c3QtYnVncyA8PC0gRU9GICYmCiAJQmxvYiBHdXkgPGJ1Z3NAY29tcGFueS54eD4KIAlFT0YKLQljYXQgPmJvdGggPDwtXEVPRiAmJgotCUJsb2IgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+CisJY2F0ID5ib3RoIDw8LSBFT0YgJiYKKwlCbG9iIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJQmxvYiBHdXkgPGJ1Z3NAY29tcGFueS54eD4KIAlFT0YKLQlwcmludGYgIlRyaWNreSBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID5uby1uZXdsaW5lICYmCisJcHJpbnRmICJUcmlja3kgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID5uby1uZXdsaW5lICYmCiAJZ2l0IGFkZCBqdXN0LWJ1Z3MgYm90aCBuby1uZXdsaW5lICYmCiAJZ2l0IGNvbW1pdCAtbSAibXkgbWFpbG1hcHMiICYmCi0JZWNobyAiUmVwbyBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID4ubWFpbG1hcCAmJgotCWVjaG8gIkludGVybmFsIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmludGVybmFsLm1hcAorCWVjaG8gIlJlcG8gR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4ubWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+aW50ZXJuYWwubWFwCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuYmxvYiBzZXQnICcKQEAgLTI2NiwxMiArMjY2LDEyIEBACiAJZ2l0IGluaXQgbm9uLWJhcmUgJiYKIAkoCiAJCWNkIG5vbi1iYXJlICYmCi0JCXRlc3RfY29tbWl0IG9uZSAubWFpbG1hcCAiRmFrZSBOYW1lIDxhdXRob3JAZXhhbXBsZS5jb20+IiAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgLm1haWxtYXAgIkZha2UgTmFtZSA8JEdJVF9BVVRIT1JfRU1BSUw+IiAmJgogCQllY2hvICIgICAgIDEJRmFrZSBOYW1lIiA+ZXhwZWN0ICYmCiAJCWdpdCBzaG9ydGxvZyAtbnMgSEVBRCA+YWN0dWFsICYmCiAJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAkJcm0gLm1haWxtYXAgJiYKLQkJZWNobyAiICAgICAxCUEgVSBUaG9yIiA+ZXhwZWN0ICYmCisJCWVjaG8gIiAgICAgMQkkR0lUX0FVVEhPUl9OQU1FIiA+ZXhwZWN0ICYmCiAJCWdpdCBzaG9ydGxvZyAtbnMgSEVBRCA+YWN0dWFsICYmCiAJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIAkpCkBAIC0zMDUsMjYgKzMwNSwyNiBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUtY2hhcmFjdGVyIG5hbWUnICcKLQllY2hvICIgICAgIDEJQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWVjaG8gIiAgICAgMQlBIDwkR0lUX0FVVEhPUl9FTUFJTD4iID5leHBlY3QgJiYKIAllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCi0JZWNobyAiQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPi5tYWlsbWFwICYmCisJZWNobyAiQSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5tYWlsbWFwIiAmJgogCWdpdCBzaG9ydGxvZyAtZXMgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSBjYW5vbmljYWwgZW1haWwgY2FzZScgJwotCWVjaG8gIiAgICAgMQlBIFUgVGhvciA8QVVUSE9SQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWVjaG8gIiAgICAgMQkkR0lUX0FVVEhPUl9OQU1FIDxBVVRIT1JAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCiAJZWNobyAiICAgICAxCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+PmV4cGVjdCAmJgotCWVjaG8gIjxBVVRIT1JAZXhhbXBsZS5jb20+IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+Lm1haWxtYXAgJiYKKwllY2hvICI8QVVUSE9SQGV4YW1wbGUuY29tPiA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5tYWlsbWFwIiAmJgogCWdpdCBzaG9ydGxvZyAtZXMgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIEV4dGVuZGVkIG1haWxtYXAgY29uZmlndXJhdGlvbnMgc2hvdWxkIGdpdmUgdXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgZm9yIHNob3J0bG9nCi1jYXQgPmV4cGVjdCA8PFxFT0YKLUEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+ICgxKToKK2NhdCA+ZXhwZWN0IDw8IEVPRgorJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+ICgxKToKICAgICAgIGluaXRpYWwKIAogQ1RPIDxjdG9AY29tcGFueS54eD4gKDEpOgpAQCAtMzcwLDcgKzM3MCw3IEBACiAJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQ1RPIDxjdG9AY29vbXBhbnkueHg+IiAtbSBzZXZlbnRoICYmCiAKIAlta2RpciAtcCBpbnRlcm5hbF9tYWlsbWFwICYmCi0JZWNobyAiQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IiA+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCiAJZWNobyAiPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAllY2hvICJTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gICAgICAgICBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgogCWVjaG8gIk90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCkBAIC0zODQsMjcgKzM4NCwyNyBAQAogJwogCiAjIGdpdCBsb2cgd2l0aCAtLXByZXR0eSBmb3JtYXQgd2hpY2ggdXNlcyB0aGUgbmFtZSBhbmQgZW1haWwgbWFpbG1hcCBwbGFjZW1hcmtlcnMKLWNhdCA+ZXhwZWN0IDw8XEVPRgorY2F0ID5leHBlY3QgPDwgRU9GCiBBdXRob3IgQ1RPIDxjdG9AY29vbXBhbnkueHg+IG1hcHMgdG8gQ1RPIDxjdG9AY29tcGFueS54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAogQXV0aG9yIGNsYXVzIDxtZUBjb21wYW55Lnh4PiBtYXBzIHRvIFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKIEF1dGhvciBzYW50YSA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3IgbmljazIgPG5pY2syQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKIEF1dGhvciBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiBtYXBzIHRvIE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3IgbmljazEgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAotQXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IG1hcHMgdG8gQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitBdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IG1hcHMgdG8gJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCkBAIC00MTIsMTQgKzQxMiw0MiBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDxcRU9GCitjYXQgPmV4cGVjdCA8PCBFT0YKK0F1dGhvciBlbWFpbCBjdG9AY29vbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgY3RvCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgbWVAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBtZQorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIG1lQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgbWUKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBuaWNrMkBjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IG5pY2syCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgYnVnc0Bjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGJ1Z3MKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBidWdzQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgYnVncworQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIGF1dGhvckBleGFtcGxlLmNvbSBoYXMgbG9jYWwtcGFydCBhdXRob3IKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAobG9jYWwtcGFydCBlbWFpbCBhZGRyZXNzKScgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJBdXRob3IgZW1haWwgJWFlIGhhcyBsb2NhbC1wYXJ0ICVhbCVuQ29tbWl0dGVyIGVtYWlsICVjZSBoYXMgbG9jYWwtcGFydCAlY2wlbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwgRU9GCiBBdXRob3I6IENUTyA8Y3RvQGNvbXBhbnkueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgogQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KIEF1dGhvcjogU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+Ci1BdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgd2l0aCAtLXVzZS1tYWlsbWFwJyAnCkBAIC00MjcsMTQgKzQ1NSwxNCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDxcRU9GCitjYXQgPmV4cGVjdCA8PCBFT0YKIEF1dGhvcjogQ1RPIDxjdG9AY29tcGFueS54eD4KIEF1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KIEF1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KIEF1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CiBBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgogQXV0aG9yOiBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KLUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCB3aXRoIGxvZy5tYWlsbWFwJyAnCkBAIC00NDMsMjggKzQ3MSwyOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cubWFpbG1hcD1mYWxzZSBkaXNhYmxlcyBtYWlsbWFwJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKIAlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgogCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgogCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+Ci0JQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUF1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJRU9GCiAJZ2l0IC1jIGxvZy5tYWlsbWFwPUZhbHNlIGxvZyB8IGdyZXAgQXV0aG9yID4gYWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXVzZS1tYWlsbWFwIGRpc2FibGVzIG1haWxtYXAnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QgPDwtIEVPRiAmJgogCUF1dGhvcjogQ1RPIDxjdG9AY29vbXBhbnkueHg+CiAJQXV0aG9yOiBjbGF1cyA8bWVAY29tcGFueS54eD4KIAlBdXRob3I6IHNhbnRhIDxtZUBjb21wYW55Lnh4PgogCUF1dGhvcjogbmljazIgPG5pY2syQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgogCUF1dGhvcjogbmljazEgPGJ1Z3NAY29tcGFueS54eD4KLQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIAlFT0YKIAlnaXQgbG9nIC0tbm8tdXNlLW1haWxtYXAgfCBncmVwIEF1dGhvciA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTUwMCw4ICs1MjgsOCBAQAogJwogCiAjIGdpdCBibGFtZQotY2F0ID5leHBlY3QgPDxcRU9GCi1eT0JKSSAoQSBVIFRob3IgICAgIERBVEUgMSkgb25lCitjYXQgPmV4cGVjdCA8PEVPRgorXk9CSkkgKCRHSVRfQVVUSE9SX05BTUUgICAgIERBVEUgMSkgb25lCiBPQkpJRCAoU29tZSBEdWRlICAgIERBVEUgMikgdHdvCiBPQkpJRCAoT3RoZXIgQXV0aG9yIERBVEUgMykgdGhyZWUKIE9CSklEIChPdGhlciBBdXRob3IgREFURSA0KSBmb3VyCmRpZmYgLS1naXQgYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaCBiL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCmluZGV4IGY0MmE2OWYuLjJmMjUxYjIgMTAwNzU1Ci0tLSBhL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCisrKyBiL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCkBAIC02NDAsNyArNjQwLDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PW5vbmV4aXN0YW50KSBiZWNvbWVzIGVtcHR5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1ub25leGlzdGVudCkgYmVjb21lcyBlbXB0eScgJwogCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJ4JSh0cmFpbGVyczprZXk9TmFja2VkLWJ5KXgiID5hY3R1YWwgJiYKIAllY2hvICJ4eCIgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKZGlmZiAtLWdpdCBhL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaCBiL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaAppbmRleCA3ZjkwZjU4Li41M2E0YWYzIDEwMDc1NQotLS0gYS90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2gKKysrIGIvdC90NDIxMy1sb2ctdGFiZXhwYW5kLnNoCkBAIC0zNiw3ICszNiw3IEBACiAJZXNhYwogCiAJIyBQcmVmaXggdGhlIG91dHB1dCB3aXRoIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBhbmQKLQkjIHJlcGxhY2UgU1Agd2l0aCBhIGRvdCBib3RoIGluIHRoZSBleHBlY3RlIGFuZCBhY3R1YWwgb3V0cHV0CisJIyByZXBsYWNlIFNQIHdpdGggYSBkb3QgYm90aCBpbiB0aGUgZXhwZWN0ZWQgYW5kIGFjdHVhbCBvdXRwdXQKIAkjIHNvIHRoYXQgdGVzdF9jbXAgd291bGQgc2hvdyB0aGUgZGlmZmVyZW5jZSB0b2dldGhlciB3aXRoIHRoZQogCSMgYnJlYWthZ2UgaW4gYSB3YXkgZWFzaWVyIHRvIGNvbnN1bWUgYnkgdGhlIGRlYnVnZ2luZyB1c2VyLgogCXsKZGlmZiAtLWdpdCBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2ggYi90L3Q0MjE0LWxvZy1ncmFwaC1vY3RvcHVzLnNoCmluZGV4IDNhZThlNTEuLjQwZDI3ZGIgMTAwNzU1Ci0tLSBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2gKKysrIGIvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaApAQCAtMjYsMTUgKzI2LDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlLCBubyBjb2xvcicgJwogCWNhdCA+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+MyAmJiB0ZXN0X2NvbW1pdCAxX0YgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfciAtbSAxX0cgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcCAtbSAxX0ggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMV9ICisJfFwKKwl8ICogICAxX0cKKwl8IHxcCisJfCB8ICogMV9GCisJfCAqIHwgMV9FCisJfC98IHwKKwl8ICogfCAxX0QKKwkqIHwgfCAxX0MKKwl8LyAvCisJKiAvIDFfQgorCXwvCisJKiAxX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UgZm9sbG93aW5nIG5vcm1hbCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAyX3AgJiYKKwl0ZXN0X2NvbW1pdCAyX0EgJiYKKwl0ZXN0X2NvbW1pdCAyX0IgJiYKKwl0ZXN0X2NvbW1pdCAyX0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMl9xIEBeXiAmJgorCXRlc3RfY29tbWl0IDJfRCAmJgorCXRlc3RfY29tbWl0IDJfRSAmJgorCWdpdCBjaGVja291dCAtYiAyX3IgQF4gJiYgdGVzdF9jb21taXQgMl9GICYmCisJZ2l0IGNoZWNrb3V0IDJfcSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDJfciAtbSAyX0cgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAyX3BeIC1tIDJfSCAmJgorCWdpdCBjaGVja291dCAtYiAyX3MgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcSAtbSAyX0ogJiYKKwlnaXQgY2hlY2tvdXQgMl9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcyAtbSAyX0sgJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMl9LCisJfFwKKwl8ICogICAyX0oKKwl8IHxcCisJfCB8ICogICAyX0gKKwl8IHwgfFwKKwl8IHwgKiB8IDJfRworCXwgfC98IHwKKwl8IHwgKiB8IDJfRgorCXwgKiB8IHwgMl9FCisJfCB8LyAvCisJfCAqIHwgMl9ECisJKiB8IHwgMl9DCisJfCB8LworCXwvfAorCSogfCAyX0IKKwl8LworCSogMl9BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbmVzdGVkIHJpZ2h0LXNrZXdlZCBtZXJnZSBmb2xsb3dpbmcgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gM19wICYmCisJdGVzdF9jb21taXQgM19BICYmCisJZ2l0IGNoZWNrb3V0IC1iIDNfcSAmJgorCXRlc3RfY29tbWl0IDNfQiAmJgorCXRlc3RfY29tbWl0IDNfQyAmJgorCWdpdCBjaGVja291dCAtYiAzX3IgQF4gJiYKKwl0ZXN0X2NvbW1pdCAzX0QgJiYKKwlnaXQgY2hlY2tvdXQgM19xICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfciAtbSAzX0UgJiYKKwlnaXQgY2hlY2tvdXQgM19wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfcSAtbSAzX0YgJiYKKwlnaXQgY2hlY2tvdXQgM19yICYmIHRlc3RfY29tbWl0IDNfRyAmJgorCWdpdCBjaGVja291dCAzX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19yIC1tIDNfSCAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19wIC1tIDNfSiAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAzX0oKKwl8XAorCXwgKiAgIDNfSAorCXwgfFwKKwl8IHwgKiAzX0cKKwl8ICogfCAzX0YKKwl8L3wgfAorCXwgKiB8IDNfRQorCXwgfFx8CisJfCB8ICogM19ECisJfCAqIHwgM19DCisJfCB8LworCXwgKiAzX0IKKwl8LworCSogM19BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggcmlnaHQtc2tld2VkIG1lcmdlIGZvbGxvd2luZyBhIGxlZnQtc2tld2VkIG9uZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA0X3AgJiYKKwl0ZXN0X2NvbW1pdCA0X0EgJiYKKwl0ZXN0X2NvbW1pdCA0X0IgJiYKKwl0ZXN0X2NvbW1pdCA0X0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9xIEBeXiAmJiB0ZXN0X2NvbW1pdCA0X0QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9yIDRfcF4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9xIC1tIDRfRSAmJgorCWdpdCBjaGVja291dCAtYiA0X3MgNF9wXl4gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA0X3IgLW0gNF9GICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNF9wIC1tIDRfRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9zIC1tIDRfSCAmJgorCisJY2hlY2tfZ3JhcGggLS1kYXRlLW9yZGVyIDw8LVxFT0YKKwkqICAgNF9ICisJfFwKKwl8ICogICA0X0cKKwl8IHxcCisJfCAqIHwgNF9GCisJfC98IHwKKwl8ICogfCAgIDRfRQorCXwgfFwgXAorCXwgfCAqIHwgNF9ECisJfCB8LyAvCisJfC98IHwKKwl8IHwgKiA0X0MKKwl8IHwvCisJfCAqIDRfQgorCXwvCisJKiA0X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBvY3RvcHVzIG1lcmdlIHdpdGggY29sdW1uIGpvaW5pbmcgaXRzIHBlbnVsdGltYXRlIHBhcmVudCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA1X3AgJiYKKwl0ZXN0X2NvbW1pdCA1X0EgJiYKKwlnaXQgYnJhbmNoIDVfcSAmJgorCWdpdCBicmFuY2ggNV9yICYmCisJdGVzdF9jb21taXQgNV9CICYmCisJZ2l0IGNoZWNrb3V0IDVfcSAmJiB0ZXN0X2NvbW1pdCA1X0MgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmIHRlc3RfY29tbWl0IDVfRCAmJgorCWdpdCBjaGVja291dCA1X3AgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3EgNV9yIC1tIDVfRSAmJgorCWdpdCBjaGVja291dCA1X3EgJiYgdGVzdF9jb21taXQgNV9GICYmCisJZ2l0IGNoZWNrb3V0IC1iIDVfcyA1X3BeICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9wIDVfcSAtbSA1X0cgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9zIC1tIDVfSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICA1X0gKKwl8XAorCXwgKi0uICAgNV9HCisJfCB8XCBcCisJfCB8IHwgKiA1X0YKKwl8IHwgKiB8ICAgNV9FCisJfCB8L3xcIFwKKwl8IHxffC8gLworCXwvfCB8IC8KKwl8IHwgfC8KKwkqIHwgfCA1X0QKKwl8IHwgKiA1X0MKKwl8IHwvCisJfC98CisJfCAqIDVfQgorCXwvCisJKiA1X0EKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaCBiL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCmluZGV4IGQ0MmIzZWYuLjVhM2U0ZTMgMTAwNzU1Ci0tLSBhL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCisrKyBiL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCkBAIC04NSw3ICs4NSw3IEBACiAJbnVtX2NvbW1pdHM6ICQxCiAJY2h1bmtzOiBvaWRfZmFub3V0IG9pZF9sb29rdXAgY29tbWl0X21ldGFkYXRhJE9QVElPTkFMCiAJRU9GCi0JZ2l0IGNvbW1pdC1ncmFwaCByZWFkID5vdXRwdXQgJiYKKwl0ZXN0LXRvb2wgcmVhZC1ncmFwaCA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogfQogCkBAIC02NjAsNyArNjYwLDcgQEAKIAkJZ2l0IGNvbW1pdC10cmVlIC1wICIkYnJva2VuIiAtbSAiZ29vZCIgIiR0cmVlIiA+Z29vZCAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyBcCiAJCQk8Z29vZCAyPnRlc3RfZXJyICYmCi0JCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IiIHRlc3RfZXJyCisJCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBwYXJzZSBjb21taXQiIHRlc3RfZXJyCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2ggYi90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2gKaW5kZXggYzcyY2EwNC4uY2QyZjg3YiAxMDA3NTUKLS0tIGEvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCisrKyBiL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaApAQCAtMTQ3LDYgKzE0NywyMSBAQAogCiBjb21wYXJlX3Jlc3VsdHNfd2l0aF9taWR4ICJ0d28gcGFja3MiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciB3cml0ZSAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLXByb2dyZXNzIHdyaXRlIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIHdyaXRlIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1vcmUgcGFja3MnICcKIAlmb3IgaiBpbiAkKHRlc3Rfc2VxIDExIDIwKQogCWRvCkBAIC0xNjksNiArMTg0LDIxIEBACiAJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwogIyB1c2FnZTogY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgPHBvcz4gPGRhdGE+IDxvYmpkaXI+IDxzdHJpbmc+CiBjb3JydXB0X21pZHhfYW5kX3ZlcmlmeSgpIHsKIAlQT1M9JDEgJiYKQEAgLTI4NCw2ICszMTQsMjEgQEAKIAkJImdpdCAtYyBjb3JlLm11bHRpcGFja2luZGV4PXRydWUgZnNjayIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tcHJvZ3Jlc3MgcmVwYWNrIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1uby1wcm9ncmVzcyByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgcmVtb3ZlcyBtdWx0aS1wYWNrLWluZGV4JyAnCiAJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9wYWNrL211bHRpLXBhY2staW5kZXggJiYKIAlHSVRfVEVTVF9NVUxUSV9QQUNLX0lOREVYPTAgZ2l0IHJlcGFjayAtYWRmICYmCkBAIC00MTMsNiArNDU4LDMwIEBACiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCAtLXByb2dyZXNzIGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggLS1uby1wcm9ncmVzcyBleHBpcmUgMj5lcnIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSByZW1vdmVzIHVucmVmZXJlbmNlZCBwYWNrcycgJwogCSgKIAkJY2QgZHVwICYmCmRpZmYgLS1naXQgYS90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaCBiL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoCmluZGV4IDExNWFhYmQuLmMyNDgyMzQgMTAwNzU1Ci0tLSBhL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoCisrKyBiL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoCkBAIC0yNSw3ICsyNSw3IEBACiAJbnVtX2NvbW1pdHM6ICQxCiAJY2h1bmtzOiBvaWRfZmFub3V0IG9pZF9sb29rdXAgY29tbWl0X21ldGFkYXRhCiAJRU9GCi0JZ2l0IGNvbW1pdC1ncmFwaCByZWFkID5vdXRwdXQgJiYKKwl0ZXN0LXRvb2wgcmVhZC1ncmFwaCA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogfQogCmRpZmYgLS1naXQgYS90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaCBiL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCmluZGV4IDQ0MzA5NTYuLjRkMWUwYzMgMTAwNzU1Ci0tLSBhL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCisrKyBiL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCkBAIC0xNjMsNyArMTYzLDcgQEAKICMgdXBkYXRlIHBhcmVudDEncyBmb28gKHdoaWNoIGlzIG91ciB1cHN0cmVhbSkKIHRlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyB1cHN0cmVhbSBmb28KIAotIyB1cHNyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCisjIHVwc3RyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCiB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgc2ltcGxlIG1hc3RlcgogCiAjIG1hc3RlciBhbmQgZm9vIGFyZSB1cGRhdGVkCmRpZmYgLS1naXQgYS90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoIGIvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaAppbmRleCA4ZWQ1OGQyLi5lOGY2ZDIzIDEwMDc1NQotLS0gYS90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoCisrKyBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotdGVzdF9kZXNjcmlwdGlvbj0nYXZvaWRpbmcgY29uZmxpY3RpbmcgdXBkYXRlIHRocnUgc3ltcmVmIGFsaWFzaW5nJwordGVzdF9kZXNjcmlwdGlvbj0nYXZvaWRpbmcgY29uZmxpY3RpbmcgdXBkYXRlIHRocm91Z2ggc3ltcmVmIGFsaWFzaW5nJwogCiAuIC4vdGVzdC1saWIuc2gKIApkaWZmIC0tZ2l0IGEvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2ggYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaAppbmRleCAwNGIzNGM0Li4zOGU2ZjczIDEwMDc1NQotLS0gYS90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaAorKysgYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaApAQCAtMTE1LDcgKzExNSw3IEBACiAKIAlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vdXBzdHJlYW0gd29ya2JlbmNoICYmCiAJZ2l0IC1DIHBhcmVudC93b3JrYmVuY2ggcmVtb3RlIGFkZCB1cCAuLi8uLi91cHN0cmVhbSAmJgotCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW91bGUiICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCiAKIAl0ZXN0X2NvbW1pdCAtQyBwYXJlbnQvd29ya2JlbmNoIHR3byAmJgogCWdpdCAtQyBwYXJlbnQgYWRkIHdvcmtiZW5jaCAmJgpkaWZmIC0tZ2l0IGEvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoIGIvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoCmluZGV4IDc5ZjdiNjUuLmZlYTU2Y2QgMTAwNzU1Ci0tLSBhL3QvdDU2MTYtcGFydGlhbC1jbG9uZS5zaAorKysgYi90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2gKQEAgLTQ2LDYgKzQ2LDE0IEBACiAJdGVzdCAiJChnaXQgLUMgcGMxIGNvbmZpZyAtLWxvY2FsIHJlbW90ZS5vcmlnaW4ucGFydGlhbGNsb25lZmlsdGVyKSIgPSAiYmxvYjpub25lIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCAucHJvbWlzb3IgZmlsZSBjb250YWlucyByZWZzIGZldGNoZWQnICcKKwlscyBwYzEvLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnByb21pc29yID5wcm9taXNvcmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHByb21pc29ybGlzdCAmJgorCWdpdCAtQyBzcnYuYmFyZSByZXYtbGlzdCBIRUFEID5oZWFkaGFzaCAmJgorCWdyZXAgIiQoY2F0IGhlYWRoYXNoKSBIRUFEIiAkKGNhdCBwcm9taXNvcmxpc3QpICYmCisJZ3JlcCAiJChjYXQgaGVhZGhhc2gpIHJlZnMvaGVhZHMvbWFzdGVyIiAkKGNhdCBwcm9taXNvcmxpc3QpCisnCisKICMgY2hlY2tvdXQgbWFzdGVyIHRvIGZvcmNlIGR5bmFtaWMgb2JqZWN0IGZldGNoIG9mIGJsb2JzIGF0IEhFQUQuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY2hlY2tvdXQgd2l0aCBkeW5hbWljIG9iamVjdCBmZXRjaCcgJwogCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IEhFQUQgPm9ic2VydmVkICYmCkBAIC0yOTYsNiArMzA0LDc2IEBACiAJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiIgZXJyCiAnCiAKK3NldHVwX3RyaWFuZ2xlICgpIHsKKwlybSAtcmYgYmlnLWJsb2IudHh0IHNlcnZlciBjbGllbnQgcHJvbWlzb3ItcmVtb3RlICYmCisKKwlwcmludGYgImxpbmUgJWRcbiIgJCh0ZXN0X3NlcSAxIDEwMCkgPmJpZy1ibG9iLnR4dCAmJgorCisJIyBDcmVhdGUgYSBzZXJ2ZXIgd2l0aCAyIGNvbW1pdHM6IGEgY29tbWl0IHdpdGggYSBiaWcgYmxvYiBhbmQgYSBjaGlsZAorCSMgY29tbWl0IHdpdGggYW4gaW5jcmVtZW50YWwgY2hhbmdlLiBBbHNvLCBjcmVhdGUgYSBwYXJ0aWFsIGNsb25lCisJIyBjbGllbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBmaXJzdCBjb21taXQuCisJZ2l0IGluaXQgc2VydmVyICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwljcCBiaWctYmxvYi50eHQgc2VydmVyICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYmlnLWJsb2IudHh0ICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0gImluaXRpYWwiICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj10cmVlOjAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKwllY2hvIGFub3RoZXIgbGluZSA+PnNlcnZlci9iaWctYmxvYi50eHQgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtYW0gImFwcGVuZCBsaW5lIHRvIGJpZyBibG9iIiAmJgorCisJIyBDcmVhdGUgYSBwcm9taXNvciByZW1vdGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBibG9iIGZyb20gdGhlIGZpcnN0CisJIyBjb21taXQsIGFuZCBzZXQgaXQgYXMgdGhlIHByb21pc29yIHJlbW90ZSBvZiBjbGllbnQuIFRodXMsIHdoZW5ldmVyCisJIyB0aGUgY2xpZW50IGxhenkgZmV0Y2hlcywgdGhlIGxhenkgZmV0Y2ggd2lsbCBzdWNjZWVkIG9ubHkgaWYgaXQgaXMKKwkjIGZvciB0aGlzIGJsb2IuCisJZ2l0IGluaXQgcHJvbWlzb3ItcmVtb3RlICYmCisJdGVzdF9jb21taXQgLUMgcHJvbWlzb3ItcmVtb3RlIG9uZSAmJiAjIHNvIHRoYXQgcmVmIGFkdmVydGlzZW1lbnQgaXMgbm90IGVtcHR5CisJZ2l0IC1DIHByb21pc29yLXJlbW90ZSBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHByb21pc29yLXJlbW90ZSBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDxiaWctYmxvYi50eHQgJiYKKwlnaXQgLUMgY2xpZW50IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAiZmlsZTovLyQocHdkKS9wcm9taXNvci1yZW1vdGUiCit9CisKKyMgTkVFRFNXT1JLOiBUaGUgdGVzdHMgYmVnaW5uaW5nIHdpdGggImZldGNoIGxhenktZmV0Y2hlcyIgYmVsb3cgb25seQorIyB0ZXN0IHRoYXQgImZldGNoIiBhdm9pZCBmZXRjaGluZyB0cmVlcyBhbmQgYmxvYnMsIGJ1dCBub3QgY29tbWl0cyBvcgorIyB0YWdzLiBSZXZpc2l0IHRoaXMgaWYgR2l0IGlzIGV2ZXIgdGF1Z2h0IHRvIHN1cHBvcnQgcGFydGlhbCBjbG9uZXMKKyMgd2l0aCBjb21taXRzIGFuZC9vciB0YWdzIGZpbHRlcmVkIG91dC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMnICcKKwlzZXR1cF90cmlhbmdsZSAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgYmxvYiAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBjbGllbnQgbmVlZGVkIHRvIGZldGNoIHRoZSBkZWx0YSBiYXNlCisJIyB0byByZXNvbHZlIHRoZSBkZWx0YS4KKwlnaXQgaGFzaC1vYmplY3QgYmlnLWJsb2IudHh0ID5oYXNoICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoKSIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMsIHByb3RvY29sIHYyJyAnCisJc2V0dXBfdHJpYW5nbGUgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIC0tbG9jYWwgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgLS1sb2NhbCBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgYmxvYiAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGF0IHByb3RvY29sIHZlcnNpb24gMiB3YXMgdXNlZC4KKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiB0cmFjZSAmJgorCisJIyBWZXJpZnkgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY2xpZW50IG5lZWRlZCB0byBmZXRjaCB0aGUgZGVsdGEgYmFzZQorCSMgdG8gcmVzb2x2ZSB0aGUgZGVsdGEuCisJZ2l0IGhhc2gtb2JqZWN0IGJpZy1ibG9iLnR4dCA+aGFzaCAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaCkiIHRyYWNlCisnCisKIC4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCiBzdGFydF9odHRwZAogCmRpZmYgLS1naXQgYS90L3Q1NzAyLXByb3RvY29sLXYyLnNoIGIvdC90NTcwMi1wcm90b2NvbC12Mi5zaAppbmRleCBhZTkxNzVjLi5lNzMwNjdkIDEwMDc1NQotLS0gYS90L3Q1NzAyLXByb3RvY29sLXYyLnNoCisrKyBiL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKQEAgLTMyLDcgKzMyLDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc21lbnQgaXMgZmlsdGVyZWQgd2l0aCBscy1yZW1vdGUgdXNpbmcgcHJvdG9jb2wgdjInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCiAKIAlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzZW1lbnQgaXMgZmlsdGVyZWQgd2l0aCBscy1yZW1vdGUgdXNpbmcgcHJvdG9jb2wgdjInICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKIAogCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXApAQCAtMjI1LDcgKzIyNSw3IEBACiAJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc21lbnQgaXMgZmlsdGVyZWQgZHVyaW5nIGZldGNoIHVzaW5nIHByb3RvY29sIHYyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCBkdXJpbmcgZmV0Y2ggdXNpbmcgcHJvdG9jb2wgdjInICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKIAogCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IHRocmVlICYmCkBAIC02ODIsOSArNjgyLDkgQEAKIAlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyBjbGllbnRfYnJhbmNoID5leHBlY3QgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKLQkjIENsaWVudCBkaWRudCByZXF1ZXN0IHRvIHVzZSBwcm90b2NvbCB2MgorCSMgQ2xpZW50IGRpZCBub3QgcmVxdWVzdCB0byB1c2UgcHJvdG9jb2wgdjIKIAkhIGdyZXAgIkdpdC1Qcm90b2NvbDogdmVyc2lvbj0yIiBsb2cgJiYKLQkjIFNlcnZlciBkaWRudCByZXNwb25kIHVzaW5nIHByb3RvY29sIHYyCisJIyBTZXJ2ZXIgZGlkIG5vdCByZXNwb25kIHVzaW5nIHByb3RvY29sIHYyCiAJISBncmVwICJnaXQ8IHZlcnNpb24gMiIgbG9nCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKaW5kZXggY2ZiNzRkMC4uZWJkYzQ5YyAxMDA3NTUKLS0tIGEvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKKysrIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKQEAgLTEwOSwzMSArMTA5LDM1IEBACiBFT0YKIAogIyB3ZSBkb24ndCB0ZXN0IHJlbGF0aXZlIGhlcmUKLXRlc3RfZm9ybWF0IGF1dGhvciAlYW4lbiVhZSVuJWFkJW4lYUQlbiVhdCA8PEVPRgordGVzdF9mb3JtYXQgYXV0aG9yICVhbiVuJWFlJW4lYWwlbiVhZCVuJWFEJW4lYXQgPDxFT0YKIGNvbW1pdCAkaGVhZDIKLUEgVSBUaG9yCi1hdXRob3JAZXhhbXBsZS5jb20KKyRHSVRfQVVUSE9SX05BTUUKKyRHSVRfQVVUSE9SX0VNQUlMCiskVEVTVF9BVVRIT1JfTE9DQUxOQU1FCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCiBjb21taXQgJGhlYWQxCi1BIFUgVGhvcgotYXV0aG9yQGV4YW1wbGUuY29tCiskR0lUX0FVVEhPUl9OQU1FCiskR0lUX0FVVEhPUl9FTUFJTAorJFRFU1RfQVVUSE9SX0xPQ0FMTkFNRQogVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKIFRodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAogMTExMjkxMTk5MwogRU9GCiAKLXRlc3RfZm9ybWF0IGNvbW1pdHRlciAlY24lbiVjZSVuJWNkJW4lY0QlbiVjdCA8PEVPRgordGVzdF9mb3JtYXQgY29tbWl0dGVyICVjbiVuJWNlJW4lY2wlbiVjZCVuJWNEJW4lY3QgPDxFT0YKIGNvbW1pdCAkaGVhZDIKLUMgTyBNaXR0ZXIKLWNvbW1pdHRlckBleGFtcGxlLmNvbQorJEdJVF9DT01NSVRURVJfTkFNRQorJEdJVF9DT01NSVRURVJfRU1BSUwKKyRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCiBUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKIDExMTI5MTE5OTMKIGNvbW1pdCAkaGVhZDEKLUMgTyBNaXR0ZXIKLWNvbW1pdHRlckBleGFtcGxlLmNvbQorJEdJVF9DT01NSVRURVJfTkFNRQorJEdJVF9DT01NSVRURVJfRU1BSUwKKyRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCiBUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKIDExMTI5MTE5OTMKQEAgLTQxMCw3ICs0MTQsNyBAQAogCXRlc3RfdGljayAmJgogCUM9JChHSVRfQVVUSE9SX0VNQUlMPSBnaXQgY29tbWl0LXRyZWUgSEVBRF57dHJlZX0gPC9kZXYvbnVsbCkgJiYKIAlBPSQoZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVhbiwlYWUsJWFkJW4gLXMgJEMpICYmCi0JdmVyYm9zZSB0ZXN0ICIkQSIgPSAiQSBVIFRob3IsLFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwIgorCXZlcmJvc2UgdGVzdCAiJEEiID0gIiRHSVRfQVVUSE9SX05BTUUsLFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgxKScgJwpAQCAtNDk1LDcgKzQ5OSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBpZGVudGl0eScgJwotCWVjaG8gIkMgTyBNaXR0ZXI6Y29tbWl0dGVyQGV4YW1wbGUuY29tIiA+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+PiBleHBlY3RlZCAmJgpkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAppbmRleCAyN2M3ZGU5Li4wYzllM2MyIDEwMDc1NQotLS0gYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAorKysgYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApAQCAtMTQsODUgKzE0LDkwIEBACiBHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMTItMTIgMjM6Mjg6MDAgKzAxMDAiCiBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHRlc3RzIiAnCi1lY2hvIDEgPiBhMSAmJgotZ2l0IGFkZCBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAwIiBnaXQgY29tbWl0IC1tIDEgYTEgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzJyAnCisJZWNobyAxID5hMSAmJgorCWdpdCBhZGQgYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDAiIGdpdCBjb21taXQgLW0gMSBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgQSBtYXN0ZXIgJiYKLWVjaG8gQSA+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+JjEgJiYKIAl0ZXN0X2kxOG5ncmVwICJub3QgYSBjb21taXQiIG91dHB1dAogJwpkaWZmIC0tZ2l0IGEvdC90NzAwNC10YWcuc2ggYi90L3Q3MDA0LXRhZy5zaAppbmRleCA4MGViMTNkLi40YTA5YmVhIDEwMDc1NQotLS0gYS90L3Q3MDA0LXRhZy5zaAorKysgYi90L3Q3MDA0LXRhZy5zaApAQCAtMjI3LDEwICsyMjcsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSd0cnlpbmcgdG8gZGVsZXRlIHR3byB0YWdzLCBleGlzdGluZyBhbmQgbm90LCBzaG91bGQgZmFpbCBpbiB0aGUgMm5kJyAnCiAJdGFnX2V4aXN0cyBteXRhZyAmJgotCSEgdGFnX2V4aXN0cyBteWhlYWQgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnIGFub3RoZXJ0YWcgJiYKKwkhIHRhZ19leGlzdHMgbm9uZXhpc3Rpbmd0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnIG5vbmV4aXN0aW5ndGFnICYmCiAJISB0YWdfZXhpc3RzIG15dGFnICYmCi0JISB0YWdfZXhpc3RzIG15aGVhZAorCSEgdGFnX2V4aXN0cyBub25leGlzdGluZ3RhZwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnlpbmcgdG8gZGVsZXRlIGFuIGFscmVhZHkgZGVsZXRlZCB0YWcgc2hvdWxkIGZhaWwnIFwKQEAgLTE0MjAsNyArMTQyMCw3IEBACiBnZXRfdGFnX2hlYWRlciByZXVzZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgPj4gZXhwZWN0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLQknb3ZlcndyaXRpbmcgYW4gYW5ub3RlZCB0YWcgc2hvdWxkIHVzZSBpdHMgcHJldmlvdXMgYm9keScgJworCSdvdmVyd3JpdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHNob3VsZCB1c2UgaXRzIHByZXZpb3VzIGJvZHknICcKIAlnaXQgdGFnIC1hIC1tICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgcmV1c2UgJiYKIAlHSVRfRURJVE9SPXRydWUgZ2l0IHRhZyAtZiAtYSByZXVzZSAmJgogCWdldF90YWdfbXNnIHJldXNlID5hY3R1YWwgJiYKZGlmZiAtLWdpdCBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKaW5kZXggOWQxYWJlNS4uNzQ3Njc4MSAxMDA3NTUKLS0tIGEvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKKysrIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKQEAgLTEzNCw2ICsxMzQsMjEgQEAKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBsZWF2ZXMgd29ya3RyZWUgYWxvbmUnICcKKwl0ZXN0X2NvbW1pdCBrZWVwLW1lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUga2VlcC1tZS50ICYmCisJcm0ga2VlcC1tZS50ICYmCisKKwk6IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIGtlZXAtbWUudCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgJiYKKworCTogbm90IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSwgYSBkZWxldGlvbiBpcyBzdGFnZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGtlZXAtbWUudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgXAorCQktLWRpZmYtZmlsdGVyPUQgLS0ga2VlcC1tZS50CisnCisKICNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSBhZGRzIGZpbGUnIGZhbHNlCiAjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgdXBkYXRlcyBmaWxlJyBmYWxzZQogI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHJlbW92ZXMgZmlsZScgZmFsc2UKZGlmZiAtLWdpdCBhL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaCBiL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaAppbmRleCAwNDFlMzE5Li44ZjA3N2JlIDEwMDc1NQotLS0gYS90L3Q3MDMwLXZlcmlmeS10YWcuc2gKKysrIGIvdC90NzAzMC12ZXJpZnktdGFnLnNoCkBAIC00NCw4ICs0NCw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdjcmVhdGUgc2lnbmVkIHRhZ3MgeDUwOSAnICcKIAl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKIAl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKLQllY2hvIDkgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIm5pbmV0aCBncGdzbS1zaWduZWQiICYmCi0JZ2l0IHRhZyAtcyAtbSBuaW5ldGggbmluZXRoLXNpZ25lZC14NTA5CisJZWNobyA5ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJuaW50aCBncGdzbS1zaWduZWQiICYmCisJZ2l0IHRhZyAtcyAtbSBuaW50aCBuaW50aC1zaWduZWQteDUwOQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMnICcKQEAgLTgwLDEwICs4MCwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcyB4NTA5JyAnCi0JZ2l0IHZlcmlmeS10YWcgbmluZXRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ2l0IHZlcmlmeS10YWcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKIAlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKIAkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCi0JZWNobyBuaW5ldGgtc2lnbmVkLXg1MDkgT0sKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdkZXRlY3QgZnVkZ2VkIHNpZ25hdHVyZScgJwpAQCAtMTI3LDEwICsxMjcsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IHNpZ25hdHVyZXMgd2l0aCAtLXJhdyB4NTA5JyAnCi0JZ2l0IHZlcmlmeS10YWcgLS1yYXcgbmluZXRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ2l0IHZlcmlmeS10YWcgLS1yYXcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKIAlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKIAkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCi0JZWNobyBuaW5ldGgtc2lnbmVkLXg1MDkgT0sKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnkgbXVsdGlwbGUgdGFncycgJwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBtdWx0aXBsZSB0YWdzIHg1MDknICcKLQl0YWdzPSJzZXZlbnRoLXNpZ25lZCBuaW5ldGgtc2lnbmVkLXg1MDkiICYmCisJdGFncz0ic2V2ZW50aC1zaWduZWQgbmludGgtc2lnbmVkLXg1MDkiICYmCiAJZm9yIGkgaW4gJHRhZ3MKIAlkbwogCQlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkaSB8fCByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvdC90NzEwNS1yZXNldC1wYXRjaC5zaCBiL3QvdDcxMDUtcmVzZXQtcGF0Y2guc2gKaW5kZXggYmQxMGE5Ni4uZmMyYTZjZiAxMDA3NTUKLS0tIGEvdC90NzEwNS1yZXNldC1wYXRjaC5zaAorKysgYi90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoCkBAIC0zOCw2ICszOCwyNyBAQAogCXRlc3RfaTE4bmdyZXAgIkFwcGx5IiBvdXRwdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9JyAnCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9ID5vdXRwdXQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIHBhcmVudCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gKGJsb2IgZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgYWFhYWFhYWEgKHVua25vd24gZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIGFhYWFhYWFhICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKICMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCiAjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCiAjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KZGlmZiAtLWdpdCBhL3QvdDc1MDgtc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKaW5kZXggNGU2NzZjZC4uNDgyY2UzNSAxMDA3NTUKLS0tIGEvdC90NzUwOC1zdGF0dXMuc2gKKysrIGIvdC90NzUwOC1zdGF0dXMuc2gKQEAgLTE1NzEsNyArMTU3MSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWRfd2l0aG91dF9zdGFzaCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYWRkaXRpb25uYWwgaW5mbyBpZiBubyBzdGFzaCBlbnRyaWVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhZGRpdGlvbmFsIGluZm8gaWYgbm8gc3Rhc2ggZW50cmllcycgJwogCWdpdCBzdGFzaCBjbGVhciAmJgogCWdpdCAtYyBzdGF0dXMuc2hvd1N0YXNoPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZF93aXRob3V0X3N0YXNoIGFjdHVhbApkaWZmIC0tZ2l0IGEvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2ggYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaAppbmRleCBmMTkyMDJiLi42NjAyNzkwIDEwMDc1NQotLS0gYS90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaAorKysgYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaApAQCAtMTIzNCw3ICsxMjM0LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21tYW5kIHVzaW5nIGNvbW1pdGVyIGluZm9ybWF0aW9uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgY29tbWl0dGVyIGluZm9ybWF0aW9uJyAnCiAJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uaWZFeGlzdHMgImFkZElmRGlmZmVyZW50IiAmJgogCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gXCJcJEdJVF9DT01NSVRURVJfTkFNRSA8XCRHSVRfQ09NTUlUVEVSX0VNQUlMPlwiIiAmJgogCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaCBiL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaAppbmRleCA5OTdkNWZiLi4xZTQ3ZWQyIDEwMDc1NQotLS0gYS90L3Q3NTE5LXN0YXR1cy1mc21vbml0b3Iuc2gKKysrIGIvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlkb25lCiBkb25lCiAKLSMgdGVzdCB0aGF0IHNwbGl0dGluZyB0aGUgaW5kZXggZG9zbid0IGludGVyZmVyZQorIyB0ZXN0IHRoYXQgc3BsaXR0aW5nIHRoZSBpbmRleCBkb2Vzbid0IGludGVyZmVyZQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXR0aW5nIHRoZSBpbmRleCByZXN1bHRzIGluIHRoZSBzYW1lIHN0YXRlJyAnCiAJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCiAJZGlydHlfcmVwbyAmJgpkaWZmIC0tZ2l0IGEvdC90NzUxOS9mc21vbml0b3Itd2F0Y2htYW4gYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgppbmRleCA1NTE0ZWRjLi5kOGU3YTFlIDEwMDc1NQotLS0gYS90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgpAQCAtMjMsNyArMjMsOCBAQAogCiBpZiAoJHZlcnNpb24gPT0gMSkgewogCSMgY29udmVydCBuYW5vc2Vjb25kcyB0byBzZWNvbmRzCi0JJHRpbWUgPSBpbnQgJHRpbWUgLyAxMDAwMDAwMDAwOworCSMgc3VidHJhY3Qgb25lIHNlY29uZCB0byBtYWtlIHN1cmUgd2F0Y2htYW4gd2lsbCByZXR1cm4gYWxsIGNoYW5nZXMKKwkkdGltZSA9IGludCAoJHRpbWUgLyAxMDAwMDAwMDAwKSAtIDE7CiB9IGVsc2UgewogCWRpZSAiVW5zdXBwb3J0ZWQgcXVlcnktZnNtb25pdG9yIGhvb2sgdmVyc2lvbiAnJHZlcnNpb24nLlxuIiAuCiAJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7CkBAIC01NCwxOCArNTUsMTIgQEAKIAkjCiAJIyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlJ3JlIHVzaW5nIHRoZSAic2luY2UiIGdlbmVyYXRvciB0byB1c2UgdGhlCiAJIyByZWNlbmN5IGluZGV4IHRvIHNlbGVjdCBjYW5kaWRhdGUgbm9kZXMgYW5kICJmaWVsZHMiIHRvIGxpbWl0IHRoZQotCSMgb3V0cHV0IHRvIGZpbGUgbmFtZXMgb25seS4gVGhlbiB3ZSdyZSB1c2luZyB0aGUgImV4cHJlc3Npb24iIHRlcm0gdG8KLQkjIGZ1cnRoZXIgY29uc3RyYWluIHRoZSByZXN1bHRzLgotCSMKLQkjIFRoZSBjYXRlZ29yeSBvZiB0cmFuc2llbnQgZmlsZXMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSB3aWxsIGhhdmUgYQotCSMgY3JlYXRpb24gY2xvY2sgKGNjbG9jaykgbmV3ZXIgdGhhbiAkdGltZV90IHZhbHVlIGFuZCB3aWxsIGFsc28gbm90Ci0JIyBjdXJyZW50bHkgZXhpc3QuCisJIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LgogCiAJbXkgJHF1ZXJ5ID0gPDwiCUVORCI7CiAJCVsicXVlcnkiLCAiJGdpdF93b3JrX3RyZWUiLCB7CiAJCQkic2luY2UiOiAkdGltZSwKLQkJCSJmaWVsZHMiOiBbIm5hbWUiXSwKLQkJCSJleHByZXNzaW9uIjogWyJub3QiLCBbImFsbG9mIiwgWyJzaW5jZSIsICR0aW1lLCAiY2Nsb2NrIl0sIFsibm90IiwgImV4aXN0cyJdXV0KKwkJCSJmaWVsZHMiOiBbIm5hbWUiXQogCQl9XQogCUVORAogCQpkaWZmIC0tZ2l0IGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCmluZGV4IDk5N2Y5MGIuLmJkOTQ3NzkgMTAwNzU1Ci0tLSBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAorKysgYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKQEAgLTEyNjAsNyArMTI2MCw3IEBACiAJZ3JlcCAiVG86IGRlZmF1bHRAZXhhbXBsZS5jb20iIHN0ZG91dAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5pZGVudGl0eTogYm9vbCBpZGVudGl0eSB2YXJpYWJsZSBleGlzdGFuY2Ugb3ZlcnJpZGVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5pZGVudGl0eTogYm9vbCBpZGVudGl0eSB2YXJpYWJsZSBleGlzdGVuY2Ugb3ZlcnJpZGVzJyAnCiAJZ2l0IC1jIHNlbmRlbWFpbC5pZGVudGl0eT1jbG91ZCBcCiAJCS1jIHNlbmRlbWFpbC54bWFpbGVyPXRydWUgXAogCQktYyBzZW5kZW1haWwuY2xvdWQueG1haWxlcj1mYWxzZSBcCmRpZmYgLS1naXQgYS90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoIGIvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaAppbmRleCBkYWRjNzBiLi5jYTIyM2RjIDEwMDc1NQotLS0gYS90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoCisrKyBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgIHRoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAogRVhQRUNUX0VORAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgY29uY2F0ZW50YXRpb24gbm90ZXMgd2l0aCBNIGNvbW1hbmQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25jYXRlbmF0aW9uIG5vdGVzIHdpdGggTSBjb21tYW5kJyAnCiAKIAlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCiAJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90OTM1MC1mYXN0LWV4cG9ydC5zaCBiL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKaW5kZXggMmU0ZTIxNC4uZGIwODRmZSAxMDA3NTUKLS0tIGEvdC90OTM1MC1mYXN0LWV4cG9ydC5zaAorKysgYi90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCkBAIC01NDEsNyArNTQxLDcgQEAKIAogIyBORUVEU1dPUks6IG5vdCBqdXN0IGNoZWNrIHJldHVybiBzdGF0dXMsIGJ1dCB2YWxpZGF0ZSB0aGUgb3V0cHV0CiAjIE5vdGUgdGhhdCB0aGVzZSB0ZXN0cyBETyBOT1RISU5HIG90aGVyIHRoYW4gcHJpbnQgYSB3YXJuaW5nIHRoYXQKLSMgdGhleSBhcmUgb21taXR0aW5nIHRoZSBvbmUgdGFnIHdlIGFza2VkIHRoZW0gdG8gZXhwb3J0IChiZWNhdXNlIHRoZQorIyB0aGV5IGFyZSBvbWl0dGluZyB0aGUgb25lIHRhZyB3ZSBhc2tlZCB0aGVtIHRvIGV4cG9ydCAoYmVjYXVzZSB0aGUKICMgdGFncyByZXNvbHZlIHRvIGEgdHJlZSkuICBUaGV5IGV4aXN0IGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdAogIyBhYm9ydCBidXQgaW5zdGVhZCBqdXN0IHdhcm4uCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZy1vYmonICAgICdnaXQgZmFzdC1leHBvcnQgdHJlZV90YWctb2JqJwpkaWZmIC0tZ2l0IGEvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2ggYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaAppbmRleCAwNzk2YTQzLi5lMzhjYmM5IDEwMDc1NQotLS0gYS90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaAorKysgYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaApAQCAtMTg4LDggKzE4OCw4IEBACiAnCiAKIHhzcygpIHsKLQllY2hvID4mMiAiQ2hlY2tpbmcgJDEuLi4iICYmCi0JZ2l0d2ViX3J1biAiJDEiICYmCisJZWNobyA+JjIgIkNoZWNraW5nICQqLi4uIiAmJgorCWdpdHdlYl9ydW4gIiRAIiAmJgogCWlmIGdyZXAgIiRUQUciIGdpdHdlYi5ib2R5OyB0aGVuCiAJCWVjaG8gPiYyICJ4c3M6ICRUQUcgc2hvdWxkIGhhdmUgYmVlbiBxdW90ZWQgaW4gb3V0cHV0IgogCQlyZXR1cm4gMQpAQCAtMjAwLDcgKzIwMCw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd4c3MgY2hlY2tzJyAnCiAJVEFHPSI8bWFnaWMteHNzLXRhZz4iICYmCiAJeHNzICJhPXJzcyZwPSRUQUciICYmCi0JeHNzICJhPXJzcyZwPWZvby5naXQmZj0kVEFHIgorCXhzcyAiYT1yc3MmcD1mb28uZ2l0JmY9JFRBRyIgJiYKKwl4c3MgIiIgIiRUQUcrIgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoIGIvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKaW5kZXggM2NmZjFmYy4uOWM5NzEwZCAxMDA3NTUKLS0tIGEvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKKysrIGIvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKQEAgLTQwNyw3ICs0MDcsNyBAQAogJwogCiAjCi0jIFdoYXQgaGFwcGVucyB3aGVuIHR3byBmaWxlcyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBvdmVybGF5ZWQgdG9nZXRoZXI/CisjIFdoYXQgaGFwcGVucyB3aGVuIHR3byBmaWxlcyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBvdmVybGFpZCB0b2dldGhlcj8KICMgVGhlIGxhc3QtbGlzdGVkIGZpbGUgc2hvdWxkIHRha2UgcHJlZmVyZW5jZS4KICMKICMgLy9kZXBvdApkaWZmIC0tZ2l0IGEvdC90OTkwMi1jb21wbGV0aW9uLnNoIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCmluZGV4IDU0ZjhjZTEuLmVjM2VjY2YgMTAwNzU1Ci0tLSBhL3QvdDk5MDItY29tcGxldGlvbi5zaAorKysgYi90L3Q5OTAyLWNvbXBsZXRpb24uc2gKQEAgLTM3OCw3ICszNzgsNyBAQAogJwogCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcmV0dXJucyBlcnJvciB3aGVuIGNhbnQgZmluZCByZXBvJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIHJldHVybnMgZXJyb3Igd2hlbiBjYW5ub3QgZmluZCByZXBvJyAnCiAJKAogCQlfX2dpdF9kaXI9Im5vbi1leGlzdGluZyIgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgX19naXRkaXIgPiIkYWN0dWFsIgpAQCAtOTQ1LDcgKzk0NSw3IEBACiAJcm0gLWYgLmdpdC9GRVRDSF9IRUFECiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBkb250IGZpbHRlciByZWZzIHVubGVzcyB0b2xkIHNvJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gZG8gbm90IGZpbHRlciByZWZzIHVubGVzcyB0b2xkIHNvJyAnCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAlIRUFECiAJbWFzdGVyCkBAIC0xMjU3LDcgKzEyNTcsNyBAQAogCQkjIEluIHRoZSBmb2xsb3dpbmcgdGVzdHMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdlIG9ubHkKIAkJIyBjYXJlIGFib3V0IGhvdyBfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlKCkgZGVhbHMgd2l0aAogCQkjIHVudXN1YWwgY2hhcmFjdGVycyBpbiBwYXRoIG5hbWVzLiAgQnkgcmVxdWVzdGluZyBvbmx5Ci0JCSMgdW50cmFja2VkIGZpbGVzIHdlIGRvbnQgaGF2ZSB0byBib3RoZXIgYWRkaW5nIGFueQorCQkjIHVudHJhY2tlZCBmaWxlcyB3ZSBkbyBub3QgaGF2ZSB0byBib3RoZXIgYWRkaW5nIGFueQogCQkjIHBhdGhzIHRvIHRoZSBpbmRleCBpbiB0aG9zZSB0ZXN0cy4KIAkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtLW90aGVycyAmJgogCQlwcmludF9jb21wCkBAIC0xNTQ4LDcgKzE1NDgsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZW5kLWVtYWlsJyAnCi0JdGVzdF9jb21wbGV0aW9uICJnaXQgc2VuZC1lbWFpbCAtLWNvdiIgIi0tY292ZXItbGV0dGVyICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIC0tY292IiA8PC1cRU9GICYmCisJLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPVoKKwktLWNvdmVyLWxldHRlciBaCisJRU9GCiAJdGVzdF9jb21wbGV0aW9uICJnaXQgc2VuZC1lbWFpbCBtYSIgIm1hc3RlciAiCiAnCiAKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IGUwNmZhMDIuLmU4YWUxNTAgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtNDA0LDkgKzQwNCwxMyBAQAogdW5zZXQgWERHX0NBQ0hFX0hPTUUKIHVuc2V0IFhER19DT05GSUdfSE9NRQogdW5zZXQgR0lUUEVSTExJQgotR0lUX0FVVEhPUl9FTUFJTD1hdXRob3JAZXhhbXBsZS5jb20KK1RFU1RfQVVUSE9SX0xPQ0FMTkFNRT1hdXRob3IKK1RFU1RfQVVUSE9SX0RPTUFJTj1leGFtcGxlLmNvbQorR0lUX0FVVEhPUl9FTUFJTD0ke1RFU1RfQVVUSE9SX0xPQ0FMTkFNRX1AJHtURVNUX0FVVEhPUl9ET01BSU59CiBHSVRfQVVUSE9SX05BTUU9J0EgVSBUaG9yJwotR0lUX0NPTU1JVFRFUl9FTUFJTD1jb21taXR0ZXJAZXhhbXBsZS5jb20KK1RFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRT1jb21taXR0ZXIKK1RFU1RfQ09NTUlUVEVSX0RPTUFJTj1leGFtcGxlLmNvbQorR0lUX0NPTU1JVFRFUl9FTUFJTD0ke1RFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRX1AJHtURVNUX0NPTU1JVFRFUl9ET01BSU59CiBHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInCiBHSVRfTUVSR0VfVkVSQk9TSVRZPTUKIEdJVF9NRVJHRV9BVVRPRURJVD1ubwpAQCAtMTAwMCw2ICsxMDA0LDEyIEBACiAJCXRvX3NraXA9dAogCQlza2lwcGVkX3JlYXNvbj0iR0lUX1NLSVBfVEVTVFMiCiAJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHJ1bl9saXN0IiAmJgorCSAgICEgbWF0Y2hfdGVzdF9zZWxlY3Rvcl9saXN0ICctLXJ1bicgJHRlc3RfY291bnQgIiRydW5fbGlzdCIKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iLS1ydW4iCisJZmkKIAlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHRlc3RfcHJlcmVxIiAmJgogCSAgICEgdGVzdF9oYXZlX3ByZXJlcSAiJHRlc3RfcHJlcmVxIgogCXRoZW4KQEAgLTEwMTIsMTIgKzEwMjIsNiBAQAogCQlmaQogCQlza2lwcGVkX3JlYXNvbj0ibWlzc2luZyAkbWlzc2luZ19wcmVyZXEke29mX3ByZXJlcX0iCiAJZmkKLQlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHJ1bl9saXN0IiAmJgotCQkhIG1hdGNoX3Rlc3Rfc2VsZWN0b3JfbGlzdCAnLS1ydW4nICR0ZXN0X2NvdW50ICIkcnVuX2xpc3QiCi0JdGhlbgotCQl0b19za2lwPXQKLQkJc2tpcHBlZF9yZWFzb249Ii0tcnVuIgotCWZpCiAKIAljYXNlICIkdG9fc2tpcCIgaW4KIAl0KQpkaWZmIC0tZ2l0IGEvdGFnLmMgYi90YWcuYwppbmRleCBiZmEwZTMxLi43MWI1NDQ0IDEwMDY0NAotLS0gYS90YWcuYworKysgYi90YWcuYwpAQCAtMTQxLDcgKzE0MSwxNiBAQAogCiAJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCiAJCXJldHVybiAwOwotCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCisJaWYgKGl0ZW0tPnRhZykgeworCQkvKgorCQkgKiBQcmVzdW1hYmx5IGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgZmFpbGVkIHBhcnNlOworCQkgKiBjbGVhciBpdCBvdXQgaW4gcHJlcGFyYXRpb24gZm9yIHJlLXBhcnNpbmcgKHdlJ2xsIHByb2JhYmx5CisJCSAqIGhpdCB0aGUgc2FtZSBlcnJvciwgd2hpY2ggbGV0cyB1cyB0ZWxsIG91ciBjdXJyZW50IGNhbGxlcgorCQkgKiBhYm91dCB0aGUgcHJvYmxlbSkuCisJCSAqLworCQlGUkVFX0FORF9OVUxMKGl0ZW0tPnRhZyk7CisJfQogCiAJaWYgKHNpemUgPCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDI0KQogCQlyZXR1cm4gLTE7CkBAIC0xNjcsMTAgKzE3NiwxNSBAQAogCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCB0YWdfdHlwZSkpIHsKIAkJaXRlbS0+dGFnZ2VkID0gKHN0cnVjdCBvYmplY3QgKilsb29rdXBfdGFnKHIsICZvaWQpOwogCX0gZWxzZSB7Ci0JCWVycm9yKCJVbmtub3duIHR5cGUgJXMiLCB0eXBlKTsKLQkJaXRlbS0+dGFnZ2VkID0gTlVMTDsKKwkJcmV0dXJuIGVycm9yKCJ1bmtub3duIHRhZyB0eXBlICclcycgaW4gJXMiLAorCQkJICAgICB0eXBlLCBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CiAJfQogCisJaWYgKCFpdGVtLT50YWdnZWQpCisJCXJldHVybiBlcnJvcigiYmFkIHRhZyBwb2ludGVyIHRvICVzIGluICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmb2lkKSwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCiAJaWYgKGJ1ZnB0ciArIDQgPCB0YWlsICYmIHN0YXJ0c193aXRoKGJ1ZnB0ciwgInRhZyAiKSkKIAkJOyAJCS8qIGdvb2QgKi8KIAllbHNlCkBAIC0xODcsNiArMjAxLDcgQEAKIAllbHNlCiAJCWl0ZW0tPmRhdGUgPSAwOwogCisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rhci5oIGIvdGFyLmgKaW5kZXggMzQ2NzcwNS4uNmIyNThjNCAxMDA2NDQKLS0tIGEvdGFyLmgKKysrIGIvdGFyLmgKQEAgLTEsMyArMSw2IEBACisjaWZuZGVmIFRBUl9ICisjZGVmaW5lIFRBUl9ICisKICNkZWZpbmUgVFlQRUZMQUdfQVVUTwkJJ1wwJwogI2RlZmluZSBUWVBFRkxBR19SRUcJCScwJwogI2RlZmluZSBUWVBFRkxBR19MTksJCScyJwpAQCAtMjMsMyArMjYsNSBAQAogCWNoYXIgZGV2bWlub3JbOF07CS8qIDMzNyAqLwogCWNoYXIgcHJlZml4WzE1NV07CS8qIDM0NSAqLwogfTsKKworI2VuZGlmIC8qIFRBUl9IICovCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUKaW5kZXggZTY3M2JiMy4uZWY5NGZhMiAxMDA3NTUKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS1mc21vbml0b3Itd2F0Y2htYW4uc2FtcGxlCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZQpAQCAtMjIsNyArMjIsOCBAQAogCiBpZiAoJHZlcnNpb24gPT0gMSkgewogCSMgY29udmVydCBuYW5vc2Vjb25kcyB0byBzZWNvbmRzCi0JJHRpbWUgPSBpbnQgJHRpbWUgLyAxMDAwMDAwMDAwOworCSMgc3VidHJhY3Qgb25lIHNlY29uZCB0byBtYWtlIHN1cmUgd2F0Y2htYW4gd2lsbCByZXR1cm4gYWxsIGNoYW5nZXMKKwkkdGltZSA9IGludCAoJHRpbWUgLyAxMDAwMDAwMDAwKSAtIDE7CiB9IGVsc2UgewogCWRpZSAiVW5zdXBwb3J0ZWQgcXVlcnktZnNtb25pdG9yIGhvb2sgdmVyc2lvbiAnJHZlcnNpb24nLlxuIiAuCiAJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7CkBAIC01MywxOCArNTQsMTIgQEAKIAkjCiAJIyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlJ3JlIHVzaW5nIHRoZSAic2luY2UiIGdlbmVyYXRvciB0byB1c2UgdGhlCiAJIyByZWNlbmN5IGluZGV4IHRvIHNlbGVjdCBjYW5kaWRhdGUgbm9kZXMgYW5kICJmaWVsZHMiIHRvIGxpbWl0IHRoZQotCSMgb3V0cHV0IHRvIGZpbGUgbmFtZXMgb25seS4gVGhlbiB3ZSdyZSB1c2luZyB0aGUgImV4cHJlc3Npb24iIHRlcm0gdG8KLQkjIGZ1cnRoZXIgY29uc3RyYWluIHRoZSByZXN1bHRzLgotCSMKLQkjIFRoZSBjYXRlZ29yeSBvZiB0cmFuc2llbnQgZmlsZXMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSB3aWxsIGhhdmUgYQotCSMgY3JlYXRpb24gY2xvY2sgKGNjbG9jaykgbmV3ZXIgdGhhbiAkdGltZV90IHZhbHVlIGFuZCB3aWxsIGFsc28gbm90Ci0JIyBjdXJyZW50bHkgZXhpc3QuCisJIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LgogCiAJbXkgJHF1ZXJ5ID0gPDwiCUVORCI7CiAJCVsicXVlcnkiLCAiJGdpdF93b3JrX3RyZWUiLCB7CiAJCQkic2luY2UiOiAkdGltZSwKLQkJCSJmaWVsZHMiOiBbIm5hbWUiXSwKLQkJCSJleHByZXNzaW9uIjogWyJub3QiLCBbImFsbG9mIiwgWyJzaW5jZSIsICR0aW1lLCAiY2Nsb2NrIl0sIFsibm90IiwgImV4aXN0cyJdXV0KKwkJCSJmaWVsZHMiOiBbIm5hbWUiXQogCQl9XQogCUVORAogCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3NpZC5jIGIvdHJhY2UyL3RyMl9zaWQuYwppbmRleCA2OTQ4ZmQ0Li5kYzZlNzVlIDEwMDY0NAotLS0gYS90cmFjZTIvdHIyX3NpZC5jCisrKyBiL3RyYWNlMi90cjJfc2lkLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqICAgICJIPGZpcnN0XzhfY2hhcnNfb2Zfc2hhMV9vZl9ob3N0bmFtZT4iCiAgKiAgICAiTG9jYWxob3N0IiB3aGVuIG5vIGhvc3RuYW1lLgogICoKLSAqIHdoZXJlIDxwcm9jZXNzPiBpcyBhIDkgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBsZWFzdCBzaWduaWZjYW50CisgKiB3aGVyZSA8cHJvY2Vzcz4gaXMgYSA5IGNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKICAqIDMyIGJpdHMgaW4gdGhlIHByb2Nlc3MtaWQuCiAgKiAgICAiUDxwaWQ+IgogICogKFRoaXMgaXMgYW4gYWJyaWJyYXJ5IGNob2ljZS4gIE9uIG1vc3Qgc3lzdGVtcyBwaWRfdCBpcyBhIDMyIGJpdCB2YWx1ZSwKZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfdGd0X3BlcmYuYyBiL3RyYWNlMi90cjJfdGd0X3BlcmYuYwppbmRleCBmZmFjODAyLi5hODAxOGYxIDEwMDY0NAotLS0gYS90cmFjZTIvdHIyX3RndF9wZXJmLmMKKysrIGIvdHJhY2UyL3RyMl90Z3RfcGVyZi5jCkBAIC0yNiwxMiArMjYsOSBAQAogI2RlZmluZSBUUjJGTVRfUEVSRl9SRVBPX1dJRFRIICgzKQogI2RlZmluZSBUUjJGTVRfUEVSRl9DQVRFR09SWV9XSURUSCAoMTIpCiAKLSNkZWZpbmUgVFIyX0RPVFNfQlVGRkVSX1NJWkUgKDEwMCkKICNkZWZpbmUgVFIyX0lOREVOVCAoMikKICNkZWZpbmUgVFIyX0lOREVOVF9MRU5HVEgoY3R4KSAoKChjdHgpLT5ucl9vcGVuX3JlZ2lvbnMgLSAxKSAqIFRSMl9JTkRFTlQpCiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGRvdHMgPSBTVFJCVUZfSU5JVDsKLQogc3RhdGljIGludCBmbl9pbml0KHZvaWQpCiB7CiAJaW50IHdhbnQgPSB0cjJfZHN0X3RyYWNlX3dhbnQoJnRyMmRzdF9wZXJmKTsKQEAgLTQxLDggKzM4LDYgQEAKIAlpZiAoIXdhbnQpCiAJCXJldHVybiB3YW50OwogCi0Jc3RyYnVmX2FkZGNoYXJzKCZkb3RzLCAnLicsIFRSMl9ET1RTX0JVRkZFUl9TSVpFKTsKLQogCWJyaWVmID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9QRVJGX0JSSUVGKTsKIAlpZiAoYnJpZWYgJiYgKmJyaWVmICYmCiAJICAgICgod2FudF9icmllZiA9IGdpdF9wYXJzZV9tYXliZV9ib29sKGJyaWVmKSkgIT0gLTEpKQpAQCAtNTQsOCArNDksNiBAQAogc3RhdGljIHZvaWQgZm5fdGVybSh2b2lkKQogewogCXRyMl9kc3RfdHJhY2VfZGlzYWJsZSgmdHIyZHN0X3BlcmYpOwotCi0Jc3RyYnVmX3JlbGVhc2UoJmRvdHMpOwogfQogCiAvKgpAQCAtMTM4LDE0ICsxMzEsOCBAQAogCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUtKi4qcyB8ICIsIFRSMkZNVF9QRVJGX0NBVEVHT1JZX1dJRFRILAogCQkgICAgVFIyRk1UX1BFUkZfQ0FURUdPUllfV0lEVEgsIChjYXRlZ29yeSA/IGNhdGVnb3J5IDogIiIpKTsKIAotCWlmIChjdHgtPm5yX29wZW5fcmVnaW9ucyA+IDApIHsKLQkJaW50IGxlbl9pbmRlbnQgPSBUUjJfSU5ERU5UX0xFTkdUSChjdHgpOwotCQl3aGlsZSAobGVuX2luZGVudCA+IGRvdHMubGVuKSB7Ci0JCQlzdHJidWZfYWRkYnVmKGJ1ZiwgJmRvdHMpOwotCQkJbGVuX2luZGVudCAtPSBkb3RzLmxlbjsKLQkJfQotCQlzdHJidWZfYWRkZihidWYsICIlLipzIiwgbGVuX2luZGVudCwgZG90cy5idWYpOwotCX0KKwlpZiAoY3R4LT5ucl9vcGVuX3JlZ2lvbnMgPiAwKQorCQlzdHJidWZfYWRkY2hhcnMoYnVmLCAnLicsIFRSMl9JTkRFTlRfTEVOR1RIKGN0eCkpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2lvX3dyaXRlX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpldmVudF9uYW1lLApkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwppbmRleCAzM2VhNzgxLi4yOGNiZDE5IDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuYworKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMjc1LDkgKzI3NSw5IEBACiB9CiAKIC8qCi0gKiBQcmVmb3JtIHRoZSBsb2FkaW5nIG9mIHRoZSByZXBvc2l0b3J5J3MgZ2l0bW9kdWxlcyBmaWxlLiAgVGhpcyBmdW5jdGlvbiBpcworICogUGVyZm9ybSB0aGUgbG9hZGluZyBvZiB0aGUgcmVwb3NpdG9yeSdzIGdpdG1vZHVsZXMgZmlsZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAqIHVzZWQgYnkgJ2NoZWNrX3VwZGF0ZSgpJyB0byBwZXJmb3JtIGxvYWRpbmcgb2YgdGhlIGdpdG1vZHVsZXMgZmlsZSBpbiB0d28KLSAqIGRpZmZlcm50IHNpdHVhdGlvbnM6CisgKiBkaWZmZXJlbnQgc2l0dWF0aW9uczoKICAqICgxKSBiZWZvcmUgcmVtb3ZpbmcgZW50cmllcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgaWYgdGhlIGdpdG1vZHVsZXMgZmlsZSBoYXMKICAqICAgICBiZWVuIG1hcmtlZCBmb3IgcmVtb3ZhbC4gIFRoaXMgc2l0dWF0aW9uIGlzIHNwZWNpZmllZCBieSAnc3RhdGUnID09IE5VTEwuCiAgKiAoMikgYmVmb3JlIGNoZWNraW5nIG91dCBlbnRyaWVzIHRvIHRoZSB3b3JraW5nIHRyZWUgaWYgdGhlIGdpdG1vZHVsZXMgZmlsZQpkaWZmIC0tZ2l0IGEvdXJsLmMgYi91cmwuYwppbmRleCBlMzRlNWU3Li5lMDRiZDYwIDEwMDY0NAotLS0gYS91cmwuYworKysgYi91cmwuYwpAQCAtNSw3ICs1LDcgQEAKIHsKIAkvKgogCSAqIFRoZSBzZXQgb2YgdmFsaWQgVVJMIHNjaGVtZXMsIGFzIHBlciBTVEQ2NiAoUkZDMzk4NikgaXMKLQkgKiAnW0EtWmEtel1bQS1aYS16MC05Ky4tXSonLiBCdXQgdXNlIHNpZ2h0bHkgbG9vc2VyIGNoZWNrCisJICogJ1tBLVphLXpdW0EtWmEtejAtOSsuLV0qJy4gQnV0IHVzZSBzbGlnaHRseSBsb29zZXIgY2hlY2sKIAkgKiBvZiAnW0EtWmEtejAtOV1bQS1aYS16MC05Ky4tXSonIGJlY2F1c2UgZWFybGllciB2ZXJzaW9uCiAJICogb2YgY2hlY2sgdXNlZCAnW0EtWmEtejAtOV0rJyBzbyBub3QgdG8gYnJlYWsgYW55IHJlbW90ZQogCSAqIGhlbHBlcnMuCmRpZmYgLS1naXQgYS91c2FnZS5jIGIvdXNhZ2UuYwppbmRleCAyZmRiMjAwLi41OGZiNWZmIDEwMDY0NAotLS0gYS91c2FnZS5jCisrKyBiL3VzYWdlLmMKQEAgLTksMTQgKzksMjYgQEAKIHZvaWQgdnJlcG9ydGYoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQogewogCWNoYXIgbXNnWzQwOTZdOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnBlbmQgPSBtc2cgKyBzaXplb2YobXNnKTsKKwlzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOwogCi0JdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKLQlmb3IgKHAgPSBtc2c7ICpwOyBwKyspIHsKKwlpZiAoc2l6ZW9mKG1zZykgPD0gcHJlZml4X2xlbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJVRyEhISB0b28gbG9uZyBhIHByZWZpeCAnJXMnXG4iLCBwcmVmaXgpOworCQlhYm9ydCgpOworCX0KKwltZW1jcHkobXNnLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCXAgPSBtc2cgKyBwcmVmaXhfbGVuOworCWlmICh2c25wcmludGYocCwgcGVuZCAtIHAsIGVyciwgcGFyYW1zKSA8IDApCisJCSpwID0gJ1wwJzsgLyogdnNucHJpbnRmKCkgZmFpbGVkLCBjbGlwIGF0IHByZWZpeCAqLworCisJZm9yICg7IHAgIT0gcGVuZCAtIDEgJiYgKnA7IHArKykgewogCQlpZiAoaXNjbnRybCgqcCkgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nKQogCQkJKnAgPSAnPyc7CiAJfQotCWZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgcHJlZml4LCBtc2cpOworCisJKihwKyspID0gJ1xuJzsgLyogd2Ugbm8gbG9uZ2VyIG5lZWQgYSBOVUwgKi8KKwlmZmx1c2goc3RkZXJyKTsKKwl3cml0ZV9pbl9mdWxsKDIsIG1zZywgcCAtIG1zZyk7CiB9CiAKIHN0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmMgYi91c2VyZGlmZi5jCmluZGV4IGUxODdkMzUuLjMyNDkxNmYgMTAwNjQ0Ci0tLSBhL3VzZXJkaWZmLmMKKysrIGIvdXNlcmRpZmYuYwpAQCAtMzIsNiArMzIsMTggQEAKIAkgLyogUHJvcGVydHkgbmFtZXMgYW5kIG1hdGggb3BlcmF0b3JzICovCiAJICJbYS16QS1aMC05LC5fKz8jLV0rIgogCSAifFstKyovJSZefCF+XXw+Pnw8PHwmJnxcXHxcXHwiKSwKK1BBVFRFUk5TKCJlbGl4aXIiLAorCSAiXlsgXHRdKigoZGVmKG1hY3JvfG1vZHVsZXxpbXBsfHByb3RvY29sfHApP3x0ZXN0KVsgXHRdLiopJCIsCisJIC8qIEF0b21zLCBuYW1lcywgYW5kIG1vZHVsZSBhdHRyaWJ1dGVzICovCisJICJ8W0A6XT9bYS16QS1aMC05QF8/IV0rIgorCSAvKiBOdW1iZXJzIHdpdGggc3BlY2lmaWMgYmFzZSAqLworCSAifFstK10/MFt4b2JdWzAtOWEtZkEtRl0rIgorCSAvKiBOdW1iZXJzICovCisJICJ8Wy0rXT9bMC05XVswLTlfLl0qKFtlRV1bLStdP1swLTlfXSspPyIKKwkgLyogT3BlcmF0b3JzIGFuZCBhdG9tcyB0aGF0IHJlcHJlc2VudCB0aGVtICovCisJICJ8Oj8oXFwrXFwrfC0tfFxcLlxcLnx+fn58PD58XFxeXFxeXFxefDw/XFx8Pnw8PDw/fD4/Pj58PDw/fnx+Pj8+fDx+Pnw8PXw+PXw9PT0/fCE9PT98PX58JiYmP3xcXHxcXHxcXHw/fD0+fDwtfFxcXFxcXFxcfC0+KSIKKwkgLyogTm90IHJlYWwgb3BlcmF0b3JzLCBidXQgc2hvdWxkIGJlIGdyb3VwZWQgKi8KKwkgInw6PyVbQS1aYS16MC05Xy5dXFx7XFx9PyIpLAogSVBBVFRFUk4oImZvcnRyYW4iLAogCSAiIV4oW0MqXXxbIFx0XSohKVxuIgogCSAiIV5bIFx0XSpNT0RVTEVbIFx0XStQUk9DRURVUkVbIFx0XVxuIgpAQCAtMTMzLDcgKzE0NSw3IEBACiAJICJbYS16QS1aX11bYS16QS1aMC05X10qIgogCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCiAJICJ8Wy0rKi88PiUmXnw9IS5dPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fD09PXwmJnxcXHxcXHx8Ojp8LT4iKSwKLVBBVFRFUk5TKCJweXRob24iLCAiXlsgXHRdKigoY2xhc3N8ZGVmKVsgXHRdLiopJCIsCitQQVRURVJOUygicHl0aG9uIiwgIl5bIFx0XSooKGNsYXNzfChhc3luY1sgXHRdKyk/ZGVmKVsgXHRdLiopJCIsCiAJIC8qIC0tICovCiAJICJbYS16QS1aX11bYS16QS1aMC05X10qIgogCSAifFstKzAtOS5lXStbakpsTF0/fDBbeFhdP1swLTlhLWZBLUZdK1tsTF0/IgpkaWZmIC0tZ2l0IGEvdXRmOC5jIGIvdXRmOC5jCmluZGV4IDVjOGYxNTEuLjViMzkzNjEgMTAwNjQ0Ci0tLSBhL3V0ZjguYworKysgYi91dGY4LmMKQEAgLTQxMSwxMSArNDExLDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgc2FtZV91dGZfZW5jb2RpbmcoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpCiB7Ci0JaWYgKGlzdGFydHNfd2l0aChzcmMsICJ1dGYiKSAmJiBpc3RhcnRzX3dpdGgoZHN0LCAidXRmIikpIHsKLQkJLyogc3JjWzNdIG9yIGRzdFszXSBtaWdodCBiZSAnXDAnICovCi0JCWludCBpID0gKHNyY1szXSA9PSAnLScgPyA0IDogMyk7Ci0JCWludCBqID0gKGRzdFszXSA9PSAnLScgPyA0IDogMyk7Ci0JCXJldHVybiAhc3RyY2FzZWNtcChzcmMraSwgZHN0K2opOworCWlmIChza2lwX2lwcmVmaXgoc3JjLCAidXRmIiwgJnNyYykgJiYgc2tpcF9pcHJlZml4KGRzdCwgInV0ZiIsICZkc3QpKSB7CisJCXNraXBfcHJlZml4KHNyYywgIi0iLCAmc3JjKTsKKwkJc2tpcF9wcmVmaXgoZHN0LCAiLSIsICZkc3QpOworCQlyZXR1cm4gIXN0cmNhc2VjbXAoc3JjLCBkc3QpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5oIGIveGRpZmYtaW50ZXJmYWNlLmgKaW5kZXggZWRlNDI0Ni4uOTNkZjI2OSAxMDA2NDQKLS0tIGEveGRpZmYtaW50ZXJmYWNlLmgKKysrIGIveGRpZmYtaW50ZXJmYWNlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqIENvbXBhcmUgdGhlIHN0cmluZ3MgbDEgd2l0aCBsMiB3aGljaCBhcmUgb2Ygc2l6ZSBzMSBhbmQgczIgcmVzcGVjdGl2ZWx5LgogICogUmV0dXJucyAxIGlmIHRoZSBzdHJpbmdzIGFyZSBkZWVtZWQgZXF1YWwsIDAgb3RoZXJ3aXNlLgogICogVGhlIGBmbGFnc2AgZ2l2ZW4gYXMgWERGX1dISVRFU1BBQ0VfRkxBR1MgZGV0ZXJtaW5lIGhvdyB3aGl0ZSBzcGFjZXMKLSAqIGFyZSB0cmVhdGVkIGZvciB0aGUgY29tcGFyaXNpb24uCisgKiBhcmUgdHJlYXRlZCBmb3IgdGhlIGNvbXBhcmlzb24uCiAgKi8KIGludCB4ZGlmZl9jb21wYXJlX2xpbmVzKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLAogCQkJY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpOwo=