From kfm-devel Wed Dec 12 03:41:26 2001 From: Doug Hanley Date: Wed, 12 Dec 2001 03:41:26 +0000 To: kfm-devel Subject: [patch] Preliminary Tabbed Browsing in Konqueror X-MARC-Message: https://marc.info/?l=kfm-devel&m=100819260515974 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------Boundary-00=_2XO7GSVHEX1WF551N6WK" --------------Boundary-00=_2XO7GSVHEX1WF551N6WK Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hello, After silently waiting for tabs to come into konqueror for quite a while, I decided that I would just try and do it myself. After some coding, I decided it would be best if i released what I have done so far. As for the design, I started out by making a base class for all frame containers called KonqFrameContainerBase which had basic functions like addChildFrame and removeChildFrame, then I made the original KonqFrameContainer derive that, and I made a new class called KonqFrameTabs which also dervies KonqFrameContainerBase and QTabWidget. I then went into KonqViewManager and made it so that m_pMainContainer is always a tab widget (if you're gonna use tabs, it makes sense that you would only use them at the top level, right?). Then all the frame splitting and such takes place under that as it has always done. I made changes to the printfullhierarchy in KonqViewManager, which only really applies to debuging but still its there. I also changed the way frames are deleted. I wasn't sure about this one since it changed quite a few things, but it made more sense to me. Now when frames are deleted all you do is call delete on the frame you want to delete and through class destructors, it will hierarchially delete subframes of the original frame. You still have to take care of deleting views but this can be done easily though the listViews function in KonqFrameBase. Again, this last change is not essential to tabs, so it can be removed if it needs to be. Now, with these changes there is no need for the splitWindow function, and I've added the addTab and removeTab functions. Also, to account for people who dont want tabs, when there is only one tab, the tab bar gets hidden, so its acts as it normally would without tabs. Only problem is that there is a still a grey space where the hidden tab bar resides, i havent been able to fix that. Another thing that needs work, is focus after the removal of a frame Remember to add the following lines to your konqueror.rc to get the new menu items under the window menu (on debian its in /usr/share/apps/konqueror/): I think thats it, if you have any more questions, which I assume you will, feel free to ask. This patch works for 2.2.1 and 2.2.2. For some reason, I cant compile kde3. Oh yeah, this is very much a work in progress. I am well aware that there are bugs in it, additional help would be much appreciated. Best regards, Doug Hanley --------------Boundary-00=_2XO7GSVHEX1WF551N6WK Content-Type: text/x-diff; charset="iso-8859-1"; name="konqtabs.patch" Content-Transfer-Encoding: base64 Content-Description: Adds Tabbed Browsing to Konqueror Content-Disposition: attachment; filename="konqtabs.patch" Q29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL0NWUyBh bmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvQ1ZTCkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2Rl YmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9hYm91dCBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVy b3IvYWJvdXQKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVl cm9yL2NsaWVudCBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvY2xpZW50CkNvbW1vbiBzdWJk aXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9kaXJ0cmVlIGFuZCBrZGVi YXNlLTIuMi4yL2tvbnF1ZXJvci9kaXJ0cmVlCkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFz ZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9oaXN0b3J5IGFuZCBrZGViYXNlLTIuMi4yL2tvbnF1ZXJv ci9oaXN0b3J5CkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1 ZXJvci9pY29udmlldyBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvaWNvbnZpZXcKQ29tbW9u IHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tlZGl0Ym9va21h cmtzIGFuZCBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rZWRpdGJvb2ttYXJrcwpDb21tb24gc3Vi ZGlyZWN0b3JpZXM6IGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva2ZpbmRwYXJ0IGFuZCBr ZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rZmluZHBhcnQKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBr ZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tmbWV4ZWMgYW5kIGtkZWJhc2UtMi4yLjIva29u cXVlcm9yL2tmbWV4ZWMKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFf ZnJhbWUuY2Mga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9mcmFtZS5jYwotLS0ga2RlYmFz ZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9rb25xX2ZyYW1lLmNjCU1vbiBOb3YgIDUgMjE6NDA6Mjkg MjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9mcmFtZS5jYwlTdW4gRGVjICA5 IDE3OjU2OjM1IDIwMDEKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxxdGltZXIuaD4KICNp bmNsdWRlIDxxcHVzaGJ1dHRvbi5oPgogI2luY2x1ZGUgPHF0b29sYnV0dG9uLmg+CisjaW5jbHVk ZSA8cXRhYmJhci5oPgogCiAjaW5jbHVkZSA8a2FwcC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgpA QCAtMzcxLDggKzM3MiwxNSBAQAogCiAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotS29ucUZyYW1lOjpLb25xRnJh bWUoIEtvbnFGcmFtZUNvbnRhaW5lciAqX3BhcmVudENvbnRhaW5lciwgY29uc3QgY2hhciAqX25h bWUgKQotOlFXaWRnZXQoX3BhcmVudENvbnRhaW5lcixfbmFtZSkKK3ZvaWQgS29ucUZyYW1lQmFz ZTo6cHJpbnRGcmFtZUluZm8oUVN0cmluZyBzcGFjZXMpCit7CisJa2REZWJ1ZygxMjAyKSA8PCBz cGFjZXMgPDwgIktvbnFGcmFtZUJhc2UgIiA8PCB0aGlzIDw8ICIsIHRoaXMgc2hvdWxkbid0IGhh cHBlbiEiIDw8IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitLb25xRnJhbWU6OktvbnFGcmFt ZSggS29ucUZyYW1lQ29udGFpbmVyQmFzZSAqX3BhcmVudENvbnRhaW5lciwgY29uc3QgY2hhciAq X25hbWUgKQorOlFXaWRnZXQoX3BhcmVudENvbnRhaW5lci0+d2lkZ2V0KCksX25hbWUpCiB7CiAg ICBtX3BMYXlvdXQgPSAwTDsKICAgIG1fcFZpZXcgPSAwTDsKQEAgLTM4MywxMiArMzkxLDE0IEBA CiAgICBjb25uZWN0KG1fcFN0YXR1c0JhciwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qo c2xvdFN0YXR1c0JhckNsaWNrZWQoKSkpOwogICAgY29ubmVjdCggbV9wU3RhdHVzQmFyLCBTSUdO QUwoIGxpbmtlZFZpZXdDbGlja2VkKCBib29sICkgKSwgdGhpcywgU0xPVCggc2xvdExpbmtlZFZp ZXdDbGlja2VkKCBib29sICkgKSApOwogICAgbV9zZXBhcmF0b3IgPSAwOworICAgbV9wUGFyZW50 Q29udGFpbmVyID0gX3BhcmVudENvbnRhaW5lcjsKIH0KIAogS29ucUZyYW1lOjp+S29ucUZyYW1l KCkKIHsKICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1lOjp+S29ucUZyYW1lKCkgIiA8PCB0 aGlzIDw8IGVuZGw7CiAgIC8vZGVsZXRlIG1fcExheW91dDsKKwkvL2lmIChtX3BWaWV3KSBkZWxl dGUgbV9wVmlldzsKIH0KIAogYm9vbCBLb25xRnJhbWU6OmlzQWN0aXZlUGFydCgpCkBAIC00MjEs NiArNDMxLDE2IEBACiAgICAgY2hpbGRWaWV3KCktPmNvcHlIaXN0b3J5KCBzdGF0aWNfY2FzdDxL b25xRnJhbWUgKj4oIG90aGVyICktPmNoaWxkVmlldygpICk7CiB9CiAKK3ZvaWQgS29ucUZyYW1l OjpwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMgKQoreworCWtkRGVidWcoMTIwMikgPDwg c3BhY2VzIDw8ICJLb25xRnJhbWUgIiA8PCB0aGlzIDw8ICIgY29udGFpbmluZyB2aWV3ICIKKyAg CSAJCSAgICAgICAgPDwgY2hpbGRWaWV3KCkKKyAgICAgICAgICAgICAgICA8PCAiIHBhcnQgIgor ICAgICAJICAgICAgICAgIDw8IHBhcnQoKQorICAgICAgIAkgICAgICAgIDw8ICIgd2hvc2Ugd2lk Z2V0IGlzIGEgIgorICAgICAgICAgCSAgICAgIDw8IHBhcnQoKS0+d2lkZ2V0KCktPmNsYXNzTmFt ZSgpIDw8IGVuZGw7Cit9CisKIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpLb25xRnJhbWU6OmF0dGFj aCggY29uc3QgS29ucVZpZXdGYWN0b3J5ICZ2aWV3RmFjdG9yeSApCiB7CiAgICBLb25xVmlld0Zh Y3RvcnkgZmFjdG9yeSggdmlld0ZhY3RvcnkgKTsKQEAgLTQ5MywxNCArNTEzLDYgQEAKICAgIH0K IH07CiAKLUtvbnFGcmFtZUNvbnRhaW5lciogS29ucUZyYW1lOjpwYXJlbnRDb250YWluZXIoKQot ewotICAgaWYoIHBhcmVudFdpZGdldCgpLT5pc0EoIktvbnFGcmFtZUNvbnRhaW5lciIpICkKLSAg ICAgIHJldHVybiBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIqPihwYXJlbnRXaWRnZXQo KSk7Ci0gICBlbHNlCi0gICAgICByZXR1cm4gMEw7Ci19Ci0KIHZvaWQgS29ucUZyYW1lOjpyZXBh cmVudEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IFFQb2ludCAmIHAsIGJvb2wgc2hvd0l0 ICkKIHsKICAgIFFXaWRnZXQ6OnJlcGFyZW50KCBwYXJlbnQsIHAsIHNob3dJdCApOwpAQCAtNTQw LDE4ICs1NTIsMzEgQEAKIAogLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK3ZvaWQgS29ucUZyYW1lQ29udGFpbmVy QmFzZTo6cHJpbnRGcmFtZUluZm8oUVN0cmluZyBzcGFjZXMpCit7CisJa2REZWJ1ZygxMjAyKSA8 PCBzcGFjZXMgPDwgIktvbnFGcmFtZUNvbnRhaW5lckJhc2UgIiA8PCB0aGlzIDw8ICIsIHRoaXMg c2hvdWxkbid0IGhhcHBlbiEiIDw8IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBLb25xRnJh bWVDb250YWluZXI6OktvbnFGcmFtZUNvbnRhaW5lciggT3JpZW50YXRpb24gbywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS29ucUZyYW1lQ29udGFpbmVyQmFzZSog cGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKiBuYW1lKQotICA6IFFTcGxpdHRlciggbywgcGFyZW50LCBuYW1lKQorICA6IFFTcGxpdHRl ciggbywgcGFyZW50LT53aWRnZXQoKSwgbmFtZSkKIHsKKwltX3BQYXJlbnRDb250YWluZXIgPSBw YXJlbnQ7CiAgIG1fcEZpcnN0Q2hpbGQgPSAwTDsKICAgbV9wU2Vjb25kQ2hpbGQgPSAwTDsKKyAg c2V0T3BhcXVlUmVzaXplKCB0cnVlICk7CiB9CiAKIEtvbnFGcmFtZUNvbnRhaW5lcjo6fktvbnFG cmFtZUNvbnRhaW5lcigpCiB7CiAgICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1lQ29udGFp bmVyOjp+S29ucUZyYW1lQ29udGFpbmVyKCkgIiA8PCB0aGlzIDw8ICIgLSAiIDw8IGNsYXNzTmFt ZSgpIDw8IGVuZGw7CisJCWlmICggbV9wRmlyc3RDaGlsZCApCisJCQlkZWxldGUgbV9wRmlyc3RD aGlsZDsKKwkJaWYgKCBtX3BTZWNvbmRDaGlsZCApCisJCQlkZWxldGUgbV9wU2Vjb25kQ2hpbGQ7 CiB9CiAKIHZvaWQgS29ucUZyYW1lQ29udGFpbmVyOjpsaXN0Vmlld3MoIENoaWxkVmlld0xpc3Qg KnZpZXdMaXN0ICkKQEAgLTYyMCwxMiArNjQ1LDE1IEBACiAgICByZXR1cm4gMEw7CiB9CiAKLUtv bnFGcmFtZUNvbnRhaW5lciogS29ucUZyYW1lQ29udGFpbmVyOjpwYXJlbnRDb250YWluZXIoKQor dm9pZCBLb25xRnJhbWVDb250YWluZXI6OnByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyAp CiB7Ci0gIGlmKCBwYXJlbnRXaWRnZXQoKS0+aXNBKCJLb25xRnJhbWVDb250YWluZXIiKSApCi0g ICAgcmV0dXJuIHN0YXRpY19jYXN0PEtvbnFGcmFtZUNvbnRhaW5lcio+KHBhcmVudFdpZGdldCgp KTsKLSAgZWxzZQotICAgIHJldHVybiAwTDsKKwlrZERlYnVnKDEyMDIpIDw8IHNwYWNlcyA8PCAi S29ucUZyYW1lQ29udGFpbmVyICIgPDwgdGhpcyA8PCBlbmRsOworCUtvbnFGcmFtZUJhc2UqIGNo aWxkID0gZmlyc3RDaGlsZCgpOworCWlmIChjaGlsZCAhPSAwTCkgY2hpbGQtPnByaW50RnJhbWVJ bmZvKHNwYWNlcyArICIgICIpOworCWVsc2Uga2REZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAg TnVsbCBjaGlsZCIgPDwgZW5kbDsKKyAgY2hpbGQgPSBzZWNvbmRDaGlsZCgpOworCWlmIChjaGls ZCAhPSAwTCkgY2hpbGQtPnByaW50RnJhbWVJbmZvKHNwYWNlcyArICIgICIpOworCWVsc2Uga2RE ZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgTnVsbCBjaGlsZCIgPDwgZW5kbDsKIH0KIAogdm9p ZCBLb25xRnJhbWVDb250YWluZXI6OnJlcGFyZW50RnJhbWUoIFFXaWRnZXQqIHBhcmVudCwgY29u c3QgUVBvaW50ICYgcCwgYm9vbCBzaG93SXQgKQpAQCAtNjQ5LDExICs2NzcsMTMgQEAKICAgICAg IGlmKCAhbV9wRmlyc3RDaGlsZCApCiAgICAgICB7CiAgICAgICAgICAgbV9wRmlyc3RDaGlsZCA9 IGZyYW1lOworCQkJCQlmcmFtZS0+c2V0UGFyZW50Q29udGFpbmVyKHRoaXMpOwogICAgICAgICAg IGtkRGVidWcoMTIwMikgPDwgIlNldHRpbmcgYXMgZmlyc3QgY2hpbGQiIDw8IGVuZGw7CiAgICAg ICB9CiAgICAgICBlbHNlIGlmKCAhbV9wU2Vjb25kQ2hpbGQgKQogICAgICAgewogICAgICAgICAg IG1fcFNlY29uZENoaWxkID0gZnJhbWU7CisJCQkJCWZyYW1lLT5zZXRQYXJlbnRDb250YWluZXIo dGhpcyk7CiAgICAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiU2V0dGluZyBhcyBzZWNvbmQgY2hp bGQiIDw8IGVuZGw7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC02NjYsMTQgKzY5NiwxNDYgQEAK IHZvaWQgS29ucUZyYW1lQ29udGFpbmVyOjpyZW1vdmVDaGlsZEZyYW1lKCBLb25xRnJhbWVCYXNl ICogZnJhbWUgKQogewogICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVDb250YWluZXI6OlJl bW92ZUNoaWxkRnJhbWUgIiA8PCB0aGlzIDw8ICIuIENoaWxkICIgPDwgZnJhbWUgPDwgIiByZW1v dmVkIiA8PCBlbmRsOworCiAgIGlmKCBtX3BGaXJzdENoaWxkID09IGZyYW1lICkKLSAgICBtX3BG aXJzdENoaWxkID0gMEw7CisJeworCQltX3BGaXJzdENoaWxkID0gbV9wU2Vjb25kQ2hpbGQ7CisJ CW1fcFNlY29uZENoaWxkID0gMEw7CisJfQogCiAgIGVsc2UgaWYoIG1fcFNlY29uZENoaWxkID09 IGZyYW1lICkKICAgICBtX3BTZWNvbmRDaGlsZCA9IDBMOwogCiAgIGVsc2UKICAgICBrZFdhcm5p bmcoMTIwMikgPDwgdGhpcyA8PCAiIENhbid0IGZpbmQgdGhpcyBjaGlsZDoiIDw8IGZyYW1lIDw8 IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitLb25xRnJhbWVUYWJzOjpLb25xRnJhbWVUYWJz KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqIG5hbWUpCisgIDogUVRhYldpZGdldChwYXJl bnQsIG5hbWUpCit7CisgIG1fcFBhcmVudENvbnRhaW5lciA9IDBMOworICBtX3BDaGlsZEZyYW1l TGlzdCA9IG5ldyBRTGlzdDxLb25xRnJhbWVCYXNlPjsKKyAgbV9wQ2hpbGRGcmFtZUxpc3QtPnNl dEF1dG9EZWxldGUoZmFsc2UpOworCisgIHRhYkJhcigpLT5oaWRlKCk7Cit9CisKK0tvbnFGcmFt ZVRhYnM6On5Lb25xRnJhbWVUYWJzKCkKK3sKKyAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1l VGFiczo6fktvbnFGcmFtZVRhYnMoKSAiIDw8IHRoaXMgPDwgIiAtICIgPDwgY2xhc3NOYW1lKCkg PDwgZW5kbDsKKyAgbV9wQ2hpbGRGcmFtZUxpc3QtPnNldEF1dG9EZWxldGUodHJ1ZSk7CQorICBk ZWxldGUgbV9wQ2hpbGRGcmFtZUxpc3Q7Cit9CisKK3ZvaWQgS29ucUZyYW1lVGFiczo6bGlzdFZp ZXdzKCBDaGlsZFZpZXdMaXN0ICp2aWV3TGlzdCApIHsKKyAgaW50IGNoaWxkRnJhbWVDb3VudCA9 IG1fcENoaWxkRnJhbWVMaXN0LT5jb3VudCgpOworICBmb3IoIGludCBpPTAgOyBpPGNoaWxkRnJh bWVDb3VudCA7IGkrKykgbV9wQ2hpbGRGcmFtZUxpc3QtPmF0KGkpLT5saXN0Vmlld3Modmlld0xp c3QpOworfQorCit2b2lkIEtvbnFGcmFtZVRhYnM6OnNhdmVDb25maWcoIEtDb25maWcqIGNvbmZp ZywgY29uc3QgUVN0cmluZyAmcHJlZml4LCBib29sIHNhdmVVUkxzLCBpbnQgaWQsIGludCBkZXB0 aCApCit7CisgIC8qICBpbnQgaWRTZWNvbmQgPSBpZCArIChpbnQpcG93KCAyLjAsIGRlcHRoICk7 CisKKyAgLy93cml0ZSBjaGlsZHJlbiBzaXplcworICBjb25maWctPndyaXRlRW50cnkoIFFTdHJp bmc6OmZyb21MYXRpbjEoICJTcGxpdHRlclNpemVzIiApLnByZXBlbmQoIHByZWZpeCApLCBzaXpl cygpICk7CisKKyAgLy93cml0ZSBjaGlsZHJlbgorICBRU3RyaW5nTGlzdCBzdHJsc3Q7CisgIGlm KCBmaXJzdENoaWxkKCkgKQorICAgIHN0cmxzdC5hcHBlbmQoIFFTdHJpbmc6OmZyb21MYXRpbjEo IGZpcnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkgKSArIFFTdHJpbmc6Om51bWJlcihpZFNlY29uZCAt IDEpICk7CisgIGlmKCBzZWNvbmRDaGlsZCgpICkKKyAgICBzdHJsc3QuYXBwZW5kKCBRU3RyaW5n Ojpmcm9tTGF0aW4xKCBzZWNvbmRDaGlsZCgpLT5mcmFtZVR5cGUoKSApICsgUVN0cmluZzo6bnVt YmVyKCBpZFNlY29uZCApICk7CisKKyAgY29uZmlnLT53cml0ZUVudHJ5KCBRU3RyaW5nOjpmcm9t TGF0aW4xKCAiQ2hpbGRyZW4iICkucHJlcGVuZCggcHJlZml4ICksIHN0cmxzdCApOworCisgIC8v d3JpdGUgb3JpZW50YXRpb24KKyAgUVN0cmluZyBvOworICBpZiggb3JpZW50YXRpb24oKSA9PSBR dDo6SG9yaXpvbnRhbCApCisgICAgbyA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkhvcml6b250YWwi KTsKKyAgZWxzZSBpZiggb3JpZW50YXRpb24oKSA9PSBRdDo6VmVydGljYWwgKQorICAgIG8gPSBR U3RyaW5nOjpmcm9tTGF0aW4xKCJWZXJ0aWNhbCIpOworICBjb25maWctPndyaXRlRW50cnkoIFFT dHJpbmc6OmZyb21MYXRpbjEoICJPcmllbnRhdGlvbiIgKS5wcmVwZW5kKCBwcmVmaXggKSwgbyAp OworCisKKyAgLy93cml0ZSBjaGlsZCBjb25maWdzCisgIGlmKCBmaXJzdENoaWxkKCkgKSB7Cisg ICAgUVN0cmluZyBuZXdQcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBmaXJzdENoaWxkKCkt PmZyYW1lVHlwZSgpICkgKyBRU3RyaW5nOjpudW1iZXIoaWRTZWNvbmQgLSAxKTsKKyAgICBuZXdQ cmVmaXguYXBwZW5kKCAnXycgKTsKKyAgICBmaXJzdENoaWxkKCktPnNhdmVDb25maWcoIGNvbmZp ZywgbmV3UHJlZml4LCBzYXZlVVJMcywgaWQsIGRlcHRoICsgMSApOworICB9CisKKyAgaWYoIHNl Y29uZENoaWxkKCkgKSB7CisgICAgUVN0cmluZyBuZXdQcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0 aW4xKCBzZWNvbmRDaGlsZCgpLT5mcmFtZVR5cGUoKSApICsgUVN0cmluZzo6bnVtYmVyKCBpZFNl Y29uZCApOworICAgIG5ld1ByZWZpeC5hcHBlbmQoICdfJyApOworICAgIHNlY29uZENoaWxkKCkt PnNhdmVDb25maWcoIGNvbmZpZywgbmV3UHJlZml4LCBzYXZlVVJMcywgaWRTZWNvbmQsIGRlcHRo ICsgMSApOworICB9CisKKyAgKi8KK30KKwordm9pZCBLb25xRnJhbWVUYWJzOjpjb3B5SGlzdG9y eSggS29ucUZyYW1lQmFzZSAqb3RoZXIgKQoreworICAvKiBhc3NlcnQoIG90aGVyLT5mcmFtZVR5 cGUoKSA9PSAiVGFicyIgKTsKKyAgS29ucUZyYW1UYWJzKiBvdGhlclRhYnMgPSBzdGF0aWNfY2Fz dDxLb25xRnJhbWVUYWJzICo+KCBvdGhlciApOworICBpbnQgdGhpc0NvdW50ID0gbV9wVmlld0xp c3QtPmNvdW50KCk7CisgIGludCBvdGhlckNvdW50ID0gb3RoZXJUYWJzLT4tPmNvdW50KCk7Cisg IGludCBjb3VudCA9IHRoaXNDb3VudDsKKyAgaWYgKHRoaXNDb3VudD5vdGhlckNvdW50KSBjb3Vu dCA9IG90aGVyQ291bnQ7CisKKyAgZm9yICgKKyAgICBmaXJzdENoaWxkKCktPmNvcHlIaXN0b3J5 KCBzdGF0aWNfY2FzdDxLb25xRnJhbWVUYWJzICo+KCBvdGhlciApLT5maXJzdENoaWxkKCkgKTsK KyAgaWYgKCBzZWNvbmRDaGlsZCgpICkKKyAgICBzZWNvbmRDaGlsZCgpLT5jb3B5SGlzdG9yeSgg c3RhdGljX2Nhc3Q8S29ucUZyYW1lVGFicyAqPiggb3RoZXIgKS0+c2Vjb25kQ2hpbGQoKSApOwor ICAqLworfQorCit2b2lkIEtvbnFGcmFtZVRhYnM6OnByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNw YWNlcyApCit7CisgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICJLb25xRnJhbWVUYWJzICIg PDwgdGhpcyA8PCBlbmRsOworICBLb25xRnJhbWVCYXNlKiBjaGlsZDsKKyAgaW50IGNoaWxkRnJh bWVDb3VudCA9IG1fcENoaWxkRnJhbWVMaXN0LT5jb3VudCgpOworICBmb3IgKGludCBpID0gMCA7 IGkgPCBjaGlsZEZyYW1lQ291bnQgOyBpKyspIHsKKyAgICBjaGlsZCA9IG1fcENoaWxkRnJhbWVM aXN0LT5hdChpKTsKKyAgICBpZiAoY2hpbGQgIT0gMEwpIGNoaWxkLT5wcmludEZyYW1lSW5mbyhz cGFjZXMgKyAiICAiKTsKKyAgICBlbHNlIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICIgIE51 bGwgY2hpbGQiIDw8IGVuZGw7CisgIH0KK30KKwordm9pZCBLb25xRnJhbWVUYWJzOjpyZXBhcmVu dEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IFFQb2ludCAmIHAsIGJvb2wgc2hvd0l0ICkK K3sKKyAgUVdpZGdldDo6cmVwYXJlbnQoIHBhcmVudCwgcCwgc2hvd0l0ICk7Cit9CisKK3ZvaWQg S29ucUZyYW1lVGFiczo6aW5zZXJ0Q2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSogZnJhbWUgKQor eworICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVUYWJzICIgPDwgdGhpcyA8PCAiOiBpbnNl cnRDaGlsZEZyYW1lICIgPDwgZnJhbWUgPDwgZW5kbDsKKworICBpZiAoZnJhbWUpCisgIHsKKyAg ICBrZERlYnVnKDEyMDIpIDw8ICJBZGRpbmcgZnJhbWUiIDw8IGVuZGw7CisgICAgYWRkVGFiKGZy YW1lLT53aWRnZXQoKSwiS29ucUZyYW1lQmFzZVRhYiIpOworICAgIGZyYW1lLT5zZXRQYXJlbnRD b250YWluZXIodGhpcyk7CisgICAgbV9wQ2hpbGRGcmFtZUxpc3QtPmFwcGVuZChmcmFtZSk7Cisg ICAgaWYgKHRhYkJhcigpLT5jb3VudCgpPT0yKQorICAgICAgdGFiQmFyKCktPnNob3coKTsKKyAg fSAKKyAgZWxzZQorICAgIGtkV2FybmluZygxMjAyKSA8PCAiS29ucUZyYW1lVGFicyAiIDw8IHRo aXMgPDwgIjogaW5zZXJ0Q2hpbGRGcmFtZSgwTCkgISIgPDwgZW5kbDsKK30KKwordm9pZCBLb25x RnJhbWVUYWJzOjpyZW1vdmVDaGlsZEZyYW1lKCBLb25xRnJhbWVCYXNlICogZnJhbWUgKQorewor ICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVUYWJzOjpSZW1vdmVDaGlsZEZyYW1lICIgPDwg dGhpcyA8PCAiLiBDaGlsZCAiIDw8IGZyYW1lIDw8ICIgcmVtb3ZlZCIgPDwgZW5kbDsKKyAgaWYg KGZyYW1lKSB7CisgICAgcmVtb3ZlUGFnZShmcmFtZS0+d2lkZ2V0KCkpOworICAgIG1fcENoaWxk RnJhbWVMaXN0LT5yZW1vdmUoZnJhbWUpOworICAgIGlmICh0YWJCYXIoKS0+Y291bnQoKT09MSkK KyAgICAgIHRhYkJhcigpLT5oaWRlKCk7CQkJCisgIH0KKyAgZWxzZQorICAgIGtkV2FybmluZygx MjAyKSA8PCAiS29ucUZyYW1lVGFicyAiIDw8IHRoaXMgPDwgIjogcmVtb3ZlQ2hpbGRGcmFtZSgw TCkgISIgPDwgZW5kbDsKIH0KIAogI2luY2x1ZGUgImtvbnFfZnJhbWUubW9jIgpkaWZmIC11IGtk ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9mcmFtZS5oIGtkZWJhc2UtMi4yLjIva29u cXVlcm9yL2tvbnFfZnJhbWUuaAotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9rb25x X2ZyYW1lLmgJV2VkIE1heSAxNiAxMzoyNzozMCAyMDAxCisrKyBrZGViYXNlLTIuMi4yL2tvbnF1 ZXJvci9rb25xX2ZyYW1lLmgJU3VuIERlYyAgOSAxNzo1NjozNSAyMDAxCkBAIC0yNyw2ICsyNyw3 IEBACiAjaW5jbHVkZSA8cXNwbGl0dGVyLmg+CiAjaW5jbHVkZSA8cWNoZWNrYm94Lmg+CiAjaW5j bHVkZSA8cWxhYmVsLmg+CisjaW5jbHVkZSA8cXRhYndpZGdldC5oPgogCiAjaW5jbHVkZSA8a3Bp eG1hcC5oPgogI2luY2x1ZGUgPGtwaXhtYXBlZmZlY3QuaD4KQEAgLTQxLDcgKzQyLDkgQEAKIGNs YXNzIEtvbnFWaWV3OwogY2xhc3MgS29ucUZyYW1lQmFzZTsKIGNsYXNzIEtvbnFGcmFtZTsKK2Ns YXNzIEtvbnFGcmFtZUNvbnRhaW5lckJhc2U7CiBjbGFzcyBLb25xRnJhbWVDb250YWluZXI7Citj bGFzcyBLb25xRnJhbWVUYWJzOwogY2xhc3MgS0NvbmZpZzsKIGNsYXNzIEtTZXBhcmF0b3I7CiBj bGFzcyBLUHJvZ3Jlc3M7CkBAIC0xNjgsMjEgKzE3MSwyOCBAQAogY2xhc3MgS29ucUZyYW1lQmFz ZQogewogIHB1YmxpYzoKKyAgdmlydHVhbCB+S29ucUZyYW1lQmFzZSgpIHt9CisKICAgdmlydHVh bCB2b2lkIHNhdmVDb25maWcoIEtDb25maWcqIGNvbmZpZywgY29uc3QgUVN0cmluZyAmcHJlZml4 LCBib29sIHNhdmVVUkxzLCBpbnQgaWQgPSAwLCBpbnQgZGVwdGggPSAwICkgPSAwOwogICB2aXJ0 dWFsIHZvaWQgY29weUhpc3RvcnkoIEtvbnFGcmFtZUJhc2UgKm90aGVyICkgPSAwOwogCisJdmly dHVhbCB2b2lkIHByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyApOworCiAgIHZpcnR1YWwg dm9pZCByZXBhcmVudEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSApID0gMDsKIAot ICB2aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lciogcGFyZW50Q29udGFpbmVyKCkgPSAwOworICB2 aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpIHsgcmV0dXJu IG1fcFBhcmVudENvbnRhaW5lcjsgfQorCXZpcnR1YWwgdm9pZCBzZXRQYXJlbnRDb250YWluZXIo S29ucUZyYW1lQ29udGFpbmVyQmFzZSogcGFyZW50KSB7IG1fcFBhcmVudENvbnRhaW5lciA9IHBh cmVudDsgfQorCiAgIHZpcnR1YWwgUVdpZGdldCogd2lkZ2V0KCkgPSAwOwogCiAgIHZpcnR1YWwg dm9pZCBsaXN0Vmlld3MoIENoaWxkVmlld0xpc3QgKnZpZXdMaXN0ICkgPSAwOwogICB2aXJ0dWFs IFFDU3RyaW5nIGZyYW1lVHlwZSgpID0gMDsKIAotIHByb3RlY3RlZDoKK3Byb3RlY3RlZDoKICAg S29ucUZyYW1lQmFzZSgpIHt9Ci0gIHZpcnR1YWwgfktvbnFGcmFtZUJhc2UoKSB7fQorCisJS29u cUZyYW1lQ29udGFpbmVyQmFzZSogbV9wUGFyZW50Q29udGFpbmVyOwogfTsKIAogLyoqCkBAIC0y MDIsNyArMjEyLDcgQEAKICAgUV9PQkpFQ1QKIAogcHVibGljOgotICBLb25xRnJhbWUoIEtvbnFG cmFtZUNvbnRhaW5lciAqX3BhcmVudENvbnRhaW5lciA9IDBMLAorICBLb25xRnJhbWUoIEtvbnFG cmFtZUNvbnRhaW5lckJhc2UgKl9wYXJlbnRDb250YWluZXIgPSAwTCwKICAgICAgICAgICAgICBj b25zdCBjaGFyICpfbmFtZSA9IDBMICk7CiAgIHZpcnR1YWwgfktvbnFGcmFtZSgpOwogCkBAIC0y NDYsMTAgKzI1NiwxMiBAQAogICB2aXJ0dWFsIHZvaWQgc2F2ZUNvbmZpZyggS0NvbmZpZyogY29u ZmlnLCBjb25zdCBRU3RyaW5nICZwcmVmaXgsIGJvb2wgc2F2ZVVSTHMsIGludCBpZCA9IDAsIGlu dCBkZXB0aCA9IDAgKTsKICAgdmlydHVhbCB2b2lkIGNvcHlIaXN0b3J5KCBLb25xRnJhbWVCYXNl ICpvdGhlciApOwogCisJdmlydHVhbCB2b2lkIHByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNl cyApOworCiAgIHZpcnR1YWwgdm9pZCByZXBhcmVudEZyYW1lKFFXaWRnZXQgKiBwYXJlbnQsCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSAp OwogCi0gIHZpcnR1YWwgS29ucUZyYW1lQ29udGFpbmVyKiBwYXJlbnRDb250YWluZXIoKTsKKyAg Ly92aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpOwogICB2 aXJ0dWFsIFFXaWRnZXQqIHdpZGdldCgpIHsgcmV0dXJuIHRoaXM7IH0KICAgdmlydHVhbCBRQ1N0 cmluZyBmcmFtZVR5cGUoKSB7IHJldHVybiBRQ1N0cmluZygiVmlldyIpOyB9CiAKQEAgLTI4NSw2 ICsyOTcsMzIgQEAKICAgS29ucUZyYW1lSGVhZGVyICptX3BIZWFkZXI7CiB9OwogCitjbGFzcyBL b25xRnJhbWVDb250YWluZXJCYXNlIDogcHVibGljIEtvbnFGcmFtZUJhc2UKK3sKK3B1YmxpYzoK KyAgdmlydHVhbCB+S29ucUZyYW1lQ29udGFpbmVyQmFzZSgpIHt9CisKKyAgLyoqCisgICAqIENh bGwgdGhpcyBhZnRlciBpbnNlcnRpbmcgYSBuZXcgZnJhbWUgaW50byB0aGUgc3BsaXR0ZXIuCisg ICAqLworICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSAqIGZy YW1lICkgPSAwOworICAvKioKKyAgICogQ2FsbCB0aGlzIGJlZm9yZSBkZWxldGluZyBvbmUgb2Yg b3VyIGNoaWxkcmVuLgorICAgKi8KKyAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkRnJhbWUoIEtv bnFGcmFtZUJhc2UgKiBmcmFtZSApID0gMDsKKworICAvL2luaGVyaXRlZAorCXZpcnR1YWwgdm9p ZCBwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMgKTsKKworICB2aXJ0dWFsIFFDU3RyaW5n IGZyYW1lVHlwZSgpIHsgcmV0dXJuIFFDU3RyaW5nKCJDb250YWluZXJCYXNlIik7IH0KKworICB2 aXJ0dWFsIHZvaWQgcmVwYXJlbnRGcmFtZShRV2lkZ2V0ICogcGFyZW50LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSApID0g MDsKKworcHJvdGVjdGVkOgorICBLb25xRnJhbWVDb250YWluZXJCYXNlKCkge30KK307CisKIC8q KgogICogV2l0aCBLb25xRnJhbWVDb250YWluZXJzIGFuZCBAcmVmS29ucUZyYW1lcyB3ZSBjYW4g Y3JlYXRlIGEgZmxleGlibGUKICAqIHN0b3JhZ2Ugc3RydWN0dXJlIGZvciB0aGUgdmlld3MuIFRo ZSB0b3AgbW9zdCBlbGVtZW50IGlzIGEKQEAgLTI5NCwxMyArMzMyLDEzIEBACiAgKiBLb25xRnJh bWVDb250YWluZXJzIG9yLCBhcyBsZWF2ZXMsIEtvbnFGcmFtZXMuCiAgKi8KIAotY2xhc3MgS29u cUZyYW1lQ29udGFpbmVyIDogcHVibGljIFFTcGxpdHRlciwgcHVibGljIEtvbnFGcmFtZUJhc2UK K2NsYXNzIEtvbnFGcmFtZUNvbnRhaW5lciA6IHB1YmxpYyBRU3BsaXR0ZXIsIHB1YmxpYyBLb25x RnJhbWVDb250YWluZXJCYXNlCiB7CiAgIFFfT0JKRUNUCiAgIGZyaWVuZCBjbGFzcyBLb25xRnJh bWU7IC8vZm9yIGVtaXR0aW5nIGN0cmxUYWJQcmVzc2VkKCkgb25seSwgYWxlWFhYCiBwdWJsaWM6 CiAgIEtvbnFGcmFtZUNvbnRhaW5lciggT3JpZW50YXRpb24gbywKLSAgICAgICAgICAgICAgICAg ICAgICBRV2lkZ2V0KiBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgS29ucUZyYW1lQ29u dGFpbmVyQmFzZSogcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBu YW1lID0gMCk7CiAgIHZpcnR1YWwgfktvbnFGcmFtZUNvbnRhaW5lcigpOwogCkBAIC0zMTMsOSAr MzUxLDEwIEBACiAgIEtvbnFGcmFtZUJhc2UqIHNlY29uZENoaWxkKCkgeyByZXR1cm4gbV9wU2Vj b25kQ2hpbGQ7IH0KICAgS29ucUZyYW1lQmFzZSogb3RoZXJDaGlsZCggS29ucUZyYW1lQmFzZSog Y2hpbGQgKTsKIAorCXZpcnR1YWwgdm9pZCBwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMg KTsKKwogICB2b2lkIHN3YXBDaGlsZHJlbigpOwogCi0gIHZpcnR1YWwgS29ucUZyYW1lQ29udGFp bmVyKiBwYXJlbnRDb250YWluZXIoKTsKICAgdmlydHVhbCBRV2lkZ2V0KiB3aWRnZXQoKSB7IHJl dHVybiB0aGlzOyB9CiAgIHZpcnR1YWwgUUNTdHJpbmcgZnJhbWVUeXBlKCkgeyByZXR1cm4gUUNT dHJpbmcoIkNvbnRhaW5lciIpOyB9CiAKQEAgLTM0MSw2ICszODAsNTQgQEAKIHByb3RlY3RlZDoK ICAgS29ucUZyYW1lQmFzZSogbV9wRmlyc3RDaGlsZDsKICAgS29ucUZyYW1lQmFzZSogbV9wU2Vj b25kQ2hpbGQ7Cit9OworCitjbGFzcyBLb25xRnJhbWVUYWJzIDogcHVibGljIFFUYWJXaWRnZXQs IHB1YmxpYyBLb25xRnJhbWVDb250YWluZXJCYXNlCit7CisgIFFfT0JKRUNUCisgIGZyaWVuZCBj bGFzcyBLb25xRnJhbWU7IC8vZm9yIGVtaXR0aW5nIGN0cmxUYWJQcmVzc2VkKCkgb25seSwgYWxl WFhYCitwdWJsaWM6CisgIEtvbnFGcmFtZVRhYnMoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFy ICogbmFtZSA9IDApOworICB2aXJ0dWFsIH5Lb25xRnJhbWVUYWJzKCk7CisKKyAgdmlydHVhbCB2 b2lkIGxpc3RWaWV3cyggQ2hpbGRWaWV3TGlzdCAqdmlld0xpc3QgKTsKKworICB2aXJ0dWFsIHZv aWQgc2F2ZUNvbmZpZyggS0NvbmZpZyogY29uZmlnLCBjb25zdCBRU3RyaW5nICZwcmVmaXgsIGJv b2wgc2F2ZVVSTHMsIGludCBpZCA9IDAsIGludCBkZXB0aCA9IDAgKTsKKyAgdmlydHVhbCB2b2lk IGNvcHlIaXN0b3J5KCBLb25xRnJhbWVCYXNlICpvdGhlciApOworCisJdmlydHVhbCB2b2lkIHBy aW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyApOworCisJUUxpc3Q8S29ucUZyYW1lQmFzZT4q IGNoaWxkRnJhbWVMaXN0KCkgeyByZXR1cm4gbV9wQ2hpbGRGcmFtZUxpc3Q7IH0KKworICB2aXJ0 dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpIHsgcmV0dXJuIDBM OyB9CisJdmlydHVhbCB2b2lkIHNldFBhcmVudENvbnRhaW5lcihLb25xRnJhbWVDb250YWluZXJC YXNlKiBwYXJlbnQpIHsgcmV0dXJuOyB9CisKKyAgdmlydHVhbCBRV2lkZ2V0KiB3aWRnZXQoKSB7 IHJldHVybiB0aGlzOyB9CisgIHZpcnR1YWwgUUNTdHJpbmcgZnJhbWVUeXBlKCkgeyByZXR1cm4g UUNTdHJpbmcoIlRhYnMiKTsgfQorCisgIC8qKgorICAgKiBDYWxsIHRoaXMgYWZ0ZXIgaW5zZXJ0 aW5nIGEgbmV3IGZyYW1lIGludG8gdGhlIHNwbGl0dGVyLgorICAgKi8KKyAgdm9pZCBpbnNlcnRD aGlsZEZyYW1lKCBLb25xRnJhbWVCYXNlICogZnJhbWUgKTsKKyAgLyoqCisgICAqIENhbGwgdGhp cyBiZWZvcmUgZGVsZXRpbmcgb25lIG9mIG91ciBjaGlsZHJlbi4KKyAgICovCisgIHZvaWQgcmVt b3ZlQ2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSAqIGZyYW1lICk7CisKKyAgLy9pbmhlcml0ZWQK KyAgdmlydHVhbCB2b2lkIHJlcGFyZW50RnJhbWUoUVdpZGdldCAqIHBhcmVudCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50ICYgcCwgYm9vbCBzaG93SXQ9RkFMU0Ug KTsKKworICAvL21ha2UgdGhpcyBvbmUgcHVibGljCisgIC8vaW50IGlkQWZ0ZXIoIFFXaWRnZXQq IHcgKXsgcmV0dXJuIFE6OmlkQWZ0ZXIoIHcgKTsgfQorCitzaWduYWxzOgorICB2b2lkIGN0cmxU YWJQcmVzc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAgLy9Lb25xRnJhbWVCYXNlKiBtX3BGaXJzdENo aWxkOworICAvL0tvbnFGcmFtZUJhc2UqIG1fcFNlY29uZENoaWxkOworICBRTGlzdDxLb25xRnJh bWVCYXNlPiogbV9wQ2hpbGRGcmFtZUxpc3Q7CiB9OwogCiAjZW5kaWYKZGlmZiAtdSBrZGViYXNl LTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFfZ3VpY2xpZW50cy5jYyBrZGViYXNlLTIuMi4yL2tv bnF1ZXJvci9rb25xX2d1aWNsaWVudHMuY2MKLS0tIGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVy b3Iva29ucV9ndWljbGllbnRzLmNjCVNhdCBKdWwgMjggMjM6NTY6NDAgMjAwMQorKysga2RlYmFz ZS0yLjIuMi9rb25xdWVyb3Iva29ucV9ndWljbGllbnRzLmNjCVN1biBEZWMgIDkgMTc6NTY6MzUg MjAwMQpAQCAtMjI4LDcgKzIyOCw3IEBACiAKICAgS29ucVZpZXdNYW5hZ2VyICp2aWV3TWFuYWdl ciA9IG1fbWFpbldpbmRvdy0+dmlld01hbmFnZXIoKTsKIAotICBLb25xRnJhbWVDb250YWluZXIg Km1haW5Db250YWluZXIgPSB2aWV3TWFuYWdlci0+bWFpbkNvbnRhaW5lcigpOworICBLb25xRnJh bWVDb250YWluZXJCYXNlICptYWluQ29udGFpbmVyID0gdmlld01hbmFnZXItPm1haW5Db250YWlu ZXIoKTsKIAogICBpZiAoIHRvZ2dsZSApCiAgIHsKQEAgLTI0NSw4ICsyNDUsMTAgQEAKICAgICBl bHNlCiAgICAgICBuZXdTcGxpdHRlclNpemVzIDw8IDMwIDw8IDEwMDsKIAotICAgIEtvbnFGcmFt ZUNvbnRhaW5lciAqbmV3Q29udGFpbmVyID0gY2hpbGRWaWV3LT5mcmFtZSgpLT5wYXJlbnRDb250 YWluZXIoKTsKLSAgICBuZXdDb250YWluZXItPnNldFNpemVzKCBuZXdTcGxpdHRlclNpemVzICk7 CisgICAgS29ucUZyYW1lQ29udGFpbmVyQmFzZSAqbmV3Q29udGFpbmVyID0gY2hpbGRWaWV3LT5m cmFtZSgpLT5wYXJlbnRDb250YWluZXIoKTsKKworICAgIGlmIChuZXdDb250YWluZXItPmZyYW1l VHlwZSgpPT0iQ29udGFpbmVyIikKKyAgICAgIHN0YXRpY19jYXN0PEtvbnFGcmFtZUNvbnRhaW5l cio+KG5ld0NvbnRhaW5lciktPnNldFNpemVzKCBuZXdTcGxpdHRlclNpemVzICk7CiAKICAgICBp ZiAoIG1fbWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKSApCiAgICAgewpkaWZmIC11IGtkZWJhc2Ut Mi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9tYWlud2luZG93LmNjIGtkZWJhc2UtMi4yLjIva29u cXVlcm9yL2tvbnFfbWFpbndpbmRvdy5jYwotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJv ci9rb25xX21haW53aW5kb3cuY2MJTW9uIE5vdiAgNSAyMTo0MDoyOSAyMDAxCisrKyBrZGViYXNl LTIuMi4yL2tvbnF1ZXJvci9rb25xX21haW53aW5kb3cuY2MJU3VuIERlYyAgOSAxNzo1NjozNiAy MDAxCkBAIC01NjAsNyArNTYwLDcgQEAKICAgaWYgKCAhY2hpbGRWaWV3ICkKICAgICB7CiAgICAg ICAvLyBDcmVhdGUgYSBuZXcgdmlldwotICAgICAgY2hpbGRWaWV3ID0gbV9wVmlld01hbmFnZXIt PnNwbGl0VmlldyggUXQ6Okhvcml6b250YWwsIHNlcnZpY2VUeXBlLCBzZXJ2aWNlTmFtZSApOwor ICAgICAgY2hpbGRWaWV3ID0gbV9wVmlld01hbmFnZXItPmFkZFRhYiggc2VydmljZVR5cGUsIHNl cnZpY2VOYW1lICk7CiAKICAgICAgIGlmICggIWNoaWxkVmlldyApCiAgICAgICAgIHsKQEAgLTE4 MDgsMTIgKzE4MDgsMjMgQEAKICAgbmV3Vmlldy0+b3BlblVSTCggbV9jdXJyZW50Vmlldy0+dXJs KCksIG1fY3VycmVudFZpZXctPmxvY2F0aW9uQmFyVVJMKCkgKTsKIH0KIAordm9pZCBLb25xTWFp bldpbmRvdzo6c2xvdEFkZFRhYigpCit7CisgIEtvbnFWaWV3KiBuZXdWaWV3ID0gbV9wVmlld01h bmFnZXItPmFkZFRhYigpOworICBuZXdWaWV3LT5vcGVuVVJMKCBtX2N1cnJlbnRWaWV3LT51cmwo KSwgbV9jdXJyZW50Vmlldy0+bG9jYXRpb25CYXJVUkwoKSApOworfQorCiB2b2lkIEtvbnFNYWlu V2luZG93OjpzbG90UmVtb3ZlVmlldygpCiB7CiAgIC8vIHRha2VzIGNhcmUgb2YgY2hvb3Npbmcg dGhlIG5ldyBhY3RpdmUgdmlldwogICBtX3BWaWV3TWFuYWdlci0+cmVtb3ZlVmlldyggbV9jdXJy ZW50VmlldyApOwogfQogCit2b2lkIEtvbnFNYWluV2luZG93OjpzbG90UmVtb3ZlQ3VycmVudFRh YigpCit7CisJbV9wVmlld01hbmFnZXItPnJlbW92ZUN1cnJlbnRUYWIoKTsKK30KKwogdm9pZCBL b25xTWFpbldpbmRvdzo6c2xvdFNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHkoKQogewogICBtX2JT YXZlVmlld1Byb3BlcnRpZXNMb2NhbGx5ID0gIW1fYlNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHk7 CkBAIC0yNjYzLDcgKzI2NzQsOSBAQAogICAvLyBXaW5kb3cgbWVudQogICBtX3BhU3BsaXRWaWV3 SG9yID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTcGxpdCBWaWV3ICZMZWZ0L1JpZ2h0IiApLCAidmll d19sZWZ0X3JpZ2h0IiwgQ1RSTCtTSElGVCtLZXlfTCwgdGhpcywgU0xPVCggc2xvdFNwbGl0Vmll d0hvcml6b250YWwoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJzcGxpdHZpZXdoIiApOwogICBt X3BhU3BsaXRWaWV3VmVyID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTcGxpdCBWaWV3ICZUb3AvQm90 dG9tIiApLCAidmlld190b3BfYm90dG9tIiwgQ1RSTCtTSElGVCtLZXlfVCwgdGhpcywgU0xPVCgg c2xvdFNwbGl0Vmlld1ZlcnRpY2FsKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAic3BsaXR2aWV3 diIgKTsKKyAgbV9wYUFkZFRhYiA9IG5ldyBLQWN0aW9uKCBpMThuKCAiQWRkIFRhYiIgKSwgInZp ZXdfYWRkX3RhYiIsIDAsIHRoaXMsIFNMT1QoIHNsb3RBZGRUYWIoKSApLCBhY3Rpb25Db2xsZWN0 aW9uKCksICJhZGR0YWIiICk7CiAgIG1fcGFSZW1vdmVWaWV3ID0gbmV3IEtBY3Rpb24oIGkxOG4o ICImUmVtb3ZlIEFjdGl2ZSBWaWV3IiApLCJ2aWV3X3JlbW92ZSIsIENUUkwrU0hJRlQrS2V5X1Is IHRoaXMsIFNMT1QoIHNsb3RSZW1vdmVWaWV3KCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAicmVt b3ZldmlldyIgKTsKKyAgbV9wYVJlbW92ZUN1cnJlbnRUYWIgPSBuZXcgS0FjdGlvbiggaTE4bigg IlJlbW92ZSBDdXJyZW50IFRhYiIgKSwgInZpZXdfcmVtb3ZlX2N1cnJlbnRfdGFiIiwgMCwgdGhp cywgU0xPVCggc2xvdFJlbW92ZUN1cnJlbnRUYWIoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJy ZW1vdmVjdXJyZW50dGFiIiApOwogCiAgIG1fcGFTYXZlUmVtb3ZlVmlld1Byb2ZpbGUgPSBuZXcg S0FjdGlvbiggaTE4biggIiZDb25maWd1cmUgVmlldyBQcm9maWxlcy4uLiIgKSwgMCwgbV9wVmll d01hbmFnZXIsIFNMT1QoIHNsb3RQcm9maWxlRGxnKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAi c2F2ZXJlbW92ZXZpZXdwcm9maWxlIiApOwogICBtX3BhbUxvYWRWaWV3UHJvZmlsZSA9IG5ldyBL QWN0aW9uTWVudSggaTE4biggIkxvYWQgJlZpZXcgUHJvZmlsZSIgKSwgYWN0aW9uQ29sbGVjdGlv bigpLCAibG9hZHZpZXdwcm9maWxlIiApOwpkaWZmIC11IGtkZWJhc2UtMi4yLjIub3JpZy9rb25x dWVyb3Iva29ucV9tYWlud2luZG93Lmgga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9tYWlu d2luZG93LmgKLS0tIGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9tYWlud2luZG93 LmgJRnJpIE1heSAxMSAwNzoxMzo1NCAyMDAxCisrKyBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9r b25xX21haW53aW5kb3cuaAlTdW4gRGVjICA5IDE3OjU2OjM2IDIwMDEKQEAgLTMwNiw3ICszMDYs OSBAQAogCiAgIHZvaWQgc2xvdFNwbGl0Vmlld0hvcml6b250YWwoKTsKICAgdm9pZCBzbG90U3Bs aXRWaWV3VmVydGljYWwoKTsKKyAgdm9pZCBzbG90QWRkVGFiKCk7CiAgIHZvaWQgc2xvdFJlbW92 ZVZpZXcoKTsKKwl2b2lkIHNsb3RSZW1vdmVDdXJyZW50VGFiKCk7CiAKICAgdm9pZCBzbG90U2F2 ZVZpZXdQcm9maWxlKCk7CiAgIHZvaWQgc2xvdFNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHkoKTsK QEAgLTQ1MSw3ICs0NTMsOSBAQAogCiAgIEtBY3Rpb24gKm1fcGFTcGxpdFZpZXdIb3I7CiAgIEtB Y3Rpb24gKm1fcGFTcGxpdFZpZXdWZXI7CisgIEtBY3Rpb24gKm1fcGFBZGRUYWI7CiAgIEtBY3Rp b24gKm1fcGFSZW1vdmVWaWV3OworCUtBY3Rpb24gKm1fcGFSZW1vdmVDdXJyZW50VGFiOwogCiAg IEtBY3Rpb24gKm1fcGFTYXZlUmVtb3ZlVmlld1Byb2ZpbGU7CiAgIEtBY3Rpb25NZW51ICptX3Bh bUxvYWRWaWV3UHJvZmlsZTsKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tv bnFfdmlldy5jYyBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rb25xX3ZpZXcuY2MKLS0tIGtkZWJh c2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV92aWV3LmNjCVdlZCBKdW4gMjAgMTU6MjE6MDYg MjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV92aWV3LmNjCVN1biBEZWMgIDkg MTc6NTY6MzYgMjAwMQpAQCAtOTUsOCArOTUsMTAgQEAKICAgaWYgKCBpc1Bhc3NpdmVNb2RlKCkg JiYgbV9wUGFydCApCiAgICAgICBkaXNjb25uZWN0KCBtX3BQYXJ0LCBTSUdOQUwoIGRlc3Ryb3ll ZCgpICksIG1fcE1haW5XaW5kb3ctPnZpZXdNYW5hZ2VyKCksIFNMT1QoIHNsb3RPYmplY3REZXN0 cm95ZWQoKSApICk7CiAKKwlwYXJ0RGVsZXRlZCgpOwogICBkZWxldGUgbV9wUGFydDsKICAgZGVs ZXRlIChLb25xUnVuICopbV9wUnVuOworCS8vbV9wTWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3 KHRoaXMpOwogICAvL2tkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3Ojp+S29ucVZpZXcgIiA8PCB0 aGlzIDw8ICIgZG9uZSIgPDwgZW5kbDsKIH0KIApAQCAtMTM2LDYgKzEzOCwxMSBAQAogICBtX3BQ YXJ0LT5vcGVuVVJMKCB1cmwgKTsKIAogICBzZW5kT3BlblVSTEV2ZW50KCB1cmwsIGFyZ3MgKTsK KworICBLb25xRnJhbWVDb250YWluZXJCYXNlKiBmcmFtZUNvbnRhaW5lciA9IGZyYW1lKCktPnBh cmVudENvbnRhaW5lcigpOworICBpZiAoZnJhbWVDb250YWluZXIpCisgICAgaWYgKGZyYW1lQ29u dGFpbmVyLT5mcmFtZVR5cGUoKT09IlRhYnMiKQorICAgICAgc3RhdGljX2Nhc3Q8S29ucUZyYW1l VGFicyo+KGZyYW1lQ29udGFpbmVyKS0+Y2hhbmdlVGFiKGZyYW1lKCksbG9jYXRpb25CYXJVUkwp OwogCiAgIHVwZGF0ZUhpc3RvcnlFbnRyeShmYWxzZSAvKiBkb24ndCBzYXZlIGxvY2F0aW9uIGJh ciBVUkwgeWV0ICovKTsKICAgLy8gYWRkIHBlbmRpbmcgaGlzdG9yeSBlbnRyeQpkaWZmIC11IGtk ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV92aWV3bWdyLmNjIGtkZWJhc2UtMi4yLjIv a29ucXVlcm9yL2tvbnFfdmlld21nci5jYwotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJv ci9rb25xX3ZpZXdtZ3IuY2MJVHVlIFNlcCAgNCAxODoxNjo1NSAyMDAxCisrKyBrZGViYXNlLTIu Mi4yL2tvbnF1ZXJvci9rb25xX3ZpZXdtZ3IuY2MJU3VuIERlYyAgOSAxNzo1NjozNiAyMDAxCkBA IC01MSw3ICs1MSwxMCBAQAogewogICBtX3BNYWluV2luZG93ID0gbWFpbldpbmRvdzsKIAotICBt X3BNYWluQ29udGFpbmVyID0gMEw7CisgIG1fcE1haW5Db250YWluZXIgPSBuZXcgS29ucUZyYW1l VGFicyggbV9wTWFpbldpbmRvdyApOworICBtX3BNYWluV2luZG93LT5zZXRDZW50cmFsV2lkZ2V0 KCBtX3BNYWluQ29udGFpbmVyICk7CisgIG1fcE1haW5Db250YWluZXItPnNldEdlb21ldHJ5KCAw LCAwLCBtX3BNYWluV2luZG93LT53aWR0aCgpLCBtX3BNYWluV2luZG93LT5oZWlnaHQoKSApOwor ICBjb25uZWN0KG1fcE1haW5Db250YWluZXIsU0lHTkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1h aW5XaW5kb3csU0xPVChzbG90Q3RybFRhYlByZXNzZWQoKSkpOwogCiAgIG1fcGFtUHJvZmlsZXMg PSAwTDsKICAgbV9iUHJvZmlsZUxpc3REaXJ0eSA9IHRydWU7CkBAIC02OSwxNyArNzIsMTYgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3T25lRmlyc3Qp CiB7CiAgIGtkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3TWFuYWdlcjo6c3BsaXRWaWV3KFNlcnZp Y2VUeXBlKSIgPDwgZW5kbDsKKwlwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIg KTsKIAogICBLb25xRnJhbWUqIHZpZXdGcmFtZSA9IDBMOwotICBpZiggbV9wTWFpbkNvbnRhaW5l ciApCisKKyAgaWYgKCBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpICkKKyAgICB2aWV3RnJh bWUgPSBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpLT5mcmFtZSgpOworICBlbHNlCiAgIHsK LSAgICBpZiAoIG1fcE1haW5XaW5kb3ctPmN1cnJlbnRWaWV3KCkgKQotICAgICAgdmlld0ZyYW1l ID0gbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKS0+ZnJhbWUoKTsKLSAgICBlbHNlCi0gICAg ewotICAgICAga2RXYXJuaW5nKDEyMDIpIDw8ICJzcGxpdFZpZXcgY2FsbGVkLCBidXQgbm8gY3Vy cmVudCB2aWV3ISIgPDwgZW5kbDsKLSAgICAgIHJldHVybiAwTDsgLy8gaWYgd2UgZ28gb24sIHdl J2xsIGhpdCB0aGUgYXNzZXJ0IGluIHNwbGl0KCkKLSAgICB9CisgICAga2RXYXJuaW5nKDEyMDIp IDw8ICJzcGxpdFZpZXcgY2FsbGVkLCBidXQgbm8gY3VycmVudCB2aWV3ISIgPDwgZW5kbDsKKyAg ICByZXR1cm4gMEw7IC8vIGlmIHdlIGdvIG9uLCB3ZSdsbCBoaXQgdGhlIGFzc2VydCBpbiBzcGxp dCgpCiAgIH0KIAogICBLb25xRnJhbWVDb250YWluZXIgKm5ld0NvbnRhaW5lcjsKQEAgLTg3LDEw ICs4OSwxMyBAQAogCiAgIGlmICggbmV3T25lRmlyc3QgKQogICB7Ci0gICAgICBuZXdDb250YWlu ZXItPm1vdmVUb0xhc3QoIHZpZXdGcmFtZS0+d2lkZ2V0KCkgKTsKLSAgICAgIG5ld0NvbnRhaW5l ci0+c3dhcENoaWxkcmVuKCk7CisgICAgbmV3Q29udGFpbmVyLT5tb3ZlVG9MYXN0KCB2aWV3RnJh bWUtPndpZGdldCgpICk7CisgICAgbmV3Q29udGFpbmVyLT5zd2FwQ2hpbGRyZW4oKTsKICAgfQog CisgIHByaW50RnVsbEhpZXJhcmNoeSggbV9wTWFpbkNvbnRhaW5lciApOworICBrZERlYnVnKDEy MDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnNwbGl0VmlldyhTZXJ2aWNlVHlwZSkgZG9uZSIgPDwg ZW5kbDsKKwogICByZXR1cm4gY2hpbGRWaWV3OwogfQogCkBAIC0xMDEsMTMgKzEwNiwxNyBAQAog ewogICBrZERlYnVnKDEyMDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnNwbGl0V2luZG93KGRlZmF1 bHQpIiA8PCBlbmRsOwogCisgIHJldHVybiAwTDsKKworICAvKgogICBLVVJMIHVybCA9IG1fcE1h aW5XaW5kb3ctPmN1cnJlbnRWaWV3KCktPnVybCgpOwogCiAgIFFTdHJpbmcgbG9jYXRpb25CYXJV Ukw7CiAgIEtvbnFGcmFtZUJhc2UqIHNwbGl0RnJhbWUgPSAwTDsKICAgaWYoIG1fcE1haW5Db250 YWluZXIgKQogICB7Ci0gICAgc3BsaXRGcmFtZSA9IG1fcE1haW5Db250YWluZXItPmZpcnN0Q2hp bGQoKTsKKyAgICBpZiAobV9wTWFpbkNvbnRhaW5lci0+ZnJhbWVUeXBlKCk9PSJUYWJzIikgcmV0 dXJuIDBMOworICAgIHNwbGl0RnJhbWUgPSBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIq PihtX3BNYWluQ29udGFpbmVyKS0+Zmlyc3RDaGlsZCgpOwogICAgIGxvY2F0aW9uQmFyVVJMID0g bV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKS0+bG9jYXRpb25CYXJVUkwoKTsKICAgICBpZiAo ICFzcGxpdEZyYW1lICkKICAgICB7CkBAIC0xMjksNiArMTM4LDI5IEBACiAgICAgY2hpbGRWaWV3 LT5vcGVuVVJMKCB1cmwsIGxvY2F0aW9uQmFyVVJMICk7CiAKICAgcmV0dXJuIGNoaWxkVmlldzsK KworICAqLworfQorCitLb25xVmlldyogS29ucVZpZXdNYW5hZ2VyOjphZGRUYWIoY29uc3QgUVN0 cmluZyAmc2VydmljZVR5cGUsIGNvbnN0IFFTdHJpbmcgJnNlcnZpY2VOYW1lLCBib29sIHBhc3Np dmVNb2RlKQoreworICBrZERlYnVnKDEyMDIpIDw8ICItLS0tLS0tLS0tLS0tIEtvbnFWaWV3TWFu YWdlcjo6c3BsaXRUYWIgc3RhcnRpbmcgLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKKyAgcHJpbnRG dWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisKKyAgS1NlcnZpY2U6OlB0ciBzZXJ2 aWNlOworICBLVHJhZGVyOjpPZmZlckxpc3QgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VP ZmZlcnM7CisKKyAgS29ucVZpZXdGYWN0b3J5IG5ld1ZpZXdGYWN0b3J5ID0gY3JlYXRlVmlldygg c2VydmljZVR5cGUsIHNlcnZpY2VOYW1lLCBzZXJ2aWNlLCBwYXJ0U2VydmljZU9mZmVycywgYXBw U2VydmljZU9mZmVycyApOworCisgIGlmKCBuZXdWaWV3RmFjdG9yeS5pc051bGwoKSApCisgICAg cmV0dXJuIDBMOyAvL2RvIG5vdCBzcGxpdCBhdCBhbGwgaWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBu ZXcgdmlldworCisgIEtvbnFWaWV3KiBjaGlsZFZpZXcgPSBzZXR1cFZpZXcoIG1fcE1haW5Db250 YWluZXIsIG5ld1ZpZXdGYWN0b3J5LCBzZXJ2aWNlLCBwYXJ0U2VydmljZU9mZmVycywgYXBwU2Vy dmljZU9mZmVycywgc2VydmljZVR5cGUsIHBhc3NpdmVNb2RlICk7CisKKyAgcHJpbnRGdWxsSGll cmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisgIGtkRGVidWcoMTIwMikgPDwgIi0tLS0tLS0t LS0tLS0gS29ucVZpZXdNYW5hZ2VyOjpzcGxpdFRhYiBkb25lIC0tLS0tLS0tLS0tLS0iIDw8IGVu ZGw7CisKKyAgcmV0dXJuIGNoaWxkVmlldzsKIH0KIAogS29ucVZpZXcqIEtvbnFWaWV3TWFuYWdl cjo6c3BsaXQgKEtvbnFGcmFtZUJhc2UqIHNwbGl0RnJhbWUsCkBAIC0xNDgsMTkgKzE4MCwxOCBA QAogICAgIHJldHVybiAwTDsgLy9kbyBub3Qgc3BsaXQgYXQgYWxsIGlmIHdlIGNhbid0IGNyZWF0 ZSB0aGUgbmV3IHZpZXcKIAogICBLb25xVmlldyAqY2hpbGRWaWV3OwotICBpZiggbV9wTWFpbkNv bnRhaW5lciApCisgIGlmKCBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpICkKICAgewogICAg IGFzc2VydCggc3BsaXRGcmFtZSApOwogCi0gICAgS29ucUZyYW1lQ29udGFpbmVyKiBwYXJlbnRD b250YWluZXIgPSBzcGxpdEZyYW1lLT5wYXJlbnRDb250YWluZXIoKTsKLSAgICBib29sIG1vdmVO ZXdDb250YWluZXIgPSAocGFyZW50Q29udGFpbmVyLT5pZEFmdGVyKCBzcGxpdEZyYW1lLT53aWRn ZXQoKSApICE9IDApOworICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5l ciA9IHNwbGl0RnJhbWUtPnBhcmVudENvbnRhaW5lcigpOwogCiAjaWZuZGVmIE5ERUJVRwogICAg IHByaW50U2l6ZUluZm8oIHNwbGl0RnJhbWUsIHBhcmVudENvbnRhaW5lciwgImJlZm9yZSBzcGxp dCIpOwogI2VuZGlmCiAKICAgICBzcGxpdEZyYW1lLT53aWRnZXQoKS0+c2V0VXBkYXRlc0VuYWJs ZWQoIGZhbHNlICk7Ci0gICAgcGFyZW50Q29udGFpbmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggZmFs c2UgKTsKKyAgICBwYXJlbnRDb250YWluZXItPndpZGdldCgpLT5zZXRVcGRhdGVzRW5hYmxlZCgg ZmFsc2UgKTsKIAogICAgIFFQb2ludCBwb3MgPSBzcGxpdEZyYW1lLT53aWRnZXQoKS0+cG9zKCk7 CiAKQEAgLTE3NCwxMiArMjA1LDkgQEAKICAgICBLb25xRnJhbWVDb250YWluZXIgKm5ld0NvbnRh aW5lciA9IG5ldyBLb25xRnJhbWVDb250YWluZXIoIG9yaWVudGF0aW9uLCBwYXJlbnRDb250YWlu ZXIgKTsKICAgICBjb25uZWN0KG5ld0NvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSks bV9wTWFpbldpbmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7CiAgICAgbmV3Q29udGFp bmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggZmFsc2UgKTsKLSAgICBuZXdDb250YWluZXItPnNldE9w YXF1ZVJlc2l6ZSggdHJ1ZSApOwogICAgIG5ld0NvbnRhaW5lci0+c2hvdygpOwogCiAgICAgcGFy ZW50Q29udGFpbmVyLT5pbnNlcnRDaGlsZEZyYW1lKCBuZXdDb250YWluZXIgKTsKLSAgICBpZigg bW92ZU5ld0NvbnRhaW5lciApCi0gICAgICBwYXJlbnRDb250YWluZXItPm1vdmVUb0ZpcnN0KCBu ZXdDb250YWluZXIgKTsKIAogICAgIC8va2REZWJ1ZygxMjAyKSA8PCAiTW92ZSBpbiBjaGlsZCIg PDwgZW5kbDsKICAgICBzcGxpdEZyYW1lLT53aWRnZXQoKS0+cmVwYXJlbnQoIG5ld0NvbnRhaW5l ciwgcG9zLCB0cnVlIC8qc2hvd0l0Ki8gKTsKQEAgLTE5OCw3ICsyMjYsNyBAQAogCiAgICAgc3Bs aXRGcmFtZS0+d2lkZ2V0KCktPnNldFVwZGF0ZXNFbmFibGVkKCB0cnVlICk7CiAgICAgbmV3Q29u dGFpbmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggdHJ1ZSApOwotICAgIHBhcmVudENvbnRhaW5lci0+ c2V0VXBkYXRlc0VuYWJsZWQoIHRydWUgKTsKKyAgICBwYXJlbnRDb250YWluZXItPndpZGdldCgp LT5zZXRVcGRhdGVzRW5hYmxlZCggdHJ1ZSApOwogCiAgICAgaWYgKCBuZXdGcmFtZUNvbnRhaW5l ciApCiAgICAgICAqbmV3RnJhbWVDb250YWluZXIgPSBuZXdDb250YWluZXI7CkBAIC0yMDYsMjEg KzIzNCwxNSBAQAogICB9CiAgIGVsc2UgLy8gV2UgaGFkIG5vIG1haW4gY29udGFpbmVyLCBjcmVh dGUgb25lCiAgIHsKLSAgICBtX3BNYWluQ29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5l ciggb3JpZW50YXRpb24sIG1fcE1haW5XaW5kb3cgKTsKLSAgICBrZERlYnVnKDEyMDIpIDw8ICJD cmVhdGVkIG1haW4gY29udGFpbmVyICIgPDwgbV9wTWFpbkNvbnRhaW5lciA8PCBlbmRsOwotICAg IGNvbm5lY3QobV9wTWFpbkNvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSksbV9wTWFp bldpbmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7Ci0gICAgbV9wTWFpbldpbmRvdy0+ c2V0Q2VudHJhbFdpZGdldCggbV9wTWFpbkNvbnRhaW5lciApOwotICAgIG1fcE1haW5Db250YWlu ZXItPnNldE9wYXF1ZVJlc2l6ZSgpOwotICAgIG1fcE1haW5Db250YWluZXItPnNldEdlb21ldHJ5 KCAwLCAwLCBtX3BNYWluV2luZG93LT53aWR0aCgpLCBtX3BNYWluV2luZG93LT5oZWlnaHQoKSAp OwotCi0gICAgY2hpbGRWaWV3ID0gc2V0dXBWaWV3KCBtX3BNYWluQ29udGFpbmVyLCBuZXdWaWV3 RmFjdG9yeSwgc2VydmljZSwgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VPZmZlcnMsIHNl cnZpY2VUeXBlLCBwYXNzaXZlTW9kZSApOwotCi0gICAgLy9tX3BNYWluQ29udGFpbmVyLT5zaG93 KCk7CisgICAgS29ucUZyYW1lQ29udGFpbmVyKiBuZXdDb250YWluZXIgPSBuZXcgS29ucUZyYW1l Q29udGFpbmVyKCBvcmllbnRhdGlvbiwgbV9wTWFpbkNvbnRhaW5lciApOworICAgIGtkRGVidWco MTIwMikgPDwgIkNyZWF0ZWQgbmV3IGNvbnRhaW5lciwgY2hpbGQgb2YgbV9wTWFpbkNvbnRhaW5l ciIgPDwgbmV3Q29udGFpbmVyIDw8IGVuZGw7CisgICAgY29ubmVjdChuZXdDb250YWluZXIsU0lH TkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1haW5XaW5kb3csU0xPVChzbG90Q3RybFRhYlByZXNz ZWQoKSkpOworICAgIG1fcE1haW5Db250YWluZXItPmluc2VydENoaWxkRnJhbWUoIG5ld0NvbnRh aW5lcik7CiAKLSAgICAvL2NoaWxkVmlldy0+ZnJhbWUoKS0+c3RhdHVzYmFyKCktPmhpZGVTdHVm ZigpOworICAgIGNoaWxkVmlldyA9IHNldHVwVmlldyggbmV3Q29udGFpbmVyLCBuZXdWaWV3RmFj dG9yeSwgc2VydmljZSwgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VPZmZlcnMsIHNlcnZp Y2VUeXBlLCBwYXNzaXZlTW9kZSApOwogCiAgICAgaWYgKCBuZXdGcmFtZUNvbnRhaW5lciApCi0g ICAgICAqbmV3RnJhbWVDb250YWluZXIgPSBtX3BNYWluQ29udGFpbmVyOworICAgICAgKm5ld0Zy YW1lQ29udGFpbmVyID0gbmV3Q29udGFpbmVyOwogICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0y MzAsOSArMjUyLDM3IEBACiAgIHJldHVybiBjaGlsZFZpZXc7CiB9CiAKK3ZvaWQgS29ucVZpZXdN YW5hZ2VyOjpyZW1vdmVDdXJyZW50VGFiKCkgeworICBrZERlYnVnKDEyMDIpIDw8ICItLS0tLS0t LS0tLS0tLS0tIEtvbnFWaWV3TWFuYWdlcjo6cmVtb3ZlQ3VycmVudFRhYiAtLS0tLS0tLS0tLS0t LSIgPDwgZW5kbDsKKyAgcHJpbnRGdWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisK KyAgS29ucUZyYW1lQmFzZSogY3VycmVudEZyYW1lID0gZHluYW1pY19jYXN0PEtvbnFGcmFtZUJh c2UqPihtX3BNYWluQ29udGFpbmVyLT5jdXJyZW50UGFnZSgpKTsKKyAgbV9wTWFpbkNvbnRhaW5l ci0+cmVtb3ZlQ2hpbGRGcmFtZShjdXJyZW50RnJhbWUpOworICBjdXJyZW50RnJhbWUtPndpZGdl dCgpLT5oaWRlKCk7CisgIC8vY3VycmVudEZyYW1lLT53aWRnZXQoKS0+c2V0VXBkYXRlc0VuYWJs ZWQoZmFsc2UpOworCisgIFFMaXN0PEtvbnFWaWV3PiB2aWV3TGlzdDsKKyAgUUxpc3RJdGVyYXRv cjxLb25xVmlldz4gaXQoIHZpZXdMaXN0ICk7CisKKyAgY3VycmVudEZyYW1lLT5saXN0Vmlld3Mo ICZ2aWV3TGlzdCApOworCisgIGZvciAoIGl0LnRvRmlyc3QoKTsgaXQuY3VycmVudCgpOyArK2l0 ICkKKyAgeworICAgIG1fcE1haW5XaW5kb3ctPnJlbW92ZUNoaWxkVmlldyggaXQuY3VycmVudCgp ICk7CisgICAgZGVsZXRlIGl0LmN1cnJlbnQoKTsKKyAgfQorCisgIGRlbGV0ZSBjdXJyZW50RnJh bWU7CisKKyAgcHJpbnRGdWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisgIGtkRGVi dWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0gS29ucVZpZXdNYW5hZ2VyOjpyZW1vdmVDdXJyZW50 VGFiIGRvbmUgLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Cit9CQorCiB2b2lkIEtvbnFWaWV3TWFu YWdlcjo6cmVtb3ZlVmlldyggS29ucVZpZXcgKnZpZXcgKQogewotICBrZERlYnVnKDEyMDIpIDw8 ICItLS0tLS0tLS0tLS0tLS0tIHJlbW92ZVZpZXcgIiA8PCB2aWV3IDw8IGVuZGw7CisgIGtkRGVi dWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZlVmlldyAtLS0tLS0tLS0tLS0tLSIg PDwgdmlldyA8PCBlbmRsOworICBwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIg KTsKKwogICBpZiAoIGFjdGl2ZVBhcnQoKSA9PSB2aWV3LT5wYXJ0KCkgKQogICB7CiAgICAgS29u cVZpZXcgKm5leHRWaWV3ID0gY2hvb3NlTmV4dFZpZXcoIHZpZXcgKTsKQEAgLTI0Niw1MyArMjk2 LDY3IEBACiAgICAgICBzZXRBY3RpdmVQYXJ0KCBuZXh0Vmlldy0+cGFydCgpLCB0cnVlIC8qaW1t ZWRpYXRlICovICk7CiAgIH0KIAotICBLb25xRnJhbWVDb250YWluZXIqIHBhcmVudENvbnRhaW5l ciA9IHZpZXctPmZyYW1lKCktPnBhcmVudENvbnRhaW5lcigpOwotICBLb25xRnJhbWVDb250YWlu ZXIqIGdyYW5kUGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyLT5wYXJlbnRDb250YWlu ZXIoKTsKLSAga2REZWJ1ZygxMjAyKSA8PCAidmlldz0iIDw8IHZpZXcgPDwgIiBwYXJlbnRDb250 YWluZXI9IiA8PCBwYXJlbnRDb250YWluZXIKLSAgICAgICAgICAgICAgICA8PCAiIGdyYW5kUGFy ZW50Q29udGFpbmVyPSIgPDwgZ3JhbmRQYXJlbnRDb250YWluZXIgPDwgZW5kbDsKLSAgYm9vbCBt b3ZlT3RoZXJDaGlsZCA9IChncmFuZFBhcmVudENvbnRhaW5lci0+aWRBZnRlciggcGFyZW50Q29u dGFpbmVyICkgIT0gMCk7CisgIEtvbnFGcmFtZSogZnJhbWUgPSB2aWV3LT5mcmFtZSgpOworICBL b25xRnJhbWVDb250YWluZXJCYXNlKiBwYXJlbnRDb250YWluZXIgPSBmcmFtZS0+cGFyZW50Q29u dGFpbmVyKCk7CisJCisgIGtkRGVidWcoMTIwMikgPDwgcGFyZW50Q29udGFpbmVyLT5mcmFtZVR5 cGUoKSA8PCBlbmRsOwogCi0gIEtvbnFGcmFtZUJhc2UqIG90aGVyRnJhbWUgPSBwYXJlbnRDb250 YWluZXItPm90aGVyQ2hpbGQoIHZpZXctPmZyYW1lKCkgKTsKKyAgaWYgKHBhcmVudENvbnRhaW5l ci0+ZnJhbWVUeXBlKCk9PSJDb250YWluZXIiKQorICB7CisgICAga2REZWJ1ZygxMjAyKSA8PCAi cGFyZW50Q29udGFpbmVyICIgPDwgcGFyZW50Q29udGFpbmVyIDw8ICIgaXMgYSBLb25xRnJhbWVD b250YWluZXIiIDw8IGVuZGw7CiAKLSAgaWYoIG90aGVyRnJhbWUgPT0gMEwgKSB7Ci0gICAga2RX YXJuaW5nKDEyMDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnJlbW92ZVZpZXc6IFRoaXMgc2hvdWxk bid0IGhhcHBlbiEiIDw8IGVuZGw7Ci0gICAgcmV0dXJuOworICAgIEtvbnFGcmFtZUNvbnRhaW5l ckJhc2UqIGdyYW5kUGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyLT5wYXJlbnRDb250 YWluZXIoKTsKKyAgICBLb25xRnJhbWVCYXNlKiBvdGhlckZyYW1lID0gc3RhdGljX2Nhc3Q8S29u cUZyYW1lQ29udGFpbmVyKj4ocGFyZW50Q29udGFpbmVyKS0+b3RoZXJDaGlsZCggZnJhbWUgKTsK KworICAgIGtkRGVidWcoMTIwMikgPDwgInZpZXc9IiA8PCB2aWV3IDw8ICIgcGFyZW50Q29udGFp bmVyPSIgPDwgcGFyZW50Q29udGFpbmVyCisgICAgICAgICAgICAgICAgICA8PCAiIGdyYW5kUGFy ZW50Q29udGFpbmVyPSIgPDwgZ3JhbmRQYXJlbnRDb250YWluZXIgPDwgZW5kbDsKKworICAgIGlm KCBvdGhlckZyYW1lID09IDBMICkKKyAgICB7CisgICAgICBrZFdhcm5pbmcoMTIwMikgPDwgIktv bnFWaWV3TWFuYWdlcjo6cmVtb3ZlVmlldzogVGhpcyBzaG91bGRuJ3QgaGFwcGVuISIgPDwgZW5k bDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBrZERlYnVnKDEyMDIpIDw8ICJLb25xVmll d01hbmFnZXI6OnJlbW92ZVZpZXcgcmVwYXJlbnRpbmcgb3RoZXIgZnJhbWUgIiA8PCBvdGhlckZy YW1lIDw8ICIgd2lkZ2V0PSIgPDwgb3RoZXJGcmFtZS0+d2lkZ2V0KCkgPDwgZW5kbDsKKyAgICBR UG9pbnQgcG9zID0gb3RoZXJGcmFtZS0+d2lkZ2V0KCktPnBvcygpOworCisgICAgb3RoZXJGcmFt ZS0+cmVwYXJlbnRGcmFtZSggbV9wTWFpbldpbmRvdywgcG9zICk7CisgICAgb3RoZXJGcmFtZS0+ d2lkZ2V0KCktPmhpZGUoKTsgLy8gQ2FuJ3QgaGlkZSBiZWZvcmUsIGJ1dCBhZnRlciBpcyBiZXR0 ZXIgdGhhbiBub3RoaW5nCisgICAgb3RoZXJGcmFtZS0+d2lkZ2V0KCktPnJlc2l6ZSggMTAwLCAz MCApOyAvLyBicmluZyBpdCB0byB0aGUgUVdpZGdldCBkZWZhdWx0c2l6ZQorCisgICAga2REZWJ1 ZygxMjAyKSA8PCAiLS0tIFJlbW92aW5nIG90aGVyRnJhbWUgZnJvbSBwYXJlbnRDb250YWluZXIi IDw8IGVuZGw7CisgICAgcGFyZW50Q29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBvdGhlckZy YW1lICk7CisKKyAgICBrZERlYnVnKDEyMDIpIDw8ICItLS0gUmVtb3ZpbmcgcGFyZW50Q29udGFp bmVyIGZyb20gZ3JhbmRQYXJlbnRDb250YWluZXIiIDw8IGVuZGw7CisgICAgZ3JhbmRQYXJlbnRD b250YWluZXItPnJlbW92ZUNoaWxkRnJhbWUoIHBhcmVudENvbnRhaW5lciApOworCisgICAgbV9w TWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3KHZpZXcpOworCisgICAga2REZWJ1ZygxMjAyKSA8 PCAiLS0tIERlbGV0aW5nIHBhcmVudENvbnRhaW5lciAiIDw8IHBhcmVudENvbnRhaW5lcgorICAg ICAgICAgICAgICAgICAgPDwgIi4gSXRzIHBhcmVudCBpcyAiIDw8IHBhcmVudENvbnRhaW5lci0+ d2lkZ2V0KCktPnBhcmVudCgpIDw8IGVuZGw7CisgICAgZGVsZXRlIHBhcmVudENvbnRhaW5lcjsK KworICAgIG90aGVyRnJhbWUtPnJlcGFyZW50RnJhbWUoIGdyYW5kUGFyZW50Q29udGFpbmVyLT53 aWRnZXQoKSwgcG9zLCB0cnVlIC8qc2hvd0l0Ki8gKTsKKworICAgIGtkRGVidWcoMTIwMikgPDwg Ii0tLSBJbnNlcnRpbmcgb3RoZXJGcmFtZSBpbnRvIGdyYW5kUGFyZW50Q29udGFpbmVyIiA8PCBl bmRsOwkJCisgICAgZ3JhbmRQYXJlbnRDb250YWluZXItPmluc2VydENoaWxkRnJhbWUoIG90aGVy RnJhbWUgKTsKICAgfQorICBlbHNlIHsKKyAgICBrZERlYnVnKDEyMDIpIDw8ICJwYXJlbnRDb250 YWluZXIgIiA8PCBwYXJlbnRDb250YWluZXIgPDwgIiBpcyBhIEtvbnFGcmFtZVRhYnMiIDw8IGVu ZGw7CisKKyAgICBtX3BNYWluQ29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBmcmFtZSApOwor CisgICAgLy8gVGhpcyBkZWxldGVzIHRoZSB3aWRnZXRzIGluc2lkZSwgaW5jbHVkaW5nIHRoZSBw YXJ0J3Mgd2lkZ2V0LCBzbyB0ZWxsIHRoZSBjaGlsZCB2aWV3CisgICAgLy92aWV3LT5wYXJ0RGVs ZXRlZCgpOwogCi0gIGtkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3TWFuYWdlcjo6cmVtb3ZlVmll dyByZXBhcmVudGluZyBvdGhlciBmcmFtZSAiIDw8IG90aGVyRnJhbWUgPDwgIiB3aWRnZXQ9IiA8 PCBvdGhlckZyYW1lLT53aWRnZXQoKSA8PCBlbmRsOwotICBRUG9pbnQgcG9zID0gb3RoZXJGcmFt ZS0+d2lkZ2V0KCktPnBvcygpOworICAgIG1fcE1haW5XaW5kb3ctPnJlbW92ZUNoaWxkVmlldyh2 aWV3KTsKIAotICBvdGhlckZyYW1lLT5yZXBhcmVudEZyYW1lKCBtX3BNYWluV2luZG93LCBwb3Mg KTsKLSAgb3RoZXJGcmFtZS0+d2lkZ2V0KCktPmhpZGUoKTsgLy8gQ2FuJ3QgaGlkZSBiZWZvcmUs IGJ1dCBhZnRlciBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nCi0gIG90aGVyRnJhbWUtPndpZGdldCgp LT5yZXNpemUoIDEwMCwgMzAgKTsgLy8gYnJpbmcgaXQgdG8gdGhlIFFXaWRnZXQgZGVmYXVsdHNp emUKLSAgcGFyZW50Q29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBvdGhlckZyYW1lICk7Ci0K LSAgbV9wTWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3KCB2aWV3ICk7Ci0KLSAgcGFyZW50Q29u dGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCB2aWV3LT5mcmFtZSgpICk7Ci0KLSAgLy8gV2UgZGlk IHNvIG91cnNlbHZlcyBmb3IgcGFzc2l2ZSB2aWV3cyAtIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciwg YnV0IHNhdmVzIGEgY2FsbCB0byBzbG90UGFzc2l2ZU1vZGVQYXJ0RGVsZXRlZAotICBpZiAoIHZp ZXctPmlzUGFzc2l2ZU1vZGUoKSAmJiB2aWV3LT5wYXJ0KCkgKQotICAgICAgZGlzY29ubmVjdCgg dmlldy0+cGFydCgpLCBTSUdOQUwoIGRlc3Ryb3llZCgpICksIHRoaXMsIFNMT1QoIHNsb3RQYXNz aXZlTW9kZVBhcnREZWxldGVkKCkgKSApOwotCi0gIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5n IHZpZXcgZnJhbWUgIiA8PCB2aWV3LT5mcmFtZSgpIDw8IGVuZGw7Ci0gIGRlbGV0ZSB2aWV3LT5m cmFtZSgpOwotICAvLyBUaGlzIGRlbGV0ZXMgdGhlIHdpZGdldHMgaW5zaWRlLCBpbmNsdWRpbmcg dGhlIHBhcnQncyB3aWRnZXQsIHNvIHRlbGwgdGhlIGNoaWxkIHZpZXcKLSAgdmlldy0+cGFydERl bGV0ZWQoKTsKLSAga2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgdmlldyAiIDw8IHZpZXcgPDwg ZW5kbDsKLSAgZGVsZXRlIHZpZXc7Ci0KLSAgZ3JhbmRQYXJlbnRDb250YWluZXItPnJlbW92ZUNo aWxkRnJhbWUoIHBhcmVudENvbnRhaW5lciApOwotICBrZERlYnVnKDEyMDIpIDw8ICJEZWxldGlu ZyBwYXJlbnRDb250YWluZXIgIiA8PCBwYXJlbnRDb250YWluZXIKLSAgICAgICAgICAgICAgICA8 PCAiLiBJdHMgcGFyZW50IGlzICIgPDwgcGFyZW50Q29udGFpbmVyLT5wYXJlbnQoKSA8PCBlbmRs OwotICBkZWxldGUgcGFyZW50Q29udGFpbmVyOwotCi0gIG90aGVyRnJhbWUtPnJlcGFyZW50RnJh bWUoIGdyYW5kUGFyZW50Q29udGFpbmVyLCBwb3MsIHRydWUvKnNob3dJdCovICk7Ci0gIGdyYW5k UGFyZW50Q29udGFpbmVyLT5pbnNlcnRDaGlsZEZyYW1lKCBvdGhlckZyYW1lICk7Ci0gIGlmKCBt b3ZlT3RoZXJDaGlsZCApCi0gICAgZ3JhbmRQYXJlbnRDb250YWluZXItPm1vdmVUb0ZpcnN0KCBv dGhlckZyYW1lLT53aWRnZXQoKSApOworICAgIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5nIHZp ZXcgZnJhbWUgIiA8PCBmcmFtZSA8PCBlbmRsOworICAgIGRlbGV0ZSBmcmFtZTsKKyAgfQorCisg IGtkRGVidWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0gcmVtb3ZlVmlldyBkb25lIC0tLS0tLS0t LS0tLS0tIiA8PCB2aWV3IDw8IGVuZGw7CiAKLSAga2REZWJ1ZygxMjAyKSA8PCAiLS0tLS0tLS0t LS0tLSByZW1vdmVWaWV3IGRvbmUgIiA8PCB2aWV3IDw8IGVuZGw7CiAjaWZuZGVmIE5ERUJVRwog ICBwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIgKTsKICNlbmRpZgpAQCAtMzE4 LDEwICszODIsNiBAQAogICAgICAgICBrZERlYnVnKDEyMDIpIDw8ICJEZWxldGluZyBsYXN0IHZp ZXcgLT4gY2xvc2luZyB0aGUgd2luZG93IiA8PCBlbmRsOwogICAgICAgICBzZXRBY3RpdmVQYXJ0 KCAwTCwgdHJ1ZSApOwogICAgICAgICBtX3BNYWluV2luZG93LT5yZW1vdmVDaGlsZFZpZXcoIHZp ZXcgKTsKLSAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgZnJhbWUgIiA8PCB2aWV3 IDw8IGVuZGw7Ci0gICAgICAgIGRlbGV0ZSB2aWV3LT5mcmFtZSgpOyAvLyBUaGlzIGRlbGV0ZXMg dGhlIHdpZGdldHMgaW5zaWRlLCBpbmNsdWRpbmcgdGhlIHBhcnQncyB3aWRnZXQKLSAgICAgICAg a2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgdmlldyAiIDw8IHZpZXcgPDwgZW5kbDsKLSAgICAg ICAgZGVsZXRlIHZpZXc7CiAgICAgICAgIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5nIG1fcE1h aW5Db250YWluZXIgIiA8PCBtX3BNYWluQ29udGFpbmVyIDw8IGVuZGw7CiAgICAgICAgIGRlbGV0 ZSBtX3BNYWluQ29udGFpbmVyOwogICAgICAgICBtX3BNYWluQ29udGFpbmVyID0gMEw7CkBAIC0z NzgsMTggKzQzOCwxOCBAQAogICBRTGlzdDxLb25xVmlldz4gdmlld0xpc3Q7CiAgIFFMaXN0SXRl cmF0b3I8S29ucVZpZXc+IGl0KCB2aWV3TGlzdCApOwogCi0gIGlmIChtX3BNYWluQ29udGFpbmVy KSB7Ci0gICAgbV9wTWFpbkNvbnRhaW5lci0+bGlzdFZpZXdzKCAmdmlld0xpc3QgKTsKKyAgaWYg KCAhbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKSApIHJldHVybjsKIAotICAgIGZvciAoIGl0 LnRvRmlyc3QoKTsgaXQuY3VycmVudCgpOyArK2l0ICkgewotICAgICAgbV9wTWFpbldpbmRvdy0+ cmVtb3ZlQ2hpbGRWaWV3KCBpdC5jdXJyZW50KCkgKTsKLSAgICAgIGRlbGV0ZSBpdC5jdXJyZW50 KCk7Ci0gICAgfQorICBtX3BNYWluQ29udGFpbmVyLT5saXN0Vmlld3MoICZ2aWV3TGlzdCApOwog Ci0gICAga2REZWJ1ZygxMjAyKSA8PCAiZGVsZXRpbmcgbV9wTWFpbkNvbnRhaW5lciAiIDw8IGVu ZGw7Ci0gICAgZGVsZXRlIG1fcE1haW5Db250YWluZXI7Ci0gICAgbV9wTWFpbkNvbnRhaW5lciA9 IDBMOworICBmb3IgKCBpdC50b0ZpcnN0KCk7IGl0LmN1cnJlbnQoKTsgKytpdCApIHsKKyAgICBt X3BNYWluV2luZG93LT5yZW1vdmVDaGlsZFZpZXcoIGl0LmN1cnJlbnQoKSApOworICAgIGRlbGV0 ZSBpdC5jdXJyZW50KCk7CiAgIH0KKworICBrZERlYnVnKDEyMDIpIDw8ICJkZWxldGluZyBtX3BN YWluQ29udGFpbmVyICIgPDwgZW5kbDsKKyAgZGVsZXRlIG1fcE1haW5Db250YWluZXI7CisgIG1f cE1haW5Db250YWluZXIgPSAwTDsKIH0KIAogS29ucVZpZXcgKktvbnFWaWV3TWFuYWdlcjo6Y2hv b3NlTmV4dFZpZXcoIEtvbnFWaWV3ICp2aWV3ICkKQEAgLTQ1OSw3ICs1MTksNyBAQAogICByZXR1 cm4gdmlld0ZhY3Rvcnk7CiB9CiAKLUtvbnFWaWV3ICpLb25xVmlld01hbmFnZXI6OnNldHVwVmll dyggS29ucUZyYW1lQ29udGFpbmVyICpwYXJlbnRDb250YWluZXIsCitLb25xVmlldyAqS29ucVZp ZXdNYW5hZ2VyOjpzZXR1cFZpZXcoIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UgKnBhcmVudENvbnRh aW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS29ucVZpZXdGYWN0 b3J5ICZ2aWV3RmFjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgS1NlcnZpY2U6OlB0ciAmc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgS1RyYWRlcjo6T2ZmZXJMaXN0ICZwYXJ0U2VydmljZU9mZmVycywK QEAgLTUyNiwxNCArNTg2LDE0IEBACiB2b2lkIEtvbnFWaWV3TWFuYWdlcjo6c2F2ZVZpZXdQcm9m aWxlKCBLQ29uZmlnICYgY2ZnLCBib29sIHNhdmVVUkxzLCBib29sIHNhdmVXaW5kb3dTaXplICkK IHsKICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucVZpZXdNYW5hZ2VyOjpzYXZlVmlld1Byb2ZpbGUi IDw8IGVuZGw7Ci0gIGlmKCBtX3BNYWluQ29udGFpbmVyICYmIG1fcE1haW5Db250YWluZXItPmZp cnN0Q2hpbGQoKSApIHsKLSAgICBjZmcud3JpdGVFbnRyeSggIlJvb3RJdGVtIiwgUVN0cmluZzo6 ZnJvbUxhdGluMSggbV9wTWFpbkNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLT5mcmFtZVR5cGUoKSAp Ci0gICAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKDApICk7Ci0gICAgUVN0cmlu ZyBwcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBtX3BNYWluQ29udGFpbmVyLT5maXJzdENo aWxkKCktPmZyYW1lVHlwZSgpICkKLSAgICAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVt YmVyKDApOwotICAgIHByZWZpeC5hcHBlbmQoICdfJyApOwotICAgIG1fcE1haW5Db250YWluZXIt PmZpcnN0Q2hpbGQoKS0+c2F2ZUNvbmZpZyggJmNmZywgcHJlZml4LCBzYXZlVVJMcywgMCwgMSAp OwotICB9CisgIC8vaWYoIG1fcE1haW5Db250YWluZXIgJiYgbV9wTWFpbkNvbnRhaW5lci0+Zmly c3RDaGlsZCgpICkgeworICAvLyAgY2ZnLndyaXRlRW50cnkoICJSb290SXRlbSIsIFFTdHJpbmc6 OmZyb21MYXRpbjEoIG1fcE1haW5Db250YWluZXItPmZpcnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkg KQorICAvLyAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKDApICk7CisgIC8vICBR U3RyaW5nIHByZWZpeCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIG1fcE1haW5Db250YWluZXItPmZp cnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkgKQorICAvLyAgICAgICAgICAgICAgICAgICArIFFTdHJp bmc6Om51bWJlcigwKTsKKyAgLy8gIHByZWZpeC5hcHBlbmQoICdfJyApOworICAvLyAgbV9wTWFp bkNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLT5zYXZlQ29uZmlnKCAmY2ZnLCBwcmVmaXgsIHNhdmVV UkxzLCAwLCAxICk7CisgIC8vfQogCiAgIGlmICggc2F2ZVdpbmRvd1NpemUgKQogICB7CkBAIC01 ODMsMTIgKzY0MywxMSBAQAogCiAgIGlmICggcm9vdEl0ZW0gIT0gImVtcHR5IiAmJiBmb3JjZWRV UkwudXJsKCkgIT0gImFib3V0OmJsYW5rIiApCiAgIHsKLSAgICAgIG1fcE1haW5Db250YWluZXIg PSBuZXcgS29ucUZyYW1lQ29udGFpbmVyKCBRdDo6SG9yaXpvbnRhbCwgbV9wTWFpbldpbmRvdyAp OwotICAgICAgY29ubmVjdChtX3BNYWluQ29udGFpbmVyLFNJR05BTChjdHJsVGFiUHJlc3NlZCgp KSxtX3BNYWluV2luZG93LFNMT1Qoc2xvdEN0cmxUYWJQcmVzc2VkKCkpKTsKLSAgICAgIG1fcE1h aW5XaW5kb3ctPnNldENlbnRyYWxXaWRnZXQoIG1fcE1haW5Db250YWluZXIgKTsKLSAgICAgIG1f cE1haW5Db250YWluZXItPnNldE9wYXF1ZVJlc2l6ZSgpOwotICAgICAgbV9wTWFpbkNvbnRhaW5l ci0+c2V0R2VvbWV0cnkoIDAsIDAsIG1fcE1haW5XaW5kb3ctPndpZHRoKCksIG1fcE1haW5XaW5k b3ctPmhlaWdodCgpICk7Ci0gICAgICBtX3BNYWluQ29udGFpbmVyLT5zaG93KCk7CisgICAgLy9t X3BNYWluQ29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5lciggUXQ6Okhvcml6b250YWws IG1fcE1haW5XaW5kb3cgKTsKKyAgICAvL2Nvbm5lY3QobV9wTWFpbkNvbnRhaW5lci0+d2lkZ2V0 KCksU0lHTkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1haW5XaW5kb3csU0xPVChzbG90Q3RybFRh YlByZXNzZWQoKSkpOworICAgIC8vbV9wTWFpbldpbmRvdy0+c2V0Q2VudHJhbFdpZGdldCggbV9w TWFpbkNvbnRhaW5lci0+d2lkZ2V0KCkgKTsKKyAgICAvL21fcE1haW5Db250YWluZXItPndpZGdl dCgpLT5zZXRHZW9tZXRyeSggMCwgMCwgbV9wTWFpbldpbmRvdy0+d2lkdGgoKSwgbV9wTWFpbldp bmRvdy0+aGVpZ2h0KCkgKTsKKyAgICAvL21fcE1haW5Db250YWluZXItPndpZGdldCgpLT5zaG93 KCk7CiAKICAgICAgIC8vIFRoaXMgZmxhZyBpcyB1c2VkIGJ5IEtvbnFWaWV3LCB0byBkaXN0aW5n dWlzaCBtYW51YWwgdmlldyBjcmVhdGlvbgogICAgICAgLy8gZnJvbSBwcm9maWxlIGxvYWRpbmcg KGUuZy4gaW4gc3dpdGNoVmlldykKQEAgLTcyNiw3ICs3ODUsNyBAQAogICAgIHJldHVybiBRU2l6 ZSggd2lkdGgsIGhlaWdodCApOwogfQogCi12b2lkIEtvbnFWaWV3TWFuYWdlcjo6bG9hZEl0ZW0o IEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyICpwYXJlbnQsCit2b2lkIEtvbnFWaWV3 TWFuYWdlcjo6bG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyQmFzZSAq cGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZu YW1lLCBjb25zdCBLVVJMICYgZGVmYXVsdFVSTCwgYm9vbCBvcGVuVVJMICkKIHsKICAgUVN0cmlu ZyBwcmVmaXg7CkBAIC04MTMsNyArODcyLDYgQEAKICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lciAq bmV3Q29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5lciggbywgcGFyZW50ICk7CiAgICAg ICBjb25uZWN0KG5ld0NvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSksbV9wTWFpbldp bmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7CiAgICAgICBwYXJlbnQtPmluc2VydENo aWxkRnJhbWUoIG5ld0NvbnRhaW5lciApOwotICAgICAgbmV3Q29udGFpbmVyLT5zZXRPcGFxdWVS ZXNpemUoKTsKICAgICAgIG5ld0NvbnRhaW5lci0+c2hvdygpOwogCiAgICAgICBsb2FkSXRlbSgg Y2ZnLCBuZXdDb250YWluZXIsIGNoaWxkTGlzdC5hdCgwKSwgZGVmYXVsdFVSTCwgb3BlblVSTCAp OwpAQCAtOTE5LDU3ICs5NzcsMzAgQEAKIC8vLy8vLy8vLy8vLy8vLy8vIERlYnVnIHN0dWZmIC8v Ly8vLy8vLy8vLy8vLy8KIAogdm9pZCBLb25xVmlld01hbmFnZXI6OnByaW50U2l6ZUluZm8oIEtv bnFGcmFtZUJhc2UqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEtvbnFGcmFtZUNvbnRhaW5lciogcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtc2cgKQogeworICAvKgogICBRUmVj dCByOwogICByID0gZnJhbWUtPndpZGdldCgpLT5nZW9tZXRyeSgpOwogICBxRGVidWcoIkNoaWxk IHNpemUgJXMgOiB4OiAlZCwgeTogJWQsIHc6ICVkLCBoOiAlZCIsIG1zZywgci54KCksci55KCks ci53aWR0aCgpLHIuaGVpZ2h0KCkgKTsKIAogICBRVmFsdWVMaXN0PGludD4gc2l6ZXM7Ci0gIHNp emVzID0gcGFyZW50LT5zaXplcygpOworICBzaXplcyA9IHN0YXRpY19jYXN0PEtvbnFGcmFtZUNv bnRhaW5lcio+KHBhcmVudCktPnNpemVzKCk7CiAgIHByaW50ZiggIlBhcmVudCBzaXplcyAlcyA6 IiwgbXNnICk7CiAgIFFWYWx1ZUxpc3Q8aW50Pjo6Q29uc3RJdGVyYXRvciBpdDsKICAgZm9yKCBp dCA9IHNpemVzLmJlZ2luKCk7IGl0ICE9IHNpemVzLmVuZCgpOyArK2l0ICkKICAgICBwcmludGYo ICIgJWQiLCAoKml0KSApOwogICBwcmludGYoIlxuIik7CisgICovCiB9CiAKLXZvaWQgS29ucVZp ZXdNYW5hZ2VyOjpwcmludEZ1bGxIaWVyYXJjaHkoIEtvbnFGcmFtZUNvbnRhaW5lciAqIGNvbnRh aW5lciwgaW50IGlkZW50ICkKK3ZvaWQgS29ucVZpZXdNYW5hZ2VyOjpwcmludEZ1bGxIaWVyYXJj aHkoIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UgKiBjb250YWluZXIgKQogewotICAgIGlmIChjb250 YWluZXIpCi0gICAgewotICAgICAgICBRU3RyaW5nIHNwYWNlczsKLSAgICAgICAgZm9yICggaW50 IGkgPSAwIDsgaSA8IGlkZW50IDsgaSsrICkKLSAgICAgICAgICAgIHNwYWNlcyArPSAiICI7Ci0g ICAgICAgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICJDb250YWluZXIgIiA8PCBjb250YWlu ZXIgPDwgZW5kbDsKLSAgICAgICAgS29ucUZyYW1lQmFzZSAqIGNoaWxkID0gY29udGFpbmVyLT5m aXJzdENoaWxkKCk7Ci0gICAgICAgIGlmICggIWNoaWxkICkKLSAgICAgICAgICAgIGtkRGVidWco MTIwMikgPDwgc3BhY2VzIDw8ICIgIE51bGwgY2hpbGQiIDw8IGVuZGw7Ci0gICAgICAgIGVsc2Ug aWYgKCBjaGlsZC0+d2lkZ2V0KCktPmlzQSgiS29ucUZyYW1lQ29udGFpbmVyIikgKQotICAgICAg ICAgICAgcHJpbnRGdWxsSGllcmFyY2h5KCBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIg Kj4oY2hpbGQpLCBpZGVudCArIDIgKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAga2REZWJ1 ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgIiA8PCAiS29ucUZyYW1lIGNvbnRhaW5pbmcgdmlldyAi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihj aGlsZCktPmNoaWxkVmlldygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgcGFydCAi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihj aGlsZCktPnBhcnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHdob3NlIHdpZGdl dCBpcyBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8S29ucUZy YW1lICo+KGNoaWxkKS0+cGFydCgpLT53aWRnZXQoKS0+Y2xhc3NOYW1lKCkgPDwgZW5kbDsKLSAg ICAgICAgY2hpbGQgPSBjb250YWluZXItPnNlY29uZENoaWxkKCk7Ci0gICAgICAgIGlmICggIWNo aWxkICkKLSAgICAgICAgICAgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICIgIE51bGwgY2hp bGQiIDw8IGVuZGw7Ci0gICAgICAgIGVsc2UgaWYgKCBjaGlsZC0+d2lkZ2V0KCktPmlzQSgiS29u cUZyYW1lQ29udGFpbmVyIikgKQotICAgICAgICAgICAgcHJpbnRGdWxsSGllcmFyY2h5KCBzdGF0 aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIgKj4oY2hpbGQpLCBpZGVudCArIDIgKTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgICAga2REZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgIiA8PCAi S29ucUZyYW1lICIgPDwgY2hpbGQgPDwgIiBjb250YWluaW5nIHZpZXcgIgotICAgICAgICAgICAg ICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxLb25xRnJhbWUgKj4oY2hpbGQpLT5jaGlsZFZp ZXcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHBhcnQgIgotICAgICAgICAgICAg ICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxLb25xRnJhbWUgKj4oY2hpbGQpLT5wYXJ0KCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiB3aG9zZSB3aWRnZXQgaXMgYSAiCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihjaGlsZCkt PnBhcnQoKS0+d2lkZ2V0KCktPmNsYXNzTmFtZSgpIDw8IGVuZGw7Ci0gICAgfQotICAgIGVsc2UK LSAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiTnVsbCBjb250YWluZXIiIDw8IGVuZGw7CisgIGtk RGVidWcoMTIwMikgPDwgbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKTsKKworICBpZiAoY29u dGFpbmVyKSBjb250YWluZXItPnByaW50RnJhbWVJbmZvKFFTdHJpbmc6Om51bGwpOworICBlbHNl IGtkRGVidWcoMTIwMikgPDwgIk51bGwgQ29udGFpbmVyIiA8PCBlbmRsOwogfQogCiAjaW5jbHVk ZSAia29ucV92aWV3bWdyLm1vYyIKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9y L2tvbnFfdmlld21nci5oIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL2tvbnFfdmlld21nci5oCi0t LSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFfdmlld21nci5oCVNhdCBKdWwgMjgg MjM6NTY6NDAgMjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV92aWV3bWdyLmgJ U3VuIERlYyAgOSAxNzo1NjozNiAyMDAxCkBAIC0zOCw2ICszOCw4IEBACiBjbGFzcyBLb25xTWFp bldpbmRvdzsKIGNsYXNzIEtvbnFGcmFtZUJhc2U7CiBjbGFzcyBLb25xRnJhbWVDb250YWluZXI7 CitjbGFzcyBLb25xRnJhbWVDb250YWluZXJCYXNlOworY2xhc3MgS29ucUZyYW1lVGFiczsKIGNs YXNzIEtvbnFWaWV3OwogY2xhc3MgQnJvd3NlclZpZXc7CiBjbGFzcyBLQWN0aW9uTWVudTsKQEAg LTgxLDYgKzgzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAm IHNlcnZpY2VOYW1lID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIG5ld09uZUZpcnN0ID0gZmFsc2UpOwogCisJLyoqCisJICogQWRkcyBhIHRhYiB0byBtX3BN YWluQ29udGFpbmVyCisJICovCisKKyAgS29ucVZpZXcqIGFkZFRhYihjb25zdCBRU3RyaW5nICZz ZXJ2aWNlVHlwZSA9IFFTdHJpbmc6Om51bGwsCisJCSAgICAgCQkJCQkgY29uc3QgUVN0cmluZyAm c2VydmljZU5hbWUgPSBRU3RyaW5nOjpudWxsLAorCQkJCQkJCSAgICAgYm9vbCBwYXNzaXZlTW9k ZSA9IGZhbHNlKTsKKwogICAvKioKICAgICogRG8gdGhlIGFjdHVhbCBzcGxpdHRpbmcuIFRoZSBu ZXcgVmlldyB3aWxsIGJlIGNyZWF0ZWQgZnJvbSBzZXJ2aWNlVHlwZS4KICAgICogUmV0dXJucyB0 aGUgbmV3bHkgY3JlYXRlZCB2aWV3IG9yIDBMIGlmIHRoZSBuZXcgdmlldyBjb3VsZG4ndCBiZSBj cmVhdGVkLgpAQCAtOTksNiArMTA5LDEyIEBACiAgIHZvaWQgcmVtb3ZlVmlldyggS29ucVZpZXcg KnZpZXcgKTsKIAogICAvKioKKyAgICogR3Vlc3MgQWdhaW4hOi0+CisgICAqIEFsc28gdGFrZXMg Y2FyZSBvZiBzZXR0aW5nIGFub3RoZXIgdmlldyBhcyBhY3RpdmUgaWYgdGhlIGFjdGl2ZSB2aWV3 IHdhcyBpbiB0aGlzIHRhYgorICAgKi8KKwl2b2lkIHJlbW92ZUN1cnJlbnRUYWIoKTsKKworICAv KioKICAgICogU2F2ZXMgdGhlIGN1cnJlbnQgdmlldyBsYXlvdXQgdG8gYSBjb25maWcgZmlsZS4K ICAgICogUmVtb3ZlIGNvbmZpZyBmaWxlIGJlZm9yZSBzYXZpbmcsIGVzcGVjaWFsbHkgaWYgc2F2 ZVVSTHMgaXMgZmFsc2UuCiAgICAqIEBwYXJhbSBjZmcgdGhlIGNvbmZpZyBmaWxlCkBAIC0xNzQs NyArMTkwLDcgQEAKIAogICB2b2lkIHByb2ZpbGVMaXN0RGlydHkoIGJvb2wgYnJvYWRjYXN0ID0g dHJ1ZSApOwogCi0gIEtvbnFGcmFtZUNvbnRhaW5lciAqbWFpbkNvbnRhaW5lcigpIGNvbnN0IHsg cmV0dXJuIG1fcE1haW5Db250YWluZXI7IH0KKyAgS29ucUZyYW1lVGFicyAqbWFpbkNvbnRhaW5l cigpIGNvbnN0IHsgcmV0dXJuIG1fcE1haW5Db250YWluZXI7IH0KIAogICBLb25xTWFpbldpbmRv dyAqbWFpbldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fcE1haW5XaW5kb3c7IH0KIApAQCAtMjE2 LDcgKzIzMiw3IEBACiAgICAqIEBwYXJhbSBvcGVuVVJMIHdoZXRoZXIgdG8gb3BlbiB1cmxzIGF0 IGFsbCAoZnJvbSB0aGUgcHJvZmlsZSBvciB1c2luZyBAcCBkZWZhdWx0VVJMKS4KICAgICogICh0 aGlzIGlzIHNldCB0byBmYWxzZSB3aGVuIHdlIGhhdmUgYSBmb3JjZWRVUkwgdG8gb3BlbikKICAg ICovCi0gIHZvaWQgbG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyICpw YXJlbnQsCisgIHZvaWQgbG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVy QmFzZSAqcGFyZW50LAogICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZuYW1lLCBjb25z dCBLVVJMICYgZGVmYXVsdFVSTCwgYm9vbCBvcGVuVVJMICk7CiAKICAgLy8gRGlzYWJsZWQgLSB3 ZSBkbyBpdCBvdXJzZWx2ZXMKQEAgLTIzOSw3ICsyNTUsNyBAQAogICAgKiBNYWlubHkgY3JlYXRl cyB0aGUgYmFja2VuZCBzdHJ1Y3R1cmUoS29ucVZpZXcpIGZvciBhIHZpZXcgYW5kCiAgICAqIGNv bm5lY3RzIGl0CiAgICAqLwotICBLb25xVmlldyAqc2V0dXBWaWV3KCBLb25xRnJhbWVDb250YWlu ZXIgKnBhcmVudENvbnRhaW5lciwKKyAgS29ucVZpZXcgKnNldHVwVmlldyggS29ucUZyYW1lQ29u dGFpbmVyQmFzZSAqcGFyZW50Q29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICBLb25x Vmlld0ZhY3RvcnkgJnZpZXdGYWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBL U2VydmljZTo6UHRyICZzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVHJh ZGVyOjpPZmZlckxpc3QgJnBhcnRTZXJ2aWNlT2ZmZXJzLApAQCAtMjQ5LDEzICsyNjUsMTQgQEAK IAogICAvL2p1c3QgZm9yIGRlYnVnZ2luZwogICB2b2lkIHByaW50U2l6ZUluZm8oIEtvbnFGcmFt ZUJhc2UqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lciog cGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBh cmVudCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtc2cgKTsKLSAgdm9pZCBw cmludEZ1bGxIaWVyYXJjaHkoIEtvbnFGcmFtZUNvbnRhaW5lciAqIGNvbnRhaW5lciwgaW50IGlk ZW50ID0gMCApOworCisgIHZvaWQgcHJpbnRGdWxsSGllcmFyY2h5KCBLb25xRnJhbWVDb250YWlu ZXJCYXNlICogY29udGFpbmVyICk7CiAKICAgS29ucU1haW5XaW5kb3cgKm1fcE1haW5XaW5kb3c7 CiAKLSAgS29ucUZyYW1lQ29udGFpbmVyICptX3BNYWluQ29udGFpbmVyOworICBLb25xRnJhbWVU YWJzICptX3BNYWluQ29udGFpbmVyOwogCiAgIFFHdWFyZGVkUHRyPEtBY3Rpb25NZW51PiBtX3Bh bVByb2ZpbGVzOwogICBib29sIG1fYlByb2ZpbGVMaXN0RGlydHk7CmRpZmYgLXUga2RlYmFzZS0y LjIuMi5vcmlnL2tvbnF1ZXJvci9rb25xdWVyb3IucmMga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iv a29ucXVlcm9yLnJjCi0tLSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnF1ZXJvci5y YwlTYXQgSnVsIDI4IDIzOjU2OjQwIDIwMDEKKysrIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL2tv bnF1ZXJvci5yYwlUdWUgRGVjIDExIDIxOjQ5OjU2IDIwMDEKQEAgLTg3LDYgKzg3LDkgQEAKICAg PEFjdGlvbiBuYW1lPSJzcGxpdHZpZXd2Ii8+CiAgIDxBY3Rpb24gbmFtZT0icmVtb3ZldmlldyIv PgogICA8U2VwYXJhdG9yLz4KKyAgPEFjdGlvbiBuYW1lPSJhZGR0YWIiLz4KKyAgPEFjdGlvbiBu YW1lPSJyZW1vdmVjdXJyZW50dGFiIi8+CisgIDxTZXBhcmF0b3IvPiAgICAKICAgPEFjdGlvbkxp c3QgbmFtZT0idG9nZ2xldmlldyIgLz4KICAgPFNlcGFyYXRvci8+CiAgIDxBY3Rpb24gbmFtZT0i c2F2ZXZpZXdwcm9maWxlIi8+CkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5v cmlnL2tvbnF1ZXJvci9saXN0dmlldyBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvbGlzdHZp ZXcKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL3Bp Y3MgYW5kIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL3BpY3MKQ29tbW9uIHN1YmRpcmVjdG9yaWVz OiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL3NoZWxsY21kcGx1Z2luIGFuZCBrZGViYXNl LTIuMi4yL2tvbnF1ZXJvci9zaGVsbGNtZHBsdWdpbgpDb21tb24gc3ViZGlyZWN0b3JpZXM6IGtk ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Ivc2lkZWJhciBhbmQga2RlYmFzZS0yLjIuMi9rb25x dWVyb3Ivc2lkZWJhcgo= --------------Boundary-00=_2XO7GSVHEX1WF551N6WK--