RnJvbSA0N2Y2Y2QyM2U4OTczZTA2NzJiYjZjNTE2YTZjZTUzYWE5N2M3NTMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSdXNzIENveCA8cnNjQGdvbGFuZy5vcmc+CkRhdGU6IEZyaSwgMDggRmViIDIwMTkgMTA6Mzg6NDYgLTA1MDAKU3ViamVjdDogW1BBVENIXSBub3RhcnkvaW50ZXJuYWwvZGF0YWJhc2U6IGludGVyZmFjZSBmb3IgZGF0YWJhc2UKClRoaXMgaXMgcGFydCBvZiBhIGRlc2lnbiBza2V0Y2ggZm9yIGEgR28gbW9kdWxlIG5vdGFyeS4KRXZlbnR1YWxseSB0aGUgY29kZSB3aWxsIGxpdmUgb3V0c2lkZSBnb2xhbmcub3JnL3gvZXhwLgoKRXZlcnl0aGluZyBoZXJlIGlzIHN1YmplY3QgdG8gY2hhbmdlISBEb24ndCBkZXBlbmQgb24gaXQhCgpUaGlzIGNvZGUgZGVmaW5lcyBhbiBpbnRlcmZhY2UgZm9yIGEgZGF0YWJhc2Ugc3RvcmluZyBoYXNoZXMuCgpDaGFuZ2UtSWQ6IEk3YmQzMzcxMWVlYzk0YjMwMTk2Zjk5OGZiMTAwM2VmOTFlN2U4ZDU1Ci0tLQoKZGlmZiAtLWdpdCBhL25vdGFyeS9pbnRlcm5hbC9kYXRhYmFzZS9kYi5nbyBiL25vdGFyeS9pbnRlcm5hbC9kYXRhYmFzZS9kYi5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjgzNGQxCi0tLSAvZGV2L251bGwKKysrIGIvbm90YXJ5L2ludGVybmFsL2RhdGFiYXNlL2RiLmdvCkBAIC0wLDAgKzEsMTg3IEBACisvLyBDb3B5cmlnaHQgMjAxOSBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCisvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFBhY2thZ2UgZGF0YWJhc2UgZGVmaW5lcyB0aGUgZGF0YWJhc2UgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIG5vdGFyeS4KKy8vIEl0IG9wZXJhdGVzIGF0IGEgbG93ZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gdGhhbiBkYXRhYmFzZS9zcWwsCisvLyBtb2RlbGVkIG9uIEdvb2dsZSBDbG91ZCBTcGFubmVyLgorcGFja2FnZSBkYXRhYmFzZQorCitpbXBvcnQgKAorCSJieXRlcyIKKwkiY29udGV4dCIKKwkiZm10IgorCSJ0aW1lIgorCSJ1bmljb2RlL3V0ZjgiCispCisKKy8vIEEgREIgaXMgYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UuCit0eXBlIERCIGludGVyZmFjZSB7CisJLy8gQ3JlYXRlVGFibGVzIGNyZWF0ZXMgdGFibGVzIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb25zLgorCS8vIElmIGFueSBuYW1lZCB0YWJsZXMgYWxyZWFkeSBleGlzdCwgdGhlIGNhbGwgZmFpbHMuCisJLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSB0YWJsZXMgaXMgYSBzaW5nbGUgdHJhbnNhY3Rpb246IGVpdGhlciBpdCBzdWNjZWVkcyBpbiBmdWxsIG9yIGl0IGRvZXMgbm90aGluZy4KKwlDcmVhdGVUYWJsZXMoY3R4IGNvbnRleHQuQ29udGV4dCwgdGFibGVzIFtdKlRhYmxlKSBlcnJvcgorCisJLy8gUmVhZE9ubHkgcnVucyBmIGluIGEgcmVhZC1vbmx5IHRyYW5zYWN0aW9uLgorCS8vIEl0IGlzIGVxdWl2YWxlbnQgdG8gUmVhZFdyaXRlIGV4Y2VwdCB0aGF0IHRoZQorCS8vIHRyYW5zYWN0aW9uJ3MgQnVmZmVyV3JpdGUgbWV0aG9kIHdpbGwgZmFpbCB1bmNvbmRpdGlvbmFsbHkuCisJLy8gKFRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUKKwkvLyB0cmFuc2FjdGlvbiBpZiBpdCBrbm93cyBhdCB0aGUgc3RhcnQgdGhhdCBubyB3cml0ZXMgd2lsbCBoYXBwZW4uKQorCVJlYWRPbmx5KGN0eCBjb250ZXh0LkNvbnRleHQsIGYgZnVuYyhjb250ZXh0LkNvbnRleHQsIFRyYW5zYWN0aW9uKSBlcnJvcikgZXJyb3IKKworCS8vIFJlYWRXcml0ZSBydW5zIGYgaW4gYSByZWFkLXdyaXRlIHRyYW5zYWN0aW9uLgorCS8vIElmIGYgcmV0dXJucyBhbiBlcnJvciwgdGhlIHRyYW5zYWN0aW9uIGFib3J0cyBhbmQgcmV0dXJucyB0aGF0IGVycm9yLgorCS8vIElmIGYgcmV0dXJucyBuaWwsIHRoZSB0cmFuc2FjdGlvbiBhdHRlbXB0cyB0byBjb21taXQgYW5kIHRoZW4gdGhlbiByZXR1cm4gbmlsLgorCS8vIE90aGVyd2lzZSBpdCB0cmllcyBhZ2Fpbi4gTm90ZSB0aGF0IGYgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhbmQgdGhhdAorCS8vIHRoZSByZXN1bHQgYXBwbGllcyBvbmx5IGRlc2NyaWJlcyB0aGUgZWZmZWN0IG9mIHRoZSBmaW5hbCBjYWxsIHRvIGYuCisJLy8gVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBub3QgdG8gdXNlIGFueSBzdGF0ZSBjb21wdXRlZCBkdXJpbmcKKwkvLyBlYXJsaWVyIGNhbGxzIHRvIGYsIG9yIGV2ZW4gdGhlIGxhc3QgY2FsbCB0byBmIHdoZW4gYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisJUmVhZFdyaXRlKGN0eCBjb250ZXh0LkNvbnRleHQsIGYgZnVuYyhjb250ZXh0LkNvbnRleHQsIFRyYW5zYWN0aW9uKSBlcnJvcikgZXJyb3IKK30KKworLy8gQSBUYWJsZSBkZXNjcmliZXMgYSB0YWJsZSB0byBiZSBjcmVhdGVkLgordHlwZSBUYWJsZSBzdHJ1Y3QgeworCU5hbWUgICAgICAgc3RyaW5nICAgLy8gbmFtZSBvZiB0aGUgdGFibGUKKwlDb2x1bW5zICAgIFtdQ29sdW1uIC8vIGNvbHVtbnMgZm9yIHRhYmxlCisJUHJpbWFyeUtleSBbXXN0cmluZyAvLyBuYW1lcyBvZiBwcmltYXJ5IGtleSBjb2x1bW5zCit9CisKKy8vIEEgQ29sdW1uIGRlc2NyaWJlcyBhIGNvbHVtbiBpbiBhIHRhYmxlLgordHlwZSBDb2x1bW4gc3RydWN0IHsKKwlOYW1lICAgIHN0cmluZyAvLyBuYW1lIG9mIGNvbHVtbgorCVR5cGUgICAgc3RyaW5nIC8vIGRhdGEgdHlwZTogImludDY0IiwgInN0cmluZyIsICJieXRlcyIsICJ0aW1lc3RhbXAiCisJU2l6ZSAgICBpbnQgICAgLy8gbWF4IHNpemUgZm9yIFR5cGUgInN0cmluZyIsICJieXRlcyI7IHVubGltaXRlZCBmb3IgU2l6ZSA8PSAwCisJTm90TnVsbCBib29sICAgLy8gaWYgdHJ1ZSwgY29sdW1uIHZhbHVlcyBtdXN0IG5vdCBiZSBudWxsCit9CisKKy8vIEEgVHJhbnNhY3Rpb24gcHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB3aXRoaW4gYSBkYXRhYmFzZSB0cmFuc2FjdGlvbiwKKy8vIGFzIGV4ZWN1dGVkIGJ5IERCJ3MgUmVhZE9ubHkgb3IgUmVhZFdyaXRlIG1ldGhvZHMuCit0eXBlIFRyYW5zYWN0aW9uIGludGVyZmFjZSB7CisJLy8gUmVhZCByZWFkcyBmcm9tIHRhYmxlIHRoZSByb3dzIHdpdGggdGhlIGdpdmVuIGtleXMKKwkvLyBhbmQgcmV0dXJucyB0aGUgc3BlY2lmaWVkIGNvbHVtbnMgb2YgdGhvc2Ugcm93cy4KKwkvLyBJZiBrZXlzLkxpc3QgbGlzdHMga2V5cyBub3QgcHJlc2VudCBpbiB0aGUgdGFibGUsIG5vIGNvcnJlc3BvbmRpbmcKKwkvLyByb3dzIGFyZSByZXR1cm5lZCwgYnV0IHRoZSBvdmVyYWxsIFJlYWQgc3RpbGwgc3VjY2VlZHM6IGl0IGRvZXMgbm90IHJlcG9ydCBhbiBlcnJvci4KKwkvLyBJZiBrZXlzLkFsbCBpcyB0cnVlLCB0aGUgcmV0dXJuZWQgcm93cyBhcmUgaW4gcHJpbWFyeSBrZXkgb3JkZXIuCisJLy8gT3RoZXJ3aXNlIHRoZSBvcmRlciBpcyB1bmRlZmluZWQuCisJUmVhZChjdHggY29udGV4dC5Db250ZXh0LCB0YWJsZSBzdHJpbmcsIGtleXMgS2V5cywgY29sdW1ucyBbXXN0cmluZykgUm93cworCisJLy8gUmVhZFJvdyByZWFkcyBmcm9tIHRhYmxlIHRoZSBzaW5nbGUgcm93IHdpdGggdGhlIGdpdmVuIGtleQorCS8vIGFuZCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgY29sdW1ucyBvZiB0aGF0IHJvdy4KKwkvLyBJZiB0aGVyZSBpcyBubyByb3cgd2l0aCB0aGF0IGtleSwgUmVhZFJvdyByZXR1cm5zIGFuIGVycm9yIG9mIHR5cGUgKlJvd05vdEV4aXN0RXJyb3IuCisJUmVhZFJvdyhjdHggY29udGV4dC5Db250ZXh0LCB0YWJsZSBzdHJpbmcsIGtleSBLZXksIGNvbHVtbnMgW11zdHJpbmcpIChSb3csIGVycm9yKQorCisJLy8gQnVmZmVyV3JpdGUgYnVmZmVycyB0aGUgZ2l2ZW4gd3JpdGVzIHRvIGJlIGFwcGxpZWQgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCisJLy8gSXQgcmV0dXJucyBhbiBlcnJvciBpZiB0aGlzIGlzIGEgUmVhZE9ubHkgdHJhbnNhY3Rpb24KKwkvLyBvciBpZiB0aGUgd3JpdGVzIGFyZSBkZXRlY3RlZCB0byBiZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBkYXRhYmFzZSBzdGF0ZS4KKwlCdWZmZXJXcml0ZSh3cml0ZXMgW11NdXRhdGlvbikgZXJyb3IKK30KKworLy8gQSBLZXkgaXMgYSBzaW5nbGUgZGF0YWJhc2Uga2V5LCBnaXZpbmcgdGhlIHZhbHVlcyBvZiBlYWNoIG9mIHRoZSBwcmltYXJ5IGtleSBjb2x1bW5zLAorLy8gbGlzdGVkIGluIHRoZSB0YWJsZSdzIHByaW1hcnkga2V5IG9yZGVyIChhcyBkZWZpbmVkIGJ5IFRhYmxlJ3MgUHJpbWFyeUtleSBmaWVsZCkuCit0eXBlIEtleSBbXWludGVyZmFjZXt9CisKKy8vIEEgS2V5cyBkZXNjcmliZXMgYSBzZXQgb2Ygcm93IGtleXMgdG8gcmV0dXJuIGZyb20gUmVhZC4KK3R5cGUgS2V5cyBzdHJ1Y3QgeworCUFsbCAgYm9vbCAgLy8gaWYgdHJ1ZSwgcmV0dXJuIGFsbCByb3dzCisJTGlzdCBbXUtleSAvLyBvdGhlcndpc2UsIHJldHVybiBhbnkgcm93cyBmcm9tIGtleXMgb24gdGhpcyBsaXN0Cit9CisKKy8vIEEgUm93cyBpcyBhIHNldCBvZiByb3dzIHJldHVybmVkIGJ5IGEgVHJhbnNhY3Rpb24ncyBSZWFkIG1ldGhvZC4KK3R5cGUgUm93cyBpbnRlcmZhY2UgeworCS8vIERvIGludm9rZXMgZiBmb3IgZWFjaCBSb3cgaW4gdGhlIHNldCBvZiByb3dzLgorCS8vIERvIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIGZvciBhIGdpdmVuIFJvd3MuCisJLy8gSWYgZiByZXR1cm5zIGFuIGVycm9yLCBEbyBzdG9wcyBpdGVyYXRpbmcgb3ZlciB0aGUgcm93cyBhbmQgcmV0dXJucyB0aGF0IGVycm9yLgorCS8vIERvIG1heSBhbHNvIHJldHVybiBhbiBlcnJvciBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIFJlYWQgb3BlcmF0aW9uLgorCURvKGYgZnVuYyhSb3cpIGVycm9yKSBlcnJvcgorfQorCisvLyBBIFJvdyBpcyBhIHNpbmdsZSBkYXRhYmFzZSByb3cgcmV0dXJuZWQgYnkgYSBUcmFuc2FjdGlvbidzIFJlYWQgb3IgUmVhZFJvdyBtZXRob2QuCit0eXBlIFJvdyBpbnRlcmZhY2UgeworCS8vIENvbHVtbiByZWFkcyB0aGUgdmFsdWUgb2YgdGhlIGNvbHVtbiB3aXRoIHRoZSBnaXZlbiBpbmRleAorCS8vIChpbiB0aGUgbGlzdCBvZiBjb2x1bW4gbmFtZXMgcGFzc2VkIHRvIFJlYWQgb3IgUmVhZFJvdykKKwkvLyBhbmQgc3RvcmVzIGl0IGludG8gKmRzdCwgd2hpY2ggbXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgYXBwcm9wcmlhdGUKKwkvLyB0byB0aGUgY29sdW1uIHR5cGUgKGludDY0LCBzdHJpbmcsIG9yIFtdYnl0ZSBmb3IgYnl0ZXMpLgorCUNvbHVtbihpbmRleCBpbnQsIGRzdCBpbnRlcmZhY2V7fSkgZXJyb3IKK30KKworLy8gUmVhZFJvdyByZXR1cm5zIGEgKlJvd05vdEV4aXN0RXJyb3Igd2hlbiB0aGUgc3BlY2lmaWMgcmVxdWVzdGVkIHJvdyBpcyBub3QgaW4gdGhlIHRhYmxlLgordHlwZSBSb3dOb3RFeGlzdEVycm9yIHN0cnVjdCB7CisJRXJyIGVycm9yCit9CisKK2Z1bmMgKGUgKlJvd05vdEV4aXN0RXJyb3IpIEVycm9yKCkgc3RyaW5nIHsKKwlyZXR1cm4gZS5FcnIuRXJyb3IoKQorfQorCisvLyBJc1Jvd05vdEV4aXN0IHJlcG9ydHMgd2hldGhlciBlcnIgaXMgYSAqUm93Tm90RXhpc3RFcnJvci4KK2Z1bmMgSXNSb3dOb3RFeGlzdChlcnIgZXJyb3IpIGJvb2wgeworCV8sIG9rIDo9IGVyci4oKlJvd05vdEV4aXN0RXJyb3IpCisJcmV0dXJuIG9rCit9CisKKy8vIEEgTXV0YXRpb25PcCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIGtpbmQgb2YgZGF0YWJhc2UgbXV0YXRpb24uCit0eXBlIE11dGF0aW9uT3Agc3RyaW5nCisKK2NvbnN0ICgKKwkvLyBEZWxldGUgZGVsZXRlcyBhbnkgcm93cyBtYXRjaGluZyBLZXlzLgorCS8vIEl0IGlzIG5vdCBhbiBlcnJvciB0byBsaXN0IEtleXMgZm9yIHdoaWNoIHRoZXJlIGFyZSBubyBleGlzdGluZyByb3dzLgorCURlbGV0ZSBNdXRhdGlvbk9wID0gImRlbGV0ZSIKKworCS8vIEluc2VydCBpbnNlcnRzIGEgcm93IHdpdGggdGhlIG5hbWVkIGNvbHVtbnMgQ29scyBzZXQgdG8gdGhlIHZhbHVlcyBWYWxzLgorCS8vIFRoZSByb3cga2V5IGlzIGRlcml2ZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4gdmFsdWVzLgorCS8vIEl0IGlzIGFuIGVycm9yIGlmIGEgcm93IHdpdGggdGhhdCBrZXkgYWxyZWFkeSBleGlzdHMuCisJSW5zZXJ0IE11dGF0aW9uT3AgPSAiaW5zZXJ0IgorCisJLy8gSW5zZXJ0T3JVcGRhdGUgZWl0aGVyIGluc2VydHMgYSBuZXcgcm93IG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lLgorCUluc2VydE9yVXBkYXRlIE11dGF0aW9uT3AgPSAiaW5zZXJ0LW9yLXVwZGF0ZSIKKworCS8vIFJlcGxhY2UgaXMgbGlrZSBJbnNlcnQgYnV0IGlmIGEgcm93IHdpdGggdGhlIGtleSBleGlzdHMgYWxyZWFkeSwKKwkvLyBpdCBvdmVyd3JpdGVzIHRoYXQgZXhpc3Rpbmcgcm93LCBpZ25vcmluZyBhbnkgcHJldmlvdXMgY29sdW1uIHZhbHVlcy4KKwlSZXBsYWNlIE11dGF0aW9uT3AgPSAicmVwbGFjZSIKKworCS8vIFVwZGF0ZSB1cGRhdGVzIGFuIGV4aXN0aW5nIHJvdyB0byBzZXQgdGhlIG5hbWVkIGNvbHVtbnMgQ29scyB0byB0aGUgdmFsdWVzIFZhbHMuCisJLy8gVGhlIHJvdyBrZXkgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbiB2YWx1ZXMuCisJLy8gSXQgaXMgYW4gZXJyb3IgaWYgYSByb3cgd2l0aCB0aGF0IGtleSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCS8vIFRoZSB2YWx1ZXMgaW4gdGhlIGV4aXN0aW5nIHJvdyBmb3IgY29sdW1ucyBub3QgbGlzdGVkIGluIENvbHMgYXJlIHByZXNlcnZlZC4KKwlVcGRhdGUgTXV0YXRpb25PcCA9ICJ1cGRhdGUiCispCisKKy8vIEEgTXV0YXRpb24gcmVwcmVzZW50cyBhIHNpbmdsZSBtdXRhdGlvbiB0byBhcHBseSBhdCB0aGUgZW5kIG9mIGEgdHJhbnNhY3Rpb24uCit0eXBlIE11dGF0aW9uIHN0cnVjdCB7CisJT3AgICAgTXV0YXRpb25PcCAgICAvLyBvcGVyYXRpb24KKwlUYWJsZSBzdHJpbmcgICAgICAgIC8vIHRhYmxlIG5hbWUKKwlDb2xzICBbXXN0cmluZyAgICAgIC8vIGZvciBPcCAhPSBEZWxldGUKKwlWYWxzICBbXWludGVyZmFjZXt9IC8vIGZvciBPcCAhPSBEZWxldGUKKwlLZXlzICBLZXlzICAgICAgICAgIC8vIGZvciBPcCA9PSBEZWxldGUKK30KKworLy8gU3RyaW5nIHJldHVybnMgYSBwcmludGFibGUgc3RyaW5nIGZvcm0gb2YgYSBrZXkuCisvLyBJdCBpcyBhIGJyYWNrZXRlZCBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KKy8vIEEgdmFsdWUgZnJvbSBhIGNvbHVtbiBvZiB0eXBlIGJ5dGVzIChHbyBbXWJ5dGUpCisvLyBpcyBwcmludGVkIGFzIGEgcXVvdGVkIHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgVVRGLTgsCisvLyBhbmQgYXMgYSBoZXhhZGVjaW1hbCBieXRlIHNlcXVlbmNlIG90aGVyd2lzZS4KKy8vIEEgdmFsdWUgb2YgY29sdW1uIHR5cGUgdGltZXN0YW1wIChHbyB0aW1lLlRpbWUpCisvLyBpcyBwcmludGVkIGluIFJGQzMzMzkgZm9ybWF0LgorZnVuYyAoayBLZXkpIFN0cmluZygpIHN0cmluZyB7CisJdmFyIGJ1ZiBieXRlcy5CdWZmZXIKKwlidWYuV3JpdGVTdHJpbmcoIlsiKQorCWZvciBpLCB2IDo9IHJhbmdlIGsgeworCQlpZiBpID4gMCB7CisJCQlidWYuV3JpdGVTdHJpbmcoIiwgIikKKwkJfQorCQlzd2l0Y2ggdiA6PSB2Lih0eXBlKSB7CisJCWNhc2UgdGltZS5UaW1lOgorCQkJYnVmLldyaXRlU3RyaW5nKHYuRm9ybWF0KHRpbWUuUkZDMzMzOU5hbm8pKQorCQljYXNlIFtdYnl0ZToKKwkJCWlmIHV0ZjguVmFsaWQodikgeworCQkJCWZtdC5GcHJpbnRmKCZidWYsICIlcSIsIHYpCisJCQl9IGVsc2UgeworCQkJCWZtdC5GcHJpbnRmKCZidWYsICIleCIsIHYpCisJCQl9CisJCWRlZmF1bHQ6CisJCQlmbXQuRnByaW50KCZidWYsIHYpCisJCX0KKwl9CisJYnVmLldyaXRlU3RyaW5nKCJdIikKKwlyZXR1cm4gYnVmLlN0cmluZygpCit9Cg== |