From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Ponce via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#69992: Minor improvement to image map transformation logic Date: Sat, 30 Mar 2024 13:59:41 +0100 Message-ID: References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> <8634s8dtrp.fsf@gnu.org> <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> Reply-To: David Ponce Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------yg83EmNRJ9bgvu0PitxQ12Kj" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5806"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: 69992@debbugs.gnu.org, joseph@breatheoutbreathe.in To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Mar 30 14:00:40 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rqYK8-0001Kv-10 for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 30 Mar 2024 14:00:40 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rqYJt-0008HR-2l; Sat, 30 Mar 2024 09:00:25 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rqYJY-0008Ge-E3 for bug-gnu-emacs@gnu.org; Sat, 30 Mar 2024 09:00:05 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rqYJW-0004AR-Ig for bug-gnu-emacs@gnu.org; Sat, 30 Mar 2024 09:00:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rqYJY-0006id-DA for bug-gnu-emacs@gnu.org; Sat, 30 Mar 2024 09:00:04 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Ponce Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 30 Mar 2024 13:00:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69992 X-GNU-PR-Package: emacs Original-Received: via spool by 69992-submit@debbugs.gnu.org id=B69992.171180359025740 (code B ref 69992); Sat, 30 Mar 2024 13:00:04 +0000 Original-Received: (at 69992) by debbugs.gnu.org; 30 Mar 2024 12:59:50 +0000 Original-Received: from localhost ([127.0.0.1]:44191 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYJJ-0006h5-8R for submit@debbugs.gnu.org; Sat, 30 Mar 2024 08:59:50 -0400 Original-Received: from smtp-27.smtpout.orange.fr ([80.12.242.27]:56364 helo=smtp.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYJF-0006gu-P2 for 69992@debbugs.gnu.org; Sat, 30 Mar 2024 08:59:47 -0400 Original-Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id qYJBrMKHJ32RBqYJBrKZLm; Sat, 30 Mar 2024 13:59:42 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711803582; bh=ZsbfRottl1eEqFT19BxCvqTptb4PyXRWGyC4NpLggFg=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=Hk8sXE4q3IBl+7PL40Y5g3X8SigxsA9NMIFrQ90B/N0rKFp6O58x97gQv+bE8xg7I /yTyC5Xz/35TTW663dn/2pU6o+1N7Oo9kMXz9Y2PM5Ku6Ot1Ogn36cxEWvGwB8BBEq PjwNoMOpPrz+6qzsjmwnYYfUSiiTt9Se/5XMykX3IWJvx+1tBWKylnHfWhcwIrrl2l j2MU1GFbVMIoSb+eeXxMMAc5yHbsjWDjYlKwRyp+Z/YzZQUWTJloNRQ9xgUvkFuFl5 /U9bkLotHNJzyKyelpUsc5MHhgEASR/rxMEnRgW03lxUpQq5eRXuVWNrkzpyr3oS5+ sEn5g+B17UZLw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Sat, 30 Mar 2024 13:59:42 +0100 X-ME-IP: 2.7.71.181 Content-Language: fr, en-US In-Reply-To: <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282361 Archived-At: This is a multi-part message in MIME format. --------------yg83EmNRJ9bgvu0PitxQ12Kj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 30/03/2024 09:55, David Ponce wrote: > On 30/03/2024 09:10, Eli Zaretskii wrote: >>> Date: Fri, 29 Mar 2024 11:19:11 +0100 >>> From: David Ponce >>> Cc: Eli Zaretskii , Joseph Turner >>> >>>> The attached new patch fixes the logic to be consistent with Emacs >>>> internal implementation, plus some other tweaks to check if a >>>> transformation apply before to call the transformation function. >>>> I also updated some tests according to functions changes. >>>> Here is a possible change log: >>>> >>>> 2024-03-28  David Ponce  >>>> >>>>       * lisp/image.el (image--compute-scaling) >>>>       (image--compute-rotation): New functions. >>>>       (image--compute-map, image--compute-original-map): Use them. >>>>       Ensure all transformations are applied or undone according to what >>>>       Emacs does internally.  Call a transformation function only when >>>>       needed.  Fix doc string. >>>>       (image--scale-map): Assume effective scale argument. >>>>       (image--rotate-map): Assume effective rotation argument. >>>>       (image--rotate-coord): Improve doc string. >>>>       (image--flip-map): Remove no more used flip argument. >>>> >>>>       * test/lisp/image-tests.el (image-create-image-with-map): Use a >>>>       valid SVG image otherwise `image-size' will not return a valid >>>>       value and calculation of scale could fail. >>>>       (image-transform-map): Update according to changed signature of >>>>       image--flip-map. >>> [...] >>> >>> Hello, >>> >>> Please find attached a new patch with an additional small fix I forgot to >>> include.  Sorry. >> >> Thanks.  Please resend with the updated commit log message, and I will >> install it. > > Hello Eli, > > The change log is the same.  The last patch include a slightly modified > version of the new function `image--compute-rotation' to return 0 by default > when no rotation is specified, instead of nil. > > Please let me know if you need anything else. > Thanks! Hello, Here is my last patch. The only change compared to the previous patch is that now the scale factor is correctly calculated based on the size of the image and the displayed size. To minimize the performance impact, I saved a call to `image-size' by doing the calculation directly in the `image--compute-map' and `image--compute-original-map' functions. I did some benchmarks and the difference is not significant. The tests still give the same results :-) Here is the new change log: 2024-03-30 David Ponce * lisp/image.el (image--compute-rotation): New function. (image--compute-map, image--compute-original-map): Use it. Ensure all transformations are applied or undone according to what Emacs does internally. Call a transformation function only when needed. Fix doc string. (image--scale-map): Assume effective scale argument. (image--rotate-map): Assume effective rotation argument. (image--rotate-coord): Improve doc string. (image--flip-map): Remove no more used flip argument. * test/lisp/image-tests.el (image-create-image-with-map): Use a valid SVG image otherwise `image-size' will not return a valid value and calculation of scale could fail. (image-transform-map): Update according to changed signature of image--flip-map. Thanks! --------------yg83EmNRJ9bgvu0PitxQ12Kj Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V2.patch" Content-Disposition: attachment; filename="image-compute-map-V2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi5lOTczZGZmMzJjNyAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxNDIgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXJvdGF0aW9uIChpbWFnZSkKKyAgIlJldHVybiB0aGUgY3Vy cmVudCByb3RhdGlvbiBvZiBJTUFHRSwgb3IgMCBpZiBubyByb3RhdGlvbi4KK0Fsc28gcmV0 dXJuIG5pbCBpZiByb3RhdGlvbiBpcyBub3QgYSBtdWx0aXBsZXMgb2YgOTAgZGVncmVlcyAo MCwgOTAsCisxODBbLTE4MF0gYW5kIDI3MFstOTBdKS4iCisgIChsZXQgKChkZWdyZWVzIChv ciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkpCisgICAgKGFuZCAoPSAw IChtb2QgZGVncmVlcyAxKSkKKyAgICAgICAgIChjYXIgKG1lbXFsICh0cnVuY2F0ZSAobW9k IGRlZ3JlZXMgMzYwKSkgJygwIDkwIDE4MCAyNzApKSkpKSkKKwogKGRlZnVuIGltYWdlLS1j b21wdXRlLW1hcCAoaW1hZ2UpCiAgICJDb21wdXRlIG1hcCBmb3IgSU1BR0Ugc3VpdGFibGUg dG8gYmUgdXNlZCBhcyBpdHMgOm1hcCBwcm9wZXJ0eS4KLVJldHVybiBhIGNvcHkgb2YgOm9y aWdpbmFsLWltYWdlIHRyYW5zZm9ybWVkIGJhc2VkIG9uIElNQUdFJ3MgOnNjYWxlLAorUmV0 dXJuIGEgY29weSBvZiA6b3JpZ2luYWwtbWFwIHRyYW5zZm9ybWVkIGJhc2VkIG9uIElNQUdF J3MgOnNjYWxlLAogOnJvdGF0aW9uLCBhbmQgOmZsaXAuICBXaGVuIElNQUdFJ3MgOm9yaWdp bmFsLW1hcCBpcyBuaWwsIHJldHVybiBuaWwuCiBXaGVuIDpyb3RhdGlvbiBpcyBub3QgYSBt dWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2YgOm9yaWdpbmFsLW1hcC4iCi0gIChwY2Fz ZS1sZXQqICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwt bWFwKSkKLSAgICAgICAgICAgICAgIChtYXAgKGNvcHktdHJlZSBvcmlnaW5hbC1tYXAgdCkp Ci0gICAgICAgICAgICAgICAoc2NhbGUgKG9yIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6c2Nh bGUpIDEpKQotICAgICAgICAgICAgICAgKHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkg aW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9w ZXJ0eSBpbWFnZSA6ZmxpcCkpCi0gICAgICAgICAgICAgICAoKGFuZCBzaXplIGAoLHdpZHRo IC4gLGhlaWdodCkpIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAod2hlbiAoYW5kIDsg SGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9ucwotICAgICAgICAgICAoemVyb3AgKG1v ZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgKHplcm9wICglICh0cnVuY2F0ZSByb3RhdGlv bikgOTApKSkKLSAgICAgIDs7IFNJWkUgZml0cyBNQVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25z LiAgU2NhbGUgTUFQIGJlZm9yZQotICAgICAgOzsgZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlv bnMsIHNpbmNlIGJvdGggbmVlZCBNQVAgdG8gZml0IFNJWkUuCi0gICAgICAoaW1hZ2UtLXNj YWxlLW1hcCBtYXAgc2NhbGUpCisgICh3aGVuLWxldCAoKG1hcCAoaW1hZ2UtcHJvcGVydHkg aW1hZ2UgOm9yaWdpbmFsLW1hcCkpKQorICAgIChzZXRxIG1hcCAoY29weS10cmVlIG1hcCB0 KSkKKyAgICAobGV0KiAoKHNpemUgKGltYWdlLXNpemUgaW1hZ2UgdCkpCisgICAgICAgICAg IDs7IFRoZSBpbWFnZSBjYW4gYmUgc2NhbGVkIGZvciBtYW55IHJlYXNvbnMgKDpzY2FsZSwK KyAgICAgICAgICAgOzsgOm1heC13aWR0aCwgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJy ZW50LXNjYWxpbmcnIHRvCisgICAgICAgICAgIDs7IGNhbGN1bGF0ZSB0aGUgY3VycmVudCBz Y2FsaW5nIGlzIHRoZSBjb3JyZWN0IG1ldGhvZC4gIEJ1dCwKKyAgICAgICAgICAgOzsgc2lu Y2UgZWFjaCBjYWxsIHRvIGBpbWFnZV9zaXplJyBpcyBleHBlbnNpdmUsIHRoZSBjb2RlIGlz CisgICAgICAgICAgIDs7IGR1cGxpY2F0ZWQgaGVyZSB0byBzYXZlIHRoZSBhIGNhbGwgdG8g YGltYWdlLXNpemUnLgorICAgICAgICAgICAoc2NhbGUgKC8gKGZsb2F0IChjYXIgc2l6ZSkp CisgICAgICAgICAgICAgICAgICAgICAoY2FyIChpbWFnZS1zaXplCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaW1hZ2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVycyBpbWFnZSkg dCkpKSkKKyAgICAgICAgICAgKHJvdGF0aW9uIChpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiBp bWFnZSkpCisgICAgICAgICAgIDs7IEltYWdlIGlzIGZsaXBwZWQgb25seSBpZiByb3RhdGlv biBpcyBhIG11bHRpcGxlIG9mIDkwLAorICAgICAgICAgICA7OyBpbmNsdWRpbmcgMC4KKyAg ICAgICAgICAgKGZsaXAgKGFuZCByb3RhdGlvbiAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmZs aXApKSkpCisgICAgICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9ybWF0aW9ucy4g IFNjYWxlIE1BUCBiZWZvcmUgZmxpcCBhbmQKKyAgICAgIDs7IHJvdGF0ZSBvcGVyYXRpb25z LCBzaW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgKHVubGVzcyAoPSBz Y2FsZSAxKQorICAgICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpKQogICAgICAg OzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZv cmUgZmxpcC4KLSAgICAgIChpbWFnZS0tcm90YXRlLW1hcAotICAgICAgIG1hcCByb3RhdGlv biAoaWYgKG9yICg9IDkwIHJvdGF0aW9uKSAoPSAyNzAgcm90YXRpb24pKQorICAgICAgKHdo ZW4gKG1lbXFsIHJvdGF0aW9uICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90 YXRlLW1hcAorICAgICAgICAgbWFwIHJvdGF0aW9uIChpZiAoPSByb3RhdGlvbiAxODApCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAg IDs7IElmIHJvdGF0ZWQgwrE5MMKwLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAg ICAgICAgICAgICAgICAgICAoY29ucyBoZWlnaHQgd2lkdGgpCi0gICAgICAgICAgICAgICAg ICAgICAgc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoY2RyIHNpemUp IChjYXIgc2l6ZSkpKSkpCiAgICAgICA7OyBBZnRlciByb3RhdGlvbiwgdGhlcmUncyBubyBu ZWVkIHRvIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICAgIChpbWFnZS0tZmxpcC1tYXAg bWFwIGZsaXAgc2l6ZSkpCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxp cC1tYXAgbWFwIHNpemUpKSkKICAgICBtYXApKQogCiAoZGVmdW4gaW1hZ2UtLWNvbXB1dGUt b3JpZ2luYWwtbWFwIChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAgZm9yIElNQUdF LgogSWYgSU1BR0UgbGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4KLVdoZW4gOnJv dGF0aW9uIGlzIG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6bWFwLiIK LSAgKHdoZW4gKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxldCogKChvcmln aW5hbC1tYXAgKGNvcHktdHJlZSAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkgdCkpCi0g ICAgICAgICAgIChzY2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkp Ci0gICAgICAgICAgIChyb3RhdGlvbiAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3Rh dGlvbikgMCkpCi0gICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6Zmxp cCkpCi0gICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAgICh3 aGVuIChhbmQgOyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAg ICAgKHplcm9wIChtb2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICAgKHplcm9wICglICh0 cnVuY2F0ZSByb3RhdGlvbikgOTApKSkKLSAgICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2Vz LCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAgICAgICAgOzsg VG8gdW5kbyB0aGUgdHJhbnNmb3JtYXRpb24sIGZsaXAgYmVmb3JlIHJvdGF0aW5nLiAgU0la RSBmaXRzCi0gICAgICAgIDs7IE9SSUdJTkFMLU1BUCBiZWZvcmUgdHJhbnNmb3JtYXRpb25z IGFyZSBhcHBsaWVkLiAgVGhlcmVmb3JlLAotICAgICAgICA7OyBzY2FsZSBPUklHSU5BTC1N QVAgYWZ0ZXIgZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCi0gICAgICAgIDs7 IGJvdGggbmVlZCBPUklHSU5BTC1NQVAgdG8gZml0IFNJWkUuCi0gICAgICAgIChpbWFnZS0t ZmxpcC1tYXAgb3JpZ2luYWwtbWFwIGZsaXAgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1yb3Rh dGUtbWFwIG9yaWdpbmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkKLSAgICAgICAgKGltYWdl LS1zY2FsZS1tYXAgb3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKQotICAgICAgb3JpZ2lu YWwtbWFwKSkpCitXaGVuIHRoZXJlIGlzIG5vIHRyYW5zZm9ybWF0aW9uLCByZXR1cm4gY29w eSBvZiA6bWFwLiIKKyAgKHdoZW4tbGV0ICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0 eSBpbWFnZSA6bWFwKSkpCisgICAgKHNldHEgb3JpZ2luYWwtbWFwIChjb3B5LXRyZWUgb3Jp Z2luYWwtbWFwIHQpKQorICAgIChsZXQqICgoc2l6ZSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkK KyAgICAgICAgICAgOzsgVGhlIGltYWdlIGNhbiBiZSBzY2FsZWQgZm9yIG1hbnkgcmVhc29u cyAoOnNjYWxlLAorICAgICAgICAgICA7OyA6bWF4LXdpZHRoLCBldGMpLCBzbyB1c2luZyBg aW1hZ2UtLWN1cnJlbnQtc2NhbGluZycgdG8KKyAgICAgICAgICAgOzsgY2FsY3VsYXRlIHRo ZSBjdXJyZW50IHNjYWxpbmcgaXMgdGhlIGNvcnJlY3QgbWV0aG9kLiAgQnV0LAorICAgICAg ICAgICA7OyBzaW5jZSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUnIGlzIGV4cGVuc2l2ZSwg dGhlIGNvZGUgaXMKKyAgICAgICAgICAgOzsgZHVwbGljYXRlZCBoZXJlIHRvIHNhdmUgdGhl IGEgY2FsbCB0byBgaW1hZ2Utc2l6ZScuCisgICAgICAgICAgIChzY2FsZSAoLyAoZmxvYXQg KGNhciBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAgIChjYXIgKGltYWdlLXNpemUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZS0taW1hZ2Utd2l0aG91dC1wYXJhbWV0 ZXJzIGltYWdlKSB0KSkpKQorICAgICAgICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRl LXJvdGF0aW9uIGltYWdlKSkKKyAgICAgICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5 IGlmIHJvdGF0aW9uIGlzIGEgbXVsdGlwbGUgb2YgOTAKKyAgICAgICAgICAgOzsgaW5jbHVk aW5nIDAuCisgICAgICAgICAgIChmbGlwIChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5 IGltYWdlIDpmbGlwKSkpKQorICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlv biBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KKyAgICAgIDs7IFRvIHVuZG8gdGhl IHRyYW5zZm9ybWF0aW9uLCBmbGlwIGJlZm9yZSByb3RhdGluZy4gIFNJWkUgZml0cworICAg ICAgOzsgT1JJR0lOQUwtTUFQIGJlZm9yZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQu ICBUaGVyZWZvcmUsCisgICAgICA7OyBzY2FsZSBPUklHSU5BTC1NQVAgYWZ0ZXIgZmxpcCBh bmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCisgICAgICA7OyBib3RoIG5lZWQgT1JJR0lO QUwtTUFQIHRvIGZpdCBTSVpFLgorICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3Rh dGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KKyAgICAgICh3aGVuIGZsaXAK KyAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBvcmlnaW5hbC1tYXAgc2l6ZSkpCisgICAgICAo d2hlbiAobWVtcWwgcm90YXRpb24gJyg5MCAxODAgMjcwKSkKKyAgICAgICAgKGltYWdlLS1y b3RhdGUtbWFwIG9yaWdpbmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkpCisgICAgICAodW5s ZXNzICg9IHNjYWxlIDEpCisgICAgICAgIChpbWFnZS0tc2NhbGUtbWFwIG9yaWdpbmFsLW1h cCAoLyAxLjAgc2NhbGUpKSkpCisgICAgb3JpZ2luYWwtbWFwKSkKIAogKGRlZnVuIGltYWdl LS1zY2FsZS1tYXAgKG1hcCBzY2FsZSkKICAgIlNjYWxlIE1BUCBhY2NvcmRpbmcgdG8gU0NB TEUuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5zIE1BUC4iCi0gICh1bmxl c3MgKD0gMSBzY2FsZSkKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3Jk cykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCi0g ICAgICAgICgncmVjdAotICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCog KGNhYXIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAo cm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGYgKGNhZHIg Y29vcmRzKSAocm91bmQgKCogKGNhZHIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNl dGYgKGNkZHIgY29vcmRzKSAocm91bmQgKCogKGNkZHIgY29vcmRzKSBzY2FsZSkpKSkKLSAg ICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgq IChjYWFyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjZGFyIGNvb3Jkcykg KHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRjZHIgY29v cmRzIChyb3VuZCAoKiAoY2RyIGNvb3Jkcykgc2NhbGUpKSkpCi0gICAgICAgICgncG9seQot ICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAoYXNl dCBjb29yZHMgaQotICAgICAgICAgICAgICAgICAocm91bmQgKCogKGFyZWYgY29vcmRzIGkp IHNjYWxlKSkpKSkpKSkKKyAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMp ICxfaWQgLF9wbGlzdCkgbWFwKQorICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAg ICgncmVjdAorICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNv b3Jkcykgc2NhbGUpKSkKKyAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAo Y2RhciBjb29yZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGYgKGNhZHIgY29vcmRzKSAocm91 bmQgKCogKGNhZHIgY29vcmRzKSBzY2FsZSkpKQorICAgICAgIChzZXRmIChjZGRyIGNvb3Jk cykgKHJvdW5kICgqIChjZGRyIGNvb3Jkcykgc2NhbGUpKSkpCisgICAgICAoJ2NpcmNsZQor ICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNvb3Jkcykgc2Nh bGUpKSkKKyAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChjZHIgY29v cmRzKSBzY2FsZSkpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChpIChsZW5n dGggY29vcmRzKSkKKyAgICAgICAgIChhc2V0IGNvb3JkcyBpCisgICAgICAgICAgICAgICAo cm91bmQgKCogKGFyZWYgY29vcmRzIGkpIHNjYWxlKSkpKSkpKQogICBtYXApCiAKIChkZWZ1 biBpbWFnZS0tcm90YXRlLW1hcCAobWFwIHJvdGF0aW9uIHNpemUpCiAgICJSb3RhdGUgTUFQ IGFjY29yZGluZyB0byBST1RBVElPTiBhbmQgU0laRS4KK1JPVEFUSU9OIG11c3QgYmUgYSBu b24temVybyBtdWx0aXBsZSBvZiA5MC4KIERlc3RydWN0aXZlbHkgbW9kaWZpZXMgYW5kIHJl dHVybnMgTUFQLiIKLSAgKHVubGVzcyAoemVyb3Agcm90YXRpb24pCi0gICAgKHBjYXNlLWRv bGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAg KHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQg KCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3JuZXIKLSAgICAgICAgICAgICAgICB4MSB5 MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgotICAgICAgICAgICAocGNhc2UgKHRydW5j YXRlIChtb2Qgcm90YXRpb24gMzYwKSkgOyBTZXQgbmV3IGNvcm5lcnMgdG8uLi4KLSAgICAg ICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9tIGxlZnQgYW5kIHVwcGVyIHJpZ2h0Ci0gICAg ICAgICAgICAgIChzZXRxIHgwIChjYWFyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQotICAg ICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29yZHMpIHkxIChjZGFyIGNvb3JkcykpKQot ICAgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90dG9tIHJpZ2h0IGFuZCB1cHBlciBsZWZ0 Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRz KQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29yZHMpIHkxIChjZGFyIGNvb3Jk cykpKQotICAgICAgICAgICAgICgyNzAgOyAuLi5vbGQgdXBwZXIgcmlnaHQgYW5kIGJvdHRv bSBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkYXIg Y29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29yZHMpIHkxIChjZGRy IGNvb3JkcykpKSkKLSAgICAgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUt Y29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCi0gICAgICAgICAgIChzZXRjZHIgY29vcmRz IChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0aW9uIHNpemUpKSkpCi0gICAgICAg ICgnY2lyY2xlCi0gICAgICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29y ZAotICAgICAgICAgICAgICAgICAgICAgICAgIChjYWFyIGNvb3JkcykgKGNkYXIgY29vcmRz KSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICgncG9seQotICAgICAgICAgKGRvdGltZXMg KGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAod2hlbiAoPSAwICglIGkgMikpCi0g ICAgICAgICAgICAgKHBjYXNlLWxldCAoKGAoLHggLiAseSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgKGltYWdlLS1yb3RhdGUtY29vcmQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29yZHMgKDErIGkpKSByb3RhdGlvbiBzaXpl KSkpCi0gICAgICAgICAgICAgICAoYXNldCBjb29yZHMgaSB4KQotICAgICAgICAgICAgICAg KGFzZXQgY29vcmRzICgxKyBpKSB5KSkpKSkpKSkKKyAgKHNldHEgcm90YXRpb24gKG1vZCBy b3RhdGlvbiAzNjApKQorICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3Jkcykg LF9pZCAsX3BsaXN0KSBtYXApCisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQorICAgICAg KCdyZWN0CisgICAgICAgKGxldCAoIHgwIHkwICA7IE5ldyB1cHBlciBsZWZ0IGNvcm5lcgor ICAgICAgICAgICAgICB4MSB5MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgorICAgICAg ICAgKHBjYXNlIHJvdGF0aW9uIDsgU2V0IG5ldyBjb3JuZXJzIHRvLi4uCisgICAgICAgICAg ICg5MCA7IC4uLm9sZCBib3R0b20gbGVmdCBhbmQgdXBwZXIgcmlnaHQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWFyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhZHIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKKyAgICAgICAgICAg KDE4MCA7IC4uLm9sZCBib3R0b20gcmlnaHQgYW5kIHVwcGVyIGxlZnQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKKyAgICAgICAgICAg KDI3MCA7IC4uLm9sZCB1cHBlciByaWdodCBhbmQgYm90dG9tIGxlZnQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkYXIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RkciBjb29yZHMpKSkpCisgICAgICAgICAo c2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5MCByb3RhdGlvbiBzaXpl KSkKKyAgICAgICAgIChzZXRjZHIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkx IHJvdGF0aW9uIHNpemUpKSkpCisgICAgICAoJ2NpcmNsZQorICAgICAgIChzZXRjYXIgY29v cmRzIChpbWFnZS0tcm90YXRlLWNvb3JkCisgICAgICAgICAgICAgICAgICAgICAgIChjYWFy IGNvb3JkcykgKGNkYXIgY29vcmRzKSByb3RhdGlvbiBzaXplKSkpCisgICAgICAoJ3BvbHkK KyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCisgICAgICAgICAod2hlbiAo PSAwICglIGkgMikpCisgICAgICAgICAgIChwY2FzZS1sZXQgKChgKCx4IC4gLHkpCisgICAg ICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1jb29yZAorICAgICAgICAgICAg ICAgICAgICAgICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29yZHMgKDErIGkpKSByb3Rh dGlvbiBzaXplKSkpCisgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgeCkKKyAgICAgICAg ICAgICAoYXNldCBjb29yZHMgKDErIGkpIHkpKSkpKSkpCiAgIG1hcCkKIAogKGRlZnVuIGlt YWdlLS1yb3RhdGUtY29vcmQgKHggeSBhbmdsZSBzaXplKQogICAiUm90YXRlIGNvb3JkaW5h dGVzIFggYW5kIFkgYnkgQU5HTEUgaW4gaW1hZ2Ugb2YgU0laRS4KLUFOR0xFIG11c3QgYmUg YSBtdWx0aXBsZSBvZiA5MC4gIFJldHVybnMgYSBjb25zIGNlbGwgb2Ygcm91bmRlZAotY29v cmRpbmF0ZXMgKFgxIFkxKS4iCitBTkdMRSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgaW4g WzkwIDE4MCAyNzBdLiAgUmV0dXJucyBhIGNvbnMgY2VsbCBvZgorcm91bmRlZCBjb29yZGlu YXRlcyAoWDEgWTEpLiIKICAgKHBjYXNlLWxldCogKChyYWRpYW4gKCogKC8gYW5nbGUgMTgw LjApIGZsb2F0LXBpKSkKICAgICAgICAgICAgICAgIChgKCx3aWR0aCAuICxoZWlnaHQpIHNp emUpCiAgICAgICAgICAgICAgICA7OyB5IGlzIHBvc2l0aXZlLCBidXQgd2UgYXJlIGluIHRo ZSBib3R0b20tcmlnaHQgcXVhZHJhbnQKQEAgLTE1NTIsMjUgKzE1NzksMjQgQEAgaW1hZ2Ut LXJvdGF0ZS1jb29yZAogICAgICAgICAgICAgICAgKHkxICgtIHkxKSkpCiAgICAgKGNvbnMg KHJvdW5kIHgxKSAocm91bmQgeTEpKSkpCiAKLShkZWZ1biBpbWFnZS0tZmxpcC1tYXAgKG1h cCBmbGlwIHNpemUpCi0gICJIb3Jpem9udGFsbHkgZmxpcCBNQVAgYWNjb3JkaW5nIHRvIEZM SVAgYW5kIFNJWkUuCisoZGVmdW4gaW1hZ2UtLWZsaXAtbWFwIChtYXAgc2l6ZSkKKyAgIkhv cml6b250YWxseSBmbGlwIE1BUCBhY2NvcmRpbmcgdG8gU0laRS4KIERlc3RydWN0aXZlbHkg bW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHdoZW4gZmxpcAotICAgIChwY2FzZS1k b2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKLSAgICAg IChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0gICAgICAgICAobGV0 ICgoeDAgKC0gKGNhciBzaXplKSAoY2FkciBjb29yZHMpKSkKLSAgICAgICAgICAgICAgICh5 MCAoY2RhciBjb29yZHMpKQotICAgICAgICAgICAgICAgKHgxICgtIChjYXIgc2l6ZSkgKGNh YXIgY29vcmRzKSkpCi0gICAgICAgICAgICAgICAoeTEgKGNkZHIgY29vcmRzKSkpCi0gICAg ICAgICAgIChzZXRjYXIgY29vcmRzIChjb25zIHgwIHkwKSkKLSAgICAgICAgICAgKHNldGNk ciBjb29yZHMgKGNvbnMgeDEgeTEpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAgICAgICAo c2V0ZiAoY2FhciBjb29yZHMpICgtIChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpKQotICAg ICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29vcmRzKSkKLSAg ICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQotICAgICAgICAgICAgIChhc2V0IGNvb3Jk cyBpICgtIChjYXIgc2l6ZSkgKGFyZWYgY29vcmRzIGkpKSkpKSkpKSkKKyAgKHBjYXNlLWRv bGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQorICAgIChw Y2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAgICgncmVjdAorICAgICAgIChsZXQgKCh4MCAo LSAoY2FyIHNpemUpIChjYWRyIGNvb3JkcykpKQorICAgICAgICAgICAgICh5MCAoY2RhciBj b29yZHMpKQorICAgICAgICAgICAgICh4MSAoLSAoY2FyIHNpemUpIChjYWFyIGNvb3Jkcykp KQorICAgICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKKyAgICAgICAgIChzZXRjYXIg Y29vcmRzIChjb25zIHgwIHkwKSkKKyAgICAgICAgIChzZXRjZHIgY29vcmRzIChjb25zIHgx IHkxKSkpKQorICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0ZiAoY2FhciBjb29yZHMpICgt IChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpKQorICAgICAgKCdwb2x5CisgICAgICAgKGRv dGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQorICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIp KQorICAgICAgICAgICAoYXNldCBjb29yZHMgaSAoLSAoY2FyIHNpemUpIChhcmVmIGNvb3Jk cyBpKSkpKSkpKSkKICAgbWFwKQogCiAocHJvdmlkZSAnaW1hZ2UpCmRpZmYgLS1naXQgYS90 ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwgYi90ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwKaW5k ZXggNmE1ZjAzZTM4YTAuLjAyMDc4MWVmZjUwIDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvaW1h Z2UtdGVzdHMuZWwKKysrIGIvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCkBAIC0xNTgsNyAr MTU4LDcgQEAgaW1hZ2Utcm90YXRlCiAoZXJ0LWRlZnRlc3QgaW1hZ2UtY3JlYXRlLWltYWdl LXdpdGgtbWFwICgpCiAgICJUZXN0IHRoYXQgYGNyZWF0ZS1pbWFnZScgY29ycmVjdGx5IGFk ZHMgOm1hcCBhbmQvb3IgOm9yaWdpbmFsLW1hcC4iCiAgIChza2lwLXVubGVzcyAoZGlzcGxh eS1pbWFnZXMtcCkpCi0gIChsZXQgKChkYXRhICJmb28iKQorICAobGV0ICgoZGF0YSAiPHN2 ZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJo dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53 My5vcmcvMTk5OS94bGlua1wiPjwvc3ZnPiIpCiAgICAgICAgIChtYXAgJygoKGNpcmNsZSAo MSAuICAxKSAuICAxKSBhKSkpCiAgICAgICAgIChvcmlnaW5hbC1tYXAgJygoKGNpcmNsZSAo MiAuICAyKSAuICAyKSBhKSkpCiAgICAgICAgIChvcmlnaW5hbC1tYXAtb3RoZXIgJygoKGNp cmNsZSAoMyAuIDMpIC4gMykgYSkpKSkKQEAgLTI4Miw3ICsyODIsNyBAQCBpbWFnZS10cmFu c2Zvcm0tbWFwCiAgICAgICAgICAgICAgICAgICAgJygoKGNpcmNsZSAoMTIgLiA0KSAuIDIp ICJjaXJjbGUiKQogICAgICAgICAgICAgICAgICAgICAgKChyZWN0ICg3IC4gMykgOSAuIDgp ICJyZWN0IikKICAgICAgICAgICAgICAgICAgICAgICgocG9seSAuIFs0IDYgMiA3IDEgMl0p ICJwb2x5IikpKSkKLSAgICAoc2hvdWxkIChlcXVhbCAoaW1hZ2UtLWZsaXAtbWFwIChjb3B5 LXRyZWUgbWFwIHQpIHQgYCgsd2lkdGggLiAsaGVpZ2h0KSkKKyAgICAoc2hvdWxkIChlcXVh bCAoaW1hZ2UtLWZsaXAtbWFwIChjb3B5LXRyZWUgbWFwIHQpIGAoLHdpZHRoIC4gLGhlaWdo dCkpCiAgICAgICAgICAgICAgICAgICAgJygoKGNpcmNsZSAoNiAuIDMpIC4gMikgImNpcmNs ZSIpCiAgICAgICAgICAgICAgICAgICAgICAoKHJlY3QgKDIgLiA2KSA3IC4gOCkgInJlY3Qi KQogICAgICAgICAgICAgICAgICAgICAgKChwb2x5IC4gWzQgMTEgMyAxMyA4IDE0XSkgInBv bHkiKSkpKQpAQCAtMjkxLDcgKzI5MSw3IEBAIGltYWdlLXRyYW5zZm9ybS1tYXAKICAgICAg IDs7IFNjYWxlIHNpemUgYmVjYXVzZSB0aGUgbWFwIGhhcyBiZWVuIHNjYWxlZC4KICAgICAg IChpbWFnZS0tcm90YXRlLW1hcCBjb3B5IDkwIGAoLCgqIDIgd2lkdGgpIC4gLCgqIDIgaGVp Z2h0KSkpCiAgICAgICA7OyBTd2FwIHdpZHRoIGFuZCBoZWlnaHQgYmVjYXVzZSB0aGUgbWFw IGhhcyBiZWVuIGZsaXBwZWQuCi0gICAgICAoaW1hZ2UtLWZsaXAtbWFwIGNvcHkgdCBgKCwo KiAyIGhlaWdodCkgLiAsKCogMiB3aWR0aCkpKQorICAgICAgKGltYWdlLS1mbGlwLW1hcCBj b3B5IGAoLCgqIDIgaGVpZ2h0KSAuICwoKiAyIHdpZHRoKSkpCiAgICAgICAoc2hvdWxkIChl cXVhbCBjb3B5CiAgICAgICAgICAgICAgICAgICAgICAnKCgoY2lyY2xlICg2IC4gOCkgLiA0 KSAiY2lyY2xlIikKICAgICAgICAgICAgICAgICAgICAgICAgKChyZWN0ICgxMiAuIDYpIDE2 IC4gMTYpICJyZWN0IikK --------------yg83EmNRJ9bgvu0PitxQ12Kj--