From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Matthew Harmsen To: git-commits@fedoraproject.org Subject: [rpms/jss] pqc: Resolves: rhbz #1431937 Date: Tue, 28 Jul 2026 16:48:30 GMT Message-ID: <178525731061.1.7648603049077107512.rpms-jss-35b26e7d8543@fedoraproject.org> List-ID: X-Git-Repo: rpms/jss X-Git-Branch: pqc X-Git-Rev: 35b26e7d854378d34e6d17620d252bb5ba3ee710 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvanNzCiAgICAgICAgICAgIEJyYW5jaCA6IHBxYwogICAgICAgICAgICBDb21t aXQgOiAzNWIyNmU3ZDg1NDM3OGQzNGU2ZDE3NjIwZDI1MmJiNWJhM2VlNzEwCiAgICAgICAgICAg IEF1dGhvciA6IE1hdHRoZXcgSGFybXNlbiA8bWhhcm1zZW5AcmVkaGF0LmNvbT4KICAgICAgICAg ICAgRGF0ZSAgIDogMjAxNy0wMy0xNFQwMDozMjozNi0wNjowMAogICAgICAgICAgICBTdGF0cyAg OiArMTYvLTgwNzYgaW4gMzYgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBodHRwczovL3Ny Yy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2pzcy9jLzM1YjI2ZTdkODU0Mzc4ZDM0ZTZkMTc2MjBk MjUyYmI1YmEzZWU3MTA/YnJhbmNoPXBxYwoKICAgICAgICAgICAgTG9nOgogICAgICAgICAgICBS ZXNvbHZlczogcmhieiAjMTQzMTkzNwoKLSBCdWd6aWxsYSBCdWcgIzE0MzE5MzcgLSBSZWJhc2Ug anNzIHRvIDQuNC4wIGluIEZlZG9yYSAyNSsKLSAjIyBKU1MgNC40LjAgaW5jbHVkZXMgdGhlIGZv bGxvd2luZyBwYXRjaGVzIHBvcnRlZCBmcm9tIGRvd25zdHJlYW06Ci0gTW96aWxsYSBCdWd6aWxs YSAjNTA3NTM2IC0gQWRkIElQdjYgZnVuY3Rpb25hbGl0eSB0byBKU1MKLSBNb3ppbGxhIEJ1Z3pp bGxhICMxMzA3ODcyIC0gRXhwb3NlIE5TUyBjYWxscyBmb3IgT0NTUCBzZXR0aW5ncwotIE1vemls bGEgQnVnemlsbGEgIzEzMDc4ODIgLSBSRkUgZWNjIC0gYWRkIGVjYyBjdXJ2ZSBuYW1lIHN1cHBv cnQgaW4gSlNTIGFuCiAgQ1MgaW50ZXJmYWNlCi0gTW96aWxsYSBCdWd6aWxsYSAjMTMwNzk5MyAt IEV4cG9zZSB1cGRhdGVkIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmdW5jdGkKICBpbiBKU1MK LSBNb3ppbGxhIEJ1Z3ppbGxhICMxMzA4MDAwIC0gSW5jb3JyZWN0IHNvY2tldCBhY2NlcHQgZXJy b3IgbWVzc2FnZSBkdWUgdG8gYgogIHBvaW50ZXIgYXJpdGhtZXRpYwotIE1vemlsbGEgQnVnemls bGEgIzEzMDgwMDEgLSBWZXJpZmljYXRpb24gc2hvdWxkIGZhaWwgd2hlbiBhIHJldm9rZWQKICBj ZXJ0aWZpY2F0ZSBpcyBhZGRlZAotIE1vemlsbGEgQnVnemlsbGEgIzEzMDgwMDQgLSBXYXJuaW5n cyBzaG91bGQgYmUgY2xlYW5lZCB1cCBpbiBKU1MgYnVpbGQKLSBNb3ppbGxhIEJ1Z3ppbGxhICMx MzA4MDA2IC0gRFJNIGZhaWxlZCB0byByZWNvdmVyeSBrZXlzIHdoZW4gaW4gRklQUyBtb2RlCiAg KEhTTSArIE5TUykKLSBNb3ppbGxhIEJ1Z3ppbGxhICMxMzA4MDA4IC0gRGVmZWN0cyByZXZlYWxl ZCBieSBDb3Zlcml0eSBzY2FuCi0gTW96aWxsYSBCdWd6aWxsYSAjMTMwODAwOSAtIEFkZCBzdXBw b3J0IGZvciBQS0NTNXYyOyBzdXBwb3J0IGZvciBzZWN1cmUgUEsKLSBNb3ppbGxhIEJ1Z3ppbGxh ICMxMzA4MDEyIC0gRFJNOiBkdXJpbmcgYXJjaGl2aW5nIGFuZCByZWNvdmVyaW5nLCB3cmFwcGlu ZwogIHVud3JhcHBpbmcga2V5cyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgdG9rZW4KLSBNb3ppbGxh IEJ1Z3ppbGxhICMxMzA4MDEzIC0gSlNTIC0gSFNNIHRva2VuIG5hbWUgd2FzIG1pc3Rha2VuIGZv cgogIG1hbnVmYWN0dXJlciBpZGVudGlmaWVyCi0gTW96aWxsYSBCdWd6aWxsYSAjMTMwODAxNyAt IFVuLWRlcHJlY2F0ZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgbWV0aG9kcyBpbgogIEpTUyA0LjIu NgotIE1vemlsbGEgQnVnemlsbGEgIzEzMDgwMTkgLSBQcm92aWRlIFRvbWNhdCBzdXBwb3J0IGZv ciBUTFMgdjEuMSBhbmQKICBUTFMgdjEuMiB2aWEgTlNTIHRocm91Z2ggSlNTCi0gTW96aWxsYSBC dWd6aWxsYSAjMTMwODAyNiAtIEpTUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGRvZXMgbm90IHBh c3MgdXAgZXgKICBlcnJvciBmcm9tIE5TUwotIE1vemlsbGEgQnVnemlsbGEgIzEzMDgwMjcgLSBN ZXJnZSBwa2ktc3lta2V5IGludG8ganNzCi0gTW96aWxsYSBCdWd6aWxsYSAjMTMwODAyOSAtIFJl c29sdmUgSmF2YWRvYyBidWlsZCBpc3N1ZXMKLSBNb3ppbGxhIEJ1Z3ppbGxhICMxMzA4MDQ3IC0g c3VwcG9ydCBFQ0MgZW5jcnlwdGlvbiBrZXkgYXJjaGl2YWwgYW5kIHJlY292ZQotIE1vemlsbGEg QnVnemlsbGEgIzEzMTMxMjIgLSBSZW1vdmUgYnlwYXNzIHRlc3RzIGFzIGxhdGVzdCBOU1MgaGFz IHJlbW92ZWQKICBQS0NTIzExIGJ5cGFzcyBzdXBwb3J0Ci0gTW96aWxsYSBCdWd6aWxsYSAjMTMy ODY3NSAtIFNpbXBsZSBwcm9ibGVtIHVud3JhcHBpbmcgQUVTIHN5bSBrZXlzIG9uIHRva2UKLSBN b3ppbGxhIEJ1Z3ppbGxhICMxMzQ1MTc0IC0gQ2Fubm90IGNyZWF0ZSBzeXN0ZW0gY2VydHMgd2hl biB1c2luZyBMdW5hU0EgSAogIGluIEZJUFMgTW9kZSBhbmQgRUNDIGFsZ29yaXRobXMKLSBNb3pp bGxhIEJ1Z3ppbGxhICMxMzQ1NjEzIC0gZXhwb3NlIEFFUyBLZXlXcmFwIGFuZCBhZGQgc29tZSB1 c2VmdWwgT0lECiAgZnVuY3Rpb25zCi0gTW96aWxsYSBCdWd6aWxsYSAjMTM0NjQxMCAtIExvYWQg SlNTIGxpYnJhcmllcyBhcHByb3ByaWF0ZWx5Ci0gIyMgSlNTIDQuNC4wIGluY2x1ZGVzIHRoZSBm b2xsb3dpbmcgY2hhbmdlcyBmb3IgYnVpbGRpbmcgYW5kIHRlc3Rpbmc6Ci0gTW96aWxsYSBCdWd6 aWxsYSAjMTMzMTc2NSAtIFNpbXBsaWZ5IEpTUyBNYWtlZmlsZSBidWlsZCBhbmQgdGVzdAotIE1v emlsbGEgQnVnemlsbGEgIzEzNDY0MjAgLSBEb2N1bWVudCBzdGVwcyByZXF1aXJlZCB0byB1c2Ug dGhlIHByb3BlcgogIGxpYmpzczQuc28gd2hlbiBydW5uaW5nIGNlcnRhaW4gSE1BQyBBbGdvcml0 aG1zIHRlc3RzCgotLS0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4 IDNkYzQyNzQuLjAzMzI0NzcgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9y ZQpAQCAtMSwyICsxLDMgQEAKIGpzcy00LjIuNi50YXIuZ3oKIC9qc3MtNC4yLjYudGFyLmd6Cisv anNzLTQuNC4wLnRhci5negoKZGlmZiAtLWdpdCBhL2pzcy1FQ0MtSFNNLUZJUFMucGF0Y2ggYi9q c3MtRUNDLUhTTS1GSVBTLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzlj OTMwLi4wMDAwMDAwCi0tLSBhL2pzcy1FQ0MtSFNNLUZJUFMucGF0Y2gKKysrIC9kZXYvbnVsbApA QCAtMSw2MiArMCwwIEBACi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uYy5vcmlnIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5jCi0tLS0ganNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3Jp dGhtLmMub3JpZwkyMDExLTA1LTE4IDEwOjAxOjM2Ljc5MjE1MTAwMCAtMDcwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRo bS5jCTIwMTEtMDUtMTggMTA6MDY6MDcuNDgzNjkxMDAwIC0wNzAwCi1AQCAtMTEwLDYgKzExMCw3 IEBAIEpTU19BbGdJbmZvIEpTU19BbGdUYWJsZVtOVU1fQUxHU10gPSB7Ci0gLyogNDcgKi8gICAg e1NFQ19PSURfQU5TSVg5NjJfRUNEU0FfU0hBMjU2X1NJR05BVFVSRSwgU0VDX09JRF9UQUd9LAot IC8qIDQ4ICovICAgIHtTRUNfT0lEX0FOU0lYOTYyX0VDRFNBX1NIQTM4NF9TSUdOQVRVUkUsIFNF Q19PSURfVEFHfSwKLSAvKiA0OSAqLyAgICB7U0VDX09JRF9BTlNJWDk2Ml9FQ0RTQV9TSEE1MTJf U0lHTkFUVVJFLCBTRUNfT0lEX1RBR30sCi0rLyogNTAgKi8gICAge1NFQ19PSURfQU5TSVg5NjJf RUNEU0FfU0lHTkFUVVJFX1NQRUNJRklFRF9ESUdFU1QsIFNFQ19PSURfVEFHfSwKLSAvKiBSRU1F TUJFUiBUTyBVUERBVEUgTlVNX0FMR1MhISEgKi8KLSB9OwotIAotZGlmZiAtdXAganNzLTQuMi42 L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmgu b3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0 by9BbGdvcml0aG0uaAotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5oLm9yaWcJMjAxMS0wNS0xOCAxMDowMTo0My41NjEx NjQwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL2NyeXB0by9BbGdvcml0aG0uaAkyMDExLTA1LTE4IDEwOjA2OjA3LjQ4OTY5MDAwMCAt MDcwMAotQEAgLTU2LDcgKzU2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSlNTX0FsZ0luZm9TdHIgewot ICAgICBKU1NfQWxnVHlwZSB0eXBlOwotIH0gSlNTX0FsZ0luZm87Ci0gCi0tI2RlZmluZSBOVU1f QUxHUyA1MAotKyNkZWZpbmUgTlVNX0FMR1MgNTEKLSAKLSBleHRlcm4gSlNTX0FsZ0luZm8gSlNT X0FsZ1RhYmxlW107Ci0gZXh0ZXJuIENLX1VMT05HIEpTU19zeW1rZXlVc2FnZVtdOwotZGlmZiAt dXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8v QWxnb3JpdGhtLmphdmEub3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhLm9yaWcJMjAx MS0wNS0xOCAxMDowMTo1MS4yMzIxNzkwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uamF2YQkyMDExLTA1 LTE4IDEwOjA2OjA3LjQ5MzY5MDAwMCAtMDcwMAotQEAgLTIzMiw1ICsyMzIsNiBAQCBwdWJsaWMg Y2xhc3MgQWxnb3JpdGhtIHsKLSAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBTRUNf T0lEX0FOU0lYOTYyX0VDRFNBX1NIQTI1Nl9TSUdOQVRVUkU9NDc7Ci0gICAgIHByb3RlY3RlZCBz dGF0aWMgZmluYWwgc2hvcnQgU0VDX09JRF9BTlNJWDk2Ml9FQ0RTQV9TSEEzODRfU0lHTkFUVVJF PTQ4OwotICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfQU5TSVg5NjJf RUNEU0FfU0hBNTEyX1NJR05BVFVSRT00OTsKLSsgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBz aG9ydCBTRUNfT0lEX0FOU0lYOTYyX0VDRFNBX1NJR05BVFVSRV9TUEVDSUZJRURfRElHRVNUPTUw OwotIAotIH0KLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvY3J5cHRvL0tleVBhaXJBbGdvcml0aG0uamF2YS5vcmlnIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVBhaXJBbGdvcml0aG0u amF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv Y3J5cHRvL0tleVBhaXJBbGdvcml0aG0uamF2YS5vcmlnCTIwMTEtMDUtMTggMTA6MDI6MDEuMDU2 MTk4MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9jcnlwdG8vS2V5UGFpckFsZ29yaXRobS5qYXZhCTIwMTEtMDUtMTggMTM6NDY6MzMu NDUyOTQ4MDAwIC0wNzAwCi1AQCAtOTQsNyArOTQsMTIgQEAgcHVibGljIGNsYXNzIEtleVBhaXJB bGdvcml0aG0gZXh0ZW5kcyBBbAotICAgICBEU0FGYW1pbHkgPSBuZXcgQWxnb3JpdGhtKFNFQ19P SURfQU5TSVg5X0RTQV9TSUdOQVRVUkUsICJEU0EiKTsKLSAKLSAgICAgcHVibGljIHN0YXRpYyBm aW5hbCBBbGdvcml0aG0KLS0gICAgRUNGYW1pbHkgPSBuZXcgQWxnb3JpdGhtKFNFQ19PSURfQU5T SVg5NjJfRUNfUFVCTElDX0tFWSwgIkVDIik7Ci0rCi0rLy8gICAgVG8gc3VwcG9ydCBib3RoIEVD RFNBIGFuZCBFQ0RILCBpdCBpcyBiZXN0IHRvIHByb3ZpZGUgdHdvIEVDIEZhbWlsaWVzOwotKy8v ICAgIEhvd2V2ZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHRva2VuIHRoYXQgZG9lcyBvbmx5IENLTV9E RVJJVkUgdG8KLSsvLyAgICBkYXRlLCB3ZSB3aWxsIGp1c3QgZG8gRUNEU0EgZm9yIG5vdyBhcyBp dCBpcyBzdWZmaWNpZW50IGVub3VnaCB0b2RheS4KLSsvLyAgICBUaGlzIGZpeCB3aWxsIHN1cHBv cnQgdG9rZW5zIHRoYXQgZG8gbm90IGRvIEVDREgKLSsgICAgRUNGYW1pbHkgPSBuZXcgQWxnb3Jp dGhtKFNFQ19PSURfQU5TSVg5NjJfRUNEU0FfU0lHTkFUVVJFX1NQRUNJRklFRF9ESUdFU1QsICJF QyIpOwotIAotICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleVBhaXJBbGdvcml0aG0KLSAgICAg UlNBID0gbmV3IEtleVBhaXJBbGdvcml0aG0oQ0tNX1JTQV9QS0NTX0tFWV9QQUlSX0dFTiwgIlJT QSIsIFJTQUZhbWlseSk7Ci1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL2NyeXB0by9TaWduYXR1cmVBbGdvcml0aG0uamF2YS5vcmlnIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL1NpZ25hdHVy ZUFsZ29yaXRobS5qYXZhCi0tLS0ganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9jcnlwdG8vU2lnbmF0dXJlQWxnb3JpdGhtLmphdmEub3JpZwkyMDExLTA1LTE4 IDEwOjAyOjEwLjY5NjIxODAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL1NpZ25hdHVyZUFsZ29yaXRobS5qYXZhCTIwMTEt MDUtMTggMTA6MDY6MDcuNDk2NjkxMDAwIC0wNzAwCi1AQCAtMTI0LDcgKzEyNCw3IEBAIHB1Ymxp YyBjbGFzcyBTaWduYXR1cmVBbGdvcml0aG0gZXh0ZW5kcyAKLSAgICAgICogb3BlcmF0ZXMgb24g aXRzIGlucHV0LCB3aGljaCBzaG91bGQgYmUgYSBoYXNoLgotICAgICAgKi8KLSAgICAgcHVibGlj IHN0YXRpYyBmaW5hbCBTaWduYXR1cmVBbGdvcml0aG0KLS0gICAgRUNTaWduYXR1cmUgPSBuZXcg U2lnbmF0dXJlQWxnb3JpdGhtKFNFQ19PSURfQU5TSVg5NjJfRUNfUFVCTElDX0tFWSwgCi0rICAg IEVDU2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZUFsZ29yaXRobShTRUNfT0lEX0FOU0lYOTYyX0VD RFNBX1NJR05BVFVSRV9TUEVDSUZJRURfRElHRVNULCAKLSAJIkVDIiwKLSAgICAgICAgIG51bGws IG51bGwsIEFOU0lfWDk2Ml9PSUQuc3ViQnJhbmNoKDIpLnN1YkJyYW5jaCgxKSApOwotIAoKZGlm ZiAtLWdpdCBhL2pzcy1FQ0MtUGhhc2UyS2V5QXJjaGl2YWxSZWNvdmVyeS5wYXRjaCBiL2pzcy1F Q0MtUGhhc2UyS2V5QXJjaGl2YWxSZWNvdmVyeS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMWJjYzIzOC4uMDAwMDAwMAotLS0gYS9qc3MtRUNDLVBoYXNlMktleUFyY2hpdmFs UmVjb3ZlcnkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NTEgKzAsMCBAQAotZGlmZiAtdXAg anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2J1aWxkX2phdmEucGwuY2Z1T3JpZyBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3MvYnVpbGRfamF2YS5wbAotLS0tIGpzcy00LjIuNi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9idWlsZF9qYXZhLnBsLmNmdU9yaWcJMjAxMi0wMy0xOSAxNzo0 ODo1Ny42MTUwNDgwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv YnVpbGRfamF2YS5wbAkyMDEyLTAzLTE5IDE3OjQ4OjUzLjI1MDA1MjAwMCAtMDcwMAotQEAgLTE5 LDYgKzE5LDcgQEAgb3JnLm1vemlsbGEuanNzLmNyeXB0by5BbGdvcml0aG0KLSBvcmcubW96aWxs YS5qc3MuY3J5cHRvLkVuY3J5cHRpb25BbGdvcml0aG0gICAgICAKLSBvcmcubW96aWxsYS5qc3Mu Y3J5cHRvLlBRR1BhcmFtcyAgICAgCi0gb3JnLm1vemlsbGEuanNzLmNyeXB0by5TZWNyZXREZWNv ZGVyUmluZwotK29yZy5tb3ppbGxhLmpzcy5hc24xLkFTTjFVdGlsCi0gb3JnLm1vemlsbGEuanNz LnBrY3MxMS5DZXJ0UHJveHkgICAgICAgIAotIG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuQ2lwaGVy Q29udGV4dFByb3h5IAotIG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuUEsxMU1vZHVsZSAKLWRpZmYg LXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvY29uZmlnLm1rLmNmdU9yaWcg anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9jb25maWcubWsKLS0tLSBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGliL2NvbmZpZy5tay5jZnVPcmlnCTIwMTItMDMtMTkg MTc6NDg6NTcuNTM1MDQ4MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL2xpYi9jb25maWcubWsJMjAxMi0wMy0xOSAxNzo0ODo1My4yNjQwNTIwMDAgLTA3MDAKLUBA IC00NCw2ICs0NCw3IEBAIFNIQVJFRF9MSUJSQVJZX0RJUlMgPSBcCi0gICAgIC4uL29yZy9tb3pp bGxhL2pzcy9TZWNyZXREZWNvZGVyUmluZyBcCi0gICAgIC4uL29yZy9tb3ppbGxhL2pzcyBcCi0g ICAgIC4uL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEgXAotKyAgICAuLi9vcmcvbW96aWxsYS9qc3Mv YXNuMSBcCi0gICAgIC4uL29yZy9tb3ppbGxhL2pzcy9zc2wgXAotICAgICAuLi9vcmcvbW96aWxs YS9qc3MvdXRpbCBcCi0gICAgIC4uL29yZy9tb3ppbGxhL2pzcy9wcm92aWRlci9qYXZhL3NlY3Vy aXR5IFwKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRl Zi5jZnVPcmlnIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZgotLS0t IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZi5jZnVPcmlnCTIwMTIt MDMtMTkgMTc6NDg6NTcuMzYyMDQ4MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL2xpYi9qc3MuZGVmCTIwMTItMDMtMTkgMTc6NDg6NTMuMjc4MDUyMDAwIC0wNzAw Ci1AQCAtMzMzLDYgKzMzMyw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJf T0NTUEMKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX3NldE9DU1BUaW1lb3V0 TmF0aXZlOwotIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJfdmVyaWZ5Q2VydGlm aWNhdGVOb3dOYXRpdmU7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJp ZnlDZXJ0aWZpY2F0ZU5vd0NVTmF0aXZlOwotK0phdmFfb3JnX21vemlsbGFfanNzX2FzbjFfQVNO MVV0aWxfZ2V0VGFnRGVzY3JpcHRpb25CeU9pZDsKLSA7KyAgICBsb2NhbDoKLSA7KyAgICAgICAq OwotIDsrfTsKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvcnVs ZXMubWsuY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGliL3J1bGVzLm1r Ci0tLS0ganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9ydWxlcy5tay5jZnVPcmln CTIwMTItMDMtMTkgMTc6NDg6NTcuNTc0MDQ5MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL2xpYi9ydWxlcy5tawkyMDEyLTAzLTE5IDE3OjQ4OjUzLjI4ODA1MjAw MCAtMDcwMAotQEAgLTQxLDYgKzQxLDcgQEAgcmVsZWFzZV9zYW5pdGl6ZTo6Ci0gCS1ybSAkKFNP VVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVMRUFTRV9MSUJfRElSKS8kKERMTF9QUkVG SVgpanNzY3J5cHRvJChEWU5BTUlDX0xJQl9FWFRFTlNJT04pJChEWU5BTUlDX0xJQl9TVUZGSVgp Ci0gCS1ybSAkKFNPVVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVMRUFTRV9MSUJfRElS KS8kKERMTF9QUkVGSVgpanNzbWFuYWdlJChEWU5BTUlDX0xJQl9FWFRFTlNJT04pJChEWU5BTUlD X0xJQl9TVUZGSVgpCi0gCS1ybSAkKFNPVVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVM RUFTRV9MSUJfRElSKS8kKERMTF9QUkVGSVgpanNzcGtjczExJChEWU5BTUlDX0xJQl9FWFRFTlNJ T04pJChEWU5BTUlDX0xJQl9TVUZGSVgpCi0rCS1ybSAkKFNPVVJDRV9SRUxFQVNFX1BSRUZJWCkv JChTT1VSQ0VfUkVMRUFTRV9MSUJfRElSKS8kKERMTF9QUkVGSVgpanNzYXNuMSQoRFlOQU1JQ19M SUJfRVhURU5TSU9OKSQoRFlOQU1JQ19MSUJfU1VGRklYKQotIAktcm0gJChTT1VSQ0VfUkVMRUFT RV9QUkVGSVgpLyQoU09VUkNFX1JFTEVBU0VfTElCX0RJUikvJChETExfUFJFRklYKWpzc3BvbGlj eSQoRFlOQU1JQ19MSUJfRVhURU5TSU9OKSQoRFlOQU1JQ19MSUJfU1VGRklYKQotIAktcm0gJChT T1VSQ0VfUkVMRUFTRV9QUkVGSVgpLyQoU09VUkNFX1JFTEVBU0VfTElCX0RJUikvJChETExfUFJF RklYKWpzc3NzbCQoRFlOQU1JQ19MSUJfRVhURU5TSU9OKSQoRFlOQU1JQ19MSUJfU1VGRklYKQot IAktcm0gJChTT1VSQ0VfUkVMRUFTRV9QUkVGSVgpLyQoU09VUkNFX1JFTEVBU0VfTElCX0RJUikv JChETExfUFJFRklYKWpzc3V0aWwkKERZTkFNSUNfTElCX0VYVEVOU0lPTikkKERZTkFNSUNfTElC X1NVRkZJWCkKLUBAIC00OCw2ICs0OSw3IEBAIGlmZXEgKCQoT1NfQVJDSCksV0lOTlQpCi0gCS1y bSAkKFNPVVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVMRUFTRV9MSUJfRElSKS8kKElN UE9SVF9MSUJfUFJFRklYKWpzc2NyeXB0byQoSU1QT1JUX0xJQl9FWFRFTlNJT04pJChJTVBPUlRf TElCX1NVRkZJWCkKLSAJLXJtICQoU09VUkNFX1JFTEVBU0VfUFJFRklYKS8kKFNPVVJDRV9SRUxF QVNFX0xJQl9ESVIpLyQoSU1QT1JUX0xJQl9QUkVGSVgpanNzbWFuYWdlJChJTVBPUlRfTElCX0VY VEVOU0lPTikkKElNUE9SVF9MSUJfU1VGRklYKQotIAktcm0gJChTT1VSQ0VfUkVMRUFTRV9QUkVG SVgpLyQoU09VUkNFX1JFTEVBU0VfTElCX0RJUikvJChJTVBPUlRfTElCX1BSRUZJWClqc3Nwa2Nz MTEkKElNUE9SVF9MSUJfRVhURU5TSU9OKSQoSU1QT1JUX0xJQl9TVUZGSVgpCi0rCS1ybSAkKFNP VVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVMRUFTRV9MSUJfRElSKS8kKElNUE9SVF9M SUJfUFJFRklYKWpzc2FzbjEkKElNUE9SVF9MSUJfRVhURU5TSU9OKSQoSU1QT1JUX0xJQl9TVUZG SVgpCi0gCS1ybSAkKFNPVVJDRV9SRUxFQVNFX1BSRUZJWCkvJChTT1VSQ0VfUkVMRUFTRV9MSUJf RElSKS8kKElNUE9SVF9MSUJfUFJFRklYKWpzc3BvbGljeSQoSU1QT1JUX0xJQl9FWFRFTlNJT04p JChJTVBPUlRfTElCX1NVRkZJWCkKLSAJLXJtICQoU09VUkNFX1JFTEVBU0VfUFJFRklYKS8kKFNP VVJDRV9SRUxFQVNFX0xJQl9ESVIpLyQoSU1QT1JUX0xJQl9QUkVGSVgpanNzc3NsJChJTVBPUlRf TElCX0VYVEVOU0lPTikkKElNUE9SVF9MSUJfU1VGRklYKQotIAktcm0gJChTT1VSQ0VfUkVMRUFT RV9QUkVGSVgpLyQoU09VUkNFX1JFTEVBU0VfTElCX0RJUikvJChJTVBPUlRfTElCX1BSRUZJWClq c3N1dGlsJChJTVBPUlRfTElCX0VYVEVOU0lPTikkKElNUE9SVF9MSUJfU1VGRklYKQotZGlmZiAt dXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL0FT TjFVdGlsLmMuY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL2FzbjEvQVNOMVV0aWwuYwotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvYXNuMS9BU04xVXRpbC5jLmNmdU9yaWcJMjAxMi0wMy0xOSAxNzo0 ODo1Ny4zODEwNDgwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL2FzbjEvQVNOMVV0aWwuYwkyMDEyLTAzLTE5IDE3OjUxOjMyLjQzMzg5 MzAwMCAtMDcwMAotQEAgLTAsMCArMSw5NyBAQAotKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP Q0sgKioqKioKLSsgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKLSsgKgotKyAq IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVi bGljIExpY2Vuc2UgVmVyc2lvbgotKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90 IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotKyAqIHRoZSBMaWNlbnNl LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSsgKiBodHRwOi8vd3d3 Lm1vemlsbGEub3JnL01QTC8KLSsgKgotKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0rICogV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRo ZSBMaWNlbnNlCi0rICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRz IGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSsgKiBMaWNlbnNlLgotKyAqCi0rICogVGhlIE9y aWdpbmFsIENvZGUgaXMgdGhlIE5ldHNjYXBlIFNlY3VyaXR5IFNlcnZpY2VzIGZvciBKYXZhLgot KyAqCi0rICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0r ICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0rICogUG9ydGlvbnMgY3Jl YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OC0yMDAw Ci0rICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKyAqCi0r ICogQ29udHJpYnV0b3Iocyk6Ci0rICoKLSsgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotKyAqIGVpdGhlciB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQ TCIpLCBvcgotKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAotKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zp c2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0rICog b2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24g b2YgdGhpcyBmaWxlIG9ubHkKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwg b3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0rICogdXNlIHlvdXIgdmVy c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlv dXIKLSsgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCi0rICogdGhl IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo aXMgZmlsZSB1bmRlcgotKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBH UEwgb3IgdGhlIExHUEwuCi0rICoKLSsgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq LwotKyNpbmNsdWRlICJfam5pL29yZ19tb3ppbGxhX2pzc19hc24xX0FTTjFVdGlsLmgiCi0rI2lu Y2x1ZGUgPHBrMTFmdW5jLmg+Ci0rI2luY2x1ZGUgPG5zcHIuaD4KLSsjaW5jbHVkZSA8c2VjY29t b24uaD4KLSsjaW5jbHVkZSA8a2V5Lmg+Ci0rI2luY2x1ZGUgPHNlY2l0ZW0uaD4KLSsKLSsjaW5j bHVkZSA8anNzdXRpbC5oPgotKyNpbmNsdWRlIDxqYXZhX2lkcy5oPgotKyNpbmNsdWRlIDxqc3Nf ZXhjZXB0aW9ucy5oPgotKyNpbmNsdWRlIDxBbGdvcml0aG0uaD4KLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLSsgKgotKyAqIEphdmFfb3JnX21vemlsbGFfanNzX2FzbjFfQVNOMVV0aWxfZ2V0VGFnRGVz Y3JpcHRpb25CeU9pZAotKyAqICAgICByZXRyaWV2ZXMgT0lEIGRlc2NyaXB0aW9uIGJ5IE5TUydz IE9JRCBUYWcgaWRlbnRpZmllcgotKyAqICAgICB0aGUgT0lEIGJ5dGUgYXJyYXkgaXMgZXhwZWN0 ZWQgdG8gYmUgd2l0aG91dCB0aGUgT0lEIFRhZyAoNikgYW5kIHNpemUKLSsgKiAgICAgICAgKHRv Z2V0aGVyIDIgYnl0ZXMpCi0rICovCi0rSk5JRVhQT1JUIGpzdHJpbmcgSk5JQ0FMTAotK0phdmFf b3JnX21vemlsbGFfanNzX2FzbjFfQVNOMVV0aWxfZ2V0VGFnRGVzY3JpcHRpb25CeU9pZChKTklF bnYgKmVudiwgam9iamVjdCB0aGlzLCBqYnl0ZUFycmF5IG9pZEJBKQotK3sKLSsgICAgU0VDSXRl bSAqb2lkID0gTlVMTDsKLSsgICAgU0VDT2lkVGFnIG9pZFRhZyA9IFNFQ19PSURfVU5LTk9XTjsK LSsgICAgY2hhciAqb2lkRGVzYyA9IE5VTEw7Ci0rICAgIGpzdHJpbmcgZGVzY3JpcHRpb249ICIi OwotKwotKyAgICBpZiAob2lkQkEgPT0gTlVMTCkgewotKyAgICAgICAgSlNTX3Rocm93TXNnKGVu diwgSU5WQUxJRF9QQVJBTUVURVJfRVhDRVBUSU9OLAotKyAgICAgICAgICAgICJKU1MgZ2V0VGFn RGVzY3JpcHRpb25CeU9pZDogb2lkQkEgbnVsbCIpOwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0r ICAgIH0gZWxzZSB7Ci0rICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSsgICAgICAgICAqIFNldHVwIHRoZSBwYXJhbWV0ZXJzCi0rICAg ICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LSsgICAgICAgIG9pZCA9IEpTU19CeXRlQXJyYXlUb1NFQ0l0ZW0oZW52LCBvaWRCQSk7Ci0rICAg ICAgICBpZiAob2lkID09IE5VTEwpIHsKLSsgICAgICAgICAgICBKU1NfdGhyb3dNc2coZW52LCBJ TlZBTElEX1BBUkFNRVRFUl9FWENFUFRJT04sCi0rICAgICAgICAgICAgICAgICJKU1MgZ2V0VGFn RGVzY3JpcHRpb25CeU9pZDogSlNTX0J5dGVBcnJheVRvU0VDSXRlbSBmYWlsZWQiKTsKLSsgICAg ICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8qCi0rICAgICAg ICAgKiBTRUNPSURfRmluZE9JRFRhZygpIHJldHVybnMgU0VDX09JRF9VTktOT1dOIGlmIG5vIG1h dGNoCi0rICAgICAgICAgKi8KLSsgICAgICAgIG9pZFRhZyA9IFNFQ09JRF9GaW5kT0lEVGFnKG9p ZCk7Ci0rICAgICAgICBpZiAob2lkVGFnID09IFNFQ19PSURfVU5LTk9XTikgewotKyAgICAgICAg ICAgIEpTU190aHJvd01zZyhlbnYsIElOVkFMSURfUEFSQU1FVEVSX0VYQ0VQVElPTiwKLSsgICAg ICAgICAgICAgICAgIkpTUyBnZXRUYWdEZXNjcmlwdGlvbkJ5T2lkOiBPSUQgVU5LTk9XTiIpOwot KyAgICAgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICAgICAgfQotKwotKyAgICAgICAgb2lkRGVz YyA9IFNFQ09JRF9GaW5kT0lEVGFnRGVzY3JpcHRpb24ob2lkVGFnKTsKLSsgICAgICAgIGlmIChv aWREZXNjID09IE5VTEwpIHsKLSsgICAgICAgICAgICBvaWREZXNjID0gIiI7Ci0rICAgICAgICB9 Ci0rICAgICAgICBkZXNjcmlwdGlvbiA9ICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgb2lkRGVz Yyk7Ci0rICAgIH0KLSsKLStmaW5pc2g6Ci0rICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSt9Ci1k aWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2Fz bjEvQVNOMVV0aWwuamF2YS5jZnVPcmlnIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvYXNuMS9BU04xVXRpbC5qYXZhCi0tLS0ganNzLTQuMi42L21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL0FTTjFVdGlsLmphdmEuY2Z1T3JpZwky MDEyLTAzLTE5IDE3OjQ4OjU3LjExOTA0ODAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvYXNuMS9BU04xVXRpbC5qYXZhCTIwMTItMDMt MTkgMTg6MDM6MjAuNzY2MTg2MDAwIC0wNzAwCi1AQCAtMzYsNiArMzYsOCBAQAotIHBhY2thZ2Ug b3JnLm1vemlsbGEuanNzLmFzbjE7Ci0gCi0gaW1wb3J0IGphdmEuaW8uKjsKLStpbXBvcnQgamF2 YS51dGlsLkFycmF5czsKLSsKLSBpbXBvcnQgb3JnLm1vemlsbGEuanNzLmFzbjEuSW52YWxpZEJF UkV4Y2VwdGlvbjsKLSBpbXBvcnQgb3JnLm1vemlsbGEuanNzLnV0aWwuQXNzZXJ0OwotIAotQEAg LTExNCw0ICsxMTYsNzEgQEAgcHVibGljIGNsYXNzIEFTTjFVdGlsIHsKLSAgICAgICAgICAgICBu dW1SZWFkICs9IG5yOwotICAgICAgICAgfQotICAgICB9Ci0rCi0rICAgIC8qKgotKyAgICAgKiBy ZXR1cm5zIHRoZSBFQ0MgY3VydmUgYnl0ZSBhcnJheSBnaXZlbiB0aGUgWDUwOSBwdWJsaWMga2V5 IGJ5dGUgYXJyYXkKLSsgICAgICoKLSsgICAgICogQHBhcmFtIFg1MDlQdWJLZXlCeXRlcyBieXRl IGFycmF5IG9mIGFuIFg1MDlQdWJLZXkKLSsgICAgICogQHBhcmFtIHdpdGhIZWFkZXIgdGVsbHMg aWYgdGhlIHJldHVybiBieWVzIHNob3VsZCBpbmNsdWxkZSB0aGUgdGFnIGFuZCBzaXplIGhlYWRl ciBvciBub3QKLSsgICAgICovCi0rICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEVDQ3VydmVC eXRlc0J5WDUwOVB1YmxpY0tleUJ5dGVzKGJ5dGVbXSBYNTA5UHViS2V5Qnl0ZXMsCi0rICAgICAg ICBib29sZWFuIHdpdGhIZWFkZXIpCi0rICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhj ZXB0aW9uLCBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24sCi0rICAgICAgICAgICAgICAg TnVsbFBvaW50ZXJFeGNlcHRpb24KLSsgICAgewotKyAgICAgICAgaWYgKChYNTA5UHViS2V5Qnl0 ZXMgPT0gbnVsbCkgfHwgKFg1MDlQdWJLZXlCeXRlcy5sZW5ndGggPT0gMCkpIHsKLSsgICAgICAg ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJYNTA5UHViS2V5Qnl0ZXMg bnVsbCIpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgLyogRUMgcHVibGljIGtleSBPSUQgY29t cGxldGUgd2l0aCB0YWcgYW5kIHNpemUgKi8KLSsgICAgICAgIGJ5dGVbXSBFQ19QdWJPSURCeXRl c19mdWxsID0KLSsgICAgICAgICAgICBBU04xVXRpbC5lbmNvZGUoT0JKRUNUX0lERU5USUZJRVIu RUNfUFVCS0VZX09JRCk7Ci0rCi0rICAgICAgICAvKiBFQyBwdWJsaWMga2V5IE9JRCB3aXRob3V0 IHRhZyBhbmQgc2l6ZSAqLwotKyAgICAgICAgYnl0ZVtdIEVDX1B1Yk9JREJ5dGVzID0KLSsgICAg ICAgICAgICBBcnJheXMuY29weU9mUmFuZ2UoRUNfUHViT0lEQnl0ZXNfZnVsbCwgMiwgRUNfUHVi T0lEQnl0ZXNfZnVsbC5sZW5ndGgpOwotKwotKyAgICAgICAgaW50IGN1cnZlQmVnaW5JbmRleCA9 IDA7Ci0rICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHg8PSBYNTA5UHViS2V5Qnl0ZXMubGVu Z3RoOyBpZHgrKykgewotKyAgICAgICAgICAgIGJ5dGVbXSB0bXAgPSAKLSsgICAgICAgICAgICAg ICAgQXJyYXlzLmNvcHlPZlJhbmdlKFg1MDlQdWJLZXlCeXRlcywgaWR4LCBpZHgrRUNfUHViT0lE Qnl0ZXMubGVuZ3RoKTsKLSsgICAgICAgICAgICBpZiAoQXJyYXlzLmVxdWFscyh0bXAsIEVDX1B1 Yk9JREJ5dGVzKSkgewotKyAgICAgICAgICAgICAgICBjdXJ2ZUJlZ2luSW5kZXggPSBpZHgrIEVD X1B1Yk9JREJ5dGVzLmxlbmd0aDsKLSsgICAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAg ICAgfQotKyAgICAgICAgfQotKwotKyAgICAgICAgaW50IGN1cnZlQnl0ZUFycmF5U2l6ZSA9IChp bnQpIFg1MDlQdWJLZXlCeXRlc1tjdXJ2ZUJlZ2luSW5kZXgrIDFdOwotKwotKyAgICAgICAgaWYg KHdpdGhIZWFkZXIpIHsKLSsgICAgICAgICAgICAvKiBhY3R1YWwgY3VydmUgd2l0aCB0YWcgYW5k IHNpemUgKi8KLSsgICAgICAgICAgICBieXRlIGN1cnZlW10gPSBBcnJheXMuY29weU9mUmFuZ2Uo WDUwOVB1YktleUJ5dGVzLCBjdXJ2ZUJlZ2luSW5kZXgsIGN1cnZlQmVnaW5JbmRleCArIGN1cnZl Qnl0ZUFycmF5U2l6ZSArIDIpOwotKyAgICAgICAgICAgIHJldHVybiBjdXJ2ZTsKLSsgICAgICAg IH0gZWxzZSB7Ci0rICAgICAgICAgICAgLyogYWN0dWFsIGN1cnZlIHdpdGhvdXQgdGFnIGFuZCBz aXplICovCi0rICAgICAgICAgICAgYnl0ZSBjdXJ2ZVtdID0gCi0rICAgICAgICAgICAgICAgIEFy cmF5cy5jb3B5T2ZSYW5nZShYNTA5UHViS2V5Qnl0ZXMsIGN1cnZlQmVnaW5JbmRleCArIDIsCi0r ICAgICAgICAgICAgICAgICAgICBjdXJ2ZUJlZ2luSW5kZXggKyAyICsgY3VydmVCeXRlQXJyYXlT aXplKTsKLSsgICAgICAgICAgICByZXR1cm4gY3VydmU7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsK LSsgICAgLyoqCi0rICAgICAqIGdldE9JRGRlc2NyaXB0aW9uKCkgcmV0dXJucyBhIHRleHQgZGVz Y3JpcHRpb24gb2YgdGhlIE9JRAotKyAgICAgKiAgICAgZnJvbSBPSUQgYnl0ZSBhcnJheQotKyAg ICAgKiB0aGUgT0lEIGJ5dGUgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUgd2l0aG91dCB0aGUgT0lE IFRhZyAoNikgYW5kIHNpemUKLSsgICAgICogICAgKHRvZ2V0aGVyIDIgYnl0ZXMpCi0rICAgICAq LwotKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZwotKyAgICBnZXRPSURkZXNjcmlwdGlvbihieXRl W10gb2lkQkEpIHsKLSsgICAgICAgIHJldHVybiBnZXRUYWdEZXNjcmlwdGlvbkJ5T2lkKG9pZEJB KTsKLSsgICAgfQotKwotKyAgICAvKioKLSsgICAgICogZ2V0IE9JRCBkZXNjcmlwdGlvbiBKTkkg bWV0aG9kCi0rICAgICAqLwotKyAgICBwcml2YXRlIG5hdGl2ZSBzdGF0aWMgU3RyaW5nCi0rICAg IGdldFRhZ0Rlc2NyaXB0aW9uQnlPaWQoYnl0ZVtdIG9pZEJBKTsKLSsKLSsKLSB9Ci1kaWZmIC11 cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2FzbjEvTWFr ZWZpbGUuY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2FzbjEvTWFrZWZpbGUKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL2FzbjEvTWFrZWZpbGUuY2Z1T3JpZwkyMDEyLTAzLTE5IDE3OjQ4OjU3LjQ2 NzA0ODAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvYXNuMS9NYWtlZmlsZQkyMDEyLTAzLTE5IDE3OjQ4OjUzLjM0ODA1MjAwMCAtMDcw MAotQEAgLTU3LDcgKzU3LDcgQEAgaW5jbHVkZSAkKENPUkVfREVQVEgpLyQoTU9EVUxFKS9jb25m aWcvYwotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gIyAoNCkgSW5jbHVkZSAibG9jYWwiIHBsYXRmb3JtLWRl cGVuZGVudCBhc3NpZ25tZW50cyAoT1BUSU9OQUwpLiAgICAgICMKLSAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot LSNpbmNsdWRlIGNvbmZpZy5tawotK2luY2x1ZGUgY29uZmlnLm1rCi0gCi0gCi0gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvYXNuMS9PQkpFQ1RfSURFTlRJRklFUi5qYXZhLmNmdU9yaWcganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL09CSkVDVF9JREVOVElGSUVSLmph dmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2Fz bjEvT0JKRUNUX0lERU5USUZJRVIuamF2YS5jZnVPcmlnCTIwMTItMDMtMTkgMTc6NDg6NTcuMTc4 MDQ4MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9hc24xL09CSkVDVF9JREVOVElGSUVSLmphdmEJMjAxMi0wMy0xOSAxNzo0ODo1My4z NjQwNTIwMDAgLTA3MDAKLUBAIC01Miw2ICs1MiwxMiBAQCBwdWJsaWMgY2xhc3MgT0JKRUNUX0lE RU5USUZJRVIgaW1wbGVtZW50Ci0gICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gCi0gICAgIC8qKgotKyAg ICAgKiBUaGUgT0lEIHNwYWNlIGZvciBFQwotKyAgICAgKi8KLSsgICAgcHVibGljIHN0YXRpYyBm aW5hbCBPQkpFQ1RfSURFTlRJRklFUiBFQ19QVUJLRVlfT0lEID0KLSsgICAgICAgIG5ldyBPQkpF Q1RfSURFTlRJRklFUiggbmV3IGxvbmdbXXsxLCAyLCA4NDAsIDEwMDQ1LCAyLCAxfSApOwotKwot KyAgICAvKioKLSAgICAgICogVGhlIE9JRCBzcGFjZSBmb3IgUlNBIERhdGEgU2VjdXJpdHksIElu Yy4KLSAgICAgICovCi0gICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT0JKRUNUX0lERU5USUZJRVIg UlNBRFNJID0KLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvYXNuMS9jb25maWcubWsuY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL2FzbjEvY29uZmlnLm1rCi0tLS0ganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL2NvbmZpZy5tay5jZnVPcmlnCTIw MTItMDMtMTkgMTc6NDg6NTcuMzk4MDQ4MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL2NvbmZpZy5tawkyMDEyLTAzLTE5IDE3 OjQ4OjUzLjM4MTA1MjAwMCAtMDcwMAotQEAgLTAsMCArMSw0MSBAQAotKyMgCi0rIyAqKioqKiBC RUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0rIyBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQ TCAyLjEKLSsjCi0rIyBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRo ZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSsjIDEuMSAodGhlICJMaWNlbnNlIik7 IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotKyMg dGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKyMg aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0rIwotKyMgU29mdHdhcmUgZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSsj IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu IFNlZSB0aGUgTGljZW5zZQotKyMgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg cmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSsjIExpY2Vuc2UuCi0rIwotKyMgVGhl IE9yaWdpbmFsIENvZGUgaXMgdGhlIE5ldHNjYXBlIFNlY3VyaXR5IFNlcnZpY2VzIGZvciBKYXZh LgotKyMKLSsjIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwot KyMgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0rIyBQb3J0aW9ucyBjcmVh dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAK LSsjIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsjCi0rIyBD b250cmlidXRvcihzKToKLSsjCi0rIyBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotKyMgZWl0aGVyIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9y Ci0rIyB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y IGxhdGVyICh0aGUgIkxHUEwiKSwKLSsjIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg dGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0rIyBvZiB0aG9zZSBh Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp bGUgb25seQotKyMgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotKyMgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSsjIGRlY2lz aW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0 aCB0aGUgbm90aWNlCi0rIyBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BM IG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKyMgdGhlIHByb3Zpc2lvbnMgYWJv dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgot KyMgdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K LSsjCi0rIyAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKgotK1RBUkdFVFM9JChMSUJSQVJZ KQotK1NIQVJFRF9MSUJSQVJZPQotK0lNUE9SVF9MSUJSQVJZPQotKwotK05PX01EX1JFTEVBU0Ug PSAxCi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2FzbjEvbWFuaWZlc3QubW4uY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2FzbjEvbWFuaWZlc3QubW4KLS0tLSBqc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2FzbjEvbWFuaWZlc3QubW4uY2Z1T3JpZwky MDEyLTAzLTE5IDE3OjQ4OjU3LjQzNDA0ODAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvYXNuMS9tYW5pZmVzdC5tbgkyMDEyLTAzLTE5 IDE3OjQ4OjUzLjQwMTA1MjAwMCAtMDcwMAotQEAgLTQxLDYgKzQxLDggQEAgTU9EVUxFID0ganNz Ci0gIAotIE5TX1VTRV9KREsgPSAxCi0gCi0rUkVRVUlSRVMgPSAgICAgIG5zcHIyMCBuc3MKLSsK LSBQQUNLQUdFID0gICAgICAgb3JnL21vemlsbGEvanNzL2FzbjEKLSAKLSBDTEFTU0VTID0gCQkJ CQkJCQkJCQlcCi1AQCAtMTEyLDMgKzExNCw5IEBAIEpTUkNTID0gCQkJCQkJCQkJCQlcCi0gICAg ICAgICAgICAgVVRDVGltZS5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICBVVEY4U3RyaW5nLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAotIAkJCSQo TlVMTCkKLSsKLStDU1JDUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgQVNOMVV0aWwuYyAgICAgXAotKyAgICAgICAgICAgICQoTlVMTCkKLSsKLStMSUJSQVJZ X05BTUUgPSBqc3Nhc24xCi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL21hbmlmZXN0Lm1uLmNmdU9yaWcganNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9tYW5pZmVzdC5tbgotLS0tIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvbWFuaWZlc3QubW4uY2Z1T3JpZwkyMDEy LTAzLTE5IDE3OjQ4OjU3LjUwMjA0ODAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvbWFuaWZlc3QubW4JMjAxMi0wMy0xOSAxNzo0ODo1 My40MTMwNTIwMDAgLTA3MDAKLUBAIC00OCw2ICs0OCw3IEBAIERJUlMgPQlcCi0gCWNyeXB0bwlc Ci0gICAgIFNlY3JldERlY29kZXJSaW5nIFwKLSAJcGtjczExCVwKLSsgICAgYXNuMSAgIFwKLSAg ICAgc3NsICAgICBcCi0gICAgIHByb3ZpZGVyIFwKLSAJJChOVUxMKQotZGlmZiAtdXAganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUVDUHVi bGljS2V5LmphdmEuY2Z1T3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3BrY3MxMS9QSzExRUNQdWJsaWNLZXkuamF2YQotLS0tIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFFQ1B1YmxpY0tleS5q YXZhLmNmdU9yaWcJMjAxMi0wMy0xOSAxNzo0ODo1Ny4yMzgwNDgwMDAgLTA3MDAKLSsrKyBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExRUNQ dWJsaWNLZXkuamF2YQkyMDEyLTAzLTE5IDE3OjQ4OjUzLjQzMjA1MjAwMCAtMDcwMAotQEAgLTYx LDE1ICs2MSwyOSBAQCBwdWJsaWMgZmluYWwgY2xhc3MgUEsxMUVDUHVibGljS2V5IGV4dGVuCi0g Ly8gICAgICB9Ci0gLy8gICAgfQotIC8vCi0tLy8gICAgcHVibGljIEJpZ0ludGVnZXIgZ2V0Vygp IHsKLS0vLyAgICAgIHRyeSB7Ci0tLy8gICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlciggZ2V0 V0J5dGVBcnJheSgpICk7Ci0tLy8gICAgICB9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBl KSB7Ci0tLy8gICAgICAgIEFzc2VydC5ub3RSZWFjaGVkKCJVbmFibGUgdG8gZGVjb2RlIERTQSBw dWJsaWMgdmFsdWUiKTsKLS0vLyAgICAgICAgcmV0dXJuIG51bGw7Ci0tLy8gICAgICB9Ci0tLy8g ICAgfQotLS8vCi0tLy8gICAgcHJpdmF0ZSBuYXRpdmUgYnl0ZVtdIGdldEN1cnZlQnl0ZUFycmF5 KCk7Ci0tLy8gICAgcHJpdmF0ZSBuYXRpdmUgYnl0ZVtdIGdldFdCeXRlQXJyYXkoKTsKLSsKLSsg ICAgcHVibGljIEJpZ0ludGVnZXIgZ2V0Q3VydmUoKSB7Ci0rICAgICAgdHJ5IHsKLSsgICAgICAg IHJldHVybiBuZXcgQmlnSW50ZWdlciggZ2V0Q3VydmVCeXRlQXJyYXkoKSApOwotKyAgICAgIH0g Y2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSsgICAgICAgQXNzZXJ0Lm5vdFJlYWNo ZWQoIlVuYWJsZSB0byBkZWNvZGUgRUMgY3VydmUiKTsKLSsgICAgICAgcmV0dXJuIG51bGw7Ci0r ICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHB1YmxpYyBieXRlW10gZ2V0Q3VydmVCQSgpIHsKLSsg ICAgICAgIHJldHVybiBnZXRDdXJ2ZUJ5dGVBcnJheSgpOwotKyAgICB9Ci0rCi0rICAgIHB1Ymxp YyBCaWdJbnRlZ2VyIGdldFcoKSB7Ci0rICAgICAgdHJ5IHsKLSsgICAgICAgIHJldHVybiBuZXcg QmlnSW50ZWdlciggZ2V0V0J5dGVBcnJheSgpICk7Ci0rICAgICAgfSBjYXRjaChOdW1iZXJGb3Jt YXRFeGNlcHRpb24gZSkgewotKyAgICAgICAgQXNzZXJ0Lm5vdFJlYWNoZWQoIlVuYWJsZSB0byBk ZWNvZGUgRUMgcHVibGljIHZhbHVlIik7Ci0rICAgICAgICByZXR1cm4gbnVsbDsKLSsgICAgICB9 Ci0rICAgIH0KLSsKLSsgICAgcHJpdmF0ZSBuYXRpdmUgYnl0ZVtdIGdldEN1cnZlQnl0ZUFycmF5 KCk7Ci0rICAgIHByaXZhdGUgbmF0aXZlIGJ5dGVbXSBnZXRXQnl0ZUFycmF5KCk7Ci0gfQotZGlm ZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2Nz MTEvUEsxMUtleVdyYXBwZXIuYy5jZnVPcmlnIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMKLS0tLSBqc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBl ci5jLmNmdU9yaWcJMjAxMi0wMy0xOSAxNzo0ODo1Ny4yNzIwNDgwMDAgLTA3MDAKLSsrKyBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5 V3JhcHBlci5jCTIwMTItMDMtMTkgMTc6NDg6NTMuNDUwMDUyMDAwIC0wNzAwCi1AQCAtNDUwLDYg KzQ1MCwxNCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVdyYXBwCi0gICAg ICAgICAgICAgbnVtQXR0cmlicyA9IDQ7Ci0gICAgICAgICB9Ci0gCWJyZWFrOwotKyAgICBjYXNl IENLS19FQzoKLSsgICAgICAgIG51bUF0dHJpYnMgPSAxOwotKyAgICAgICAgYXR0cmlic1swXSA9 IENLQV9TSUdOOwotKyAgICAgICAgaWYgKGlzRXh0cmFjdGFibGUpIHsKLSsgICAgICAgICAgICBh dHRyaWJzWzFdID0gQ0tBX0VYVFJBQ1RBQkxFOwotKyAgICAgICAgICAgIG51bUF0dHJpYnMgPSAy OwotKyAgICAgICAgfQotKwlicmVhazsKLSAgICAgY2FzZSBDS0tfRFNBOgotICAgICAgICAgYXR0 cmlic1swXSA9IENLQV9TSUdOOwotICAgICAgICAgbnVtQXR0cmlicyA9IDE7Ci1AQCAtNDYwLDEx ICs0NjgsNiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVdyYXBwCi0gICAg ICAgICBhdHRyaWJzWzBdID0gQ0tBX0RFUklWRTsKLSAgICAgICAgIG51bUF0dHJpYnMgPSAxOwot IAlicmVhazsKLS0gICAgY2FzZSBDS0tfRUM6Ci0tICAgICAgICBhdHRyaWJzWzBdID0gQ0tBX1NJ R047Ci0tICAgICAgICBhdHRyaWJzWzFdID0gQ0tBX0RFUklWRTsKLS0gICAgICAgIG51bUF0dHJp YnMgPSAyOwotLQlicmVhazsKLSAgICAgZGVmYXVsdDoKLSAgICAgICAgIC8qIHVua25vd24ga2V5 IHR5cGUgKi8KLSAgICAgICAgIFBSX0FTU0VSVChQUl9GQUxTRSk7Ci1AQCAtNDc5LDcgKzQ4Miw3 IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAgICAgICAgICAg ICAgICAgYXR0cmlicywgbnVtQXR0cmlicywgTlVMTCAvKndpbmN4Ki8pOwotICAgICBpZiggcHJp dmsgPT0gTlVMTCApIHsKLSAgICAgICAgIGNoYXIgZXJyWzI1Nl0gPSB7MH07Ci0tICAgICAgICBQ Ul9zbnByaW50ZihlcnIsIDI1NiwgIktleSBVbndyYXAgZmFpbGVkIG9uIHRva2VuOiVkIiwgUFJf R2V0RXJyb3IoKSk7Ci0rICAgICAgICBQUl9zbnByaW50ZihlcnIsIDI1NiwgIktleSBVbndyYXAg ZmFpbGVkIG9uIHRva2VuOmVycm9yPSVkLCBrZXlUeXBlPSVkIiwgUFJfR2V0RXJyb3IoKSwga2V5 VHlwZSk7Ci0gICAgICAgICBKU1NfdGhyb3dNc2coZW52LCBUT0tFTl9FWENFUFRJT04sIGVycik7 Ci0gICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgfQotZGlmZiAtdXAganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuamF2 YS5jZnVPcmlnIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv cGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhLmNmdU9yaWcJ MjAxMi0wMy0xOSAxNzo0ODo1Ny4yOTgwNDgwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZh CTIwMTItMDMtMTkgMTc6NDg6NTMuNDcxMDUyMDAwIC0wNzAwCi1AQCAtNDU5LDEzICs0NTksMTkg QEAgZmluYWwgY2xhc3MgUEsxMUtleVdyYXBwZXIgaW1wbGVtZW50cyBLZQotICAgICAgICAgaWYo IHR5cGUgPT0gUHJpdmF0ZUtleS5SU0EgKSB7Ci0gICAgICAgICAgICAgaWYoICEocHVibGljS2V5 IGluc3RhbmNlb2YgUlNBUHVibGljS2V5KSkgewotICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg SW52YWxpZEtleUV4Y2VwdGlvbigiVHlwZSBvZiBwdWJsaWMga2V5IGRvZXMgbm90ICIrCi0tICAg ICAgICAgICAgICAgICAgICAibWF0Y2ggdHlwZSBvZiBwcml2YXRlIGtleSIpOwotKyAgICAgICAg ICAgICAgICAgICAgIm1hdGNoIHR5cGUgb2YgcHJpdmF0ZSBrZXkgd2hpY2ggaXMgUlNBIik7Ci0g ICAgICAgICAgICAgfQotICAgICAgICAgICAgIHJldHVybiAoKFJTQVB1YmxpY0tleSlwdWJsaWNL ZXkpLmdldE1vZHVsdXMoKS50b0J5dGVBcnJheSgpOwotKyAgICAgICAgfSBlbHNlIGlmKHR5cGUg PT0gUHJpdmF0ZUtleS5FQykgewotKyAgICAgICAgICAgIGlmKCAhKHB1YmxpY0tleSBpbnN0YW5j ZW9mIFBLMTFFQ1B1YmxpY0tleSkgKSB7Ci0rICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZh bGlkS2V5RXhjZXB0aW9uKCJUeXBlIG9mIHB1YmxpYyBrZXkgZG9lcyBub3QgIisKLSsgICAgICAg ICAgICAgICAgICAgICJtYXRjaCB0eXBlIG9mIHByaXZhdGUga2V5IHdoaWNoIGlzIEVDIik7Ci0r ICAgICAgICAgICAgfQotKyAgICAgICAgICAgIHJldHVybiAoKFBLMTFFQ1B1YmxpY0tleSlwdWJs aWNLZXkpLmdldFcoKS50b0J5dGVBcnJheSgpOwotICAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT0g UHJpdmF0ZUtleS5EU0EpIHsKLSAgICAgICAgICAgICBpZiggIShwdWJsaWNLZXkgaW5zdGFuY2Vv ZiBEU0FQdWJsaWNLZXkpICkgewotICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtl eUV4Y2VwdGlvbigiVHlwZSBvZiBwdWJsaWMga2V5IGRvZXMgbm90ICIrCi0tICAgICAgICAgICAg ICAgICAgICAibWF0Y2ggdHlwZSBvZiBwcml2YXRlIGtleSIpOwotKyAgICAgICAgICAgICAgICAg ICAgIm1hdGNoIHR5cGUgb2YgcHJpdmF0ZSBrZXkgd2hpY2ggaXMgRFNBIik7Ci0gICAgICAgICAg ICAgfQotICAgICAgICAgICAgIHJldHVybiAoKERTQVB1YmxpY0tleSlwdWJsaWNLZXkpLmdldFko KS50b0J5dGVBcnJheSgpOwotICAgICAgICAgfSBlbHNlIHsKCmRpZmYgLS1naXQgYS9qc3MtRUND LXBvcC5wYXRjaCBiL2pzcy1FQ0MtcG9wLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA0OGRhODlkLi4wMDAwMDAwCi0tLSBhL2pzcy1FQ0MtcG9wLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMjkgKzAsMCBAQAotZGlmZiAtcnVwTiBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvY3JtZi9DZXJ0UmVxTXNnLmphdmEganNzLTQuMi42 LmNmdS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jcm1mL0NlcnRS ZXFNc2cuamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtpeC9jcm1mL0NlcnRSZXFNc2cuamF2YQkyMDA0LTA0LTI1IDA4OjAyOjI2LjAwMDAw MDAwMCAtMDcwMAotKysrIGpzcy00LjIuNi5jZnUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3BraXgvY3JtZi9DZXJ0UmVxTXNnLmphdmEJMjAwOS0wNy0yNyAxMzozODozOC4x OTc0MjIwMDAgLTA3MDAKLUBAIC0xMzAsNiArMTMwLDE2IEBAIHB1YmxpYyBjbGFzcyBDZXJ0UmVx TXNnIGltcGxlbWVudHMgQVNOMVYKLSAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAKLSAJcHVibGljIHZv aWQgdmVyaWZ5KCkgdGhyb3dzIFNpZ25hdHVyZUV4Y2VwdGlvbiwKLSsgICAgICAgIEludmFsaWRL ZXlGb3JtYXRFeGNlcHRpb24sIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwKLSsgICAgICAgIG9y Zy5tb3ppbGxhLmpzcy5DcnlwdG9NYW5hZ2VyLk5vdEluaXRpYWxpemVkRXhjZXB0aW9uLAotKyAg ICAgICAgVG9rZW5FeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuSW52YWxpZEtleUV4Y2VwdGlvbiwg SU9FeGNlcHRpb257Ci0rCi0rICAgICAgICBDcnlwdG9Ub2tlbiB0b2tlbiA9IENyeXB0b01hbmFn ZXIuZ2V0SW5zdGFuY2UoKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldElu dGVybmFsQ3J5cHRvVG9rZW4oKTsKLSsgICAgICAgIHZlcmlmeSh0b2tlbik7Ci0rICAgIH0KLSsK LSsgICAgcHVibGljIHZvaWQgdmVyaWZ5KENyeXB0b1Rva2VuIHRva2VuKSB0aHJvd3MgU2lnbmF0 dXJlRXhjZXB0aW9uLAotIAkJSW52YWxpZEtleUZvcm1hdEV4Y2VwdGlvbiwgTm9TdWNoQWxnb3Jp dGhtRXhjZXB0aW9uLAotIAkJb3JnLm1vemlsbGEuanNzLkNyeXB0b01hbmFnZXIuTm90SW5pdGlh bGl6ZWRFeGNlcHRpb24sCi0gCQlUb2tlbkV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5JbnZhbGlk S2V5RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbnsKLUBAIC0xNDksOCArMTU5LDYgQEAgcHVibGljIGNs YXNzIENlcnRSZXFNc2cgaW1wbGVtZW50cyBBU04xVgotIAkJCQlwdWJrZXkgPSAoUHVibGljS2V5 KSBzcGkudG9QdWJsaWNLZXkoKTsKLSAJCQl9Ci0gCi0tCQkJQ3J5cHRvVG9rZW4gdG9rZW4gPSBD cnlwdG9NYW5hZ2VyLmdldEluc3RhbmNlKCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5nZXRJbnRlcm5hbENyeXB0b1Rva2VuKCk7Ci0gCQkJU2lnbmF0dXJlQWxnb3JpdGhtIHNp Z0FsZyA9Ci0gCQkJCVNpZ25hdHVyZUFsZ29yaXRobS5mcm9tT0lEKGFsZy5nZXRPSUQoKSk7Ci0g CQkJU2lnbmF0dXJlIHNpZyA9IHRva2VuLmdldFNpZ25hdHVyZUNvbnRleHQoc2lnQWxnKTsKCmRp ZmYgLS1naXQgYS9qc3MtRUNDX2tleWdlbl9ieUN1cnZlTmFtZS5wYXRjaCBiL2pzcy1FQ0Nfa2V5 Z2VuX2J5Q3VydmVOYW1lLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjE3 MTgzLi4wMDAwMDAwCi0tLSBhL2pzcy1FQ0Nfa2V5Z2VuX2J5Q3VydmVOYW1lLnBhdGNoCisrKyAv ZGV2L251bGwKQEAgLTEsNDkwICswLDAgQEAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVBhaXJHZW5lcmF0b3IuamF2YS5m aXgganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8v S2V5UGFpckdlbmVyYXRvci5qYXZhCi0tLS0ganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvci5qYXZhLmZpeAkyMDEwLTEw LTIwIDA5OjU0OjM1LjE4OTY4MDAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVBhaXJHZW5lcmF0b3IuamF2YQkyMDEw LTEwLTIwIDEwOjU0OjUzLjE1NDgzNTAwMCAtMDcwMAotQEAgLTE5Niw3ICsxOTYsMTAgQEAgcHVi bGljIGNsYXNzIEtleVBhaXJHZW5lcmF0b3IgewotICAgICAgICAgZW5naW5lLnNldEtleVBhaXJV c2FnZXModXNhZ2VzLHVzYWdlc19tYXNrKTsKLSAgICAgfQotICAgIAotLQotKyAgICBwdWJsaWMg aW50IGdldEN1cnZlQ29kZUJ5TmFtZShTdHJpbmcgY3VydmVOYW1lKQotKyAgICAgICAgdGhyb3dz IEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24gewotKyAgICAgICAgcmV0dXJuIGVuZ2luZS5nZXRD dXJ2ZUNvZGVCeU5hbWUoY3VydmVOYW1lKTsKLSsgICAgfQotIAotIAotIAotZGlmZiAtdXAganNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFp ckdlbmVyYXRvclNwaS5qYXZhLmZpeCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL2NyeXB0by9LZXlQYWlyR2VuZXJhdG9yU3BpLmphdmEKLS0tLSBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlQYWlyR2Vu ZXJhdG9yU3BpLmphdmEuZml4CTIwMTAtMTAtMjAgMDk6NTQ6NTIuMzkzNjI4MDAwIC0wNzAwCi0r KysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8v S2V5UGFpckdlbmVyYXRvclNwaS5qYXZhCTIwMTAtMTAtMjAgMTA6NTU6MzkuNDQxNjk4MDAwIC0w NzAwCi1AQCAtOTQsNCArOTQsNiBAQCBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgS2V5UGFpckdlbmVy YXRvclNwCi0gCi0gICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEtleVBhaXJVc2FnZXMoS2V5 UGFpckdlbmVyYXRvclNwaS5Vc2FnZVtdIHVzYWdlcywgCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgS2V5UGFpckdlbmVyYXRvclNwaS5Vc2FnZVtdIHVzYWdlc19t YXNrKTsKLSsKLSsgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRDdXJ2ZUNvZGVCeU5hbWUoU3Ry aW5nIGN1cnZlTmFtZSkgdGhyb3dzIEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb247Ci0gfQotZGlm ZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2Nz MTEvUEsxMUtleVBhaXJHZW5lcmF0b3IuamF2YS5maXgganNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVBhaXJHZW5lcmF0b3IuamF2YQot LS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEx L1BLMTFLZXlQYWlyR2VuZXJhdG9yLmphdmEuZml4CTIwMTAtMTAtMTUgMTA6MzA6NTcuODMyMTk2 MDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMUtleVBhaXJHZW5lcmF0b3IuamF2YQkyMDEwLTEwLTIwIDExOjA5OjMw LjUyMzIwODAwMCAtMDcwMAotQEAgLTQ0LDYgKzQ0LDcgQEAgaW1wb3J0IGphdmEuc2VjdXJpdHku KjsKLSBpbXBvcnQgamF2YS5zZWN1cml0eS5TZWN1cmVSYW5kb207Ci0gaW1wb3J0IGphdmEuc2Vj dXJpdHkuc3BlYy5BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOwotIGltcG9ydCBqYXZhLnNlY3VyaXR5 LnNwZWMuRFNBUGFyYW1ldGVyU3BlYzsKLStpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLSAK LSAKLSAvKioKLUBAIC01NSw2ICs1NiwyNDYgQEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFLZXlQ YWlyR2VuZXJhdG9yCi0gICAgIGV4dGVuZHMgb3JnLm1vemlsbGEuanNzLmNyeXB0by5LZXlQYWly R2VuZXJhdG9yU3BpCi0gewotIAotKyAgICAvLyBjdXJ2ZSBjb2RlIGZvciBnZXR0aW5nIHRoZSBh Y3R1YWwgRUMgY3VydmUKLSsgICAgcHJpdmF0ZSBlbnVtIEVDQ3VydmVfQ29kZSB7Ci0rICAgICAg Ly8gTklTVCwgU0VDMiBQcmltZSBjdXJ2ZXMKLSsgICAgICAgIHNlY3A1MjFyMSAsIC8vID09IG5p c3RwNTIxCi0rICAgICAgICBuaXN0cDUyMSAsCi0rICAgICAgICBzZWNwMzg0cjEgLCAvLyA9PSBu aXN0cDM4NAotKyAgICAgICAgbmlzdHAzODQgLAotKyAgICAgICAgc2VjcDI1NnIxICwgLy8gPT0g bmlzdHAyNTYKLSsgICAgICAgIG5pc3RwMjU2ICwKLSsgICAgICAgIHNlY3AyNTZrMSAsCi0rICAg ICAgICBzZWNwMjI0cjEgLCAvLyA9PSBuaXN0cDIyNAotKyAgICAgICAgbmlzdHAyMjQgLAotKyAg ICAgICAgc2VjcDIyNGsxICwKLSsgICAgICAgIHNlY3AxOTJyMSAsIC8vID09IG5pc3RwMTkyCi0r ICAgICAgICBuaXN0cDE5MiAsCi0rICAgICAgICBzZWNwMTkyazEgLAotKyAgICAgICAgc2VjcDE2 MHIyICwKLSsgICAgICAgIHNlY3AxNjByMSAsCi0rICAgICAgICBzZWNwMTYwazEgLAotKyAgICAg ICAgc2VjcDEyOHIyICwKLSsgICAgICAgIHNlY3AxMjhyMSAsCi0rICAgICAgICBzZWNwMTEycjIg LAotKyAgICAgICAgc2VjcDExMnIxICwKLSsgICAgICAvLyBOSVNULCBTRUMyIEJpbmFyeSBjdXJ2 ZXMKLSsgICAgICAgIHNlY3Q1NzFyMSAsIC8vID09IG5pc3RiNTcxCi0rICAgICAgICBuaXN0YjU3 MSAsCi0rICAgICAgICBzZWN0NTcxazEgLCAvLyA9PSBuaXN0azU3MQotKyAgICAgICAgbmlzdGs1 NzEgLAotKyAgICAgICAgc2VjdDQwOXIxICwgLy8gPT0gbmlzdGI0MDkKLSsgICAgICAgIG5pc3Ri NDA5ICwKLSsgICAgICAgIHNlY3Q0MDlrMSAsIC8vID09IG5pc3RrNDA5Ci0rICAgICAgICBuaXN0 azQwOSAsCi0rICAgICAgICBzZWN0MjgzcjEgLCAvLyA9PSBuaXN0YjI4MwotKyAgICAgICAgbmlz dGIyODMgLAotKyAgICAgICAgc2VjdDI4M2sxICwgLy8gPT0gbmlzdGsyODMKLSsgICAgICAgIG5p c3RrMjgzICwKLSsgICAgICAgIHNlY3QyMzlrMSAsCi0rICAgICAgICBzZWN0MjMzcjEgLCAvLyA9 PSBuaXN0YjIzMwotKyAgICAgICAgbmlzdGIyMzMgLAotKyAgICAgICAgc2VjdDIzM2sxICwgLy8g PT0gbmlzdGsyMzMKLSsgICAgICAgIG5pc3RrMjMzICwKLSsgICAgICAgIHNlY3QxOTNyMiAsCi0r ICAgICAgICBzZWN0MTkzcjEgLAotKyAgICAgICAgbmlzdGIxNjMgLAotKyAgICAgICAgc2VjdDE2 M3IyICwgLy8gPT0gbmlzdGIxNjMKLSsgICAgICAgIHNlY3QxNjNyMSAsCi0rICAgICAgICBzZWN0 MTYzazEgLCAvLyA9PSBuaXN0azE2MwotKyAgICAgICAgbmlzdGsxNjMgLAotKyAgICAgICAgc2Vj dDEzMXIyICwKLSsgICAgICAgIHNlY3QxMzFyMSAsCi0rICAgICAgICBzZWN0MTEzcjIgLAotKyAg ICAgICAgc2VjdDExM3IxICwKLSsgICAgICAvLyBBTlNJIFg5LjYyIFByaW1lIGN1cnZlcwotKyAg ICAgICAgcHJpbWUyMzl2MyAsCi0rICAgICAgICBwcmltZTIzOXYyICwKLSsgICAgICAgIHByaW1l MjM5djEgLAotKyAgICAgICAgcHJpbWUxOTJ2MyAsCi0rICAgICAgICBwcmltZTE5MnYyICwKLSsg ICAgICAgIHByaW1lMTkydjEgLCAvLyA9PSBuaXN0cDE5MgotKyAgICAgICAgLy8gcHJpbWUyNTZ2 MSA9PSBuaXN0cDI1NgotKyAgICAgIC8vIEFOU0kgWDkuNjIgQmluYXJ5IGN1cnZlcwotKyAgICAg ICAgYzJwbmIxNjN2MSAsCi0rICAgICAgICBjMnBuYjE2M3YyICwKLSsgICAgICAgIGMycG5iMTYz djMgLAotKyAgICAgICAgYzJwbmIxNzZ2MSAsCi0rICAgICAgICBjMnRuYjE5MXYxICwKLSsgICAg ICAgIGMydG5iMTkxdjIgLAotKyAgICAgICAgYzJ0bmIxOTF2MyAsCi0rICAgICAgICAvL2Myb25i MTkxdjQgLAotKyAgICAgICAgLy9jMm9uYjE5MXY1ICwKLSsgICAgICAgIGMycG5iMjA4dzEgLAot KyAgICAgICAgYzJ0bmIyMzl2MSAsCi0rICAgICAgICBjMnRuYjIzOXYyICwKLSsgICAgICAgIGMy dG5iMjM5djMgLAotKyAgICAgICAgLy9jMm9uYjIzOXY0ICwKLSsgICAgICAgIC8vYzJvbmIyMzl2 NSAsCi0rICAgICAgICBjMnBuYjI3MncxICwKLSsgICAgICAgIGMycG5iMzA0dzEgLAotKyAgICAg ICAgYzJ0bmIzNTl2MSAsCi0rICAgICAgICBjMnBuYjM2OHcxICwKLSsgICAgICAgIGMydG5iNDMx cjEKLSsgICAgICAgIC8vIG5vIFdUTFMgY3VydmVzIGZvIG5vdwotKyAgICB9OwotKwotKyAgICBw cml2YXRlIHN0YXRpYyBIYXNodGFibGUgRUNDdXJ2ZV9OYW1lVG9Db2RlID0gbmV3IEhhc2h0YWJs ZSgpOwotKyAgICBzdGF0aWMgewotKyAgICAgIC8vIE5JU1QsIFNFQzIgUHJpbWUgY3VydmVzCi0r ICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWNwNTIxcjEi LCBFQ0N1cnZlX0NvZGUuc2VjcDUyMXIxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5w dXQoCi0rICAgICAgICAgICAgIm5pc3RwNTIxIiwgRUNDdXJ2ZV9Db2RlLm5pc3RwNTIxKTsKLSsg ICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInNlY3AzODRyMSIs IEVDQ3VydmVfQ29kZS5zZWNwMzg0cjEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1 dCgKLSsgICAgICAgICAgICAibmlzdHAzODQiLCBFQ0N1cnZlX0NvZGUubmlzdHAzODQpOwotKyAg ICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAic2VjcDI1NnIxIiwg RUNDdXJ2ZV9Db2RlLnNlY3AyNTZyMSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0 KAotKyAgICAgICAgICAgICJuaXN0cDI1NiIsIEVDQ3VydmVfQ29kZS5uaXN0cDI1Nik7Ci0rICAg ICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWNwMjU2azEiLCBF Q0N1cnZlX0NvZGUuc2VjcDI1NmsxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQo Ci0rICAgICAgICAgICAgInNlY3AyMjRyMSIsIEVDQ3VydmVfQ29kZS5zZWNwMjI0cjEpOwotKyAg ICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAibmlzdHAyMjQiLCBF Q0N1cnZlX0NvZGUubmlzdHAyMjQpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgK LSsgICAgICAgICAgICAic2VjcDIyNGsxIiwgRUNDdXJ2ZV9Db2RlLnNlY3AyMjRrMSk7Ci0rICAg ICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWNwMTkycjEiLCBF Q0N1cnZlX0NvZGUuc2VjcDE5MnIxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQo Ci0rICAgICAgICAgICAgIm5pc3RwMTkyIiwgRUNDdXJ2ZV9Db2RlLm5pc3RwMTkyKTsKLSsgICAg ICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInNlY3AxOTJrMSIsIEVD Q3VydmVfQ29kZS5zZWNwMTkyazEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgK LSsgICAgICAgICAgICAic2VjcDE2MHIyIiwgRUNDdXJ2ZV9Db2RlLnNlY3AxNjByMik7Ci0rICAg ICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWNwMTYwcjEiLCBF Q0N1cnZlX0NvZGUuc2VjcDE2MHIxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQo Ci0rICAgICAgICAgICAgInNlY3AxNjBrMSIsIEVDQ3VydmVfQ29kZS5zZWNwMTYwazEpOwotKyAg ICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAic2VjcDEyOHIyIiwg RUNDdXJ2ZV9Db2RlLnNlY3AxMjhyMik7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0 KAotKyAgICAgICAgICAgICJzZWNwMTI4cjEiLCBFQ0N1cnZlX0NvZGUuc2VjcDEyOHIxKTsKLSsg ICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInNlY3AxMTJyMiIs IEVDQ3VydmVfQ29kZS5zZWNwMTEycjIpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1 dCgKLSsgICAgICAgICAgICAic2VjcDExMnIxIiwgRUNDdXJ2ZV9Db2RlLnNlY3AxMTJyMSk7Ci0r ICAgICAgLy8gTklTVCwgU0VDMiBCaW5hcnkgY3VydmVzCi0rICAgICAgICBFQ0N1cnZlX05hbWVU b0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWN0NTcxcjEiLCBFQ0N1cnZlX0NvZGUuc2VjdDU3 MXIxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgIm5p c3RiNTcxIiwgRUNDdXJ2ZV9Db2RlLm5pc3RiNTcxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRv Q29kZS5wdXQoCi0rICAgICAgICAgICAgInNlY3Q1NzFrMSIsIEVDQ3VydmVfQ29kZS5zZWN0NTcx azEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAibmlz dGs1NzEiLCBFQ0N1cnZlX0NvZGUubmlzdGs1NzEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9D b2RlLnB1dCgKLSsgICAgICAgICAgICAic2VjdDQwOXIxIiwgRUNDdXJ2ZV9Db2RlLnNlY3Q0MDly MSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJuaXN0 YjQwOSIsIEVDQ3VydmVfQ29kZS5uaXN0YjQwOSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0Nv ZGUucHV0KAotKyAgICAgICAgICAgICJzZWN0NDA5azEiLCBFQ0N1cnZlX0NvZGUuc2VjdDQwOWsx KTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgIm5pc3Rr NDA5IiwgRUNDdXJ2ZV9Db2RlLm5pc3RrNDA5KTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29k ZS5wdXQoCi0rICAgICAgICAgICAgInNlY3QyODNyMSIsIEVDQ3VydmVfQ29kZS5zZWN0MjgzcjEp OwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAibmlzdGIy ODMiLCBFQ0N1cnZlX0NvZGUubmlzdGIyODMpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2Rl LnB1dCgKLSsgICAgICAgICAgICAic2VjdDI4M2sxIiwgRUNDdXJ2ZV9Db2RlLnNlY3QyODNrMSk7 Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJuaXN0azI4 MyIsIEVDQ3VydmVfQ29kZS5uaXN0azI4Myk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUu cHV0KAotKyAgICAgICAgICAgICJzZWN0MjM5azEiLCBFQ0N1cnZlX0NvZGUuc2VjdDIzOWsxKTsK LSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInNlY3QyMzNy MSIsIEVDQ3VydmVfQ29kZS5zZWN0MjMzcjEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2Rl LnB1dCgKLSsgICAgICAgICAgICAibmlzdGIyMzMiLCBFQ0N1cnZlX0NvZGUubmlzdGIyMzMpOwot KyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAic2VjdDIzM2sx IiwgRUNDdXJ2ZV9Db2RlLnNlY3QyMzNrMSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUu cHV0KAotKyAgICAgICAgICAgICJuaXN0azIzMyIsIEVDQ3VydmVfQ29kZS5uaXN0azIzMyk7Ci0r ICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWN0MTkzcjIi LCBFQ0N1cnZlX0NvZGUuc2VjdDE5M3IyKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5w dXQoCi0rICAgICAgICAgICAgInNlY3QxOTNyMSIsIEVDQ3VydmVfQ29kZS5zZWN0MTkzcjEpOwot KyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAibmlzdGIxNjMi LCBFQ0N1cnZlX0NvZGUubmlzdGIxNjMpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1 dCgKLSsgICAgICAgICAgICAic2VjdDE2M3IyIiwgRUNDdXJ2ZV9Db2RlLnNlY3QxNjNyMik7Ci0r ICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWN0MTYzcjEi LCBFQ0N1cnZlX0NvZGUuc2VjdDE2M3IxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5w dXQoCi0rICAgICAgICAgICAgInNlY3QxNjNrMSIsIEVDQ3VydmVfQ29kZS5zZWN0MTYzazEpOwot KyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAibmlzdGsxNjMi LCBFQ0N1cnZlX0NvZGUubmlzdGsxNjMpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1 dCgKLSsgICAgICAgICAgICAic2VjdDEzMXIyIiwgRUNDdXJ2ZV9Db2RlLnNlY3QxMzFyMik7Ci0r ICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJzZWN0MTMxcjEi LCBFQ0N1cnZlX0NvZGUuc2VjdDEzMXIxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5w dXQoCi0rICAgICAgICAgICAgInNlY3QxMTNyMiIsIEVDQ3VydmVfQ29kZS5zZWN0MTEzcjIpOwot KyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAic2VjdDExM3Ix IiwgRUNDdXJ2ZV9Db2RlLnNlY3QxMTNyMSk7Ci0rICAgICAgLy8gQU5TSSBQcmltZSBjdXJ2ZXMK LSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInByaW1lMjM5 djMiLCBFQ0N1cnZlX0NvZGUucHJpbWUyMzl2Myk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0Nv ZGUucHV0KAotKyAgICAgICAgICAgICJwcmltZTIzOXYyIiwgRUNDdXJ2ZV9Db2RlLnByaW1lMjM5 djIpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAicHJp bWUyMzl2MSIsIEVDQ3VydmVfQ29kZS5wcmltZTIzOXYxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFt ZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgInByaW1lMTkydjMiLCBFQ0N1cnZlX0NvZGUucHJp bWUxOTJ2Myk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAg ICJwcmltZTE5MnYyIiwgRUNDdXJ2ZV9Db2RlLnByaW1lMTkydjIpOwotKyAgICAgICAgRUNDdXJ2 ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAicHJpbWUxOTJ2MSIsIEVDQ3VydmVfQ29k ZS5wcmltZTE5MnYxKTsKLSsgICAgICAvLyBBTlNJIEJpbmFyeSBjdXJ2ZXMKLSsgICAgICAgIEVD Q3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgImMycG5iMTYzdjEiLCBFQ0N1cnZl X0NvZGUuYzJwbmIxNjN2MSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAg ICAgICAgICAgICJjMnBuYjE2M3YyIiwgRUNDdXJ2ZV9Db2RlLmMycG5iMTYzdjIpOwotKyAgICAg ICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAiYzJwbmIxNjN2MyIsIEVD Q3VydmVfQ29kZS5jMnBuYjE2M3YzKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQo Ci0rICAgICAgICAgICAgImMycG5iMTc2djEiLCBFQ0N1cnZlX0NvZGUuYzJwbmIxNzZ2MSk7Ci0r ICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJjMnRuYjE5MXYx IiwgRUNDdXJ2ZV9Db2RlLmMydG5iMTkxdjEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2Rl LnB1dCgKLSsgICAgICAgICAgICAiYzJ0bmIxOTF2MiIsIEVDQ3VydmVfQ29kZS5jMnRuYjE5MXYy KTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAgICAgICAgICAgImMydG5i MTkxdjMiLCBFQ0N1cnZlX0NvZGUuYzJ0bmIxOTF2Myk7Ci0rICAgICAgICAvL0VDQ3VydmVfTmFt ZVRvQ29kZS5wdXQoCi0rICAgICAgICAvLyAgICAiYzJvbmIxOTF2NCIsIEVDQ3VydmVfQ29kZS5j Mm9uYjE5MXY0KTsKLSsgICAgICAgIC8vRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAg IC8vICAgICJjMm9uYjE5MXY1IiwgRUNDdXJ2ZV9Db2RlLmMyb25iMTkxdjUpOwotKyAgICAgICAg RUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAiYzJwbmIyMDh3MSIsIEVDQ3Vy dmVfQ29kZS5jMnBuYjIwOHcxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0r ICAgICAgICAgICAgImMydG5iMjM5djEiLCBFQ0N1cnZlX0NvZGUuYzJ0bmIyMzl2MSk7Ci0rICAg ICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJjMnRuYjIzOXYyIiwg RUNDdXJ2ZV9Db2RlLmMydG5iMjM5djIpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1 dCgKLSsgICAgICAgICAgICAiYzJ0bmIyMzl2MyIsIEVDQ3VydmVfQ29kZS5jMnRuYjIzOXYzKTsK LSsgICAgICAgIC8vRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgIC8vICAgICJjMm9u YjIzOXY0IiwgRUNDdXJ2ZV9Db2RlLmMyb25iMjM5djQpOwotKyAgICAgICAgLy9FQ0N1cnZlX05h bWVUb0NvZGUucHV0KAotKyAgICAgICAgLy8gICAgImMyb25iMjM5djUiLCBFQ0N1cnZlX0NvZGUu YzJvbmIyMzl2NSk7Ci0rICAgICAgICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAg ICAgICJjMnBuYjI3MncxIiwgRUNDdXJ2ZV9Db2RlLmMycG5iMjcydzEpOwotKyAgICAgICAgRUND dXJ2ZV9OYW1lVG9Db2RlLnB1dCgKLSsgICAgICAgICAgICAiYzJwbmIzMDR3MSIsIEVDQ3VydmVf Q29kZS5jMnBuYjMwNHcxKTsKLSsgICAgICAgIEVDQ3VydmVfTmFtZVRvQ29kZS5wdXQoCi0rICAg ICAgICAgICAgImMydG5iMzU5djEiLCBFQ0N1cnZlX0NvZGUuYzJ0bmIzNTl2MSk7Ci0rICAgICAg ICBFQ0N1cnZlX05hbWVUb0NvZGUucHV0KAotKyAgICAgICAgICAgICJjMnBuYjM2OHcxIiwgRUND dXJ2ZV9Db2RlLmMycG5iMzY4dzEpOwotKyAgICAgICAgRUNDdXJ2ZV9OYW1lVG9Db2RlLnB1dCgK LSsgICAgICAgICAgICAiYzJ0bmI0MzFyMSIsIEVDQ3VydmVfQ29kZS5jMnRuYjQzMXIxKTsKLSsg ICAgfQotKwotICAgICAvLyBvcEZsYWcgY29uc3RhbnRzOiBlYWNoIG9mIHRoZXNlIGZsYWdzIHNw ZWNpZmllcyBhIGNyeXB0byBvcGVyYXRpb24KLSAgICAgLy8gdGhlIGtleSB3aWxsIHN1cHBvcnQu ICBUaGVpciB2YWx1ZXMgbXVzdCBtYXRjaCB0aGUgc2FtZS1uYW1lZCBDCi0gICAgIC8vIHByZXBy b2Nlc3NvciBtYWNyb3MgZGVmaW5lZCBpbiB0aGUgUEtDUyAjMTEgaGVhZGVyIHBrY3MxMXQuaC4K LUBAIC0xNjUsNyArNDA2LDE1IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQSzExS2V5UGFpckdlbmVy YXRvcgotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgQXNz ZXJ0Ll9hc3NlcnQoIGFsZ29yaXRobSA9PSBLZXlQYWlyQWxnb3JpdGhtLkVDICk7Ci0tICAgICAg ICAgICAgcGFyYW1zID0gZ2V0Q3VydmUoc3RyZW5ndGgpOwotKyAgICAgICAgICAgIGlmIChzdHJl bmd0aCA8IDExMikgewotKyAgICAgICAgICAgICAgICAvLyBmb3IgRUMsICJzdHJlbmd0aCIgaXMg YWN0dWFsbHkgYSBjb2RlIGZvciBjdXJ2ZXMgZGVmaW5lZCBpbiAKLSsgICAgICAgICAgICAgICAg Ly8gICBFQ0N1cnZlX0NvZGUKLSsgICAgICAgICAgICAgICAgcGFyYW1zID0gZ2V0RUNDdXJ2ZShz dHJlbmd0aCk7Ci0rICAgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgLy8gdGhp cyBpcyB0aGUgb2xkIG1ldGhvZCBvZiBzdHJlbmd0aCB0byBjdXJ2ZSBtYXBwaW5nLAotKyAgICAg ICAgICAgICAgICAvLyB3aGljaCBpcyBzb21ld2hhdCBkZWZlY3RpdmUKLSsgICAgICAgICAgICAg ICAgcGFyYW1zID0gZ2V0Q3VydmUoc3RyZW5ndGgpOwotKyAgICAgICAgICAgIH0KLSAgICAgICAg IH0KLSAgICAgfQotIAotQEAgLTY0Miw2ICs4OTEsMTg5IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQ SzExS2V5UGFpckdlbmVyYXRvcgotICAgICBzdGF0aWMgZmluYWwgT0JKRUNUX0lERU5USUZJRVIg Q1VSVkVfU0VDR19UNTcxUjEKLSAJPSBTRUNHX0VDX0NVUlZFLnN1YkJyYW5jaCgzOSk7Ci0gCi0r ICAgIC8vIHRoZSBFQyBjdXJ2ZWNvZGUgdG8gb2lkIGhhc2ggdGFibGUKLSsgICAgcHJpdmF0ZSBz dGF0aWMgSGFzaHRhYmxlIG1FQ0N1cnZlX0NvZGVUb0N1cnZlID0gbmV3IEhhc2h0YWJsZSgpOwot KyAgICBzdGF0aWMgewotKyAgICAgIC8vIFNFRyBQcmltZSBjdXJ2ZXMKLSsgICAgICAgIG1FQ0N1 cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDUyMXIx Lm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfU0VDR19QNTIxUjEpOwotKyAgICAgICAgbUVDQ3Vy dmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0cDUyMS5v cmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfUDUyMVIxKTsKLSsgICAgICAgIG1FQ0N1cnZl X0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDM4NHIxLm9y ZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfU0VDR19QMzg0UjEpOwotKyAgICAgICAgbUVDQ3VydmVf Q29kZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0cDM4NC5vcmRp bmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfUDM4NFIxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0Nv ZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDI1NnIxLm9yZGlu YWwoKSwgKE9iamVjdCkgQ1VSVkVfQU5TSV9QMjU2VjEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29k ZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0cDI1Ni5vcmRpbmFs KCksIChPYmplY3QpIENVUlZFX0FOU0lfUDI1NlYxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVU b0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDI1NmsxLm9yZGluYWwo KSwgKE9iamVjdCkgQ1VSVkVfU0VDR19QMjU2SzEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRv Q3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWNwMjI0cjEub3JkaW5hbCgp LCAoT2JqZWN0KSBDVVJWRV9TRUNHX1AyMjRSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9D dXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLm5pc3RwMjI0Lm9yZGluYWwoKSwg KE9iamVjdCkgQ1VSVkVfU0VDR19QMjI0UjEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3Vy dmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWNwMjI0azEub3JkaW5hbCgpLCAo T2JqZWN0KSBDVVJWRV9TRUNHX1AyMjRLMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2 ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3AxOTJyMS5vcmRpbmFsKCksIChP YmplY3QpIENVUlZFX0FOU0lfUDE5MlYxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZl LnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdHAxOTIub3JkaW5hbCgpLCAoT2Jq ZWN0KSBDVVJWRV9BTlNJX1AxOTJWMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5w dXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3AxOTJrMS5vcmRpbmFsKCksIChPYmpl Y3QpIENVUlZFX1NFQ0dfUDE5MksxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1 dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDE2MHIyLm9yZGluYWwoKSwgKE9iamVj dCkgQ1VSVkVfU0VDR19QMTYwUjIpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0 KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWNwMTYwcjEub3JkaW5hbCgpLCAoT2JqZWN0 KSBDVVJWRV9TRUNHX1AxNjBSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQo Ci0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3AxNjBrMS5vcmRpbmFsKCksIChPYmplY3Qp IENVUlZFX1NFQ0dfUDE2MEsxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgK LSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDEyOHIyLm9yZGluYWwoKSwgKE9iamVjdCkg Q1VSVkVfU0VDR19QMTI4UjIpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAot KyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWNwMTI4cjEub3JkaW5hbCgpLCAoT2JqZWN0KSBD VVJWRV9TRUNHX1AxMjhSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0r ICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3AxMTJyMi5vcmRpbmFsKCksIChPYmplY3QpIENV UlZFX1NFQ0dfUDExMlIyKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsg ICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjcDExMnIxLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VS VkVfU0VDR19QMTEyUjEpOwotKyAgICAgIC8vIFNFRyBCaW5hcnkgY3VydmVzCi0rICAgICAgICBt RUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3Q1 NzFyMS5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfVDU3MVIxKTsKLSsgICAgICAgIG1F Q0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGI1 NzEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9TRUNHX1Q1NzFSMSk7Ci0rICAgICAgICBtRUND dXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3Q1NzFr MS5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfVDU3MUsxKTsKLSsgICAgICAgIG1FQ0N1 cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGs1NzEu b3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9TRUNHX1Q1NzFLMSk7Ci0rICAgICAgICBtRUNDdXJ2 ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3Q0MDlyMS5v cmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfVDQwOVIxKTsKLSsgICAgICAgIG1FQ0N1cnZl X0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGI0MDkub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9TRUNHX1Q0MDlSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3Q0MDlrMS5vcmRp bmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0dfVDQwOUsxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0Nv ZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGs0MDkub3JkaW5h bCgpLCAoT2JqZWN0KSBDVVJWRV9TRUNHX1Q0MDlLMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2Rl VG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3QyODNyMS5vcmRpbmFs KCksIChPYmplY3QpIENVUlZFX1NFQ0dfVDI4M1IxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVU b0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGIyODMub3JkaW5hbCgp LCAoT2JqZWN0KSBDVVJWRV9TRUNHX1QyODNSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9D dXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3QyODNrMS5vcmRpbmFsKCks IChPYmplY3QpIENVUlZFX1NFQ0dfVDI4M0sxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1 cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUubmlzdGsyODMub3JkaW5hbCgpLCAo T2JqZWN0KSBDVVJWRV9TRUNHX1QyODNLMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2 ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3QyMzlrMS5vcmRpbmFsKCksIChP YmplY3QpIENVUlZFX1NFQ0dfVDIzOUsxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZl LnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjdDIzM3IxLm9yZGluYWwoKSwgKE9i amVjdCkgQ1VSVkVfU0VDR19UMjMzUjEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUu cHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0YjIzMy5vcmRpbmFsKCksIChPYmpl Y3QpIENVUlZFX1NFQ0dfVDIzM1IxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1 dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjdDIzM2sxLm9yZGluYWwoKSwgKE9iamVj dCkgQ1VSVkVfU0VDR19UMjMzSzEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0 KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0azIzMy5vcmRpbmFsKCksIChPYmplY3Qp IENVUlZFX1NFQ0dfVDIzM0sxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgK LSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjdDE5M3IyLm9yZGluYWwoKSwgKE9iamVjdCkg Q1VSVkVfU0VDR19UMTkzUjIpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAot KyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWN0MTkzcjEub3JkaW5hbCgpLCAoT2JqZWN0KSBD VVJWRV9TRUNHX1QxOTNSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0r ICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLm5pc3RiMTYzLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VS VkVfU0VDR19UMTYzSzEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAg ICAgICAgICAgIEVDQ3VydmVfQ29kZS5zZWN0MTYzcjIub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJW RV9TRUNHX1QxNjNSMik7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAg ICAgICAgICAgRUNDdXJ2ZV9Db2RlLnNlY3QxNjNyMS5vcmRpbmFsKCksIChPYmplY3QpIENVUlZF X1NFQ0dfVDE2M1IxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAg ICAgICAgICBFQ0N1cnZlX0NvZGUuc2VjdDE2M2sxLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVf U0VDR19UMTYzSzEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAg ICAgICAgIEVDQ3VydmVfQ29kZS5uaXN0azE2My5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NF Q0dfVDE2M0sxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAg ICAgICBFQ0N1cnZlX0NvZGUuc2VjdDEzMXIyLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfU0VD R19UMTMxUjIpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAgICAg ICAgIEVDQ3VydmVfQ29kZS5zZWN0MTMxcjEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9TRUNH X1QxMzFSMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAg ICAgRUNDdXJ2ZV9Db2RlLnNlY3QxMTNyMi5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX1NFQ0df VDExM1IyKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAg ICBFQ0N1cnZlX0NvZGUuc2VjdDExM3IxLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfU0VDR19U MTEzUjEpOwotKyAgICAgIC8vIEFOU0kgUHJpbWUgY3VydmVzCi0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMjM5djMub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AyMzlWMyk7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMjM5djIub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AyMzlWMik7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMjM5djEub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AyMzlWMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMTkydjMub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AxOTJWMyk7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMTkydjIub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AxOTJWMik7Ci0rICAgICAgICBtRUNDdXJ2ZV9D b2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLnByaW1lMTkydjEub3Jk aW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1AxOTJWMSk7Ci0rICAgICAgLy8gQU5TSSBCaW5h cnkgY3VydmVzCi0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAg ICAgRUNDdXJ2ZV9Db2RlLmMycG5iMTYzdjEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJ X1BOQjE2M1YxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAg ICAgICBFQ0N1cnZlX0NvZGUuYzJwbmIxNjN2Mi5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX0FO U0lfUE5CMTYzVjIpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAg ICAgICAgIEVDQ3VydmVfQ29kZS5jMnBuYjE2M3YzLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVf QU5TSV9QTkIxNjNWMyk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAg ICAgICAgICAgRUNDdXJ2ZV9Db2RlLmMycG5iMTc2djEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJW RV9BTlNJX1BOQjE3NlYxKTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsg ICAgICAgICAgICBFQ0N1cnZlX0NvZGUuYzJ0bmIxOTF2MS5vcmRpbmFsKCksIChPYmplY3QpIENV UlZFX0FOU0lfVE5CMTkxVjEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAot KyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5jMnRuYjE5MXYyLm9yZGluYWwoKSwgKE9iamVjdCkg Q1VSVkVfQU5TSV9UTkIxOTFWMik7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQo Ci0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLmMydG5iMTkxdjMub3JkaW5hbCgpLCAoT2JqZWN0 KSBDVVJWRV9BTlNJX1ROQjE5MVYzKTsKLSsgICAgICAgIC8vbUVDQ3VydmVfQ29kZVRvQ3VydmUu cHV0KAotKyAgICAgICAgLy8gICAgRUNDdXJ2ZV9Db2RlLmMyb25iMTkxdjQub3JkaW5hbCgpLCAo T2JqZWN0KSBDVVJWRV9BTlNJX09OQjE5MVY0KTsKLSsgICAgICAgIC8vbUVDQ3VydmVfQ29kZVRv Q3VydmUucHV0KAotKyAgICAgICAgLy8gICAgRUNDdXJ2ZV9Db2RlLmMyb25iMTkxdjUub3JkaW5h bCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX09OQjE5MVY1KTsKLSsgICAgICAgIG1FQ0N1cnZlX0Nv ZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuYzJwbmIyMDh3MS5vcmRp bmFsKCksIChPYmplY3QpIENVUlZFX0FOU0lfUE5CMjA4VzEpOwotKyAgICAgICAgbUVDQ3VydmVf Q29kZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVfQ29kZS5jMnRuYjIzOXYxLm9y ZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfQU5TSV9UTkIyMzlWMSk7Ci0rICAgICAgICBtRUNDdXJ2 ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2ZV9Db2RlLmMydG5iMjM5djIu b3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1ROQjIzOVYyKTsKLSsgICAgICAgIG1FQ0N1 cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1cnZlX0NvZGUuYzJ0bmIyMzl2 My5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX0FOU0lfVE5CMjM5VjMpOwotKyAgICAgICAgLy9t RUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAvLyAgICBFQ0N1cnZlX0NvZGUuYzJv bmIyMzl2NC5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX0FOU0lfT05CMjM5VjQpOwotKyAgICAg ICAgLy9tRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAvLyAgICBFQ0N1cnZlX0Nv ZGUuYzJvbmIyMzl2NS5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX0FOU0lfT05CMjM5VjUpOwot KyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVDQ3VydmVf Q29kZS5jMnBuYjI3MncxLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfQU5TSV9QTkIyNzJXMSk7 Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAgRUNDdXJ2 ZV9Db2RlLmMycG5iMzA0dzEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1BOQjMwNFcx KTsKLSsgICAgICAgIG1FQ0N1cnZlX0NvZGVUb0N1cnZlLnB1dCgKLSsgICAgICAgICAgICBFQ0N1 cnZlX0NvZGUuYzJ0bmIzNTl2MS5vcmRpbmFsKCksIChPYmplY3QpIENVUlZFX0FOU0lfVE5CMzU5 VjEpOwotKyAgICAgICAgbUVDQ3VydmVfQ29kZVRvQ3VydmUucHV0KAotKyAgICAgICAgICAgIEVD Q3VydmVfQ29kZS5jMnBuYjM2OHcxLm9yZGluYWwoKSwgKE9iamVjdCkgQ1VSVkVfQU5TSV9QTkIz NjhXMSk7Ci0rICAgICAgICBtRUNDdXJ2ZV9Db2RlVG9DdXJ2ZS5wdXQoCi0rICAgICAgICAgICAg RUNDdXJ2ZV9Db2RlLmMydG5iNDMxcjEub3JkaW5hbCgpLCAoT2JqZWN0KSBDVVJWRV9BTlNJX1RO QjQzMVIxKTsKLSsgICAgfQotKwotKyAgICBwdWJsaWMgaW50IGdldEN1cnZlQ29kZUJ5TmFtZShT dHJpbmcgY3VydmVOYW1lKQotKyAgICAgICAgdGhyb3dzIEludmFsaWRQYXJhbWV0ZXJFeGNlcHRp b24gewotKyAgICAgICAgaWYgKGN1cnZlTmFtZSA9PSBudWxsKQotKyAgICAgICAgICAgIHRocm93 IG5ldyBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uKCk7Ci0rICAgICAgICBFQ0N1cnZlX0NvZGUg YyA9IChFQ0N1cnZlX0NvZGUpIEVDQ3VydmVfTmFtZVRvQ29kZS5nZXQoY3VydmVOYW1lKTsKLSsg ICAgICAgIGlmIChjID09IG51bGwpCi0rICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJh bWV0ZXJFeGNlcHRpb24oY3VydmVOYW1lKTsKLSsgICAgICAgIHJldHVybiBjLm9yZGluYWwoKTsK LSsgICAgfQotKwotKyAgICAvKgotKyAgICAgKiBnZXRFQ0N1cnZlCi0rICAgICAqICAgICBtYXBz IGN1cnZlY29kZSB0byB0aGUgYWN0dWFsIG9pZCBvZiB0aGUgY3VydmUgYW5kCi0rICAgICAqICAg ICByZXR1cm5zIHRoZSBQSzExUGFyYW1ldGVyU3BlYwotKyAgICAgKi8KLSsgICAgcHJpdmF0ZSBB bGdvcml0aG1QYXJhbWV0ZXJTcGVjIGdldEVDQ3VydmUoaW50IGN1cnZlY29kZSkKLSsgICAgICAg IHRocm93cyBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uCi0rICAgIHsKLSsgICAgICAgIE9CSkVD VF9JREVOVElGSUVSIG9pZDsKLSsKLSsgICAgICAgIG9pZCA9IChPQkpFQ1RfSURFTlRJRklFUikg bUVDQ3VydmVfQ29kZVRvQ3VydmUuZ2V0KGN1cnZlY29kZSk7Ci0rICAgICAgICBpZiAob2lkID09 IG51bGwpCi0rICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigi Y3VydmVjb2RlID0iK2N1cnZlY29kZSk7Ci0rICAgICAgICByZXR1cm4gbmV3IFBLMTFQYXJhbWV0 ZXJTcGVjKEFTTjFVdGlsLmVuY29kZShvaWQpKTsKLSsgICAgfQotKwotICAgICBwcml2YXRlIEFs Z29yaXRobVBhcmFtZXRlclNwZWMgZ2V0Q3VydmUoaW50IHN0cmVuZ3RoKSAKLSAgICAgICAgIHRo cm93cyBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uCi0gICAgIHsKCmRpZmYgLS1naXQgYS9qc3Mt Rml4ZWQtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi9qc3MtRml4ZWQtYnVpbGQtZmFpbHVyZXMucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMTEwMTAuLjAwMDAwMDAKLS0tIGEv anNzLUZpeGVkLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQ5ICsw LDAgQEAKLUZyb20gMjIwOTJkMWJkZTk0ZGM4YTFmNmU4MTk4ZmEyZmNjNTk3YzM2YzMyZiBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJFbmRpIFMuIERld2F0YSIgPGVkZXdhdGFAcmVk aGF0LmNvbT4KLURhdGU6IFdlZCwgOSBEZWMgMjAxNSAwMDozMDo1MCArMDEwMAotU3ViamVjdDog W1BBVENIXSBGaXhlZCBidWlsZCBmYWlsdXJlcy4KLQotVGhlIEphdmFkb2Mgb24gdmFyaW91cyBj bGFzc2VzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBmaXggYnVpbGQKLWZhaWx1cmVzIG9uIEYyMyBh bmQgUmF3aGlkZSBkdWUgdG8gc3RyaW5nZW50IHJlcXVpcmVtZW50cyBvbgotdGhvc2UgcGxhdGZv cm1zLgotCi1UaGUgRGVidWdfZGVidWcuam5vdCBoYXMgYmVlbiByZW5hbWVkIHRvIERlYnVnLmph dmEgdG8gZml4IGJ1aWxkCi1mYWlsdXJlIGluIEVjbGlwc2UuCi0KLWh0dHBzOi8vYnVnemlsbGEu cmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTI4OTc5OQotLS0tCi0gLmNsYXNzcGF0aCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICsrKysrKysKLSAu cHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg MTcgKysrKysrKysrKysrKysrKysKLSBtb3ppbGxhL3NlY3VyaXR5L2pzcy9idWlsZF9qYXZhLnBs ICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBtb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhIHwgMTQgKysrKysrKy0tLS0tLS0KLSAuLi4v c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL0FTTjFIZWFkZXIuamF2YSAgIHwgIDIg Ky0KLSAuLi4vc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRva2VuLmph dmEgIHwgIDIgKy0KLSAuLi4vc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTIvQ2Vy dEJhZy5qYXZhICAgIHwgIDEgKwotIC4uLi9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3M3L0NvbnRlbnRJbmZvLmphdmEgfCAgMSAtCi0gLi4uL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczcvU2lnbmVySW5mby5qYXZhICB8IDE3ICsrKysrKysrKystLS0tLS0tCi0gLi4u L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbXMvQ29udGVudEluZm8uamF2YSAgICAgICB8ICAx IC0KLSAuLi4vanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4L2Ntcy9TaWduZXJJbmZvLmphdmEgICAg ICAgIHwgMTcgKysrKysrKysrKy0tLS0tLS0KLSAuLi4vanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4 L2NybWYvQ2VydFJlcU1zZy5qYXZhICAgICAgIHwgIDIgKy0KLSAuLi4vanNzL29yZy9tb3ppbGxh L2pzcy9zc2wvU1NMU2VydmVyU29ja2V0LmphdmEgICAgICAgIHwgIDMgLS0tCi0gLi4uL21vemls bGEvanNzL3V0aWwve0RlYnVnX2RlYnVnLmpub3QgPT4gRGVidWcuamF2YX0gICB8ICAwCi0gMTQg ZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCi0gY3JlYXRl IG1vZGUgMTAwNjQ0IC5jbGFzc3BhdGgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgLnByb2plY3QKLSBy ZW5hbWUgbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwve0RlYnVnX2Rl YnVnLmpub3QgPT4gRGVidWcuamF2YX0gKDEwMCUpCi0KLWRpZmYgLS1naXQgYS8uY2xhc3NwYXRo IGIvLmNsYXNzcGF0aAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmMDkyZDNmN2Q4ZGY5MzZiNzUzYmVhNzVjMTFi ZjQwMDNlMWE3N2YKLS0tLSAvZGV2L251bGwKLSsrKyBiLy5jbGFzc3BhdGgKLUBAIC0wLDAgKzEs NyBAQAotKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0rPGNsYXNzcGF0 aD4KLSsJPGNsYXNzcGF0aGVudHJ5IGV4Y2x1ZGluZz0ic2FtcGxlcy8iIGtpbmQ9InNyYyIgcGF0 aD0ibW96aWxsYS9zZWN1cml0eS9qc3MiLz4KLSsJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIg cGF0aD0ibW96aWxsYS9zZWN1cml0eS9qc3Mvc2FtcGxlcyIvPgotKwk8Y2xhc3NwYXRoZW50cnkg a2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIi Lz4KLSsJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci0rPC9jbGFz c3BhdGg+Ci1kaWZmIC0tZ2l0IGEvLnByb2plY3QgYi8ucHJvamVjdAotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMw YjYxNmU5NWM3NTEyMDc2Yzk5NzYzNzRiZGExNGUxMWQ3Y2RkOGMKLS0tLSAvZGV2L251bGwKLSsr KyBiLy5wcm9qZWN0Ci1AQCAtMCwwICsxLDE3IEBACi0rPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv ZGluZz0iVVRGLTgiPz4KLSs8cHJvamVjdERlc2NyaXB0aW9uPgotKwk8bmFtZT5qc3MtNC4yPC9u YW1lPgotKwk8Y29tbWVudD48L2NvbW1lbnQ+Ci0rCTxwcm9qZWN0cz4KLSsJPC9wcm9qZWN0cz4K LSsJPGJ1aWxkU3BlYz4KLSsJCTxidWlsZENvbW1hbmQ+Ci0rCQkJPG5hbWU+b3JnLmVjbGlwc2Uu amR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0rCQkJPGFyZ3VtZW50cz4KLSsJCQk8L2FyZ3Vt ZW50cz4KLSsJCTwvYnVpbGRDb21tYW5kPgotKwk8L2J1aWxkU3BlYz4KLSsJPG5hdHVyZXM+Ci0r CQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLSsJPC9u YXR1cmVzPgotKzwvcHJvamVjdERlc2NyaXB0aW9uPgotZGlmZiAtLWdpdCBhL21vemlsbGEvc2Vj dXJpdHkvanNzL2J1aWxkX2phdmEucGwgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9idWlsZF9qYXZh LnBsCi1pbmRleCBjMzQ0NzNlMGVlYzg4MzMyM2I2YjEwMGU2NzEwMThhOWVkYWZlNDQyLi4zNzlh NWUwNWRiYzA1OTljOTVkMjIyOGJkMTRmNjU5ZDNlNDkzZDBiIDEwMDY0NAotLS0tIGEvbW96aWxs YS9zZWN1cml0eS9qc3MvYnVpbGRfamF2YS5wbAotKysrIGIvbW96aWxsYS9zZWN1cml0eS9qc3Mv YnVpbGRfamF2YS5wbAotQEAgLTEzNyw3ICsxMzcsNyBAQCBzdWIgc2V0dXBfdmFycyB7Ci0gICAg ICAgICAkY2xhc3NfamFyID0gIiRkaXN0X2Rpci8kY21kbGluZV92YXJze1hQQ0xBU1NfREJHX0pB Un0iOwotICAgICAgICAgJGNsYXNzX3JlbGVhc2VfZGlyIC49ICIvJGNtZGxpbmVfdmFyc3tTT1VS Q0VfUkVMRUFTRV9DTEFTU0VTX0RCR19ESVJ9IjsKLSAgICAgICAgICRqYXZhY19vcHRfZmxhZyA9 ICItZyI7Ci0tICAgICAgICAkZGVidWdfc291cmNlX2ZpbGUgPSAib3JnL21vemlsbGEvanNzL3V0 aWwvRGVidWdfZGVidWcuam5vdCI7Ci0rICAgICAgICAkZGVidWdfc291cmNlX2ZpbGUgPSAib3Jn L21vemlsbGEvanNzL3V0aWwvRGVidWcuamF2YSI7Ci0gICAgIH0KLSAgICAgJGpuaV9oZWFkZXJf ZGlyID0gIiRkaXN0X2Rpci9wcml2YXRlL2pzcy9fam5pIjsKLSAKLWRpZmYgLS1naXQgYS9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhIGIvbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YQotaW5k ZXggMDhhYWQ4ZmUzYzNhNjJhZThlMjMzZmMxMDM1NzIzNjkwYWRmNDU4MS4uNmVmMDI1NmEzYjc3 N2RiNDg0NjFmMTlkYTBmYTY0ZWM3ODU3ZWQ2YiAxMDA2NDQKLS0tLSBhL21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEKLSsrKyBiL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEKLUBAIC02MDAs NyArNjAwLDcgQEAgcHVibGljIGZpbmFsIGNsYXNzIENyeXB0b01hbmFnZXIgaW1wbGVtZW50cyBU b2tlblN1cHBsaWVyCi0gICAgICAqIGxvYWRlZCBjcnlwdG9ncmFwaGljIG1vZHVsZXMgZm9yIHRo ZSB0b2tlbi4KLSAgICAgICoKLSAgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRv a2VuLgotLSAgICAgKiBAZXhjZXB0aW9uIG9yZy5tb3ppbGxhLmpzcy5jcnlwdG8uTm9TdWNoVG9r ZW5FeGNlcHRpb24gSWYgbm8gdG9rZW4KLSsgICAgICogQGV4Y2VwdGlvbiBOb1N1Y2hUb2tlbkV4 Y2VwdGlvbiBJZiBubyB0b2tlbgotICAgICAgKiAgaXMgZm91bmQgd2l0aCB0aGUgZ2l2ZW4gbmFt ZS4KLSAgICAgICovCi0gICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgQ3J5cHRvVG9rZW4gZ2V0VG9r ZW5CeU5hbWUoU3RyaW5nIG5hbWUpCi1AQCAtODU1LDkgKzg1NSw5IEBAIHB1YmxpYyBmaW5hbCBj bGFzcyBDcnlwdG9NYW5hZ2VyIGltcGxlbWVudHMgVG9rZW5TdXBwbGllcgotICAgICAgKiA8Y29k ZT5pbml0aWFsaXplKCk8L2NvZGU+LgotICAgICAgKgotICAgICAgKiBAcGFyYW0gY29uZmlnRGly IFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2VjdXJpdHkgZGF0YWJhc2VzLgotLSAgICAg KiBAZXhjZXB0aW9uIG9yZy5tb3ppbGxhLmpzcy51dGlsLktleURhdGFiYXNlRXhjZXB0aW9uIFVu YWJsZSB0byBvcGVuCi0rICAgICAqIEBleGNlcHRpb24gS2V5RGF0YWJhc2VFeGNlcHRpb24gVW5h YmxlIHRvIG9wZW4KLSAgICAgICogIHRoZSBrZXkgZGF0YWJhc2UsIG9yIGl0IHdhcyBjdXJydXB0 ZWQuCi0tICAgICAqIEBleGNlcHRpb24gb3JnLm1vemlsbGEuanNzLnV0aWwuQ2VydERhdGFiYXNl RXhjZXB0aW9uIFVuYWJsZQotKyAgICAgKiBAZXhjZXB0aW9uIENlcnREYXRhYmFzZUV4Y2VwdGlv biBVbmFibGUKLSAgICAgICogIHRvIG9wZW4gdGhlIGNlcnRpZmljYXRlIGRhdGFiYXNlLCBvciBp dCB3YXMgY3VycnVwdGVkLgotICAgICAgKiovCi0gICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p emVkIHZvaWQgaW5pdGlhbGl6ZSggU3RyaW5nIGNvbmZpZ0RpciApCi1AQCAtODc4LDkgKzg3OCw5 IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDcnlwdG9NYW5hZ2VyIGltcGxlbWVudHMgVG9rZW5TdXBw bGllcgotICAgICAgKiA8Y29kZT5pbml0aWFsaXplKCk8L2NvZGU+LgotICAgICAgKgotICAgICAg KiBAcGFyYW0gdmFsdWVzIFRoZSBvcHRpb25zIHdpdGggd2hpY2ggdG8gaW5pdGlhbGl6ZSBDcnlw dG9NYW5hZ2VyLgotLSAgICAgKiBAZXhjZXB0aW9uIG9yZy5tb3ppbGxhLmpzcy51dGlsLktleURh dGFiYXNlRXhjZXB0aW9uIFVuYWJsZSB0byBvcGVuCi0rICAgICAqIEBleGNlcHRpb24gS2V5RGF0 YWJhc2VFeGNlcHRpb24gVW5hYmxlIHRvIG9wZW4KLSAgICAgICogIHRoZSBrZXkgZGF0YWJhc2Us IG9yIGl0IHdhcyBjdXJydXB0ZWQuCi0tICAgICAqIEBleGNlcHRpb24gb3JnLm1vemlsbGEuanNz LnV0aWwuQ2VydERhdGFiYXNlRXhjZXB0aW9uIFVuYWJsZQotKyAgICAgKiBAZXhjZXB0aW9uIENl cnREYXRhYmFzZUV4Y2VwdGlvbiBVbmFibGUKLSAgICAgICogIHRvIG9wZW4gdGhlIGNlcnRpZmlj YXRlIGRhdGFiYXNlLCBvciBpdCB3YXMgY3VycnVwdGVkLgotICAgICAgKiovCi0gICAgIHB1Ymxp YyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgaW5pdGlhbGl6ZSggSW5pdGlhbGl6YXRpb25WYWx1 ZXMgdmFsdWVzICkKLUBAIC0xMDIxLDcgKzEwMjEsNyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5 cHRvTWFuYWdlciBpbXBsZW1lbnRzIFRva2VuU3VwcGxpZXIKLSAgICAgICogQHJldHVybiBUaGUg bGVhZiBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBjaGFpbi4KLSAgICAgICogQGV4Y2VwdGlvbiBDZXJ0 aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIElmIHRoZSBwYWNrYWdlIGVuY29kaW5nCi0gICAgICAq ICAgICAgd2FzIG5vdCByZWNvZ25pemVkLgotLSAgICAgKiBAZXhjZXB0aW9uIENlcnRpZmljYXRl Tmlja25hbWVDb25mbGljdEV4Y2VwdGlvbiBJZiB0aGUgbGVhZiBjZXJ0aWZpY2F0ZQotKyAgICAg KiBAZXhjZXB0aW9uIE5pY2tuYW1lQ29uZmxpY3RFeGNlcHRpb24gSWYgdGhlIGxlYWYgY2VydGlm aWNhdGUKLSAgICAgICogICAgICBpcyBhIHVzZXIgY2VydGlmaWNhdGUsIGFuZCBhbm90aGVyIGNl cnRpZmljYXRlIGFscmVhZHkgaGFzIHRoZQotICAgICAgKiAgICAgIGdpdmVuIG5pY2tuYW1lLgot ICAgICAgKiBAZXhjZXB0aW9uIFVzZXJDZXJ0Q29uZmxpY3RFeGNlcHRpb24gSWYgdGhlIGxlYWYg Y2VydGlmaWNhdGUKLUBAIC0xMDU5LDcgKzEwNTksNyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5 cHRvTWFuYWdlciBpbXBsZW1lbnRzIFRva2VuU3VwcGxpZXIKLSAgICAgICogQHJldHVybiBUaGUg bGVhZiBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBjaGFpbi4KLSAgICAgICogQGV4Y2VwdGlvbiBDZXJ0 aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIElmIHRoZSBwYWNrYWdlIGVuY29kaW5nCi0gICAgICAq ICAgICAgd2FzIG5vdCByZWNvZ25pemVkLgotLSAgICAgKiBAZXhjZXB0aW9uIENlcnRpZmljYXRl Tmlja25hbWVDb25mbGljdEV4Y2VwdGlvbiBJZiB0aGUgbGVhZiBjZXJ0aWZpY2F0ZQotKyAgICAg KiBAZXhjZXB0aW9uIE5pY2tuYW1lQ29uZmxpY3RFeGNlcHRpb24gSWYgdGhlIGxlYWYgY2VydGlm aWNhdGUKLSAgICAgICogICAgICBhbm90aGVyIGNlcnRpZmljYXRlIGFscmVhZHkgaGFzIHRoZSBn aXZlbiBuaWNrbmFtZS4KLSAgICAgICogQGV4Y2VwdGlvbiBVc2VyQ2VydENvbmZsaWN0RXhjZXB0 aW9uIElmIHRoZSBsZWFmIGNlcnRpZmljYXRlCi0gICAgICAqICAgICAgaGFzIGFscmVhZHkgYmVl biBpbXBvcnRlZC4KLWRpZmYgLS1naXQgYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvYXNuMS9BU04xSGVhZGVyLmphdmEgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvYXNuMS9BU04xSGVhZGVyLmphdmEKLWluZGV4IGJmYTM3YzlmNWViYTFjNWRmOWJi Mjc1Y2FkMTZjMWJmNTdjOWM2NWQuLmQxNWJlNDkyMmI1MmQxNmEyNWUzMjEyYjJiMjU4MDljZDdk ZGYzYjYgMTAwNjQ0Ci0tLS0gYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv YXNuMS9BU04xSGVhZGVyLmphdmEKLSsrKyBiL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9hc24xL0FTTjFIZWFkZXIuamF2YQotQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJsaWMg Y2xhc3MgQVNOMUhlYWRlciB7Ci0gICAgIC8qKgotICAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlz IHRvIGJlIGNhbGxlZCB3aGVuIHdlIGFyZSBjb25zdHJ1Y3RpbmcgYW4gQVNOMVZhbHVlCi0gICAg ICAqIHJhdGhlciB0aGFuIGRlY29kaW5nIGl0LgotLSAgICAgKiBAcGFyYW0gY29udGVudExlbmd0 aCBNdXN0IGJlID49MC4gQWx0aG91Z2ggaW5kZWZpbml0ZSBsZW5ndGgKLSsgICAgICogQHBhcmFt IGNvbnRlbnRMZW5ndGggTXVzdCBiZSAmZ3Q7PTAuIEFsdGhvdWdoIGluZGVmaW5pdGUgbGVuZ3Ro Ci0gICAgICAqICAgICAgPGk+ZGVjb2Rpbmc8L2k+IGlzIHN1cHBvcnRlZCwgaW5kZWZpbml0ZSBs ZW5ndGggPGk+ZW5jb2Rpbmc8L2k+Ci0gICAgICAqICAgICAgaXMgbm90LgotICAgICAgKi8KLWRp ZmYgLS1naXQgYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFUb2tlbi5qYXZhIGIvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3Mx MS9QSzExVG9rZW4uamF2YQotaW5kZXggZTUyMWI2MTA4YjkwZGFlYjcwMzU0MTNiYmE1MGE0MWU5 YjIwZWM0OS4uOThlOTNmMGU4NThiMDk0MDIzNjRiNGRjODljMzZhNjNlN2VmMGY3YiAxMDA2NDQK LS0tLSBhL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRv a2VuLmphdmEKLSsrKyBiL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2Nz MTEvUEsxMVRva2VuLmphdmEKLUBAIC0yMzYsNyArMjM2LDcgQEAgcHVibGljIGZpbmFsIGNsYXNz IFBLMTFUb2tlbiBpbXBsZW1lbnRzIENyeXB0b1Rva2VuIHsKLSAgICAgICoKLSAgICAgICogQHBh cmFtIHNzb3B3Y2IgVGhlIHNlY3VyaXR5IG9mZmljZXIncyBjdXJyZW50IHBhc3N3b3JkIGNhbGxi YWNrLgotICAgICAgKiBAcGFyYW0gdXNlcnB3Y2IgVGhlIHVzZXIncyBuZXcgcGFzc3dvcmQgY2Fs bGJhY2suCi0tICAgICAqIEBleGNlcHRpb24gSW5jb3JyZWN0UGluRXhjZXB0aW9uIElmIHRoZSBz ZWN1cml0eSBvZmZpY2VyIFBJTiBpcwotKyAgICAgKiBAZXhjZXB0aW9uIEluY29ycmVjdFBhc3N3 b3JkRXhjZXB0aW9uIElmIHRoZSBzZWN1cml0eSBvZmZpY2VyIFBJTiBpcwotICAgICAgKiAgaW5j b3JyZWN0LgotICAgICAgKiBAZXhjZXB0aW9uIFRva2VuRXhjZXB0aW9uIElmIHRoZSBQSU4gd2Fz IGFscmVhZHkgaW5pdGlhbGl6ZWQsCi0gICAgICAqICBvciB0aGVyZSB3YXMgYW4gdW5zcGVjaWZp ZWQgZXJyb3IgaW4gdGhlIHRva2VuLgotZGlmZiAtLWdpdCBhL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9wa2NzMTIvQ2VydEJhZy5qYXZhIGIvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMi9DZXJ0QmFnLmphdmEKLWluZGV4IGExYjA4ZDJlOWVl OWRmY2I0ZWU4MDllMTAxZjMwNzQ2MTE2NjQzODQuLjYxYWQ5NzlkNjVkNWVjYzY2NTkyODEyMThj NThlOGVjOWE0ODIxMWMgMTAwNjQ0Ci0tLS0gYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczEyL0NlcnRCYWcuamF2YQotKysrIGIvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMi9DZXJ0QmFnLmphdmEKLUBAIC05MSw2ICs5MSw3IEBAIHB1 YmxpYyBjbGFzcyBDZXJ0QmFnIGltcGxlbWVudHMgQVNOMVZhbHVlIHsKLSAgICAgICogPGxpPklm IHRoZSB0eXBlIGlzIDxjb2RlPlNEU0lfQ0VSVF9UWVBFPC9jb2RlPiwgcmV0dXJucwotICAgICAg KiAgICAgIGFuIElBNVN0cmluZy4KLSAgICAgICogPGxpPkZvciBhbGwgb3RoZXIgdHlwZXMsIHJl dHVybnMgYW4gQU5ZLgotKyAgICAgKiA8L3VsPgotICAgICAgKgotICAgICAgKiBAZXhjZXB0aW9u IEludmFsaWRCRVJFeGNlcHRpb24gSWYgdGhlIGNlcnQgaXMgbm90IGVuY29kZWQgY29ycmVjdGx5 LgotICAgICAgKi8KLWRpZmYgLS1naXQgYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczcvQ29udGVudEluZm8uamF2YSBiL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9wa2NzNy9Db250ZW50SW5mby5qYXZhCi1pbmRleCA0ZGI3YTQyYzc1Y2MyMWQ3 MTg0MWUyMGRjYjlhNGMxNDk0ZmYwOGMyLi40NTc4ZTliY2Q4YWJkYjRlN2I2NzE3YjA3YWVlOTMy ZGQ4ODdkNjc1IDEwMDY0NAotLS0tIGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3BrY3M3L0NvbnRlbnRJbmZvLmphdmEKLSsrKyBiL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2NzNy9Db250ZW50SW5mby5qYXZhCi1AQCAtMTY5LDcgKzE2OSw2IEBA IHB1YmxpYyBjbGFzcyBDb250ZW50SW5mbyBpbXBsZW1lbnRzIEFTTjFWYWx1ZSB7Ci0gICAgICAq ICBhbiBPQ1RFVF9TVFJJTkcgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICogPHA+SWYgdGhlIGNv bnRlbnRUeXBlIGlzIDxiPm5vdDwvYj4gb25lIG9mIHRoZSBzaXggc3RhbmRhcmQgdHlwZXMsCi0g ICAgICAqICAgICAgdGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGJlIGFuIEFOWS4KLS0gICAgICog PC91bD4KLSAgICAgICovCi0gICAgIHB1YmxpYyBBU04xVmFsdWUgZ2V0SW50ZXJwcmV0ZWRDb250 ZW50KCkgdGhyb3dzIEludmFsaWRCRVJFeGNlcHRpb24gewotICAgICAgICAgaWYoY29udGVudFR5 cGUuZXF1YWxzKERBVEEpKSB7Ci1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3M3L1NpZ25lckluZm8uamF2YSBiL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9wa2NzNy9TaWduZXJJbmZvLmphdmEKLWluZGV4IDMwMGU5OTNjZmZk OWRjYWRhZjk5NjYwOWFiZWViZjg2MjdlYWZkZTguLmM0OTEwN2M4MDU0M2VjOTRmYmIzMTE3YTFh OWExMDg4Zjg1MWE2YjMgMTAwNjQ0Ci0tLS0gYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczcvU2lnbmVySW5mby5qYXZhCi0rKysgYi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczcvU2lnbmVySW5mby5qYXZhCi1AQCAtMTI5LDcgKzEyOSw3 IEBAIHB1YmxpYyBjbGFzcyBTaWduZXJJbmZvIGltcGxlbWVudHMgQVNOMVZhbHVlIHsKLSAgICAg LyoqCi0gICAgICAqIFJldHJpZXZlcyB0aGUgRGlnZXN0QWxnb3JpdGhtIHVzZWQgaW4gdGhpcyBT aWduZXJJbmZvLgotICAgICAgKgotLSAgICAgKiBAZXhjZXB0aW9uIE5vU3VjaEFsZ29yaXRobSBJ ZiB0aGUgYWxnb3JpdGhtIGlzIG5vdCByZWNvZ25pemVkIGJ5IEpTUy4KLSsgICAgICogQGV4Y2Vw dGlvbiBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gSWYgdGhlIGFsZ29yaXRobSBpcyBub3QgcmVj b2duaXplZCBieSBKU1MuCi0gICAgICAqLwotICAgICBwdWJsaWMgRGlnZXN0QWxnb3JpdGhtIGdl dERpZ2VzdEFsZ29yaXRobSgpCi0gICAgICAgICB0aHJvd3MgTm9TdWNoQWxnb3JpdGhtRXhjZXB0 aW9uCi1AQCAtNDAyLDEwICs0MDIsMTIgQEAgcHVibGljIGNsYXNzIFNpZ25lckluZm8gaW1wbGVt ZW50cyBBU04xVmFsdWUgewotICAgICAvKioKLSAgICAgICogVmVyaWZpZXMgdGhhdCB0aGlzIFNp Z25lckluZm8gY29udGFpbnMgYSB2YWxpZCBzaWduYXR1cmUgb2YgdGhlCi0gICAgICAqIGdpdmVu IG1lc3NhZ2UgZGlnZXN0LiAgSWYgYW55IGF1dGhlbnRpY2F0ZWQgYXR0cmlidXRlcyBhcmUgcHJl c2VudCwKLS0gICAgICogdGhleSBhcmUgYWxzbyB2YWxpZGF0ZWQuIFRoZSB2ZXJpZmljYXRpb24g YWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6PHVsPgotLSAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBk b2VzIDxiPm5vdDwvYj4gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUKLS0gICAgICogIHRoZSBj ZXJ0aWZpY2F0ZSBpdHNlbGYsIG9ubHkgdGhlIHNpZ25hdHVyZS4KLSsgICAgICogdGhleSBhcmUg YWxzbyB2YWxpZGF0ZWQuIFRoZSB2ZXJpZmljYXRpb24gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6 Ci0gICAgICAqCi0rICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgPGI+bm90PC9iPiB2ZXJpZnkg dGhlIHZhbGlkaXR5IG9mIHRoZQotKyAgICAgKiB0aGUgY2VydGlmaWNhdGUgaXRzZWxmLCBvbmx5 IHRoZSBzaWduYXR1cmUuCi0rICAgICAqCi0rICAgICAqIDx1bD4KLSAgICAgICogPGxpPklmIG5v IGF1dGhlbnRpY2F0ZWQgYXR0cmlidXRlcyBhcmUgcHJlc2VudCwgdGhlIGNvbnRlbnQgdHlwZSBp cyAKLSAgICAgICogIHZlcmlmaWVkIHRvIGJlIDxpPmRhdGE8L2k+LiBUaGVuIGl0IGlzIHZlcmlm aWVkIHRoYXQgdGhlIG1lc3NhZ2UKLSAgICAgICogIGRpZ2VzdCBwYXNzZWQKLUBAIC00MTMsMjQg KzQxNSwyNSBAQCBwdWJsaWMgY2xhc3MgU2lnbmVySW5mbyBpbXBsZW1lbnRzIEFTTjFWYWx1ZSB7 Ci0gICAgICAqICBkaWdlc3QgaW4gdGhlIFNpZ25lckluZm8uCi0gICAgICAqCi0gICAgICAqIDxs aT5JZiBhdXRoZW50aWNhdGVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQsCi0tICAgICAqICB0d28g cGFydGljdWxhciBhdHRyaWJ1dGVzIG11c3QgYmUgcHJlc2VudDogPHVsPgotKyAgICAgKiAgdHdv IHBhcnRpY3VsYXIgYXR0cmlidXRlcyBtdXN0IGJlIHByZXNlbnQ6Ci0rICAgICAqIDx1bD4KLSAg ICAgICogIDxsaT5QS0NTICM5IENvbnRlbnQtVHlwZSwgdGhlIHR5cGUgb2YgY29udGVudCB0aGF0 IGlzIGJlaW5nIHNpZ25lZC4KLSAgICAgICogICAgICBUaGlzIG11c3QgbWF0Y2ggdGhlIGNvbnRl bnRUeXBlIHBhcmFtZXRlci4KLSAgICAgICogIDxsaT5QS0NTICM5IE1lc3NhZ2UtRGlnZXN0LCB0 aGUgZGlnZXN0IG9mIHRoZSBjb250ZW50IHRoYXQgaXMgYmVpbmcKLSAgICAgICogICAgICBzaWdu ZWQuIFRoaXMgbXVzdCBtYXRjaCB0aGUgbWVzc2FnZURpZ2VzdCBwYXJhbWV0ZXIuCi0gICAgICAq IDwvdWw+Ci0rICAgICAqCi0gICAgICAqIEFmdGVyIHRoZXNlIHR3byBhdHRyaWJ1dGVzIGFyZSB2 ZXJpZmllZCB0byBiZSBib3RoIHByZXNlbnQgYW5kIGNvcnJlY3QsCi0gICAgICAqIHRoZSBlbmNy eXB0ZWREaWdlc3QgZmllbGQgb2YgdGhlIFNpZ25lckluZm8gaXMgdmVyaWZpZWQgdG8gYmUgdGhl Ci0gICAgICAqIHNpZ25hdHVyZSBvZiB0aGUgY29udGVudHMgb2N0ZXRzIG9mIHRoZSBERVIgZW5j b2Rpbmcgb2YgdGhlCi0gICAgICAqIGF1dGhlbnRpY2F0ZWRBdHRyaWJ1dGVzIGZpZWxkLgotLSAg ICAgKgotICAgICAgKiA8L3VsPgotICAgICAgKgotICAgICAgKiBAcGFyYW0gbWVzc2FnZURpZ2Vz dCBUaGUgaGFzaCBvZiB0aGUgY29udGVudCB0aGF0IGlzIHNpZ25lZCBieSB0aGlzCi0gICAgICAq ICBTaWduZXJJbmZvLgotICAgICAgKiBAcGFyYW0gY29udGVudFR5cGUgVGhlIHR5cGUgb2YgdGhl IGNvbnRlbnQgdGhhdCBpcyBzaWduZWQgYnkgdGhpcwotICAgICAgKiAgU2lnbmVySW5mby4KLS0g ICAgICogQGV4Y2VwdGlvbiBOb1N1Y2hPYmplY3RFeGNlcHRpb24gSWYgbm8gY2VydGlmaWNhdGUg bWF0Y2hpbmcgdGhlCi0rICAgICAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24g SWYgbm8gY2VydGlmaWNhdGUgbWF0Y2hpbmcgdGhlCi0gICAgICAqICAgICAgdGhlIGlzc3VlciBu YW1lIGFuZCBzZXJpYWwgbnVtYmVyIGNhbiBiZSBmb3VuZC4KLSAgICAgICovCi0gICAgIHB1Ymxp YyB2b2lkIHZlcmlmeShieXRlW10gbWVzc2FnZURpZ2VzdCwgT0JKRUNUX0lERU5USUZJRVIgY29u dGVudFR5cGUpCi1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3BraXgvY21zL0NvbnRlbnRJbmZvLmphdmEgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtpeC9jbXMvQ29udGVudEluZm8uamF2YQotaW5kZXggOTFhZTc3MGM5NGIz YTg4MTdjMTNlNGNiODY2MDljNDMyZWY2ODJiOC4uOWY2MWU2MDViNDE2ZGZmYzM4NTI1Y2NlYzRk Y2NlOWYzODBjN2RjYyAxMDA2NDQKLS0tLSBhL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9wa2l4L2Ntcy9Db250ZW50SW5mby5qYXZhCi0rKysgYi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbXMvQ29udGVudEluZm8uamF2YQotQEAgLTE2OCw3 ICsxNjgsNiBAQCBwdWJsaWMgY2xhc3MgQ29udGVudEluZm8gaW1wbGVtZW50cyBBU04xVmFsdWUg ewotICAgICAgKiAgYW4gT0NURVRfU1RSSU5HIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAqIDxw PklmIHRoZSBjb250ZW50VHlwZSBpcyA8Yj5ub3Q8L2I+IG9uZSBvZiB0aGUgc2l4IHN0YW5kYXJk IHR5cGVzLAotICAgICAgKiAgICAgIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBhbiBBTlku Ci0tICAgICAqIDwvdWw+Ci0gICAgICAqLwotICAgICBwdWJsaWMgQVNOMVZhbHVlIGdldEludGVy cHJldGVkQ29udGVudCgpIHRocm93cyBJbnZhbGlkQkVSRXhjZXB0aW9uIHsKLSAgICAgICAgIGlm KGNvbnRlbnRUeXBlLmVxdWFscyhEQVRBKSkgewotZGlmZiAtLWdpdCBhL21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4L2Ntcy9TaWduZXJJbmZvLmphdmEgYi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbXMvU2lnbmVySW5mby5qYXZhCi1p bmRleCBmZjM0YTU1NGU0ZDVmNDNiNmNlMThhY2ZhYzAxODk5ODU4ZDYyMTE3Li5lN2ZlYjkzNGRj MGE3OGZiYzQwYTZmZjdkOGRiODdmMGFmOTE3N2ZlIDEwMDY0NAotLS0tIGEvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvY21zL1NpZ25lckluZm8uamF2YQotKysrIGIv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvY21zL1NpZ25lckluZm8u amF2YQotQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWMgY2xhc3MgU2lnbmVySW5mbyBpbXBsZW1l bnRzIEFTTjFWYWx1ZSB7Ci0gICAgIC8qKgotICAgICAgKiBSZXRyaWV2ZXMgdGhlIERpZ2VzdEFs Z29yaXRobSB1c2VkIGluIHRoaXMgU2lnbmVySW5mby4KLSAgICAgICoKLS0gICAgICogQGV4Y2Vw dGlvbiBOb1N1Y2hBbGdvcml0aG0gSWYgdGhlIGFsZ29yaXRobSBpcyBub3QgcmVjb2duaXplZCBi eSBKU1MuCi0rICAgICAqIEBleGNlcHRpb24gTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIElmIHRo ZSBhbGdvcml0aG0gaXMgbm90IHJlY29nbml6ZWQgYnkgSlNTLgotICAgICAgKi8KLSAgICAgcHVi bGljIERpZ2VzdEFsZ29yaXRobSBnZXREaWdlc3RBbGdvcml0aG0oKQotICAgICAgICAgdGhyb3dz IE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbgotQEAgLTQwMywxMCArNDAzLDEyIEBAIHB1YmxpYyBj bGFzcyBTaWduZXJJbmZvIGltcGxlbWVudHMgQVNOMVZhbHVlIHsKLSAgICAgLyoqCi0gICAgICAq IFZlcmlmaWVzIHRoYXQgdGhpcyBTaWduZXJJbmZvIGNvbnRhaW5zIGEgdmFsaWQgc2lnbmF0dXJl IG9mIHRoZQotICAgICAgKiBnaXZlbiBtZXNzYWdlIGRpZ2VzdC4gIElmIGFueSBzaWduZWQgYXR0 cmlidXRlcyBhcmUgcHJlc2VudCwKLS0gICAgICogdGhleSBhcmUgYWxzbyB2YWxpZGF0ZWQuIFRo ZSB2ZXJpZmljYXRpb24gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6PHVsPgotLSAgICAgKiA8cD5O b3RlIHRoYXQgdGhpcyBkb2VzIDxiPm5vdDwvYj4gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUK LS0gICAgICogIHRoZSBjZXJ0aWZpY2F0ZSBpdHNlbGYsIG9ubHkgdGhlIHNpZ25hdHVyZS4KLSsg ICAgICogdGhleSBhcmUgYWxzbyB2YWxpZGF0ZWQuIFRoZSB2ZXJpZmljYXRpb24gYWxnb3JpdGht IGlzIGFzIGZvbGxvd3M6Ci0gICAgICAqCi0rICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgPGI+ bm90PC9iPiB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZQotKyAgICAgKiB0aGUgY2VydGlmaWNh dGUgaXRzZWxmLCBvbmx5IHRoZSBzaWduYXR1cmUuCi0rICAgICAqCi0rICAgICAqIDx1bD4KLSAg ICAgICogPGxpPklmIG5vIHNpZ25lZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGUgY29udGVu dCB0eXBlIGlzIAotICAgICAgKiAgdmVyaWZpZWQgdG8gYmUgPGk+ZGF0YTwvaT4uIFRoZW4gaXQg aXMgdmVyaWZpZWQgdGhhdCB0aGUgbWVzc2FnZQotICAgICAgKiAgZGlnZXN0IHBhc3NlZAotQEAg LTQxNCwyNCArNDE2LDI1IEBAIHB1YmxpYyBjbGFzcyBTaWduZXJJbmZvIGltcGxlbWVudHMgQVNO MVZhbHVlIHsKLSAgICAgICogIGRpZ2VzdCBpbiB0aGUgU2lnbmVySW5mby4KLSAgICAgICoKLSAg ICAgICogPGxpPklmIHNpZ25lZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LAotLSAgICAgKiAgdHdv IHBhcnRpY3VsYXIgYXR0cmlidXRlcyBtdXN0IGJlIHByZXNlbnQ6IDx1bD4KLSsgICAgICogIHR3 byBwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgbXVzdCBiZSBwcmVzZW50OgotKyAgICAgKiA8dWw+Ci0g ICAgICAqICA8bGk+UEtDUyAjOSBDb250ZW50LVR5cGUsIHRoZSB0eXBlIG9mIGNvbnRlbnQgdGhh dCBpcyBiZWluZyBzaWduZWQuCi0gICAgICAqICAgICAgVGhpcyBtdXN0IG1hdGNoIHRoZSBjb250 ZW50VHlwZSBwYXJhbWV0ZXIuCi0gICAgICAqICA8bGk+UEtDUyAjOSBNZXNzYWdlLURpZ2VzdCwg dGhlIGRpZ2VzdCBvZiB0aGUgY29udGVudCB0aGF0IGlzIGJlaW5nCi0gICAgICAqICAgICAgc2ln bmVkLiBUaGlzIG11c3QgbWF0Y2ggdGhlIG1lc3NhZ2VEaWdlc3QgcGFyYW1ldGVyLgotICAgICAg KiA8L3VsPgotKyAgICAgKgotICAgICAgKiBBZnRlciB0aGVzZSB0d28gYXR0cmlidXRlcyBhcmUg dmVyaWZpZWQgdG8gYmUgYm90aCBwcmVzZW50IGFuZCBjb3JyZWN0LAotICAgICAgKiB0aGUgZW5j cnlwdGVkRGlnZXN0IGZpZWxkIG9mIHRoZSBTaWduZXJJbmZvIGlzIHZlcmlmaWVkIHRvIGJlIHRo ZQotICAgICAgKiBzaWduYXR1cmUgb2YgdGhlIGNvbnRlbnRzIG9jdGV0cyBvZiB0aGUgREVSIGVu Y29kaW5nIG9mIHRoZQotICAgICAgKiBzaWduZWRBdHRyaWJ1dGVzIGZpZWxkLgotLSAgICAgKgot ICAgICAgKiA8L3VsPgotICAgICAgKgotICAgICAgKiBAcGFyYW0gbWVzc2FnZURpZ2VzdCBUaGUg aGFzaCBvZiB0aGUgY29udGVudCB0aGF0IGlzIHNpZ25lZCBieSB0aGlzCi0gICAgICAqICBTaWdu ZXJJbmZvLgotICAgICAgKiBAcGFyYW0gY29udGVudFR5cGUgVGhlIHR5cGUgb2YgdGhlIGNvbnRl bnQgdGhhdCBpcyBzaWduZWQgYnkgdGhpcwotICAgICAgKiAgU2lnbmVySW5mby4KLS0gICAgICog QGV4Y2VwdGlvbiBOb1N1Y2hPYmplY3RFeGNlcHRpb24gSWYgbm8gY2VydGlmaWNhdGUgbWF0Y2hp bmcgdGhlCi0rICAgICAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gSWYgbm8g Y2VydGlmaWNhdGUgbWF0Y2hpbmcgdGhlCi0gICAgICAqICAgICAgdGhlIGlzc3VlciBuYW1lIGFu ZCBzZXJpYWwgbnVtYmVyIGNhbiBiZSBmb3VuZC4KLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lk IHZlcmlmeShieXRlW10gbWVzc2FnZURpZ2VzdCwgT0JKRUNUX0lERU5USUZJRVIgY29udGVudFR5 cGUpCi1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br aXgvY3JtZi9DZXJ0UmVxTXNnLmphdmEgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtpeC9jcm1mL0NlcnRSZXFNc2cuamF2YQotaW5kZXggNTNkMTYyYjY5NjczY2FlZWQz ZTk5OGRjOWMyZTIyMWI5NWRmYzZkYi4uYzY2MzcwMzljODcwNDNmMzZkZDFhMWU0NDlhODE5ZWRi Y2M4MTZlMyAxMDA2NDQKLS0tLSBhL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9wa2l4L2NybWYvQ2VydFJlcU1zZy5qYXZhCi0rKysgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtpeC9jcm1mL0NlcnRSZXFNc2cuamF2YQotQEAgLTExMiw3ICsxMTIs NyBAQCBwdWJsaWMgY2xhc3MgQ2VydFJlcU1zZyBpbXBsZW1lbnRzIEFTTjFWYWx1ZSB7Ci0gCi0g ICAgIC8qKgotICAgICAgKiBDb25zdHJ1Y3RzIGEgPGk+Q2VydFJlcW1zZzwvaT4gZnJvbSBhIDxp PkNlcnRSZXF1ZXN0PC9pPiBhbmQsIG9wdGlvbmFsbHksCi0tICAgICAqIGEgPGk+cG9wPi9pPiBh bmQgYSA8aT5yZWdJbmZvPC9pPi4KLSsgICAgICogYSA8aT5wb3A8L2k+IGFuZCBhIDxpPnJlZ0lu Zm88L2k+LgotICAgICAgKiBAcGFyYW0gcG9wIE1heSBiZSBOVUxMLgotICAgICAgKiBAcGFyYW0g cmVnSW5mbyBNYXkgYmUgTlVMTC4KLSAgICAgICovCi1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTZXJ2ZXJTb2NrZXQuamF2YSBiL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU2VydmVyU29ja2V0LmphdmEK LWluZGV4IDIwNDNhNTk4Y2YzZThkMDIzMjg3YzBmNzE0MjA0NWMxZTRmNjhlNGQuLjU4ZDE0NDk2 ZTVhZDkyYWE5MWE5NjZlMTE5ZTE0ZjQ3MGRhNGZkNGEgMTAwNjQ0Ci0tLS0gYS9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNlcnZlclNvY2tldC5qYXZhCi0rKysg Yi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNlcnZlclNvY2tl dC5qYXZhCi1AQCAtMTc0LDkgKzE3NCw2IEBAIHB1YmxpYyBjbGFzcyBTU0xTZXJ2ZXJTb2NrZXQg ZXh0ZW5kcyBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQgewotICAgICAgKiBAcmV0dXJuIGphdmEubmV0 LlNvY2tldCBMb2NhbCBzb2NrZXQgZm9yIGNsaWVudCBjb21tdW5pY2F0aW9uCi0gICAgICAqCi0g ICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gIElmIGFuIGlucHV0IG9yIG91dHB1dCBleGNlcHRp b24gb2NjdXJyZWQKLS0gICAgICogQHRocm93cyBTb2NrZXRUaW1lb3V0RXhjZXB0aW9uICBJZiB0 aGUgc29ja2V0IHRpbWVzb3V0IHRyeWluZyB0byBjb25uZWN0Ci0tICAgICAqIEB0aHJvd3MgSW50 ZXJydXB0ZWRJT0V4Y2VwdGlvbiAgSWYgYW4gaW5wdXQgb3Igb3V0cHV0IGlzIGludGVycnVwdGVk Ci0tICAgICAqIEB0aHJvd3MgU1NMU29ja2V0RXhjZXB0aW9uICBKU1Mgc3ViY2xhc3Mgb2YgamF2 YS5uZXQuU29ja2V0RXhjZXB0aW9uCi0gICAgICAqLwotICAgICBwdWJsaWMgU29ja2V0IGFjY2Vw dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICBzeW5jaHJvbml6ZWQgKGFjY2VwdExv Y2spIHsKLWRpZmYgLS1naXQgYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv dXRpbC9EZWJ1Z19kZWJ1Zy5qbm90IGIvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3V0aWwvRGVidWcuamF2YQotc2ltaWxhcml0eSBpbmRleCAxMDAlCi1yZW5hbWUgZnJvbSBt b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9EZWJ1Z19kZWJ1Zy5qbm90 Ci1yZW5hbWUgdG8gbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvRGVi dWcuamF2YQotLS0gCi0yLjQuMwotCgpkaWZmIC0tZ2l0IGEvanNzLUhTTS1tYW51ZmFjdHVyZXJJ RC5wYXRjaCBiL2pzcy1IU00tbWFudWZhY3R1cmVySUQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDJhN2JkZmYuLjAwMDAwMDAKLS0tIGEvanNzLUhTTS1tYW51ZmFjdHVyZXJJ RC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLWRpZmYgLXVwIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWly R2VuZXJhdG9yLmMuY2Z1IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczExL1BLMTFLZXlQYWlyR2VuZXJhdG9yLmMKLS0tLSBqc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5UGFpckdlbmVyYXRv ci5jLmNmdQkyMDExLTExLTEwIDE3OjE4OjAyLjcwNjQyMTAwMCAtMDgwMAotKysrIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWly R2VuZXJhdG9yLmMJMjAxMS0xMS0xMCAxNzoxODoyMy4zNzA0NDIwMDAgLTA4MDAKLUBAIC0xOTUs NyArMTk1LDggQEAgSlNTX1BLMTFfZ2VuZXJhdGVLZXlQYWlyV2l0aE9wRmxhZ3MoSk5JRQotICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICBQUl9HZXRFcnJvclRleHQoZXJyQnVmKTsKLSAgICAg ICAgIH0KLS0gICAgICAgIG1zZ0J1ZiA9IFBSX3NtcHJpbnRmKCJLZXlwYWlyIEdlbmVyYXRpb24g ZmFpbGVkIG9uIHRva2VuOiAlcyIsCi0rICAgICAgICBtc2dCdWYgPSBQUl9zbXByaW50ZigiS2V5 cGFpciBHZW5lcmF0aW9uIGZhaWxlZCBvbiB0b2tlbiB3aXRoIGVycm9yOiAlZCA6ICVzIiwKLSsg ICAgICAgICAgICBQUl9HZXRFcnJvcigpLAotICAgICAgICAgICAgIGVyckxlbmd0aD4wPyBlcnJC dWYgOiAiIik7Ci0gICAgICAgICBpZihlcnJMZW5ndGg+MCkgewotICAgICAgICAgICAgIFBSX0Zy ZWUoZXJyQnVmKTsKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMuY2Z1IGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMKLS0t LSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9Q SzExS2V5V3JhcHBlci5jLmNmdQkyMDExLTExLTEwIDE3OjE4OjEwLjc2NzQyOTAwMCAtMDgwMAot KysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEx L1BLMTFLZXlXcmFwcGVyLmMJMjAxMS0xMS0xMCAxNzo1MjozNC43MDM0OTEwMDAgLTA4MDAKLUBA IC0zMzQsMzIgKzMzNCwzNiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVdy YXBwCi0gICAgIFBSQm9vbCBpc0V4dHJhY3RhYmxlID0gUFJfRkFMU0U7Ci0gCi0gICAgIC8qIHNw ZWNpYWwgY2FzZSBuZXRoc20gYW5kIGx1bmFzYSovCi0tICAgIENLX1VURjhDSEFSIG5ldGhzbUxh YmVsWzRdID0geydOJywnSCcsJ1MnLCdNJ307Ci0tICAgIENLX1VURjhDSEFSIGx1bmFzYUxhYmVs WzRdID0geydsJywndScsJ24nLCdhJ307Ci0rICAgIGNvbnN0IGludCBudW1NYW51ZmFjdHVyZXJJ RGNoYXJzID0gNzsKLSsgICAgQ0tfVVRGOENIQVIgbmV0aHNtTWFudWZhY3R1cmVySURbXSA9IHsn bicsJ0MnLCdpJywncCcsJ2gnLCdlJywncid9OwotKyAgICBDS19VVEY4Q0hBUiBsdW5hc2FNYW51 ZmFjdHVyZXJJRFtdID0geydTJywnYScsJ2YnLCdlJywnbicsJ2UnLCd0J307Ci0gICAgIFBSQm9v bCBpc05ldGhzbSA9IFBSX1RSVUU7Ci0gICAgIFBSQm9vbCBpc0x1bmFzYSA9IFBSX1RSVUU7Ci0g Ci0rICAgIHRva2VuSW5mby5tYW51ZmFjdHVyZXJJRFswXSA9IDA7Ci0rCi0gICAgIGlmKCBKU1Nf UEsxMV9nZXRUb2tlblNsb3RQdHIoZW52LCB0b2tlbk9iaiwgJnNsb3QpICE9IFBSX1NVQ0NFU1Mp IHsKLSAgICAgICAgIC8qIGV4Y2VwdGlvbiB3YXMgdGhyb3duICovCi0gICAgICAgICBnb3RvIGZp bmlzaDsKLSAgICAgfQotIAotLSAgICBpZiAoIFBLMTFfR2V0VG9rZW5JbmZvKHNsb3QsICZ0b2tl bkluZm8pID09IFBSX1NVQ0NFU1MpIHsKLSsgICAgaWYgKCAoUEsxMV9HZXRUb2tlbkluZm8oc2xv dCwgJnRva2VuSW5mbykgPT0gUFJfU1VDQ0VTUykgJiYKLSsgICAgICAgKHRva2VuSW5mby5tYW51 ZmFjdHVyZXJJRFswXSAhPSAwKSkgewotICAgICAgICAgaW50IGl4ID0gMDsKLS0gICAgICAgIGZv cihpeD0wOyBpeCA8IDQ7IGl4KyspIHsKLS0gICAgICAgICAgICBpZiAodG9rZW5JbmZvLmxhYmVs W2l4XSAhPSBuZXRoc21MYWJlbFtpeF0pIHsKLSsKLSsgICAgICAgIGZvcihpeD0wOyBpeCA8IG51 bU1hbnVmYWN0dXJlcklEY2hhcnM7IGl4KyspIHsKLSsgICAgICAgICAgICBpZiAodG9rZW5JbmZv Lm1hbnVmYWN0dXJlcklEW2l4XSAhPSBuZXRoc21NYW51ZmFjdHVyZXJJRFtpeF0pIHsKLSAgICAg ICAgICAgICAgICBpc05ldGhzbSA9IFBSX0ZBTFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLS0gICAgICAgIGl4ID0gMDsKLS0gICAgICAgIGZv cihpeD0wOyBpeCA8IDQ7IGl4KyspIHsKLS0gICAgICAgICAgICBpZiAodG9rZW5JbmZvLmxhYmVs W2l4XSAhPSBsdW5hc2FMYWJlbFtpeF0pIHsKLSsKLSsgICAgICAgIGZvcihpeD0wOyBpeCA8IG51 bU1hbnVmYWN0dXJlcklEY2hhcnM7IGl4KyspIHsKLSsgICAgICAgICAgICBpZiAodG9rZW5JbmZv Lm1hbnVmYWN0dXJlcklEW2l4XSAhPSBsdW5hc2FNYW51ZmFjdHVyZXJJRFtpeF0pIHsKLSAgICAg ICAgICAgICAgICBpc0x1bmFzYSA9IFBSX0ZBTFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLS0KLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIGlz TmV0aHNtID0gUFJfRkFMU0U7Ci0gICAgICAgICBpc0x1bmFzYSA9IFBSX0ZBTFNFOwoKZGlmZiAt LWdpdCBhL2pzcy1QQkUtUEtDUzUtVjItc2VjdXJlLVAxMi5wYXRjaCBiL2pzcy1QQkUtUEtDUzUt VjItc2VjdXJlLVAxMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4ZTRk Ny4uMDAwMDAwMAotLS0gYS9qc3MtUEJFLVBLQ1M1LVYyLXNlY3VyZS1QMTIucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5jLm9sZCAuL21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmMKLS0tLSAuL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmMub2xkCTIwMTEt MDktMjMgMTA6MTQ6MjQuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5jCTIwMTEtMDktMjIgMTg6Mzk6MTUu MDAwMDAwMDAwIC0wNzAwCi1AQCAtMTExLDYgKzExMSw5IEBAIEpTU19BbGdJbmZvIEpTU19BbGdU YWJsZVtOVU1fQUxHU10gPSB7Ci0gLyogNDggKi8gICAge1NFQ19PSURfQU5TSVg5NjJfRUNEU0Ff U0hBMzg0X1NJR05BVFVSRSwgU0VDX09JRF9UQUd9LAotIC8qIDQ5ICovICAgIHtTRUNfT0lEX0FO U0lYOTYyX0VDRFNBX1NIQTUxMl9TSUdOQVRVUkUsIFNFQ19PSURfVEFHfSwKLSAvKiA1MCAqLyAg ICB7U0VDX09JRF9BTlNJWDk2Ml9FQ0RTQV9TSUdOQVRVUkVfU1BFQ0lGSUVEX0RJR0VTVCwgU0VD X09JRF9UQUd9LAotKy8qIDUxICovICAgIHtTRUNfT0lEX1BLQ1M1X1BCS0RGMiwgU0VDX09JRF9U QUd9LAotKy8qIDUyICovICAgIHtTRUNfT0lEX1BLQ1M1X1BCRVMyLCBTRUNfT0lEX1RBR30sCi0r LyogNTMgKi8gICAge1NFQ19PSURfUEtDUzVfUEJNQUMxLCBTRUNfT0lEX1RBR30sCi0gLyogUkVN RU1CRVIgVE8gVVBEQVRFIE5VTV9BTEdTISEhICovCi0gfTsKLSAKLWRpZmYgLXVwIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uaC5vbGQgLi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5oCi0t LS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRo bS5oLm9sZAkyMDExLTA5LTIzIDEwOjE0OjA4LjAwMDAwMDAwMCAtMDcwMAotKysrIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uaAkyMDExLTA5 LTIyIDIwOjMxOjEyLjAwMDAwMDAwMCAtMDcwMAotQEAgLTU2LDcgKzU2LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSlNTX0FsZ0luZm9TdHIgewotICAgICBKU1NfQWxnVHlwZSB0eXBlOwotIH0gSlNTX0Fs Z0luZm87Ci0gCi0tI2RlZmluZSBOVU1fQUxHUyA1MQotKyNkZWZpbmUgTlVNX0FMR1MgNTQKLSAK LSBleHRlcm4gSlNTX0FsZ0luZm8gSlNTX0FsZ1RhYmxlW107Ci0gZXh0ZXJuIENLX1VMT05HIEpT U19zeW1rZXlVc2FnZVtdOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhLm9sZCAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmphdmEKLS0tLSAuL21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmphdmEub2xkCTIwMTEt MDktMjMgMTA6MTQ6NDIuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhCTIwMTEtMDktMjIgMTg6Mzk6 MTUuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMjMzLDUgKzIzMyw5IEBAIHB1YmxpYyBjbGFzcyBBbGdv cml0aG0gewotICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfQU5TSVg5 NjJfRUNEU0FfU0hBMzg0X1NJR05BVFVSRT00ODsKLSAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5h bCBzaG9ydCBTRUNfT0lEX0FOU0lYOTYyX0VDRFNBX1NIQTUxMl9TSUdOQVRVUkU9NDk7Ci0gICAg IHByb3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnQgU0VDX09JRF9BTlNJWDk2Ml9FQ0RTQV9TSUdO QVRVUkVfU1BFQ0lGSUVEX0RJR0VTVD01MDsKLSsgICAgLy9QS0NTNSBWMgotKyAgICBwcm90ZWN0 ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfUEtDUzVfUEJLREYyPTUxOwotKyAgICBwcm90 ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfUEtDUzVfUEJFUzI9NTI7Ci0rICAgIHBy b3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnQgU0VDX09JRF9QS0NTNV9QQk1BQzE9NTM7Ci0gCi0g fQotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRv L1BCRUFsZ29yaXRobS5qYXZhLm9sZCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9jcnlwdG8vUEJFQWxnb3JpdGhtLmphdmEKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vUEJFQWxnb3JpdGhtLmphdmEub2xkCTIwMTEtMDktMjMg MTA6MTU6MDQuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvY3J5cHRvL1BCRUFsZ29yaXRobS5qYXZhCTIwMTEtMDktMjIgMTg6Mzk6MTUu MDAwMDAwMDAwIC0wNzAwCi1AQCAtOTMsNiArOTMsMjcgQEAgcHVibGljIGNsYXNzIFBCRUFsZ29y aXRobSBleHRlbmRzIEtleUdlbgotICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIAotICAgICAvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot KyAgICAvLyBQS0NTIDUgdjIKLSsgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQQkVBbGdvcml0aG0K LSsgICAgUEJFX1BLQ1M1X1BCS0RGMiA9IG5ldyBQQkVBbGdvcml0aG0oCi0rICAgICAgICBTRUNf T0lEX1BLQ1M1X1BCS0RGMiwgIlBCS0RGMiIsIDEyOCwKLSsgICAgICAgICAgICBQS0NTNS5zdWJC cmFuY2goMTIpLCBFbmNyeXB0aW9uQWxnb3JpdGhtLkFFU18xMjhfQ0JDLCA4ICk7Ci0rCi0rICAg IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCi0rICAgIC8vIFBLQ1MgNSB2MgotKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBCRUFs Z29yaXRobQotKyAgICBQQkVfUEtDUzVfUEJFUzIgPSBuZXcgUEJFQWxnb3JpdGhtKAotKyAgICAg ICAgU0VDX09JRF9QS0NTNV9QQkVTMiwgIlBCRVMyIiwgMTI4LAotKyAgICAgICAgICAgIFBLQ1M1 LnN1YkJyYW5jaCgxMyksIEVuY3J5cHRpb25BbGdvcml0aG0uQUVTXzEyOF9DQkMsIDggKTsKLSsK LSsgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KLSsgICAgLy8gUEtDUyA1IHYyCi0rICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg UEJFQWxnb3JpdGhtCi0rICAgIFBCRV9QS0NTNV9QQk1BQzEgPSBuZXcgUEJFQWxnb3JpdGhtKAot KyAgICAgICAgU0VDX09JRF9QS0NTNV9QQk1BQzEsICJQQk1BQzEiLCAxMjgsCi0rICAgICAgICAg ICAgUEtDUzUuc3ViQnJhbmNoKDE0KSwgRW5jcnlwdGlvbkFsZ29yaXRobS5BRVNfMTI4X0NCQywg OCApOwotKwotKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBCRUFsZ29yaXRo bQotICAgICBQQkVfTUQyX0RFU19DQkMgPSBuZXcgUEJFQWxnb3JpdGhtKAotICAgICAgICAgU0VD X09JRF9QS0NTNV9QQkVfV0lUSF9NRDJfQU5EX0RFU19DQkMsICJQQkUvTUQyL0RFUy9DQkMiLCA1 NiwKLWRpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3Mx MS9QSzExS2V5R2VuZXJhdG9yLmMub2xkIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9QSzExS2V5R2VuZXJhdG9yLmMKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleUdlbmVyYXRvci5jLm9sZAkyMDExLTA5 LTIzIDEwOjEyOjA5LjAwMDAwMDAwMCAtMDcwMAotKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5R2VuZXJhdG9yLmMJMjAxMS0wOS0yNyAxMDoz NToxOS4wMDAwMDAwMDAgLTA3MDAKLUBAIC0zMjQsNyArMzI0LDYgQEAgSmF2YV9vcmdfbW96aWxs YV9qc3NfcGtjczExX1BLMTFLZXlHZW5lcgotICAgICB9Ci0gICAgIC8qIHByaW50X3NlY2l0ZW0o cHdpdGVtKTsgKi8KLSAKLS0KLSAgICAgbWVjaCA9IEpTU19nZXRQSzExTWVjaEZyb21BbGcoZW52 LCBhbGcpOwotIAotICAgICBpZiggbWVjaCA9PSBDS01fUEJBX1NIQTFfV0lUSF9TSEExX0hNQUMg KSB7Ci1AQCAtMzQ0LDcgKzM0MywxNCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsx MUtleUdlbmVyCi0gICAgICAgICBQUl9BU1NFUlQob2lkVGFnICE9IFNFQ19PSURfVU5LTk9XTik7 Ci0gCi0gICAgICAgICAvKiBjcmVhdGUgYWxnaWQgKi8KLS0gICAgICAgIGFsZ2lkID0gUEsxMV9D cmVhdGVQQkVBbGdvcml0aG1JRChvaWRUYWcsIGl0ZXJhdGlvbkNvdW50LCBzYWx0KTsKLSsgICAg ICAgIGFsZ2lkID0gUEsxMV9DcmVhdGVQQkVWMkFsZ29yaXRobUlEKAotKyAgICAgICAgICAgIG9p ZFRhZywKLSsgICAgICAgICAgICBTRUNfT0lEX0RFU19FREUzX0NCQywKLSsgICAgICAgICAgICBT RUNfT0lEX0hNQUNfU0hBMSwKLSsgICAgICAgICAgICAxNjgvOCwKLSsgICAgICAgICAgICBpdGVy YXRpb25Db3VudCwKLSsgICAgICAgICAgICBzYWx0KTsKLSsKLSAgICAgICAgIGlmKCBhbGdpZCA9 PSBOVUxMICkgewotICAgICAgICAgICAgIEpTU190aHJvd01zZyhlbnYsIFRPS0VOX0VYQ0VQVElP TiwKLSAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gcHJvY2VzcyBQQkUgcGFyYW1ldGVy cyIpOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtj czExL1BLMTFLZXlXcmFwcGVyLmMub2xkIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5jCi0tLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMub2xkCTIwMTEtMDktMjUg MTU6NDM6NTIuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMJMjAxMS0wOS0yNyAyMToxNjowNi4w MDAwMDAwMDAgLTA3MDAKLUBAIC0zMjQsMTQgKzMyNCwzNCBAQCBKYXZhX29yZ19tb3ppbGxhX2pz c19wa2NzMTFfUEsxMUtleVdyYXBwCi0gICAgIFNFQ0l0ZW0gKndyYXBwZWQ9TlVMTCwgKml2PU5V TEwsICpwYXJhbT1OVUxMLCAqcHViVmFsdWU9TlVMTDsKLSAgICAgU0VDSXRlbSBsYWJlbDsgLyog ZW1wdHkgc2VjaXRlbSwgZG9lc24ndCBuZWVkIHRvIGJlIGZyZWVkICovCi0gICAgIFBSQm9vbCB0 b2tlbjsKLS0gICAgQ0tfQVRUUklCVVRFX1RZUEUgYXR0cmlic1s0XTsKLS0gICAgaW50IG51bUF0 dHJpYnM7Ci0rICAgIENLX0FUVFJJQlVURV9UWVBFIGF0dHJpYnNbNF0gPSB7MCwgMCwgMCwgMH07 Ci0rICAgIGludCBudW1BdHRyaWJzID0gMDsKLSsgICAgQ0tfVE9LRU5fSU5GTyB0b2tlbkluZm87 Ci0rCi0rICAgIFBSQm9vbCBpc1NlbnNpdGl2ZSA9IFBSX1RSVUU7Ci0rICAgIFBSQm9vbCBpc0V4 dHJhY3RhYmxlID0gUFJfRkFMU0U7Ci0rICAgIC8qIHNwZWNpYWwgY2FzZSBuZXRoc20qLwotKyAg ICBDS19VVEY4Q0hBUiBuZXRoc21MYWJlbFs0XSA9IHsnTicsJ0gnLCdTJywnTSd9OwotKyAgICBQ UkJvb2wgaXNOZXRoc20gPSBQUl9UUlVFOwotIAotICAgICBpZiggSlNTX1BLMTFfZ2V0VG9rZW5T bG90UHRyKGVudiwgdG9rZW5PYmosICZzbG90KSAhPSBQUl9TVUNDRVNTKSB7Ci0gICAgICAgICAv KiBleGNlcHRpb24gd2FzIHRocm93biAqLwotICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgIH0K LSAKLSsgICAgaWYgKCBQSzExX0dldFRva2VuSW5mbyhzbG90LCAmdG9rZW5JbmZvKSA9PSBQUl9T VUNDRVNTKSB7Ci0rICAgICAgICBpbnQgaXggPSAwOwotKyAgICAgICAgZm9yKGl4PTA7IGl4IDwg NDsgaXgrKykgewotKyAgICAgICAgICAgIGlmICh0b2tlbkluZm8ubGFiZWxbaXhdICE9IG5ldGhz bUxhYmVsW2l4XSkgewotKyAgICAgICAgICAgICAgIGlzTmV0aHNtID0gUFJfRkFMU0U7Ci0rICAg ICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKwotKyAgICB9 IGVsc2UgewotKyAgICAgICAgaXNOZXRoc20gPSBQUl9GQUxTRTsKLSsgICAgfQotKwotICAgICAv KiBnZXQgdW53cmFwcGluZyBrZXkgKi8KLSAgICAgaWYoIEpTU19QSzExX2dldFN5bUtleVB0cihl bnYsIHVud3JhcHBlck9iaiwgJnVud3JhcHBpbmdLZXkpCi0gICAgICAgICAgICAgIT0gUFJfU1VD Q0VTUykgewotQEAgLTM5MiwxNCArNDEyLDI0IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3Mx MV9QSzExS2V5V3JhcHAKLSAgICAgfQotICAgICBrZXlUeXBlID0gUEsxMV9HZXRLZXlUeXBlKGtl eVR5cGVNZWNoLCAwKTsKLSAKLSsgICAgaWYoIGlzTmV0aHNtICkgewotKyAgICAgICAgaXNTZW5z aXRpdmUgPSBQUl9GQUxTRTsKLSsgICAgICAgIGlzRXh0cmFjdGFibGUgPSBQUl9GQUxTRTsKLSsg ICAgfQotKwotK3NldEF0dHJzOgotICAgICAvKiBmaWd1cmUgb3V0IHdoaWNoIG9wZXJhdGlvbnMg dG8gZW5hYmxlIGZvciB0aGlzIGtleSAqLwotICAgICBzd2l0Y2ggKGtleVR5cGUpIHsKLSAgICAg Y2FzZSBDS0tfUlNBOgotICAgICAgICAgYXR0cmlic1swXSA9IENLQV9TSUdOOwotLSAgICAgICAg YXR0cmlic1sxXSA9IENLQV9ERUNSWVBUOwotLSAgICAgICAgYXR0cmlic1syXSA9IENLQV9TSUdO X1JFQ09WRVI7Ci0tICAgICAgICBhdHRyaWJzWzNdID0gQ0tBX1VOV1JBUDsKLS0gICAgICAgIG51 bUF0dHJpYnMgPSA0OwotKyAgICAgICAgYXR0cmlic1sxXSA9IENLQV9TSUdOX1JFQ09WRVI7Ci0r ICAgICAgICBhdHRyaWJzWzJdID0gQ0tBX1VOV1JBUDsKLSsgICAgICAgIGlmIChpc0V4dHJhY3Rh YmxlKSB7Ci0rICAgICAgICAgICAgYXR0cmlic1szXSA9IENLQV9FWFRSQUNUQUJMRTsKLSsgICAg ICAgICAgICBudW1BdHRyaWJzID0gNDsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAg bnVtQXR0cmlicyA9IDM7Ci0rICAgICAgICB9Ci0gCWJyZWFrOwotICAgICBjYXNlIENLS19EU0E6 Ci0gICAgICAgICBhdHRyaWJzWzBdID0gQ0tBX1NJR047Ci1AQCAtNDI2LDcgKzQ1Niw3IEBAIEph dmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAKLSAgICAgLyogcGVyZm9y bSB0aGUgdW53cmFwICovCi0gICAgIHByaXZrID0gUEsxMV9VbndyYXBQcml2S2V5KHNsb3QsIHVu d3JhcHBpbmdLZXksIHdyYXBUeXBlLCBwYXJhbSwgd3JhcHBlZCwKLS0gICAgICAgICAgICAgICAg JmxhYmVsLCBwdWJWYWx1ZSwgdG9rZW4sIFBSX1RSVUUgLypzZW5zaXRpdmUqLywga2V5VHlwZSwK LSsgICAgICAgICAgICAgICAgJmxhYmVsLCBwdWJWYWx1ZSwgdG9rZW4sIGlzU2Vuc2l0aXZlIC8q c2Vuc2l0aXZlKi8sIGtleVR5cGUsCi0gICAgICAgICAgICAgICAgIGF0dHJpYnMsIG51bUF0dHJp YnMsIE5VTEwgLyp3aW5jeCovKTsKLSAgICAgaWYoIHByaXZrID09IE5VTEwgKSB7Ci0gICAgICAg ICBKU1NfdGhyb3dNc2coZW52LCBUT0tFTl9FWENFUFRJT04sICJLZXkgVW53cmFwIGZhaWxlZCBv biB0b2tlbiIpOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEub2xkIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhCi0tLS0gLi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEu b2xkCTIwMTEtMDktMjcgMTU6MTY6NTIuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEJMjAx MS0wOS0yNyAxNzowMToxOC4wMDAwMDAwMDAgLTA3MDAKLUBAIC0xOTAsMjEgKzE5MCwyMyBAQCBm aW5hbCBjbGFzcyBQSzExS2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCi0gICAgICAgICBpZigga2V5 PT1udWxsICkgewotICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkS2V5RXhjZXB0aW9uKCJL ZXkgaXMgbnVsbCIpOwotICAgICAgICAgfQotLSAgICAgICAgaWYoICEga2V5LmdldE93bmluZ1Rv a2VuKCkuZXF1YWxzKHRva2VuKSApIHsKLS0gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtl eUV4Y2VwdGlvbigiS2V5IGRvZXMgbm90IHJlc2lkZSBvbiB0aGUgIisKLS0gICAgICAgICAgICAg ICAgImN1cnJlbnQgdG9rZW4iKTsKLS0gICAgICAgIH0KLS0gICAgICAgIGlmKCAhIChrZXkgaW5z dGFuY2VvZiBQSzExU3ltS2V5KSApIHsKLS0gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtl eUV4Y2VwdGlvbigiS2V5IGlzIG5vdCBhIFBLQ1MgIzExIGtleSIpOwotLSAgICAgICAgfQotICAg ICAgICAgdHJ5IHsKLSsgICAgICAgICAgICBpZiggISBrZXkuZ2V0T3duaW5nVG9rZW4oKS5lcXVh bHModG9rZW4pICkgewotKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtleUV4Y2Vw dGlvbigiS2V5IGRvZXMgbm90IHJlc2lkZSBvbiB0aGUgY3VycmVudCB0b2tlbjoga2V5IG93bmlu ZyB0b2tlbj0iKwotKyAgICAgICAgICAgICAgICAgICAga2V5LmdldE93bmluZ1Rva2VuKCkuZ2V0 TmFtZSgpKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgaWYoICEgKGtleSBpbnN0YW5j ZW9mIFBLMTFTeW1LZXkpICkgewotKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtl eUV4Y2VwdGlvbigiS2V5IGlzIG5vdCBhIFBLQ1MgIzExIGtleSIpOwotKyAgICAgICAgICAgIH0K LSAgICAgICAgICAgICBpZiggKChQSzExU3ltS2V5KWtleSkuZ2V0S2V5VHlwZSgpICE9Ci0tICAg ICAgICAgICAgICAgICAgICBLZXlUeXBlLmdldEtleVR5cGVGcm9tQWxnb3JpdGhtKGFsZ29yaXRo bSkgKSB7Ci0tICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkS2V5RXhjZXB0aW9uKCJL ZXkgaXMgbm90IHRoZSByaWdodCB0eXBlIGZvciIrCi0rICAgICAgICAgICAgICAgIEtleVR5cGUu Z2V0S2V5VHlwZUZyb21BbGdvcml0aG0oYWxnb3JpdGhtKSApIHsKLSsgICAgICAgICAgICAgICAg ICAgIHRocm93IG5ldyBJbnZhbGlkS2V5RXhjZXB0aW9uKCJLZXkgaXMgbm90IHRoZSByaWdodCB0 eXBlIGZvciIrCi0gICAgICAgICAgICAgICAgICAgICAiIHRoaXMgYWxnb3JpdGhtIik7Ci0gICAg ICAgICAgICAgfQotICAgICAgICAgfSBjYXRjaCggTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUg KSB7Ci0gICAgICAgICAgICAgQXNzZXJ0Lm5vdFJlYWNoZWQoIlVua25vd24gYWxnb3JpdGhtIik7 Ci0rICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotKyAgICAgICAgICAgIEFzc2VydC5u b3RSZWFjaGVkKCJFeGNlcHRpb246IisgZS50b1N0cmluZygpKTsKLSAgICAgICAgIH0KLSAgICAg fQotIAotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtj czExL1BLMTFUb2tlbi5qYXZhLm9sZCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMVRva2VuLmphdmEKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRva2VuLmphdmEub2xkCTIwMTEtMDktMjMgMTA6MTI6 MjkuMDAwMDAwMDAwIC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczExL1BLMTFUb2tlbi5qYXZhCTIwMTEtMDktMjMgMDg6NTQ6MTkuMDAwMDAwMDAw IC0wNzAwCi1AQCAtMTA2LDEwICsxMDYsMTMgQEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFUb2tl biBpbXBsZW1lbnRzIAotICAgICBnZXRLZXlHZW5lcmF0b3IoS2V5R2VuQWxnb3JpdGhtIGFsZ29y aXRobSkKLSAgICAgICAgIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIFRva2VuRXhj ZXB0aW9uCi0gICAgIHsKLSsvKiBOU1MgaXMgY2FwYWJsZSBvZiBmaW5kaW5nIHRoZSByaWdodCB0 b2tlbiB0byBkbyBhbGdvcml0aG0sCi0rICAgc28gdGhpcyBjYWxsIGlzIHByZW1hdHVyZWx5IGJh aWxpbmcKLSAgICAgICAgIGlmKCAhIGRvZXNBbGdvcml0aG0oYWxnb3JpdGhtKSApIHsKLSAgICAg ICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uKAotICAgICAgICAgICAg ICAgICBhbGdvcml0aG0rIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9rZW4iKTsKLSAgICAg ICAgIH0KLSsqLwotICAgICAgICAgcmV0dXJuIG5ldyBQSzExS2V5R2VuZXJhdG9yKHRoaXMsIGFs Z29yaXRobSk7Ci0gICAgIH0KLSAKLWRpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BraXgvcHJpbWl0aXZlL0VuY3J5cHRlZFByaXZhdGVLZXlJbmZvLmphdmEu b2xkIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvcHJpbWl0aXZl L0VuY3J5cHRlZFByaXZhdGVLZXlJbmZvLmphdmEKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9wa2l4L3ByaW1pdGl2ZS9FbmNyeXB0ZWRQcml2YXRlS2V5SW5mby5q YXZhLm9sZAkyMDExLTA5LTIzIDEwOjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvcHJpbWl0aXZlL0VuY3J5cHRlZFBy aXZhdGVLZXlJbmZvLmphdmEJMjAxMS0wOS0yNyAxNDozMTo0MS4wMDAwMDAwMDAgLTA3MDAKLUBA IC00Myw2ICs0Myw3IEBAIGltcG9ydCBvcmcubW96aWxsYS5qc3MudXRpbC5Bc3NlcnQ7Ci0gaW1w b3J0IGphdmEuc2VjdXJpdHkuKjsKLSBpbXBvcnQgb3JnLm1vemlsbGEuanNzLkNyeXB0b01hbmFn ZXI7Ci0gaW1wb3J0IG9yZy5tb3ppbGxhLmpzcy51dGlsLlBhc3N3b3JkOwotK2ltcG9ydCBvcmcu bW96aWxsYS5qc3MuY3J5cHRvLlByaXZhdGVLZXk7Ci0gaW1wb3J0IGphdmEuc2VjdXJpdHkuc3Bl Yy5BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOwotIAotIC8qKgotQEAgLTE4NCw2ICsxODUsODkgQEAg cHVibGljIGNsYXNzIEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIGltcAotICAgICAgIHJldHVybiBu dWxsOwotICAgICB9Ci0gCi0rCi0rICAgIC8qKgotKyAgICAgKiBDcmVhdGVzIGEgbmV3IEVuY3J5 cHRlZFByaXZhdGVLZXlJbmZvLCB3aGVyZSB0aGUgZGF0YSBpcyBlbmNyeXB0ZWQKLSsgICAgICog d2l0aCBhIHBhc3N3b3JkLWJhc2VkIGtleS0gCi0rICAgICAqICAgICAgIHdpdGggd3JhcHBpbmcv dW53cmFwcGluZyBoYXBwZW5pbmcgb24gdG9rZW4uCi0rICAgICAqCi0rICAgICAqIEBwYXJhbSBr ZXlHZW5BbGcgVGhlIGFsZ29yaXRobSBmb3IgZ2VuZXJhdGluZyBhIHN5bW1ldHJpYyBrZXkgZnJv bQotKyAgICAgKiAgICAgIGEgcGFzc3dvcmQsIHNhbHQsIGFuZCBpdGVyYXRpb24gY291bnQuCi0r ICAgICAqIEBwYXJhbSBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdG8gdXNlIGluIGdlbmVyYXRpbmcg dGhlIGtleS4KLSsgICAgICogQHBhcmFtIHNhbHQgVGhlIHNhbHQgdG8gdXNlIGluIGdlbmVyYXRp bmcgdGhlIGtleS4KLSsgICAgICogQHBhcmFtIGl0ZXJhdGlvbkNvdW50IFRoZSBudW1iZXIgb2Yg aGFzaGluZyBpdGVyYXRpb25zIHRvIHBlcmZvcm0KLSsgICAgICogICAgICB3aGlsZSBnZW5lcmF0 aW5nIHRoZSBrZXkuCi0rICAgICAqIEBwYXJhbSBjaGFyVG9CeXRlQ29udmVydGVyIFRoZSBtZWNo YW5pc20gZm9yIGNvbnZlcnRpbmcgdGhlIGNoYXJhY3RlcnMKLSsgICAgICogICAgICBpbiB0aGUg cGFzc3dvcmQgaW50byBieXRlcy4gIElmIG51bGwsIHRoZSBkZWZhdWx0IG1lY2hhbmlzbQotKyAg ICAgKiAgICAgIHdpbGwgYmUgdXNlZCwgd2hpY2ggaXMgVVRGOC4KLSsgICAgICogQHBhcmFtIHBy aSBUaGUgUHJpdmF0ZUtleSB0byBiZSBlbmNyeXB0ZWQgYW5kIHN0b3JlZCBpbiB0aGUKLSsgICAg ICogICAgICBFbmNyeXB0ZWRDb250ZW50SW5mby4KLSsgICAgICovCi0rICAgIHB1YmxpYyBzdGF0 aWMgRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8KLSsgICAgY3JlYXRlUEJFKFBCRUFsZ29yaXRobSBr ZXlHZW5BbGcsIFBhc3N3b3JkIHBhc3N3b3JkLCBieXRlW10gc2FsdCwKLSsgICAgICAgICAgICBp bnQgaXRlcmF0aW9uQ291bnQsCi0rICAgICAgICAgICAgS2V5R2VuZXJhdG9yLkNoYXJUb0J5dGVD b252ZXJ0ZXIgY2hhclRvQnl0ZUNvbnZlcnRlciwKLSsgICAgICAgICAgICBQcml2YXRlS2V5IHBy aSwgQ3J5cHRvVG9rZW4gdG9rZW4pCi0rICAgICAgICB0aHJvd3MgQ3J5cHRvTWFuYWdlci5Ob3RJ bml0aWFsaXplZEV4Y2VwdGlvbiwgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLAotKyAgICAgICAg SW52YWxpZEtleUV4Y2VwdGlvbiwgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbiwg VG9rZW5FeGNlcHRpb24sCi0rICAgICAgICBDaGFyQ29udmVyc2lvbkV4Y2VwdGlvbgotKyAgICB7 Ci0rICAgICAgdHJ5IHsKLSsKLSsgICAgICAgIC8vIGNoZWNrIGtleSBnZW4gYWxnb3JpdGhtCi0r Ci0rICAgICAgICBpZiggISAoa2V5R2VuQWxnIGluc3RhbmNlb2YgUEJFQWxnb3JpdGhtKSApIHsK LSsgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uKCJLZXkgZ2Vu ZXJhdGlvbiBhbGdvcml0aG0iKwotKyAgICAgICAgICAgICAgICAiIGlzIG5vdCBhIFBCRSBhbGdv cml0aG0iKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIFBCRUFsZ29yaXRobSBwYmVBbGcgPSAo UEJFQWxnb3JpdGhtKSBrZXlHZW5BbGc7Ci0rCi0rICAgICAgICAvLyBnZW5lcmF0ZSBrZXkKLSsK LSsgICAgICAgIEtleUdlbmVyYXRvciBrZyA9IHRva2VuLmdldEtleUdlbmVyYXRvcigga2V5R2Vu QWxnICk7Ci0rICAgICAgICBQQkVLZXlHZW5QYXJhbXMgcGJla2dQYXJhbXMgPSBuZXcgUEJFS2V5 R2VuUGFyYW1zKAotKyAgICAgICAgICAgIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25Db3VudCk7 Ci0rICAgICAgICBpZiggY2hhclRvQnl0ZUNvbnZlcnRlciAhPSBudWxsICkgewotKyAgICAgICAg ICAgIGtnLnNldENoYXJUb0J5dGVDb252ZXJ0ZXIoIGNoYXJUb0J5dGVDb252ZXJ0ZXIgKTsKLSsg ICAgICAgIH0KLSsgICAgICAgIGtnLmluaXRpYWxpemUocGJla2dQYXJhbXMpOwotKyAgICAgICAg a2cudGVtcG9yYXJ5S2V5cyh0cnVlKTsKLSsgICAgICAgIFN5bW1ldHJpY0tleSBrZXkgPSBrZy5n ZW5lcmF0ZSgpOwotKwotKyAgICAgICAgLy8gZ2VuZXJhdGUgSVYKLSsgICAgICAgIEVuY3J5cHRp b25BbGdvcml0aG0gZW5jQWxnID0gcGJlQWxnLmdldEVuY3J5cHRpb25BbGcoKTsKLSsgICAgICAg IEFsZ29yaXRobVBhcmFtZXRlclNwZWMgcGFyYW1zPW51bGw7Ci0rICAgICAgICBpZiggZW5jQWxn LmdldFBhcmFtZXRlckNsYXNzKCkuZXF1YWxzKCBJVlBhcmFtZXRlclNwZWMuY2xhc3MgKSApIHsK LSsgICAgICAgICAgICBwYXJhbXMgPSBuZXcgSVZQYXJhbWV0ZXJTcGVjKCBrZy5nZW5lcmF0ZVBC RV9JVigpICk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBLZXlXcmFwcGVyIHdyYXBwZXIgPSB0 b2tlbi5nZXRLZXlXcmFwcGVyKAotKyAgICAgICAgICAgICAgICBLZXlXcmFwQWxnb3JpdGhtLkRF UzNfQ0JDKTsKLSsgICAgICAgIHdyYXBwZXIuaW5pdFdyYXAoa2V5LCBwYXJhbXMpOwotKyAgICAg ICAgYnl0ZSBlbmNyeXB0ZWRbXSA9IHdyYXBwZXIud3JhcChwcmkpOwotKwotKyAgICAgICAgLy8g bWFrZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBpZGVudGlmaWVyCi0rICAgICAgICBQQkVQYXJhbWV0 ZXIgcGJlUGFyYW0gPSBuZXcgUEJFUGFyYW1ldGVyKCBzYWx0LCBpdGVyYXRpb25Db3VudCApOwot KyAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciBlbmNBbGdJRCA9IG5ldyBBbGdvcml0aG1JZGVu dGlmaWVyKAotKyAgICAgICAgICAgICAgICBrZXlHZW5BbGcudG9PSUQoKSwgcGJlUGFyYW0pOwot KwotKyAgICAgICAgLy8gY3JlYXRlIEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvCi0rICAgICAgICBF bmNyeXB0ZWRQcml2YXRlS2V5SW5mbyBlcGtpID0gbmV3IEVuY3J5cHRlZFByaXZhdGVLZXlJbmZv ICgKLSsgICAgICAgICAgICAgICAgZW5jQWxnSUQsCi0rICAgICAgICAgICAgICAgIG5ldyBPQ1RF VF9TVFJJTkcoZW5jcnlwdGVkKSApOwotKwotKyAgICAgICAgcmV0dXJuIGVwa2k7Ci0rCi0rICAg ICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSsgICAgICAgIEFzc2VydC5ub3RSZWFjaGVkKCJF bmNyeXB0ZWRQcml2YXRlS2V5SW5mbyBleGNlcHRpb246IgotKyAgICAgICAgICAgICsiLmNyZWF0 ZVBCRSIpOwotKyAgICAgIH0KLSsKLSsgICAgICByZXR1cm4gbnVsbDsKLSsgICAgfQotKwotKwot ICAgICAvKioKLSAgICAgICogRGVjcnlwdHMgYW4gRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8gdGhh dCB3YXMgZW5jcnlwdGVkIHdpdGggYSBQQkUKLSAgICAgICogIGFsZ29yaXRobS4gIFRoZSBhbGdv cml0aG0gYW5kIGl0cyBwYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQgZnJvbQoKZGlmZiAtLWdpdCBh L2pzcy1QS0NTMTItRklQUy5wYXRjaCBiL2pzcy1QS0NTMTItRklQUy5wYXRjaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhYTg1NC4uMDAwMDAwMAotLS0gYS9qc3MtUEtDUzEyLUZJ UFMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1kaWZmIC11cCBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5R2Vu ZXJhdG9yLmMuZml4IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFLZXlHZW5lcmF0b3IuYwotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlHZW5lcmF0b3IuYy5maXgJMjAx MS0wOC0xNSAxNTozOTo1Ni42MzMxNTgwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5R2VuZXJhdG9yLmMJMjAx MS0wOC0xNSAyMDo0MzozNC45NDc3NDkwMDAgLTA3MDAKLUBAIC0yMzksNDAgKzIzOSw0NyBAQCBw cmludF9zZWNpdGVtKFNFQ0l0ZW0gKml0ZW0pIHsKLSAgKiAgICAgIFRva2VuRXhjZXB0aW9uIGlm IGFuIGVycm9yIG9jY3Vycy4KLSAgKi8KLSBzdGF0aWMgUEsxMVN5bUtleSoKLS1jb25zdHJ1Y3RT SEExUEJBS2V5KEpOSUVudiAqZW52LCBTRUNJdGVtICpwd2l0ZW0sIFNFQ0l0ZW0gKnNhbHQsCi0r Y29uc3RydWN0U0hBMVBCQUtleShKTklFbnYgKmVudiwgUEsxMVNsb3RJbmZvICpzbG90LCBTRUNJ dGVtICpwd2l0ZW0sIFNFQ0l0ZW0gKnNhbHQsCi0gICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQp Ci0gewotLSAgICBQQkVCaXRHZW5Db250ZXh0KiBwYmVDdHh0PU5VTEw7Ci0tICAgIFNFQ0l0ZW0g KmtleUJpdHM9TlVMTDsKLSAgICAgUEsxMVN5bUtleSAqa2V5PU5VTEw7Ci0gCi0tICAgIHBiZUN0 eHQgPSBQQkVfQ3JlYXRlQ29udGV4dCggU0VDX09JRF9TSEExLCBwYmVCaXRHZW5JbnRlZ3JpdHlL ZXksCi0tICAgICAgICAgICAgICAgICAgICBwd2l0ZW0sIHNhbHQsIDE2MCAvKiBTSEExIGtleSBs ZW5ndGggKi8sIGl0ZXJhdGlvbkNvdW50KTsKLS0gICAgaWYoIHBiZUN0eHQgPT0gTlVMTCApIHsK LS0gICAgICAgIEpTU190aHJvd01zZyhlbnYsIFRPS0VOX0VYQ0VQVElPTiwgIkZhaWxlZCB0byBj cmVhdGUgUEJFIGNvbnRleHQiKTsKLSsgICAgdW5zaWduZWQgY2hhciBpdkRhdGFbOF07Ci0rICAg IFNFQ0l0ZW0gbWVjaEl0ZW07Ci0rICAgIENLX1BCRV9QQVJBTVMgcGJlX3BhcmFtczsKLSsKLSsg ICAgaWYoIHB3aXRlbSA9PSBOVUxMICkgewotKyAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgVE9L RU5fRVhDRVBUSU9OLAotKyAgICAgICAgICAgICJjb25zdHJ1Y3RTSEExUEFLZXk6IgotKyAgICAg ICAgICAgICIgcHdpdGVtIE5VTEwiKTsKLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci0t Ci0tICAgIGtleUJpdHMgPSBQQkVfR2VuZXJhdGVCaXRzKHBiZUN0eHQpOwotLSAgICBpZigga2V5 Qml0cyA9PSBOVUxMICkgewotLSAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgVE9LRU5fRVhDRVBU SU9OLCAiRmFpbGVkIHRvIGdlbmVyYXRlIGJpdHMgZnJvbSIKLS0gICAgICAgICAgICAgICAgIlBC RSBjb250ZXh0Iik7Ci0rICAgIGlmKCBzYWx0ID09IE5VTEwgKSB7Ci0rICAgICAgICBKU1NfdGhy b3dNc2coZW52LCBUT0tFTl9FWENFUFRJT04sCi0rICAgICAgICAgICAgImNvbnN0cnVjdFNIQTFQ QUtleToiCi0rICAgICAgICAgICAgIiBzYWx0IE5VTEwiKTsKLSAgICAgICAgIGdvdG8gZmluaXNo OwotICAgICB9Ci0gCi0tICAgIGtleSA9IFBLMTFfSW1wb3J0U3ltS2V5KCBQSzExX0dldEludGVy bmFsU2xvdCgpLCBDS01fU0hBXzEsCi0tICAgICAgICAgICAgICAgIFBLMTFfT3JpZ2luR2VuZXJh dGVkLCBDS0FfU0lHTiwga2V5Qml0cywgTlVMTCk7Ci0rICAgIHBiZV9wYXJhbXMucEluaXRWZWN0 b3IgPSBpdkRhdGE7Ci0rICAgIHBiZV9wYXJhbXMucFBhc3N3b3JkID0gcHdpdGVtLT5kYXRhOwot KyAgICBwYmVfcGFyYW1zLnVsUGFzc3dvcmRMZW4gPSBwd2l0ZW0tPmxlbjsKLSsgICAgcGJlX3Bh cmFtcy5wU2FsdCA9IHNhbHQtPmRhdGE7Ci0rICAgIHBiZV9wYXJhbXMudWxTYWx0TGVuID0gc2Fs dC0+bGVuOwotKyAgICBwYmVfcGFyYW1zLnVsSXRlcmF0aW9uID0gaXRlcmF0aW9uQ291bnQ7Ci0r ICAgIG1lY2hJdGVtLmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSAmcGJlX3BhcmFtczsKLSsgICAg bWVjaEl0ZW0ubGVuID0gc2l6ZW9mKHBiZV9wYXJhbXMpOwotKwotKyAgICBrZXkgPSBQSzExX1Jh d1BCRUtleUdlbihzbG90LCBDS01fUEJBX1NIQTFfV0lUSF9TSEExX0hNQUMsICZtZWNoSXRlbSwg cHdpdGVtLCBQUl9GQUxTRSwgTlVMTCk7Ci0rCi0gICAgIGlmKCBrZXkgPT0gTlVMTCApIHsKLS0g ICAgICAgIEpTU190aHJvd01zZyhlbnYsIFRPS0VOX0VYQ0VQVElPTiwgIkZhaWxlZCB0byBpbXBv cnQgUEJBIGtleSBmcm9tIgotLSAgICAgICAgICAgICIgUEJBLWdlbmVyYXRlZCBiaXRzIik7Ci0r ICAgICAgICBKU1NfdGhyb3dNc2coZW52LCBUT0tFTl9FWENFUFRJT04sCi0rICAgICAgICAgICAg IlBLMTFfUmF3UEJFS2V5R2VuOiIKLSsgICAgICAgICAgICAiIGZhaWxlZCB0byBnZW5lcmF0ZSBr ZXkiKTsKLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci0gCi0gZmluaXNoOgotLSAgICBp ZiggcGJlQ3R4dCApIHsKLS0gICAgICAgIFBCRV9EZXN0cm95Q29udGV4dChwYmVDdHh0KTsKLS0g ICAgfQotLSAgICAvKiBrZXlCaXRzID09IHBiZUN0eHQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZnJl ZSBpdCAqLwotICAgICByZXR1cm4ga2V5OwotIH0KLSAKLUBAIC0zMjQsNyArMzMxLDcgQEAgSmF2 YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFLZXlHZW5lcgotIAotICAgICAgICAgLyogc3Bl Y2lhbCBjYXNlLCBjb25zdHJ1Y3Qga2V5IGJ5IGhhbmQuIEJ1ZyAjMzM2NTg3ICovCi0gCi0tICAg ICAgICBza2V5ID0gY29uc3RydWN0U0hBMVBCQUtleShlbnYsIHB3aXRlbSwgc2FsdCwgaXRlcmF0 aW9uQ291bnQpOwotKyAgICAgICAgc2tleSA9IGNvbnN0cnVjdFNIQTFQQkFLZXkoZW52LCBzbG90 LCBwd2l0ZW0sIHNhbHQsIGl0ZXJhdGlvbkNvdW50KTsKLSAgICAgICAgIGlmKCBza2V5PT1OVUxM ICkgewotICAgICAgICAgICAgIC8qIGV4Y2VwdGlvbiB3YXMgdGhyb3duICovCi0gICAgICAgICAg ICAgZ290byBmaW5pc2g7CgpkaWZmIC0tZ2l0IGEvanNzLVJDNC1zdHJlbmdoLXZlcmlmeS5wYXRj aCBiL2pzcy1SQzQtc3RyZW5naC12ZXJpZnkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDU5YjY1NzcuLjAwMDAwMDAKLS0tIGEvanNzLVJDNC1zdHJlbmdoLXZlcmlmeS5wYXRj aAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleUdlbkFsZ29yaXRobS5q YXZhLm5raW5kZXJTYXZlZCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL2NyeXB0by9LZXlHZW5BbGdvcml0aG0uamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleUdlbkFsZ29yaXRobS5qYXZh Lm5raW5kZXJTYXZlZAkyMDE0LTA5LTI2IDE0OjQwOjAzLjQ1Mjg0NTA0NyAtMDcwMAotKysrIGpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleUdl bkFsZ29yaXRobS5qYXZhCTIwMTQtMDktMjYgMTQ6NDE6MDIuMTAxNTk4MTQ2IC0wNzAwCi1AQCAt MTI3LDcgKzEyNyw3IEBAIHB1YmxpYyBjbGFzcyBLZXlHZW5BbGdvcml0aG0gZXh0ZW5kcyBBbGcK LSAgICAgUkM0ID0gbmV3IEtleUdlbkFsZ29yaXRobShDS01fUkM0X0tFWV9HRU4sICJSQzQiLAot ICAgICAgICAgICAgIG5ldyBLZXlTdHJlbmd0aFZhbGlkYXRvcigpIHsKLSAgICAgICAgICAgICAg ICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZEtleVN0cmVuZ3RoKGludCBzdHJlbmd0aCkgewotLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0rICAgICAgICAgICAgICAgICAgICByZXR1 cm4gc3RyZW5ndGg+PTQwICYmIHN0cmVuZ3RoIDw9ICgyNTYqOCk7Ci0gICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICB9LCBudWxsLCBudWxsKTsKLSAKCmRpZmYgLS1naXQgYS9qc3MtU0hB LU9JRC1maXgucGF0Y2ggYi9qc3MtU0hBLU9JRC1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGZkZGE1MGYuLjAwMDAwMDAKLS0tIGEvanNzLVNIQS1PSUQtZml4LnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotZGlmZiAtdXAganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24xL09CSkVDVF9JREVOVElGSUVSLmph dmEuam4ganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9hc24x L09CSkVDVF9JREVOVElGSUVSLmphdmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2FzbjEvT0JKRUNUX0lERU5USUZJRVIuamF2YS5qbgkyMDE0LTA5 LTEwIDA5OjIxOjUyLjY2Mzk1OTExNSAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvYXNuMS9PQkpFQ1RfSURFTlRJRklFUi5qYXZhCTIwMTQt MDktMTAgMDk6MjI6MzguNjYyNzg4NzQ3IC0wNzAwCi1AQCAtMTE3LDcgKzExNyw3IEBAIHB1Ymxp YyBjbGFzcyBPQkpFQ1RfSURFTlRJRklFUiBpbXBsZW1lbnQKLSAgICAgICogVGhlIE9JRCBzcGFj ZSBmb3IgRklQUy0xODAtMiBTSEEyNTYvU0hBMzg0L1NIQTUxMiBzdGFuZGFyZGl6ZWQgYWxnb3Jp dGhtcy4KLSAgICAgICovCi0gICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT0JKRUNUX0lERU5USUZJ RVIgSEFTSF9BTEdPUklUSE0gPQotLSAgICAgICAgbmV3IE9CSkVDVF9JREVOVElGSUVSKCBuZXcg bG9uZ1tdIHsyLCAxNiwgODQwLCAxLCAxMDEsIDMsIDQgfSApOwotKyAgICAgICAgbmV3IE9CSkVD VF9JREVOVElGSUVSKCBuZXcgbG9uZ1tdIHsyLCAxNiwgODQwLCAxLCAxMDEsIDMsIDQsIDIgfSAp OwotIAotIAotICAgICAvKioKCmRpZmYgLS1naXQgYS9qc3MtVmVyaWZ5Q2VydGlmaWNhdGUtZW5o YW5jZW1lbnQucGF0Y2ggYi9qc3MtVmVyaWZ5Q2VydGlmaWNhdGUtZW5oYW5jZW1lbnQucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ODJiNDEuLjAwMDAwMDAKLS0tIGEvanNz LVZlcmlmeUNlcnRpZmljYXRlLWVuaGFuY2VtZW50LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MjA0ICswLDAgQEAKLUZyb20gM2M0Y2E4YTIwMTA4ODlmZTI5MjcwNGViY2M4YjkyMmY3N2YyZjdj MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJFbmRpIFMuIERld2F0YSIgPGVkZXdh dGFAcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgOSBEZWMgMjAxNSAwMDozMDo1MCArMDEwMAotU3Vi amVjdDogW1BBVENIXSBBZGRlZCB2ZXJpZnlDZXJ0aWZpY2F0ZSgpIG1ldGhvZC4KLQotQSBuZXcg Q3J5cHRvTWFuYWdlci52ZXJpZnlDZXJ0aWZpY2F0ZSgpIG1ldGhvZCBoYXMgYmVlbiBhZGRlZCBh cwotYW4gYWx0ZXJuYXRpdmUgdG8gaXNDZXJ0VmFsaWQoKS4gSWYgdGhlcmUgaXMgYSBjZXJ0aWZp Y2F0ZQotdmFsaWRhdGlvbiBwcm9ibGVtLCB0aGUgbWV0aG9kIHdpbGwgdGhyb3cgYSBDZXJ0aWZp Y2F0ZVZhbGlkYXRpb24KLWV4Y2VwdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBOU1MgZXJyb3IgbWVz c2FnZSBhbmQgY29kZS4gVGhlCi1leGNlcHRpb24gd2lsbCBhbHNvIHByb3ZpZGUgYSBzdGFjayB0 cmFjZSB0byBoZWxwIHRyb3VibGVzaG9vdAotdmFsaWRhdGlvbiBpc3N1ZXMuCi0KLWh0dHBzOi8v ZmVkb3JhaG9zdGVkLm9yZy9wa2kvdGlja2V0Lzg1MAotLS0tCi0gLi4uL2pzcy9vcmcvbW96aWxs YS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhICAgICAgICAgfCA1NCArKysrKysrKy0tLS0tLQotIG1v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9QSzExRmluZGVyLmMgIHwgODMgKysr KysrKysrKysrKysrKysrKy0tLQotIC4uLi9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvanNzX2V4 Y2VwdGlvbnMuaCAgICAgIHwgIDIgKwotIDMgZmlsZXMgY2hhbmdlZCwgMTEwIGluc2VydGlvbnMo KyksIDI5IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YSBiL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEKLWluZGV4IDBhNGY1OTA2NGJmZGRi NDJkNDczMDIyNTUwYzI0ZjI1MTcxOWQwMmIuLjU0ZmZkODEzMGIwZTFmMWZjYTQ5ZGQ4YjEzMGE2 MjFlNDQ5YzdjZTcgMTAwNjQ0Ci0tLS0gYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhCi0rKysgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhCi1AQCAtMTUxNSwzMCArMTUxNSw0NCBAQCBw dWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBsZW1lbnRzIFRva2VuU3VwcGxpZXIK LSAgICAgICAgICAgICBDZXJ0aWZpY2F0ZVVzYWdlIGNlcnRpZmljYXRlVXNhZ2UpCi0gICAgICAg ICB0aHJvd3MgT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24sIEludmFsaWROaWNrbmFtZUV4Y2VwdGlv bgotICAgICB7Ci0tICAgICAgICBpZiAobmlja25hbWU9PW51bGwpIHsKLS0gICAgICAgICAgICB0 aHJvdyBuZXcgSW52YWxpZE5pY2tuYW1lRXhjZXB0aW9uKCJOaWNrbmFtZSBtdXN0IGJlIG5vbi1u dWxsIik7Ci0tICAgICAgICB9Ci0tICAgICAgICAvLyAwIGNlcnRpZmljYXRlIHVzYWdlIHdpbGwg Z2V0IGN1cnJlbnQgdXNhZ2UKLS0gICAgICAgIC8vIHNob3VsZCBjYWxsIGlzQ2VydFZhbGlkKCkg Y2FsbCBhYm92ZSB0aGF0IHJldHVybnMgY2VydGlmaWNhdGUgdXNhZ2UKLS0gICAgICAgIGlmICgo Y2VydGlmaWNhdGVVc2FnZSA9PSBudWxsKSB8fAotLSAgICAgICAgICAgICAgICAoY2VydGlmaWNh dGVVc2FnZSA9PSBDZXJ0aWZpY2F0ZVVzYWdlLkNoZWNrQWxsVXNhZ2VzKSl7Ci0tICAgICAgICAg ICAgaW50IGN1cnJDZXJ0aWZpY2F0ZVVzYWdlID0gMHgwMDAwOwotLSAgICAgICAgICAgIGN1cnJD ZXJ0aWZpY2F0ZVVzYWdlID0gdmVyaWZ5Q2VydGlmaWNhdGVOb3dDVU5hdGl2ZShuaWNrbmFtZSwK LS0gICAgICAgICAgICAgICAgY2hlY2tTaWcpOwotKyAgICAgICAgdHJ5IHsKLSsgICAgICAgICAg ICB2ZXJpZnlDZXJ0aWZpY2F0ZShuaWNrbmFtZSwgY2hlY2tTaWcsIGNlcnRpZmljYXRlVXNhZ2Up OwotKyAgICAgICAgICAgIHJldHVybiB0cnVlOwotKwotKyAgICAgICAgfSBjYXRjaCAoT2JqZWN0 Tm90Rm91bmRFeGNlcHRpb24gfCBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24gZSkgewotKyAgICAg ICAgICAgIHRocm93IGU7Ci0gCi0tICAgICAgICAgICAgaWYgKGN1cnJDZXJ0aWZpY2F0ZVVzYWdl ID09IENlcnRpZmljYXRlVXNhZ2UuYmFzaWNDZXJ0aWZpY2F0ZVVzYWdlcyl7IAotLSAgICAgICAg ICAgICAgICAvLyBjZXJ0IGlzIGdvb2QgZm9yIG5vdGhpbmcKLS0gICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwotLSAgICAgICAgICAgIH0gZWxzZQotLSAgICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsKLS0gICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgcmV0dXJuIHZlcmlmeUNlcnRp ZmljYXRlTm93TmF0aXZlKG5pY2tuYW1lLCBjaGVja1NpZywKLS0gICAgICAgICAgICAgIGNlcnRp ZmljYXRlVXNhZ2UuZ2V0VXNhZ2UoKSk7Ci0rICAgICAgICB9IGNhdGNoIChDZXJ0aWZpY2F0ZUV4 Y2VwdGlvbiBlKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgfQotICAg ICB9Ci0gCi0tICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gdmVyaWZ5Q2VydGlmaWNhdGVOb3dO YXRpdmUoU3RyaW5nIG5pY2tuYW1lLAotLSAgICAgICAgYm9vbGVhbiBjaGVja1NpZywgaW50IGNl cnRpZmljYXRlVXNhZ2UpIHRocm93cyBPYmplY3ROb3RGb3VuZEV4Y2VwdGlvbjsKLSsgICAgLyoq Ci0rICAgICAqIFZlcmlmeSBhIGNlcnRpZmljYXRlIHRoYXQgZXhpc3RzIGluIHRoZSBnaXZlbiBj ZXJ0IGRhdGFiYXNlLAotKyAgICAgKiBjaGVjayBpZiBpdCdzIHZhbGlkIGFuZCB0aGF0IHdlIHRy dXN0IHRoZSBpc3N1ZXIuIFZlcmlmeSB0aW1lCi0rICAgICAqIGFnYWluc3Qgbm93LgotKyAgICAg KiBAcGFyYW0gbmlja25hbWUgbmlja25hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHZlcmlmeS4K LSsgICAgICogQHBhcmFtIGNoZWNrU2lnIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjZXJ0 aWZpY2F0ZQotKyAgICAgKiBAcGFyYW0gY2VydGlmaWNhdGVVc2FnZSBzZWUgY2VydGlmaWNhdGUg dXNhZ2UgZGVmaW5lZCB0byB2ZXJpZnkgY2VydGlmaWNhdGUKLSsgICAgICoKLSsgICAgICogQGV4 Y2VwdGlvbiBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24gSWYgdGhlIG5pY2tuYW1lIGlzIG51bGwu Ci0rICAgICAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gSWYgbm8gY2VydGlm aWNhdGUgY291bGQgYmUgZm91bmQKLSsgICAgICogICAgICB3aXRoIHRoZSBnaXZlbiBuaWNrbmFt ZS4KLSsgICAgICogQGV4Y2VwdGlvbiBDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiBJZiBjZXJ0aWZpY2F0 ZSBpcyBpbnZhbGlkLgotKyAgICAgKi8KLSsgICAgcHVibGljIHZvaWQgdmVyaWZ5Q2VydGlmaWNh dGUoU3RyaW5nIG5pY2tuYW1lLAotKyAgICAgICAgICAgIGJvb2xlYW4gY2hlY2tTaWcsCi0rICAg ICAgICAgICAgQ2VydGlmaWNhdGVVc2FnZSBjZXJ0aWZpY2F0ZVVzYWdlKQotKyAgICAgICAgICAg ICAgICAgICAgdGhyb3dzIE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uLCBJbnZhbGlkTmlja25hbWVF eGNlcHRpb24sIENlcnRpZmljYXRlRXhjZXB0aW9uIHsKLSsgICAgICAgIGludCB1c2FnZSA9IGNl cnRpZmljYXRlVXNhZ2UgPT0gbnVsbCA/IDAgOiBjZXJ0aWZpY2F0ZVVzYWdlLmdldFVzYWdlKCk7 Ci0rICAgICAgICB2ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZShuaWNrbmFtZSwgY2hlY2tTaWcs IHVzYWdlKTsKLSsgICAgfQotKwotKyAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIHZlcmlmeUNlcnRp ZmljYXRlTm93TmF0aXZlKAotKyAgICAgICAgICAgIFN0cmluZyBuaWNrbmFtZSwKLSsgICAgICAg ICAgICBib29sZWFuIGNoZWNrU2lnLAotKyAgICAgICAgICAgIGludCBjZXJ0aWZpY2F0ZVVzYWdl KQotKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uLCBJ bnZhbGlkTmlja25hbWVFeGNlcHRpb24sIENlcnRpZmljYXRlRXhjZXB0aW9uOwotIAotICAgICAv KioKLSAgICAgICogbm90ZTogdGhpcyBtZXRob2QgY2FsbHMgb2Jzb2xldGUgZnVuY3Rpb24gaW4g TlNTCi1kaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1BL MTFGaW5kZXIuYyBiL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9QSzExRmlu ZGVyLmMKLWluZGV4IDhjN2YwYjRjMDViNTg1MjdhNDFjYWMxNDBkYmI1ZGMzMDU3ODU3MGYuLjQ5 ODY0NzhmZmM4NjBlMTQ1Y2QzMWU0MWMyODgwZmNjMmI1ZTAwN2UgMTAwNjQ0Ci0tLS0gYS9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCi0rKysgYi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCi1AQCAtMTY2Nywy MSArMTY2Nyw4NiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX3ZlcmlmeUNl cnRpZmljYXRlTm93Q1VOYXRpdmUoSk5JRW52ICplbnYsCi0gLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICog Q3J5cHRvTWFuYWdlci52ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZQotICAqCi0tICogUmV0dXJu cyBKTklfVFJVRSBpZiBzdWNjZXNzLCBKTklfRkFMU0Ugb3RoZXJ3aXNlCi0rICogVmVyaWZ5IGEg Y2VydGlmaWNhdGUgdGhhdCBleGlzdHMgaW4gdGhlIGdpdmVuIGNlcnQgZGF0YWJhc2UsCi0rICog Y2hlY2sgaWYgaXQncyB2YWxpZCBhbmQgdGhhdCB3ZSB0cnVzdCB0aGUgaXNzdWVyLiBWZXJpZnkg dGltZQotKyAqIGFnYWluc3Qgbm93LgotKyAqIEBwYXJhbSBuaWNrbmFtZSBuaWNrbmFtZSBvZiB0 aGUgY2VydGlmaWNhdGUgdG8gdmVyaWZ5LgotKyAqIEBwYXJhbSBjaGVja1NpZyB2ZXJpZnkgdGhl IHNpZ25hdHVyZSBvZiB0aGUgY2VydGlmaWNhdGUKLSsgKiBAcGFyYW0gY2VydGlmaWNhdGVVc2Fn ZSBzZWUgY2VydGlmaWNhdGUgdXNhZ2UgZGVmaW5lZCB0byB2ZXJpZnkgY2VydGlmaWNhdGUKLSsg KgotKyAqIEBleGNlcHRpb24gSW52YWxpZE5pY2tuYW1lRXhjZXB0aW9uIElmIHRoZSBuaWNrbmFt ZSBpcyBudWxsLgotKyAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gSWYgbm8g Y2VydGlmaWNhdGUgY291bGQgYmUgZm91bmQKLSsgKiAgICAgIHdpdGggdGhlIGdpdmVuIG5pY2tu YW1lLgotKyAqIEBleGNlcHRpb24gQ2VydGlmaWNhdGVFeGNlcHRpb24gSWYgY2VydGlmaWNhdGUg aXMgaW52YWxpZC4KLSAgKi8KLS1KTklFWFBPUlQgamJvb2xlYW4gSk5JQ0FMTAotK0pOSUVYUE9S VCB2b2lkIEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX3Zlcmlm eUNlcnRpZmljYXRlTm93TmF0aXZlKEpOSUVudiAqZW52LAotLSAgICAgICAgam9iamVjdCBzZWxm LCBqc3RyaW5nIG5pY2tTdHJpbmcsIGpib29sZWFuIGNoZWNrU2lnLCBqaW50IHJlcXVpcmVkX2Nl cnRpZmljYXRlVXNhZ2UpCi0rICAgICAgICBqb2JqZWN0IHNlbGYsIGpzdHJpbmcgbmlja1N0cmlu ZywgamJvb2xlYW4gY2hlY2tTaWcsIGppbnQgY2VydGlmaWNhdGVVc2FnZSkKLSB7Ci0tICAgIFNF Q1N0YXR1cyAgICAgICAgIHJ2ICAgID0gU0VDRmFpbHVyZTsKLSAgICAgU0VDQ2VydGlmaWNhdGVV c2FnZSAgICAgIGN1cnJVc2FnZSA9IDB4MDAwMDsKLSsgICAgU0VDU3RhdHVzICAgICAgICAgICAg ICAgIHJ2ID0gU0VDRmFpbHVyZTsKLSsgICAgQ0VSVENlcnRpZmljYXRlICAgICAgICAgICpjZXJ0 ID0gTlVMTDsKLSsgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICpuaWNrbmFtZSA9IE5VTEw7 Ci0gCi0tICAgIHJ2ID0gdmVyaWZ5Q2VydGlmaWNhdGVOb3coZW52LCBzZWxmLCBuaWNrU3RyaW5n LCBjaGVja1NpZywgcmVxdWlyZWRfY2VydGlmaWNhdGVVc2FnZSwgJmN1cnJVc2FnZSk7Ci0rICAg IGlmIChuaWNrU3RyaW5nID09IE5VTEwpIHsKLSsgICAgICAgIEpTU190aHJvd01zZyhlbnYsIElO VkFMSURfTklDS05BTUVfRVhDRVBUSU9OLCAiTWlzc2luZyBjZXJ0aWZpY2F0ZSBuaWNrbmFtZSIp OwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSAKLS0gICAgaWYoIHJ2ID09IFNFQ1N1 Y2Nlc3MpIHsKLS0gICAgICAgIHJldHVybiBKTklfVFJVRTsKLS0gICAgfSBlbHNlIHsKLS0gICAg ICAgIHJldHVybiBKTklfRkFMU0U7Ci0rICAgIG5pY2tuYW1lID0gKGNoYXIgKikgKCplbnYpLT5H ZXRTdHJpbmdVVEZDaGFycyhlbnYsIG5pY2tTdHJpbmcsIE5VTEwpOwotKwotKyAgICBpZiAobmlj a25hbWUgPT0gTlVMTCkgewotKyAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgSU5WQUxJRF9OSUNL TkFNRV9FWENFUFRJT04sICJNaXNzaW5nIGNlcnRpZmljYXRlIG5pY2tuYW1lIik7Ci0rICAgICAg ICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICBjZXJ0ID0gQ0VSVF9GaW5kQ2VydEJ5Tmlj a25hbWUoQ0VSVF9HZXREZWZhdWx0Q2VydERCKCksIG5pY2tuYW1lKTsKLSsKLSsgICAgaWYgKGNl cnQgPT0gTlVMTCkgewotKyAgICAgICAgY2hhciAqbXNnQnVmOwotKyAgICAgICAgbXNnQnVmID0g UFJfc21wcmludGYoIkNlcnRpZmljYXRlIG5vdCBmb3VuZDogJXMiLCBuaWNrbmFtZSk7Ci0rICAg ICAgICBKU1NfdGhyb3dNc2coZW52LCBPQkpFQ1RfTk9UX0ZPVU5EX0VYQ0VQVElPTiwgbXNnQnVm KTsKLSsgICAgICAgIFBSX0ZyZWUobXNnQnVmKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwotKyAg ICB9Ci0rCi0rICAgIC8qIDAgZm9yIGNlcnRpZmljYXRlVXNhZ2UgaW4gY2FsbCB0byBDRVJUX1Zl cmlmeUNlcnRpZmljYXRlTm93IHdpbGwKLSsgICAgICogcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFs aWQgdXNhZ2UgaW50byBjdXJyVXNhZ2UKLSsgICAgICovCi0rICAgIHJ2ID0gQ0VSVF9WZXJpZnlD ZXJ0aWZpY2F0ZU5vdyhDRVJUX0dldERlZmF1bHRDZXJ0REIoKSwgY2VydCwKLSsgICAgICAgIGNo ZWNrU2lnLCBjZXJ0aWZpY2F0ZVVzYWdlLCBOVUxMLCAmY3VyclVzYWdlKTsKLSsKLSsgICAgaWYg KHJ2ICE9IFNFQ1N1Y2Nlc3MpIHsKLSsgICAgICAgIEpTU190aHJvd01zZ1ByRXJyKGVudiwgQ0VS VElGSUNBVEVfRVhDRVBUSU9OLCAiSW52YWxpZCBjZXJ0aWZpY2F0ZSIpOwotKyAgICAgICAgZ290 byBmaW5pc2g7Ci0rICAgIH0KLSsKLSsgICAgaWYgKChjZXJ0aWZpY2F0ZVVzYWdlID09IDB4MDAw MCkgJiYKLSsgICAgICAgIChjdXJyVXNhZ2UgPT0KLSsgICAgICAgICAgICAoIGNlcnRVc2FnZVVz ZXJDZXJ0SW1wb3J0IHwKLSsgICAgICAgICAgICBjZXJ0VXNhZ2VWZXJpZnlDQSB8Ci0rICAgICAg ICAgICAgY2VydFVzYWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVyIHwKLSsgICAgICAgICAgICBjZXJ0 VXNhZ2VBbnlDQSApKSkgewotKwotKyAgICAgICAgLyogVGhlIGNlcnRpZmljYXRlIGlzIGdvb2Qg Zm9yIG5vdGhpbmcuCi0rICAgICAgICAgKiBUaGUgZm9sbG93aW5nIHVzYWdlcyBjYW5ub3QgYmUg dmVyaWZpZWQ6Ci0rICAgICAgICAgKiAgIGNlcnRVc2FnZUFueUNBCi0rICAgICAgICAgKiAgIGNl cnRVc2FnZVByb3RlY3RlZE9iamVjdFNpZ25lcgotKyAgICAgICAgICogICBjZXJ0VXNhZ2VVc2Vy Q2VydEltcG9ydAotKyAgICAgICAgICogICBjZXJ0VXNhZ2VWZXJpZnlDQQotKyAgICAgICAgICog ICAoMHgwYjgwKQotKyAgICAgICAgICovCi0rCi0rICAgICAgICBKU1NfdGhyb3dNc2dQckVycihl bnYsIENFUlRJRklDQVRFX0VYQ0VQVElPTiwgIlVudXNhYmxlIGNlcnRpZmljYXRlIik7Ci0rICAg ICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotK2ZpbmlzaDoKLSsgICAgaWYgKG5pY2tuYW1l ICE9IE5VTEwpIHsKLSsgICAgICAgICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwg bmlja1N0cmluZywgbmlja25hbWUpOwotKyAgICB9Ci0rICAgIGlmIChjZXJ0ICE9IE5VTEwpIHsK LSsgICAgICAgIENFUlRfRGVzdHJveUNlcnRpZmljYXRlKGNlcnQpOwotICAgICB9Ci0gfQotIAot ZGlmZiAtLWdpdCBhL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL2pz c19leGNlcHRpb25zLmggYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRp bC9qc3NfZXhjZXB0aW9ucy5oCi1pbmRleCA0ODg0OTI4MzA2MjIzZmYwNjk5YTIyZTdkYTMzZTNk MTNhOTA0ZDM5Li5hY2QzMjlhNGVjZDM1OTJlYmUxZDcyYzdiZGFjNDM1ZDg0ZGNhZTk5IDEwMDY0 NAotLS0tIGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvanNzX2V4 Y2VwdGlvbnMuaAotKysrIGIvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0 aWwvanNzX2V4Y2VwdGlvbnMuaAotQEAgLTc5LDYgKzc5LDggQEAgUFJfQkVHSU5fRVhURVJOX0MK LSAKLSAjZGVmaW5lIElOVEVSUlVQVEVEX0lPX0VYQ0VQVElPTiAiamF2YS9pby9JbnRlcnJ1cHRl ZElPRXhjZXB0aW9uIgotIAotKyNkZWZpbmUgSU5WQUxJRF9OSUNLTkFNRV9FWENFUFRJT04gIm9y Zy9tb3ppbGxhL2pzcy91dGlsL0ludmFsaWROaWNrbmFtZUV4Y2VwdGlvbiIKLSsKLSAjZGVmaW5l IElOVkFMSURfS0VZX0ZPUk1BVF9FWENFUFRJT04gIm9yZy9tb3ppbGxhL2pzcy9jcnlwdG8vSW52 YWxpZEtleUZvcm1hdEV4Y2VwdGlvbiIKLSAKLSAjZGVmaW5lIElOVkFMSURfUEFSQU1FVEVSX0VY Q0VQVElPTiAiamF2YS9zZWN1cml0eS9JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uIgotLS0gCi0y LjUuMAotCgpkaWZmIC0tZ2l0IGEvanNzLVZlcmlmeUNlcnRpZmljYXRlLnBhdGNoIGIvanNzLVZl cmlmeUNlcnRpZmljYXRlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE3 Yjc3Li4wMDAwMDAwCi0tLSBhL2pzcy1WZXJpZnlDZXJ0aWZpY2F0ZS5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDIyMCArMCwwIEBACi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3MvbGliL2pzcy5kZWYuZml4IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIv anNzLmRlZgotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZi5m aXgJMjAxMC0xMC0yMCAwOTo1MzoxMC4yODg5MzUwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96 aWxsYS9zZWN1cml0eS9qc3MvbGliL2pzcy5kZWYJMjAxMC0xMC0yOSAxMDoyOTo0OC42NjQyMTIw MDAgLTA3MDAKLUBAIC0zMzEsNiArMzMxLDcgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczEx X1BLMTFLZXlQYWlyRwotIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5UGFpckdl bmVyYXRvcl9nZW5lcmF0ZURTQUtleVBhaXJXaXRoT3BGbGFnczsKLSBKYXZhX29yZ19tb3ppbGxh X2pzc19DcnlwdG9NYW5hZ2VyX09DU1BDYWNoZVNldHRpbmdzTmF0aXZlOwotIEphdmFfb3JnX21v emlsbGFfanNzX0NyeXB0b01hbmFnZXJfc2V0T0NTUFRpbWVvdXROYXRpdmU7Ci0rSmF2YV9vcmdf bW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZTsKLSA7 KyAgICBsb2NhbDoKLSA7KyAgICAgICAqOwotIDsrfTsKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhLmZpeCBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFn ZXIuamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvQ3J5cHRvTWFuYWdlci5qYXZhLmZpeAkyMDEwLTEwLTI4IDE2OjQ0OjQ2LjM2NjA4MjAwMCAt MDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv Q3J5cHRvTWFuYWdlci5qYXZhCTIwMTAtMTAtMzEgMTc6MzA6MjUuNTAyNjcwMDAwIC0wNzAwCi1A QCAtNjEsNiArNjEsNyBAQCBpbXBvcnQgb3JnLm1vemlsbGEuanNzLnByb3ZpZGVyLmphdmEuc2Vj Ci0gcHVibGljIGZpbmFsIGNsYXNzIENyeXB0b01hbmFnZXIgaW1wbGVtZW50cyBUb2tlblN1cHBs aWVyCi0gewotICAgICAvKioKLSsgICAgICogbm90ZTogdGhpcyBpcyBvYnNvbGV0ZSBpbiBOU1MK LSAgICAgICogQ2VydFVzYWdlIG9wdGlvbnMgZm9yIHZhbGlkYXRpb24KLSAgICAgICovCi0gICAg IHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgQ2VydFVzYWdlIHsKLUBAIC04Niw4ICs4Nyw2IEBA IHB1YmxpYyBmaW5hbCBjbGFzcyBDcnlwdG9NYW5hZ2VyIGltcGxlbWUKLSAgICAgICAgICAgICBy ZXR1cm4gbmFtZTsKLSAgICAgICAgIH0KLSAKLS0KLS0KLSAgICAgICAgIC8vIGNlcnRVc2FnZSwg dGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBuc3MvbGliL2NlcnRkYi9jZXJ0dC5oCi0g ICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENlcnRVc2FnZSBTU0xDbGllbnQgPSBuZXcgQ2Vy dFVzYWdlKDAsICJTU0xDbGllbnQiKTsKLSAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ2Vy dFVzYWdlIFNTTFNlcnZlciA9IG5ldyBDZXJ0VXNhZ2UoMSwgIlNTTFNlcnZlciIpOwotQEAgLTEw Myw2ICsxMDIsNjMgQEAgcHVibGljIGZpbmFsIGNsYXNzIENyeXB0b01hbmFnZXIgaW1wbGVtZQot ICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDZXJ0VXNhZ2UgQW55Q0EgPSBuZXcgQ2VydFVz YWdlKDExLCAiQW55Q0EiKTsKLSAgICAgfQotIAotKyAgICAvKioKLSsgICAgICogQ2VydGlmaWNh dGVVc2FnZSBvcHRpb25zIGZvciB2YWxpZGF0aW9uCi0rICAgICAqLwotKyAgICBwdWJsaWMgZmlu YWwgc3RhdGljIGNsYXNzIENlcnRpZmljYXRlVXNhZ2UgewotKyAgICAgICAgcHJpdmF0ZSBpbnQg dXNhZ2U7Ci0rICAgICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotKwotKyAgICAgICAgLy8gY2Vy dGlmaWNhdGVVc2FnZSwgdGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBuc3MvbGliL2Nl cnRkYi9jZXJ0dC5oCi0rICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY2VydGlmaWNh dGVVc2FnZUNoZWNrQWxsVXNhZ2VzID0gMHgwMDAwOwotKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgaW50IGNlcnRpZmljYXRlVXNhZ2VTU0xDbGllbnQgPSAweDAwMDE7Ci0rICAgICAgICBw cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY2VydGlmaWNhdGVVc2FnZVNTTFNlcnZlciA9IDB4MDAw MjsKLSsgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBjZXJ0aWZpY2F0ZVVzYWdlU1NM U2VydmVyV2l0aFN0ZXBVcCA9IDB4MDAwNDsKLSsgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IGludCBjZXJ0aWZpY2F0ZVVzYWdlU1NMQ0EgPSAweDAwMDg7Ci0rICAgICAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBpbnQgY2VydGlmaWNhdGVVc2FnZUVtYWlsU2lnbmVyID0gMHgwMDEwOwotKyAg ICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGNlcnRpZmljYXRlVXNhZ2VFbWFpbFJlY2lw aWVudCA9IDB4MDAyMDsKLSsgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBjZXJ0aWZp Y2F0ZVVzYWdlT2JqZWN0U2lnbmVyID0gMHgwMDQwOwotKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgaW50IGNlcnRpZmljYXRlVXNhZ2VVc2VyQ2VydEltcG9ydCA9IDB4MDA4MDsKLSsgICAg ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBjZXJ0aWZpY2F0ZVVzYWdlVmVyaWZ5Q0EgPSAw eDAxMDA7Ci0rICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY2VydGlmaWNhdGVVc2Fn ZVByb3RlY3RlZE9iamVjdFNpZ25lciA9IDB4MDIwMDsKLSsgICAgICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIGludCBjZXJ0aWZpY2F0ZVVzYWdlU3RhdHVzUmVzcG9uZGVyID0gMHgwNDAwOwotKyAg ICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGNlcnRpZmljYXRlVXNhZ2VBbnlDQSA9IDB4 MDgwMDsKLSsKLSsgICAgICAgIHN0YXRpYyBwcml2YXRlIEFycmF5TGlzdCBsaXN0ID0gbmV3IEFy cmF5TGlzdCgpOwotKyAgICAgICAgcHJpdmF0ZSBDZXJ0aWZpY2F0ZVVzYWdlKCkge307Ci0rICAg ICAgICBwcml2YXRlIENlcnRpZmljYXRlVXNhZ2UoaW50IHVzYWdlLCBTdHJpbmcgbmFtZSkgewot KyAgICAgICAgICAgIHRoaXMudXNhZ2UgPSB1c2FnZTsKLSsgICAgICAgICAgICB0aGlzLm5hbWUg PSAgbmFtZTsKLSsgICAgICAgICAgICB0aGlzLmxpc3QuYWRkKHRoaXMpOwotKwotKyAgICAgICAg fQotKyAgICAgICAgcHVibGljIGludCBnZXRVc2FnZSgpIHsKLSsgICAgICAgICAgICByZXR1cm4g dXNhZ2U7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBzdGF0aWMgcHVibGljIEl0ZXJhdG9yIGdl dENlcnRpZmljYXRlVXNhZ2VzKCkgewotKyAgICAgICAgICAgIHJldHVybiBsaXN0Lml0ZXJhdG9y KCk7Ci0rCi0rICAgICAgICB9Ci0rICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewot KyAgICAgICAgICAgIHJldHVybiBuYW1lOwotKyAgICAgICAgfQotKwotKyAgICAgICAgcHVibGlj IHN0YXRpYyBmaW5hbCBDZXJ0aWZpY2F0ZVVzYWdlIENoZWNrQWxsVXNhZ2VzID0gbmV3IENlcnRp ZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVVc2FnZUNoZWNrQWxsVXNhZ2VzLCAiQ2hlY2tBbGxVc2Fn ZXMiKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ2VydGlmaWNhdGVVc2FnZSBTU0xD bGllbnQgPSBuZXcgQ2VydGlmaWNhdGVVc2FnZShjZXJ0aWZpY2F0ZVVzYWdlU1NMQ2xpZW50LCAi U1NMQ2xpZW50Iik7Ci0rICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENlcnRpZmljYXRlVXNh Z2UgU1NMU2VydmVyID0gbmV3IENlcnRpZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVVc2FnZVNTTFNl cnZlciwgIlNTTFNlcnZlciIpOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDZXJ0aWZp Y2F0ZVVzYWdlIFNTTFNlcnZlcldpdGhTdGVwVXAgPSBuZXcgQ2VydGlmaWNhdGVVc2FnZShjZXJ0 aWZpY2F0ZVVzYWdlU1NMU2VydmVyV2l0aFN0ZXBVcCwgIlNTTFNlcnZlcldpdGhTdGVwVXAiKTsK LSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ2VydGlmaWNhdGVVc2FnZSBTU0xDQSA9IG5l dyBDZXJ0aWZpY2F0ZVVzYWdlKGNlcnRpZmljYXRlVXNhZ2VTU0xDQSwgIlNTTENBIik7Ci0rICAg ICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENlcnRpZmljYXRlVXNhZ2UgRW1haWxTaWduZXIgPSBu ZXcgQ2VydGlmaWNhdGVVc2FnZShjZXJ0aWZpY2F0ZVVzYWdlRW1haWxTaWduZXIsICJFbWFpbFNp Z25lciIpOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDZXJ0aWZpY2F0ZVVzYWdlIEVt YWlsUmVjaXBpZW50ID0gbmV3IENlcnRpZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVVc2FnZUVtYWls UmVjaXBpZW50LCAiRW1haWxSZWNpcGllbnQiKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgQ2VydGlmaWNhdGVVc2FnZSBPYmplY3RTaWduZXIgPSBuZXcgQ2VydGlmaWNhdGVVc2FnZShj ZXJ0aWZpY2F0ZVVzYWdlT2JqZWN0U2lnbmVyLCAiT2JqZWN0U2lnbmVyIik7Ci0rICAgICAgICBw dWJsaWMgc3RhdGljIGZpbmFsIENlcnRpZmljYXRlVXNhZ2UgVXNlckNlcnRJbXBvcnQgPSBuZXcg Q2VydGlmaWNhdGVVc2FnZShjZXJ0aWZpY2F0ZVVzYWdlVXNlckNlcnRJbXBvcnQsICJVc2VyQ2Vy dEltcG9ydCIpOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDZXJ0aWZpY2F0ZVVzYWdl IFZlcmlmeUNBID0gbmV3IENlcnRpZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVVc2FnZVZlcmlmeUNB LCAiVmVyaWZ5Q0EiKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ2VydGlmaWNhdGVV c2FnZSBQcm90ZWN0ZWRPYmplY3RTaWduZXIgPSBuZXcgQ2VydGlmaWNhdGVVc2FnZShjZXJ0aWZp Y2F0ZVVzYWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVyLCAiUHJvdGVjdGVkT2JqZWN0U2lnbmVyIik7 Ci0rICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENlcnRpZmljYXRlVXNhZ2UgU3RhdHVzUmVz cG9uZGVyID0gbmV3IENlcnRpZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVVc2FnZVN0YXR1c1Jlc3Bv bmRlciwgIlN0YXR1c1Jlc3BvbmRlciIpOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBD ZXJ0aWZpY2F0ZVVzYWdlIEFueUNBID0gbmV3IENlcnRpZmljYXRlVXNhZ2UoY2VydGlmaWNhdGVV c2FnZUFueUNBLCAiQW55Q0EiKTsKLSsgICAgfQotKwotICAgICBwdWJsaWMgZmluYWwgc3RhdGlj IGNsYXNzIE5vdEluaXRpYWxpemVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9Ci0gICAg IHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgTmlja25hbWVDb25mbGljdEV4Y2VwdGlvbiBleHRl bmRzIEV4Y2VwdGlvbiB7fQotICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFVzZXJDZXJ0 Q29uZmxpY3RFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KLUBAIC0xMzg2LDYgKzE0NDIs NyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBsZW1lCi0gICAgICAgICB9 Ci0gICAgICAgICByZXR1cm4gdG9rOwotICAgICB9Ci0rCi0gICAgIC8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgLy8gaXND ZXJ0VmFsaWQKLSAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLwotQEAgLTEzOTUsNiArMTQ1MiwzOSBAQCBwdWJsaWMgZmluYWwg Y2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBsZW1lCi0gICAgICAqIGFnYWluc3QgTm93LgotICAgICAg KiBAcGFyYW0gbmlja25hbWUgVGhlIG5pY2tuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byB2ZXJp ZnkuCi0gICAgICAqIEBwYXJhbSBjaGVja1NpZyB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiB0aGUg Y2VydGlmaWNhdGUKLSsgICAgICogQHBhcmFtIGNlcnRpZmljYXRlVXNhZ2Ugc2VlIGV4cG9zZWQg Y2VydGlmaWNhdGVVc2FnZSBkZWZpbmVzIHRvIHZlcmlmeSBDZXJ0aWZpY2F0ZTsgbnVsbCB3aWxs IGJ5cGFzcyB1c2FnZSBjaGVjawotKyAgICAgKiBAcmV0dXJuIHRydWUgZm9yIHN1Y2Nlc3M7IGZh bHNlIG90aGVyd2lzZQotKyAgICAgKgotKyAgICAgKiBAZXhjZXB0aW9uIEludmFsaWROaWNrbmFt ZUV4Y2VwdGlvbiBJZiB0aGUgbmlja25hbWUgaXMgbnVsbAotKyAgICAgKiBAZXhjZXB0aW9uIE9i amVjdE5vdEZvdW5kRXhjZXB0aW9uIElmIG5vIGNlcnRpZmljYXRlIGNvdWxkIGJlIGZvdW5kCi0r ICAgICAqICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmlja25hbWUuCi0rICAgICAqLwotKwotKyAgICBw dWJsaWMgYm9vbGVhbiBpc0NlcnRWYWxpZChTdHJpbmcgbmlja25hbWUsIGJvb2xlYW4gY2hlY2tT aWcsCi0rICAgICAgICAgICAgQ2VydGlmaWNhdGVVc2FnZSBjZXJ0aWZpY2F0ZVVzYWdlKQotKyAg ICAgICAgdGhyb3dzIE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uLCBJbnZhbGlkTmlja25hbWVFeGNl cHRpb24KLSsgICAgewotKyAgICAgICAgaWYgKG5pY2tuYW1lPT1udWxsKSB7Ci0rICAgICAgICAg ICAgdGhyb3cgbmV3IEludmFsaWROaWNrbmFtZUV4Y2VwdGlvbigiTmlja25hbWUgbXVzdCBiZSBu b24tbnVsbCIpOwotKyAgICAgICAgfQotKyAgICAgICAgLy8gMCBjZXJ0aWZpY2F0ZSB1c2FnZSB3 YXMgc3VwcG9zZWQgdG8gZ2V0IGN1cnJlbnQgdXNhZ2UsIGhvd2V2ZXIsCi0rICAgICAgICAvLyBp dCBpcyBub3QgZXhwb3NlZCBhdCB0aGlzIHBvaW50Ci0rICAgICAgICByZXR1cm4gdmVyaWZ5Q2Vy dGlmaWNhdGVOb3dOYXRpdmUobmlja25hbWUsCi0rICAgICAgICAgICAgICBjaGVja1NpZywKLSsg ICAgICAgICAgICAgIChjZXJ0aWZpY2F0ZVVzYWdlID09IG51bGwpID8gMDpjZXJ0aWZpY2F0ZVVz YWdlLmdldFVzYWdlKCkpOwotKyAgICB9Ci0rCi0rICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4g dmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUoU3RyaW5nIG5pY2tuYW1lLAotKyAgICAgICAgYm9v bGVhbiBjaGVja1NpZywgaW50IGNlcnRpZmljYXRlVXNhZ2UpIHRocm93cyBPYmplY3ROb3RGb3Vu ZEV4Y2VwdGlvbjsKLSsKLSsgICAgLyoqCi0rICAgICAqIG5vdGU6IHRoaXMgbWV0aG9kIGNhbGxz IG9ic29sZXRlIGZ1bmN0aW9uIGluIE5TUwotKyAgICAgKgotKyAgICAgKiBWZXJpZnkgYSBjZXJ0 aWZpY2F0ZSB0aGF0IGV4aXN0cyBpbiB0aGUgZ2l2ZW4gY2VydCBkYXRhYmFzZSwKLSsgICAgICog Y2hlY2sgaWYgaXMgdmFsaWQgYW5kIHRoYXQgd2UgdHJ1c3QgdGhlIGlzc3Vlci4gVmVyaWZ5IHRp bWUKLSsgICAgICogYWdhaW5zdCBOb3cuCi0rICAgICAqIEBwYXJhbSBuaWNrbmFtZSBUaGUgbmlj a25hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHZlcmlmeS4KLSsgICAgICogQHBhcmFtIGNoZWNr U2lnIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjZXJ0aWZpY2F0ZQotICAgICAgKiBAcGFy YW0gY2VydFVzYWdlIHNlZSBleHBvc2VkIGNlcnRVc2FnZSBkZWZpbmVzIHRvIHZlcmlmeSBDZXJ0 aWZpY2F0ZQotICAgICAgKiBAcmV0dXJuIHRydWUgZm9yIHN1Y2Nlc3M7IGZhbHNlIG90aGVyd2lz ZQotICAgICAgKgotQEAgLTE0MTMsNiArMTUwMyw5IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDcnlw dG9NYW5hZ2VyIGltcGxlbWUKLSAgICAgICAgIHJldHVybiB2ZXJpZnlDZXJ0Tm93TmF0aXZlKG5p Y2tuYW1lLCBjaGVja1NpZywgY2VydFVzYWdlLmdldFVzYWdlKCkpOwotICAgICB9Ci0gCi0rICAg IC8qCi0rICAgICAqIE9ic29sZXRlIGluIE5TUwotKyAgICAgKi8KLSAgICAgcHJpdmF0ZSBuYXRp dmUgYm9vbGVhbiB2ZXJpZnlDZXJ0Tm93TmF0aXZlKFN0cmluZyBuaWNrbmFtZSwKLSAgICAgICAg IGJvb2xlYW4gY2hlY2tTaWcsIGludCBjVXNhZ2UpIHRocm93cyBPYmplY3ROb3RGb3VuZEV4Y2Vw dGlvbjsKLSAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvUEsxMUZpbmRlci5jLmZpeCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL1BLMTFGaW5kZXIuYwotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jLmZpeAkyMDEwLTEwLTI4IDE2OjQ1 OjQ2LjUwMTg5OTAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCTIwMTAtMTAtMzEgMTc6MjU6NTMuNTc1NDgyMDAw IC0wNzAwCi1AQCAtMTU3NSwxMSArMTU3NSw2MiBAQCBmaW5pc2g6Ci0gfQotIAotIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgotLSAqIENyeXB0b01hbmFnZXIudmVyaWZ5Q2VydE5vd05hdGl2ZQotKyAqIENyeXB0 b01hbmFnZXIudmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUKLSAgKgotICAqIFJldHVybnMgSk5J X1RSVUUgaWYgc3VjY2VzcywgSk5JX0ZBTFNFIG90aGVyd2lzZQotICAqLwotIEpOSUVYUE9SVCBq Ym9vbGVhbiBKTklDQUxMCi0rSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJp ZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZShKTklFbnYgKmVudiwKLSsgICAgICAgIGpvYmplY3Qgc2Vs ZiwganN0cmluZyBuaWNrU3RyaW5nLCBqYm9vbGVhbiBjaGVja1NpZywgamludCByZXF1aXJlZF9j ZXJ0aWZpY2F0ZVVzYWdlKQotK3sKLSsgICAgU0VDU3RhdHVzICAgICAgICAgcnYgICAgPSBTRUNG YWlsdXJlOwotKyAgICBTRUNDZXJ0aWZpY2F0ZVVzYWdlICAgICAgY2VydGlmaWNhdGVVc2FnZTsK LSsgICAgU0VDQ2VydGlmaWNhdGVVc2FnZSAgICAgIGN1cnJVc2FnZTsgIC8qIHVuZXhwb3NlZCBm b3Igbm93ICovCi0rICAgIENFUlRDZXJ0aWZpY2F0ZSAgICpjZXJ0PU5VTEw7Ci0rICAgIGNoYXIg Km5pY2tuYW1lPU5VTEw7Ci0rCi0rICAgIG5pY2tuYW1lID0gKGNoYXIgKikgKCplbnYpLT5HZXRT dHJpbmdVVEZDaGFycyhlbnYsIG5pY2tTdHJpbmcsIE5VTEwpOwotKyAgICBpZiggbmlja25hbWUg PT0gTlVMTCApIHsKLSsgICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICBjZXJ0 aWZpY2F0ZVVzYWdlID0gcmVxdWlyZWRfY2VydGlmaWNhdGVVc2FnZTsKLSsKLSsgICAgY2VydCA9 IENFUlRfRmluZENlcnRCeU5pY2tuYW1lKENFUlRfR2V0RGVmYXVsdENlcnREQigpLCBuaWNrbmFt ZSk7Ci0rCi0rICAgIGlmIChjZXJ0ID09IE5VTEwpIHsKLSsgICAgICAgIEpTU190aHJvdyhlbnYs IE9CSkVDVF9OT1RfRk9VTkRfRVhDRVBUSU9OKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwotKyAg ICB9IGVsc2UgewotKyAgICAvKiAwIGZvciBjZXJ0aWZpY2F0ZVVzYWdlIGluIGNhbGwgdG8gQ0VS VF9WZXJpZnlDZXJ0aWZpY2F0ZU5vdyB0bwotKyAgICAgKiBqdXN0IGdldCB0aGUgY3VycmVudCB1 c2FnZSAod2hpY2ggd2UgYXJlIG5vdCBwYXNzaW5nIGJhY2sgZm9yIG5vdwotKyAgICAgKiBidXQg d2lsbCBieXBhc3MgdGhlIGNlcnRpZmljYXRlIHVzYWdlIGNoZWNrCi0rICAgICAqLwotKyAgICAg ICAgcnYgPSBDRVJUX1ZlcmlmeUNlcnRpZmljYXRlTm93KENFUlRfR2V0RGVmYXVsdENlcnREQigp LCBjZXJ0LAotKyAgICAgICAgICAgIGNoZWNrU2lnLCBjZXJ0aWZpY2F0ZVVzYWdlLCBOVUxMLCAm Y3VyclVzYWdlICk7Ci0rICAgIH0KLSsKLStmaW5pc2g6Ci0rICAgIGlmKG5pY2tuYW1lICE9IE5V TEwpIHsKLSsgICAgICAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIG5pY2tTdHJp bmcsIG5pY2tuYW1lKTsKLSsgICAgfQotKyAgICBpZihjZXJ0ICE9IE5VTEwpIHsKLSsgICAgICAg Q0VSVF9EZXN0cm95Q2VydGlmaWNhdGUoY2VydCk7Ci0rICAgIH0KLSsgICAgaWYoIHJ2ID09IFNF Q1N1Y2Nlc3MpIHsKLSsgICAgICAgIHJldHVybiBKTklfVFJVRTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICAgIHJldHVybiBKTklfRkFMU0U7Ci0rICAgIH0KLSt9Ci0rCi0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0rICogQ3J5cHRvTWFuYWdlci52ZXJpZnlDZXJ0Tm93TmF0aXZlCi0rICogbm90ZTogdGhp cyBjYWxscyBvYnNvbGV0ZSBOU1MgZnVuY3Rpb24KLSsgKiBSZXR1cm5zIEpOSV9UUlVFIGlmIHN1 Y2Nlc3MsIEpOSV9GQUxTRSBvdGhlcndpc2UKLSsgKi8KLStKTklFWFBPUlQgamJvb2xlYW4gSk5J Q0FMTAotIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJfdmVyaWZ5Q2VydE5vd05h dGl2ZShKTklFbnYgKmVudiwKLSAgICAgICAgIGpvYmplY3Qgc2VsZiwganN0cmluZyBuaWNrU3Ry aW5nLCBqYm9vbGVhbiBjaGVja1NpZywgamludCBjVXNhZ2UpCi0gewoKZGlmZiAtLWdpdCBhL2pz cy1WZXJpZnlDZXJ0aWZpY2F0ZVJldHVybkNVLnBhdGNoIGIvanNzLVZlcmlmeUNlcnRpZmljYXRl UmV0dXJuQ1UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMjIwZWYuLjAw MDAwMDAKLS0tIGEvanNzLVZlcmlmeUNlcnRpZmljYXRlUmV0dXJuQ1UucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwyMjcgKzAsMCBAQAotZGlmZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL2xpYi9qc3MuZGVmLmZpeCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGli L2pzcy5kZWYKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGliL2pzcy5kZWYu Zml4CTIwMTAtMTItMjEgMTI6MzU6MDQuMzYwMDQ0MDAwIC0wODAwCi0rKysganNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL2xpYi9qc3MuZGVmCTIwMTAtMTItMjEgMTI6MzY6MDUuMzY0MTA1 MDAwIC0wODAwCi1AQCAtMzMyLDYgKzMzMiw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3Mx MV9QSzExS2V5UGFpckcKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX09DU1BD YWNoZVNldHRpbmdzTmF0aXZlOwotIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJf c2V0T0NTUFRpbWVvdXROYXRpdmU7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdl cl92ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZTsKLStKYXZhX29yZ19tb3ppbGxhX2pzc19Dcnlw dG9NYW5hZ2VyX3ZlcmlmeUNlcnRpZmljYXRlTm93Q1VOYXRpdmU7Ci0gOysgICAgbG9jYWw6Ci0g OysgICAgICAgKjsKLSA7K307Ci1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YS5maXgganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEKLS0tLSBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFn ZXIuamF2YS5maXgJMjAxMC0xMi0yMSAxMjozNjoyNC40MTcxMjQwMDAgLTA4MDAKLSsrKyBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIu amF2YQkyMDEwLTEyLTIxIDEyOjQzOjU0Ljc3NzU3NTAwMCAtMDgwMAotQEAgLTE1Nyw2ICsxNTcs MTkgQEAgcHVibGljIGZpbmFsIGNsYXNzIENyeXB0b01hbmFnZXIgaW1wbGVtZQotICAgICAgICAg cHVibGljIHN0YXRpYyBmaW5hbCBDZXJ0aWZpY2F0ZVVzYWdlIFByb3RlY3RlZE9iamVjdFNpZ25l ciA9IG5ldyBDZXJ0aWZpY2F0ZVVzYWdlKGNlcnRpZmljYXRlVXNhZ2VQcm90ZWN0ZWRPYmplY3RT aWduZXIsICJQcm90ZWN0ZWRPYmplY3RTaWduZXIiKTsKLSAgICAgICAgIHB1YmxpYyBzdGF0aWMg ZmluYWwgQ2VydGlmaWNhdGVVc2FnZSBTdGF0dXNSZXNwb25kZXIgPSBuZXcgQ2VydGlmaWNhdGVV c2FnZShjZXJ0aWZpY2F0ZVVzYWdlU3RhdHVzUmVzcG9uZGVyLCAiU3RhdHVzUmVzcG9uZGVyIik7 Ci0gICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENlcnRpZmljYXRlVXNhZ2UgQW55Q0EgPSBu ZXcgQ2VydGlmaWNhdGVVc2FnZShjZXJ0aWZpY2F0ZVVzYWdlQW55Q0EsICJBbnlDQSIpOwotKwot KyAgICAgICAgLyoKLSsgICAgICAgICAgICAgICAgIFRoZSBmb2xsbG93aW5nIHVzYWdlcyBjYW5u b3QgYmUgdmVyaWZpZWQ6Ci0rICAgICAgICAgICAgICAgICAgIGNlcnRVc2FnZUFueUNBCi0rICAg ICAgICAgICAgICAgICAgIGNlcnRVc2FnZVByb3RlY3RlZE9iamVjdFNpZ25lcgotKyAgICAgICAg ICAgICAgICAgICBjZXJ0VXNhZ2VVc2VyQ2VydEltcG9ydAotKyAgICAgICAgICAgICAgICAgICBj ZXJ0VXNhZ2VWZXJpZnlDQQotKyAgICAgICAgKi8KLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgaW50IGJhc2ljQ2VydGlmaWNhdGVVc2FnZXMgPSAvKjB4MGI4MDsqLwotKyAgICAgICAgICAg ICAgICBjZXJ0aWZpY2F0ZVVzYWdlVXNlckNlcnRJbXBvcnQgfAotKyAgICAgICAgICAgICAgICBj ZXJ0aWZpY2F0ZVVzYWdlVmVyaWZ5Q0EgfAotKyAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZVVz YWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVyIHwKLSsgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVV c2FnZUFueUNBIDsKLSAgICAgfQotIAotICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIE5v dEluaXRpYWxpemVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9Ci1AQCAtMTQ1MiwxNCAr MTQ2NSw0MyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBsZW1lCi0gICAg ICAqIGFnYWluc3QgTm93LgotICAgICAgKiBAcGFyYW0gbmlja25hbWUgVGhlIG5pY2tuYW1lIG9m IHRoZSBjZXJ0aWZpY2F0ZSB0byB2ZXJpZnkuCi0gICAgICAqIEBwYXJhbSBjaGVja1NpZyB2ZXJp ZnkgdGhlIHNpZ25hdHVyZSBvZiB0aGUgY2VydGlmaWNhdGUKLS0gICAgICogQHBhcmFtIGNlcnRp ZmljYXRlVXNhZ2Ugc2VlIGV4cG9zZWQgY2VydGlmaWNhdGVVc2FnZSBkZWZpbmVzIHRvIHZlcmlm eSBDZXJ0aWZpY2F0ZTsgbnVsbCB3aWxsIGJ5cGFzcyB1c2FnZSBjaGVjawotLSAgICAgKiBAcmV0 dXJuIHRydWUgZm9yIHN1Y2Nlc3M7IGZhbHNlIG90aGVyd2lzZQotKyAgICAgKiBAcmV0dXJuIGN1 cnJDZXJ0aWZpY2F0ZVVzYWdlIHdoaWNoIGNvbnRhaW5zIGN1cnJlbnQgdXNhZ2UgYml0IG1hcCBh cyBkZWZpbmVkIGluIENlcnRpZmljYXRlVXNhZ2UKLSAgICAgICoKLSAgICAgICogQGV4Y2VwdGlv biBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24gSWYgdGhlIG5pY2tuYW1lIGlzIG51bGwKLSAgICAg ICogQGV4Y2VwdGlvbiBPYmplY3ROb3RGb3VuZEV4Y2VwdGlvbiBJZiBubyBjZXJ0aWZpY2F0ZSBj b3VsZCBiZSBmb3VuZAotICAgICAgKiAgICAgIHdpdGggdGhlIGdpdmVuIG5pY2tuYW1lLgotICAg ICAgKi8KLSsgICAgcHVibGljIGludCBpc0NlcnRWYWxpZChTdHJpbmcgbmlja25hbWUsIGJvb2xl YW4gY2hlY2tTaWcpCi0rICAgICAgICB0aHJvd3MgT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24sIElu dmFsaWROaWNrbmFtZUV4Y2VwdGlvbgotKyAgICB7Ci0rICAgICAgICBpZiAobmlja25hbWU9PW51 bGwpIHsKLSsgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE5pY2tuYW1lRXhjZXB0aW9uKCJO aWNrbmFtZSBtdXN0IGJlIG5vbi1udWxsIik7Ci0rICAgICAgICB9Ci0rICAgICAgICBpbnQgY3Vy ckNlcnRpZmljYXRlVXNhZ2UgPSAweDAwMDA7IC8vIGluaXRpYWxpemUgaXQgdG8gMAotKyAgICAg ICAgY3VyckNlcnRpZmljYXRlVXNhZ2UgPSB2ZXJpZnlDZXJ0aWZpY2F0ZU5vd0NVTmF0aXZlKG5p Y2tuYW1lLAotKyAgICAgICAgICAgICAgICBjaGVja1NpZyk7Ci0rICAgICAgICByZXR1cm4gY3Vy ckNlcnRpZmljYXRlVXNhZ2U7Ci0rICAgIH0KLSsKLSsgICAgcHJpdmF0ZSBuYXRpdmUgaW50IHZl cmlmeUNlcnRpZmljYXRlTm93Q1VOYXRpdmUoU3RyaW5nIG5pY2tuYW1lLAotKyAgICAgICAgYm9v bGVhbiBjaGVja1NpZykgdGhyb3dzIE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uOwotIAotKyAgICAv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vCi0rICAgIC8vIGlzQ2VydFZhbGlkCi0rICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSsgICAgLyoqCi0rICAgICAqIFZl cmlmeSBhIGNlcnRpZmljYXRlIHRoYXQgZXhpc3RzIGluIHRoZSBnaXZlbiBjZXJ0IGRhdGFiYXNl LAotKyAgICAgKiBjaGVjayBpZiBpcyB2YWxpZCBhbmQgdGhhdCB3ZSB0cnVzdCB0aGUgaXNzdWVy LiBWZXJpZnkgdGltZQotKyAgICAgKiBhZ2FpbnN0IE5vdy4KLSsgICAgICogQHBhcmFtIG5pY2tu YW1lIFRoZSBuaWNrbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUgdG8gdmVyaWZ5LgotKyAgICAgKiBA cGFyYW0gY2hlY2tTaWcgdmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgdGhlIGNlcnRpZmljYXRlCi0r ICAgICAqIEBwYXJhbSBjZXJ0aWZpY2F0ZVVzYWdlIHNlZSBjZXJ0aWZpY2F0ZVVzYWdlIGRlZmlu ZWQgdG8gdmVyaWZ5IENlcnRpZmljYXRlOyB0byByZXRyaWV2ZSBjdXJyZW50IGNlcnRpZmljYXRl IHVzYWdlLCBjYWxsIHRoZSBpc0NlcnRWYWxpZCgpIGFib3ZlCi0rICAgICAqIEByZXR1cm4gdHJ1 ZSBmb3Igc3VjY2VzczsgZmFsc2Ugb3RoZXJ3aXNlCi0rICAgICAqCi0rICAgICAqIEBleGNlcHRp b24gSW52YWxpZE5pY2tuYW1lRXhjZXB0aW9uIElmIHRoZSBuaWNrbmFtZSBpcyBudWxsCi0rICAg ICAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gSWYgbm8gY2VydGlmaWNhdGUg Y291bGQgYmUgZm91bmQKLSsgICAgICogICAgICB3aXRoIHRoZSBnaXZlbiBuaWNrbmFtZS4KLSsg ICAgICovCi0gICAgIHB1YmxpYyBib29sZWFuIGlzQ2VydFZhbGlkKFN0cmluZyBuaWNrbmFtZSwg Ym9vbGVhbiBjaGVja1NpZywKLSAgICAgICAgICAgICBDZXJ0aWZpY2F0ZVVzYWdlIGNlcnRpZmlj YXRlVXNhZ2UpCi0gICAgICAgICB0aHJvd3MgT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24sIEludmFs aWROaWNrbmFtZUV4Y2VwdGlvbgotQEAgLTE0NjcsMTEgKzE1MDksMjMgQEAgcHVibGljIGZpbmFs IGNsYXNzIENyeXB0b01hbmFnZXIgaW1wbGVtZQotICAgICAgICAgaWYgKG5pY2tuYW1lPT1udWxs KSB7Ci0gICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWROaWNrbmFtZUV4Y2VwdGlvbigiTmlj a25hbWUgbXVzdCBiZSBub24tbnVsbCIpOwotICAgICAgICAgfQotLSAgICAgICAgLy8gMCBjZXJ0 aWZpY2F0ZSB1c2FnZSB3YXMgc3VwcG9zZWQgdG8gZ2V0IGN1cnJlbnQgdXNhZ2UsIGhvd2V2ZXIs Ci0tICAgICAgICAvLyBpdCBpcyBub3QgZXhwb3NlZCBhdCB0aGlzIHBvaW50Ci0tICAgICAgICBy ZXR1cm4gdmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUobmlja25hbWUsCi0tICAgICAgICAgICAg ICBjaGVja1NpZywKLS0gICAgICAgICAgICAgIChjZXJ0aWZpY2F0ZVVzYWdlID09IG51bGwpID8g MDpjZXJ0aWZpY2F0ZVVzYWdlLmdldFVzYWdlKCkpOwotKyAgICAgICAgLy8gMCBjZXJ0aWZpY2F0 ZSB1c2FnZSB3aWxsIGdldCBjdXJyZW50IHVzYWdlCi0rICAgICAgICAvLyBzaG91bGQgY2FsbCBp c0NlcnRWYWxpZCgpIGNhbGwgYWJvdmUgdGhhdCByZXR1cm5zIGNlcnRpZmljYXRlIHVzYWdlCi0r ICAgICAgICBpZiAoKGNlcnRpZmljYXRlVXNhZ2UgPT0gbnVsbCkgfHwKLSsgICAgICAgICAgICAg ICAgKGNlcnRpZmljYXRlVXNhZ2UgPT0gQ2VydGlmaWNhdGVVc2FnZS5DaGVja0FsbFVzYWdlcykp ewotKyAgICAgICAgICAgIGludCBjdXJyQ2VydGlmaWNhdGVVc2FnZSA9IDB4MDAwMDsKLSsgICAg ICAgICAgICBjdXJyQ2VydGlmaWNhdGVVc2FnZSA9IHZlcmlmeUNlcnRpZmljYXRlTm93Q1VOYXRp dmUobmlja25hbWUsCi0rICAgICAgICAgICAgICAgIGNoZWNrU2lnKTsKLSsKLSsgICAgICAgICAg ICBpZiAoY3VyckNlcnRpZmljYXRlVXNhZ2UgPT0gQ2VydGlmaWNhdGVVc2FnZS5iYXNpY0NlcnRp ZmljYXRlVXNhZ2VzKXsgCi0rICAgICAgICAgICAgICAgIC8vIGNlcnQgaXMgZ29vZCBmb3Igbm90 aGluZwotKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0rICAgICAgICAgICAgfSBlbHNl Ci0rICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAg ICAgICAgICByZXR1cm4gdmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUobmlja25hbWUsIGNoZWNr U2lnLAotKyAgICAgICAgICAgICAgY2VydGlmaWNhdGVVc2FnZS5nZXRVc2FnZSgpKTsKLSsgICAg ICAgIH0KLSAgICAgfQotIAotICAgICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIHZlcmlmeUNlcnRp ZmljYXRlTm93TmF0aXZlKFN0cmluZyBuaWNrbmFtZSwKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jLmZpeCBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1BLMTFGaW5kZXIuYwotLS0t IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRl ci5jLmZpeAkyMDEwLTEyLTIxIDEyOjM2OjI5LjAyMzEyOTAwMCAtMDgwMAotKysrIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCTIwMTAt MTItMjEgMTY6MDM6MzQuNTk5NzQyMDAwIC0wODAwCi1AQCAtMTU3NCwxOCArMTU3NCwxNiBAQCBm aW5pc2g6Ci0gICAgIH0KLSB9Ci0gCi0rCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICogQ3J5cHRvTWFu YWdlci52ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZQotLSAqCi0tICogUmV0dXJucyBKTklfVFJV RSBpZiBzdWNjZXNzLCBKTklfRkFMU0Ugb3RoZXJ3aXNlCi0rICogQ3J5cHRvTWFuYWdlci52ZXJp ZnlDZXJ0aWZpY2F0ZU5vdwotICAqLwotLUpOSUVYUE9SVCBqYm9vbGVhbiBKTklDQUxMCi0tSmF2 YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2 ZShKTklFbnYgKmVudiwKLS0gICAgICAgIGpvYmplY3Qgc2VsZiwganN0cmluZyBuaWNrU3RyaW5n LCBqYm9vbGVhbiBjaGVja1NpZywgamludCByZXF1aXJlZF9jZXJ0aWZpY2F0ZVVzYWdlKQotK1NF Q1N0YXR1cyB2ZXJpZnlDZXJ0aWZpY2F0ZU5vdyhKTklFbnYgKmVudiwgam9iamVjdCBzZWxmLCBq c3RyaW5nIG5pY2tTdHJpbmcsCi0rICAgICAgICBqYm9vbGVhbiBjaGVja1NpZywgamludCByZXF1 aXJlZF9jZXJ0aWZpY2F0ZVVzYWdlLAotKyAgICAgICAgIFNFQ0NlcnRpZmljYXRlVXNhZ2UgKmN1 cnJVc2FnZSkKLSB7Ci0gICAgIFNFQ1N0YXR1cyAgICAgICAgIHJ2ICAgID0gU0VDRmFpbHVyZTsK LSAgICAgU0VDQ2VydGlmaWNhdGVVc2FnZSAgICAgIGNlcnRpZmljYXRlVXNhZ2U7Ci0tICAgIFNF Q0NlcnRpZmljYXRlVXNhZ2UgICAgICBjdXJyVXNhZ2U7ICAvKiB1bmV4cG9zZWQgZm9yIG5vdyAq LwotICAgICBDRVJUQ2VydGlmaWNhdGUgICAqY2VydD1OVUxMOwotICAgICBjaGFyICpuaWNrbmFt ZT1OVUxMOwotIAotQEAgLTE2MDIsMTIgKzE2MDAsMjggQEAgSmF2YV9vcmdfbW96aWxsYV9qc3Nf Q3J5cHRvTWFuYWdlcl92ZXJpZgotICAgICAgICAgSlNTX3Rocm93KGVudiwgT0JKRUNUX05PVF9G T1VORF9FWENFUFRJT04pOwotICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgIH0gZWxzZSB7Ci0t ICAgIC8qIDAgZm9yIGNlcnRpZmljYXRlVXNhZ2UgaW4gY2FsbCB0byBDRVJUX1ZlcmlmeUNlcnRp ZmljYXRlTm93IHRvCi0tICAgICAqIGp1c3QgZ2V0IHRoZSBjdXJyZW50IHVzYWdlICh3aGljaCB3 ZSBhcmUgbm90IHBhc3NpbmcgYmFjayBmb3Igbm93Ci0tICAgICAqIGJ1dCB3aWxsIGJ5cGFzcyB0 aGUgY2VydGlmaWNhdGUgdXNhZ2UgY2hlY2sKLSsgICAgLyogMCBmb3IgY2VydGlmaWNhdGVVc2Fn ZSBpbiBjYWxsIHRvIENFUlRfVmVyaWZ5Q2VydGlmaWNhdGVOb3cgd2lsbAotKyAgICAgKiByZXRy aWV2ZSB0aGUgY3VycmVudCB2YWxpZCB1c2FnZSBpbnRvIGN1cnJVc2FnZQotICAgICAgKi8KLSAg ICAgICAgIHJ2ID0gQ0VSVF9WZXJpZnlDZXJ0aWZpY2F0ZU5vdyhDRVJUX0dldERlZmF1bHRDZXJ0 REIoKSwgY2VydCwKLS0gICAgICAgICAgICBjaGVja1NpZywgY2VydGlmaWNhdGVVc2FnZSwgTlVM TCwgJmN1cnJVc2FnZSApOwotKyAgICAgICAgICAgIGNoZWNrU2lnLCBjZXJ0aWZpY2F0ZVVzYWdl LCBOVUxMLCBjdXJyVXNhZ2UgKTsKLSsgICAgICAgIGlmICgocnYgPT0gU0VDU3VjY2VzcykgJiYg Y2VydGlmaWNhdGVVc2FnZSA9PSAweDAwMDApIHsKLSsgICAgICAgICAgICBpZiAoKmN1cnJVc2Fn ZSA9PSAKLSsgICAgICAgICAgICAgICAgKCBjZXJ0VXNhZ2VVc2VyQ2VydEltcG9ydCB8Ci0rICAg ICAgICAgICAgICAgIGNlcnRVc2FnZVZlcmlmeUNBIHwKLSsgICAgICAgICAgICAgICAgY2VydFVz YWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVyIHwKLSsgICAgICAgICAgICAgICAgY2VydFVzYWdlQW55 Q0EgKSkgewotKwotKyAgICAgICAgICAgICAgLyogdGhlIGNlcnQgaXMgZ29vZCBmb3Igbm90aGlu ZyAKLSsgICAgICAgICAgICAgICAgIFRoZSBmb2xsbG93aW5nIHVzYWdlcyBjYW5ub3QgYmUgdmVy aWZpZWQ6Ci0rICAgICAgICAgICAgICAgICAgIGNlcnRVc2FnZUFueUNBCi0rICAgICAgICAgICAg ICAgICAgIGNlcnRVc2FnZVByb3RlY3RlZE9iamVjdFNpZ25lcgotKyAgICAgICAgICAgICAgICAg ICBjZXJ0VXNhZ2VVc2VyQ2VydEltcG9ydAotKyAgICAgICAgICAgICAgICAgICBjZXJ0VXNhZ2VW ZXJpZnlDQQotKyAgICAgICAgICAgICAgICAgICAgKDB4MGI4MCkgKi8KLSsgICAgICAgICAgICAg ICAgcnYgPVNFQ0ZhaWx1cmU7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotICAgICB9Ci0g Ci0gZmluaXNoOgotQEAgLTE2MTcsNiArMTYzMSw0OSBAQCBmaW5pc2g6Ci0gICAgIGlmKGNlcnQg IT0gTlVMTCkgewotICAgICAgICBDRVJUX0Rlc3Ryb3lDZXJ0aWZpY2F0ZShjZXJ0KTsKLSAgICAg fQotKwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqIENyeXB0 b01hbmFnZXIudmVyaWZ5Q2VydGlmaWNhdGVOb3dDVU5hdGl2ZQotKyAqCi0rICogUmV0dXJucyBq aW50IHdoaWNoIGNvbnRhaW5zIGJpdHMgaW4gU0VDQ2VydGlmaWNhdGVVc2FnZSB0aGF0IHJlZmxl Y3RzCi0rICogdGhlIGNlcnQgdXNhZ2UocykgdGhhdCB0aGUgY2VydCBpcyBnb29kIGZvcgotKyAq IGlmIHRoZSBjZXJ0IGlzIGdvb2QgZm9yIG5vdGhpbmcsIHJldHVybmVkIHZhbHVlIGlzCi0rICog ICAgICAgICAgICAgICAgICgweDBiODApOgotKyAqICAgICAgICAgICAgICAgICBjZXJ0VXNhZ2VV c2VyQ2VydEltcG9ydCB8Ci0rICogICAgICAgICAgICAgICAgIGNlcnRVc2FnZVZlcmlmeUNBIHwK LSsgKiAgICAgICAgICAgICAgICAgY2VydFVzYWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVyIHwKLSsg KiAgICAgICAgICAgICAgICAgY2VydFVzYWdlQW55Q0EKLSsgKi8KLStKTklFWFBPUlQgamludCBK TklDQUxMCi0rSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJpZnlDZXJ0aWZp Y2F0ZU5vd0NVTmF0aXZlKEpOSUVudiAqZW52LAotKyAgICAgICAgam9iamVjdCBzZWxmLCBqc3Ry aW5nIG5pY2tTdHJpbmcsIGpib29sZWFuIGNoZWNrU2lnKQotK3sKLSsgICAgU0VDU3RhdHVzICAg ICAgICAgcnYgICAgPSBTRUNGYWlsdXJlOwotKyAgICBTRUNDZXJ0aWZpY2F0ZVVzYWdlICAgICAg Y3VyclVzYWdlID0gMHgwMDAwOwotKwotKyAgICBydiA9IHZlcmlmeUNlcnRpZmljYXRlTm93KGVu diwgc2VsZiwgbmlja1N0cmluZywgY2hlY2tTaWcsIDAsICZjdXJyVXNhZ2UpOwotKyAgICAvKiBy diBpcyBpZ25vcmVkICovCi0rCi0rICAgIHJldHVybiBjdXJyVXNhZ2U7Ci0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotKyAqIENyeXB0b01hbmFnZXIudmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUK LSsgKgotKyAqIFJldHVybnMgSk5JX1RSVUUgaWYgc3VjY2VzcywgSk5JX0ZBTFNFIG90aGVyd2lz ZQotKyAqLwotK0pOSUVYUE9SVCBqYm9vbGVhbiBKTklDQUxMCi0rSmF2YV9vcmdfbW96aWxsYV9q c3NfQ3J5cHRvTWFuYWdlcl92ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2ZShKTklFbnYgKmVudiwK LSsgICAgICAgIGpvYmplY3Qgc2VsZiwganN0cmluZyBuaWNrU3RyaW5nLCBqYm9vbGVhbiBjaGVj a1NpZywgamludCByZXF1aXJlZF9jZXJ0aWZpY2F0ZVVzYWdlKQotK3sKLSsgICAgU0VDU3RhdHVz ICAgICAgICAgcnYgICAgPSBTRUNGYWlsdXJlOwotKyAgICBTRUNDZXJ0aWZpY2F0ZVVzYWdlICAg ICAgY3VyclVzYWdlID0gMHgwMDAwOwotKwotKyAgICBydiA9IHZlcmlmeUNlcnRpZmljYXRlTm93 KGVudiwgc2VsZiwgbmlja1N0cmluZywgY2hlY2tTaWcsIHJlcXVpcmVkX2NlcnRpZmljYXRlVXNh Z2UsICZjdXJyVXNhZ2UpOwotKwotICAgICBpZiggcnYgPT0gU0VDU3VjY2VzcykgewotICAgICAg ICAgcmV0dXJuIEpOSV9UUlVFOwotICAgICB9IGVsc2UgewotQEAgLTE2MjQsNyArMTY4MSw2IEBA IGZpbmlzaDoKLSAgICAgfQotIH0KLSAKLS0KLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBDcnlwdG9N YW5hZ2VyLnZlcmlmeUNlcnROb3dOYXRpdmUKLSAgKiBub3RlOiB0aGlzIGNhbGxzIG9ic29sZXRl IE5TUyBmdW5jdGlvbgoKZGlmZiAtLWdpdCBhL2pzcy1XaW5kb3dzQ29tcGlsZUZpeC5wYXRjaCBi L2pzcy1XaW5kb3dzQ29tcGlsZUZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMjBlMmVhMy4uMDAwMDAwMAotLS0gYS9qc3MtV2luZG93c0NvbXBpbGVGaXgucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYy5jZnUganNzLTQuMi42 L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmMKLS0t LSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xT b2NrZXQuYy5jZnUJMjAxNS0wNC0yMyAxMzoyNTo0NS4xMDQyNDkxMzUgLTA3MDAKLSsrKyBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQu YwkyMDE1LTA0LTIzIDEzOjM5OjI5Ljk1ODgxMzc3OSAtMDcwMAotQEAgLTQ5LDEwICs0OSwxMiBA QAotIAotICNpZmRlZiBXSU5OVAotICNpbmNsdWRlIDxwcml2YXRlL3BwcmlvLmg+Ci0rI2RlZmlu ZSBBRl9JTkVUNiAyMwotICNlbmRpZiAKLSAKLSAjaWZkZWYgV0lOMzIKLSAjaW5jbHVkZSA8d2lu c29jay5oPgotKyNkZWZpbmUgQUZfSU5FVDYgMjMKLSAjZW5kaWYKLSAKLSAKLUBAIC02Niw2ICs2 OCw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9TU0xTb2NrZXRfc2V0U1MKLSB7Ci0gICAg IFNFQ1N0YXR1cyBzdGF0dXM7Ci0gICAgIFNTTFZlcnNpb25SYW5nZSB2cmFuZ2U7Ci0rICAgIFNT TFZlcnNpb25SYW5nZSBzdXBwb3J0ZWRfcmFuZ2U7Ci0gCi0gICAgIGlmIChzc2xfdmFyaWFudCA8 MCB8fCBzc2xfdmFyaWFudCA+PSBKU1NMX2VudW1zX3NpemV8fCAKLSAgICAgICAgICAgICBtaW4g PDAgfHwgbWluID49IEpTU0xfZW51bXNfc2l6ZSB8fAotQEAgLTgwLDcgKzgzLDYgQEAgSmF2YV9v cmdfbW96aWxsYV9qc3Nfc3NsX1NTTFNvY2tldF9zZXRTUwotICAgICB2cmFuZ2UubWF4ID0gSlNT TF9lbnVtc1ttYXhdOwotIAotICAgICAvKiBnZXQgc3VwcG9ydGVkIHJhbmdlICovCi0tICAgIFNT TFZlcnNpb25SYW5nZSBzdXBwb3J0ZWRfcmFuZ2U7Ci0gICAgIHN0YXR1cyA9IFNTTF9WZXJzaW9u UmFuZ2VHZXRTdXBwb3J0ZWQoSlNTTF9lbnVtc1tzc2xfdmFyaWFudF0sCi0gICAgICAgICAgICAg ICAgICZzdXBwb3J0ZWRfcmFuZ2UpOwotICAgICBpZiggc3RhdHVzICE9IFNFQ1N1Y2Nlc3MgKSB7 CgpkaWZmIC0tZ2l0IGEvanNzLVdpbmRvd3NMb2FkTGlicmFyeS5wYXRjaCBiL2pzcy1XaW5kb3dz TG9hZExpYnJhcnkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjg5MTMu LjAwMDAwMDAKLS0tIGEvanNzLVdpbmRvd3NMb2FkTGlicmFyeS5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDMwICswLDAgQEAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhLmNmdSBqc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YQotLS0tIGpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdl ci5qYXZhLmNmdQkyMDE1LTA3LTA4IDEyOjAyOjEzLjE5MjAwMDAwMCArMDIwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5q YXZhCTIwMTUtMDctMDggMTI6MDQ6NTYuMjEzMDAwMDAwICswMjAwCi1AQCAtMTQwNCwxNyArMTQw NCwyMyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBsZW1lCi0gICAgIHN5 bmNocm9uaXplZCBzdGF0aWMgdm9pZCBsb2FkTmF0aXZlTGlicmFyaWVzKCkKLSAgICAgewotICAg ICAgICAgaWYoICEgbU5hdGl2ZUxpYnJhcmllc0xvYWRlZCApIHsKLS0gICAgICAgICAgICB0cnkg ewotKyAgICAgICAgICAgIHRyeSB7IC8vIDY0IGJpdCByaGVsL2ZlZG9yYQotICAgICAgICAgICAg ICAgICBTeXN0ZW0ubG9hZCggIi91c3IvbGliNjQvanNzL2xpYmpzczQuc28iICk7Ci0gICAgICAg ICAgICAgICAgIERlYnVnLnRyYWNlKERlYnVnLlZFUkJPU0UsICJqc3MgbGlicmFyeSBsb2FkZWQi KTsKLSAgICAgICAgICAgICAgICAgbU5hdGl2ZUxpYnJhcmllc0xvYWRlZCA9IHRydWU7Ci0gICAg ICAgICAgICAgfSBjYXRjaCggVW5zYXRpc2ZpZWRMaW5rRXJyb3IgZSApIHsKLS0gICAgICAgICAg ICAgICAgdHJ5IHsKLSsgICAgICAgICAgICAgICAgdHJ5IHsgLy8gMzIgYml0IHJoZWwvZmVkb3Jh Ci0gICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ubG9hZCggIi91c3IvbGliL2pzcy9saWJqc3M0 LnNvIiApOwotICAgICAgICAgICAgICAgICAgICAgRGVidWcudHJhY2UoRGVidWcuVkVSQk9TRSwg ImpzcyBsaWJyYXJ5IGxvYWRlZCIpOwotICAgICAgICAgICAgICAgICAgICAgbU5hdGl2ZUxpYnJh cmllc0xvYWRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgIH0gY2F0Y2goIFVuc2F0aXNmaWVk TGlua0Vycm9yIGYgKSB7Ci0tICAgICAgICAgICAgICAgICAgICBEZWJ1Zy50cmFjZShEZWJ1Zy5W RVJCT1NFLCAianNzIGxpYnJhcnkgbG9hZCBmYWlsZWQiKTsKLSsgICAgICAgICAgICAgICAgICAg IHRyeSB7Ly8gcG9zc2libHkgb3RoZXIgcGxhdGZvcm1zCi0rICAgICAgICAgICAgICAgICAgICAg ICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCAianNzNCIgKTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICBEZWJ1Zy50cmFjZShEZWJ1Zy5WRVJCT1NFLCAianNzIGxpYnJhcnkgbG9hZGVkIik7Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgbU5hdGl2ZUxpYnJhcmllc0xvYWRlZCA9IHRydWU7Ci0rICAg ICAgICAgICAgICAgICAgICB9IGNhdGNoKCBVbnNhdGlzZmllZExpbmtFcnJvciBnICkgewotKyAg ICAgICAgICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKERlYnVnLlZFUkJPU0UsICJqc3MgbGli cmFyeSBsb2FkIGZhaWxlZCIpOwotKyAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQoKZGlmZiAtLWdpdCBhL2pzcy1iYWQt ZXJyb3Itc3RyaW5nLXBvaW50ZXIucGF0Y2ggYi9qc3MtYmFkLWVycm9yLXN0cmluZy1wb2ludGVy LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTI0NGMzLi4wMDAwMDAwCi0t LSBhL2pzcy1iYWQtZXJyb3Itc3RyaW5nLXBvaW50ZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSwyNyArMCwwIEBACi0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3NzbC9TU0xTZXJ2ZXJTb2NrZXQuYwkyMDEwLTExLTE3IDE4OjU0OjU2LjAw MDAwMDAwMCAtMDUwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3Mvc3NsL1NTTFNlcnZlclNvY2tldC5jCTIwMTAtMTEtMTggMDk6NDY6MzQuMDAwMDAw MDAwIC0wNTAwCi1AQCAtMTI0LDIwICsxMjQsMTYgQEAKLSAgICAgICAgICAgICAvKiBDbGVhbiB1 cCBhZnRlciBQUl9pbnRlcnJ1cHQuICovCi0gICAgICAgICAgICAgUFJfTlRfQ2FuY2VsSW8oc29j ay0+ZmQpOwotICNlbmRpZgotLSAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRp b24oZW52LCAKLS0gICAgICAgICAgICAgICAgIkFjY2VwdCBvcGVyYXRpb24gaW50ZXJydXB0ZWQg d2l0aCBlcnJvciBjb2RlICIgKyBlcnIpOwotKyAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2Nr ZXRFeGNlcHRpb24oZW52LCAiQWNjZXB0IG9wZXJhdGlvbiBpbnRlcnJ1cHRlZCIpOwotICAgICAg ICAgfSBlbHNlIGlmKCBlcnIgPT0gUFJfSU9fVElNRU9VVF9FUlJPUiApIHsKLSAjaWZkZWYgV0lO TlQKLSAgICAgICAgICAgICBQUl9OVF9DYW5jZWxJbyhzb2NrLT5mZCk7Ci0gI2VuZGlmCi0tICAg ICAgICAgICAgSlNTTF90aHJvd1NTTFNvY2tldEV4Y2VwdGlvbihlbnYsIAotLSAgICAgICAgICAg ICAgICAiQWNjZXB0IG9wZXJhdGlvbiB0aW1lZCBvdXQgd2l0aCBlcnJvciBjb2RlICIgKyBlcnIp OwotKyAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oZW52LCAiQWNjZXB0 IG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKLSAgICAgICAgIH0gZWxzZSBpZiggZXJyID09IFBSX0lP X0VSUk9SICkgewotLSAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oZW52 LCAKLS0gICAgICAgICAgICAgICAgIkFjY2VwdCBvcGVyYXRpb24gcmVjZWl2ZWQgSU8gZXJyb3Ig d2l0aCBlcnJvciBjb2RlICIgKyBlcnIpOwotKyAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2Nr ZXRFeGNlcHRpb24oZW52LCAiQWNjZXB0IG9wZXJhdGlvbiByZWNlaXZlZCBJTyBlcnJvciIpOwot ICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICBKU1NMX3Rocm93U1NMU29ja2V0RXhjZXB0 aW9uKGVudiwgCi0tICAgICAgICAgICAgICAgICJBY2NlcHQgb3BlcmF0aW9uIGZhaWxlZCB3aXRo IGVycm9yIGNvZGUgIiArIGVycik7Ci0rICAgICAgICAgICAgSlNTTF90aHJvd1NTTFNvY2tldEV4 Y2VwdGlvbihlbnYsICJBY2NlcHQgb3BlcmF0aW9uIGZhaWxlZCIpOwotICAgICAgICAgfQotICAg ICAgICAgZ290byBmaW5pc2g7Ci0gICAgIH0KCmRpZmYgLS1naXQgYS9qc3MtY3JtZi1lbnZlbG9w ZWREYXRhLnBhdGNoIGIvanNzLWNybWYtZW52ZWxvcGVkRGF0YS5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMTNjMjFkNy4uMDAwMDAwMAotLS0gYS9qc3MtY3JtZi1lbnZlbG9w ZWREYXRhLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotZGlmZiAtdXAganNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4L2NybWYvRW5j cnlwdGVkS2V5LmphdmEucm95c2pvc2gganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2l4L2NybWYvRW5jcnlwdGVkS2V5LmphdmEKLS0tLSBqc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvY3JtZi9FbmNyeXB0ZWRL ZXkuamF2YS5yb3lzam9zaAkyMDE2LTA2LTI0IDE0OjUxOjQ4LjkyOTEyMjA1MyAtMDcwMAotKysr IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jcm1m L0VuY3J5cHRlZEtleS5qYXZhCTIwMTYtMDYtMjQgMTQ6NTI6MjkuNDg3MDI3MDA1IC0wNzAwCi1A QCAtMTI3LDcgKzEyNyw4IEBAIHB1YmxpYyBjbGFzcyBFbmNyeXB0ZWRLZXkgaW1wbGVtZW50cyBB U04KLSAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgQXNzZXJ0Ll9hc3NlcnQodHlwZSA9 PSBFTlZFTE9QRURfREFUQSk7Ci0gICAgICAgICAgICAgQXNzZXJ0Ll9hc3NlcnQoZW52ZWxvcGVk RGF0YSAhPSBudWxsKTsKLS0gICAgICAgICAgICBlbnZlbG9wZWREYXRhLmVuY29kZShpbXBsaWNp dFRhZywgb3N0cmVhbSk7Ci0rICAgICAgICAgICAgRVhQTElDSVQgZXhwbGljaXQgPSBuZXcgRVhQ TElDSVQoIG5ldyBUYWcoMCksIGVudmVsb3BlZERhdGEgKTsKLSsgICAgICAgICAgICBleHBsaWNp dC5lbmNvZGUodGFnLCBvc3RyZWFtKTsKLSAgICAgICAgIH0KLSAgICAgfQotIAotQEAgLTE0Nyw3 ICsxNDgsOSBAQCBwdWJsaWMgY2xhc3MgRW5jcnlwdGVkS2V5IGltcGxlbWVudHMgQVNOCi0gICAg ICAgICAgICAgY2hvaWNldCA9IG5ldyBDSE9JQ0UuVGVtcGxhdGUoKTsKLSAKLSAgICAgICAgICAg ICBjaG9pY2V0LmFkZEVsZW1lbnQoIEVuY3J5cHRlZFZhbHVlLmdldFRlbXBsYXRlKCkgKTsKLS0g ICAgICAgICAgICBjaG9pY2V0LmFkZEVsZW1lbnQoIG5ldyBUYWcoMCksIEFOWS5nZXRUZW1wbGF0 ZSgpICk7Ci0rICAgICAgICAgICAgY2hvaWNldC5hZGRFbGVtZW50KCBuZXcgRVhQTElDSVQuVGVt cGxhdGUoCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUYWco MCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOWS5nZXRUZW1w bGF0ZSgpICkpOwotICAgICAgICAgfQotIAotICAgICAgICAgcHVibGljIGJvb2xlYW4gdGFnTWF0 Y2goVGFnIHRhZykgewotQEAgLTE2NCw3ICsxNjcsNyBAQCBwdWJsaWMgY2xhc3MgRW5jcnlwdGVk S2V5IGltcGxlbWVudHMgQVNOCi0gICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRW5jcnlwdGVk S2V5KCAoRW5jcnlwdGVkVmFsdWUpIGNob2ljZS5nZXRWYWx1ZSgpICk7Ci0gICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgQXNzZXJ0Ll9hc3NlcnQoIGNob2ljZS5nZXRUYWco KS5lcXVhbHMobmV3IFRhZygwKSkgKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbmNy eXB0ZWRLZXkoIChBTlkpIGNob2ljZS5nZXRWYWx1ZSgpICk7Ci0rICAgICAgICAgICAgICAgIHJl dHVybiBuZXcgRW5jcnlwdGVkS2V5KCAoQU5ZKSAoKEVYUExJQ0lUKSBjaG9pY2UuZ2V0VmFsdWUo KSkuZ2V0Q29udGVudCgpICk7Ci0gICAgICAgICAgICAgfQotIAotICAgICAgICAgICB9IGNhdGNo KEludmFsaWRCRVJFeGNlcHRpb24gZSkgewoKZGlmZiAtLWdpdCBhL2pzcy1lbGltaW5hdGUtamF2 YS1jb21waWxlci13YXJuaW5ncy5wYXRjaCBiL2pzcy1lbGltaW5hdGUtamF2YS1jb21waWxlci13 YXJuaW5ncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmOTlkMy4uMDAw MDAwMAotLS0gYS9qc3MtZWxpbWluYXRlLWphdmEtY29tcGlsZXItd2FybmluZ3MucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSw2NDEgKzAsMCBAQAotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEgamF2 YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01h bmFnZXIuamF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YQkyMDExLTA4LTEwIDE2OjIxOjMwLjgzNzc2NTAw MCAtMDcwMAotKysrIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEJMjAxMS0wOC0xMiAxMzoxMzozNC40NDk2NjQwMDAg LTA3MDAKLUBAIC0xMTI1LDcgKzExMjUsNyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFu YWdlciBpbXBsZW1lCi0gICAgICAqIEltcG9ydHMgYSBzaW5nbGUgY2VydGlmaWNhdGUgaW50byB0 aGUgcGVybWFuZW50IGNlcnRpZmljYXRlCi0gICAgICAqIGRhdGFiYXNlLgotICAgICAgKgotLSAg ICAgKiBAcGFyYW0gZGVyQ2VydCB0aGUgY2VydGlmaWNhdGUgeW91IHdhbnQgdG8gYWRkCi0rICAg ICAqIEBwYXJhbSBjZXJ0IHRoZSBjZXJ0aWZpY2F0ZSB5b3Ugd2FudCB0byBhZGQKLSAgICAgICog QHBhcmFtIG5pY2tuYW1lIHRoZSBuaWNrbmFtZSB5b3Ugd2FudCB0byByZWZlciB0byB0aGUgY2Vy dGlmaWNhdGUgYXMKLSAgICAgICogICAgICAgIChtdXN0IG5vdCBiZSBudWxsKQotICAgICAgKi8K LUBAIC0xMzkxLDExICsxMzkxLDExIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDcnlwdG9NYW5hZ2Vy IGltcGxlbWUKLSAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcKLSAgICAgSkFSX0pES19W RVJTSU9OICAgICA9ICJKREtfVkVSU0lPTiA9IE4vQSI7Ci0gICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nCi0tICAgIEpBUl9OU1NfVkVSU0lPTiAgICAgPSAiTlNTX1ZFUlNJT04gPSBOU1Nf M18xMV85X1JUTSI7Ci0rICAgIEpBUl9OU1NfVkVSU0lPTiAgICAgPSAiTlNTX1ZFUlNJT04gPSBO L0EiOwotICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZwotICAgICBKQVJfREJNX1ZFUlNJ T04gICAgID0gIkRCTV9WRVJTSU9OID0gTi9BIjsKLSAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBT dHJpbmcKLS0gICAgSkFSX05TUFJfVkVSU0lPTiAgICA9ICJOU1BSX1ZFUlNJT04gPSBOU1BSXzRf N19SVE0iOwotKyAgICBKQVJfTlNQUl9WRVJTSU9OICAgID0gIk5TUFJfVkVSU0lPTiA9IE4vQSI7 Ci0gCi0gICAgIC8qKgotICAgICAgKiBMb2FkcyB0aGUgSlNTIGR5bmFtaWMgbGlicmFyeSBpZiBu ZWNlc3NhcnkuCi1AQCAtMTQzMyw4ICsxNDMzLDggQEAgcHVibGljIGZpbmFsIGNsYXNzIENyeXB0 b01hbmFnZXIgaW1wbGVtZQotICAgICAgKiB0aGlzIHRocmVhZCdzIHRva2VuIHRvIDx0dD5udWxs PC90dD4gd2lsbCBhbHNvIGNhdXNlIHRoZQotICAgICAgKiBJbnRlcm5hbEtleVN0b3JhZ2VUb2tl biB0byBiZSB1c2VkLgotICAgICAgKgotLSAgICAgKiBAcGFyYW0gVGhlIHRva2VuIHRvIHVzZSBm b3IgY3J5cHRvIG9wZXJhdGlvbnMuIFNwZWNpZnlpbmcgPHR0Pm51bGw8L3R0PgotLSAgICAgKiB3 aWxsIGNhdXNlIHRoZSBJbnRlcm5hbEtleVN0b3JhZ2VUb2tlbiB0byBiZSB1c2VkLgotKyAgICAg KiBAcGFyYW0gdG9rZW4gVGhlIHRva2VuIHRvIHVzZSBmb3IgY3J5cHRvIG9wZXJhdGlvbnMuIFNw ZWNpZnlpbmcKLSsgICAgICogPHR0Pm51bGw8L3R0PiB3aWxsIGNhdXNlIHRoZSBJbnRlcm5hbEtl eVN0b3JhZ2VUb2tlbiB0byBiZSB1c2VkLgotICAgICAgKi8KLSAgICAgcHVibGljIHZvaWQgc2V0 VGhyZWFkVG9rZW4oQ3J5cHRvVG9rZW4gdG9rZW4pIHsKLSAgICAgICAgIGlmKCB0b2tlbiAhPSBu dWxsICkgewotQEAgLTE1NzksNyArMTU3OSw3IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDcnlwdG9N YW5hZ2VyIGltcGxlbWUKLSAgICAgICogVmVyaWZ5IGEgY2VydGlmaWNhdGUgaW4gbWVtb3J5LiBD aGVjayBpZgotICAgICAgKiB2YWxpZCBhbmQgdGhhdCB3ZSB0cnVzdCB0aGUgaXNzdWVyLiBWZXJp ZnkgdGltZQotICAgICAgKiBhZ2FpbnN0IE5vdy4KLS0gICAgICogQHBhcmFtIGNlcnRpZmljYXRl IGluIG1lbW9yeQotKyAgICAgKiBAcGFyYW0gY2VydFBhY2thZ2UgY2VydGlmaWNhdGUgaW4gbWVt b3J5Ci0gICAgICAqIEBwYXJhbSBjaGVja1NpZyB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiB0aGUg Y2VydGlmaWNhdGUKLSAgICAgICogQHBhcmFtIGNlcnRVc2FnZSBzZWUgZXhwb3NlZCBjZXJ0VXNh Z2UgZGVmaW5lcyB0byB2ZXJpZnkgQ2VydGlmaWNhdGUKLSAgICAgICogQHJldHVybiB0cnVlIGZv ciBzdWNjZXNzOyBmYWxzZSBvdGhlcndpc2UKLWRpZmYgLXJ1cE4gYWx0LWpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvSlNTUHJvdmlkZXIuamF2YSBqYXZhLWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvSlNTUHJvdmlkZXIu amF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL0pTU1Byb3ZpZGVyLmphdmEJMjAxMS0wOC0xMCAxNzoyOTozMy40NzY2NjEwMDAgLTA3MDAK LSsrKyBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv SlNTUHJvdmlkZXIuamF2YQkyMDExLTA4LTEyIDExOjAwOjI2LjQ1Njg1MjAwMCAtMDcwMAotQEAg LTUxLDcgKzUxLDcgQEAgcHVibGljIGZpbmFsIGNsYXNzIEpTU1Byb3ZpZGVyIGV4dGVuZHMgagot IAotICAgICBwcml2YXRlIHN0YXRpYyBpbnQgSlNTX01BSk9SX1ZFUlNJT04gID0gNDsKLSAgICAg cHJpdmF0ZSBzdGF0aWMgaW50IEpTU19NSU5PUl9WRVJTSU9OICA9IDI7Ci0tICAgIHByaXZhdGUg c3RhdGljIGludCBKU1NfUEFUQ0hfVkVSU0lPTiAgPSA1OwotKyAgICBwcml2YXRlIHN0YXRpYyBp bnQgSlNTX1BBVENIX1ZFUlNJT04gID0gNjsKLSAgICAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlIEpT U19WRVJTSU9OICAgICA9IEpTU19NQUpPUl9WRVJTSU9OICsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKEpTU19NSU5PUl9WRVJTSU9OICogMTAwICsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTU19QQVRDSF9WRVJTSU9O KS8xMDAwMC4wOwotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ2lwaGVyLmphdmEgamF2YS1qc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DaXBoZXIuamF2YQotLS0tIGFs dC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9D aXBoZXIuamF2YQkyMDA0LTA0LTI1IDA4OjAyOjIxLjAwMDAwMDAwMCAtMDcwMAotKysrIGphdmEt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ2lw aGVyLmphdmEJMjAxMS0wOC0xMiAxMzoxMDo1MC43ODE4MjcwMDAgLTA3MDAKLUBAIC0xNDQsOCAr MTQ0LDggQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIENpcGhlciB7Ci0gICAgICAqICA8aT5CPC9p PiBpcyB0aGUgYmxvY2sgc2l6ZSwgdGhlIHBhZGRpbmcgc3RyaW5nIGNvbnNpc3RzIG9mCi0gICAg ICAqICA8aT5CPC9pPiAtICg8aT5NPC9pPiBtb2QgPGk+QjwvaT4pIG9jdGV0cywgZWFjaCBoYXZp bmcgdGhlIHZhbHVlCi0gICAgICAqICA8aT5CPC9pPiAtICg8aT5NPC9pPiBtb2QgPGk+QjwvaT4p LgotLSAgICAgKiBAcGFyYW0gVGhlIGJsb2NrIHNpemUgb2YgdGhlIGVuY3J5cHRpb24gYWxnb3Jp dGhtLiAgTXVzdCBiZSBncmVhdGVyCi0tICAgICAqICB0aGFuIHplcm8uCi0rICAgICAqIEBwYXJh bSBibG9ja1NpemUgVGhlIGJsb2NrIHNpemUgb2YgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtLgot KyAgICAgKiAgTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KLSAgICAgICogQHNlZSAjdW5QYWQK LSAgICAgICovCi0gICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdCi1kaWZmIC1ydXBOIGFsdC1qc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DcnlwdG9U b2tlbi5qYXZhIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9jcnlwdG8vQ3J5cHRvVG9rZW4uamF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DcnlwdG9Ub2tlbi5qYXZhCTIwMDct MTEtMDkgMTY6Mzc6NTYuMDAwMDAwMDAwIC0wODAwCi0rKysgamF2YS1qc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DcnlwdG9Ub2tlbi5qYXZhCTIw MTEtMDgtMTIgMTE6MDc6MjAuMzI2NDM4MDAwIC0wNzAwCi1AQCAtMTk0LDcgKzE5NCw3IEBAIHB1 YmxpYyBpbnRlcmZhY2UgQ3J5cHRvVG9rZW4gewotICAgICAgKiBMb2dpbiB0byB0aGUgdG9rZW4u IElmIGEgdG9rZW4gaXMgbG9nZ2VkIGluLCBpdCB3aWxsIG5vdCB0cmlnZ2VyCi0gICAgICAqIHBh c3N3b3JkIGNhbGxiYWNrcy4KLSAgICAgICoKLS0gICAgICogQHBhcmFtIHBhc3N3b3JkIFRoZSBw YXNzd29yZCBmb3IgdGhpcyB0b2tlbi4KLSsgICAgICogQHBhcmFtIHB3Y2IgVGhlIHBhc3N3b3Jk IGNhbGxiYWNrIGZvciB0aGlzIHRva2VuLgotICAgICAgKiBAZXhjZXB0aW9uIEluY29ycmVjdFBh c3N3b3JkRXhjZXB0aW9uIElmIHRoZSBzdXBwbGllZCBwYXNzd29yZCBpcwotICAgICAgKiAgaW5j b3JyZWN0LgotICAgICAgKiBAc2VlICNzZXRMb2dpbk1vZGUKLWRpZmYgLXJ1cE4gYWx0LWpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU01lc3Nh Z2VEaWdlc3QuamF2YSBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvY3J5cHRvL0pTU01lc3NhZ2VEaWdlc3QuamF2YQotLS0tIGFsdC1qc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9KU1NNZXNzYWdlRGln ZXN0LmphdmEJMjAwNC0wNC0yNSAwODowMjoyMS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBqYXZhLWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU01l c3NhZ2VEaWdlc3QuamF2YQkyMDExLTA4LTEyIDExOjA4OjM3Ljc0NzM2MDAwMCAtMDcwMAotQEAg LTg4LDcgKzg4LDcgQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIEpTU01lc3NhZ2VEaWdlc3Qgewot ICAgICAgKiBDb21wbGV0ZXMgZGlnZXN0aW9uLgotICAgICAgKiAKLSAgICAgICogQHJldHVybiBU aGUsIGFoZW0sIG91dHB1dCBvZiB0aGUgZGlnZXN0IG9wZXJhdGlvbi4KLS0gICAgICogQHBhcmFt IElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBkaWdlc3RpbmcuCi0rICAgICAqIEBleGNlcHRpb24g RGlnZXN0RXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBkaWdlc3RpbmcuCi0gICAg ICAqLwotICAgICBwdWJsaWMgYnl0ZVtdIGRpZ2VzdCgpIHRocm93cyBEaWdlc3RFeGNlcHRpb24g ewotICAgICAgICAgYnl0ZVtdIG91dHB1dCA9IG5ldyBieXRlW2dldE91dHB1dFNpemUoKV07Ci1k aWZmIC1ydXBOIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2NyeXB0by9QQkVLZXlHZW5QYXJhbXMuamF2YSBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL1BCRUtleUdlblBhcmFtcy5qYXZhCi0t LS0gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5 cHRvL1BCRUtleUdlblBhcmFtcy5qYXZhCTIwMDQtMDQtMjUgMDg6MDI6MjEuMDAwMDAwMDAwIC0w NzAwCi0rKysgamF2YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2NyeXB0by9QQkVLZXlHZW5QYXJhbXMuamF2YQkyMDExLTA4LTEyIDExOjA5OjQxLjM0NTI5 NjAwMCAtMDcwMAotQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljIGNsYXNzIFBCRUtleUdlblBhcmFt cyBpbXBsZW1lbnRzIAotICAgICAgKiAgICAgIE11c3Qgbm90IGJlIG51bGwuIEl0IGlzIHRoZSBy ZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvCi0gICAgICAqICAgICAgdXNlIHRoZSByaWdo dCBzYWx0IGxlbmd0aCBmb3IgdGhlIGFsZ29yaXRobS4gTW9zdCBhbGdvcml0aG1zCi0gICAgICAq ICAgICAgdXNlIDggYnl0ZXMgb2Ygc2FsdC4KLS0gICAgICogQHBhcmFtIFRoZSBpdGVyYXRpb24g Y291bnQgZm9yIHRoZSBQQkUgYWxnb3JpdGhtLgotKyAgICAgKiBAcGFyYW0gaXRlcmF0aW9ucyBU aGUgaXRlcmF0aW9uIGNvdW50IGZvciB0aGUgUEJFIGFsZ29yaXRobS4KLSAgICAgICovCi0gICAg IHB1YmxpYyBQQkVLZXlHZW5QYXJhbXMoUGFzc3dvcmQgcGFzcywgYnl0ZVtdIHNhbHQsIGludCBp dGVyYXRpb25zKSB7Ci0gICAgICAgICBpZihwYXNzPT1udWxsIHx8IHNhbHQ9PW51bGwpIHsKLUBA IC04MCw3ICs4MCw3IEBAIHB1YmxpYyBjbGFzcyBQQkVLZXlHZW5QYXJhbXMgaW1wbGVtZW50cyAK LSAgICAgICogICAgICBNdXN0IG5vdCBiZSBudWxsLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkg b2YgdGhlIGNhbGxlciB0bwotICAgICAgKiAgICAgIHVzZSB0aGUgcmlnaHQgc2FsdCBsZW5ndGgg Zm9yIHRoZSBhbGdvcml0aG0uIE1vc3QgYWxnb3JpdGhtcwotICAgICAgKiAgICAgIHVzZSA4IGJ5 dGVzIG9mIHNhbHQuCi0tICAgICAqIEBwYXJhbSBUaGUgaXRlcmF0aW9uIGNvdW50IGZvciB0aGUg UEJFIGFsZ29yaXRobS4KLSsgICAgICogQHBhcmFtIGl0ZXJhdGlvbnMgVGhlIGl0ZXJhdGlvbiBj b3VudCBmb3IgdGhlIFBCRSBhbGdvcml0aG0uCi0gICAgICAqLwotICAgICBwdWJsaWMgUEJFS2V5 R2VuUGFyYW1zKGNoYXJbXSBwYXNzLCBieXRlW10gc2FsdCwgaW50IGl0ZXJhdGlvbnMpIHsKLSAg ICAgICAgIGlmKHBhc3M9PW51bGwgfHwgc2FsdD09bnVsbCkgewotZGlmZiAtcnVwTiBhbHQtanNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRv a2VuLmphdmEgamF2YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3BrY3MxMS9QSzExVG9rZW4uamF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExVG9rZW4uamF2YQkyMDA3LTExLTA5 IDE2OjM3OjU3LjAwMDAwMDAwMCAtMDgwMAotKysrIGphdmEtanNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRva2VuLmphdmEJMjAxMS0wOC0x MiAxMToxMzo1MS44MDcwNDcwMDAgLTA3MDAKLUBAIC0yMjgsOCArMjI4LDggQEAgcHVibGljIGZp bmFsIGNsYXNzIFBLMTFUb2tlbiBpbXBsZW1lbnRzIAotICAgICAgKiBJbml0aWFsaXplIFBJTi4g IFRoaXMgc2V0cyB0aGUgdXNlcidzIG5ldyBQSU4sIHVzaW5nIHRoZSBjdXJyZW50Ci0gICAgICAq IHNlY3VyaXR5IG9mZmljZXIgUElOIGZvciBhdXRoZW50aWNhdGlvbi4KLSAgICAgICoKLS0gICAg ICogQHBhcmFtIHNzb3B3IFRoZSBzZWN1cml0eSBvZmZpY2VyJ3MgY3VycmVudCBwYXNzd29yZC4K LS0gICAgICogQHBhcmFtIHVzZXJwdyBUaGUgdXNlcidzIG5ldyBwYXNzd29yZC4KLSsgICAgICog QHBhcmFtIHNzb3B3Y2IgVGhlIHNlY3VyaXR5IG9mZmljZXIncyBjdXJyZW50IHBhc3N3b3JkIGNh bGxiYWNrLgotKyAgICAgKiBAcGFyYW0gdXNlcnB3Y2IgVGhlIHVzZXIncyBuZXcgcGFzc3dvcmQg Y2FsbGJhY2suCi0gICAgICAqIEBleGNlcHRpb24gSW5jb3JyZWN0UGluRXhjZXB0aW9uIElmIHRo ZSBzZWN1cml0eSBvZmZpY2VyIFBJTiBpcwotICAgICAgKiAgaW5jb3JyZWN0LgotICAgICAgKiBA ZXhjZXB0aW9uIFRva2VuRXhjZXB0aW9uIElmIHRoZSBQSU4gd2FzIGFscmVhZHkgaW5pdGlhbGl6 ZWQsCi1AQCAtMzIyLDggKzMyMiw4IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQSzExVG9rZW4gaW1w bGVtZW50cyAKLSAgICAgICogQ2hhbmdlIHBhc3N3b3JkLiAgVGhpcyBjaGFuZ2VzIHRoZSB1c2Vy J3MgUElOIGFmdGVyIGl0IGhhcyBhbHJlYWR5Ci0gICAgICAqIGJlZW4gaW5pdGlhbGl6ZWQuCi0g ICAgICAqCi0tICAgICAqIEBwYXJhbSBvbGRQSU4gVGhlIHVzZXIncyBvbGQgUElOLgotLSAgICAg KiBAcGFyYW0gbmV3UElOIFRoZSBuZXcgUElOLgotKyAgICAgKiBAcGFyYW0gb2xkUElOY2IgVGhl IHVzZXIncyBvbGQgUElOIGNhbGxiYWNrLgotKyAgICAgKiBAcGFyYW0gbmV3UElOY2IgVGhlIG5l dyBQSU4gY2FsbGJhY2suCi0gICAgICAqIEBleGNlcHRpb24gSW5jb3JyZWN0UGFzc3dvcmRFeGNl cHRpb24gSWYgdGhlIG9sZCBQSU4gaXMgaW5jb3JyZWN0LgotICAgICAgKiBAZXhjZXB0aW9uIFRv a2VuRXhjZXB0aW9uIElmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJzIG9uIHRoZSB0b2tlbi4KLSAg ICAgICoKLWRpZmYgLXJ1cE4gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczEyL1NhZmVCYWcuamF2YSBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEyL1NhZmVCYWcuamF2YQotLS0tIGFsdC1q c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMi9TYWZl QmFnLmphdmEJMjAwNS0wOS0yMiAxMDo1ODozNS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBqYXZhLWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEyL1NhZmVC YWcuamF2YQkyMDExLTA4LTEyIDExOjE0OjQ0LjAxMTk5NTAwMCAtMDcwMAotQEAgLTI4OCw3ICsy ODgsNyBAQCBwdWJsaWMgZmluYWwgY2xhc3MgU2FmZUJhZyBpbXBsZW1lbnRzIEFTCi0gICAgICAq ICAgICAgYXMgdGhlIG5pY2tuYW1lIG9mIHRoZSBhc3NvY2lhdGVkIGNlcnQuCi0gICAgICAqIEBw YXJhbSBsb2NhbEtleUlEIFRoZSBsb2NhbEtleUlEIGZvciB0aGUga2V5OyBzaG91bGQgYmUgdGhl IHNhbWUgYXMKLSAgICAgICogICAgICB0aGUgbG9jYWxLZXlJRCBvZiB0aGUgYXNzb2NpYXRlZCBj ZXJ0LgotLSAgICAgKiBAcGFyYW0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gZW5jcnlwdCB0aGUgcHJp dmF0ZSBrZXkuCi0rICAgICAqIEBwYXJhbSBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdXNlZCB0byBl bmNyeXB0IHRoZSBwcml2YXRlIGtleS4KLSAgICAgICovCi0gICAgIHB1YmxpYyBzdGF0aWMgU2Fm ZUJhZwotICAgICBjcmVhdGVFbmNyeXB0ZWRQcml2YXRlS2V5QmFnKFByaXZhdGVLZXlJbmZvIHBy aXZrLCBTdHJpbmcgZnJpZW5kbHlOYW1lLAotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzNy9TaWduZXJJbmZvLmphdmEgamF2 YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3M3L1Np Z25lckluZm8uamF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3M3L1NpZ25lckluZm8uamF2YQkyMDA0LTA0LTI1IDA4OjAyOjIzLjAw MDAwMDAwMCAtMDcwMAotKysrIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2NzNy9TaWduZXJJbmZvLmphdmEJMjAxMS0wOC0xMiAxMToxMjoxMy45 NTcxNDUwMDAgLTA3MDAKLUBAIC00MzAsNyArNDMwLDYgQEAgcHVibGljIGNsYXNzIFNpZ25lcklu Zm8gaW1wbGVtZW50cyBBU04xVgotICAgICAgKiAgU2lnbmVySW5mby4KLSAgICAgICogQHBhcmFt IGNvbnRlbnRUeXBlIFRoZSB0eXBlIG9mIHRoZSBjb250ZW50IHRoYXQgaXMgc2lnbmVkIGJ5IHRo aXMKLSAgICAgICogIFNpZ25lckluZm8uCi0tICAgICAqIEBwYXJhbSBwdWJrZXkgVGhlIHB1Ymxp YyBrZXkgdG8gdXNlIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlLgotICAgICAgKiBAZXhjZXB0aW9u IE5vU3VjaE9iamVjdEV4Y2VwdGlvbiBJZiBubyBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0aGUKLSAg ICAgICogICAgICB0aGUgaXNzdWVyIG5hbWUgYW5kIHNlcmlhbCBudW1iZXIgY2FuIGJlIGZvdW5k LgotICAgICAgKi8KLWRpZmYgLXJ1cE4gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbWMvQ01DU3RhdHVzSW5mby5qYXZhIGphdmEtanNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4L2NtYy9DTUNTdGF0 dXNJbmZvLmphdmEKLS0tLSBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9wa2l4L2NtYy9DTUNTdGF0dXNJbmZvLmphdmEJMjAwNC0xMS0xOCAxNDo1Njox MS4wMDAwMDAwMDAgLTA4MDAKLSsrKyBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbWMvQ01DU3RhdHVzSW5mby5qYXZhCTIwMTEtMDgtMTIg MTE6MjA6MzkuMjQwNjM5MDAwIC0wNzAwCi1AQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYyBjbGFz cyBDTUNTdGF0dXNJbmZvIGltcGxlbWVudHMgQVMKLSAgICAgICogQHBhcmFtIHN0YXR1cyBBIENN Q1N0YXR1cyBjb25zdGFudC4KLSAgICAgICogQHBhcmFtIGJvZHlMaXN0IFRoZSBzZXF1ZW5jZSBv ZiBib2R5UGFydElELgotICAgICAgKiBAcGFyYW0gc3RhdHVzU3RyaW5nIEEgU3RyaW5nLgotLSAg ICAgKiBAcGFyYW0gT3RoZXJJbmZvIFRoZSBPdGhlckluZm8gY2hvaWNlLgotKyAgICAgKiBAcGFy YW0gb3RoZXJJbmZvIFRoZSBPdGhlckluZm8gY2hvaWNlLgotICAgICAgKi8KLSAgICAgcHVibGlj IENNQ1N0YXR1c0luZm8oaW50IHN0YXR1cywgU0VRVUVOQ0UgYm9keUxpc3QsIFN0cmluZwotIAkJ CQkJCSBzdGF0dXNTdHJpbmcsIE90aGVySW5mbyBvdGhlckluZm8pIHsKLWRpZmYgLXJ1cE4gYWx0 LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9jbW1m L1BLSVN0YXR1c0luZm8uamF2YSBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtpeC9jbW1mL1BLSVN0YXR1c0luZm8uamF2YQotLS0tIGFsdC1qc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BraXgvY21tZi9QS0lT dGF0dXNJbmZvLmphdmEJMjAwNi0wNS0yMyAyMDoxODoxNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBq YXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9j bW1mL1BLSVN0YXR1c0luZm8uamF2YQkyMDExLTA4LTEyIDExOjIxOjI3LjM4OTU5MTAwMCAtMDcw MAotQEAgLTg4LDcgKzg4LDYgQEAgcHVibGljIGNsYXNzIFBLSVN0YXR1c0luZm8gaW1wbGVtZW50 cyBBUwotICAgICAvKioKLSAgICAgICogQ3JlYXRlIGEgUEtJU3RhdHVzSW5mbyB3aXRoIG5vIGZh aWx1cmUgaW5mby4KLSAgICAgICogQHBhcmFtIHN0YXR1cyBBIFBLSVN0YXR1cyBjb25zdGFudC4K LS0gICAgICogQHBhcmFtIGZhaWxJbmZvIFRoZSBiaXR3aXNlIEFORCBvZiB0aGUgUEtJRmFpbHVy ZUluZm8gY29uc3RhbnRzLgotICAgICAgKi8KLSAgICAgcHVibGljIFBLSVN0YXR1c0luZm8oaW50 IHN0YXR1cykgewotICAgICAgICAgdGhpcy5zdGF0dXMgPSBuZXcgSU5URUdFUihzdGF0dXMpOwot ZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2l4L3ByaW1pdGl2ZS9EaXJlY3RvcnlTdHJpbmcuamF2YSBqYXZhLWpzcy00LjIuNi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9wcmltaXRpdmUvRGlyZWN0 b3J5U3RyaW5nLmphdmEKLS0tLSBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2l4L3ByaW1pdGl2ZS9EaXJlY3RvcnlTdHJpbmcuamF2YQkyMDA0LTA0 LTI1IDA4OjAyOjI2LjAwMDAwMDAwMCAtMDcwMAotKysrIGphdmEtanNzLTQuMi42L21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2l4L3ByaW1pdGl2ZS9EaXJlY3RvcnlTdHJp bmcuamF2YQkyMDExLTA4LTEyIDExOjIwOjExLjE5NDY2NzAwMCAtMDcwMAotQEAgLTExNSwxMCAr MTE1LDYgQEAgcHVibGljIGNsYXNzIERpcmVjdG9yeVN0cmluZyBpbXBsZW1lbnRzIAotIAotICAg ICAvKioKLSAgICAgICogQ29udmVydHMgYW4gQVNOLjEgRGlyZWN0b3J5U3RyaW5nIHRvIGEgSmF2 YSBzdHJpbmcuCi0tICAgICAqCi0tICAgICAqIEBwYXJhbSBkaXJzdHIgQW4gQU5ZIGNvbnRhaW5p bmcgYSBCRVItZW5jb2RlZCBEaXJlY3RvcnlTdHJpbmcuCi0tICAgICAqIEBleGNlcHRpb24gSW52 YWxpZEJFUkV4Y2VwdGlvbiBJZiB0aGUgZW5jb2RpbmcgZG9lcyBub3QgY29udGFpbiBhCi0tICAg ICAqICAgICAgdmFsaWQgRGlyZWN0b3J5U3RyaW5nLgotICAgICAgKi8KLSAgICAgcHVibGljIFN0 cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgIHJldHVybiBhc24xU3RyaW5nLnRvU3RyaW5nKCk7 Ci1AQCAtMTc2LDYgKzE3Miw4IEBAIHB1YmxpYyBjbGFzcyBEaXJlY3RvcnlTdHJpbmcgaW1wbGVt ZW50cyAKLSAgICAgICAgIC8qKgotICAgICAgICAgICogQHBhcmFtIGltcGxpY2l0VGFnIDxiPlRo aXMgcGFyYW10ZXIgaXMgaWdub3JlZDwvYj4sIGJlY2F1c2UKLSAgICAgICAgICAqICAgICAgRGly ZWN0b3J5U3RyaW5ncyAoYmVpbmcgQ0hPSUNFcykgY2Fubm90IGhhdmUgaW1wbGljaXQgdGFncy4K LSsgICAgICAgICAqIEBleGNlcHRpb24gSW52YWxpZEJFUkV4Y2VwdGlvbiBJZiB0aGUgZW5jb2Rp bmcgZG9lcyBub3QgY29udGFpbiBhCi0rICAgICAgICAgKiAgICAgIHZhbGlkIERpcmVjdG9yeVN0 cmluZy4KLSAgICAgICAgICAqLwotICAgICAgICAgcHVibGljIEFTTjFWYWx1ZSBkZWNvZGUoVGFn IGltcGxpY2l0VGFnLCBJbnB1dFN0cmVhbSBpc3RyZWFtKQotICAgICAgICAgICAgIHRocm93cyBJ T0V4Y2VwdGlvbiwgSW52YWxpZEJFUkV4Y2VwdGlvbgotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42 L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wcm92aWRlci9qYXZheC9jcnlw dG8vSlNTU2VjcmV0S2V5RmFjdG9yeVNwaS5qYXZhIGphdmEtanNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wcm92aWRlci9qYXZheC9jcnlwdG8vSlNTU2VjcmV0 S2V5RmFjdG9yeVNwaS5qYXZhCi0tLS0gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcHJvdmlkZXIvamF2YXgvY3J5cHRvL0pTU1NlY3JldEtleUZhY3Rv cnlTcGkuamF2YQkyMDAzLTA0LTI4IDE0OjQ4OjMzLjAwMDAwMDAwMCAtMDcwMAotKysrIGphdmEt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wcm92aWRlci9q YXZheC9jcnlwdG8vSlNTU2VjcmV0S2V5RmFjdG9yeVNwaS5qYXZhCTIwMTEtMDgtMTIgMTA6NTg6 MzkuNTg5OTU4MDAwIC0wNzAwCi1AQCAtOTEsMTQgKzkxLDE4IEBAIGNsYXNzIEpTU1NlY3JldEtl eUZhY3RvcnlTcGkgZXh0ZW5kcyBTZWMKLSAgICAgICAgIC8vIHZlcnNpb25zIGlzIHRvIHVzZSB0 aGUgcmVmbGVjdGlvbiBBUEkuCi0gICAgICAgICBDbGFzcyBzcGVjQ2xhc3MgPSBzcGVjLmdldENs YXNzKCk7Ci0gICAgICAgICB0cnkgewotLSAgICAgICAgICAgIE1ldGhvZCBnZXRTYWx0TWV0aG9k ID0gc3BlY0NsYXNzLmdldE1ldGhvZCgiZ2V0U2FsdCIsIG51bGwpOwotKyAgICAgICAgICAgIE1l dGhvZCBnZXRTYWx0TWV0aG9kID0gc3BlY0NsYXNzLmdldE1ldGhvZCgiZ2V0U2FsdCIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGphdmEubGFuZy5DbGFzcykgbnVs bCk7Ci0gICAgICAgICAgICAgTWV0aG9kIGdldEl0ZXJhdGlvbk1ldGhvZCA9Ci0tICAgICAgICAg ICAgICAgIHNwZWNDbGFzcy5nZXRNZXRob2QoImdldEl0ZXJhdGlvbkNvdW50IiwgbnVsbCk7Ci0r ICAgICAgICAgICAgICAgIHNwZWNDbGFzcy5nZXRNZXRob2QoImdldEl0ZXJhdGlvbkNvdW50IiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoamF2YS5sYW5nLkNsYXNzKSBu dWxsKTsKLSAKLS0gICAgICAgICAgICBieXRlW10gc2FsdCA9IChieXRlW10pIGdldFNhbHRNZXRo b2QuaW52b2tlKHNwZWMsIG51bGwpOwotKyAgICAgICAgICAgIGJ5dGVbXSBzYWx0ID0gKGJ5dGVb XSkgZ2V0U2FsdE1ldGhvZC5pbnZva2Uoc3BlYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoamF2YS5sYW5nLkNsYXNzKSBudWxsKTsKLSAgICAgICAgICAgICAKLSAg ICAgICAgICAgICBJbnRlZ2VyIGl0Q291bnRPYmogPQotLSAgICAgICAgICAgICAgICAoSW50ZWdl cikgZ2V0SXRlcmF0aW9uTWV0aG9kLmludm9rZShzcGVjLG51bGwpOwotKyAgICAgICAgICAgICAg ICAoSW50ZWdlcikgZ2V0SXRlcmF0aW9uTWV0aG9kLmludm9rZShzcGVjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoamF2YS5sYW5nLkNsYXNz KSBudWxsKTsKLSAgICAgICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQgPSBpdENvdW50T2JqLmlu dFZhbHVlKCk7Ci0gCi0gICAgICAgICAgICAgUGFzc3dvcmQgcGFzcyA9IG5ldyBQYXNzd29yZChz cGVjLmdldFBhc3N3b3JkKCkpOwotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmphdmEgamF2YS1qc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuamF2 YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3NzbC9TU0xTb2NrZXQuamF2YQkyMDExLTA4LTEwIDE2OjIxOjMwLjQxMjc2NTAwMCAtMDcwMAot KysrIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9z c2wvU1NMU29ja2V0LmphdmEJMjAxMS0wOC0xMiAxMTo0NzozOC4zODUwMjEwMDAgLTA3MDAKLUBA IC0xODIsMTEgKzE4MiwxMSBAQCBwdWJsaWMgY2xhc3MgU1NMU29ja2V0IGV4dGVuZHMgamF2YS5u ZXQuCi0gICAgIH0KLSAKLSAgICAgLyoqCi0tICAgICAqIENyZWF0ZXMgYW4gU1NMIGNsaWVudCBz b2NrZXQgYW5kIGNvbm5lY3RzIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCBhbmQKLSsgICAgICogQ3Jl YXRlcyBhbiBTU0wgY2xpZW50IHNvY2tldCBhbmQgY29ubmVjdHMgdG8gdGhlIHNwZWNpZmllZCBh ZGRyZXNzIGFuZAotICAgICAgKiAgcG9ydC4gQmluZHMgdG8gdGhlIGdpdmVuIGxvY2FsIGFkZHJl c3MgYW5kIHBvcnQuIEluc3RhbGxzIHRoZSBnaXZlbgotICAgICAgKiAgY2FsbGJhY2tzIGZvciBj ZXJ0aWZpY2F0ZSBhcHByb3ZhbCBhbmQgY2xpZW50IGNlcnRpZmljYXRlIHNlbGVjdGlvbi4KLSAg ICAgICoKLS0gICAgICogQHBhcmFtIGhvc3QgVGhlIGhvc3RuYW1lIHRvIGNvbm5lY3QgdG8uCi0r ICAgICAqIEBwYXJhbSBhZGRyZXNzIFRoZSBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8uCi0gICAg ICAqIEBwYXJhbSBwb3J0IFRoZSBwb3J0IHRvIGNvbm5lY3QgdG8uCi0gICAgICAqIEBwYXJhbSBs b2NhbEFkZHIgVGhlIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0by4gSXQgY2FuIGJlIG51bGwsIGlu IHdoaWNoCi0gICAgICAqICAgICAgY2FzZSBhbiB1bnNwZWNpZmllZCBsb2NhbCBhZGRyZXNzIHdp bGwgYmUgY2hvc2VuLgotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9ITUFDVGVzdC5qYXZhIGphdmEtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9ITUFDVGVzdC5qYXZhCi0t LS0gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVz dHMvSE1BQ1Rlc3QuamF2YQkyMDA2LTAyLTIzIDA4OjQ3OjE3LjAwMDAwMDAwMCAtMDgwMAotKysr IGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0 cy9ITUFDVGVzdC5qYXZhCTIwMTEtMDgtMTIgMTM6MTE6MTEuNzkwODA1MDAwIC0wNzAwCi1AQCAt OTYsNyArOTYsNyBAQCBwdWJsaWMgY2xhc3MgSE1BQ1Rlc3QgewotIAotICAgICAvKioKLSAgICAg ICogTWFpbiB0ZXN0IG1ldGhvZC4KLS0gICAgICogQHBhcmFtcyBhcmdzW10KLSsgICAgICogQHBh cmFtIGFyZ3YKLSAgICAgICovCi0gICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBb XWFyZ3YpIHsKLSAKLWRpZmYgLXJ1cE4gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSkNBU3ltS2V5R2VuLmphdmEgamF2YS1qc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL0pDQVN5bUtleUdlbi5q YXZhCi0tLS0gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvdGVzdHMvSkNBU3ltS2V5R2VuLmphdmEJMjAxMS0wOC0xMCAxNjoyMTozMC4zMzc3NjYwMDAg LTA3MDAKLSsrKyBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvdGVzdHMvSkNBU3ltS2V5R2VuLmphdmEJMjAxMS0wOC0xMiAxMTo1Mzo1Ni4xOTI2NDQw MDAgLTA3MDAKLUBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljIGNsYXNzIEpDQVN5bUtleUdlbiB7 Ci0gICAgIH0KLSAgICAgLyoqCi0gICAgICAqIAotLSAgICAgKiBAcGFyYW0ga2V5Ci0tICAgICAq IEBwYXJhbSBrZwotLSAgICAgKiBAcmV0dXJuCi0rICAgICAqIEBwYXJhbSBrZXlUeXBlCi0rICAg ICAqIEBwYXJhbSBwcm92aWRlcgotKyAgICAgKiBAcmV0dXJuIGphdmF4LmNyeXB0by5TZWNyZXRL ZXkga2V5Ci0gICAgICAqLwotICAgICBwdWJsaWMgamF2YXguY3J5cHRvLlNlY3JldEtleSBnZW5T ZWNyZXRLZXkoU3RyaW5nIGtleVR5cGUsIFN0cmluZyBwcm92aWRlcil7Ci0gICAgICAgICBqYXZh eC5jcnlwdG8uU2VjcmV0S2V5IGtleSA9IG51bGw7Ci1AQCAtMTU1LDcgKzE1NSw3IEBAIHB1Ymxp YyBjbGFzcyBKQ0FTeW1LZXlHZW4gewotICAgICAgKiAKLSAgICAgICogQHBhcmFtIGtleVR5cGUg Ci0gICAgICAqIEBwYXJhbSBwcm92aWRlciAKLS0gICAgICogQHJldHVybiAKLSsgICAgICogQHJl dHVybiBqYXZheC5jcnlwdG8uU2VjcmV0S2V5IGtleQotICAgICAgKi8KLSAgICAgcHVibGljIGph dmF4LmNyeXB0by5TZWNyZXRLZXkgZ2VuUEJFU2VjcmV0S2V5KFN0cmluZyBrZXlUeXBlLAotICAg ICAgICAgICAgIFN0cmluZyBwcm92aWRlcil7Ci1AQCAtMTk3LDggKzE5NywxMCBAQCBwdWJsaWMg Y2xhc3MgSkNBU3ltS2V5R2VuIHsKLSAgICAgLyoqCi0gICAgICAqCi0gICAgICAqIEBwYXJhbSBz S2V5Ci0tICAgICAqIEBwYXJhbSBBbGdUeXBlCi0tICAgICAqIEBwYXJhbSBwcm92aWRlcgotKyAg ICAgKiBAcGFyYW0gYWxnRmFtaWx5Ci0rICAgICAqIEBwYXJhbSBhbGdUeXBlCi0rICAgICAqIEBw YXJhbSBwcm92aWRlckZvckVuY3J5cHQKLSsgICAgICogQHBhcmFtIHByb3ZpZGVyRm9yRGVjcnlw dAotICAgICAgKi8KLSAgICAgcHVibGljIHZvaWQgdGVzdENpcGhlcihqYXZheC5jcnlwdG8uU2Vj cmV0S2V5IHNLZXksIFN0cmluZyBhbGdGYW1pbHksCi0gICAgICAgICAgICAgU3RyaW5nIGFsZ1R5 cGUsIFN0cmluZyBwcm92aWRlckZvckVuY3J5cHQsIFN0cmluZyBwcm92aWRlckZvckRlY3J5cHQp Ci1AQCAtMzA0LDggKzMwNiwxMCBAQCBwdWJsaWMgY2xhc3MgSkNBU3ltS2V5R2VuIHsKLSAgICAg LyoqCi0gICAgICAqCi0gICAgICAqIEBwYXJhbSBzS2V5Ci0tICAgICAqIEBwYXJhbSBBbGdUeXBl Ci0tICAgICAqIEBwYXJhbSBwcm92aWRlcgotKyAgICAgKiBAcGFyYW0gYWxnRmFtaWx5Ci0rICAg ICAqIEBwYXJhbSBhbGdUeXBlCi0rICAgICAqIEBwYXJhbSBwcm92aWRlckZvckVuY3J5cHQKLSsg ICAgICogQHBhcmFtIHByb3ZpZGVyRm9yRGVjcnlwdAotICAgICAgKi8KLSAgICAgcHVibGljIHZv aWQgdGVzdE11bHRpUGFydENpcGhlcihqYXZheC5jcnlwdG8uU2VjcmV0S2V5IHNLZXksIFN0cmlu ZyBhbGdGYW1pbHksCi0gICAgICAgICAgICAgU3RyaW5nIGFsZ1R5cGUsIFN0cmluZyBwcm92aWRl ckZvckVuY3J5cHQsIFN0cmluZyBwcm92aWRlckZvckRlY3J5cHQpCi1kaWZmIC1ydXBOIGFsdC1q c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL0pTU0Vf U1NMQ2xpZW50LmphdmEgamF2YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3Rlc3RzL0pTU0VfU1NMQ2xpZW50LmphdmEKLS0tLSBhbHQtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9KU1NFX1NTTENsaWVudC5q YXZhCTIwMDctMTEtMTUgMTM6MzA6MTkuMDAwMDAwMDAwIC0wODAwCi0rKysgamF2YS1qc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL0pTU0VfU1NMQ2xp ZW50LmphdmEJMjAxMS0wOC0xMiAxMjo1NjoxNS40ODA3MDEwMDAgLTA3MDAKLUBAIC03OCw3ICs3 OCw3IEBAIHB1YmxpYyBjbGFzcyBKU1NFX1NTTENsaWVudCB7Ci0gICAgIAotICAgICAvKioKLSAg ICAgICogU2V0IHRoZSBwcm90b2NvbCB0eXBlIGFuZCByZXZpc2lvbgotLSAgICAgKiBAcGFyYW0g U3RyaW5nIHNzbFJldmlzaW9uCi0rICAgICAqIEBwYXJhbSBmU3NsUmV2aXNpb24KLSAgICAgICov Ci0gICAgIHB1YmxpYyB2b2lkIHNldFNzbFJldmlzaW9uKFN0cmluZyBmU3NsUmV2aXNpb24pIHsK LSAgICAgICAgIAotQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljIGNsYXNzIEpTU0VfU1NMQ2xpZW50 IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBTZXQgdGhlIGhvc3QgbmFtZSB0byBjb25uZWN0 IHRvLgotLSAgICAgKiBAcGFyYW0gU3RyaW5nIGhvc3RuYW1lCi0rICAgICAqIEBwYXJhbSBmSG9z dAotICAgICAgKi8KLSAgICAgcHVibGljIHZvaWQgc2V0SG9zdChTdHJpbmcgZkhvc3QpIHsKLSAg ICAgICAgIHRoaXMuaG9zdCA9IGZIb3N0OwotQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljIGNsYXNz IEpTU0VfU1NMQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBTZXQgdGhlIHBvcnQg bnVtYmVyIHRvIGNvbm5lY3QgdG8uCi0tICAgICAqIEBwYXJhbSBpbnQgcG9ydG51bWJlcgotKyAg ICAgKiBAcGFyYW0gZlBvcnQKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHNldFBvcnQoaW50 IGZQb3J0KSB7Ci0gICAgICAgICB0aGlzLnBvcnQgPSBmUG9ydDsKLUBAIC0xMDcsNyArMTA3LDcg QEAgcHVibGljIGNsYXNzIEpTU0VfU1NMQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAg KiBTZXQgdGhlIGNpcGhlciBzdWl0ZSBuYW1lIHRvIHVzZS4KLS0gICAgICogQHBhcmFtIFN0cmlu ZyBjaXBoZXJTdWl0ZU5hbWUKLSsgICAgICogQHBhcmFtIGZDaXBoZXJTdWl0ZQotICAgICAgKi8K LSAgICAgcHVibGljIHZvaWQgc2V0Q2lwaGVyU3VpdGUoU3RyaW5nIGZDaXBoZXJTdWl0ZSkgewot ICAgICAgICAgdGhpcy5jaXBoZXJOYW1lID0gZkNpcGhlclN1aXRlOwotQEAgLTExNSw3ICsxMTUs NyBAQCBwdWJsaWMgY2xhc3MgSlNTRV9TU0xDbGllbnQgewotICAgICAKLSAgICAgLyoqCi0gICAg ICAqIFNldCB0aGUgbG9jYXRpb24gb2YgcnNhLnBmeAotLSAgICAgKiBAcGFyYW0gU3RyaW5nIGZL ZXlzdG9yZUxvYwotKyAgICAgKiBAcGFyYW0gZktleXN0b3JlTG9jCi0gICAgICAqLwotICAgICBw dWJsaWMgdm9pZCBzZXRLZXlzdG9yZUxvYyhTdHJpbmcgZktleXN0b3JlTG9jKSB7Ci0gICAgICAg ICBrZXlzdG9yZUxvYyA9IGZLZXlzdG9yZUxvYyArICIvIiArIGtleXN0b3JlTG9jOwotZGlmZiAt cnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90 ZXN0cy9KU1NFX1NTTFNlcnZlci5qYXZhIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9KU1NFX1NTTFNlcnZlci5qYXZhCi0tLS0gYWx0LWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTRV9T U0xTZXJ2ZXIuamF2YQkyMDA3LTExLTE1IDEzOjMwOjE5LjAwMDAwMDAwMCAtMDgwMAotKysrIGph dmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9K U1NFX1NTTFNlcnZlci5qYXZhCTIwMTEtMDgtMTIgMTI6NTc6MTguOTg3NjM3MDAwIC0wNzAwCi1A QCAtNzUsNyArNzUsNyBAQCBwdWJsaWMgY2xhc3MgSlNTRV9TU0xTZXJ2ZXIgewotICAgICAKLSAg ICAgICAgLyoqCi0gICAgICAqIFNldCB0aGUgcHJvdmlkZXIgdG8gdXNlLgotLSAgICAgKiBAcGFy YW0gU3RyaW5nIHAKLSsgICAgICogQHBhcmFtIHAKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lk IHNldFByb3ZpZGVyKFN0cmluZyBwKSB7Ci0gICAgICAgICBwcm92aWRlciA9IHA7Ci1AQCAtOTAs NyArOTAsNyBAQCBwdWJsaWMgY2xhc3MgSlNTRV9TU0xTZXJ2ZXIgewotICAgICB9Ci0gICAgIC8q KgotICAgICAgKiBTZXQgdGhlIGxvY2F0aW9uIG9mIGtleXN0b3JlIGZpbGUuCi0tICAgICAqIEBw YXJhbSBTdHJpbmcgZmNvbmZpZ0RpcgotKyAgICAgKiBAcGFyYW0gZmNvbmZpZ0RpcgotICAgICAg Ki8KLSAgICAgcHVibGljIHZvaWQgc2V0S2V5c3RvcmUoU3RyaW5nIGZjb25maWdEaXIpIHsKLSAg ICAgICAgIGNvbmZpZ0RpciA9IGZjb25maWdEaXI7Ci1AQCAtMTE3LDcgKzExNyw3IEBAIHB1Ymxp YyBjbGFzcyBKU1NFX1NTTFNlcnZlciB7Ci0gICAgIAotICAgICAvKioKLSAgICAgICogU3RhcnQg U1NMU2VydmVyIGFuZCBhY2NlcHQgY29ubmVjdGlvbnMuCi0tICAgICAqIEBwYXJhbSBhcmdzW10K LSsgICAgICogQHBhcmFtIGFyZ3MKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHN0YXJ0U1NM U2VydmVyKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgU3RyaW5n IGNvbmZpZ0RpciA9ICIiOwotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9KU1NfRmlsZVVwbG9hZENsaWVudC5qYXZhIGph dmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9K U1NfRmlsZVVwbG9hZENsaWVudC5qYXZhCi0tLS0gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTX0ZpbGVVcGxvYWRDbGllbnQuamF2YQky MDA1LTA4LTExIDExOjI4OjU5LjAwMDAwMDAwMCAtMDcwMAotKysrIGphdmEtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9KU1NfRmlsZVVwbG9hZENs aWVudC5qYXZhCTIwMTEtMDgtMTIgMTI6NTA6NDUuOTQ2MjM5MDAwIC0wNzAwCi1AQCAtNzksNyAr NzksNyBAQCBwdWJsaWMgY2xhc3MgSlNTX0ZpbGVVcGxvYWRDbGllbnQgewotICAgICAvKioKLSAg ICAgICogSW5pdGlhbGl6ZSB0aGUgZGVzaXJlZCBjaXBoZXIgdG8gYmUgc2V0Ci0gICAgICAqIG9u IHRoZSBzb2NrZXQuCi0tICAgICAqIEBwYXJhbSBpbnQgQ2lwaGVyCi0rICAgICAqIEBwYXJhbSBh Q2lwaGVyCi0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRDaXBoZXIoaW50IGFDaXBoZXIp IHsKLSAgICAgICAgIGZDaXBoZXIgPSBhQ2lwaGVyOwotQEAgLTg3LDcgKzg3LDcgQEAgcHVibGlj IGNsYXNzIEpTU19GaWxlVXBsb2FkQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBJ bml0aWFsaXplIHRoZSBob3N0bmFtZSB0byBydW4gdGhlIHNlcnZlcgotLSAgICAgKiBAcGFyYW0g U3RyaW5nIFNlcnZlck5hbWUKLSsgICAgICogQHBhcmFtIGFIb3N0TmFtZQotICAgICAgKi8KLSAg ICAgcHVibGljIHZvaWQgc2V0SG9zdE5hbWUoU3RyaW5nIGFIb3N0TmFtZSkgewotICAgICAgICAg c2VydmVySG9zdCA9IGFIb3N0TmFtZTsKLUBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYyBjbGFzcyBK U1NfRmlsZVVwbG9hZENsaWVudCB7Ci0gICAgIAotICAgICAvKioKLSAgICAgICogSW5pdGlhbGl6 ZSB0aGUgcG9ydCB0byBydW4gdGhlIHNlcnZlcgotLSAgICAgKiBAcGFyYW0gaW50IHBvcnQKLSsg ICAgICogQHBhcmFtIGFQb3J0Ci0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0KGlu dCBhUG9ydCkgewotICAgICAgICAgcG9ydCA9IGFQb3J0OwotQEAgLTEwMyw3ICsxMDMsNyBAQCBw dWJsaWMgY2xhc3MgSlNTX0ZpbGVVcGxvYWRDbGllbnQgewotICAgICAKLSAgICAgLyoqCi0gICAg ICAqIEluaXRpYWxpemUgdGhlIHBhc3N3b3JkcyBmaWxlIG5hbWUKLS0gICAgICogQHBhcmFtIFN0 cmluZyBwYXNzd29yZHMKLSsgICAgICogQHBhcmFtIGFQYXNzd29yZEZpbGUKLSAgICAgICovCi0g ICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkRmlsZShTdHJpbmcgYVBhc3N3b3JkRmlsZSkgewot ICAgICAgICAgZlBhc3N3b3JkRmlsZSA9IGFQYXNzd29yZEZpbGU7Ci1AQCAtMTExLDcgKzExMSw3 IEBAIHB1YmxpYyBjbGFzcyBKU1NfRmlsZVVwbG9hZENsaWVudCB7Ci0gICAgIAotICAgICAvKioK LSAgICAgICogSW5pdGlhbGl6ZSB0aGUgY2VydCBkYiBwYXRoIG5hbWUKLS0gICAgICogQHBhcmFt IFN0cmluZyBDZXJ0RGJQYXRoCi0rICAgICAqIEBwYXJhbSBhQ2VydERiUGF0aAotICAgICAgKi8K LSAgICAgcHVibGljIHZvaWQgc2V0Q2VydERiUGF0aChTdHJpbmcgYUNlcnREYlBhdGgpIHsKLSAg ICAgICAgIGZDZXJ0RGJQYXRoID0gYUNlcnREYlBhdGg7Ci1AQCAtMTIwLDcgKzEyMCw3IEBAIHB1 YmxpYyBjbGFzcyBKU1NfRmlsZVVwbG9hZENsaWVudCB7Ci0gICAgIC8qKgotICAgICAgKiBJbml0 aWFsaXplIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvCi0gICAgICAqIGJlIHVzZWQgZm9yIHRlc3Rp bmcgYWxvbmcgd2l0aCBmdWxsIHBhdGguCi0tICAgICAqIEBwYXJhbSBTdHJpbmcgVXBsb2FkRmls ZQotKyAgICAgKiBAcGFyYW0gYVVwbG9hZEZpbGUKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lk IHNldFVwbG9hZEZpbGUoU3RyaW5nIGFVcGxvYWRGaWxlKSB7Ci0gICAgICAgICBmVXBsb2FkRmls ZSA9IGFVcGxvYWRGaWxlOwotQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWMgY2xhc3MgSlNTX0Zp bGVVcGxvYWRDbGllbnQgewotICAgICAKLSAgICAgLyoqCi0gICAgICAqIEVuYWJsZS9kaXNhYmxl IFRlc3QgQ2VydCBDYWxsYmFjay4KLS0gICAgICogQHBhcmFtIGJvb2xlYW4KLSsgICAgICogQHBh cmFtIGFUZXN0Q2VydENhbGxiYWNrCi0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0 Q2VydENhbGxiYWNrKGJvb2xlYW4gYVRlc3RDZXJ0Q2FsbGJhY2spIHsKLSAgICAgICAgIFRlc3RD ZXJ0Q2FsbEJhY2sgPSBhVGVzdENlcnRDYWxsYmFjazsKLUBAIC0xMzYsNyArMTM2LDcgQEAgcHVi bGljIGNsYXNzIEpTU19GaWxlVXBsb2FkQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAg KiBTZXQgY2xpZW50IGNlcnRpZmljYXRlCi0tICAgICAqIEBwYXJhbSBTdHJpbmcgQ2VydGlmaWNh dGUgTmljayBOYW1lCi0rICAgICAqIEBwYXJhbSBhQ2xpZW50Q2VydE5pY2sgQ2VydGlmaWNhdGUg TmljayBOYW1lCi0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDZXJ0TmljayhT dHJpbmcgYUNsaWVudENlcnROaWNrKSB7Ci0gICAgICAgICBjbGllbnRDZXJ0TmljayA9IGFDbGll bnRDZXJ0TmljazsKLUBAIC0xNzAsNyArMTcwLDcgQEAgcHVibGljIGNsYXNzIEpTU19GaWxlVXBs b2FkQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBTZXQgRU9GIGZvciBjbG9zaW5u ZyBzZXJ2ZXIgc29ja2V0Ci0tICAgICAqIEBwYXJhbSBudWxsIGZvciBjbG9zaW5nIHNlcnZlciBz b2NrZXQKLSsgICAgICogQHBhcmFtIGZFb2YgbnVsbCBmb3IgY2xvc2luZyBzZXJ2ZXIgc29ja2V0 Ci0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRFT0YoU3RyaW5nIGZFb2YpIHsKLSAgICAg ICAgIHRoaXMuRU9GID0gZkVvZjsKLWRpZmYgLXJ1cE4gYWx0LWpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTX1NTTENsaWVudC5qYXZhIGphdmEt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9KU1Nf U1NMQ2xpZW50LmphdmEKLS0tLSBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy90ZXN0cy9KU1NfU1NMQ2xpZW50LmphdmEJMjAwNy0wOC0yMCAxNzowNzo1 OC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBqYXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTX1NTTENsaWVudC5qYXZhCTIwMTEtMDgtMTIgMTI6 NTQ6NDYuOTc4Nzg5MDAwIC0wNzAwCi1AQCAtOTksNyArOTksNyBAQCBwdWJsaWMgY2xhc3MgSlNT X1NTTENsaWVudCB7Ci0gICAgIC8qKgotICAgICAgKiBJbml0aWFsaXplIHRoZSBkZXNpcmVkIGNp cGhlciB0byBiZSBzZXQKLSAgICAgICogb24gdGhlIHNvY2tldC4KLS0gICAgICogQHBhcmFtIGlu dCBDaXBoZXIKLSsgICAgICogQHBhcmFtIGFDaXBoZXIKLSAgICAgICovCi0gICAgIHB1YmxpYyB2 b2lkIHNldENpcGhlcihpbnQgYUNpcGhlcikgewotICAgICAgICAgZkNpcGhlciA9IGFDaXBoZXI7 Ci1AQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYyBjbGFzcyBKU1NfU1NMQ2xpZW50IHsKLSAgICAg Ci0gICAgIC8qKgotICAgICAgKiBJbml0aWFsaXplIHRoZSBob3N0bmFtZSB0byBydW4gdGhlIHNl cnZlcgotLSAgICAgKiBAcGFyYW0gU3RyaW5nIFNlcnZlck5hbWUKLSsgICAgICogQHBhcmFtIGFI b3N0TmFtZQotICAgICAgKi8KLSAgICAgcHVibGljIHZvaWQgc2V0SG9zdE5hbWUoU3RyaW5nIGFI b3N0TmFtZSkgewotICAgICAgICAgc2VydmVySG9zdCA9IGFIb3N0TmFtZTsKLUBAIC0xMTUsNyAr MTE1LDcgQEAgcHVibGljIGNsYXNzIEpTU19TU0xDbGllbnQgewotICAgICAKLSAgICAgLyoqCi0g ICAgICAqIEluaXRpYWxpemUgdGhlIHBvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIKLS0gICAgICogQHBh cmFtIGludCBwb3J0Ci0rICAgICAqIEBwYXJhbSBhUG9ydAotICAgICAgKi8KLSAgICAgcHVibGlj IHZvaWQgc2V0UG9ydChpbnQgYVBvcnQpIHsKLSAgICAgICAgIHBvcnQgPSBhUG9ydDsKLUBAIC0x MjMsNyArMTIzLDcgQEAgcHVibGljIGNsYXNzIEpTU19TU0xDbGllbnQgewotICAgICAKLSAgICAg LyoqCi0gICAgICAqIEluaXRpYWxpemUgdGhlIHBhc3N3b3JkcyBmaWxlIG5hbWUKLS0gICAgICog QHBhcmFtIFN0cmluZyBwYXNzd29yZHMKLSsgICAgICogQHBhcmFtIGFQYXNzd29yZEZpbGUKLSAg ICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkRmlsZShTdHJpbmcgYVBhc3N3b3Jk RmlsZSkgewotICAgICAgICAgZlBhc3N3b3JkRmlsZSA9IGFQYXNzd29yZEZpbGU7Ci1AQCAtMTMx LDcgKzEzMSw3IEBAIHB1YmxpYyBjbGFzcyBKU1NfU1NMQ2xpZW50IHsKLSAgICAgCi0gICAgIC8q KgotICAgICAgKiBJbml0aWFsaXplIHRoZSBjZXJ0IGRiIHBhdGggbmFtZQotLSAgICAgKiBAcGFy YW0gU3RyaW5nIENlcnREYlBhdGgKLSsgICAgICogQHBhcmFtIGFDZXJ0RGJQYXRoCi0gICAgICAq LwotICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2VydERiUGF0aChTdHJpbmcgYUNlcnREYlBh dGgpIHsKLSAgICAgICAgIGZDZXJ0RGJQYXRoID0gYUNlcnREYlBhdGg7Ci1AQCAtMTQ3LDcgKzE0 Nyw3IEBAIHB1YmxpYyBjbGFzcyBKU1NfU1NMQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAg ICAgKiBFbmFibGUvZGlzYWJsZSBUZXN0IENlcnQgQ2FsbGJhY2suCi0tICAgICAqIEBwYXJhbSBi b29sZWFuCi0rICAgICAqIEBwYXJhbSBieXBhc3MKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lk IHNldEJ5cGFzcyhib29sZWFuIGJ5cGFzcykgewotICAgICAgICAgdGVzdEJ5cGFzcyA9IGJ5cGFz czsKLUBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljIGNsYXNzIEpTU19TU0xDbGllbnQgewotIAot ICAgICAvKioKLSAgICAgICogRW5hYmxlL2Rpc2FibGUgVGVzdCBDZXJ0IENhbGxiYWNrLgotLSAg ICAgKiBAcGFyYW0gYm9vbGVhbgotKyAgICAgKiBAcGFyYW0gYVRlc3RDZXJ0Q2FsbGJhY2sKLSAg ICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDZXJ0Q2FsbGJhY2soYm9vbGVhbiBhVGVz dENlcnRDYWxsYmFjaykgewotICAgICAgICAgVGVzdENlcnRDYWxsQmFjayA9IGFUZXN0Q2VydENh bGxiYWNrOwotQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWMgY2xhc3MgSlNTX1NTTENsaWVudCB7 Ci0gICAgIAotICAgICAvKioKLSAgICAgICogU2V0IGNsaWVudCBjZXJ0aWZpY2F0ZQotLSAgICAg KiBAcGFyYW0gU3RyaW5nIENlcnRpZmljYXRlIE5pY2sgTmFtZQotKyAgICAgKiBAcGFyYW0gYUNs aWVudENlcnROaWNrIENlcnRpZmljYXRlIE5pY2sgTmFtZQotICAgICAgKi8KLSAgICAgcHVibGlj IHZvaWQgc2V0Q2xpZW50Q2VydE5pY2soU3RyaW5nIGFDbGllbnRDZXJ0TmljaykgewotICAgICAg ICAgY2xpZW50Q2VydE5pY2sgPSBhQ2xpZW50Q2VydE5pY2s7Ci1AQCAtMTk3LDcgKzE5Nyw3IEBA IHB1YmxpYyBjbGFzcyBKU1NfU1NMQ2xpZW50IHsKLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBT ZXQgRU9GIGZvciBjbG9zaW5uZyBzZXJ2ZXIgc29ja2V0Ci0tICAgICAqIEBwYXJhbSBudWxsIGZv ciBjbG9zaW5nIHNlcnZlciBzb2NrZXQKLSsgICAgICogQHBhcmFtIGZFb2YgbnVsbCBmb3IgY2xv c2luZyBzZXJ2ZXIgc29ja2V0Ci0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRFT0YoU3Ry aW5nIGZFb2YpIHsKLSAgICAgICAgIHRoaXMuRU9GID0gZkVvZjsKLWRpZmYgLXJ1cE4gYWx0LWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTX1Nl bGZTZXJ2Q2xpZW50LmphdmEgamF2YS1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3Rlc3RzL0pTU19TZWxmU2VydkNsaWVudC5qYXZhCi0tLS0gYWx0LWpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvSlNTX1NlbGZT ZXJ2Q2xpZW50LmphdmEJMjAwNy0xMS0xNSAxMzozMDoxOS4wMDAwMDAwMDAgLTA4MDAKLSsrKyBq YXZhLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMv SlNTX1NlbGZTZXJ2Q2xpZW50LmphdmEJMjAxMS0wOC0xMiAxMjo1Mjo0My42NDQ5MTMwMDAgLTA3 MDAKLUBAIC0zMjYsNyArMzI2LDcgQEAgcHVibGljIGNsYXNzIEpTU19TZWxmU2VydkNsaWVudCBp bXBsZW1lbgotICAgICAvKioKLSAgICAgICogSW5pdGlhbGl6ZSB0aGUgZGVzaXJlZCBjaXBoZXJz dWl0ZSB0byBiZSBzZXQKLSAgICAgICogb24gdGhlIHNvY2tldC4KLS0gICAgICogQHBhcmFtIGlu dCBDaXBoZXIKLSsgICAgICogQHBhcmFtIGFDaXBoZXIKLSAgICAgICovCi0gICAgIHB1YmxpYyB2 b2lkIHNldENpcGhlcihpbnQgYUNpcGhlcikgewotICAgICAgICAgCi1AQCAtMzc4LDcgKzM3OCw3 IEBAIHB1YmxpYyBjbGFzcyBKU1NfU2VsZlNlcnZDbGllbnQgaW1wbGVtZW4KLSAgICAgCi0gICAg IC8qKgotICAgICAgKiBJbml0aWFsaXplIHRoZSBob3N0bmFtZSB0byBydW4gdGhlIHNlcnZlcgot LSAgICAgKiBAcGFyYW0gU3RyaW5nIFNlcnZlck5hbWUKLSsgICAgICogQHBhcmFtIGFIb3N0TmFt ZQotICAgICAgKi8KLSAgICAgcHVibGljIHZvaWQgc2V0SG9zdE5hbWUoU3RyaW5nIGFIb3N0TmFt ZSkgewotICAgICAgICAgc2VydmVySG9zdCA9IGFIb3N0TmFtZTsKLUBAIC0zODYsNyArMzg2LDcg QEAgcHVibGljIGNsYXNzIEpTU19TZWxmU2VydkNsaWVudCBpbXBsZW1lbgotICAgICAKLSAgICAg LyoqCi0gICAgICAqIEluaXRpYWxpemUgdGhlIHBvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIKLS0gICAg ICogQHBhcmFtIGludCBwb3J0Ci0rICAgICAqIEBwYXJhbSBhUG9ydAotICAgICAgKi8KLSAgICAg cHVibGljIHZvaWQgc2V0UG9ydChpbnQgYVBvcnQpIHsKLSAgICAgICAgIHBvcnQgPSBhUG9ydDsK LUBAIC0zOTQsNyArMzk0LDcgQEAgcHVibGljIGNsYXNzIEpTU19TZWxmU2VydkNsaWVudCBpbXBs ZW1lbgotICAgICAKLSAgICAgLyoqCi0gICAgICAqIEluaXRpYWxpemUgdGhlIHBhc3N3b3JkcyBm aWxlIG5hbWUKLS0gICAgICogQHBhcmFtIFN0cmluZyBwYXNzd29yZHMKLSsgICAgICogQHBhcmFt IGFQYXNzd29yZEZpbGUKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkRmls ZShTdHJpbmcgYVBhc3N3b3JkRmlsZSkgewotICAgICAgICAgZlBhc3N3b3JkRmlsZSA9IGFQYXNz d29yZEZpbGU7Ci1AQCAtNDAyLDcgKzQwMiw3IEBAIHB1YmxpYyBjbGFzcyBKU1NfU2VsZlNlcnZD bGllbnQgaW1wbGVtZW4KLSAgICAgCi0gICAgIC8qKgotICAgICAgKiBJbml0aWFsaXplIHRoZSBj ZXJ0IGRiIHBhdGggbmFtZQotLSAgICAgKiBAcGFyYW0gU3RyaW5nIENlcnREYlBhdGgKLSsgICAg ICogQHBhcmFtIGFDZXJ0RGJQYXRoCi0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRDZXJ0 RGJQYXRoKFN0cmluZyBhQ2VydERiUGF0aCkgewotICAgICAgICAgZkNlcnREYlBhdGggPSBhQ2Vy dERiUGF0aDsKLUBAIC00MTAsNyArNDEwLDcgQEAgcHVibGljIGNsYXNzIEpTU19TZWxmU2VydkNs aWVudCBpbXBsZW1lbgotICAgICAKLSAgICAgLyoqCi0gICAgICAqIEVuYWJsZS9kaXNhYmxlIFRl c3QgQ2VydCBDYWxsYmFjay4KLS0gICAgICogQHBhcmFtIGJvb2xlYW4KLSsgICAgICogQHBhcmFt IGFUZXN0Q2VydENhbGxiYWNrCi0gICAgICAqLwotICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q2Vy dENhbGxiYWNrKGJvb2xlYW4gYVRlc3RDZXJ0Q2FsbGJhY2spIHsKLSAgICAgICAgIFRlc3RDZXJ0 Q2FsbEJhY2sgPSBhVGVzdENlcnRDYWxsYmFjazsKLUBAIC00MTgsNyArNDE4LDcgQEAgcHVibGlj IGNsYXNzIEpTU19TZWxmU2VydkNsaWVudCBpbXBsZW1lbgotICAgICAKLSAgICAgLyoqCi0gICAg ICAqIFNldCBjbGllbnQgY2VydGlmaWNhdGUKLS0gICAgICogQHBhcmFtIFN0cmluZyBDZXJ0aWZp Y2F0ZSBOaWNrIE5hbWUKLSsgICAgICogQHBhcmFtIGFDbGllbnRDZXJ0TmljayBDZXJ0aWZpY2F0 ZSBOaWNrIE5hbWUKLSAgICAgICovCi0gICAgIHB1YmxpYyB2b2lkIHNldENsaWVudENlcnROaWNr KFN0cmluZyBhQ2xpZW50Q2VydE5pY2spIHsKLSAgICAgICAgIGNsaWVudENlcnROaWNrID0gYUNs aWVudENlcnROaWNrOwotZGlmZiAtcnVwTiBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9TU0xDbGllbnRBdXRoLmphdmEgamF2YS1qc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL1NTTENsaWVudEF1 dGguamF2YQotLS0tIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3Rlc3RzL1NTTENsaWVudEF1dGguamF2YQkyMDA3LTA4LTIzIDE2OjIxOjEzLjAwMDAw MDAwMCAtMDcwMAotKysrIGphdmEtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy90ZXN0cy9TU0xDbGllbnRBdXRoLmphdmEJMjAxMS0wOC0xMiAxMjo1ODoyNy45 MjU1NjkwMDAgLTA3MDAKLUBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYyBjbGFzcyBTU0xDbGllbnRB dXRoIGltcGxlbWVudHMgUnUKLSAgICAgICogQHBhcmFtIHJhbmQKLSAgICAgICogQHBhcmFtIGV4 dGVuc2lvbnMKLSAgICAgICogQHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0tICAgICAqIEBy ZXR1cm4KLSsgICAgICogQHJldHVybiBDZXJ0aWZpY2F0ZQotICAgICAgKi8KLSAgICAgcHVibGlj IHN0YXRpYyBDZXJ0aWZpY2F0ZSBtYWtlQ2VydChTdHJpbmcgaXNzdWVyTmFtZSwgU3RyaW5nIHN1 YmplY3ROYW1lLAotICAgICAgICAgICAgIGludCBzZXJpYWxOdW1iZXIsIFByaXZhdGVLZXkgcHJp dktleSwgUHVibGljS2V5IHB1YktleSwgaW50IHJhbmQsCgpkaWZmIC0tZ2l0IGEvanNzLWVsaW1p bmF0ZS1uYXRpdmUtY29tcGlsZXItd2FybmluZ3MucGF0Y2ggYi9qc3MtZWxpbWluYXRlLW5hdGl2 ZS1jb21waWxlci13YXJuaW5ncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZDk4MWViNy4uMDAwMDAwMAotLS0gYS9qc3MtZWxpbWluYXRlLW5hdGl2ZS1jb21waWxlci13YXJu aW5ncy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyMSArMCwwIEBACi1kaWZmIC1ydXBOIHBh dGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9Dcnlw dG9NYW5hZ2VyLmMgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvQ3J5cHRvTWFuYWdlci5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuYwkyMDExLTA4LTEwIDE2OjIx OjMwLjYwOTc2NTAwMCAtMDcwMAotKysrIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuYwkyMDExLTA4LTExIDE3OjU0OjU3LjI1 NTE3NjAwMCAtMDcwMAotQEAgLTU1LDcgKzU1LDcgQEAKLSAKLSAjaW5jbHVkZSAicGsxMXV0aWwu aCIKLSAKLS0jaWYgZGVmaW5lZChBSVgpIHx8IGRlZmluZWQoSFBVWCkgfHwgZGVmaW5lZChMSU5V WCkKLSsjaWYgZGVmaW5lZChBSVgpIHx8IGRlZmluZWQoSFBVWCkKLSAjaW5jbHVkZSA8c2lnbmFs Lmg+Ci0gI2VuZGlmCi0gCi1AQCAtOTAsMTEgKzkwLDExIEBAIGNvbnN0IGNoYXIgKiBqc3Nfc2Nj c2lkKCkgewotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSAKLSAvKiBKU1NfVkVSU0lPTiBmcm9tICBtb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3N2ZXIuaCAqLwotLXN0YXRpYyBj b25zdCBjaGFyKiBETExfSlNTX1ZFUlNJT04gICAgID0gIkpTU19WRVJTSU9OID0gIiBKU1NfVkVS U0lPTjsKLStzdGF0aWMgY29uc3QgY2hhciogVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIERMTF9K U1NfVkVSU0lPTiAgICAgPSAiSlNTX1ZFUlNJT04gPSAiIEpTU19WRVJTSU9OOwotIC8qIE5TU19W RVJTSU9OIGZyb20gbW96aWxsYS9zZWN1cml0eS9uc3MvbGliL25zcy9uc3MuaCAqLwotLXN0YXRp YyBjb25zdCBjaGFyKiBETExfTlNTX1ZFUlNJT04gICAgID0gIk5TU19WRVJTSU9OID0gIiBOU1Nf VkVSU0lPTjsKLStzdGF0aWMgY29uc3QgY2hhciogVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIERM TF9OU1NfVkVSU0lPTiAgICAgPSAiTlNTX1ZFUlNJT04gPSAiIE5TU19WRVJTSU9OOwotIC8qIE5T UFJfdmVyc2lvbiBmcm9tIG1vemlsbGEvbnNwcnB1Yi9wci9pbmNsdWRlL3ByaW5pdC5oICovCi0t c3RhdGljIGNvbnN0IGNoYXIqIERMTF9OU1BSX1ZFUlNJT04gICAgPSAiTlNQUl9WRVJTSU9OID0g IiBQUl9WRVJTSU9OOwotK3N0YXRpYyBjb25zdCBjaGFyKiBWQVJJQUJMRV9NQVlfTk9UX0JFX1VT RUQgRExMX05TUFJfVkVSU0lPTiAgICA9ICJOU1BSX1ZFUlNJT04gPSAiIFBSX1ZFUlNJT047Ci0g Ci0gCi0gCi1AQCAtMTA2LDEzICsxMDYsMTMgQEAgc3RhdGljIGNoYXIqCi0gZ2V0UFdGcm9tQ2Fs bGJhY2soUEsxMVNsb3RJbmZvICpzbG90LCBQUkJvb2wgcmV0cnksIHZvaWQgKmFyZyk7Ci0gCi0g LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLS0gKiBBSVgsIEhQLCBhbmQgTGludXggc2lnbmFsIGhhbmRsaW5nIG1hZG5lc3MKLSsg KiBBSVggYW5kIEhQIHNpZ25hbCBoYW5kbGluZyBtYWRuZXNzCi0gICoKLSAgKiBJbiBvcmRlciBm b3IgdGhlIEpWTSwga2VybmVsLCBhbmQgTlNQUiB0byB3b3JrIHRvZ2V0aGVyLCB3ZSBzZXR1cAot ICAqIGEgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR0NITEQgdGhhdCBkb2VzIG5vdGhpbmcuICBUaGlz IGlzIG9ubHkgZG9uZQotLSAqIG9uIEFJWCwgSFAsIGFuZCBMaW51eC4KLSsgKiBvbiBBSVggYW5k IEhQLgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotLSNpZiBkZWZpbmVkKEFJWCkgfHwgZGVmaW5lZChIUFVYKSB8fCBkZWZp bmVkKExJTlVYKQotKyNpZiBkZWZpbmVkKEFJWCkgfHwgZGVmaW5lZChIUFVYKQotIAotIHN0YXRp YyBQUlN0YXR1cwotIGhhbmRsZVNpZ0NoaWxkKEpOSUVudiAqZW52KSB7Ci1AQCAtMzMzLDggKzMz Myw2IEBAIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJfaW5pdGkKLSAgICAgICAg IGpib29sZWFuIGluaXRpYWxpemVKYXZhT25seSApCi0gewotICAgICBTRUNTdGF0dXMgcnYgPSBT RUNGYWlsdXJlOwotLSAgICBKYXZhVk0gKlZNc1s1XTsKLS0gICAgamludCBudW1WTXM7Ci0gICAg IGNoYXIgKnN6Q29uZmlnRGlyID0gTlVMTDsKLSAgICAgY2hhciAqc3pDZXJ0UHJlZml4ID0gTlVM TDsKLSAgICAgY2hhciAqc3pLZXlQcmVmaXggPSBOVUxMOwotZGlmZiAtcnVwTiBwYXRjaGVkLWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5j IGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1BLMTFG aW5kZXIuYwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9QSzExRmluZGVyLmMJMjAxMS0wOC0xMCAxNjoyMTozMC44NDk3NjcwMDAgLTA3 MDAKLSsrKyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9QSzExRmluZGVyLmMJMjAxMS0wOC0xMCAxODoyMjozNy44ODcwNzcwMDAgLTA3MDAKLUBAIC0y NjMsNyArMjYzLDcgQEAgSk5JRVhQT1JUIGpvYmplY3QgSk5JQ0FMTAotIEphdmFfb3JnX21vemls bGFfanNzX0NyeXB0b01hbmFnZXJfZmluZFByaXZLZXlCeUNlcnROYXRpdmUKLSAgIChKTklFbnYg KmVudiwgam9iamVjdCB0aGlzLCBqb2JqZWN0IENlcnQpCi0gewotLSAgICBQUlRocmVhZCAqcFRo cmVhZDsKLSsgICAgUFJUaHJlYWQgKiBWQVJJQUJMRV9NQVlfTk9UX0JFX1VTRUQgcFRocmVhZD1O VUxMOwotICAgICBDRVJUQ2VydGlmaWNhdGUgKmNlcnQ7Ci0gICAgIFBLMTFTbG90SW5mbyAqc2xv dDsKLSAgICAgU0VDS0VZUHJpdmF0ZUtleSAqcHJpdktleT1OVUxMOwotQEAgLTQ1OCw3ICs0NTgs NyBAQCBKTklFWFBPUlQgam9iamVjdEFycmF5IEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxhX2pz c19DcnlwdG9NYW5hZ2VyX2J1aWxkQ2VydGlmaWNhdGVDaGFpbk5hdGl2ZQotICAgICAoSk5JRW52 ICplbnYsIGpvYmplY3QgdGhpcywgam9iamVjdCBsZWFmQ2VydCkKLSB7Ci0tICAgIFBSVGhyZWFk ICpwVGhyZWFkOwotKyAgICBQUlRocmVhZCAqIFZBUklBQkxFX01BWV9OT1RfQkVfVVNFRCBwVGhy ZWFkPU5VTEw7Ci0gICAgIENFUlRDZXJ0aWZpY2F0ZSAqbGVhZjsKLSAgICAgam9iamVjdEFycmF5 IGNoYWluQXJyYXk9TlVMTDsKLSAgICAgQ0VSVENlcnREQkhhbmRsZSAqY2VydGRiOwotQEAgLTgx Miw3ICs4MTIsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX2ltcG9yCi0g ICAgIFNFQ0l0ZW0gKmRlckNlcnRzPU5VTEw7Ci0gICAgIGludCBjZXJ0aT0gLTE7Ci0gICAgIFNF Q0l0ZW0gdGhlRGVyQ2VydDsKLS0gICAgaW50IG51bUNlcnRzOwotKyAgICBpbnQgbnVtQ2VydHMg PSAwOwotICAgICBqYnl0ZSAqcGFja2FnZUJ5dGVzPU5VTEw7Ci0gICAgIGpzaXplIHBhY2thZ2VM ZW47Ci0gICAgIFNFQ1N0YXR1cyBzdGF0dXM7Ci1AQCAtMTQ4Niw3ICsxNDg2LDcgQEAgSmF2YV9v cmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl9pbXBvcgotICAgICBDRVJUU2lnbmVkQ3JsICpj cmwgPSBOVUxMOwotICAgICBTRUNJdGVtICpwYWNrYWdlSXRlbSA9IE5VTEw7Ci0gICAgIGludCBz dGF0dXMgPSBTRUNGYWlsdXJlOwotLSAgICBjaGFyICp1cmw7Ci0rICAgIGNoYXIgKnVybCA9IE5V TEw7Ci0gICAgIGNoYXIgKmVycm1zZyA9IE5VTEw7Ci0gCi0gICAgIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUBAIC0xNjUxLDcgKzE2NTEsNyBA QCBKTklFWFBPUlQgamludCBKTklDQUxMCi0gSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFu YWdlcl92ZXJpZnlDZXJ0aWZpY2F0ZU5vd0NVTmF0aXZlKEpOSUVudiAqZW52LAotICAgICAgICAg am9iamVjdCBzZWxmLCBqc3RyaW5nIG5pY2tTdHJpbmcsIGpib29sZWFuIGNoZWNrU2lnKQotIHsK LS0gICAgU0VDU3RhdHVzICAgICAgICAgcnYgICAgPSBTRUNGYWlsdXJlOwotKyAgICBTRUNTdGF0 dXMgVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIHJ2ICAgID0gU0VDRmFpbHVyZTsKLSAgICAgU0VD Q2VydGlmaWNhdGVVc2FnZSAgICAgIGN1cnJVc2FnZSA9IDB4MDAwMDsKLSAKLSAgICAgcnYgPSB2 ZXJpZnlDZXJ0aWZpY2F0ZU5vdyhlbnYsIHNlbGYsIG5pY2tTdHJpbmcsIGNoZWNrU2lnLCAwLCAm Y3VyclVzYWdlKTsKLUBAIC0xNzM2LDcgKzE3MzYsNiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19D cnlwdG9NYW5hZ2VyX3ZlcmlmCi0gICAgIFNFQ1N0YXR1cyAgICAgICAgIHJ2ICAgID0gU0VDRmFp bHVyZTsKLSAgICAgU0VDQ2VydFVzYWdlICAgICAgY2VydFVzYWdlOwotICAgICBTRUNJdGVtICpk ZXJDZXJ0c1syXTsKLS0gICAgU0VDU3RhdHVzIHN0YXR1czsKLSAgICAgQ0VSVENlcnRpZmljYXRl ICoqY2VydEFycmF5ID0gTlVMTDsKLSAgICAgQ0VSVENlcnREQkhhbmRsZSAqY2VydGRiID0gQ0VS VF9HZXREZWZhdWx0Q2VydERCKCk7Ci0gCi1kaWZmIC1ydXBOIHBhdGNoZWQtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9TZWNyZXREZWNvZGVyUmluZy9LZXlN YW5hZ2VyLmMgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvU2VjcmV0RGVjb2RlclJpbmcvS2V5TWFuYWdlci5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1NlY3JldERlY29kZXJSaW5nL0tl eU1hbmFnZXIuYwkyMDAzLTEyLTE5IDExOjM2OjMwLjAwMDAwMDAwMCAtMDgwMAotKysrIGFsdC1q c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1NlY3JldERlY29k ZXJSaW5nL0tleU1hbmFnZXIuYwkyMDExLTA4LTEwIDE2OjU4OjUyLjUyNzUwMTAwMCAtMDcwMAot QEAgLTM1OCw3ICszNTgsNiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19TZWNyZXREZWNvZGVyUmlu Z19LCi0gewotICAgICBQSzExU2xvdEluZm8gKnNsb3QgPSBOVUxMOwotICAgICBQSzExU3ltS2V5 ICpzeW1rID0gTlVMTDsKLS0gICAgU0VDU3RhdHVzIHN0YXR1czsKLSAKLSAgICAgLyogZ2V0IHRo ZSBzbG90ICovCi0gICAgIGlmKCBKU1NfUEsxMV9nZXRUb2tlblNsb3RQdHIoZW52LCB0b2tlbk9i aiwgJnNsb3QpICE9IFBSX1NVQ0NFU1MgKSB7Ci1kaWZmIC1ydXBOIHBhdGNoZWQtanNzLTQuMi42 L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vUFFHUGFyYW1zLmMg YWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRv L1BRR1BhcmFtcy5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL2NyeXB0by9QUUdQYXJhbXMuYwkyMDA0LTA0LTI1IDA4OjAyOjIxLjAw MDAwMDAwMCAtMDcwMAotKysrIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL2NyeXB0by9QUUdQYXJhbXMuYwkyMDExLTA4LTExIDA5OjQwOjM0LjAwMTQy MTAwMCAtMDcwMAotQEAgLTM3MSw3ICszNzEsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19jcnlw dG9fUFFHUGFyYW1zX3BhCi0gICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiBQZXJmb3JtIHRo ZSB2ZXJpZmljYXRpb24uCi0gICAgICAqLwotLSAgICBpZiggUEsxMV9QUUdfVmVyaWZ5UGFyYW1z KHBQYXJhbXMsIHBWZnksICZ2ZXJpZnlSZXN1bHQpICE9IFBSX1NVQ0NFU1MpIHsKLSsgICAgaWYo IFBLMTFfUFFHX1ZlcmlmeVBhcmFtcyhwUGFyYW1zLCBwVmZ5LCAmdmVyaWZ5UmVzdWx0KSAhPSBT RUNTdWNjZXNzKSB7Ci0gICAgICAgICBKU1NfdGhyb3coZW52LCBPVVRfT0ZfTUVNT1JZX0VSUk9S KTsKLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci1kaWZmIC1ydXBOIHBhdGNoZWQtanNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUNl cnQuYyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9w a2NzMTEvUEsxMUNlcnQuYwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUNlcnQuYwkyMDA0LTA0LTI1IDA4OjAyOjIy LjAwMDAwMDAwMCAtMDcwMAotKysrIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExQ2VydC5jCTIwMTEtMDgtMTAgMTg6MzA6MDcuOTQy NjI5MDAwIC0wNzAwCi1AQCAtNjIsNyArNjIsNyBAQAotIEpOSUVYUE9SVCBqYnl0ZUFycmF5IEpO SUNBTEwgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFDZXJ0X2dldEVuY29kZWQKLSAg IChKTklFbnYgKmVudiwgam9iamVjdCB0aGlzKQotIHsKLS0JUFJUaHJlYWQgKnBUaHJlYWQ7Ci0r CVBSVGhyZWFkICogVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIHBUaHJlYWQ7Ci0gCUNFUlRDZXJ0 aWZpY2F0ZSAqY2VydDsKLSAJU0VDSXRlbSAqZGVyQ2VydDsKLSAJamJ5dGVBcnJheSBkZXJBcnJh eT1OVUxMOwotQEAgLTExOCw5ICsxMTgsOSBAQCBmaW5pc2g6Ci0gSk5JRVhQT1JUIGppbnQgSk5J Q0FMTCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUNlcnRfZ2V0VmVyc2lvbgotICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXMpCi0gewotLQlQUlRocmVhZCAqcFRocmVhZDsKLSsJ UFJUaHJlYWQgKiBWQVJJQUJMRV9NQVlfTk9UX0JFX1VTRUQgcFRocmVhZDsKLSAJQ0VSVENlcnRp ZmljYXRlICpjZXJ0OwotLQlsb25nIGxWZXJzaW9uOwotKwlsb25nIGxWZXJzaW9uID0gMDsKLSAK LSAJcFRocmVhZCA9IFBSX0F0dGFjaFRocmVhZChQUl9TWVNURU1fVEhSRUFELCAwLCBOVUxMKTsK LSAJUFJfQVNTRVJUKHBUaHJlYWQgIT0gTlVMTCk7Ci1AQCAtMTY1LDcgKzE2NSw3IEBAIEphdmFf b3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExQ2VydF9nZXQKLSB7Ci0gCUNFUlRDZXJ0aWZpY2F0 ZSAqY2VydDsKLSAJU0VDS0VZUHVibGljS2V5ICpwdWJrPU5VTEw7Ci0tCVBSVGhyZWFkICpwVGhy ZWFkOwotKwlQUlRocmVhZCAqIFZBUklBQkxFX01BWV9OT1RfQkVfVVNFRCBwVGhyZWFkOwotIAlq b2JqZWN0IHB1YktleT1OVUxMOwotIAotIAlQUl9BU1NFUlQoZW52IT1OVUxMICYmIHRoaXMhPU5V TEwpOwotQEAgLTIxMCw3ICsyMTAsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfQ2Vy dFByb3h5X3JlCi0gICAoSk5JRW52ICplbnYsIGpvYmplY3QgdGhpcykKLSB7Ci0gCUNFUlRDZXJ0 aWZpY2F0ZSAqY2VydDsKLS0JUFJUaHJlYWQgKnBUaHJlYWQ7Ci0rCVBSVGhyZWFkICogVkFSSUFC TEVfTUFZX05PVF9CRV9VU0VEIHBUaHJlYWQ7Ci0gCi0gCVBSX0FTU0VSVChlbnYhPU5VTEwgJiYg dGhpcyE9TlVMTCk7Ci0gCi1kaWZmIC1ydXBOIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUNpcGhlci5jIGFsdC1qc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExQ2lwaGVy LmMKLS0tLSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczExL1BLMTFDaXBoZXIuYwkyMDA0LTA0LTI1IDA4OjAyOjIyLjAwMDAwMDAwMCAt MDcwMAotKysrIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3BrY3MxMS9QSzExQ2lwaGVyLmMJMjAxMS0wOC0xMCAxNjo0Mjo0My44MjI0OTQwMDAgLTA3 MDAKLUBAIC03Myw3ICs3Myw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExQ2lw aGVyX2kKLSAgICAgU0VDSXRlbSAqaXY9TlVMTDsKLSAgICAgUEsxMUNvbnRleHQgKmNvbnRleHQ9 TlVMTDsKLSAgICAgQ0tfQVRUUklCVVRFX1RZUEUgb3A7Ci0tICAgIGpvYmplY3QgY29udGV4dE9i ajsKLSsgICAgam9iamVjdCBjb250ZXh0T2JqID0gTlVMTDsKLSAKLSAgICAgUFJfQVNTRVJUKGVu diE9TlVMTCAmJiBjbGF6eiE9TlVMTCAmJiBrZXlPYmohPU5VTEwgJiYgYWxnT2JqIT1OVUxMKTsK LSAKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5R2VuZXJhdG9yLmMgYWx0LWpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlHZW5lcmF0b3Iu YwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMUtleUdlbmVyYXRvci5jCTIwMDUtMTEtMTQgMTQ6MTU6MDYuMDAwMDAw MDAwIC0wODAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFLZXlHZW5lcmF0b3IuYwkyMDExLTA4LTExIDA5OjIzOjAzLjIy MDQ3MDAwMCAtMDcwMAotQEAgLTIwNyw3ICsyMDcsNyBAQCBmaW5pc2g6Ci0gfQotICNlbmRpZgot IAotLXN0YXRpYyB2b2lkCi0rc3RhdGljIHZvaWQgRlVOQ1RJT05fTUFZX05PVF9CRV9VU0VECi0g cHJpbnRfc2VjaXRlbShTRUNJdGVtICppdGVtKSB7Ci0gICAgIGludCBpOwotICAgICBpbnQgb25s aW5lOwotZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWlyR2VuZXJhdG9yLmMgYWx0LWpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWly R2VuZXJhdG9yLmMKLS0tLSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWlyR2VuZXJhdG9yLmMJMjAxMS0wOC0xMCAx NjoyMTozMC4yNzA3NjcwMDAgLTA3MDAKLSsrKyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVBhaXJHZW5lcmF0b3IuYwkyMDEx LTA4LTEwIDE4OjMzOjExLjc3MzQ0NTAwMCAtMDcwMAotQEAgLTQ1MCw3ICs0NTAsNyBAQCBEdW1w SXRlbShTRUNJdGVtICppdGVtKQotICAgZm9yIChpPTA7IGkgPCBpdGVtLT5sZW47IGkrKykgewot ICAgICBwcmludGYoIiAlMDJ4IixkYXRhW2ldKTsKLSAgIH0KLS0gIHByaW50ZigiIDogMHglMDh4 ICVkXG4iLCBkYXRhLCBpdGVtLT5sZW4pOwotKyAgcHJpbnRmKCIgOiAlOHAgJWRcbiIsIGRhdGEs IGl0ZW0tPmxlbik7Ci0gfQotIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1kaWZmIC1ydXBOIHBhdGNoZWQt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsx MUtleVdyYXBwZXIuYyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuYwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIu YwkyMDA2LTAyLTIyIDE3OjIxOjQyLjAwMDAwMDAwMCAtMDgwMAotKysrIGFsdC1qc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBl ci5jCTIwMTEtMDgtMTAgMTY6NTI6MDMuMDUyOTEwMDAwIC0wNzAwCi1AQCAtNTYyLDcgKzU2Miw3 IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAgICAgICAgIGpp bnQga2V5TGVuLCBqYnl0ZUFycmF5IGl2QkEsIGppbnQgdXNhZ2VFbnVtKQotIHsKLSAgICAgUEsx MVN5bUtleSAqc3ltS2V5PU5VTEw7Ci0tICAgIENLX01FQ0hBTklTTV9UWVBFIHdyYXBwaW5nTWVj aCwga2V5VHlwZU1lY2g7Ci0rICAgIENLX01FQ0hBTklTTV9UWVBFIHdyYXBwaW5nTWVjaD0wLCBr ZXlUeXBlTWVjaD0wOwotICAgICBTRUNJdGVtICp3cmFwcGVkS2V5PU5VTEwsICppdj1OVUxMLCAq cGFyYW09TlVMTDsKLSAgICAgam9iamVjdCBrZXlPYmo9TlVMTDsKLSAgICAgU0VDS0VZUHJpdmF0 ZUtleSAqd3JhcHBpbmdLZXk9TlVMTDsKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYvbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExTWVzc2FnZURpZ2Vz dC5jIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3MxMS9QSzExTWVzc2FnZURpZ2VzdC5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExTWVzc2FnZURpZ2VzdC5jCTIw MDQtMDQtMjUgMDg6MDI6MjIuMDAwMDAwMDAwIC0wNzAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNZXNzYWdlRGlnZXN0 LmMJMjAxMS0wOC0xMCAxNjo1Mjo1NC45NTE4NTcwMDAgLTA3MDAKLUBAIC04OCw3ICs4OCw2IEBA IEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExTWVzc2FnZUQKLSAgICAgUEsxMUNvbnRl eHQgKmNvbnRleHQgPSBOVUxMOwotICAgICBDS19NRUNIQU5JU01fVFlQRSBtZWNoOwotICAgICBT RUNJdGVtIHBhcmFtOwotLSAgICBQSzExU2xvdEluZm8gKnNsb3Q9TlVMTDsKLSAgICAgam9iamVj dCBjb250ZXh0T2JqPU5VTEw7Ci0gCi0gICAgIG1lY2ggPSBKU1NfZ2V0UEsxMU1lY2hGcm9tQWxn KGVudiwgYWxnT2JqKTsKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExTW9kdWxlLmMgYWx0LWpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNb2R1bGUu YwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMU1vZHVsZS5jCTIwMDctMDItMjMgMDk6NDA6MjEuMDAwMDAwMDAwIC0w ODAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFNb2R1bGUuYwkyMDExLTA4LTEwIDE2OjUzOjI4Ljc4ODgyMzAwMCAtMDcw MAotQEAgLTI1NCw3ICsyNTQsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfTW9kdWxl UHJveHlfCi0gewotICAgICBTRUNNT0RNb2R1bGUgKm1vZHVsZTsKLSAKLS0gICAgaWYgKEpTU19n ZXRQdHJGcm9tUHJveHkoZW52LCB0aGlzLCAmbW9kdWxlKSAhPSBQUl9TVUNDRVNTKSB7Ci0rICAg IGlmIChKU1NfZ2V0UHRyRnJvbVByb3h5KGVudiwgdGhpcywgKHZvaWQgKiopJm1vZHVsZSkgIT0g UFJfU1VDQ0VTUykgewotICAgICAgICAgQVNTRVJUX09VVE9GTUVNKGVudik7Ci0gICAgICAgICBn b3RvIGZpbmlzaDsKLSAgICAgfQotZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFQcml2S2V5LmMgYWx0LWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFQ cml2S2V5LmMKLS0tLSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFQcml2S2V5LmMJMjAwNi0wNC0yNCAxODoyNjo0Mi4wMDAw MDAwMDAgLTA3MDAKLSsrKyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9wa2NzMTEvUEsxMVByaXZLZXkuYwkyMDExLTA4LTEwIDE4OjM0OjIwLjk1NDM3 NjAwMCAtMDcwMAotQEAgLTE3NCw3ICsxNzQsNyBAQCBKTklFWFBPUlQgam9iamVjdCBKTklDQUxM Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFQcml2S2V5X2dldEtleVR5cGUKLSAg IChKTklFbnYgKmVudiwgam9iamVjdCB0aGlzKQotIHsKLS0gICAgUFJUaHJlYWQgKnBUaHJlYWQ7 Ci0rICAgIFBSVGhyZWFkICogVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIHBUaHJlYWQ7Ci0gICAg IFNFQ0tFWVByaXZhdGVLZXkgKnByaXZrOwotICAgICBLZXlUeXBlIGtleVR5cGU7Ci0gICAgIGNo YXIqIGtleVR5cGVGaWVsZE5hbWU7Ci1AQCAtMjU5LDcgKzI1OSw3IEBAIEphdmFfb3JnX21vemls bGFfanNzX3BrY3MxMV9Qcml2YXRlS2V5UHIKLSAgIChKTklFbnYgKmVudiwgam9iamVjdCB0aGlz KQotIHsKLSAgICAgU0VDS0VZUHJpdmF0ZUtleSAqcHJpdms7Ci0tICAgIFBSVGhyZWFkICpwVGhy ZWFkOwotKyAgICBQUlRocmVhZCAqIFZBUklBQkxFX01BWV9OT1RfQkVfVVNFRCBwVGhyZWFkOwot IAotICAgICBQUl9BU1NFUlQoZW52IT1OVUxMICYmIHRoaXMhPU5VTEwpOwotIAotQEAgLTM1OCw3 ICszNTgsNiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVByaXZLZXlfCi0gICAg IChKTklFbnYgKmVudiwgam9iamVjdCB0aGlzKQotIHsKLSAgICAgU0VDS0VZUHJpdmF0ZUtleSAq a2V5ID0gTlVMTDsKLS0gICAgUEsxMVNsb3RJbmZvICpzbG90ID0gTlVMTDsKLSAgICAgU0VDSXRl bSAqaWRJdGVtID0gTlVMTDsKLSAgICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSBOVUxMOwotIAot ZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFQdWJLZXkuYyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVB1YktleS5jCi0tLS0gcGF0Y2hlZC1q c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzEx UHViS2V5LmMJMjAwNi0wMi0yMiAxNzoyMTo0Mi4wMDAwMDAwMDAgLTA4MDAKLSsrKyBhbHQtanNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVB1 YktleS5jCTIwMTEtMDgtMTAgMTg6MzU6MDQuMzkwMzMzMDAwIC0wNzAwCi1AQCAtNjIsNyArNjIs NyBAQCBKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX21vemlsbGFfCi0gICAoSk5JRW52 ICplbnYsIGpvYmplY3QgdGhpcykKLSB7Ci0gICAgIFNFQ0tFWVB1YmxpY0tleSAqcHViazsKLS0g ICAgUFJUaHJlYWQgKnBUaHJlYWQ7Ci0rICAgIFBSVGhyZWFkICogVkFSSUFCTEVfTUFZX05PVF9C RV9VU0VEIHBUaHJlYWQ7Ci0gCi0gICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhpcyE9TlVM TCk7Ci0gCi1AQCAtMTc5LDcgKzE3OSw3IEBAIEpOSUVYUE9SVCB2b2lkIEpOSUNBTEwKLSBKYXZh X29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVB1YktleV92ZXJpZnlLZXlJc09uVG9rZW4KLSAg IChKTklFbnYgKmVudiwgam9iamVjdCB0aGlzLCBqb2JqZWN0IHRva2VuKQotIHsKLS0JUFJUaHJl YWQgKnBUaHJlYWQ7Ci0rICAgIFBSVGhyZWFkICogVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIHBU aHJlYWQ7Ci0gCVNFQ0tFWVB1YmxpY0tleSAqa2V5ID0gTlVMTDsKLSAJUEsxMVNsb3RJbmZvICpz bG90ID0gTlVMTDsKLSAJUEsxMVNsb3RJbmZvICprZXlTbG90ID0gTlVMTDsKLUBAIC0yMzEsNyAr MjMxLDcgQEAgSk5JRVhQT1JUIGpvYmplY3QgSk5JQ0FMTAotIEphdmFfb3JnX21vemlsbGFfanNz X3BrY3MxMV9QSzExUHViS2V5X2dldEtleVR5cGUKLSAgIChKTklFbnYgKmVudiwgam9iamVjdCB0 aGlzKQotIHsKLS0gICAgUFJUaHJlYWQgKnBUaHJlYWQ7Ci0rICAgIFBSVGhyZWFkICogVkFSSUFC TEVfTUFZX05PVF9CRV9VU0VEIHBUaHJlYWQ7Ci0gICAgIFNFQ0tFWVB1YmxpY0tleSAqcHViazsK LSAgICAgS2V5VHlwZSBrZXlUeXBlOwotICAgICBjaGFyKiBrZXlUeXBlRmllbGROYW1lOwotQEAg LTQ1NCw3ICs0NTQsNyBAQCBnZXRfcHVibGljX2tleV9pbmZvCi0gewotICAgICBTRUNLRVlQdWJs aWNLZXkgKnB1Yms7Ci0gICAgIGpieXRlQXJyYXkgYnl0ZUFycmF5PU5VTEw7Ci0tICAgIFNFQ0l0 ZW0gKml0ZW07Ci0rICAgIFNFQ0l0ZW0gKml0ZW09TlVMTDsKLSAKLSAgICAgUFJfQVNTRVJUKGVu diE9TlVMTCAmJiB0aGlzIT1OVUxMKTsKLSAKLUBAIC01MjYsNyArNTI2LDYgQEAgcHVia0Zyb21S YXcoSk5JRW52ICplbnYsIENLX0tFWV9UWVBFIHR5cAotIHsKLSAgICAgam9iamVjdCBwdWJrT2Jq PU5VTEw7Ci0gICAgIFNFQ0tFWVB1YmxpY0tleSAqcHViaz1OVUxMOwotLSAgICBTRUNTdGF0dXMg cnY7Ci0gICAgIFNFQ0l0ZW0gKnB1YmtERVI9TlVMTDsKLSAKLSAgICAgLyogdmFsaWRhdGUgYXJn cyAqLwotZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTZWN1cmVSYW5kb20uYyBhbHQtanNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVNlY3VyZVJhbmRv bS5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9QSzExU2VjdXJlUmFuZG9tLmMJMjAwNS0wMS0yOCAxMToxNjoxMS4wMDAw MDAwMDAgLTA4MDAKLSsrKyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9wa2NzMTEvUEsxMVNlY3VyZVJhbmRvbS5jCTIwMTEtMDgtMTAgMTg6MzY6MDUu MjUyMjcxMDAwIC0wNzAwCi1AQCAtMTEyLDcgKzExMiw3IEBAIEphdmFfb3JnX21vemlsbGFfanNz X3BrY3MxMV9QSzExU2VjdXJlUmEKLSAgICAgICogIkMiIGRhdGEgbWVtYmVycwotICAgICAgKi8K LSAKLS0gICAgUFJUaHJlYWQqICAgICBwVGhyZWFkID0gTlVMTDsKLSsgICAgUFJUaHJlYWQqICAg ICBWQVJJQUJMRV9NQVlfTk9UX0JFX1VTRUQgcFRocmVhZCA9IE5VTEw7Ci0gICAgIFNFQ1N0YXR1 cyAgICAgc3RhdHVzICA9IFBSX0ZBTFNFOwotICAgICBQSzExU2xvdEluZm8qIHNsb3QgICAgPSBO VUxMOwotIAotQEAgLTI2Miw3ICsyNjIsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFf UEsxMVNlY3VyZVJhCi0gICAgICAqICJDIiBkYXRhIG1lbWJlcnMKLSAgICAgICovCi0gCi0tICAg IFBSVGhyZWFkKiAgICAgcFRocmVhZCA9IE5VTEw7Ci0rICAgIFBSVGhyZWFkKiAgICAgVkFSSUFC TEVfTUFZX05PVF9CRV9VU0VEIHBUaHJlYWQgPSBOVUxMOwotICAgICBTRUNTdGF0dXMgICAgIHN0 YXR1cyAgPSBQUl9GQUxTRTsKLSAKLSAKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYvbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3RvcmUuYyBhbHQt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsx MVN0b3JlLmMKLS0tLSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5jCTIwMDYtMDQtMDMgMTY6MDk6NDkuMDAwMDAw MDAwIC0wNzAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5jCTIwMTEtMDgtMTAgMTg6Mzg6MTIuMzY1MTQ1MDAw IC0wNzAwCi1AQCAtMzE5LDcgKzMxOSw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9Q SzExU3RvcmVfZGUKLSAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXMsIGpvYmplY3QgY2Vy dE9iamVjdCkKLSB7Ci0gICAgIENFUlRDZXJ0aWZpY2F0ZSAqY2VydDsKLS0gICAgU0VDU3RhdHVz IHN0YXR1czsKLSsgICAgU0VDU3RhdHVzIFZBUklBQkxFX01BWV9OT1RfQkVfVVNFRCBzdGF0dXM7 Ci0gCi0gICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhpcyE9TlVMTCk7Ci0gICAgIGlmKGNl cnRPYmplY3QgPT0gTlVMTCkgewotQEAgLTM0OSw3ICszNDksNyBAQCBKYXZhX29yZ19tb3ppbGxh X2pzc19wa2NzMTFfUEsxMVN0b3JlX2RlCi0gICAgIChKTklFbnYgKmVudiwgam9iamVjdCB0aGlz LCBqb2JqZWN0IGNlcnRPYmplY3QpCi0gewotICAgICBDRVJUQ2VydGlmaWNhdGUgKmNlcnQ7Ci0t ICAgIFNFQ1N0YXR1cyBzdGF0dXM7Ci0rICAgIFNFQ1N0YXR1cyBWQVJJQUJMRV9NQVlfTk9UX0JF X1VTRUQgc3RhdHVzOwotIAotICAgICBQUl9BU1NFUlQoZW52IT1OVUxMICYmIHRoaXMhPU5VTEwp OwotICAgICBpZihjZXJ0T2JqZWN0ID09IE5VTEwpIHsKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3lt S2V5LmMgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv cGtjczExL1BLMTFTeW1LZXkuYwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleS5jCTIwMDQtMDQtMjUgMDg6 MDI6MjIuMDAwMDAwMDAwIC0wNzAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTeW1LZXkuYwkyMDExLTA4LTExIDA5OjQy OjUyLjk2NzI4MjAwMCAtMDcwMAotQEAgLTIzMyw3ICsyMzMsNyBAQCBKYXZhX29yZ19tb3ppbGxh X2pzc19wa2NzMTFfUEsxMVN5bUtleV9nCi0gICAgIGpmaWVsZElEIHR5cGVGaWVsZD1OVUxMOwot ICAgICBqb2JqZWN0IHR5cGVPYmplY3Q9TlVMTDsKLSAKLS0gICAgaWYoIEpTU19QSzExX2dldFN5 bUtleVB0cihlbnYsIHRoaXMsICZrZXkpICE9IFNFQ1N1Y2Nlc3MgKSB7Ci0rICAgIGlmKCBKU1Nf UEsxMV9nZXRTeW1LZXlQdHIoZW52LCB0aGlzLCAma2V5KSAhPSBQUl9TVUNDRVNTICkgewotICAg ICAgICAgQVNTRVJUX09VVE9GTUVNKGVudik7Ci0gICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAg fQotZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5jIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExVG9rZW4uYwotLS0tIHBhdGNoZWQt anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsx MVRva2VuLmMJMjAwNy0xMS0wOSAxNjozNzo1Ny4wMDAwMDAwMDAgLTA4MDAKLSsrKyBhbHQtanNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRv a2VuLmMJMjAxMS0wOC0xMCAxODozODo1Mi40MjExMDQwMDAgLTA3MDAKLUBAIC05NjEsOSArOTYx LDkgQEAgSk5JRVhQT1JUIGpzdHJpbmcgSk5JQ0FMTCBKYXZhX29yZ19tb3ppbAotICAgIGpzdHJp bmcga2V5VHlwZSwgamJ5dGVBcnJheSBQLCBqYnl0ZUFycmF5IFEsIGpieXRlQXJyYXkgRykKLSB7 Ci0gICAgIFBLMTFTbG90SW5mbyAqc2xvdDsKLS0gICAgY29uc3QgY2hhciogY19zdWJqZWN0Owot KyAgICBjb25zdCBjaGFyKiBjX3N1YmplY3Q9TlVMTDsKLSAgICAgamJvb2xlYW4gaXNDb3B5Owot LSAgICB1bnNpZ25lZCBjaGFyICpiNjRyZXF1ZXN0OwotKyAgICB1bnNpZ25lZCBjaGFyICpiNjRy ZXF1ZXN0PU5VTEw7Ci0gICAgIFNFQ0l0ZW0gcCwgcSwgZzsKLSAgICAgUFFHUGFyYW1zICpkc2FQ YXJhbXM9TlVMTDsKLSAgICAgY29uc3QgY2hhciogY19rZXlUeXBlOwotQEAgLTEwODAsNyArMTA4 MCw3IEBAIEdlbmVyYXRlQ2VydFJlcXVlc3QoSk5JRW52ICplbnYsIAotIAlTRUNTdGF0dXMgcnY7 Ci0gCVBSQXJlbmFQb29sICphcmVuYTsKLSAJU0VDSXRlbSByZXN1bHRfZGVyLCByZXN1bHQ7Ci0t CVNFQ0l0ZW0gKmJsb2I7Ci0rCVNFQ0l0ZW0gKiBWQVJJQUJMRV9NQVlfTk9UX0JFX1VTRUQgYmxv YjsKLSAJQ0tfTUVDSEFOSVNNX1RZUEUgc2lnbk1lY2g7Ci0gCUNLX01FQ0hBTklTTV9UWVBFIGtl eWdlbk1lY2g7Ci0gCi1kaWZmIC1ydXBOIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wcm92aWRlci9qYXZhL3NlY3VyaXR5L0pTU0tleVN0b3Jl U3BpLmMgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv cHJvdmlkZXIvamF2YS9zZWN1cml0eS9KU1NLZXlTdG9yZVNwaS5jCi0tLS0gcGF0Y2hlZC1qc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Byb3ZpZGVyL2phdmEv c2VjdXJpdHkvSlNTS2V5U3RvcmVTcGkuYwkyMDAzLTA5LTI0IDE1OjIwOjA1LjAwMDAwMDAwMCAt MDcwMAotKysrIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3Byb3ZpZGVyL2phdmEvc2VjdXJpdHkvSlNTS2V5U3RvcmVTcGkuYwkyMDExLTA4LTEwIDE2 OjU3OjQyLjk5MTU3MDAwMCAtMDcwMAotQEAgLTg5LDcgKzg5LDYgQEAgdHJhdmVyc2VUb2tlbk9i amVjdHMKLSAgICAgU0VDS0VZUHVibGljS2V5TGlzdCogcHVia0xpc3QgPSBOVUxMOwotICAgICBQ SzExU3ltS2V5ICpzeW1LZXkgPSBOVUxMOwotICAgICBDRVJUQ2VydExpc3QgKmNlcnRMaXN0ID0g TlVMTDsKLS0gICAgU0VDU3RhdHVzIHNlY3N0YXQ7Ci0gCi0gICAgIC8qCi0gICAgICAqIEdldCBh bGwgcHJpdmF0ZSBrZXlzCi1AQCAtNTA4LDcgKzUwNyw2IEBAIGxvb2t1cENlcnRCeU5pY2tuYW1l KEpOSUVudiAqZW52LCBqb2JqZWMKLSB7Ci0gICAgIFBLMTFTbG90SW5mbyAqc2xvdDsKLSAgICAg RW5naW5lR2V0Q2VydGlmaWNhdGVDQkluZm8gY2JpbmZvID0ge05VTEwsTlVMTH07Ci0tICAgIGpi eXRlQXJyYXkgZGVyQ2VydEJBID0gTlVMTDsKLSAgICAgUFJTdGF0dXMgc3RhdHVzID0gUFJfRkFJ TFVSRTsKLSAKLSAgICAgaWYoIGFsaWFzID09IE5VTEwgKSBnb3RvIGZpbmlzaDsKLUBAIC04MTMs NyArODExLDYgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcHJvdmlkZXJfamF2YV9zZWN1cgotICAg ICBQSzExU2xvdEluZm8gKnNsb3Q7Ci0gICAgIEVuZ2luZUdldENlcnRpZmljYXRlQ0JJbmZvIGNi aW5mbyA9IHtOVUxMLE5VTEx9OwotICAgICBqYm9vbGVhbiByZXRWYWwgPSBKTklfRkFMU0U7Ci0t ICAgIFNFQ0tFWVByaXZhdGVLZXkgKnByaXZrID0gTlVMTDsKLSAKLSAgICAgaWYoIGFsaWFzID09 IE5VTEwgKSBnb3RvIGZpbmlzaDsKLSAKLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYvbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYyBhbHQtanNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0 LmMKLS0tLSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3Mvc3NsL1NTTFNvY2tldC5jCTIwMTEtMDgtMTAgMTY6MjE6MzAuMzk1NzY1MDAwIC0wNzAw Ci0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv c3NsL1NTTFNvY2tldC5jCTIwMTEtMDgtMTAgMTc6MDU6MTUuMzYzMTE3MDAwIC0wNzAwCi1AQCAt Mzk3LDcgKzM5Nyw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9TU0xTb2NrZXRfZ2V0U28K LSB7Ci0gICAgIFBSU29ja2V0T3B0aW9uRGF0YSBzb2NrT3B0aW9uczsKLSAgICAgSlNTTF9Tb2Nr ZXREYXRhICpzb2NrID0gTlVMTDsKLS0gICAgamludCByZXR2YWw7Ci0rICAgIGppbnQgcmV0dmFs PS0xOwotICAgICBQUlN0YXR1cyBzdGF0dXM7Ci0gCi0gICAgIGlmKCBKU1NMX2dldFNvY2tEYXRh KGVudiwgc2VsZiwgJnNvY2spICE9IFBSX1NVQ0NFU1MgKSB7Ci1AQCAtODc0LDcgKzg3NCw3IEBA IEpOSUVYUE9SVCBqaW50IEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU1NMU29j a2V0X3NvY2tldEF2YWlsYWJsZSgKLSAgICAgSk5JRW52ICplbnYsIGpvYmplY3Qgc2VsZikKLSB7 Ci0tICAgIGppbnQgYXZhaWxhYmxlOwotKyAgICBqaW50IGF2YWlsYWJsZT0wOwotICAgICBKU1NM X1NvY2tldERhdGEgKnNvY2sgPSBOVUxMOwotIAotICAgICBpZiggSlNTTF9nZXRTb2NrRGF0YShl bnYsIHNlbGYsICZzb2NrKSAhPSBQUl9TVUNDRVNTICkgewotZGlmZiAtcnVwTiBwYXRjaGVkLWpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2NvbW1vbi5j IGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9j b21tb24uYwotLS0tIHBhdGNoZWQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9zc2wvY29tbW9uLmMJMjAxMS0wOC0xMCAxNjoyMTozMC40MzQ3NjYwMDAgLTA3 MDAKLSsrKyBhbHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9zc2wvY29tbW9uLmMJMjAxMS0wOC0xMSAwOTo0NDoxMi4zMTAyMDIwMDAgLTA3MDAKLUBAIC02 NCw3ICs2NCw3IEBAIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oSk5JRW52ICplbnYKLSAg ICAgam1ldGhvZElEIGV4Y2VwQ29uczsKLSAgICAgam9iamVjdCBleGNlcE9iajsKLSAgICAganN0 cmluZyBtc2dTdHJpbmc7Ci0tICAgIGppbnQgcmVzdWx0OwotKyAgICBqaW50IFZBUklBQkxFX01B WV9OT1RfQkVfVVNFRCByZXN1bHQ7Ci0gCi0gICAgIC8qCi0gICAgICAqIGdldCB0aGUgZXJyb3Ig Y29kZSBhbmQgZXJyb3Igc3RyaW5nCi1AQCAtMTQ5LDggKzE0OSw4IEBAIEphdmFfb3JnX21vemls bGFfanNzX3NzbF9Tb2NrZXRCYXNlX3NvY2sKLSAgICAgamJ5dGVBcnJheSBzZEFycmF5ID0gTlVM TDsKLSAgICAgSlNTTF9Tb2NrZXREYXRhICpzb2NrZGF0YSA9IE5VTEw7Ci0gICAgIFNFQ1N0YXR1 cyBzdGF0dXM7Ci0tICAgIFBSRmlsZURlc2MgKm5ld0ZEOwotLSAgICBQUkZpbGVEZXNjICp0bXBG RDsKLSsgICAgUFJGaWxlRGVzYyAqbmV3RkQgPSBOVUxMOwotKyAgICBQUkZpbGVEZXNjICp0bXBG RCA9IE5VTEw7Ci0gICAgIFBSRmlsZVByaXZhdGUgKnByaXYgPSBOVUxMOwotICAgICBpbnQgc29j a2V0RmFtaWx5ID0gMDsKLSAKLUBAIC02MjcsNyArNjI3LDcgQEAgSmF2YV9vcmdfbW96aWxsYV9q c3Nfc3NsX1NvY2tldEJhc2VfZ2V0UwotICAgICBTRUNTdGF0dXMgc3RhdHVzID0gU0VDU3VjY2Vz czsKLSAgICAgUFJCb29sIGJPcHRpb24gPSBQUl9GQUxTRTsKLSAKLS0gICAgaWYoIEpTU0xfZ2V0 U29ja0RhdGEoZW52LCBzZWxmLCAmc29jaykgIT0gU0VDU3VjY2VzcyApIHsKLSsgICAgaWYoIEpT U0xfZ2V0U29ja0RhdGEoZW52LCBzZWxmLCAmc29jaykgIT0gUFJfU1VDQ0VTUyApIHsKLSAgICAg ICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci0gCi1AQCAtNjQ5LDcgKzY0OSw3IEBAIEpTU0xfZ2V0 U29ja0FkZHIKLSAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IHNlbGYsIFBSTmV0QWRkciAqYWRk ciwgTG9jYWxPclBlZXIgbG9jYWxPclBlZXIpCi0gewotICAgICBKU1NMX1NvY2tldERhdGEgKnNv Y2sgPSBOVUxMOwotLSAgICBQUlN0YXR1cyBzdGF0dXM7Ci0rICAgIFBSU3RhdHVzIHN0YXR1cz1Q Ul9GQUlMVVJFOwotIAotICAgICAvKiBnZXQgbXkgZmQgKi8KLSAgICAgaWYoIEpTU0xfZ2V0U29j a0RhdGEoZW52LCBzZWxmLCAmc29jaykgIT0gUFJfU1VDQ0VTUyApIHsKLUBAIC04OTMsNyArODkz LDcgQEAgSlNTX1NTTF9wcm9jZXNzRXhjZXB0aW9ucyhKTklFbnYgKmVudiwgUAotIAotIGZpbmlz aDoKLSAgICAgaWYoIGN1cnJlbnRFeGNlcCAhPSBOVUxMICYmICgqZW52KS0+RXhjZXB0aW9uT2Nj dXJyZWQoZW52KSA9PSBOVUxMKSB7Ci0tICAgICAgICBpbnQgcmV0ID0gKCplbnYpLT5UaHJvdyhl bnYsIGN1cnJlbnRFeGNlcCk7Ci0rICAgICAgICBpbnQgVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VE IHJldCA9ICgqZW52KS0+VGhyb3coZW52LCBjdXJyZW50RXhjZXApOwotICAgICAgICAgUFJfQVNT RVJUKHJldCA9PSAwKTsKLSAgICAgfQotIH0KLWRpZmYgLXJ1cE4gcGF0Y2hlZC1qc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9qYXZhc29jay5jIGFsdC1q c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9qYXZhc29j ay5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3NzbC9qYXZhc29jay5jCTIwMTEtMDgtMTAgMTY6MjE6MzAuNDQ2NzY1MDAwIC0wNzAw Ci0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv c3NsL2phdmFzb2NrLmMJMjAxMS0wOC0xMCAxNzowMzo0OC43NjkyMDYwMDAgLTA3MDAKLUBAIC05 Miw3ICs5Miw3IEBAIHdyaXRlYnVmKEpOSUVudiAqZW52LCBQUkZpbGVEZXNjICpmZCwgam8KLSAg ICAgam1ldGhvZElEIGdldE91dHB1dFN0cmVhbSwgd3JpdGVNZXRob2Q7Ci0gICAgIGpjbGFzcyBz b2NrQ2xhc3MsIG9zQ2xhc3M7Ci0gICAgIGpvYmplY3Qgb3V0cHV0U3RyZWFtOwotLSAgICBqaW50 IGFycmF5TGVuOwotKyAgICBqaW50IGFycmF5TGVuPS0xOwotICAgICBQUkludDMyIHJldHZhbDsK LSAKLSAgICAgLyoKLUBAIC0yMTEsNyArMjExLDcgQEAganNvY2tfd3JpdGUoUFJGaWxlRGVzYyAq ZmQsIGNvbnN0IFBSSU9WZQotICAgICBqb2JqZWN0IHNvY2tPYmo7Ci0gICAgIEpOSUVudiAqZW52 OwotICAgICBqYnl0ZUFycmF5IG91dGJ1ZkFycmF5OwotLSAgICBQUkludDMyIHJldHZhbDsKLSsg ICAgUFJJbnQzMiByZXR2YWw9LTE7Ci0gCi0gICAgIGlmKCBHRVRfRU5WKGZkLT5zZWNyZXQtPmph dmFWTSwgZW52KSApIGdvdG8gZmluaXNoOwotIAotQEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0aWMg UFJJbnQzMgotIGpzb2NrX3JlY3YoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBh bW91bnQsCi0gICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCkKLSB7Ci0t ICAgIFBSSW50MzIgcmV0dmFsOwotKyAgICBQUkludDMyIHJldHZhbD0tMTsKLSAgICAgSk5JRW52 ICplbnY7Ci0gICAgIGpvYmplY3Qgc29ja09iajsKLSAgICAgamJ5dGVBcnJheSBieXRlQXJyYXk7 Ci1AQCAtNjM3LDcgKzYzNyw3IEBAIGdldEludFByb3BlcnR5KEpOSUVudiAqZW52LCBqb2JqZWN0 IHNvY2sKLSB7Ci0gICAgIGpjbGFzcyBzb2NrQ2xhc3M7Ci0gICAgIGptZXRob2RJRCBtZXRob2Q7 Ci0tICAgIGppbnQgcmV0dmFsOwotKyAgICBqaW50IHJldHZhbD0wOwotIAotICAgICBzb2NrQ2xh c3MgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgc29jayk7Ci0gICAgIGlmKCBzb2NrQ2xh c3MgPT0gTlVMTCApIGdvdG8gZmluaXNoOwotQEAgLTEwMDEsMTIgKzEwMDEsNiBAQCBzdGF0aWMg Y29uc3QgUFJJT01ldGhvZHMganNvY2tNZXRob2RzID0gCi0gICAgIChQUlJlc2VydmVkRk4pIGlu dmFsaWRJbnQKLSB9OwotIAotLXN0YXRpYyBjb25zdCBQUklPTWV0aG9kcyoKLS1nZXRKc29ja01l dGhvZHMoKQotLXsKLS0gICAgcmV0dXJuICZqc29ja01ldGhvZHM7Ci0tfQotLQotIHN0YXRpYyB2 b2lkCi0ganNvY2tEZXN0cnVjdG9yKFBSRmlsZURlc2MgKmZkKQotIHsKLWRpZmYgLXJ1cE4gcGF0 Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwv anNzdXRpbC5jIGFsdC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3V0aWwvanNzdXRpbC5jCi0tLS0gcGF0Y2hlZC1qc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvanNzdXRpbC5jCTIwMDQtMDQtMjUgMDg6MDI6Mjku MDAwMDAwMDAwIC0wNzAwCi0rKysgYWx0LWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvdXRpbC9qc3N1dGlsLmMJMjAxMS0wOC0xMCAxODoyNDo1OC40NzA5Mzcw MDAgLTA3MDAKLUBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZAotIEpTU190aHJvd01zZyhKTklFbnYg KmVudiwgY2hhciAqdGhyb3dhYmxlQ2xhc3NOYW1lLCBjaGFyICptZXNzYWdlKSB7Ci0gCi0gICAg IGpjbGFzcyB0aHJvd2FibGVDbGFzczsKLS0gICAgamludCByZXN1bHQ7Ci0rICAgIGppbnQgVkFS SUFCTEVfTUFZX05PVF9CRV9VU0VEIHJlc3VsdDsKLSAKLSAgICAgLyogdmFsaWRhdGUgYXJndW1l bnRzICovCi0gICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhyb3dhYmxlQ2xhc3NOYW1lIT1O VUxMICYmIG1lc3NhZ2UhPU5VTEwpOwotQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1NfdGhyb3coSk5J RW52ICplbnYsIGNoYXIgKnRocm93YWJsZUNsCi0gICAgIGpjbGFzcyB0aHJvd2FibGVDbGFzczsK LSAgICAgam9iamVjdCB0aHJvd2FibGU7Ci0gICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvcjsKLS0g ICAgamludCByZXN1bHQ7Ci0rICAgIGppbnQgVkFSSUFCTEVfTUFZX05PVF9CRV9VU0VEIHJlc3Vs dDsKLSAgICAgCi0gICAgIFBSX0FTU0VSVCggKCplbnYpLT5FeGNlcHRpb25PY2N1cnJlZChlbnYp ID09IE5VTEwgKTsKLSAKLUBAIC0yMjIsNyArMjIyLDkgQEAgSlNTX3Rocm93KEpOSUVudiAqZW52 LCBjaGFyICp0aHJvd2FibGVDbAotIFBSU3RhdHVzCi0gSlNTX2dldFB0ckZyb21Qcm94eShKTklF bnYgKmVudiwgam9iamVjdCBuYXRpdmVQcm94eSwgdm9pZCAqKnB0cikKLSB7Ci0rI2lmZGVmIERF QlVHCi0gICAgIGpjbGFzcyBuYXRpdmVQcm94eUNsYXNzOwotKyNlbmRpZgotIAlqY2xhc3MgcHJv eHlDbGFzczsKLSAgICAgamZpZWxkSUQgYnl0ZUFycmF5RmllbGQ7Ci0gICAgIGpieXRlQXJyYXkg Ynl0ZUFycmF5OwotQEAgLTc0NSw3ICs3NDcsNyBAQCBKU1NfdHJhY2UoSk5JRW52ICplbnYsIGpp bnQgbGV2ZWwsIGNoYXIgCi0gdm9pZAotIEpTU19hc3NlcnRPdXRPZk1lbShKTklFbnYgKmVudikK LSB7Ci0tICAgIGpjbGFzcyBtZW1FcnJDbGFzczsKLSsgICAgamNsYXNzIFZBUklBQkxFX01BWV9O T1RfQkVfVVNFRCBtZW1FcnJDbGFzczsKLSAgICAganRocm93YWJsZSBleGNlcDsKLSAKLSAgICAg UFJfQVNTRVJUKGVudiAhPSBOVUxMKTsKLUBAIC04MDQsNyArODA2LDcgQEAgSlNTX1NFQ0l0ZW1U b0J5dGVBcnJheShKTklFbnYgKmVudiwgU0VDSQotICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAg IH0KLSAKLS0gICAgKCplbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oZW52LCBhcnJheSwgMCwgaXRl bS0+bGVuLCBpdGVtLT5kYXRhKTsKLSsgICAgKCplbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oZW52 LCBhcnJheSwgMCwgaXRlbS0+bGVuLCAoamJ5dGUqKWl0ZW0tPmRhdGEpOwotIAotIGZpbmlzaDoK LSAgICAgcmV0dXJuIGFycmF5OwotZGlmZiAtcnVwTiBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3N1dGlsLmggYWx0LWpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3N1dGlsLmgKLS0t LSBwYXRjaGVkLWpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv dXRpbC9qc3N1dGlsLmgJMjAwNC0wNC0yNSAwODowMjoyOS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBh bHQtanNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL2pz c3V0aWwuaAkyMDExLTA4LTExIDE4OjEyOjU2LjkyNjA5ODAwMCAtMDcwMAotQEAgLTM2LDYgKzM2 LDE5IEBACi0gI2lmbmRlZiBKU1NfTkFUSVZFX1VUSUxfSAotICNkZWZpbmUgSlNTX05BVElWRV9V VElMX0gKLSAKLSsvKiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGFyZSB1c2VkIHRvIHN1cHByZXNz IHVuZGVzaXJlZCBjb21waWxlciB3YXJuaW5ncwotKyAqIHRoYXQgaGF2ZSBiZWVuIGRlZW1lZCBp bmFwcHJvcHJpYXRlLgotKyAqCi0rICogSU1QT1JUQU5UOiAgVGhlc2UgYXJlIE9OTFkgdXNlZCBv biBhbiAiYXMtbmVlZGVkIiBiYXNpcyEKLSsgKi8KLSsjaWZkZWYgX19HTlVDX18KLSsjZGVmaW5l IEZVTkNUSU9OX01BWV9OT1RfQkVfVVNFRCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSsjZGVm aW5lIFZBUklBQkxFX01BWV9OT1RfQkVfVVNFRCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSsj ZWxzZQotKyNkZWZpbmUgRlVOQ1RJT05fTUFZX05PVF9CRV9VU0VECi0rI2RlZmluZSBWQVJJQUJM RV9NQVlfTk9UX0JFX1VTRUQKLSsjZW5kaWYKLSsKLSAvKiBOZWVkIHRvIGluY2x1ZGUgdGhlc2Ug Zmlyc3QuCi0gICogI2luY2x1ZGUgPG5zcHIuaD4KLSAgKiAjaW5jbHVkZSA8am5pLmg+CgpkaWZm IC0tZ2l0IGEvanNzLWVsaW1pbmF0ZS1uYXRpdmUtY292ZXJpdHktZGVmZWN0cy5wYXRjaCBiL2pz cy1lbGltaW5hdGUtbmF0aXZlLWNvdmVyaXR5LWRlZmVjdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDY4ZTBmYWQuLjAwMDAwMDAKLS0tIGEvanNzLWVsaW1pbmF0ZS1uYXRp dmUtY292ZXJpdHktZGVmZWN0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBA Ci1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2VjdXJpdHkvY29yZWNvbmYvbnNp bnN0YWxsL3BhdGhzdWIuYyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9jb3JlY29uZi9uc2lu c3RhbGwvcGF0aHN1Yi5jCi0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9jb3Jl Y29uZi9uc2luc3RhbGwvcGF0aHN1Yi5jCTIwMDQtMDQtMjUgMDg6MDI6MTguMDAwMDAwMDAwIC0w NzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvY29yZWNvbmYvbnNpbnN0YWxsL3Bh dGhzdWIuYwkyMDExLTA5LTE3IDE4OjM3OjM5Ljg3NTkwMDAwMCAtMDcwMAotQEAgLTI3NSw5ICsy NzUsMTEgQEAgZGlhZ25vc2VQYXRoKGNvbnN0IGNoYXIgKiBwYXRoKQotIAkgICAgcnYgPSByZWFk bGluayhteVBhdGgsIGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0gCSAgICBpZiAocnYgPCAwKSB7Ci0gCSAg ICAJcGVycm9yKCJyZWFkbGluayIpOwotLQkJYnVmWzBdID0gMDsKLS0JICAgIH0gZWxzZSB7Ci0r CSAgICAJYnVmWzBdID0gMDsKLSsJICAgIH0gZWxzZSBpZiAoIHJ2IDwgQlVGU0laICkgewotIAkg ICAgCWJ1Zltydl0gPSAwOwotKwkgICAgfSBlbHNlIHsKLSsJICAgIAlidWZbQlVGU0laLTFdID0g MDsKLSAJICAgIH0KLSAJICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYSBsaW5rIHRvICVzXG4i LCBteVBhdGgsIGJ1Zik7Ci0gCX0gZWxzZSBpZiAoU19JU0RJUihzYi5zdF9tb2RlKSkgewotZGlm ZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvQ3J5cHRvTWFuYWdlci5jIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5jCi0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuYwkyMDExLTA5LTE3IDE3OjMz OjA4LjgyMzk3NTAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5jCTIwMTEtMDktMTcgMjA6MDk6MzUuNDQ2OTc3 MDAwIC0wNzAwCi1AQCAtNzI4LDE0ICs3MjgsMTQgQEAgZ2V0UFdGcm9tQ2FsbGJhY2soUEsxMVNs b3RJbmZvICpzbG90LCBQUgotICAgICB9Ci0gCi0gZmluaXNoOgotLSAgICBpZiggKGV4Y2VwdGlv bj0oKmVudiktPkV4Y2VwdGlvbk9jY3VycmVkKGVudikpICE9IE5VTEwpIHsKLSAjaWZkZWYgREVC VUcKLSsgICAgaWYoIChleGNlcHRpb249KCplbnYpLT5FeGNlcHRpb25PY2N1cnJlZChlbnYpKSAh PSBOVUxMKSB7Ci0gICAgICAgICBqY2xhc3MgZ2l2ZXVwQ2xhc3M7Ci0gICAgICAgICBqbWV0aG9k SUQgcHJpbnRTdGFja1RyYWNlOwotICAgICAgICAgamNsYXNzIGV4Y2VwQ2xhc3M7Ci0tI2VuZGlm Ci0rCi0gICAgICAgICAoKmVudiktPkV4Y2VwdGlvbkNsZWFyKGVudik7Ci0tI2lmZGVmIERFQlVH Ci0rCi0gICAgICAgICBnaXZldXBDbGFzcyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgR0lWRV9V UF9FWENFUFRJT04pOwotICAgICAgICAgUFJfQVNTRVJUKGdpdmV1cENsYXNzICE9IE5VTEwpOwot ICAgICAgICAgaWYoICEgKCplbnYpLT5Jc0luc3RhbmNlT2YoZW52LCBleGNlcHRpb24sIGdpdmV1 cENsYXNzKSApIHsKLUBAIC03NDYsOCArNzQ2LDEyIEBAIGZpbmlzaDoKLSAgICAgICAgICAgICBQ Ul9BU1NFUlQoIFBSX0ZBTFNFICk7Ci0gICAgICAgICB9Ci0gICAgICAgICBQUl9BU1NFUlQocmV0 dXJuY2hhcnM9PU5VTEwpOwotLSNlbmRpZgotICAgICB9Ci0rI2Vsc2UKLSsgICAgaWYoICgoKmVu diktPkV4Y2VwdGlvbk9jY3VycmVkKGVudikpICE9IE5VTEwpIHsKLSsgICAgICAgICgqZW52KS0+ RXhjZXB0aW9uQ2xlYXIoZW52KTsKLSsgICAgfQotKyNlbmRpZgotICAgICByZXR1cm4gcmV0dXJu Y2hhcnM7Ci0gfQotIAotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCi0tLS0ganNzLTQuMi42Lm9yaWcv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL1BLMTFGaW5kZXIuYwkyMDExLTA5 LTE3IDE3OjMzOjA4LjgzNDk3NjAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsxMUZpbmRlci5jCTIwMTEtMDktMTkgMTY6NTE6NDYu NDM4MDIxMDAwIC0wNzAwCi1AQCAtNzY4LDYgKzc2OCwxMCBAQCBzdGF0aWMgaW50IGZpbmRfbGVh Zl9jZXJ0KAotICAgICBpbnQgKmxpbmtlZCA9IE5VTEw7Ci0gCi0gICAgIGxpbmtlZCA9IFBSX01h bGxvYyggc2l6ZW9mKGludCkgKiBudW1DZXJ0cyApOwotKyAgICBpZiAobGlua2VkID09IE5VTEwp IHsKLSsgICAgICAgIHN0YXR1cyA9IDA7Ci0rICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQot IAotICAgICAvKiBpbml0aWFsaXplIHRoZSBiaXRtYXAgKi8KLSAgICAgZm9yIChpID0gMDsgaSA8 IG51bUNlcnRzOyBpKyspIHsKLUBAIC0xNzM1LDcgKzE3MzksNyBAQCBKYXZhX29yZ19tb3ppbGxh X2pzc19DcnlwdG9NYW5hZ2VyX3ZlcmlmCi0gewotICAgICBTRUNTdGF0dXMgICAgICAgICBydiAg ICA9IFNFQ0ZhaWx1cmU7Ci0gICAgIFNFQ0NlcnRVc2FnZSAgICAgIGNlcnRVc2FnZTsKLS0gICAg U0VDSXRlbSAqZGVyQ2VydHNbMl07Ci0rICAgIFNFQ0l0ZW0gKmRlckNlcnRzWzJdID0geyBOVUxM LCBOVUxMIH07Ci0gICAgIENFUlRDZXJ0aWZpY2F0ZSAqKmNlcnRBcnJheSA9IE5VTEw7Ci0gICAg IENFUlRDZXJ0REJIYW5kbGUgKmNlcnRkYiA9IENFUlRfR2V0RGVmYXVsdENlcnREQigpOwotIAot QEAgLTE3NDksNyArMTc1Myw2IEBAIEphdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJf dmVyaWYKLSAgICAgfQotICAgICBQUl9BU1NFUlQoY2VydGRiICE9IE5VTEwpOwotIAotLSAgICBk ZXJDZXJ0c1swXSA9IE5VTEw7Ci0gICAgIGRlckNlcnRzWzBdID0gSlNTX0J5dGVBcnJheVRvU0VD SXRlbShlbnYsIHBhY2thZ2VBcnJheSk7Ci0gICAgIGRlckNlcnRzWzFdID0gTlVMTDsKLSAKLWRp ZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2NyeXB0by9BbGdvcml0aG0uYyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uYwotLS0tIGpzcy00LjIuNi5vcmlnL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmMJMjAxMS0w OS0xNyAxNzozMzowOC43MDg5NzYwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uYwkyMDExLTA5LTE3IDE5 OjM3OjUyLjgzNDI5MjAwMCAtMDcwMAotQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgUFJTdGF0 dXMKLSBnZXRBbGdJbmZvKEpOSUVudiAqZW52LCBqb2JqZWN0IGFsZywgSlNTX0FsZ0luZm8gKmlu Zm8pCi0gewotICAgICBqaW50IGluZGV4OwotLSAgICBQUlN0YXR1cyBzdGF0dXM7Ci0rICAgIFBS U3RhdHVzIHN0YXR1cyA9IFBSX0ZBSUxVUkU7Ci0gCi0gICAgIFBSX0FTU0VSVChlbnYhPU5VTEwg JiYgYWxnIT1OVUxMICYmIGluZm8hPU5VTEwpOwotIAotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3Jp Zy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNZXNzYWdl RGlnZXN0LmMganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9w a2NzMTEvUEsxMU1lc3NhZ2VEaWdlc3QuYwotLS0tIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMU1lc3NhZ2VEaWdlc3QuYwkyMDEx LTA5LTE3IDE3OjMzOjA4Ljk3MDk3NTAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNZXNzYWdlRGlnZXN0LmMJMjAx MS0wOS0xNyAxOTo0NzoyMS44NTA3MjIwMDAgLTA3MDAKLUBAIC0xODEsNyArMTgxLDcgQEAgSmF2 YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFNZXNzYWdlRAotICAgICBQSzExQ29udGV4dCAq Y29udGV4dD1OVUxMOwotICAgICBqYnl0ZSAqYnl0ZXM9TlVMTDsKLSAgICAgU0VDU3RhdHVzIHN0 YXR1czsKLS0gICAgdW5zaWduZWQgaW50IG91dExlbjsKLSsgICAgdW5zaWduZWQgaW50IG91dExl biA9IDA7Ci0gCi0gICAgIGlmKCBKU1NfUEsxMV9nZXRDaXBoZXJDb250ZXh0KGVudiwgcHJveHlP YmosICZjb250ZXh0KSAhPSBQUl9TVUNDRVNTKSB7Ci0gICAgICAgICAvKiBleGNlcHRpb24gd2Fz IHRocm93biAqLwotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFQdWJLZXkuYyBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExUHViS2V5LmMKLS0tLSBqc3Mt NC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFQdWJLZXkuYwkyMDExLTA5LTE3IDE3OjMzOjA5LjAxMzk3NzAwMCAtMDcwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFQdWJL ZXkuYwkyMDExLTA5LTE3IDE4OjE2OjQwLjIzMTE2MTAwMCAtMDcwMAotQEAgLTI3Myw2ICsyNzMs NyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVB1YktleV9nCi0gICAgICAgICBi cmVhazsKLSAgICAgY2FzZSBrZWFLZXk6Ci0gICAgICAgICBrZXlUeXBlRmllbGROYW1lID0gS0VB X0tFWVRZUEVfRklFTEQ7Ci0rICAgICAgICBicmVhazsKLSAgICAgZGVmYXVsdDoKLSAgICAgICAg IFBSX0FTU0VSVChQUl9GQUxTRSk7Ci0gICAgICAgICBrZXlUeXBlRmllbGROYW1lID0gTlVMTF9L RVlUWVBFX0ZJRUxEOwotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5jIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5jCi0tLS0ganNz LTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9Q SzExU3RvcmUuYwkyMDExLTA5LTE3IDE3OjMzOjA5LjAzMjk3NzAwMCAtMDcwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTdG9y ZS5jCTIwMTEtMDktMTcgMTk6NDg6NTcuNzc2NjI4MDAwIC0wNzAwCi1AQCAtMzkwLDEyICszOTAs NiBAQCBpbXBvcnRQcml2YXRlS2V5Ci0gICAgIFNFQ1N0YXR1cyBzdGF0dXM7Ci0gICAgIFNFQ0l0 ZW0gbmlja25hbWU7Ci0gCi0tICAgIGtleVR5cGUgPSBKU1NfUEsxMV9nZXRLZXlUeXBlKGVudiwg a2V5VHlwZU9iaik7Ci0tICAgIGlmKCBrZXlUeXBlID09IG51bGxLZXkgKSB7Ci0tICAgICAgICAv KiBleGNlcHRpb24gd2FzIHRocm93biAqLwotLSAgICAgICAgZ290byBmaW5pc2g7Ci0tICAgIH0K LS0KLSAgICAgLyoKLSAgICAgICogaW5pdGlhbGl6ZSBzbyB3ZSBjYW4gZ290byBmaW5pc2gKLSAg ICAgICovCi1AQCAtNDAzLDYgKzM5NywxMiBAQCBpbXBvcnRQcml2YXRlS2V5Ci0gICAgIGRlclBL LmxlbiA9IDA7Ci0gCi0gCi0rICAgIGtleVR5cGUgPSBKU1NfUEsxMV9nZXRLZXlUeXBlKGVudiwg a2V5VHlwZU9iaik7Ci0rICAgIGlmKCBrZXlUeXBlID09IG51bGxLZXkgKSB7Ci0rICAgICAgICAv KiBleGNlcHRpb24gd2FzIHRocm93biAqLwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0K LSsKLSAgICAgUFJfQVNTRVJUKGVudiE9TlVMTCAmJiB0aGlzIT1OVUxMKTsKLSAKLSAgICAgaWYo a2V5QXJyYXkgPT0gTlVMTCkgewotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5jIGpzcy00LjIuNi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5jCi0t LS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3MxMS9QSzExVG9rZW4uYwkyMDExLTA5LTE3IDE3OjMzOjA5LjA1MDk3NjAwMCAtMDcwMAotKysr IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFUb2tlbi5jCTIwMTEtMDktMTcgMTk6NTM6NDYuMTg0MzM5MDAwIC0wNzAwCi1AQCAtOTYyLDEy ICs5NjIsMTIgQEAgSk5JRVhQT1JUIGpzdHJpbmcgSk5JQ0FMTCBKYXZhX29yZ19tb3ppbAotIHsK LSAgICAgUEsxMVNsb3RJbmZvICpzbG90OwotICAgICBjb25zdCBjaGFyKiBjX3N1YmplY3Q9TlVM TDsKLS0gICAgamJvb2xlYW4gaXNDb3B5OwotKyAgICBqYm9vbGVhbiBpc0NvcHkgPSBKTklfRkFM U0U7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKmI2NHJlcXVlc3Q9TlVMTDsKLSAgICAgU0VDSXRlbSBw LCBxLCBnOwotICAgICBQUUdQYXJhbXMgKmRzYVBhcmFtcz1OVUxMOwotICAgICBjb25zdCBjaGFy KiBjX2tleVR5cGU7Ci0tICAgIGpib29sZWFuIGtfaXNDb3B5OwotKyAgICBqYm9vbGVhbiBrX2lz Q29weSA9IEpOSV9GQUxTRTsKLSAgICAgU0VDT2lkVGFnIHNpZ25UeXBlID0gU0VDX09JRF9VTktO T1dOOwotICAgICBQSzExUlNBR2VuUGFyYW1zIHJzYVBhcmFtczsKLSAgICAgdm9pZCAqcGFyYW1z ID0gTlVMTDsKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYwotLS0tIGpzcy00LjIuNi5vcmln L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmMJMjAx MS0wOS0xNyAxNzozMzowOS4wNzM5NzcwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYwkyMDExLTA5LTE3IDE5 OjU2OjIwLjQyODE4NDAwMCAtMDcwMAotQEAgLTUxNiwxMSArNTE2LDYgQEAgSmF2YV9vcmdfbW96 aWxsYV9qc3Nfc3NsX1NTTFNvY2tldF9zb2NrZQotICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAg IH0KLSAKLS0gICAgaWYoIGFkZHJCQWVsZW1zID09IE5VTEwgKSB7Ci0tICAgICAgICBBU1NFUlRf T1VUT0ZNRU0oZW52KTsKLS0gICAgICAgIGdvdG8gZmluaXNoOwotLSAgICB9Ci0tCi0gICAgIGlm KGFkZHJCQUxlbiAhPSA0ICYmIGFkZHJCQUxlbiAhPSAxNikgewotICAgICAgICAgSlNTTF90aHJv d1NTTFNvY2tldEV4Y2VwdGlvbihlbnYsICJJbnZhbGlkIGFkZHJlc3MgaW4gY29ubmVjdCEiKTsK LSAgICAgICAgIGdvdG8gZmluaXNoOwotQEAgLTcyMCw3ICs3MTUsNyBAQCBKYXZhX29yZ19tb3pp bGxhX2pzc19zc2xfU1NMU29ja2V0X2dldENpCi0gewotICAgICBKU1NMX1NvY2tldERhdGEgKnNv Y2s9TlVMTDsKLSAgICAgU0VDU3RhdHVzIHN0YXR1czsKLS0gICAgUFJCb29sIGVuYWJsZWQ7Ci0r ICAgIFBSQm9vbCBlbmFibGVkID0gUFJfRkFJTFVSRTsKLSAKLSAgICAgLyogZ2V0IHRoZSBmZCAq LwotICAgICBpZiggSlNTTF9nZXRTb2NrRGF0YShlbnYsIHNvY2tPYmosICZzb2NrKSAhPSBQUl9T VUNDRVNTKSB7Ci1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9zc2wvY2FsbGJhY2tzLmMganNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvY2FsbGJhY2tzLmMKLS0tLSBqc3MtNC4yLjYub3Jp Zy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2NhbGxiYWNrcy5jCTIw MDQtMDktMDMgMTE6MzI6MDMuMDAwMDAwMDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvY2FsbGJhY2tzLmMJMjAxMS0wOS0xNyAx ODoxNTowNy44MjUyNTIwMDAgLTA3MDAKLUBAIC02ODQsMTcgKzY4NCwxMyBAQCBKU1NMX0NvbmZp cm1FeHBpcmVkUGVlckNlcnQodm9pZCAqYXJnLCBQCi0gICAgICAgICAqIE5vdyBjaGVjayB0aGUg bmFtZSBmaWVsZCBpbiB0aGUgY2VydCBhZ2FpbnN0IHRoZSBkZXNpcmVkIGhvc3RuYW1lLgotICAg ICAgICAgKiBOQjogVGhpcyBpcyBvdXIgb25seSBkZWZlbnNlIGFnYWluc3QgTWFuLUluLVRoZS1N aWRkbGUgKE1JVE0pIGF0dGFja3MhCi0gICAgICAgICAqLwotLSAgICAgICAgaWYoIHBlZXJDZXJ0 ID09IE5VTEwgKSB7Ci0tICAgICAgICAgICAgcnYgPSBTRUNGYWlsdXJlOwotKyAgICAgICAgY2hh ciogaG9zdG5hbWUgPSBOVUxMOwotKyAgICAgICAgaG9zdG5hbWUgPSBTU0xfUmV2ZWFsVVJMKGZk KTsgLyogcmVhbGx5IGlzIGEgaG9zdG5hbWUsIG5vdCBhIFVSTCAqLwotKyAgICAgICAgaWYgKGhv c3RuYW1lICYmIGhvc3RuYW1lWzBdKSB7Ci0rICAgICAgICAgICAgcnYgPSBDRVJUX1ZlcmlmeUNl cnROYW1lKHBlZXJDZXJ0LCBob3N0bmFtZSk7Ci0rICAgICAgICAgICAgUE9SVF9GcmVlKGhvc3Ru YW1lKTsKLSAgICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgY2hhciogaG9zdG5hbWUgPSBO VUxMOwotLSAgICAgICAgICAgIGhvc3RuYW1lID0gU1NMX1JldmVhbFVSTChmZCk7IC8qIHJlYWxs eSBpcyBhIGhvc3RuYW1lLCBub3QgYSBVUkwgKi8KLS0gICAgICAgICAgICBpZiAoaG9zdG5hbWUg JiYgaG9zdG5hbWVbMF0pIHsKLS0gICAgICAgICAgICAgICAgcnYgPSBDRVJUX1ZlcmlmeUNlcnRO YW1lKHBlZXJDZXJ0LCBob3N0bmFtZSk7Ci0tICAgICAgICAgICAgICAgIFBPUlRfRnJlZShob3N0 bmFtZSk7Ci0tICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgcnYgPSBTRUNG YWlsdXJlOwotLSAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBydiA9IFNFQ0ZhaWx1cmU7Ci0g ICAgICAgICB9Ci0gICAgIH0KLSAKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9qYXZhc29jay5jIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2phdmFzb2NrLmMKLS0tLSBqc3Mt NC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2phdmFz b2NrLmMJMjAxMS0wOS0xNyAxNzozMzowOS4wOTQ5NzcwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9qYXZhc29jay5jCTIwMTEt MDktMTcgMTk6MTY6MzguNTQ2NTY2MDAwIC0wNzAwCi1AQCAtOTUsNiArOTUsMTAgQEAgd3JpdGVi dWYoSk5JRW52ICplbnYsIFBSRmlsZURlc2MgKmZkLCBqbwotICAgICBqaW50IGFycmF5TGVuPS0x OwotICAgICBQUkludDMyIHJldHZhbDsKLSAKLSsgICAgaWYoIGVudiA9PSBOVUxMICkgewotKyAg ICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsKLSAgICAgLyoKLSAgICAgICogZ2V0IHRoZSBP dXRwdXRTdHJlYW0KLSAgICAgICovCi1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL05hdGl2ZUVycmNvZGVzLmMganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL05hdGl2ZUVycmNv ZGVzLmMKLS0tLSBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvdXRpbC9OYXRpdmVFcnJjb2Rlcy5jCTIwMDItMDctMDMgMTc6MjU6NDYuMDAwMDAwMDAw IC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy91dGlsL05hdGl2ZUVycmNvZGVzLmMJMjAxMS0wOS0xOCAyMzowMjoyOC4xMzA4ODMwMDAgLTA3 MDAKLUBAIC00MjcsNiArNDI3LDcgQEAgSlNTX0NvbnZlcnROYXRpdmVFcnJjb2RlVG9KYXZhKFBS RXJyb3JDbwotICNlbmRpZgotIAotICAgICBrZXkubmF0aXZlID0gbmF0aXZlRXJyY29kZTsKLSsg ICAga2V5LmphdmEgPSAtMTsKLSAgICAgdGFyZ2V0ID0gYnNlYXJjaCggJmtleSwgZXJyY29kZVRh YmxlLCBudW1FcnJjb2Rlcywgc2l6ZW9mKEVycmNvZGUpLAotICAgICAgICAgZXJyY29kZUNvbXBh cmUgKTsKLSAKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3V0aWwvanNzdXRpbC5jIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3N1dGlsLmMKLS0tLSBqc3MtNC4yLjYub3JpZy9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3N1dGlsLmMJMjAxMS0w OS0xNyAxNzozMzowOS4xMDM5NzcwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvanNzdXRpbC5jCTIwMTEtMDktMTkgMTY6Mzg6 MTkuNDI4NjM0MDAwIC0wNzAwCi1AQCAtNTI5LDcgKzUyOSw3IEBAIEpTU193aXBlQ2hhckFycmF5 KGNoYXIqIGFycmF5KQotICAqLwotIHN0YXRpYyBjaGFyKiBnZXRQV0Zyb21Db25zb2xlKCkKLSB7 Ci0tICAgIGNoYXIgYzsKLSsgICAgaW50IGM7Ci0gICAgIGNoYXIgKnJldDsKLSAgICAgaW50IGk7 Ci0gICAgIGNoYXIgYnVmWzIwMF07ICAvKiBubyBidWZmZXIgb3ZlcmZsb3c6IHdlIGJhaWwgYWZ0 ZXIgMjAwIGNoYXJzICovCgpkaWZmIC0tZ2l0IGEvanNzLWZpeGVkLWJ1aWxkLWlzc3VlLW9uLUYx Ny1vci1uZXdlci5wYXRjaCBiL2pzcy1maXhlZC1idWlsZC1pc3N1ZS1vbi1GMTctb3ItbmV3ZXIu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZmM5NTIuLjAwMDAwMDAKLS0t IGEvanNzLWZpeGVkLWJ1aWxkLWlzc3VlLW9uLUYxNy1vci1uZXdlci5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDIzICswLDAgQEAKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9z ZWN1cml0eS9jb3JlY29uZi9jb25maWcubWsganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvY29y ZWNvbmYvY29uZmlnLm1rCi0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9jb3Jl Y29uZi9jb25maWcubWsJMjAwNy0wNS0wMyAyMzo1NDowNS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9jb3JlY29uZi9jb25maWcubWsJMjAxMy0wNy0yMiAx ODo0MjoxOS4wMDAwMDAwMDAgLTA3MDAKLUBAIC02OCw4ICs2OCwxOSBAQCBUQVJHRVRfT1NFUyA9 IEZyZWVCU0QgQlNEX09TIE5ldEJTRCBPcGVuCi0gaWZlcSAoLCQoZmlsdGVyLW91dCAkKFRBUkdF VF9PU0VTKSwkKE9TX1RBUkdFVCkpKQotIGluY2x1ZGUgJChDT1JFX0RFUFRIKS9jb3JlY29uZi8k KE9TX1RBUkdFVCkubWsKLSBlbHNlCi0raWZlcSAoJChPU19UQVJHRVQpLCBMaW51eCkKLStPU19S RUxFQVNFX1ZFUl9NQUpPUiA6PSAkKHNoZWxsIGVjaG8gJChPU19SRUxFQVNFKSB8IGN1dCAtZjEg LWQuKQotK09TX1JFTEVBU0VfVkVSX01JTk9SIDo9ICQoc2hlbGwgZWNobyAkKE9TX1JFTEVBU0Up IHwgY3V0IC1mMiAtZC4pCi0rT1NfUkVMRUFTRV9HVF8yXzYgOj0gJChzaGVsbCBbICQoT1NfUkVM RUFTRV9WRVJfTUFKT1IpIC1nZSAyIC1vIFwoICQoT1NfUkVMRUFTRV9WRVJfTUFKT1IpIC1lcSAy IC1hICQoT1NfUkVMRUFTRV9WRVJfTUlOT1IpIC1nZSA2IFwpIF0gJiYgZWNobyB0cnVlKQotK2lm ZXEgKCQoT1NfUkVMRUFTRV9HVF8yXzYpLHRydWUpCi0raW5jbHVkZSAkKENPUkVfREVQVEgpL2Nv cmVjb25mL0xpbnV4Mi42Lm1rCi0rZWxzZQotIGluY2x1ZGUgJChDT1JFX0RFUFRIKS9jb3JlY29u Zi8kKE9TX1RBUkdFVCkkKE9TX1JFTEVBU0UpLm1rCi0gZW5kaWYKLStlbHNlCi0raW5jbHVkZSAk KENPUkVfREVQVEgpL2NvcmVjb25mLyQoT1NfVEFSR0VUKSQoT1NfUkVMRUFTRSkubWsKLStlbmRp ZgotK2VuZGlmCi0gCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAjIFs0LjBdIE1hc3RlciAiQ29yZSBDb21w b25lbnRzIiBzb3VyY2UgYW5kIHJlbGVhc2UgPHBsYXRmb3JtPiB0YWdzICAgIwoKZGlmZiAtLWdp dCBhL2pzcy1pcHY2LnBhdGNoIGIvanNzLWlwdjYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDlmZDVmYjkuLjAwMDAwMDAKLS0tIGEvanNzLWlwdjYucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSw2MjMgKzAsMCBAQAotZGlmZiAtcnVwTiBqc3MtNC4yLjYucHJlLUlQdjYvbW96 aWxsYS9zZWN1cml0eS9qc3MvbGliL2pzcy5kZWYganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL2xpYi9qc3MuZGVmCi0tLS0ganNzLTQuMi42LnByZS1JUHY2L21vemlsbGEvc2VjdXJpdHkv anNzL2xpYi9qc3MuZGVmCTIwMDktMDYtMjQgMTc6MDg6NTkuNzg0MzcxMDAwIC0wNzAwCi0rKysg anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9qc3MuZGVmCTIwMDktMDYtMTkgMTc6 NTY6MDAuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMTc1LDYgKzE3NSw3IEBAIEphdmFfb3JnX21vemls bGFfanNzX3NzbF9TU0xTZXJ2ZXJTb2NrZXQKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU1NM U29ja2V0X2ZvcmNlSGFuZHNoYWtlOwotIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9TU0xTb2Nr ZXRfZ2V0S2VlcEFsaXZlOwotIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9TU0xTb2NrZXRfZ2V0 TG9jYWxBZGRyZXNzTmF0aXZlOwotK0phdmFfb3JnX21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNl X2dldExvY2FsQWRkcmVzc0J5dGVBcnJheU5hdGl2ZTsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19z c2xfU1NMU29ja2V0X2dldFBvcnQ7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NTTFNvY2tl dF9nZXRSZWNlaXZlQnVmZmVyU2l6ZTsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU1NMU29j a2V0X2dldFNlbmRCdWZmZXJTaXplOwotQEAgLTE5OSw2ICsyMDAsNyBAQCBKYXZhX29yZ19tb3pp bGxhX2pzc19zc2xfU1NMU29ja2V0X3NvY2tlCi0gSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NT TFNvY2tldF9zb2NrZXRXcml0ZTsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU29ja2V0QmFz ZV9nZXRMb2NhbFBvcnROYXRpdmU7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NvY2tldEJh c2VfZ2V0UGVlckFkZHJlc3NOYXRpdmU7Ci0rSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NvY2tl dEJhc2VfZ2V0UGVlckFkZHJlc3NCeXRlQXJyYXlOYXRpdmU7Ci0gSmF2YV9vcmdfbW96aWxsYV9q c3Nfc3NsX1NvY2tldEJhc2Vfc2V0Q2xpZW50Q2VydE5pY2tuYW1lTmF0aXZlOwotIEphdmFfb3Jn X21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX3JlcXVlc3RDbGllbnRBdXRoTm9FeHBpcnlDaGVj a05hdGl2ZTsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU29ja2V0QmFzZV9zZXRTU0xPcHRp b247Ci1kaWZmIC1ydXBOIGpzcy00LjIuNi5wcmUtSVB2Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNlcnZlclNvY2tldC5qYXZhIGpzcy00LjIuNi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNlcnZlclNvY2tldC5qYXZhCi0t LS0ganNzLTQuMi42LnByZS1JUHY2L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9zc2wvU1NMU2VydmVyU29ja2V0LmphdmEJMjAwNy0wMy0yMCAxNTozOToyOC4wMDAwMDAwMDAg LTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3NzbC9TU0xTZXJ2ZXJTb2NrZXQuamF2YQkyMDA5LTA2LTI0IDEzOjQ2OjQ5LjAwMDAwMDAwMCAt MDcwMAotQEAgLTM2LDcgKzM2LDggQEAKLSAKLSBwYWNrYWdlIG9yZy5tb3ppbGxhLmpzcy5zc2w7 Ci0gCi0taW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotK2ltcG9ydCBqYXZhLnV0aWwuKjsK LStpbXBvcnQgamF2YS5uZXQuKjsKLSBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLSBpbXBv cnQgamF2YS5uZXQuU29ja2V0OwotIGltcG9ydCBqYXZhLm5ldC5Tb2NrZXRFeGNlcHRpb247Ci1A QCAtMTM4LDM0ICsxMzksMzQgQEAgcHVibGljIGNsYXNzIFNTTFNlcnZlclNvY2tldCBleHRlbmRz IGphdgotICAgICAgICAgc3VwZXIuY2xvc2UoKTsKLSAKLSAgICAgICAgIC8vIGNyZWF0ZSB0aGUg c29ja2V0Ci0rCi0rICAgICAgICBpbnQgc29ja2V0RmFtaWx5ID0gU29ja2V0QmFzZS5TU0xfQUZf SU5FVDsKLSsgICAgICAgIGlmKFNvY2tldEJhc2Uuc3VwcG9ydHNJUFY2KCkpIHsKLSsgICAgICAg ICAgICBzb2NrZXRGYW1pbHkgPSBTb2NrZXRCYXNlLlNTTF9BRl9JTkVUNjsKLSsgICAgICAgIH0K LSsKLSAgICAgICAgIHNvY2tQcm94eSA9IG5ldyBTb2NrZXRQcm94eSgKLS0gICAgICAgICAgICBi YXNlLnNvY2tldENyZWF0ZSh0aGlzLCBjZXJ0QXBwcm92YWxDYWxsYmFjaywgbnVsbCkgKTsKLSsg ICAgICAgICAgICBiYXNlLnNvY2tldENyZWF0ZSh0aGlzLCBjZXJ0QXBwcm92YWxDYWxsYmFjaywg bnVsbCxzb2NrZXRGYW1pbHkpICk7Ci0gCi0gICAgICAgICBiYXNlLnNldFByb3h5KHNvY2tQcm94 eSk7Ci0gCi0gICAgICAgICBzZXRSZXVzZUFkZHJlc3MocmV1c2VBZGRyKTsKLSAKLS0gICAgICAg IC8vIGJpbmQgaXQgdG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQKLS0gICAgICAgIGlmKCBi aW5kQWRkciA9PSBudWxsICkgewotLSAgICAgICAgICAgIGJpbmRBZGRyID0gYW55TG9jYWxBZGRy OwotLSAgICAgICAgfQotICAgICAgICAgYnl0ZVtdIGJpbmRBZGRyQkEgPSBudWxsOwotICAgICAg ICAgaWYoIGJpbmRBZGRyICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgYmluZEFkZHJCQSA9IGJp bmRBZGRyLmdldEFkZHJlc3MoKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGJhc2Uuc29ja2V0Qmlu ZChiaW5kQWRkckJBLCBwb3J0KTsKLSsKLSsgICAgICAgIFN0cmluZyBob3N0TmFtZSA9IG51bGw7 Ci0rICAgICAgICBpZihiaW5kQWRkciAhPSBudWxsKSAgewotKyAgICAgICAgICAgIGhvc3ROYW1l ID0gYmluZEFkZHIuZ2V0Q2Fub25pY2FsSG9zdE5hbWUoKTsKLSsgICAgICAgIH0KLSAgICAgICAg IHNvY2tldExpc3RlbihiYWNrbG9nKTsKLSAgICAgfQotIAotICAgICBwcml2YXRlIG5hdGl2ZSB2 b2lkIHNvY2tldExpc3RlbihpbnQgYmFja2xvZykgdGhyb3dzIFNvY2tldEV4Y2VwdGlvbjsKLSAK LS0gICAgcHJpdmF0ZSBzdGF0aWMgSW5ldEFkZHJlc3MgYW55TG9jYWxBZGRyOwotLSAgICBzdGF0 aWMgewotLSAgICAgICAgdHJ5IHsKLS0gICAgICAgICAgICBhbnlMb2NhbEFkZHIgPSBJbmV0QWRk cmVzcy5nZXRCeU5hbWUoIjAuMC4wLjAiKTsKLS0gICAgICAgIH0gY2F0Y2ggKGphdmEubmV0LlVu a25vd25Ib3N0RXhjZXB0aW9uIGUpIHsgfQotLSAgICB9Ci0tCi0gICAgIC8qKgotICAgICAgKiBB Y2NlcHRzIGEgY29ubmVjdGlvbi4gVGhpcyBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBjb25uZWN0 aW9uIGlzIG1hZGUKLSAgICAgICogb3IgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4KLWRpZmYgLXJ1 cE4ganNzLTQuMi42LnByZS1JUHY2L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9zc2wvU1NMU29ja2V0LmMganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9zc2wvU1NMU29ja2V0LmMKLS0tLSBqc3MtNC4yLjYucHJlLUlQdjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYwkyMDA3LTA1LTA4IDE4 OjQwOjE0LjAwMDAwMDAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNvY2tldC5jCTIwMDktMDYtMjQgMTM6Mjc6MTUuMDAw MDAwMDAwIC0wNzAwCi1AQCAtNDYwLDEwICs0NjAsMTUgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3Nf c3NsX1NTTFNvY2tldF9zb2NrZQotICAgICBKU1NMX1NvY2tldERhdGEgKnNvY2s7Ci0gICAgIFBS TmV0QWRkciBhZGRyOwotICAgICBqYnl0ZSAqYWRkckJBZWxlbXMgPSBOVUxMOwotKyAgICBpbnQg YWRkckJBTGVuID0gMDsgCi0gICAgIFBSU3RhdHVzIHN0YXR1czsKLSAgICAgaW50IHN0YXQ7Ci0g ICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lU3RyPU5VTEw7Ci0gCi0rICAgIGptZXRob2RJRCBzdXBw b3J0c0lQVjZJRDsKLSsgICAgamNsYXNzIHNvY2tldEJhc2VDbGFzczsKLSsgICAgamJvb2xlYW4g c3VwcG9ydHNJUFY2ID0gMDsKLSsKLSAgICAgaWYoIEpTU0xfZ2V0U29ja0RhdGEoZW52LCBzZWxm LCAmc29jaykgIT0gUFJfU1VDQ0VTUykgewotICAgICAgICAgLyogZXhjZXB0aW9uIHdhcyB0aHJv d24gKi8KLSAgICAgICAgIGdvdG8gZmluaXNoOwotQEAgLTQ3MiwxNiArNDc3LDMyIEBAIEphdmFf b3JnX21vemlsbGFfanNzX3NzbF9TU0xTb2NrZXRfc29ja2UKLSAgICAgLyoKLSAgICAgICogc2V0 dXAgdGhlIFBSTmV0QWRkciBzdHJ1Y3R1cmUKLSAgICAgICovCi0tICAgIGFkZHIuaW5ldC5mYW1p bHkgPSBBRl9JTkVUOwotLSAgICBhZGRyLmluZXQucG9ydCA9IGh0b25zKHBvcnQpOwotLSAgICBQ Ul9BU1NFUlQoc2l6ZW9mKGFkZHIuaW5ldC5pcCkgPT0gNCk7Ci0tICAgIFBSX0FTU0VSVCggKCpl bnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGFkZHJCQSkgPT0gNCk7Ci0rCi0rICAgIHNvY2tldEJh c2VDbGFzcyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgU09DS0VUX0JBU0VfTkFNRSk7Ci0rICAg IGlmKCBzb2NrZXRCYXNlQ2xhc3MgPT0gTlVMTCApIHsKLSsgICAgICAgIEFTU0VSVF9PVVRPRk1F TShlbnYpOwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsgICAgc3VwcG9ydHNJUFY2 SUQgPSAoKmVudiktPkdldFN0YXRpY01ldGhvZElEKGVudiwgc29ja2V0QmFzZUNsYXNzLAotKyAg ICAgICAgU1VQUE9SVFNfSVBWNl9OQU1FLCBTVVBQT1JUU19JUFY2X1NJRyk7Ci0rCi0rICAgIGlm KCBzdXBwb3J0c0lQVjZJRCA9PSBOVUxMICkgewotKyAgICAgICAgQVNTRVJUX09VVE9GTUVNKGVu dik7Ci0rICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICBzdXBwb3J0c0lQVjYg PSAoKmVudiktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKGVudiwgc29ja2V0QmFzZUNsYXNzLAot KyAgICAgICAgIHN1cHBvcnRzSVBWNklEKTsKLSsKLSAgICAgYWRkckJBZWxlbXMgPSAoKmVudikt PkdldEJ5dGVBcnJheUVsZW1lbnRzKGVudiwgYWRkckJBLCBOVUxMKTsKLSsgICAgYWRkckJBTGVu ID0gKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGFkZHJCQSk7Ci0rCi0rICAgIFBSX0FTU0VS VChhZGRyQkFMZW4gIT0gMCk7Ci0rCi0gICAgIGlmKCBhZGRyQkFlbGVtcyA9PSBOVUxMICkgewot ICAgICAgICAgQVNTRVJUX09VVE9GTUVNKGVudik7Ci0gICAgICAgICBnb3RvIGZpbmlzaDsKLSAg ICAgfQotLSAgICBtZW1jcHkoJmFkZHIuaW5ldC5pcCwgYWRkckJBZWxlbXMsIDQpOwotIAotICAg ICAvKgotICAgICAgKiBUZWxsIFNTTCB0aGUgVVJMIHdlIHRoaW5rIHdlIHdhbnQgdG8gY29ubmVj dCB0by4KLUBAIC00OTUsNiArNTE2LDM4IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9TU0xT b2NrZXRfc29ja2UKLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci0gCi0rICAgIGlmKCBh ZGRyQkFlbGVtcyA9PSBOVUxMICkgewotKyAgICAgICAgQVNTRVJUX09VVE9GTUVNKGVudik7Ci0r ICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICBpZihhZGRyQkFMZW4gIT0gNCAm JiBhZGRyQkFMZW4gIT0gMTYpIHsKLSsgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRp b24oZW52LCAiSW52YWxpZCBhZGRyZXNzIGluIGNvbm5lY3QhIik7Ci0rICAgICAgICBnb3RvIGZp bmlzaDsKLSsgICAgfQotKwotKyAgICBpZiggYWRkckJBTGVuID09IDQpIHsKLSsgICAgICAgIGFk ZHIuaW5ldC5mYW1pbHkgPSBBRl9JTkVUOwotKyAgICAgICAgYWRkci5pbmV0LnBvcnQgPSBQUl9o dG9ucyhwb3J0KTsKLSsgICAgICAgIG1lbWNweSgmYWRkci5pbmV0LmlwLCBhZGRyQkFlbGVtcywg NCk7Ci0rCi0rICAgICAgICBpZihzdXBwb3J0c0lQVjYpIHsKLSsgICAgICAgICAgICBhZGRyLmlw djYuZmFtaWx5ID0gQUZfSU5FVDY7Ci0rICAgICAgICAgICAgYWRkci5pcHY2LnBvcnQgPSBQUl9o dG9ucyhwb3J0KTsKLSsgICAgICAgICAgICBQUl9Db252ZXJ0SVB2NEFkZHJUb0lQdjYoYWRkci5p bmV0LmlwLCZhZGRyLmlwdjYuaXApOwotKyAgICAgICAgfQotKwotKyAgICB9ICBlbHNlIHsgICAv KiBNdXN0IGJlIDE2IGFuZCBpcHY2ICovCi0rICAgICAgICBpZihzdXBwb3J0c0lQVjYpIHsKLSsg ICAgICAgICAgICBhZGRyLmlwdjYuZmFtaWx5ID0gQUZfSU5FVDY7Ci0rICAgICAgICAgICAgYWRk ci5pcHY2LnBvcnQgPSBQUl9odG9ucyhwb3J0KTsKLSsgICAgICAgICAgICBtZW1jcHkoJmFkZHIu aXB2Ni5pcCxhZGRyQkFlbGVtcywgMTYpOwotKyAgICAgICAgfSAgZWxzZSB7Ci0rICAgICAgICAg ICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oZW52LCAiSW52YWxpZCBhZGRyZXNz IGluIGNvbm5lY3QhIik7Ci0rICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICAgICAg fQotKyAgICB9Ci0rCi0gICAgIC8qCi0gICAgICAqIG1ha2UgdGhlIGNvbm5lY3QgY2FsbAotICAg ICAgKi8KLWRpZmYgLXJ1cE4ganNzLTQuMi42LnByZS1JUHY2L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmphdmEganNzLTQuMi42L21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmphdmEKLS0tLSBqc3MtNC4y LjYucHJlLUlQdjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xT b2NrZXQuamF2YQkyMDA3LTA1LTA4IDE4OjQwOjE0LjAwMDAwMDAwMCAtMDcwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNvY2tldC5q YXZhCTIwMDktMDYtMjQgMTM6NDU6NTkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMjQzLDExICsyNDMs MTYgQEAgcHVibGljIGNsYXNzIFNTTFNvY2tldCBleHRlbmRzIGphdmEubmV0LgotICAgICAgICAg U1NMQ2xpZW50Q2VydGlmaWNhdGVTZWxlY3Rpb25DYWxsYmFjayBjbGllbnRDZXJ0U2VsZWN0aW9u Q2FsbGJhY2spCi0gICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgIHsKLSsKLSsg ICAgICAgIGludCBzb2NrZXRGYW1pbHkgPSBTb2NrZXRCYXNlLlNTTF9BRl9JTkVUOwotKyAgICAg ICAgaWYoU29ja2V0QmFzZS5zdXBwb3J0c0lQVjYoKSkgewotKyAgICAgICAgICAgIHNvY2tldEZh bWlseSA9IFNvY2tldEJhc2UuU1NMX0FGX0lORVQ2OwotKyAgICAgICAgfQotICAgICAgICAgLy8g Y3JlYXRlIHRoZSBzb2NrZXQKLSAgICAgICAgIHNvY2tQcm94eSA9Ci0gICAgICAgICAgICAgbmV3 IFNvY2tldFByb3h5KAotICAgICAgICAgICAgICAgICBiYXNlLnNvY2tldENyZWF0ZSgKLS0gICAg ICAgICAgICAgICAgICAgIHRoaXMsIGNlcnRBcHByb3ZhbENhbGxiYWNrLCBjbGllbnRDZXJ0U2Vs ZWN0aW9uQ2FsbGJhY2spICk7Ci0rICAgICAgICAgICAgICAgICAgICB0aGlzLCBjZXJ0QXBwcm92 YWxDYWxsYmFjaywgY2xpZW50Q2VydFNlbGVjdGlvbkNhbGxiYWNrLHNvY2tldEZhbWlseSkgKTsK LSAKLSAgICAgICAgIGJhc2Uuc2V0UHJveHkoc29ja1Byb3h5KTsKLSAKLUBAIC0yODgsNyArMjkz LDcgQEAgcHVibGljIGNsYXNzIFNTTFNvY2tldCBleHRlbmRzIGphdmEubmV0LgotICAgICAgICAg ICAgIG5ldyBTb2NrZXRQcm94eSgKLSAgICAgICAgICAgICAgICAgYmFzZS5zb2NrZXRDcmVhdGUo Ci0gICAgICAgICAgICAgICAgICAgICB0aGlzLCBjZXJ0QXBwcm92YWxDYWxsYmFjaywgY2xpZW50 Q2VydFNlbGVjdGlvbkNhbGxiYWNrLAotLSAgICAgICAgICAgICAgICAgICAgcywgaG9zdCApICk7 Ci0rICAgICAgICAgICAgICAgICAgICBzLCBob3N0LFNvY2tldEJhc2UuU1NMX0FGX0lORVQgKSAp OwotIAotICAgICAgICAgYmFzZS5zZXRQcm94eShzb2NrUHJveHkpOwotICAgICAgICAgcmVzZXRI YW5kc2hha2UoKTsKLWRpZmYgLXJ1cE4ganNzLTQuMi42LnByZS1JUHY2L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU29ja2V0QmFzZS5qYXZhIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NvY2tldEJhc2UuamF2YQotLS0t IGpzcy00LjIuNi5wcmUtSVB2Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv c3NsL1NvY2tldEJhc2UuamF2YQkyMDA3LTAzLTIwIDE1OjM5OjI4LjAwMDAwMDAwMCAtMDcwMAot KysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1Nv Y2tldEJhc2UuamF2YQkyMDA5LTA2LTI0IDEzOjUwOjMyLjAwMDAwMDAwMCAtMDcwMAotQEAgLTcw LDE2ICs3MCwxNiBAQCBjbGFzcyBTb2NrZXRCYXNlIHsKLSAgICAgbmF0aXZlIGJ5dGVbXSBzb2Nr ZXRDcmVhdGUoT2JqZWN0IHNvY2tldE9iamVjdCwKLSAgICAgICAgIFNTTENlcnRpZmljYXRlQXBw cm92YWxDYWxsYmFjayBjZXJ0QXBwcm92YWxDYWxsYmFjaywKLSAgICAgICAgIFNTTENsaWVudENl cnRpZmljYXRlU2VsZWN0aW9uQ2FsbGJhY2sgY2xpZW50Q2VydFNlbGVjdGlvbkNhbGxiYWNrLAot LSAgICAgICAgamF2YS5uZXQuU29ja2V0IGphdmFTb2NrLCBTdHJpbmcgaG9zdCkKLSsgICAgICAg IGphdmEubmV0LlNvY2tldCBqYXZhU29jaywgU3RyaW5nIGhvc3QsaW50IGZhbWlseSkKLSAgICAg ICAgICAgICB0aHJvd3MgU29ja2V0RXhjZXB0aW9uOwotIAotICAgICBieXRlW10gc29ja2V0Q3Jl YXRlKE9iamVjdCBzb2NrZXRPYmplY3QsCi0gICAgICAgICBTU0xDZXJ0aWZpY2F0ZUFwcHJvdmFs Q2FsbGJhY2sgY2VydEFwcHJvdmFsQ2FsbGJhY2ssCi0tICAgICAgICBTU0xDbGllbnRDZXJ0aWZp Y2F0ZVNlbGVjdGlvbkNhbGxiYWNrIGNsaWVudENlcnRTZWxlY3Rpb25DYWxsYmFjaykKLSsgICAg ICAgIFNTTENsaWVudENlcnRpZmljYXRlU2VsZWN0aW9uQ2FsbGJhY2sgY2xpZW50Q2VydFNlbGVj dGlvbkNhbGxiYWNrLGludCBmYW1pbHkpCi0gICAgICAgICAgICAgdGhyb3dzIFNvY2tldEV4Y2Vw dGlvbgotICAgICB7Ci0gICAgICAgICByZXR1cm4gc29ja2V0Q3JlYXRlKHNvY2tldE9iamVjdCwg Y2VydEFwcHJvdmFsQ2FsbGJhY2ssCi0tICAgICAgICAgICAgY2xpZW50Q2VydFNlbGVjdGlvbkNh bGxiYWNrLCBudWxsLCBudWxsKTsKLSsgICAgICAgICAgICBjbGllbnRDZXJ0U2VsZWN0aW9uQ2Fs bGJhY2ssIG51bGwsIG51bGwsZmFtaWx5KTsKLSAgICAgfQotIAotICAgICBuYXRpdmUgdm9pZCBz b2NrZXRCaW5kKGJ5dGVbXSBhZGRyQkEsIGludCBwb3J0KSB0aHJvd3MgU29ja2V0RXhjZXB0aW9u OwotQEAgLTExNSw2ICsxMTUsMTAgQEAgY2xhc3MgU29ja2V0QmFzZSB7Ci0gICAgIHN0YXRpYyBm aW5hbCBpbnQgU1NMX1JFUVVJUkVfRklSU1RfSEFORFNIQUtFID0gMjA7Ci0gICAgIHN0YXRpYyBm aW5hbCBpbnQgU1NMX1JFUVVJUkVfTk9fRVJST1IgPSAyMTsKLSAKLSsKLSsgICAgc3RhdGljIGZp bmFsIGludCBTU0xfQUZfSU5FVCAgPSA1MDsKLSsgICAgc3RhdGljIGZpbmFsIGludCBTU0xfQUZf SU5FVDYgPSA1MTsKLSsKLSAgICAgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g ICAgICAgICBzb2NrZXRDbG9zZSgpOwotICAgICB9Ci1AQCAtMjgxLDEzICsyODUsMjUgQEAgY2xh c3MgU29ja2V0QmFzZSB7Ci0gICAgICAgICByZXR1cm4gaW47Ci0gICAgIH0KLSAKLSsgICAgcHJp dmF0ZSBuYXRpdmUgYnl0ZVtdIGdldExvY2FsQWRkcmVzc0J5dGVBcnJheU5hdGl2ZSgpIHRocm93 cyBTb2NrZXRFeGNlcHRpb247Ci0rICAgIHByaXZhdGUgbmF0aXZlIGJ5dGVbXSBnZXRQZWVyQWRk cmVzc0J5dGVBcnJheU5hdGl2ZSgpIHRocm93cyBTb2NrZXRFeGNlcHRpb247Ci0gICAgIC8qKgot ICAgICAgKiBAcmV0dXJuIHRoZSBJbmV0QWRkcmVzcyBvZiB0aGUgcGVlciBlbmQgb2YgdGhlIHNv Y2tldC4KLSAgICAgICovCi0gICAgIEluZXRBZGRyZXNzIGdldEluZXRBZGRyZXNzKCkKLSAgICAg ewotICAgICAgICAgdHJ5IHsKLS0gICAgICAgICAgICByZXR1cm4gY29udmVydEludFRvSW5ldEFk ZHJlc3MoIGdldFBlZXJBZGRyZXNzTmF0aXZlKCkgKTsKLSsgICAgICAgICAgICBieXRlW10gYWRk cmVzcyA9IGdldFBlZXJBZGRyZXNzQnl0ZUFycmF5TmF0aXZlKCk7IAotKwotKyAgICAgICAgICAg IEluZXRBZGRyZXNzIGlBZGRyID0gbnVsbDsKLSsKLSsgICAgICAgICAgICB0cnkgewotKwotKyAg ICAgICAgICAgICAgICBpQWRkciA9IEluZXRBZGRyZXNzLmdldEJ5QWRkcmVzcyhhZGRyZXNzKTsK LSsgICAgICAgICAgICB9ICAgY2F0Y2goVW5rbm93bkhvc3RFeGNlcHRpb24gZSkgewotKyAgICAg ICAgICAgIH0KLSsKLSsgICAgICAgICAgICByZXR1cm4gaUFkZHI7Ci0gICAgICAgICB9IGNhdGNo KFNvY2tldEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg ICB9Ci1AQCAtMjk5LDcgKzMxNSwxNyBAQCBjbGFzcyBTb2NrZXRCYXNlIHsKLSAgICAgICovCi0g ICAgIEluZXRBZGRyZXNzIGdldExvY2FsQWRkcmVzcygpIHsKLSAgICAgICAgIHRyeSB7Ci0tICAg ICAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnRUb0luZXRBZGRyZXNzKCBnZXRMb2NhbEFkZHJlc3NO YXRpdmUoKSApOwotKyAgICAgICAgICAgIGJ5dGVbXSBhZGRyZXNzID0gZ2V0TG9jYWxBZGRyZXNz Qnl0ZUFycmF5TmF0aXZlKCk7Ci0rCi0rICAgICAgICAgICAgSW5ldEFkZHJlc3MgbEFkZHIgPSBu dWxsOwotKwotKyAgICAgICAgICAgIHRyeSB7Ci0rCi0rICAgICAgICAgICAgICAgIGxBZGRyID0g SW5ldEFkZHJlc3MuZ2V0QnlBZGRyZXNzKGFkZHJlc3MpOwotKyAgICAgICAgICAgIH0gICBjYXRj aChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAg ICAgIHJldHVybiBsQWRkcjsKLSAgICAgICAgIH0gY2F0Y2goU29ja2V0RXhjZXB0aW9uIGUpIHsK LSAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgIH0KLUBAIC0zNzgsNCArNDA0LDQ1 IEBAIGNsYXNzIFNvY2tldEJhc2UgewotICAgICAgICAgcmV0dXJuIHRvcEV4Y2VwdGlvbjsKLSAg ICAgICB9Ci0gICAgIH0KLSsgICAKLSsgICAgc3RhdGljIHByaXZhdGUgaW50IHN1cHBvcnRzSVBW NiA9IC0xOwotKyAgICBzdGF0aWMgYm9vbGVhbiBzdXBwb3J0c0lQVjYoKSB7Ci0rCi0rICAgICAg ICBpZihzdXBwb3J0c0lQVjYgPj0gMCkgewotKyAgICAgICAgICAgIGlmKHN1cHBvcnRzSVBWNiA+ IDApIHsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0rICAgICAgICAgICAgfSBlbHNl IHsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICAgICAgICAgIH0gCi0rICAg ICAgICB9Ci0rCi0rICAgICAgICBFbnVtZXJhdGlvbiBuZXRJbnRlcjsKLSsgICAgICAgIHRyeSB7 Ci0rICAgICAgICAgICAgICAgICBuZXRJbnRlciA9IE5ldHdvcmtJbnRlcmZhY2UuZ2V0TmV0d29y a0ludGVyZmFjZXMoKTsKLSsgICAgICAgIH0gIGNhdGNoIChTb2NrZXRFeGNlcHRpb24gZSkgewot KwotKyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICAgICAgfQotKyAgICAgICAg d2hpbGUgKCBuZXRJbnRlci5oYXNNb3JlRWxlbWVudHMoKSApCi0rICAgICAgICB7Ci0rICAgICAg ICAgICAgTmV0d29ya0ludGVyZmFjZSBuaSA9IChOZXR3b3JrSW50ZXJmYWNlKW5ldEludGVyLm5l eHRFbGVtZW50KCk7Ci0rICAgICAgICAgICAgRW51bWVyYXRpb24gYWRkcnMgPSBuaS5nZXRJbmV0 QWRkcmVzc2VzKCk7Ci0rICAgICAgICAgICAgd2hpbGUgKCBhZGRycy5oYXNNb3JlRWxlbWVudHMo KSApCi0rICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAgT2JqZWN0IG8gPSBhZGRycy5u ZXh0RWxlbWVudCgpOwotKyAgICAgICAgICAgICAgICAgaWYgKCBvLmdldENsYXNzKCkgPT0gSW5l dEFkZHJlc3MuY2xhc3MgfHwKLSsgICAgICAgICAgICAgICAgICAgICBvLmdldENsYXNzKCkgPT0g SW5ldDRBZGRyZXNzLmNsYXNzIHx8Ci0rICAgICAgICAgICAgICAgICAgICAgby5nZXRDbGFzcygp ID09IEluZXQ2QWRkcmVzcy5jbGFzcyApCi0rICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAg ICAgICAgICAgICAgIEluZXRBZGRyZXNzIGlhZGRyID0gKEluZXRBZGRyZXNzKSBvOwotKyAgICAg ICAgICAgICAgICAgICAgICBpZihvLmdldENsYXNzKCkgPT0gSW5ldDZBZGRyZXNzLmNsYXNzKSB7 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0c0lQVjYgPSAxOwotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0rICAgICAgICAgICAgICAgICAgICAgIH0K LSsgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAg ICBzdXBwb3J0c0lQVjYgPSAwOwotKyAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICB9Ci0gfQot ZGlmZiAtcnVwTiBqc3MtNC4yLjYucHJlLUlQdjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3NzbC9jb21tb24uYyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3NzbC9jb21tb24uYwotLS0tIGpzcy00LjIuNi5wcmUtSVB2Ni9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2NvbW1vbi5jCTIwMDctMDQtMjQgMTE6 MzQ6NTguMDAwMDAwMDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9zc2wvY29tbW9uLmMJMjAwOS0wNi0yNCAxNDoyMjowMi4wMDAwMDAw MDAgLTA3MDAKLUBAIC0zMyw3ICszMyw2IEBACi0gICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KLSAgKgotICAqICoqKioqIEVORCBMSUNFTlNF IEJMT0NLICoqKioqICovCi0tCi0gI2luY2x1ZGUgPG5zcHIuaD4KLSAjaW5jbHVkZSA8am5pLmg+ Ci0gI2luY2x1ZGUgPHBrMTFmdW5jLmg+Ci1AQCAtNTEsNiArNTAsOSBAQAotICNpbmNsdWRlIDx3 aW5zb2NrLmg+Ci0gI2VuZGlmCi0gCi0rI2RlZmluZSBTU0xfQUZfSU5FVCAgNTAKLSsjZGVmaW5l IFNTTF9BRl9JTkVUNiA1MQotKwotIHZvaWQKLSBKU1NMX3Rocm93U1NMU29ja2V0RXhjZXB0aW9u KEpOSUVudiAqZW52LCBjaGFyICptZXNzYWdlKQotIHsKLUBAIC0xNDIsNyArMTQ0LDcgQEAgZmlu aXNoOgotIEpOSUVYUE9SVCBqYnl0ZUFycmF5IEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxhX2pz c19zc2xfU29ja2V0QmFzZV9zb2NrZXRDcmVhdGUoSk5JRW52ICplbnYsIGpvYmplY3Qgc2VsZiwK LSAgICAgam9iamVjdCBzb2NrT2JqLCBqb2JqZWN0IGNlcnRBcHByb3ZhbENhbGxiYWNrLAotLSAg ICBqb2JqZWN0IGNsaWVudENlcnRTZWxlY3Rpb25DYWxsYmFjaywgam9iamVjdCBqYXZhU29jaywg anN0cmluZyBob3N0KQotKyAgICBqb2JqZWN0IGNsaWVudENlcnRTZWxlY3Rpb25DYWxsYmFjaywg am9iamVjdCBqYXZhU29jaywganN0cmluZyBob3N0LGppbnQgZmFtaWx5KQotIHsKLSAgICAgamJ5 dGVBcnJheSBzZEFycmF5ID0gTlVMTDsKLSAgICAgSlNTTF9Tb2NrZXREYXRhICpzb2NrZGF0YSA9 IE5VTEw7Ci1AQCAtMTUwLDEwICsxNTIsMjEgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1Nv Y2tldEJhc2Vfc29jawotICAgICBQUkZpbGVEZXNjICpuZXdGRDsKLSAgICAgUFJGaWxlRGVzYyAq dG1wRkQ7Ci0gICAgIFBSRmlsZVByaXZhdGUgKnByaXYgPSBOVUxMOwotKyAgICBpbnQgc29ja2V0 RmFtaWx5ID0gMDsKLSsKLSsgICAgaWYgKGZhbWlseSAhPSBTU0xfQUZfSU5FVDYgJiYgZmFtaWx5 ICAhPSBTU0xfQUZfSU5FVCkgewotKyAgICAgICBKU1NMX3Rocm93U1NMU29ja2V0RXhjZXB0aW9u KGVudiwKLSsgICAgICAgICAgICAgICAgInNvY2tldENyZWF0ZSgpIEludmFsaWQgZmFtaWx5ISIp OwotKyAgICAgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rICAgIGlmKCBmYW1pbHkgPT0g U1NMX0FGX0lORVQpIAotKyAgICAgICBzb2NrZXRGYW1pbHkgPSBQUl9BRl9JTkVUOwotKyAgICBl bHNlCi0rICAgICAgIHNvY2tldEZhbWlseSA9IFBSX0FGX0lORVQ2OwotIAotICAgICBpZiggamF2 YVNvY2sgPT0gTlVMTCApIHsKLSAgICAgICAgIC8qIGNyZWF0ZSBhIFRDUCBzb2NrZXQgKi8KLS0g ICAgICAgIG5ld0ZEID0gUFJfTmV3VENQU29ja2V0KCk7Ci0rICAgICAgICBuZXdGRCA9IFBSX09w ZW5UQ1BTb2NrZXQoc29ja2V0RmFtaWx5KTsKLSAgICAgICAgIGlmKCBuZXdGRCA9PSBOVUxMICkg ewotICAgICAgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oZW52LAotICAgICAg ICAgICAgICAgICAiUFJfTmV3VENQU29ja2V0KCkgcmV0dXJuZWQgTlVMTCIpOwotQEAgLTM5NCwx MCArNDA3LDEwIEBAIFBSSW50MzIgSlNTTF9lbnVtc1tdID0gewotICAgICBTU0xfUkVRVUlSRV9B TFdBWVMsICAgICAgICAgLyogMTkgKi8gICAgICAgIC8qIHNzbC5oICovCi0gICAgIFNTTF9SRVFV SVJFX0ZJUlNUX0hBTkRTSEFLRSwvKiAyMCAqLyAgICAgICAgLyogc3NsLmggKi8KLSAgICAgU1NM X1JFUVVJUkVfTk9fRVJST1IsICAgICAgIC8qIDIxICovICAgICAgICAvKiBzc2wuaCAqLwotLQot ICAgICAwCi0gfTsKLSAKLSsKLSBKTklFWFBPUlQgdm9pZCBKTklDQUxMCi0gSmF2YV9vcmdfbW96 aWxsYV9qc3Nfc3NsX1NvY2tldEJhc2Vfc29ja2V0QmluZAotICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgc2VsZiwgamJ5dGVBcnJheSBhZGRyQkEsIGppbnQgcG9ydCkKLUBAIC00MDUsOCArNDE4 LDEzIEBAIEphdmFfb3JnX21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX3NvY2sKLSAgICAgSlNT TF9Tb2NrZXREYXRhICpzb2NrOwotICAgICBQUk5ldEFkZHIgYWRkcjsKLSAgICAgamJ5dGUgKmFk ZHJCQWVsZW1zID0gTlVMTDsKLSsgICAgaW50IGFkZHJCQUxlbiA9IDA7Ci0gICAgIFBSU3RhdHVz IHN0YXR1czsKLSAKLSsgICAgam1ldGhvZElEIHN1cHBvcnRzSVBWNklEOwotKyAgICBqY2xhc3Mg c29ja2V0QmFzZUNsYXNzOwotKyAgICBqYm9vbGVhbiBzdXBwb3J0c0lQVjYgPSAwOwotKwotICAg ICBpZiggSlNTTF9nZXRTb2NrRGF0YShlbnYsIHNlbGYsICZzb2NrKSAhPSBQUl9TVUNDRVNTKSB7 Ci0gICAgICAgICAvKiBleGNlcHRpb24gd2FzIHRocm93biAqLwotICAgICAgICAgZ290byBmaW5p c2g7Ci1AQCAtNDE1LDE5ICs0MzMsNzIgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NvY2tl dEJhc2Vfc29jawotICAgICAvKgotICAgICAgKiBzZXR1cCB0aGUgUFJOZXRBZGRyIHN0cnVjdHVy ZQotICAgICAgKi8KLS0gICAgYWRkci5pbmV0LmZhbWlseSA9IEFGX0lORVQ7Ci0tICAgIGFkZHIu aW5ldC5wb3J0ID0gaHRvbnMocG9ydCk7Ci0rCi0rICAgIC8qIAotKyAgICAgKiBEbyB3ZSBzdXBw b3J0IElQVjY/IAotKyAgICAgKi8KLSsKLSsgICAgc29ja2V0QmFzZUNsYXNzID0gKCplbnYpLT5G aW5kQ2xhc3MoZW52LCBTT0NLRVRfQkFTRV9OQU1FKTsKLSsgICAgaWYoIHNvY2tldEJhc2VDbGFz cyA9PSBOVUxMICkgewotKyAgICAgICAgQVNTRVJUX09VVE9GTUVNKGVudik7Ci0rICAgICAgICBn b3RvIGZpbmlzaDsKLSsgICAgfQotKyAgICBzdXBwb3J0c0lQVjZJRCA9ICgqZW52KS0+R2V0U3Rh dGljTWV0aG9kSUQoZW52LCBzb2NrZXRCYXNlQ2xhc3MsCi0rICAgICAgICBTVVBQT1JUU19JUFY2 X05BTUUsIFNVUFBPUlRTX0lQVjZfU0lHKTsKLSsKLSsgICAgaWYoIHN1cHBvcnRzSVBWNklEID09 IE5VTEwgKSB7Ci0rICAgICAgICBBU1NFUlRfT1VUT0ZNRU0oZW52KTsKLSsgICAgICAgIGdvdG8g ZmluaXNoOwotKyAgICB9Ci0rCi0rICAgIHN1cHBvcnRzSVBWNiA9ICgqZW52KS0+Q2FsbFN0YXRp Y0Jvb2xlYW5NZXRob2QoZW52LCBzb2NrZXRCYXNlQ2xhc3MsCi0rICAgICAgICAgc3VwcG9ydHNJ UFY2SUQpOwotKwotKyAgICBtZW1zZXQoICZhZGRyLCAwLCBzaXplb2YoIFBSTmV0QWRkciApKTsK LSsKLSAgICAgaWYoIGFkZHJCQSAhPSBOVUxMICkgewotLSAgICAgICAgUFJfQVNTRVJUKHNpemVv ZihhZGRyLmluZXQuaXApID09IDQpOwotLSAgICAgICAgUFJfQVNTRVJUKCAoKmVudiktPkdldEFy cmF5TGVuZ3RoKGVudiwgYWRkckJBKSA9PSA0KTsKLSAgICAgICAgIGFkZHJCQWVsZW1zID0gKCpl bnYpLT5HZXRCeXRlQXJyYXlFbGVtZW50cyhlbnYsIGFkZHJCQSwgTlVMTCk7Ci0rICAgICAgICBh ZGRyQkFMZW4gPSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgYWRkckJBKTsKLSsKLSAgICAg ICAgIGlmKCBhZGRyQkFlbGVtcyA9PSBOVUxMICkgewotICAgICAgICAgICAgIEFTU0VSVF9PVVRP Rk1FTShlbnYpOwotICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICAgfQotLSAgICAg ICAgbWVtY3B5KCZhZGRyLmluZXQuaXAsIGFkZHJCQWVsZW1zLCA0KTsKLSsKLSsgICAgICAgIGlm KGFkZHJCQUxlbiAhPSA0ICYmIGFkZHJCQUxlbiAhPSAxNikgewotKyAgICAgICAgICAgIEpTU190 aHJvd01zZ1ByRXJyKGVudiwgQklORF9FWENFUFRJT04sCi0rICAgICAgICAgICAgIkludmFsaWQg YWRkcmVzcyBpbiBiaW5kISIpOwotKyAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgICAg IH0KLSsKLSsgICAgICAgIGlmKCBhZGRyQkFMZW4gPT0gNCkgewotKyAgICAgICAgICAgIGFkZHIu aW5ldC5mYW1pbHkgPSBQUl9BRl9JTkVUOwotKyAgICAgICAgICAgIGFkZHIuaW5ldC5wb3J0ID0g UFJfaHRvbnMocG9ydCk7Ci0rICAgICAgICAgICAgbWVtY3B5KCZhZGRyLmluZXQuaXAsIGFkZHJC QWVsZW1zLCA0KTsKLSsKLSsgICAgICAgICAgICBpZihzdXBwb3J0c0lQVjYpIHsKLSsgICAgICAg ICAgICAgICAgYWRkci5pbmV0LmZhbWlseSA9IFBSX0FGX0lORVQ2OwotKyAgICAgICAgICAgICAg ICBhZGRyLmlwdjYucG9ydCA9IFBSX2h0b25zKHBvcnQpOwotKyAgICAgICAgICAgICAgICBQUl9D b252ZXJ0SVB2NEFkZHJUb0lQdjYoYWRkci5pbmV0LmlwLCZhZGRyLmlwdjYuaXApOwotKyAgICAg ICAgICAgIH0gCi0rCi0rICAgICAgICB9ICBlbHNlIHsgICAvKiBNdXN0IGJlIDE2IGFuZCBpcHY2 ICovCi0rICAgICAgICAgICAgaWYoc3VwcG9ydHNJUFY2KSB7Ci0rICAgICAgICAgICAgICAgIGFk ZHIuaXB2Ni5mYW1pbHkgPSBQUl9BRl9JTkVUNjsKLSsgICAgICAgICAgICAgICAgYWRkci5pcHY2 LnBvcnQgPSBQUl9odG9ucyhwb3J0KTsKLSsgICAgICAgICAgICAgICAgbWVtY3B5KCZhZGRyLmlw djYuaXAsYWRkckJBZWxlbXMsIDE2KTsKLSsgICAgICAgICAgICB9ICBlbHNlIHsKLSsgICAgICAg ICAgICAgICAgSlNTX3Rocm93TXNnUHJFcnIoZW52LCBCSU5EX0VYQ0VQVElPTiwKLSsgICAgICAg ICAgICAgICAgICAgICJJbnZhbGlkIGFkZHJlc3MgaW4gYmluZCEiKTsKLSsgICAgICAgICAgICAg ICAgZ290byBmaW5pc2g7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotICAgICB9IGVsc2Ug ewotLSAgICAgICAgYWRkci5pbmV0LmlwID0gUFJfaHRvbmwoSU5BRERSX0FOWSk7Ci0rICAgICAg ICBpZihzdXBwb3J0c0lQVjYpIHsKLSsgICAgICAgICAgICBzdGF0dXMgPSBQUl9TZXROZXRBZGRy KFBSX0lwQWRkckFueSwgUFJfQUZfSU5FVDYsIHBvcnQsICZhZGRyKTsKLSsgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgICAgc3RhdHVzID0gUFJfU2V0TmV0QWRkcihQUl9JcEFkZHJBbnksIFBS X0FGX0lORVQsIHBvcnQsICZhZGRyKTsKLSsgICAgICAgIH0KLSAgICAgfQotIAotICAgICAvKiBk byB0aGUgYmluZCgpIGNhbGwgKi8KLUBAIC02MDEsNiArNjcyLDc4IEBAIGZpbmlzaDoKLSAgICAg cmV0dXJuIHN0YXR1czsKLSB9Ci0gCi0rSk5JRVhQT1JUIGpieXRlQXJyYXkgSk5JQ0FMTAotK0ph dmFfb3JnX21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX2dldFBlZXJBZGRyZXNzQnl0ZUFycmF5 TmF0aXZlCi0rICAgIChKTklFbnYgKmVudiwgam9iamVjdCBzZWxmKQotK3sKLSsgICAgamJ5dGVB cnJheSBieXRlQXJyYXk9TlVMTDsKLSsgICAgUFJOZXRBZGRyIGFkZHI7Ci0rICAgIGpieXRlICph ZGRyZXNzPU5VTEw7Ci0rICAgIGludCBzaXplPTQ7Ci0rCi0rICAgIGlmKCBKU1NMX2dldFNvY2tB ZGRyKGVudiwgc2VsZiwgJmFkZHIsIFBFRVJfU09DSykgIT0gUFJfU1VDQ0VTUykgeyAKLSsgICAg ICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rCi0rICAgIGlmKCBQUl9OZXRBZGRyRmFtaWx5KCZh ZGRyKSA9PSAgUFJfQUZfSU5FVDYpIHsKLSsgICAgICAgIHNpemUgPSAxNjsKLSsgICAgICAgIGFk ZHJlc3MgPSAoamJ5dGUgKikgJmFkZHIuaXB2Ni5pcDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAg IGFkZHJlc3MgPSAoamJ5dGUgKikgJmFkZHIuaW5ldC5pcDsKLSsgICAgfQotKwotKyAgICBieXRl QXJyYXkgPSAoKmVudiktPk5ld0J5dGVBcnJheShlbnYsc2l6ZSk7Ci0rICAgIGlmKGJ5dGVBcnJh eSA9PSBOVUxMKSB7Ci0rICAgICAgICBBU1NFUlRfT1VUT0ZNRU0oZW52KTsKLSsgICAgICAgIGdv dG8gZmluaXNoOwotKyAgICB9Ci0rICAgICgqZW52KS0+U2V0Qnl0ZUFycmF5UmVnaW9uKGVudiwg Ynl0ZUFycmF5LCAwLHNpemUgLGFkZHJlc3MpOwotKyAgICBpZiggKCplbnYpLT5FeGNlcHRpb25P Y2N1cnJlZChlbnYpICE9IE5VTEwpIHsKLSsgICAgICAgIFBSX0FTU0VSVChQUl9GQUxTRSk7Ci0r ICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotK2ZpbmlzaDoKLSsgICAgcmV0dXJuIGJ5 dGVBcnJheTsKLSt9Ci0rCi0rSk5JRVhQT1JUIGpieXRlQXJyYXkgSk5JQ0FMTAotK0phdmFfb3Jn X21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX2dldExvY2FsQWRkcmVzc0J5dGVBcnJheU5hdGl2 ZQotKyAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgc2VsZikKLSt7Ci0rICAgIGpieXRlQXJyYXkg Ynl0ZUFycmF5PU5VTEw7Ci0rICAgIFBSTmV0QWRkciBhZGRyOwotKyAgICBqYnl0ZSAqYWRkcmVz cz1OVUxMOwotKyAgICBpbnQgc2l6ZT00OwotKwotKyAgICBpZiggSlNTTF9nZXRTb2NrQWRkcihl bnYsIHNlbGYsICZhZGRyLCBMT0NBTF9TT0NLKSAhPSBQUl9TVUNDRVNTKSB7Ci0rICAgICAgICBn b3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICBpZiggUFJfTmV0QWRkckZhbWlseSgmYWRkcikg PT0gIFBSX0FGX0lORVQ2KSB7Ci0rICAgICAgICBzaXplID0gMTY7Ci0rICAgICAgICBhZGRyZXNz ID0gKGpieXRlICopICZhZGRyLmlwdjYuaXA7IAotKyAgICB9IGVsc2UgewotKyAgICAgICAgYWRk cmVzcyA9IChqYnl0ZSAqKSAmYWRkci5pbmV0LmlwOwotKyAgICB9Ci0rICAgCi0rICAgIGJ5dGVB cnJheSA9ICgqZW52KS0+TmV3Qnl0ZUFycmF5KGVudixzaXplKTsKLSsgICAgaWYoYnl0ZUFycmF5 ID09IE5VTEwpIHsKLSsgICAgICAgIEFTU0VSVF9PVVRPRk1FTShlbnYpOwotKyAgICAgICAgZ290 byBmaW5pc2g7Ci0rICAgIH0KLSsgICAgKCplbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oZW52LCBi eXRlQXJyYXksIDAsc2l6ZSxhZGRyZXNzKTsKLSsgICAgaWYoICgqZW52KS0+RXhjZXB0aW9uT2Nj dXJyZWQoZW52KSAhPSBOVUxMKSB7Ci0rICAgICAgICBQUl9BU1NFUlQoUFJfRkFMU0UpOwotKyAg ICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsKLStmaW5pc2g6Ci0rICAgIHJldHVybiBieXRl QXJyYXk7Ci0rfQotKwotKy8qIExlYXZlIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBm dW5jdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgKi8KLSsKLSBKTklFWFBPUlQgamludCBKTklDQUxM Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NvY2tldEJhc2VfZ2V0UGVlckFkZHJlc3NOYXRp dmUKLSAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IHNlbGYpCi1kaWZmIC1ydXBOIGpzcy00LjIu Ni5wcmUtSVB2Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL2phdmFz b2NrLmMganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wv amF2YXNvY2suYwotLS0tIGpzcy00LjIuNi5wcmUtSVB2Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3Mvc3NsL2phdmFzb2NrLmMJMjAwNy0wNC0yNCAxMTozNDo1OC4wMDAwMDAw MDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3NzbC9qYXZhc29jay5jCTIwMDktMDYtMjQgMTM6NDM6MTMuMDAwMDAwMDAwIC0wNzAwCi1A QCAtMjkwLDYgKzI5MCw3IEBAIGdldEluZXRBZGRyZXNzKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFk ZHIKLSAgICAgam9iamVjdCBpbmV0QWRkcmVzczsKLSAgICAgamJ5dGVBcnJheSBhZGRyQnl0ZUFy cmF5OwotICAgICBqaW50IHBvcnQ7Ci0rICAgIGludCBhZGRyQkFMZW4gPSAwOwotIAotICAgICBp ZiggR0VUX0VOVihmZC0+c2VjcmV0LT5qYXZhVk0sIGVudikgKSBnb3RvIGZpbmlzaDsKLSAKLUBA IC0zNzcsOCArMzc4LDkgQEAgZ2V0SW5ldEFkZHJlc3MoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRk cgotIAotICAgICAgICAgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihQUk5ldEFkZHIpKTsKLSAKLS0g ICAgICAgIC8qIHdlIG9ubHkgaGFuZGxlIElQVjQgKi8KLS0gICAgICAgIFBSX0FTU0VSVCggKCpl bnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGFkZHJCeXRlQXJyYXkpID09IDQgKTsKLSsgICAgICAg IGFkZHJCQUxlbiA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBhZGRyQnl0ZUFycmF5KTsK LSsKLSsgICAgICAgIFBSX0FTU0VSVCggKGFkZHJCQUxlbiA9PSA0KSB8fCAoYWRkckJBTGVuID09 IDE2ICkgKTsKLSAKLSAgICAgICAgIC8qIG1ha2Ugc3VyZSB5b3UgcmVsZWFzZSB0aGVtIGxhdGVy ICovCi0gICAgICAgICBhZGRyQnl0ZXMgPSAoKmVudiktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGVu diwgYWRkckJ5dGVBcnJheSwgTlVMTCk7Ci1AQCAtMzg4LDkgKzM5MCwxNiBAQCBnZXRJbmV0QWRk cmVzcyhQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyCi0gICAgICAgICB9Ci0gCi0gICAgICAgICAv KiBpcCBmaWVsZCBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLS0gICAgICAgIG1lbWNweSgg KHZvaWQqKSAmYWRkci0+aW5ldC5pcCwgYWRkckJ5dGVzLCA0KTsKLS0gICAgICAgIGFkZHItPmlu ZXQuZmFtaWx5ID0gUFJfQUZfSU5FVDsKLS0gICAgICAgIGFkZHItPmluZXQucG9ydCA9IHBvcnQ7 Ci0rCi0rICAgICAgICBpZiAoYWRkckJBTGVuID09IDQpIHsKLSsgICAgICAgICAgICBtZW1jcHko ICh2b2lkKikgJmFkZHItPmluZXQuaXAsIGFkZHJCeXRlcywgNCk7Ci0rICAgICAgICAgICAgYWRk ci0+aW5ldC5mYW1pbHkgPSBQUl9BRl9JTkVUOwotKyAgICAgICAgICAgIGFkZHItPmluZXQucG9y dCA9IHBvcnQ7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIG1lbWNweSggKHZvaWQq KSAmYWRkci0+aXB2Ni5pcCxhZGRyQnl0ZXMsIDE2KTsKLSsgICAgICAgICAgICBhZGRyLT5pbmV0 LmZhbWlseSA9IFBSX0FGX0lORVQ2OwotKyAgICAgICAgICAgIGFkZHItPmluZXQucG9ydCA9IHBv cnQ7Ci0rICAgICAgICB9Ci0gCi0gICAgICAgICAoKmVudiktPlJlbGVhc2VCeXRlQXJyYXlFbGVt ZW50cyhlbnYsIGFkZHJCeXRlQXJyYXksIGFkZHJCeXRlcywKLSAgICAgICAgICAgICBKTklfQUJP UlQpOwotZGlmZiAtcnVwTiBqc3MtNC4yLjYucHJlLUlQdjYvbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3V0aWwvamF2YV9pZHMuaCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvamF2YV9pZHMuaAotLS0tIGpzcy00LjIuNi5wcmUt SVB2Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qYXZhX2lkcy5o CTIwMDYtMDItMjIgMTc6MjE6NTIuMDAwMDAwMDAwIC0wODAwCi0rKysganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL2phdmFfaWRzLmgJMjAwOS0wNi0x OSAxNzo1NjowMC4wMDAwMDAwMDAgLTA3MDAKLUBAIC0zMTIsNiArMzEyLDggQEAgUFJfQkVHSU5f RVhURVJOX0MKLSAjZGVmaW5lIFNPQ0tFVF9CQVNFX05BTUUgIm9yZy9tb3ppbGxhL2pzcy9zc2wv U29ja2V0QmFzZSIKLSAjZGVmaW5lIFBST0NFU1NfRVhDRVBUSU9OU19OQU1FICJwcm9jZXNzRXhj ZXB0aW9ucyIKLSAjZGVmaW5lIFBST0NFU1NfRVhDRVBUSU9OU19TSUcgIihMamF2YS9sYW5nL1Ro cm93YWJsZTtMamF2YS9sYW5nL1Rocm93YWJsZTspTGphdmEvbGFuZy9UaHJvd2FibGU7IgotKyNk ZWZpbmUgU1VQUE9SVFNfSVBWNl9OQU1FICJzdXBwb3J0c0lQVjYiCi0rI2RlZmluZSBTVVBQT1JU U19JUFY2X1NJRyAiKClaIgotIAotIC8qCi0gICogU1NMQ2VydGlmaWNhdGVBcHByb3ZhbENhbGxi YWNrCgpkaWZmIC0tZ2l0IGEvanNzLWphdmFkb2NzLXBhcmFtLnBhdGNoIGIvanNzLWphdmFkb2Nz LXBhcmFtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Y5MmUzLi4wMDAw MDAwCi0tLSBhL2pzcy1qYXZhZG9jcy1wYXJhbS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEz ICswLDAgQEAKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3Rlc3RzL0pDQVN5bUtleUdlbi5qYXZhLm9yaWcJMjAwOC0wMS0xOCAxNjozOTo0Ni4wMDAw MDAwMDAgLTA1MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3Rlc3RzL0pDQVN5bUtleUdlbi5qYXZhCTIwMDktMDYtMDUgMTE6MDg6NTQuMDAwMDAw MDAwIC0wNDAwCi1AQCAtMTE2LDcgKzExNiw5IEBACi0gICAgIH0KLSAgICAgLyoqCi0gICAgICAq IAotLSAgICAgKiBAcGFyYW0gIAotKyAgICAgKiBAcGFyYW0ga2V5Ci0rICAgICAqIEBwYXJhbSBr ZwotKyAgICAgKiBAcmV0dXJuCi0gICAgICAqLwotICAgICBwdWJsaWMgamF2YXguY3J5cHRvLlNl Y3JldEtleSBnZW5TZWNyZXRLZXkoU3RyaW5nIGtleVR5cGUsIFN0cmluZyBwcm92aWRlcil7Ci0g ICAgICAgICBqYXZheC5jcnlwdG8uU2VjcmV0S2V5IGtleSA9IG51bGw7CgpkaWZmIC0tZ2l0IGEv anNzLWtleV9wYWlyX3VzYWdlX3dpdGhfb3BfZmxhZ3MucGF0Y2ggYi9qc3Mta2V5X3BhaXJfdXNh Z2Vfd2l0aF9vcF9mbGFncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdj YTlkZi4uMDAwMDAwMAotLS0gYS9qc3Mta2V5X3BhaXJfdXNhZ2Vfd2l0aF9vcF9mbGFncy5wYXRj aAorKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi1kaWZmIC1ydXBOIGpzcy00LjIuNS9t b3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZiBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3MvbGliL2pzcy5kZWYKLS0tLSBqc3MtNC4yLjUvbW96aWxsYS9zZWN1cml0eS9qc3MvbGli L2pzcy5kZWYJMjAwNy0wNS0wOCAxODo0MDoxNC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGliL2pzcy5kZWYJMjAwOS0wNS0zMCAwMTo1Nzo0OC4w MDAwMDAwMDAgLTA3MDAKLUBAIC0zMTYsMyArMzE2LDEyIEBAIEphdmFfb3JnX21vemlsbGFfanNz X3NzbF9TU0xTb2NrZXRfaXNGaXAKLSA7KyAgICBsb2NhbDoKLSA7KyAgICAgICAqOwotIDsrfTsK LSs7K0pTU180LjIuNiB7ICAgICAjIEpTUyA0LjIuNiByZWxlYXNlCi0rOysgICAgZ2xvYmFsOgot K0phdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5UGFpckdlbmVyYXRvcl9nZW5lcmF0 ZUVDS2V5UGFpcldpdGhPcEZsYWdzOwotK0phdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzEx S2V5UGFpckdlbmVyYXRvcl9nZW5lcmF0ZVJTQUtleVBhaXJXaXRoT3BGbGFnczsKLStKYXZhX29y Z19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVBhaXJHZW5lcmF0b3JfZ2VuZXJhdGVEU0FLZXlQ YWlyV2l0aE9wRmxhZ3M7Ci0rOysgICAgbG9jYWw6Ci0rOysgICAgICAgKjsKLSs7K307Ci0rCi1k aWZmIC1ydXBOIGpzcy00LjIuNS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv Y3J5cHRvL0tleVBhaXJHZW5lcmF0b3IuamF2YSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlQYWlyR2VuZXJhdG9yLmphdmEKLS0tLSBqc3Mt NC4yLjUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlQYWly R2VuZXJhdG9yLmphdmEJMjAwNS0xMS0xNCAxNDoxNTowNi4wMDAwMDAwMDAgLTA4MDAKLSsrKyBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlQ YWlyR2VuZXJhdG9yLmphdmEJMjAwOS0wNS0yMiAwNzo0MDoxNC4wMDAwMDAwMDAgLTA3MDAKLUBA IC04MSw3ICs4MSw2IEBAIHB1YmxpYyBjbGFzcyBLZXlQYWlyR2VuZXJhdG9yIHsKLSAJZ2VuS2V5 UGFpcigpIHRocm93cyBUb2tlbkV4Y2VwdGlvbiB7Ci0gCQlyZXR1cm4gZW5naW5lLmdlbmVyYXRl S2V5UGFpcigpOwotIAl9Ci0tCi0gICAgIC8qKgotICAgICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9m IGtleSB0aGF0IHRoaXMgZ2VuZXJhdG9yIGdlbmVyYXRlcy4KLSAgICAgICovCi1AQCAtMTkyLDYg KzE5MSwxNSBAQCBwdWJsaWMgY2xhc3MgS2V5UGFpckdlbmVyYXRvciB7Ci0gICAgICAgICBlbmdp bmUuZXh0cmFjdGFibGVQYWlycyhleHRyYWN0YWJsZSk7Ci0gICAgIH0KLSAKLSsgICAgcHVibGlj IHZvaWQgc2V0S2V5UGFpclVzYWdlcyhLZXlQYWlyR2VuZXJhdG9yU3BpLlVzYWdlW10gdXNhZ2Vz LCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlQYWlyR2VuZXJhdG9yU3Bp LlVzYWdlW10gdXNhZ2VzX21hc2spIHsKLSsgICAgICAgIGVuZ2luZS5zZXRLZXlQYWlyVXNhZ2Vz KHVzYWdlcyx1c2FnZXNfbWFzayk7Ci0rICAgIH0KLSsgICAKLSsKLSsKLSsKLSsKLSAJcHJvdGVj dGVkIEtleVBhaXJBbGdvcml0aG0gYWxnb3JpdGhtOwotIAlwcm90ZWN0ZWQgS2V5UGFpckdlbmVy YXRvclNwaSBlbmdpbmU7Ci0gfQotZGlmZiAtcnVwTiBqc3MtNC4yLjUvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlQYWlyR2VuZXJhdG9yU3BpLmphdmEganNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFp ckdlbmVyYXRvclNwaS5qYXZhCi0tLS0ganNzLTQuMi41L21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvclNwaS5qYXZhCTIwMDUtMTEtMTQg MTQ6MTU6MDYuMDAwMDAwMDAwIC0wODAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvclNwaS5qYXZhCTIwMDkt MDUtMzAgMDM6MjQ6MzEuMDAwMDAwMDAwIC0wNzAwCi1AQCAtNjAsNCArNjAsMzggQEAgcHVibGlj IGFic3RyYWN0IGNsYXNzIEtleVBhaXJHZW5lcmF0b3JTcAotICAgICBwdWJsaWMgYWJzdHJhY3Qg dm9pZCBleHRyYWN0YWJsZVBhaXJzKGJvb2xlYW4gZXh0cmFjdGFibGUpOwotIAotICAgICBwdWJs aWMgYWJzdHJhY3QgYm9vbGVhbiBrZXlnZW5PbkludGVybmFsVG9rZW4oKTsKLSsKLSsgICAgLyoq Ci0rICAgICAqIEluIFBLQ1MgIzExLCBlYWNoIGtleXBhaXIgY2FuIGJlIG1hcmtlZCB3aXRoIHRo ZSBvcGVyYXRpb25zIGl0IHdpbGwKLSsgICAgICogYmUgdXNlZCB0byBwZXJmb3JtLiBTb21lIHRv a2VucyByZXF1aXJlIHRoYXQgYSBrZXkgYmUgbWFya2VkIGZvcgotKyAgICAgKiBhbiBvcGVyYXRp b24gYmVmb3JlIHRoZSBrZXkgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGF0IG9wZXJhdGlvbjsK LSsgICAgICogb3RoZXIgdG9rZW5zIGRvbid0IGNhcmUuIE5TUyBwcm92aWRlcyBhIHdheSB0byBz cGVjaWZ5IGEgc2V0IG9mCi0rICAgICAqIGZsYWdzIGFuZCBhIGNvcnJlc3BvbmRpbmcgbWFzayBm b3IgdGhlc2UgZmxhZ3MuICBJZiBhIHNwZWNpZmljIHVzYWdlCi0rICAgICAqIGlzIGRlc2lyZWQg c2V0IHRoZSB2YWx1ZSBmb3IgdGhhdCB1c2FnZS4gSWYgaXQgaXMgbm90IHNldCwgbGV0IE5TUwot KyAgICAgKiBiZWhhdmUgaW4gaXQncyBkZWZhdWx0IGZhc2hpb24uICBJZiBhIGJlaGF2aW9yIGlz IGRlc2lyZWQsIGFsc28gc2V0Ci0rICAgICAqIHRoYXQgYmVoYXZpb3IgaW4gdGhlIG1hc2sgYXMg d2VsbCBhcyB0aGUgZmxhZ3MuCi0rICAgICAqIAotKyAgICAgKi8KLSsgICAgcHVibGljIGZpbmFs IHN0YXRpYyBjbGFzcyBVc2FnZSB7Ci0rICAgICAgICBwcml2YXRlIFVzYWdlKCkgeyB9Ci0rICAg ICAgICBwcml2YXRlIFVzYWdlKGludCB2YWwpIHsgdGhpcy52YWwgPSB2YWw7fQotKyAgICAgICAg cHJpdmF0ZSBpbnQgdmFsOwotKwotKyAgICAgICAgcHVibGljIGludCBnZXRWYWwoKSB7IHJldHVy biB2YWw7IH0KLSsKLSsgICAgICAgIC8vIHRoZXNlIGVudW1zIG11c3QgbWF0Y2ggdGhlIAotKyAg ICAgICAgLy8gYW5kIHRoZSBvcEZsYWdGb3JVc2FnZSBsaXN0IGluIFBLMTFLZXlQYWlyR2VuZXJh dG9yLmphdmEKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVXNhZ2UgRU5DUllQVCA9IG5l dyBVc2FnZSgwKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVXNhZ2UgREVDUllQVCA9 IG5ldyBVc2FnZSgxKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVXNhZ2UgU0lHTiA9 IG5ldyBVc2FnZSgyKTsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVXNhZ2UgU0lHTl9S RUNPVkVSID0gbmV3IFVzYWdlKDMpOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVc2Fn ZSBWRVJJRlkgPSBuZXcgVXNhZ2UoNCk7Ci0rICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVz YWdlIFZFUklGWV9SRUNPVkVSID0gbmV3IFVzYWdlKDUpOwotKyAgICAgICAgcHVibGljIHN0YXRp YyBmaW5hbCBVc2FnZSBXUkFQID0gbmV3IFVzYWdlKDYpOwotKyAgICAgICAgcHVibGljIHN0YXRp YyBmaW5hbCBVc2FnZSBVTldSQVAgPSBuZXcgVXNhZ2UoNyk7Ci0rICAgICAgICBwdWJsaWMgc3Rh dGljIGZpbmFsIFVzYWdlIERFUklWRSA9IG5ldyBVc2FnZSg4KTsKLSsgICAgfQotKwotKyAgICBw dWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRLZXlQYWlyVXNhZ2VzKEtleVBhaXJHZW5lcmF0b3JTcGku VXNhZ2VbXSB1c2FnZXMsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEtleVBhaXJHZW5lcmF0b3JTcGkuVXNhZ2VbXSB1c2FnZXNfbWFzayk7Ci0gfQotZGlmZiAt cnVwTiBqc3MtNC4yLjUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3Mx MS9QSzExS2V5UGFpckdlbmVyYXRvci5jIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWlyR2VuZXJhdG9yLmMKLS0tLSBqc3MtNC4y LjUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5UGFp ckdlbmVyYXRvci5jCTIwMDYtMDItMjIgMTc6MjE6NDIuMDAwMDAwMDAwIC0wODAwCi0rKysganNz LTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtl eVBhaXJHZW5lcmF0b3IuYwkyMDA5LTA2LTAyIDEwOjM2OjQ2LjgxOTU4MTAwMCAtMDcwMAotQEAg LTEyMCwxMyArMTIwLDExIEBAIGZpbmlzaDoKLSAKLSBpbnQgUEsxMV9OdW1iZXJPYmplY3RzRm9y KFBLMTFTbG90SW5mbyosIENLX0FUVFJJQlVURSosIGludCk7Ci0gCi0tLyoKLS0gKiBtYWtlIGEg Y29tbW9uIGtleSBnZW4gZnVuY3Rpb24gZm9yIGJvdGggdGhpcyBmaWxlIGFuZCBQSzExVG9rZW4u YwotLSAqLwotIFNFQ1N0YXR1cwotLUpTU19QSzExX2dlbmVyYXRlS2V5UGFpcihKTklFbnYgKmVu diwgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaGFuaXNtLCAKLStKU1NfUEsxMV9nZW5lcmF0ZUtleVBh aXJXaXRoT3BGbGFncyhKTklFbnYgKmVudiwgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaGFuaXNtLCAK LSAgICAgUEsxMVNsb3RJbmZvICpzbG90LCBTRUNLRVlQdWJsaWNLZXkgKipwdWJrLCBTRUNLRVlQ cml2YXRlS2V5ICoqcHJpdmssCi0tICAgIHZvaWQgKnBhcmFtcywgUFJCb29sIHRlbXBvcmFyeSwg amludCBzZW5zaXRpdmUsIGppbnQgZXh0cmFjdGFibGUpCi0rICAgIHZvaWQgKnBhcmFtcywgUFJC b29sIHRlbXBvcmFyeSwgamludCBzZW5zaXRpdmUsIGppbnQgZXh0cmFjdGFibGUsCi0rICAgIGpp bnQgb3BfZmxhZ3MsIGppbnQgb3BfZmxhZ3NfbWFzaykKLSB7Ci0gICAgIFBLMTFBdHRyRmxhZ3Mg YXR0ckZsYWdzID0gMDsKLSAgICAgKnByaXZrPU5VTEw7Ci1AQCAtMTczLDEyICsxNzEsMTYgQEAg SlNTX1BLMTFfZ2VuZXJhdGVLZXlQYWlyKEpOSUVudiAqZW52LCBDSwotICAgICB9IGVsc2Ugewot ICAgICAgICAgYXR0ckZsYWdzIHw9IChQSzExX0FUVFJfSU5TRU5TSVRJVkUgfCBQSzExX0FUVFJf UFVCTElDKTsKLSAgICAgfQotLSAgICAqcHJpdmsgPSBQSzExX0dlbmVyYXRlS2V5UGFpcldpdGhG bGFncyhzbG90LAotKwotKyAgICAqcHJpdmsgPSBQSzExX0dlbmVyYXRlS2V5UGFpcldpdGhPcEZs YWdzKHNsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVj aGFuaXNtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHViaywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyRmxhZ3MsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENLX0ZMQUdTKSBvcF9mbGFn cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0tfRkxBR1Mp IG9wX2ZsYWdzX21hc2svKiB0aGUgb25lcyB3ZSBkb24ndCB3YW50Ki8sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAvKiBkZWZhdWx0IFBXIGNhbGxiYWNr ICovICk7Ci0rCi0gICAgIGlmKCAqcHJpdmsgPT0gTlVMTCApIHsKLSAgICAgICAgIGludCBlcnJM ZW5ndGg7Ci0gICAgICAgICBjaGFyICplcnJCdWY7Ci1AQCAtMjE3LDEzICsyMTksMjggQEAgZmlu aXNoOgotICAgICByZXR1cm4gU0VDRmFpbHVyZTsKLSB9Ci0gCi0rLyoKLSsgKiBtYWtlIGEgY29t bW9uIGtleSBnZW4gZnVuY3Rpb24gZm9yIGJvdGggdGhpcyBmaWxlIGFuZCBQSzExVG9rZW4uYwot KyAqLwotK1NFQ1N0YXR1cwotK0pTU19QSzExX2dlbmVyYXRlS2V5UGFpcihKTklFbnYgKmVudiwg Q0tfTUVDSEFOSVNNX1RZUEUgbWVjaGFuaXNtLAotKyAgICBQSzExU2xvdEluZm8gKnNsb3QsIFNF Q0tFWVB1YmxpY0tleSAqKnB1YmssIFNFQ0tFWVByaXZhdGVLZXkgKipwcml2aywKLSsgICAgdm9p ZCAqcGFyYW1zLCBQUkJvb2wgdGVtcG9yYXJ5LCBqaW50IHNlbnNpdGl2ZSwgamludCBleHRyYWN0 YWJsZSkKLSt7Ci0rCi0rICAgIHJldHVybiBKU1NfUEsxMV9nZW5lcmF0ZUtleVBhaXJXaXRoT3BG bGFncyhlbnYsIG1lY2hhbmlzbSwgc2xvdCwgcHViaywgcHJpdmssIHBhcmFtcywgdGVtcG9yYXJ5 LCBzZW5zaXRpdmUsIGV4dHJhY3RhYmxlLCAwLCAwKTsKLSt9Ci0rCi0rCi0gLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLS0gKiBMb2NhbCBnZW5lcmljIGhlbHBlcgotKyAqIExvY2FsIGdlbmVyaWMgaGVscGVycwot ICAqLwotKwotIHN0YXRpYyBqb2JqZWN0IAotLVBLMTFLZXlQYWlyR2VuZXJhdG9yKEpOSUVudiAq ZW52LCBqb2JqZWN0IHRoaXMsIGpvYmplY3QgdG9rZW4sIAotK1BLMTFLZXlQYWlyR2VuZXJhdG9y V2l0aE9wRmxhZ3MoSk5JRW52ICplbnYsIGpvYmplY3QgdGhpcywgam9iamVjdCB0b2tlbiwgCi0g ICAgIENLX01FQ0hBTklTTV9UWVBFIG1lY2hhbmlzbSwgdm9pZCAqcGFyYW1zLCAKLS0gICAgamJv b2xlYW4gdGVtcG9yYXJ5LCBqaW50IHNlbnNpdGl2ZSwgamludCBleHRyYWN0YWJsZSkKLSsgICAg amJvb2xlYW4gdGVtcG9yYXJ5LCBqaW50IHNlbnNpdGl2ZSwgamludCBleHRyYWN0YWJsZSwKLSsg ICAgamludCBvcF9mbGFncywgamludCBvcF9mbGFnc19tYXNrKQotIHsKLSAgICAgUEsxMVNsb3RJ bmZvKiBzbG90OwotICAgICBTRUNLRVlQcml2YXRlS2V5ICpwcml2az1OVUxMOwotQEAgLTI0Miw4 ICsyNTksOCBAQCBQSzExS2V5UGFpckdlbmVyYXRvcihKTklFbnYgKmVudiwgam9iamVjCi0gICAg IH0KLSAgICAgUFJfQVNTRVJUKHNsb3QgIT0gTlVMTCk7Ci0gCi0tICAgIHJ2ID0gSlNTX1BLMTFf Z2VuZXJhdGVLZXlQYWlyKGVudiwgbWVjaGFuaXNtLCBzbG90LCAmcHViaywgJnByaXZrLAotLSAg ICAJcGFyYW1zLCB0ZW1wb3JhcnksIHNlbnNpdGl2ZSwgZXh0cmFjdGFibGUpOwotKyAgICBydiA9 IEpTU19QSzExX2dlbmVyYXRlS2V5UGFpcldpdGhPcEZsYWdzKGVudiwgbWVjaGFuaXNtLCBzbG90 LCAmcHViaywgJnByaXZrLAotKyAgICAJcGFyYW1zLCB0ZW1wb3JhcnksIHNlbnNpdGl2ZSwgZXh0 cmFjdGFibGUsIG9wX2ZsYWdzLCBvcF9mbGFnc19tYXNrKTsKLSAgICAgaWYgKHJ2ICE9IFNFQ1N1 Y2Nlc3MpIHsKLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9Ci1AQCAtMjY3LDYgKzI4NCwx NiBAQCBmaW5pc2g6Ci0gICAgIHJldHVybiBrZXlQYWlyOwotIH0KLSAKLStzdGF0aWMgam9iamVj dAotK1BLMTFLZXlQYWlyR2VuZXJhdG9yKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXMsIGpvYmpl Y3QgdG9rZW4sCi0rICAgIENLX01FQ0hBTklTTV9UWVBFIG1lY2hhbmlzbSwgdm9pZCAqcGFyYW1z LAotKyAgICBqYm9vbGVhbiB0ZW1wb3JhcnksIGppbnQgc2Vuc2l0aXZlLCBqaW50IGV4dHJhY3Rh YmxlKQotK3sKLSsgICAgcmV0dXJuIFBLMTFLZXlQYWlyR2VuZXJhdG9yV2l0aE9wRmxhZ3MoZW52 LCB0aGlzLCB0b2tlbiwgbWVjaGFuaXNtLCBwYXJhbXMsIHRlbXBvcmFyeSwgc2Vuc2l0aXZlLCBl eHRyYWN0YWJsZSwgMCwgMCk7Ci0rfQotKwotKwotKwotIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogUEsx MUtleVBhaXJHZW5lcmF0b3IuZ2VuZXJhdGVSU0FLZXlQYWlyCi0gICovCi1AQCAtMjg5LDYgKzMx NiwzMCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVBhaXJHCi0gICAgICAm cGFyYW1zLCB0ZW1wb3JhcnksIHNlbnNpdGl2ZSwgZXh0cmFjdGFibGUpOwotIH0KLSAKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotKyAqIFBLMTFLZXlQYWlyR2VuZXJhdG9yLmdlbmVyYXRlUlNBS2V5UGFpcldp dGhPcEZsYWdzCi0rICovCi0rSk5JRVhQT1JUIGpvYmplY3QgSk5JQ0FMTAotK0phdmFfb3JnX21v emlsbGFfanNzX3BrY3MxMV9QSzExS2V5UGFpckdlbmVyYXRvcl9nZW5lcmF0ZVJTQUtleVBhaXJX aXRoT3BGbGFncwotKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXMsIGpvYmplY3QgdG9rZW4s IGppbnQga2V5U2l6ZSwgamxvbmcgcHVibGljRXhwb25lbnQsCi0rICAgIGpib29sZWFuIHRlbXBv cmFyeSwgamludCBzZW5zaXRpdmUsIGppbnQgZXh0cmFjdGFibGUsCi0rICAgIGppbnQgb3BfZmxh Z3MsIGppbnQgb3BfZmxhZ3NfbWFzaykKLSt7Ci0rICAgIFBLMTFSU0FHZW5QYXJhbXMgcGFyYW1z OwotKwotKyAgICBQUl9BU1NFUlQoZW52IT1OVUxMICYmIHRoaXMhPU5VTEwgJiYgdG9rZW4hPU5V TEwpOwotKwotKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLSsgICAgICogc2V0dXAgcGFyYW1ldGVycwotKyAgICAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsgICAgcGFyYW1zLmtleVNpemVJ bkJpdHMgPSBrZXlTaXplOwotKyAgICBwYXJhbXMucGUgPSBwdWJsaWNFeHBvbmVudDsKLSsKLSsg ICAgcmV0dXJuIFBLMTFLZXlQYWlyR2VuZXJhdG9yV2l0aE9wRmxhZ3MoZW52LCB0aGlzLCB0b2tl biwgQ0tNX1JTQV9QS0NTX0tFWV9QQUlSX0dFTiwKLSsgICAgICZwYXJhbXMsIHRlbXBvcmFyeSwg c2Vuc2l0aXZlLCBleHRyYWN0YWJsZSwgb3BfZmxhZ3MsIG9wX2ZsYWdzX21hc2spOwotK30KLSsK LSsKLSAjZGVmaW5lIFpFUk9fU0VDSVRFTShpdGVtKSB7KGl0ZW0pLmxlbj0wOyAoaXRlbSkuZGF0 YT1OVUxMO30KLSAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQEAgLTMzOSw2ICszOTAsNTcgQEAgZmluaXNo OgotICAgICByZXR1cm4ga2V5UGFpcjsKLSB9Ci0gCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgKgotKyAq IFBLMTFLZXlQYWlyR2VuZXJhdG9yLmdlbmVyYXRlRFNBS2V5UGFpcgotKyAqCi0rICovCi0rSk5J RVhQT1JUIGpvYmplY3QgSk5JQ0FMTAotK0phdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzEx S2V5UGFpckdlbmVyYXRvcl9nZW5lcmF0ZURTQUtleVBhaXJXaXRoT3BGbGFncwotKyAgKEpOSUVu diAqZW52LCBqb2JqZWN0IHRoaXMsIGpvYmplY3QgdG9rZW4sIGpieXRlQXJyYXkgUCwgamJ5dGVB cnJheSBRLAotKyAgICBqYnl0ZUFycmF5IEcsIGpib29sZWFuIHRlbXBvcmFyeSwgamludCBzZW5z aXRpdmUsIGppbnQgZXh0cmFjdGFibGUsCi0rICAgIGppbnQgb3BfZmxhZ3MsIGppbnQgb3BfZmxh Z3NfbWFzaykKLSt7Ci0rICAgIFNFQ0l0ZW0gcCwgcSwgZzsKLSsgICAgUFFHUGFyYW1zICpwYXJh bXM9TlVMTDsKLSsgICAgam9iamVjdCBrZXlQYWlyPU5VTEw7Ci0rCi0rICAgIFBSX0FTU0VSVChl bnYhPU5VTEwgJiYgdGhpcyE9TlVMTCAmJiB0b2tlbiE9TlVMTCAmJiBQIT1OVUxMICYmIFEhPU5V TEwKLSsgICAgICAgICAgICAgICAgJiYgRyE9TlVMTCk7Ci0rCi0rICAgIC8qIHplcm8gdGhlc2Ug c28gd2UgY2FuIGZyZWUgdGhlbSBpbmRpc2NyaW1pbmF0ZWx5IGxhdGVyICovCi0rICAgIFpFUk9f U0VDSVRFTShwKTsKLSsgICAgWkVST19TRUNJVEVNKHEpOwotKyAgICBaRVJPX1NFQ0lURU0oZyk7 Ci0rCi0rICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotKyAgICAgKiBTZXR1cCB0aGUgcGFyYW1ldGVycwotKyAgICAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsgICAgaWYoIEpTU19CeXRlQXJy YXlUb09jdGV0U3RyaW5nKGVudiwgUCwgJnApIHx8Ci0rICAgICAgICBKU1NfQnl0ZUFycmF5VG9P Y3RldFN0cmluZyhlbnYsIFEsICZxKSB8fAotKyAgICAgICAgSlNTX0J5dGVBcnJheVRvT2N0ZXRT dHJpbmcoZW52LCBHLCAmZykgKQotKyAgICB7Ci0rICAgICAgICBQUl9BU1NFUlQoICgqZW52KS0+ RXhjZXB0aW9uT2NjdXJyZWQoZW52KSAhPSBOVUxMKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwot KyAgICB9Ci0rICAgIHBhcmFtcyA9IFBLMTFfUFFHX05ld1BhcmFtcygmcCwgJnEsICZnKTsKLSsg ICAgaWYocGFyYW1zID09IE5VTEwpIHsKLSsgICAgICAgIEpTU190aHJvdyhlbnYsIE9VVF9PRl9N RU1PUllfRVJST1IpOwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsgICAga2V5UGFp ciA9IFBLMTFLZXlQYWlyR2VuZXJhdG9yV2l0aE9wRmxhZ3MoZW52LCB0aGlzLCB0b2tlbiwgQ0tN X0RTQV9LRVlfUEFJUl9HRU4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCB0ZW1w b3JhcnksIHNlbnNpdGl2ZSwgZXh0cmFjdGFibGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg b3BfZmxhZ3MsIG9wX2ZsYWdzX21hc2spOwotKwotK2ZpbmlzaDoKLSsgICAgU0VDSVRFTV9GcmVl SXRlbSgmcCwgUFJfRkFMU0UpOwotKyAgICBTRUNJVEVNX0ZyZWVJdGVtKCZxLCBQUl9GQUxTRSk7 Ci0rICAgIFNFQ0lURU1fRnJlZUl0ZW0oJmcsIFBSX0ZBTFNFKTsKLSsgICAgUEsxMV9QUUdfRGVz dHJveVBhcmFtcyhwYXJhbXMpOwotKyAgICByZXR1cm4ga2V5UGFpcjsKLSt9Ci0rCi0rCi0gdm9p ZAotIER1bXBJdGVtKFNFQ0l0ZW0gKml0ZW0pCi0gewotQEAgLTM2MSw2ICs0NjMsNyBAQCBKYXZh X29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVBhaXJHCi0gICAoSk5JRW52ICplbnYsIGpv YmplY3QgdGhpcywgam9iamVjdCB0b2tlbiwgamJ5dGVBcnJheSBDdXJ2ZSwgCi0gICAgIGpib29s ZWFuIHRlbXBvcmFyeSwgamludCBzZW5zaXRpdmUsIGppbnQgZXh0cmFjdGFibGUpCi0gewotKwot ICAgICBTRUNJdGVtIGN1cnZlOwotICAgICBqb2JqZWN0IGtleVBhaXI9TlVMTDsKLSAKLUBAIC0z ODUsMyArNDg4LDM5IEBAIGZpbmlzaDoKLSAgICAgU0VDSVRFTV9GcmVlSXRlbSgmY3VydmUsIFBS X0ZBTFNFKTsKLSAgICAgcmV0dXJuIGtleVBhaXI7Ci0gfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0r ICoKLSsgKiBQSzExS2V5UGFpckdlbmVyYXRvci5nZW5lcmF0ZUVDS2V5UGFpcldpdGhPcEZsYWdz Ci0rICoKLSsgKi8KLStKTklFWFBPUlQgam9iamVjdCBKTklDQUxMCi0rSmF2YV9vcmdfbW96aWxs YV9qc3NfcGtjczExX1BLMTFLZXlQYWlyR2VuZXJhdG9yX2dlbmVyYXRlRUNLZXlQYWlyV2l0aE9w RmxhZ3MKLSsgIChKTklFbnYgKmVudiwgam9iamVjdCB0aGlzLCBqb2JqZWN0IHRva2VuLCBqYnl0 ZUFycmF5IEN1cnZlLCAKLSsgICAgamJvb2xlYW4gdGVtcG9yYXJ5LCBqaW50IHNlbnNpdGl2ZSwg amludCBleHRyYWN0YWJsZSwKLSsgICAgamludCBvcF9mbGFncywgamludCBvcF9mbGFnc19tYXNr KQotK3sKLSsgICAgU0VDSXRlbSBjdXJ2ZTsKLSsgICAgam9iamVjdCBrZXlQYWlyPU5VTEw7Ci0r Ci0rICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhpcyE9TlVMTCAmJiB0b2tlbiE9TlVMTCAm JiBDdXJ2ZSE9TlVMTCApOwotKwotKyAgICAvKiB6ZXJvIHRoZXNlIHNvIHdlIGNhbiBmcmVlIHRo ZW0gaW5kaXNjcmltaW5hdGVseSBsYXRlciAqLwotKyAgICBaRVJPX1NFQ0lURU0oY3VydmUpOwot KwotKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLSsgICAgICogU2V0dXAgdGhlIHBhcmFtZXRlcnMKLSsgICAgICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rICAgIGlmKCBKU1NfQnl0ZUFycmF5 VG9PY3RldFN0cmluZyhlbnYsIEN1cnZlLCAmY3VydmUpKQotKyAgICB7Ci0rICAgICAgICBQUl9B U1NFUlQoICgqZW52KS0+RXhjZXB0aW9uT2NjdXJyZWQoZW52KSAhPSBOVUxMKTsKLSsgICAgICAg IGdvdG8gZmluaXNoOwotKyAgICB9Ci0rICAgIGtleVBhaXIgPSBQSzExS2V5UGFpckdlbmVyYXRv cldpdGhPcEZsYWdzKGVudiwgdGhpcywgdG9rZW4sIENLTV9FQ19LRVlfUEFJUl9HRU4sCi0rICAg ICAJCQkmY3VydmUsIHRlbXBvcmFyeSwgc2Vuc2l0aXZlLCBleHRyYWN0YWJsZSwKLSsgICAgICAg ICAgICAgICAgb3BfZmxhZ3MsIG9wX2ZsYWdzX21hc2spOwotKwotK2ZpbmlzaDoKLSsgICAgU0VD SVRFTV9GcmVlSXRlbSgmY3VydmUsIFBSX0ZBTFNFKTsKLSsgICAgcmV0dXJuIGtleVBhaXI7Ci0r fQotZGlmZiAtcnVwTiBqc3MtNC4yLjUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3BrY3MxMS9QSzExS2V5UGFpckdlbmVyYXRvci5qYXZhIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlQYWlyR2VuZXJhdG9yLmph dmEKLS0tLSBqc3MtNC4yLjUvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3MxMS9QSzExS2V5UGFpckdlbmVyYXRvci5qYXZhCTIwMDYtMDItMjIgMTc6MjE6NDIuMDAwMDAw MDAwIC0wODAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMUtleVBhaXJHZW5lcmF0b3IuamF2YQkyMDA5LTA1LTMwIDA1OjMwOjI1 LjAwMDAwMDAwMCAtMDcwMAotQEAgLTU1LDYgKzU1LDM5IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQ SzExS2V5UGFpckdlbmVyYXRvcgotICAgICBleHRlbmRzIG9yZy5tb3ppbGxhLmpzcy5jcnlwdG8u S2V5UGFpckdlbmVyYXRvclNwaQotIHsKLSAKLSsgICAgLy8gb3BGbGFnIGNvbnN0YW50czogZWFj aCBvZiB0aGVzZSBmbGFncyBzcGVjaWZpZXMgYSBjcnlwdG8gb3BlcmF0aW9uCi0rICAgIC8vIHRo ZSBrZXkgd2lsbCBzdXBwb3J0LiAgVGhlaXIgdmFsdWVzIG11c3QgbWF0Y2ggdGhlIHNhbWUtbmFt ZWQgQwotKyAgICAvLyBwcmVwcm9jZXNzb3IgbWFjcm9zIGRlZmluZWQgaW4gdGhlIFBLQ1MgIzEx IGhlYWRlciBwa2NzMTF0LmguCi0rICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDS0ZfRU5D UllQVCA9IDB4MDAwMDAxMDA7Ci0rICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDS0ZfREVD UllQVCA9IDB4MDAwMDAyMDA7Ci0rICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDS0ZfU0lH TiA9IDB4MDAwMDA4MDA7Ci0rICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDS0ZfU0lHTl9S RUNPVkVSID0gMHgwMDAwMTAwMDsKLSsgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENLRl9W RVJJRlkgPSAweDAwMDAyMDAwOwotKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0tGX1ZF UklGWV9SRUNPVkVSID0gMHgwMDAwNDAwMDsKLSsgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50 IENLRl9XUkFQID0gMHgwMDAyMDAwMDsKLSsgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENL Rl9VTldSQVAgPSAweDAwMDQwMDAwOwotKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0tG X0RFUklWRSA9IDB4MDAwODAwMDA7Ci0rCi0rICAgIC8vIEEgdGFibGUgZm9yIG1hcHBpbmcgU3lt bWV0cmljS2V5LlVzYWdlIHRvIG9wRmxhZy4gIFRoaXMgbXVzdCBiZQotKyAgICAvLyBzeW5jaHJv bml6ZWQgd2l0aCBTeW1tZXRyaWNLZXkuVXNhZ2UuCi0rICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IGludCBvcEZsYWdGb3JVc2FnZVtdID0gewotKyAgICAgICAgQ0tGX0VOQ1JZUFQsICAgICAgICAv KiAwICovCi0rICAgICAgICBDS0ZfREVDUllQVCwgICAgICAgIC8qIDEgKi8KLSsgICAgICAgIENL Rl9TSUdOLCAgICAgICAgICAgLyogMiAqLwotKyAgICAgICAgQ0tGX1NJR05fUkVDT1ZFUiwgICAv KiAzICovCi0rICAgICAgICBDS0ZfVkVSSUZZLCAgICAgICAgIC8qIDQgKi8KLSsgICAgICAgIENL Rl9WRVJJRllfUkVDT1ZFUiwgLyogNSAqLwotKyAgICAgICAgQ0tGX1dSQVAsICAgICAgICAgICAv KiA2ICovCi0rICAgICAgICBDS0ZfVU5XUkFQLCAgICAgICAgIC8qIDcgKi8KLSsgICAgICAgIENL Rl9ERVJJVkUgICAgICAgICAgLyogOCAqLwotKyAgICB9OwotKwotKyAgICAvLyBUaGUgY3J5cHRv IG9wZXJhdGlvbnMgdGhlIGtleSB3aWxsIHN1cHBvcnQuICBJdCBpcyB0aGUgbG9naWNhbCBPUgot KyAgICAvLyBvZiB0aGUgb3BGbGFnIGNvbnN0YW50cywgZWFjaCBzcGVjaWZ5aW5nIGEgc3VwcG9y dGVkIG9wZXJhdGlvbi4KLSsgICAgcHJpdmF0ZSBpbnQgb3BGbGFncyA9IDA7Ci0rICAgIHByaXZh dGUgaW50IG9wRmxhZ3NNYXNrID0gMDsKLSsKLSsKLSAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAg Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KLSAgICAgLy8gQ29uc3RydWN0b3JzCi1AQCAtMTg5LDQxICsyMjIsNDUg QEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFLZXlQYWlyR2VuZXJhdG9yCi0gICAgICAqIEdlbmVy YXRlcyBhIGtleSBwYWlyIG9uIGEgdG9rZW4uIFVzZXMgcGFyYW1ldGVycyBpZiB0aGV5IHdlcmUg cGFzc2VkCi0gICAgICAqIGluIHRocm91Z2ggYSBjYWxsIHRvIDxjb2RlPmluaXRpYWxpemU8L2Nv ZGU+LCBvdGhlcndpc2UgdXNlcyBkZWZhdWx0cy4KLSAgICAgICovCi0rCi0gICAgIHB1YmxpYyBL ZXlQYWlyIGdlbmVyYXRlS2V5UGFpcigpCi0gICAgICAgICB0aHJvd3MgVG9rZW5FeGNlcHRpb24K LSAgICAgewotICAgICAgICAgaWYoYWxnb3JpdGhtID09IEtleVBhaXJBbGdvcml0aG0uUlNBKSB7 Ci0gICAgICAgICAgICAgaWYocGFyYW1zICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgUlNB UGFyYW1ldGVyU3BlYyByc2FwYXJhbXMgPSAoUlNBUGFyYW1ldGVyU3BlYylwYXJhbXM7Ci0tICAg ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZVJTQUtleVBhaXIoCi0rICAgICAgICAgICAgICAg IHJldHVybiBnZW5lcmF0ZVJTQUtleVBhaXJXaXRoT3BGbGFncygKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByc2FwYXJhbXMuZ2V0S2V5U2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJzYXBhcmFtcy5nZXRQdWJsaWNFeHBvbmVudCgpLmxvbmdWYWx1ZSgpLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeVBhaXJNb2RlLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNpdGl2ZVBhaXJNb2RlLAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RhYmxlUGFpck1vZGUp OwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RhYmxlUGFpck1v ZGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BGbGFncywgb3BGbGFn c01hc2spOwotICAgICAgICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgICAgIHJldHVybiBn ZW5lcmF0ZVJTQUtleVBhaXIoCi0rICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZVJTQUtl eVBhaXJXaXRoT3BGbGFncygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1JTQV9L RVlfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1JT QV9QVUJMSUNfRVhQT05FTlQubG9uZ1ZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGVtcG9yYXJ5UGFpck1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2Vuc2l0aXZlUGFpck1vZGUsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0cmFjdGFibGVQYWlyTW9kZSk7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXh0cmFjdGFibGVQYWlyTW9kZSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvcEZsYWdzLCBvcEZsYWdzTWFzayk7Ci0gICAgICAgICAgICAgfQot ICAgICAgICAgfSBlbHNlIGlmKGFsZ29yaXRobSA9PSBLZXlQYWlyQWxnb3JpdGhtLkRTQSApIHsK LSAgICAgICAgICAgICBpZihwYXJhbXM9PW51bGwpIHsKLSAgICAgICAgICAgICAgICAgcGFyYW1z ID0gUFFHMTAyNDsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgRFNBUGFyYW1ldGVyU3Bl YyBkc2FQYXJhbXMgPSAoRFNBUGFyYW1ldGVyU3BlYylwYXJhbXM7Ci0tICAgICAgICAgICAgcmV0 dXJuIGdlbmVyYXRlRFNBS2V5UGFpcigKLSsgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVEU0FL ZXlQYWlyV2l0aE9wRmxhZ3MoCi0gICAgICAgICAgICAgICAgIHRva2VuLAotICAgICAgICAgICAg ICAgICBQUUdQYXJhbXMuQmlnSW50ZWdlclRvVW5zaWduZWRCeXRlQXJyYXkoZHNhUGFyYW1zLmdl dFAoKSksCi0gICAgICAgICAgICAgICAgIFBRR1BhcmFtcy5CaWdJbnRlZ2VyVG9VbnNpZ25lZEJ5 dGVBcnJheShkc2FQYXJhbXMuZ2V0USgpKSwKLSAgICAgICAgICAgICAgICAgUFFHUGFyYW1zLkJp Z0ludGVnZXJUb1Vuc2lnbmVkQnl0ZUFycmF5KGRzYVBhcmFtcy5nZXRHKCkpLAotICAgICAgICAg ICAgICAgICB0ZW1wb3JhcnlQYWlyTW9kZSwKLSAgICAgICAgICAgICAgICAgc2Vuc2l0aXZlUGFp ck1vZGUsCi0tICAgICAgICAgICAgICAgIGV4dHJhY3RhYmxlUGFpck1vZGUpOwotKyAgICAgICAg ICAgICAgICBleHRyYWN0YWJsZVBhaXJNb2RlLAotKyAgICAgICAgICAgICAgICBvcEZsYWdzLCBv cEZsYWdzTWFzayk7Ci0gICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIEFzc2VydC5fYXNz ZXJ0KCBhbGdvcml0aG0gPT0gS2V5UGFpckFsZ29yaXRobS5FQyApOwotICAgICAgICAgICAgIC8v IHJlcXVpcmVzIEpBVkEgMS41IGZvciBFQ1BhcmFtZXRlcnMuCi1AQCAtMjMzLDEyICsyNzAsMTQg QEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFLZXlQYWlyR2VuZXJhdG9yCi0gCSAgICAvLyBlY1Bh cmFtcy5pbml0KHBhcmFtcyk7Ci0gICAgICAgICAgICAgUEsxMVBhcmFtZXRlclNwZWMgZWNQYXJh bXMgPSAoUEsxMVBhcmFtZXRlclNwZWMpIHBhcmFtczsKLSAKLS0gICAgICAgICAgICByZXR1cm4g Z2VuZXJhdGVFQ0tleVBhaXIoCi0rICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRUNLZXlQYWly V2l0aE9wRmxhZ3MoCi0gICAgICAgICAgICAgICAgIHRva2VuLAotIAkJZWNQYXJhbXMuZ2V0RW5j b2RlZCgpLCAvKiBjdXJ2ZSAqLwotICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlQYWlyTW9kZSwK LSAgICAgICAgICAgICAgICAgc2Vuc2l0aXZlUGFpck1vZGUsCi0tICAgICAgICAgICAgICAgIGV4 dHJhY3RhYmxlUGFpck1vZGUpOwotKyAgICAgICAgICAgICAgICBleHRyYWN0YWJsZVBhaXJNb2Rl LAotKyAgICAgICAgICAgICAgICBvcEZsYWdzLAotKyAgICAgICAgICAgICAgICBvcEZsYWdzTWFz ayk7Ci0gICAgICAgICB9IAotICAgICB9Ci0gCi1AQCAtMjY2LDYgKzMwNSwxNyBAQCBwdWJsaWMg ZmluYWwgY2xhc3MgUEsxMUtleVBhaXJHZW5lcmF0b3IKLSAgICAgICAgIHRocm93cyBUb2tlbkV4 Y2VwdGlvbjsKLSAKLSAgICAgLyoqCi0rICAgICAqIEdlbmVyYXRlcyBhbiBSU0Ega2V5IHBhaXIg d2l0aCB0aGUgZ2l2ZW4gc2l6ZSBhbmQgcHVibGljIGV4cG9uZW50LgotKyAgICAgKiBBZGRzIHRo ZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSBzZXQgb2YgZmxhZ3MgYW5kIG1hc2tzCi0rICAgICAqIHRv IGNvbnRyb2wgaG93IE5TUyBnZW5lcmF0ZXMgdGhlIGtleSBwYWlyLgotKyAgICAgKi8KLSsgICAg cHJpdmF0ZSBuYXRpdmUgS2V5UGFpcgotKyAgICBnZW5lcmF0ZVJTQUtleVBhaXJXaXRoT3BGbGFn cyhQSzExVG9rZW4gdG9rZW4sIGludCBrZXlTaXplLCBsb25nIHB1YmxpY0V4cG9uZW50LAotKyAg ICAgICAgICAgIGJvb2xlYW4gdGVtcG9yYXJ5LCBpbnQgc2Vuc2l0aXZlLCBpbnQgZXh0cmFjdGFi bGUsCi0rICAgICAgICAgICAgaW50IG9wX2ZsYWdzLCBpbnQgb3BfZmxhZ3NfbWFzaykKLSsgICAg ICAgIHRocm93cyBUb2tlbkV4Y2VwdGlvbjsKLSsKLSsgICAgLyoqCi0gICAgICAqIEdlbmVyYXRl cyBhIERTQSBrZXkgcGFpciB3aXRoIHRoZSBnaXZlbiBQLCBRLCBhbmQgRyB2YWx1ZXMuCi0gICAg ICAqIFAsIFEsIGFuZCBHIGFyZSBzdG9yZWQgYXMgYmlnLWVuZGlhbiB0d29zLWNvbXBsZW1lbnQg b2N0ZXQgc3RyaW5ncy4KLSAgICAgICovCi1AQCAtMjc1LDYgKzMyNSwxOSBAQCBwdWJsaWMgZmlu YWwgY2xhc3MgUEsxMUtleVBhaXJHZW5lcmF0b3IKLSAgICAgICAgIHRocm93cyBUb2tlbkV4Y2Vw dGlvbjsKLSAKLSAgICAgLyoqCi0rICAgICAqIEdlbmVyYXRlcyBhIERTQSBrZXkgcGFpciB3aXRo IHRoZSBnaXZlbiBQLCBRLCBhbmQgRyB2YWx1ZXMuCi0rICAgICAqIFAsIFEsIGFuZCBHIGFyZSBz dG9yZWQgYXMgYmlnLWVuZGlhbiB0d29zLWNvbXBsZW1lbnQgb2N0ZXQgc3RyaW5ncy4KLSsgICAg ICogQWRkcyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgc2V0IG9mIGZsYWdzIGFuZCBtYXNrcwot KyAgICAgKiB0byBjb250cm9sIGhvdyBOU1MgZ2VuZXJhdGVzIHRoZSBrZXkgcGFpci4KLSsgICAg ICovCi0rICAgIHByaXZhdGUgbmF0aXZlIEtleVBhaXIKLSsgICAgZ2VuZXJhdGVEU0FLZXlQYWly V2l0aE9wRmxhZ3MoUEsxMVRva2VuIHRva2VuLCBieXRlW10gUCwgYnl0ZVtdIFEsIGJ5dGVbXSBH LAotKyAgICAgICAgICAgIGJvb2xlYW4gdGVtcG9yYXJ5LCBpbnQgc2Vuc2l0aXZlLCBpbnQgZXh0 cmFjdGFibGUsCi0rICAgICAgICAgICAgaW50IG9wX2ZsYWdzLCBpbnQgb3BfZmxhZ3NfbWFzaykK LSsgICAgICAgIHRocm93cyBUb2tlbkV4Y2VwdGlvbjsKLSsKLSsKLSsgICAgLyoqCi0gICAgICAq IEdlbmVyYXRlcyBhIEVDIGtleSBwYWlyIHdpdGggdGhlIGdpdmVuIGEgY3VydmUuCi0gICAgICAq IEN1cnZlcyBhcmUgc3RvcmVkIGFzIERFUiBFbmNvZGVkIFBhcmFtZXRlcnMuCi0gICAgICAqLwot QEAgLTI4Miw2ICszNDUsMTggQEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFLZXlQYWlyR2VuZXJh dG9yCi0gICAgIGdlbmVyYXRlRUNLZXlQYWlyKFBLMTFUb2tlbiB0b2tlbiwgYnl0ZVtdIEN1cnZl LCAKLSAgICAgICAgICAgICBib29sZWFuIHRlbXBvcmFyeSwgaW50IHNlbnNpdGl2ZSwgaW50IGV4 dHJhY3RhYmxlKQotICAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uOwotKyAgICAvKioKLSsg ICAgICogR2VuZXJhdGVzIGEgRUMga2V5IHBhaXIgd2l0aCB0aGUgZ2l2ZW4gYSBjdXJ2ZS4KLSsg ICAgICogQ3VydmVzIGFyZSBzdG9yZWQgYXMgREVSIEVuY29kZWQgUGFyYW1ldGVycy4KLSsgICAg ICogQWRkcyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgc2V0IG9mIGZsYWdzIGFuZCBtYXNrcwot KyAgICAgKiB0byBjb250cm9sIGhvdyBOU1MgZ2VuZXJhdGVzIHRoZSBrZXkgcGFpci4KLSsgICAg ICovCi0rCi0rICAgIHByaXZhdGUgbmF0aXZlIEtleVBhaXIKLSsgICAgZ2VuZXJhdGVFQ0tleVBh aXJXaXRoT3BGbGFncyhQSzExVG9rZW4gdG9rZW4sIGJ5dGVbXSBDdXJ2ZSwgCi0rICAgICAgICAg ICAgYm9vbGVhbiB0ZW1wb3JhcnksIGludCBzZW5zaXRpdmUsIGludCBleHRyYWN0YWJsZSwKLSsg ICAgICAgICAgICBpbnQgb3BfZmxhZ3MsIGludCBvcF9mbGFnc19tYXNrKQotKyAgICAgICAgdGhy b3dzIFRva2VuRXhjZXB0aW9uOwotIAotICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLwotQEAgLTM5Nyw2ICs0NzIsMzggQEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFLZXlQ YWlyR2VuZXJhdG9yCi0gICAgICAgICBleHRyYWN0YWJsZVBhaXJNb2RlID0gZXh0cmFjdGFibGUg PyAxIDogMDsKLSAgICAgfQotIAotKyAgICAvKioKLSsgICAgICogU2V0cyB0aGUgcmVxdWVzdGVk IGtleSB1c2FnZXMgZGVzaXJlZCBmb3IgdGhlIAotKyAgICAgKiBnZW5lcmF0ZWQga2V5IHBhaXIu IAotKyAgICAgKiBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHN1Z2dlc3QgaG93IE5TUyBnZW5l cmF0ZXMgdGhlIGtleSBwYWlyLgotKyAgICAgKiBAcGFyYW0gdXNhZ2VzIExpc3Qgb2YgZGVzaXJl ZCBrZXkgdXNhZ2VzLiAKLSsgICAgICogQHBhcmFtIHVzYWdlc19tYXNrIENvcnJlc3BvbmRpbmcg bWFzayBmb3IgdGhlIGtleSB1c2FnZXMuCi0rICAgICAqIGlmIGEgdXNhZ2VzIGlzIGRlc2lyZWQs IG1ha2Ugc3VyZSBpdCBpcyBpbiB0aGUgbWFzayBhcyB3ZWxsLgotKyAgICAgKi8KLSsKLSsgICAg cHVibGljIHZvaWQgc2V0S2V5UGFpclVzYWdlcyhvcmcubW96aWxsYS5qc3MuY3J5cHRvLktleVBh aXJHZW5lcmF0b3JTcGkuVXNhZ2VbXSB1c2FnZXMsIAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9yZy5tb3ppbGxhLmpzcy5jcnlwdG8uS2V5UGFpckdlbmVyYXRvclNwaS5Vc2Fn ZVtdIHVzYWdlc19tYXNrKSB7Ci0rCi0rICAgICAgICB0aGlzLm9wRmxhZ3MgPSAwOwotKyAgICAg ICAgdGhpcy5vcEZsYWdzTWFzayA9IDA7Ci0rCi0rICAgICAgICBpZih1c2FnZXMgIT0gbnVsbCkg ewotKyAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgdXNhZ2VzLmxlbmd0aDsgaSsrICkg ewotKyAgICAgICAgICAgICAgICBpZiggdXNhZ2VzW2ldICE9IG51bGwgKSB7Ci0rICAgICAgICAg ICAgICAgICAgICB0aGlzLm9wRmxhZ3MgfD0gb3BGbGFnRm9yVXNhZ2VbdXNhZ2VzW2ldLmdldFZh bCgpXTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsK LSsgICAgICAgIGlmKHVzYWdlc19tYXNrICE9IG51bGwpIHsKLSsgICAgICAgICAgICBmb3IoIGlu dCBpID0gMDsgaSA8IHVzYWdlc19tYXNrLmxlbmd0aDsgaSsrICkgewotKyAgICAgICAgICAgICAg ICBpZiggdXNhZ2VzX21hc2tbaV0gIT0gbnVsbCApIHsKLSsgICAgICAgICAgICAgICAgICAgIHRo aXMub3BGbGFnc01hc2sgfD0gb3BGbGFnRm9yVXNhZ2VbdXNhZ2VzX21hc2tbaV0uZ2V0VmFsKCld OwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAgICB9 Ci0rCi0gICAgIC8vCi0gICAgIC8vIHJlcXVpcmVzIEpBVkEgMS41Ci0gICAgIC8vCi1kaWZmIC1y dXBOIGpzcy00LjIuNS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEx L3BrMTF1dGlsLmgganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9wa2NzMTEvcGsxMXV0aWwuaAotLS0tIGpzcy00LjIuNS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvcGtjczExL3BrMTF1dGlsLmgJMjAwNi0wMi0yMiAxNzoyMTo0Mi4wMDAw MDAwMDAgLTA4MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9wazExdXRpbC5oCTIwMDktMDUtMjkgMDg6MzQ6MjQuMDAwMDAwMDAwIC0w NzAwCi1AQCAtMTU3LDYgKzE1NywxMiBAQCBKU1NfUEsxMV9nZW5lcmF0ZUtleVBhaXIoSk5JRW52 ICplbnYsIENLCi0gICAgIFBLMTFTbG90SW5mbyAqc2xvdCwgU0VDS0VZUHVibGljS2V5ICoqcHVi aywgU0VDS0VZUHJpdmF0ZUtleSAqKnByaXZLLAotICAgICB2b2lkICpwYXJhbXMsIFBSQm9vbCB0 ZW1wb3JhcnksIGppbnQgc2Vuc3RpdmUsIGppbnQgZXh0cmFjdGFibGUpOwotIAotK1NFQ1N0YXR1 cwotK0pTU19QSzExX2dlbmVyYXRlS2V5UGFpcl93aXRoT3BGbGFncyhKTklFbnYgKmVudiwgQ0tf TUVDSEFOSVNNX1RZUEUgbWVjaGFuaXNtLAotKyAgICBQSzExU2xvdEluZm8gKnNsb3QsIFNFQ0tF WVB1YmxpY0tleSAqKnB1YmssIFNFQ0tFWVByaXZhdGVLZXkgKipwcml2aywKLSsgICAgdm9pZCAq cGFyYW1zLCBQUkJvb2wgdGVtcG9yYXJ5LCBqaW50IHNlbnNpdGl2ZSwgamludCBleHRyYWN0YWJs ZSwKLSsgICAgamludCBvcF9mbGFncywgamludCBvcF9mbGFnc19tYXNrKTsKLSsKLSAvKj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgQyBFIFIgVCBJIEYgSSBDIEEgVCBFIFMK LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0qLwoKZGlmZiAtLWdpdCBhL2pzcy1sb2FkbGlicmFyeS5wYXRjaCBiL2pz cy1sb2FkbGlicmFyeS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2NDNh NC4uMDAwMDAwMAotLS0gYS9qc3MtbG9hZGxpYnJhcnkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSwyOSArMCwwIEBACi1kaWZmIC11TiAtLXJlY3Vyc2l2ZSBqc3MtNC4yLjYub3JpZy9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZh Ci0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L0NyeXB0b01hbmFnZXIuamF2YQkyMDA4LTAxLTMxIDE3OjI5OjE2LjAwMDAwMDAwMCAtMDUwMAot KysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRv TWFuYWdlci5qYXZhCTIwMTAtMDEtMDcgMTA6NDc6MDQuMDAwMDAwMDAwIC0wNTAwCi1AQCAtMTMz NCwxMSArMTMzNCwyMCBAQAotICAgICAgKi8KLSAgICAgc3luY2hyb25pemVkIHN0YXRpYyB2b2lk IGxvYWROYXRpdmVMaWJyYXJpZXMoKQotICAgICB7Ci0tICAgICAgICBpZiggISBtTmF0aXZlTGli cmFyaWVzTG9hZGVkICkKLS0gICAgICAgIHsKLS0gICAgICAgICAgICBTeXN0ZW0ubG9hZExpYnJh cnkoImpzczQiKTsKLS0gICAgICAgICAgICBEZWJ1Zy50cmFjZShEZWJ1Zy5WRVJCT1NFLCAianNz IGxpYnJhcnkgbG9hZGVkIik7Ci0tICAgICAgICAgICAgbU5hdGl2ZUxpYnJhcmllc0xvYWRlZCA9 IHRydWU7Ci0rICAgICAgICBpZiggISBtTmF0aXZlTGlicmFyaWVzTG9hZGVkICkgewotKyAgICAg ICAgICAgIHRyeSB7Ci0rICAgICAgICAgICAgICAgIFN5c3RlbS5sb2FkKCAiL3Vzci9saWI2NC9q c3MvbGlianNzNC5zbyIgKTsKLSsgICAgICAgICAgICAgICAgRGVidWcudHJhY2UoRGVidWcuVkVS Qk9TRSwgImpzcyBsaWJyYXJ5IGxvYWRlZCIpOwotKyAgICAgICAgICAgICAgICBtTmF0aXZlTGli cmFyaWVzTG9hZGVkID0gdHJ1ZTsKLSsgICAgICAgICAgICB9IGNhdGNoKCBVbnNhdGlzZmllZExp bmtFcnJvciBlICkgewotKyAgICAgICAgICAgICAgICB0cnkgewotKyAgICAgICAgICAgICAgICAg ICAgU3lzdGVtLmxvYWQoICIvdXNyL2xpYi9qc3MvbGlianNzNC5zbyIgKTsKLSsgICAgICAgICAg ICAgICAgICAgIERlYnVnLnRyYWNlKERlYnVnLlZFUkJPU0UsICJqc3MgbGlicmFyeSBsb2FkZWQi KTsKLSsgICAgICAgICAgICAgICAgICAgIG1OYXRpdmVMaWJyYXJpZXNMb2FkZWQgPSB0cnVlOwot KyAgICAgICAgICAgICAgICB9IGNhdGNoKCBVbnNhdGlzZmllZExpbmtFcnJvciBmICkgewotKyAg ICAgICAgICAgICAgICAgICAgRGVidWcudHJhY2UoRGVidWcuVkVSQk9TRSwgImpzcyBsaWJyYXJ5 IGxvYWQgZmFpbGVkIik7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICB9Ci0gICAg ICAgICB9Ci0gICAgIH0KLSAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBtTmF0aXZlTGlicmFy aWVzTG9hZGVkID0gZmFsc2U7CgpkaWZmIC0tZ2l0IGEvanNzLWx1bmFzYVVud3JhcC5wYXRjaCBi L2pzcy1sdW5hc2FVbndyYXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUw MjFiZDYuLjAwMDAwMDAKLS0tIGEvanNzLWx1bmFzYVVud3JhcC5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDEyICswLDAgQEAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMuY2Z1IGpzcy00LjIuNi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVy LmMKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3MxMS9QSzExS2V5V3JhcHBlci5jLmNmdQkyMDE2LTA0LTI4IDE2OjUwOjA2LjAwMDAwMDAwMCAt MDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv cGtjczExL1BLMTFLZXlXcmFwcGVyLmMJMjAxNi0wNC0yOCAxNjo1MDowMC4wMDAwMDAwMDAgLTA3 MDAKLUBAIC00MzQsNyArNDM0LDcgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFL ZXlXcmFwcAotICAgICAgICAgaXNTZW5zaXRpdmUgPSBQUl9GQUxTRTsKLSAgICAgICAgIGlzRXh0 cmFjdGFibGUgPSBQUl9GQUxTRTsKLSAgICAgfSBlbHNlIGlmICggaXNMdW5hc2EpIHsKLS0gICAg ICAgIGlzU2Vuc2l0aXZlID0gUFJfRkFMU0U7Ci0rICAgICAgICBpc1NlbnNpdGl2ZSA9IFBSX1RS VUU7Ci0gICAgICAgICBpc0V4dHJhY3RhYmxlID0gUFJfVFJVRTsKLSAgICAgfQotIAoKZGlmZiAt LWdpdCBhL2pzcy1vY3NwU2V0dGluZ3MucGF0Y2ggYi9qc3Mtb2NzcFNldHRpbmdzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWFjMjI2Li4wMDAwMDAwCi0tLSBhL2pzcy1v Y3NwU2V0dGluZ3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotZGlmZiAt dXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9qc3MuZGVmLm9yaWcganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9qc3MuZGVmCi0tLS0ganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL2xpYi9qc3MuZGVmLm9yaWcJMjAwOS0xMS0wNCAxNDoyNjoyNi4wMDAw MDAwMDAgLTA4MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3MvbGliL2pzcy5k ZWYJMjAwOS0xMS0wNCAxNDoxMTowNS4wMDAwMDAwMDAgLTA4MDAKLUBAIC0zMjksNiArMzI5LDgg QEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFUb2tlbl9uZQotIEphdmFfb3JnX21v emlsbGFfanNzX3BrY3MxMV9QSzExS2V5UGFpckdlbmVyYXRvcl9nZW5lcmF0ZUVDS2V5UGFpcldp dGhPcEZsYWdzOwotIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5UGFpckdlbmVy YXRvcl9nZW5lcmF0ZVJTQUtleVBhaXJXaXRoT3BGbGFnczsKLSBKYXZhX29yZ19tb3ppbGxhX2pz c19wa2NzMTFfUEsxMUtleVBhaXJHZW5lcmF0b3JfZ2VuZXJhdGVEU0FLZXlQYWlyV2l0aE9wRmxh Z3M7Ci0rSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl9PQ1NQQ2FjaGVTZXR0aW5n c05hdGl2ZTsKLStKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX3NldE9DU1BUaW1l b3V0TmF0aXZlOwotIDsrICAgIGxvY2FsOgotIDsrICAgICAgICo7Ci0gOyt9OwotZGlmZiAtdXAg anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5h Z2VyLmMub3JpZyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L0NyeXB0b01hbmFnZXIuYwotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5jLm9yaWcJMjAwOS0xMS0wNCAxNDoyMDo0My4wMDAw MDAwMDAgLTA4MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL0NyeXB0b01hbmFnZXIuYwkyMDA5LTExLTA1IDEwOjQ4OjMyLjU5MDAwMDAwMCAtMDgw MAotQEAgLTk3NiwzICs5NzYsNDUgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdl cl9jb25maQotICAgICB9Ci0gfQotIAotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rKiBPQ1NQQ2FjaGVT ZXR0aW5nc05hdGl2ZQotKyoKLSsqIEFsbG93cyBjb25maWd1cmF0aW9uIG9mIHRoZSBPQ1NQIHJl c3BvbmRlciBjYWNoZSBkdXJpbmcgcnVudGltZS4KLSsqLwotK0pOSUVYUE9SVCB2b2lkIEpOSUNB TEwKLStKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX09DU1BDYWNoZVNldHRpbmdz TmF0aXZlKAotKyAgICAgICAgSk5JRW52ICplbnYsIGpvYmplY3QgdGhpcywKLSsgICAgICAgIGpp bnQgb2NzcF9jYWNoZV9zaXplLAotKyAgICAgICAgamludCBvY3NwX21pbl9jYWNoZV9lbnRyeV9k dXJhdGlvbiwKLSsgICAgICAgIGppbnQgb2NzcF9tYXhfY2FjaGVfZW50cnlfZHVyYXRpb24pCi0r ewotKyAgICBTRUNTdGF0dXMgcnYgPSBTRUNGYWlsdXJlOwotKwotKyAgICBydiA9IENFUlRfT0NT UENhY2hlU2V0dGluZ3MoCi0rICAgICAgICBvY3NwX2NhY2hlX3NpemUsIG9jc3BfbWluX2NhY2hl X2VudHJ5X2R1cmF0aW9uLAotKyAgICAgICAgb2NzcF9tYXhfY2FjaGVfZW50cnlfZHVyYXRpb24p OwotKwotKyAgICBpZiAocnYgIT0gU0VDU3VjY2VzcykgewotKyAgICAgICAgSlNTX3Rocm93TXNn UHJFcnIoZW52LAotKyAgICAgICAgICAgICAgICAgICAgIEdFTkVSQUxfU0VDVVJJVFlfRVhDRVBU SU9OLAotKyAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IE9DU1AgY2FjaGU6IGVy cm9yICIrIFBPUlRfR2V0RXJyb3IoKSk7Ci0rICAgIH0KLSt9Ci0rCi0rSk5JRVhQT1JUIHZvaWQg Sk5JQ0FMTAotK0phdmFfb3JnX21vemlsbGFfanNzX0NyeXB0b01hbmFnZXJfc2V0T0NTUFRpbWVv dXROYXRpdmUoCi0rICAgICAgICBKTklFbnYgKmVudiwgam9iamVjdCB0aGlzLAotKyAgICAgICAg amludCBvY3NwX3RpbWVvdXQgKQotK3sKLSsgICAgU0VDU3RhdHVzIHJ2ID0gU0VDRmFpbHVyZTsK LSsKLSsgICAgcnYgPSBDRVJUX1NldE9DU1BUaW1lb3V0KG9jc3BfdGltZW91dCk7Ci0rCi0rICAg IGlmIChydiAhPSBTRUNTdWNjZXNzKSB7Ci0rICAgICAgICBKU1NfdGhyb3dNc2dQckVycihlbnYs Ci0rICAgICAgICAgICAgICAgICAgICAgR0VORVJBTF9TRUNVUklUWV9FWENFUFRJT04sCi0rICAg ICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgT0NTUCB0aW1lb3V0OiBlcnJvciAiKyBQ T1JUX0dldEVycm9yKCkpOwotKyAgICB9Ci0rfQotKwotZGlmZiAtdXAganNzLTQuMi42L21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEub3JpZyBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFn ZXIuamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvQ3J5cHRvTWFuYWdlci5qYXZhLm9yaWcJMjAwOS0xMS0wNCAxNDoyMDozMy4wMDAwMDAwMDAg LTA4MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L0NyeXB0b01hbmFnZXIuamF2YQkyMDA5LTExLTA1IDEwOjQ4OjU5LjQxNTAwMTAwMCAtMDgwMAot QEAgLTE0NzksNCArMTQ3OSw0MSBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBp bXBsZW1lCi0gICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2NzcFJlc3BvbmRlckNlcnROaWNr bmFtZSApCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgR2VuZXJhbFNlY3VyaXR5RXhjZXB0 aW9uOwotIAotKyAgICAvKioKLSsgICAgICogY2hhbmdlIE9DU1AgY2FjaGUgc2V0dGluZ3MKLSsg ICAgICogICAgICAqIEBwYXJhbSBvY3NwX2NhY2hlX3NpemUgbWF4IGNhY2hlIGVudHJpZXMKLSsg ICAgICogICAgICAqIEBwYXJhbSBvY3NwX21pbl9jYWNoZV9lbnRyeV9kdXJhdGlvbiBtaW5pbXVt IHNlY29uZHMgdG8gbmV4dCBmZXRjaCBhdHRlbXB0Ci0rICAgICAqICAgICAgKiBAcGFyYW0gb2Nz cF9tYXhfY2FjaGVfZW50cnlfZHVyYXRpb24gbWF4aW11bSBzZWNvbmRzIHRvIG5leHQgZmV0Y2gg YXR0ZW1wdAotKyAgICAgKi8KLSsgICAgcHVibGljIHZvaWQgT0NTUENhY2hlU2V0dGluZ3MoCi0r ICAgICAgICBpbnQgb2NzcF9jYWNoZV9zaXplLCAKLSsgICAgICAgIGludCBvY3NwX21pbl9jYWNo ZV9lbnRyeV9kdXJhdGlvbiwKLSsgICAgICAgIGludCBvY3NwX21heF9jYWNoZV9lbnRyeV9kdXJh dGlvbikKLSsgICAgdGhyb3dzIEdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbgotKyAgICB7Ci0rICAg ICAgICBPQ1NQQ2FjaGVTZXR0aW5nc05hdGl2ZShvY3NwX2NhY2hlX3NpemUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvY3NwX21pbl9jYWNoZV9lbnRyeV9kdXJhdGlvbiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jc3BfbWF4X2NhY2hlX2VudHJ5 X2R1cmF0aW9uKTsKLSsgICAgfQotKwotKyAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIE9DU1BDYWNo ZVNldHRpbmdzTmF0aXZlKAotKyAgICAgICAgaW50IG9jc3BfY2FjaGVfc2l6ZSwgCi0rICAgICAg ICBpbnQgb2NzcF9taW5fY2FjaGVfZW50cnlfZHVyYXRpb24sCi0rICAgICAgICBpbnQgb2NzcF9t YXhfY2FjaGVfZW50cnlfZHVyYXRpb24pCi0rICAgICAgICAgICAgICAgICAgICB0aHJvd3MgR2Vu ZXJhbFNlY3VyaXR5RXhjZXB0aW9uOwotKwotKyAgICAvKioKLSsgICAgICogc2V0IE9DU1AgdGlt ZW91dCB2YWx1ZQotKyAgICAgKiAgICAgICogQHBhcmFtIG9jc3BUaW1lb3V0IE9DU1AgdGltZW91 dCBpbiBzZWNvbmRzCi0rICAgICAqLwotKyAgICBwdWJsaWMgdm9pZCBzZXRPQ1NQVGltZW91dCgK LSsgICAgICAgIGludCBvY3NwX3RpbWVvdXQgKQotKyAgICB0aHJvd3MgR2VuZXJhbFNlY3VyaXR5 RXhjZXB0aW9uCi0rICAgIHsKLSsgICAgICAgIHNldE9DU1BUaW1lb3V0TmF0aXZlKCBvY3NwX3Rp bWVvdXQpOwotKyAgICB9Ci0rCi0rICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgc2V0T0NTUFRpbWVv dXROYXRpdmUoCi0rICAgICAgICBpbnQgb2NzcF90aW1lb3V0ICkKLSsgICAgICAgICAgICAgICAg ICAgIHRocm93cyBHZW5lcmFsU2VjdXJpdHlFeGNlcHRpb247Ci0gfQoKZGlmZiAtLWdpdCBhL2pz cy1zdXBwb3J0LVRMUzFfMS1UTFMxXzIucGF0Y2ggYi9qc3Mtc3VwcG9ydC1UTFMxXzEtVExTMV8y LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQyMjA3Li4wMDAwMDAwCi0t LSBhL2pzcy1zdXBwb3J0LVRMUzFfMS1UTFMxXzIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwz NDUgKzAsMCBAQAotZGlmZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9q c3MuZGVmLmNmdVNhdmVkIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRl ZgotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZi5jZnVTYXZl ZAkyMDE0LTA5LTI5IDE0OjEyOjI3LjU2MDIwNjM0OCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZgkyMDE0LTA5LTI5IDE0OjEyOjM0LjM3NjE5NDQ2 NCAtMDcwMAotQEAgLTMzNCw2ICszMzQsOCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9N YW5hZ2VyX3NldE9DCi0gSmF2YV9vcmdfbW96aWxsYV9qc3NfQ3J5cHRvTWFuYWdlcl92ZXJpZnlD ZXJ0aWZpY2F0ZU5vd05hdGl2ZTsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2Vy X3ZlcmlmeUNlcnRpZmljYXRlTm93Q1VOYXRpdmU7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3NfYXNu MV9BU04xVXRpbF9nZXRUYWdEZXNjcmlwdGlvbkJ5T2lkOwotK0phdmFfb3JnX21vemlsbGFfanNz X3NzbF9Tb2NrZXRCYXNlX3NldFNTTFZlcnNpb25SYW5nZTsKLStKYXZhX29yZ19tb3ppbGxhX2pz c19zc2xfU1NMU29ja2V0X3NldFNTTFZlcnNpb25SYW5nZURlZmF1bHQ7Ci0gOysgICAgbG9jYWw6 Ci0gOysgICAgICAgKjsKLSA7K307Ci1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYy5jZnVTYXZlZCBqc3MtNC4yLjYv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xTb2NrZXQuYwotLS0t IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NTTFNv Y2tldC5jLmNmdVNhdmVkCTIwMTQtMDktMjkgMTQ6MTI6MjcuNTY1MjA2MzM5IC0wNzAwCi0rKysg anNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29j a2V0LmMJMjAxNC0wOS0yOSAxNDoxMzozMy4yMjIwOTEwNTMgLTA3MDAKLUBAIC01Niw2ICs1Niwx MDUgQEAKLSAjZW5kaWYKLSAKLSAKLSsvKgotKyAqIHN1cHBvcnQgVExTIHYxLjEgYW5kIHYxLjIK LSsgKiAgIHNldHMgZGVmYXVsdCBTU0wgdmVyc2lvbiByYW5nZSBmb3Igc29ja2V0cyBjcmVhdGVk IGFmdGVyIHRoaXMgY2FsbAotKyAqLwotK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwKLStKYXZhX29y Z19tb3ppbGxhX2pzc19zc2xfU1NMU29ja2V0X3NldFNTTFZlcnNpb25SYW5nZURlZmF1bHQoSk5J RW52ICplbnYsCi0rICAgIGpjbGFzcyBjbGF6eiwgamludCBzc2xfdmFyaWFudCwgamludCBtaW4s IGppbnQgbWF4KQotK3sKLSsgICAgU0VDU3RhdHVzIHN0YXR1czsKLSsgICAgU1NMVmVyc2lvblJh bmdlIHZyYW5nZTsKLSsKLSsgICAgaWYgKHNzbF92YXJpYW50IDwwIHx8IHNzbF92YXJpYW50ID49 IEpTU0xfZW51bXNfc2l6ZXx8IAotKyAgICAgICAgICAgIG1pbiA8MCB8fCBtaW4gPj0gSlNTTF9l bnVtc19zaXplIHx8Ci0rICAgICAgICAgICAgbWF4IDwwIHx8IG1heCA+PSBKU1NMX2VudW1zX3Np emUpIHsKLSsgICAgICAgIGNoYXIgYnVmWzEyOF07Ci0rICAgICAgICBQUl9zbnByaW50ZihidWYs IDEyOCwgIkpTUyBzZXRTU0xWZXJzaW9uUmFuZ2VEZWZhdWx0KCk6IGZvciB2YXJpYW50PSVkIG1p bj0lZCBtYXg9JWQgZmFpbGVkIC0gb3V0IG9mIHJhbmdlIGZvciBhcnJheSBKU1NMX2VudW1zIHNp emU6ICVkIiwgSlNTTF9lbnVtc1tzc2xfdmFyaWFudF0sIG1pbiwgbWF4LCBKU1NMX2VudW1zX3Np emUpOwotKyAgICAgICAgSlNTTF90aHJvd1NTTFNvY2tldEV4Y2VwdGlvbihlbnYsIGJ1Zik7Ci0r ICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICB2cmFuZ2UubWluID0gSlNTTF9l bnVtc1ttaW5dOwotKyAgICB2cmFuZ2UubWF4ID0gSlNTTF9lbnVtc1ttYXhdOwotKwotKyAgICAv KiBnZXQgc3VwcG9ydGVkIHJhbmdlICovCi0rICAgIFNTTFZlcnNpb25SYW5nZSBzdXBwb3J0ZWRf cmFuZ2U7Ci0rICAgIHN0YXR1cyA9IFNTTF9WZXJzaW9uUmFuZ2VHZXRTdXBwb3J0ZWQoSlNTTF9l bnVtc1tzc2xfdmFyaWFudF0sCi0rICAgICAgICAgICAgICAgICZzdXBwb3J0ZWRfcmFuZ2UpOwot KyAgICBpZiggc3RhdHVzICE9IFNFQ1N1Y2Nlc3MgKSB7Ci0rICAgICAgICBjaGFyIGJ1ZlsxMjhd OwotKyAgICAgICAgUFJfc25wcmludGYoYnVmLCAxMjgsICJTU0xfVmVyc2lvblJhbmdlR2V0U3Vw cG9ydGVkKCkgZm9yIHZhcmlhbnQ9JWQgZmFpbGVkOiAlZCIsIEpTU0xfZW51bXNbc3NsX3Zhcmlh bnRdLCBQUl9HZXRFcnJvcigpKTsKLSsgICAgICAgIEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRp b24oZW52LCBidWYpOwotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsgICAgLyogbm93 IGNoZWNrIHRoZSBtaW4gYW5kIG1heCAqLwotKyAgICBpZiAodnJhbmdlLm1pbiA8IHN1cHBvcnRl ZF9yYW5nZS5taW4gIHx8Ci0rICAgICAgICAgICAgICAgIHZyYW5nZS5tYXggPiBzdXBwb3J0ZWRf cmFuZ2UubWF4KSB7Ci0rICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotKyAgICAgICAgUFJfc25wcmlu dGYoYnVmLCAxMjgsICJTU0xfVmVyc2lvblJhbmdlU2V0RGVmYXVsdCgpIGZvciB2YXJpYW50PSVk IHdpdGggbWluPSVkIG1heD0lZCBvdXQgb2YgcmFuZ2UgKCVkOiVkKTogJWQiLCBKU1NMX2VudW1z W3NzbF92YXJpYW50XSwgdnJhbmdlLm1pbiwgdnJhbmdlLm1heCwgc3VwcG9ydGVkX3JhbmdlLm1p biwgc3VwcG9ydGVkX3JhbmdlLm1heCwgUFJfR2V0RXJyb3IoKSk7Ci0rICAgICAgICBKU1NMX3Ro cm93U1NMU29ja2V0RXhjZXB0aW9uKGVudiwgYnVmKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwot KyAgICB9Ci0rCi0rICAgIC8qIHNldCB0aGUgZGVmYXVsdCBTU0wgVmVyc2lvbiBSYW5nZSAqLwot KyAgICBzdGF0dXMgPSBTU0xfVmVyc2lvblJhbmdlU2V0RGVmYXVsdChKU1NMX2VudW1zW3NzbF92 YXJpYW50XSwKLSsgICAgICAgICAgICAgICAgICZ2cmFuZ2UpOwotKyAgICBpZiggc3RhdHVzICE9 IFNFQ1N1Y2Nlc3MgKSB7Ci0rICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotKyAgICAgICAgUFJfc25w cmludGYoYnVmLCAxMjgsICJTU0xfVmVyc2lvblJhbmdlU2V0RGVmYXVsdCgpIGZvciB2YXJpYW50 PSVkIHdpdGggbWluPSVkIG1heD0lZCBmYWlsZWQ6ICVkIiwgSlNTTF9lbnVtc1tzc2xfdmFyaWFu dF0sIHZyYW5nZS5taW4sIHZyYW5nZS5tYXgsIFBSX0dldEVycm9yKCkpOwotKyAgICAgICAgSlNT TF90aHJvd1NTTFNvY2tldEV4Y2VwdGlvbihlbnYsIGJ1Zik7Ci0rICAgICAgICBnb3RvIGZpbmlz aDsKLSsgICAgfQotKwotK2ZpbmlzaDoKLSsgICAgcmV0dXJuOwotK30KLSsKLSsvKgotKyAqIHN1 cHBvcnQgVExTIHYxLjEgYW5kIHYxLjIKLSsgKiAgIHNldHMgU1NMIHZlcnNpb24gcmFuZ2UgZm9y IHRoaXMgc29ja2V0Ci0rICovCi0rSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTAotK0phdmFfb3JnX21v emlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX3NldFNTTFZlcnNpb25SYW5nZQotKyAgICAoSk5JRW52 ICplbnYsIGpvYmplY3Qgc2VsZiwgamludCBtaW4sIGppbnQgbWF4KQotK3sKLSsgICAgU0VDU3Rh dHVzIHN0YXR1czsKLSsgICAgSlNTTF9Tb2NrZXREYXRhICpzb2NrID0gTlVMTDsKLSsgICAgU1NM VmVyc2lvblJhbmdlIHZyYW5nZTsKLSsKLSsgICAgaWYgKCBtaW4gPDAgfHwgbWluID49IEpTU0xf ZW51bXNfc2l6ZSB8fAotKyAgICAgICAgICAgIG1heCA8MCB8fCBtYXggPj0gSlNTTF9lbnVtc19z aXplKSB7Ci0rICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotKyAgICAgICAgUFJfc25wcmludGYoYnVm LCAxMjgsICJKU1Mgc2V0U1NMVmVyc2lvblJhbmdlKCk6IGZvciBtYXg9JWQgZmFpbGVkIC0gb3V0 IG9mIHJhbmdlIGZvciBhcnJheSBKU1NMX2VudW1zIHNpemU6ICVkIiwgbWluLCBtYXgsIEpTU0xf ZW51bXNfc2l6ZSk7Ci0rICAgICAgICBKU1NMX3Rocm93U1NMU29ja2V0RXhjZXB0aW9uKGVudiwg YnVmKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rCi0rICAgIC8qIGdldCBteSBm ZCAqLwotKyAgICBpZiggSlNTTF9nZXRTb2NrRGF0YShlbnYsIHNlbGYsICZzb2NrKSAhPSBQUl9T VUNDRVNTICkgewotKyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsKLSsgICAgdnJhbmdl Lm1pbiA9IEpTU0xfZW51bXNbbWluXTsKLSsgICAgdnJhbmdlLm1heCA9IEpTU0xfZW51bXNbbWF4 XTsKLSsKLSsgICAgLyoKLSsgICAgICogc2V0IHRoZSBTU0wgVmVyc2lvbiBSYW5nZSAKLSsgICAg ICogVGhlIHZhbGlkaXR5IG9mIHRoZSByYW5nZSB3aWxsIGJlIGNoZWNrZWQgYnkgdGhpcyBOU1Mg Y2FsbAotKyAgICAgKi8KLSsgICAgc3RhdHVzID0gU1NMX1ZlcnNpb25SYW5nZVNldChzb2NrLT5m ZCwgJnZyYW5nZSk7Ci0rICAgIGlmKCBzdGF0dXMgIT0gU0VDU3VjY2VzcyApIHsKLSsgICAgICAg IEpTU0xfdGhyb3dTU0xTb2NrZXRFeGNlcHRpb24oZW52LCAiU1NMX1ZlcnNpb25SYW5nZVNldCBm YWlsZWQiKTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rCi0rZmluaXNoOgotKyAg ICBFWENFUFRJT05fQ0hFQ0soZW52LCBzb2NrKQotKyAgICByZXR1cm47Ci0rfQotKwotIEpOSUVY UE9SVCB2b2lkIEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU1NMU29ja2V0X3Nl dFNTTERlZmF1bHRPcHRpb24oSk5JRW52ICplbnYsCi0gICAgIGpjbGFzcyBjbGF6eiwgamludCBq b3B0aW9uLCBqaW50IG9uKQotZGlmZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmphdmEuY2Z1U2F2ZWQganNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvU1NMU29ja2V0LmphdmEKLS0t LSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9TU0xT b2NrZXQuamF2YS5jZnVTYXZlZAkyMDE0LTA5LTI5IDE0OjEyOjI3LjU2NjIwNjMzOCAtMDcwMAot KysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NT TFNvY2tldC5qYXZhCTIwMTQtMDktMjkgMTQ6MTI6MzQuMzc3MTk0NDYyIC0wNzAwCi1AQCAtMzYs NiArMzYsNyBAQAotIAotIHBhY2thZ2Ugb3JnLm1vemlsbGEuanNzLnNzbDsKLSAKLStpbXBvcnQg amF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjsKLSBpbXBvcnQgamF2YS5uZXQuKjsK LSBpbXBvcnQgamF2YS5uZXQuU29ja2V0RXhjZXB0aW9uOwotIGltcG9ydCBqYXZhLm5ldC5Tb2Nr ZXRUaW1lb3V0RXhjZXB0aW9uOwotQEAgLTk0OCw2ICs5NDksNjMgQEAgcHVibGljIGNsYXNzIFNT TFNvY2tldCBleHRlbmRzIGphdmEubmV0LgotICAgICAgICAgc2V0U1NMRGVmYXVsdE9wdGlvbihT b2NrZXRCYXNlLlNTTF9OT19DQUNIRSwgIWIpOwotICAgICB9Ci0gCi0rICAgLyoKLSsgICAgKiBf bWluX2VudW0gYW5kIF9tYXhfZW51bSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0r ICAgICogICAgIFNvY2tldEJhc2UuU1NMX0xJQlJBUllfVkVSU0lPTl8zXzAKLSsgICAgKiAgICAg U29ja2V0QmFzZS5TU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzAKLSsgICAgKiAgICAgU29ja2V0 QmFzZS5TU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzEKLSsgICAgKiAgICAgU29ja2V0QmFzZS5T U0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzIKLSsgICAgKi8KLSsgICAgcHVibGljIHN0YXRpYyBj bGFzcyBTU0xWZXJzaW9uUmFuZ2UgewotKyAgICAgICAgcHJpdmF0ZSBpbnQgX21pbl9lbnVtOwot KyAgICAgICAgcHJpdmF0ZSBpbnQgX21heF9lbnVtOwotKyAgICAgICAgcHVibGljIHN0YXRpYyBm aW5hbCBpbnQgc3NsMyA9IFNvY2tldEJhc2UuU1NMX0xJQlJBUllfVkVSU0lPTl8zXzA7Ci0rICAg ICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0bHMxXzAgPSBTb2NrZXRCYXNlLlNTTF9MSUJS QVJZX1ZFUlNJT05fVExTXzFfMDsKLSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRs czFfMSA9IFNvY2tldEJhc2UuU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8xOwotKyAgICAgICAg cHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGxzMV8yID0gU29ja2V0QmFzZS5TU0xfTElCUkFSWV9W RVJTSU9OX1RMU18xXzI7Ci0rICAgICAgICBwdWJsaWMgU1NMVmVyc2lvblJhbmdlKGludCBtaW5f ZW51bSwgaW50IG1heF9lbnVtKQotKyAgICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhj ZXB0aW9uIHsKLSsgICAgICAgICAgICBpZiAoKG1pbl9lbnVtID49IFNvY2tldEJhc2UuU1NMX0xJ QlJBUllfVkVSU0lPTl8zXzApICYmCi0rICAgICAgICAgICAgICAgIChtYXhfZW51bSA8PSBTb2Nr ZXRCYXNlLlNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMikgJiYKLSsgICAgICAgICAgICAgICAg KG1pbl9lbnVtIDw9IG1heF9lbnVtKSkgewotKyAgICAgICAgICAgICAgICBfbWluX2VudW0gPSBt aW5fZW51bTsKLSsgICAgICAgICAgICAgICAgX21heF9lbnVtID0gbWF4X2VudW07Ci0rICAgICAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVu dEV4Y2VwdGlvbigiSlNTIFNTTFNvY2tldCBTU0xWZXJzaW9uUmFuZ2U6IGFyZ3VtZW50cyBvdXQg b2YgcmFuZ2UiKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpbnQg Z2V0TWluRW51bSgpIHsgcmV0dXJuIF9taW5fZW51bTsgfQotKyAgICAgICAgaW50IGdldE1heEVu dW0oKSB7IHJldHVybiBfbWF4X2VudW07IH0KLSsKLSsgICAgfQotKwotKyAgICBwdWJsaWMgc3Rh dGljIGNsYXNzIFNTTFByb3RvY29sVmFyaWFudCB7Ci0rICAgICAgICBwcml2YXRlIGludCBfZW51 bTsKLSsgICAgICAgIHByaXZhdGUgU1NMUHJvdG9jb2xWYXJpYW50KGludCB2YWwpIHsgX2VudW0g PSB2YWw7IH0KLSsKLSsgICAgICAgIGludCBnZXRFbnVtKCkgeyByZXR1cm4gX2VudW07IH0KLSsK LSsgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU1NMUHJvdG9jb2xWYXJpYW50IFNUUkVBTSA9 Ci0rICAgICAgICAgICAgbmV3IFNTTFByb3RvY29sVmFyaWFudChTb2NrZXRCYXNlLlNTTF9WYXJp YW50X1N0cmVhbSk7Ci0rICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNTTFByb3RvY29sVmFy aWFudCBEQVRBX0dSQU0gPQotKyAgICAgICAgICAgIG5ldyBTU0xQcm90b2NvbFZhcmlhbnQoU29j a2V0QmFzZS5TU0xfVmFyaWFudF9EYXRhZ3JhbSk7Ci0rCi0rICAgIH0KLSsKLSsgICAgcHVibGlj IHN0YXRpYyB2b2lkIHNldFNTTFZlcnNpb25SYW5nZURlZmF1bHQoU1NMUHJvdG9jb2xWYXJpYW50 IHNzbF92YXJpYW50LCBTU0xWZXJzaW9uUmFuZ2UgcmFuZ2UpCi0rICAgICAgICB0aHJvd3MgU29j a2V0RXhjZXB0aW9uCi0rICAgIHsKLSsgICAgICAgIGlmIChyYW5nZSA9PSBudWxsKQotKyAgICAg ICAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oInNldFNTTFZlcnNpb25SYW5nZURlZmF1 bHQ6IHJhbmdlIG51bGwiKTsKLSsgICAgICAgIHNldFNTTFZlcnNpb25SYW5nZURlZmF1bHQoc3Ns X3ZhcmlhbnQuZ2V0RW51bSgpLCByYW5nZS5nZXRNaW5FbnVtKCksIHJhbmdlLmdldE1heEVudW0o KSk7Ci0rICAgIH0KLSsKLSsgICAgLyoqIAotKyAgICAgKiBTZXRzIFNTTCBWZXJzaW9uIFJhbmdl IERlZmF1bHQKLSsgICAgICovCi0rICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIHNldFNT TFZlcnNpb25SYW5nZURlZmF1bHQoaW50IHNzbF92YXJpYW50LCBpbnQgbWluLCBpbnQgbWF4KQot KyAgICAgICAgdGhyb3dzIFNvY2tldEV4Y2VwdGlvbjsKLSAKLSAgICAgcHJpdmF0ZSBzdGF0aWMg dm9pZCBzZXRTU0xEZWZhdWx0T3B0aW9uKGludCBvcHRpb24sIGJvb2xlYW4gb24pCi0gICAgICAg ICB0aHJvd3MgU29ja2V0RXhjZXB0aW9uCi1AQCAtMTIyMSw2ICsxMjc5LDggQEAgcHVibGljIGNs YXNzIFNTTFNvY2tldCBleHRlbmRzIGphdmEubmV0LgotICAgICBwdWJsaWMgZmluYWwgc3RhdGlj IGludCBUTFNfREhFX0RTU19FWFBPUlQxMDI0X1dJVEhfREVTX0NCQ19TSEEgPSAweDAwNjM7Ci0g ICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19ESEVfRFNTX0VYUE9SVDEwMjRfV0lUSF9S QzRfNTZfU0hBICA9IDB4MDA2NTsKLSAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX0RI RV9EU1NfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgID0gMHgwMDY2OwotKyAgICBwdWJsaWMg ZmluYWwgc3RhdGljIGludCBUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAg PSAweDAwNjc7Ci0rICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19ESEVfUlNBX1dJVEhf QUVTXzI1Nl9DQkNfU0hBMjU2ICAgICA9IDB4MDA2QjsKLSAKLSAvLyBOZXcgVExTIGNpcGhlciBz dWl0ZXMgaW4gTlNTIDMuNCAKLSAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX1JTQV9X SVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICA9ICAweDAwMkY7Ci1AQCAtMTIzNiw2ICsxMjk2 LDEwIEBAIHB1YmxpYyBjbGFzcyBTU0xTb2NrZXQgZXh0ZW5kcyBqYXZhLm5ldC4KLSAgICAgcHVi bGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAg ICA9ICAweDAwMzg7Ci0gICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19ESEVfUlNBX1dJ VEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgPSAgMHgwMDM5OwotICAgICBwdWJsaWMgZmluYWwgc3Rh dGljIGludCBUTFNfREhfQU5PTl9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgID0gIDB4MDAzQTsK LSsgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX1JTQV9XSVRIX05VTExfU0hBMjU2ICAg ICAgICAgICAgICA9ICAweDAwM0I7Ci0rICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19S U0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgICAgICAgPSAgMHgwMDNDOwotKyAgICBwdWJsaWMg ZmluYWwgc3RhdGljIGludCBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgID0g IDB4MDAzRDsKLSsKLSAKLSAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX1JTQV9XSVRI X0NBTUVMTElBXzEyOF9DQkNfU0hBICAgICA9ICAweDAwNDE7Ci0gICAgIHB1YmxpYyBmaW5hbCBz dGF0aWMgaW50IFRMU19ESF9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSAgPSAgMHgwMDQy OwotQEAgLTEyNTEsNiArMTMxNSwxMiBAQCBwdWJsaWMgY2xhc3MgU1NMU29ja2V0IGV4dGVuZHMg amF2YS5uZXQuCi0gICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19ESEVfUlNBX1dJVEhf Q0FNRUxMSUFfMjU2X0NCQ19TSEEgPSAgMHgwMDg4OwotICAgICBwdWJsaWMgZmluYWwgc3RhdGlj IGludCBUTFNfREhfQU5PTl9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBID0gIDB4MDA4OTsKLSAK LSsgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX1JTQV9XSVRIX1NFRURfQ0JDX1NIQSAg ICAgICAgICAgICA9ICAweDAwOTY7Ci0rCi0rICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRM U19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgPSAgMHgwMDlDOwotKyAgICBwdWJs aWMgZmluYWwgc3RhdGljIGludCBUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAg ID0gIDB4MDA5RTsKLSsgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX0RIRV9EU1NfV0lU SF9BRVNfMTI4X0dDTV9TSEEyNTYgICA9ICAweDAwQTI7Ci0rCi0gICAgIHB1YmxpYyBmaW5hbCBz dGF0aWMgaW50IFRMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEgICAgICAgICAgPSAgMHhjMDAx OwotICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBUTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8x MjhfU0hBICAgICAgID0gIDB4YzAwMjsKLSAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExT X0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICA9ICAweGMwMDM7Ci1AQCAtMTI4MSw1 ICsxMzUxLDEzIEBAIHB1YmxpYyBjbGFzcyBTU0xTb2NrZXQgZXh0ZW5kcyBqYXZhLm5ldC4KLSAg ICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX0VDREhfYW5vbl9XSVRIX0FFU18xMjhfQ0JD X1NIQSAgICA9ICAweGMwMTg7Ci0gICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19FQ0RI X2Fub25fV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgPSAgMHhjMDE5OwotIAotKyAgICBwdWJsaWMg ZmluYWwgc3RhdGljIGludCBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYg PSAweGMwMjM7Ci0rICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRMU19FQ0RIRV9SU0FfV0lU SF9BRVNfMTI4X0NCQ19TSEEyNTYgICA9IDB4YzAyNzsKLSsKLSsgICAgcHVibGljIGZpbmFsIHN0 YXRpYyBpbnQgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ID0gMHhjMDJC OwotKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18x MjhfR0NNX1NIQTI1NiAgPSAweGMwMkQ7Ci0rICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRM U19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICA9IDB4YzAyRjsKLSsgICAgcHVi bGljIGZpbmFsIHN0YXRpYyBpbnQgVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2 ICAgID0gMHhjMDMxOwotKwotIH0KLSAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mvc3NsL1NvY2tldEJhc2UuamF2YS5jZnVTYXZlZCBqc3Mt NC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9Tb2NrZXRCYXNl LmphdmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3NzbC9Tb2NrZXRCYXNlLmphdmEuY2Z1U2F2ZWQJMjAxNC0wOS0yOSAxNDoxMjoyNy41NjQyMDYz NDEgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL3NzbC9Tb2NrZXRCYXNlLmphdmEJMjAxNC0wOS0yOSAxNDoxMjozNC4zNzgxOTQ0NjAgLTA3 MDAKLUBAIC0xMTQsNiArMTE0LDE1IEBAIGNsYXNzIFNvY2tldEJhc2UgewotICAgICBzdGF0aWMg ZmluYWwgaW50IFNTTF9SRVFVSVJFX0FMV0FZUyA9IDE5OwotICAgICBzdGF0aWMgZmluYWwgaW50 IFNTTF9SRVFVSVJFX0ZJUlNUX0hBTkRTSEFLRSA9IDIwOwotICAgICBzdGF0aWMgZmluYWwgaW50 IFNTTF9SRVFVSVJFX05PX0VSUk9SID0gMjE7Ci0rICAgIC8qIHNzbC9zc2xwcm90by5oIGZvciBz dXBwb3J0aW5nIFNTTFZlcnNpb25SYW5nZSAqLwotKyAgICBzdGF0aWMgZmluYWwgaW50IFNTTF9M SUJSQVJZX1ZFUlNJT05fMiA9IDIyOwotKyAgICBzdGF0aWMgZmluYWwgaW50IFNTTF9MSUJSQVJZ X1ZFUlNJT05fM18wID0gMjM7Ci0rICAgIHN0YXRpYyBmaW5hbCBpbnQgU1NMX0xJQlJBUllfVkVS U0lPTl9UTFNfMV8wID0gMjQ7Ci0rICAgIHN0YXRpYyBmaW5hbCBpbnQgU1NMX0xJQlJBUllfVkVS U0lPTl9UTFNfMV8xID0gMjU7Ci0rICAgIHN0YXRpYyBmaW5hbCBpbnQgU1NMX0xJQlJBUllfVkVS U0lPTl9UTFNfMV8yID0gMjY7Ci0rICAgIC8qIHNzbC9zc2x0LmggKi8KLSsgICAgc3RhdGljIGZp bmFsIGludCBTU0xfVmFyaWFudF9TdHJlYW0gPSAyNzsKLSsgICAgc3RhdGljIGZpbmFsIGludCBT U0xfVmFyaWFudF9EYXRhZ3JhbSA9IDI4OwotIAotIAotICAgICBzdGF0aWMgZmluYWwgaW50IFNT TF9BRl9JTkVUICA9IDUwOwotQEAgLTE5MCw2ICsxOTksMTggQEAgY2xhc3MgU29ja2V0QmFzZSB7 Ci0gICAgIG5hdGl2ZSB2b2lkIHNldFNTTE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgb24pCi0gICAg ICAgICB0aHJvd3MgU29ja2V0RXhjZXB0aW9uOwotIAotKyAgICB2b2lkIHNldFNTTFZlcnNpb25S YW5nZShvcmcubW96aWxsYS5qc3Muc3NsLlNTTFNvY2tldC5TU0xWZXJzaW9uUmFuZ2UgcmFuZ2Up Ci0rICAgICAgICB0aHJvd3MgU29ja2V0RXhjZXB0aW9uCi0rICAgIHsKLSsgICAgICAgIHNldFNT TFZlcnNpb25SYW5nZShyYW5nZS5nZXRNaW5FbnVtKCksIHJhbmdlLmdldE1heEVudW0oKSk7Ci0r ICAgIH0KLSsKLSsgICAgLyoqCi0rICAgICAqIFNldHMgU1NMIFZlcnNpb24gUmFuZ2UgZm9yIHRo aXMgc29ja2V0IHRvIHN1cHBvcnQgVExTIHYxLjEgYW5kIHYxLjIKLSsgICAgICovCi0rICAgIG5h dGl2ZSB2b2lkIHNldFNTTFZlcnNpb25SYW5nZShpbnQgbWluLCBpbnQgbWF4KQotKyAgICAgICAg dGhyb3dzIFNvY2tldEV4Y2VwdGlvbjsKLSsKLSAgICAgLyoqIAotICAgICAgKiBTZXRzIHRoZSBT U0wgb3B0aW9uIHNldHRpbmcgbW9kZSB2YWx1ZSB1c2UgZm9yIG9wdGlvbnMKLSAgICAgICogdGhh dCBoYXZlIG1vcmUgdmFsdWVzIHRoYW4ganVzdCBlbmFibGUvZGlhc2FibGUuCi1kaWZmIC11cCBq c3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3NzbC9jb21tb24u Yy5jZnVTYXZlZCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3NzbC9jb21tb24uYwotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3Mvc3NsL2NvbW1vbi5jLmNmdVNhdmVkCTIwMTQtMDktMjkgMTQ6MTI6MjcuNTYyMjA2 MzQ1IC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9zc2wvY29tbW9uLmMJMjAxNC0wOS0yOSAxNDoxMjozNC4zNzgxOTQ0NjAgLTA3MDAKLUBA IC0zOCw2ICszOCw3IEBACi0gI2luY2x1ZGUgPHBrMTFmdW5jLmg+Ci0gI2luY2x1ZGUgPHNzbC5o PgotICNpbmNsdWRlIDxzc2xlcnIuaD4KLSsjaW5jbHVkZSA8c3NscHJvdG8uaD4KLSAKLSAjaW5j bHVkZSA8anNzdXRpbC5oPgotICNpbmNsdWRlIDxqc3NfZXhjZXB0aW9ucy5oPgotQEAgLTQwNyw4 ICs0MDgsMTYgQEAgUFJJbnQzMiBKU1NMX2VudW1zW10gPSB7Ci0gICAgIFNTTF9SRVFVSVJFX0FM V0FZUywgICAgICAgICAvKiAxOSAqLyAgICAgICAgLyogc3NsLmggKi8KLSAgICAgU1NMX1JFUVVJ UkVfRklSU1RfSEFORFNIQUtFLC8qIDIwICovICAgICAgICAvKiBzc2wuaCAqLwotICAgICBTU0xf UkVRVUlSRV9OT19FUlJPUiwgICAgICAgLyogMjEgKi8gICAgICAgIC8qIHNzbC5oICovCi0rICAg IFNTTF9MSUJSQVJZX1ZFUlNJT05fMiwgICAgICAvKiAyMiAqLyAgICAgICAgLyogc3NscHJvdG8u aCAqLwotKyAgICBTU0xfTElCUkFSWV9WRVJTSU9OXzNfMCwgICAgLyogMjMgKi8gICAgICAgIC8q IHNzbHByb3RvLmggKi8KLSsgICAgU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wLCAvKiAyNCAq LyAgICAgICAgLyogc3NscHJvdG8uaCAqLwotKyAgICBTU0xfTElCUkFSWV9WRVJTSU9OX1RMU18x XzEsIC8qIDI1ICovICAgICAgICAvKiBzc2xwcm90by5oICovCi0rICAgIFNTTF9MSUJSQVJZX1ZF UlNJT05fVExTXzFfMiwgLyogMjYgKi8gICAgICAgIC8qIHNzbHByb3RvLmggKi8KLSsgICAgc3Ns X3ZhcmlhbnRfc3RyZWFtLCAgICAgICAgIC8qIDI3ICovICAgICAgICAvKiBzc2x0LmggKi8KLSsg ICAgc3NsX3ZhcmlhbnRfZGF0YWdyYW0sICAgICAgIC8qIDI4ICovICAgICAgICAvKiBzc2x0Lmgg Ki8KLSAgICAgMAotIH07Ci0rCi0gCi0gCi0gSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTAotZGlmZiAt dXAganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9zc2wvanNz bC5oLmNmdVNhdmVkIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3Mvc3NsL2pzc2wuaAotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3Mvc3NsL2pzc2wuaC5jZnVTYXZlZAkyMDE0LTA5LTI5IDE0OjEyOjI3LjU2MzIwNjM0 MyAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3Mvc3NsL2pzc2wuaAkyMDE0LTA5LTI5IDE0OjEzOjU5LjYwNTA0NDIyOCAtMDcwMAotQEAgLTEx MSw2ICsxMTEsNyBAQCBKU1NMX0Rlc3Ryb3lTb2NrZXREYXRhKEpOSUVudiAqZW52LCBKU1NMCi0g Ci0gCi0gZXh0ZXJuIFBSSW50MzIgSlNTTF9lbnVtc1tdOwotKyNkZWZpbmUgSlNTTF9lbnVtc19z aXplIDI5Ci0gCi0gSlNTTF9Tb2NrZXREYXRhKgotIEpTU0xfQ3JlYXRlU29ja2V0RGF0YShKTklF bnYgKmVudiwgam9iamVjdCBzb2NrT2JqLCBQUkZpbGVEZXNjKiBuZXdGRCwKLWRpZmYgLXVwIGpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvQ29uc3Rh bnRzLmphdmEuY2Z1U2F2ZWQganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy90ZXN0cy9Db25zdGFudHMuamF2YQotLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvQ29uc3RhbnRzLmphdmEuY2Z1U2F2ZWQJMjAx NC0wOS0yOSAxNDoxMjoyNy41NjcyMDYzMzYgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL0NvbnN0YW50cy5qYXZhCTIwMTQtMDkt MjkgMTQ6MTI6MzQuMzc5MTk0NDU4IC0wNzAwCi1AQCAtMTQ5LDYgKzE0OSwyMSBAQCBwdWJsaWMg aW50ZXJmYWNlIENvbnN0YW50cyB7Ci0gLyo1MiovICBuZXcgY2lwaGVyKFNTTFNvY2tldC5TU0wy X0RFU182NF9DQkNfV0lUSF9NRDUsICJTU0wyX0RFU182NF9DQkNfV0lUSF9NRDUiKSwKLSAvKjUz Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlNTTDJfUkM0XzEyOF9FWFBPUlQ0MF9XSVRIX01ENSwg IlNTTDJfUkM0XzEyOF9FWFBPUlQ0MF9XSVRIX01ENSIpLAotIC8qNTQqLyAgbmV3IGNpcGhlcihT U0xTb2NrZXQuU1NMMl9SQzJfMTI4X0NCQ19FWFBPUlQ0MF9XSVRIX01ENSwgIlNTTDJfUkMyXzEy OF9DQkNfRVhQT1JUNDBfV0lUSF9NRDUiKSwKLSsvKjU1Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0 LlRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTX0RIRV9SU0FfV0lUSF9B RVNfMTI4X0NCQ19TSEEyNTYiKSwKLSsvKjU2Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlRMU19E SEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2LCAiVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2 X0NCQ19TSEEyNTYiKSwKLSsvKjU3Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlRMU19SU0FfV0lU SF9OVUxMX1NIQTI1NiwgIlRMU19SU0FfV0lUSF9OVUxMX1NIQTI1NiIpLAotKy8qNTgqLyAgbmV3 IGNpcGhlcihTU0xTb2NrZXQuVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMU19S U0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYiKSwKLSsvKjU5Ki8gIG5ldyBjaXBoZXIoU1NMU29j a2V0LlRMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYsICJUTFNfUlNBX1dJVEhfQUVTXzI1 Nl9DQkNfU0hBMjU2IiksCi0rLyo2MCovICBuZXcgY2lwaGVyKFNTTFNvY2tldC5UTFNfUlNBX1dJ VEhfU0VFRF9DQkNfU0hBLCAiVExTX1JTQV9XSVRIX1NFRURfQ0JDX1NIQSIpLAotKy8qNjEqLyAg bmV3IGNpcGhlcihTU0xTb2NrZXQuVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRM U19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYiKSwKLSsvKjYyKi8gIG5ldyBjaXBoZXIoU1NM U29ja2V0LlRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTX0RIRV9SU0Ff V0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYiKSwKLSsvKjYzKi8gIG5ldyBjaXBoZXIoU1NMU29ja2V0 LlRMU19ESEVfRFNTX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTX0RIRV9EU1NfV0lUSF9B RVNfMTI4X0dDTV9TSEEyNTYiKSwKLSsvKjY0Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlRMU19F Q0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMU19FQ0RIRV9FQ0RTQV9XSVRI X0FFU18xMjhfQ0JDX1NIQTI1NiIpLAotKy8qNjUqLyAgbmV3IGNpcGhlcihTU0xTb2NrZXQuVExT X0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMU19FQ0RIRV9SU0FfV0lUSF9B RVNfMTI4X0NCQ19TSEEyNTYiKSwKLSsvKjY2Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlRMU19F Q0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMU19FQ0RIRV9FQ0RTQV9XSVRI X0FFU18xMjhfR0NNX1NIQTI1NiIpLAotKy8qNjcqLyAgbmV3IGNpcGhlcihTU0xTb2NrZXQuVExT X0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFNfRUNESF9FQ0RTQV9XSVRI X0FFU18xMjhfR0NNX1NIQTI1NiIpLAotKy8qNjgqLyAgbmV3IGNpcGhlcihTU0xTb2NrZXQuVExT X0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMU19FQ0RIRV9SU0FfV0lUSF9B RVNfMTI4X0dDTV9TSEEyNTYiKSwKLSsvKjY5Ki8gIG5ldyBjaXBoZXIoU1NMU29ja2V0LlRMU19F Q0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMU19FQ0RIX1JTQV9XSVRIX0FFU18x MjhfR0NNX1NIQTI1NiIpCi0gICAgIH07Ci0gICAgIAotICAgICAvKiogQ2lwaGVyIHN1cHBvcnRl ZCBieSBKU1NFIChKREsgMS41LngpICovCgpkaWZmIC0tZ2l0IGEvanNzLXN5bWtleS1lbmhhbmNl bWVudHMucGF0Y2ggYi9qc3Mtc3lta2V5LWVuaGFuY2VtZW50cy5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMjQ4YmE3Ni4uMDAwMDAwMAotLS0gYS9qc3Mtc3lta2V5LWVuaGFu Y2VtZW50cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NTUgKzAsMCBAQAotZGlmZiAtdXAg Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9idWlsZF9qYXZhLnBsLmptYWduZSAuL21vemlsbGEvc2Vj dXJpdHkvanNzL2J1aWxkX2phdmEucGwKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL2J1aWxk X2phdmEucGwuam1hZ25lCTIwMTYtMDQtMTQgMTM6NTY6MTYuOTQ2OTIwMjM5IC0wNzAwCi0rKysg Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9idWlsZF9qYXZhLnBsCTIwMTYtMDQtMTQgMTQ6NTM6MDgu NTAxMjk4MDYyIC0wNzAwCi1AQCAtMzEsNyArMzEsOCBAQCBvcmcubW96aWxsYS5qc3MucGtjczEx LlBLMTFNZXNzYWdlRGlnZXN0Ci0gb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzExUHJpdktleSAg IAotIG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuUEsxMVB1YktleSAgICAgCi0gb3JnLm1vemlsbGEu anNzLnBrY3MxMS5QSzExU3ltS2V5ICAgICAgCi0tb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzEx S2V5UGFpckdlbmVyYXRvciAKLStvcmcubW96aWxsYS5qc3MucGtjczExLlBLMTFLZXlQYWlyR2Vu ZXJhdG9yCi0rb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzExU3ltbWV0cmljS2V5RGVyaXZlcgot IG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuUEsxMUtleUdlbmVyYXRvcgotIG9yZy5tb3ppbGxhLmpz cy5wa2NzMTEuUEsxMVRva2VuCi0gb3JnLm1vemlsbGEuanNzLnBrY3MxMS5Qcml2YXRlS2V5UHJv eHkgIAotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZi5qbWFnbmUg Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZgotLS0tIC4vbW96aWxsYS9zZWN1cml0 eS9qc3MvbGliL2pzcy5kZWYuam1hZ25lCTIwMTYtMDQtMTQgMTY6MDA6MDYuMjI5NTM0MjI4IC0w NzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZgkyMDE2LTA0LTE0IDE2 OjAwOjMyLjIyOTM1NjMxNCAtMDcwMAotQEAgLTE1OCw2ICsxNTgsNyBAQCBKYXZhX29yZ19tb3pp bGxhX2pzc19wa2NzMTFfUEsxMVN0b3JlX2RlCi0gSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczEx X1BLMTFTdG9yZV9pbXBvcnRQcml2YXRlS2V5OwotIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3Mx MV9QSzExU3RvcmVfcHV0Q2VydHNJblZlY3RvcjsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2Nz MTFfUEsxMVN0b3JlX3B1dEtleXNJblZlY3RvcjsKLStKYXZhX29yZ19tb3ppbGxhX2pzc19wa2Nz MTFfUEsxMVN0b3JlX3B1dFN5bUtleXNJblZlY3RvcjsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19w a2NzMTFfU2lnQ29udGV4dFByb3h5X3JlbGVhc2VOYXRpdmVSZXNvdXJjZXM7Ci0gSmF2YV9vcmdf bW96aWxsYV9qc3NfcGtjczExX1BLMTFSU0FQdWJsaWNLZXlfZ2V0TW9kdWx1c0J5dGVBcnJheTsK LSBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVJTQVB1YmxpY0tleV9nZXRQdWJsaWNF eHBvbmVudEJ5dGVBcnJheTsKLUBAIC0zMzYsNiArMzM3LDggQEAgSmF2YV9vcmdfbW96aWxsYV9q c3NfQ3J5cHRvTWFuYWdlcl92ZXJpZgotIEphdmFfb3JnX21vemlsbGFfanNzX2FzbjFfQVNOMVV0 aWxfZ2V0VGFnRGVzY3JpcHRpb25CeU9pZDsKLSBKYXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU29j a2V0QmFzZV9zZXRTU0xWZXJzaW9uUmFuZ2U7Ci0gSmF2YV9vcmdfbW96aWxsYV9qc3Nfc3NsX1NT TFNvY2tldF9zZXRTU0xWZXJzaW9uUmFuZ2VEZWZhdWx0OwotK0phdmFfb3JnX21vemlsbGFfanNz X3BrY3MxMV9QSzExU3ltbWV0cmljS2V5RGVyaXZlcl9uYXRpdmVEZXJpdmVTeW1LZXk7Ci0rSmF2 YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFTeW1LZXlfc2V0Tmlja05hbWVOYXRpdmU7Ci0g OysgICAgbG9jYWw6Ci0gOysgICAgICAgKjsKLSA7K307Ci1kaWZmIC11cCAuL21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmMuam1hZ25lIC4vbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uYwotLS0t IC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0u Yy5qbWFnbmUJMjAxNi0wNC0xNCAxNjowMjozOC4xMDg0OTQ5NDAgLTA3MDAKLSsrKyAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmMJMjAxNi0w NC0xNCAxNjowMjo0Ny4yNDM0MzI0MzEgLTA3MDAKLUBAIC0xMTQsNiArMTE0LDExIEBAIEpTU19B bGdJbmZvIEpTU19BbGdUYWJsZVtOVU1fQUxHU10gPSB7Ci0gLyogNTEgKi8gICAge1NFQ19PSURf UEtDUzVfUEJLREYyLCBTRUNfT0lEX1RBR30sCi0gLyogNTIgKi8gICAge1NFQ19PSURfUEtDUzVf UEJFUzIsIFNFQ19PSURfVEFHfSwKLSAvKiA1MyAqLyAgICB7U0VDX09JRF9QS0NTNV9QQk1BQzEs IFNFQ19PSURfVEFHfSwKLSsvKiA1NCAqLyAgICB7U0VDX09JRF9ITUFDX1NIQTEsU0VDX09JRF9U QUd9LAotKy8qIDU1ICovICAgIHtTRUNfT0lEX0hNQUNfU0hBMjI0LFNFQ19PSURfVEFHfSwKLSsv KiA1NiAqLyAgICB7U0VDX09JRF9ITUFDX1NIQTI1NixTRUNfT0lEX1RBR30sCi0rLyogNTcgKi8g ICAge1NFQ19PSURfSE1BQ19TSEEzODQsU0VDX09JRF9UQUd9LAotKy8qIDU4ICovICAgIHtTRUNf T0lEX0hNQUNfU0hBNTEyLFNFQ19PSURfVEFHfQotIC8qIFJFTUVNQkVSIFRPIFVQREFURSBOVU1f QUxHUyEhISAqLwotIH07Ci0gCi1kaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmguam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uaAotLS0tIC4vbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uaC5qbWFnbmUJMjAxNi0w NC0xNCAxMTozMDo0MS44NzE1MTc5MjYgLTA3MDAKLSsrKyAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmgJMjAxNi0wNC0xNCAxMTozMDo1NC45 MzM0MzY4NjAgLTA3MDAKLUBAIC01Niw3ICs1Niw3IEBAIHR5cGVkZWYgc3RydWN0IEpTU19BbGdJ bmZvU3RyIHsKLSAgICAgSlNTX0FsZ1R5cGUgdHlwZTsKLSB9IEpTU19BbGdJbmZvOwotIAotLSNk ZWZpbmUgTlVNX0FMR1MgNTQKLSsjZGVmaW5lIE5VTV9BTEdTIDU5Ci0gCi0gZXh0ZXJuIEpTU19B bGdJbmZvIEpTU19BbGdUYWJsZVtdOwotIGV4dGVybiBDS19VTE9ORyBKU1Nfc3lta2V5VXNhZ2Vb XTsKLWRpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0 by9BbGdvcml0aG0uamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhCi0tLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2 OjA2OjEzLjM4ODAyMTgxMiAtMDcwMAotKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uamF2YQkyMDE2LTA0LTE0IDE2OjA2OjI3LjUzNzky NDgxMyAtMDcwMAotQEAgLTIzNyw1ICsyMzcsOSBAQCBwdWJsaWMgY2xhc3MgQWxnb3JpdGhtIHsK LSAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBTRUNfT0lEX1BLQ1M1X1BCS0RGMj01 MTsKLSAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBTRUNfT0lEX1BLQ1M1X1BCRVMy PTUyOwotICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfUEtDUzVfUEJN QUMxPTUzOwotLQotKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfSE1B Q19TSEExPTU0OwotKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfSE1B Q19TSEEyMjQ9NTU7Ci0rICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnQgU0VDX09JRF9I TUFDX1NIQTI1Nj01NjsKLSsgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBTRUNfT0lE X0hNQUNfU0hBMzg0PTU3OwotKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IFNFQ19P SURfSE1BQ19TSEE1MTI9NTg7Ci0gfQotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1N0b3JlLmphdmEuam1hZ25lIC4vbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DcnlwdG9TdG9yZS5qYXZhCi0tLS0g Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1N0b3Jl LmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTc6MDM6MzMuNTA0Mjk4MTc2IC0wNzAwCi0rKysgLi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1N0b3JlLmph dmEJMjAxNi0wNC0xNCAxNzowMzo0Mi4xOTgyMzgxMTIgLTA3MDAKLUBAIC03NSw2ICs3NSwxOCBA QCBwdWJsaWMgaW50ZXJmYWNlIENyeXB0b1N0b3JlIHsKLSAgICAgZ2V0UHJpdmF0ZUtleXMoKSB0 aHJvd3MgVG9rZW5FeGNlcHRpb247Ci0gCi0gICAgIC8qKgotKyAgICAgKiBSZXR1cm5zIGFsbCBz eW1tZXRyaWMga2V5cyBzdG9yZWQgb24gdGhpcyB0b2tlbi4KLSsgICAgICoKLSsgICAgICogQHJl dHVybiBBbiBhcnJheSBvZiBhbGwgc3ltbWV0cmljIGtleXMgc3RvcmVkIG9uIHRoaXMgdG9rZW4u Ci0rICAgICAqIEBleGNlcHRpb24gVG9rZW5FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzIG9u IHRoZSB0b2tlbiB3aGlsZQotKyAgICAgKiAgICAgIGdhdGhlcmluZyB0aGUga2V5cy4KLSsgICAg ICovCi0rICAgIHB1YmxpYyBTeW1tZXRyaWNLZXlbXQotKyAgICBnZXRTeW1tZXRyaWNLZXlzKCkg dGhyb3dzIFRva2VuRXhjZXB0aW9uOwotKwotKwotKwotKyAgICAvKioKLSAgICAgICogRGVsZXRl cyB0aGUgZ2l2ZW4gUHJpdmF0ZUtleSBmcm9tIHRoZSBDcnlwdG9Ub2tlbi4KLSAgICAgICogVGhp cyBpcyBhIHZlcnkgZGFuZ2Vyb3VzIGNhbGw6IGl0IGRlbGV0ZXMgdGhlIGtleSBmcm9tIHRoZSB1 bmRlcmx5aW5nCi0gICAgICAqIHRva2VuLiBBZnRlciBjYWxsaW5nIHRoaXMsIHRoZSBQcml2YXRl S2V5IHBhc3NlZCBpbiBtdXN0IG5vIGxvbmdlcgotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1Rva2VuLmphdmEuam1hZ25lIC4vbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DcnlwdG9Ub2tlbi5qYXZh Ci0tLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0 b1Rva2VuLmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTY6MDc6MzkuNDU4NDI5NzU2IC0wNzAwCi0r KysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1Rv a2VuLmphdmEJMjAxNi0wNC0xNCAxNjowNzo1Mi4yNjYzNDE1OTUgLTA3MDAKLUBAIC05Miw2ICs5 Miw5IEBAIHB1YmxpYyBpbnRlcmZhY2UgQ3J5cHRvVG9rZW4gewotICAgICBnZXRDaXBoZXJDb250 ZXh0KEVuY3J5cHRpb25BbGdvcml0aG0gYWxnb3JpdGhtKQotICAgICAgICAgdGhyb3dzIGphdmEu c2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBUb2tlbkV4Y2VwdGlvbjsKLSAKLSsg ICAgcHVibGljIGFic3RyYWN0IFN5bW1ldHJpY0tleURlcml2ZXIgZ2V0U3ltbWV0cmljS2V5RGVy aXZlcigpIAotKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uOwotKwotICAgICBwdWJsaWMg YWJzdHJhY3QgS2V5V3JhcHBlcgotICAgICBnZXRLZXlXcmFwcGVyKEtleVdyYXBBbGdvcml0aG0g YWxnb3JpdGhtKQotICAgICAgICAgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGht RXhjZXB0aW9uLCBUb2tlbkV4Y2VwdGlvbjsKLWRpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9ITUFDQWxnb3JpdGhtLmphdmEuam1hZ25lIC4vbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9ITUFDQWxnb3JpdGhtLmph dmEKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vSE1B Q0FsZ29yaXRobS5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2OjA5OjAyLjg1ODg1NTY3OSAtMDcw MAotKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9ITUFD QWxnb3JpdGhtLmphdmEJMjAxNi0wNC0xNCAxNjowOToxOC4wNDg3NTExMjEgLTA3MDAKLUBAIC04 NSw0ICs4NSwyMSBAQCBwdWJsaWMgY2xhc3MgSE1BQ0FsZ29yaXRobSBleHRlbmRzIERpZ2VzCi0g ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgSE1BQ0FsZ29yaXRobSBTSEExID0gbmV3IEhNQUNBbGdv cml0aG0KLSAgICAgICAgIChDS01fU0hBXzFfSE1BQywgIlNIQS0xLUhNQUMiLAotICAgICAgICAg ICAgICBPQkpFQ1RfSURFTlRJRklFUi5BTEdPUklUSE0uc3ViQnJhbmNoKDI2KSwgMjApOwotKwot KyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEhNQUNBbGdvcml0aG0gU0hBMjI0ID0gbmV3IEhNQUNB bGdvcml0aG0KLSsgICAgICAgIChTRUNfT0lEX0hNQUNfU0hBMjI0LCAiU0hBLTIyNC1ITUFDIiwK LSsgICAgICAgICAgICAgT0JKRUNUX0lERU5USUZJRVIuUlNBRFNJLnN1YkJyYW5jaCg4KSwgMjgp OwotKwotKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEhNQUNBbGdvcml0aG0gU0hBMjU2ID0gbmV3 IEhNQUNBbGdvcml0aG0KLSsgICAgICAgIChTRUNfT0lEX0hNQUNfU0hBMjU2LCAiU0hBLTI1Ni1I TUFDIiwKLSsgICAgICAgICAgICAgT0JKRUNUX0lERU5USUZJRVIuUlNBRFNJLnN1YkJyYW5jaCg5 KSwgMzIpOwotKwotKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEhNQUNBbGdvcml0aG0gU0hBMzg0 ID0gbmV3IEhNQUNBbGdvcml0aG0KLSsgICAgICAgIChTRUNfT0lEX0hNQUNfU0hBMzg0LCAiU0hB LTM4NC1ITUFDIiwKLSsgICAgICAgICAgICAgT0JKRUNUX0lERU5USUZJRVIuUlNBRFNJLnN1YkJy YW5jaCgxMCksIDQ4KTsKLSsKLSsgICAgcHVibGljIHN0YXRpYyBmaW5hbCBITUFDQWxnb3JpdGht IFNIQTUxMiA9IG5ldyBITUFDQWxnb3JpdGhtCi0rICAgICAgICAoU0VDX09JRF9ITUFDX1NIQTUx MiwgIlNIQS01MTItSE1BQyIsCi0rICAgICAgICAgICAgIE9CSkVDVF9JREVOVElGSUVSLlJTQURT SS5zdWJCcmFuY2goMTEpLCA2NCk7Ci0rCi0gfQotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVdyYXBwZXIuamF2YS5qbWFnbmUgLi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVdyYXBwZXIuamF2YQot LS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlXcmFw cGVyLmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTY6MTA6NDMuOTMwMTU5OTY1IC0wNzAwCi0rKysg Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVdyYXBwZXIu amF2YQkyMDE2LTA0LTE0IDE2OjEwOjU1LjM3NzA4MTE3MiAtMDcwMAotQEAgLTEzMyw0ICsxMzMs MjEgQEAgcHVibGljIGludGVyZmFjZSBLZXlXcmFwcGVyIHsKLSAgICAgICAgIHRocm93cyBUb2tl bkV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLAotICAgICAgICAgICAgIEludmFsaWRB bGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247Ci0gCi0rICAgIHB1YmxpYyBTeW1tZXRyaWNLZXkg dW53cmFwU3ltbWV0cmljUGVybShieXRlW10gd3JhcHBlZCwgU3ltbWV0cmljS2V5LlR5cGUgdHlw ZSwKLSsgICAgICAgIFN5bW1ldHJpY0tleS5Vc2FnZSB1c2FnZSwgaW50IGtleUxlbmd0aCkKLSsg ICAgICAgIHRocm93cyBUb2tlbkV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLAotKyAg ICAgICAgICAgIEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247Ci0rCi0rICAgIC8q KgotKyAgICAgKiBVbndyYXBzIGEga2V5IGFuZCBhbGxvd3MgaXQgdG8gYmUgdXNlZCBmb3IgYWxs IG9wZXJhdGlvbnMuCi0rICAgICAqIEBwYXJhbSBrZXlMZW5ndGggVGhlIGV4cGVjdGVkIGxlbmd0 aCBvZiB0aGUga2V5IGluIGJ5dGVzLiAgVGhpcyBpcwotKyAgICAgKiAgIG9ubHkgdXNlZCBmb3Ig dmFyaWFibGUtbGVuZ3RoIGtleXMgKFJDNCkgYW5kIG5vbi1wYWRkaW5nCi0rICAgICAqICAgYWxn b3JpdGhtcy4gT3RoZXJ3aXNlLCBpdCBjYW4gYmUgc2V0IHRvIGFueXRoaW5nKGxpa2UgMCkuCi0r ICAgICAqLwotKyAgICBwdWJsaWMgU3ltbWV0cmljS2V5IHVud3JhcFN5bW1ldHJpY1Blcm0oYnl0 ZVtdIHdyYXBwZWQsIFN5bW1ldHJpY0tleS5UeXBlIHR5cGUsCi0rICAgICAgICBpbnQga2V5TGVu Z3RoKQotKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRp b24sCi0rICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsKLSsK LSsKLSB9Ci1kaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9j cnlwdG8vU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhCi0tLS0g Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL1N5bW1ldHJpY0tl eURlcml2ZXIuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjozNjozNi4wODA0NjQwNTIgLTA3MDAK LSsrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vU3ltbWV0 cmljS2V5RGVyaXZlci5qYXZhCTIwMTYtMDQtMTQgMTY6MzY6NDkuNzg0MzY5NTE0IC0wNzAwCi1A QCAtMCwwICsxLDc5IEBACi0rLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotKyAq IFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotKyAqCi0rICogVGhlIGNvbnRlbnRz IG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBW ZXJzaW9uCi0rICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0rICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv TVBMLwotKyAqCi0rICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSsgKiBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSsg KiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRp b25zIHVuZGVyIHRoZQotKyAqIExpY2Vuc2UuCi0rICoKLSsgKiBUaGUgT3JpZ2luYWwgQ29kZSBp cyB0aGUgTmV0c2NhcGUgU2VjdXJpdHkgU2VydmljZXMgZm9yIEphdmEuCi0rICogICAgIAotKyAq IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotKyAqIE5ldHNj YXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkg dGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAotKyAqIHRo ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsgKgotKyAqIENvbnRy aWJ1dG9yKHMpOgotKyAqCi0rICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSsgKiBlaXRoZXIgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IK LSsgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y IGxhdGVyICh0aGUgIkxHUEwiKSwKLSsgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotKyAqIG9mIHRob3Nl IGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMg ZmlsZSBvbmx5Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBM R1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0rICog ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl bSB3aXRoIHRoZSBub3RpY2UKLSsgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0 aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKyAqIHRoZSBwcm92aXNp b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg dW5kZXIKLSsgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo ZSBMR1BMLgotKyAqCi0rICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLSsKLStw YWNrYWdlIG9yZy5tb3ppbGxhLmpzcy5jcnlwdG87Ci0rCi0raW1wb3J0IGphdmEuc2VjdXJpdHku c3BlYy5BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOwotK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFs aWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247Ci0raW1wb3J0IGphdmEuc2VjdXJpdHkuUHVi bGljS2V5OwotK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRLZXlFeGNlcHRpb247Ci0rCi0r cHVibGljIGludGVyZmFjZSBTeW1tZXRyaWNLZXlEZXJpdmVyIHsKLSsKLSsgICAvKiBVc2Ugd2l0 aCB0aGUgZW5jcnlwdCB0eXBlIG1lY2hhbmlzbXMKLSsgICAgICBFeGFtcGxlOiBpbml0RGVyaXZl KAotKyAgICAgICAgICAgICAgICAgICAgc3ltS2V5LCAgKFBLQ1MxMUNvbnN0YW50cy5DS01fREVT M19FQ0JfRU5DUllQVF9EQVRBKSA0MzU0TCwgZGVyaXZhdGlvbkRhdGEsIG51bGwsCi0rICAgICAg ICAgICAgICAgICAgICBQS0NTMTFDb25zdGFudHMuQ0tNX0RFUzNfRUNCLCBQS0NTMTFDb25zdGFu dHMuQ0tBX0RFUklWRSwgMTYpOwotKyAgICovCi0rCi0rICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lk IGluaXREZXJpdmUoU3ltbWV0cmljS2V5IGJhc2VLZXksIAotKyAgICAgICAgbG9uZyBkZXJpdmVN ZWNoLCBieXRlW10gcGFyYW0sIGJ5dGVbXSBpdiwgbG9uZyB0YXJnZXRNZWNoLCBsb25nIG9wZXJh dGlvbiwgbG9uZyBrZXlTaXplKQotKyAgICAgICAgdGhyb3dzIEludmFsaWRLZXlFeGNlcHRpb247 Ci0rCi0rCi0rCi0rICAgIC8qIFVzZSB3aXRoIGtleSBleHRyYWN0aW9uIGFuZCBrZXkgY29uY2F0 YW5hdGlvbiBtZWNoYW5pc21zCi0rICAKLSsgICAgRXhhbXBsZToKLSsgICAgICAgcGFyYW06IGJ5 dGUgYXJyYXkgdGhhdCBoYXMgdGhlIGJpdCBwb3NpdGlvbiBvZiB3aGVyZSB0byBleHRyYWN0Ci0r ICAgICBpbml0RGVyaXZlKAotKyAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LCBQS0NTMTFDb25z dGFudHMuQ0tNX0VYVFJBQ1RfS0VZX0ZST01fS0VZLHBhcmFtLG51bGwsCi0rICAgICAgICAgICAg ICAgIFBLQ1MxMUNvbnN0YW50cy5DS0FfRU5DUllQVCwgUEtDUzExQ29uc3RhbnRzLkNLQV9ERVJJ VkUsOCk7Ci0rIAotKyAKLSsgICAgaW5pdERlcml2ZSgKLSsgICAgICAgICAgICAgICBiYXNlU3lt S2V5LHNlY29uZGFyeVN5bUtleSwgUEtDUzExQ29uc3RhbnRzLkNLTV9DT05DQVRFTkFURV9CQVNF X0FORF9LRVksbnVsbCxudWxsLAotKyAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5DS01f REVTM19FQ0IsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLDApOwotKyAKLSsgICAgKi8gCi0r Ci0rICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXREZXJpdmUoU3ltbWV0cmljS2V5IGJhc2VL ZXksIAotKyAgICAgICAgU3ltbWV0cmljS2V5IHNlY29uZGFyeUtleSwgbG9uZyBkZXJpdmVNZWNo LCBieXRlW10gcGFyYW0sIGJ5dGVbXSBpdiwgbG9uZyB0YXJnZXRNZWNoLCBsb25nIG9wZXJhdGlv biwgbG9uZyBrZXlTaXplKQotKyAgICAgICAgdGhyb3dzIEludmFsaWRLZXlFeGNlcHRpb247IAot KwotKyAgIHB1YmxpYyBhYnN0cmFjdCBTeW1tZXRyaWNLZXkgIGRlcml2ZSgpCi0rICAgICAgIHRo cm93cyBUb2tlbkV4Y2VwdGlvbjsKLSt9Ci1kaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vU3ltbWV0cmljS2V5LmphdmEuam1hZ25lIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TeW1tZXRyaWNLZXkuamF2YQot LS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TeW1tZXRy aWNLZXkuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjoxMTo1MC44NjU2OTkyMjIgLTA3MDAKLSsr KyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vU3ltbWV0cmlj S2V5LmphdmEJMjAxNi0wNC0xNCAxNjoxMjowMi43Njg2MTcyODkgLTA3MDAKLUBAIC03MSw2ICs3 MSwxMCBAQCBwdWJsaWMgaW50ZXJmYWNlIFN5bW1ldHJpY0tleSB7Ci0gCi0gICAgIFN0cmluZyBn ZXRGb3JtYXQoKTsKLSAKLSsgICAgU3RyaW5nIGdldE5pY2tOYW1lKCk7Ci0rCi0rICAgIHZvaWQg c2V0Tmlja05hbWUoU3RyaW5nIG5pY2tOYW1lKTsKLSsKLSAgICAgcHVibGljIGZpbmFsIHN0YXRp YyBjbGFzcyBUeXBlIHsKLSAgICAgICAgIC8vIGFsbCBuYW1lcyBjb252ZXJ0ZWQgdG8gbG93ZXJj YXNlIGZvciBjYXNlIGluc2Vuc2l0aXZpdHkKLSAgICAgICAgIHByaXZhdGUgc3RhdGljIEhhc2h0 YWJsZSBuYW1lTWFwID0gbmV3IEhhc2h0YWJsZSgpOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL21hbmlmZXN0Lm1uLmptYWduZSAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvbWFuaWZlc3QubW4KLS0tLSAu L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvbWFuaWZlc3QubW4u am1hZ25lCTIwMTYtMDQtMTQgMTY6MTU6NTkuMjcxOTg5MzQ0IC0wNzAwCi0rKysgLi9tb3ppbGxh L3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL21hbmlmZXN0Lm1uCTIwMTYtMDQt MTQgMTY6MTY6MTAuNjcwOTEwODgxIC0wNzAwCi1AQCAtNjQsNiArNjQsNyBAQCBDU1JDUyA9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gCQkJUEsxMVN0b3JlLmMJCQkJXAotICAgICAg ICAgICAgIFBLMTFTeW1LZXkuYyAgICAgICAgICAgIFwKLSAJCQlQSzExVG9rZW4uYwkJCQlcCi0r ICAgICAgICAgICAgUEsxMVN5bW1ldHJpY0tleURlcml2ZXIuYyBcCi0gICAgICAgICAgICAgJChO VUxMKQotIAotIAotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMuam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5jCi0tLS0gLi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMuam1hZ25l CTIwMTYtMDQtMTQgMTY6MTc6MjkuNzYwMzY2NDc3IC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMJMjAxNi0wNC0x NCAxNjoxNzo1OC43NDIxNjY5ODMgLTA3MDAKLUBAIC01MTksNyArNTE5LDcgQEAgSk5JRVhQT1JU IGpvYmplY3QgSk5JQ0FMTAotIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3Jh cHBlcl9uYXRpdmVVbndyYXBTeW1XaXRoU3ltCi0gICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqb2JqZWN0IHRva2VuT2JqLCBqb2JqZWN0IHVud3JhcHBlck9iaiwKLSAgICAgICAgIGpi eXRlQXJyYXkgd3JhcHBlZEJBLCBqb2JqZWN0IHdyYXBBbGdPYmosIGpvYmplY3QgdHlwZUFsZ09i aiwKLS0gICAgICAgIGppbnQga2V5TGVuLCBqYnl0ZUFycmF5IGl2QkEsIGppbnQgdXNhZ2VFbnVt KQotKyAgICAgICAgamludCBrZXlMZW4sIGpieXRlQXJyYXkgaXZCQSwgamludCB1c2FnZUVudW0s amJvb2xlYW4gdGVtcG9yYXJ5KQotIHsKLSAgICAgUEsxMVN5bUtleSAqc3ltS2V5PU5VTEwsICp3 cmFwcGluZ0tleT1OVUxMOwotICAgICBDS19NRUNIQU5JU01fVFlQRSB3cmFwcGluZ01lY2gsIGtl eVR5cGVNZWNoOwotQEAgLTUyNyw2ICs1MjcsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2Nz MTFfUEsxMUtleVdyYXBwCi0gICAgIGpvYmplY3Qga2V5T2JqID0gTlVMTDsKLSAgICAgQ0tfVUxP Tkcgb3BlcmF0aW9uOwotICAgICBDS19GTEFHUyBmbGFnczsKLSsgICAgUFJCb29sIGlzUGVybWFu ZW50ID0gUFJfRkFMU0U7Ci0gCi0gICAgIC8qIGdldCBrZXkgdHlwZSAqLwotICAgICBrZXlUeXBl TWVjaCA9IEpTU19nZXRQSzExTWVjaEZyb21BbGcoZW52LCB0eXBlQWxnT2JqKTsKLUBAIC01Nzks OCArNTgwLDIxIEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAg ICAgICAgIGZsYWdzID0gMDsKLSAgICAgfQotIAotLSAgICBzeW1LZXkgPSBQSzExX1Vud3JhcFN5 bUtleVdpdGhGbGFncyh3cmFwcGluZ0tleSwgd3JhcHBpbmdNZWNoLCBwYXJhbSwKLS0gICAgICAg IHdyYXBwZWRLZXksIGtleVR5cGVNZWNoLCBvcGVyYXRpb24sIGtleUxlbiwgZmxhZ3MpOwotKyAg ICBpZiggdGVtcG9yYXJ5ICkgewotKyAgICAgICAgaXNQZXJtYW5lbnQgPSBQUl9GQUxTRTsKLSsg ICAgfSBlbHNlIHsKLSsgICAgICAgIGlzUGVybWFuZW50ID0gUFJfVFJVRTsKLSsgICAgfQotKwot KyAgICBpZiggaXNQZXJtYW5lbnQgPT0gUFJfRkFMU0UpIHsKLSsgICAgICAgIHN5bUtleSA9IFBL MTFfVW53cmFwU3ltS2V5V2l0aEZsYWdzKHdyYXBwaW5nS2V5LCB3cmFwcGluZ01lY2gsIHBhcmFt LAotKyAgICAgICAgICAgIHdyYXBwZWRLZXksIGtleVR5cGVNZWNoLCBvcGVyYXRpb24sIGtleUxl biwgZmxhZ3MpOwotKwotKyAgICB9IGVsc2UgewotKyAgICAgICAgc3ltS2V5ID0gUEsxMV9Vbndy YXBTeW1LZXlXaXRoRmxhZ3NQZXJtKHdyYXBwaW5nS2V5LCB3cmFwcGluZ01lY2gsIHBhcmFtLAot KyAgICAgICAgICAgIHdyYXBwZWRLZXksIGtleVR5cGVNZWNoLCBvcGVyYXRpb24sIGtleUxlbiwg ZmxhZ3MsaXNQZXJtYW5lbnQpOwotKyAgICB9Ci0rCi0gICAgIGlmKCBzeW1LZXkgPT0gTlVMTCAp IHsKLSAgICAgICAgIEpTU190aHJvd01zZyhlbnYsIFRPS0VOX0VYQ0VQVElPTiwgIkZhaWxlZCB0 byB1bndyYXAga2V5Iik7Ci0gICAgICAgICBnb3RvIGZpbmlzaDsKLUBAIC03MDIsNyArNzE2LDcg QEAgZmluaXNoOgotIEpOSUVYUE9SVCBqb2JqZWN0IEpOSUNBTEwKLSBKYXZhX29yZ19tb3ppbGxh X2pzc19wa2NzMTFfUEsxMUtleVdyYXBwZXJfbmF0aXZlVW53cmFwU3ltUGxhaW50ZXh0Ci0gICAg IChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqb2JqZWN0IHRva2VuT2JqLCBqYnl0ZUFycmF5 IHdyYXBwZWRCQSwKLS0gICAgICAgIGpvYmplY3QgdHlwZUFsZ09iaiwgamludCB1c2FnZUVudW0p Ci0rICAgICAgICBqb2JqZWN0IHR5cGVBbGdPYmosIGppbnQgdXNhZ2VFbnVtLGpib29sZWFuIHRl bXBvcmFyeSkKLSB7Ci0gICAgIFBLMTFTeW1LZXkgKnN5bUtleT1OVUxMOwotICAgICBDS19NRUNI QU5JU01fVFlQRSBrZXlUeXBlTWVjaDsKLUBAIC03MTEsNiArNzI1LDggQEAgSmF2YV9vcmdfbW96 aWxsYV9qc3NfcGtjczExX1BLMTFLZXlXcmFwcAotICAgICBQSzExU2xvdEluZm8gKnNsb3QgPSBO VUxMOwotICAgICBDS19VTE9ORyBvcGVyYXRpb247Ci0gICAgIENLX0ZMQUdTIGZsYWdzOwotKyAg ICBQUkJvb2wgaXNQZXJtID0gUFJfRkFMU0U7Ci0rCi0gCi0gICAgIC8qIGdldCBrZXkgdHlwZSAq LwotICAgICBrZXlUeXBlTWVjaCA9IEpTU19nZXRQSzExTWVjaEZyb21BbGcoZW52LCB0eXBlQWxn T2JqKTsKLUBAIC03NDAsOSArNzU2LDE1IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9Q SzExS2V5V3JhcHAKLSAgICAgICAgIGZsYWdzID0gMDsKLSAgICAgfQotIAotKyAgICBpZiggdGVt cG9yYXJ5ICkgewotKyAgICAgICAgaXNQZXJtID0gUFJfRkFMU0U7Ci0rICAgIH0gZWxzZSB7Ci0r ICAgICAgICBpc1Blcm0gPSBQUl9UUlVFOwotKyAgICB9Ci0rCi0gICAgIC8qIHB1bGwgaW4gdGhl IGtleSAqLwotICAgICBzeW1LZXkgPSBQSzExX0ltcG9ydFN5bUtleVdpdGhGbGFncyhzbG90LCBr ZXlUeXBlTWVjaCwgUEsxMV9PcmlnaW5VbndyYXAsCi0tICAgICAgICBvcGVyYXRpb24sIHdyYXBw ZWRLZXksIGZsYWdzLCBQUl9GQUxTRSAvKmlzUGVybSovLCBOVUxMKTsKLSsgICAgICAgIG9wZXJh dGlvbiwgd3JhcHBlZEtleSwgZmxhZ3MsIGlzUGVybSwgTlVMTCk7Ci0gICAgIGlmKCBzeW1LZXkg PT0gTlVMTCApIHsKLSAgICAgICAgIEpTU190aHJvd01zZyhlbnYsIFRPS0VOX0VYQ0VQVElPTiwg IkZhaWxlZCB0byB1bndyYXAga2V5Iik7Ci0gICAgICAgICBnb3RvIGZpbmlzaDsKLWRpZmYgLXVw IC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3Jh cHBlci5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9w a2NzMTEvUEsxMUtleVdyYXBwZXIuamF2YQotLS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhLmptYWduZQkyMDE2LTA0LTE0 IDE2OjE5OjI2Ljk5ODU1OTQ4MCAtMDcwMAotKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhCTIwMTYtMDQtMTQgMTY6MTk6 NDAuOTQxNDYzNTA2IC0wNzAwCi1AQCAtNDk4LDggKzQ5OCwyNSBAQCBmaW5hbCBjbGFzcyBQSzEx S2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCi0gICAgICAgICByZXR1cm4gdW53cmFwU3ltbWV0cmlj KHdyYXBwZWQsIHR5cGUsIC0xLCBrZXlMZW4pOwotICAgICB9Ci0gCi0rICAgIHB1YmxpYyBTeW1t ZXRyaWNLZXkKLSsgICAgdW53cmFwU3ltbWV0cmljUGVybShieXRlW10gd3JhcHBlZCwgU3ltbWV0 cmljS2V5LlR5cGUgdHlwZSwKLSsgICAgICAgIFN5bW1ldHJpY0tleS5Vc2FnZSB1c2FnZSwgaW50 IGtleUxlbikKLSsgICAgICAgIHRocm93cyBUb2tlbkV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhj ZXB0aW9uLAotKyAgICAgICAgICAgIEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24K LSsgICAgewotKyAgICAgICAgcmV0dXJuIHVud3JhcFN5bW1ldHJpY1Blcm0od3JhcHBlZCwgdHlw ZSwgdXNhZ2UuZ2V0VmFsKCksIGtleUxlbik7Ci0rICAgIH0KLSsKLSsgICAgcHVibGljIFN5bW1l dHJpY0tleQotKyAgICB1bndyYXBTeW1tZXRyaWNQZXJtKGJ5dGVbXSB3cmFwcGVkLCBTeW1tZXRy aWNLZXkuVHlwZSB0eXBlLCBpbnQga2V5TGVuKQotKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0 aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sCi0rICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRo bVBhcmFtZXRlckV4Y2VwdGlvbgotKyAgICB7Ci0rICAgICAgICByZXR1cm4gdW53cmFwU3ltbWV0 cmljUGVybSh3cmFwcGVkLCB0eXBlLCAtMSwga2V5TGVuKTsKLSsgICAgfQotKwotICAgICBwcml2 YXRlIFN5bW1ldHJpY0tleQotLSAgICB1bndyYXBTeW1tZXRyaWMoYnl0ZVtdIHdyYXBwZWQsIFN5 bW1ldHJpY0tleS5UeXBlIHR5cGUsCi0rICAgIHVud3JhcFN5bW1ldHJpY1Blcm0oYnl0ZVtdIHdy YXBwZWQsIFN5bW1ldHJpY0tleS5UeXBlIHR5cGUsCi0gICAgICAgICBpbnQgdXNhZ2VFbnVtLCBp bnQga2V5TGVuKQotICAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVF eGNlcHRpb24sCi0gICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlv bgotQEAgLTUwOCw2ICs1MjUsMTAgQEAgZmluYWwgY2xhc3MgUEsxMUtleVdyYXBwZXIgaW1wbGVt ZW50cyBLZQotICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsK LSAgICAgICAgIH0KLSAKLSsgICAgICAgIC8qIFNpbmNlIHdlIHdhbnQgcGVybWFuZW50LG1ha2Ug dGhlIHRlbXBvcmFyeSBhcmcgZmFsc2UgKi8KLSsgICAgICAgIGJvb2xlYW4gdGVtcG9yYXJ5ID0g ZmFsc2U7Ci0rCi0rCi0gICAgICAgICBpZiggKCEgYWxnb3JpdGhtLmlzUGFkZGVkKCkpICYmICh0 eXBlID09IFN5bW1ldHJpY0tleS5SQzQpICkgewotICAgICAgICAgICAgIGlmKCBrZXlMZW4gPD0g MCApIHsKLSAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBbGdvcml0aG1QYXJhbWV0 ZXJFeGNlcHRpb24oCi1AQCAtNTIxLDEyICs1NDIsNTMgQEAgZmluYWwgY2xhc3MgUEsxMUtleVdy YXBwZXIgaW1wbGVtZW50cyBLZQotIAotICAgICAgICAgaWYoIGFsZ29yaXRobSA9PSBLZXlXcmFw QWxnb3JpdGhtLlBMQUlOVEVYVCApIHsKLSAgICAgICAgICAgICByZXR1cm4gbmF0aXZlVW53cmFw U3ltUGxhaW50ZXh0KHRva2VuLCB3cmFwcGVkLCBhbGdGcm9tVHlwZSh0eXBlKSwKLS0gICAgICAg ICAgICAgICAgdXNhZ2VFbnVtICk7Ci0rICAgICAgICAgICAgICAgIHVzYWdlRW51bSx0ZW1wb3Jh cnkgKTsKLSAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgaWYoIHN5bUtleSAhPSBudWxs ICkgewotICAgICAgICAgICAgICAgICBBc3NlcnQuX2Fzc2VydChwdWJLZXk9PW51bGwgJiYgcHJp dktleT09bnVsbCk7Ci0gICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVVbndyYXBTeW1XaXRo U3ltKHRva2VuLCBzeW1LZXksIHdyYXBwZWQsIGFsZ29yaXRobSwKLS0gICAgICAgICAgICAgICAg ICAgICAgICBhbGdGcm9tVHlwZSh0eXBlKSwga2V5TGVuLCBJViwgdXNhZ2VFbnVtKTsKLSsgICAg ICAgICAgICAgICAgICAgICAgICBhbGdGcm9tVHlwZSh0eXBlKSwga2V5TGVuLCBJViwgdXNhZ2VF bnVtLHRlbXBvcmFyeSk7Ci0rICAgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAgICAg QXNzZXJ0Ll9hc3NlcnQocHJpdktleSE9bnVsbCAmJiBwdWJLZXk9PW51bGwgJiYgc3ltS2V5PT1u dWxsKTsKLSsgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRva2VuRXhjZXB0aW9uKCJXZSBkbyBu b3Qgc3VwcG9ydCBwZXJtbmFtZW50IHVud3JhcHBpbmcgd2l0aCBwcml2YXRlIGtleS4iKTsKLSsg ICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsKLSsgICAgcHJpdmF0ZSBTeW1t ZXRyaWNLZXkKLSsgICAgdW53cmFwU3ltbWV0cmljKGJ5dGVbXSB3cmFwcGVkLCBTeW1tZXRyaWNL ZXkuVHlwZSB0eXBlLAotKyAgICAgICAgaW50IHVzYWdlRW51bSwgaW50IGtleUxlbikKLSsgICAg ICAgIHRocm93cyBUb2tlbkV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLAotKyAgICAg ICAgICAgIEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24KLSsgICAgewotKyAgICAg ICAgaWYoIHN0YXRlICE9IFVOV1JBUCApIHsKLSsgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdh bFN0YXRlRXhjZXB0aW9uKCk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiggKCEgYWxnb3Jp dGhtLmlzUGFkZGVkKCkpICYmICh0eXBlID09IFN5bW1ldHJpY0tleS5SQzQpICkgewotKyAgICAg ICAgICAgIGlmKCBrZXlMZW4gPD0gMCApIHsKLSsgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElu dmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24oCi0rICAgICAgICAgICAgICAgICAgICAi UkM0IGtleXMgd3JhcHBlZCBpbiB1bnBhZGRlZCBhbGdvcml0aG1zIG5lZWQga2V5IGxlbmd0aCIr Ci0rICAgICAgICAgICAgICAgICAgICAiIHNwZWNpZmllZCB3aGVuIHVud3JhcHBpbmciKTsKLSsg ICAgICAgICAgICB9Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIC8vIERvbid0IHVz ZSB0aGUga2V5IGxlbmd0aAotKyAgICAgICAgICAgIC8va2V5TGVuID0gMDsKLSsgICAgICAgIH0K LSsKLSsgICAgICAgIC8qIFNpbmNlIHdlIERPTlQgd2FudCBwZXJtYW5lbnQsbWFrZSB0aGUgdGVt cG9yYXJ5IGFyZyB0cnVlICovCi0rICAgICAgICBib29sZWFuIHRlbXBvcmFyeSA9IHRydWU7Ci0r Ci0rCi0rICAgICAgICBpZiggYWxnb3JpdGhtID09IEtleVdyYXBBbGdvcml0aG0uUExBSU5URVhU ICkgewotKyAgICAgICAgICAgIHJldHVybiBuYXRpdmVVbndyYXBTeW1QbGFpbnRleHQodG9rZW4s IHdyYXBwZWQsIGFsZ0Zyb21UeXBlKHR5cGUpLAotKyAgICAgICAgICAgICAgICB1c2FnZUVudW0s IHRlbXBvcmFyeSApOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBpZiggc3ltS2V5 ICE9IG51bGwgKSB7Ci0rICAgICAgICAgICAgICAgIEFzc2VydC5fYXNzZXJ0KHB1YktleT09bnVs bCAmJiBwcml2S2V5PT1udWxsKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZVVud3Jh cFN5bVdpdGhTeW0odG9rZW4sIHN5bUtleSwgd3JhcHBlZCwgYWxnb3JpdGhtLAotKyAgICAgICAg ICAgICAgICAgICAgICAgIGFsZ0Zyb21UeXBlKHR5cGUpLCBrZXlMZW4sIElWLCB1c2FnZUVudW0s dGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICBBc3Nl cnQuX2Fzc2VydChwcml2S2V5IT1udWxsICYmIHB1YktleT09bnVsbCAmJiBzeW1LZXk9PW51bGwp OwotICAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlVW53cmFwU3ltV2l0aFByaXYodG9rZW4s IHByaXZLZXksIHdyYXBwZWQsCi1AQCAtNTg2LDcgKzY0OCw3IEBAIGZpbmFsIGNsYXNzIFBLMTFL ZXlXcmFwcGVyIGltcGxlbWVudHMgS2UKLSAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN5bW1l dHJpY0tleQotICAgICBuYXRpdmVVbndyYXBTeW1XaXRoU3ltKFBLMTFUb2tlbiB0b2tlbiwgU3lt bWV0cmljS2V5IHVud3JhcHBpbmdLZXksCi0gICAgICAgICBieXRlW10gd3JhcHBlZEtleSwgS2V5 V3JhcEFsZ29yaXRobSBhbGcsIEFsZ29yaXRobSB0eXBlLCBpbnQga2V5TGVuLAotLSAgICAgICAg Ynl0ZVtdIElWLCBpbnQgdXNhZ2VFbnVtKQotKyAgICAgICAgYnl0ZVtdIElWLCBpbnQgdXNhZ2VF bnVtLGJvb2xlYW4gdGVtcG9yYXJ5KQotICAgICAgICAgICAgIHRocm93cyBUb2tlbkV4Y2VwdGlv bjsKLSAKLSAgICAgLyoqCi1AQCAtNjAwLDcgKzY2Miw3IEBAIGZpbmFsIGNsYXNzIFBLMTFLZXlX cmFwcGVyIGltcGxlbWVudHMgS2UKLSAKLSAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN5bW1l dHJpY0tleQotICAgICBuYXRpdmVVbndyYXBTeW1QbGFpbnRleHQoUEsxMVRva2VuIHRva2VuLCBi eXRlW10gd3JhcHBlZEtleSwKLS0gICAgICAgIEFsZ29yaXRobSB0eXBlLCBpbnQgdXNhZ2VFbnVt KTsKLSsgICAgICAgIEFsZ29yaXRobSB0eXBlLCBpbnQgdXNhZ2VFbnVtLGJvb2xlYW4gdGVtcG9y YXJ5KTsKLSAKLSAgICAgcHJpdmF0ZSB2b2lkIHJlc2V0KCkgewotICAgICAgICAgc3RhdGUgPSBV TklOSVRJQUxJWkVEOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvcGtjczExL1BLMTFNZXNzYWdlRGlnZXN0LmMuam1hZ25lIC4vbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExTWVzc2FnZURpZ2VzdC5jCi0tLS0gLi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNZXNzYWdlRGln ZXN0LmMuam1hZ25lCTIwMTYtMDUtMDYgMTg6MTA6MDQuNTMxOTEyNDA3IC0wNzAwCi0rKysgLi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFNZXNzYWdlRGln ZXN0LmMJMjAxNi0wNS0wNiAxNzozNjoxOS45MTM5MzM2MzkgLTA3MDAKLUBAIC05OSwxNyArOTks MTkgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFNZXNzYWdlRAotICAgICB9Ci0g Ci0gICAgIC8qIGNvcHkgdGhlIGtleSwgc2V0dGluZyB0aGUgQ0tBX1NJR04gYXR0cmlidXRlICov Ci0tICAgIG5ld0tleSA9IFBLMTFfQ29weVN5bUtleUZvclNpZ25pbmcob3JpZ0tleSwgbWVjaCk7 Ci0rLyogICAgbmV3S2V5ID0gUEsxMV9Db3B5U3ltS2V5Rm9yU2lnbmluZyhvcmlnS2V5LCBtZWNo KTsKLSAgICAgaWYoIG5ld0tleSA9PSBOVUxMICkgewotICAgICAgICAgSlNTX3Rocm93TXNnKGVu diwgRElHRVNUX0VYQ0VQVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRv IHNldCBDS0FfU0lHTiBhdHRyaWJ1dGUgb24gc3ltbWV0cmljIGtleSIpOwotICAgICAgICAgZ290 byBmaW5pc2g7Ci0gICAgIH0KLSAKLSsqLwotKwotICAgICBwYXJhbS5kYXRhID0gTlVMTDsKLSAg ICAgcGFyYW0ubGVuID0gMDsKLSAKLS0gICAgY29udGV4dCA9IFBLMTFfQ3JlYXRlQ29udGV4dEJ5 U3ltS2V5KG1lY2gsIENLQV9TSUdOLCBuZXdLZXksICZwYXJhbSk7Ci0rICAgIGNvbnRleHQgPSBQ SzExX0NyZWF0ZUNvbnRleHRCeVN5bUtleShtZWNoLCBDS0FfU0lHTiwgb3JpZ0tleSwgJnBhcmFt KTsKLSAgICAgaWYoIGNvbnRleHQgPT0gTlVMTCApIHsKLSAgICAgICAgIEpTU190aHJvd01zZyhl bnYsIERJR0VTVF9FWENFUFRJT04sCi0gICAgICAgICAgICAgIlVuYWJsZSB0byBpbml0aWFsaXpl IGRpZ2VzdCBjb250ZXh0Iik7Ci1kaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN0b3JlLmMuam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3RvcmUuYwotLS0tIC4vbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3RvcmUuYy5qbWFnbmUJMjAxNi0w NC0xNCAxNjoyMjoxNi4xNzQzOTQ5NzcgLTA3MDAKLSsrKyAuL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN0b3JlLmMJMjAxNi0wNC0xNCAxNjoyMjoyNi42 MDUzMjMxNzYgLTA3MDAKLUBAIC00NCwxMyArNDQsMTAxIEBACi0gI2luY2x1ZGUgPGNlcnQuaD4K LSAjaW5jbHVkZSA8Y2VydGRiLmg+Ci0gI2luY2x1ZGUgPHNlY2FzbjEuaD4KLS0KLSAjaW5jbHVk ZSA8anNzdXRpbC5oPgotICNpbmNsdWRlIDxBbGdvcml0aG0uaD4KLSAjaW5jbHVkZSAicGsxMXV0 aWwuaCIKLSAjaW5jbHVkZSA8amF2YV9pZHMuaD4KLSAjaW5jbHVkZSA8anNzX2V4Y2VwdGlvbnMu aD4KLSAKLSt0eXBlZGVmIHN0cnVjdAotK3sKLSsgICAgZW51bQotKyAgICB7Ci0rICAgICAgICBQ V19OT05FID0gMCwKLSsgICAgICAgIFBXX0ZST01GSUxFID0gMSwKLSsgICAgICAgIFBXX1BMQUlO VEVYVCA9IDIsCi0rICAgICAgICBQV19FWFRFUk5BTCA9IDMKLSsgICAgfSBzb3VyY2U7Ci0rICAg IGNoYXIgKmRhdGE7Ci0rfSBzZWN1UFdEYXRhOwotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICogUEsx MVN0b3JlLnB1dFN5bUtleXNJblZlY3RvcgotKyAqLwotK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwK LStKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVN0b3JlX3B1dFN5bUtleXNJblZlY3Rv cgotKyAgICAoSk5JRW52ICplbnYsIGpvYmplY3QgdGhpcywgam9iamVjdCBrZXlWZWN0b3IpCi0r ewotKyAgICBQSzExU2xvdEluZm8gKnNsb3Q7Ci0rICAgIGpvYmplY3Qgb2JqZWN0ID0gTlVMTDsK LSsgICAgamNsYXNzIHZlY3RvckNsYXNzOwotKyAgICBqbWV0aG9kSUQgYWRkRWxlbWVudDsKLSsK LSsgICAgUEsxMVN5bUtleSAqZmlyc3RTeW1LZXk9IE5VTEw7Ci0rICAgIFBLMTFTeW1LZXkgKnNr ICA9IE5VTEw7Ci0rICAgIFBLMTFTeW1LZXkgKm5leHRTeW1LZXkgPSBOVUxMOwotKyAgICBzZWN1 UFdEYXRhICBwd2RhdGE7Ci0rCi0rICAgIFBLMTFTeW1LZXkgKmZyZWVTeW1LZXkgPSBOVUxMOwot KyAgICBQSzExU3ltS2V5ICpuZXh0RnJlZVN5bUtleSA9IE5VTEw7Ci0rCi0rICAgIHB3ZGF0YS5z b3VyY2UgICA9IFBXX05PTkU7Ci0rICAgIHB3ZGF0YS5kYXRhICAgICA9IChjaGFyICopIE5VTEw7 Ci0rCi0rICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhpcyE9TlVMTCAmJiBrZXlWZWN0b3Ih PU5VTEwpOwotKwotKyAgICBpZiggSlNTX1BLMTFfZ2V0U3RvcmVTbG90UHRyKGVudiwgdGhpcywg JnNsb3QpICE9IFBSX1NVQ0NFU1MpIHsKLSsgICAgICAgIEFTU0VSVF9PVVRPRk1FTShlbnYpOwot KyAgICAgICAgZ290byBmaW5pc2g7Ci0rICAgIH0KLSsgICAgUFJfQVNTRVJUKHNsb3QhPU5VTEwp OwotKwotKyAgICB2ZWN0b3JDbGFzcyA9ICgqZW52KS0+R2V0T2JqZWN0Q2xhc3MoZW52LCBrZXlW ZWN0b3IpOwotKyAgICBpZih2ZWN0b3JDbGFzcyA9PSBOVUxMKSB7Ci0rICAgICAgICBBU1NFUlRf T1VUT0ZNRU0oZW52KTsKLSsgICAgICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rCi0rICAgIGFk ZEVsZW1lbnQgPSAoKmVudiktPkdldE1ldGhvZElEKGVudiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjdG9yQ2xhc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZFQ1RPUl9BRERfRUxFTUVOVF9OQU1FLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWRUNUT1JfQUREX0VMRU1FTlRfU0lHKTsKLSsgICAgaWYoYWRk RWxlbWVudCA9PSBOVUxMKSB7Ci0rICAgICAgICBBU1NFUlRfT1VUT0ZNRU0oZW52KTsKLSsgICAg ICAgIGdvdG8gZmluaXNoOwotKyAgICB9Ci0rCi0rICAgIFBLMTFfQXV0aGVudGljYXRlKHNsb3Qs IFBSX1RSVUUgLypsb2FkIGNlcnRzKi8sIE5VTEwgLyp3aW5jeCovKTsKLSsKLSsgICAgLyogT2J0 YWluIHRoZSBzeW1tZXRyaWMga2V5IGxpc3QuICovCi0rICAgIGZpcnN0U3ltS2V5ID0gUEsxMV9M aXN0Rml4ZWRLZXlzSW5TbG90KCBzbG90ICwgTlVMTCwgKCB2b2lkICopICZwd2RhdGEgKTsKLSsg ICAgc2sgPSBmaXJzdFN5bUtleTsKLSsKLSsgICAgd2hpbGUoKCBzayAhPSBOVUxMICkpCi0rICAg IHsKLSsgICAgICAgIGlmKCBzayApIHsKLSsKLSsgICAgICAgICAgICBuZXh0U3ltS2V5ID0gc2s7 Ci0rICAgICAgICAgICAgb2JqZWN0ID0gSlNTX1BLMTFfd3JhcFN5bUtleShlbnYsICZzayk7Ci0r Ci0rICAgICAgICAgICAgaWYob2JqZWN0ID09IE5VTEwpIHsKLSsgICAgICAgICAgICAgICAgUFJf QVNTRVJUKCAoKmVudiktPkV4Y2VwdGlvbk9jY3VycmVkKGVudikgKTsKLSsgICAgICAgICAgICAg ICAgZ290byBmaW5pc2g7Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgICAgICAgICAg ICAqIEluc2VydCB0aGUga2V5IGludG8gdGhlIHZlY3RvcgotKyAgICAgICAgICAgICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsgICAgICAgICAg ICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwga2V5VmVjdG9yLCBhZGRFbGVtZW50LCBvYmpl Y3QpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgc2sgPSBQSzExX0dldE5leHRTeW1LZXkoIG5l eHRTeW1LZXkgKTsKLSsgICAgfQotKwotK2ZpbmlzaDoKLSsKLSsgICAgcmV0dXJuOwotK30KLSAK LSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgotICAqIFBLMTFTdG9yZS5wdXRLZXlzSW5WZWN0b3IKLWRpZmYgLXVw IC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3RvcmUu amF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEx L1BLMTFTdG9yZS5qYXZhCi0tLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFTdG9yZS5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2OjIzOjI2Ljk5Nzkw NzQ3MSAtMDcwMAotKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br Y3MxMS9QSzExU3RvcmUuamF2YQkyMDE2LTA0LTE0IDE2OjIzOjM0LjQzNTg1NjI3MiAtMDcwMAot QEAgLTY2LDggKzY2LDIzIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQSzExU3RvcmUgaW1wbGVtZW50 cwotICAgICAgICAga2V5cy5jb3B5SW50byggKE9iamVjdFtdKSBhcnJheSApOwotICAgICAgICAg cmV0dXJuIGFycmF5OwotICAgICB9Ci0rCi0rICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgU3ltbWV0 cmljS2V5W10KLSsgICAgZ2V0U3ltbWV0cmljS2V5cygpIHRocm93cyBUb2tlbkV4Y2VwdGlvbiB7 Ci0rCi0rICAgICAgICBWZWN0b3Iga2V5cyA9IG5ldyBWZWN0b3IoKTsKLSsgICAgICAgIHB1dFN5 bUtleXNJblZlY3RvcihrZXlzKTsKLSsgICAgICAgIFN5bW1ldHJpY0tleVtdIGFycmF5ID0gbmV3 IFN5bW1ldHJpY0tleVtrZXlzLnNpemUoKV07Ci0rICAgICAgICBrZXlzLmNvcHlJbnRvKCAoT2Jq ZWN0W10pIGFycmF5KTsKLSsgICAgICAgIHJldHVybiBhcnJheTsKLSsgICAgfQotKwotKwotKwot ICAgICBwcm90ZWN0ZWQgbmF0aXZlIHZvaWQgcHV0S2V5c0luVmVjdG9yKFZlY3RvciBrZXlzKSB0 aHJvd3MgVG9rZW5FeGNlcHRpb247Ci0gCi0rICAgIHByb3RlY3RlZCBuYXRpdmUgdm9pZCBwdXRT eW1LZXlzSW5WZWN0b3IoVmVjdG9yIHN5bUtleXMpIHRocm93cyBUb2tlbkV4Y2VwdGlvbjsKLSsK LSAKLSAgICAgcHVibGljIG5hdGl2ZSB2b2lkIGRlbGV0ZVByaXZhdGVLZXkoUHJpdmF0ZUtleSBr ZXkpCi0gICAgICAgICB0aHJvd3MgTm9TdWNoSXRlbU9uVG9rZW5FeGNlcHRpb24sIFRva2VuRXhj ZXB0aW9uOwotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv cGtjczExL1BLMTFTeW1LZXkuYy5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTeW1LZXkuYwotLS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3ltS2V5LmMuam1hZ25lCTIwMTYtMDQtMTQgMTY6 MjQ6NDQuNTY1MzcyNTU3IC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTeW1LZXkuYwkyMDE2LTA1LTE3IDExOjM3OjQ4LjUzMjQ4NTEw NCAtMDcwMAotQEAgLTMzLDcgKzMzLDYgQEAKLSAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0 aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICAqCi0gICogKioqKiogRU5EIExJQ0VOU0Ug QkxPQ0sgKioqKiogKi8KLS0KLSAjaW5jbHVkZSAiX2puaS9vcmdfbW96aWxsYV9qc3NfcGtjczEx X1N5bUtleVByb3h5LmgiCi0gCi0gI2luY2x1ZGUgPG5zcHIuaD4KLUBAIC02Miw2ICs2MSw4IEBA IEpTU19QSzExX3dyYXBTeW1LZXkoSk5JRW52ICplbnYsIFBLMTFTeW0KLSAgICAgam1ldGhvZElE IGNvbnN0cnVjdG9yOwotICAgICBqYnl0ZUFycmF5IHB0ckFycmF5OwotICAgICBqb2JqZWN0IEtl eT1OVUxMOwotKyAgICBjaGFyICpuaWNrbmFtZSA9IE5VTEw7Ci0rICAgIGpzdHJpbmcgam5pY2tu YW1lID0gTlVMTDsKLSAKLSAgICAgUFJfQVNTRVJUKGVudiE9TlVMTCAmJiBzeW1LZXkhPU5VTEwg JiYgKnN5bUtleSE9TlVMTCk7Ci0gCi1AQCAtNzIsMTAgKzczLDE3IEBAIEpTU19QSzExX3dyYXBT eW1LZXkoSk5JRW52ICplbnYsIFBLMTFTeW0KLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9 Ci0gCi0rICAgIG5pY2tuYW1lID0gUEsxMV9HZXRTeW1LZXlOaWNrbmFtZSggKnN5bUtleSApOwot KwotKyAgICBpZiAobmlja25hbWUpIHsKLSsgICAgICAgIGpuaWNrbmFtZSA9ICgqZW52KS0+TmV3 U3RyaW5nVVRGKGVudiwgbmlja25hbWUpOwotKyAgICB9Ci0rCi0rIAotICAgICAvKiBmaW5kIHRo ZSBjb25zdHJ1Y3RvciAqLwotICAgICBjb25zdHJ1Y3RvciA9ICgqZW52KS0+R2V0TWV0aG9kSUQo ZW52LCBrZXlDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UExBSU5fQ09OU1RSVUNUT1IsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBLMTFTWU1LRVlfQ09OU1RSVUNUT1JfU0lHKTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEsxMVNZTUtFWV9DT05TVFJVQ1RPUl8xX1NJRyk7Ci0gICAgIGlm KGNvbnN0cnVjdG9yID09IE5VTEwpIHsKLSAgICAgICAgIEFTU0VSVF9PVVRPRk1FTShlbnYpOwot ICAgICAgICAgZ290byBmaW5pc2g7Ci1AQCAtODcsMTIgKzk1LDE2IEBAIEpTU19QSzExX3dyYXBT eW1LZXkoSk5JRW52ICplbnYsIFBLMTFTeW0KLSAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICB9 Ci0gICAgIC8qIGNhbGwgdGhlIGNvbnN0cnVjdG9yICovCi0tICAgIEtleSA9ICgqZW52KS0+TmV3 T2JqZWN0KGVudiwga2V5Q2xhc3MsIGNvbnN0cnVjdG9yLCBwdHJBcnJheSk7Ci0rICAgIEtleSA9 ICgqZW52KS0+TmV3T2JqZWN0KGVudiwga2V5Q2xhc3MsIGNvbnN0cnVjdG9yLCBwdHJBcnJheSxq bmlja25hbWUpOwotIAotIGZpbmlzaDoKLSAgICAgaWYoS2V5ID09IE5VTEwpIHsKLSAgICAgICAg IFBLMTFfRnJlZVN5bUtleSgqc3ltS2V5KTsKLSAgICAgfQotKyAgICBpZihuaWNrbmFtZSAhPSBO VUxMKSB7Ci0rICAgICAgICBQT1JUX0ZyZWUobmlja25hbWUpOwotKyAgICAgICAgbmlja25hbWUg PSBOVUxMOwotKyAgICB9Ci0gICAgICpzeW1LZXkgPSBOVUxMOwotICAgICByZXR1cm4gS2V5Owot IH0KLUBAIC0xODEsNiArMTkzLDQ5IEBAIGZpbmlzaDoKLSAKLSAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAg KgotKyAqIFBLMTFTeW1LZXkuc2V0Tmlja05hbWVOYXRpdmUKLSsgKi8KLStKTklFWFBPUlQgdm9p ZCBKTklDQUxMCi0rSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFTeW1LZXlfc2V0Tmlj a05hbWVOYXRpdmUKLSsgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXMsanN0cmluZyBuaWNr bmFtZSkKLSt7Ci0rICAgIFBLMTFTeW1LZXkgKmtleT1OVUxMOwotKyAgICBjb25zdCBjaGFyICpr ZXluYW1lID0gTlVMTDsKLSsgICAgU0VDU3RhdHVzIHN0YXR1czsKLSsKLSsgICAgLyogSWYgbm8g bmlja25hbWUgcHJvdmlkZWQsIHdlIGFyZSBkb25lICovCi0rICAgIGlmKCBuaWNrbmFtZSA9PSBO VUxMICkgewotKyAgICAgICAgSlNTX3Rocm93TXNnUHJFcnIoZW52LCBUT0tFTl9FWENFUFRJT04s Ci0rICAgICAgICAgICAgIk5pY2tuYW1lIGlzIE5VTEwsIHdpbGwgbm90IGJlIHNldCIpOyAgICAg ICAgCi0rICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwotKyAgICAvKiBnZXQgdGhlIGtl eSBwb2ludGVyICovCi0rICAgIGlmKCBKU1NfUEsxMV9nZXRTeW1LZXlQdHIoZW52LCB0aGlzLCAm a2V5KSAhPSBQUl9TVUNDRVNTKSB7Ci0rICAgICAgICBnb3RvIGZpbmlzaDsKLSsgICAgfQotKwot KyAgICAvKiBjb252ZXJ0IHRoZSBKYXZhIFN0cmluZyBpbnRvIGEgbmF0aXZlICJDIiBzdHJpbmcg Ki8KLSsgICAga2V5bmFtZSA9ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoIGVudiwgbmlja25h bWUsIDAgKTsKLSsKLSsgICAgLyogbmFtZSB0aGUga2V5ICovCi0rICAgIHN0YXR1cyA9IFBLMTFf U2V0U3ltS2V5Tmlja25hbWUoIGtleSwga2V5bmFtZSApOwotKyAgICBpZiggc3RhdHVzICE9IFNF Q1N1Y2Nlc3MgKSB7Ci0rICAgICAgICBKU1NfdGhyb3dNc2dQckVycihlbnYsIFRPS0VOX0VYQ0VQ VElPTiwKLSsgICAgICAgICAgICAiRmFpbGVkIHRvIG5hbWUgc3ltbWV0cmljIGtleSIpOwotKyAg ICB9Ci0rZmluaXNoOgotKwotKyAgICBpZigga2V5bmFtZSAhPSBOVUxMICkgewotKyAgICAgICAg LyogZnJlZSB0aGUgbmF0aXZlICJDIiBzdHJpbmcgKi8KLSsgICAgICAgICgqZW52KS0+UmVsZWFz ZVN0cmluZ1VURkNoYXJzKGVudiwgbmlja25hbWUsIGtleW5hbWUpOwotKyAgICB9Ci0rCi0rICAg IHJldHVybjsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICoKLSAgKiBQSzExU3ltS2V5Lmdl dEtleURhdGEKLSAgKi8KLSBKTklFWFBPUlQgamJ5dGVBcnJheSBKTklDQUxMCi1AQCAtMjc5LDYg KzMzNCwxMCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVN5bUtleV9nCi0gICAg ICAgICAgIGNhc2UgQ0tLX0FFUzoKLSAgICAgICAgICAgICB0eXBlRmllbGROYW1lID0gQUVTX0tF WVRZUEVfRklFTEQ7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgIGNhc2UgQ0tLX0RF UzI6Ci0rICAgICAgICAgICAgIHByaW50ZigiaGVsbG8gZGVzMiEgXG4iKTsKLSsgICAgICAgICAg ICAgdHlwZUZpZWxkTmFtZSA9IERFUzNfS0VZVFlQRV9GSUVMRDsKLSsgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgUFJfQVNTRVJUKFBSX0ZBTFNF KTsKLSAgICAgICAgICAgICB0eXBlRmllbGROYW1lID0gREVTX0tFWVRZUEVfRklFTEQ7Ci1kaWZm IC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5 bUtleS5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9w a2NzMTEvUEsxMVN5bUtleS5qYXZhCi0tLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTeW1LZXkuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjo1ODoz My4zODUzNzE2MzMgLTA3MDAKLSsrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMVN5bUtleS5qYXZhCTIwMTYtMDUtMTcgMTE6NDE6MzYuMzIzODQxMDQ1 IC0wNzAwCi1AQCAtNDQsOSArNDQsMTcgQEAgcHVibGljIGZpbmFsIGNsYXNzIFBLMTFTeW1LZXkg aW1wbGVtZW50cwotICAgICBwcm90ZWN0ZWQgUEsxMVN5bUtleShieXRlW10gcG9pbnRlcikgewot ICAgICAgICAgQXNzZXJ0Ll9hc3NlcnQocG9pbnRlciE9bnVsbCk7Ci0gICAgICAgICBrZXlQcm94 eSAgPSBuZXcgU3ltS2V5UHJveHkocG9pbnRlcik7Ci0rICAgICAgICBuaWNrTmFtZSA9IG51bGw7 Ci0rICAgIH0KLSsKLSsgICAgcHJvdGVjdGVkIFBLMTFTeW1LZXkoYnl0ZVtdIHBvaW50ZXIsU3Ry aW5nIG5pY2tOYW1lKSB7Ci0rICAgICAgICBBc3NlcnQuX2Fzc2VydChwb2ludGVyIT1udWxsKTsK LSsgICAgICAgIGtleVByb3h5ICA9IG5ldyBTeW1LZXlQcm94eShwb2ludGVyKTsKLSsgICAgICAg IHRoaXMubmlja05hbWUgPSBuaWNrTmFtZTsKLSAgICAgfQotIAotICAgICBwcml2YXRlIFN5bUtl eVByb3h5IGtleVByb3h5OwotKyAgICBwcml2YXRlIFN0cmluZyBuaWNrTmFtZTsKLSAKLSAgICAg cHVibGljIFN5bW1ldHJpY0tleS5UeXBlIGdldFR5cGUoKSB7Ci0gICAgICAgICBLZXlUeXBlIGt0 ID0gZ2V0S2V5VHlwZSgpOwotQEAgLTEwOCw2ICsxMTYsMjAgQEAgcHVibGljIGZpbmFsIGNsYXNz IFBLMTFTeW1LZXkgaW1wbGVtZW50cwotICAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1hdCgpIHsK LSAgICAgICAgIHJldHVybiAiUkFXIjsKLSAgICAgfQotKwotKyAgICBwdWJsaWMgU3RyaW5nIGdl dE5pY2tOYW1lKCkgewotKyAgICAgICAgcmV0dXJuIG5pY2tOYW1lOwotKyAgICB9Ci0rCi0rICAg IHB1YmxpYyB2b2lkIHNldE5pY2tOYW1lKFN0cmluZyBuaWNrTmFtZSkgewotKyAgICAgICAgdGhp cy5uaWNrTmFtZSA9IG5pY2tOYW1lOwotKwotKyAgICAgICAgaWYoIG5pY2tOYW1lICE9IG51bGwp IHsKLSsgICAgICAgICAgICBzZXROaWNrTmFtZU5hdGl2ZShuaWNrTmFtZSk7Ci0rICAgICAgICB9 Ci0rICAgIH0KLSsKLSsgICAgcHVibGljIG5hdGl2ZSB2b2lkIHNldE5pY2tOYW1lTmF0aXZlKFN0 cmluZyBuaWNrTmFtZSk7Ci0gfQotIAotIGNsYXNzIFN5bUtleVByb3h5IGV4dGVuZHMgS2V5UHJv eHkgewotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtj czExL1BLMTFTeW1tZXRyaWNLZXlEZXJpdmVyLmMuam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3ltbWV0cmljS2V5RGVyaXZlci5jCi0tLS0g Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTeW1tZXRy aWNLZXlEZXJpdmVyLmMuam1hZ25lCTIwMTYtMDQtMTQgMTY6MjY6MTguNjExNzIzNzYzIC0wNzAw Ci0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFT eW1tZXRyaWNLZXlEZXJpdmVyLmMJMjAxNi0wNS0xNyAxNDoxMzozNS40NTY1NzQwODIgLTA3MDAK LUBAIC0wLDAgKzEsMzY0IEBACi0rLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgot KyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotKyAqCi0rICogVGhlIGNvbnRl bnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z ZSBWZXJzaW9uCi0rICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0rICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v cmcvTVBMLwotKyAqCi0rICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSsgKiBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK LSsgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0 YXRpb25zIHVuZGVyIHRoZQotKyAqIExpY2Vuc2UuCi0rICoKLSsgKiBUaGUgT3JpZ2luYWwgQ29k ZSBpcyB0aGUgTmV0c2NhcGUgU2VjdXJpdHkgU2VydmljZXMgZm9yIEphdmEuCi0rICoKLSsgKiBU aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSsgKiBOZXRzY2Fw ZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSsgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAKLSsgKiB0aGUg SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0rICoKLSsgKiBDb250cmli dXRvcihzKToKLSsgKgotKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZp bGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0rICogZWl0aGVyIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCi0r ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs YXRlciAodGhlICJMR1BMIiksCi0rICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0 aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSsgKiBvZiB0aG9zZSBh Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp bGUgb25seQotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSsgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo aXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotKyAqIGRl Y2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g d2l0aCB0aGUgbm90aWNlCi0rICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSsgKiB0aGUgcHJvdmlzaW9u cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu ZGVyCi0rICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg TEdQTC4KLSsgKgotKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0rI2luY2x1 ZGUgIl9qbmkvb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExU3ltbWV0cmljS2V5RGVyaXZlci5o IgotKyNpbmNsdWRlIDxwbGFyZW5hLmg+Ci0rI2luY2x1ZGUgPHNlY21vZHQuaD4KLSsjaW5jbHVk ZSA8cGsxMWZ1bmMuaD4KLSsjaW5jbHVkZSA8cGsxMXBxZy5oPgotKyNpbmNsdWRlIDxzZWNlcnIu aD4KLSsjaW5jbHVkZSA8bnNwci5oPgotKyNpbmNsdWRlIDxrZXkuaD4KLSsjaW5jbHVkZSA8c2Vj YXNuMS5oPgotKyNpbmNsdWRlIDxiYXNlNjQuaD4KLSsjaW5jbHVkZSA8Y2VydC5oPgotKyNpbmNs dWRlIDxjcnlwdG9oaS5oPgotKwotKyNpbmNsdWRlIDxqc3N1dGlsLmg+Ci0rI2luY2x1ZGUgPGpz c19leGNlcHRpb25zLmg+Ci0rI2luY2x1ZGUgPGpzc19iaWdpbnQuaD4KLSsjaW5jbHVkZSA8QWxn b3JpdGhtLmg+Ci0rI2luY2x1ZGUgPGpuaS5oPgotKyNpbmNsdWRlIDxzZWNpdGVtLmg+Ci0rI2lu Y2x1ZGUgImphdmFfaWRzLmgiCi0rCi0rI2luY2x1ZGUgInBrMTF1dGlsLmgiCi0rI2luY2x1ZGUg PHBsc3RyLmg+Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICogRXhwb3NlIHRoZSBOU1MgZnVuY3Rp b25hbGl0eSBhdCBsb3cgbGV2ZWwsIG9uZSBzaG91bGQga25vdyB3aGF0IHRvIGRvCi0rICogYXQg dGhlIEphdmEgbGV2ZWwuIAotKyAqLwotKwotK0pOSUVYUE9SVCBqb2JqZWN0IEpOSUNBTEwgSmF2 YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFTeW1tZXRyaWNLZXlEZXJpdmVyX25hdGl2ZURl cml2ZVN5bUtleQotKyAgKEpOSUVudiAqIGVudiwgam9iamVjdCB0aGlzLGpvYmplY3QgdG9rZW5P YmosIAotKyAgam9iamVjdCBiYXNlS2V5T2JqLCBqb2JqZWN0IHNlY29uZGFyeUtleU9iaiwgCi0r ICBqbG9uZyBkZXJpdmVNZWNoYW5pc20sIGpieXRlQXJyYXkgcGFyYW0sIGpieXRlQXJyYXkgaXYs IGpsb25nIHRhcmdldE1lY2hhbmlzbSwgamxvbmcgb3BlcmF0aW9uLCBqbG9uZyBrZXlTaXplKQot K3sKLSsgICAgam9iamVjdCBrZXlPYmogPSBOVUxMOwotKyAgICBQSzExU2xvdEluZm8gKnNsb3Q9 TlVMTDsKLSsgICAgUEsxMVNsb3RJbmZvICpiZXN0U2xvdCA9IE5VTEw7Ci0rICAgIFBLMTFTbG90 SW5mbyAqc2xvdEZvcktleSA9IE5VTEw7Ci0rICAgIFBLMTFTbG90SW5mbyAqc2xvdEZvclNlY29u ZGFyeUtleSA9IE5VTEw7Ci0rICAgIFBLMTFTbG90SW5mbyAqZmluYWxTbG90ID0gTlVMTDsKLSsg ICAgUEsxMVNsb3RJbmZvICpmaW5hbFNlY29uZGFyeVNsb3QgPSBOVUxMOwotKyAgICBQSzExU2xv dEluZm8gKmZpbmFsQmFzZUtleVNsb3QgPSBOVUxMOwotKwotKyAgICBQSzExU3ltS2V5ICpiYXNl S2V5ID0gTlVMTDsKLSsgICAgUEsxMVN5bUtleSAqYmVzdEJhc2VLZXkgPSBOVUxMOwotKyAgICBQ SzExU3ltS2V5ICpmaW5hbEJhc2VLZXkgPSBOVUxMOwotKyAgICBQSzExU3ltS2V5ICpuZXdLZXkg PSBOVUxMOwotKwotKyAgICBQSzExU3ltS2V5ICpzZWNvbmRhcnlLZXkgPSBOVUxMOwotKyAgICBQ SzExU3ltS2V5ICpiZXN0U2Vjb25kYXJ5S2V5ID0gTlVMTDsKLSsgICAgUEsxMVN5bUtleSAqZmlu YWxTZWNvbmRhcnlLZXkgPSBOVUxMOwotKyAgICBQSzExU3ltS2V5ICpkZXJpdmVkS2V5ID0gTlVM TDsKLSsgICAgamJ5dGUgKnBhcmFtVmFsdWUgPSBOVUxMOwotKyAgICBpbnQgcGFyYW1MZW5ndGgg PSAwOwotKyAgICBqYnl0ZSAqaXZWYWx1ZSA9IE5VTEw7Ci0rICAgIGludCBpdkxlbmd0aCA9IDA7 Ci0rCi0rCi0rICAgIENLX09CSkVDVF9IQU5ETEUga2V5aGFuZGxlID0gMDsKLSsKLSsgICAgQ0tf QUVTX0NCQ19FTkNSWVBUX0RBVEFfUEFSQU1TIGFlczsKLSsgICAgQ0tfREVTX0NCQ19FTkNSWVBU X0RBVEFfUEFSQU1TIGRlczsKLSsgICAgQ0tfS0VZX0RFUklWQVRJT05fU1RSSU5HX0RBVEEgc3Ry aW5nOwotKwotKyAgICBTRUNJdGVtIHBhcmFtc0l0ZW0gPSB7IHNpQnVmZmVyLCBOVUxMLCAwIH07 Ci0rCi0rICAgIFBSX0FTU0VSVChlbnYhPU5VTEwgJiYgdGhpcyE9TlVMTCk7Ci0rCi0rICAgIGlm KCBiYXNlS2V5T2JqID09IDApIHsKLSsgICAgICAgIFBSX2ZwcmludGYoUFJfU1RET1VULCJiYXNl S2V5T2JqIGNhbiBub3QgYmUgbnVsbCFcbiIpOwotKyAgICAgICAgZ290byBsb3NlcjsKLSsgICAg fQotKwotKyAgICBpZiggcGFyYW0gIT0gTlVMTCkgewotKyAgICAgICAgcGFyYW1WYWx1ZSA9ICgq ZW52KS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZW52LHBhcmFtLCBOVUxMKTsKLSsgICAgICAgIHBh cmFtTGVuZ3RoID0gKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYscGFyYW0pOwotKyAgICB9Ci0r Ci0rICAgIGlmKCBpdiAhPSBOVUxMKSB7Ci0rICAgICAgICBpdlZhbHVlID0gKCplbnYpLT5HZXRC eXRlQXJyYXlFbGVtZW50cyhlbnYsaXYsIE5VTEwpOwotKyAgICAgICAgaXZMZW5ndGggPSAoKmVu diktPkdldEFycmF5TGVuZ3RoKGVudixpdik7Ci0rICAgIH0KLSsKLSsgICAgLyogU2V0IHVwIHRo ZSBwYXJhbXMgZGF0YSBmb3IgdGhlIFBLMTFfRGVyaXZlIGZhbWlseSAqLwotKwotKyAgICBzd2l0 Y2ggKCBkZXJpdmVNZWNoYW5pc20gKSB7Ci0rICAgICAgICBjYXNlIENLTV9ERVNfRUNCX0VOQ1JZ UFRfREFUQToKLSsgICAgICAgIGNhc2UgQ0tNX0RFUzNfRUNCX0VOQ1JZUFRfREFUQToKLSsgICAg ICAgIGNhc2UgQ0tNX0FFU19FQ0JfRU5DUllQVF9EQVRBOgotKyAgICAgICAgY2FzZSBDS01fQ0FN RUxMSUFfRUNCX0VOQ1JZUFRfREFUQToKLSsgICAgICAgIGNhc2UgQ0tNX1NFRURfRUNCX0VOQ1JZ UFRfREFUQToKLSsgICAgICAgIC8qIFVzZSBDS19LRVlfREVSSVZBVElPTl9TVFJJTkdfREFUQSAq LyAKLSsKLSsgICAgICAgICAgICBzdHJpbmcucERhdGEgPSAodW5zaWduZWQgY2hhciAqKSBwYXJh bVZhbHVlOwotKyAgICAgICAgICAgIHN0cmluZy51bExlbiA9IHBhcmFtTGVuZ3RoOwotKyAgICAg ICAgICAgIHBhcmFtc0l0ZW0uZGF0YSA9ICh2b2lkICopICZzdHJpbmc7Ci0rICAgICAgICAgICAg cGFyYW1zSXRlbS5sZW4gPSBzaXplb2Yoc3RyaW5nKTsKLSsKLSsgICAgICAgIGJyZWFrOwotKyAg ICAgICAgY2FzZSBDS01fREVTX0NCQ19FTkNSWVBUX0RBVEE6Ci0rICAgICAgICBjYXNlIENLTV9E RVMzX0NCQ19FTkNSWVBUX0RBVEE6Ci0rICAgICAgICAvKiBVc2UgQ0tfREVTX0NCQ19FTkNSWVBU X0RBVEFfUEFSQU1TICovCi0rICAgIAotKyAgICAgICAgICAgIGlmKCBpdlZhbHVlID09IE5VTEwp IHsKLSsgICAgICAgICAgICAgICBQUl9mcHJpbnRmKFBSX1NURE9VVCwgIk5lZWQgaXYgcGFyYW0g Zm9yIENLTV9ERVNfQ0JDX0VOQ1JZUFRfREFUQSBvciBDS01fREVTM19DQkNfRU5DUllQVF9EQVRB LiBcbiIpOwotKyAgICAgICAgICAgICAgIGdvdG8gbG9zZXI7Ci0rICAgICAgICAgICAgfQotKwot KyAgICAgICAgICAgICBpZiggaXZMZW5ndGggIT0gOCkgewotKyAgICAgICAgICAgICAgIFBSX2Zw cmludGYoUFJfU1RET1VULCAiTmVlZCBpdiBwYXJhbSBmb3IgQ0tNX0RFU19DQkNfRU5DUllQVF9E QVRBICBzdHJ1Y3R1cmUgdG8gYmUgOCBieXRlcyEuIFxuIik7Ci0rICAgICAgICAgICAgICAgZ290 byBsb3NlcjsKLSsgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgICAgZGVzLnBEYXRhID0gKHVu c2lnbmVkIGNoYXIgKikgcGFyYW1WYWx1ZTsKLSsgICAgICAgICAgICBkZXMubGVuZ3RoID0gcGFy YW1MZW5ndGg7Ci0rICAgICAgICAgICAgUE9SVF9NZW1jcHkoZGVzLml2LGl2VmFsdWUsaXZMZW5n dGgpOwotKyAgICAgICAgICAgIHBhcmFtc0l0ZW0uZGF0YSA9ICh2b2lkICopICZkZXM7Ci0rICAg ICAgICAgICAgcGFyYW1zSXRlbS5sZW4gPSBzaXplb2YoZGVzKTsKLSsgICAgCi0rICAgICAgICBi cmVhazsKLSsKLSsgICAgICAgIGNhc2UgQ0tNX0FFU19DQkNfRU5DUllQVF9EQVRBOgotKyAgICAg ICAgY2FzZSBDS01fQ0FNRUxMSUFfQ0JDX0VOQ1JZUFRfREFUQToKLSsgICAgICAgIGNhc2UgQ0tN X1NFRURfQ0JDX0VOQ1JZUFRfREFUQToKLSsgICAgICAgIC8qIFVzZSBDS19BRVNfQ0JDX0VOQ1JZ UFRfREFUQV9QQVJBTVMgKi8KLSsgICAgICAgICAgICAKLSsgICAgICAgICAgICBpZiAoIGl2VmFs dWUgPT0gTlVMTCApIHsKLSsgICAgICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsICJO ZWVkIGl2IHBhcmFtIGZvciBDQkMgZW5jcnlwdCBkZXJpdmUgZm9yIEFFUywgb3IgQ0FNRUxMSUEg b3IgU0VFRC4gXG4iKTsKLSsgICAgICAgICAgICAgICAgZ290byBsb3NlcjsKLSsgICAgICAgICAg ICB9Ci0rCi0rICAgICAgICAgICAgaWYoIGl2TGVuZ3RoICE9IDE2KSB7Ci0rICAgICAgICAgICAg ICAgIFBSX2ZwcmludGYoUFJfU1RET1VULCAiTmVlZCBpdiBwYXJhbSBmb3IgQ0tfQUVTX0NCQ19F TkNSWVBUX0RBVEFfUEFSQU1TIHN0cnVjdHVyZSB0byBiZSAxNiBieXRlcyEuIFxuIik7Ci0rICAg ICAgICAgICAgICAgIGdvdG8gbG9zZXI7Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAg IGFlcy5wRGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIHBhcmFtVmFsdWU7Ci0rICAgICAgICAgICAg YWVzLmxlbmd0aCA9IHBhcmFtTGVuZ3RoOwotKyAgICAgICAgICAgIFBPUlRfTWVtY3B5KGFlcy5p dixpdlZhbHVlLGl2TGVuZ3RoKTsKLSsgICAgICAgICAgICBwYXJhbXNJdGVtLmRhdGEgPSAodm9p ZCAqKSAmYWVzOwotKyAgICAgICAgICAgIHBhcmFtc0l0ZW0ubGVuID0gc2l6ZW9mKGFlcyk7Ci0r ICAgICAgICBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICAgICAgcGFyYW1zSXRl bS5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgcGFyYW1WYWx1ZTsKLSsgICAgICAgICAgICBwYXJh bXNJdGVtLmxlbiA9IHBhcmFtTGVuZ3RoOwotKyAgICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsg ICAgLyogR2V0IHNsb3QgKi8KLSsgICAgaWYoIEpTU19QSzExX2dldFRva2VuU2xvdFB0cihlbnYs IHRva2VuT2JqLCAmc2xvdCkgIT0gUFJfU1VDQ0VTUykgewotKyAgICAgICAgZ290byBsb3NlcjsK LSsgICAgfQotKwotKyAgICAvKiBHZXQgYmFzZSBrZXkgKi8KLSsKLSsgICAgaWYoIEpTU19QSzEx X2dldFN5bUtleVB0cihlbnYsIGJhc2VLZXlPYmosICZiYXNlS2V5KSAhPSBQUl9TVUNDRVNTKSB7 Ci0rICAgICAgICBQUl9mcHJpbnRmKFBSX1NURE9VVCwgIlBLMTFTeW1tZXRyaWNLZXlEZXJpdmVy Lm5hdGl2ZURlcml2ZVN5bUtleTogVW5hYmxlIHRvIGV4dHJhY3Qgc3ltbWV0cmljIGJhc2Uga2V5 ISIpOwotKyAgICAgICAgZ290byBsb3NlcjsKLSsgICAgfQotKwotKyAgICAvKiBBc2sgTlNTIHdo YXQgdGhlIGJlc3Qgc2xvdCBmb3IgdGhlIGdpdmVuIG1lY2hhbmlzbSAqLwotKwotKyAgICBiZXN0 U2xvdCA9IFBLMTFfR2V0QmVzdFNsb3QoZGVyaXZlTWVjaGFuaXNtLCBOVUxMKTsKLSsKLSsgICAg aWYoIGJlc3RTbG90ID09IE5VTEwpIHsKLSsgICAgICAgIFBSX2ZwcmludGYoUFJfU1RET1VULCJQ SzExU3ltbWV0cmljS2V5RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXk6IENhbid0IGZpbmQgc3Vp dGFibGUgc2xvdCBmb3Igc3ltIGtleSBkZXJpdmF0aW9uISBcbiIpOwotKyAgICAgICAgZ290byBs b3NlcjsKLSsgICAgfQotKwotKyAgICBzbG90Rm9yS2V5ID0gUEsxMV9HZXRTbG90RnJvbUtleShi YXNlS2V5KTsKLSsKLSsgICAgaW50IGtleU9uUmVxdWVzdGVkU2xvdCA9IDA7Ci0rICAgIGludCBi YXNlS2V5TW92ZWQ9IDA7Ci0rCi0rICAgIGlmKHNsb3RGb3JLZXkgIT0gc2xvdCkgewotKyAgICAg ICAga2V5T25SZXF1ZXN0ZWRTbG90ID0gMDsKLSsgICAgfSAgZWxzZSB7Ci0rICAgICAgICBrZXlP blJlcXVlc3RlZFNsb3QgPSAxOwotKyAgICAgICAgZmluYWxCYXNlS2V5U2xvdCA9IHNsb3Q7Ci0r ICAgIH0gCi0rCi0rICAgIGlmICggUEsxMV9Eb2VzTWVjaGFuaXNtKCBzbG90LCBkZXJpdmVNZWNo YW5pc20pKSB7Ci0rICAgICAgICBpZiAoIGtleU9uUmVxdWVzdGVkU2xvdCApIHsKLSsgICAgICAg ICAgICBmaW5hbEJhc2VLZXkgPSBiYXNlS2V5OwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAg ICAgICBiZXN0QmFzZUtleSA9IFBLMTFfTW92ZVN5bUtleSggc2xvdCwgQ0tBX0VOQ1JZUFQsIDAs IFBSX0ZBTFNFLCBiYXNlS2V5ICk7Ci0rICAgICAgICAgICAgaWYoYmVzdEJhc2VLZXkgPT0gTlVM TCkgewotKyAgICAgICAgICAgICAgICBQUl9mcHJpbnRmKFBSX1NURE9VVCwiUEsxMVN5bW1ldHJp Y0tleURlcml2ZXIubmF0aXZlRGVyaXZlU3ltS2V5OiAgQ2FuJ3QgbW92ZSBCYXNlIEtleSB0byBy ZXF1ZXN0ZWQgc2xvdCFcbiIpOwotKyAgICAgICAgICAgICAgICBnb3RvIGxvc2VyOwotKyAgICAg ICAgICAgIH0KLSsgICAgICAgICAgICBiYXNlS2V5TW92ZWQgPSAxOwotKyAgICAgICAgICAgIGZp bmFsQmFzZUtleSA9IGJlc3RCYXNlS2V5OwotKyAgICAgICAgICAgIGZpbmFsQmFzZUtleVNsb3Qg PSBzbG90OwotKyAgICAgICAgfQotKwotKyAgICB9IGVsc2UgewotKyAgICAgICAgICAgIGJlc3RC YXNlS2V5ID0gUEsxMV9Nb3ZlU3ltS2V5KCBiZXN0U2xvdCwgQ0tBX0VOQ1JZUFQsIDAsIFBSX0ZB TFNFLCBiYXNlS2V5ICk7Ci0rICAgICAgICAgICAgaWYoYmVzdEJhc2VLZXkgPT0gTlVMTCkgewot KyAgICAgICAgICAgICAgICBQUl9mcHJpbnRmKFBSX1NURE9VVCwiUEsxMVN5bW1ldHJpY0tleURl cml2ZXIubmF0aXZlRGVyaXZlU3ltS2V5OiAgQ2FuJ3QgbW92ZSBCYXNlIEtleSB0byBiZXN0IHNs b3QhXG4iKTsKLSsgICAgICAgICAgICAgICAgZ290byBsb3NlcjsKLSsgICAgICAgICAgICB9Ci0r ICAgICAgICAgICAgYmFzZUtleU1vdmVkID0gMTsKLSsgICAgICAgICAgICBmaW5hbEJhc2VLZXkg PSBiZXN0QmFzZUtleTsKLSsgICAgICAgICAgICBmaW5hbEJhc2VLZXlTbG90ID0gYmVzdFNsb3Q7 Ci0rICAgIH0KLSsKLSsgICAgLyogQXNzdW1lIHdlIHdhbnQgdG8gZG8gYSBjb25jYXRlbmF0aW9u IGZhbWlseSBoZXJlICovCi0rCi0rICAgIGlmKCBzZWNvbmRhcnlLZXlPYmogIT0gTlVMTCkgewot KyAgICAgICAgaWYoIEpTU19QSzExX2dldFN5bUtleVB0cihlbnYsIHNlY29uZGFyeUtleU9iaiwg JnNlY29uZGFyeUtleSkgIT0gUFJfU1VDQ0VTUykgewotKyAgICAgICAgICAgIFBSX2ZwcmludGYo UFJfU1RET1VULCJQSzExU3ltbWV0cmljS2V5RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXk6ICBD YW4ndCBmaW5kIHNlY29uZGFyeSBzeW0ga2V5IVxuIik7Ci0rICAgICAgICAgICAgZ290byBsb3Nl cjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgc2Vjb25kYXJ5IGtl eSBpcyBpbiB0aGUgcHJvcGVyIHNsb3QgdG8gZG8gY29uY2F0ZW5hdGlvbiAqLwotKwotKyAgICAg ICAgc2xvdEZvclNlY29uZGFyeUtleSA9IFBLMTFfR2V0U2xvdEZyb21LZXkoIHNlY29uZGFyeUtl eSApOwotKwotKyAgICAgICAgaWYoIGZpbmFsQmFzZUtleVNsb3QgIT0gc2xvdEZvclNlY29uZGFy eUtleSApIHsKLSsKLSsgICAgICAgICAgICBmaW5hbFNlY29uZGFyeUtleSA9IFBLMTFfTW92ZVN5 bUtleSAoZmluYWxCYXNlS2V5U2xvdCwgQ0tBX0VOQ1JZUFQsIDAsIFBSX0ZBTFNFLCBzZWNvbmRh cnlLZXkpOwotKwotKyAgICAgICAgICAgIGlmKCBmaW5hbFNlY29uZGFyeUtleSA9PSBOVUxMKSB7 Ci0rICAgICAgICAgICAgICAgIFBSX2ZwcmludGYoUFJfU1RET1VULCJQSzExU3ltbWV0cmljS2V5 RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXksIFByb2JsZW0gbW92aW5nIHNlY29uZGFyeSBrZXkg dG8gcHJvcGVyIHNsb3QuXG4iKTsKLSsgICAgICAgICAgICAgICAgZ290byBsb3NlcjsKLSsgICAg ICAgICAgICB9Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIGZpbmFsU2Vjb25kYXJ5 S2V5ID0gc2Vjb25kYXJ5S2V5OwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYoIHBhcmFtVmFs dWUgPT0gTlVMTCkgewotKyAgICAgICAgICAgIGtleWhhbmRsZSA9IFBLMTFfR2V0U3ltS2V5SGFu ZGxlKGZpbmFsU2Vjb25kYXJ5S2V5KTsKLSsKLSsgICAgICAgICAgICBpZigga2V5aGFuZGxlID09 IDApIHsKLSsgICAgICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsIlBLMTFTeW1tZXRy aWNLZXlEZXJpdmVyLm5hdGl2ZURlcml2ZVN5bUtleSwgY2FuJ3QgZ2V0IGhhbmRsZSBmb3Igc2Vj b25kYXJ5IHN5bSBrZXkuXG4iKTsKLSsgICAgICAgICAgICAgICAgZ290byBsb3NlcjsKLSsgICAg ICAgICAgICB9Ci0rCi0rICAgICAgICAgICAgcGFyYW1zSXRlbS5kYXRhPSh1bnNpZ25lZCBjaGFy ICopICZrZXloYW5kbGU7Ci0rICAgICAgICAgICAgcGFyYW1zSXRlbS5sZW49c2l6ZW9mKGtleWhh bmRsZSk7Ci0rCi0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIFBSX2ZwcmludGYoUFJf U1RET1VULCJQSzExU3ltbWV0cmljS2V5RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXk6IGluY29y cmVjdCBpbnB1dCBwYXJhbWV0ZXIgcHJvdmlkZWQhXG4iKTsKLSsgICAgICAgICAgICBnb3RvIGxv c2VyOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGRlcml2ZWRLZXkgPSBQSzExX0Rlcml2 ZShmaW5hbEJhc2VLZXksIGRlcml2ZU1lY2hhbmlzbSwgJnBhcmFtc0l0ZW0sIHRhcmdldE1lY2hh bmlzbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcGVyYXRpb24sIGtleVNpemUpOwotKyAgICBpZihkZXJpdmVkS2V5ID09IE5V TEwpIHsKLSsgICAgICAgIFBSX2ZwcmludGYoUFJfU1RET1VULAotKyAgICAgICAgICAgICAgICAg ICAgIkVSUk9SOiBDYW4ndCBkZXJpdmUgc3ltbWV0cmljIGtleSwgZXJyb3I6ICVkIFxuIixQUl9H ZXRFcnJvcigpKTsKLSsgICAgICAgIGdvdG8gbG9zZXI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCAo ZmluYWxTbG90ID0gIFBLMTFfR2V0U2xvdEZyb21LZXkoZGVyaXZlZEtleSApKSAhPSBzbG90KSB7 Ci0rICAgICAgICBuZXdLZXkgPSAgUEsxMV9Nb3ZlU3ltS2V5ICggc2xvdCwgQ0tBX0VOQ1JZUFQs IDAsIFBSX0ZBTFNFLCBkZXJpdmVkS2V5KTsKLSsKLSsgICAgICAgIGlmICggbmV3S2V5ID09IE5V TEwgKSB7Ci0rICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsIlBLMTFTeW1tZXRyaWNL ZXlEZXJpdmVyLm5hdGl2ZURlcml2ZVN5bUtleTogZXJyb3IgbW92aW5nIGtleSB0byBvcmlnaW5h bCBzbG90LCByZXR1cm4gYW55d2F5LiBcbiIpOwotKyAgICAgICAgICAgIG5ld0tleSA9IGRlcml2 ZWRLZXk7Ci0rICAgICAgICAgICAgZGVyaXZlZEtleSA9IE5VTEw7Ci0rICAgICAgICB9Ci0rICAg ICAgIAotKyAgICB9ICBlbHNlIHsKLSsgICAgICAgIG5ld0tleSA9IGRlcml2ZWRLZXk7Ci0rICAg ICAgICBkZXJpdmVkS2V5ID0gTlVMTDsKLSsgICAgfQotKwotKyAgICBrZXlPYmogPSBKU1NfUEsx MV93cmFwU3ltS2V5KGVudiwgJm5ld0tleSk7Ci0rCi0rbG9zZXI6Ci0rCi0rICAgIGlmICggYmVz dEJhc2VLZXkgIT0gTlVMTCApIHsKLSsgICAgICAgUEsxMV9GcmVlU3ltS2V5ICggYmVzdEJhc2VL ZXkgKTsKLSsgICAgICAgYmVzdEJhc2VLZXkgPSBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmICgg YmVzdFNlY29uZGFyeUtleSAhPSBOVUxMICkgewotKyAgICAgICBQSzExX0ZyZWVTeW1LZXkgKCBi ZXN0U2Vjb25kYXJ5S2V5ICk7Ci0rICAgICAgIGJlc3RTZWNvbmRhcnlLZXkgPSBOVUxMOwotKyAg ICB9Ci0rCi0rICAgIGlmICggZGVyaXZlZEtleSAhPSBOVUxMKSB7Ci0rICAgICAgUEsxMV9GcmVl U3ltS2V5ICggZGVyaXZlZEtleSApOwotKyAgICAgIGRlcml2ZWRLZXkgPSBOVUxMOwotKyAgICB9 Ci0rCi0rICAgIGlmIChiZXN0U2xvdCAhPSBOVUxMICkgewotKyAgICAgICBQSzExX0ZyZWVTbG90 KGJlc3RTbG90KTsKLSsgICAgICAgYmVzdFNsb3QgPSBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlm ICggc2xvdEZvcktleSAhPSBOVUxMICkgewotKyAgICAgICBQSzExX0ZyZWVTbG90KCBzbG90Rm9y S2V5ICk7Ci0rICAgICAgIHNsb3RGb3JLZXkgPSBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmICgg ZmluYWxTbG90ICE9IE5VTEwgKSB7Ci0rICAgICAgIFBLMTFfRnJlZVNsb3QoIGZpbmFsU2xvdCAp OwotKyAgICAgICBmaW5hbFNsb3QgPSBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmICggZmluYWxT ZWNvbmRhcnlTbG90ICE9IE5VTEwgKSB7Ci0rICAgICAgIFBLMTFfRnJlZVNsb3QoIGZpbmFsU2Vj b25kYXJ5U2xvdCApOwotKyAgICAgICBmaW5hbFNlY29uZGFyeVNsb3QgPSBOVUxMOwotKyAgICB9 Ci0rCi0rICAgIGlmICggc2xvdEZvclNlY29uZGFyeUtleSAhPSBOVUxMICkgewotKyAgICAgICBQ SzExX0ZyZWVTbG90KCBzbG90Rm9yU2Vjb25kYXJ5S2V5ICk7Ci0rICAgICAgIHNsb3RGb3JTZWNv bmRhcnlLZXkgPSBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmKHBhcmFtVmFsdWUpIHsKLSsgICAg ICAgICgqZW52KS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGVudiwgcGFyYW0sIChqYnl0ZSop cGFyYW1WYWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEpOSV9BQk9SVCk7Ci0rICAgIH0KLSsgICAgaWYoaXZWYWx1ZSkg ewotKyAgICAgICAgKCplbnYpLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZW52LCBpdiwgKGpi eXRlKilpdlZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSk5JX0FCT1JUKTsKLSsgICAgfQotKwotKyAgICBpZigga2V5T2JqID09 IE5VTEwpIHsKLSsgICAgICAgIEpTU190aHJvd01zZ1ByRXJyKGVudiwgVE9LRU5fRVhDRVBUSU9O LCAiVW5hYmxlIHRvIGRlcml2ZSBzeW1tZXRyaWMga2V5ISAiCi0rICAgICAgICAgICAgICAgICAi ZmFpbHVyZSEiKTsKLSsgICAgfQotKwotKyAgICByZXR1cm4ga2V5T2JqOyAKLSt9Ci1kaWZmIC11 cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1l dHJpY0tleURlcml2ZXIuamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTeW1tZXRyaWNLZXlEZXJpdmVyLmphdmEKLS0tLSAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1ldHJpY0tleURl cml2ZXIuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjoyODoyOS4xNzk4MjMwMTcgLTA3MDAKLSsr KyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1l dHJpY0tleURlcml2ZXIuamF2YQkyMDE2LTA0LTE0IDE2OjI4OjM2LjE4Njc3NDY4MCAtMDcwMAot QEAgLTAsMCArMSwxNTggQEAKLSsvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0r ICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0rICoKLSsgKiBUaGUgY29udGVu dHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNl IFZlcnNpb24KLSsgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSsgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0rICogaHR0cDovL3d3dy5tb3ppbGxhLm9y Zy9NUEwvCi0rICoKLSsgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotKyAqIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQot KyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh dGlvbnMgdW5kZXIgdGhlCi0rICogTGljZW5zZS4KLSsgKgotKyAqIFRoZSBPcmlnaW5hbCBDb2Rl IGlzIHRoZSBOZXRzY2FwZSBTZWN1cml0eSBTZXJ2aWNlcyBmb3IgSmF2YS4KLSsgKgotKyAqIFRo ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotKyAqIE5ldHNjYXBl IENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhl IEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAotKyAqIHRoZSBJ bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsgKgotKyAqIENvbnRyaWJ1 dG9yKHMpOgotKyAqCi0rICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmls ZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSsgKiBlaXRoZXIgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSsg KiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxh dGVyICh0aGUgIkxHUEwiKSwKLSsgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotKyAqIG9mIHRob3NlIGFi b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls ZSBvbmx5Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0rICogZGVj aXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3 aXRoIHRoZSBub3RpY2UKLSsgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUg R1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKyAqIHRoZSBwcm92aXNpb25z IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k ZXIKLSsgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM R1BMLgotKyAqCi0rICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLSsKLStwYWNr YWdlIG9yZy5tb3ppbGxhLmpzcy5wa2NzMTE7Ci0rCi0raW1wb3J0IG9yZy5tb3ppbGxhLmpzcy5j cnlwdG8uKjsKLStpbXBvcnQgb3JnLm1vemlsbGEuanNzLnV0aWwuQXNzZXJ0OwotK2ltcG9ydCBz dW4uc2VjdXJpdHkucGtjczExLndyYXBwZXIuKjsKLStpbXBvcnQgamF2YS5zZWN1cml0eS5JbnZh bGlkS2V5RXhjZXB0aW9uOwotKwotKwotKy8qVGhpcyBvcGVyYXRpb24gaXMgcGtjczExIGJhc2Vk IG9ubHkgKi8KLSsKLStwdWJsaWMgY2xhc3MgUEsxMVN5bW1ldHJpY0tleURlcml2ZXIgaW1wbGVt ZW50cyBTeW1tZXRyaWNLZXlEZXJpdmVyIHsKLSsKLSsgICAgcHJpdmF0ZSBQSzExVG9rZW4gdG9r ZW4gPSBudWxsOwotKyAgICBwcml2YXRlIFN5bW1ldHJpY0tleSBiYXNlS2V5ID0gbnVsbDsKLSsg ICAgcHJpdmF0ZSBTeW1tZXRyaWNLZXkgc2Vjb25kYXJ5S2V5ID0gbnVsbDsKLSsgICAgcHJpdmF0 ZSBsb25nIGRlcml2ZU1lY2hhbmlzbSA9IDA7Ci0rICAgIHByaXZhdGUgbG9uZyB0YXJnZXRNZWNo YW5pc20gPSAwOwotKyAgICBwcml2YXRlIGxvbmcgb3BlcmF0aW9uID0gMDsKLSsgICAgcHJpdmF0 ZSBsb25nIGtleVNpemUgPSAwOwotKyAgICBwcml2YXRlIGJ5dGVbXSBwYXJhbSA9IG51bGw7Ci0r ICAgIHByaXZhdGUgYnl0ZVtdIGl2ID0gbnVsbDsKLSsKLSsgICAgcHVibGljIFBLMTFTeW1tZXRy aWNLZXlEZXJpdmVyKFBLMTFUb2tlbiB0b2tlbikKLSsgICAgewotKyAgICAgICAgdGhpcy50b2tl biA9IHRva2VuOwotKyAgICB9Ci0rCi0rICAgIC8qIFVzZSB3aXRoIHRoZSBlbmNyeXB0IHR5cGUg bWVjaGFuaXNtcyAKLSsKLSsgICAgRXhhbXBsZTogaW5pdERlcml2ZSgKLSsgICAgICAgICAgICAg ICAgICAgIHN5bUtleSwgKFBLQ1MxMUNvbnN0YW50cy5DS01fREVTM19FQ0JfRU5DUllQVF9EQVRB KSA0MzU0TCwgZGVyaXZhdGlvbkRhdGEsIG51bGwsCi0rICAgICAgICAgICAgICAgICAgICBQS0NT MTFDb25zdGFudHMuQ0tNX0RFUzNfRUNCLCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwgMTYp OwotKwotKwotKyAgICovCi0rICAgIHB1YmxpYyB2b2lkIGluaXREZXJpdmUoU3ltbWV0cmljS2V5 IGJhc2VLZXksIGxvbmcgZGVyaXZlTWVjaCwgYnl0ZVtdIHBhcmFtLCBieXRlW10gaXYsIAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGFyZ2V0TWVjaCwgbG9uZyBvcGVyYXRp b24sIGxvbmcga2V5U2l6ZSkgdGhyb3dzIEludmFsaWRLZXlFeGNlcHRpb24KLSsgICAgewotKyAg ICAgICAgcmVzZXQoKTsKLSsKLSsgICAgICAgIGlmKGJhc2VLZXkgPT0gbnVsbCkgewotKyAgICAg ICAgICAgIHRocm93IG5ldyBJbnZhbGlkS2V5RXhjZXB0aW9uKCJLZXkgaXMgbnVsbCIpOwotKyAg ICAgICAgfQotKwotKyAgICAgICAgdGhpcy5iYXNlS2V5ID0gYmFzZUtleTsKLSsgICAgICAgIHRo aXMuZGVyaXZlTWVjaGFuaXNtID0gZGVyaXZlTWVjaDsKLSsgICAgICAgIHRoaXMudGFyZ2V0TWVj aGFuaXNtID0gdGFyZ2V0TWVjaDsKLSsgICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9u OwotKwotKyAgICAgICAgaWYgKCBwYXJhbSAhPSBudWxsKSB7Ci0rICAgICAgICAgICAgdGhpcy5w YXJhbSA9IG5ldyBieXRlW3BhcmFtLmxlbmd0aF07Ci0rICAgICAgICAgICAgU3lzdGVtLmFycmF5 Y29weShwYXJhbSwwLHRoaXMucGFyYW0sMCxwYXJhbS5sZW5ndGgpOwotKyAgICAgICAgfQotKwot KyAgICAgICAgaWYgKCBpdiAhPSBudWxsKSB7Ci0rICAgICAgICAgICAgdGhpcy5pdiA9IG5ldyBi eXRlW2l2Lmxlbmd0aF07Ci0rICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShpdiwwLHRoaXMu aXYsMCxpdi5sZW5ndGgpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgdGhpcy5rZXlTaXplID0g a2V5U2l6ZTsKLSsKLSsgICAgfQotKwotKyAgICAvKiBVc2Ugd2l0aCBrZXkgZXh0cmFjdGlvbiBh bmQga2V5IGNvbmNhdGFuYXRpb24gbWVjaGFuaXNtcwotKyAgICAgICAKLSsgICAgRXhhbXBsZSBF eHRyYWN0aW9uOgotKyAgICAgICBwYXJhbTogYnl0ZSBhcnJheSB0aGF0IGhhcyB0aGUgYml0IHBv c2l0aW9uIG9mIHdoZXJlIHRvIGV4dHJhY3QKLSsgICAgIGluaXREZXJpdmUoCi0rICAgICAgICAg ICAgICAgIGRlcml2ZWRLZXksIFBLQ1MxMUNvbnN0YW50cy5DS01fRVhUUkFDVF9LRVlfRlJPTV9L RVkscGFyYW0sbnVsbCwKLSsgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLQV9FTkNS WVBULCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSw4KTsKLSsKLSsgICAgRXhhbXBsZSBDb25j YXQ6Ci0rCi0rICAgIGluaXREZXJpdmUoCi0rICAgICAgICAgICAgICAgYmFzZVN5bUtleSxzZWNv bmRhcnlTeW1LZXksIFBLQ1MxMUNvbnN0YW50cy5DS01fQ09OQ0FURU5BVEVfQkFTRV9BTkRfS0VZ LG51bGwsbnVsbCwKLSsgICAgICAgICAgICAgICBQS0NTMTFDb25zdGFudHMuQ0tNX0RFUzNfRUNC LCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwwKTsKLSsKLSsgICAgKi8gCi0rCi0rICAgIHB1 YmxpYyB2b2lkIGluaXREZXJpdmUoU3ltbWV0cmljS2V5IGJhc2VLZXksIFN5bW1ldHJpY0tleSBz ZWNvbmRhcnlLZXksIGxvbmcgZGVyaXZlTWVjaCwgCi0rICAgICAgICBieXRlW10gcGFyYW0sIGJ5 dGVbXSBpdiwgbG9uZyB0YXJnZXRNZWNoLCBsb25nIG9wZXJhdGlvbiwgbG9uZyBrZXlTaXplKSB0 aHJvd3MgSW52YWxpZEtleUV4Y2VwdGlvbgotKyAgICB7Ci0rICAgICAgICByZXNldCgpOwotKwot KyAgICAgICAgaWYgKCBiYXNlS2V5ID09IG51bGwgfHwgc2Vjb25kYXJ5S2V5ID09IG51bGwpIHsK LSsgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtleUV4Y2VwdGlvbigiS2V5IGlzIG51bGwi KTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGluaXREZXJpdmUoYmFzZUtleSwgZGVyaXZlTWVj aCwgcGFyYW0saXYsdGFyZ2V0TWVjaCxvcGVyYXRpb24sa2V5U2l6ZSk7Ci0rICAgICAgICB0aGlz LnNlY29uZGFyeUtleSA9IHNlY29uZGFyeUtleTsKLSsKLSsgICAgfQotKwotKwotKyAgICBwdWJs aWMgU3ltbWV0cmljS2V5IGRlcml2ZSgpCi0rICAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9u Ci0rICAgIHsKLSsgICAgICAgIFN5bW1ldHJpY0tleSByZXN1bHQgPSBkZXJpdmVTeW1LZXkodGhp cy5iYXNlS2V5LHRoaXMuc2Vjb25kYXJ5S2V5LHRoaXMuZGVyaXZlTWVjaGFuaXNtLCB0aGlzLnBh cmFtLCB0aGlzLml2LCB0aGlzLnRhcmdldE1lY2hhbmlzbSwgdGhpcy5vcGVyYXRpb24sdGhpcy5r ZXlTaXplKTsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0rICAgIH0KLSsKLSsgICAgcHJpdmF0 ZSBTeW1tZXRyaWNLZXkKLSsgICAgZGVyaXZlU3ltS2V5KFN5bW1ldHJpY0tleSBiYXNlS2V5LCBT eW1tZXRyaWNLZXkgc2Vjb25kYXJ5S2V5LCBsb25nIGRlcml2ZU1lY2hhbmlzbSwgYnl0ZVtdIHBh cmFtLCBieXRlW10gaXYsIGxvbmcgdGFyZ2V0TWVjaGFuaXNtLCBsb25nIG9wZXJhdGlvbiwgbG9u ZyBrZXlTaXplKQotKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVF eGNlcHRpb24KLSsgICAgewotKyAgICAgICAgcmV0dXJuIG5hdGl2ZURlcml2ZVN5bUtleSh0b2tl biwgYmFzZUtleSwgc2Vjb25kYXJ5S2V5LGRlcml2ZU1lY2hhbmlzbSwgcGFyYW0sIGl2LCB0YXJn ZXRNZWNoYW5pc20sIG9wZXJhdGlvbiwga2V5U2l6ZSk7Ci0rICAgIH0KLSsKLSsgICAgcHVibGlj IG5hdGl2ZSBTeW1tZXRyaWNLZXkgbmF0aXZlRGVyaXZlU3ltS2V5KFBLMTFUb2tlbiB0b2tlbiwg U3ltbWV0cmljS2V5IGJhc2VLZXksIFN5bW1ldHJpY0tleSBzZWNvbmRhcnlLZXksIGxvbmcgZGVy aXZlTWVjaGFuaXNtLCBieXRlW10gcGFyYW0sIGJ5dGVbXSBpdiwKLSsgICAgICAgIGxvbmcgdGFy Z2V0TWVjaGFuaXNtLCBsb25nIG9wZXJhdGlvbiwgbG9uZyBrZXlTaXplKTsKLSsKLSsgICAgcHJp dmF0ZSB2b2lkIHJlc2V0KCkgewotKyAgICAgICAgYmFzZUtleSA9IG51bGw7Ci0rICAgICAgICBz ZWNvbmRhcnlLZXkgPSBudWxsOwotKyAgICAgICAgZGVyaXZlTWVjaGFuaXNtID0gMDsKLSsgICAg ICAgIHRhcmdldE1lY2hhbmlzbSA9IDA7Ci0rICAgICAgICBvcGVyYXRpb24gPSAwOwotKyAgICAg ICAga2V5U2l6ZSA9IDA7Ci0rICAgICAgICBwYXJhbSA9IG51bGw7Ci0rICAgICAgICBpdiA9IG51 bGw7Ci0rICAgfQotK30KLWRpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9QSzExVG9rZW4uamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5qYXZhCi0tLS0gLi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5qYXZhLmptYWduZQky MDE2LTA0LTE0IDE2OjMwOjQ2LjA5ODg3ODQ1OSAtMDcwMAotKysrIC4vbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExVG9rZW4uamF2YQkyMDE2LTA0LTE0IDE3 OjI3OjMwLjkxODM2NzM3MiAtMDcwMAotQEAgLTEzMSw2ICsxMzEsMTEgQEAgcHVibGljIGZpbmFs IGNsYXNzIFBLMTFUb2tlbiBpbXBsZW1lbnRzCi0gICAgICAgICByZXR1cm4gUEsxMUtleUdlbmVy YXRvci5jbG9uZShrZXksIHRoaXMpOwotICAgICB9Ci0gCi0rICAgIHB1YmxpYyBQSzExU3ltbWV0 cmljS2V5RGVyaXZlciBnZXRTeW1tZXRyaWNLZXlEZXJpdmVyKCkKLSsgICAgewotKyAgICAgICAg IHJldHVybiBuZXcgUEsxMVN5bW1ldHJpY0tleURlcml2ZXIodGhpcyk7Ci0rICAgIH0KLSsKLSAg ICAgcHVibGljIEtleVdyYXBwZXIKLSAgICAgZ2V0S2V5V3JhcHBlcihLZXlXcmFwQWxnb3JpdGht IGFsZ29yaXRobSkKLSAgICAgICAgIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIFRv a2VuRXhjZXB0aW9uCi1kaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy90ZXN0cy9TeW1LZXlEZXJpdmluZy5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9TeW1LZXlEZXJpdmluZy5qYXZhCi0tLS0gLi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvU3ltS2V5RGVyaXZpbmcuamF2 YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjozMjo1OC41Mjk5NjQ4NjAgLTA3MDAKLSsrKyAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9TeW1LZXlEZXJpdmluZy5qYXZh CTIwMTYtMDUtMTcgMTE6NDM6NTEuODU4ODYyNTU2IC0wNzAwCi1AQCAtMCwwICsxLDUxNiBAQAot Ky8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKLSsgKiBWZXJzaW9uOiBNUEwgMS4x L0dQTCAyLjAvTEdQTCAyLjEKLSsgKgotKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgotKyAqIDEuMSAo dGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aAotKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKLSsgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSsgKgotKyAqIFNv ZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu ICJBUyBJUyIgYmFzaXMsCi0rICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0rICogZm9yIHRoZSBzcGVjaWZp YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSsg KiBMaWNlbnNlLgotKyAqCi0rICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE5ldHNjYXBlIFNl Y3VyaXR5IFNlcnZpY2VzIGZvciBKYXZhLgotKyAqCi0rICogVGhlIEluaXRpYWwgRGV2ZWxvcGVy IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0rICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29y cG9yYXRpb24uCi0rICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg YXJlIENvcHlyaWdodCAoQykgMTk5OC0yMDAwCi0rICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBB bGwgUmlnaHRzIFJlc2VydmVkLgotKyAqCi0rICogQ29udHJpYnV0b3Iocyk6Ci0rICoKLSsgKiBB bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy IHRoZSB0ZXJtcyBvZgotKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug VmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgotKyAqIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAot KyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh cmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0rICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRv IGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSsgKiB1bmRlciB0 aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg b3RoZXJzIHRvCi0rICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSsgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0 aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKyAq IGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElm IHlvdSBkbyBub3QgZGVsZXRlCi0rICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50 IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgotKyAqIHRoZSB0ZXJtcyBv ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCi0rICoKLSsgKiAqKioq KiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwotKwotK3BhY2thZ2Ugb3JnLm1vemlsbGEuanNz LnRlc3RzOwotKwotK2ltcG9ydCBvcmcubW96aWxsYS5qc3MuY3J5cHRvLio7Ci0raW1wb3J0IG9y Zy5tb3ppbGxhLmpzcy5DcnlwdG9NYW5hZ2VyOwotK2ltcG9ydCBvcmcubW96aWxsYS5qc3MudXRp bC5Bc3NlcnQ7Ci0raW1wb3J0IG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuKjsKLStpbXBvcnQgc3Vu LnNlY3VyaXR5LnBrY3MxMS53cmFwcGVyLlBLQ1MxMUNvbnN0YW50czsKLStpbXBvcnQgamF2YS5u aW8uQnl0ZUJ1ZmZlcjsKLStpbXBvcnQgamF2YS51dGlsLkFycmF5czsKLStpbXBvcnQgamF2YS51 dGlsLlZlY3RvcjsKLStpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotKwotKy8qKgotKyAq IFN5bSBLZXkgZGVyaXZpbmcgdGVzdHMuLgotKyAqCi0rICovCi0rCi0rcHVibGljIGNsYXNzIFN5 bUtleURlcml2aW5nIHsKLSsKLSsgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gaXY4 ID0gbmV3IGJ5dGUgW10geyAweDEsIDB4MiwgMHgzLCAweDQsIDB4NSwgMHg2LCAweDcsIDB4OCB9 OwotKyAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBpdjE2ID0gbmV3IGJ5dGUgW10g eyAweDEsIDB4MiwgMHgzLCAweDQsIAotKyAgICAgICAgICAgICAgICAgICAgMHg1LCAweDYsIDB4 NywgMHg4LCAgCi0rICAgICAgICAgICAgICAgICAgICAweDksMHhhLCAweGIsIDB4YywweGQsMHhl LCAweGYsMHgxMCB9OwotKwotKyAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBkZXJp dmF0aW9uRGF0YTEgPSBuZXcgYnl0ZVtdIHsgMHgxMSwgMHgxMSwgMHgxMywKLSsgICAgICAgICAg MHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCB9OwotKwotKyAgICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIGJ5dGVbXSBkZXJpdmF0aW9uRGF0YTIgPSBuZXcgYnl0ZSBbXSB7IDB4OSwgMHhhLCAw eGIsIDB4YywgMHhkLAotKyAgICAgICAgICAweGUsIDB4ZiwgMHgxMCB9OwotKwotKyAgICAgIHBy aXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBkZXJpdmF0aW9uRGF0YTE2ID0gbmV3IGJ5dGVbXSB7 IDB4MSwgMHgyLCAweDMsIDB4NCwgMHg1LCAweDYsMHg3LCAweDgsCi0rICAgICAgICAgIDB4OSwg MHhhLCAweGIsIDB4YywgMHhkLCAweGUsIDB4ZiwgMHgxMCB9OwotKwotKwotKyAgICBwdWJsaWMg c3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0rCi0rICAgICAgU3ltbWV0cmljS2V5 IG1hY0tleURldiA9IG51bGw7Ci0rICAgICAgdHJ5IHsKLSsKLSsgICAgICAgIENyeXB0b01hbmFn ZXIuSW5pdGlhbGl6YXRpb25WYWx1ZXMgdmFscyA9Ci0rICAgICAgICAgICAgICBuZXcgQ3J5cHRv TWFuYWdlci5Jbml0aWFsaXphdGlvblZhbHVlcygiLi8iCi0rICAgICAgICAgICAgICApOwotKyAg ICAgICAgQ3J5cHRvTWFuYWdlci5pbml0aWFsaXplKHZhbHMpOwotKyAgICAgICAgQ3J5cHRvTWFu YWdlciBjbSA9IENyeXB0b01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLSsgICAgICAgIENyeXB0b1Rv a2VuIHRva2VuID0gY20uZ2V0SW50ZXJuYWxDcnlwdG9Ub2tlbigpOwotKyAgICAgICAgQ3J5cHRv VG9rZW4ga2V5VG9rZW4gPSBjbS5nZXRJbnRlcm5hbEtleVN0b3JhZ2VUb2tlbigpOwotKyAgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnRlcmFsIHRva2VuIG5hbWU6ICIgKyBrZXlUb2tlbi5n ZXROYW1lKCkpOwotKyAgICAgICAgS2V5R2VuZXJhdG9yIGtleUtnID0ga2V5VG9rZW4uZ2V0S2V5 R2VuZXJhdG9yKEtleUdlbkFsZ29yaXRobS5ERVMzKTsKLSsgICAgICAgIFN5bW1ldHJpY0tleSBi YXNlS2V5ID0ga2V5S2cuZ2VuZXJhdGUoKTsKLSsKLSsKLSsgICAgICAgIEtleUdlbmVyYXRvciBr ZXlLZ0RlcyA9IGtleVRva2VuLmdldEtleUdlbmVyYXRvcihLZXlHZW5BbGdvcml0aG0uREVTKTsK LSsgICAgICAgIFN5bW1ldHJpY0tleSBiYXNlS2V5RGVzID0ga2V5S2dEZXMuZ2VuZXJhdGUoKTsK LSsgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RyZW5ndGg6ICIgKyBiYXNlS2V5RGVzLmdl dFN0cmVuZ3RoKCkpOwotKwotKwotKyAgICAgICAgS2V5R2VuZXJhdG9yIGtleUtnQUVTID0ga2V5 VG9rZW4uZ2V0S2V5R2VuZXJhdG9yKEtleUdlbkFsZ29yaXRobS5BRVMpOwotKyAgICAgICAga2V5 S2dBRVMuaW5pdGlhbGl6ZSgxMjgpOwotKyAgICAgICAgU3ltbWV0cmljS2V5IGJhc2VLZXlBRVMg PSBrZXlLZ0FFUy5nZW5lcmF0ZSgpOwotKwotKwotKwotKyAgICAgICAgU3lzdGVtLm91dC5wcmlu dGxuKCJiYXNlS2V5IGJ5dGVzOiAiKTsKLSsgICAgICAgIGJ5dGVbXSBiYXNlQnl0ZXMgPSBiYXNl S2V5LmdldEVuY29kZWQoKTsKLSsgICAgICAgIGRpc3BsYXlCeXRlQXJyYXkoYmFzZUJ5dGVzLHRy dWUpOyAKLSsKLSsKLSsgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLSsgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNt IENLTV9FWFRSQUNUX0tFWV9GUk9NX0tFWSB0ZXN0IDE2IGJ5dGVzLiBcbiIpOwotKwotKwotKyAg ICAgICAgU3ltbWV0cmljS2V5RGVyaXZlciBkZXJpdmVyID0gdG9rZW4uZ2V0U3ltbWV0cmljS2V5 RGVyaXZlcigpOwotKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXJpdmVyOiAiICsgZGVy aXZlcik7Ci0rICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNLTV9FWFRSQUNUX0tFWV9GUk9N X0tFWSA6ICIgKyBQS0NTMTFDb25zdGFudHMuQ0tNX0VYVFJBQ1RfS0VZX0ZST01fS0VZKTsKLSsK LSsgICAgICAgIGxvbmcgYml0UG9zaXRpb24gPSAwOwotKwotKyAgICAgICAgYnl0ZVtdIHBhcmFt ID0gbG9uZ1RvQnl0ZXMoYml0UG9zaXRpb24pOwotKwotKyAgICAgICAgZGVyaXZlci5pbml0RGVy aXZlKAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VLZXksIFBLQ1MxMUNvbnN0YW50 cy5DS01fRVhUUkFDVF9LRVlfRlJPTV9LRVkscGFyYW0sbnVsbCwgCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLQV9FTkNSWVBULCBQS0NTMTFDb25zdGFudHMu Q0tBX0RFUklWRSwobG9uZykgMTYpOwotKwotKwotKyAgICAgICAgU3ltbWV0cmljS2V5IGV4dHJh Y3RlZDE2ID0gZGVyaXZlci5kZXJpdmUoKTsKLSsKLSsgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs bigiRGVyaXZlZCBrZXk6ICIgKyBleHRyYWN0ZWQxNik7Ci0rCi0rICAgICAgICBpZihleHRyYWN0 ZWQxNiA9PSBudWxsKSB7Ci0rICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQg dG8gZGVyaXZlIDE2IGJ5dGUga2V5IHdpdGggbWVjaGFuaXNtOiBDS01fRVhUUkFDVF9LRVlfRlJP TV9LRVkgXG4iKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi ZGVyaXZlZEtleSAxNiBieXRlczogIik7Ci0rICAgICAgICBieXRlW10gZGVyaXZlZEJ5dGVzID0g ZXh0cmFjdGVkMTYuZ2V0RW5jb2RlZCgpOwotKyAgICAgICAgZGlzcGxheUJ5dGVBcnJheShkZXJp dmVkQnl0ZXMsdHJ1ZSk7Ci0rCi0rCi0rICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxu IE1lY2hhbmlzbSBDS01fRVhUUkFDVF9LRVlfRlJPTV9LRVkgdGVzdCA4IGJ5dGVzLiBcbiIpOwot KwotKwotKyAgICAgICAgU3ltbWV0cmljS2V5RGVyaXZlciBleHRyYWN0OCA9IHRva2VuLmdldFN5 bW1ldHJpY0tleURlcml2ZXIoKTsKLSsgICAgICAgIGV4dHJhY3Q4LmluaXREZXJpdmUoCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkMTYsIFBLQ1MxMUNvbnN0YW50cy5DS01f RVhUUkFDVF9LRVlfRlJPTV9LRVkscGFyYW0sbnVsbCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICBQS0NTMTFDb25zdGFudHMuQ0tBX0VOQ1JZUFQsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVS SVZFLChsb25nKSA4KTsKLSsKLSsKLSsgICAgICAgU3ltbWV0cmljS2V5IGV4dHJhY3RlZDggPSBl eHRyYWN0OC5kZXJpdmUoKTsKLSsgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXJpdmVkIGtl eTogIiArIGV4dHJhY3RlZDgpOwotKwotKyAgICAgICAgaWYoZXh0cmFjdGVkOCA9PSBudWxsKSB7 Ci0rICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgdG8gZGVyaXZlIGtleSBl eHRyYWN0ZWQgOCBieXRlcyB3aXRoIG1lY2hhbmlzbTogQ0tNX0VYVFJBQ1RfS0VZX0ZST01fS0VZ IFxuIik7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBieXRlW10gZXh0cmFjdGVkOEJ5dGVzID0g ZXh0cmFjdGVkOC5nZXRFbmNvZGVkKCk7Ci0rICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRl cml2ZWQgZXh0cmFjdGVkIDggYnl0ZXMgb2Yga2V5OiAiKTsKLSsgICAgICAgIGRpc3BsYXlCeXRl QXJyYXkoZXh0cmFjdGVkOEJ5dGVzLHRydWUpOwotKwotKwotKyAgICAgICAgLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKwotKyAgICAgICAgIFN5c3Rl bS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNtIENLTV9DT05DQVRFTkFURV9CQVNFX0FORF9LRVkg dGVzdCAxNiArIDggPSAyNCBieXRlIGtleS4gXG4iKTsKLSsKLSsgICAgICAgIFN5bW1ldHJpY0tl eURlcml2ZXIgY29uY2F0ID0ga2V5VG9rZW4uZ2V0U3ltbWV0cmljS2V5RGVyaXZlcigpOwotKyAg ICAgICAgY29uY2F0LmluaXREZXJpdmUoCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0 cmFjdGVkMTYsZXh0cmFjdGVkOCwgUEtDUzExQ29uc3RhbnRzLkNLTV9DT05DQVRFTkFURV9CQVNF X0FORF9LRVksbnVsbCxudWxsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNv bnN0YW50cy5DS01fREVTM19FQ0IsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLChsb25nKSAw KTsKLSsKLSsgICAgICAgIFN5bW1ldHJpY0tleSBjb25jYXRlZDI0ID0gIGNvbmNhdC5kZXJpdmUo KTsKLSsKLSsgICAgICAgIGlmKCBjb25jYXRlZDI0ID09IG51bGwpIHsKLSsgICAgICAgICAgICBT eXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBkZXJpdmUga2V5IGNvbmNhdGVkIDggYnl0ZXMg dG8gMTYgYnl0ZXMga2V5OiBDS01fQ09OQ0FURU5BVEVfQkFTRV9BTkRfS0VZIFxuIik7Ci0rICAg ICAgICB9Ci0rCi0rICAgICAgICBieXRlW10gY29uY2F0ZWQyNEJ5dGVzID0gY29uY2F0ZWQyNC5n ZXRFbmNvZGVkKCk7Ci0rICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgY29uY2F0 ZWQgMTYgKyA4ID0gMjQgYnl0ZSBrZXk6ICIpOwotKyAgICAgICAgZGlzcGxheUJ5dGVBcnJheShj b25jYXRlZDI0Qnl0ZXMsdHJ1ZSk7Ci0rCi0rICAgICAgICAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rICAgICAgICAvLyBOb3cgbGV0cyB0cnkgIG1v cmUgY29tcGxleCBkZXJpdmF0aW9uCi0rCi0rICAgICAgIC8vIHRtcDIgPSBQSzExX0Rlcml2ZSgg bWFzdGVyICwgQ0tNX0RFU19FQ0JfRU5DUllQVF9EQVRBICwgJnBhcmFtICwgQ0tNX0NPTkNBVEVO QVRFX0JBU0VfQU5EX0tFWSAsIENLQV9ERVJJVkUgLCAwKTsKLSsKLSsgICAgICAgU3lzdGVtLm91 dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tNX0RFU19FQ0JfRU5DUllQVF9EQVRBIHRlc3QuIFxu Iik7Ci0rCi0rICAgICAgIFN5bW1ldHJpY0tleURlcml2ZXIgZW5jcnlwdCA9IHRva2VuLmdldFN5 bW1ldHJpY0tleURlcml2ZXIoKTsKLSsKLSsgICAgICAgZW5jcnlwdC5pbml0RGVyaXZlKAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VLZXlEZXMsIC8qIFBLQ1MxMUNvbnN0YW50cy5D S01fREVTX0VDQl9FTkNSWVBUX0RBVEEgKi8gNDM1MkwsZGVyaXZhdGlvbkRhdGExICxudWxsLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5DS01fREVTX0VDQiwg UEtDUzExQ29uc3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDgpOwotKwotKyAgICAgICBTeW1tZXRy aWNLZXkgZW5jcnlwdGVkOCA9IGVuY3J5cHQuZGVyaXZlKCk7Ci0rCi0rICAgICAgIGlmKCBlbmNy eXB0ZWQ4ID09IG51bGwpIHsKLSsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxl ZCB0byBkZXJpdmUgIDggYnl0ZXMgZnJvbSBlbmNyeXB0ZWQgZGVyaXZhdGlvbiBkYXRhLiIpOwot KyAgICAgICAgfQotKwotKyAgICAgICAgYnl0ZVtdIGVuY3J5cHRlZDhCeXRlcyA9IGVuY3J5cHRl ZDguZ2V0RW5jb2RlZCgpOwotKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXJpdmVkIGVu Y3J5cHRlZCA4IGJ5dGVzOiAiICsgZW5jcnlwdGVkOEJ5dGVzLmxlbmd0aCk7Ci0rICAgICAgICBk aXNwbGF5Qnl0ZUFycmF5KGVuY3J5cHRlZDhCeXRlcyx0cnVlKTsKLSsKLSsgICAgICAgIENpcGhl ciBjaXBoZXIgPSBudWxsOwotKyAgICAgICAgY2lwaGVyID0gIGtleVRva2VuLmdldENpcGhlckNv bnRleHQoRW5jcnlwdGlvbkFsZ29yaXRobS5ERVNfRUNCKTsKLSsKLSsgICAgICAgIGNpcGhlci5p bml0RW5jcnlwdChiYXNlS2V5RGVzKTsKLSsKLSsgICAgICAgIGJ5dGVbXSBjaXBoZXJ0ZXh0ID0g Y2lwaGVyLmRvRmluYWwoZGVyaXZhdGlvbkRhdGExKTsKLSsgICAgICAgIGRpc3BsYXlCeXRlQXJy YXkoY2lwaGVydGV4dCx0cnVlKTsKLSsKLSsgICAgICAgIGlmICggY2lwaGVydGV4dC5sZW5ndGgg IT0gZW5jcnlwdGVkOEJ5dGVzLmxlbmd0aCApIHsKLSsgICAgICAgICAgICBTeXN0ZW0ub3V0LnBy aW50bG4oIkZBSUxFRDogZW5jcnlwdGVkIGRhdGEgbGVuZ3RoIG5vdCBlcXVhbCB0byBkZXJpdmVk IGtleSBsZW5ndGguIik7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIGZvciAoIGlu dCBpID0gMDsgaSA8IGNpcGhlcnRleHQubGVuZ3RoIDsgaSArKykgewotKyAgICAgICAgICAgICAg ICBjaXBoZXJ0ZXh0W2ldJj0weGZlOwotKyAgICAgICAgICAgICAgICBlbmNyeXB0ZWQ4Qnl0ZXNb aV0mPTB4ZmU7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGlmICggQXJyYXlzLmVxdWFs cyhjaXBoZXJ0ZXh0LCBlbmNyeXB0ZWQ4Qnl0ZXMpKSB7Ci0rICAgICAgICAgICAgICAgIFN5c3Rl bS5vdXQucHJpbnRsbigiUEFTU0VEOiBkZXJpdmVkIGtleSB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQg ZGF0YS4iKTsKLSsgICAgICAgICAgICB9IGVsc2UgewotKwotKyAgICAgICAgICAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oIkZBSUxFRDogZGVyaXZlZCBrZXkgbm90IHRoZSBzYW1lIGFzIGVuY3J5 cHRlZCBkYXRhLiIpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsKLSsgICAgICAg IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsgICAg ICAgIC8vIFRyeSBlY25yeXB0ZWQgZGVzMyBkZXJpdmF0aW9uCi0rCi0rICAgICAgIFN5c3RlbS5v dXQucHJpbnRsbigiXG4gTWVjaGFuaXNtIENLTV9ERVMzX0VDQl9FTkNSWVBUX0RBVEEgdGVzdC4g XG4iKTsKLSsKLSsgICAgICAgU3ltbWV0cmljS2V5RGVyaXZlciBlbmNyeXB0RGVzMyA9IHRva2Vu LmdldFN5bW1ldHJpY0tleURlcml2ZXIoKTsKLSsKLSsgICAgICAgZW5jcnlwdERlczMuaW5pdERl cml2ZSgKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlS2V5LCAvKiBQS0NTMTFDb25z dGFudHMuQ0tNX0RFUzNfRUNCX0VOQ1JZUFRfREFUQSAqLyA0MzU0TCAgLGRlcml2YXRpb25EYXRh MTYgLG51bGwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNL TV9ERVMzX0VDQiwgUEtDUzExQ29uc3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDE2KTsKLSsKLSsK LSsgICAgICAgU3ltbWV0cmljS2V5IGVuY3J5cHRlZDE2ID0gZW5jcnlwdERlczMuZGVyaXZlKCk7 Ci0rCi0rICAgICAgIGlmICggZW5jcnlwdGVkMTYgPT0gbnVsbCkgewotKyAgICAgICAgICAgU3lz dGVtLm91dC5wcmludGxuKCJGYWlsZWQgdG8gZGVyaXZlIDE2IGJ5dGVzIGZyb20gZW5jcnlwdGVk IGRlcml2YXRpb24gZGF0YS4iKTsKLSsgICAgICAgfQotKwotKyAgICAgICBieXRlW10gZW5jcnlw dGVkMTZCeXRlcyA9IGVuY3J5cHRlZDE2LmdldEVuY29kZWQoKTsKLSsKLSsgICAgICAgU3lzdGVt Lm91dC5wcmludGxuKCJkZXJpdmVkIGVuY3J5cHRlZCAxNiBieXRlczogIiArIGVuY3J5cHRlZDE2 Qnl0ZXMubGVuZ3RoKTsKLSsgICAgICAgZGlzcGxheUJ5dGVBcnJheShlbmNyeXB0ZWQxNkJ5dGVz LHRydWUpOwotKwotKwotKyAgICAgICBjaXBoZXIgPSAga2V5VG9rZW4uZ2V0Q2lwaGVyQ29udGV4 dChFbmNyeXB0aW9uQWxnb3JpdGhtLkRFUzNfRUNCKTsKLSsgICAgICAgY2lwaGVyLmluaXRFbmNy eXB0KGJhc2VLZXkpOwotKyAgICAgICBjaXBoZXJ0ZXh0ID0gY2lwaGVyLmRvRmluYWwoZGVyaXZh dGlvbkRhdGExNik7Ci0rICAgICAgIGRpc3BsYXlCeXRlQXJyYXkoY2lwaGVydGV4dCx0cnVlKTsK LSsKLSsgICAgICAgaWYgKCBjaXBoZXJ0ZXh0Lmxlbmd0aCAhPSBlbmNyeXB0ZWQxNkJ5dGVzLmxl bmd0aCApIHsKLSsgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBlbmNyeXB0 ZWQgZGF0YSBsZW5ndGggbm90IGVxdWFsIHRvIGRlcml2ZWQga2V5IGxlbmd0aC4iKTsKLSsgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IGNpcGhlcnRleHQu bGVuZ3RoIDsgaSArKykgewotKyAgICAgICAgICAgICAgIGNpcGhlcnRleHRbaV0mPTB4ZmU7Ci0r ICAgICAgICAgICAgICAgZW5jcnlwdGVkMTZCeXRlc1tpXSY9MHhmZTsKLSsgICAgICAgICAgIH0K LSsgICAgICAgICAgIGlmICggQXJyYXlzLmVxdWFscyhjaXBoZXJ0ZXh0LCBlbmNyeXB0ZWQxNkJ5 dGVzKSkgewotKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VEOiBkZXJp dmVkIGtleSB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0YS4iKTsKLSsgICAgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQ6IGRlcml2ZWQg a2V5IG5vdCB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0YS4iKTsKLSsgICAgICAgICAgIH0KLSsg ICAgICAgfQotKwotKwotKyAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNt IENLTV9ERVNfQ0JDX0VOQ1JZUFRfREFUQSB0ZXN0LiBcbiIpOwotKwotKyAgICAgICBTeW1tZXRy aWNLZXlEZXJpdmVyIGVuY3J5cHREZXNDQkMgPSB0b2tlbi5nZXRTeW1tZXRyaWNLZXlEZXJpdmVy KCk7Ci0rCi0rICAgICAgIGVuY3J5cHREZXNDQkMuaW5pdERlcml2ZSgKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICBiYXNlS2V5RGVzLCAvKiBQS0NTMTFDb25zdGFudHMuQ0tNX0RFU19DQkNf RU5DUllQVF9EQVRBICovIDQzNTNMICAsZGVyaXZhdGlvbkRhdGExICxpdjgsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLTV9ERVNfQ0JDLCBQS0NTMTFDb25z dGFudHMuQ0tBX0RFUklWRSwobG9uZykgOCk7Ci0rCi0rCi0rICAgICAgIFN5bW1ldHJpY0tleSBl bmNyeXB0ZWREZXNDQkMgPSBlbmNyeXB0RGVzQ0JDLmRlcml2ZSgpOwotKwotKyAgICAgICBpZiAo IGVuY3J5cHRlZERlc0NCQyA9PSBudWxsKSB7Ci0rICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50 bG4oIkZhaWxlZCB0byBkZXJpdmUgOCBieXRlcyBmcm9tIGVuY3J5cHRlZCBkZXJpdmF0aW9uIGRh dGEuIik7Ci0rICAgICAgIH0KLSsKLSsgICAgICAgYnl0ZVtdIGVuY3J5cHRlZERlc0NCQ0J5dGVz ID0gZW5jcnlwdGVkRGVzQ0JDLmdldEVuY29kZWQoKTsKLSsKLSsgICAgICAgU3lzdGVtLm91dC5w cmludGxuKCJkZXJpdmVkIGVuY3J5cHRlZCA4IGJ5dGVzOiAiICsgZW5jcnlwdGVkRGVzQ0JDQnl0 ZXMubGVuZ3RoKTsKLSsgICAgICAgZGlzcGxheUJ5dGVBcnJheShlbmNyeXB0ZWREZXNDQkNCeXRl cyx0cnVlKTsKLSsKLSsKLSsgICAgICAgY2lwaGVyID0gIGtleVRva2VuLmdldENpcGhlckNvbnRl eHQoRW5jcnlwdGlvbkFsZ29yaXRobS5ERVNfQ0JDKTsKLSsgICAgICAgY2lwaGVyLmluaXRFbmNy eXB0KGJhc2VLZXlEZXMsbmV3IElWUGFyYW1ldGVyU3BlYyhpdjgpKTsKLSsgICAgICAgY2lwaGVy dGV4dCA9IGNpcGhlci5kb0ZpbmFsKGRlcml2YXRpb25EYXRhMSk7Ci0rICAgICAgIGRpc3BsYXlC eXRlQXJyYXkoY2lwaGVydGV4dCx0cnVlKTsKLSsKLSsgICAgICAgIGlmICggY2lwaGVydGV4dC5s ZW5ndGggIT0gZW5jcnlwdGVkRGVzQ0JDQnl0ZXMubGVuZ3RoICkgewotKyAgICAgICAgICAgIFN5 c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBlbmNyeXB0ZWQgZGF0YSBsZW5ndGggbm90IGVxdWFs IHRvIGRlcml2ZWQga2V5IGxlbmd0aC4iKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgZm9yICggaW50IGkgPSAwOyBpIDwgY2lwaGVydGV4dC5sZW5ndGggOyBpICsrKSB7Ci0rICAg ICAgICAgICAgICAgIGNpcGhlcnRleHRbaV0mPTB4ZmU7Ci0rICAgICAgICAgICAgICAgIGVuY3J5 cHRlZERlc0NCQ0J5dGVzW2ldJj0weGZlOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBp ZiAoIEFycmF5cy5lcXVhbHMoY2lwaGVydGV4dCwgZW5jcnlwdGVkRGVzQ0JDQnl0ZXMpKSB7Ci0r ICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VEOiBkZXJpdmVkIGtleSB0 aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0YS4iKTsKLSsgICAgICAgICAgICB9IGVsc2UgewotKwot KyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRDogZGVyaXZlZCBrZXkg bm90IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOwotKyAgICAgICAgICAgIH0KLSsgICAg ICAgIH0KLSsKLSsgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLSsKLSsgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tN X0RFUzNfQ0JDX0VOQ1JZUFRfREFUQSB0ZXN0LiBcbiIpOwotKyAgICAgICAgCi0rICAgICAgIFN5 bW1ldHJpY0tleURlcml2ZXIgZW5jcnlwdERlczNDQkMgPSB0b2tlbi5nZXRTeW1tZXRyaWNLZXlE ZXJpdmVyKCk7Ci0rCi0rICAgICAgIGVuY3J5cHREZXMzQ0JDLmluaXREZXJpdmUoCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmFzZUtleSwgLyogUEtDUzExQ29uc3RhbnRzLkNLTV9ERVMz X0NCQ19FTkNSWVBUX0RBVEEgKi8gNDM1NUwgICxkZXJpdmF0aW9uRGF0YTE2ICxpdjgsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLTV9ERVMzX0NCQywgUEtD UzExQ29uc3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDE2KTsKLSsgICAgICAgIAotKwotKyAgICAg ICBTeW1tZXRyaWNLZXkgZW5jcnlwdGVkRGVzM0NCQyA9IGVuY3J5cHREZXMzQ0JDLmRlcml2ZSgp OwotKyAgICAgICAgCi0rICAgICAgIGlmICggZW5jcnlwdGVkRGVzM0NCQyA9PSBudWxsKSB7Ci0r ICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBkZXJpdmUgMTYgYnl0ZXMg ZnJvbSBlbmNyeXB0ZWQgZGVyaXZhdGlvbiBkYXRhLiIpOwotKyAgICAgICB9Ci0rICAgICAgICAK LSsgICAgICAgYnl0ZVtdIGVuY3J5cHRlZERlczNDQkNCeXRlcyA9IGVuY3J5cHRlZERlczNDQkMu Z2V0RW5jb2RlZCgpOwotKwotKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgZW5j cnlwdGVkIDE2IGJ5dGVzOiAiICsgZW5jcnlwdGVkRGVzM0NCQ0J5dGVzLmxlbmd0aCk7Ci0rICAg ICAgIGRpc3BsYXlCeXRlQXJyYXkoZW5jcnlwdGVkRGVzM0NCQ0J5dGVzLHRydWUpOwotKwotKwot KyAgICAgICBjaXBoZXIgPSAga2V5VG9rZW4uZ2V0Q2lwaGVyQ29udGV4dChFbmNyeXB0aW9uQWxn b3JpdGhtLkRFUzNfQ0JDKTsKLSsgICAgICAgY2lwaGVyLmluaXRFbmNyeXB0KGJhc2VLZXksbmV3 IElWUGFyYW1ldGVyU3BlYyhpdjgpKTsKLSsgICAgICAgY2lwaGVydGV4dCA9IGNpcGhlci5kb0Zp bmFsKGRlcml2YXRpb25EYXRhMTYpOwotKyAgICAgICBkaXNwbGF5Qnl0ZUFycmF5KGNpcGhlcnRl eHQsdHJ1ZSk7Ci0rCi0rICAgICAgICBpZiAoIGNpcGhlcnRleHQubGVuZ3RoICE9IGVuY3J5cHRl ZERlczNDQkNCeXRlcy5sZW5ndGggKSB7Ci0rICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxu KCJGQUlMRUQ6IGVuY3J5cHRlZCBkYXRhIGxlbmd0aCBub3QgZXF1YWwgdG8gZGVyaXZlZCBrZXkg bGVuZ3RoLiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBmb3IgKCBpbnQgaSA9 IDA7IGkgPCBjaXBoZXJ0ZXh0Lmxlbmd0aCA7IGkgKyspIHsKLSsgICAgICAgICAgICAgICAgY2lw aGVydGV4dFtpXSY9MHhmZTsKLSsgICAgICAgICAgICAgICAgZW5jcnlwdGVkRGVzM0NCQ0J5dGVz W2ldJj0weGZlOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBpZiAoIEFycmF5cy5lcXVh bHMoY2lwaGVydGV4dCwgZW5jcnlwdGVkRGVzM0NCQ0J5dGVzKSkgewotKyAgICAgICAgICAgICAg ICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1NFRDogZGVyaXZlZCBrZXkgdGhlIHNhbWUgYXMgZW5j cnlwdGVkIGRhdGEuIik7Ci0rICAgICAgICAgICAgfSBlbHNlIHsKLSsKLSsgICAgICAgICAgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQ6IGRlcml2ZWQga2V5IG5vdCB0aGUgc2FtZSBh cyBlbmNyeXB0ZWQgZGF0YS4iKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCi0rICAg ICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNtIENLTV9BRVNfRUNCX0VOQ1JZ UFRfREFUQSB0ZXN0LiBcbiIpOwotKwotKyAgICAgICBTeW1tZXRyaWNLZXlEZXJpdmVyIGVuY3J5 cHRBRVNFQ0IgPSB0b2tlbi5nZXRTeW1tZXRyaWNLZXlEZXJpdmVyKCk7Ci0rCi0rICAgICAgIC8v U3lzdGVtLmluLnJlYWQoKTsKLSsgICAgICAgZW5jcnlwdEFFU0VDQi5pbml0RGVyaXZlKAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VLZXlBRVMsIC8qIFBLQ1MxMUNvbnN0YW50cy5D S01fQUVTX0VDQl9FTkNSWVBUX0RBVEEgKi8gNDM1NkwgICxkZXJpdmF0aW9uRGF0YTE2ICxudWxs LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5DS01fQUVTX0VD QiwgUEtDUzExQ29uc3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDE2KTsKLSsKLSsKLSsgICAgICAg U3ltbWV0cmljS2V5IGVuY3J5cHRlZEFFU0VDQiA9IGVuY3J5cHRBRVNFQ0IuZGVyaXZlKCk7Ci0r Ci0rICAgICAgIGlmICggZW5jcnlwdGVkQUVTRUNCID09IG51bGwpIHsKLSsgICAgICAgICAgIFN5 c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIHRvIGRlcml2ZSAxNiBieXRlcyBmcm9tIGVuY3J5cHRl ZCBkZXJpdmF0aW9uIGRhdGEuIik7Ci0rICAgICAgIH0KLSsKLSsgICAgICAgYnl0ZVtdIGVuY3J5 cHRlZEFFU0VDQkJ5dGVzID0gZW5jcnlwdGVkQUVTRUNCLmdldEVuY29kZWQoKTsKLSsKLSsgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXJpdmVkIGVuY3J5cHRlZCAxNiBieXRlczogIiArIGVu Y3J5cHRlZEFFU0VDQkJ5dGVzLmxlbmd0aCk7Ci0rICAgICAgIGRpc3BsYXlCeXRlQXJyYXkoZW5j cnlwdGVkQUVTRUNCQnl0ZXMsdHJ1ZSk7Ci0rCi0rCi0rICAgICAgIGNpcGhlciA9ICBrZXlUb2tl bi5nZXRDaXBoZXJDb250ZXh0KEVuY3J5cHRpb25BbGdvcml0aG0uQUVTXzEyOF9FQ0IpOwotKyAg ICAgICBjaXBoZXIuaW5pdEVuY3J5cHQoYmFzZUtleUFFUyk7Ci0rICAgICAgIGNpcGhlcnRleHQg PSBjaXBoZXIuZG9GaW5hbChkZXJpdmF0aW9uRGF0YTE2KTsKLSsgICAgICAgZGlzcGxheUJ5dGVB cnJheShjaXBoZXJ0ZXh0LHRydWUpOwotKwotKyAgICAgICAgaWYgKCBjaXBoZXJ0ZXh0Lmxlbmd0 aCAhPSBlbmNyeXB0ZWRBRVNFQ0JCeXRlcy5sZW5ndGggKSB7Ci0rICAgICAgICAgICAgU3lzdGVt Lm91dC5wcmludGxuKCJGQUlMRUQ6IGVuY3J5cHRlZCBkYXRhIGxlbmd0aCBub3QgZXF1YWwgdG8g ZGVyaXZlZCBrZXkgbGVuZ3RoLiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBm b3IgKCBpbnQgaSA9IDA7IGkgPCBjaXBoZXJ0ZXh0Lmxlbmd0aCA7IGkgKyspIHsKLSsgICAgICAg ICAgICAgICAgY2lwaGVydGV4dFtpXSY9MHhmZTsKLSsgICAgICAgICAgICAgICAgZW5jcnlwdGVk QUVTRUNCQnl0ZXNbaV0mPTB4ZmU7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGlmICgg QXJyYXlzLmVxdWFscyhjaXBoZXJ0ZXh0LCBlbmNyeXB0ZWRBRVNFQ0JCeXRlcykpIHsKLSsgICAg ICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQ6IGRlcml2ZWQga2V5IHRoZSBz YW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOwotKyAgICAgICAgICAgIH0gZWxzZSB7Ci0rCi0rICAg ICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBkZXJpdmVkIGtleSBub3Qg dGhlIHNhbWUgYXMgZW5jcnlwdGVkIGRhdGEuIik7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAg fQotKwotKwotKyAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNtIENLTV9B RVNfQ0JDX0VOQ1JZUFRfREFUQSB0ZXN0LiBcbiIpOwotKwotKyAgICAgICBTeW1tZXRyaWNLZXlE ZXJpdmVyIGVuY3J5cHRBRVNDQkM9IHRva2VuLmdldFN5bW1ldHJpY0tleURlcml2ZXIoKTsKLSsK LSsgICAgICAgLy9TeXN0ZW0uaW4ucmVhZCgpOwotKyAgICAgICBlbmNyeXB0QUVTQ0JDLmluaXRE ZXJpdmUoCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUtleUFFUywgLyogUEtDUzEx Q29uc3RhbnRzLkNLTV9BRVNfQ0JDX0VOQ1JZUFRfREFUQSAqLyA0MzU3TCAgLGRlcml2YXRpb25E YXRhMTYgLGl2MTYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRz LkNLTV9BRVNfQ0JDLCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwobG9uZykgMTYpOwotKwot KwotKyAgICAgICBTeW1tZXRyaWNLZXkgZW5jcnlwdGVkQUVTQ0JDID0gZW5jcnlwdEFFU0NCQy5k ZXJpdmUoKTsKLSsKLSsgICAgICAgaWYgKCBlbmNyeXB0ZWRBRVNDQkMgPT0gbnVsbCkgewotKyAg ICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgdG8gZGVyaXZlIDE2IGJ5dGVzIGZy b20gZW5jcnlwdGVkIGRlcml2YXRpb24gZGF0YS4iKTsKLSsgICAgICAgfQotKwotKyAgICAgICBi eXRlW10gZW5jcnlwdGVkQUVTQ0JDQnl0ZXMgPSBlbmNyeXB0ZWRBRVNDQkMuZ2V0RW5jb2RlZCgp OwotKwotKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgZW5jcnlwdGVkIDE2IGJ5 dGVzOiAiICsgZW5jcnlwdGVkQUVTQ0JDQnl0ZXMubGVuZ3RoKTsKLSsgICAgICAgZGlzcGxheUJ5 dGVBcnJheShlbmNyeXB0ZWRBRVNDQkNCeXRlcyx0cnVlKTsKLSsKLSsKLSsgICAgICAgY2lwaGVy ID0gIGtleVRva2VuLmdldENpcGhlckNvbnRleHQoRW5jcnlwdGlvbkFsZ29yaXRobS5BRVNfMTI4 X0NCQyk7Ci0rICAgICAgIGNpcGhlci5pbml0RW5jcnlwdChiYXNlS2V5QUVTLG5ldyBJVlBhcmFt ZXRlclNwZWMoaXYxNikpOwotKyAgICAgICBjaXBoZXJ0ZXh0ID0gY2lwaGVyLmRvRmluYWwoZGVy aXZhdGlvbkRhdGExNik7Ci0rICAgICAgIGRpc3BsYXlCeXRlQXJyYXkoY2lwaGVydGV4dCx0cnVl KTsKLSsKLSsgICAgICAgIGlmICggY2lwaGVydGV4dC5sZW5ndGggIT0gZW5jcnlwdGVkQUVTQ0JD Qnl0ZXMubGVuZ3RoICkgewotKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVE OiBlbmNyeXB0ZWQgZGF0YSBsZW5ndGggbm90IGVxdWFsIHRvIGRlcml2ZWQga2V5IGxlbmd0aC4i KTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwg Y2lwaGVydGV4dC5sZW5ndGggOyBpICsrKSB7Ci0rICAgICAgICAgICAgICAgIGNpcGhlcnRleHRb aV0mPTB4ZmU7Ci0rICAgICAgICAgICAgICAgIGVuY3J5cHRlZEFFU0NCQ0J5dGVzW2ldJj0weGZl OwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBpZiAoIEFycmF5cy5lcXVhbHMoY2lwaGVy dGV4dCwgZW5jcnlwdGVkQUVTQ0JDQnl0ZXMpKSB7Ci0rICAgICAgICAgICAgICAgIFN5c3RlbS5v dXQucHJpbnRsbigiUEFTU0VEOiBkZXJpdmVkIGtleSB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0 YS4iKTsKLSsgICAgICAgICAgICB9IGVsc2UgewotKwotKyAgICAgICAgICAgICAgICBTeXN0ZW0u b3V0LnByaW50bG4oIkZBSUxFRDogZGVyaXZlZCBrZXkgbm90IHRoZSBzYW1lIGFzIGVuY3J5cHRl ZCBkYXRhLiIpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8vIGdl dCB2ZWN0b3Igb2Ygc3lta2V5cwotKwotKyAgICAgICAgRW51bWVyYXRpb248Q3J5cHRvVG9rZW4+ IGVjdCA9IG51bGw7IAotKyAgICAgICAgZWN0ID0gKEVudW1lcmF0aW9uPENyeXB0b1Rva2VuPikg Y20uZ2V0QWxsVG9rZW5zKCk7IAotKyAgICAgICAgQ3J5cHRvVG9rZW4gY3QgPSBudWxsOyAvL2N0 ID0gY20uZ2V0VG9rZW5CeU5hbWUoImVQYXNzIFRva2VuIik7IAotKyAgICAgICAgd2hpbGUgKGVj dC5oYXNNb3JlRWxlbWVudHMoKSkgCi0rICAgICAgICB7IAotKyAgICAgICAgICBjdCA9IGVjdC5u ZXh0RWxlbWVudCgpOyAKLSsgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcnlwdG9Ub2tl bi5uYW1lPSAiICsgY3QuZ2V0TmFtZSgpKTsgCi0rICAgICAgICB9IAotKwotKyAgICAgICAgU3lt bWV0cmljS2V5W10ga2V5cyA9IGtleVRva2VuLmdldENyeXB0b1N0b3JlKCkuZ2V0U3ltbWV0cmlj S2V5cygpOwotKwotKyAgICAgICAgU3ltbWV0cmljS2V5IG1hY0tleSA9IGdldFN5bUtleUJ5TmFt ZShrZXlzLCAiZGVmS2V5U2V0LW1hY0tleSIpOwotKwotKyAgICAgICAgU3lzdGVtLm91dC5wcmlu dGxuKCJtYWNLZXk6ICIgKyBtYWNLZXkpOwotKwotKyAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUp IHsKLSsgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0r ICAgIHB1YmxpYyBzdGF0aWMgdm9pZAotKyAgICBkaXNwbGF5Qnl0ZUFycmF5KGJ5dGVbXSBiYSwg Ym9vbGVhbiBoYXNfY2hlY2tfc3VtKSB7Ci0rICAgICAgICBjaGFyIG1hc2sgPSAweGZmOwotKwot KyAgICAgICAgaWYgKCBoYXNfY2hlY2tfc3VtID09IHRydWUgKQotKyAgICAgICAgICAgIG1hc2sg PSAweGZlOwotKwotKyAgICAgICAgZm9yKGludCBpPTA7IGkgPCBiYS5sZW5ndGg7IGkrKykgewot KyAKLSsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBJbnRlZ2VyLnRvSGV4U3RyaW5nKGJh W2ldJm1hc2spICsgIiAiICk7Ci0rICAgICAgICAgICAgaWYoIChpICUgMjYpID09IDI1ICkgewot KyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwotKyAgICAgICAgICAgIH0K LSsgICAgICAgIH0KLSsgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7Ci0rICAgIH0KLSsK LSsgICAgcHVibGljIHN0YXRpYyAgYnl0ZVtdIGxvbmdUb0J5dGVzKGxvbmcgeCkgewotKyAgICAg ICAgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKDgpOwotKyAgICAgICAg YnVmZmVyLnB1dExvbmcoeCk7Ci0rICAgICAgICByZXR1cm4gYnVmZmVyLmFycmF5KCk7Ci0rICAg IH0KLSsKLSsgICAgcHVibGljIHN0YXRpYyBieXRlW10gY29uY2F0Qnl0ZUFycmF5cyhieXRlW10g YSwgYnl0ZVtdIGIpIHsKLSsgICAgICAgIGJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVthLmxlbmd0 aCArIGIubGVuZ3RoXTsgCi0rICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGEsIDAsIHJlc3VsdCwg MCwgYS5sZW5ndGgpOyAKLSsgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYiwgMCwgcmVzdWx0LCBh Lmxlbmd0aCwgYi5sZW5ndGgpOyAKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0rICAgIH0KLSsK LSsgICAgcHVibGljIHN0YXRpYyBTeW1tZXRyaWNLZXkgZ2V0U3ltS2V5QnlOYW1lKCBTeW1tZXRy aWNLZXlbXSBrZXlzLCBTdHJpbmcgbmFtZSkgewotKyAgICAgICAgaWYgKCBrZXlzID09IG51bGwg fHwgbmFtZSA9PSBudWxsICkgewotKyAgICAgICAgICAgIHJldHVybiBudWxsOwotKyAgICAgICAg fQotKwotKyAgICAgICAgaW50IGxlbiA9IGtleXMubGVuZ3RoOwotKyAgICAgICAgZm9yKGludCBp ID0gMCA7IGkgPCBsZW4gOyBpKysgKSB7Ci0rICAgICAgICAgICAgU3ltbWV0cmljS2V5IGN1ciA9 IGtleXNbaV07Ci0rICAgICAgICAgICAgaWYgKCBjdXIgIT0gbnVsbCApIHsKLSsgICAgICAgICAg ICAgICAgaWYoIG5hbWUuZXF1YWxzKGN1ci5nZXROaWNrTmFtZSgpKSkgewotKyAgICAgICAgICAg ICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBrZXk6ICIgKyBuYW1lICsgIlxuIik7 Ci0rICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyOyAKLSsgICAgICAgICAgICAgICAgfQot KyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgICAgIHJldHVybiBudWxsOwotKyAg ICB9Ci0rfQotZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv dXRpbC9qYXZhX2lkcy5oLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy91dGlsL2phdmFfaWRzLmgKLS0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy91dGlsL2phdmFfaWRzLmguam1hZ25lCTIwMTYtMDQtMTQgMTY6MzQ6MzYuNzI5Mjg3 NDE2IC0wNzAwCi0rKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdXRp bC9qYXZhX2lkcy5oCTIwMTYtMDQtMTQgMTY6MzQ6NDUuNjA4MjI2MTYzIC0wNzAwCi1AQCAtMjQz LDYgKzI0Myw3IEBAIFBSX0JFR0lOX0VYVEVSTl9DCi0gICovCi0gI2RlZmluZSBQSzExU1lNS0VZ X0NMQVNTX05BTUUgIm9yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleSIKLSAjZGVmaW5l IFBLMTFTWU1LRVlfQ09OU1RSVUNUT1JfU0lHICIoW0IpViIKLSsjZGVmaW5lIFBLMTFTWU1LRVlf Q09OU1RSVUNUT1JfMV9TSUcgIihbQkxqYXZhL2xhbmcvU3RyaW5nOylWIiAKLSAKLSAvKgotICAq IFBLMTFUb2tlbgoKZGlmZiAtLWdpdCBhL2pzcy11bmRvLUJhZFBhZGRpbmdFeGNlcHRpb24tZGVw cmVjYXRpb24ucGF0Y2ggYi9qc3MtdW5kby1CYWRQYWRkaW5nRXhjZXB0aW9uLWRlcHJlY2F0aW9u LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjM3MmE3Li4wMDAwMDAwCi0t LSBhL2pzcy11bmRvLUJhZFBhZGRpbmdFeGNlcHRpb24tZGVwcmVjYXRpb24ucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQmFkUGFkZGluZ0V4Y2VwdGlv bi5qYXZhIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5 cHRvL0JhZFBhZGRpbmdFeGNlcHRpb24uamF2YQotLS0tIGpzcy00LjIuNi5vcmlnL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQmFkUGFkZGluZ0V4Y2VwdGlvbi5q YXZhCTIwMDQtMDQtMjUgMDg6MDI6MjEuMDAwMDAwMDAwIC0wNzAwCi0rKysganNzLTQuMi42L21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQmFkUGFkZGluZ0V4Y2Vw dGlvbi5qYXZhCTIwMTItMDMtMzAgMTY6MTc6MzAuNzQ4MzcxMDAwIC0wNzAwCi1AQCAtMzUsOSAr MzUsNiBAQAotICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0gcGFja2FnZSBv cmcubW96aWxsYS5qc3MuY3J5cHRvOwotIAotLS8qKgotLSAqIEBkZXByZWNhdGVkIFVzZSBqYXZh eC5jcnlwdG8uQmFkUGFkZGluZ0V4Y2VwdGlvbi4KLS0gKi8KLSBwdWJsaWMgY2xhc3MgQmFkUGFk ZGluZ0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgIHB1YmxpYyBCYWRQYWRkaW5n RXhjZXB0aW9uKCkgewotICAgICAgICAgc3VwZXIoKTsKCmRpZmYgLS1naXQgYS9qc3MtdW5kby1K Q0EtZGVwcmVjYXRpb25zLnBhdGNoIGIvanNzLXVuZG8tSkNBLWRlcHJlY2F0aW9ucy5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxYzUxYS4uMDAwMDAwMAotLS0gYS9qc3Mt dW5kby1KQ0EtZGVwcmVjYXRpb25zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAg QEAKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL2NyeXB0by9DaXBoZXIuamF2YSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DaXBoZXIuamF2YQotLS0tIGpzcy00LjIuNi5vcmln L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ2lwaGVyLmphdmEJ MjAxMi0wMy0yMCAxNjozMDoyNi41NzAzMzgwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9DaXBoZXIuamF2YQkyMDEyLTAz LTIwIDE2OjM5OjU5LjA4MzE5NjAwMCAtMDcwMAotQEAgLTQ5LDcgKzQ5LDYgQEAgaW1wb3J0IG9y Zy5tb3ppbGxhLmpzcy51dGlsLkFzc2VydDsKLSAgKiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNh bGwgPGNvZGU+dXBkYXRlPC9jb2RlPiBpZiBhbGwgb2YgdGhlIGRhdGEgaXMKLSAgKiBhdmFpbGFi bGUgYXQgb25jZS4gIEluIHRoaXMgY2FzZSwgYWxsIG9mIHRoZSBpbnB1dCBjYW4gYmUgcHJvY2Vz c2VkIHdpdGggb25lCi0gICogY2FsbCB0byA8Y29kZT5kb0ZpbmFsPC9jb2RlPi4KLS0gKiBAZGVw cmVjYXRlZCBVc2UgdGhlIEpDQSBpbnRlcmZhY2UgaW5zdGVhZCAoe0BsaW5rIGphdmF4LmNyeXB0 by5DaXBoZXJ9KQotICAqLwotIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDaXBoZXIgewotIAotZGlm ZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvY3J5cHRvL0NyeXB0b1Rva2VuLmphdmEganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ3J5cHRvVG9rZW4uamF2YQotLS0tIGpzcy00LjIuNi5v cmlnL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ3J5cHRvVG9r ZW4uamF2YQkyMDEyLTAzLTIwIDE2OjMwOjI2LjU4NzMzODAwMCAtMDcwMAotKysrIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0NyeXB0b1Rva2Vu LmphdmEJMjAxMi0wMy0yMCAxNjo0MTo1NC43OTI5NjQwMDAgLTA3MDAKLUBAIC02MCw3ICs2MCw2 IEBAIHB1YmxpYyBpbnRlcmZhY2UgQ3J5cHRvVG9rZW4gewotICAgICAgKiBAcGFyYW0gYWxnb3Jp dGhtIFRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIHNpZ25pbmcvdmVyaWZpY2F0aW9uLgotICAg ICAgKiBAZXhjZXB0aW9uIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIElm IHRoZSBnaXZlbgotICAgICAgKiAgICAgIGFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRo aXMgcHJvdmlkZXIuCi0tICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgSkNBIGludGVyZmFjZSBp bnN0ZWFkICh7QGxpbmsgamF2YS5zZWN1cml0eS5TaWduYXR1cmV9KQotICAgICAgKi8KLSAgICAg cHVibGljIGFic3RyYWN0IG9yZy5tb3ppbGxhLmpzcy5jcnlwdG8uU2lnbmF0dXJlCi0gICAgIGdl dFNpZ25hdHVyZUNvbnRleHQoU2lnbmF0dXJlQWxnb3JpdGhtIGFsZ29yaXRobSkKLUBAIC03Myw3 ICs3Miw2IEBAIHB1YmxpYyBpbnRlcmZhY2UgQ3J5cHRvVG9rZW4gewotICAgICAgKiBAcGFyYW0g YWxnb3JpdGhtIFRoZSBhbGdvcml0aG0gdXNlZCBmb3IgZGlnZXN0aW5nLgotICAgICAgKiBAZXhj ZXB0aW9uIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIElmIHRoaXMgcHJv dmlkZXIKLSAgICAgICogIGRvZXMgbm90IHN1cHBvcnQgdGhlIGdpdmVuIGFsZ29yaXRobS4KLS0g ICAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBKQ0EgaW50ZXJmYWNlIGluc3RlYWQgKHtAbGluayBq YXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3R9KQotICAgICAgKi8KLSAgICAgcHVibGljIGFic3Ry YWN0IEpTU01lc3NhZ2VEaWdlc3QKLSAgICAgZ2V0RGlnZXN0Q29udGV4dChEaWdlc3RBbGdvcml0 aG0gYWxnb3JpdGhtKQotQEAgLTg5LDE1ICs4NywxMSBAQCBwdWJsaWMgaW50ZXJmYWNlIENyeXB0 b1Rva2VuIHsKLSAgICAgICogQHBhcmFtIGFsZ29yaXRobSBUaGUgYWxnb3JpdGhtIHVzZWQgZm9y IGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KLSAgICAgICogQGV4Y2VwdGlvbiBqYXZhLnNlY3VyaXR5 Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBJZiB0aGlzIHByb3ZpZGVyCi0gICAgICAqICAgICAg ZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gYWxnb3JpdGhtLgotLSAgICAgKiBAZGVwcmVjYXRl ZCBVc2UgdGhlIEpDQSBpbnRlcmZhY2UgaW5zdGVhZCAoe0BsaW5rIGphdmF4LmNyeXB0by5DaXBo ZXJ9KQotICAgICAgKi8KLSAgICAgcHVibGljIGFic3RyYWN0IENpcGhlcgotICAgICBnZXRDaXBo ZXJDb250ZXh0KEVuY3J5cHRpb25BbGdvcml0aG0gYWxnb3JpdGhtKQotICAgICAgICAgdGhyb3dz IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBUb2tlbkV4Y2VwdGlvbjsK LSAKLS0gICAgLyoqCi0tICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgSkNBIGludGVyZmFjZSBp bnN0ZWFkICh7QGxpbmsgamF2YXguY3J5cHRvLkNpcGhlcn0pCi0tICAgICAqLwotICAgICBwdWJs aWMgYWJzdHJhY3QgS2V5V3JhcHBlcgotICAgICBnZXRLZXlXcmFwcGVyKEtleVdyYXBBbGdvcml0 aG0gYWxnb3JpdGhtKQotICAgICAgICAgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3Jp dGhtRXhjZXB0aW9uLCBUb2tlbkV4Y2VwdGlvbjsKLUBAIC0xMjMsNyArMTE3LDYgQEAgcHVibGlj IGludGVyZmFjZSBDcnlwdG9Ub2tlbiB7Ci0gICAgICAqIEBwYXJhbSBhbGdvcml0aG0gVGhlIGFs Z29yaXRobSB0aGF0IHRoZSBrZXlzIHdpbGwgYmUgdXNlZCB3aXRoLgotICAgICAgKiBAZXhjZXB0 aW9uIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIElmIHRoaXMgdG9rZW4g ZG9lcyBub3QKLSAgICAgICogICAgICBzdXBwb3J0IHRoZSBnaXZlbiBhbGdvcml0aG0uCi0tICAg ICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgSkNBIGludGVyZmFjZSBpbnN0ZWFkICh7QGxpbmsgamF2 YXguY3J5cHRvLktleUdlbmVyYXRvcn0pCi0gICAgICAqLwotICAgICBwdWJsaWMgYWJzdHJhY3Qg S2V5R2VuZXJhdG9yCi0gICAgIGdldEtleUdlbmVyYXRvcihLZXlHZW5BbGdvcml0aG0gYWxnb3Jp dGhtKQotQEAgLTEzNiw3ICsxMjksNiBAQCBwdWJsaWMgaW50ZXJmYWNlIENyeXB0b1Rva2VuIHsK LSAgICAgICogICAgICBjYW5ub3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQgdG9rZW4u Ci0gICAgICAqIEBleGNlcHRpb24gSW52YWxpZEtleUV4Y2VwdGlvbiBJZiB0aGUgb3duaW5nIHRv a2VuIGNhbm5vdCBwcm9jZXNzCi0gICAgICAqICAgICAgdGhlIGtleSB0byBiZSBjbG9uZWQuCi0t ICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgSkNBIGludGVyZmFjZSBpbnN0ZWFkICh7QGxpbmsg amF2YXguY3J5cHRvLlNlY3JldEtleUZhY3Rvcnl9KQotICAgICAgKi8KLSAgICAgcHVibGljIFN5 bW1ldHJpY0tleSBjbG9uZUtleShTeW1tZXRyaWNLZXkga2V5KQotICAgICAgICAgdGhyb3dzIFN5 bW1ldHJpY0tleS5Ob3RFeHRyYWN0YWJsZUV4Y2VwdGlvbiwKLUBAIC0xNTEsNyArMTQzLDYgQEAg cHVibGljIGludGVyZmFjZSBDcnlwdG9Ub2tlbiB7Ci0gICAgICAqICAgICAgRFNBLCBFQywgZXRj LikKLSAgICAgICogQGV4Y2VwdGlvbiBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2Vw dGlvbiBJZiB0aGlzIHRva2VuIGRvZXMKLSAgICAgICogICAgICBub3Qgc3VwcG9ydCB0aGUgZ2l2 ZW4gYWxnb3JpdGhtLgotLSAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIEpDQSBpbnRlcmZhY2Ug aW5zdGVhZCAoe0BsaW5rIGphdmEuc2VjdXJpdHkuS2V5UGFpckdlbmVyYXRvcn0pCi0gICAgICAq LwotICAgICBwdWJsaWMgYWJzdHJhY3QgS2V5UGFpckdlbmVyYXRvcgotICAgICBnZXRLZXlQYWly R2VuZXJhdG9yKEtleVBhaXJBbGdvcml0aG0gYWxnb3JpdGhtKQotZGlmZiAtcnVwTiBqc3MtNC4y LjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU01l c3NhZ2VEaWdlc3QuamF2YSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL2NyeXB0by9KU1NNZXNzYWdlRGlnZXN0LmphdmEKLS0tLSBqc3MtNC4yLjYub3JpZy9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU01lc3NhZ2VEaWdl c3QuamF2YQkyMDEyLTAzLTIwIDE2OjMwOjI2LjU5NTMzODAwMCAtMDcwMAotKysrIGpzcy00LjIu Ni9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU01lc3NhZ2VE aWdlc3QuamF2YQkyMDEyLTAzLTIwIDE2OjM4OjMxLjk4NzM3MDAwMCAtMDcwMAotQEAgLTQxLDcg KzQxLDYgQEAgaW1wb3J0IGphdmEuc2VjdXJpdHkuSW52YWxpZEtleUV4Y2VwdGlvbgotIAotIC8q KgotICAqIEEgY2xhc3MgZm9yIHBlcmZvcm1pbmcgbWVzc2FnZSBkaWdlc3RpbmcgKGhhc2hpbmcp IGFuZCBNQUMgb3BlcmF0aW9ucy4KLS0gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIEpDQSBpbnRlcmZh Y2UgaW5zdGVhZCAoe0BsaW5rIGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdH0pCi0gICovCi0g cHVibGljIGFic3RyYWN0IGNsYXNzIEpTU01lc3NhZ2VEaWdlc3QgewotIAotZGlmZiAtcnVwTiBq c3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRv L0pTU1NlY3VyZVJhbmRvbS5qYXZhIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvY3J5cHRvL0pTU1NlY3VyZVJhbmRvbS5qYXZhCi0tLS0ganNzLTQuMi42Lm9y aWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9KU1NTZWN1cmVS YW5kb20uamF2YQkyMDA0LTA0LTI1IDA4OjAyOjIxLjAwMDAwMDAwMCAtMDcwMAotKysrIGpzcy00 LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0pTU1NlY3Vy ZVJhbmRvbS5qYXZhCTIwMTItMDMtMjAgMTY6Mzk6MDIuOTM4MzA4MDAwIC0wNzAwCi1AQCAtMzgs NyArMzgsNiBAQCBwYWNrYWdlIG9yZy5tb3ppbGxhLmpzcy5jcnlwdG87Ci0gCi0gLyoqCi0gICog QW4gaW50ZXJmYWNlIGZvciBzZWN1cmUgcmFuZG9tIG51bWJlcnMuCi0tICogQGRlcHJlY2F0ZWQg VXNlIHRoZSBKQ0EgaW50ZXJmYWNlIGluc3RlYWQgKHtAbGluayBqYXZhLnNlY3VyaXR5LlNlY3Vy ZVJhbmRvbX0pCi0gICovCi0gcHVibGljIGludGVyZmFjZSBKU1NTZWN1cmVSYW5kb20gewotIAot ZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxs YS9qc3MvY3J5cHRvL0tleUdlbmVyYXRvci5qYXZhIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleUdlbmVyYXRvci5qYXZhCi0tLS0ganNzLTQu Mi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlH ZW5lcmF0b3IuamF2YQkyMDA1LTExLTE0IDE0OjE1OjA2LjAwMDAwMDAwMCAtMDgwMAotKysrIGpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleUdl bmVyYXRvci5qYXZhCTIwMTItMDMtMjAgMTY6Mzk6MTkuNjg3Mjc0MDAwIC0wNzAwCi1AQCAtNDMs NyArNDMsNiBAQCBpbXBvcnQgamF2YS5pby5DaGFyQ29udmVyc2lvbkV4Y2VwdGlvbjsKLSAKLSAv KioKLSAgKiBHZW5lcmF0ZXMgc3ltbWV0cmljIGtleXMgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5 cHRpb24uCi0tICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBKQ0EgaW50ZXJmYWNlIGluc3RlYWQgKHtA bGluayBqYXZheC5jcnlwdG8uS2V5R2VuZXJhdG9yfSkKLSAgKi8KLSBwdWJsaWMgaW50ZXJmYWNl IEtleUdlbmVyYXRvciB7Ci0gCi1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvci5qYXZhIGpz cy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0tleVBh aXJHZW5lcmF0b3IuamF2YQotLS0tIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvci5qYXZhCTIwMTItMDMtMjAg MTY6MzA6MjUuNzU1MzQwMDAwIC0wNzAwCi0rKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5UGFpckdlbmVyYXRvci5qYXZhCTIwMTItMDMt MjAgMTY6Mzg6MDMuNjM1NDI2MDAwIC0wNzAwCi1AQCAtNDksNyArNDksNiBAQCBpbXBvcnQgamF2 YS5zZWN1cml0eS5zcGVjLkFsZ29yaXRobVBhcmFtCi0gICogPGNvZGU+a2V5Z2VuT25JbnRlcm5h bFRva2VuPC9jb2RlPiB0byBmaW5kIG91dCBpZiB0aGlzIGlzIGhhcHBlbmluZy4KLSAgKgotICAq IEBzZWUgb3JnLm1vemlsbGEuanNzLmNyeXB0by5DcnlwdG9Ub2tlbiNnZXRLZXlQYWlyR2VuZXJh dG9yCi0tICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBKQ0EgaW50ZXJmYWNlIGluc3RlYWQgKHtAbGlu ayBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5lcmF0b3J9KQotICAqLwotIHB1YmxpYyBjbGFzcyBL ZXlQYWlyR2VuZXJhdG9yIHsKLSAKLWRpZmYgLXJ1cE4ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9z ZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9LZXlXcmFwcGVyLmphdmEganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5V3JhcHBl ci5qYXZhCi0tLS0ganNzLTQuMi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL2NyeXB0by9LZXlXcmFwcGVyLmphdmEJMjAwNC0wNC0yNSAwODowMjoyMS4wMDAwMDAw MDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEv anNzL2NyeXB0by9LZXlXcmFwcGVyLmphdmEJMjAxMi0wMy0yMCAxNjozOTo0MC41NTEyMzIwMDAg LTA3MDAKLUBAIC00MCw5ICs0MCw2IEBAIGltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdv cml0aG1QYXIKLSBpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7Ci0gaW1wb3J0IGphdmEu c2VjdXJpdHkuSW52YWxpZEtleUV4Y2VwdGlvbjsKLSAKLS0vKioKLS0gKiBAZGVwcmVjYXRlZCBV c2UgdGhlIEpDQSBpbnRlcmZhY2UgaW5zdGVhZCAoe0BsaW5rIGphdmF4LmNyeXB0by5DaXBoZXJ9 KQotLSAqLwotIHB1YmxpYyBpbnRlcmZhY2UgS2V5V3JhcHBlciB7Ci0gCi0gICAgIHB1YmxpYyB2 b2lkIGluaXRXcmFwKFN5bW1ldHJpY0tleSB3cmFwcGluZ0tleSwKLWRpZmYgLXJ1cE4ganNzLTQu Mi42Lm9yaWcvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TaWdu YXR1cmUuamF2YSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L2NyeXB0by9TaWduYXR1cmUuamF2YQotLS0tIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vU2lnbmF0dXJlLmphdmEJMjAwNC0wNC0yNSAw ODowMjoyMS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TaWduYXR1cmUuamF2YQkyMDEyLTAzLTIwIDE2OjM4 OjQ2LjQ2ODM0MDAwMCAtMDcwMAotQEAgLTQ0LDcgKzQ0LDYgQEAgaW1wb3J0IGphdmEuc2VjdXJp dHkuc3BlYy5BbGdvcml0aG1QYXJhbQotICAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBi ZSBvYnRhaW4gZnJvbSA8Y29kZT5DcnlwdG9Ub2tlbjwvY29kZT5zLgotICAqCi0gICogQHNlZSBv cmcubW96aWxsYS5qc3MuY3J5cHRvLkNyeXB0b1Rva2VuI2dldFNpZ25hdHVyZUNvbnRleHQKLS0g KiBAZGVwcmVjYXRlZCBVc2UgdGhlIEpDQSBpbnRlcmZhY2UgaW5zdGVhZCAoe0BsaW5rIGphdmEu c2VjdXJpdHkuU2lnbmF0dXJlfSkKLSAgKi8KLSBwdWJsaWMgY2xhc3MgU2lnbmF0dXJlIHsgCi0g Ci1kaWZmIC1ydXBOIGpzcy00LjIuNi5vcmlnL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy90ZXN0cy9TaWdUZXN0LmphdmEganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNz L29yZy9tb3ppbGxhL2pzcy90ZXN0cy9TaWdUZXN0LmphdmEKLS0tLSBqc3MtNC4yLjYub3JpZy9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvU2lnVGVzdC5qYXZhCTIw MDUtMTEtMjMgMTU6NDA6MjYuMDAwMDAwMDAwIC0wODAwCi0rKysganNzLTQuMi42L21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy90ZXN0cy9TaWdUZXN0LmphdmEJMjAxMi0wMy0y MCAxNjozNToxMy42NTM3NjYwMDAgLTA3MDAKLUBAIC0zNywxNSArMzcsMTAgQEAKLSAKLSAvKiBU aGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyB0byBzaWduIGRhdGEgd2l0aCBrZXlzIGZyb20g SlNTCi0gICoKLS0gKiBNb3N0IG9mIHRoaXMgY29kZSBpcyBkZXByZWNhdGVkIGxvb2sgYXQgSkNB U2lnVGVzdC5qYXZhCi0tICoKLSAgKiBUaGUgdG9rZW4gbmFtZSBjYW4gYmUgZWl0aGVyIHRoZSBu YW1lIG9mIGEgaGFyZHdhcmUgdG9rZW4sIG9yCi0gICogb25lIG9mIHRoZSBpbnRlcm5hbCB0b2tl bnM6Ci0gICogIEludGVybmFsIENyeXB0byBTZXJ2aWNlcyBUb2tlbgotICAqICBJbnRlcm5hbCBL ZXkgU3RvcmFnZSBUb2tlbiAgICAoa2V5cyBzdG9yZWQgaW4ga2V5My5kYikKLS0gKgotLSAqIEBz ZWUgb3JnLm1vemlsbGEuanNzLnRlc3RzLkpDQVNpZ1Rlc3QKLS0gKiBAZGVwcmVjYXRlZCBVc2Ug dGhlIEpDQSBpbnRlcmZhY2UgaW5zdGVhZAotICAqLwotIAotIHBhY2thZ2Ugb3JnLm1vemlsbGEu anNzLnRlc3RzOwotZGlmZiAtcnVwTiBqc3MtNC4yLjYub3JpZy9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvYWxsLnBsIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvYWxsLnBsCi0tLS0ganNzLTQuMi42Lm9yaWcvbW96 aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL2FsbC5wbAkyMDA3LTEyLTIw IDEwOjM4OjQ0LjAwMDAwMDAwMCAtMDgwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvdGVzdHMvYWxsLnBsCTIwMTItMDMtMjAgMTY6MzY6MzcuNzEx NTk4MDAwIC0wNzAwCi1AQCAtNTM0LDYgKzUzNCwxMCBAQCAkdGVzdG5hbWUgPSAiTW96aWxsYS1K U1MgSkNBIFNpZ25hdHVyZSAiCi0gJGNvbW1hbmQgPSAiJGphdmEgLWNwICRqc3NfY2xhc3NwYXRo IG9yZy5tb3ppbGxhLmpzcy50ZXN0cy5KQ0FTaWdUZXN0ICR0ZXN0ZGlyICRwd2ZpbGUiOwotIHJ1 bl90ZXN0KCR0ZXN0bmFtZSwgJGNvbW1hbmQpOwotIAotKyR0ZXN0bmFtZSA9ICJNb3ppbGxhLUpT UyBOU1MgU2lnbmF0dXJlICI7Ci0rJGNvbW1hbmQgPSAiJGphdmEgLWNwICRqc3NfY2xhc3NwYXRo IG9yZy5tb3ppbGxhLmpzcy50ZXN0cy5TaWdUZXN0ICR0ZXN0ZGlyICRwd2ZpbGUiOwotK3J1bl90 ZXN0KCR0ZXN0bmFtZSwgJGNvbW1hbmQpOwotKwotICR0ZXN0bmFtZSA9ICJTZWNyZXQgRGVjb2Rl ciBSaW5nIjsKLSAkY29tbWFuZCA9ICIkamF2YSAtY3AgJGpzc19jbGFzc3BhdGggb3JnLm1vemls bGEuanNzLnRlc3RzLlRlc3RTRFIgJHRlc3RkaXIgJHB3ZmlsZSI7Ci0gcnVuX3Rlc3QoJHRlc3Ru YW1lLCAkY29tbWFuZCk7CgpkaWZmIC0tZ2l0IGEvanNzLXVud3JhcC1BRVMtc3ltLWtleXMtb24t dG9rZW4ucGF0Y2ggYi9qc3MtdW53cmFwLUFFUy1zeW0ta2V5cy1vbi10b2tlbi5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwMjRjNy4uMDAwMDAwMAotLS0gYS9qc3MtdW53 cmFwLUFFUy1zeW0ta2V5cy1vbi10b2tlbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICsw LDAgQEAKLWRpZmYgLXVwIC4vanNzLTQuMi42LmFlcy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEuYWVzIC4vanNzLTQuMi42LmFl cy9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFw cGVyLmphdmEKLS0tLSAuL2pzcy00LjIuNi5hZXMvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhLmFlcwkyMDE3LTAxLTAzIDE3OjE0 OjU3LjY0MjI3ODk4OSAtMDgwMAotKysrIC4vanNzLTQuMi42LmFlcy9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEJMjAxNy0wMS0w MyAxNzo0NDowMy4yMjA2MjY0NjAgLTA4MDAKLUBAIC02MTcsNyArNjE3LDkgQEAgZmluYWwgY2xh c3MgUEsxMUtleVdyYXBwZXIgaW1wbGVtZW50cyBLZQotICAgICAgICAgICAgIHJldHVybiBFbmNy eXB0aW9uQWxnb3JpdGhtLkRFUzNfRUNCOwotICAgICAgICAgfSBlbHNlIGlmKCB0eXBlID09IFN5 bW1ldHJpY0tleS5SQzQgKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIEVuY3J5cHRpb25BbGdvcml0 aG0uUkM0OwotLSAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgIH0gZWxzZSBpZiggdHlwZSA9PSBT eW1tZXRyaWNLZXkuQUVTICkgewotKyAgICAgICAgICAgIHJldHVybiBFbmNyeXB0aW9uQWxnb3Jp dGhtLkFFU18xMjhfRUNCOwotKyAgICAgICAgfSBlbHNlICB7Ci0gICAgICAgICAgICAgQXNzZXJ0 Ll9hc3NlcnQoIHR5cGUgPT0gU3ltbWV0cmljS2V5LlJDMiApOwotICAgICAgICAgICAgIHJldHVy biBFbmNyeXB0aW9uQWxnb3JpdGhtLlJDMl9DQkM7Ci0gICAgICAgICB9CgpkaWZmIC0tZ2l0IGEv anNzLXdyYXBJblRva2VuLnBhdGNoIGIvanNzLXdyYXBJblRva2VuLnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA2OTc4OTVmLi4wMDAwMDAwCi0tLSBhL2pzcy13cmFwSW5Ub2tl bi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi1kaWZmIC11cCBqc3MtNC4y LjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3Jh cHBlci5jLmNmdSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3BrY3MxMS9QSzExS2V5V3JhcHBlci5jCi0tLS0ganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuYy5jZnUJMjAxMS0xMC0x OCAwOToxNjowOC4zNjIwMDAwMDAgLTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0 eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5jCTIwMTEtMTAtMTkg MTc6NTU6MDEuMTYyMDAwMDAwIC0wNzAwCi1AQCAtMjgzLDggKzI4Myw5IEBAIEphdmFfb3JnX21v emlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAgICAgc3RhdHVzID0gUEsxMV9XcmFwUHJp dktleShzbG90LCB3cmFwcGluZywgdG9CZVdyYXBwZWQsIG1lY2gsIHBhcmFtLAotICAgICAgICAg ICAgICAgICAmd3JhcHBlZCwgTlVMTCAvKiB3aW5jeCAqLyApOwotICAgICBpZihzdGF0dXMgIT0g U0VDU3VjY2VzcykgewotLSAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgVE9LRU5fRVhDRVBUSU9O LAotLSAgICAgICAgICAgICAgICAiV3JhcHBpbmcgb3BlcmF0aW9uIGZhaWxlZCBvbiB0b2tlbiIp OwotKyAgICAgICAgY2hhciBlcnJbMjU2XSA9IHswfTsKLSsgICAgICAgIFBSX3NucHJpbnRmKGVy ciwgMjU2LCAiV3JhcHBpbmcgb3BlcmF0aW9uIGZhaWxlZCBvbiB0b2tlbjolZCIsIFBSX0dldEVy cm9yKCkpOwotKyAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgVE9LRU5fRVhDRVBUSU9OLCBlcnIp OwotICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgIH0KLSAgICAgUFJfQVNTRVJUKHdyYXBwZWQu bGVuPjAgJiYgd3JhcHBlZC5kYXRhIT1OVUxMKTsKLUBAIC0zMjgsMTEgKzMyOSwxNSBAQCBKYXZh X29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVdyYXBwCi0gICAgIGludCBudW1BdHRyaWJz ID0gMDsKLSAgICAgQ0tfVE9LRU5fSU5GTyB0b2tlbkluZm87Ci0gCi0rICAgIC8qIGlkZWFsIGRl ZmF1bHRzICovCi0gICAgIFBSQm9vbCBpc1NlbnNpdGl2ZSA9IFBSX1RSVUU7Ci0gICAgIFBSQm9v bCBpc0V4dHJhY3RhYmxlID0gUFJfRkFMU0U7Ci0tICAgIC8qIHNwZWNpYWwgY2FzZSBuZXRoc20q LwotKwotKyAgICAvKiBzcGVjaWFsIGNhc2UgbmV0aHNtIGFuZCBsdW5hc2EqLwotICAgICBDS19V VEY4Q0hBUiBuZXRoc21MYWJlbFs0XSA9IHsnTicsJ0gnLCdTJywnTSd9OwotKyAgICBDS19VVEY4 Q0hBUiBsdW5hc2FMYWJlbFs0XSA9IHsnbCcsJ3UnLCduJywnYSd9OwotICAgICBQUkJvb2wgaXNO ZXRoc20gPSBQUl9UUlVFOwotKyAgICBQUkJvb2wgaXNMdW5hc2EgPSBQUl9UUlVFOwotIAotICAg ICBpZiggSlNTX1BLMTFfZ2V0VG9rZW5TbG90UHRyKGVudiwgdG9rZW5PYmosICZzbG90KSAhPSBQ Ul9TVUNDRVNTKSB7Ci0gICAgICAgICAvKiBleGNlcHRpb24gd2FzIHRocm93biAqLwotQEAgLTM0 Nyw5ICszNTIsMTcgQEAgSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFLZXlXcmFwcAot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSsgICAg ICAgIGl4ID0gMDsKLSsgICAgICAgIGZvcihpeD0wOyBpeCA8IDQ7IGl4KyspIHsKLSsgICAgICAg ICAgICBpZiAodG9rZW5JbmZvLmxhYmVsW2l4XSAhPSBsdW5hc2FMYWJlbFtpeF0pIHsKLSsgICAg ICAgICAgICAgICBpc0x1bmFzYSA9IFBSX0ZBTFNFOwotKyAgICAgICAgICAgICAgIGJyZWFrOwot KyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSAKLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIGlz TmV0aHNtID0gUFJfRkFMU0U7Ci0rICAgICAgICBpc0x1bmFzYSA9IFBSX0ZBTFNFOwotICAgICB9 Ci0gCi0gICAgIC8qIGdldCB1bndyYXBwaW5nIGtleSAqLwotQEAgLTQxMiwyMyArNDI1LDI1IEBA IEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKLSAgICAgfQotICAgICBr ZXlUeXBlID0gUEsxMV9HZXRLZXlUeXBlKGtleVR5cGVNZWNoLCAwKTsKLSAKLSsgICAgLyogc3Bl Y2lhbCBjYXNlIG5ldGhzbSBhbmQgbHVuYXNhKi8KLSAgICAgaWYoIGlzTmV0aHNtICkgewotICAg ICAgICAgaXNTZW5zaXRpdmUgPSBQUl9GQUxTRTsKLSAgICAgICAgIGlzRXh0cmFjdGFibGUgPSBQ Ul9GQUxTRTsKLSsgICAgfSBlbHNlIGlmICggaXNMdW5hc2EpIHsKLSsgICAgICAgIGlzU2Vuc2l0 aXZlID0gUFJfRkFMU0U7Ci0rICAgICAgICBpc0V4dHJhY3RhYmxlID0gUFJfVFJVRTsKLSAgICAg fQotIAotLXNldEF0dHJzOgotICAgICAvKiBmaWd1cmUgb3V0IHdoaWNoIG9wZXJhdGlvbnMgdG8g ZW5hYmxlIGZvciB0aGlzIGtleSAqLwotICAgICBzd2l0Y2ggKGtleVR5cGUpIHsKLSAgICAgY2Fz ZSBDS0tfUlNBOgotKyAgICAgICAgbnVtQXR0cmlicyA9IDM7Ci0gICAgICAgICBhdHRyaWJzWzBd ID0gQ0tBX1NJR047Ci0gICAgICAgICBhdHRyaWJzWzFdID0gQ0tBX1NJR05fUkVDT1ZFUjsKLSAg ICAgICAgIGF0dHJpYnNbMl0gPSBDS0FfVU5XUkFQOwotICAgICAgICAgaWYgKGlzRXh0cmFjdGFi bGUpIHsKLSAgICAgICAgICAgICBhdHRyaWJzWzNdID0gQ0tBX0VYVFJBQ1RBQkxFOwotICAgICAg ICAgICAgIG51bUF0dHJpYnMgPSA0OwotLSAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICBu dW1BdHRyaWJzID0gMzsKLSAgICAgICAgIH0KLSAJYnJlYWs7Ci0gICAgIGNhc2UgQ0tLX0RTQToK LUBAIC00NTksNyArNDc0LDkgQEAgc2V0QXR0cnM6Ci0gICAgICAgICAgICAgICAgICZsYWJlbCwg cHViVmFsdWUsIHRva2VuLCBpc1NlbnNpdGl2ZSAvKnNlbnNpdGl2ZSovLCBrZXlUeXBlLAotICAg ICAgICAgICAgICAgICBhdHRyaWJzLCBudW1BdHRyaWJzLCBOVUxMIC8qd2luY3gqLyk7Ci0gICAg IGlmKCBwcml2ayA9PSBOVUxMICkgewotLSAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgVE9LRU5f RVhDRVBUSU9OLCAiS2V5IFVud3JhcCBmYWlsZWQgb24gdG9rZW4iKTsKLSsgICAgICAgIGNoYXIg ZXJyWzI1Nl0gPSB7MH07Ci0rICAgICAgICBQUl9zbnByaW50ZihlcnIsIDI1NiwgIktleSBVbndy YXAgZmFpbGVkIG9uIHRva2VuOiVkIiwgUFJfR2V0RXJyb3IoKSk7Ci0rICAgICAgICBKU1NfdGhy b3dNc2coZW52LCBUT0tFTl9FWENFUFRJT04sIGVycik7Ci0gICAgICAgICBnb3RvIGZpbmlzaDsK LSAgICAgfQotICAgICAgICAgICAgICAgICAKLWRpZmYgLXVwIGpzcy00LjIuNi9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEuY2Z1 IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFLZXlXcmFwcGVyLmphdmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhLmNmdQkyMDExLTEwLTE4IDE1 OjI5OjUwLjU5NzAwMDAwMCAtMDcwMAotKysrIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEJMjAxMS0xMC0xOCAx NTo0OTo0MC4wNzMwMDAwMDAgLTA3MDAKLUBAIC0zMjIsMTAgKzMyMiwxMyBAQCBmaW5hbCBjbGFz cyBQSzExS2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCi0gICAgICAgICAgICAgdGhyb3cgbmV3IElu dmFsaWRLZXlFeGNlcHRpb24oImtleSB0byBiZSB3cmFwcGVkIGlzIG5vdCBhICIrCi0gICAgICAg ICAgICAgICAgICJQS0NTICMxMSBrZXkiKTsKLSAgICAgICAgIH0KLSsvKiBOU1MgaXMgY2FwYWJs ZSBvZiBtb3Zpbmcga2V5cyBhcHByb3ByaWF0ZWx5LAotKyAgIHNvIHRoaXMgY2FsbCBpcyBwcmVt YXR1cmVseSBiYWlsaW5nCi0gICAgICAgICBpZiggISBzeW1LZXkuZ2V0T3duaW5nVG9rZW4oKS5l cXVhbHModG9rZW4pICkgewotICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkS2V5RXhjZXB0 aW9uKCJrZXkgdG8gYmUgd3JhcHBlZCBkb2VzIG5vdCBsaXZlIisKLSAgICAgICAgICAgICAgICAg IiBvbiB0aGUgc2FtZSB0b2tlbiBhcyB0aGUgd3JhcHBpbmcga2V5Iik7Ci0gICAgICAgICB9Ci0r Ki8KLSAgICAgfQotIAotICAgICAvKioKLUBAIC0zNDAsMTAgKzM0MywxMyBAQCBmaW5hbCBjbGFz cyBQSzExS2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCi0gICAgICAgICAgICAgdGhyb3cgbmV3IElu dmFsaWRLZXlFeGNlcHRpb24oImtleSB0byBiZSB3cmFwcGVkIGlzIG5vdCBhICIrCi0gICAgICAg ICAgICAgICAgICJQS0NTICMxMSBrZXkiKTsKLSAgICAgICAgIH0KLSsvKiBOU1MgaXMgY2FwYWJs ZSBvZiBtb3Zpbmcga2V5cyBhcHByb3ByaWF0ZWx5LAotKyAgIHNvIHRoaXMgY2FsbCBpcyBwcmVt YXR1cmVseSBiYWlsaW5nCi0gICAgICAgICBpZiggISBwcml2S2V5LmdldE93bmluZ1Rva2VuKCku ZXF1YWxzKHRva2VuKSApIHsKLSAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEtleUV4Y2Vw dGlvbigia2V5IHRvIGJlIHdyYXBwZWQgZG9lcyBub3QgbGl2ZSIrCi0gICAgICAgICAgICAgICAg ICIgb24gdGhlIHNhbWUgdG9rZW4gYXMgdGhlIHdyYXBwaW5nIGtleSIpOwotICAgICAgICAgfQot KyovCi0gICAgIH0KLSAKLSAgICAgLyoqCi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExVG9rZW4uamF2YS5jZnUganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRva2Vu LmphdmEKLS0tLSBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3BrY3MxMS9QSzExVG9rZW4uamF2YS5jZnUJMjAxMS0xMC0xOCAxNDozNDozMi4xNDgwMDAwMDAg LTA3MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3BrY3MxMS9QSzExVG9rZW4uamF2YQkyMDExLTEwLTE4IDE0OjM1OjIwLjQwMjAwMDAwMCAtMDcw MAotQEAgLTEzNSwxMCArMTM1LDEzIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQSzExVG9rZW4gaW1w bGVtZW50cyAKLSAgICAgZ2V0S2V5V3JhcHBlcihLZXlXcmFwQWxnb3JpdGhtIGFsZ29yaXRobSkK LSAgICAgICAgIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIFRva2VuRXhjZXB0aW9u Ci0gICAgIHsKLSsvKiBOU1MgaXMgY2FwYWJsZSBvZiBmaW5kaW5nIHRoZSByaWdodCB0b2tlbiB0 byBkbyBhbGdvcml0aG0sCi0rICAgc28gdGhpcyBjYWxsIGlzIHByZW1hdHVyZWx5IGJhaWxpbmcK LSAgICAgICAgIGlmKCAhIGRvZXNBbGdvcml0aG0oYWxnb3JpdGhtKSApIHsKLSAgICAgICAgICAg ICB0aHJvdyBuZXcgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICBh bGdvcml0aG0rIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9rZW4iKTsKLSAgICAgICAgIH0K LSsqLwotICAgICAgICAgcmV0dXJuIG5ldyBQSzExS2V5V3JhcHBlcih0aGlzLCBhbGdvcml0aG0p OwotICAgICB9Ci0gCi1kaWZmIC11cCBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BraXgvcHJpbWl0aXZlL0VuY3J5cHRlZFByaXZhdGVLZXlJbmZvLmphdmEu Y2Z1IGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9w cmltaXRpdmUvRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8uamF2YQotLS0tIGpzcy00LjIuNi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtpeC9wcmltaXRpdmUvRW5jcnlwdGVk UHJpdmF0ZUtleUluZm8uamF2YS5jZnUJMjAxMS0xMC0xOCAwOToyNDoxMy43OTYwMDEwMDAgLTA3 MDAKLSsrKyBqc3MtNC4yLjYvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Br aXgvcHJpbWl0aXZlL0VuY3J5cHRlZFByaXZhdGVLZXlJbmZvLmphdmEJMjAxMS0xMC0xOCAxNTo0 MToyNC42ODcwMDAwMDAgLTA3MDAKLUBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljIGNsYXNzIEVu Y3J5cHRlZFByaXZhdGVLZXlJbmZvIGltcAotICAgICAgICAgfQotIAotICAgICAgICAgS2V5V3Jh cHBlciB3cmFwcGVyID0gdG9rZW4uZ2V0S2V5V3JhcHBlcigKLS0gICAgICAgICAgICAgICAgS2V5 V3JhcEFsZ29yaXRobS5ERVMzX0NCQyk7Ci0rICAgICAgICAgICAgICAgIEtleVdyYXBBbGdvcml0 aG0uREVTM19DQkNfUEFEKTsKLSAgICAgICAgIHdyYXBwZXIuaW5pdFdyYXAoa2V5LCBwYXJhbXMp OwotICAgICAgICAgYnl0ZSBlbmNyeXB0ZWRbXSA9IHdyYXBwZXIud3JhcChwcmkpOwotIAotQEAg LTI2MCw2ICsyNjAsNyBAQCBwdWJsaWMgY2xhc3MgRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8gaW1w Ci0gICAgICAgICByZXR1cm4gZXBraTsKLSAKLSAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg ewotKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVQQkU6IGV4Y2VwdGlvbjoiK2Uu dG9TdHJpbmcoKSk7Ci0gICAgICAgICBBc3NlcnQubm90UmVhY2hlZCgiRW5jcnlwdGVkUHJpdmF0 ZUtleUluZm8gZXhjZXB0aW9uOiIKLSAgICAgICAgICAgICArIi5jcmVhdGVQQkUiKTsKLSAgICAg ICB9CgpkaWZmIC0tZ2l0IGEvanNzLnNwZWMgYi9qc3Muc3BlYwppbmRleCAwMDQ3ZjRiLi45MDBh MWVlIDEwMDY0NAotLS0gYS9qc3Muc3BlYworKysgYi9qc3Muc3BlYwpAQCAtMTEsNiArMTEsNyBA QCBMaWNlbnNlOiAgICAgICAgTVBMdjEuMSBvciBHUEx2Misgb3IgTEdQTHYyKwogVVJMOiAgICAg ICAgICAgIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL2pzcy8K ICMgVGhlIHNvdXJjZSBmb3IgdGhpcyBwYWNrYWdlIHdhcyBwdWxsZWQgZnJvbSB1cHN0cmVhbSdz IGhnLiBVc2UgdGhlCiAjIGZvbGxvd2luZyBjb21tYW5kcyB0byBnZW5lcmF0ZSB0aGUgdGFyYmFs bDoKKyMKICMgaGcgY2xvbmUgLS1yZXYgSlNTXzRfNF8wX1JUTSBodHRwczovL2hnLm1vemlsbGEu b3JnL3Byb2plY3RzL2pzcyBqc3MtNC40LjAvanNzCiAjIHJtIC1yZiBqc3MtNC40LjAvanNzLy5o ZwogIyBpZiB0aGUgdGFyYmFsbCBpcyBCZXRhLCBzZXQgdGhpcyBkZWZpbmUgaW4gJ29yZy9tb3pp bGxhL2pzcy91dGlsL2pzc3Zlci5oJzoKQEAgLTE5LDkgKzIwLDE2IEBAIFVSTDogICAgICAgICAg ICBodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9qc3MvCiAjICAg ICAjZGVmaW5lIEpTU19CRVRBICAgICBQUl9GQUxTRQogIyB0YXIgLWN6dmYganNzLTQuNC4wLnRh ci5neiBqc3MtNC40LjAKICMKLSMgRm9yIG5vdyB1dGlsIHRoZSBKU1NfNF80XzBfUlRNIHRhZyBp cyBjcmVhdGVkIEkgYWN0dWFsbHkgdXNlZDogCi0jIGhnIGNsb25lIC0tcmV2IGIxYzY2NjBlN2U3 MSBodHRwczovL2hnLm1vemlsbGEub3JnL3Byb2plY3RzL2pzcyBqc3MtNC40LjAvanNzCi0jIFRo aXMgaXMgZnJvbSB1cHN0cmVhbSB0aXAKKyMgRm9yIG5vdyB1bnRpbCB0aGUgSlNTXzRfNF8wX1JU TSB0YWcgaXMgY3JlYXRlZCBJIGFjdHVhbGx5IHVzZWQ6IAorIyBoZyBjbG9uZSAtLXJldiBkNDhm NjNiOTJiMDUgaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9qc3MganNzLTQuNC4wL2pz cworIyBUaGlzIGlzIGZyb20gdXBzdHJlYW0gdGlwIGFzIG9mIE1vbiwgMTMgTWFyIDIwMTcgMTE6 NDk6NTEgLTA3MDAKKyMgaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9qc3MvcmV2L2Q0 OGY2M2I5MmIwNTM4ZTQ3ZTg2NzEyMmM0NzVjZmJjMTMzNGY3YzkKKyMKKyMgQWx0ZXJuYXRpdmVs eSAoaWYgdXNpbmcgJ2RlZmF1bHQnIGhnIHRpcCk6CisjCisjIGhnIGNsb25lIGh0dHBzOi8vaGcu bW96aWxsYS5vcmcvcHJvamVjdHMvanNzCisjIGNkIGpzcworIyBoZyBhcmNoaXZlIC0tcHJlZml4 IGpzcy00LjQuMC9qc3MvIC4uL2pzcy00LjQuMC50YXIuZ3oKICMKIFNvdXJjZTA6ICAgICAgICBo dHRwOi8vcGtpLmZlZG9yYXByb2plY3Qub3JnL3BraS9zb3VyY2VzLyV7bmFtZX0vJXtuYW1lfS0l e3ZlcnNpb259LSV7cmVsZWFzZX0vJXtuYW1lfS0le3ZlcnNpb259LnRhci5negogU291cmNlMTog ICAgICAgIGh0dHA6Ly9wa2kuZmVkb3JhcHJvamVjdC5vcmcvcGtpL3NvdXJjZXMvJXtuYW1lfS8l e25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS9NUEwtMS4xLnR4dApAQCAtMTE0LDcgKzEyMiw3 IEBAIGNwIC1wICV7U09VUkNFM30gLgogCiAjIGphcnMKIGluc3RhbGwgLWQgLW0gMDc1NSAkUlBN X0JVSUxEX1JPT1Qle19qbmlkaXJ9Ci0jIE5PVEU6IGlmIGRvaW5nIGEgZGVidWcgbm8gb3B0IGJ1 aWxkIGNoYW5nZSB4cGNsYXNzLmphciB0byB4cGNsYXNzX2RlYnVnLmphcgorIyBOT1RFOiBpZiBk b2luZyBhIGRlYnVnIG5vIG9wdCBidWlsZCBjaGFuZ2UgeHBjbGFzcy5qYXIgdG8geHBjbGFzc19k YmcuamFyCiBpbnN0YWxsIC1tIDY0NCBkaXN0L3hwY2xhc3MuamFyICR7UlBNX0JVSUxEX1JPT1R9 JXtfam5pZGlyfS9qc3M0LmphcgogCiAjIFdlIGhhdmUgdG8gdXNlIHRoZSBuYW1lIGxpYmpzczQu c28gYmVjYXVzZSB0aGlzIGlzIGR5bmFtaWNhbGx5CkBAIC0xNDksOCArMTU3LDggQEAgcm0gLXJm ICRSUE1fQlVJTERfUk9PVAogCiAKICVjaGFuZ2Vsb2cKLSogU2F0IE1hciAxMSAyMDE3IEVsaW8g TWFsZG9uYWRvIDxlbWFsZG9uYUByZWRoYXQuY29tPiAtIDQuNC4wLTAuMQotLSBFeHBlcmltZW50 YWwgYnVpbGQgdG8gcmViYXNlIHRvIGpzcy00LjQuMAorKiBNb24gTWFyIDEzIDIwMTcgRWxpbyBN YWxkb25hZG8gPGVtYWxkb25hQHJlZGhhdC5jb20+IC0gNC40LjAtMQorLSBCdWd6aWxsYSBCdWcg IzE0MzE5MzcgLSBSZWJhc2UganNzIHRvIDQuNC4wIGluIEZlZG9yYSAyNSsKIC0gIyMgSlNTIDQu NC4wIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyBwb3J0ZWQgZnJvbSBkb3duc3RyZWFt OgogLSBNb3ppbGxhIEJ1Z3ppbGxhICM1MDc1MzYgLSBBZGQgSVB2NiBmdW5jdGlvbmFsaXR5IHRv IEpTUwogLSBNb3ppbGxhIEJ1Z3ppbGxhICMxMzA3ODcyIC0gRXhwb3NlIE5TUyBjYWxscyBmb3Ig T0NTUCBzZXR0aW5ncwoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGE1ZDVj YTMuLmI2MDc0OTEgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBA QAotU0hBNTEyIChqc3MtNC4yLjYudGFyLmd6KSA9IDU4MjdjMGZkMTkyZjBlYzUyNzk4ZGYyMzA0 NjE5MzY3YzY3MzY2YmZlMTllOGRjN2JkMGFhODgyZWZhNmM2MmFmYmM1ZTlhZTU3NmQxNjhmOTY2 NmE5YWYxZGU2NjMzNDk5NWM5NDExZjBmNjA2MjNlNzUyYWY1ZmUxMTk0OTE1CitTSEE1MTIgKGpz cy00LjQuMC50YXIuZ3opID0gMmEzYzZjM2E1ZjBiM2ZlNWIwYTUwM2EwNGNlMGZhMzQ3NWU1ZTc5 ZjVmMzRhYjQzMTgzODRmMjJjNGYwNjg5ZDE4MzU4NWI4NjE2MjQyMDAxNDMxNjFlNGZmNWM3YTZk ZWFkODFlZDI4MjRlMzliZDdkZjc0ODA0ZGJjYWNlMjEK