<?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>43608</bug_id>
          
          <creation_ts>2010-08-05 22:03:33 -0700</creation_ts>
          <short_desc>[chromium] Implement GLES2Canvas/Texture in terms of GraphicsContext3D instead of direct OpenGL calls</short_desc>
          <delta_ts>2010-08-06 14:59:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>fishd</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261087</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 22:03:33 -0700</bug_when>
    <thetext>[chromium] Implement GLES2Canvas/Texture in terms of GraphicsContext3D instead of direct OpenGL calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261090</commentid>
    <comment_count>1</comment_count>
      <attachid>63691</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 22:09:41 -0700</bug_when>
    <thetext>Created attachment 63691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261091</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 22:10:37 -0700</bug_when>
    <thetext>What say ye, Stephen?

I don&apos;t plan to land this until the GraphicsContext3D change lands in https://bugs.webkit.org/show_bug.cgi?id=43362 (assuming it does), but would appreciate a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261094</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 22:22:15 -0700</bug_when>
    <thetext>BTW, we should rename these classes as well and move them somewhere common at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261254</commentid>
    <comment_count>4</comment_count>
      <attachid>63691</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-06 07:52:22 -0700</bug_when>
    <thetext>Comment on attachment 63691
Patch

WebCore/platform/graphics/chromium/GLES2Canvas.cpp:117
 +          m_context-&gt;deleteBuffer(m_quadVertices);
While you&apos;re there, you should probably change this to m_quadIndices (bug).

WebCore/platform/graphics/chromium/GLES2Canvas.cpp:138
 +      m_context-&gt;prepareTexture();
I think this prepareTexture() call is wrong.

WebCore/platform/graphics/chromium/GLES2Canvas.cpp:167
 +      m_context-&gt;prepareTexture();
Same as above, prepareTexture() can go away (I think).

WebCore/platform/graphics/chromium/GLES2Texture.cpp:70
 +          return 0;
I think this will leak the texture.  If you&apos;re going to early-return here, you should deleteTexture().  It might be better to just move this check to the start of the function.

WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:801
 +          platformContext()-&gt;restore();
Rather than adding a platformContext()-&gt;restore here, I&apos;d prefer that this block be moved above platformContext()-&gt;save().

Looks good other than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261376</commentid>
    <comment_count>5</comment_count>
      <attachid>63746</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 11:45:29 -0700</bug_when>
    <thetext>Created attachment 63746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261377</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 11:46:03 -0700</bug_when>
    <thetext>PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261386</commentid>
    <comment_count>7</comment_count>
      <attachid>63750</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 12:05:41 -0700</bug_when>
    <thetext>Created attachment 63750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261395</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-06 12:49:27 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=63750) [details]
&gt; Patch

LGTM (as a non-reviewer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261494</commentid>
    <comment_count>9</comment_count>
      <attachid>63750</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-06 14:47:17 -0700</bug_when>
    <thetext>Comment on attachment 63750
Patch

WebCore/ChangeLog:10
 +          applying the regex s/gl([A-Z])/m_context-&gt;%1&lt;/ and removing unnecessary makeCurrent() calls.
I approve the use of regular expressions to describe the changes being made. I would expect nothing less from you thereon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261508</commentid>
    <comment_count>10</comment_count>
      <attachid>63750</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 14:59:15 -0700</bug_when>
    <thetext>Comment on attachment 63750
Patch

Clearing flags on attachment: 63750

Committed r64872: &lt;http://trac.webkit.org/changeset/64872&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261509</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 14:59:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63691</attachid>
            <date>2010-08-05 22:09:41 -0700</date>
            <delta_ts>2010-08-06 11:45:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43608-20100805220939.patch</filename>
            <type>text/plain</type>
            <size>38913</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uZWRjODllNzM5YWQ3OGM3
OTU2NjhiN2VmOTQ3OWRmYTU4MzE3YTEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IEdMRVMyQ2Fu
dmFzL1RleHR1cmUgaW4gdGVybXMgb2YgR3JhcGhpY3NDb250ZXh0M0QgaW5zdGVhZCBvZiBkaXJl
Y3QgT3BlbkdMIGNhbGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MzYwOAorCisgICAgICAgIFRoaXMgY29udmVydHMgYWxsIE9wZW5HTCBjYWxscyBp
biBHTEVTMihDYW52YXN8VGV4dHVyZSkgdG8gY2FsbHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgR3Jh
cGhpY3NDb250ZXh0M0QKKyAgICAgICAgQVBJLCBkdWUgdG8gZmVlZGJhY2sgb24gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzYyLiAgTmVhcmx5IGFsbCB0aGUgY2hh
bmdlcyBhcmUKKyAgICAgICAgYXBwbHlpbmcgdGhlIHJlZ2V4IHMvZ2woW0EtWl0pL21fY29udGV4
dC0+JTE8LyBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgbWFrZUN1cnJlbnQoKSBjYWxscy4KKyAg
ICAgICAgT3RoZXIgY2hhbmdlcyBoaWxpZ2h0ZWQgYmVsb3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
ZmZpbmVUbzN4Myk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDb21w
b3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0UXVhZFZl
cnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRRdWFkSW5kaWNlcyk6
CisgICAgICAgICAgICAtIHVzZSBuZXcgdHlwZWQgWFhBcnJheSBjbGFzc2VzIGZvciBidWZmZXIg
dXBsb2FkcworICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6Z2V0U2ltcGxlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Z2V0VGV4UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2hlY2tHTEVy
cm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNvbnRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMlRleHR1cmU6OkdMRVMyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MlRleHR1cmU6On5HTEVTMlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0
dXJlOjpiaW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRl
eHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6
CisgICAgICAgICAgICAtIGFkZCBhIG1pc3NpbmcgcmVzdG9yZSgpIGNhbGwgdG8gdGhlIEgvVyBw
YXRoCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd0JpdG1hcEdMRVMyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAg
ICAgICAgIC0gYXZvaWQgYXBwbHlpbmcgQ1RNIHRvIHVwbG9hZHMKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKwogMjAx
MC0wOC0wNSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRleCA5ZmM4OTE3YzQ2NzUwMzlkOTEzOWEw
ZWZkYzQ3ZDhlYTE3ZTczZDg3Li4zNzY2YzY2OTVhNDg2MjNhMWNlODcxZWUwNTRkYTc2NDc0Zjg0
MmIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcApAQCAtMzQsMjAgKzM0LDIyIEBACiAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5o
IgogCisjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCi0KLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKIAogI2Rl
ZmluZSBfVVNFX01BVEhfREVGSU5FUwogI2luY2x1ZGUgPG1hdGguaD4KIAorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWZmaW5lVG8zeDMoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIEdMZmxvYXQgbWF0WzldKQorc3RhdGljIGlubGluZSB2
b2lkIGFmZmluZVRvM3gzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBt
YXRbOV0pCiB7CiAgICAgbWF0WzBdID0gdHJhbnNmb3JtLmEoKTsKICAgICBtYXRbMV0gPSB0cmFu
c2Zvcm0uYigpOwpAQCAtNzMsOCArNzUsOCBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiB9OwogCi1HTEVTMkNhbnZhczo6R0xFUzJDYW52
YXMoR0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9n
bGVzMkNvbnRleHQoY29udGV4dCkKK0dMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9xdWFkVmVydGljZXMoMCkKICAgICAsIG1fcXVhZEluZGljZXMoMCkK
ICAgICAsIG1fc2ltcGxlUHJvZ3JhbSgwKQpAQCAtOTIsMTAgKzk0LDggQEAgR0xFUzJDYW52YXM6
OkdMRVMyQ2FudmFzKEdMRVMyQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
ICAgICBtX2ZsaXBNYXRyaXgudHJhbnNsYXRlKC0xLjBmLCAxLjBmKTsKICAgICBtX2ZsaXBNYXRy
aXguc2NhbGUoMi4wZiAvIHNpemUud2lkdGgoKSwgLTIuMGYgLyBzaXplLmhlaWdodCgpKTsKIAot
ICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotICAgIG1fZ2xlczJDb250ZXh0LT5y
ZXNpemVPZmZzY3JlZW5Db250ZW50KHNpemUpOwotICAgIG1fZ2xlczJDb250ZXh0LT5zd2FwQnVm
ZmVycygpOwotICAgIGdsVmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUgPSAm
bV9zdGF0ZVN0YWNrLmxhc3QoKTsKQEAgLTEwNyw2OSArMTA3LDY0IEBAIEdMRVMyQ2FudmFzOjpH
TEVTMkNhbnZhcyhHTEVTMkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiAK
IEdMRVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fZ2xlczJDb250ZXh0LT5tYWtl
Q3VycmVudCgpOwogICAgIGlmIChtX3NpbXBsZVByb2dyYW0pCi0gICAgICAgIGdsRGVsZXRlUHJv
Z3JhbShtX3NpbXBsZVByb2dyYW0pOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0o
bV9zaW1wbGVQcm9ncmFtKTsKICAgICBpZiAobV90ZXhQcm9ncmFtKQotICAgICAgICBnbERlbGV0
ZVByb2dyYW0obV90ZXhQcm9ncmFtKTsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFt
KG1fdGV4UHJvZ3JhbSk7CiAgICAgaWYgKG1fcXVhZFZlcnRpY2VzKQotICAgICAgICBnbERlbGV0
ZUJ1ZmZlcnMoMSwgJm1fcXVhZFZlcnRpY2VzKTsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVC
dWZmZXIobV9xdWFkVmVydGljZXMpOwogICAgIGlmIChtX3F1YWRJbmRpY2VzKQotICAgICAgICBn
bERlbGV0ZUJ1ZmZlcnMoMSwgJm1fcXVhZFZlcnRpY2VzKTsKKyAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fZ2xlczJDb250ZXh0LT5tYWtl
Q3VycmVudCgpOwotCi0gICAgZ2xTY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1Jf
VEVTVCk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiB9CiAKIHZvaWQgR0xFUzJDYW52YXM6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCiB7Ci0gICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7Ci0KLSAg
ICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVydGljZXMoKSk7Ci0gICAg
Z2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBnZXRRdWFkSW5kaWNlcygpKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgZ2V0UXVhZFZlcnRpY2VzKCkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGdldFF1YWRJbmRpY2VzKCkpOwogCiAg
ICAgZmxvYXQgcmdiYVs0XTsKICAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0sIHJn
YmFbMl0sIHJnYmFbM10pOwotICAgIGdsVW5pZm9ybTRmKG1fc2ltcGxlQ29sb3JMb2NhdGlvbiwg
cmdiYVswXSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwg
cmdiYVszXSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9zaW1wbGVDb2xvckxvY2F0aW9u
LCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10sIHJnYmFbMl0gKiByZ2JhWzNd
LCByZ2JhWzNdKTsKIAotICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgNiwgR0xfVU5T
SUdORURfU0hPUlQsIDApOworICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29u
dGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwg
MCk7CisgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwogfQogCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9nbGVzMkNvbnRl
eHQtPm1ha2VDdXJyZW50KCk7Ci0KICAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUt
Pm1fY29tcG9zaXRlT3ApOwogCi0gICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgZ2V0
UXVhZFZlcnRpY2VzKCkpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
UiwgZ2V0UXVhZEluZGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBn
ZXRRdWFkSW5kaWNlcygpKTsKIAotICAgIGdsVXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9ncmFtKCkp
OworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9ncmFtKCkpOwogCiAgICAg
ZmxvYXQgcmdiYVs0XTsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvci5nZXRSR0JBKHJnYmFbMF0s
IHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwotICAgIGdsVW5pZm9ybTRmKG1fc2ltcGxlQ29s
b3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJd
ICogcmdiYVszXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9zaW1wbGVD
b2xvckxvY2F0aW9uLCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10sIHJnYmFb
Ml0gKiByZ2JhWzNdLCByZ2JhWzNdKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9m
bGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwogICAgIG1h
dHJpeC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2NhbGUocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBHTGZsb2F0IG1hdFs5XTsKKyAgICBmbG9h
dCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwotICAgIGdsVW5pZm9ybU1h
dHJpeDNmdihtX3NpbXBsZU1hdHJpeExvY2F0aW9uLCAxLCBHTF9GQUxTRSwgbWF0KTsKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9zaW1wbGVNYXRyaXhMb2NhdGlvbiwgZmFsc2Ug
Lyp0cmFuc3Bvc2UqLywgbWF0LCAxIC8qY291bnQqLyk7CiAKLSAgICBnbFZlcnRleEF0dHJpYlBv
aW50ZXIobV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
IChHTHZvaWQqKSgwKSk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2lt
cGxlUG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwg
MCwgMCk7CiAKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2ltcGxlUG9zaXRpb25M
b2NhdGlvbik7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NpbXBs
ZVBvc2l0aW9uTG9jYXRpb24pOwogCi0gICAgZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5HTEVTLCA2
LCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JULCAwKTsKKyAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiB9CiAKIHZvaWQg
R0xFUzJDYW52YXM6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKQEAgLTIyMiw0OSArMjE3LDQ3IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdU
ZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
CiAKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0ZXh0
dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewotICAgIG1fZ2xl
czJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotCiAgICAgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihj
b21wb3NpdGVPcCk7CiAKLSAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBnZXRRdWFk
VmVydGljZXMoKSk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBn
ZXRRdWFkSW5kaWNlcygpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOworICAgIG1fY29udGV4dC0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGdldFF1
YWRJbmRpY2VzKCkpOwogICAgIGNoZWNrR0xFcnJvcigiZ2xCaW5kQnVmZmVyIik7CiAKLSAgICBn
bFVzZVByb2dyYW0oZ2V0VGV4UHJvZ3JhbSgpKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0o
Z2V0VGV4UHJvZ3JhbSgpKTsKICAgICBjaGVja0dMRXJyb3IoImdsVXNlUHJvZ3JhbSIpOwogCi0g
ICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB0ZXh0dXJlLT5iaW5kKCk7
CiAKLSAgICBnbFVuaWZvcm0xaShtX3RleFNhbXBsZXJMb2NhdGlvbiwgMCk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtMWkobV90ZXhTYW1wbGVyTG9jYXRpb24sIDApOwogICAgIGNoZWNrR0xFcnJv
cigiZ2xVbmlmb3JtMWkiKTsKIAotICAgIGdsVW5pZm9ybTFmKG1fdGV4QWxwaGFMb2NhdGlvbiwg
YWxwaGEpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdGV4QWxwaGFMb2NhdGlvbiwgYWxw
aGEpOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtMWYgZm9yIGFscGhhIik7CiAKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRMZWZ0
KHRyYW5zZm9ybSk7CiAgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55
KCkpOwogICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkp
OwotICAgIEdMZmxvYXQgbWF0WzldOworICAgIGZsb2F0IG1hdFs5XTsKICAgICBhZmZpbmVUbzN4
MyhtYXRyaXgsIG1hdCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRp
b24sIDEsIEdMX0ZBTFNFLCBtYXQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdiht
X3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXQsIDEgLypjb3VudCov
KTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIHRleE1hdHJpeDsKICAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmUt
PndpZHRoKCksIDEuMGYgLyB0ZXh0dXJlLT5oZWlnaHQoKSk7CiAgICAgdGV4TWF0cml4LnRyYW5z
bGF0ZShzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkpOwogICAgIHRleE1hdHJpeC5zY2FsZShzcmNS
ZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCkpOwotICAgIEdMZmxvYXQgdGV4TWF0WzldOwor
ICAgIGZsb2F0IHRleE1hdFs5XTsKICAgICBhZmZpbmVUbzN4Myh0ZXhNYXRyaXgsIHRleE1hdCk7
Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIDEsIEdMX0ZB
TFNFLCB0ZXhNYXQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleFRleE1h
dHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXQsIDEgLypjb3VudCovKTsK
ICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIpOwogCi0gICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwgMywgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCAoR0x2b2lkKikoMCkpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlciht
X3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IDAsIDApOwogCi0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0aW9uTG9j
YXRpb24pOworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhQb3Np
dGlvbkxvY2F0aW9uKTsKIAotICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgNiwgR0xf
VU5TSUdORURfU0hPUlQsIDApOworICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VCwgMCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbERyYXdFbGVtZW50cyIpOwogfQogCkBAIC0yODAs
NTYgKzI3Myw1NiBAQCB2b2lkIEdMRVMyQ2FudmFzOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgQ29tcG9z
aXRlQ2xlYXI6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1
bmMoR0xfWkVSTywgR0xfWkVSTyk7CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ29tcG9zaXRlQ29weToKLSAgICAgICAgZ2xEaXNhYmxlKEdMX0JMRU5EKTsK
KyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKLSAgICAgICAgZ2xF
bmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5V
U19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46Ci0gICAgICAgIGdsRW5hYmxlKEdM
X0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfRFNUX0FMUEhBLCBHTF9aRVJPKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0
ZVNvdXJjZU91dDoKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5k
RnVuYyhHTF9PTkVfTUlOVVNfRFNUX0FMUEhBLCBHTF9aRVJPKTsKKyAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNz
Q29udGV4dDNEOjpaRVJPKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3NpdGVTb3Vy
Y2VBdG9wOgotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5j
KEdMX0RTVF9BTFBIQSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNE
OjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3Np
dGVEZXN0aW5hdGlvbk92ZXI6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAg
Z2xCbGVuZEZ1bmMoR0xfT05FX01JTlVTX0RTVF9BTFBIQSwgR0xfT05FKTsKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0
ZURlc3RpbmF0aW9uSW46Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAgZ2xC
bGVuZEZ1bmMoR0xfWkVSTywgR0xfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgotICAg
ICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX1pFUk8sIEdM
X09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGlj
c0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKLSAg
ICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkVfTUlO
VVNfRFNUX0FMUEhBLCBHTF9TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNSQ19BTFBIQSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlWE9SOgotICAg
ICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORV9NSU5V
U19EU1RfQUxQSEEsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENvbXBvc2l0ZVBsdXNEYXJrZXI6CiAgICAgY2FzZSBDb21wb3NpdGVIaWdobGlnaHQ6CiAgICAg
ICAgIC8vIHVuc3VwcG9ydGVkCi0gICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CisgICAgICAg
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdodGVyOgotICAgICAgICBnbEVuYWJsZShH
TF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FKTsKKyAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9j
b250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBtX2xhc3RDb21wb3NpdGVPcCA9
IG9wOwpAQCAtMzM4LDEzICszMzEsMTQgQEAgdm9pZCBHTEVTMkNhbnZhczo6YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpn
ZXRRdWFkVmVydGljZXMoKQogewogICAgIGlmICghbV9xdWFkVmVydGljZXMpIHsKLSAgICAgICAg
R0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLjBmLCAwLjBmLCAxLjBmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgICAgIGdsR2VuQnVmZmVycygxLCAmbV9xdWFkVmVy
dGljZXMpOwotICAgICAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0
aWNlcyk7Ci0gICAgICAgIGdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0
aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisgICAgICAgIGZsb2F0IHZlcnRpY2Vz
W10gPSB7IDAuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEu
MGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDEuMGYs
IDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYgfTsK
KyAgICAgICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAg
ICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB2ZXJ0ZXhBcnJheSA9IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKHZlcnRpY2VzLCBzaXplb2YodmVydGljZXMpIC8gc2l6ZW9mKGZsb2F0KSk7CisgICAgICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBt
X3F1YWRWZXJ0aWNlcyk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCB2ZXJ0ZXhBcnJheS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXKTsKICAgICB9CiAgICAgcmV0dXJuIG1fcXVhZFZlcnRpY2VzOwogfQpA
QCAtMzUzLDMyICszNDcsMzEgQEAgdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFF1YWRWZXJ0aWNl
cygpCiB1bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0UXVhZEluZGljZXMoKQogewogICAgIGlmICgh
bV9xdWFkSW5kaWNlcykgewotICAgICAgICBHTHVzaG9ydCBpbmRpY2VzW10gPSB7IDAsIDEsIDIs
IDAsIDIsIDN9OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbmRpY2VzW10gPSB7IDAsIDEsIDIs
IDAsIDIsIDN9OwogCi0gICAgICAgIGdsR2VuQnVmZmVycygxLCAmbV9xdWFkSW5kaWNlcyk7Ci0g
ICAgICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9xdWFkSW5kaWNl
cyk7Ci0gICAgICAgIGdsQnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgc2l6ZW9m
KGluZGljZXMpLCBpbmRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisgICAgICAgIG1fcXVhZEluZGlj
ZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBSZWZQdHI8VWludDE2QXJy
YXk+IGluZGV4QXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGluZGljZXMsIHNpemVvZihpbmRp
Y2VzKSAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRJbmRp
Y2VzKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kZXhBcnJheS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNUQVRJQ19EUkFXKTsKICAgICB9CiAgICAgcmV0dXJuIG1fcXVhZEluZGljZXM7CiB9CiAKLXN0
YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVyU291
cmNlKQorc3RhdGljIHVuc2lnbmVkIGxvYWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKIHsKLSAgICBHTHVp
bnQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7CisgICAgdW5zaWduZWQgc2hhZGVyID0g
Y29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwogICAgIGlmICghc2hhZGVyKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZSwg
MCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgR0xpbnQgY29tcGlsZVN0YXR1
czsKLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxl
U3RhdHVzKTsKKyAgICBTdHJpbmcgc2hhZGVyU291cmNlU3RyKHNoYWRlclNvdXJjZSk7CisgICAg
Y29udGV4dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc2hhZGVyU291cmNlU3RyKTsKKyAgICBjb250
ZXh0LT5jb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAg
Y29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9T
VEFUVVMsICZjb21waWxlU3RhdHVzKTsKICAgICBpZiAoIWNvbXBpbGVTdGF0dXMpIHsKLSAgICAg
ICAgaW50IGxlbmd0aDsKLSAgICAgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyhuZXcgY2hh
cltsZW5ndGhdKTsKLSAgICAgICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAw
LCBsb2cuZ2V0KCkpOwotICAgICAgICBMT0dfRVJST1IobG9nLmdldCgpKTsKLSAgICAgICAgZ2xE
ZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgU3RyaW5nIGluZm9Mb2cgPSBjb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7CisgICAgICAgIExPR19FUlJPUihpbmZvTG9nLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBzaGFkZXI7CkBAIC0zODcsNyArMzgwLDcg
QEAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFk
ZXJTb3VyY2UpCiB1bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0U2ltcGxlUHJvZ3JhbSgpCiB7CiAg
ICAgaWYgKCFtX3NpbXBsZVByb2dyYW0pIHsKLSAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9
IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwKKyAgICAgICAgdW5zaWduZWQgdmVydGV4U2hh
ZGVyID0gbG9hZFNoYWRlcihtX2NvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hB
REVSLAogICAgICAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCiAgICAgICAgICAgICAi
dW5pZm9ybSB2ZWM0IGNvbG9yO1xuIgogICAgICAgICAgICAgImF0dHJpYnV0ZSB2ZWMzIHBvc2l0
aW9uO1xuIgpAQCAtMzk2LDcgKzM4OSw3IEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRTaW1w
bGVQcm9ncmFtKCkKICAgICAgICAgICAgICJ9XG4iKTsKICAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFk
ZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgR0x1aW50IGZyYWdtZW50U2hhZGVy
ID0gbG9hZFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsCisgICAgICAgIHVuc2lnbmVkIGZyYWdt
ZW50U2hhZGVyID0gbG9hZFNoYWRlcihtX2NvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFH
TUVOVF9TSEFERVIsCiAgICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCiAg
ICAgICAgICAgICAidW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKICAgICAgICAgICAgICJ1bmlmb3Jt
IHZlYzQgY29sb3I7XG4iCkBAIC00MDUsMjMgKzM5OCwyMyBAQCB1bnNpZ25lZCBHTEVTMkNhbnZh
czo6Z2V0U2ltcGxlUHJvZ3JhbSgpCiAgICAgICAgICAgICAifVxuIik7CiAgICAgICAgIGlmICgh
ZnJhZ21lbnRTaGFkZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbV9zaW1wbGVQ
cm9ncmFtID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIG1fc2ltcGxlUHJvZ3JhbSA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwogICAgICAgICBpZiAoIW1fc2ltcGxlUHJvZ3JhbSkK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBnbEF0dGFjaFNoYWRlcihtX3NpbXBsZVBy
b2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgICAgIGdsQXR0YWNoU2hhZGVyKG1fc2ltcGxlUHJv
Z3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBnbExpbmtQcm9ncmFtKG1fc2ltcGxlUHJv
Z3JhbSk7Ci0gICAgICAgIEdMaW50IGxpbmtTdGF0dXM7Ci0gICAgICAgIGdsR2V0UHJvZ3JhbWl2
KG1fc2ltcGxlUHJvZ3JhbSwgR0xfTElOS19TVEFUVVMsICZsaW5rU3RhdHVzKTsKKyAgICAgICAg
bV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9zaW1wbGVQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwor
ICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3NpbXBsZVByb2dyYW0sIGZyYWdtZW50
U2hhZGVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX3NpbXBsZVByb2dyYW0p
OworICAgICAgICBpbnQgbGlua1N0YXR1czsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFt
aXYobV9zaW1wbGVQcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsICZsaW5r
U3RhdHVzKTsKICAgICAgICAgaWYgKCFsaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBnbERlbGV0
ZVByb2dyYW0obV9zaW1wbGVQcm9ncmFtKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
UHJvZ3JhbShtX3NpbXBsZVByb2dyYW0pOwogICAgICAgICAgICAgbV9zaW1wbGVQcm9ncmFtID0g
MDsKICAgICAgICAgfQotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAg
ICAgICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fc2ltcGxlUG9z
aXRpb25Mb2NhdGlvbiA9IGdsR2V0QXR0cmliTG9jYXRpb24obV9zaW1wbGVQcm9ncmFtLCAicG9z
aXRpb24iKTsKLSAgICAgICAgbV9zaW1wbGVNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKG1fc2ltcGxlUHJvZ3JhbSwgIm1hdHJpeCIpOwotICAgICAgICBtX3NpbXBsZUNvbG9y
TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJjb2xvciIp
OworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgICAgIG1fc2lt
cGxlUG9zaXRpb25Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9zaW1w
bGVQcm9ncmFtLCAicG9zaXRpb24iKTsKKyAgICAgICAgbV9zaW1wbGVNYXRyaXhMb2NhdGlvbiA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2ltcGxlUHJvZ3JhbSwgIm1hdHJpeCIp
OworICAgICAgICBtX3NpbXBsZUNvbG9yTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJjb2xvciIpOwogICAgIH0KICAgICByZXR1cm4gbV9z
aW1wbGVQcm9ncmFtOwogfQpAQCAtNDI5LDcgKzQyMiw3IEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFz
OjpnZXRTaW1wbGVQcm9ncmFtKCkKIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRUZXhQcm9ncmFt
KCkKIHsKICAgICBpZiAoIW1fdGV4UHJvZ3JhbSkgewotICAgICAgICBHTHVpbnQgdmVydGV4U2hh
ZGVyID0gbG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVSLAorICAgICAgICB1bnNpZ25lZCB2ZXJ0
ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKG1fY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9TSEFERVIsCiAgICAgICAgICAgICAidW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKICAgICAgICAg
ICAgICJ1bmlmb3JtIG1hdDMgdGV4TWF0cml4O1xuIgogICAgICAgICAgICAgImF0dHJpYnV0ZSB2
ZWMzIHBvc2l0aW9uO1xuIgpAQCAtNDQwLDcgKzQzMyw3IEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFz
OjpnZXRUZXhQcm9ncmFtKCkKICAgICAgICAgICAgICJ9XG4iKTsKICAgICAgICAgaWYgKCF2ZXJ0
ZXhTaGFkZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyID0gbG9hZFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsCisgICAgICAgIHVuc2lnbmVk
IGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihtX2NvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIsCiAgICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
XG4iCiAgICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc2FtcGxlcjtcbiIKICAgICAgICAg
ICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhO1xuIgpAQCAtNDUwLDI1ICs0NDMsMjUgQEAgdW5zaWdu
ZWQgR0xFUzJDYW52YXM6OmdldFRleFByb2dyYW0oKQogICAgICAgICAgICAgIn1cbiIpOwogICAg
ICAgICBpZiAoIWZyYWdtZW50U2hhZGVyKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IG1fdGV4UHJvZ3JhbSA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgICAgICBtX3RleFByb2dyYW0g
PSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKICAgICAgICAgaWYgKCFtX3RleFByb2dyYW0p
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZ2xBdHRhY2hTaGFkZXIobV90ZXhQcm9n
cmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBnbEF0dGFjaFNoYWRlcihtX3RleFByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKLSAgICAgICAgZ2xMaW5rUHJvZ3JhbShtX3RleFByb2dyYW0pOwot
ICAgICAgICBHTGludCBsaW5rU3RhdHVzOwotICAgICAgICBnbEdldFByb2dyYW1pdihtX3RleFBy
b2dyYW0sIEdMX0xJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7CisgICAgICAgIG1fY29udGV4dC0+
YXR0YWNoU2hhZGVyKG1fdGV4UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICAgICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIobV90ZXhQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgICAg
IG1fY29udGV4dC0+bGlua1Byb2dyYW0obV90ZXhQcm9ncmFtKTsKKyAgICAgICAgaW50IGxpbmtT
dGF0dXM7CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1fdGV4UHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7CiAgICAgICAgIGlmICgh
bGlua1N0YXR1cykgewotICAgICAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fdGV4UHJvZ3JhbSk7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV90ZXhQcm9ncmFtKTsKICAg
ICAgICAgICAgIG1fdGV4UHJvZ3JhbSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgZ2xEZWxldGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFk
ZXIpOwotICAgICAgICBtX3RleE1hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
bV90ZXhQcm9ncmFtLCAibWF0cml4Iik7Ci0gICAgICAgIG1fdGV4U2FtcGxlckxvY2F0aW9uID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQcm9ncmFtLCAic2FtcGxlciIpOwotICAgICAgICBt
X3RleFRleE1hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQcm9ncmFt
LCAidGV4TWF0cml4Iik7Ci0gICAgICAgIG1fdGV4UG9zaXRpb25Mb2NhdGlvbiA9IGdsR2V0QXR0
cmliTG9jYXRpb24obV90ZXhQcm9ncmFtLCAicG9zaXRpb24iKTsKLSAgICAgICAgbV90ZXhBbHBo
YUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQcm9ncmFtLCAiYWxwaGEiKTsK
KyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBtX3RleE1h
dHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQcm9ncmFt
LCAibWF0cml4Iik7CisgICAgICAgIG1fdGV4U2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQcm9ncmFtLCAic2FtcGxlciIpOworICAgICAgICBtX3Rl
eFRleE1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90ZXhQ
cm9ncmFtLCAidGV4TWF0cml4Iik7CisgICAgICAgIG1fdGV4UG9zaXRpb25Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV90ZXhQcm9ncmFtLCAicG9zaXRpb24iKTsKKyAg
ICAgICAgbV90ZXhBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
bV90ZXhQcm9ncmFtLCAiYWxwaGEiKTsKICAgICB9CiAgICAgcmV0dXJuIG1fdGV4UHJvZ3JhbTsK
IH0KQEAgLTQ3OSw3ICs0NzIsNyBAQCBHTEVTMlRleHR1cmUqIEdMRVMyQ2FudmFzOjpjcmVhdGVU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgR0xFUzJUZXh0dXJlOjpGb3JtYQogICAgIGlmICh0
ZXh0dXJlKQogICAgICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKIAotICAgIHRleHR1cmUgPSBH
TEVTMlRleHR1cmU6OmNyZWF0ZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHRleHR1cmUg
PSBHTEVTMlRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgR0xFUzJUZXh0dXJlKiB0ID0gdGV4dHVyZS5nZXQoKTsKICAgICBtX3RleHR1cmVzLnNl
dChwdHIsIHRleHR1cmUpOwogICAgIHJldHVybiB0OwpAQCAtNDk0LDI0ICs0ODcsMjQgQEAgR0xF
UzJUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIpCiB2
b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKQogewogI2lm
bmRlZiBOREVCVUcKLSAgICBHTGVudW0gZXJyOwotICAgIHdoaWxlICgoZXJyID0gZ2xHZXRFcnJv
cigpKSAhPSBHTF9OT19FUlJPUikgeworICAgIHVuc2lnbmVkIGVycjsKKyAgICB3aGlsZSAoKGVy
ciA9IG1fY29udGV4dC0+Z2V0RXJyb3IoKSkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
KSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yU3RyID0gIioqKiBVTktOT1dOIEVSUk9SICoq
KiI7CiAgICAgICAgIHN3aXRjaCAoZXJyKSB7Ci0gICAgICAgIGNhc2UgR0xfSU5WQUxJRF9FTlVN
OgotICAgICAgICAgICAgZXJyb3JTdHIgPSAiR0xfSU5WQUxJRF9FTlVNIjsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgZXJyb3JTdHIg
PSAiR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSI7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHTF9JTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgZXJyb3JTdHIgPSAi
R0xfSU5WQUxJRF9WQUxVRSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUU6CisgICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHTF9JTlZBTElE
X09QRVJBVElPTjoKLSAgICAgICAgICAgIGVycm9yU3RyID0gIkdMX0lOVkFMSURfT1BFUkFUSU9O
IjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT046Cisg
ICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04iOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT046Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJHTF9JTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgZXJyb3JTdHIgPSAiR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6Ci0gICAgICAgICAgICBlcnJv
clN0ciA9ICJHTF9PVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6T1VUX09GX01FTU9SWToKKyAgICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChoZWFkZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmgKaW5kZXggNGU1MDBiZWY4NTlkZGNmYjA1YmVkZmI4ZTlmMjQyMTBlMWJk
MzJhZC4uY2VhOTBhZWFhYmIyNjE0N2YxZjI0MzI2NzE4MDkyNWNjOGFhNzMzYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtNDYs
MTUgKzQ2LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0Owog
Y2xhc3MgQ29sb3I7Ci1jbGFzcyBHTEVTMkNvbnRleHQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIAogdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBS
ZWZQdHI8R0xFUzJUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOwogCiBjbGFzcyBHTEVTMkNhbnZh
cyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgR0xFUzJDYW52YXMoR0xFUzJD
b250ZXh0KiwgY29uc3QgSW50U2l6ZSYpOworICAgIEdMRVMyQ2FudmFzKEdyYXBoaWNzQ29udGV4
dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIH5HTEVTMkNhbnZhcygpOwogCiAgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwpAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0
R0xFUzIgYXQgc29tZSBwb2ludC4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0
dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KEdMRVMyVGV4dHVyZSosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgR0xFUzJDb250ZXh0KiBnbGVzMkNvbnRleHQo
KSB7IHJldHVybiBtX2dsZXMyQ29udGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgR0xFUzJUZXh0dXJlKiBjcmVhdGVUZXh0
dXJlKE5hdGl2ZUltYWdlUHRyLCBHTEVTMlRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKICAgICBHTEVTMlRleHR1cmUqIGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOwog
CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgZ2V0U2ltcGxlUHJvZ3Jh
bSgpOwogICAgIHVuc2lnbmVkIGdldFRleFByb2dyYW0oKTsKIAotICAgIEdMRVMyQ29udGV4dCog
bV9nbGVzMkNvbnRleHQ7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBz
dHJ1Y3QgU3RhdGU7CiAgICAgV1RGOjpWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKICAgICBT
dGF0ZSogbV9zdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJUZXh0dXJlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJUZXh0dXJlLmNwcAppbmRleCAyNmM4YmY3YmVhZThlYmFmYTRlYmUwMmYyZDgzZTRj
Y2ZhODg5MDhmLi5mOGQ1Y2Y0NjlhNGQ4YzI5MWQ0N2Y3ZGM4OTgwMzQxZmYzZDI4YTRiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwCkBAIC0zNCwxNCArMzQsMTUgQEAKIAogI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogCi0j
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAog
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdM
RVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKHVuc2lnbmVkIGludCB0ZXh0dXJlSWQsIEZvcm1hdCBm
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICA6IG1fdGV4dHVyZUlkKHRleHR1cmVJ
ZCkKK0dMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV90ZXh0dXJlSWQodGV4dHVyZUlk
KQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1f
aGVpZ2h0KGhlaWdodCkKQEAgLTUwLDI1ICs1MSwyNiBAQCBHTEVTMlRleHR1cmU6OkdMRVMyVGV4
dHVyZSh1bnNpZ25lZCBpbnQgdGV4dHVyZUlkLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dAogCiBHTEVTMlRleHR1cmU6On5HTEVTMlRleHR1cmUoKQogewotICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZUlkKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0
dXJlSWQpOwogfQogCi1QYXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gR0xFUzJUZXh0dXJlOjpjcmVh
dGUoRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorUGFzc1JlZlB0cjxHTEVT
MlRleHR1cmU+IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgR0x1aW50IHRl
eHR1cmVJZDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlSWQpOworICAgIHVuc2lnbmVk
IHRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKICAgICBpZiAoIXRleHR1cmVJ
ZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHRleHR1cmVJZCk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEs
IHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJl
SWQpOworICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwog
CiAgICAgaW50IG1heDsKLSAgICBnbEdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX1NJWkUsICZt
YXgpOwotICAgIGlmICh3aWR0aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpCisgICAgY29udGV4dC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXgpOwor
ICAgIGlmICh3aWR0aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpIHsKICAgICAgICAgQVNTRVJUKCEi
dGV4dHVyZSB0b28gYmlnIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR0xFUzJUZXh0dXJlKHRleHR1cmVJZCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHTEVTMlRleHR1cmUoY29udGV4dCwgdGV4
dHVyZUlkLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsKIH0KIAogc3RhdGljIHZvaWQgY29udmVy
dEZvcm1hdChHTEVTMlRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGludCogZ2xGb3Jt
YXQsIHVuc2lnbmVkIGludCogZ2xUeXBlLCBib29sKiBzd2l6emxlKQpAQCAtNzYsMTQgKzc4LDE0
IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQoR0xFUzJUZXh0dXJlOjpGb3JtYXQgZm9ybWF0
LCB1bnNpZ25lZCBpbnQqIGdsRm9ybWF0LCB1CiAgICAgKnN3aXp6bGUgPSBmYWxzZTsKICAgICBz
d2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgR0xFUzJUZXh0dXJlOjpSR0JBODoKLSAgICAgICAg
KmdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgKmdsVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7
CisgICAgICAgICpnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAq
Z2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR0xFUzJUZXh0dXJlOjpCR1JBODoKIC8vIEZJWE1FOiAgT25jZSB3ZSBoYXZl
IHN1cHBvcnQgZm9yIGV4dGVuc2lvbnMsIHdlIHNob3VsZCBjaGVjayBmb3IgRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4LAogLy8gYW5kIHVzZSB0aGF0IGlmIHByZXNlbnQuCi0gICAgICAgICpn
bEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgICpnbFR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwor
ICAgICAgICAqZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICAgICAgKmds
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOwogICAgICAgICAqc3dpenps
ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC05Nyw5ICs5OSw5IEBA
IHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVscykKICAgICB1bnNpZ25lZCBpbnQg
Z2xGb3JtYXQsIGdsVHlwZTsKICAgICBib29sIHN3aXp6bGU7CiAgICAgY29udmVydEZvcm1hdCht
X2Zvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgIGlmIChz
d2l6emxlKSB7Ci0gICAgICAgIEFTU0VSVChnbEZvcm1hdCA9PSBHTF9SR0JBICYmIGdsVHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKTsKKyAgICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGdsVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSk7CiAgICAgICAgIC8vIEZJWE1FOiAgVGhpcyBjb3VsZCB1c2UgUEJPJ3MgdG8gc2F2ZSBk
b2luZyBhbiBleHRyYSBjb3B5IGhlcmUuCiAgICAgICAgIGludCBzaXplID0gbV93aWR0aCAqIG1f
aGVpZ2h0OwogICAgICAgICB1bnNpZ25lZCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KHBpeGVscyk7CkBAIC0xMDksMTggKzExMSwxOCBAQCB2b2lkIEdMRVMyVGV4dHVyZTo6bG9h
ZCh2b2lkKiBwaXhlbHMpCiAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbCA9IHBpeGVsczMyW2ld
OwogICAgICAgICAgICAgYnVmcHRyW2ldID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAm
IDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7CiAgICAg
ICAgIH0KLSAgICAgICAgZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIG1f
d2lkdGgsIG1faGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBidWYuZ2V0KCkpOworICAgICAgICBt
X2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBidWYuZ2V0KCkpOwog
ICAgIH0gZWxzZQotICAgICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwg
MCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHBpeGVscyk7CisgICAgICAg
IG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHBpeGVscyk7CiB9
CiAKIHZvaWQgR0xFUzJUZXh0dXJlOjpiaW5kKCkKIHsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFN
UF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4
dHVyZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
aAppbmRleCAzNDYzNjVhOTM1YTliNjU2YTc5ZDM2MzYyNTJmNjU0MDUyZDUyMjExLi40ZDM1MWNk
ZDM3ZDllMTlkZjVmNDhiYjk0YmVkNDc3M2I2ODBlZDhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKQEAgLTM3LDIwICszNywyMiBA
QAogI2luY2x1ZGUgIlJlZlB0ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIAogY2xhc3MgR0xFUzJUZXh0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8
R0xFUzJUZXh0dXJlPiB7CiBwdWJsaWM6CiAgICAgfkdMRVMyVGV4dHVyZSgpOwogICAgIGVudW0g
Rm9ybWF0IHsgUkdCQTgsIEJHUkE4IH07Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R0xFUzJUZXh0
dXJlPiBjcmVhdGUoRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRm9ybWF0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIHZvaWQgYmluZCgpOwogICAgIHZvaWQgbG9h
ZCh2b2lkKiBwaXhlbHMpOwogICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zv
cm1hdDsgfQogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBp
bnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KIHByaXZhdGU6Ci0gICAgR0xF
UzJUZXh0dXJlKHVuc2lnbmVkIGludCB0ZXh0dXJlSWQsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7Ci0gICAgdW5zaWduZWQgaW50IG1fdGV4dHVyZUlkOworICAgIEdMRVMy
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHRleHR1cmVJZCwgRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7
CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgRm9ybWF0IG1fZm9ybWF0OwogICAgIGlu
dCBtX3dpZHRoOwogICAgIGludCBtX2hlaWdodDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCA3OTk0MjQ0ZTNh
ZGE1OTQ4ZDY5MmYyNjFlM2E0ZDk5NjY3M2ViZjA5Li5kOTJmNDc1ZTExMzkxNmU0MDAwZGVjYjAw
MDMxYjk4NTU0OTgwMWYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC03OTgsNiArNzk4LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAo
cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmICFtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4gJiYgIW1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKICAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmdwdUNhbnZhcygpLT5maWxsUmVjdChyZWN0KTsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhMjQ4NWU2YWI2
MjY1MDlkZjA3NTM2MjY5ZTljZGJmODNkNGU1ZTZmLi4wMjRiZjUwZGMxMzMzYTIwYWEyZGFhZTFh
YzdlNWE0ZjVlZWMwZTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VTa2lhLmNwcApAQCAtNDE0LDcgKzQxNCw2IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBHTEVT
MihHcmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwLCBjb25zCiB7
CiAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsK
ICAgICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdw
dUNhbnZhcygpOwotICAgIGdwdUNhbnZhcy0+Z2xlczJDb250ZXh0KCktPm1ha2VDdXJyZW50KCk7
CiAgICAgR0xFUzJUZXh0dXJlKiB0ZXh0dXJlID0gZ3B1Q2FudmFzLT5nZXRUZXh0dXJlKGJpdG1h
cCk7CiAgICAgaWYgKCF0ZXh0dXJlKSB7CiAgICAgICAgIEFTU0VSVChiaXRtYXAtPmNvbmZpZygp
ID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggNWVjOWE1
YzE0MmU1NjM5M2RmNjNkNWY3NTliZWU2NWQzNDEwMTBkMC4uYjE0YzZjZDA0Y2EzMGJkNDE3MTAy
ZTQzNTcwNjNiZWFjYWUyMjJjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMzAsNiArMzAsOSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgpAQCAtNDUsMTAgKzQ4LDkgQEAKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAKICNp
ZiBVU0UoR0xFUzJfUkVOREVSSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKLSNpbmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNs
dWRlICJHTEVTMlRleHR1cmUuaCIKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNlbmRpZgogCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTY3NSw3ICs2NzcsOCBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQ
YXRoPiYgcGF0aHMpCiB9CiAKICNpZiBVU0UoR0xFUzJfUkVOREVSSU5HKQotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRHTEVTMkNvbnRleHQoR0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplKQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKQogewogICAgIG1fdXNlR1BVID0gdHJ1ZTsKICAgICBtX2dwdUNhbnZhcyA9IG5l
dyBHTEVTMkNhbnZhcyhjb250ZXh0LCBzaXplKTsKQEAgLTc2MCwyNSArNzYzLDI2IEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKSBjb25zdAogewogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZh
cy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVs
cyBsb2NrKGJpdG1hcCk7Ci0gICAgbV9ncHVDYW52YXMtPmdsZXMyQ29udGV4dCgpLT5tYWtlQ3Vy
cmVudCgpOwogICAgIC8vIEZJWE1FOiBLZWVwIGEgdGV4dHVyZSBhcm91bmQgZm9yIHRoaXMgcmF0
aGVyIHRoYW4gY29uc3RhbnRseSBjcmVhdGluZy9kZXN0cm95aW5nIG9uZS4KLSAgICBSZWZQdHI8
R0xFUzJUZXh0dXJlPiB0ZXh0dXJlID0gR0xFUzJUZXh0dXJlOjpjcmVhdGUoR0xFUzJUZXh0dXJl
OjpCR1JBOCwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIFJlZlB0cjxH
TEVTMlRleHR1cmU+IHRleHR1cmUgPSBHTEVTMlRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBHTEVT
MlRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKICAgICB0
ZXh0dXJlLT5sb2FkKGJpdG1hcC5nZXRQaXhlbHMoKSk7CiAgICAgSW50UmVjdCByZWN0KDAsIDAs
IGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwotICAgIGdwdUNhbnZhcygpLT5kcmF3
VGV4dHVyZWRSZWN0KHRleHR1cmUuZ2V0KCksIHJlY3QsIHJlY3QsIERldmljZUNvbG9yU3BhY2Us
IG9wKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CisgICAgZ3B1Q2FudmFzKCktPmRy
YXdUZXh0dXJlZFJlY3QodGV4dHVyZS5nZXQoKSwgcmVjdCwgcmVjdCwgaWRlbnRpdHksIDEuMCwg
RGV2aWNlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJl
YWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCkgY29uc3QKIHsKICAgICBjb25zdCBTa0JpdG1hcCYg
Yml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7CiAgICAg
U2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgbV9ncHVDYW52YXMtPmdsZXMyQ29u
dGV4dCgpLT5tYWtlQ3VycmVudCgpOwogICAgIGludCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBo
ZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7CiAgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IGJ1Zihu
ZXcgdWludDMyX3Rbd2lkdGhdKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1f
Z3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgLy8gRmxpcHMgdGhlIGltYWdlIHZlcnRpY2FsbHku
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewogICAgICAgICB1aW50MzJf
dCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKLSAgICAgICAgZ2xSZWFkUGl4ZWxz
KDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0aCwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
cGl4ZWxzKTsKKyAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwg
d2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsg
KytpKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbCA9IHBpeGVsc1tpXTsKICAgICAgICAg
ICAgIC8vIFN3aXp6bGVzIGZyb20gUkdCQSAtPiBCR1JBLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggNWRhNTE0MTE0
NTA4ZWU3YWVkNmIyYWI5OWIyODZjYjVhY2NhNWFmMi4uZmY4MGQxYmFkZTYwMGUzY2MyZDg5ZmEy
YTM1MzQwNjViNTg2NTI4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNpZiBVU0UoR0xFUzJfUkVOREVSSU5HKQogZW51bSBDb21wb3NpdGVPcGVyYXRv
cjsKIGNsYXNzIEdMRVMyQ2FudmFzOwotY2xhc3MgR0xFUzJDb250ZXh0OworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiAjZW5kaWYKIAogLy8gVGhpcyBjbGFzcyBob2xkcyB0aGUgcGxhdGZvcm0t
c3BlY2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29udGV4dC4gV2UgcHV0CkBAIC0xODMsNyArMTgz
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW1hZ2VSZXNhbXBsaW5nSGludCgpIGNvbnN0Owog
I2lmIFVTRShHTEVTMl9SRU5ERVJJTkcpCiAgICAgYm9vbCB1c2VHUFUoKSB7IHJldHVybiBtX3Vz
ZUdQVTsgfQotICAgIHZvaWQgc2V0R0xFUzJDb250ZXh0KEdMRVMyQ29udGV4dCosIGNvbnN0IElu
dFNpemUmKTsKKyAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIEdMRVMyQ2FudmFzKiBncHVDYW52YXMoKSBjb25zdCB7
IHJldHVybiBtX2dwdUNhbnZhcy5nZXQoKTsgfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63746</attachid>
            <date>2010-08-06 11:45:29 -0700</date>
            <delta_ts>2010-08-06 12:05:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43608-20100806114528.patch</filename>
            <type>text/plain</type>
            <size>39282</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uZWRjODllNzM5YWQ3OGM3
OTU2NjhiN2VmOTQ3OWRmYTU4MzE3YTEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IEdMRVMyQ2Fu
dmFzL1RleHR1cmUgaW4gdGVybXMgb2YgR3JhcGhpY3NDb250ZXh0M0QgaW5zdGVhZCBvZiBkaXJl
Y3QgT3BlbkdMIGNhbGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MzYwOAorCisgICAgICAgIFRoaXMgY29udmVydHMgYWxsIE9wZW5HTCBjYWxscyBp
biBHTEVTMihDYW52YXN8VGV4dHVyZSkgdG8gY2FsbHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgR3Jh
cGhpY3NDb250ZXh0M0QKKyAgICAgICAgQVBJLCBkdWUgdG8gZmVlZGJhY2sgb24gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzYyLiAgTmVhcmx5IGFsbCB0aGUgY2hh
bmdlcyBhcmUKKyAgICAgICAgYXBwbHlpbmcgdGhlIHJlZ2V4IHMvZ2woW0EtWl0pL21fY29udGV4
dC0+JTE8LyBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgbWFrZUN1cnJlbnQoKSBjYWxscy4KKyAg
ICAgICAgT3RoZXIgY2hhbmdlcyBoaWxpZ2h0ZWQgYmVsb3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
ZmZpbmVUbzN4Myk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDb21w
b3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0UXVhZFZl
cnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRRdWFkSW5kaWNlcyk6
CisgICAgICAgICAgICAtIHVzZSBuZXcgdHlwZWQgWFhBcnJheSBjbGFzc2VzIGZvciBidWZmZXIg
dXBsb2FkcworICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6Z2V0U2ltcGxlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Z2V0VGV4UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2hlY2tHTEVy
cm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNvbnRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMlRleHR1cmU6OkdMRVMyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MlRleHR1cmU6On5HTEVTMlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0
dXJlOjpiaW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRl
eHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6
CisgICAgICAgICAgICAtIGFkZCBhIG1pc3NpbmcgcmVzdG9yZSgpIGNhbGwgdG8gdGhlIEgvVyBw
YXRoCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd0JpdG1hcEdMRVMyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAg
ICAgICAgIC0gYXZvaWQgYXBwbHlpbmcgQ1RNIHRvIHVwbG9hZHMKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKwogMjAx
MC0wOC0wNSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRleCA5ZmM4OTE3YzQ2NzUwMzlkOTEzOWEw
ZWZkYzQ3ZDhlYTE3ZTczZDg3Li44YTliZGUxZjhmYzY0NDZlM2MyMDQ5OTE1NGIwNTI0Yjg2MWE5
MmI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcApAQCAtMzQsMjAgKzM0LDIyIEBACiAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5o
IgogCisjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCi0KLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKIAogI2Rl
ZmluZSBfVVNFX01BVEhfREVGSU5FUwogI2luY2x1ZGUgPG1hdGguaD4KIAorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWZmaW5lVG8zeDMoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIEdMZmxvYXQgbWF0WzldKQorc3RhdGljIGlubGluZSB2
b2lkIGFmZmluZVRvM3gzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBt
YXRbOV0pCiB7CiAgICAgbWF0WzBdID0gdHJhbnNmb3JtLmEoKTsKICAgICBtYXRbMV0gPSB0cmFu
c2Zvcm0uYigpOwpAQCAtNzMsOCArNzUsOCBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiB9OwogCi1HTEVTMkNhbnZhczo6R0xFUzJDYW52
YXMoR0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9n
bGVzMkNvbnRleHQoY29udGV4dCkKK0dMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9xdWFkVmVydGljZXMoMCkKICAgICAsIG1fcXVhZEluZGljZXMoMCkK
ICAgICAsIG1fc2ltcGxlUHJvZ3JhbSgwKQpAQCAtOTIsMTAgKzk0LDggQEAgR0xFUzJDYW52YXM6
OkdMRVMyQ2FudmFzKEdMRVMyQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
ICAgICBtX2ZsaXBNYXRyaXgudHJhbnNsYXRlKC0xLjBmLCAxLjBmKTsKICAgICBtX2ZsaXBNYXRy
aXguc2NhbGUoMi4wZiAvIHNpemUud2lkdGgoKSwgLTIuMGYgLyBzaXplLmhlaWdodCgpKTsKIAot
ICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotICAgIG1fZ2xlczJDb250ZXh0LT5y
ZXNpemVPZmZzY3JlZW5Db250ZW50KHNpemUpOwotICAgIG1fZ2xlczJDb250ZXh0LT5zd2FwQnVm
ZmVycygpOwotICAgIGdsVmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUgPSAm
bV9zdGF0ZVN0YWNrLmxhc3QoKTsKQEAgLTEwNyw2OSArMTA3LDU4IEBAIEdMRVMyQ2FudmFzOjpH
TEVTMkNhbnZhcyhHTEVTMkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiAK
IEdMRVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fZ2xlczJDb250ZXh0LT5tYWtl
Q3VycmVudCgpOwotICAgIGlmIChtX3NpbXBsZVByb2dyYW0pCi0gICAgICAgIGdsRGVsZXRlUHJv
Z3JhbShtX3NpbXBsZVByb2dyYW0pOwotICAgIGlmIChtX3RleFByb2dyYW0pCi0gICAgICAgIGds
RGVsZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOwotICAgIGlmIChtX3F1YWRWZXJ0aWNlcykKLSAg
ICAgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgaWYgKG1fcXVh
ZEluZGljZXMpCi0gICAgICAgIGdsRGVsZXRlQnVmZmVycygxLCAmbV9xdWFkVmVydGljZXMpOwor
ICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NpbXBsZVByb2dyYW0pOworICAgIG1fY29u
dGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOworICAgIG1fY29udGV4dC0+ZGVsZXRl
QnVmZmVyKG1fcXVhZFZlcnRpY2VzKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1
YWRJbmRpY2VzKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKLQotICAg
IGdsU2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQpOwotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIG1fY29u
dGV4dC0+c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewot
ICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotCi0gICAgZ2xCaW5kQnVmZmVyKEdM
X0FSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNl
cygpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1F
TlRfQVJSQVlfQlVGRkVSLCBnZXRRdWFkSW5kaWNlcygpKTsKIAogICAgIGZsb2F0IHJnYmFbNF07
CiAgICAgY29sb3IuZ2V0UkdCQShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsK
LSAgICBnbFVuaWZvcm00ZihtX3NpbXBsZUNvbG9yTG9jYXRpb24sIHJnYmFbMF0gKiByZ2JhWzNd
LCByZ2JhWzFdICogcmdiYVszXSwgcmdiYVsyXSAqIHJnYmFbM10sIHJnYmFbM10pOworICAgIG1f
Y29udGV4dC0+dW5pZm9ybTRmKG1fc2ltcGxlQ29sb3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFb
M10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwgcmdiYVszXSk7CiAKLSAg
ICBnbERyYXdFbGVtZW50cyhHTF9UUklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsK
KyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVT
LCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwogfQogCiB2b2lkIEdM
RVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9nbGVz
MkNvbnRleHQtPm1ha2VDdXJyZW50KCk7Ci0KICAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1f
c3RhdGUtPm1fY29tcG9zaXRlT3ApOwogCi0gICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZF
UiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBnZXRRdWFkSW5kaWNlcygpKTsKIAotICAgIGdsVXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9n
cmFtKCkpOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9ncmFtKCkpOwog
CiAgICAgZmxvYXQgcmdiYVs0XTsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvci5nZXRSR0JBKHJn
YmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwotICAgIGdsVW5pZm9ybTRmKG1fc2lt
cGxlQ29sb3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCBy
Z2JhWzJdICogcmdiYVszXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9z
aW1wbGVDb2xvckxvY2F0aW9uLCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10s
IHJnYmFbMl0gKiByZ2JhWzNdLCByZ2JhWzNdKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwog
ICAgIG1hdHJpeC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2Nh
bGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBHTGZsb2F0IG1hdFs5XTsKKyAg
ICBmbG9hdCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwotICAgIGdsVW5p
Zm9ybU1hdHJpeDNmdihtX3NpbXBsZU1hdHJpeExvY2F0aW9uLCAxLCBHTF9GQUxTRSwgbWF0KTsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9zaW1wbGVNYXRyaXhMb2NhdGlvbiwg
ZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0LCAxIC8qY291bnQqLyk7CiAKLSAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIobV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIChHTHZvaWQqKSgwKSk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVy
KG1fc2ltcGxlUG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgMCk7CiAKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2ltcGxlUG9z
aXRpb25Mb2NhdGlvbik7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3NpbXBsZVBvc2l0aW9uTG9jYXRpb24pOwogCi0gICAgZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5H
TEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVu
dHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JULCAwKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6c2V0RmlsbENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMjIyLDQ5ICsyMTEs
NDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRl
eHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmUKIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1Rl
eHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7Ci0K
ICAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKIAotICAgIGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKLSAgICBnbEJpbmRCdWZm
ZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGdldFF1YWRJbmRpY2VzKCkpOworICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFk
VmVydGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CiAgICAgY2hlY2tHTEVy
cm9yKCJnbEJpbmRCdWZmZXIiKTsKIAotICAgIGdsVXNlUHJvZ3JhbShnZXRUZXhQcm9ncmFtKCkp
OworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShnZXRUZXhQcm9ncmFtKCkpOwogICAgIGNoZWNr
R0xFcnJvcigiZ2xVc2VQcm9ncmFtIik7CiAKLSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOwogICAgIHRleHR1cmUtPmJpbmQoKTsKIAotICAgIGdsVW5pZm9ybTFpKG1fdGV4U2Ft
cGxlckxvY2F0aW9uLCAwKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3RleFNhbXBsZXJM
b2NhdGlvbiwgMCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZvcm0xaSIpOwogCi0gICAgZ2xV
bmlmb3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVu
aWZvcm0xZiBmb3IgYWxwaGEiKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlw
TWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKICAgICBtYXRyaXgudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CiAgICAgbWF0cml4LnNjYWxlKGRzdFJl
Y3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Ci0gICAgR0xmbG9hdCBtYXRbOV07CisgICAg
ZmxvYXQgbWF0WzldOwogICAgIGFmZmluZVRvM3gzKG1hdHJpeCwgbWF0KTsKLSAgICBnbFVuaWZv
cm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgMSwgR0xfRkFMU0UsIG1hdCk7CisgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8q
dHJhbnNwb3NlKi8sIG1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlm
b3JtTWF0cml4M2Z2Iik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwogICAgIHRl
eE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZS0+d2lkdGgoKSwgMS4wZiAvIHRleHR1cmUtPmhl
aWdodCgpKTsKICAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0Lnko
KSk7CiAgICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQo
KSk7Ci0gICAgR0xmbG9hdCB0ZXhNYXRbOV07CisgICAgZmxvYXQgdGV4TWF0WzldOwogICAgIGFm
ZmluZVRvM3gzKHRleE1hdHJpeCwgdGV4TWF0KTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobV90
ZXhUZXhNYXRyaXhMb2NhdGlvbiwgMSwgR0xfRkFMU0UsIHRleE1hdCk7CisgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNw
b3NlKi8sIHRleE1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3Jt
TWF0cml4M2Z2Iik7CiAKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhQb3NpdGlvbkxv
Y2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIChHTHZvaWQqKSgwKSk7CisgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwgMywgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CiAKLSAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7CisgICAgbV9jb250ZXh0LT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0aW9uTG9jYXRpb24pOwogCi0gICAgZ2xEcmF3
RWxlbWVudHMoR0xfVFJJQU5HTEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgbV9j
b250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKICAgICBjaGVja0dMRXJyb3IoImds
RHJhd0VsZW1lbnRzIik7CiB9CiAKQEAgLTI4MCw1NiArMjY3LDU2IEBAIHZvaWQgR0xFUzJDYW52
YXM6OmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiAKICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBDb21wb3NpdGVDbGVhcjoKLSAgICAgICAgZ2xFbmFibGUo
R0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9aRVJPLCBHTF9aRVJPKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3NpdGVDb3B5Ogot
ICAgICAgICBnbERpc2FibGUoR0xfQkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21w
b3NpdGVTb3VyY2VPdmVyOgotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGds
QmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfU1JDX0FMUEhBKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3NpdGVT
b3VyY2VJbjoKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVu
YyhHTF9EU1RfQUxQSEEsIEdMX1pFUk8pOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgotICAgICAgICBnbEVuYWJs
ZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORV9NSU5VU19EU1RfQUxQSEEs
IEdMX1pFUk8pOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6Ci0gICAgICAgIGdsRW5hYmxlKEdM
X0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfRFNUX0FMUEhBLCBHTF9PTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKLSAgICAgICAg
Z2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkVfTUlOVVNfRFNU
X0FMUEhBLCBHTF9PTkUpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAgICAgZ2xF
bmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9aRVJPLCBHTF9TUkNfQUxQ
SEEpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywg
R3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29tcG9zaXRlRGVzdGluYXRpb25PdXQ6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAg
ICAgICAgZ2xCbGVuZEZ1bmMoR0xfWkVSTywgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29tcG9zaXRlRGVzdGluYXRpb25BdG9wOgotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0g
ICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORV9NSU5VU19EU1RfQUxQSEEsIEdMX1NSQ19BTFBIQSk7
CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Cisg
ICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb21wb3NpdGVYT1I6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAg
ICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FX01JTlVTX0RTVF9BTFBIQSwgR0xfT05FX01JTlVTX1NS
Q19BTFBIQSk7CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKICAgICBj
YXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKICAgICAgICAgLy8gdW5zdXBwb3J0ZWQKLSAgICAgICAg
Z2xEaXNhYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlUGx1
c0xpZ2h0ZXI6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1
bmMoR0xfT05FLCBHTF9PTkUpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIG1fbGFzdENvbXBvc2l0ZU9wID0gb3A7CkBAIC0zMzgsMTMgKzMyNSwxNCBAQCB2
b2lkIEdMRVMyQ2FudmFzOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFF1YWRWZXJ0aWNlcygpCiB7CiAgICAgaWYg
KCFtX3F1YWRWZXJ0aWNlcykgewotICAgICAgICBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYs
IDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwg
MS4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAxLjBmLCAxLjBmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICAg
ICAgZ2xHZW5CdWZmZXJzKDEsICZtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgICAgIGdsQmluZEJ1ZmZl
cihHTF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAgICAgICAgZ2xCdWZmZXJEYXRh
KEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdMX1NUQVRJQ19E
UkFXKTsKKyAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4wZiwgMS4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiB9OworICAgICAgICBtX3F1YWRWZXJ0aWNlcyA9IG1f
Y29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHZl
cnRleEFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUodmVydGljZXMsIHNpemVvZih2ZXJ0aWNl
cykgLyBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKKyAgICAgICAgbV9j
b250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRl
eEFycmF5LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIH0KICAg
ICByZXR1cm4gbV9xdWFkVmVydGljZXM7CiB9CkBAIC0zNTMsMzIgKzM0MSwzMSBAQCB1bnNpZ25l
ZCBHTEVTMkNhbnZhczo6Z2V0UXVhZFZlcnRpY2VzKCkKIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpn
ZXRRdWFkSW5kaWNlcygpCiB7CiAgICAgaWYgKCFtX3F1YWRJbmRpY2VzKSB7Ci0gICAgICAgIEdM
dXNob3J0IGluZGljZXNbXSA9IHsgMCwgMSwgMiwgMCwgMiwgM307CisgICAgICAgIHVuc2lnbmVk
IHNob3J0IGluZGljZXNbXSA9IHsgMCwgMSwgMiwgMCwgMiwgM307CiAKLSAgICAgICAgZ2xHZW5C
dWZmZXJzKDEsICZtX3F1YWRJbmRpY2VzKTsKLSAgICAgICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRJbmRpY2VzKTsKLSAgICAgICAgZ2xCdWZmZXJEYXRhKEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzaXplb2YoaW5kaWNlcyksIGluZGljZXMsIEdMX1NUQVRJ
Q19EUkFXKTsKKyAgICAgICAgbV9xdWFkSW5kaWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVy
KCk7CisgICAgICAgIFJlZlB0cjxVaW50MTZBcnJheT4gaW5kZXhBcnJheSA9IFVpbnQxNkFycmF5
OjpjcmVhdGUoaW5kaWNlcywgc2l6ZW9mKGluZGljZXMpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIsIG1fcXVhZEluZGljZXMpOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEFy
cmF5LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9xdWFkSW5kaWNlczsKIH0KIAotc3RhdGljIEdMdWludCBsb2FkU2hhZGVyKEdMZW51
bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCitzdGF0aWMgdW5zaWduZWQgbG9hZFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdHlwZSwgY29uc3QgY2hh
ciogc2hhZGVyU291cmNlKQogewotICAgIEdMdWludCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcih0
eXBlKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7
CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZ2xTaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlLCAwKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoc2hh
ZGVyKTsKLSAgICBHTGludCBjb21waWxlU3RhdHVzOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHTF9DT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworICAgIFN0cmluZyBzaGFkZXJT
b3VyY2VTdHIoc2hhZGVyU291cmNlKTsKKyAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2Uoc2hhZGVy
LCBzaGFkZXJTb3VyY2VTdHIpOworICAgIGNvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
KyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICBjb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIs
IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwogICAg
IGlmICghY29tcGlsZVN0YXR1cykgewotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBnbEdl
dFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAgICAg
T3duQXJyYXlQdHI8Y2hhcj4gbG9nKG5ldyBjaGFyW2xlbmd0aF0pOwotICAgICAgICBnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsIDAsIGxvZy5nZXQoKSk7Ci0gICAgICAgIExPR19F
UlJPUihsb2cuZ2V0KCkpOwotICAgICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAg
ICBTdHJpbmcgaW5mb0xvZyA9IGNvbnRleHQtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAg
ICAgICAgTE9HX0VSUk9SKGluZm9Mb2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbnRleHQt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0
dXJuIHNoYWRlcjsKQEAgLTM4Nyw3ICszNzQsNyBAQCBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIo
R0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKIHVuc2lnbmVkIEdMRVMyQ2Fu
dmFzOjpnZXRTaW1wbGVQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1fc2ltcGxlUHJvZ3JhbSkgewot
ICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVS
LAorICAgICAgICB1bnNpZ25lZCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKG1fY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCiAgICAgICAgICAgICAidW5pZm9ybSBt
YXQzIG1hdHJpeDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7XG4iCiAgICAg
ICAgICAgICAiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4iCkBAIC0zOTYsNyArMzgzLDcgQEAg
dW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFNpbXBsZVByb2dyYW0oKQogICAgICAgICAgICAgIn1c
biIpOwogICAgICAgICBpZiAoIXZlcnRleFNoYWRlcikKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUiwKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKG1fY29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwKICAgICAgICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0
cml4O1xuIgogICAgICAgICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjtcbiIKQEAgLTQwNSwyMyAr
MzkyLDIzIEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRTaW1wbGVQcm9ncmFtKCkKICAgICAg
ICAgICAgICJ9XG4iKTsKICAgICAgICAgaWYgKCFmcmFnbWVudFNoYWRlcikKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBtX3NpbXBsZVByb2dyYW0gPSBnbENyZWF0ZVByb2dyYW0oKTsK
KyAgICAgICAgbV9zaW1wbGVQcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CiAg
ICAgICAgIGlmICghbV9zaW1wbGVQcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGdsQXR0YWNoU2hhZGVyKG1fc2ltcGxlUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKLSAgICAg
ICAgZ2xBdHRhY2hTaGFkZXIobV9zaW1wbGVQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsTGlua1Byb2dyYW0obV9zaW1wbGVQcm9ncmFtKTsKLSAgICAgICAgR0xpbnQgbGlua1N0
YXR1czsKLSAgICAgICAgZ2xHZXRQcm9ncmFtaXYobV9zaW1wbGVQcm9ncmFtLCBHTF9MSU5LX1NU
QVRVUywgJmxpbmtTdGF0dXMpOworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3Np
bXBsZVByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKG1fc2ltcGxlUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG1fc2ltcGxlUHJvZ3JhbSk7CisgICAgICAgIGludCBsaW5rU3RhdHVzOwor
ICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3NpbXBsZVByb2dyYW0sIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwogICAgICAgICBpZiAoIWxpbmtT
dGF0dXMpIHsKLSAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3NpbXBsZVByb2dyYW0pOwor
ICAgICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2ltcGxlUHJvZ3JhbSk7CiAg
ICAgICAgICAgICBtX3NpbXBsZVByb2dyYW0gPSAwOwogICAgICAgICB9Ci0gICAgICAgIGdsRGVs
ZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIGdsRGVsZXRlU2hhZGVyKGZyYWdtZW50
U2hhZGVyKTsKLSAgICAgICAgbV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uID0gZ2xHZXRBdHRyaWJM
b2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJwb3NpdGlvbiIpOwotICAgICAgICBtX3NpbXBsZU1h
dHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zaW1wbGVQcm9ncmFtLCAibWF0
cml4Iik7Ci0gICAgICAgIG1fc2ltcGxlQ29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1fc2ltcGxlUHJvZ3JhbSwgImNvbG9yIik7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKKyAgICAgICAgbV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJwb3NpdGlvbiIpOworICAg
ICAgICBtX3NpbXBsZU1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24obV9zaW1wbGVQcm9ncmFtLCAibWF0cml4Iik7CisgICAgICAgIG1fc2ltcGxlQ29sb3JMb2Nh
dGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2ltcGxlUHJvZ3JhbSwgImNv
bG9yIik7CiAgICAgfQogICAgIHJldHVybiBtX3NpbXBsZVByb2dyYW07CiB9CkBAIC00MjksNyAr
NDE2LDcgQEAgdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFNpbXBsZVByb2dyYW0oKQogdW5zaWdu
ZWQgR0xFUzJDYW52YXM6OmdldFRleFByb2dyYW0oKQogewogICAgIGlmICghbV90ZXhQcm9ncmFt
KSB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX1ZFUlRFWF9T
SEFERVIsCisgICAgICAgIHVuc2lnbmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIobV9jb250
ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKICAgICAgICAgICAgICJ1bmlm
b3JtIG1hdDMgbWF0cml4O1xuIgogICAgICAgICAgICAgInVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7
XG4iCiAgICAgICAgICAgICAiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4iCkBAIC00NDAsNyAr
NDI3LDcgQEAgdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFRleFByb2dyYW0oKQogICAgICAgICAg
ICAgIn1cbiIpOwogICAgICAgICBpZiAoIXZlcnRleFNoYWRlcikKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdN
RU5UX1NIQURFUiwKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVy
KG1fY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwKICAgICAgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIHNh
bXBsZXIyRCBzYW1wbGVyO1xuIgogICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7XG4i
CkBAIC00NTAsMjUgKzQzNywyNSBAQCB1bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0VGV4UHJvZ3Jh
bSgpCiAgICAgICAgICAgICAifVxuIik7CiAgICAgICAgIGlmICghZnJhZ21lbnRTaGFkZXIpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbV90ZXhQcm9ncmFtID0gZ2xDcmVhdGVQcm9n
cmFtKCk7CisgICAgICAgIG1fdGV4UHJvZ3JhbSA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgp
OwogICAgICAgICBpZiAoIW1fdGV4UHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBnbEF0dGFjaFNoYWRlcihtX3RleFByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgICAg
IGdsQXR0YWNoU2hhZGVyKG1fdGV4UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBn
bExpbmtQcm9ncmFtKG1fdGV4UHJvZ3JhbSk7Ci0gICAgICAgIEdMaW50IGxpbmtTdGF0dXM7Ci0g
ICAgICAgIGdsR2V0UHJvZ3JhbWl2KG1fdGV4UHJvZ3JhbSwgR0xfTElOS19TVEFUVVMsICZsaW5r
U3RhdHVzKTsKKyAgICAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV90ZXhQcm9ncmFtLCB2
ZXJ0ZXhTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3RleFByb2dy
YW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX3Rl
eFByb2dyYW0pOworICAgICAgICBpbnQgbGlua1N0YXR1czsKKyAgICAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYobV90ZXhQcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMs
ICZsaW5rU3RhdHVzKTsKICAgICAgICAgaWYgKCFsaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBn
bERlbGV0ZVByb2dyYW0obV90ZXhQcm9ncmFtKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOwogICAgICAgICAgICAgbV90ZXhQcm9ncmFtID0gMDsK
ICAgICAgICAgfQotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAg
ICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fdGV4TWF0cml4TG9j
YXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJtYXRyaXgiKTsKLSAg
ICAgICAgbV90ZXhTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFBy
b2dyYW0sICJzYW1wbGVyIik7Ci0gICAgICAgIG1fdGV4VGV4TWF0cml4TG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJ0ZXhNYXRyaXgiKTsKLSAgICAgICAgbV90
ZXhQb3NpdGlvbkxvY2F0aW9uID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihtX3RleFByb2dyYW0sICJw
b3NpdGlvbiIpOwotICAgICAgICBtX3RleEFscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihtX3RleFByb2dyYW0sICJhbHBoYSIpOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFn
bWVudFNoYWRlcik7CisgICAgICAgIG1fdGV4TWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJtYXRyaXgiKTsKKyAgICAgICAgbV90ZXhT
YW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dy
YW0sICJzYW1wbGVyIik7CisgICAgICAgIG1fdGV4VGV4TWF0cml4TG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJ0ZXhNYXRyaXgiKTsKKyAgICAg
ICAgbV90ZXhQb3NpdGlvbkxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbiht
X3RleFByb2dyYW0sICJwb3NpdGlvbiIpOworICAgICAgICBtX3RleEFscGhhTG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJhbHBoYSIpOwogICAg
IH0KICAgICByZXR1cm4gbV90ZXhQcm9ncmFtOwogfQpAQCAtNDc5LDcgKzQ2Niw3IEBAIEdMRVMy
VGV4dHVyZSogR0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBH
TEVTMlRleHR1cmU6OkZvcm1hCiAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgIHJldHVybiB0ZXh0
dXJlLmdldCgpOwogCi0gICAgdGV4dHVyZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgdGV4dHVyZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKG1fY29u
dGV4dCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBHTEVTMlRleHR1cmUqIHQgPSB0ZXh0
dXJlLmdldCgpOwogICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7CiAgICAgcmV0dXJu
IHQ7CkBAIC00OTQsMjQgKzQ4MSwyNCBAQCBHTEVTMlRleHR1cmUqIEdMRVMyQ2FudmFzOjpnZXRU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKIHZvaWQgR0xFUzJDYW52YXM6OmNoZWNrR0xFcnJv
cihjb25zdCBjaGFyKiBoZWFkZXIpCiB7CiAjaWZuZGVmIE5ERUJVRwotICAgIEdMZW51bSBlcnI7
Ci0gICAgd2hpbGUgKChlcnIgPSBnbEdldEVycm9yKCkpICE9IEdMX05PX0VSUk9SKSB7CisgICAg
dW5zaWduZWQgZXJyOworICAgIHdoaWxlICgoZXJyID0gbV9jb250ZXh0LT5nZXRFcnJvcigpKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKICAgICAgICAgY29uc3QgY2hhciogZXJy
b3JTdHIgPSAiKioqIFVOS05PV04gRVJST1IgKioqIjsKICAgICAgICAgc3dpdGNoIChlcnIpIHsK
LSAgICAgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJH
TF9JTlZBTElEX0VOVU0iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU06CisgICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNIjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdMX0lOVkFMSURfVkFM
VUU6Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJHTF9JTlZBTElEX1ZBTFVFIjsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAgIGVycm9y
U3RyID0gIkdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFIjsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgotICAgICAgICAgICAgZXJy
b3JTdHIgPSAiR0xfSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiI7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAg
IGVycm9yU3RyID0gIkdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046Cisg
ICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04iOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfT1VU
X09GX01FTU9SWToKLSAgICAgICAgICAgIGVycm9yU3RyID0gIkdMX09VVF9PRl9NRU1PUlkiOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAg
ICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkiOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhlYWRlcikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCA0ZTUwMGJl
Zjg1OWRkY2ZiMDViZWRmYjhlOWYyNDIxMGUxYmQzMmFkLi5jZWE5MGFlYWFiYjI2MTQ3ZjFmMjQz
MjY3MTgwOTI1Y2M4YWE3MzNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5oCkBAIC00NiwxNSArNDYsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBDb2xvcjsKLWNsYXNzIEdMRVMyQ29u
dGV4dDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiB0eXBl
ZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxHTEVTMlRleHR1cmU+ID4gVGV4dHVy
ZUhhc2hNYXA7CiAKIGNsYXNzIEdMRVMyQ2FudmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKLSAgICBHTEVTMkNhbnZhcyhHTEVTMkNvbnRleHQqLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgR0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAgICAg
fkdMRVMyQ2FudmFzKCk7CiAKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAv
LyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBhdCBzb21lIHBvaW50LgogICAgIHZv
aWQgZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxv
YXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAg
ICBHTEVTMkNvbnRleHQqIGdsZXMyQ29udGV4dCgpIHsgcmV0dXJuIG1fZ2xlczJDb250ZXh0OyB9
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0K
ICAgICBHTEVTMlRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIEdMRVMyVGV4
dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIEdMRVMyVGV4dHVyZSog
Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBnZXRTaW1wbGVQcm9ncmFtKCk7CiAgICAgdW5zaWduZWQgZ2V0VGV4UHJv
Z3JhbSgpOwogCi0gICAgR0xFUzJDb250ZXh0KiBtX2dsZXMyQ29udGV4dDsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIHN0cnVjdCBTdGF0ZTsKICAgICBXVEY6OlZlY3Rv
cjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOwogICAgIFN0YXRlKiBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCmluZGV4IDI2
YzhiZjdiZWFlOGViYWZhNGViZTAyZjJkODNlNGNjZmE4ODkwOGYuLjVlOGExNDFkZDI4MmYyOTQ0
MTNhODUxZjEyNGJhODBkZjdmZDFkNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKQEAgLTM0LDE0ICszNCwxNSBAQAogCiAj
aW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1cmUodW5z
aWduZWQgaW50IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQotICAgIDogbV90ZXh0dXJlSWQodGV4dHVyZUlkKQorR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgRm9ybWF0
IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpCiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCiAg
ICAgLCBtX3dpZHRoKHdpZHRoKQogICAgICwgbV9oZWlnaHQoaGVpZ2h0KQpAQCAtNTAsMjUgKzUx
LDI2IEBAIEdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKHVuc2lnbmVkIGludCB0ZXh0dXJlSWQs
IEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50CiAKIEdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4
dHVyZSgpCiB7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlSWQpOworICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CiB9CiAKLVBhc3NSZWZQdHI8R0xF
UzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNyZWF0ZShGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpCitQYXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gR0xFUzJUZXh0dXJlOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKIHsKLSAgICBHTHVpbnQgdGV4dHVyZUlkOwotICAgIGdsR2VuVGV4dHVyZXMo
MSwgJnRleHR1cmVJZCk7Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCisgICAgaW50IG1heDsKKyAgICBj
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwg
Jm1heCk7CisgICAgaWYgKHdpZHRoID4gbWF4IHx8IGhlaWdodCA+IG1heCkgeworICAgICAgICBB
U1NFUlQoISJ0ZXh0dXJlIHRvbyBiaWciKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAw
OwogCi0gICAgaW50IG1heDsKLSAgICBnbEdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX1NJWkUs
ICZtYXgpOwotICAgIGlmICh3aWR0aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpCi0gICAgICAgIEFT
U0VSVCghInRleHR1cmUgdG9vIGJpZyIpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBHTEVTMlRleHR1cmUodGV4dHVyZUlkLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWQsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdMRVMy
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdW5zaWduZWQg
aW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCkBAIC03NiwxNCArNzgsMTQgQEAgc3RhdGljIHZv
aWQgY29udmVydEZvcm1hdChHTEVTMlRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGlu
dCogZ2xGb3JtYXQsIHUKICAgICAqc3dpenpsZSA9IGZhbHNlOwogICAgIHN3aXRjaCAoZm9ybWF0
KSB7CiAgICAgY2FzZSBHTEVTMlRleHR1cmU6OlJHQkE4OgotICAgICAgICAqZ2xGb3JtYXQgPSBH
TF9SR0JBOwotICAgICAgICAqZ2xUeXBlID0gR0xfVU5TSUdORURfQllURTsKKyAgICAgICAgKmds
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICpnbFR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
TEVTMlRleHR1cmU6OkJHUkE4OgogLy8gRklYTUU6ICBPbmNlIHdlIGhhdmUgc3VwcG9ydCBmb3Ig
ZXh0ZW5zaW9ucywgd2Ugc2hvdWxkIGNoZWNrIGZvciBFWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgsCiAvLyBhbmQgdXNlIHRoYXQgaWYgcHJlc2VudC4KLSAgICAgICAgKmdsRm9ybWF0ID0gR0xf
UkdCQTsKLSAgICAgICAgKmdsVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgICpnbEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAqZ2xUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgICAgICpzd2l6emxlID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTk3LDkgKzk5LDkgQEAgdm9pZCBHTEVTMlRl
eHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCwgZ2xU
eXBlOwogICAgIGJvb2wgc3dpenpsZTsKICAgICBjb252ZXJ0Rm9ybWF0KG1fZm9ybWF0LCAmZ2xG
b3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CiAgICAgaWYgKHN3aXp6bGUpIHsKLSAg
ICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdMX1JHQkEgJiYgZ2xUeXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpOworICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAgICAg
ICAgLy8gRklYTUU6ICBUaGlzIGNvdWxkIHVzZSBQQk8ncyB0byBzYXZlIGRvaW5nIGFuIGV4dHJh
IGNvcHkgaGVyZS4KICAgICAgICAgaW50IHNpemUgPSBtX3dpZHRoICogbV9oZWlnaHQ7CiAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbHMzMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4ocGl4ZWxzKTsK
QEAgLTEwOSwxOCArMTExLDE4IEBAIHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVs
cykKICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsID0gcGl4ZWxzMzJbaV07CiAgICAgICAgICAg
ICBidWZwdHJbaV0gPSBwaXhlbCAmIDB4RkYwMEZGMDAgfCAoKHBpeGVsICYgMHgwMEZGMDAwMCkg
Pj4gMTYpIHwgKChwaXhlbCAmIDB4MDAwMDAwRkYpIDw8IDE2KTsKICAgICAgICAgfQotICAgICAg
ICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWln
aHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0
aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCAwLCAwLCBtX3dpZHRoLCBt
X2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBtX3dp
ZHRoLCBtX2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgcGl4ZWxzKTsKIH0KIAogdm9pZCBHTEVT
MlRleHR1cmU6OmJpbmQoKQogewotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlSWQpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCmluZGV4IDM0NjM2
NWE5MzVhOWI2NTZhNzlkMzYzNjI1MmY2NTQwNTJkNTIyMTEuLjRkMzUxY2RkMzdkOWUxOWRmNWY0
OGJiOTRiZWQ0NzczYjY4MGVkOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaApAQCAtMzcsMjAgKzM3LDIyIEBACiAjaW5jbHVkZSAi
UmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwogCiBjbGFzcyBHTEVTMlRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxHTEVTMlRleHR1cmU+
IHsKIHB1YmxpYzoKICAgICB+R0xFUzJUZXh0dXJlKCk7CiAgICAgZW51bSBGb3JtYXQgeyBSR0JB
OCwgQkdSQTggfTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IGNyZWF0ZShG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R0xF
UzJUZXh0dXJlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAgICAgdm9pZCBiaW5kKCk7CiAgICAgdm9pZCBsb2FkKHZvaWQqIHBpeGVs
cyk7CiAgICAgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAgICAg
aW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIGludCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hlaWdodDsgfQogcHJpdmF0ZToKLSAgICBHTEVTMlRleHR1cmUodW5z
aWduZWQgaW50IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlSWQ7CisgICAgR0xFUzJUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7CiAgICAgaW50IG1fd2lkdGg7CiAg
ICAgaW50IG1faGVpZ2h0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IDc5OTQyNDRlM2FkYTU5NDhkNjkyZjI2
MWUzYTRkOTk2NjczZWJmMDkuLjg4NDU1MmQ2ODY3NjNlNDQ0Mzg4MGVmYWZlNzc3YWZiYjgwYTkx
YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKQEAgLTc4Niw4ICs3ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zYXZlKCk7
Ci0KICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShnZXRDVE0o
KSwgcikpIHsKICAgICAgICAgLy8gU2VlIHRoZSBvdGhlciB2ZXJzaW9uIG9mIGZpbGxSZWN0IGJl
bG93LgpAQCAtNzk4LDEwICs3OTYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQ
VSgpICYmICFtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4gJiYgIW1fY29tbW9uLT5zdGF0ZS5m
aWxsR3JhZGllbnQpIHsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJk
d2FyZURyYXcoKTsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5maWxs
UmVjdChyZWN0KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNhdmUo
KTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAK
ICAgICBTa1BhaW50IHBhaW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VTa2lhLmNwcAppbmRleCBhMjQ4NWU2YWI2MjY1MDlkZjA3NTM2MjY5ZTljZGJmODNkNGU1ZTZm
Li4wMjRiZjUwZGMxMzMzYTIwYWEyZGFhZTFhYzdlNWE0ZjVlZWMwZTEwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDE0LDcgKzQxNCw2IEBA
IHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBHTEVTMihHcmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2
ZUltYWdlU2tpYSogYml0bWFwLCBjb25zCiB7CiAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzID0g
Y3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpOwotICAgIGdwdUNhbnZhcy0+Z2xl
czJDb250ZXh0KCktPm1ha2VDdXJyZW50KCk7CiAgICAgR0xFUzJUZXh0dXJlKiB0ZXh0dXJlID0g
Z3B1Q2FudmFzLT5nZXRUZXh0dXJlKGJpdG1hcCk7CiAgICAgaWYgKCF0ZXh0dXJlKSB7CiAgICAg
ICAgIEFTU0VSVChiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZp
Zyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKaW5kZXggNWVjOWE1YzE0MmU1NjM5M2RmNjNkNWY3NTliZWU2NWQzNDEw
MTBkMC4uYjE0YzZjZDA0Y2EzMGJkNDE3MTAyZTQzNTcwNjNiZWFjYWUyMjJjYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcApAQCAtMzAsNiArMzAsOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgpAQCAtNDUsMTAgKzQ4LDkgQEAKICNpbmNsdWRl
ICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAKICNpZiBVU0UoR0xFUzJfUkVOREVSSU5HKQorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKLSNpbmNs
dWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJHTEVTMlRleHR1cmUuaCIKLSNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAg
LTY3NSw3ICs2NzcsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFz
ZWRDbGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpCiB9CiAKICNpZiBVU0UoR0xF
UzJfUkVOREVSSU5HKQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHTEVTMkNvbnRleHQo
R0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorCit2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogewogICAgIG1fdXNlR1BVID0g
dHJ1ZTsKICAgICBtX2dwdUNhbnZhcyA9IG5ldyBHTEVTMkNhbnZhcyhjb250ZXh0LCBzaXplKTsK
QEAgLTc2MCwyNSArNzYzLDI2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29m
dHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSBjb25zdAogewogICAgIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChm
YWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgbV9ncHVDYW52
YXMtPmdsZXMyQ29udGV4dCgpLT5tYWtlQ3VycmVudCgpOwogICAgIC8vIEZJWE1FOiBLZWVwIGEg
dGV4dHVyZSBhcm91bmQgZm9yIHRoaXMgcmF0aGVyIHRoYW4gY29uc3RhbnRseSBjcmVhdGluZy9k
ZXN0cm95aW5nIG9uZS4KLSAgICBSZWZQdHI8R0xFUzJUZXh0dXJlPiB0ZXh0dXJlID0gR0xFUzJU
ZXh0dXJlOjpjcmVhdGUoR0xFUzJUZXh0dXJlOjpCR1JBOCwgYml0bWFwLndpZHRoKCksIGJpdG1h
cC5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZh
cy0+Y29udGV4dCgpOworICAgIFJlZlB0cjxHTEVTMlRleHR1cmU+IHRleHR1cmUgPSBHTEVTMlRl
eHR1cmU6OmNyZWF0ZShjb250ZXh0LCBHTEVTMlRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgo
KSwgYml0bWFwLmhlaWdodCgpKTsKICAgICB0ZXh0dXJlLT5sb2FkKGJpdG1hcC5nZXRQaXhlbHMo
KSk7CiAgICAgSW50UmVjdCByZWN0KDAsIDAsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0
KCkpOwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUuZ2V0KCksIHJl
Y3QsIHJlY3QsIERldmljZUNvbG9yU3BhY2UsIG9wKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaWRl
bnRpdHk7CisgICAgZ3B1Q2FudmFzKCktPmRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZS5nZXQoKSwg
cmVjdCwgcmVjdCwgaWRlbnRpdHksIDEuMCwgRGV2aWNlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCkgY29u
c3QKIHsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgp
LT5hY2Nlc3NCaXRtYXAodHJ1ZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7
Ci0gICAgbV9ncHVDYW52YXMtPmdsZXMyQ29udGV4dCgpLT5tYWtlQ3VycmVudCgpOwogICAgIGlu
dCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBoZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7CiAgICAg
T3duQXJyYXlQdHI8dWludDMyX3Q+IGJ1ZihuZXcgdWludDMyX3Rbd2lkdGhdKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgLy8g
RmxpcHMgdGhlIGltYWdlIHZlcnRpY2FsbHkuCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7ICsreSkgewogICAgICAgICB1aW50MzJfdCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigw
LCB5KTsKLSAgICAgICAgZ2xSZWFkUGl4ZWxzKDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0aCwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyAgICAgICAgY29udGV4dC0+cmVh
ZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgKytpKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBw
aXhlbCA9IHBpeGVsc1tpXTsKICAgICAgICAgICAgIC8vIFN3aXp6bGVzIGZyb20gUkdCQSAtPiBC
R1JBLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKaW5kZXggNWRhNTE0MTE0NTA4ZWU3YWVkNmIyYWI5OWIyODZjYjVhY2NhNWFm
Mi4uZmY4MGQxYmFkZTYwMGUzY2MyZDg5ZmEyYTM1MzQwNjViNTg2NTI4NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBA
IC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoR0xFUzJfUkVOREVS
SU5HKQogZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKIGNsYXNzIEdMRVMyQ2FudmFzOwotY2xhc3Mg
R0xFUzJDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAjZW5kaWYKIAogLy8gVGhp
cyBjbGFzcyBob2xkcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29u
dGV4dC4gV2UgcHV0CkBAIC0xODMsNyArMTgzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW1h
Z2VSZXNhbXBsaW5nSGludCgpIGNvbnN0OwogI2lmIFVTRShHTEVTMl9SRU5ERVJJTkcpCiAgICAg
Ym9vbCB1c2VHUFUoKSB7IHJldHVybiBtX3VzZUdQVTsgfQotICAgIHZvaWQgc2V0R0xFUzJDb250
ZXh0KEdMRVMyQ29udGV4dCosIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIEdMRVMy
Q2FudmFzKiBncHVDYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2dwdUNhbnZhcy5nZXQoKTsgfQog
I2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63750</attachid>
            <date>2010-08-06 12:05:41 -0700</date>
            <delta_ts>2010-08-06 14:59:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43608-20100806120539.patch</filename>
            <type>text/plain</type>
            <size>39008</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uZWRjODllNzM5YWQ3OGM3
OTU2NjhiN2VmOTQ3OWRmYTU4MzE3YTEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IEdMRVMyQ2Fu
dmFzL1RleHR1cmUgaW4gdGVybXMgb2YgR3JhcGhpY3NDb250ZXh0M0QgaW5zdGVhZCBvZiBkaXJl
Y3QgT3BlbkdMIGNhbGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MzYwOAorCisgICAgICAgIFRoaXMgY29udmVydHMgYWxsIE9wZW5HTCBjYWxscyBp
biBHTEVTMihDYW52YXN8VGV4dHVyZSkgdG8gY2FsbHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgR3Jh
cGhpY3NDb250ZXh0M0QKKyAgICAgICAgQVBJLCBkdWUgdG8gZmVlZGJhY2sgb24gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzYyLiAgTmVhcmx5IGFsbCB0aGUgY2hh
bmdlcyBhcmUKKyAgICAgICAgYXBwbHlpbmcgdGhlIHJlZ2V4IHMvZ2woW0EtWl0pL21fY29udGV4
dC0+JTE8LyBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgbWFrZUN1cnJlbnQoKSBjYWxscy4KKyAg
ICAgICAgT3RoZXIgY2hhbmdlcyBoaWxpZ2h0ZWQgYmVsb3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
ZmZpbmVUbzN4Myk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDb21w
b3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0UXVhZFZl
cnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRRdWFkSW5kaWNlcyk6
CisgICAgICAgICAgICAtIHVzZSBuZXcgdHlwZWQgWFhBcnJheSBjbGFzc2VzIGZvciBidWZmZXIg
dXBsb2FkcworICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6Z2V0U2ltcGxlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Z2V0VGV4UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2hlY2tHTEVy
cm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNvbnRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMlRleHR1cmU6OkdMRVMyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MlRleHR1cmU6On5HTEVTMlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0
dXJlOjpiaW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRl
eHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6
CisgICAgICAgICAgICAtIGFkZCBhIG1pc3NpbmcgcmVzdG9yZSgpIGNhbGwgdG8gdGhlIEgvVyBw
YXRoCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd0JpdG1hcEdMRVMyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAg
ICAgICAgIC0gYXZvaWQgYXBwbHlpbmcgQ1RNIHRvIHVwbG9hZHMKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKwogMjAx
MC0wOC0wNSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRleCA5ZmM4OTE3YzQ2NzUwMzlkOTEzOWEw
ZWZkYzQ3ZDhlYTE3ZTczZDg3Li44YTliZGUxZjhmYzY0NDZlM2MyMDQ5OTE1NGIwNTI0Yjg2MWE5
MmI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcApAQCAtMzQsMjAgKzM0LDIyIEBACiAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5o
IgogCisjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCi0KLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKIAogI2Rl
ZmluZSBfVVNFX01BVEhfREVGSU5FUwogI2luY2x1ZGUgPG1hdGguaD4KIAorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWZmaW5lVG8zeDMoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIEdMZmxvYXQgbWF0WzldKQorc3RhdGljIGlubGluZSB2
b2lkIGFmZmluZVRvM3gzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBt
YXRbOV0pCiB7CiAgICAgbWF0WzBdID0gdHJhbnNmb3JtLmEoKTsKICAgICBtYXRbMV0gPSB0cmFu
c2Zvcm0uYigpOwpAQCAtNzMsOCArNzUsOCBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiB9OwogCi1HTEVTMkNhbnZhczo6R0xFUzJDYW52
YXMoR0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9n
bGVzMkNvbnRleHQoY29udGV4dCkKK0dMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9xdWFkVmVydGljZXMoMCkKICAgICAsIG1fcXVhZEluZGljZXMoMCkK
ICAgICAsIG1fc2ltcGxlUHJvZ3JhbSgwKQpAQCAtOTIsMTAgKzk0LDggQEAgR0xFUzJDYW52YXM6
OkdMRVMyQ2FudmFzKEdMRVMyQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
ICAgICBtX2ZsaXBNYXRyaXgudHJhbnNsYXRlKC0xLjBmLCAxLjBmKTsKICAgICBtX2ZsaXBNYXRy
aXguc2NhbGUoMi4wZiAvIHNpemUud2lkdGgoKSwgLTIuMGYgLyBzaXplLmhlaWdodCgpKTsKIAot
ICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotICAgIG1fZ2xlczJDb250ZXh0LT5y
ZXNpemVPZmZzY3JlZW5Db250ZW50KHNpemUpOwotICAgIG1fZ2xlczJDb250ZXh0LT5zd2FwQnVm
ZmVycygpOwotICAgIGdsVmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUgPSAm
bV9zdGF0ZVN0YWNrLmxhc3QoKTsKQEAgLTEwNyw2OSArMTA3LDU4IEBAIEdMRVMyQ2FudmFzOjpH
TEVTMkNhbnZhcyhHTEVTMkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiAK
IEdMRVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fZ2xlczJDb250ZXh0LT5tYWtl
Q3VycmVudCgpOwotICAgIGlmIChtX3NpbXBsZVByb2dyYW0pCi0gICAgICAgIGdsRGVsZXRlUHJv
Z3JhbShtX3NpbXBsZVByb2dyYW0pOwotICAgIGlmIChtX3RleFByb2dyYW0pCi0gICAgICAgIGds
RGVsZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOwotICAgIGlmIChtX3F1YWRWZXJ0aWNlcykKLSAg
ICAgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgaWYgKG1fcXVh
ZEluZGljZXMpCi0gICAgICAgIGdsRGVsZXRlQnVmZmVycygxLCAmbV9xdWFkVmVydGljZXMpOwor
ICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NpbXBsZVByb2dyYW0pOworICAgIG1fY29u
dGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOworICAgIG1fY29udGV4dC0+ZGVsZXRl
QnVmZmVyKG1fcXVhZFZlcnRpY2VzKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1
YWRJbmRpY2VzKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKLQotICAg
IGdsU2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQpOwotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIG1fY29u
dGV4dC0+c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewot
ICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwotCi0gICAgZ2xCaW5kQnVmZmVyKEdM
X0FSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNl
cygpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1F
TlRfQVJSQVlfQlVGRkVSLCBnZXRRdWFkSW5kaWNlcygpKTsKIAogICAgIGZsb2F0IHJnYmFbNF07
CiAgICAgY29sb3IuZ2V0UkdCQShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsK
LSAgICBnbFVuaWZvcm00ZihtX3NpbXBsZUNvbG9yTG9jYXRpb24sIHJnYmFbMF0gKiByZ2JhWzNd
LCByZ2JhWzFdICogcmdiYVszXSwgcmdiYVsyXSAqIHJnYmFbM10sIHJnYmFbM10pOworICAgIG1f
Y29udGV4dC0+dW5pZm9ybTRmKG1fc2ltcGxlQ29sb3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFb
M10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwgcmdiYVszXSk7CiAKLSAg
ICBnbERyYXdFbGVtZW50cyhHTF9UUklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsK
KyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVT
LCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwogfQogCiB2b2lkIEdM
RVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9nbGVz
MkNvbnRleHQtPm1ha2VDdXJyZW50KCk7Ci0KICAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1f
c3RhdGUtPm1fY29tcG9zaXRlT3ApOwogCi0gICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZF
UiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBnZXRRdWFkSW5kaWNlcygpKTsKIAotICAgIGdsVXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9n
cmFtKCkpOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShnZXRTaW1wbGVQcm9ncmFtKCkpOwog
CiAgICAgZmxvYXQgcmdiYVs0XTsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvci5nZXRSR0JBKHJn
YmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwotICAgIGdsVW5pZm9ybTRmKG1fc2lt
cGxlQ29sb3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCBy
Z2JhWzJdICogcmdiYVszXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9z
aW1wbGVDb2xvckxvY2F0aW9uLCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10s
IHJnYmFbMl0gKiByZ2JhWzNdLCByZ2JhWzNdKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwog
ICAgIG1hdHJpeC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2Nh
bGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBHTGZsb2F0IG1hdFs5XTsKKyAg
ICBmbG9hdCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwotICAgIGdsVW5p
Zm9ybU1hdHJpeDNmdihtX3NpbXBsZU1hdHJpeExvY2F0aW9uLCAxLCBHTF9GQUxTRSwgbWF0KTsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9zaW1wbGVNYXRyaXhMb2NhdGlvbiwg
ZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0LCAxIC8qY291bnQqLyk7CiAKLSAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIobV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIChHTHZvaWQqKSgwKSk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVy
KG1fc2ltcGxlUG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgMCk7CiAKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2ltcGxlUG9z
aXRpb25Mb2NhdGlvbik7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3NpbXBsZVBvc2l0aW9uTG9jYXRpb24pOwogCi0gICAgZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5H
TEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVu
dHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JULCAwKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6c2V0RmlsbENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMjIyLDQ5ICsyMTEs
NDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRl
eHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmUKIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1Rl
eHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7Ci0K
ICAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKIAotICAgIGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKLSAgICBnbEJpbmRCdWZm
ZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGdldFF1YWRJbmRpY2VzKCkpOworICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFk
VmVydGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgZ2V0UXVhZEluZGljZXMoKSk7CiAgICAgY2hlY2tHTEVy
cm9yKCJnbEJpbmRCdWZmZXIiKTsKIAotICAgIGdsVXNlUHJvZ3JhbShnZXRUZXhQcm9ncmFtKCkp
OworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShnZXRUZXhQcm9ncmFtKCkpOwogICAgIGNoZWNr
R0xFcnJvcigiZ2xVc2VQcm9ncmFtIik7CiAKLSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOwogICAgIHRleHR1cmUtPmJpbmQoKTsKIAotICAgIGdsVW5pZm9ybTFpKG1fdGV4U2Ft
cGxlckxvY2F0aW9uLCAwKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3RleFNhbXBsZXJM
b2NhdGlvbiwgMCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZvcm0xaSIpOwogCi0gICAgZ2xV
bmlmb3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVu
aWZvcm0xZiBmb3IgYWxwaGEiKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlw
TWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKICAgICBtYXRyaXgudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CiAgICAgbWF0cml4LnNjYWxlKGRzdFJl
Y3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Ci0gICAgR0xmbG9hdCBtYXRbOV07CisgICAg
ZmxvYXQgbWF0WzldOwogICAgIGFmZmluZVRvM3gzKG1hdHJpeCwgbWF0KTsKLSAgICBnbFVuaWZv
cm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgMSwgR0xfRkFMU0UsIG1hdCk7CisgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8q
dHJhbnNwb3NlKi8sIG1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlm
b3JtTWF0cml4M2Z2Iik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwogICAgIHRl
eE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZS0+d2lkdGgoKSwgMS4wZiAvIHRleHR1cmUtPmhl
aWdodCgpKTsKICAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0Lnko
KSk7CiAgICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQo
KSk7Ci0gICAgR0xmbG9hdCB0ZXhNYXRbOV07CisgICAgZmxvYXQgdGV4TWF0WzldOwogICAgIGFm
ZmluZVRvM3gzKHRleE1hdHJpeCwgdGV4TWF0KTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobV90
ZXhUZXhNYXRyaXhMb2NhdGlvbiwgMSwgR0xfRkFMU0UsIHRleE1hdCk7CisgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNw
b3NlKi8sIHRleE1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3Jt
TWF0cml4M2Z2Iik7CiAKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhQb3NpdGlvbkxv
Y2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIChHTHZvaWQqKSgwKSk7CisgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwgMywgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CiAKLSAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7CisgICAgbV9jb250ZXh0LT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0aW9uTG9jYXRpb24pOwogCi0gICAgZ2xEcmF3
RWxlbWVudHMoR0xfVFJJQU5HTEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgbV9j
b250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKICAgICBjaGVja0dMRXJyb3IoImds
RHJhd0VsZW1lbnRzIik7CiB9CiAKQEAgLTI4MCw1NiArMjY3LDU2IEBAIHZvaWQgR0xFUzJDYW52
YXM6OmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiAKICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBDb21wb3NpdGVDbGVhcjoKLSAgICAgICAgZ2xFbmFibGUo
R0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9aRVJPLCBHTF9aRVJPKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3NpdGVDb3B5Ogot
ICAgICAgICBnbERpc2FibGUoR0xfQkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21w
b3NpdGVTb3VyY2VPdmVyOgotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGds
QmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfU1JDX0FMUEhBKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wb3NpdGVT
b3VyY2VJbjoKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVu
YyhHTF9EU1RfQUxQSEEsIEdMX1pFUk8pOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgotICAgICAgICBnbEVuYWJs
ZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORV9NSU5VU19EU1RfQUxQSEEs
IEdMX1pFUk8pOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6Ci0gICAgICAgIGdsRW5hYmxlKEdM
X0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfRFNUX0FMUEhBLCBHTF9PTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKLSAgICAgICAg
Z2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkVfTUlOVVNfRFNU
X0FMUEhBLCBHTF9PTkUpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAgICAgZ2xF
bmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9aRVJPLCBHTF9TUkNfQUxQ
SEEpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywg
R3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29tcG9zaXRlRGVzdGluYXRpb25PdXQ6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAg
ICAgICAgZ2xCbGVuZEZ1bmMoR0xfWkVSTywgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29tcG9zaXRlRGVzdGluYXRpb25BdG9wOgotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0g
ICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORV9NSU5VU19EU1RfQUxQSEEsIEdMX1NSQ19BTFBIQSk7
CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Cisg
ICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb21wb3NpdGVYT1I6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAg
ICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FX01JTlVTX0RTVF9BTFBIQSwgR0xfT05FX01JTlVTX1NS
Q19BTFBIQSk7CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKICAgICBj
YXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKICAgICAgICAgLy8gdW5zdXBwb3J0ZWQKLSAgICAgICAg
Z2xEaXNhYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcG9zaXRlUGx1
c0xpZ2h0ZXI6Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1
bmMoR0xfT05FLCBHTF9PTkUpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIG1fbGFzdENvbXBvc2l0ZU9wID0gb3A7CkBAIC0zMzgsMTMgKzMyNSwxNCBAQCB2
b2lkIEdMRVMyQ2FudmFzOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFF1YWRWZXJ0aWNlcygpCiB7CiAgICAgaWYg
KCFtX3F1YWRWZXJ0aWNlcykgewotICAgICAgICBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYs
IDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwg
MS4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAxLjBmLCAxLjBmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICAg
ICAgZ2xHZW5CdWZmZXJzKDEsICZtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgICAgIGdsQmluZEJ1ZmZl
cihHTF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAgICAgICAgZ2xCdWZmZXJEYXRh
KEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdMX1NUQVRJQ19E
UkFXKTsKKyAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4wZiwgMS4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiB9OworICAgICAgICBtX3F1YWRWZXJ0aWNlcyA9IG1f
Y29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHZl
cnRleEFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUodmVydGljZXMsIHNpemVvZih2ZXJ0aWNl
cykgLyBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKKyAgICAgICAgbV9j
b250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRl
eEFycmF5LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIH0KICAg
ICByZXR1cm4gbV9xdWFkVmVydGljZXM7CiB9CkBAIC0zNTMsMzIgKzM0MSwzMSBAQCB1bnNpZ25l
ZCBHTEVTMkNhbnZhczo6Z2V0UXVhZFZlcnRpY2VzKCkKIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpn
ZXRRdWFkSW5kaWNlcygpCiB7CiAgICAgaWYgKCFtX3F1YWRJbmRpY2VzKSB7Ci0gICAgICAgIEdM
dXNob3J0IGluZGljZXNbXSA9IHsgMCwgMSwgMiwgMCwgMiwgM307CisgICAgICAgIHVuc2lnbmVk
IHNob3J0IGluZGljZXNbXSA9IHsgMCwgMSwgMiwgMCwgMiwgM307CiAKLSAgICAgICAgZ2xHZW5C
dWZmZXJzKDEsICZtX3F1YWRJbmRpY2VzKTsKLSAgICAgICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRJbmRpY2VzKTsKLSAgICAgICAgZ2xCdWZmZXJEYXRhKEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzaXplb2YoaW5kaWNlcyksIGluZGljZXMsIEdMX1NUQVRJ
Q19EUkFXKTsKKyAgICAgICAgbV9xdWFkSW5kaWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVy
KCk7CisgICAgICAgIFJlZlB0cjxVaW50MTZBcnJheT4gaW5kZXhBcnJheSA9IFVpbnQxNkFycmF5
OjpjcmVhdGUoaW5kaWNlcywgc2l6ZW9mKGluZGljZXMpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIsIG1fcXVhZEluZGljZXMpOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEFy
cmF5LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9xdWFkSW5kaWNlczsKIH0KIAotc3RhdGljIEdMdWludCBsb2FkU2hhZGVyKEdMZW51
bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCitzdGF0aWMgdW5zaWduZWQgbG9hZFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdHlwZSwgY29uc3QgY2hh
ciogc2hhZGVyU291cmNlKQogewotICAgIEdMdWludCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcih0
eXBlKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7
CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZ2xTaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlLCAwKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoc2hh
ZGVyKTsKLSAgICBHTGludCBjb21waWxlU3RhdHVzOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHTF9DT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworICAgIFN0cmluZyBzaGFkZXJT
b3VyY2VTdHIoc2hhZGVyU291cmNlKTsKKyAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2Uoc2hhZGVy
LCBzaGFkZXJTb3VyY2VTdHIpOworICAgIGNvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
KyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICBjb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIs
IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwogICAg
IGlmICghY29tcGlsZVN0YXR1cykgewotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBnbEdl
dFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAgICAg
T3duQXJyYXlQdHI8Y2hhcj4gbG9nKG5ldyBjaGFyW2xlbmd0aF0pOwotICAgICAgICBnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsIDAsIGxvZy5nZXQoKSk7Ci0gICAgICAgIExPR19F
UlJPUihsb2cuZ2V0KCkpOwotICAgICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAg
ICBTdHJpbmcgaW5mb0xvZyA9IGNvbnRleHQtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAg
ICAgICAgTE9HX0VSUk9SKGluZm9Mb2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbnRleHQt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0
dXJuIHNoYWRlcjsKQEAgLTM4Nyw3ICszNzQsNyBAQCBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIo
R0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKIHVuc2lnbmVkIEdMRVMyQ2Fu
dmFzOjpnZXRTaW1wbGVQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1fc2ltcGxlUHJvZ3JhbSkgewot
ICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVS
LAorICAgICAgICB1bnNpZ25lZCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKG1fY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCiAgICAgICAgICAgICAidW5pZm9ybSBt
YXQzIG1hdHJpeDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7XG4iCiAgICAg
ICAgICAgICAiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4iCkBAIC0zOTYsNyArMzgzLDcgQEAg
dW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFNpbXBsZVByb2dyYW0oKQogICAgICAgICAgICAgIn1c
biIpOwogICAgICAgICBpZiAoIXZlcnRleFNoYWRlcikKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUiwKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKG1fY29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwKICAgICAgICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0
cml4O1xuIgogICAgICAgICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjtcbiIKQEAgLTQwNSwyMyAr
MzkyLDIzIEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRTaW1wbGVQcm9ncmFtKCkKICAgICAg
ICAgICAgICJ9XG4iKTsKICAgICAgICAgaWYgKCFmcmFnbWVudFNoYWRlcikKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBtX3NpbXBsZVByb2dyYW0gPSBnbENyZWF0ZVByb2dyYW0oKTsK
KyAgICAgICAgbV9zaW1wbGVQcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CiAg
ICAgICAgIGlmICghbV9zaW1wbGVQcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGdsQXR0YWNoU2hhZGVyKG1fc2ltcGxlUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKLSAgICAg
ICAgZ2xBdHRhY2hTaGFkZXIobV9zaW1wbGVQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsTGlua1Byb2dyYW0obV9zaW1wbGVQcm9ncmFtKTsKLSAgICAgICAgR0xpbnQgbGlua1N0
YXR1czsKLSAgICAgICAgZ2xHZXRQcm9ncmFtaXYobV9zaW1wbGVQcm9ncmFtLCBHTF9MSU5LX1NU
QVRVUywgJmxpbmtTdGF0dXMpOworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3Np
bXBsZVByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKG1fc2ltcGxlUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG1fc2ltcGxlUHJvZ3JhbSk7CisgICAgICAgIGludCBsaW5rU3RhdHVzOwor
ICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3NpbXBsZVByb2dyYW0sIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwogICAgICAgICBpZiAoIWxpbmtT
dGF0dXMpIHsKLSAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3NpbXBsZVByb2dyYW0pOwor
ICAgICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2ltcGxlUHJvZ3JhbSk7CiAg
ICAgICAgICAgICBtX3NpbXBsZVByb2dyYW0gPSAwOwogICAgICAgICB9Ci0gICAgICAgIGdsRGVs
ZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIGdsRGVsZXRlU2hhZGVyKGZyYWdtZW50
U2hhZGVyKTsKLSAgICAgICAgbV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uID0gZ2xHZXRBdHRyaWJM
b2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJwb3NpdGlvbiIpOwotICAgICAgICBtX3NpbXBsZU1h
dHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zaW1wbGVQcm9ncmFtLCAibWF0
cml4Iik7Ci0gICAgICAgIG1fc2ltcGxlQ29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1fc2ltcGxlUHJvZ3JhbSwgImNvbG9yIik7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKKyAgICAgICAgbV9zaW1wbGVQb3NpdGlvbkxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX3NpbXBsZVByb2dyYW0sICJwb3NpdGlvbiIpOworICAg
ICAgICBtX3NpbXBsZU1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24obV9zaW1wbGVQcm9ncmFtLCAibWF0cml4Iik7CisgICAgICAgIG1fc2ltcGxlQ29sb3JMb2Nh
dGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2ltcGxlUHJvZ3JhbSwgImNv
bG9yIik7CiAgICAgfQogICAgIHJldHVybiBtX3NpbXBsZVByb2dyYW07CiB9CkBAIC00MjksNyAr
NDE2LDcgQEAgdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFNpbXBsZVByb2dyYW0oKQogdW5zaWdu
ZWQgR0xFUzJDYW52YXM6OmdldFRleFByb2dyYW0oKQogewogICAgIGlmICghbV90ZXhQcm9ncmFt
KSB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX1ZFUlRFWF9T
SEFERVIsCisgICAgICAgIHVuc2lnbmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIobV9jb250
ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKICAgICAgICAgICAgICJ1bmlm
b3JtIG1hdDMgbWF0cml4O1xuIgogICAgICAgICAgICAgInVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7
XG4iCiAgICAgICAgICAgICAiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4iCkBAIC00NDAsNyAr
NDI3LDcgQEAgdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFRleFByb2dyYW0oKQogICAgICAgICAg
ICAgIn1cbiIpOwogICAgICAgICBpZiAoIXZlcnRleFNoYWRlcikKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdN
RU5UX1NIQURFUiwKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVy
KG1fY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwKICAgICAgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKICAgICAgICAgICAgICJ1bmlmb3JtIHNh
bXBsZXIyRCBzYW1wbGVyO1xuIgogICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7XG4i
CkBAIC00NTAsMjUgKzQzNywyNSBAQCB1bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0VGV4UHJvZ3Jh
bSgpCiAgICAgICAgICAgICAifVxuIik7CiAgICAgICAgIGlmICghZnJhZ21lbnRTaGFkZXIpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbV90ZXhQcm9ncmFtID0gZ2xDcmVhdGVQcm9n
cmFtKCk7CisgICAgICAgIG1fdGV4UHJvZ3JhbSA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgp
OwogICAgICAgICBpZiAoIW1fdGV4UHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBnbEF0dGFjaFNoYWRlcihtX3RleFByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgICAg
IGdsQXR0YWNoU2hhZGVyKG1fdGV4UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBn
bExpbmtQcm9ncmFtKG1fdGV4UHJvZ3JhbSk7Ci0gICAgICAgIEdMaW50IGxpbmtTdGF0dXM7Ci0g
ICAgICAgIGdsR2V0UHJvZ3JhbWl2KG1fdGV4UHJvZ3JhbSwgR0xfTElOS19TVEFUVVMsICZsaW5r
U3RhdHVzKTsKKyAgICAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV90ZXhQcm9ncmFtLCB2
ZXJ0ZXhTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3RleFByb2dy
YW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX3Rl
eFByb2dyYW0pOworICAgICAgICBpbnQgbGlua1N0YXR1czsKKyAgICAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYobV90ZXhQcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMs
ICZsaW5rU3RhdHVzKTsKICAgICAgICAgaWYgKCFsaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBn
bERlbGV0ZVByb2dyYW0obV90ZXhQcm9ncmFtKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOwogICAgICAgICAgICAgbV90ZXhQcm9ncmFtID0gMDsK
ICAgICAgICAgfQotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAg
ICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fdGV4TWF0cml4TG9j
YXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJtYXRyaXgiKTsKLSAg
ICAgICAgbV90ZXhTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFBy
b2dyYW0sICJzYW1wbGVyIik7Ci0gICAgICAgIG1fdGV4VGV4TWF0cml4TG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJ0ZXhNYXRyaXgiKTsKLSAgICAgICAgbV90
ZXhQb3NpdGlvbkxvY2F0aW9uID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihtX3RleFByb2dyYW0sICJw
b3NpdGlvbiIpOwotICAgICAgICBtX3RleEFscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihtX3RleFByb2dyYW0sICJhbHBoYSIpOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFn
bWVudFNoYWRlcik7CisgICAgICAgIG1fdGV4TWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJtYXRyaXgiKTsKKyAgICAgICAgbV90ZXhT
YW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dy
YW0sICJzYW1wbGVyIik7CisgICAgICAgIG1fdGV4VGV4TWF0cml4TG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJ0ZXhNYXRyaXgiKTsKKyAgICAg
ICAgbV90ZXhQb3NpdGlvbkxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbiht
X3RleFByb2dyYW0sICJwb3NpdGlvbiIpOworICAgICAgICBtX3RleEFscGhhTG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJhbHBoYSIpOwogICAg
IH0KICAgICByZXR1cm4gbV90ZXhQcm9ncmFtOwogfQpAQCAtNDc5LDcgKzQ2Niw3IEBAIEdMRVMy
VGV4dHVyZSogR0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBH
TEVTMlRleHR1cmU6OkZvcm1hCiAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgIHJldHVybiB0ZXh0
dXJlLmdldCgpOwogCi0gICAgdGV4dHVyZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgdGV4dHVyZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKG1fY29u
dGV4dCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBHTEVTMlRleHR1cmUqIHQgPSB0ZXh0
dXJlLmdldCgpOwogICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7CiAgICAgcmV0dXJu
IHQ7CkBAIC00OTQsMjQgKzQ4MSwyNCBAQCBHTEVTMlRleHR1cmUqIEdMRVMyQ2FudmFzOjpnZXRU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKIHZvaWQgR0xFUzJDYW52YXM6OmNoZWNrR0xFcnJv
cihjb25zdCBjaGFyKiBoZWFkZXIpCiB7CiAjaWZuZGVmIE5ERUJVRwotICAgIEdMZW51bSBlcnI7
Ci0gICAgd2hpbGUgKChlcnIgPSBnbEdldEVycm9yKCkpICE9IEdMX05PX0VSUk9SKSB7CisgICAg
dW5zaWduZWQgZXJyOworICAgIHdoaWxlICgoZXJyID0gbV9jb250ZXh0LT5nZXRFcnJvcigpKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKICAgICAgICAgY29uc3QgY2hhciogZXJy
b3JTdHIgPSAiKioqIFVOS05PV04gRVJST1IgKioqIjsKICAgICAgICAgc3dpdGNoIChlcnIpIHsK
LSAgICAgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJH
TF9JTlZBTElEX0VOVU0iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU06CisgICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNIjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdMX0lOVkFMSURfVkFM
VUU6Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJHTF9JTlZBTElEX1ZBTFVFIjsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAgIGVycm9y
U3RyID0gIkdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFIjsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgotICAgICAgICAgICAgZXJy
b3JTdHIgPSAiR0xfSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiI7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAg
IGVycm9yU3RyID0gIkdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046Cisg
ICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04iOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfT1VU
X09GX01FTU9SWToKLSAgICAgICAgICAgIGVycm9yU3RyID0gIkdMX09VVF9PRl9NRU1PUlkiOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAg
ICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkiOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhlYWRlcikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCA0ZTUwMGJl
Zjg1OWRkY2ZiMDViZWRmYjhlOWYyNDIxMGUxYmQzMmFkLi5jZWE5MGFlYWFiYjI2MTQ3ZjFmMjQz
MjY3MTgwOTI1Y2M4YWE3MzNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5oCkBAIC00NiwxNSArNDYsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBDb2xvcjsKLWNsYXNzIEdMRVMyQ29u
dGV4dDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiB0eXBl
ZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxHTEVTMlRleHR1cmU+ID4gVGV4dHVy
ZUhhc2hNYXA7CiAKIGNsYXNzIEdMRVMyQ2FudmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKLSAgICBHTEVTMkNhbnZhcyhHTEVTMkNvbnRleHQqLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgR0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAgICAg
fkdMRVMyQ2FudmFzKCk7CiAKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAv
LyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBhdCBzb21lIHBvaW50LgogICAgIHZv
aWQgZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxv
YXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAg
ICBHTEVTMkNvbnRleHQqIGdsZXMyQ29udGV4dCgpIHsgcmV0dXJuIG1fZ2xlczJDb250ZXh0OyB9
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0K
ICAgICBHTEVTMlRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIEdMRVMyVGV4
dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIEdMRVMyVGV4dHVyZSog
Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBnZXRTaW1wbGVQcm9ncmFtKCk7CiAgICAgdW5zaWduZWQgZ2V0VGV4UHJv
Z3JhbSgpOwogCi0gICAgR0xFUzJDb250ZXh0KiBtX2dsZXMyQ29udGV4dDsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIHN0cnVjdCBTdGF0ZTsKICAgICBXVEY6OlZlY3Rv
cjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOwogICAgIFN0YXRlKiBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCmluZGV4IDI2
YzhiZjdiZWFlOGViYWZhNGViZTAyZjJkODNlNGNjZmE4ODkwOGYuLjVlOGExNDFkZDI4MmYyOTQ0
MTNhODUxZjEyNGJhODBkZjdmZDFkNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKQEAgLTM0LDE0ICszNCwxNSBAQAogCiAj
aW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1cmUodW5z
aWduZWQgaW50IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQotICAgIDogbV90ZXh0dXJlSWQodGV4dHVyZUlkKQorR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgRm9ybWF0
IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpCiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCiAg
ICAgLCBtX3dpZHRoKHdpZHRoKQogICAgICwgbV9oZWlnaHQoaGVpZ2h0KQpAQCAtNTAsMjUgKzUx
LDI2IEBAIEdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKHVuc2lnbmVkIGludCB0ZXh0dXJlSWQs
IEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50CiAKIEdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4
dHVyZSgpCiB7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlSWQpOworICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CiB9CiAKLVBhc3NSZWZQdHI8R0xF
UzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNyZWF0ZShGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpCitQYXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gR0xFUzJUZXh0dXJlOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKIHsKLSAgICBHTHVpbnQgdGV4dHVyZUlkOwotICAgIGdsR2VuVGV4dHVyZXMo
MSwgJnRleHR1cmVJZCk7Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCisgICAgaW50IG1heDsKKyAgICBj
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwg
Jm1heCk7CisgICAgaWYgKHdpZHRoID4gbWF4IHx8IGhlaWdodCA+IG1heCkgeworICAgICAgICBB
U1NFUlQoISJ0ZXh0dXJlIHRvbyBiaWciKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAw
OwogCi0gICAgaW50IG1heDsKLSAgICBnbEdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX1NJWkUs
ICZtYXgpOwotICAgIGlmICh3aWR0aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpCi0gICAgICAgIEFT
U0VSVCghInRleHR1cmUgdG9vIGJpZyIpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBHTEVTMlRleHR1cmUodGV4dHVyZUlkLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWQsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdMRVMy
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdW5zaWduZWQg
aW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCkBAIC03NiwxNCArNzgsMTQgQEAgc3RhdGljIHZv
aWQgY29udmVydEZvcm1hdChHTEVTMlRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGlu
dCogZ2xGb3JtYXQsIHUKICAgICAqc3dpenpsZSA9IGZhbHNlOwogICAgIHN3aXRjaCAoZm9ybWF0
KSB7CiAgICAgY2FzZSBHTEVTMlRleHR1cmU6OlJHQkE4OgotICAgICAgICAqZ2xGb3JtYXQgPSBH
TF9SR0JBOwotICAgICAgICAqZ2xUeXBlID0gR0xfVU5TSUdORURfQllURTsKKyAgICAgICAgKmds
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICpnbFR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
TEVTMlRleHR1cmU6OkJHUkE4OgogLy8gRklYTUU6ICBPbmNlIHdlIGhhdmUgc3VwcG9ydCBmb3Ig
ZXh0ZW5zaW9ucywgd2Ugc2hvdWxkIGNoZWNrIGZvciBFWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgsCiAvLyBhbmQgdXNlIHRoYXQgaWYgcHJlc2VudC4KLSAgICAgICAgKmdsRm9ybWF0ID0gR0xf
UkdCQTsKLSAgICAgICAgKmdsVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgICpnbEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAqZ2xUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgICAgICpzd2l6emxlID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTk3LDkgKzk5LDkgQEAgdm9pZCBHTEVTMlRl
eHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCwgZ2xU
eXBlOwogICAgIGJvb2wgc3dpenpsZTsKICAgICBjb252ZXJ0Rm9ybWF0KG1fZm9ybWF0LCAmZ2xG
b3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CiAgICAgaWYgKHN3aXp6bGUpIHsKLSAg
ICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdMX1JHQkEgJiYgZ2xUeXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpOworICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAgICAg
ICAgLy8gRklYTUU6ICBUaGlzIGNvdWxkIHVzZSBQQk8ncyB0byBzYXZlIGRvaW5nIGFuIGV4dHJh
IGNvcHkgaGVyZS4KICAgICAgICAgaW50IHNpemUgPSBtX3dpZHRoICogbV9oZWlnaHQ7CiAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbHMzMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4ocGl4ZWxzKTsK
QEAgLTEwOSwxOCArMTExLDE4IEBAIHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVs
cykKICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsID0gcGl4ZWxzMzJbaV07CiAgICAgICAgICAg
ICBidWZwdHJbaV0gPSBwaXhlbCAmIDB4RkYwMEZGMDAgfCAoKHBpeGVsICYgMHgwMEZGMDAwMCkg
Pj4gMTYpIHwgKChwaXhlbCAmIDB4MDAwMDAwRkYpIDw8IDE2KTsKICAgICAgICAgfQotICAgICAg
ICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWln
aHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0
aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCAwLCAwLCBtX3dpZHRoLCBt
X2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBtX3dp
ZHRoLCBtX2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgcGl4ZWxzKTsKIH0KIAogdm9pZCBHTEVT
MlRleHR1cmU6OmJpbmQoKQogewotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlSWQpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCmluZGV4IDM0NjM2
NWE5MzVhOWI2NTZhNzlkMzYzNjI1MmY2NTQwNTJkNTIyMTEuLjRkMzUxY2RkMzdkOWUxOWRmNWY0
OGJiOTRiZWQ0NzczYjY4MGVkOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaApAQCAtMzcsMjAgKzM3LDIyIEBACiAjaW5jbHVkZSAi
UmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwogCiBjbGFzcyBHTEVTMlRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxHTEVTMlRleHR1cmU+
IHsKIHB1YmxpYzoKICAgICB+R0xFUzJUZXh0dXJlKCk7CiAgICAgZW51bSBGb3JtYXQgeyBSR0JB
OCwgQkdSQTggfTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IGNyZWF0ZShG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R0xF
UzJUZXh0dXJlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAgICAgdm9pZCBiaW5kKCk7CiAgICAgdm9pZCBsb2FkKHZvaWQqIHBpeGVs
cyk7CiAgICAgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAgICAg
aW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIGludCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hlaWdodDsgfQogcHJpdmF0ZToKLSAgICBHTEVTMlRleHR1cmUodW5z
aWduZWQgaW50IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlSWQ7CisgICAgR0xFUzJUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7CiAgICAgaW50IG1fd2lkdGg7CiAg
ICAgaW50IG1faGVpZ2h0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IDc5OTQyNDRlM2FkYTU5NDhkNjkyZjI2
MWUzYTRkOTk2NjczZWJmMDkuLmFlMDg4YjZmNGUyNzI3OWUyODc1Y2YyMTBjMGQ1YjViY2VhMDhj
OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKQEAgLTc4Niw4ICs3ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zYXZlKCk7
Ci0KICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShnZXRDVE0o
KSwgcikpIHsKICAgICAgICAgLy8gU2VlIHRoZSBvdGhlciB2ZXJzaW9uIG9mIGZpbGxSZWN0IGJl
bG93LgpAQCAtODAyLDYgKzgwMCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgfQogI2VuZGlmCiAKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2F2ZSgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2Fy
ZURyYXcoKTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGEyNDg1ZTZhYjYyNjUwOWRmMDc1MzYyNjllOWNk
YmY4M2Q0ZTVlNmYuLjAyNGJmNTBkYzEzMzNhMjBhYTJkYWFlMWFjN2U1YTRmNWVlYzBlMTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC00MTQs
NyArNDE0LDYgQEAgc3RhdGljIHZvaWQgZHJhd0JpdG1hcEdMRVMyKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAsIGNvbnMKIHsKICAgICBjdHh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwogICAgIEdMRVMyQ2FudmFzKiBn
cHVDYW52YXMgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCk7Ci0gICAgZ3B1
Q2FudmFzLT5nbGVzMkNvbnRleHQoKS0+bWFrZUN1cnJlbnQoKTsKICAgICBHTEVTMlRleHR1cmUq
IHRleHR1cmUgPSBncHVDYW52YXMtPmdldFRleHR1cmUoYml0bWFwKTsKICAgICBpZiAoIXRleHR1
cmUpIHsKICAgICAgICAgQVNTRVJUKGJpdG1hcC0+Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdC
Xzg4ODhfQ29uZmlnKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCA1ZWM5YTVjMTQyZTU2MzkzZGY2M2Q1Zjc1
OWJlZTY1ZDM0MTAxMGQwLi5iMTRjNmNkMDRjYTMwYmQ0MTcxMDJlNDM1NzA2M2JlYWNhZTIyMmNi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
IAorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKworI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCkBAIC00NSwxMCArNDgsOSBA
QAogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKIAogI2lmIFVTRShHTEVTMl9SRU5ERVJJ
TkcpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHTEVTMkNhbnZh
cy5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5o
IgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgpAQCAtNjc1LDcgKzY3Nyw4IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YXBw
bHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxTa1BhdGg+JiBwYXRocykKIH0KIAog
I2lmIFVTRShHTEVTMl9SRU5ERVJJTkcpCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdM
RVMyQ29udGV4dChHTEVTMkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCisK
K3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAg
bV91c2VHUFUgPSB0cnVlOwogICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRl
eHQsIHNpemUpOwpAQCAtNzYwLDI1ICs3NjMsMjYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
Ojp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0CiB7
CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNj
ZXNzQml0bWFwKGZhbHNlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAg
ICBtX2dwdUNhbnZhcy0+Z2xlczJDb250ZXh0KCktPm1ha2VDdXJyZW50KCk7CiAgICAgLy8gRklY
TUU6IEtlZXAgYSB0ZXh0dXJlIGFyb3VuZCBmb3IgdGhpcyByYXRoZXIgdGhhbiBjb25zdGFudGx5
IGNyZWF0aW5nL2Rlc3Ryb3lpbmcgb25lLgotICAgIFJlZlB0cjxHTEVTMlRleHR1cmU+IHRleHR1
cmUgPSBHTEVTMlRleHR1cmU6OmNyZWF0ZShHTEVTMlRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lk
dGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAgUmVmUHRyPEdMRVMyVGV4dHVyZT4gdGV4dHVy
ZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIEdMRVMyVGV4dHVyZTo6QkdSQTgsIGJp
dG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIHRleHR1cmUtPmxvYWQoYml0bWFw
LmdldFBpeGVscygpKTsKICAgICBJbnRSZWN0IHJlY3QoMCwgMCwgYml0bWFwLndpZHRoKCksIGJp
dG1hcC5oZWlnaHQoKSk7Ci0gICAgZ3B1Q2FudmFzKCktPmRyYXdUZXh0dXJlZFJlY3QodGV4dHVy
ZS5nZXQoKSwgcmVjdCwgcmVjdCwgRGV2aWNlQ29sb3JTcGFjZSwgb3ApOworICAgIEFmZmluZVRy
YW5zZm9ybSBpZGVudGl0eTsKKyAgICBncHVDYW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0
dXJlLmdldCgpLCByZWN0LCByZWN0LCBpZGVudGl0eSwgMS4wLCBEZXZpY2VDb2xvclNwYWNlLCBv
cCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29m
dHdhcmUoKSBjb25zdAogewogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+
Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxv
Y2soYml0bWFwKTsKLSAgICBtX2dwdUNhbnZhcy0+Z2xlczJDb250ZXh0KCktPm1ha2VDdXJyZW50
KCk7CiAgICAgaW50IHdpZHRoID0gYml0bWFwLndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWln
aHQoKTsKICAgICBPd25BcnJheVB0cjx1aW50MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0p
OworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQo
KTsKICAgICAvLyBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgIHVpbnQzMl90KiBwaXhlbHMgPSBiaXRtYXAu
Z2V0QWRkcjMyKDAsIHkpOwotICAgICAgICBnbFJlYWRQaXhlbHMoMCwgaGVpZ2h0IC0gMSAtIHks
IHdpZHRoLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgICAgICBj
b250ZXh0LT5yZWFkUGl4ZWxzKDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0aCwgMSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMp
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyArK2kpIHsKICAgICAgICAgICAg
IHVpbnQzMl90IHBpeGVsID0gcGl4ZWxzW2ldOwogICAgICAgICAgICAgLy8gU3dpenpsZXMgZnJv
bSBSR0JBIC0+IEJHUkEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCA1ZGE1MTQxMTQ1MDhlZTdhZWQ2YjJhYjk5YjI4
NmNiNWFjY2E1YWYyLi5mZjgwZDFiYWRlNjAwZTNjYzJkODlmYTJhMzUzNDA2NWI1ODY1Mjg3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShH
TEVTMl9SRU5ERVJJTkcpCiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yOwogY2xhc3MgR0xFUzJDYW52
YXM7Ci1jbGFzcyBHTEVTMkNvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICNlbmRp
ZgogCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGF0ZSBmb3Ig
R3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKQEAgLTE4Myw3ICsxODMsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBoYXNJbWFnZVJlc2FtcGxpbmdIaW50KCkgY29uc3Q7CiAjaWYgVVNFKEdMRVMyX1JFTkRF
UklORykKICAgICBib29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9Ci0gICAgdm9pZCBz
ZXRHTEVTMkNvbnRleHQoR0xFUzJDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQg
c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7
CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFz
LmdldCgpOyB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>