<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>52068</bug_id>
          
          <creation_ts>2011-01-07 10:05:57 -0800</creation_ts>
          <short_desc>Need to consider UNPACK_ALIGNMENT in GraphicsContext3D::texImage2DResourceSafe</short_desc>
          <delta_ts>2011-01-11 12:33:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52237</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>330830</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 10:05:57 -0800</bug_when>
    <thetext>Need to UNPACK_ALIGNMENT to 1 before calling texImage2D, then restore the original value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330872</commentid>
    <comment_count>1</comment_count>
      <attachid>78250</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 11:06:41 -0800</bug_when>
    <thetext>Created attachment 78250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330897</commentid>
    <comment_count>2</comment_count>
      <attachid>78250</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-07 11:57:41 -0800</bug_when>
    <thetext>Comment on attachment 78250
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=78250&amp;action=review

&gt; WebCore/platform/graphics/GraphicsContext3D.cpp:138
&gt; +        getIntegerv(GraphicsContext3D::UNPACK_ALIGNMENT, &amp;unpackAlignment);

This query will kill performance of texture uploads. Instead, change the function signature and all callers to pass in the current unpack alignment, or track the unpack alignment in the GraphicsContext3D implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331896</commentid>
    <comment_count>3</comment_count>
      <attachid>78443</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-10 13:30:56 -0800</bug_when>
    <thetext>Created attachment 78443
Patch

refactor the code, adding a new function computeImageSizeInBytes and use it whenever we can</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331996</commentid>
    <comment_count>4</comment_count>
      <attachid>78443</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-10 15:35:57 -0800</bug_when>
    <thetext>Comment on attachment 78443
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=78443&amp;action=review

The code changes look good; however, there&apos;s a bug in the test case pulled down from Khronos that needs to be fixed.

&gt; LayoutTests/fast/canvas/webgl/read-pixels-test-expected.txt:1
&gt; +CONSOLE MESSAGE: line 114: ReferenceError: Can&apos;t find variable: INVALID_OPERATION

There&apos;s a bug in the test case; the initialization of the various bad tests isn&apos;t picking up the enum values through the WebGLRenderingContext object. An exception is being thrown, and the test isn&apos;t completing successfully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332452</commentid>
    <comment_count>5</comment_count>
      <attachid>78551</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-11 10:54:16 -0800</bug_when>
    <thetext>Created attachment 78551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332455</commentid>
    <comment_count>6</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-11 10:57:52 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=78551) [details]
&gt; Patch

I fixed the test on the khronos side.  This patch is in sync with khronos.

Sorry Adrienne, I copied finishTest() to webgl-test.html for this patch.  It might add to the mess you try to clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332460</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-01-11 11:01:25 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Created an attachment (id=78551) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I fixed the test on the khronos side.  This patch is in sync with khronos.
&gt; 
&gt; Sorry Adrienne, I copied finishTest() to webgl-test.html for this patch.  It might add to the mess you try to clean up.

Thanks for the heads up.  I needed that function for the video test too, which is why I originally started looking into the script cleanup.  It&apos;s a good short term solution; we can clean it up with the other changes later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332480</commentid>
    <comment_count>8</comment_count>
      <attachid>78551</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-11 11:28:18 -0800</bug_when>
    <thetext>Comment on attachment 78551
Patch

Looks good. Nice work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332501</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-11 11:49:52 -0800</bug_when>
    <thetext>Committed r75524: &lt;http://trac.webkit.org/changeset/75524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332558</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-11 12:33:15 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75524 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
fast/canvas/webgl/read-pixels-test.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78250</attachid>
            <date>2011-01-07 11:06:41 -0800</date>
            <delta_ts>2011-01-10 13:30:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52068-20110107110640.patch</filename>
            <type>text/plain</type>
            <size>1835</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEtMDcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRv
IGNvbnNpZGVyIFVOUEFDS19BTElHTk1FTlQgaW4gR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkRSZXNvdXJjZVNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyMDY4CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZSk6CisKIDIwMTEtMDEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA3NTI1MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTMgKzEyNywyMSBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgemVybyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2ln
bmVkIGNoYXJbc2l6ZV0pOwotICAgICAgICBpZiAoIXplcm8uZ2V0KCkpIHsKKyAgICAgICAgaWYg
KCF6ZXJvKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwogICAgIH0KLSAgICByZXR1cm4g
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOworICAgIEdDM0RpbnQgdW5wYWNrQWxp
Z25tZW50ID0gNDsKKyAgICBpZiAoemVybykgeworICAgICAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgJnVucGFja0FsaWdubWVudCk7CisgICAgICAg
IHBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAg
ICB9CisgICAgYm9vbCBydCA9IHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKKyAg
ICBpZiAoemVybykKKyAgICAgICAgcGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQsIHVucGFja0FsaWdubWVudCk7CisgICAgcmV0dXJuIHJ0OwogfQogCiBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoR0MzRGVu
dW0gZm9ybWF0LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78443</attachid>
            <date>2011-01-10 13:30:56 -0800</date>
            <delta_ts>2011-01-11 10:54:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52068-20110110133055.patch</filename>
            <type>text/plain</type>
            <size>33317</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZWVkIHRvIGNvbnNpZGVyIFVOUEFDS19BTElHTk1FTlQgaW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDY4CisKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IFVzZSBjb21wdXRlSW1hZ2VTaXplSW5CeXRl
cy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
YWdlMkQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVhZFBpeGVscyk6IERpdHRvLCBhbmQgZml4IGEgYnVnIG9uIGdlbmVyYXRpbmcgdGhlIHdyb25n
IGVycm9yLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTJEQmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKTogVXNlIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogQWRk
IGEgbmV3IHBhcmFtZXRlciBhbGlnbm1lbnQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKTogQWRkIG1vcmUgc3VwcG9y
dGVkIGZvcm1hdC90eXBlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXB1dGVJbWFnZVNpemVJbkJ5dGVzKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKwogMjAxMS0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAg
PGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3NTMxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlCiAgICAgICAgIGxvbmcgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0
KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKICAgICAgICAgICAgIGlmIChjbGlw
cGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNs
aXBwZWRZIC0geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKQEAgLTc1
MSwxNiArNzUxLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0K
ICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVm
ZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlw
cGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7
CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBs
ZXZlbCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsID0gMDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDA7Ci0gICAgICAg
ICAgICBib29sIHZhbGlkID0gbV9jb250ZXh0LT5jb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRl
cnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQp
OwotICAgICAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBPd25B
cnJheVB0cjx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhl
aWdodCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvbXBvbmVudHNQ
ZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50ICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHplcm8g
PSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXplcm8pIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC03NjgsMTEgKzc2
Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHplcm8pCi0gICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgp
KTsKLSAgICAgICAgICAgIGlmICh6ZXJvKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKICAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkg
LSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBl
ZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwpAQCAtMjQxMiwzMCAr
MjQwNiwzNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KLSAg
ICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAg
ICBpZiAoIW1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwg
dHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgewotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGlmICghcGl4ZWxzKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBWYWxpZGF0ZSBhcnJh
eSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAoKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIXBpeGVscy0+aXNVbnNpZ25lZEJ5dGVBcnJheSgpKQot
ICAgICAgICB8fCAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiAh
cGl4ZWxzLT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKSkgeworICAgIGlmICghcGl4ZWxzLT5pc1Vu
c2lnbmVkQnl0ZUFycmF5KCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjQ0NCwzNyArMjQ0MywzMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyhsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gQ2FsY3VsYXRl
IGFycmF5IHNpemUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQu
Ci0gICAgdW5zaWduZWQgbG9uZyBieXRlc1BlclJvdyA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5
dGVzUGVyQ29tcG9uZW50ICogd2lkdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBwYWRkaW5nID0gMDsK
LSAgICB1bnNpZ25lZCBsb25nIHJlc2lkdWFsQnl0ZXMgPSBieXRlc1BlclJvdyAlIG1fcGFja0Fs
aWdubWVudDsKLSAgICBpZiAocmVzaWR1YWxCeXRlcykgewotICAgICAgICBwYWRkaW5nID0gbV9w
YWNrQWxpZ25tZW50IC0gcmVzaWR1YWxCeXRlczsKLSAgICAgICAgYnl0ZXNQZXJSb3cgKz0gcGFk
ZGluZzsKLSAgICB9Ci0gICAgLy8gVGhlIGxhc3Qgcm93IG5lZWRzIG5vIHBhZGRpbmcuCi0gICAg
dW5zaWduZWQgbG9uZyB0b3RhbEJ5dGVzID0gYnl0ZXNQZXJSb3cgKiBoZWlnaHQgLSBwYWRkaW5n
OwotICAgIHVuc2lnbmVkIGxvbmcgbnVtID0gdG90YWxCeXRlcyAvIGJ5dGVzUGVyQ29tcG9uZW50
OwotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAvIGJ5dGVzUGVyQ29tcG9uZW50IDwgbnVt
KSB7CisgICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKKyAgICB1bnNpZ25lZCBp
bnQgcGFkZGluZzsKKyAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQs
ICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwaXhlbHMtPmJ5
dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJl
c3MoKTsKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhKTsKLSNpZiBQTEFURk9STShDRykKKyNpZiBPUyhEQVJXSU4pCiAgICAg
Ly8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBp
cyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91
bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKChmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgewotICAgICAg
ICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSk7Ci0gICAgICAgICAgICBmb3IgKGxvbmcgaXkgPSAwOyBpeSA8IGhlaWdodDsg
KytpeSkgewotICAgICAgICAgICAgICAgIGZvciAobG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsr
aXgpIHsKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxzW2NvbXBvbmVudHNQZXJQaXhlbCAtIDFd
ID0gMjU1OwotICAgICAgICAgICAgICAgICAgICBwaXhlbHMgKz0gY29tcG9uZW50c1BlclBpeGVs
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsK
KyAgICBpZiAoIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgeworICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChsb25nIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkp
IHsKKyAgICAgICAgICAgIGZvciAobG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKKyAg
ICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7CisgICAgICAgICAgICAgICAgcGl4ZWxzICs9
IDQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsKICAgICAg
ICAgfQotICAgICAgICAvLyBGSVhNRTogY2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIGRvIHRoZSBz
YW1lIHdpdGggVU5TSUdORURfU0hPUlQuCiAgICAgfQogI2VuZGlmCiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI2NjgsNyArMjY2MSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICB9CiAgICAgaWYgKCFwaXhlbHMgJiYgIWlz
UmVzb3VyY2VTYWZlKCkpIHsKICAgICAgICAgYm9vbCBzdWNjZWVkID0gbV9jb250ZXh0LT50ZXhJ
bWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrQWxpZ25tZW50KTsKICAgICAgICAgaWYgKCFzdWNjZWVkKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0gZWxzZSB7CkBAIC00MDAxLDIwICszOTk0LDEyIEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJD
b21wb25lbnQ7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1l
dGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVu
dCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVk
OworICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRSb3dCeXRlcyA9
IHdpZHRoICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgdW5z
aWduZWQgaW50IHRvdGFsUm93Qnl0ZXMgPSB2YWxpZFJvd0J5dGVzOwotICAgIHVuc2lnbmVkIGlu
dCByZW1haW5kZXIgPSB2YWxpZFJvd0J5dGVzICUgbV91bnBhY2tBbGlnbm1lbnQ7Ci0gICAgaWYg
KHJlbWFpbmRlcikKLSAgICAgICAgdG90YWxSb3dCeXRlcyArPSAobV91bnBhY2tBbGlnbm1lbnQg
LSByZW1haW5kZXIpOwotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAoaGVp
Z2h0IC0gMSkgKiB0b3RhbFJvd0J5dGVzICsgdmFsaWRSb3dCeXRlczsKICAgICBpZiAocGl4ZWxz
LT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA3NTMx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgogI2luY2x1ZGUgIkNoZWNrZWRJbnQuaCIKICNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKIApAQCAtNDMsNjIgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgewogCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50
KEdDM0RlbnVtIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgICAgIHJldHVy
biAxOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKLSAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDoKLSAgICAgICAgICAgIHJldHVybiA0OwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgY29t
cG9uZW50c1BlclBpeGVsKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICAgICAgICAgIHJldHVybiAz
OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICAgICAgcmV0
dXJuIDQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlm
IHdpZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCi0gICAgLy8gZm9ybWF0L3R5cGUgYXJl
IHZhbGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KLSAgICB1bnNpZ25lZCBpbnQg
aW1hZ2VTaXplSW5CeXRlcyhHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRX
aWR0aCh3aWR0aCk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRIZWlnaHQo
aGVpZ2h0KTsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEJ5dGVzUGVyUGl4
ZWwoYnl0ZXNQZXJDb21wb25lbnQodHlwZSkgKiBjb21wb25lbnRzUGVyUGl4ZWwoZm9ybWF0LCB0
eXBlKSk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRTaXplID0gY2hlY2tl
ZFdpZHRoICogY2hlY2tlZEhlaWdodCAqIGNoZWNrZWRCeXRlc1BlclBpeGVsOwotICAgICAgICBp
ZiAoY2hlY2tlZFNpemUudmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGVja2VkU2l6ZS52
YWx1ZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICB1aW50OF90IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHVpbnQxNl90IHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZh
bHVlID4+IDg7CkBAIC0xMTcsMTcgKzYyLDE5IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
R3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNp
emUpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFj
a0FsaWdubWVudCkKIHsKKyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNr
QWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50
ID09IDgpOwogICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gaW1h
Z2VTaXplSW5CeXRlcyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAo
IXNpemUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgICAgIEdD
M0RlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKKyAgICAgICAgaWYgKGVycm9y
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsKLSAg
ICAgICAgaWYgKCF6ZXJvLmdldCgpKSB7CisgICAgICAgIGlmICghemVybykgewogICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xNTUsNiArMTAyLDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZAogICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90
ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE2MiwxNiArMTEwLDE2IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmQKICAgICB9CiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAg
ICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworICAgICAgICAq
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVieXRlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1
c2hvcnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKGZsb2F0KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9h
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE3OSw2ICsxMjcsNDQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1h
dEFuZAogICAgIHJldHVybiB0cnVlOwogfQogCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYWxpZ25tZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCogaW1hZ2VTaXplSW5CeXRlcywgdW5zaWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcykKK3sK
KyAgICBBU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyk7CisgICAgQVNTRVJUKGFsaWdubWVudCA9PSAx
IHx8IGFsaWdubWVudCA9PSAyIHx8IGFsaWdubWVudCA9PSA0IHx8IGFsaWdubWVudCA9PSA4KTsK
KyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21w
b25lbnQsIGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZieXRlc1BlckNvbXBvbmVudCwgJmNvbXBvbmVudHNQ
ZXJQaXhlbCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
OworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgeworICAgICAgICAqaW1hZ2VTaXplSW5CeXRl
cyA9IDA7CisgICAgICAgIGlmIChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgICAgICpwYWRkaW5n
SW5CeXRlcyA9IDA7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisgICAgfQorICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRWYWx1ZShieXRlc1BlckNv
bXBvbmVudCAqIGNvbXBvbmVudHNQZXJQaXhlbCk7CisgICAgY2hlY2tlZFZhbHVlICo9ICB3aWR0
aDsKKyAgICBpZiAoIWNoZWNrZWRWYWx1ZS52YWxpZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CisgICAgdW5zaWduZWQgaW50IHZhbGlkUm93U2l6
ZSA9IGNoZWNrZWRWYWx1ZS52YWx1ZSgpOworICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsK
KyAgICB1bnNpZ25lZCBpbnQgcmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGlnbm1lbnQ7Cisg
ICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQgLSByZXNpZHVh
bDsKKyAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7CisgICAgfQorICAgIC8vIExhc3Qg
cm93IG5lZWRzIG5vIHBhZGRpbmcuCisgICAgY2hlY2tlZFZhbHVlICo9IChoZWlnaHQgLSAxKTsK
KyAgICBjaGVja2VkVmFsdWUgKz0gdmFsaWRSb3dTaXplOworICAgIGlmICghY2hlY2tlZFZhbHVl
LnZhbGlkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RTsKKyAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IGNoZWNrZWRWYWx1ZS52YWx1ZSgpOworICAgIGlm
IChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKKyAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CShyZXZpc2lvbiA3NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAKIHR5cGVk
ZWYgdW5zaWduZWQgaW50IEdDM0RlbnVtOwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdDM0Rib29s
ZWFuOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0MzRGJpdGZpZWxkOwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIEdDM0R1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0MzRHVzaG9ydDsKIHR5
cGVkZWYgaW50IEdDM0RpbnQ7CiB0eXBlZGVmIGludCBHQzNEc2l6ZWk7CiB0eXBlZGVmIHVuc2ln
bmVkIGludCBHQzNEdWludDsKQEAgLTQ5MSw3ICs0OTMsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBI
ZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlh
bGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVz
aXplZC4KLSAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKKyAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBk
ZWZhdWx0IHNldHRpbmcuCisgICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBhbGlnbm1lbnQgPSA0KTsKIAogICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0OwogCkBAIC01MDcsNiArNTEwLDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGNvbXBv
bmVudHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKIAorICAgIC8vIENvbXB1dGVzIHRoZSBp
bWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwgcGFkZGlu
ZworICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9fRVJST1Ig
aWYgc3VjY2VlZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQgR0wgZXJy
b3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6CisgICAgLy8gICBJTlZBTElE
X1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBwZW5zLgor
ICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCisgICAgR0Mz
RGVudW0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGludCBhbGlnbm1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbWFnZVNpemVJbkJ5dGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogcGFkZGluZ0lu
Qnl0ZXMpOworCiAgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFn
ZSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAogICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEg
YWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCiAgICAgLy8gYW5kIG9iZXlp
bmcgdGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEtMTAgIFpoZW55YW8gTW8g
IDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOZWVkIHRvIGNvbnNpZGVyIFVOUEFDS19BTElHTk1FTlQgaW4gR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDY4CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9yZWFkLXBpeGVscy10ZXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9yZWFkLXBpeGVscy10ZXN0Lmh0bWw6IFN5bmMgd2l0aCBraHJvbm9zLgorCiAyMDEx
LTAxLTEwICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVhZC1waXhlbHMtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtdGVzdC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDc1MzgzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhl
bHMtdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMTE0OiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJs
ZTogSU5WQUxJRF9PUEVSQVRJT04KIENoZWNrcyB0aGF0IFJlYWRQaXhlbHMgd29ya3MgYXMgZXhw
ZWN0ZWQuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KQEAgLTEzMCwxNiArMTMxLDMgQEAg
UEFTUyBjb2xvciBwaXhlbCBhdCAxLCAxIHNob3VsZCBiZSBhYm91dAogUEFTUyBjb2xvciBwaXhl
bCBhdCAxLCAxIHNob3VsZCBiZSBhYm91dCAwCiBQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiB0aGVyZSBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCiAKLWNoZWNrIGRp
c2FsbG93ZWQgZm9ybWF0cwotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRU5VTSA6IFNob3VsZCBub3QgYmUgYWJsZSB0byByZWFkIGFzIFJHQiAvIFVOU0lHTkVEX0JZ
VEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6
IFNob3VsZCBub3QgYmUgYWJsZSB0byByZWFkIGFzIFJHQiAvIFVOU0lHTkVEX1NIT1JUXzVfNl81
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9FTlVNIDogU2hvdWxk
IG5vdCBiZSBhYmxlIHRvIHJlYWQgYXMgUkdCQSAvIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0VOVU0gOiBTaG91bGQgbm90
IGJlIGFibGUgdG8gcmVhZCBhcyBSR0JBIC8gVU5TSUdORURfU0hPUlRfNF80XzRfNAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRU5VTSA6IFNob3VsZCBub3QgYmUg
YWJsZSB0byByZWFkIGFzIEFMUEhBIC8gVU5TSUdORURfQllURQotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRU5VTSA6IFNob3VsZCBub3QgYmUgYWJsZSB0byByZWFk
IGFzIExVTUlOQU5DRSAvIFVOU0lHTkVEX0JZVEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0VOVU0gOiBTaG91bGQgbm90IGJlIGFibGUgdG8gcmVhZCBhcyBMVU1J
TkFOQ0VfQUxQSEEgLyBVTlNJR05FRF9CWVRFCi0KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZWFkLXBpeGVscy10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtdGVzdC5odG1sCShyZXZpc2lvbiA3NTM4MykKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXRlc3QuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTcwICsyMywxOTcgQEAgaWYgKHdpbmRvdy5pbml0Tm9uS2hyb25v
c0ZyYW1ld29yaykgewogICAgd2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKGZhbHNlKTsK
IH0KIAordmFyIGFjdHVhbDsKK3ZhciBleHBlY3RlZDsKIHZhciB3aWR0aCA9IDI7CiB2YXIgaGVp
Z2h0ID0gMjsKK3ZhciBjb250aW51ZVRlc3RGdW5jID0gY29udGludWVUZXN0UGFydDE7CiAKIGds
LmNsZWFyQ29sb3IoMSwgMSwgMSwgMSk7CiBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsK
IAogLy8gUmVzaXplIHRoZSBjYW52YXMgdG8gMngyLiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZ2V0
IHN0dWZmIGluIHRoZSBiYWNrYnVmZmVyLgogLy8gdGhhdCBzaG91bGRuJ3QgYmUgdGhlcmUuCitj
YW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCBjb250aW51ZVRl
c3RBZnRlckNvbnRleHRSZXN0b3JlZCwgZmFsc2UpOwogY2FudmFzLndpZHRoID0gd2lkdGg7CiBj
YW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi1nbC5jbGVhckNvbG9yKDAuNSwgMC43LCAxLjAsIDEp
OwotZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7Ci0KLXZhciBpbm5lckNvbG9yID0gWzAu
NSwgMC43LCAxLjAsIDFdOwotdmFyIG91dGVyQ29sb3IgPSBbMCwgMCwgMCwgMF07Ci0KLXZhciB0
ZXN0cyA9IFsKLSAgeyBtc2c6ICdpbiByYW5nZScsIGNoZWNrQ29sb3I6IGlubmVyQ29sb3IsIHg6
ICAwLCB5OiAgMCwKLSAgICBvbmVDb2xvcjogaW5uZXJDb2xvciwgb25lWDogMCwgb25lWTogMH0s
Ci0gIHsgbXNnOiAnb2ZmIHRvcCBsZWZ0JywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogLTEs
IHk6IC0xLAotICAgIG9uZUNvbG9yOiBpbm5lckNvbG9yLCBvbmVYOiAxLCBvbmVZOiAxfSwKLSAg
eyBtc2c6ICdvZmYgYm90dG9tIHJpZ2h0JywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogIDEs
IHk6ICAxLAotICAgIG9uZUNvbG9yOiBpbm5lckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKLSAg
eyBtc2c6ICdjb21wbGV0ZWx5IG9mZiB0b3AgJywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDog
IDAsIHk6IC0yLAotICAgIG9uZUNvbG9yOiBvdXRlckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwK
LSAgeyBtc2c6ICdjb21wbGV0ZWx5IG9mZiBib3R0b20nLCBjaGVja0NvbG9yOiBvdXRlckNvbG9y
LCB4OiAgMCwgeTogIDIsCi0gICAgb25lQ29sb3I6IG91dGVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6
IDB9LAotICB7IG1zZzogJ2NvbXBsZXRlbHkgb2ZmIGxlZnQnLCBjaGVja0NvbG9yOiBvdXRlckNv
bG9yLCB4OiAtMiwgeTogIDAsCi0gICAgb25lQ29sb3I6IG91dGVyQ29sb3IsIG9uZVg6IDAsIG9u
ZVk6IDB9LAotICB7IG1zZzogJ2NvbXBsZXRlbGV5IG9mZiByaWdodCcsIGNoZWNrQ29sb3I6IG91
dGVyQ29sb3IsIHg6ICAyLCB5OiAgMCwKLSAgICBvbmVDb2xvcjogb3V0ZXJDb2xvciwgb25lWDog
MCwgb25lWTogMH0KLV07Ci0KLWZvciAodmFyIHR0ID0gMDsgdHQgPCB0ZXN0cy5sZW5ndGg7ICsr
dHQpIHsKLSAgdmFyIHRlc3QgPSB0ZXN0c1t0dF07Ci0gIGRlYnVnKCIiKTsKLSAgZGVidWcoImNo
ZWNraW5nOiAiICsgdGVzdC5tc2cpOwotICBjaGVja0J1ZmZlcih0ZXN0LmNoZWNrQ29sb3IsIHRl
c3QueCwgdGVzdC55LAotICAgICAgICAgICAgICB0ZXN0Lm9uZUNvbG9yLCB0ZXN0Lm9uZVgsIHRl
c3Qub25lWSk7CitpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5DT05URVhUX0xPU1RfV0VCR0wpIHsK
KyAgY29udGludWVUZXN0UGFydDEoKTsKIH0KIAotZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19F
UlJPUiwgInRoZXJlIHNob3VsZCBiZSBubyBHTCBlcnJvcnMiKTsKK2Z1bmN0aW9uIGNvbnRpbnVl
VGVzdEFmdGVyQ29udGV4dFJlc3RvcmVkKCkgeworICB3aW5kb3cuZ2wgPSBjcmVhdGUzRENvbnRl
eHQoY2FudmFzKTsKKyAgdmFyIGZ1bmMgPSBjb250aW51ZVRlc3RGdW5jOworICB3aW5kb3cuY29u
dGludWVUZXN0RnVuYyA9IGZ1bmN0aW9uKCkgeyB0ZXN0RmFpbGVkKCJzaG91bGQgbm90IGJlIGhl
cmUiKTsgfTsKKyAgZnVuYygpOworfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3RQYXJ0MSgpIHsK
KyAgZ2wuY2xlYXJDb2xvcigwLjUsIDAuNywgMS4wLCAxKTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1Jf
QlVGRkVSX0JJVCk7CisKKyAgdmFyIGlubmVyQ29sb3IgPSBbMC41LCAwLjcsIDEuMCwgMV07Cisg
IHZhciBvdXRlckNvbG9yID0gWzAsIDAsIDAsIDBdOworCisgIHZhciB0ZXN0cyA9IFsKKyAgICB7
IG1zZzogJ2luIHJhbmdlJywgY2hlY2tDb2xvcjogaW5uZXJDb2xvciwgeDogIDAsIHk6ICAwLAor
ICAgICAgb25lQ29sb3I6IGlubmVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9LAorICAgIHsgbXNn
OiAnb2ZmIHRvcCBsZWZ0JywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogLTEsIHk6IC0xLAor
ICAgICAgb25lQ29sb3I6IGlubmVyQ29sb3IsIG9uZVg6IDEsIG9uZVk6IDF9LAorICAgIHsgbXNn
OiAnb2ZmIGJvdHRvbSByaWdodCcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6ICAxLCB5OiAg
MSwKKyAgICAgIG9uZUNvbG9yOiBpbm5lckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKKyAgICB7
IG1zZzogJ2NvbXBsZXRlbHkgb2ZmIHRvcCAnLCBjaGVja0NvbG9yOiBvdXRlckNvbG9yLCB4OiAg
MCwgeTogLTIsCisgICAgICBvbmVDb2xvcjogb3V0ZXJDb2xvciwgb25lWDogMCwgb25lWTogMH0s
CisgICAgeyBtc2c6ICdjb21wbGV0ZWx5IG9mZiBib3R0b20nLCBjaGVja0NvbG9yOiBvdXRlckNv
bG9yLCB4OiAgMCwgeTogIDIsCisgICAgICBvbmVDb2xvcjogb3V0ZXJDb2xvciwgb25lWDogMCwg
b25lWTogMH0sCisgICAgeyBtc2c6ICdjb21wbGV0ZWx5IG9mZiBsZWZ0JywgY2hlY2tDb2xvcjog
b3V0ZXJDb2xvciwgeDogLTIsIHk6ICAwLAorICAgICAgb25lQ29sb3I6IG91dGVyQ29sb3IsIG9u
ZVg6IDAsIG9uZVk6IDB9LAorICAgIHsgbXNnOiAnY29tcGxldGVsZXkgb2ZmIHJpZ2h0JywgY2hl
Y2tDb2xvcjogb3V0ZXJDb2xvciwgeDogIDIsIHk6ICAwLAorICAgICAgb25lQ29sb3I6IG91dGVy
Q29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9CisgIF07CisKKyAgZm9yICh2YXIgdHQgPSAwOyB0dCA8
IHRlc3RzLmxlbmd0aDsgKyt0dCkgeworICAgIHZhciB0ZXN0ID0gdGVzdHNbdHRdOworICAgIGRl
YnVnKCIiKTsKKyAgICBkZWJ1ZygiY2hlY2tpbmc6ICIgKyB0ZXN0Lm1zZyk7CisgICAgY2hlY2tC
dWZmZXIodGVzdC5jaGVja0NvbG9yLCB0ZXN0LngsIHRlc3QueSwKKyAgICAgICAgICAgICAgICB0
ZXN0Lm9uZUNvbG9yLCB0ZXN0Lm9uZVgsIHRlc3Qub25lWSk7CisgIH0KKworICBnbEVycm9yU2hv
dWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidGhlcmUgc2hvdWxkIGJlIG5vIEdMIGVycm9ycyIpOwog
Ci1mdW5jdGlvbiBjaGVja0J1ZmZlcihjaGVja0NvbG9yLCB4LCB5LCBvbmVDb2xvciwgb25lWCwg
b25lWSkgewotICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsK
LSAgZ2wucmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCBidWYpOwotICBmb3IgKHZhciB5eSA9IDA7IHl5IDwgaGVpZ2h0OyArK3l5KSB7Ci0g
ICAgZm9yICh2YXIgeHggPSAwOyB4eCA8IHdpZHRoOyArK3h4KSB7Ci0gICAgICB2YXIgb2Zmc2V0
ID0gKHl5ICogd2lkdGggKyB4eCkgKiA0OwotICAgICAgdmFyIGV4cGVjdGVkQ29sb3JzID0gKG9u
ZVggPT0geHggJiYgb25lWSA9PSB5eSkgPyBvbmVDb2xvciA6IGNoZWNrQ29sb3I7Ci0gICAgICBm
b3IgKHZhciBjYyA9IDA7IGNjIDwgNDsgKytjYykgewotICAgICAgICB2YXIgZXhwZWN0ZWRDb2xv
ciA9IGV4cGVjdGVkQ29sb3JzW2NjXSAqIDI1NTsKLSAgICAgICAgdmFyIGNvbG9yID0gYnVmW29m
ZnNldCArIGNjXTsKLSAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhleHBlY3RlZENvbG9yIC0g
Y29sb3IpOwotICAgICAgICBhc3NlcnRNc2coZGlmZiA8IDMsCi0gICAgICAgICAgICAgICAgICAi
Y29sb3IgcGl4ZWwgYXQgIiArIHh4ICsgIiwgIiArIHl5ICsgIiBzaG91bGQgYmUgYWJvdXQgIiAr
IGV4cGVjdGVkQ29sb3IpOworICBmdW5jdGlvbiBjaGVja0J1ZmZlcihjaGVja0NvbG9yLCB4LCB5
LCBvbmVDb2xvciwgb25lWCwgb25lWSkgeworICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3
aWR0aCAqIGhlaWdodCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICBmb3IgKHZhciB5eSA9IDA7
IHl5IDwgaGVpZ2h0OyArK3l5KSB7CisgICAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDwgd2lkdGg7
ICsreHgpIHsKKyAgICAgICAgdmFyIG9mZnNldCA9ICh5eSAqIHdpZHRoICsgeHgpICogNDsKKyAg
ICAgICAgdmFyIGV4cGVjdGVkQ29sb3JzID0gKG9uZVggPT0geHggJiYgb25lWSA9PSB5eSkgPyBv
bmVDb2xvciA6IGNoZWNrQ29sb3I7CisgICAgICAgIGZvciAodmFyIGNjID0gMDsgY2MgPCA0OyAr
K2NjKSB7CisgICAgICAgICAgdmFyIGV4cGVjdGVkQ29sb3IgPSBleHBlY3RlZENvbG9yc1tjY10g
KiAyNTU7CisgICAgICAgICAgdmFyIGNvbG9yID0gYnVmW29mZnNldCArIGNjXTsKKyAgICAgICAg
ICB2YXIgZGlmZiA9IE1hdGguYWJzKGV4cGVjdGVkQ29sb3IgLSBjb2xvcik7CisgICAgICAgICAg
YXNzZXJ0TXNnKGRpZmYgPCAzLAorICAgICAgICAgICAgICAgICAgICAiY29sb3IgcGl4ZWwgYXQg
IiArIHh4ICsgIiwgIiArIHl5ICsgIiBzaG91bGQgYmUgYWJvdXQgIiArIGV4cGVjdGVkQ29sb3Ip
OworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9Ci19CiAKLXZhciBiYWRGb3JtYXRzID0g
WwotICB7Ci0gICAgZm9ybWF0OiBnbC5SR0IsCi0gICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwK
LSAgICBkZXN0OiBuZXcgVWludDhBcnJheSgzKQotICB9LAotICB7Ci0gICAgZm9ybWF0OiBnbC5S
R0IsCi0gICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNV82XzUsCi0gICAgZGVzdDogbmV3IFVp
bnQ4QXJyYXkoMykKLSAgfSwKLSAgewotICAgIGZvcm1hdDogZ2wuUkdCQSwKLSAgICB0eXBlOiBn
bC5VTlNJR05FRF9TSE9SVF81XzVfNV8xLAotICAgIGRlc3Q6IG5ldyBVaW50MTZBcnJheSgxKQot
ICB9LAotICB7Ci0gICAgZm9ybWF0OiBnbC5SR0JBLAotICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQsCi0gICAgZGVzdDogbmV3IFVpbnQxNkFycmF5KDEpCi0gIH0sCi0gIHsKLSAg
ICBmb3JtYXQ6IGdsLkFMUEhBLAotICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCi0gICAgZGVz
dDogbmV3IFVpbnQ4QXJyYXkoMSkKLSAgfSwKLSAgewotICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNF
LAotICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCi0gICAgZGVzdDogbmV3IFVpbnQ4QXJyYXko
MSkgfSwKLSAgewotICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNFX0FMUEhBLAotICAgIHR5cGU6IGds
LlVOU0lHTkVEX0JZVEUsCi0gICAgZGVzdDogbmV3IFVpbnQ4QXJyYXkoMikKLSAgfQotXTsKLWRl
YnVnKCIiKTsKLWRlYnVnKCJjaGVjayBkaXNhbGxvd2VkIGZvcm1hdHMiKTsKLWZvciAodmFyIHR0
ID0gMDsgdHQgPCBiYWRGb3JtYXRzLmxlbmd0aDsgKysgdHQpIHsKLSAgdmFyIGluZm8gPSBiYWRG
b3JtYXRzW3R0XQotICB2YXIgZm9ybWF0ID0gaW5mby5mb3JtYXQ7Ci0gIHZhciB0eXBlID0gaW5m
by50eXBlOwotICB2YXIgZGVzdCA9IGluZm8uZGVzdDsKLSAgZ2wucmVhZFBpeGVscygwLCAwLCAx
LCAxLCBmb3JtYXQsIHR5cGUsIGRlc3QpOwotICAvLyBub3RlIHRoYXQgdGhlIEdMIGVycm9yIGlz
IElOVkFMSURfT1BFUkFUSU9OIGlmIGJvdGggZm9ybWF0IGFuZCB0eXBlIGFyZSBpbnZhbGlkLCBi
dXQKLSAgLy8gSU5WQUxJRF9FTlVNIGlmIG9ubHkgb25lIGlzLgotICBnbEVycm9yU2hvdWxkQmUo
Ci0gICAgICBnbCwgKGZvcm1hdCA9PSBnbC5SR0JBIHx8IHR5cGUgPT0gZ2wuVU5TSUdORURfQllU
RSkgPyBnbC5JTlZBTElEX0VOVU0gOiBnbC5JTlZBTElEX09QRVJBVElPTiwKLSAgICAgICJTaG91
bGQgbm90IGJlIGFibGUgdG8gcmVhZCBhcyAiICsgd3R1LmdsRW51bVRvU3RyaW5nKGdsLCBmb3Jt
YXQpICsKLSAgICAgICIgLyAiICsgd3R1LmdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKSk7Ci19Cisg
IHZhciBiYWRGb3JtYXRzID0gWworICAgIHsKKyAgICAgIGZvcm1hdDogZ2wuUkdCLAorICAgICAg
dHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDMpLAor
ICAgICAgZXJyb3I6IGdsLklOVkFMSURfT1BFUkFUSU9OCisgICAgfSwKKyAgICB7CisgICAgICBm
b3JtYXQ6IGdsLlJHQiwKKyAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81LAorICAg
ICAgZGVzdDogbmV3IFVpbnQ4QXJyYXkoMyksCisgICAgICBlcnJvcjogSU5WQUxJRF9PUEVSQVRJ
T04KKyAgICB9LAorICAgIHsKKyAgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgIHR5cGU6IGds
LlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsCisgICAgICBkZXN0OiBuZXcgVWludDE2QXJyYXkoMSks
CisgICAgICBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04KKyAgICB9LAorICAgIHsKKyAgICAgIGZv
cm1hdDogZ2wuUkdCQSwKKyAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQsCisg
ICAgICBkZXN0OiBuZXcgVWludDE2QXJyYXkoMSksCisgICAgICBlcnJvcjogSU5WQUxJRF9PUEVS
QVRJT04KKyAgICB9LAorICAgIHsKKyAgICAgIGZvcm1hdDogZ2wuQUxQSEEsCisgICAgICB0eXBl
OiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgZGVzdDogbmV3IFVpbnQ4QXJyYXkoMSksCisgICAg
ICBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04KKyAgICB9LAorICAgIHsKKyAgICAgIGZvcm1hdDog
Z2wuTFVNSU5BTkNFLAorICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgIGRlc3Q6
IG5ldyBVaW50OEFycmF5KDEpLAorICAgICAgZXJyb3I6IElOVkFMSURfRU5VTQorICAgIH0sCisg
ICAgeworICAgICAgZm9ybWF0OiBnbC5MVU1JTkFOQ0VfQUxQSEEsCisgICAgICB0eXBlOiBnbC5V
TlNJR05FRF9CWVRFLAorICAgICAgZGVzdDogbmV3IFVpbnQ4QXJyYXkoMiksCisgICAgICBlcnJv
cjogSU5WQUxJRF9FTlVNCisgICAgfQorICBdOworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGVj
ayBkaXNhbGxvd2VkIGZvcm1hdHMiKTsKKyAgZm9yICh2YXIgdHQgPSAwOyB0dCA8IGJhZEZvcm1h
dHMubGVuZ3RoOyArKyB0dCkgeworICAgIHZhciBpbmZvID0gYmFkRm9ybWF0c1t0dF0KKyAgICB2
YXIgZm9ybWF0ID0gaW5mby5mb3JtYXQ7CisgICAgdmFyIHR5cGUgPSBpbmZvLnR5cGU7CisgICAg
dmFyIGRlc3QgPSBpbmZvLmRlc3Q7CisgICAgdmFyIGVycm9yID0gaW5mby5lcnJvcjsKKyAgICBn
bC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIGZvcm1hdCwgdHlwZSwgZGVzdCk7CisgICAgLy8gbm90
ZSB0aGF0IHRoZSBHTCBlcnJvciBpcyBJTlZBTElEX09QRVJBVElPTiBpZiBib3RoIGZvcm1hdCBh
bmQgdHlwZSBhcmUgaW52YWxpZCwgYnV0CisgICAgLy8gSU5WQUxJRF9FTlVNIGlmIG9ubHkgb25l
IGlzLgorICAgIGdsRXJyb3JTaG91bGRCZSgKKyAgICAgICAgZ2wsIGVycm9yLAorICAgICAgICAi
U2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlYWQgYXMgIiArIHd0dS5nbEVudW1Ub1N0cmluZyhnbCwg
Zm9ybWF0KSArCisgICAgICAgICIgLyAiICsgd3R1LmdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKSk7
CisgIH0KIAotLyoKLWRlYnVnKCIiKTsKLWRlYnVnKCJjaGVjayByZWFkaW5nIHdpdGggbG90cyBv
ZiBkcmF3aW5nIik7Ci13aWR0aCA9IDEwMjQ7Ci1oZWlnaHQgPSAxMDI0OwotY2FudmFzLndpZHRo
ID0gd2lkdGg7Ci1jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwotZ2wudmlld3BvcnQoMCwgMCwgMTAy
NCwgMTAyNCk7Ci12YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFRleHR1cmVkUXVhZChnbCk7Ci12YXIg
bG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXgiKTsKLWdsLmRpc2FibGUo
Z2wuQkxFTkQpOwotZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTsKLXZhciBjb2xvcnMgPSBbWzI1
NSwgMCwgMCwgMV0sIFswLCAyNTUsIDAsIDFdLCBbMCwgMCwgMjU1LCAxXV07Ci12YXIgdGV4dHVy
ZXMgPSBbXTsKLXZhciByZXN1bHRzID0gW107Ci1mb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3Jz
Lmxlbmd0aDsgKytpaSkgewotICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaWkpOwot
ICB2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwotICB3dHUuZmlsbFRleHR1cmUoZ2wsIHRl
eCwgMSwgMSwgY29sb3JzW2lpXSk7Ci0gIHRleHR1cmVzLnB1c2godGV4KTsKLX0KLWZvciAodmFy
IGlpID0gMDsgaWkgPCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7Ci0gIGZvciAodmFyIGpqID0gMDsg
amogPCAzMDAgKyBpaSArIDE7ICsramopIHsKLSAgICBnbC51bmlmb3JtMWkobG9jLCBqaiAlIDMp
OwotICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKLSAgfQotICB2YXIgYnVm
ID0gbmV3IFVpbnQ4QXJyYXkoNCk7Ci0gIGdsLnJlYWRQaXhlbHMoNTEyLCA1MTIsIDEsIDEsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7Ci0gIHJlc3VsdHMucHVzaChidWYpOwotICBm
b3IgKHZhciBrayA9IDA7IGtrIDwgOTk7ICsra2spIHsKLSAgICBnbC51bmlmb3JtMWkobG9jLCAo
amogKyBraykgJSAzKTsKLSAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Cisg
IGRlYnVnKCIiKTsKKyAgZGVidWcoImNoZWNrIHJlYWRpbmcgd2l0aCBsb3RzIG9mIGRyYXdpbmci
KTsKKyAgY29udGludWVUZXN0RnVuYyA9IGNvbnRpbnVlVGVzdFBhcnQyOworICB3aWR0aCA9IDEw
MjQ7CisgIGhlaWdodCA9IDEwMjQ7CisgIGNhbnZhcy53aWR0aCA9IHdpZHRoOworICBjYW52YXMu
aGVpZ2h0ID0gaGVpZ2h0OworICBpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5DT05URVhUX0xPU1Rf
V0VCR0wpIHsKKyAgICBjb250aW51ZVRlc3RQYXJ0MigpOwogICB9CiB9Ci12YXIgYWN0dWFsOwot
dmFyIGV4cGVjdGVkOwotZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkp
IHsKLSAgdmFyIGJ1ZiA9IHJlc3VsdHNbaWldOwotICB2YXIgY29sb3IgPSBjb2xvcnNbaWldOwot
ICBhY3R1YWwgPSBbYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdXTsKLSAgZXhwZWN0ZWQg
PSBbY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10gKiAyNTVdOwotICBzaG91
bGRCZSgiYWN0dWFsIiwgImV4cGVjdGVkIik7Ci19Ci1nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5P
X0VSUk9SLCAidGhlcmUgc2hvdWxkIGJlIG5vIEdMIGVycm9ycyIpOwotKi8KIAotZGVidWcoIiIp
Owotc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdFBhcnQy
KCkgeworICBnbC52aWV3cG9ydCgwLCAwLCAxMDI0LCAxMDI0KTsKKyAgdmFyIHByb2dyYW0gPSB3
dHUuc2V0dXBUZXh0dXJlZFF1YWQoZ2wpOworICB2YXIgbG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sICJ0ZXgiKTsKKyAgZ2wuZGlzYWJsZShnbC5CTEVORCk7CisgIGdsLmRpc2Fi
bGUoZ2wuREVQVEhfVEVTVCk7CisgIHZhciBjb2xvcnMgPSBbWzI1NSwgMCwgMCwgMjU1XSwgWzAs
IDI1NSwgMCwgMjU1XSwgWzAsIDAsIDI1NSwgMjU1XV07CisgIHZhciB0ZXh0dXJlcyA9IFtdOwor
ICB2YXIgcmVzdWx0cyA9IFtdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzLmxlbmd0
aDsgKytpaSkgeworICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBpaSk7CisgICAg
dmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICB3dHUuZmlsbFRleHR1cmUoZ2wsIHRl
eCwgMSwgMSwgY29sb3JzW2lpXSk7CisgICAgdGV4dHVyZXMucHVzaCh0ZXgpOworICB9CisgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgZm9yICh2YXIg
amogPSAwOyBqaiA8IDMwMCArIGlpICsgMTsgKytqaikgeworICAgICAgZ2wudW5pZm9ybTFpKGxv
YywgamogJSAzKTsKKyAgICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKKyAg
ICB9CisgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDQpOworICAgIGdsLnJlYWRQaXhlbHMo
NTEyLCA1MTIsIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgcmVz
dWx0cy5wdXNoKGJ1Zik7CisgICAgZm9yICh2YXIga2sgPSAwOyBrayA8IDk5OyArK2trKSB7Cisg
ICAgICBnbC51bmlmb3JtMWkobG9jLCAoamogKyBraykgJSAzKTsKKyAgICAgIGdsLmRyYXdBcnJh
eXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaWkgPSAwOyBp
aSA8IGNvbG9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgYnVmID0gcmVzdWx0c1tpaV07Cisg
ICAgdmFyIGNvbG9yID0gY29sb3JzW2lpXTsKKyAgICBhY3R1YWwgPSBbYnVmWzBdLCBidWZbMV0s
IGJ1ZlsyXSwgYnVmWzNdXTsKKyAgICBleHBlY3RlZCA9IFtjb2xvclswXSwgY29sb3JbMV0sIGNv
bG9yWzJdLCBjb2xvclszXV07CisgICAgc2hvdWxkQmUoImFjdHVhbCIsICJleHBlY3RlZCIpOwor
ICB9CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJ0aGVyZSBzaG91bGQgYmUg
bm8gR0wgZXJyb3JzIik7CisKKyAgZGVidWcoIiIpOworICBmaW5pc2hUZXN0KCk7Cit9CiA8L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78551</attachid>
            <date>2011-01-11 10:54:16 -0800</date>
            <delta_ts>2011-01-11 11:28:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52068-20110111105415.patch</filename>
            <type>text/plain</type>
            <size>34662</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZWVkIHRvIGNvbnNpZGVyIFVOUEFDS19BTElHTk1FTlQgaW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDY4CisKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IFVzZSBjb21wdXRlSW1hZ2VTaXplSW5CeXRl
cy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
YWdlMkQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVhZFBpeGVscyk6IERpdHRvLCBhbmQgZml4IGEgYnVnIG9uIGdlbmVyYXRpbmcgdGhlIHdyb25n
IGVycm9yLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTJEQmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKTogVXNlIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogQWRk
IGEgbmV3IHBhcmFtZXRlciBhbGlnbm1lbnQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKTogQWRkIG1vcmUgc3VwcG9y
dGVkIGZvcm1hdC90eXBlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXB1dGVJbWFnZVNpemVJbkJ5dGVzKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKwogMjAxMS0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAg
PGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3NTMxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlCiAgICAgICAgIGxvbmcgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0
KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKICAgICAgICAgICAgIGlmIChjbGlw
cGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNs
aXBwZWRZIC0geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKQEAgLTc1
MSwxNiArNzUxLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0K
ICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVm
ZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlw
cGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7
CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBs
ZXZlbCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsID0gMDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDA7Ci0gICAgICAg
ICAgICBib29sIHZhbGlkID0gbV9jb250ZXh0LT5jb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRl
cnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQp
OwotICAgICAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBPd25B
cnJheVB0cjx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhl
aWdodCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvbXBvbmVudHNQ
ZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50ICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHplcm8g
PSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXplcm8pIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC03NjgsMTEgKzc2
Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHplcm8pCi0gICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgp
KTsKLSAgICAgICAgICAgIGlmICh6ZXJvKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKICAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkg
LSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBl
ZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwpAQCAtMjQxMiwzMCAr
MjQwNiwzNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KLSAg
ICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAg
ICBpZiAoIW1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwg
dHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgewotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGlmICghcGl4ZWxzKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBWYWxpZGF0ZSBhcnJh
eSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAoKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIXBpeGVscy0+aXNVbnNpZ25lZEJ5dGVBcnJheSgpKQot
ICAgICAgICB8fCAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiAh
cGl4ZWxzLT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKSkgeworICAgIGlmICghcGl4ZWxzLT5pc1Vu
c2lnbmVkQnl0ZUFycmF5KCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjQ0NCwzNyArMjQ0MywzMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyhsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gQ2FsY3VsYXRl
IGFycmF5IHNpemUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQu
Ci0gICAgdW5zaWduZWQgbG9uZyBieXRlc1BlclJvdyA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5
dGVzUGVyQ29tcG9uZW50ICogd2lkdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBwYWRkaW5nID0gMDsK
LSAgICB1bnNpZ25lZCBsb25nIHJlc2lkdWFsQnl0ZXMgPSBieXRlc1BlclJvdyAlIG1fcGFja0Fs
aWdubWVudDsKLSAgICBpZiAocmVzaWR1YWxCeXRlcykgewotICAgICAgICBwYWRkaW5nID0gbV9w
YWNrQWxpZ25tZW50IC0gcmVzaWR1YWxCeXRlczsKLSAgICAgICAgYnl0ZXNQZXJSb3cgKz0gcGFk
ZGluZzsKLSAgICB9Ci0gICAgLy8gVGhlIGxhc3Qgcm93IG5lZWRzIG5vIHBhZGRpbmcuCi0gICAg
dW5zaWduZWQgbG9uZyB0b3RhbEJ5dGVzID0gYnl0ZXNQZXJSb3cgKiBoZWlnaHQgLSBwYWRkaW5n
OwotICAgIHVuc2lnbmVkIGxvbmcgbnVtID0gdG90YWxCeXRlcyAvIGJ5dGVzUGVyQ29tcG9uZW50
OwotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAvIGJ5dGVzUGVyQ29tcG9uZW50IDwgbnVt
KSB7CisgICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKKyAgICB1bnNpZ25lZCBp
bnQgcGFkZGluZzsKKyAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQs
ICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwaXhlbHMtPmJ5
dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJl
c3MoKTsKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhKTsKLSNpZiBQTEFURk9STShDRykKKyNpZiBPUyhEQVJXSU4pCiAgICAg
Ly8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBp
cyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91
bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKChmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgewotICAgICAg
ICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSk7Ci0gICAgICAgICAgICBmb3IgKGxvbmcgaXkgPSAwOyBpeSA8IGhlaWdodDsg
KytpeSkgewotICAgICAgICAgICAgICAgIGZvciAobG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsr
aXgpIHsKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxzW2NvbXBvbmVudHNQZXJQaXhlbCAtIDFd
ID0gMjU1OwotICAgICAgICAgICAgICAgICAgICBwaXhlbHMgKz0gY29tcG9uZW50c1BlclBpeGVs
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsK
KyAgICBpZiAoIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgeworICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChsb25nIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkp
IHsKKyAgICAgICAgICAgIGZvciAobG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKKyAg
ICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7CisgICAgICAgICAgICAgICAgcGl4ZWxzICs9
IDQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsKICAgICAg
ICAgfQotICAgICAgICAvLyBGSVhNRTogY2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIGRvIHRoZSBz
YW1lIHdpdGggVU5TSUdORURfU0hPUlQuCiAgICAgfQogI2VuZGlmCiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI2NjgsNyArMjY2MSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICB9CiAgICAgaWYgKCFwaXhlbHMgJiYgIWlz
UmVzb3VyY2VTYWZlKCkpIHsKICAgICAgICAgYm9vbCBzdWNjZWVkID0gbV9jb250ZXh0LT50ZXhJ
bWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrQWxpZ25tZW50KTsKICAgICAgICAgaWYgKCFzdWNjZWVkKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0gZWxzZSB7CkBAIC00MDAxLDIwICszOTk0LDEyIEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJD
b21wb25lbnQ7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1l
dGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVu
dCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVk
OworICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRSb3dCeXRlcyA9
IHdpZHRoICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgdW5z
aWduZWQgaW50IHRvdGFsUm93Qnl0ZXMgPSB2YWxpZFJvd0J5dGVzOwotICAgIHVuc2lnbmVkIGlu
dCByZW1haW5kZXIgPSB2YWxpZFJvd0J5dGVzICUgbV91bnBhY2tBbGlnbm1lbnQ7Ci0gICAgaWYg
KHJlbWFpbmRlcikKLSAgICAgICAgdG90YWxSb3dCeXRlcyArPSAobV91bnBhY2tBbGlnbm1lbnQg
LSByZW1haW5kZXIpOwotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAoaGVp
Z2h0IC0gMSkgKiB0b3RhbFJvd0J5dGVzICsgdmFsaWRSb3dCeXRlczsKICAgICBpZiAocGl4ZWxz
LT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA3NTMx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgogI2luY2x1ZGUgIkNoZWNrZWRJbnQuaCIKICNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKIApAQCAtNDMsNjIgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgewogCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50
KEdDM0RlbnVtIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgICAgIHJldHVy
biAxOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKLSAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDoKLSAgICAgICAgICAgIHJldHVybiA0OwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgY29t
cG9uZW50c1BlclBpeGVsKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICAgICAgICAgIHJldHVybiAz
OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICAgICAgcmV0
dXJuIDQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlm
IHdpZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCi0gICAgLy8gZm9ybWF0L3R5cGUgYXJl
IHZhbGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KLSAgICB1bnNpZ25lZCBpbnQg
aW1hZ2VTaXplSW5CeXRlcyhHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRX
aWR0aCh3aWR0aCk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRIZWlnaHQo
aGVpZ2h0KTsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEJ5dGVzUGVyUGl4
ZWwoYnl0ZXNQZXJDb21wb25lbnQodHlwZSkgKiBjb21wb25lbnRzUGVyUGl4ZWwoZm9ybWF0LCB0
eXBlKSk7Ci0gICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRTaXplID0gY2hlY2tl
ZFdpZHRoICogY2hlY2tlZEhlaWdodCAqIGNoZWNrZWRCeXRlc1BlclBpeGVsOwotICAgICAgICBp
ZiAoY2hlY2tlZFNpemUudmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGVja2VkU2l6ZS52
YWx1ZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICB1aW50OF90IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHVpbnQxNl90IHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZh
bHVlID4+IDg7CkBAIC0xMTcsMTcgKzYyLDE5IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
R3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNp
emUpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFj
a0FsaWdubWVudCkKIHsKKyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNr
QWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50
ID09IDgpOwogICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gaW1h
Z2VTaXplSW5CeXRlcyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAo
IXNpemUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgICAgIEdD
M0RlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKKyAgICAgICAgaWYgKGVycm9y
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsKLSAg
ICAgICAgaWYgKCF6ZXJvLmdldCgpKSB7CisgICAgICAgIGlmICghemVybykgewogICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xNTUsNiArMTAyLDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZAogICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90
ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE2MiwxNiArMTEwLDE2IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmQKICAgICB9CiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAg
ICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworICAgICAgICAq
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVieXRlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1
c2hvcnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKGZsb2F0KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9h
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE3OSw2ICsxMjcsNDQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1h
dEFuZAogICAgIHJldHVybiB0cnVlOwogfQogCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYWxpZ25tZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCogaW1hZ2VTaXplSW5CeXRlcywgdW5zaWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcykKK3sK
KyAgICBBU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyk7CisgICAgQVNTRVJUKGFsaWdubWVudCA9PSAx
IHx8IGFsaWdubWVudCA9PSAyIHx8IGFsaWdubWVudCA9PSA0IHx8IGFsaWdubWVudCA9PSA4KTsK
KyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21w
b25lbnQsIGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZieXRlc1BlckNvbXBvbmVudCwgJmNvbXBvbmVudHNQ
ZXJQaXhlbCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
OworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgeworICAgICAgICAqaW1hZ2VTaXplSW5CeXRl
cyA9IDA7CisgICAgICAgIGlmIChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgICAgICpwYWRkaW5n
SW5CeXRlcyA9IDA7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisgICAgfQorICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRWYWx1ZShieXRlc1BlckNv
bXBvbmVudCAqIGNvbXBvbmVudHNQZXJQaXhlbCk7CisgICAgY2hlY2tlZFZhbHVlICo9ICB3aWR0
aDsKKyAgICBpZiAoIWNoZWNrZWRWYWx1ZS52YWxpZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CisgICAgdW5zaWduZWQgaW50IHZhbGlkUm93U2l6
ZSA9IGNoZWNrZWRWYWx1ZS52YWx1ZSgpOworICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsK
KyAgICB1bnNpZ25lZCBpbnQgcmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGlnbm1lbnQ7Cisg
ICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQgLSByZXNpZHVh
bDsKKyAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7CisgICAgfQorICAgIC8vIExhc3Qg
cm93IG5lZWRzIG5vIHBhZGRpbmcuCisgICAgY2hlY2tlZFZhbHVlICo9IChoZWlnaHQgLSAxKTsK
KyAgICBjaGVja2VkVmFsdWUgKz0gdmFsaWRSb3dTaXplOworICAgIGlmICghY2hlY2tlZFZhbHVl
LnZhbGlkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RTsKKyAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IGNoZWNrZWRWYWx1ZS52YWx1ZSgpOworICAgIGlm
IChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKKyAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CShyZXZpc2lvbiA3NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAKIHR5cGVk
ZWYgdW5zaWduZWQgaW50IEdDM0RlbnVtOwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdDM0Rib29s
ZWFuOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0MzRGJpdGZpZWxkOwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIEdDM0R1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0MzRHVzaG9ydDsKIHR5
cGVkZWYgaW50IEdDM0RpbnQ7CiB0eXBlZGVmIGludCBHQzNEc2l6ZWk7CiB0eXBlZGVmIHVuc2ln
bmVkIGludCBHQzNEdWludDsKQEAgLTQ5MSw3ICs0OTMsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBI
ZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlh
bGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVz
aXplZC4KLSAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKKyAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBk
ZWZhdWx0IHNldHRpbmcuCisgICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBhbGlnbm1lbnQgPSA0KTsKIAogICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0OwogCkBAIC01MDcsNiArNTEwLDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGNvbXBv
bmVudHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKIAorICAgIC8vIENvbXB1dGVzIHRoZSBp
bWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwgcGFkZGlu
ZworICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9fRVJST1Ig
aWYgc3VjY2VlZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQgR0wgZXJy
b3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6CisgICAgLy8gICBJTlZBTElE
X1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBwZW5zLgor
ICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCisgICAgR0Mz
RGVudW0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGludCBhbGlnbm1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbWFnZVNpemVJbkJ5dGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogcGFkZGluZ0lu
Qnl0ZXMpOworCiAgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFn
ZSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAogICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEg
YWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCiAgICAgLy8gYW5kIG9iZXlp
bmcgdGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDEtMTAgIFpoZW55YW8gTW8g
IDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOZWVkIHRvIGNvbnNpZGVyIFVOUEFDS19BTElHTk1FTlQgaW4gR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDY4CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9yZWFkLXBpeGVscy10ZXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9yZWFkLXBpeGVscy10ZXN0Lmh0bWw6IFN5bmMgd2l0aCBraHJvbm9zLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzOiBBZGQgZmluaXNo
VGVzdCgpLgorCiAyMDExLTAxLTEwICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtdGVzdC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtdGVzdC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDc1MzgzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVhZC1waXhlbHMtdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSwxNCArMTMxLDIwIEBAIFBBU1MgY29sb3IgcGl4ZWwgYXQgMSwgMSBzaG91bGQgYmUgYWJvdXQK
IFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKIAogY2hlY2sgZGlzYWxsb3dlZCBmb3JtYXRzCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9FTlVNIDogU2hvdWxkIG5vdCBiZSBhYmxl
IHRvIHJlYWQgYXMgUkdCIC8gVU5TSUdORURfQllURQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogU2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlYWQg
YXMgUkdCIC8gVU5TSUdORURfQllURQogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfT1BFUkFUSU9OIDogU2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlYWQgYXMgUkdCIC8g
VU5TSUdORURfU0hPUlRfNV82XzUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0VOVU0gOiBTaG91bGQgbm90IGJlIGFibGUgdG8gcmVhZCBhcyBSR0JBIC8gVU5TSUdO
RURfU0hPUlRfNV81XzVfMQotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRU5VTSA6IFNob3VsZCBub3QgYmUgYWJsZSB0byByZWFkIGFzIFJHQkEgLyBVTlNJR05FRF9T
SE9SVF80XzRfNF80Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9F
TlVNIDogU2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlYWQgYXMgQUxQSEEgLyBVTlNJR05FRF9CWVRF
CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiBT
aG91bGQgbm90IGJlIGFibGUgdG8gcmVhZCBhcyBSR0JBIC8gVU5TSUdORURfU0hPUlRfNV81XzVf
MQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDog
U2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlYWQgYXMgUkdCQSAvIFVOU0lHTkVEX1NIT1JUXzRfNF80
XzQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6
IFNob3VsZCBub3QgYmUgYWJsZSB0byByZWFkIGFzIEFMUEhBIC8gVU5TSUdORURfQllURQogUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRU5VTSA6IFNob3VsZCBub3Qg
YmUgYWJsZSB0byByZWFkIGFzIExVTUlOQU5DRSAvIFVOU0lHTkVEX0JZVEUKIFBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0VOVU0gOiBTaG91bGQgbm90IGJlIGFibGUg
dG8gcmVhZCBhcyBMVU1JTkFOQ0VfQUxQSEEgLyBVTlNJR05FRF9CWVRFCiAKK2NoZWNrIHJlYWRp
bmcgd2l0aCBsb3RzIG9mIGRyYXdpbmcKK1BBU1MgYWN0dWFsIGlzIGV4cGVjdGVkCitQQVNTIGFj
dHVhbCBpcyBleHBlY3RlZAorUEFTUyBhY3R1YWwgaXMgZXhwZWN0ZWQKK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy10ZXN0Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMt
dGVzdC5odG1sCShyZXZpc2lvbiA3NTM4MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3JlYWQtcGl4ZWxzLXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTczICsyMCwy
MDAgQEAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleAogdmFyIGdsID0g
Y3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7CiAKIGlmICh3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFt
ZXdvcmspIHsKLSAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayhmYWxzZSk7CisgICB3
aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmsodHJ1ZSk7CiB9CiAKK3ZhciBhY3R1YWw7Cit2
YXIgZXhwZWN0ZWQ7CiB2YXIgd2lkdGggPSAyOwogdmFyIGhlaWdodCA9IDI7Cit2YXIgY29udGlu
dWVUZXN0RnVuYyA9IGNvbnRpbnVlVGVzdFBhcnQxOwogCiBnbC5jbGVhckNvbG9yKDEsIDEsIDEs
IDEpOwogZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CiAKIC8vIFJlc2l6ZSB0aGUgY2Fu
dmFzIHRvIDJ4Mi4gVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGdldCBzdHVmZiBpbiB0aGUgYmFja2J1
ZmZlci4KIC8vIHRoYXQgc2hvdWxkbid0IGJlIHRoZXJlLgorY2FudmFzLmFkZEV2ZW50TGlzdGVu
ZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIiwgY29udGludWVUZXN0QWZ0ZXJDb250ZXh0UmVzdG9y
ZWQsIGZhbHNlKTsKIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogY2FudmFzLmhlaWdodCA9IGhlaWdo
dDsKLQotZ2wuY2xlYXJDb2xvcigwLjUsIDAuNywgMS4wLCAxKTsKLWdsLmNsZWFyKGdsLkNPTE9S
X0JVRkZFUl9CSVQpOwotCi12YXIgaW5uZXJDb2xvciA9IFswLjUsIDAuNywgMS4wLCAxXTsKLXZh
ciBvdXRlckNvbG9yID0gWzAsIDAsIDAsIDBdOwotCi12YXIgdGVzdHMgPSBbCi0gIHsgbXNnOiAn
aW4gcmFuZ2UnLCBjaGVja0NvbG9yOiBpbm5lckNvbG9yLCB4OiAgMCwgeTogIDAsCi0gICAgb25l
Q29sb3I6IGlubmVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9LAotICB7IG1zZzogJ29mZiB0b3Ag
bGVmdCcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6IC0xLCB5OiAtMSwKLSAgICBvbmVDb2xv
cjogaW5uZXJDb2xvciwgb25lWDogMSwgb25lWTogMX0sCi0gIHsgbXNnOiAnb2ZmIGJvdHRvbSBy
aWdodCcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6ICAxLCB5OiAgMSwKLSAgICBvbmVDb2xv
cjogaW5uZXJDb2xvciwgb25lWDogMCwgb25lWTogMH0sCi0gIHsgbXNnOiAnY29tcGxldGVseSBv
ZmYgdG9wICcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6ICAwLCB5OiAtMiwKLSAgICBvbmVD
b2xvcjogb3V0ZXJDb2xvciwgb25lWDogMCwgb25lWTogMH0sCi0gIHsgbXNnOiAnY29tcGxldGVs
eSBvZmYgYm90dG9tJywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogIDAsIHk6ICAyLAotICAg
IG9uZUNvbG9yOiBvdXRlckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKLSAgeyBtc2c6ICdjb21w
bGV0ZWx5IG9mZiBsZWZ0JywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogLTIsIHk6ICAwLAot
ICAgIG9uZUNvbG9yOiBvdXRlckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKLSAgeyBtc2c6ICdj
b21wbGV0ZWxleSBvZmYgcmlnaHQnLCBjaGVja0NvbG9yOiBvdXRlckNvbG9yLCB4OiAgMiwgeTog
IDAsCi0gICAgb25lQ29sb3I6IG91dGVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9Ci1dOwotCi1m
b3IgKHZhciB0dCA9IDA7IHR0IDwgdGVzdHMubGVuZ3RoOyArK3R0KSB7Ci0gIHZhciB0ZXN0ID0g
dGVzdHNbdHRdOwotICBkZWJ1ZygiIik7Ci0gIGRlYnVnKCJjaGVja2luZzogIiArIHRlc3QubXNn
KTsKLSAgY2hlY2tCdWZmZXIodGVzdC5jaGVja0NvbG9yLCB0ZXN0LngsIHRlc3QueSwKLSAgICAg
ICAgICAgICAgdGVzdC5vbmVDb2xvciwgdGVzdC5vbmVYLCB0ZXN0Lm9uZVkpOworaWYgKGdsLmdl
dEVycm9yKCkgIT0gZ2wuQ09OVEVYVF9MT1NUX1dFQkdMKSB7CisgIGNvbnRpbnVlVGVzdFBhcnQx
KCk7CiB9CiAKLWdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJ0aGVyZSBzaG91bGQg
YmUgbm8gR0wgZXJyb3JzIik7CitmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRlckNvbnRleHRSZXN0
b3JlZCgpIHsKKyAgd2luZG93LmdsID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7CisgIHZhciBm
dW5jID0gY29udGludWVUZXN0RnVuYzsKKyAgd2luZG93LmNvbnRpbnVlVGVzdEZ1bmMgPSBmdW5j
dGlvbigpIHsgdGVzdEZhaWxlZCgic2hvdWxkIG5vdCBiZSBoZXJlIik7IH07CisgIGZ1bmMoKTsK
K30KKworZnVuY3Rpb24gY29udGludWVUZXN0UGFydDEoKSB7CisgIGdsLmNsZWFyQ29sb3IoMC41
LCAwLjcsIDEuMCwgMSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworCisgIHZh
ciBpbm5lckNvbG9yID0gWzAuNSwgMC43LCAxLjAsIDFdOworICB2YXIgb3V0ZXJDb2xvciA9IFsw
LCAwLCAwLCAwXTsKKworICB2YXIgdGVzdHMgPSBbCisgICAgeyBtc2c6ICdpbiByYW5nZScsIGNo
ZWNrQ29sb3I6IGlubmVyQ29sb3IsIHg6ICAwLCB5OiAgMCwKKyAgICAgIG9uZUNvbG9yOiBpbm5l
ckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKKyAgICB7IG1zZzogJ29mZiB0b3AgbGVmdCcsIGNo
ZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6IC0xLCB5OiAtMSwKKyAgICAgIG9uZUNvbG9yOiBpbm5l
ckNvbG9yLCBvbmVYOiAxLCBvbmVZOiAxfSwKKyAgICB7IG1zZzogJ29mZiBib3R0b20gcmlnaHQn
LCBjaGVja0NvbG9yOiBvdXRlckNvbG9yLCB4OiAgMSwgeTogIDEsCisgICAgICBvbmVDb2xvcjog
aW5uZXJDb2xvciwgb25lWDogMCwgb25lWTogMH0sCisgICAgeyBtc2c6ICdjb21wbGV0ZWx5IG9m
ZiB0b3AgJywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogIDAsIHk6IC0yLAorICAgICAgb25l
Q29sb3I6IG91dGVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9LAorICAgIHsgbXNnOiAnY29tcGxl
dGVseSBvZmYgYm90dG9tJywgY2hlY2tDb2xvcjogb3V0ZXJDb2xvciwgeDogIDAsIHk6ICAyLAor
ICAgICAgb25lQ29sb3I6IG91dGVyQ29sb3IsIG9uZVg6IDAsIG9uZVk6IDB9LAorICAgIHsgbXNn
OiAnY29tcGxldGVseSBvZmYgbGVmdCcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3IsIHg6IC0yLCB5
OiAgMCwKKyAgICAgIG9uZUNvbG9yOiBvdXRlckNvbG9yLCBvbmVYOiAwLCBvbmVZOiAwfSwKKyAg
ICB7IG1zZzogJ2NvbXBsZXRlbGV5IG9mZiByaWdodCcsIGNoZWNrQ29sb3I6IG91dGVyQ29sb3Is
IHg6ICAyLCB5OiAgMCwKKyAgICAgIG9uZUNvbG9yOiBvdXRlckNvbG9yLCBvbmVYOiAwLCBvbmVZ
OiAwfQorICBdOworCisgIGZvciAodmFyIHR0ID0gMDsgdHQgPCB0ZXN0cy5sZW5ndGg7ICsrdHQp
IHsKKyAgICB2YXIgdGVzdCA9IHRlc3RzW3R0XTsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWco
ImNoZWNraW5nOiAiICsgdGVzdC5tc2cpOworICAgIGNoZWNrQnVmZmVyKHRlc3QuY2hlY2tDb2xv
ciwgdGVzdC54LCB0ZXN0LnksCisgICAgICAgICAgICAgICAgdGVzdC5vbmVDb2xvciwgdGVzdC5v
bmVYLCB0ZXN0Lm9uZVkpOworICB9CisKKyAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
UiwgInRoZXJlIHNob3VsZCBiZSBubyBHTCBlcnJvcnMiKTsKIAotZnVuY3Rpb24gY2hlY2tCdWZm
ZXIoY2hlY2tDb2xvciwgeCwgeSwgb25lQ29sb3IsIG9uZVgsIG9uZVkpIHsKLSAgdmFyIGJ1ZiA9
IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gIGdsLnJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKLSAgZm9y
ICh2YXIgeXkgPSAwOyB5eSA8IGhlaWdodDsgKyt5eSkgewotICAgIGZvciAodmFyIHh4ID0gMDsg
eHggPCB3aWR0aDsgKyt4eCkgewotICAgICAgdmFyIG9mZnNldCA9ICh5eSAqIHdpZHRoICsgeHgp
ICogNDsKLSAgICAgIHZhciBleHBlY3RlZENvbG9ycyA9IChvbmVYID09IHh4ICYmIG9uZVkgPT0g
eXkpID8gb25lQ29sb3IgOiBjaGVja0NvbG9yOwotICAgICAgZm9yICh2YXIgY2MgPSAwOyBjYyA8
IDQ7ICsrY2MpIHsKLSAgICAgICAgdmFyIGV4cGVjdGVkQ29sb3IgPSBleHBlY3RlZENvbG9yc1tj
Y10gKiAyNTU7Ci0gICAgICAgIHZhciBjb2xvciA9IGJ1ZltvZmZzZXQgKyBjY107Ci0gICAgICAg
IHZhciBkaWZmID0gTWF0aC5hYnMoZXhwZWN0ZWRDb2xvciAtIGNvbG9yKTsKLSAgICAgICAgYXNz
ZXJ0TXNnKGRpZmYgPCAzLAotICAgICAgICAgICAgICAgICAgImNvbG9yIHBpeGVsIGF0ICIgKyB4
eCArICIsICIgKyB5eSArICIgc2hvdWxkIGJlIGFib3V0ICIgKyBleHBlY3RlZENvbG9yKTsKKyAg
ZnVuY3Rpb24gY2hlY2tCdWZmZXIoY2hlY2tDb2xvciwgeCwgeSwgb25lQ29sb3IsIG9uZVgsIG9u
ZVkpIHsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsK
KyAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIGJ1Zik7CisgICAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGhlaWdodDsgKyt5eSkg
eworICAgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8IHdpZHRoOyArK3h4KSB7CisgICAgICAgIHZh
ciBvZmZzZXQgPSAoeXkgKiB3aWR0aCArIHh4KSAqIDQ7CisgICAgICAgIHZhciBleHBlY3RlZENv
bG9ycyA9IChvbmVYID09IHh4ICYmIG9uZVkgPT0geXkpID8gb25lQ29sb3IgOiBjaGVja0NvbG9y
OworICAgICAgICBmb3IgKHZhciBjYyA9IDA7IGNjIDwgNDsgKytjYykgeworICAgICAgICAgIHZh
ciBleHBlY3RlZENvbG9yID0gZXhwZWN0ZWRDb2xvcnNbY2NdICogMjU1OworICAgICAgICAgIHZh
ciBjb2xvciA9IGJ1ZltvZmZzZXQgKyBjY107CisgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFi
cyhleHBlY3RlZENvbG9yIC0gY29sb3IpOworICAgICAgICAgIGFzc2VydE1zZyhkaWZmIDwgMywK
KyAgICAgICAgICAgICAgICAgICAgImNvbG9yIHBpeGVsIGF0ICIgKyB4eCArICIsICIgKyB5eSAr
ICIgc2hvdWxkIGJlIGFib3V0ICIgKyBleHBlY3RlZENvbG9yKTsKKyAgICAgICAgfQogICAgICAg
fQogICAgIH0KICAgfQotfQogCi12YXIgYmFkRm9ybWF0cyA9IFsKLSAgewotICAgIGZvcm1hdDog
Z2wuUkdCLAotICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCi0gICAgZGVzdDogbmV3IFVpbnQ4
QXJyYXkoMykKLSAgfSwKLSAgewotICAgIGZvcm1hdDogZ2wuUkdCLAotICAgIHR5cGU6IGdsLlVO
U0lHTkVEX1NIT1JUXzVfNl81LAotICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDMpCi0gIH0sCi0g
IHsKLSAgICBmb3JtYXQ6IGdsLlJHQkEsCi0gICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNV81
XzVfMSwKLSAgICBkZXN0OiBuZXcgVWludDE2QXJyYXkoMSkKLSAgfSwKLSAgewotICAgIGZvcm1h
dDogZ2wuUkdCQSwKLSAgICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80LAotICAgIGRl
c3Q6IG5ldyBVaW50MTZBcnJheSgxKQotICB9LAotICB7Ci0gICAgZm9ybWF0OiBnbC5BTFBIQSwK
LSAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAotICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDEp
Ci0gIH0sCi0gIHsKLSAgICBmb3JtYXQ6IGdsLkxVTUlOQU5DRSwKLSAgICB0eXBlOiBnbC5VTlNJ
R05FRF9CWVRFLAotICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDEpIH0sCi0gIHsKLSAgICBmb3Jt
YXQ6IGdsLkxVTUlOQU5DRV9BTFBIQSwKLSAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAotICAg
IGRlc3Q6IG5ldyBVaW50OEFycmF5KDIpCi0gIH0KLV07Ci1kZWJ1ZygiIik7Ci1kZWJ1ZygiY2hl
Y2sgZGlzYWxsb3dlZCBmb3JtYXRzIik7Ci1mb3IgKHZhciB0dCA9IDA7IHR0IDwgYmFkRm9ybWF0
cy5sZW5ndGg7ICsrIHR0KSB7Ci0gIHZhciBpbmZvID0gYmFkRm9ybWF0c1t0dF0KLSAgdmFyIGZv
cm1hdCA9IGluZm8uZm9ybWF0OwotICB2YXIgdHlwZSA9IGluZm8udHlwZTsKLSAgdmFyIGRlc3Qg
PSBpbmZvLmRlc3Q7Ci0gIGdsLnJlYWRQaXhlbHMoMCwgMCwgMSwgMSwgZm9ybWF0LCB0eXBlLCBk
ZXN0KTsKLSAgLy8gbm90ZSB0aGF0IHRoZSBHTCBlcnJvciBpcyBJTlZBTElEX09QRVJBVElPTiBp
ZiBib3RoIGZvcm1hdCBhbmQgdHlwZSBhcmUgaW52YWxpZCwgYnV0Ci0gIC8vIElOVkFMSURfRU5V
TSBpZiBvbmx5IG9uZSBpcy4KLSAgZ2xFcnJvclNob3VsZEJlKAotICAgICAgZ2wsIChmb3JtYXQg
PT0gZ2wuUkdCQSB8fCB0eXBlID09IGdsLlVOU0lHTkVEX0JZVEUpID8gZ2wuSU5WQUxJRF9FTlVN
IDogZ2wuSU5WQUxJRF9PUEVSQVRJT04sCi0gICAgICAiU2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJl
YWQgYXMgIiArIHd0dS5nbEVudW1Ub1N0cmluZyhnbCwgZm9ybWF0KSArCi0gICAgICAiIC8gIiAr
IHd0dS5nbEVudW1Ub1N0cmluZyhnbCwgdHlwZSkpOwotfQorICB2YXIgYmFkRm9ybWF0cyA9IFsK
KyAgICB7CisgICAgICBmb3JtYXQ6IGdsLlJHQiwKKyAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZ
VEUsCisgICAgICBkZXN0OiBuZXcgVWludDhBcnJheSgzKSwKKyAgICAgIGVycm9yOiBnbC5JTlZB
TElEX09QRVJBVElPTgorICAgIH0sCisgICAgeworICAgICAgZm9ybWF0OiBnbC5SR0IsCisgICAg
ICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81XzZfNSwKKyAgICAgIGRlc3Q6IG5ldyBVaW50OEFy
cmF5KDMpLAorICAgICAgZXJyb3I6IGdsLklOVkFMSURfT1BFUkFUSU9OCisgICAgfSwKKyAgICB7
CisgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81
XzVfNV8xLAorICAgICAgZGVzdDogbmV3IFVpbnQxNkFycmF5KDEpLAorICAgICAgZXJyb3I6IGds
LklOVkFMSURfT1BFUkFUSU9OCisgICAgfSwKKyAgICB7CisgICAgICBmb3JtYXQ6IGdsLlJHQkEs
CisgICAgICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80LAorICAgICAgZGVzdDogbmV3
IFVpbnQxNkFycmF5KDEpLAorICAgICAgZXJyb3I6IGdsLklOVkFMSURfT1BFUkFUSU9OCisgICAg
fSwKKyAgICB7CisgICAgICBmb3JtYXQ6IGdsLkFMUEhBLAorICAgICAgdHlwZTogZ2wuVU5TSUdO
RURfQllURSwKKyAgICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDEpLAorICAgICAgZXJyb3I6IGds
LklOVkFMSURfT1BFUkFUSU9OCisgICAgfSwKKyAgICB7CisgICAgICBmb3JtYXQ6IGdsLkxVTUlO
QU5DRSwKKyAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICBkZXN0OiBuZXcgVWlu
dDhBcnJheSgxKSwKKyAgICAgIGVycm9yOiBnbC5JTlZBTElEX0VOVU0KKyAgICB9LAorICAgIHsK
KyAgICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNFX0FMUEhBLAorICAgICAgdHlwZTogZ2wuVU5TSUdO
RURfQllURSwKKyAgICAgIGRlc3Q6IG5ldyBVaW50OEFycmF5KDIpLAorICAgICAgZXJyb3I6IGds
LklOVkFMSURfRU5VTQorICAgIH0KKyAgXTsKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiY2hlY2sg
ZGlzYWxsb3dlZCBmb3JtYXRzIik7CisgIGZvciAodmFyIHR0ID0gMDsgdHQgPCBiYWRGb3JtYXRz
Lmxlbmd0aDsgKysgdHQpIHsKKyAgICB2YXIgaW5mbyA9IGJhZEZvcm1hdHNbdHRdCisgICAgdmFy
IGZvcm1hdCA9IGluZm8uZm9ybWF0OworICAgIHZhciB0eXBlID0gaW5mby50eXBlOworICAgIHZh
ciBkZXN0ID0gaW5mby5kZXN0OworICAgIHZhciBlcnJvciA9IGluZm8uZXJyb3I7CisgICAgZ2wu
cmVhZFBpeGVscygwLCAwLCAxLCAxLCBmb3JtYXQsIHR5cGUsIGRlc3QpOworICAgIC8vIG5vdGUg
dGhhdCB0aGUgR0wgZXJyb3IgaXMgSU5WQUxJRF9PUEVSQVRJT04gaWYgYm90aCBmb3JtYXQgYW5k
IHR5cGUgYXJlIGludmFsaWQsIGJ1dAorICAgIC8vIElOVkFMSURfRU5VTSBpZiBvbmx5IG9uZSBp
cy4KKyAgICBnbEVycm9yU2hvdWxkQmUoCisgICAgICAgIGdsLCBlcnJvciwKKyAgICAgICAgIlNo
b3VsZCBub3QgYmUgYWJsZSB0byByZWFkIGFzICIgKyB3dHUuZ2xFbnVtVG9TdHJpbmcoZ2wsIGZv
cm1hdCkgKworICAgICAgICAiIC8gIiArIHd0dS5nbEVudW1Ub1N0cmluZyhnbCwgdHlwZSkpOwor
ICB9CiAKLS8qCi1kZWJ1ZygiIik7Ci1kZWJ1ZygiY2hlY2sgcmVhZGluZyB3aXRoIGxvdHMgb2Yg
ZHJhd2luZyIpOwotd2lkdGggPSAxMDI0OwotaGVpZ2h0ID0gMTAyNDsKLWNhbnZhcy53aWR0aCA9
IHdpZHRoOwotY2FudmFzLmhlaWdodCA9IGhlaWdodDsKLWdsLnZpZXdwb3J0KDAsIDAsIDEwMjQs
IDEwMjQpOwotdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBUZXh0dXJlZFF1YWQoZ2wpOwotdmFyIGxv
YyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4Iik7Ci1nbC5kaXNhYmxlKGds
LkJMRU5EKTsKLWdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7Ci12YXIgY29sb3JzID0gW1syNTUs
IDAsIDAsIDFdLCBbMCwgMjU1LCAwLCAxXSwgWzAsIDAsIDI1NSwgMV1dOwotdmFyIHRleHR1cmVz
ID0gW107Ci12YXIgcmVzdWx0cyA9IFtdOwotZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5s
ZW5ndGg7ICsraWkpIHsKLSAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGlpKTsKLSAg
dmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKLSAgd3R1LmZpbGxUZXh0dXJlKGdsLCB0ZXgs
IDEsIDEsIGNvbG9yc1tpaV0pOwotICB0ZXh0dXJlcy5wdXNoKHRleCk7Ci19Ci1mb3IgKHZhciBp
aSA9IDA7IGlpIDwgY29sb3JzLmxlbmd0aDsgKytpaSkgewotICBmb3IgKHZhciBqaiA9IDA7IGpq
IDwgMzAwICsgaWkgKyAxOyArK2pqKSB7Ci0gICAgZ2wudW5pZm9ybTFpKGxvYywgamogJSAzKTsK
LSAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Ci0gIH0KLSAgdmFyIGJ1ZiA9
IG5ldyBVaW50OEFycmF5KDQpOwotICBnbC5yZWFkUGl4ZWxzKDUxMiwgNTEyLCAxLCAxLCBnbC5S
R0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOwotICByZXN1bHRzLnB1c2goYnVmKTsKLSAgZm9y
ICh2YXIga2sgPSAwOyBrayA8IDk5OyArK2trKSB7Ci0gICAgZ2wudW5pZm9ybTFpKGxvYywgKGpq
ICsga2spICUgMyk7Ci0gICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworICBk
ZWJ1ZygiIik7CisgIGRlYnVnKCJjaGVjayByZWFkaW5nIHdpdGggbG90cyBvZiBkcmF3aW5nIik7
CisgIGNvbnRpbnVlVGVzdEZ1bmMgPSBjb250aW51ZVRlc3RQYXJ0MjsKKyAgd2lkdGggPSAxMDI0
OworICBoZWlnaHQgPSAxMDI0OworICBjYW52YXMud2lkdGggPSB3aWR0aDsKKyAgY2FudmFzLmhl
aWdodCA9IGhlaWdodDsKKyAgaWYgKGdsLmdldEVycm9yKCkgIT0gZ2wuQ09OVEVYVF9MT1NUX1dF
QkdMKSB7CisgICAgY29udGludWVUZXN0UGFydDIoKTsKICAgfQogfQotdmFyIGFjdHVhbDsKLXZh
ciBleHBlY3RlZDsKLWZvciAodmFyIGlpID0gMDsgaWkgPCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7
Ci0gIHZhciBidWYgPSByZXN1bHRzW2lpXTsKLSAgdmFyIGNvbG9yID0gY29sb3JzW2lpXTsKLSAg
YWN0dWFsID0gW2J1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXV07Ci0gIGV4cGVjdGVkID0g
W2NvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdICogMjU1XTsKLSAgc2hvdWxk
QmUoImFjdHVhbCIsICJleHBlY3RlZCIpOwotfQotZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19F
UlJPUiwgInRoZXJlIHNob3VsZCBiZSBubyBHTCBlcnJvcnMiKTsKLSovCiAKLWRlYnVnKCIiKTsK
LXN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CitmdW5jdGlvbiBjb250aW51ZVRlc3RQYXJ0Migp
IHsKKyAgZ2wudmlld3BvcnQoMCwgMCwgMTAyNCwgMTAyNCk7CisgIHZhciBwcm9ncmFtID0gd3R1
LnNldHVwVGV4dHVyZWRRdWFkKGdsKTsKKyAgdmFyIGxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCAidGV4Iik7CisgIGdsLmRpc2FibGUoZ2wuQkxFTkQpOworICBnbC5kaXNhYmxl
KGdsLkRFUFRIX1RFU1QpOworICB2YXIgY29sb3JzID0gW1syNTUsIDAsIDAsIDI1NV0sIFswLCAy
NTUsIDAsIDI1NV0sIFswLCAwLCAyNTUsIDI1NV1dOworICB2YXIgdGV4dHVyZXMgPSBbXTsKKyAg
dmFyIHJlc3VsdHMgPSBbXTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7
ICsraWkpIHsKKyAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaWkpOworICAgIHZh
ciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgd3R1LmZpbGxUZXh0dXJlKGdsLCB0ZXgs
IDEsIDEsIGNvbG9yc1tpaV0pOworICAgIHRleHR1cmVzLnB1c2godGV4KTsKKyAgfQorICBmb3Ig
KHZhciBpaSA9IDA7IGlpIDwgY29sb3JzLmxlbmd0aDsgKytpaSkgeworICAgIGZvciAodmFyIGpq
ID0gMDsgamogPCAzMDAgKyBpaSArIDE7ICsramopIHsKKyAgICAgIGdsLnVuaWZvcm0xaShsb2Ms
IGpqICUgMyk7CisgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisgICAg
fQorICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSg0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDUx
MiwgNTEyLCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIHJlc3Vs
dHMucHVzaChidWYpOworICAgIGZvciAodmFyIGtrID0gMDsga2sgPCA5OTsgKytraykgeworICAg
ICAgZ2wudW5pZm9ybTFpKGxvYywgKGpqICsga2spICUgMyk7CisgICAgICBnbC5kcmF3QXJyYXlz
KGdsLlRSSUFOR0xFUywgMCwgNik7CisgICAgfQorICB9CisgIGZvciAodmFyIGlpID0gMDsgaWkg
PCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIGJ1ZiA9IHJlc3VsdHNbaWldOworICAg
IHZhciBjb2xvciA9IGNvbG9yc1tpaV07CisgICAgYWN0dWFsID0gW2J1ZlswXSwgYnVmWzFdLCBi
dWZbMl0sIGJ1ZlszXV07CisgICAgZXhwZWN0ZWQgPSBbY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xv
clsyXSwgY29sb3JbM11dOworICAgIHNob3VsZEJlKCJhY3R1YWwiLCAiZXhwZWN0ZWQiKTsKKyAg
fQorICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidGhlcmUgc2hvdWxkIGJlIG5v
IEdMIGVycm9ycyIpOworCisgIGRlYnVnKCIiKTsKKyAgZmluaXNoVGVzdCgpOworfQogPC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzCShyZXZpc2lvbiA3NTM4
MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNywxOCBAQCBmdW5jdGlvbiBub25LaHJvbm9z
RnJhbWV3b3JrTm90aWZ5RG9uZSgpCiAgIH0KIH0KIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsK
KyAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2NyaXB0IikKKyAgZXBpbG9ndWUub25sb2FkID0gZnVuY3Rpb24oKSB7
CisgICAgaWYgKHdpbmRvdy5ub25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSkgeworICAgICAg
d2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7CisgICAgfQorICB9OworICBl
cGlsb2d1ZS5zcmMgPSAiLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7CisgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCiAvLwogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAK
</data>
<flag name="review"
          id="69884"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>