<?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>63663</bug_id>
          
          <creation_ts>2011-06-29 15:20:22 -0700</creation_ts>
          <short_desc>Switch nodeAtPoint to to new layout types</short_desc>
          <delta_ts>2011-07-06 16:38:51 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429924</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-29 15:20:22 -0700</bug_when>
    <thetext>Convert nodeAtPoint to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429942</commentid>
    <comment_count>1</comment_count>
      <attachid>99166</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-29 15:52:35 -0700</bug_when>
    <thetext>Created attachment 99166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430648</commentid>
    <comment_count>2</comment_count>
      <attachid>99360</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 13:16:31 -0700</bug_when>
    <thetext>Created attachment 99360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430649</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 13:16:51 -0700</bug_when>
    <thetext>Updated patch to ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430659</commentid>
    <comment_count>4</comment_count>
      <attachid>99360</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-30 13:51:40 -0700</bug_when>
    <thetext>Comment on attachment 99360
Patch

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

&gt; Source/WebCore/rendering/LayoutTypes.h:67
&gt; +inline LayoutSize toLayoutSize(const LayoutPoint&amp; p)
&gt; +{
&gt; +    return LayoutSize(p.x(), p.y());
&gt; +}
&gt; +
&gt; +inline LayoutPoint toLayoutPoint(const LayoutSize&amp; p)
&gt; +{
&gt; +    return LayoutPoint(p.width(), p.height());
&gt; +}
&gt; +
&gt; +inline LayoutPoint roundedLayoutPoint(const FloatPoint&amp; p)
&gt; +{
&gt; +    return roundedIntPoint(p);
&gt; +}
&gt; +
&gt; +inline LayoutUnit roundedLayoutUnit(float value)
&gt; +{
&gt; +    return lroundf(value);
&gt; +}

Same fear.  What will these do for float types?  I feel like we need to consider those when inventing these abstractions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432952</commentid>
    <comment_count>5</comment_count>
      <attachid>99360</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-06 13:00:31 -0700</bug_when>
    <thetext>Comment on attachment 99360
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433000</commentid>
    <comment_count>6</comment_count>
      <attachid>99874</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-06 13:47:06 -0700</bug_when>
    <thetext>Created attachment 99874
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433029</commentid>
    <comment_count>7</comment_count>
      <attachid>99874</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-06 14:26:36 -0700</bug_when>
    <thetext>Comment on attachment 99874
Patch for landing

Rejecting attachment 99874 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
tual bool WebCore::EllipsisBox::nodeAtPoint(const WebCore::HitTestRequest&amp;, WebCore::HitTestResult&amp;, const WebCore::LayoutPoint&amp;, const WebCore::LayoutPoint&amp;, int, int)&apos;:
Source/WebCore/rendering/EllipsisBox.cpp:121: error: &apos;toLayoutSize&apos; was not declared in this scope
  CXX(target) out/Debug/obj.target/webcore_rendering/Source/WebCore/rendering/InlineBox.o
make: *** [out/Debug/obj.target/webcore_rendering/Source/WebCore/rendering/EllipsisBox.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/8985844</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433050</commentid>
    <comment_count>8</comment_count>
      <attachid>99886</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-06 14:51:25 -0700</bug_when>
    <thetext>Created attachment 99886
Patch for landing

Conflict resolution fail. Trying again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433099</commentid>
    <comment_count>9</comment_count>
      <attachid>99886</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-06 16:21:50 -0700</bug_when>
    <thetext>Comment on attachment 99886
Patch for landing

Rejecting attachment 99886 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 90503 = 5ce0fa720511e9d2b91a6a308a274448790a32e1
r90504 = a5bd88a4e43cd8c089e2bc487b668060608f5dc8
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
RA layer request failed: OPTIONS of &apos;http://svn.webkit.org/repository/webkit&apos;: timed out waiting for server (http://svn.webkit.org) at /usr/lib/git-core/git-svn line 2295

Died at Tools/Scripts/update-webkit line 146.

Full output: http://queues.webkit.org/results/8990706</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433111</commentid>
    <comment_count>10</comment_count>
      <attachid>99886</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-06 16:38:46 -0700</bug_when>
    <thetext>Comment on attachment 99886
Patch for landing

Clearing flags on attachment: 99886

Committed r90515: &lt;http://trac.webkit.org/changeset/90515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433112</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-06 16:38:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99166</attachid>
            <date>2011-06-29 15:52:35 -0700</date>
            <delta_ts>2011-06-30 13:16:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63663-20110629155234.patch</filename>
            <type>text/plain</type>
            <size>64911</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMDU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDYtMjkgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIG5vZGVBdFBvaW50IHRvIHRvIG5ldyBs
YXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYzNjYzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5n
ZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxs
aXBzaXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
TGF5b3V0VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTGF5b3V0U2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0xheW91dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kZWRMYXlv
dXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkTGF5b3V0VW5pdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om5v
ZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVp
Z25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6
bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3Jl
aWduT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guaDoKKwogMjAxMS0wNi0yOSAgWHUgRmFuICA8cWlmdXJlbjE5ODVAZ21haWwuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEJyZW50IEZ1bGdoYW0uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDI0
ICsxMDEsMjQgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAg
IGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dU
cmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsg
cGFpbnRPZmZzZXQueSgpICsgdG9wKSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiB9CiAK
LWJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQg
bGluZUJvdHRvbSkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsKLSAgICBJbnRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyByb3VuZGVkSW50UG9pbnQodG9wTGVmdCgpKTsK
KyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBy
b3VuZGVkSW50UG9pbnQodG9wTGVmdCgpKTsKIAogICAgIC8vIEhpdCB0ZXN0IHRoZSBtYXJrdXAg
Ym94LgogICAgIGlmIChtX21hcmt1cEJveCkgewogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgICAgIGludCBtdHggPSBhZGp1
c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKLSAg
ICAgICAgaW50IG10eSA9IGFkanVzdGVkTG9jYXRpb24ueSgpICsgc3R5bGUtPmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICBM
YXlvdXRVbml0IG10eCA9IGFkanVzdGVkTG9jYXRpb24ueCgpICsgbV9sb2dpY2FsV2lkdGggLSBt
X21hcmt1cEJveC0+eCgpOworICAgICAgICBMYXlvdXRVbml0IG10eSA9IGFkanVzdGVkTG9jYXRp
b24ueSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnko
KSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpOwogICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgSW50UG9pbnQobXR4LCBtdHkpLCBsaW5l
VG9wLCBsaW5lQm90dG9tKSkgewogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEludFJlY3Qg
Ym91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgSW50U2l6ZShtX2xvZ2ljYWxX
aWR0aCwgbV9oZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2Nh
dGlvbiwgTGF5b3V0U2l6ZShtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpKTsKICAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZv
clBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExv
Y2F0aW9uKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigp
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmgJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5l
VG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHMpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHM7IH0KICAg
ICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUJveC5jcHAJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lk
IElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluCiAgICAgfQogfQogCi1ib29sIElu
bGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxp
bmVCb3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBp
bnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRvbSovKQogewogICAgIC8vIEhpdCB0ZXN0
IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQgZWxlbWVudHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRo
ZSByZXBsYWNlZCBlbGVtZW50IGVzdGFibGlzaGVkIGl0cwogICAgIC8vIG93biBzdGFja2luZyBj
b250ZXh0LiAgKFNlZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90
YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NTMi4xCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5oCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBp
bnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiAgICAgSW5saW5lQm94KiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsOSArODk4
LDkgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRPdmVyZmxvd0Zyb21Mb2dpYwogICAgIHNldFZp
c3VhbE92ZXJmbG93KHZpc3VhbE92ZXJmbG93LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKIH0KIAot
Ym9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pCitib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsKLSAgICBJbnRSZWN0IG92ZXJmbG93
UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9t
KSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgb3ZlcmZsb3dS
ZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKQEAgLTkwOSwz
NiArOTA5LDM2IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAg
ICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxh
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7CiAgICAgICAgIGlm
ICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCkt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVC
b3R0b20pKSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNl
bHZlcy4gUGl4ZWwgc25hcCBoaXQgdGVzdGluZy4KLSAgICBJbnRSZWN0IGZyYW1lUmVjdCA9IHJv
dW5kZWRGcmFtZVJlY3QoKTsKLSAgICBpbnQgbWluWCA9IGZyYW1lUmVjdC54KCk7Ci0gICAgaW50
IG1pblkgPSBmcmFtZVJlY3QueSgpOwotICAgIGludCB3aWR0aCA9IGZyYW1lUmVjdC53aWR0aCgp
OwotICAgIGludCBoZWlnaHQgPSBmcmFtZVJlY3QuaGVpZ2h0KCk7CisgICAgTGF5b3V0UmVjdCBm
cmFtZVJlY3QgPSByb3VuZGVkRnJhbWVSZWN0KCk7CisgICAgTGF5b3V0VW5pdCBtaW5YID0gZnJh
bWVSZWN0LngoKTsKKyAgICBMYXlvdXRVbml0IG1pblkgPSBmcmFtZVJlY3QueSgpOworICAgIExh
eW91dFVuaXQgd2lkdGggPSBmcmFtZVJlY3Qud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGhlaWdo
dCA9IGZyYW1lUmVjdC5oZWlnaHQoKTsKIAogICAgIC8vIENvbnN0cmFpbiBvdXIgaGl0IHRlc3Rp
bmcgdG8gdGhlIGxpbmUgdG9wIGFuZCBib3R0b20gaWYgbmVjZXNzYXJ5LgogICAgIGJvb2wgbm9R
dWlya3NNb2RlID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKICAg
ICBpZiAoIW5vUXVpcmtzTW9kZSAmJiAhaGFzVGV4dENoaWxkcmVuKCkgJiYgIShkZXNjZW5kYW50
c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaGFzVGV4dERlc2NlbmRhbnRzKCkp
KSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByb290KCk7Ci0gICAgICAgIGlu
dCYgdG9wID0gaXNIb3Jpem9udGFsKCkgPyBtaW5ZIDogbWluWDsKLSAgICAgICAgaW50JiBsb2dp
Y2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBoZWlnaHQgOiB3aWR0aDsKLSAgICAgICAgaW50
IGJvdHRvbSA9IG1pbihyb290Qm94LT5saW5lQm90dG9tKCksIHRvcCArIGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICBMYXlvdXRVbml0JiB0b3AgPSBpc0hvcml6b250YWwoKSA/IG1pblkgOiBtaW5Y
OworICAgICAgICBMYXlvdXRVbml0JiBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBo
ZWlnaHQgOiB3aWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBtaW4ocm9vdEJveC0+
bGluZUJvdHRvbSgpLCB0b3AgKyBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgdG9wID0gbWF4KHJv
b3RCb3gtPmxpbmVUb3AoKSwgdG9wKTsKICAgICAgICAgbG9naWNhbEhlaWdodCA9IGJvdHRvbSAt
IHRvcDsKICAgICB9CiAgICAgCiAgICAgLy8gTW92ZSB4L3kgdG8gb3VyIGNvb3JkaW5hdGVzLgot
ICAgIEludFJlY3QgcmVjdChtaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBMYXlvdXRS
ZWN0IHJlY3QobWluWCwgbWluWSwgd2lkdGgsIGhlaWdodCk7CiAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKHJlY3QpOwogICAgIHJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIGlm
ICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9y
UG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAt
IHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kg
aGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KKyAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0
aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0
aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5l
ciwgcmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDkwMDUxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgTGF5b3V0UmVj
dCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgdm9pZCBw
YWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFNoYWRvd1N0eWxl
LCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIHZp
cnR1YWwgUmVuZGVyTGluZUJveExpc3QqIHJlbmRlcmVyTGluZUJveGVzKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDUsMTYgKzM0NSwxNiBAQCBib29sIElubGluZVRleHRCb3g6Omlz
TGluZUJyZWFrKCkgY29uc3QKICAgICByZXR1cm4gcmVuZGVyZXIoKS0+aXNCUigpIHx8IChyZW5k
ZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBsZW4oKSA9PSAxICYmICgqdGV4
dFJlbmRlcmVyKCktPnRleHQoKSlbc3RhcnQoKV0gPT0gJ1xuJyk7CiB9CiAKLWJvb2wgSW5saW5l
VGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90dG9t
Ki8pCitib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRv
cCAqLywgaW50IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9u
SW5jbHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZUJ5KGFjY3VtdWxhdGVkT2Zm
c2V0KTsKLSAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIEludFNpemUod2lkdGgoKSwgaGVp
Z2h0KCkpKTsKKyAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7CiAgICAgaWYg
KG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygp
ICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIp
KSkgewotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxp
cEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZz
ZXQpKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBm
bGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVs
YXRlZE9mZnNldCkpKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiBwdWJs
aWM6CiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2lmbmRlZiBMYXlvdXRUeXBlc19oCiAjZGVmaW5lIExheW91dFR5cGVzX2gKIAor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ1LDYgKzQ2LDI2IEBAIHR5cGVkZWYgSW50UG9pbnQgTGF5b3V0UG9p
bnQ7CiB0eXBlZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKIHR5cGVkZWYgSW50UmVjdCBMYXlvdXRS
ZWN0OwogCitpbmxpbmUgTGF5b3V0U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQm
IHApCit7CisgICAgcmV0dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKK30KKworaW5saW5l
IExheW91dFBvaW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKK3sKKyAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQocC53aWR0aCgpLCBwLmhlaWdodCgpKTsKK30KKworaW5saW5lIExh
eW91dFBvaW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAg
IHJldHVybiByb3VuZGVkSW50UG9pbnQocCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IHJvdW5k
ZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBscm91bmRmKHZhbHVlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5
MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5MzIsMTQgKzM5MzIsMTQgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2lu
dEluT3ZlcmZsb3dDb250cgogICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEludFBvaW50IGFk
anVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICBJbnRT
aXplIGxvY2FsT2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOworICAgIExheW91dFBv
aW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKKyAg
ICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
OwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBu
ZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KLSAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9
IHZpc3VhbE92ZXJmbG93UmVjdCgpOworICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Qm94ID0g
dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3Rl
ZExvY2F0aW9uKTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzk1NSwyNCArMzk1NSwyNCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZl
IGFueSBzcGlsbG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xp
cCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXND
b250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgSW50UmVjdCBoaXRUZXN0QXJl
YShyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKTsKKyAgICBMYXlvdXRSZWN0
IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwogICAg
IGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29u
dHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDog
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJh
clNpemUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikg
ewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KLSAgICAgICAgSW50U2l6
ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xs
ZWRPZmZzZXQobG9jYWxPZmZzZXQpOwogICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsK
ICAgICAgICAgICAgIHNjcm9sbGVkT2Zmc2V0IC09IGxheWVyKCktPnNjcm9sbGVkQ29udGVudE9m
ZnNldCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSGl0IHRlc3QgY29udGVudHMgaWYgd2Ug
ZG9uJ3QgaGF2ZSBjb2x1bW5zLgogICAgICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgewotICAgICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIHRvUG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAg
ICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IHRvTGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0g
bG9jYWxPZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRl
c3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b1BvaW50KHNjcm9s
bGVkT2Zmc2V0KSkpCisgICAgICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Rmxv
YXQgJiYgaGl0VGVzdEZsb2F0cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHRv
TGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIHRvUG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkg
eworICAgICAgICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rp
b24pKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0zOTgwLDcgKzM5ODAsNyBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAo
aGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24g
PT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7Ci0gICAgICAgIEludFJlY3QgYm91bmRz
UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgICAgICBMYXlvdXRSZWN0IGJvdW5k
c1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxp
bmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAq
LykgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsMjMg
Kzc0NSwyMyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMCiB9CiAK
IC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
Ly8gQ2hlY2sga2lkcyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAg
ICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWRqdXN0ZWRMb2NhdGlvbiwgYWN0aW9uKSkgewot
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIg
LSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2Nh
dGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3Vt
ZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNl
ICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAg
SW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwor
ICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAg
IGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5k
ICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250
YWluZXIpKSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVk
TG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2
LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29s
IFJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
YWN0aW9uKQorICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewog
ICAgIGlmIChhY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCShyZXZp
c2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGlzRnJhbWVTZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5
MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6
OmltYWdlTWFwKCkgCiAgICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS0+Z2V0SW1hZ2VNYXAo
aS0+ZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkgOiAwOwogfQogCi1ib29sIFJlbmRlcklt
YWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5w
b2ludCgpLCByZXN1bHQudG9wUGFkZGluZygpLCByZXN1bHQucmlnaHRQYWRkaW5nKCksIHJlc3Vs
dC5ib3R0b21QYWRkaW5nKCksIHJlc3VsdC5sZWZ0UGFkZGluZygpKTsKICAgICBib29sIGluc2lk
ZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7CkBAIC00MDMs
OCArNDAzLDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAg
ICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAg
IEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9h
dCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaW50IG1hcFgg
PSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLngoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0LngoKSAt
IHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOwotICAgICAgICAgICAgaW50IG1h
cFkgPSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLnkoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0Lnko
KSAtIHRoaXMtPnkoKSAtIGNvbnRlbnRCb3gueSgpKSAvIHpvb20pOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXBYID0gcm91bmRlZExheW91dFVuaXQoKHBvaW50SW5Db250YWluZXIueCgpIC0g
YWNjdW11bGF0ZWRPZmZzZXQueCgpIC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCkpIC8gem9v
bSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1hcFkgPSByb3VuZGVkTGF5b3V0VW5pdCgocG9p
bnRJbkNvbnRhaW5lci55KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBj
b250ZW50Qm94LnkoKSkgLyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAtPm1hcE1vdXNlRXZl
bnQobWFwWCwgbWFwWSwgY29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQpKQogICAgICAgICAg
ICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUoKSk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA5
MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgbWluaW11
bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAg
dmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdp
ZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNh
bEhlaWdodCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBAQCBjb25zdCBj
aGFyKiBSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBjCiB9CiAKIGJvb2wgUmVuZGVySW5saW5l
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAg
ICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDkwMDUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
aXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lv
biA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcxLDEzICs2NzEsMTMgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojpz
ZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckxp
c3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKIHsKICAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJ
dGVtcyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxp
c3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKLSAgICBJbnRQb2ludCBhZGp1
c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91
dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7
CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaXRl
bUJvdW5kaW5nQm94UmVjdChhZGp1c3RlZExvY2F0aW9uLCBpKS5jb250YWlucyhwb2ludEluQ29u
dGFpbmVyKSkgewpAQCAtNjg1LDcgKzY4NSw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGkKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUp
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAg
ICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b1Np
emUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDkwMDUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxM
ZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwogCi0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZS4K
ICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc5LDcgKzIxNzksNyBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAgICAgfQogfQogCi1ib29sIFJlbmRlck9i
amVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIC8qcG9pbnRJbkNvbnRhaW5lciovLCBjb25zdCBJbnRQb2ludCYgLyph
Y2N1bXVsYXRlZE9mZnNldCovLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywgY29uc3QgTGF5b3V0UG9pbnQmIC8qYWNj
dW11bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA5
MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBo
aXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoaW50IHgsIGludCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkzLDE3ICsxMTkzLDE3IEBAIElu
dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QoY28KICAgICByZXR1cm4gcmVjdDsK
IH0KIAotYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0g
YWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFkanVzdGVk
TG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICAvLyBDaGVj
ayBraWRzIGZpcnN0LgogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlw
UmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9
PSBtX2NhcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVkTG9jYXRpb24sIFBh
cmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAgICAgIExheW91dFBv
aW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBh
ZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hp
bGRQb2ludCkpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC0xMjExLDkgKzEyMTEsOSBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIElu
dFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAg
ICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICBp
ZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dy
b3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNS
ZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsK
LSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShw
b2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKSk7CisgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSkpOwogICAgICAgICBpZiAoIXJl
c3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5l
ciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gOTAwNTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWlu
dEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJh
c2VsaW5lKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAg
SW50UmVjdCBSZW5kZXJUYWJsZVJvdzo6Y2xpcHBlZE92ZXJmbG93UgogfQogCiAvLyBIaXQgVGVz
dGluZwotYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBUYWJsZSByb3dzIGNhbm5vdCBl
dmVyIGJlIGhpdCB0ZXN0ZWQuICBFZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBleGlzdC4KICAgICAv
LyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KQEAgLTE5Nyw5ICsxOTcsOSBA
QCBib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBICiAgICAgICAgIC8vIHRh
YmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxkIGRvIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zIGFueXdheSksCiAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0
aGlzIGNoZWNrLgogICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkgJiYgIXRvUmVuZGVy
Qm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgSW50UG9p
bnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyVGFibGVDZWxsKGNoaWxk
KSwgYWNjdW11bGF0ZWRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwor
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRv
UmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0ZWRPZmZzZXQsIFBhcmVudFRvQ2hpbGRG
bGlwcGluZ0FkanVzdG1lbnQpOwogICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewot
ICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyIC0gdG9TaXplKGNlbGxQb2ludCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGNlbGxQb2ludCkp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNp
b24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFRoZSBv
bmx5IHRpbWUgcm93cyBnZXQgYSBsYXllciBpcyB3aGVuIHRoZXkgaGF2ZSB0cmFuc3BhcmVuY3ku
CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1RyYW5z
cGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFz
aygpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MSw3ICsxMTQxLDcg
QEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKGludAogfQogCiAvLyBIaXQg
VGVzdGluZwotYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIElmIHdlIGhh
dmUgbm8gY2hpbGRyZW4gdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCFmaXJz
dENoaWxkKCkpCkBAIC0xMTQ5LDcgKzExNDksNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6
bm9kZUF0UG9pbnQoY29uCiAKICAgICAvLyBUYWJsZSBzZWN0aW9ucyBjYW5ub3QgZXZlciBiZSBo
aXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBm
b3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
aWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRp
b24pLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNjEsOSArMTE2MSw5IEBAIGJvb2wgUmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAgICAgICAgICAgIC8vIHRhYmxlLXNwZWNpZmlj
IGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxkIGRvIGZvciBwZXJmb3JtYW5jZSByZWFz
b25zIGFueXdheSksCiAgICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVj
ay4KICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQp
LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgY2hp
bGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVk
TG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAg
ICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJC
b3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3Rt
ZW50KTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludEluQ29u
dGFpbmVyIC0gY2hpbGRQb2ludCkpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2lu
dCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBib29sIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBJbnRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRM
b2NhdGlvbik7CisgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVyIC0g
dG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwogICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAtIGxv
Y2F0aW9uLnkoKSk7CkBAIC0xMTc5LDcgKzExNzksNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAgICBsb2NhdGlvbi5zZXRYKHdpZHRoKCkgLSBs
b2NhdGlvbi54KCkpOwogICAgIH0KIAotICAgIGludCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbiA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi55KCkgOiBsb2Nh
dGlvbi54KCk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbiA9IHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi55KCkgOiBsb2NhdGlvbi54
KCk7CiAgICAgLy8gRmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIG9mZnNldElu
Q29sdW1uRGlyZWN0aW9uLgogICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5k
KG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlv
bikgLSBtX3Jvd1Bvcy5iZWdpbigpOwogICAgIGlmIChuZXh0Um93ID09IG1fcm93UG9zLnNpemUo
KSkKQEAgLTExODcsNyArMTE4Nyw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQ
b2ludChjb24KICAgICAvLyBOb3cgc2V0IGhpdFJvdyB0byB0aGUgaW5kZXggb2YgdGhlIGhpdCBy
b3csIG9yIDAuCiAgICAgdW5zaWduZWQgaGl0Um93ID0gbmV4dFJvdyA+IDAgPyBuZXh0Um93IC0g
MSA6IDA7CiAKLSAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9z
aXRpb25zKCk7CisgICAgVmVjdG9yPExheW91dFVuaXQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5j
b2x1bW5Qb3NpdGlvbnMoKTsKICAgICBpbnQgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24ueCgpIDogbG9jYXRpb24ueSgp
OwogICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBv
ZmZzZXRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBv
ZmZzZXRJblJvd0RpcmVjdGlvbjsKQEAgLTEyMDUsOSArMTIwNSw5IEBAIGJvb2wgUmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KIAogICAgIGZvciAoaW50IGkgPSBjdXJyZW50LmNl
bGxzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCA9IGN1cnJlbnQuY2VsbHNbaV07Ci0gICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZShjZWxsLCBhZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxp
cHBpbmdBZGp1c3RtZW50KTsKKyAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZv
cldyaXRpbmdNb2RlKGNlbGwsIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGlu
Z0FkanVzdG1lbnQpOwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2Vs
bCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBv
aW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
dG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBvaW50KSk7CisgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0g
Y2VsbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJ
KHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRS
ZWN0KiA9IDApOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIGJvb2wgZW5z
dXJlUm93cyhpbnQpOwogICAgIHZvaWQgY2xlYXJHcmlkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExh
eW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpOwogICAgIGJvb2wgY29udGFp
bnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZQogICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRleHRBcmVhKHRleHRBcmVhKTsK
IH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewogICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RB
Y3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAkocmV2aXNpb24g
OTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOwogCiAgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5n
IGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNo
YXJXaWR0aCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gOTAwNTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpsYXlvdXQKICNlbmRpZgogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSdy
ZSB3aXRoaW4gdGhlIHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0
IHRoZSBpbm5lciB0ZXh0IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAgICAgLy8g
d2FzIG9uIHRoZSBjb250cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNlZSBSYWRh
ciA0NjE3ODQxKS4KQEAgLTM2NCwyMyArMzY0LDIzIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpub2RlQXQKICAgICBSZW5kZXJCb3gqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlu
bmVyQmxvY2stPnJlbmRlckJveCgpOwogICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOwogCi0gICAgSW50UG9pbnQgbG9jYWxQ
b2ludCA9IHJlc3VsdC5sb2NhbFBvaW50KCk7CisgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludCA9
IHJlc3VsdC5sb2NhbFBvaW50KCk7CiAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lckJsb2NrUmVu
ZGVyZXItPmxvY2F0aW9uKCkpOwogCi0gICAgaW50IHRleHRMZWZ0ID0gYWNjdW11bGF0ZWRPZmZz
ZXQueCgpICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJl
ci0+eCgpOworICAgIExheW91dFVuaXQgdGV4dExlZnQgPSBhY2N1bXVsYXRlZE9mZnNldC54KCkg
KyB4KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54KCk7
CiAgICAgaWYgKHJlc3VsdHNCdXR0b24gJiYgcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSAmJiBw
b2ludEluQ29udGFpbmVyLngoKSA8IHRleHRMZWZ0KQogICAgICAgICBpbm5lck5vZGUgPSByZXN1
bHRzQnV0dG9uOwogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBpZiAoIWlubmVyTm9k
ZSAmJiBzcGVlY2hCdXR0b25FbGVtZW50KCkgJiYgc3BlZWNoQnV0dG9uRWxlbWVudCgpLT5yZW5k
ZXJlcigpKSB7Ci0gICAgICAgIGludCBidXR0b25MZWZ0ID0gYWNjdW11bGF0ZWRPZmZzZXQueCgp
ICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPndp
ZHRoKCkgLSBzcGVlY2hCdXR0b25FbGVtZW50KCktPnJlbmRlckJveCgpLT53aWR0aCgpOworICAg
ICAgICBMYXlvdXRVbml0IGJ1dHRvbkxlZnQgPSBhY2N1bXVsYXRlZE9mZnNldC54KCkgKyB4KCkg
KyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+d2lkdGgoKSAt
IHNwZWVjaEJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94KCktPndpZHRoKCk7CiAgICAgICAgIGlm
IChwb2ludEluQ29udGFpbmVyLngoKSA+PSBidXR0b25MZWZ0KQogICAgICAgICAgICAgaW5uZXJO
b2RlID0gc3BlZWNoQnV0dG9uRWxlbWVudCgpOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKCFp
bm5lck5vZGUpIHsKLSAgICAgICAgaW50IHRleHRSaWdodCA9IHRleHRMZWZ0ICsgaW5uZXJUZXh0
UmVuZGVyZXItPndpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgdGV4dFJpZ2h0ID0gdGV4dExl
ZnQgKyBpbm5lclRleHRSZW5kZXJlci0+d2lkdGgoKTsKICAgICAgICAgaWYgKGNhbmNlbEJ1dHRv
biAmJiBjYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgJiYgcG9pbnRJbkNvbnRhaW5lci54KCkgPiB0
ZXh0UmlnaHQpCiAgICAgICAgICAgICBpbm5lck5vZGUgPSBjYW5jZWxCdXR0b247CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlz
aW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5Myw3ICszOTMsNyBAQCBSZW5kZXJXaWRnZXQqIFJlbmRlcldp
ZGdldDo6ZmluZChjb25zdCBXCiAgICAgcmV0dXJuIHdpZGdldFJlbmRlcmVyTWFwKCkuZ2V0KHdp
ZGdldCk7CiB9CiAKLWJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBib29sIGhhZFJlc3VsdCA9IHJl
c3VsdC5pbm5lck5vZGUoKTsKICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0LCBhY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
aAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRPdmVybGFwVGVzdFJlc3VsdChib29sKTsKIAogICAgIGJvb2wgc2V0V2lkZ2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDkwMDUxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksMTEgKzE4OSwxMSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpCiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCitib29sIFJvb3RJbmxpbmVCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsK
ICAgICBpZiAoaGFzRWxsaXBzaXNCb3goKSAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKICAg
ICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7
Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgICAgICAgICAg
cmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIg
LSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5oCShyZXZpc2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiAgICAgYm9vbCBoYXNTZWxl
Y3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5I
YXZlTGVhZGluZ0V4cGFuc2lvbjsgfQogICAgIHZvaWQgc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihi
b29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4pIHsgbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZl
TGVhZGluZ0V4cGFuc2lvbiA9IGhhc1NlbGVjdGVkQ2hpbGRyZW47IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0
LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTEgKzE0OCwx
MCBAQCBib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0CiAgICAgaWYgKFNW
R1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmlld3BvcnQuY29u
dGFpbnMobG9jYWxQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFBvaW50
IHJvdW5kZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwotICAgIHJl
dHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTG9j
YWxQb2ludCwgSW50UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2Nh
bFBvaW50KSwgTGF5b3V0UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rp
b24pCitib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiA5MDA1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVh
bCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9y
bVN0YXRlJiwgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZp
c2lvbiA5MDA1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6dXBkYXRlRnJvbUVsZQogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9u
KQorYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50
IG1ldGhvZAotICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzQsMTcgKzQzNCwxNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJv
dW5kYXJpCiAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3guaW5mbGF0ZShib3JkZXJBbmRQYWRkaW5n
V2lkdGgoKSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAg
SW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11
bGF0ZWRPZmZzZXQpOwotICAgIEludFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludEluUGFy
ZW50IC0gcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKKyAgICBMYXlvdXRQb2ludCBwb2ludElu
UGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNl
dCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSBw
YXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpOwogCiAgICAgLy8gTm90ZTogRm9yIG5vdywgd2UncmUg
aWdub3JpbmcgaGl0cyB0byBib3JkZXIgYW5kIHBhZGRpbmcgZm9yIDxzdmc+Ci0gICAgSW50UG9p
bnQgcG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3JpZ2luVG9D
b250ZW50Qm94KCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludElu
Qm9yZGVyQm94IC0gYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CiAgICAgaWYgKCFjb250ZW50
Qm94UmVjdCgpLmNvbnRhaW5zKHBvaW50SW5Db250ZW50Qm94KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAgTGF5b3V0UG9pbnQgbG9j
YWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9p
bnRJblBhcmVudCk7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlm
IChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhp
dFRlc3RBY3Rpb24pKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91
bmRpbmdCb3g7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJl
cGFpbnRSZWN0LCBib29sIGZpeGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDEsNyArMjAxLDcgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDkwMDUxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0
aW9uKTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0
IEludFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTAwNTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MjgsNyArNzI4LDcgQEAgSW50UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZAog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIH0KIAotYm9vbCBTVkdJbmxp
bmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQsIGludCkKK2Jvb2wgU1ZHSW5saW5l
VGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50LCBpbnQpCiB7CiAgICAgLy8g
RklYTUU6IGludGVncmF0ZSB3aXRoIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50IGJldHRlci4K
ICAgICBBU1NFUlQoIWlzTGluZUJyZWFrKCkpOwpAQCAtNzQwLDkgKzc0MCw5IEBAIGJvb2wgU1ZH
SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QKICAgICAgICAgICAgIHx8IChoaXRSdWxl
cy5jYW5IaXRGaWxsICYmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxs
KCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSkpIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQg
Ym94T3JpZ2luKHgoKSwgeSgpKTsKICAgICAgICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11
bGF0ZWRPZmZzZXQpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBJbnRT
aXplKHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChib3hP
cmlnaW4sIHNpemUoKSk7CiAgICAgICAgICAgICBpZiAocmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1Np
emUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVy
LCByZWN0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmgJKHJldmlzaW9uIDkwMDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCosIFJlbmRl
clN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24pOwogICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4
dCosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fbG9naWNhbEhlaWdodDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99360</attachid>
            <date>2011-06-30 13:16:31 -0700</date>
            <delta_ts>2011-07-06 13:47:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63663-20110630131630.patch</filename>
            <type>text/plain</type>
            <size>62444</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDYtMjkgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIG5vZGVBdFBvaW50IHRvIHRvIG5ldyBs
YXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYzNjYzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5n
ZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxs
aXBzaXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
TGF5b3V0VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTGF5b3V0U2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0xheW91dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kZWRMYXlv
dXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkTGF5b3V0VW5pdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om5v
ZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVp
Z25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6
bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3Jl
aWduT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guaDoKKwogMjAxMS0wNi0zMCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA5MDE1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMSwyNCArMTAxLDI0IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdy
YXBoaWMKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRS
dW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCkgKyBwYWludE9mZnNldC54
KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHRvcCksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNl
KCkpOwogfQogCi1ib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGlu
ZVRvcCwgaW50IGxpbmVCb3R0b20pCitib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7Ci0gICAgSW50UG9pbnQg
YWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgcm91bmRlZEludFBvaW50KHRv
cExlZnQoKSk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVk
T2Zmc2V0ICsgcm91bmRlZEludFBvaW50KHRvcExlZnQoKSk7CiAKICAgICAvLyBIaXQgdGVzdCB0
aGUgbWFya3VwIGJveC4KICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpOwotICAgICAgICBpbnQg
bXR4ID0gYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFya3VwQm94
LT54KCk7Ci0gICAgICAgIGludCBtdHkgPSBhZGp1c3RlZExvY2F0aW9uLnkoKSArIHN0eWxlLT5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+
cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNh
bFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtdHkgPSBhZGp1
c3RlZExvY2F0aW9uLnkoKSArIHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFy
a3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUp
LT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgaWYgKG1fbWFya3VwQm94LT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIEludFBvaW50KG10eCwg
bXR5KSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZShtdHgs
IG10eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KGFkanVzdGVkTG9jYXRpb24sIEludFNpemUo
bV9sb2dpY2FsV2lkdGgsIG1faGVpZ2h0KSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFk
anVzdGVkTG9jYXRpb24sIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIG1faGVpZ2h0KSk7CiAg
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVz
dWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUo
YWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0
aW9uKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
cmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUg
PSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0
LDcgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbgogICAgIH0KIH0K
IAotYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCAvKiBsaW5lVG9wICov
LCBpbnQgLypsaW5lQm90dG9tKi8pCitib29sIElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAgICAv
LyBIaXQgdGVzdCBhbGwgcGhhc2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHksIGFz
IHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBvd24g
c3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBpbmxp
bmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhlIENTUzIuMQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIElubGluZUJv
eCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODk4LDkgKzg5OCw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0T3ZlcmZsb3dGcm9tTG9naWMK
ICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvdywgbGluZVRvcCwgbGluZUJvdHRv
bSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7Ci0gICAgSW50UmVj
dCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsK
KyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwg
bGluZUJvdHRvbSkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAg
IG92ZXJmbG93UmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIGlmICghb3ZlcmZs
b3dSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkp
CkBAIC05MDksMzYgKzkwOSwzNiBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpCiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmlyc3QuCiAgICAgZm9yIChJbmxpbmVCb3gq
IGN1cnIgPSBsYXN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZPbkxpbmUoKSkgewog
ICAgICAgICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2Rl
bE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5l
VG9wLCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZz
ZXQpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyBj
aGVjayBvdXJzZWx2ZXMuIFBpeGVsIHNuYXAgaGl0IHRlc3RpbmcuCi0gICAgSW50UmVjdCBmcmFt
ZVJlY3QgPSByb3VuZGVkRnJhbWVSZWN0KCk7Ci0gICAgaW50IG1pblggPSBmcmFtZVJlY3QueCgp
OwotICAgIGludCBtaW5ZID0gZnJhbWVSZWN0LnkoKTsKLSAgICBpbnQgd2lkdGggPSBmcmFtZVJl
Y3Qud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gZnJhbWVSZWN0LmhlaWdodCgpOworICAgIExh
eW91dFJlY3QgZnJhbWVSZWN0ID0gcm91bmRlZEZyYW1lUmVjdCgpOworICAgIExheW91dFVuaXQg
bWluWCA9IGZyYW1lUmVjdC54KCk7CisgICAgTGF5b3V0VW5pdCBtaW5ZID0gZnJhbWVSZWN0Lnko
KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoID0gZnJhbWVSZWN0LndpZHRoKCk7CisgICAgTGF5b3V0
VW5pdCBoZWlnaHQgPSBmcmFtZVJlY3QuaGVpZ2h0KCk7CiAKICAgICAvLyBDb25zdHJhaW4gb3Vy
IGhpdCB0ZXN0aW5nIHRvIHRoZSBsaW5lIHRvcCBhbmQgYm90dG9tIGlmIG5lY2Vzc2FyeS4KICAg
ICBib29sIG5vUXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluTm9RdWlya3NN
b2RlKCk7CiAgICAgaWYgKCFub1F1aXJrc01vZGUgJiYgIWhhc1RleHRDaGlsZHJlbigpICYmICEo
ZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGhhc1RleHREZXNj
ZW5kYW50cygpKSkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gcm9vdCgpOwot
ICAgICAgICBpbnQmIHRvcCA9IGlzSG9yaXpvbnRhbCgpID8gbWluWSA6IG1pblg7Ci0gICAgICAg
IGludCYgbG9naWNhbEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gaGVpZ2h0IDogd2lkdGg7Ci0g
ICAgICAgIGludCBib3R0b20gPSBtaW4ocm9vdEJveC0+bGluZUJvdHRvbSgpLCB0b3AgKyBsb2dp
Y2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5b3V0VW5pdCYgdG9wID0gaXNIb3Jpem9udGFsKCkgPyBt
aW5ZIDogbWluWDsKKyAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbEhlaWdodCA9IGlzSG9yaXpv
bnRhbCgpID8gaGVpZ2h0IDogd2lkdGg7CisgICAgICAgIExheW91dFVuaXQgYm90dG9tID0gbWlu
KHJvb3RCb3gtPmxpbmVCb3R0b20oKSwgdG9wICsgbG9naWNhbEhlaWdodCk7CiAgICAgICAgIHRv
cCA9IG1heChyb290Qm94LT5saW5lVG9wKCksIHRvcCk7CiAgICAgICAgIGxvZ2ljYWxIZWlnaHQg
PSBib3R0b20gLSB0b3A7CiAgICAgfQogICAgIAogICAgIC8vIE1vdmUgeC95IHRvIG91ciBjb29y
ZGluYXRlcy4KLSAgICBJbnRSZWN0IHJlY3QobWluWCwgbWluWSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgTGF5b3V0UmVjdCByZWN0KG1pblgsIG1pblksIHdpZHRoLCBoZWlnaHQpOwogICAgIGZsaXBG
b3JXcml0aW5nTW9kZShyZWN0KTsKICAgICByZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7
CiAKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5D
b250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0IGFkZCBpbiBt
X3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mg
c3BhY2UuCisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBm
bGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVs
YXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBj
b29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KICAgICAgICAgaWYgKCFyZXN1
bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50
SW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA5MDE1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEZpbGxMYXll
cihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0
IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwog
ICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBT
aGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDE2ICszNDUsMTYgQEAgYm9vbCBJbmxpbmVU
ZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzQlIo
KSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0g
MSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQogCi1i
b29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8q
bGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50
IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRmxvYXRQb2ludCBib3hPcmlnaW4g
PSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAgICAgYm94T3JpZ2luLm1vdmVCeShhY2N1
bXVsYXRlZE9mZnNldCk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBJbnRTaXplKHdp
ZHRoKCksIGhlaWdodCgpKSk7CisgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkp
OwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludElu
Q29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFjY3Vt
dWxhdGVkT2Zmc2V0KSkpOworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNp
emUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1Jl
Y3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBy
ZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NyArMTExLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKIAogcHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlzaW9uIDkwMTUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpZm5kZWYgTGF5b3V0VHlwZXNfaAogI2RlZmluZSBMYXlvdXRU
eXBlc19oCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw2ICs0NiwyNiBAQCB0eXBlZGVmIEludFBvaW50
IExheW91dFBvaW50OwogdHlwZWRlZiBJbnRTaXplIExheW91dFNpemU7CiB0eXBlZGVmIEludFJl
Y3QgTGF5b3V0UmVjdDsKIAoraW5saW5lIExheW91dFNpemUgdG9MYXlvdXRTaXplKGNvbnN0IExh
eW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBMYXlvdXRTaXplKHAueCgpLCBwLnkoKSk7Cit9
CisKK2lubGluZSBMYXlvdXRQb2ludCB0b0xheW91dFBvaW50KGNvbnN0IExheW91dFNpemUmIHAp
Cit7CisgICAgcmV0dXJuIExheW91dFBvaW50KHAud2lkdGgoKSwgcC5oZWlnaHQoKSk7Cit9CisK
K2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkKK3sKKyAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOworfQorCitpbmxpbmUgTGF5b3V0
VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbHJvdW5k
Zih2YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIExheW91
dFR5cGVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
cmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMzLDE0ICszOTMzLDE0IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHIKICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFjY3VtdWxh
dGVkT2Zmc2V0KSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBJ
bnRQb2ludCBhZGp1c3RlZExvY2F0aW9uKGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7
Ci0gICAgSW50U2l6ZSBsb2NhbE9mZnNldCA9IHRvU2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKKyAg
ICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uKGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRp
b24oKSk7CisgICAgTGF5b3V0U2l6ZSBsb2NhbE9mZnNldCA9IHRvTGF5b3V0U2l6ZShhZGp1c3Rl
ZExvY2F0aW9uKTsKIAogICAgIGlmICghaXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCi0gICAgICAgIEludFJlY3Qgb3Zl
cmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICAgICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3Zl
QnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTM5NTYsMjQgKzM5NTYsMjQgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2Ug
Y2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNP
dmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNs
aXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIEludFJlY3Qg
aGl0VGVzdEFyZWEocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSk7CisgICAg
TGF5b3V0UmVjdCBoaXRUZXN0QXJlYShyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWlu
ZXIpKTsKICAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENs
aXAoKSA/IGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3RzKGhpdFRl
c3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgSW5jbHVkZU92ZXJs
YXlTY3JvbGxiYXJTaXplKS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSk7CiAgICAgaWYgKGNoZWNr
Q2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCi0gICAg
ICAgIEludFNpemUgc2Nyb2xsZWRPZmZzZXQobG9jYWxPZmZzZXQpOworICAgICAgICBMYXlvdXRT
aXplIHNjcm9sbGVkT2Zmc2V0KGxvY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpKSB7CiAgICAgICAgICAgICBzY3JvbGxlZE9mZnNldCAtPSBsYXllcigpLT5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpdCB0ZXN0IGNvbnRl
bnRzIGlmIHdlIGRvbid0IGhhdmUgY29sdW1ucy4KICAgICAgICAgaWYgKCFoYXNDb2x1bW5zKCkp
IHsKLSAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCB0b1BvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsK
KyAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikp
IHsKICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RGbG9h
dCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdG9Q
b2ludChzY3JvbGxlZE9mZnNldCkpKQorICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0g
SGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGl0VGVzdENvbHVtbnMocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b1BvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVz
dEFjdGlvbikpIHsKKyAgICAgICAgfSBlbHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHRvTGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBo
aXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHBvaW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMzk4MSw3ICszOTgxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VAogCiAgICAgLy8gTm93IGhpdCB0ZXN0IG91ciBiYWNrZ3JvdW5k
CiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRU
ZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgewotICAgICAgICBJbnRS
ZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0
UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7CiAgICAgICAgIGlmICh2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0
Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSBsb2Nh
bE9mZnNldCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
MSw3ICszMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGln
bm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50ICovLCBmbG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dp
Y2FsV2lkdGggKi8pIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gOTAxNTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQ1LDIzICs3NDUsMjMgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50
Qm94TAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewotICAgIEludFBvaW50IGFk
anVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgTGF5
b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24o
KTsKIAogICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSkgewogICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFj
dGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFk
anVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFs
d2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdy
b3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFn
ZXMpLgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
c2l6ZSgpKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6
ZSgpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0
Rm9yZWdyb3VuZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6
ZShhZGp1c3RlZExvY2F0aW9uKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RC
YXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEK
IH0KIAogYm9vbCBSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKKyAgICBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFj
dGlvbikKIHsKICAgICBpZiAoYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
cmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcgQEAgSFRNTE1hcEVsZW1lbnQqIFJl
bmRlckltYWdlOjppbWFnZU1hcCgpIAogICAgIHJldHVybiBpID8gaS0+dHJlZVNjb3BlKCktPmdl
dEltYWdlTWFwKGktPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpIDogMDsKIH0KIAotYm9v
bCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQorYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3Vs
dChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnRvcFBhZGRpbmcoKSwgcmVzdWx0LnJpZ2h0UGFkZGlu
ZygpLCByZXN1bHQuYm90dG9tUGFkZGluZygpLCByZXN1bHQubGVmdFBhZGRpbmcoKSk7CiAgICAg
Ym9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24p
OwpAQCAtNDAzLDggKzQwMyw4IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFQKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBpbWFnZU1hcCgpKSB7CiAg
ICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwogICAgICAg
ICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAg
IGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkgLSBhY2N1bXVsYXRlZE9m
ZnNldC54KCkgLSB0aGlzLT54KCkgLSBjb250ZW50Qm94LngoKSkgLyB6b29tKTsKLSAgICAgICAg
ICAgIGludCBtYXBZID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci55KCkgLSBhY2N1bXVsYXRl
ZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29tKTsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgbWFwWCA9IHJvdW5kZWRMYXlvdXRVbml0KChwb2ludEluQ29udGFp
bmVyLngoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0LngoKSAtIHRoaXMtPngoKSAtIGNvbnRlbnRCb3gu
eCgpKSAvIHpvb20pOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXBZID0gcm91bmRlZExheW91
dFVuaXQoKHBvaW50SW5Db250YWluZXIueSgpIC0gYWNjdW11bGF0ZWRPZmZzZXQueSgpIC0gdGhp
cy0+eSgpIC0gY29udGVudEJveC55KCkpIC8gem9vbSk7CiAgICAgICAgICAgICBpZiAobWFwLT5t
YXBNb3VzZUV2ZW50KG1hcFgsIG1hcFksIGNvbnRlbnRCb3guc2l6ZSgpLCB0ZW1wUmVzdWx0KSkK
ICAgICAgICAgICAgICAgICB0ZW1wUmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKCkp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAko
cmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
aW50IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
Ym9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFVu
aXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDkwMTUxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxMCw3ICs3MTAsNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBj
CiB9CiAKIGJvb2wgUmVuZGVySW5saW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlz
LCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBo
aXRUZXN0QWN0aW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVu
dCgpIHx8IGhhc01hc2soKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDEzICs2NzEsMTMg
QEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAotYm9v
bCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCitib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBpZiAoIVJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVk
T2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVtSXRl
bXMoKTsKLSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQg
KyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVs
YXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdChhZGp1c3RlZExvY2F0aW9u
LCBpKS5jb250YWlucyhwb2ludEluQ29udGFpbmVyKSkgewpAQCAtNjg1LDcgKzY4NSw3IEBAIGJv
b2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICAgICAgICAgICAgICBy
ZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJO
b25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50
KHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNp
emUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbFRvcChpbnQpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFNj
cm9sbGFibGVBcmVhIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc5
LDcgKzIxNzksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAg
ICAgfQogfQogCi1ib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIC8qcG9pbnRJbkNvbnRhaW5l
ciovLCBjb25zdCBJbnRQb2ludCYgLyphY2N1bXVsYXRlZE9mZnNldCovLCBIaXRUZXN0QWN0aW9u
KQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywg
Y29uc3QgTGF5b3V0UG9pbnQmIC8qYWNjdW11bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0
UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gOTAxNTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTkzLDE3ICsxMTkzLDE3IEBAIEludFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJl
Y3QoY28KICAgICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwor
ICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxv
Y2F0aW9uKCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3Rz
KHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAh
dG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAg
SW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGls
ZCksIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwor
ICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01v
ZGUodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxp
cHBpbmdBZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkg
ewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2lu
dChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOworICAgICAgICAgICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVy
IC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjExLDkgKzEyMTEsOSBAQCBib29sIFJl
bmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgfQogCiAgICAgLy8gQ2hlY2sg
b3VyIGJvdW5kcyBuZXh0LgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0
ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRM
b2NhdGlvbiwgc2l6ZSgpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rp
b24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2lu
dChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVk
TG9jYXRpb24pKSk7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9y
V3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0
aW9uKSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIAogICAgIHZp
cnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gOTAxNTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODcsNyArMTg3LDcgQEAgSW50UmVjdCBSZW5kZXJUYWJsZVJvdzo6Y2xpcHBlZE92
ZXJmbG93UgogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlUm93
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAg
ICAvLyBUYWJsZSByb3dzIGNhbm5vdCBldmVyIGJlIGhpdCB0ZXN0ZWQuICBFZmZlY3RpdmVseSB0
aGV5IGRvIG5vdCBleGlzdC4KICAgICAvLyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFs
d2F5cy4KQEAgLTE5Nyw5ICsxOTcsOSBAQCBib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2lu
dChjb25zdCBICiAgICAgICAgIC8vIHRhYmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAod2hp
Y2ggd2Ugc2hvdWxkIGRvIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGFueXdheSksCiAgICAgICAg
IC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgogICAgICAgICBpZiAoY2hpbGQtPmlz
VGFibGVDZWxsKCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewotICAgICAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2Rl
KHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0ZWRPZmZzZXQsIFBhcmVudFRvQ2hp
bGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50
ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0
ZWRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwogICAgICAgICAgICAg
aWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGNlbGxQb2ludCkpOworICAgICAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0g
dG9MYXlvdXRTaXplKGNlbGxQb2ludCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKTsKIAogICAgIC8vIFRoZSBvbmx5IHRpbWUgcm93cyBnZXQgYSBsYXllciBpcyB3aGVu
IHRoZXkgaGF2ZSB0cmFuc3BhcmVuY3kuCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
aGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gOTAxNTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0
Q29sdW1uKGludAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJU
YWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0
aW9uKQogewogICAgIC8vIElmIHdlIGhhdmUgbm8gY2hpbGRyZW4gdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCkBAIC0xMTQ5LDcgKzExNDksNyBAQCBi
b29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAKICAgICAvLyBUYWJsZSBz
ZWN0aW9ucyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBkbyBu
b3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCi0g
ICAgSW50UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRp
b24oKTsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZz
ZXQgKyBsb2NhdGlvbigpOwogCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxv
d0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2lu
dChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNjEsOSAr
MTE2MSw5IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAgICAg
ICAgICAgIC8vIHRhYmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxk
IGRvIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGFueXdheSksCiAgICAgICAgICAgICAvLyB0aGVu
IHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3go
KSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAg
ICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1Jl
bmRlckJveChjaGlsZCksIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0Fk
anVzdG1lbnQpOworICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlw
Rm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uLCBQYXJl
bnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hpbGRQb2lu
dCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOworICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2lu
dEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMTcxLDcgKzExNzEs
NyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250
YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbik7CisgICAgTGF5b3V0UG9pbnQgbG9jYXRp
b24gPSBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwog
ICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9j
YXRpb24uc2V0WShoZWlnaHQoKSAtIGxvY2F0aW9uLnkoKSk7CkBAIC0xMTc5LDcgKzExNzksNyBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAgICBs
b2NhdGlvbi5zZXRYKHdpZHRoKCkgLSBsb2NhdGlvbi54KCkpOwogICAgIH0KIAotICAgIGludCBv
ZmZzZXRJbkNvbHVtbkRpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBsb2NhdGlvbi55KCkgOiBsb2NhdGlvbi54KCk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXRJ
bkNvbHVtbkRpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBs
b2NhdGlvbi55KCkgOiBsb2NhdGlvbi54KCk7CiAgICAgLy8gRmluZCB0aGUgZmlyc3Qgcm93IHRo
YXQgc3RhcnRzIGFmdGVyIG9mZnNldEluQ29sdW1uRGlyZWN0aW9uLgogICAgIHVuc2lnbmVkIG5l
eHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgp
LCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbikgLSBtX3Jvd1Bvcy5iZWdpbigpOwogICAgIGlmIChu
ZXh0Um93ID09IG1fcm93UG9zLnNpemUoKSkKQEAgLTExODcsNyArMTE4Nyw3IEBAIGJvb2wgUmVu
ZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAgICAvLyBOb3cgc2V0IGhpdFJvdyB0
byB0aGUgaW5kZXggb2YgdGhlIGhpdCByb3csIG9yIDAuCiAgICAgdW5zaWduZWQgaGl0Um93ID0g
bmV4dFJvdyA+IDAgPyBuZXh0Um93IC0gMSA6IDA7CiAKLSAgICBWZWN0b3I8aW50PiYgY29sdW1u
UG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CisgICAgVmVjdG9yPExheW91dFVuaXQ+
JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKICAgICBpbnQgb2Zmc2V0
SW5Sb3dEaXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9j
YXRpb24ueCgpIDogbG9jYXRpb24ueSgpOwogICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQogICAgICAgICBvZmZzZXRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tj
b2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBvZmZzZXRJblJvd0RpcmVjdGlvbjsKQEAgLTEyMDUsOSAr
MTIwNSw5IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KIAogICAg
IGZvciAoaW50IGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAg
ICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbHNbaV07Ci0gICAgICAg
IEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBhZGp1c3RlZExv
Y2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKKyAgICAgICAgTGF5b3V0
UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNlbGwsIGFkanVzdGVkTG9jYXRp
b24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwogICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBv
aW50KSk7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQ
b2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3Jh
cHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCi0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKTsKIAogICAgIGJvb2wgZW5zdXJlUm93cyhpbnQpOwogICAgIHZvaWQgY2xlYXJHcmlk
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkw
MTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24p
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGRlbGV0ZVRleHRC
b3hlcygpOwogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4pIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiA5MDE1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZTo6c3VidHJlZQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFu
Z2VJblRleHRBcmVhKHRleHRBcmVhKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIGlmICghUmVuZGVyVGV4dENv
bnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNj
dW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBmbG9hdCBnZXRB
dmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVy
cmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
CShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gOTAxNTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk3LDcgKzM5Nyw3IEBAIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0
IFcKICAgICByZXR1cm4gd2lkZ2V0UmVuZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAotYm9v
bCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQorYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24gYWN0aW9uKQogewogICAgIGJvb2wgaGFkUmVzdWx0ID0gcmVzdWx0LmlubmVyTm9kZSgp
OwogICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlvbik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCShyZXZpc2lvbiA5MDE1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUp
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJs
YXBUZXN0UmVzdWx0KGJvb2wpOwogCiAgICAgYm9vbCBzZXRXaWRnZXRHZW9tZXRyeShjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50U2l6ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMSArMTg5
LDExIEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICNlbmRpZgog
fQogCi1ib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSkKK2Jvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxp
cHNpc0JveCgpICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSkgewogICAgICAgICBpZiAoZWxsaXBz
aXNCb3goKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0g
dG9TaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHJl
dmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5l
VG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5l
VG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBtX2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5z
aW9uOyB9CiAgICAgdm9pZCBzZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgaGFzU2VsZWN0ZWRD
aGlsZHJlbikgeyBtX2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9u
ID0gaGFzU2VsZWN0ZWRDaGlsZHJlbjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA5
MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxMSArMTUwLDEwIEBAIGJvb2wgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXQKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6
aXNPdmVyZmxvd0hpZGRlbih0aGlzKSAmJiAhbV92aWV3cG9ydC5jb250YWlucyhsb2NhbFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgcm91bmRlZExvY2FsUG9p
bnQgPSByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMb2NhbFBvaW50LCBJbnRQb2lu
dCgpLCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpLCBMYXlvdXRQ
b2ludCgpLCBoaXRUZXN0QWN0aW9uKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRl
c3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDkwMTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQogCiAgICAgdmly
dHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3Jl
aWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1h
cExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmLCBib29sKiB3
YXNGaXhlZCA9IDApIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDkwMTUxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tRWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9t
RWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNW
R01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFj
dGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJl
IGNhbGxlZCwgU1ZHIHVzZXMgYSBkaWZmZXJlbnQgbm9kZUF0UG9pbnQgbWV0aG9kCi0gICAgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNiwxNyArNDM2
LDE3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmkKICAgICBtX3Jl
cGFpbnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKIH0KIAot
Ym9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhp
dFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBJbnRQb2ludCBwb2ludElu
UGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCk7Ci0g
ICAgSW50UG9pbnQgcG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSBwYXJlbnRPcmln
aW5Ub0JvcmRlckJveCgpOworICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludElu
Q29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICBMYXlvdXRQ
b2ludCBwb2ludEluQm9yZGVyQm94ID0gcG9pbnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9y
ZGVyQm94KCk7CiAKICAgICAvLyBOb3RlOiBGb3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRv
IGJvcmRlciBhbmQgcGFkZGluZyBmb3IgPHN2Zz4KLSAgICBJbnRQb2ludCBwb2ludEluQ29udGVu
dEJveCA9IHBvaW50SW5Cb3JkZXJCb3ggLSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKKyAg
ICBMYXlvdXRQb2ludCBwb2ludEluQ29udGVudEJveCA9IHBvaW50SW5Cb3JkZXJCb3ggLSBib3Jk
ZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKICAgICBpZiAoIWNvbnRlbnRCb3hSZWN0KCkuY29udGFp
bnMocG9pbnRJbkNvbnRlbnRCb3gpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQ
b2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQ
b2ludChwb2ludEluUGFyZW50KTsKKyAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRG
bG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShy
ZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9r
ZUJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wg
Zml4ZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBi
b29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBI
aXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExh
eW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gOTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiA5MDE1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsNyBAQCBJ
bnRSZWN0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUJvdW5kCiAgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QodGV4dFJlY3QpOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIGludCwgaW50KQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQsIGludCkKIHsKICAgICAvLyBGSVhNRTogaW50ZWdyYXRl
IHdpdGggSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQgYmV0dGVyLgogICAgIEFTU0VSVCghaXNM
aW5lQnJlYWsoKSk7CkBAIC03NDAsOSArNzQwLDkgQEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpu
b2RlQXRQb2ludChjb25zdAogICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYg
KHJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZUZpbGwpKSkgewogICAgICAgICAgICAgRmxvYXRQb2ludCBib3hPcmlnaW4oeCgpLCB5
KCkpOwogICAgICAgICAgICAgYm94T3JpZ2luLm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7Ci0g
ICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIEludFNpemUod2lkdGgoKSwgaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwgc2l6ZSgpKTsK
ICAgICAgICAgICAgIGlmIChyZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2lu
dEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9m
ZnNldCkpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24g
OTAxNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVu
JiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbik7CiAgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUq
LCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJv
b2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogcHJpdmF0
ZToKICAgICBpbnQgbV9sb2dpY2FsSGVpZ2h0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99874</attachid>
            <date>2011-07-06 13:47:06 -0700</date>
            <delta_ts>2011-07-06 14:51:25 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-63663-20110706134705.patch</filename>
            <type>text/plain</type>
            <size>61587</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDctMDYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIG5vZGVBdFBvaW50IHRvIHRvIG5ldyBsYXlv
dXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzNjYzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBz
aXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTGF5b3V0U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0xheW91dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kZWRMYXlvdXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkTGF5b3V0VW5pdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
cldpZGdldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSb290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9k
ZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWdu
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaDoKKwogMjAxMS0wNy0wNiAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoKSBoYXMg
aW5jb25zaXN0ZW50IEFQSSB3aGVuIG5vIGN1c3RvbSBpY29uIGlzIGF2YWlsYWJsZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA5MDQ4NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSwyNCArMTAxLDI0IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9u
KEdyYXBoaWMKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRl
eHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCkgKyBwYWludE9mZnNl
dC54KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHRvcCksIGgsIGMsIHN0eWxlLT5jb2xvclNw
YWNlKCkpOwogfQogCi1ib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pCitib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7Ci0gICAgSW50UG9p
bnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgcm91bmRlZEludFBvaW50
KHRvcExlZnQoKSk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxh
dGVkT2Zmc2V0ICsgcm91bmRlZEludFBvaW50KHRvcExlZnQoKSk7CiAKICAgICAvLyBIaXQgdGVz
dCB0aGUgbWFya3VwIGJveC4KICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpOwotICAgICAgICBp
bnQgbXR4ID0gYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFya3Vw
Qm94LT54KCk7Ci0gICAgICAgIGludCBtdHkgPSBhZGp1c3RlZExvY2F0aW9uLnkoKSArIHN0eWxl
LT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJv
eC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgp
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9n
aWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtdHkgPSBh
ZGp1c3RlZExvY2F0aW9uLnkoKSArIHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1f
bWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExp
bmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgaWYgKG1fbWFya3VwQm94LT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIEludFBvaW50KG10
eCwgbXR5KSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKICAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSht
dHgsIG10eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KGFkanVzdGVkTG9jYXRpb24sIEludFNp
emUobV9sb2dpY2FsV2lkdGgsIG1faGVpZ2h0KSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0
KGFkanVzdGVkTG9jYXRpb24sIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIG1faGVpZ2h0KSk7
CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1Np
emUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExv
Y2F0aW9uKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3Rh
dGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyAr
MjI0LDcgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbgogICAgIH0K
IH0KIAotYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCAvKiBsaW5lVG9w
ICovLCBpbnQgLypsaW5lQm90dG9tKi8pCitib29sIElubGluZUJveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAg
ICAvLyBIaXQgdGVzdCBhbGwgcGhhc2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHks
IGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBv
d24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBp
bmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhlIENTUzIuMQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIElubGlu
ZUJveCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5MDQ4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODk4LDkgKzg5OCw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0T3ZlcmZsb3dGcm9tTG9n
aWMKICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvdywgbGluZVRvcCwgbGluZUJv
dHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50
IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7Ci0gICAgSW50
UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20p
KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRv
cCwgbGluZUJvdHRvbSkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwog
ICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIGlmICghb3Zl
cmZsb3dSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVy
KSkpCkBAIC05MDksMzYgKzkwOSwzNiBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpCiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmlyc3QuCiAgICAgZm9yIChJbmxpbmVC
b3gqIGN1cnIgPSBsYXN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZPbkxpbmUoKSkg
ewogICAgICAgICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hN
b2RlbE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBs
aW5lVG9wLCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRP
ZmZzZXQpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5v
dyBjaGVjayBvdXJzZWx2ZXMuIFBpeGVsIHNuYXAgaGl0IHRlc3RpbmcuCi0gICAgSW50UmVjdCBm
cmFtZVJlY3QgPSByb3VuZGVkRnJhbWVSZWN0KCk7Ci0gICAgaW50IG1pblggPSBmcmFtZVJlY3Qu
eCgpOwotICAgIGludCBtaW5ZID0gZnJhbWVSZWN0LnkoKTsKLSAgICBpbnQgd2lkdGggPSBmcmFt
ZVJlY3Qud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gZnJhbWVSZWN0LmhlaWdodCgpOworICAg
IExheW91dFJlY3QgZnJhbWVSZWN0ID0gcm91bmRlZEZyYW1lUmVjdCgpOworICAgIExheW91dFVu
aXQgbWluWCA9IGZyYW1lUmVjdC54KCk7CisgICAgTGF5b3V0VW5pdCBtaW5ZID0gZnJhbWVSZWN0
LnkoKTsKKyAgICBMYXlvdXRVbml0IHdpZHRoID0gZnJhbWVSZWN0LndpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBoZWlnaHQgPSBmcmFtZVJlY3QuaGVpZ2h0KCk7CiAKICAgICAvLyBDb25zdHJhaW4g
b3VyIGhpdCB0ZXN0aW5nIHRvIHRoZSBsaW5lIHRvcCBhbmQgYm90dG9tIGlmIG5lY2Vzc2FyeS4K
ICAgICBib29sIG5vUXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluTm9RdWly
a3NNb2RlKCk7CiAgICAgaWYgKCFub1F1aXJrc01vZGUgJiYgIWhhc1RleHRDaGlsZHJlbigpICYm
ICEoZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGhhc1RleHRE
ZXNjZW5kYW50cygpKSkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gcm9vdCgp
OwotICAgICAgICBpbnQmIHRvcCA9IGlzSG9yaXpvbnRhbCgpID8gbWluWSA6IG1pblg7Ci0gICAg
ICAgIGludCYgbG9naWNhbEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gaGVpZ2h0IDogd2lkdGg7
Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4ocm9vdEJveC0+bGluZUJvdHRvbSgpLCB0b3AgKyBs
b2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5b3V0VW5pdCYgdG9wID0gaXNIb3Jpem9udGFsKCkg
PyBtaW5ZIDogbWluWDsKKyAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbEhlaWdodCA9IGlzSG9y
aXpvbnRhbCgpID8gaGVpZ2h0IDogd2lkdGg7CisgICAgICAgIExheW91dFVuaXQgYm90dG9tID0g
bWluKHJvb3RCb3gtPmxpbmVCb3R0b20oKSwgdG9wICsgbG9naWNhbEhlaWdodCk7CiAgICAgICAg
IHRvcCA9IG1heChyb290Qm94LT5saW5lVG9wKCksIHRvcCk7CiAgICAgICAgIGxvZ2ljYWxIZWln
aHQgPSBib3R0b20gLSB0b3A7CiAgICAgfQogICAgIAogICAgIC8vIE1vdmUgeC95IHRvIG91ciBj
b29yZGluYXRlcy4KLSAgICBJbnRSZWN0IHJlY3QobWluWCwgbWluWSwgd2lkdGgsIGhlaWdodCk7
CisgICAgTGF5b3V0UmVjdCByZWN0KG1pblgsIG1pblksIHdpZHRoLCBoZWlnaHQpOwogICAgIGZs
aXBGb3JXcml0aW5nTW9kZShyZWN0KTsKICAgICByZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9mZnNl
dCk7CiAKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhy
ZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50
SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0IGFkZCBp
biBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2Nr
J3Mgc3BhY2UuCisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1
bXVsYXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2Fu
dCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KICAgICAgICAgaWYgKCFy
ZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBv
aW50SW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA5
MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEZpbGxM
YXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGNv
bnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIp
OwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUq
LCBTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDE2ICszNDUsMTYgQEAgYm9vbCBJbmxp
bmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlz
QlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkg
PT0gMSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQog
Ci1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50
IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
aW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAgICBpZiAoaXNMaW5l
QnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRmxvYXRQb2ludCBib3hPcmln
aW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAgICAgYm94T3JpZ2luLm1vdmVCeShh
Y2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBJbnRTaXpl
KHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXpl
KCkpOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2lu
dEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSkpOworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0b0xheW91
dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVy
LCByZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNyArMTExLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKIAogcHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5
MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NDQsMTQgKzM5NDQsMTQgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2lu
dEluT3ZlcmZsb3dDb250cgogICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEludFBvaW50IGFk
anVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICBJbnRT
aXplIGxvY2FsT2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOworICAgIExheW91dFBv
aW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKKyAg
ICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
OwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBu
ZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KLSAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9
IHZpc3VhbE92ZXJmbG93UmVjdCgpOworICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Qm94ID0g
dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3Rl
ZExvY2F0aW9uKTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzk2NywyNCArMzk2NywyNCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZl
IGFueSBzcGlsbG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xp
cCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXND
b250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgSW50UmVjdCBoaXRUZXN0QXJl
YShyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKTsKKyAgICBMYXlvdXRSZWN0
IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwogICAg
IGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29u
dHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDog
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJh
clNpemUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikg
ewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KLSAgICAgICAgSW50U2l6
ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xs
ZWRPZmZzZXQobG9jYWxPZmZzZXQpOwogICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsK
ICAgICAgICAgICAgIHNjcm9sbGVkT2Zmc2V0IC09IGxheWVyKCktPnNjcm9sbGVkQ29udGVudE9m
ZnNldCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSGl0IHRlc3QgY29udGVudHMgaWYgd2Ug
ZG9uJ3QgaGF2ZSBjb2x1bW5zLgogICAgICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgewotICAgICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIHRvUG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAg
ICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IHRvTGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0g
bG9jYWxPZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRl
c3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b1BvaW50KHNjcm9s
bGVkT2Zmc2V0KSkpCisgICAgICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Rmxv
YXQgJiYgaGl0VGVzdEZsb2F0cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHRv
TGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIHRvUG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkg
eworICAgICAgICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rp
b24pKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0zOTkyLDcgKzM5OTIsNyBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAo
aGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24g
PT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7Ci0gICAgICAgIEludFJlY3QgYm91bmRz
UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgICAgICBMYXlvdXRSZWN0IGJvdW5k
c1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcgKzMwNCw3
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxp
bmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAq
LykgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDksMjMg
Kzc0OSwyMyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMCiB9CiAK
IC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
Ly8gQ2hlY2sga2lkcyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAg
ICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWRqdXN0ZWRMb2NhdGlvbiwgYWN0aW9uKSkgewot
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIg
LSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2Nh
dGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3Vt
ZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNl
ICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAg
SW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwor
ICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAg
IGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5k
ICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250
YWluZXIpKSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVk
TG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2
LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29s
IFJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
YWN0aW9uKQorICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewog
ICAgIGlmIChhY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCShyZXZp
c2lvbiA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGlzRnJhbWVTZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5
MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6
OmltYWdlTWFwKCkgCiAgICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS0+Z2V0SW1hZ2VNYXAo
aS0+ZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkgOiAwOwogfQogCi1ib29sIFJlbmRlcklt
YWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5w
b2ludCgpLCByZXN1bHQudG9wUGFkZGluZygpLCByZXN1bHQucmlnaHRQYWRkaW5nKCksIHJlc3Vs
dC5ib3R0b21QYWRkaW5nKCksIHJlc3VsdC5sZWZ0UGFkZGluZygpKTsKICAgICBib29sIGluc2lk
ZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7CkBAIC00MDMs
OCArNDAzLDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAg
ICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAg
IEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9h
dCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaW50IG1hcFgg
PSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLngoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0LngoKSAt
IHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOwotICAgICAgICAgICAgaW50IG1h
cFkgPSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLnkoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0Lnko
KSAtIHRoaXMtPnkoKSAtIGNvbnRlbnRCb3gueSgpKSAvIHpvb20pOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXBYID0gcm91bmRlZExheW91dFVuaXQoKHBvaW50SW5Db250YWluZXIueCgpIC0g
YWNjdW11bGF0ZWRPZmZzZXQueCgpIC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCkpIC8gem9v
bSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1hcFkgPSByb3VuZGVkTGF5b3V0VW5pdCgocG9p
bnRJbkNvbnRhaW5lci55KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBj
b250ZW50Qm94LnkoKSkgLyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAtPm1hcE1vdXNlRXZl
bnQobWFwWCwgbWFwWSwgY29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQpKQogICAgICAgICAg
ICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUoKSk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA5
MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgbWluaW11
bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1
ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDcgKzcx
MCw3IEBAIGNvbnN0IGNoYXIqIFJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGMKIH0KIAogYm9v
bCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewogICAgIHJldHVybiBtX2xpbmVCb3hlcy5oaXRUZXN0KHRoaXMsIHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rp
b24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2
aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFz
TWFzaygpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsMTMgKzY3MSwxMyBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogfQogCi1ib29sIFJlbmRlckxp
c3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
K2Jvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhp
dFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaW50IHNpemUgPSBudW1JdGVtcygpOwotICAg
IEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9u
KCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
ICsgbG9jYXRpb24oKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgIGlmIChpdGVtQm91bmRpbmdCb3hSZWN0KGFkanVzdGVkTG9jYXRpb24sIGkpLmNvbnRh
aW5zKHBvaW50SW5Db250YWluZXIpKSB7CkBAIC02ODUsNyArNjg1LDcgQEAgYm9vbCBSZW5kZXJM
aXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJ
bm5lck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5v
ZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQocG9pbnRJbkNv
bnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LnNldExvY2FsUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3Rl
ZExvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2
aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGlu
dCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgLy8gU2Nyb2xsYWJsZUFy
ZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODIsNyArMjE4Miw3
IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEgKICAgICB9CiB9CiAK
LWJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgLypwb2ludEluQ29udGFpbmVyKi8sIGNvbnN0
IEludFBvaW50JiAvKmFjY3VtdWxhdGVkT2Zmc2V0Ki8sIEhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIC8qcG9pbnRJbkNvbnRhaW5lciovLCBjb25zdCBMYXlv
dXRQb2ludCYgLyphY2N1bXVsYXRlZE9mZnNldCovLCBIaXRUZXN0QWN0aW9uKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgcHVibGljOgogI2VuZGlm
CiAKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRlciA9IEhpdFRlc3RBbGwpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
MywxNyArMTE5MywxNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlOjpvdmVyZmxvd0NsaXBSZWN0KGNv
CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQg
YWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlv
bigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KICAgICBpZiAoIWhhc092ZXJmbG93Q2xp
cCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVu
ZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVT
ZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSkgewotICAgICAgICAgICAgICAgIEludFBv
aW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBh
ZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRv
UmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFyZW50VG9DaGlsZEZsaXBwaW5n
QWRqdXN0bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFjdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9pbnQocG9p
bnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNo
aWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTIxMSw5ICsxMjExLDkgQEAgYm9vbCBSZW5kZXJU
YWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBi
b3VuZHMgbmV4dC4KLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KGFkanVzdGVkTG9j
YXRpb24sIHNpemUoKSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRp
b24sIHNpemUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09
IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFj
a2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBm
bGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0
aW9uKSkpOworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRp
bmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikp
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2Rl
KCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJl
dmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICAKICAgICB2aXJ0dWFs
IGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg3LDcgKzE4Nyw3IEBAIEludFJlY3QgUmVuZGVyVGFibGVSb3c6OmNsaXBwZWRPdmVyZmxv
d1IKIH0KIAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8g
VGFibGUgcm93cyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBk
byBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMu
CkBAIC0xOTcsOSArMTk3LDkgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29u
c3QgSAogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdl
IHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAvLyB0
aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxl
Q2VsbCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
LSAgICAgICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1Jl
bmRlclRhYmxlQ2VsbChjaGlsZCksIGFjY3VtdWxhdGVkT2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxp
cHBpbmdBZGp1c3RtZW50KTsKKyAgICAgICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCksIGFjY3VtdWxhdGVkT2Zm
c2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAgICAgICAgIGlmIChj
aGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxs
UG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShjZWxsUG9pbnQpKTsKKyAgICAgICAgICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5
b3V0U2l6ZShjZWxsUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmgJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bik7CiAKICAgICAvLyBUaGUgb25seSB0aW1lIHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5
IGhhdmUgdHJhbnNwYXJlbmN5LgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29u
c3QgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1Ry
YW5zZm9ybSgpIHx8IGhhc01hc2soKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNDEsNyArMTE0MSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVt
bihpbnQKIH0KIAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVT
ZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikK
IHsKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGNoaWxkcmVuIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgogICAgIGlmICghZmlyc3RDaGlsZCgpKQpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgYm9vbCBS
ZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogCiAgICAgLy8gVGFibGUgc2VjdGlv
bnMgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4
aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgotICAgIElu
dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7
CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKIAogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlw
UmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTYxLDkgKzExNjEs
OSBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAg
ICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBm
b3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAgICAgLy8gdGhlbiB3ZSBj
YW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYg
IXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICAg
ICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJC
b3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3Rt
ZW50KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFyZW50VG9D
aGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNv
bnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE3MSw3ICsxMTcxLDcgQEAg
Ym9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVy
IC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOworICAgIExheW91dFBvaW50IGxvY2F0aW9uID0g
cG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKICAgICBp
ZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAo
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIGxvY2F0aW9u
LnNldFkoaGVpZ2h0KCkgLSBsb2NhdGlvbi55KCkpOwpAQCAtMTE3OSw3ICsxMTc5LDcgQEAgYm9v
bCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogICAgICAgICAgICAgbG9jYXRp
b24uc2V0WCh3aWR0aCgpIC0gbG9jYXRpb24ueCgpKTsKICAgICB9CiAKLSAgICBpbnQgb2Zmc2V0
SW5Db2x1bW5EaXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
bG9jYXRpb24ueSgpIDogbG9jYXRpb24ueCgpOworICAgIExheW91dFVuaXQgb2Zmc2V0SW5Db2x1
bW5EaXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRp
b24ueSgpIDogbG9jYXRpb24ueCgpOwogICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IHN0
YXJ0cyBhZnRlciBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbi4KICAgICB1bnNpZ25lZCBuZXh0Um93
ID0gc3RkOjp1cHBlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgb2Zm
c2V0SW5Db2x1bW5EaXJlY3Rpb24pIC0gbV9yb3dQb3MuYmVnaW4oKTsKICAgICBpZiAobmV4dFJv
dyA9PSBtX3Jvd1Bvcy5zaXplKCkpCkBAIC0xMTg3LDcgKzExODcsNyBAQCBib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgLy8gTm93IHNldCBoaXRSb3cgdG8gdGhl
IGluZGV4IG9mIHRoZSBoaXQgcm93LCBvciAwLgogICAgIHVuc2lnbmVkIGhpdFJvdyA9IG5leHRS
b3cgPiAwID8gbmV4dFJvdyAtIDEgOiAwOwogCi0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9
IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOworICAgIFZlY3RvcjxMYXlvdXRVbml0PiYgY29s
dW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CiAgICAgaW50IG9mZnNldEluUm93
RGlyZWN0aW9uID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0aW9u
LngoKSA6IGxvY2F0aW9uLnkoKTsKICAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKICAgICAgICAgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1u
UG9zLnNpemUoKSAtIDFdIC0gb2Zmc2V0SW5Sb3dEaXJlY3Rpb247CkBAIC0xMjA1LDkgKzEyMDUs
OSBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAKICAgICBmb3Ig
KGludCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwotICAgICAgICBJbnRQ
b2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2VsbCwgYWRqdXN0ZWRMb2NhdGlv
biwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgIExheW91dFBvaW50
IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBhZGp1c3RlZExvY2F0aW9uLCBQ
YXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkp
OworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQo
cG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEz
OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJ
bWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bik7CiAKICAgICBib29sIGVuc3VyZVJvd3MoaW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiA5MDQ4NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEludFBvaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMo
KTsKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmU6OnN1YnRyZWUKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYSh0ZXh0QXJlYSk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBpZiAoIVJlbmRlclRleHRDb250cm9s
Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmgJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hh
cldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENv
bnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2
aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OwogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
Nyw3ICszOTcsNyBAQCBSZW5kZXJXaWRnZXQqIFJlbmRlcldpZGdldDo6ZmluZChjb25zdCBXCiAg
ICAgcmV0dXJuIHdpZGdldFJlbmRlcmVyTWFwKCkuZ2V0KHdpZGdldCk7CiB9CiAKLWJvb2wgUmVu
ZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jv
b2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGFjdGlvbikKIHsKICAgICBib29sIGhhZFJlc3VsdCA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAg
ICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24gOTA0ODYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVybGFwVGVz
dFJlc3VsdChib29sKTsKIAogICAgIGJvb2wgc2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFNpemUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTEgKzE4OSwxMSBA
QCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5kaWYKIH0KIAot
Ym9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pCitib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsKICAgICBpZiAoaGFzRWxsaXBzaXNC
b3goKSAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKICAgICAgICAgaWYgKGVsbGlwc2lzQm94
KCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11
bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7Ci0gICAgICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6
ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCShyZXZpc2lv
biA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsg
fQogICAgIHZvaWQgc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihib29sIGhhc1NlbGVjdGVkQ2hpbGRy
ZW4pIHsgbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbiA9IGhh
c1NlbGVjdGVkQ2hpbGRyZW47IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gOTA0ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTEgKzE1MCwxMCBAQCBib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0CiAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3Zl
cmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmlld3BvcnQuY29udGFpbnMobG9jYWxQb2ludCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFBvaW50IHJvdW5kZWRMb2NhbFBvaW50ID0g
cm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTG9jYWxQb2ludCwgSW50UG9pbnQoKSwg
aGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSwgTGF5b3V0UG9pbnQo
KSwgaGl0VGVzdEFjdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0
aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5oCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2Nh
bFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiwgYm9vbCogd2FzRml4
ZWQgPSAwKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MDQ4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dXBk
YXRlRnJvbUVsZQogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1l
bnQodGhpcywgc3R5bGUoKSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24p
CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAotICAgIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbik7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsK
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsMTcgKzQzNiwxNyBA
QCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpCiAgICAgbV9yZXBhaW50
Qm91bmRpbmdCb3guaW5mbGF0ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiB9CiAKLWJvb2wg
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQgcG9pbnRJblBhcmVu
dCA9IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIElu
dFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludEluUGFyZW50IC0gcGFyZW50T3JpZ2luVG9C
b3JkZXJCb3goKTsKKyAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRh
aW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgTGF5b3V0UG9pbnQg
cG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSBwYXJlbnRPcmlnaW5Ub0JvcmRlckJv
eCgpOwogCiAgICAgLy8gTm90ZTogRm9yIG5vdywgd2UncmUgaWdub3JpbmcgaGl0cyB0byBib3Jk
ZXIgYW5kIHBhZGRpbmcgZm9yIDxzdmc+Ci0gICAgSW50UG9pbnQgcG9pbnRJbkNvbnRlbnRCb3gg
PSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CisgICAgTGF5
b3V0UG9pbnQgcG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3Jp
Z2luVG9Db250ZW50Qm94KCk7CiAgICAgaWYgKCFjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHBv
aW50SW5Db250ZW50Qm94KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQg
bG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQo
cG9pbnRJblBhcmVudCk7CisgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CiAKICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24pKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNp
b24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3Vu
ZGluZ0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIp
OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVk
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgYm9vbCBS
ZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgSGl0VGVz
dEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmgJKHJldmlzaW9uIDkwNDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gOTA0ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsNyArNzI4LDcgQEAgSW50
UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZAogICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHRleHRSZWN0KTsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBpbnQsIGludCkKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgaW50LCBpbnQpCiB7CiAgICAgLy8gRklYTUU6IGludGVncmF0ZSB3
aXRoIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50IGJldHRlci4KICAgICBBU1NFUlQoIWlzTGlu
ZUJyZWFrKCkpOwpAQCAtNzQwLDkgKzc0MCw5IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9k
ZUF0UG9pbnQoY29uc3QKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChy
ZW5kZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVGaWxsKSkpIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luKHgoKSwgeSgp
KTsKICAgICAgICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAg
ICAgICAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBJbnRTaXplKHdpZHRoKCksIGhlaWdo
dCgpKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7CiAg
ICAgICAgICAgICBpZiAocmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcikpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDkw
NDg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50
VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYs
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRp
b24pOwogICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29s
IGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwogCi0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKIHByaXZhdGU6
CiAgICAgaW50IG1fbG9naWNhbEhlaWdodDsK
</data>
<flag name="commit-queue"
          id="94459"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99886</attachid>
            <date>2011-07-06 14:51:25 -0700</date>
            <delta_ts>2011-07-06 16:38:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>63663.patch</filename>
            <type>text/plain</type>
            <size>62416</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDctMDYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIG5vZGVBdFBvaW50IHRvIHRvIG5ldyBsYXlv
dXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzNjYzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBz
aXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTGF5b3V0U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0xheW91dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kZWRMYXlvdXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkTGF5b3V0VW5pdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
cldpZGdldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSb290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9k
ZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWdu
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaDoKKwogMjAxMS0wNy0wNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IFdlYiBJbnNwZWN0b3I6IGZpeGluZyB0eXBvIGlu
dHJvZHVjZWQgaW4gdGhlIHI5MDM5Ny4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjQgKzEwMSwyNCBAQCB2
b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgY29udGV4dC0+ZHJh
d0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVu
ZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uKSwgSW50UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55
KCkgKyB0b3ApLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotYm9vbCBFbGxpcHNp
c0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQor
Ym9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKQogewotICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1
bXVsYXRlZE9mZnNldCArIHJvdW5kZWRJbnRQb2ludCh0b3BMZWZ0KCkpOworICAgIExheW91dFBv
aW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIHJvdW5kZWRJbnRQb2lu
dCh0b3BMZWZ0KCkpOwogCiAgICAgLy8gSGl0IHRlc3QgdGhlIG1hcmt1cCBib3guCiAgICAgaWYg
KG1fbWFya3VwQm94KSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXIt
PnN0eWxlKG1fZmlyc3RMaW5lKTsKLSAgICAgICAgaW50IG10eCA9IGFkanVzdGVkTG9jYXRpb24u
eCgpICsgbV9sb2dpY2FsV2lkdGggLSBtX21hcmt1cEJveC0+eCgpOwotICAgICAgICBpbnQgbXR5
ID0gYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgIExheW91dFVuaXQgbXR4
ID0gYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFya3VwQm94LT54
KCk7CisgICAgICAgIExheW91dFVuaXQgbXR5ID0gYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBzdHls
ZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQo
KSk7CiAgICAgICAgIGlmIChtX21hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBJbnRQb2ludChtdHgsIG10eSksIGxpbmVUb3AsIGxpbmVCb3R0
b20pKSB7CiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUobXR4LCBtdHkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSW50UmVjdCBib3VuZHNSZWN0ID0g
SW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBJbnRTaXplKG1fbG9naWNhbFdpZHRoLCBtX2hlaWdo
dCkpOworICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBMYXlvdXRT
aXplKG1fbG9naWNhbFdpZHRoLCBtX2hlaWdodCkpOwogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250
YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICBpZiAoIXJl
c3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgcG9p
bnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkocmV2aXNpb24g
OTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5l
Qm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2Vs
ZWN0aW9uUmVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNw
cAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgSW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW4KICAgICB9CiB9CiAKLWJvb2wgSW5saW5lQm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRvbSovKQor
Ym9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCAvKiBsaW5lVG9w
ICovLCBpbnQgLypsaW5lQm90dG9tKi8pCiB7CiAgICAgLy8gSGl0IHRlc3QgYWxsIHBoYXNlcyBv
ZiByZXBsYWNlZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJlcGxhY2VkIGVs
ZW1lbnQgZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQuICAoU2Vl
IEFwcGVuZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRz
IGluIHRoZSBDU1MyLjEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJl
dmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBp
bnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICBJbmxpbmVCb3gqIG5leHQoKSBjb25zdCB7IHJldHVy
biBtX25leHQ7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OCw5ICs4OTgsOSBAQCB2b2lkIElu
bGluZUZsb3dCb3g6OnNldE92ZXJmbG93RnJvbUxvZ2ljCiAgICAgc2V0VmlzdWFsT3ZlcmZsb3co
dmlzdWFsT3ZlcmZsb3csIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCi1ib29sIElubGluZUZs
b3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkK
K2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVU
b3AsIGludCBsaW5lQm90dG9tKQogewotICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92
ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKICAgICBmbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKICAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQpAQCAtOTA5LDM2ICs5MDksMzYgQEAg
Ym9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgIC8vIENoZWNrIGNo
aWxkcmVuIGZpcnN0LgogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gbGFzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5wcmV2T25MaW5lKCkpIHsKICAgICAgICAgaWYgKChjdXJyLT5yZW5k
ZXJlcigpLT5pc1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9TaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRv
TGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3Vyc2VsdmVzLiBQaXhlbCBz
bmFwIGhpdCB0ZXN0aW5nLgotICAgIEludFJlY3QgZnJhbWVSZWN0ID0gcm91bmRlZEZyYW1lUmVj
dCgpOwotICAgIGludCBtaW5YID0gZnJhbWVSZWN0LngoKTsKLSAgICBpbnQgbWluWSA9IGZyYW1l
UmVjdC55KCk7Ci0gICAgaW50IHdpZHRoID0gZnJhbWVSZWN0LndpZHRoKCk7Ci0gICAgaW50IGhl
aWdodCA9IGZyYW1lUmVjdC5oZWlnaHQoKTsKKyAgICBMYXlvdXRSZWN0IGZyYW1lUmVjdCA9IHJv
dW5kZWRGcmFtZVJlY3QoKTsKKyAgICBMYXlvdXRVbml0IG1pblggPSBmcmFtZVJlY3QueCgpOwor
ICAgIExheW91dFVuaXQgbWluWSA9IGZyYW1lUmVjdC55KCk7CisgICAgTGF5b3V0VW5pdCB3aWR0
aCA9IGZyYW1lUmVjdC53aWR0aCgpOworICAgIExheW91dFVuaXQgaGVpZ2h0ID0gZnJhbWVSZWN0
LmhlaWdodCgpOwogCiAgICAgLy8gQ29uc3RyYWluIG91ciBoaXQgdGVzdGluZyB0byB0aGUgbGlu
ZSB0b3AgYW5kIGJvdHRvbSBpZiBuZWNlc3NhcnkuCiAgICAgYm9vbCBub1F1aXJrc01vZGUgPSBy
ZW5kZXJlcigpLT5kb2N1bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpOwogICAgIGlmICghbm9RdWly
a3NNb2RlICYmICFoYXNUZXh0Q2hpbGRyZW4oKSAmJiAhKGRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5l
SGVpZ2h0QW5kQmFzZWxpbmUoKSAmJiBoYXNUZXh0RGVzY2VuZGFudHMoKSkpIHsKICAgICAgICAg
Um9vdElubGluZUJveCogcm9vdEJveCA9IHJvb3QoKTsKLSAgICAgICAgaW50JiB0b3AgPSBpc0hv
cml6b250YWwoKSA/IG1pblkgOiBtaW5YOwotICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHQgPSBp
c0hvcml6b250YWwoKSA/IGhlaWdodCA6IHdpZHRoOwotICAgICAgICBpbnQgYm90dG9tID0gbWlu
KHJvb3RCb3gtPmxpbmVCb3R0b20oKSwgdG9wICsgbG9naWNhbEhlaWdodCk7CisgICAgICAgIExh
eW91dFVuaXQmIHRvcCA9IGlzSG9yaXpvbnRhbCgpID8gbWluWSA6IG1pblg7CisgICAgICAgIExh
eW91dFVuaXQmIGxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGhlaWdodCA6IHdpZHRo
OworICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IG1pbihyb290Qm94LT5saW5lQm90dG9tKCks
IHRvcCArIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICB0b3AgPSBtYXgocm9vdEJveC0+bGluZVRv
cCgpLCB0b3ApOwogICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gYm90dG9tIC0gdG9wOwogICAgIH0K
ICAgICAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCi0gICAgSW50UmVjdCBy
ZWN0KG1pblgsIG1pblksIHdpZHRoLCBoZWlnaHQpOworICAgIExheW91dFJlY3QgcmVjdChtaW5Y
LCBtaW5ZLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7CiAg
ICAgcmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogCiAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludElu
Q29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFjY3Vt
dWxhdGVkT2Zmc2V0KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50
IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgorICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50
SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0
IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5n
IGJsb2NrJ3Mgc3BhY2UuCiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93
KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgU2hhZG93U3R5bGUsIGNvbnN0IExheW91
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiAgICAgdmlydHVhbCBSZW5kZXJM
aW5lQm94TGlzdCogcmVuZGVyZXJMaW5lQm94ZXMoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NSwxNiArMzQ1LDE2IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBj
b25zdAogICAgIHJldHVybiByZW5kZXJlcigpLT5pc0JSKCkgfHwgKHJlbmRlcmVyKCktPnN0eWxl
KCktPnByZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0UmVuZGVyZXIoKS0+
dGV4dCgpKVtzdGFydCgpXSA9PSAnXG4nKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5s
aW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCAvKiBsaW5lVG9wICovLCBpbnQgLyps
aW5lQm90dG9tKi8pCiB7CiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlw
cGluZygpOwogICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIEZs
b2F0UmVjdCByZWN0KGJveE9yaWdpbiwgSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOworICAg
IEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwgc2l6ZSgpKTsKICAgICBpZiAobV90cnVuY2F0aW9u
ICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAg
IHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01v
ZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5n
TW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkp
OwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRl
cmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKIHB1YmxpYzoKICAgICBSZW5k
ZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0NiwyNCBAQCB0eXBl
ZGVmIEludFBvaW50IExheW91dFBvaW50OwogdHlwZWRlZiBJbnRTaXplIExheW91dFNpemU7CiB0
eXBlZGVmIEludFJlY3QgTGF5b3V0UmVjdDsKIAotaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRM
YXlvdXRQb2ludChGbG9hdFBvaW50IHBvaW50KQoraW5saW5lIExheW91dFBvaW50IHJvdW5kZWRM
YXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiByb3VuZGVkSW50
UG9pbnQocG9pbnQpOworICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQocCk7Cit9CisKK2lubGlu
ZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQoreworICAgIHJldHVy
biBscm91bmRmKHZhbHVlKTsKK30KKworaW5saW5lIExheW91dFNpemUgdG9MYXlvdXRTaXplKGNv
bnN0IExheW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBMYXlvdXRTaXplKHAueCgpLCBwLnko
KSk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCB0b0xheW91dFBvaW50KGNvbnN0IExheW91dFNp
emUmIHApCit7CisgICAgcmV0dXJuIExheW91dFBvaW50KHAud2lkdGgoKSwgcC5oZWlnaHQoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ0LDE0ICszOTQ0
LDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHIKICAgICByZXR1
cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyIC0gdG9TaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKIHsKLSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uKGFjY3VtdWxhdGVk
T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAgSW50U2l6ZSBsb2NhbE9mZnNldCA9IHRvU2l6ZShh
ZGp1c3RlZExvY2F0aW9uKTsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uKGFjY3Vt
dWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7CisgICAgTGF5b3V0U2l6ZSBsb2NhbE9mZnNldCA9
IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKIAogICAgIGlmICghaXNSZW5kZXJWaWV3
KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwu
Ci0gICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAg
ICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAg
ICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgICAgIGlmICgh
b3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWlu
ZXIpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5NjcsMjQgKzM5NjcsMjQgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIC8vIElmIHdlIGhh
dmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1
c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5
ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxv
d0NsaXApOwotICAgIEludFJlY3QgaGl0VGVzdEFyZWEocmVzdWx0LnJlY3RGb3JQb2ludChwb2lu
dEluQ29udGFpbmVyKSk7CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJlYShyZXN1bHQucmVjdEZv
clBvaW50KHBvaW50SW5Db250YWluZXIpKTsKICAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNl
Q2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0
aW9uKS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRM
b2NhdGlvbiwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKS5pbnRlcnNlY3RzKGhpdFRlc3RB
cmVhKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRlc3QgZGVz
Y2VuZGFudHMgZmlyc3QuCi0gICAgICAgIEludFNpemUgc2Nyb2xsZWRPZmZzZXQobG9jYWxPZmZz
ZXQpOworICAgICAgICBMYXlvdXRTaXplIHNjcm9sbGVkT2Zmc2V0KGxvY2FsT2Zmc2V0KTsKICAg
ICAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgICAgICBzY3JvbGxlZE9mZnNl
dCAtPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIEhpdCB0ZXN0IGNvbnRlbnRzIGlmIHdlIGRvbid0IGhhdmUgY29sdW1ucy4KICAgICAg
ICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMo
cmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b1BvaW50KHNjcm9sbGVkT2Zmc2V0
KSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zm
c2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoaXRUZXN0
QWN0aW9uID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgdG9Qb2ludChzY3JvbGxlZE9mZnNldCkpKQorICAgICAgICAgICAg
aWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGl0
VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b1BvaW50KHNj
cm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgfSBlbHNlIGlmIChoaXRU
ZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHRvTGF5b3V0UG9p
bnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzk5Miw3ICszOTkyLDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogCiAgICAgLy8gTm93IGhp
dCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJs
b2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dy
b3VuZCkgewotICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6
ZSgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNp
emUoKSk7CiAgICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5p
bnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBv
aW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJv
dW5kc1JlY3QpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJl
dmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWsp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRz
KGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBmbG9hdCYgLyogbG9naWNhbExl
ZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0IHsgfQogCi0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ5LDIzICs3NDksMjMgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBS
ZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewotICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCAr
IGxvY2F0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxh
dGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigp
ICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGFkanVzdGVkTG9jYXRpb24sIGFjdGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24p
KTsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0
LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQg
aW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3Qo
YWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygp
ICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRM
b2NhdGlvbikpOworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFp
bmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcs
NyArMjM3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlz
aW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6
OnBhaW50KFBhaW50SW5mbyYgcGEKIH0KIAogYm9vbCBSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwK
LSAgICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKKyAgICBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoYWN0aW9uICE9IEhpdFRlc3RG
b3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9i
amVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcg
QEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAogICAgIHJldHVybiBp
ID8gaS0+dHJlZVNjb3BlKCktPmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFw
QXR0cikpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIEhp
dFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnRvcFBhZGRpbmco
KSwgcmVzdWx0LnJpZ2h0UGFkZGluZygpLCByZXN1bHQuYm90dG9tUGFkZGluZygpLCByZXN1bHQu
bGVmdFBhZGRpbmcoKSk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwpAQCAtNDAzLDggKzQwMyw4IEBAIGJvb2wgUmVuZGVySW1h
Z2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBt
YXAgPSBpbWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250
ZW50Qm94UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5l
ci54KCkgLSBhY2N1bXVsYXRlZE9mZnNldC54KCkgLSB0aGlzLT54KCkgLSBjb250ZW50Qm94Lngo
KSkgLyB6b29tKTsKLSAgICAgICAgICAgIGludCBtYXBZID0gbHJvdW5kZigocG9pbnRJbkNvbnRh
aW5lci55KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94
LnkoKSkgLyB6b29tKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWFwWCA9IHJvdW5kZWRMYXlv
dXRVbml0KChwb2ludEluQ29udGFpbmVyLngoKSAtIGFjY3VtdWxhdGVkT2Zmc2V0LngoKSAtIHRo
aXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOworICAgICAgICAgICAgTGF5b3V0VW5p
dCBtYXBZID0gcm91bmRlZExheW91dFVuaXQoKHBvaW50SW5Db250YWluZXIueSgpIC0gYWNjdW11
bGF0ZWRPZmZzZXQueSgpIC0gdGhpcy0+eSgpIC0gY29udGVudEJveC55KCkpIC8gem9vbSk7CiAg
ICAgICAgICAgICBpZiAobWFwLT5tYXBNb3VzZUV2ZW50KG1hcFgsIG1hcFksIGNvbnRlbnRCb3gu
c2l6ZSgpLCB0ZW1wUmVzdWx0KSkKICAgICAgICAgICAgICAgICB0ZW1wUmVzdWx0LnNldElubmVy
Tm9uU2hhcmVkTm9kZShub2RlKCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgaW50IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsK
ICAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJJ
bmxpbmU6OnJlbmRlck5hbWUoKSBjCiB9CiAKIGJvb2wgUmVuZGVySW5saW5lOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gbV9s
aW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyAr
MTE3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNSZWxQb3NpdGlv
bmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5MDUwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcxLDEzICs2NzEsMTMgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3Ao
aW50IG5ldwogICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGluZGV4KTsKIH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckxpc3RCb3g6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAg
ICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2Vs
ZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwog
ICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKLSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9u
ID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFkanVz
dGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94
UmVjdChhZGp1c3RlZExvY2F0aW9uLCBpKS5jb250YWlucyhwb2ludEluQ29udGFpbmVyKSkgewpA
QCAtNjg1LDcgKzY4NSw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGkKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICAgICAgICAg
IHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRM
b2NhdGlvbikpOworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5D
b250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwogCi0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKTsKIAogICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZS4KICAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTgyLDcgKzIxODIsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBk
YXRlSGl0VGVzdFJlc3VsdChICiAgICAgfQogfQogCi1ib29sIFJlbmRlck9iamVjdDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIC8qcG9pbnRJbkNvbnRhaW5lciovLCBjb25zdCBJbnRQb2ludCYgLyphY2N1bXVsYXRlZE9m
ZnNldCovLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiAv
KnBvaW50SW5Db250YWluZXIqLywgY29uc3QgTGF5b3V0UG9pbnQmIC8qYWNjdW11bGF0ZWRPZmZz
ZXQqLywgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA5MDUwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQ5LDcgKzU0OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0
ZXIgPSBIaXRUZXN0QWxsKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYpOwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTMsMTcgKzExOTMsMTcgQEAgSW50UmVjdCBS
ZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChjbwogICAgIHJldHVybiByZWN0OwogfQogCi1i
b29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlv
bikKK2Jvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24gYWN0aW9uKQogewotICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVs
YXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENoZWNrIGtpZHMg
Zmlyc3QuCiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KGFk
anVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29u
dGFpbmVyKSkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2Fw
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFyZW50VG9D
aGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hp
bGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVk
TG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwogICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5Db250YWluZXIgLSBjaGlsZFBvaW50
KSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b0xh
eW91dFBvaW50KHBvaW50SW5Db250YWluZXIgLSBjaGlsZFBvaW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTEyMTEsOSArMTIxMSw5IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFQKICAgICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCi0gICAgSW50UmVjdCBi
b3VuZHNSZWN0ID0gSW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgIExheW91
dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8
IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5D
b250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKKyAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0g
dG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3Vu
ZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyAr
MjIwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxpbmUo
KSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBJbnRSZWN0
IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3ZlcmZsb3dSCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1i
b29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFj
dGlvbikKK2Jvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJvd3MgY2Fubm90IGV2ZXIgYmUg
aGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3Qg
Zm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMTk3LDkgKzE5Nyw5IEBAIGJvb2wg
UmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKICAgICAgICAgLy8gdGFibGUtc3Bl
Y2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNl
IHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hl
Y2suCiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAmJiAhdG9SZW5kZXJCb3goY2hp
bGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBJbnRQb2ludCBjZWxs
UG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpLCBhY2N1
bXVsYXRlZE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAg
ICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJU
YWJsZUNlbGwoY2hpbGQpLCBhY2N1bXVsYXRlZE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5n
QWRqdXN0bWVudCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0
b1NpemUoY2VsbFBvaW50KSk7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lvbiA5MDUw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFkZENo
aWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgLy8gVGhlIG9ubHkgdGlt
ZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFyZW5jeS4KICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQo
KSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNNYXNrKCk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQxLDcgKzExNDEsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50CiB9CiAKIC8vIEhpdCBUZXN0aW5n
Ci1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBj
aGlsZHJlbiB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIWZpcnN0Q2hpbGQo
KSkKQEAgLTExNDksNyArMTE0OSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQ
b2ludChjb24KIAogICAgIC8vIFRhYmxlIHNlY3Rpb25zIGNhbm5vdCBldmVyIGJlIGhpdCB0ZXN0
ZWQuICBFZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBleGlzdC4KICAgICAvLyBKdXN0IGZvcndhcmQg
dG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KLSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0g
YWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFkanVzdGVk
TG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTE2MSw5ICsxMTYxLDkgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rp
b246Om5vZGVBdFBvaW50KGNvbgogICAgICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRl
c3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55
d2F5KSwKICAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgogICAg
ICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50
ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlv
biwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgTGF5
b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGls
ZCksIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwog
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5Db250YWluZXIg
LSBjaGlsZFBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5Db250YWluZXIgLSBjaGlsZFBvaW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KQEAgLTExNzEsNyArMTE3MSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpu
b2RlQXRQb2ludChjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEludFBv
aW50IGxvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9u
KTsKKyAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250YWluZXIgLSB0b0xheW91
dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgICAgICBsb2NhdGlvbi5zZXRZKGhlaWdodCgpIC0gbG9jYXRpb24u
eSgpKTsKQEAgLTExNzksNyArMTE3OSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2Rl
QXRQb2ludChjb24KICAgICAgICAgICAgIGxvY2F0aW9uLnNldFgod2lkdGgoKSAtIGxvY2F0aW9u
LngoKSk7CiAgICAgfQogCi0gICAgaW50IG9mZnNldEluQ29sdW1uRGlyZWN0aW9uID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0aW9uLnkoKSA6IGxvY2F0aW9uLngo
KTsKKyAgICBMYXlvdXRVbml0IG9mZnNldEluQ29sdW1uRGlyZWN0aW9uID0gc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0aW9uLnkoKSA6IGxvY2F0aW9uLngoKTsKICAg
ICAvLyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIgb2Zmc2V0SW5Db2x1bW5E
aXJlY3Rpb24uCiAgICAgdW5zaWduZWQgbmV4dFJvdyA9IHN0ZDo6dXBwZXJfYm91bmQobV9yb3dQ
b3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIG9mZnNldEluQ29sdW1uRGlyZWN0aW9uKSAtIG1f
cm93UG9zLmJlZ2luKCk7CiAgICAgaWYgKG5leHRSb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQpAQCAt
MTE4Nyw3ICsxMTg3LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNv
bgogICAgIC8vIE5vdyBzZXQgaGl0Um93IHRvIHRoZSBpbmRleCBvZiB0aGUgaGl0IHJvdywgb3Ig
MC4KICAgICB1bnNpZ25lZCBoaXRSb3cgPSBuZXh0Um93ID4gMCA/IG5leHRSb3cgLSAxIDogMDsK
IAotICAgIFZlY3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMo
KTsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBv
c2l0aW9ucygpOwogICAgIGludCBvZmZzZXRJblJvd0RpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi54KCkgOiBsb2NhdGlvbi55KCk7CiAgICAg
aWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIG9mZnNldElu
Um93RGlyZWN0aW9uID0gY29sdW1uUG9zW2NvbHVtblBvcy5zaXplKCkgLSAxXSAtIG9mZnNldElu
Um93RGlyZWN0aW9uOwpAQCAtMTIwNSw5ICsxMjA1LDkgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rp
b246Om5vZGVBdFBvaW50KGNvbgogCiAgICAgZm9yIChpbnQgaSA9IGN1cnJlbnQuY2VsbHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
Y3VycmVudC5jZWxsc1tpXTsKLSAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKGNlbGwsIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0Fk
anVzdG1lbnQpOworICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGlu
Z01vZGUoY2VsbCwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0
bWVudCk7CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFj
dGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50
KHBvaW50SW5Db250YWluZXIgLSBjZWxsUG9pbnQpKTsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5Db250YWluZXIgLSBjZWxsUG9p
bnQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNp
b24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0g
MCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgYm9vbCBlbnN1cmVSb3dz
KGludCk7CiAgICAgdm9pZCBjbGVhckdyaWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7CiAgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpzdWJ0cmVlCiAgICAgICAgIGZy
YW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEodGV4dEFyZWEpOwogfQogCi1i
b29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CiB7CiAgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA5MDUwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CiAKICAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5
KTsKICAgICB2aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdXRv
c2Nyb2xsKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3LDcgQEAgUmVuZGVyV2lkZ2V0
KiBSZW5kZXJXaWRnZXQ6OmZpbmQoY29uc3QgVwogICAgIHJldHVybiB3aWRnZXRSZW5kZXJlck1h
cCgpLmdldCh3aWRnZXQpOwogfQogCi1ib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgYm9vbCBoYWRS
ZXN1bHQgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBs
YWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1
bXVsYXRlZE9mZnNldCwgYWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCk7CiAKICAgICBib29s
IHNldFdpZGdldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5
MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg5LDExICsxODksMTEgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWlu
dChQYWludEluZm8mIHBhaQogI2VuZGlmCiB9CiAKLWJvb2wgUm9vdElubGluZUJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQorYm9vbCBSb290SW5s
aW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVC
b3R0b20pCiB7CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94KCkgJiYgdmlzaWJsZVRvSGl0VGVzdGlu
ZygpKSB7CiAgICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5l
Qm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIGJv
b2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2VsZWN0ZWRDaGls
ZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb247IH0KICAgICB2b2lkIHNldEhhc1NlbGVjdGVk
Q2hpbGRyZW4oYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKSB7IG1faGFzU2VsZWN0ZWRDaGlsZHJl
bk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24gPSBoYXNTZWxlY3RlZENoaWxkcmVuOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUw
LDExICsxNTAsMTAgQEAgYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdAog
ICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpICYmICFtX3Zp
ZXdwb3J0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBJbnRQb2ludCByb3VuZGVkTG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50
KTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cm91bmRlZExvY2FsUG9pbnQsIEludFBvaW50KCksIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTGF5b3V0
UG9pbnQobG9jYWxQb2ludCksIExheW91dFBvaW50KCksIGhpdFRlc3RBY3Rpb24pOwogfQogCi1i
b29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBI
aXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYs
IGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gOTA1
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdwb3J0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZvcmVpZ25PYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1z
LCBUcmFuc2Zvcm1TdGF0ZSYsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gOTA1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGUKICAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHRoaXMsIHN0eWxlKCkpOwogfQogCi1i
b29sIFJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgSGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDkwNTAwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBTVkcgdXNlcyBhIGRpZmZlcmVudCBu
b2RlQXRQb2ludCBtZXRob2QKLSAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDkwNTAw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM2LDE3ICs0MzYsMTcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRh
dGVDYWNoZWRCb3VuZGFyaQogICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxhdGUoYm9yZGVy
QW5kUGFkZGluZ1dpZHRoKCkpOwogfQogCi1ib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewotICAgIEludFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gdG9T
aXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBJbnRQb2ludCBwb2ludEluQm9yZGVyQm94ID0g
cG9pbnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisgICAgTGF5b3V0UG9p
bnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpOworICAgIExheW91dFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludElu
UGFyZW50IC0gcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKIAogICAgIC8vIE5vdGU6IEZvciBu
b3csIHdlJ3JlIGlnbm9yaW5nIGhpdHMgdG8gYm9yZGVyIGFuZCBwYWRkaW5nIGZvciA8c3ZnPgot
ICAgIEludFBvaW50IHBvaW50SW5Db250ZW50Qm94ID0gcG9pbnRJbkJvcmRlckJveCAtIGJvcmRl
ck9yaWdpblRvQ29udGVudEJveCgpOworICAgIExheW91dFBvaW50IHBvaW50SW5Db250ZW50Qm94
ID0gcG9pbnRJbkJvcmRlckJveCAtIGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpOwogICAgIGlm
ICghY29udGVudEJveFJlY3QoKS5jb250YWlucyhwb2ludEluQ29udGVudEJveCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEludFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIExheW91
dFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1h
cFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
bGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDkwNTAwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwYWludEJvdW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAg
ICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJ
bnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDkwNTAwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQ
b2ludChjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR1Rl
eHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiA5MDUw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwg
SGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkwNTAwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw3IEBAIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2Fs
Y3VsYXRlQm91bmQKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CiB9CiAK
LWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50LCBpbnQpCiti
b29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCwgaW50
KQogewogICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludCBiZXR0ZXIuCiAgICAgQVNTRVJUKCFpc0xpbmVCcmVhaygpKTsKQEAgLTc0MCw5ICs3NDAs
OSBAQCBib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0CiAgICAgICAgICAg
ICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+c3ZnU3R5
bGUoKS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkpKSB7CiAgICAgICAgICAg
ICBGbG9hdFBvaW50IGJveE9yaWdpbih4KCksIHkoKSk7CiAgICAgICAgICAgICBib3hPcmlnaW4u
bW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGJv
eE9yaWdpbiwgSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgICAgICAgICAgRmxvYXRS
ZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgICAgICAgICAgaWYgKHJlY3QuaW50ZXJz
ZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyIC0gdG9TaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0
b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgcG9p
bnRJbkNvbnRhaW5lciwgcmVjdCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5MDUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0Nv
bnRleHQqLCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBp
bnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKICAgICB2b2lkIHBhaW50VGV4dChH
cmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHls
ZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRv
cCwgaW50IGxpbmVCb3R0b20pOwogCiBwcml2YXRlOgogICAgIGludCBtX2xvZ2ljYWxIZWlnaHQ7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>