<?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>63762</bug_id>
          
          <creation_ts>2011-06-30 15:51:28 -0700</creation_ts>
          <short_desc>Switch rendering tree selection code to to new layout types</short_desc>
          <delta_ts>2011-07-07 15:38:15 -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>darin</cc>
    
    <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>430750</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 15:51:28 -0700</bug_when>
    <thetext>Convert selection handling code to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430778</commentid>
    <comment_count>1</comment_count>
      <attachid>99389</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 16:09:33 -0700</bug_when>
    <thetext>Created attachment 99389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430780</commentid>
    <comment_count>2</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 16:11:27 -0700</bug_when>
    <thetext>No rounding methods where harmed in making this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430839</commentid>
    <comment_count>3</comment_count>
      <attachid>99389</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-30 16:43:23 -0700</bug_when>
    <thetext>Comment on attachment 99389
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:118
&gt; +    LayoutUnit sPos = max(startPos - m_start, static_cast&lt;LayoutUnit&gt;(0));

I don&apos;t think you&apos;ll need this cast in the float case.  Will you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430843</commentid>
    <comment_count>4</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-30 16:46:18 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 99389 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99389&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:118
&gt; &gt; +    LayoutUnit sPos = max(startPos - m_start, static_cast&lt;LayoutUnit&gt;(0));
&gt; 
&gt; I don&apos;t think you&apos;ll need this cast in the float case.  Will you?

Sadly you do. The max method either takes int, int or float, float. In the float case without the cast this would result in a compiler error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431314</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-01 12:06:27 -0700</bug_when>
    <thetext>This was one of the most frustrating things to deal with when building our proof of concept. Since we max with zero all over the code, I&apos;m thinking it could make sense to have an inline function clapToZero which would remove our need to cast zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431324</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-01 12:11:44 -0700</bug_when>
    <thetext>I thought the compiler was smart enough to treat &apos;0&apos; like whatever type it needed to.  I guess not.

I strongly support the addition of some sort of maxWithZero or whatever function and deploying it wherever you see fit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431520</commentid>
    <comment_count>7</comment_count>
      <attachid>99389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-01 16:28:25 -0700</bug_when>
    <thetext>Comment on attachment 99389
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:118
&gt;&gt;&gt; +    LayoutUnit sPos = max(startPos - m_start, static_cast&lt;LayoutUnit&gt;(0));
&gt;&gt; 
&gt;&gt; I don&apos;t think you&apos;ll need this cast in the float case.  Will you?
&gt; 
&gt; Sadly you do. The max method either takes int, int or float, float. In the float case without the cast this would result in a compiler error.

The good way to write this is:

    max&lt;LayoutUnit&gt;(startPos - m_start, 0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431522</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-01 16:29:16 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m thinking it could make sense to have an inline function clapToZero which would remove our need to cast zero.

That would be fine. I would probably not name it maxWithZero or clapToZero or even clampToZero, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432830</commentid>
    <comment_count>9</comment_count>
      <attachid>99843</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-06 09:40:07 -0700</bug_when>
    <thetext>Created attachment 99843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432835</commentid>
    <comment_count>10</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-06 09:44:37 -0700</bug_when>
    <thetext>Changed max/min to use the template form rather than relying on casts. Thanks for the tip!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433711</commentid>
    <comment_count>11</comment_count>
      <attachid>100035</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-07 14:45:39 -0700</bug_when>
    <thetext>Created attachment 100035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433719</commentid>
    <comment_count>12</comment_count>
      <attachid>100035</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-07 14:56:08 -0700</bug_when>
    <thetext>Comment on attachment 100035
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433749</commentid>
    <comment_count>13</comment_count>
      <attachid>100035</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 15:38:10 -0700</bug_when>
    <thetext>Comment on attachment 100035
Patch

Clearing flags on attachment: 100035

Committed r90596: &lt;http://trac.webkit.org/changeset/90596&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433750</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 15:38:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99389</attachid>
            <date>2011-06-30 16:09:33 -0700</date>
            <delta_ts>2011-07-06 09:40:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63762-20110630160932.patch</filename>
            <type>text/plain</type>
            <size>40254</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDYtMzAgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN3aXRjaCByZW5kZXJpbmcgdHJlZSBzZWxlY3Rpb24gY29kZSB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02Mzc2MgorCisgICAgICAgIFN3aXRjaCBzZWxlY3Rpb24gZ2V0dGVycyBh
bmQgc2VsZWN0aW9uIGdhcCBjYWxjdWxhdGlvbiBtZXRob2RzIG92ZXIgdG8KKyAgICAgICAgbmV3
IGxheW91dCBhYnN0cmFjdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9u
YWxpdHkgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Cb3R0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJSLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCUjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2Vs
ZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbmxpbmVT
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpibG9ja1NlbGVj
dGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9u
R2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlv
bkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0
aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVj
dGlvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
U2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlv
bkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvblJlY3RGb3JSZXBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVj
dGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25SZWN0
Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlbGVj
dGlvbkluZm86OlJlbmRlclNlbGVjdGlvbkluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RG
b3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxp
bmVCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpz
ZWxlY3Rpb25Cb3R0b20pOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25IZWlnaHQpOgorCiAyMDEx
LTA2LTMwICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkwMTcwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwy
NSArOTgsMjUgQEAgaW50IElubGluZVRleHRCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAogICAgIHJl
dHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgpKS0+bGluZUhl
aWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRp
Y2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsKIH0KIAotaW50IElubGluZVRleHRC
b3g6OnNlbGVjdGlvblRvcCgpCitMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvblRv
cCgpCiB7CiAgICAgcmV0dXJuIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7CiB9CiAKLWludCBJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25Cb3R0b20oKQorTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25Cb3R0b20oKQogewogICAgIHJldHVybiByb290KCktPnNlbGVjdGlvbkJvdHRvbSgp
OwogfQogCi1pbnQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkKK0xheW91dFVuaXQg
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkKIHsKICAgICByZXR1cm4gcm9vdCgpLT5z
ZWxlY3Rpb25IZWlnaHQoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGlu
dCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKIHsKLSAgICBpbnQgc1BvcyA9IG1heChzdGFy
dFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQs
IChpbnQpbV9sZW4pOworICAgIExheW91dFVuaXQgc1BvcyA9IG1heChzdGFydFBvcyAtIG1fc3Rh
cnQsIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KDApKTsKKyAgICBMYXlvdXRVbml0IGVQb3MgPSBt
aW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4obV9sZW4pKTsKICAg
ICByZXR1cm4gKHNQb3MgPCBlUG9zKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5MDE3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogYm94TmFtZSgpIGNvbnN0OwogI2VuZGlm
CiBwcml2YXRlOgotICAgIGludCBzZWxlY3Rpb25Ub3AoKTsKLSAgICBpbnQgc2VsZWN0aW9uQm90
dG9tKCk7Ci0gICAgaW50IHNlbGVjdGlvbkhlaWdodCgpOworICAgIExheW91dFVuaXQgc2VsZWN0
aW9uVG9wKCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRV
bml0IHNlbGVjdGlvbkhlaWdodCgpOwogCiAgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlclN0eWxlKiwgY29uc3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBj
b25zdDsKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBG
b250JiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4q
ID0gMCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2aXNp
b24gOTAxNzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyQlIiOyB9CiAgCi0gICAgdmly
dHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiAvKnJlcGFpbnRDb250YWluZXIqLywgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8pIHsg
cmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIGJv
b2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovKSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KIAog
ICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgLypmcm9tKi8sIHVuc2lnbmVkIC8qbGVu
Ki8sIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnhQb3MqLywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiA9IDAgLypmYWxsYmFja0ZvbnRzKi8gLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIC8qZnJvbSov
LCB1bnNpZ25lZCAvKmxlbiovLCBmbG9hdCAvKnhwb3MqLywgYm9vbCA9IGZhbHNlIC8qZmlyc3RM
aW5lKi8sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogPSAwIC8qZmFsbGJhY2tGb250
cyovLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTAxNzApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzU0LDkgKzI3NTQsOSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwUmVj
dHNGCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBvZmZzZXRGcm9tUmVwYWlu
dENvbnRhaW5lciAtPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKIAotICAgIGlu
dCBsYXN0VG9wID0gMDsKLSAgICBpbnQgbGFzdExlZnQgPSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9m
ZnNldCh0aGlzLCBsYXN0VG9wKTsKLSAgICBpbnQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOworICAgIExheW91dFVuaXQgbGFzdFRvcCA9IDA7
CisgICAgTGF5b3V0VW5pdCBsYXN0TGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHRo
aXMsIGxhc3RUb3ApOworICAgIExheW91dFVuaXQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIAogICAgIHJldHVybiBzZWxlY3Rpb25H
YXBzKHRoaXMsIG9mZnNldEZyb21SZXBhaW50Q29udGFpbmVyLCBJbnRTaXplKCksIGxhc3RUb3As
IGxhc3RMZWZ0LCBsYXN0UmlnaHQpOwogfQpAQCAtMjgxOSwxNCArMjgxOSwxNCBAQCBJbnRSZWN0
IFJlbmRlckJsb2NrOjpsb2dpY2FsUmVjdFRvUGh5c2ljCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RC
bG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IElu
dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBs
YXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKK0dhcFJlY3RzIFJl
bmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExh
eW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwg
TGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8p
CiB7CiAgICAgLy8gSU1QT1JUQU5UOiBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kIHRoYXQgaW50ZW5k
IGZvciBwYWludGluZyB0byBoYXBwZW4gbmVlZCB0byBkbyBhIHNhdmUvcmVzdG9yZS4KICAgICAv
LyBDbGlwIG91dCBmbG9hdGluZyBhbmQgcG9zaXRpb25lZCBvYmplY3RzIHdoZW4gcGFpbnRpbmcg
c2VsZWN0aW9uIGdhcHMuCiAgICAgaWYgKHBhaW50SW5mbykgewogICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgZG9uJ3QgY2xpcCBvdXQgb3ZlcmZsb3cgZm9yIHBvc2l0aW9uZWQgb2JqZWN0cy4gIFdl
IGp1c3Qgc3RpY2sgdG8gdGhlIGJvcmRlciBib3guCi0gICAgICAgIEludFJlY3QgZmxpcHBlZEJs
b2NrUmVjdCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZzZXRGcm9t
Um9vdEJsb2NrLmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIExheW91dFJl
Y3QgZmxpcHBlZEJsb2NrUmVjdChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCksIG9mZnNldEZy
b21Sb290QmxvY2suaGVpZ2h0KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcm9vdEJs
b2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEJsb2NrUmVjdCk7CiAgICAgICAgIGZsaXBw
ZWRCbG9ja1JlY3QubW92ZUJ5KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOwogICAgICAgICBj
bGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBmbGlwcGVkQmxvY2tSZWN0LmxvY2F0
aW9uKCksIG1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkpOwpAQCAtMjgzOCw5ICsyODM4LDkgQEAg
R2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgICAgIEludFJlY3QgZmxvYXRCb3ggPSBJ
bnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBmbG9hdEJveChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRo
KCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPndpZHRoKCksIHItPm1fcmVuZGVyZXItPmhlaWdo
dCgpKTsKICAgICAgICAgICAgICAgICByb290QmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShmbG9h
dEJveCk7CiAgICAgICAgICAgICAgICAgZmxvYXRCb3gubW92ZShyb290QmxvY2tQaHlzaWNhbFBv
c2l0aW9uLngoKSwgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbi55KCkpOwogICAgICAgICAgICAg
ICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChmbG9hdEJveCk7CkBAIC0yODc0LDggKzI4
NzQsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdh
cHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBp
bnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludElu
Zm8qIHBhaW50SW5mbykKK0dhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlz
aWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExv
Z2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExv
Z2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgR2FwUmVjdHMg
cmVzdWx0OwogCkBAIC0yODk4LDE2ICsyODk4LDE2IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpp
bmxpbmVTZWxlY3Rpb25HYXAKIAogICAgIC8vIE5vdyBwYWludCB0aGUgZ2FwcyBmb3IgdGhlIGxp
bmVzLgogICAgIGZvciAoOyBjdXJyICYmIGN1cnItPmhhc1NlbGVjdGVkQ2hpbGRyZW4oKTsgY3Vy
ciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgaW50IHNlbFRvcCA9ICBjdXJyLT5z
ZWxlY3Rpb25Ub3AoKTsKLSAgICAgICAgaW50IHNlbEhlaWdodCA9IGN1cnItPnNlbGVjdGlvbkhl
aWdodCgpOworICAgICAgICBMYXlvdXRVbml0IHNlbFRvcCA9ICBjdXJyLT5zZWxlY3Rpb25Ub3Ao
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBzZWxIZWlnaHQgPSBjdXJyLT5zZWxlY3Rpb25IZWlnaHQo
KTsKIAogICAgICAgICBpZiAoIWNvbnRhaW5zU3RhcnQgJiYgIWxhc3RTZWxlY3RlZExpbmUgJiYK
ICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0
aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3RoKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRlQ2Vu
dGVyKGJsb2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlv
biwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVmdCwg
bGFzdExvZ2ljYWxSaWdodCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsVG9wLCBwYWludEluZm8pKTsKICAgICAgICAgCi0gICAgICAgIEludFJl
Y3QgbG9naWNhbFJlY3QoY3Vyci0+bG9naWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5sb2dpY2Fs
V2lkdGgoKSwgc2VsVG9wICsgc2VsSGVpZ2h0KTsKLSAgICAgICAgbG9naWNhbFJlY3QubW92ZShp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IEludFNpemUo
b2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgp
KSk7CisgICAgICAgIExheW91dFJlY3QgbG9naWNhbFJlY3QoY3Vyci0+bG9naWNhbExlZnQoKSwg
c2VsVG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgc2VsVG9wICsgc2VsSGVpZ2h0KTsKKyAgICAg
ICAgbG9naWNhbFJlY3QubW92ZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJv
bVJvb3RCbG9jayA6IG9mZnNldEZyb21Sb290QmxvY2sudHJhbnNwb3NlZFNpemUoKSk7CiAgICAg
ICAgIEludFJlY3QgcGh5c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2lj
YWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAg
aWYgKCFwYWludEluZm8gfHwgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxS
ZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhZKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+
IHBhaW50SW5mby0+cmVjdC55KCkpCiAgICAgICAgICAgICB8fCAoIWlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYg
cGh5c2ljYWxSZWN0Lm1heFgoKSA+IHBhaW50SW5mby0+cmVjdC54KCkpKQpAQCAtMjkyOSw4ICsy
OTI5LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdhcAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdh
cHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdExvZ2ljYWxUb3AsIGlu
dCYgbGFzdExvZ2ljYWxMZWZ0LCBpbnQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5m
byogcGFpbnRJbmZvKQorR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2lj
YWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2lj
YWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2lj
YWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgR2FwUmVjdHMgcmVz
dWx0OwogCkBAIC0yOTQ5LDcgKzI5NDksNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tT
ZWxlY3Rpb25HYXBzCiAgICAgICAgIGlmIChjdXJyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjdXJy
LT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVscG9zaXRpb24gb2Zmc2V0
IGlzIGFueXRoaW5nIG90aGVyIHRoYW4gMCwgdGhlbiB0cmVhdCB0aGlzIGp1c3QgbGlrZSBhbiBh
YnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnQuCiAgICAgICAgICAgICAvLyBKdXN0IGRpc3JlZ2Fy
ZCBpdCBjb21wbGV0ZWx5LgotICAgICAgICAgICAgSW50U2l6ZSByZWxPZmZzZXQgPSBjdXJyLT5s
YXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgICAgICBMYXlvdXRTaXpl
IHJlbE9mZnNldCA9IGN1cnItPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAg
ICAgICAgICAgIGlmIChyZWxPZmZzZXQud2lkdGgoKSB8fCByZWxPZmZzZXQuaGVpZ2h0KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTI5ODUsNjAgKzI5ODUsNjAg
QEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcwogICAgICAgICAgICAg
bGFzdExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ss
IGN1cnItPmxvZ2ljYWxCb3R0b20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAh
PSBTZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgLy8gV2UgbXVzdCBiZSBhIGJsb2NrIHRoYXQg
aGFzIHNvbWUgc2VsZWN0ZWQgb2JqZWN0IGluc2lkZSBpdC4gIEdvIGFoZWFkIGFuZCByZWN1ci4K
LSAgICAgICAgICAgIHJlc3VsdC51bml0ZSh0b1JlbmRlckJsb2NrKGN1cnIpLT5zZWxlY3Rpb25H
YXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgSW50U2l6ZShvZmZzZXRG
cm9tUm9vdEJsb2NrLndpZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldEZyb21Sb290QmxvY2suaGVp
Z2h0KCkgKyBjdXJyLT55KCkpLCAKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZSh0b1JlbmRlckJs
b2NrKGN1cnIpLT5zZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbiwgTGF5b3V0U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyBjdXJyLT54KCks
IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyBjdXJyLT55KCkpLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RMb2dp
Y2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIHBhaW50SW5mbykpOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFJlbmRlckJsb2NrOjpibG9j
a1NlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9j
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0TG9naWNh
bFRvcCwgaW50IGxhc3RMb2dpY2FsTGVmdCwgaW50IGxhc3RMb2dpY2FsUmlnaHQsIGludCBsb2dp
Y2FsQm90dG9tLCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKK0xheW91dFJlY3QgUmVuZGVy
QmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExh
eW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0TG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsYXN0TG9naWNhbExl
ZnQsIExheW91dFVuaXQgbGFzdExvZ2ljYWxSaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9t
LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAgICBpbnQgbG9naWNhbFRvcCA9IGxh
c3RMb2dpY2FsVG9wOwotICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25PZmZz
ZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBsb2dp
Y2FsVG9wOwotICAgIGlmIChsb2dpY2FsSGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0gbGFzdExvZ2ljYWxUb3A7CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wOworICAg
IGlmIChsb2dpY2FsSGVpZ2h0IDw9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KDApKQorICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gb2Zmc2V0
cyBmb3IgdGhlIGJvdHRvbSBvZiB0aGUgZ2FwCi0gICAgaW50IGxvZ2ljYWxMZWZ0ID0gbWF4KGxh
c3RMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dp
Y2FsQm90dG9tKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodCA9IG1pbihsYXN0TG9naWNhbFJpZ2h0
LCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7
Ci0gICAgaW50IGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0OwotICAg
IGlmIChsb2dpY2FsV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gbWF4KGxhc3RMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRT
ZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHQgPSBtaW4obGFzdExvZ2ljYWxSaWdodCwgbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOworICAgIExheW91dFVuaXQgbG9n
aWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0IC0gbG9naWNhbExlZnQ7CisgICAgaWYgKGxvZ2ljYWxX
aWR0aCA8PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKIAotICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RU
b1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KGxvZ2ljYWxM
ZWZ0LCBsb2dpY2FsVG9wLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlv
dXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0UmVjdChsb2dpY2FsTGVmdCwgbG9naWNhbFRv
cCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAg
ICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVj
dDsKIH0KIAotSW50UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVu
ZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50
IGxvZ2ljYWxMZWZ0LCBpbnQgbG9naWNhbFRvcCwgaW50IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFBh
aW50SW5mbyogcGFpbnRJbmZvKQorTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRT
ZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290
QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIHNlbE9iaiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFp
bnRJbmZvKQogewotICAgIGludCByb290QmxvY2tMb2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25P
ZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxUb3A7Ci0gICAg
aW50IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJsb2NrTG9n
aWNhbFJpZ2h0ID0gbWluKGlubGluZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZy
b21Sb290QmxvY2spICsgbG9naWNhbExlZnQsIG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZz
ZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJv
b3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7Ci0gICAgaW50IHJvb3RCbG9j
a0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxM
ZWZ0OwotICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxUb3AgPSBibG9ja0Rp
cmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbFRv
cDsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBM
YXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCA9IG1pbihpbmxpbmVEaXJlY3Rpb25PZmZz
ZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxMZWZ0LCBtaW4obG9n
aWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0
KSkpOworICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9n
aWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7CisgICAgaWYgKHJvb3RCbG9ja0xvZ2lj
YWxXaWR0aCA8PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAotICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJl
Y3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KHJvb3RC
bG9ja0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2st
PmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5
b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJs
b2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAg
ICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpLCBzZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAg
ICAgcmV0dXJuIGdhcFJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdo
dFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9j
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dp
Y2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKK0xheW91dFJlY3QgUmVuZGVy
QmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBj
b25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxSaWdo
dCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qIHBh
aW50SW5mbykKIHsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9u
T2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOwotICAg
IGludCByb290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9v
dEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxSaWdodCwgbWF4KGxvZ2ljYWxM
ZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2Vs
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7Ci0g
ICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCA9IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25P
ZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJs
b2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNh
bExlZnQ7Ci0gICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSAwKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2Nr
RGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2Fs
VG9wOworICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgoaW5saW5lRGly
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsUmln
aHQsIG1heChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3Ap
LCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dp
Y2FsSGVpZ2h0KSkpOworICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWlu
KGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dp
Y2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodCkpOworICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2Nr
TG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7CisgICAgaWYgKHJvb3RCbG9ja0xv
Z2ljYWxXaWR0aCA8PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAotICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNh
bFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KHJv
b3RCbG9ja0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290Qmxv
Y2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwg
TGF5b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9v
dEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykK
ICAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7
CiAgICAgcmV0dXJuIGdhcFJlY3Q7CkBAIC0zMDU1LDkgKzMwNTUsOSBAQCB2b2lkIFJlbmRlckJs
b2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZvKFNlCiAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgIWx0cik7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6
bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHBv
c2l0aW9uKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25PZmZz
ZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbikKIHsKLSAgICBp
bnQgbG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNl
KTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBmYWxzZSk7CiAgICAgaWYgKGxvZ2ljYWxMZWZ0ID09IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChyb290QmxvY2sgIT0gdGhpcykKICAgICAg
ICAgICAgIC8vIFRoZSBib3JkZXIgY2FuIHBvdGVudGlhbGx5IGJlIGZ1cnRoZXIgZXh0ZW5kZWQg
Ynkgb3VyIGNvbnRhaW5pbmdCbG9jaygpLgpAQCAtMzA3Myw5ICszMDczLDkgQEAgaW50IFJlbmRl
ckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZgogICAgIHJldHVybiBsb2dpY2FsTGVmdDsK
IH0KIAotaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVy
QmxvY2sqIHJvb3RCbG9jaywgaW50IHBvc2l0aW9uKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIExheW91
dFVuaXQgcG9zaXRpb24pCiB7Ci0gICAgaW50IGxvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNlKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdo
dCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNlKTsKICAgICBpZiAo
bG9naWNhbFJpZ2h0ID09IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKSkgewogICAgICAg
ICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAgICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBw
b3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4K
QEAgLTQxMzQsNyArNDEzNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludFIKICAgICByZXR1cm4gYW5jZXN0b3ItPmNyZWF0ZVZpc2libGVQb3NpdGlvbihjaGlsZE5v
ZGUtPm5vZGVJbmRleCgpICsgMSwgVVBTVFJFQU0pOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6
OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Mb2dpY2FsQ29udGVudHMpCiB7CiAgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwog
CkBAIC00MzI1LDcgKzQzMjUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1u
Q291bnRBCiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmRlc2lyZWRDb2x1bW5XaWR0aCgp
IGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25z
dAogewogICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICByZXR1cm4gY29udGVudExvZ2lj
YWxXaWR0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJl
dmlzaW9uIDkwMTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJz
dExpbmUpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGZpcnN0TGluZSk7IH0KICAgICBMYXlvdXRV
bml0IHN0YXJ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGlu
ZSkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUpIDogbG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKTsgfQogCi0gICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsK
ICAgICAKICAgICAvLyBCbG9jayBmbG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5k
bGUgbXVsdGkgY29sdW1uIGxheW91dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8g
Y2hpbGRyZW4gd2hlbiBsYXlpbmcgb3V0LikKICAgICB2aXJ0dWFsIExheW91dFVuaXQgYXZhaWxh
YmxlTG9naWNhbFdpZHRoKCkgY29uc3Q7CkBAIC0yOTUsOCArMjk1LDggQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogCi0gICAgaW50IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaW50IHBvc2l0aW9uLCBp
bnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBsb2dpY2Fs
SGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7Ci0gICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
TGluZShpbnQgcG9zaXRpb24sIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQg
PSB0cnVlLCBpbnQqIGxvZ2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5
b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGxv
Z2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBMYXlvdXRVbml0IGZpeGVkT2Zm
c2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogbG9naWNhbEhlaWdodFJlbWFp
bmluZyA9IDApIGNvbnN0OwogCiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRG
b3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ICovLCBmbG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lk
dGggKi8pIGNvbnN0IHsgfQpAQCAtNjA5LDI3ICs2MDksMjcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKLSAgICB2aXJ0dWFs
IEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovKQorICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8pCiAgICAg
ewogICAgICAgICByZXR1cm4gc2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KHJlcGFpbnRDb250
YWluZXIpOwogICAgIH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBz
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1NlbGVjdGlvblJvb3QoKSBjb25zdDsKLSAgICBHYXBSZWN0
cyBzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiBy
b290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0TG9naWNhbFRvcCwgaW50
JiBsYXN0TG9naWNhbExlZnQsIGludCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZv
KiA9IDApOwotICAgIEdhcFJlY3RzIGlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0
IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9n
aWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBHYXBSZWN0cyBibG9ja1NlbGVjdGlv
bkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1Bo
eXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dp
Y2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBJ
bnRSZWN0IGJsb2NrU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IElu
dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRG
cm9tUm9vdEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RMb2dp
Y2FsVG9wLCBpbnQgbGFzdExvZ2ljYWxMZWZ0LCBpbnQgbGFzdExvZ2ljYWxSaWdodCwgaW50IGxv
Z2ljYWxCb3R0b20sIGNvbnN0IFBhaW50SW5mbyopOwotICAgIGludCBsb2dpY2FsTGVmdFNlbGVj
dGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgcG9zaXRpb24pOwotICAgIGlu
dCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50
IHBvc2l0aW9uKTsKKyAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290
QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25z
dCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2Fs
TGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiA9IDAp
OworICAgIEdhcFJlY3RzIGlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0JiBsYXN0TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgbGFzdExvZ2lj
YWxMZWZ0LCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsK
KyAgICBHYXBSZWN0cyBibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywg
Y29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExl
ZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOworICAg
IEludFJlY3QgYmxvY2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3Qg
TGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBsYXN0TG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIGNvbnN0IFBh
aW50SW5mbyopOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVu
ZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbik7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5
b3V0VW5pdCBwb3NpdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogCi0gICAg
aW50IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OworICAgIExheW91dFVuaXQgZGVzaXJlZENv
bHVtbldpZHRoKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZGVzaXJlZENvbHVtbkNvdW50KCkgY29u
c3Q7CiAgICAgdm9pZCBzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQgY291bnQsIGlu
dCB3aWR0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAJKHJldmlzaW9uIDkwMTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDE1ICsxNjk4LDE1
IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUKICAgICBjb250YWlu
aW5nQmxvY2soKS0+c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogfQogCi1JbnRSZWN0IFJlbmRl
ckxpc3RNYXJrZXI6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQorTGF5b3V0UmVj
dCBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKIHsK
ICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gU2VsZWN0aW9uTm9uZSB8fCAhaW5saW5lQm94V3JhcHBlcigpKQotICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgUm9vdElubGlu
ZUJveCogcm9vdCA9IGlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwotICAgIEludFJlY3QgcmVj
dCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9u
SGVpZ2h0KCkpOworICAgIExheW91dFJlY3QgcmVjdCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAt
IHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgICAgICAgICAgCiAg
ICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFp
bnQocmVwYWludENvbnRhaW5lciwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHJldmlzaW9uIDkwMTcwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gIWlzSW1h
Z2UoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlz
aWJsZUNvbnRlbnQgPSB0cnVlKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFm
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB1cGRhdGVNYXJnaW5zKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA5MDE3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzA0LDggKzcwNCw4IEBAIHB1YmxpYzoKIAogICAgIC8vIEEgc2luZ2xlIHJlY3Rh
bmdsZSB0aGF0IGVuY29tcGFzc2VzIGFsbCBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyB3aXRoaW4g
dGhpcyBvYmplY3QuICBVc2VkIHRvIGRldGVybWluZSB0aGUgdGlnaHRlc3QKICAgICAvLyBwb3Nz
aWJsZSBib3VuZGluZyBib3ggZm9yIHRoZSBzZWxlY3Rpb24uCi0gICAgSW50UmVjdCBzZWxlY3Rp
b25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSB7IHJldHVybiBzZWxlY3Rp
b25SZWN0Rm9yUmVwYWludCgwLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7IH0KLSAgICB2aXJ0dWFs
IEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8q
cmVwYWludENvbnRhaW5lciovLCBib29sIC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLyA9IHRydWUp
IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdChib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgeyByZXR1cm4gc2VsZWN0aW9uUmVjdEZvclJl
cGFpbnQoMCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRD
b250YWluZXIqLywgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8gPSB0cnVlKSB7IHJldHVy
biBMYXlvdXRSZWN0KCk7IH0KIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBjYW4g
YmUgcGFydCBvZiB0aGUgbGVhZiBlbGVtZW50cyBvZiB0aGUgc2VsZWN0aW9uLgogICAgIHZpcnR1
YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lv
biA5MDE3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzMSwxNCArNDMxLDE0IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJSZXBsYWNlZDo6cG9zaXRpb24KICAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBv
aW50KHBvaW50KTsKIH0KIAotSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpCitMYXlvdXRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25S
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9v
bCBjbGlwVG9WaXNpYmxlQ29udGVudCkKIHsKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwog
CiAgICAgaWYgKCFpc1NlbGVjdGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gbG9jYWxT
ZWxlY3Rpb25SZWN0KCk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0
KCk7CiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZv
clJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVjdCk7CiAgICAgZWxzZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9uIDkwMTcwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVT
ZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBJbnRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CisgICAgdmlydHVh
bCBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CiAK
ICAgICBJbnRTaXplIG1faW50cmluc2ljU2l6ZTsKICAgICBib29sIG1faGFzSW50cmluc2ljU2l6
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbklu
Zm8uaAkocmV2aXNpb24gOTAxNzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VsZWN0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFJl
bmRlclNlbGVjdGlvbkluZm8gOiBwdWJsaWMgUmVuZGUKIHB1YmxpYzoKICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKFJlbmRlck9iamVjdCogbywgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKICAg
ICAgICAgOiBSZW5kZXJTZWxlY3Rpb25JbmZvQmFzZShvKQotICAgICAgICAsIG1fcmVjdChvLT5u
ZWVkc0xheW91dCgpID8gSW50UmVjdCgpIDogby0+c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQobV9y
ZXBhaW50Q29udGFpbmVyLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpCisgICAgICAgICwgbV9yZWN0
KG8tPm5lZWRzTGF5b3V0KCkgPyBMYXlvdXRSZWN0KCkgOiBvLT5zZWxlY3Rpb25SZWN0Rm9yUmVw
YWludChtX3JlcGFpbnRDb250YWluZXIsIGNsaXBUb1Zpc2libGVDb250ZW50KSkKICAgICB7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
cmV2aXNpb24gOTAxNzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsMTkgKzEzODEsMTkgQEAgSW50UmVjdCBSZW5kZXJU
ZXh0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0RgogICAgIHJldHVybiByZW5kZXJlclRvUmVwYWludC0+
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCitMYXlv
dXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogewog
ICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9
PSBTZWxlY3Rpb25Ob25lKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygp
OwogICAgIGlmICghY2IpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVy
biBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQ
b3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9u
IHdoaWxlIGVuZFBvcyA+IDAKLSAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICBMYXlvdXRV
bml0IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0
aW9uSW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFyZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAg
c3RhcnRQb3MgPSAwOwpAQCAtMTQwOSw3ICsxNDA5LDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0Ojpz
ZWxlY3Rpb25SZWN0Rm9yUmVwYQogICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MpCiAgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBJbnRSZWN0IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBy
ZWN0OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsg
Ym94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxl
Y3Rpb25SZWN0KHN0YXJ0UG9zLCBlbmRQb3MpKTsKICAgICAgICAgcmVjdC51bml0ZShlbGxpcHNp
c1JlY3RGb3JCb3goYm94LCBzdGFydFBvcywgZW5kUG9zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkwMTcwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rp
b25TdGF0ZSBzKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKTsKICAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSA9IDApOwogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKDApOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5MDE3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk2LDkgKzM5Niw5IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6bGFz
dFNlbGVjdGVkQm8KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVj
dGlvblRvcCgpIGNvbnN0CitMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgp
IGNvbnN0CiB7Ci0gICAgaW50IHNlbGVjdGlvblRvcCA9IG1fbGluZVRvcDsKKyAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcCA9IG1fbGluZVRvcDsKIAogICAgIGlmIChtX2hhc0Fubm90YXRpb25z
QmVmb3JlKQogICAgICAgICBzZWxlY3Rpb25Ub3AgLT0gIXJlbmRlcmVyKCktPnN0eWxlKCktPmlz
RmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IGNvbXB1dGVPdmVyQW5ub3RhdGlvbkFkanVzdG1l
bnQobV9saW5lVG9wKSA6IGNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KG1fbGluZVRv
cCk7CkBAIC00MDYsMTUgKzQwNiwxNSBAQCBpbnQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9w
KCkgY29uc3QKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0
aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uVG9wOwogCi0gICAgaW50IHByZXZC
b3R0b20gPSBwcmV2Um9vdEJveCgpID8gcHJldlJvb3RCb3goKS0+c2VsZWN0aW9uQm90dG9tKCkg
OiBibG9jaygpLT5ib3JkZXJCZWZvcmUoKSArIGJsb2NrKCktPnBhZGRpbmdCZWZvcmUoKTsKKyAg
ICBMYXlvdXRVbml0IHByZXZCb3R0b20gPSBwcmV2Um9vdEJveCgpID8gcHJldlJvb3RCb3goKS0+
c2VsZWN0aW9uQm90dG9tKCkgOiBibG9jaygpLT5ib3JkZXJCZWZvcmUoKSArIGJsb2NrKCktPnBh
ZGRpbmdCZWZvcmUoKTsKICAgICBpZiAocHJldkJvdHRvbSA8IHNlbGVjdGlvblRvcCAmJiBibG9j
aygpLT5jb250YWluc0Zsb2F0cygpKSB7CiAgICAgICAgIC8vIFRoaXMgbGluZSBoYXMgYWN0dWFs
bHkgYmVlbiBtb3ZlZCBmdXJ0aGVyIGRvd24sIHByb2JhYmx5IGZyb20gYSBsYXJnZSBsaW5lLWhl
aWdodCwgYnV0IHBvc3NpYmx5IGJlY2F1c2UgdGhlCiAgICAgICAgIC8vIGxpbmUgd2FzIGZvcmNl
ZCB0byBjbGVhciBmbG9hdHMuICBJZiBzbywgbGV0J3MgY2hlY2sgdGhlIG9mZnNldHMsIGFuZCBv
bmx5IGJlIHdpbGxpbmcgdG8gdXNlIHRoZSBwcmV2aW91cwogICAgICAgICAvLyBsaW5lJ3MgYm90
dG9tIGlmIHRoZSBvZmZzZXRzIGFyZSBncmVhdGVyIG9uIGJvdGggc2lkZXMuCi0gICAgICAgIGlu
dCBwcmV2TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwcmV2Qm90dG9t
LCBmYWxzZSk7Ci0gICAgICAgIGludCBwcmV2UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKHByZXZCb3R0b20sIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld0xlZnQgPSBi
bG9jaygpLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9wLCBmYWxzZSk7Ci0g
ICAgICAgIGludCBuZXdSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
c2VsZWN0aW9uVG9wLCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgcHJldkxlZnQgPSBibG9j
aygpLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocHJldkJvdHRvbSwgZmFsc2UpOworICAgICAg
ICBMYXlvdXRVbml0IHByZXZSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUocHJldkJvdHRvbSwgZmFsc2UpOworICAgICAgICBMYXlvdXRVbml0IG5ld0xlZnQgPSBibG9j
aygpLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9wLCBmYWxzZSk7CisgICAg
ICAgIExheW91dFVuaXQgbmV3UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKHNlbGVjdGlvblRvcCwgZmFsc2UpOwogICAgICAgICBpZiAocHJldkxlZnQgPiBuZXdMZWZ0
IHx8IHByZXZSaWdodCA8IG5ld1JpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblRv
cDsKICAgICB9CkBAIC00MjIsOSArNDIyLDkgQEAgaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlv
blRvcCgpIGNvbnN0CiAgICAgcmV0dXJuIHByZXZCb3R0b207CiB9CiAKLWludCBSb290SW5saW5l
Qm94OjpzZWxlY3Rpb25Cb3R0b20oKSBjb25zdAorTGF5b3V0VW5pdCBSb290SW5saW5lQm94Ojpz
ZWxlY3Rpb25Cb3R0b20oKSBjb25zdAogewotICAgIGludCBzZWxlY3Rpb25Cb3R0b20gPSBtX2xp
bmVCb3R0b207CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20gPSBtX2xpbmVCb3R0b207
CiAKICAgICBpZiAobV9oYXNBbm5vdGF0aW9uc0FmdGVyKQogICAgICAgICBzZWxlY3Rpb25Cb3R0
b20gKz0gIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IGNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KG1fbGluZUJvdHRvbSkgOiBjb21wdXRl
T3ZlckFubm90YXRpb25BZGp1c3RtZW50KG1fbGluZUJvdHRvbSk7CkBAIC00MzIsMTUgKzQzMiwx
NSBAQCBpbnQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uQm90dG9tKCkgY29uCiAgICAgaWYgKCFy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgfHwgIW5leHRS
b290Qm94KCkpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25Cb3R0b207CiAKLSAgICBpbnQgbmV4
dFRvcCA9IG5leHRSb290Qm94KCktPnNlbGVjdGlvblRvcCgpOworICAgIExheW91dFVuaXQgbmV4
dFRvcCA9IG5leHRSb290Qm94KCktPnNlbGVjdGlvblRvcCgpOwogICAgIGlmIChuZXh0VG9wID4g
c2VsZWN0aW9uQm90dG9tICYmIGJsb2NrKCktPmNvbnRhaW5zRmxvYXRzKCkpIHsKICAgICAgICAg
Ly8gVGhlIG5leHQgbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBtb3ZlZCBmdXJ0aGVyIG92ZXIsIHBy
b2JhYmx5IGZyb20gYSBsYXJnZSBsaW5lLWhlaWdodCwgYnV0IHBvc3NpYmx5IGJlY2F1c2UgdGhl
CiAgICAgICAgIC8vIGxpbmUgd2FzIGZvcmNlZCB0byBjbGVhciBmbG9hdHMuICBJZiBzbywgbGV0
J3MgY2hlY2sgdGhlIG9mZnNldHMsIGFuZCBvbmx5IGJlIHdpbGxpbmcgdG8gdXNlIHRoZSBuZXh0
CiAgICAgICAgIC8vIGxpbmUncyB0b3AgaWYgdGhlIG9mZnNldHMgYXJlIGdyZWF0ZXIgb24gYm90
aCBzaWRlcy4KLSAgICAgICAgaW50IG5leHRMZWZ0ID0gYmxvY2soKS0+bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKG5leHRUb3AsIGZhbHNlKTsKLSAgICAgICAgaW50IG5leHRSaWdodCA9IGJsb2Nr
KCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobmV4dFRvcCwgZmFsc2UpOwotICAgICAgICBp
bnQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25C
b3R0b20sIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld1JpZ2h0ID0gYmxvY2soKS0+bG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNlKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBuZXh0TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShuZXh0VG9w
LCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgbmV4dFJpZ2h0ID0gYmxvY2soKS0+bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZShuZXh0VG9wLCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQg
bmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0
b20sIGZhbHNlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXdSaWdodCA9IGJsb2NrKCktPmxvZ2lj
YWxSaWdodE9mZnNldEZvckxpbmUoc2VsZWN0aW9uQm90dG9tLCBmYWxzZSk7CiAgICAgICAgIGlm
IChuZXh0TGVmdCA+IG5ld0xlZnQgfHwgbmV4dFJpZ2h0IDwgbmV3UmlnaHQpCiAgICAgICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uQm90dG9tOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTAxNzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5
IEBAIHB1YmxpYzoKICAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9w
YWdpbmF0aW9uU3RydXQ7IH0KICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgcykgeyBt
X3BhZ2luYXRpb25TdHJ1dCA9IHM7IH0KIAotICAgIGludCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsK
LSAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Q7Ci0gICAgaW50IHNlbGVjdGlvbkhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1heCgwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlvblRv
cCgpKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1heChzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSwgc2Vs
ZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3AoKSk7IH0KIAogICAgIGludCBibG9ja0RpcmVj
dGlvblBvaW50SW5MaW5lKCkgY29uc3QgeyByZXR1cm4gbWF4KGxpbmVUb3AoKSwgc2VsZWN0aW9u
VG9wKCkpOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99843</attachid>
            <date>2011-07-06 09:40:07 -0700</date>
            <delta_ts>2011-07-07 14:45:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63762-20110706094006.patch</filename>
            <type>text/plain</type>
            <size>36752</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlz
aW9uIDkwNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCwyNSArOTgsMjUgQEAgaW50IElubGluZVRleHRCb3g6Omxp
bmVIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRl
cmVyKCktPnBhcmVudCgpKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkg
PyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5l
KTsKIH0KIAotaW50IElubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCitMYXlvdXRVbml0IElu
bGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCiB7CiAgICAgcmV0dXJuIHJvb3QoKS0+c2VsZWN0
aW9uVG9wKCk7CiB9CiAKLWludCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Cb3R0b20oKQorTGF5
b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Cb3R0b20oKQogewogICAgIHJldHVybiBy
b290KCktPnNlbGVjdGlvbkJvdHRvbSgpOwogfQogCi1pbnQgSW5saW5lVGV4dEJveDo6c2VsZWN0
aW9uSGVpZ2h0KCkKK0xheW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkK
IHsKICAgICByZXR1cm4gcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKTsKIH0KIAogYm9vbCBJbmxp
bmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKIHsK
LSAgICBpbnQgc1BvcyA9IG1heChzdGFydFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9z
ID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOworICAgIExheW91dFVuaXQgc1Bv
cyA9IG1heDxMYXlvdXRVbml0PihzdGFydFBvcyAtIG1fc3RhcnQsIDApOworICAgIExheW91dFVu
aXQgZVBvcyA9IG1pbjxMYXlvdXRVbml0PihlbmRQb3MgLSBtX3N0YXJ0LCBtX2xlbik7CiAgICAg
cmV0dXJuIChzUG9zIDwgZVBvcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTA0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw5ICs5NSw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGJveE5hbWUoKSBjb25zdDsKICNlbmRpZgog
cHJpdmF0ZToKLSAgICBpbnQgc2VsZWN0aW9uVG9wKCk7Ci0gICAgaW50IHNlbGVjdGlvbkJvdHRv
bSgpOwotICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlv
blRvcCgpOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCk7CisgICAgTGF5b3V0VW5p
dCBzZWxlY3Rpb25IZWlnaHQoKTsKIAogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29u
c3Q7CiAgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgRm9u
dCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9
IDApIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgJKHJldmlzaW9u
IDkwNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckJSIjsgfQogIAotICAgIHZpcnR1
YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
LypyZXBhaW50Q29udGFpbmVyKi8sIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovKSB7IHJl
dHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBib29s
IC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLykgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CiAKICAg
ICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIC8qZnJvbSovLCB1bnNpZ25lZCAvKmxlbiov
LCBjb25zdCBGb250JiwgZmxvYXQgLyp4UG9zKi8sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogPSAwIC8qZmFsbGJhY2tGb250cyovICwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCAvKmZyb20qLywg
dW5zaWduZWQgLypsZW4qLywgZmxvYXQgLyp4cG9zKi8sIGJvb2wgPSBmYWxzZSAvKmZpcnN0TGlu
ZSovLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qID0gMCAvKmZhbGxiYWNrRm9udHMq
LywgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCB7IHJldHVybiAwOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDkwNDYyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1NCw5ICsyNzU0LDkgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcFJlY3Rz
RgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgb2Zmc2V0RnJvbVJlcGFpbnRD
b250YWluZXIgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAKLSAgICBpbnQg
bGFzdFRvcCA9IDA7Ci0gICAgaW50IGxhc3RMZWZ0ID0gbG9naWNhbExlZnRTZWxlY3Rpb25PZmZz
ZXQodGhpcywgbGFzdFRvcCk7Ci0gICAgaW50IGxhc3RSaWdodCA9IGxvZ2ljYWxSaWdodFNlbGVj
dGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKKyAgICBMYXlvdXRVbml0IGxhc3RUb3AgPSAwOwor
ICAgIExheW91dFVuaXQgbGFzdExlZnQgPSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCh0aGlz
LCBsYXN0VG9wKTsKKyAgICBMYXlvdXRVbml0IGxhc3RSaWdodCA9IGxvZ2ljYWxSaWdodFNlbGVj
dGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKICAgICAKICAgICByZXR1cm4gc2VsZWN0aW9uR2Fw
cyh0aGlzLCBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lciwgSW50U2l6ZSgpLCBsYXN0VG9wLCBs
YXN0TGVmdCwgbGFzdFJpZ2h0KTsKIH0KQEAgLTI4MTksMTQgKzI4MTksMTQgQEAgSW50UmVjdCBS
ZW5kZXJCbG9jazo6bG9naWNhbFJlY3RUb1BoeXNpYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290Qmxv
Y2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRT
aXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiBsYXN0TG9naWNhbFRvcCwgaW50JiBsYXN0TG9naWNhbExlZnQsIGludCYgbGFz
dExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCitHYXBSZWN0cyBSZW5k
ZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlv
dXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh
eW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExh
eW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQog
ewogICAgIC8vIElNUE9SVEFOVDogQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGludGVuZCBm
b3IgcGFpbnRpbmcgdG8gaGFwcGVuIG5lZWQgdG8gZG8gYSBzYXZlL3Jlc3RvcmUuCiAgICAgLy8g
Q2xpcCBvdXQgZmxvYXRpbmcgYW5kIHBvc2l0aW9uZWQgb2JqZWN0cyB3aGVuIHBhaW50aW5nIHNl
bGVjdGlvbiBnYXBzLgogICAgIGlmIChwYWludEluZm8pIHsKICAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IGNsaXAgb3V0IG92ZXJmbG93IGZvciBwb3NpdGlvbmVkIG9iamVjdHMuICBXZSBq
dXN0IHN0aWNrIHRvIHRoZSBib3JkZXIgYm94LgotICAgICAgICBJbnRSZWN0IGZsaXBwZWRCbG9j
a1JlY3QgPSBJbnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSwgb2Zmc2V0RnJvbVJv
b3RCbG9jay5oZWlnaHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRSZWN0
IGZsaXBwZWRCbG9ja1JlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZzZXRGcm9t
Um9vdEJsb2NrLmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJvb3RCbG9j
ay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRCbG9ja1JlY3QpOwogICAgICAgICBmbGlwcGVk
QmxvY2tSZWN0Lm1vdmVCeShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uKTsKICAgICAgICAgY2xp
cE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgZmxpcHBlZEJsb2NrUmVjdC5sb2NhdGlv
bigpLCBtX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsKQEAgLTI4MzgsOSArMjgzOCw5IEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmQKICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICppdDsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGZsb2F0Qm94ID0gSW50
UmVjdChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRp
bmdNYXJnaW4ociksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ci0+bV9yZW5kZXJlci0+d2lkdGgoKSwgci0+bV9yZW5kZXJlci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgIExheW91dFJlY3QgZmxvYXRCb3gob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgp
ICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0
aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWlnaHQo
KSk7CiAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxvYXRC
b3gpOwogICAgICAgICAgICAgICAgIGZsb2F0Qm94Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbi54KCksIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24ueSgpKTsKICAgICAgICAgICAgICAg
ICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQoZmxvYXRCb3gpOwpAQCAtMjg3NCw4ICsyODc0
LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlzaWNh
bFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0TG9naWNhbFRvcCwgaW50
JiBsYXN0TG9naWNhbExlZnQsIGludCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZv
KiBwYWludEluZm8pCitHYXBSZWN0cyBSZW5kZXJCbG9jazo6aW5saW5lU2VsZWN0aW9uR2FwcyhS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2lj
YWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQmIGxhc3RMb2dp
Y2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dp
Y2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdhcFJlY3RzIHJl
c3VsdDsKIApAQCAtMjg5OCwxNiArMjg5OCwxNiBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6aW5s
aW5lU2VsZWN0aW9uR2FwCiAKICAgICAvLyBOb3cgcGFpbnQgdGhlIGdhcHMgZm9yIHRoZSBsaW5l
cy4KICAgICBmb3IgKDsgY3VyciAmJiBjdXJyLT5oYXNTZWxlY3RlZENoaWxkcmVuKCk7IGN1cnIg
PSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgIGludCBzZWxUb3AgPSAgY3Vyci0+c2Vs
ZWN0aW9uVG9wKCk7Ci0gICAgICAgIGludCBzZWxIZWlnaHQgPSBjdXJyLT5zZWxlY3Rpb25IZWln
aHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzZWxUb3AgPSAgY3Vyci0+c2VsZWN0aW9uVG9wKCk7
CisgICAgICAgIExheW91dFVuaXQgc2VsSGVpZ2h0ID0gY3Vyci0+c2VsZWN0aW9uSGVpZ2h0KCk7
CiAKICAgICAgICAgaWYgKCFjb250YWluc1N0YXJ0ICYmICFsYXN0U2VsZWN0ZWRMaW5lICYmCiAg
ICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlv
blN0YXRlKCkgIT0gU2VsZWN0aW9uQm90aCkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRl
cihibG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IG9mZnNldEZyb21Sb290QmxvY2ssIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxh
c3RMb2dpY2FsUmlnaHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbFRvcCwgcGFpbnRJbmZvKSk7CiAgICAgICAgIAotICAgICAgICBJbnRSZWN0
IGxvZ2ljYWxSZWN0KGN1cnItPmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdp
ZHRoKCksIHNlbFRvcCArIHNlbEhlaWdodCk7Ci0gICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9m
ZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkp
OworICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSZWN0KGN1cnItPmxvZ2ljYWxMZWZ0KCksIHNl
bFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCArIHNlbEhlaWdodCk7CisgICAgICAg
IGxvZ2ljYWxSZWN0Lm1vdmUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21S
b290QmxvY2sgOiBvZmZzZXRGcm9tUm9vdEJsb2NrLnRyYW5zcG9zZWRTaXplKCkpOwogICAgICAg
ICBJbnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2Fs
UmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7CiAgICAgICAgIGlm
ICghcGFpbnRJbmZvIHx8IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVj
dC55KCkgPCBwYWludEluZm8tPnJlY3QubWF4WSgpICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBw
YWludEluZm8tPnJlY3QueSgpKQogICAgICAgICAgICAgfHwgKCFpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBwYWludEluZm8tPnJlY3QubWF4WCgpICYmIHBo
eXNpY2FsUmVjdC5tYXhYKCkgPiBwYWludEluZm8tPnJlY3QueCgpKSkKQEAgLTI5MjksOCArMjky
OSw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXAKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1HYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlzaWNh
bFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQm
IGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbykKK0dhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVu
ZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2Fs
VG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2Fs
UmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdhcFJlY3RzIHJlc3Vs
dDsKIApAQCAtMjk0OSw3ICsyOTQ5LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2Vs
ZWN0aW9uR2FwcwogICAgICAgICBpZiAoY3Vyci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgY3Vyci0+
aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJlbHBvc2l0aW9uIG9mZnNldCBp
cyBhbnl0aGluZyBvdGhlciB0aGFuIDAsIHRoZW4gdHJlYXQgdGhpcyBqdXN0IGxpa2UgYW4gYWJz
b2x1dGUgcG9zaXRpb25lZCBlbGVtZW50LgogICAgICAgICAgICAgLy8gSnVzdCBkaXNyZWdhcmQg
aXQgY29tcGxldGVseS4KLSAgICAgICAgICAgIEludFNpemUgcmVsT2Zmc2V0ID0gY3Vyci0+bGF5
ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworICAgICAgICAgICAgTGF5b3V0U2l6ZSBy
ZWxPZmZzZXQgPSBjdXJyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAgICAg
ICAgICAgICBpZiAocmVsT2Zmc2V0LndpZHRoKCkgfHwgcmVsT2Zmc2V0LmhlaWdodCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0yOTg1LDYwICsyOTg1LDYwIEBA
IEdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMKICAgICAgICAgICAgIGxh
c3RMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBj
dXJyLT5sb2dpY2FsQm90dG9tKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0g
U2VsZWN0aW9uTm9uZSkKICAgICAgICAgICAgIC8vIFdlIG11c3QgYmUgYSBibG9jayB0aGF0IGhh
cyBzb21lIHNlbGVjdGVkIG9iamVjdCBpbnNpZGUgaXQuICBHbyBhaGVhZCBhbmQgcmVjdXIuCi0g
ICAgICAgICAgICByZXN1bHQudW5pdGUodG9SZW5kZXJCbG9jayhjdXJyKS0+c2VsZWN0aW9uR2Fw
cyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIEludFNpemUob2Zmc2V0RnJv
bVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdo
dCgpICsgY3Vyci0+eSgpKSwgCisgICAgICAgICAgICByZXN1bHQudW5pdGUodG9SZW5kZXJCbG9j
ayhjdXJyKS0+c2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24sIExheW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBv
ZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TG9naWNh
bFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBwYWludEluZm8pKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSW50UmVjdCBSZW5kZXJCbG9jazo6YmxvY2tT
ZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdExvZ2ljYWxU
b3AsIGludCBsYXN0TG9naWNhbExlZnQsIGludCBsYXN0TG9naWNhbFJpZ2h0LCBpbnQgbG9naWNh
bEJvdHRvbSwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCitMYXlvdXRSZWN0IFJlbmRlckJs
b2NrOjpibG9ja1NlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlv
dXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQgbGFzdExvZ2ljYWxMZWZ0
LCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsUmlnaHQsIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSwg
Y29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7Ci0gICAgaW50IGxvZ2ljYWxUb3AgPSBsYXN0
TG9naWNhbFRvcDsKLSAgICBpbnQgbG9naWNhbEhlaWdodCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsQm90dG9tIC0gbG9naWNh
bFRvcDsKLSAgICBpZiAobG9naWNhbEhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGxhc3RMb2dpY2FsVG9wOworICAgIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywg
b2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsQm90dG9tIC0gbG9naWNhbFRvcDsKKyAgICBp
ZiAobG9naWNhbEhlaWdodCA8PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIG9mZnNldHMg
Zm9yIHRoZSBib3R0b20gb2YgdGhlIGdhcAotICAgIGludCBsb2dpY2FsTGVmdCA9IG1heChsYXN0
TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNh
bEJvdHRvbSkpOwotICAgIGludCBsb2dpY2FsUmlnaHQgPSBtaW4obGFzdExvZ2ljYWxSaWdodCwg
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOwot
ICAgIGludCBsb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHQgLSBsb2dpY2FsTGVmdDsKLSAgICBp
ZiAobG9naWNhbFdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCA9IG1heChsYXN0TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0U2Vs
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOworICAgIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0ID0gbWluKGxhc3RMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodFNlbGVjdGlv
bk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxCb3R0b20pKTsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCA9IGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0OworICAgIGlmIChsb2dpY2FsV2lk
dGggPD0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oMCkpCisgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KCk7CiAKLSAgICBJbnRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9Q
aHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgSW50UmVjdChsb2dpY2FsTGVm
dCwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgTGF5b3V0
UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3QobG9naWNhbExlZnQsIGxvZ2ljYWxUb3As
IGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwogICAgIGlmIChwYWludEluZm8pCiAgICAg
ICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdhcFJlY3Q7
CiB9CiAKLUludFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0U2VsZWN0aW9uR2FwKFJlbmRl
ckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCBs
b2dpY2FsTGVmdCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWlu
dEluZm8qIHBhaW50SW5mbykKK0xheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0U2Vs
ZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBzZWxPYmosIExheW91dFVuaXQgbG9naWNhbExlZnQsIExheW91dFVuaXQgbG9n
aWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50
SW5mbykKIHsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zm
c2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOwotICAgIGlu
dCByb290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChy
b290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290Qmxv
Y2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSk7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2lj
YWxSaWdodCA9IG1pbihpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9t
Um9vdEJsb2NrKSArIGxvZ2ljYWxMZWZ0LCBtaW4obG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290
QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwotICAgIGludCByb290QmxvY2tM
b2dpY2FsV2lkdGggPSByb290QmxvY2tMb2dpY2FsUmlnaHQgLSByb290QmxvY2tMb2dpY2FsTGVm
dDsKLSAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CisgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsVG9wID0gYmxvY2tEaXJl
Y3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxUb3A7
CisgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChsb2dpY2FsTGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVjdGlv
bk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSk7CisgICAgTGF5
b3V0VW5pdCByb290QmxvY2tMb2dpY2FsUmlnaHQgPSBtaW4oaW5saW5lRGlyZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsTGVmdCwgbWluKGxvZ2lj
YWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsUmln
aHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkp
KTsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xvZ2lj
YWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OworICAgIGlmIChyb290QmxvY2tMb2dpY2Fs
V2lkdGggPD0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oMCkpCisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0
VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgSW50UmVjdChyb290Qmxv
Y2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5s
b2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91
dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9j
a0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwogICAgIGlmIChwYWludEluZm8pCiAgICAg
ICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSwgc2VsT2JqLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAg
IHJldHVybiBnYXBSZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRT
ZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBzZWxPYmosIGludCBsb2dpY2FsUmlnaHQsIGludCBsb2dpY2FsVG9wLCBpbnQgbG9naWNh
bEhlaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCitMYXlvdXRSZWN0IFJlbmRlckJs
b2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29u
c3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNp
emUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCBsb2dpY2FsUmlnaHQs
IGludCBsb2dpY2FsVG9wLCBpbnQgbG9naWNhbEhlaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWlu
dEluZm8pCiB7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9m
ZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbFRvcDsKLSAgICBp
bnQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgoaW5saW5lRGlyZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsUmlnaHQsIG1heChsb2dpY2FsTGVm
dFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVj
dGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwotICAg
IGludCByb290QmxvY2tMb2dpY2FsUmlnaHQgPSBtaW4obG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zm
c2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChy
b290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSk7Ci0gICAgaW50IHJvb3RCbG9j
a0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxM
ZWZ0OwotICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxUb3AgPSBibG9ja0Rp
cmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbFRv
cDsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0gbWF4KGlubGluZURpcmVj
dGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbFJpZ2h0
LCBtYXgobG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwg
bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNh
bEhlaWdodCkpKTsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCA9IG1pbihs
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNh
bFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWln
aHQpKTsKKyAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xv
Z2ljYWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OworICAgIGlmIChyb290QmxvY2tMb2dp
Y2FsV2lkdGggPD0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oMCkpCisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxS
ZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgSW50UmVjdChyb290
QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2Nr
LT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExh
eW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RC
bG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwogICAgIGlmIChwYWludEluZm8pCiAg
ICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc2VsT2JqLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwog
ICAgIHJldHVybiBnYXBSZWN0OwpAQCAtMzA1NSw5ICszMDU1LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Z2V0U2VsZWN0aW9uR2FwSW5mbyhTZQogICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uRW5kICYmICFsdHIpOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6Omxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBwb3Np
dGlvbikKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIExheW91dFVuaXQgcG9zaXRpb24pCiB7Ci0gICAgaW50
IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmYWxzZSk7
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShw
b3NpdGlvbiwgZmFsc2UpOwogICAgIGlmIChsb2dpY2FsTGVmdCA9PSBsb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoKSkgewogICAgICAgICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAgICAg
ICAgICAvLyBUaGUgYm9yZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5
IG91ciBjb250YWluaW5nQmxvY2soKS4KQEAgLTMwNzMsOSArMzA3Myw5IEBAIGludCBSZW5kZXJC
bG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25PZmYKICAgICByZXR1cm4gbG9naWNhbExlZnQ7CiB9
CiAKLWludCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJs
b2NrKiByb290QmxvY2ssIGludCBwb3NpdGlvbikKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxv
Z2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBMYXlvdXRV
bml0IHBvc2l0aW9uKQogewotICAgIGludCBsb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JMaW5lKHBvc2l0aW9uLCBmYWxzZSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQg
PSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmYWxzZSk7CiAgICAgaWYgKGxv
Z2ljYWxSaWdodCA9PSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KCkpIHsKICAgICAgICAg
aWYgKHJvb3RCbG9jayAhPSB0aGlzKQogICAgICAgICAgICAgLy8gVGhlIGJvcmRlciBjYW4gcG90
ZW50aWFsbHkgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdXIgY29udGFpbmluZ0Jsb2NrKCkuCkBA
IC00MTQ1LDcgKzQxNDUsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnRSCiAgICAgcmV0dXJuIGFuY2VzdG9yLT5jcmVhdGVWaXNpYmxlUG9zaXRpb24oY2hpbGROb2Rl
LT5ub2RlSW5kZXgoKSArIDEsIFVQU1RSRUFNKTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IEludFBvaW50
JiBwb2ludEluTG9naWNhbENvbnRlbnRzKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpw
b3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluTG9naWNhbENvbnRlbnRzKQogewogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIApA
QCAtNDMzNiw3ICs0MzM2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNv
dW50QQogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgoKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6ZGVzaXJlZENvbHVtbldpZHRoKCkgY29uc3QK
IHsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0dXJuIGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZp
c2lvbiA5MDQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTgsOCArMjk4LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAg
aW50IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaW50IHBvc2l0aW9uLCBpbnQgZml4ZWRPZmZz
ZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVpZ2h0UmVtYWlu
aW5nID0gMCkgY29uc3Q7Ci0gICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShpbnQgcG9z
aXRpb24sIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQq
IGxvZ2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5b3V0VW5pdCBmaXhl
ZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGxvZ2ljYWxIZWlnaHRS
ZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
TGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29sIGFw
cGx5VGV4dEluZGVudCA9IHRydWUsIGludCogbG9naWNhbEhlaWdodFJlbWFpbmluZyA9IDApIGNv
bnN0OwogCiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wg
ZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVE
aXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBm
bG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0
IHsgfQpAQCAtNjEyLDI3ICs2MTIsMjcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVO
b25JbmxpbmUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qgc2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovKQorICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8pCiAgICAgewogICAgICAgICBy
ZXR1cm4gc2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwogICAg
IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc1NlbGVjdGlvblJvb3QoKSBjb25zdDsKLSAgICBHYXBSZWN0cyBzZWxlY3Rpb25H
YXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlz
aWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0TG9naWNhbFRvcCwgaW50JiBsYXN0TG9naWNh
bExlZnQsIGludCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiA9IDApOwotICAg
IEdhcFJlY3RzIGlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29u
c3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RM
b2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBj
b25zdCBQYWludEluZm8qKTsKLSAgICBHYXBSZWN0cyBibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVy
QmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50
JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBJbnRSZWN0IGJsb2Nr
U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2Nr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RMb2dpY2FsVG9wLCBpbnQg
bGFzdExvZ2ljYWxMZWZ0LCBpbnQgbGFzdExvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxCb3R0b20s
IGNvbnN0IFBhaW50SW5mbyopOwotICAgIGludCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgcG9zaXRpb24pOwotICAgIGludCBsb2dpY2FsUmln
aHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHBvc2l0aW9uKTsK
KyAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiA9IDApOworICAgIEdhcFJl
Y3RzIGlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5
b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0JiBsYXN0TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxMZWZ0LCBMYXlv
dXRVbml0JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKKyAgICBHYXBSZWN0
cyBibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0
UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQmIGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVu
aXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOworICAgIEludFJlY3QgYmxv
Y2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQm
IHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21S
b290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RM
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsYXN0TG9n
aWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIGNvbnN0IFBhaW50SW5mbyopOwor
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbik7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3Np
dGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogCi0gICAgaW50IGRlc2lyZWRD
b2x1bW5XaWR0aCgpIGNvbnN0OworICAgIExheW91dFVuaXQgZGVzaXJlZENvbHVtbldpZHRoKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgZGVzaXJlZENvbHVtbkNvdW50KCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQgY291bnQsIGludCB3aWR0aCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJ
KHJldmlzaW9uIDkwNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDE1ICsxNjk4LDE1IEBAIHZvaWQgUmVu
ZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUKICAgICBjb250YWluaW5nQmxvY2soKS0+
c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogfQogCi1JbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6
OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQorTGF5b3V0UmVjdCBSZW5kZXJMaXN0
TWFya2VyOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKIHsKICAgICBBU1NFUlQo
IW5lZWRzTGF5b3V0KCkpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9u
Tm9uZSB8fCAhaW5saW5lQm94V3JhcHBlcigpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwor
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgUm9vdElubGluZUJveCogcm9vdCA9
IGlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwotICAgIEludFJlY3QgcmVjdCgwLCByb290LT5z
ZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOwor
ICAgIExheW91dFJlY3QgcmVjdCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgo
KSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgICAgICAgICAgCiAgICAgaWYgKGNsaXBU
b1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENv
bnRhaW5lciwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmgJKHJldmlzaW9uIDkwNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gIWlzSW1hZ2UoKTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKLSAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKTsK
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQg
PSB0cnVlKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB1cGRhdGVNYXJnaW5zKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA5MDQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzAz
LDggKzcwMyw4IEBAIHB1YmxpYzoKIAogICAgIC8vIEEgc2luZ2xlIHJlY3RhbmdsZSB0aGF0IGVu
Y29tcGFzc2VzIGFsbCBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyB3aXRoaW4gdGhpcyBvYmplY3Qu
ICBVc2VkIHRvIGRldGVybWluZSB0aGUgdGlnaHRlc3QKICAgICAvLyBwb3NzaWJsZSBib3VuZGlu
ZyBib3ggZm9yIHRoZSBzZWxlY3Rpb24uCi0gICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSB7IHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yUmVw
YWludCgwLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7IH0KLSAgICB2aXJ0dWFsIEludFJlY3Qgc2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRh
aW5lciovLCBib29sIC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLyA9IHRydWUpIHsgcmV0dXJuIElu
dFJlY3QoKTsgfQorICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50ID0gdHJ1ZSkgeyByZXR1cm4gc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoMCwgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywg
Ym9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8gPSB0cnVlKSB7IHJldHVybiBMYXlvdXRSZWN0
KCk7IH0KIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBjYW4gYmUgcGFydCBvZiB0
aGUgbGVhZiBlbGVtZW50cyBvZiB0aGUgc2VsZWN0aW9uLgogICAgIHZpcnR1YWwgYm9vbCBjYW5C
ZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA5MDQ2MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzMSwxNCArNDMxLDE0IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNlZDo6
cG9zaXRpb24KICAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KHBvaW50KTsK
IH0KIAotSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNv
bnRlbnQpCitMYXlvdXRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCkKIHsKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCiAgICAgaWYgKCFp
c1NlbGVjdGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0
KCk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAgaWYg
KGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lciwgcmVjdCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9uIDkwNDYyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFm
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlv
blJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CiAKICAgICBJbnRTaXpl
IG1faW50cmluc2ljU2l6ZTsKICAgICBib29sIG1faGFzSW50cmluc2ljU2l6ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaAkocmV2aXNp
b24gOTA0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFJlbmRlclNlbGVjdGlv
bkluZm8gOiBwdWJsaWMgUmVuZGUKIHB1YmxpYzoKICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKFJl
bmRlck9iamVjdCogbywgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgOiBSZW5k
ZXJTZWxlY3Rpb25JbmZvQmFzZShvKQotICAgICAgICAsIG1fcmVjdChvLT5uZWVkc0xheW91dCgp
ID8gSW50UmVjdCgpIDogby0+c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQobV9yZXBhaW50Q29udGFp
bmVyLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpCisgICAgICAgICwgbV9yZWN0KG8tPm5lZWRzTGF5
b3V0KCkgPyBMYXlvdXRSZWN0KCkgOiBvLT5zZWxlY3Rpb25SZWN0Rm9yUmVwYWludChtX3JlcGFp
bnRDb250YWluZXIsIGNsaXBUb1Zpc2libGVDb250ZW50KSkKICAgICB7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gOTA0
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzODEsMTkgKzEzODEsMTkgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpjbGlwcGVk
T3ZlcmZsb3dSZWN0RgogICAgIHJldHVybiByZW5kZXJlclRvUmVwYWludC0+Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiB9CiAKLUludFJlY3QgUmVuZGVy
VGV4dDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCitMYXlvdXRSZWN0IFJlbmRl
clRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogewogICAgIEFTU0VSVCgh
bmVlZHNMYXlvdXQoKSk7CiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25O
b25lKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmICgh
Y2IpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50
aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBv
cyA+IDAKLSAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICBMYXlvdXRVbml0IHN0YXJ0UG9z
LCBlbmRQb3M7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uSW5zaWRlKSB7
CiAgICAgICAgIC8vIFdlIGFyZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3RhcnRQb3MgPSAw
OwpAQCAtMTQwOSw3ICsxNDA5LDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0
Rm9yUmVwYQogICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MpCiAgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CiAKLSAgICBJbnRSZWN0IHJlY3Q7CisgICAgTGF5b3V0UmVjdCByZWN0OwogICAgIGZv
ciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5u
ZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0KHN0
YXJ0UG9zLCBlbmRQb3MpKTsKICAgICAgICAgcmVjdC51bml0ZShlbGxpcHNpc1JlY3RGb3JCb3go
Ym94LCBzdGFydFBvcywgZW5kUG9zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgJKHJldmlzaW9uIDkwNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsK
LSAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0
cnVlKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNv
bnRlbnQgPSB0cnVlKTsKICAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwog
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBzdHls
ZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKDApOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5MDQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk2LDkgKzM5Niw5IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6bGFzdFNlbGVjdGVkQm8K
ICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpIGNv
bnN0CitMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpIGNvbnN0CiB7Ci0g
ICAgaW50IHNlbGVjdGlvblRvcCA9IG1fbGluZVRvcDsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlv
blRvcCA9IG1fbGluZVRvcDsKIAogICAgIGlmIChtX2hhc0Fubm90YXRpb25zQmVmb3JlKQogICAg
ICAgICBzZWxlY3Rpb25Ub3AgLT0gIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVz
V3JpdGluZ01vZGUoKSA/IGNvbXB1dGVPdmVyQW5ub3RhdGlvbkFkanVzdG1lbnQobV9saW5lVG9w
KSA6IGNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KG1fbGluZVRvcCk7CkBAIC00MDYs
MTUgKzQwNiwxNSBAQCBpbnQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKICAg
ICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQog
ICAgICAgICByZXR1cm4gc2VsZWN0aW9uVG9wOwogCi0gICAgaW50IHByZXZCb3R0b20gPSBwcmV2
Um9vdEJveCgpID8gcHJldlJvb3RCb3goKS0+c2VsZWN0aW9uQm90dG9tKCkgOiBibG9jaygpLT5i
b3JkZXJCZWZvcmUoKSArIGJsb2NrKCktPnBhZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0
IHByZXZCb3R0b20gPSBwcmV2Um9vdEJveCgpID8gcHJldlJvb3RCb3goKS0+c2VsZWN0aW9uQm90
dG9tKCkgOiBibG9jaygpLT5ib3JkZXJCZWZvcmUoKSArIGJsb2NrKCktPnBhZGRpbmdCZWZvcmUo
KTsKICAgICBpZiAocHJldkJvdHRvbSA8IHNlbGVjdGlvblRvcCAmJiBibG9jaygpLT5jb250YWlu
c0Zsb2F0cygpKSB7CiAgICAgICAgIC8vIFRoaXMgbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBtb3Zl
ZCBmdXJ0aGVyIGRvd24sIHByb2JhYmx5IGZyb20gYSBsYXJnZSBsaW5lLWhlaWdodCwgYnV0IHBv
c3NpYmx5IGJlY2F1c2UgdGhlCiAgICAgICAgIC8vIGxpbmUgd2FzIGZvcmNlZCB0byBjbGVhciBm
bG9hdHMuICBJZiBzbywgbGV0J3MgY2hlY2sgdGhlIG9mZnNldHMsIGFuZCBvbmx5IGJlIHdpbGxp
bmcgdG8gdXNlIHRoZSBwcmV2aW91cwogICAgICAgICAvLyBsaW5lJ3MgYm90dG9tIGlmIHRoZSBv
ZmZzZXRzIGFyZSBncmVhdGVyIG9uIGJvdGggc2lkZXMuCi0gICAgICAgIGludCBwcmV2TGVmdCA9
IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwcmV2Qm90dG9tLCBmYWxzZSk7Ci0g
ICAgICAgIGludCBwcmV2UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KHByZXZCb3R0b20sIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld0xlZnQgPSBibG9jaygpLT5sb2dp
Y2FsTGVmdE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9wLCBmYWxzZSk7Ci0gICAgICAgIGludCBu
ZXdSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9w
LCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgcHJldkxlZnQgPSBibG9jaygpLT5sb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUocHJldkJvdHRvbSwgZmFsc2UpOworICAgICAgICBMYXlvdXRVbml0
IHByZXZSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocHJldkJvdHRv
bSwgZmFsc2UpOworICAgICAgICBMYXlvdXRVbml0IG5ld0xlZnQgPSBibG9jaygpLT5sb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9wLCBmYWxzZSk7CisgICAgICAgIExheW91dFVu
aXQgbmV3UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHNlbGVjdGlv
blRvcCwgZmFsc2UpOwogICAgICAgICBpZiAocHJldkxlZnQgPiBuZXdMZWZ0IHx8IHByZXZSaWdo
dCA8IG5ld1JpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblRvcDsKICAgICB9CkBA
IC00MjIsOSArNDIyLDkgQEAgaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpIGNvbnN0
CiAgICAgcmV0dXJuIHByZXZCb3R0b207CiB9CiAKLWludCBSb290SW5saW5lQm94OjpzZWxlY3Rp
b25Cb3R0b20oKSBjb25zdAorTGF5b3V0VW5pdCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Cb3R0
b20oKSBjb25zdAogewotICAgIGludCBzZWxlY3Rpb25Cb3R0b20gPSBtX2xpbmVCb3R0b207Cisg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20gPSBtX2xpbmVCb3R0b207CiAKICAgICBpZiAo
bV9oYXNBbm5vdGF0aW9uc0FmdGVyKQogICAgICAgICBzZWxlY3Rpb25Cb3R0b20gKz0gIXJlbmRl
cmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IGNvbXB1dGVVbmRl
ckFubm90YXRpb25BZGp1c3RtZW50KG1fbGluZUJvdHRvbSkgOiBjb21wdXRlT3ZlckFubm90YXRp
b25BZGp1c3RtZW50KG1fbGluZUJvdHRvbSk7CkBAIC00MzIsMTUgKzQzMiwxNSBAQCBpbnQgUm9v
dElubGluZUJveDo6c2VsZWN0aW9uQm90dG9tKCkgY29uCiAgICAgaWYgKCFyZW5kZXJlcigpLT5z
dHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgfHwgIW5leHRSb290Qm94KCkpCiAg
ICAgICAgIHJldHVybiBzZWxlY3Rpb25Cb3R0b207CiAKLSAgICBpbnQgbmV4dFRvcCA9IG5leHRS
b290Qm94KCktPnNlbGVjdGlvblRvcCgpOworICAgIExheW91dFVuaXQgbmV4dFRvcCA9IG5leHRS
b290Qm94KCktPnNlbGVjdGlvblRvcCgpOwogICAgIGlmIChuZXh0VG9wID4gc2VsZWN0aW9uQm90
dG9tICYmIGJsb2NrKCktPmNvbnRhaW5zRmxvYXRzKCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQg
bGluZSBoYXMgYWN0dWFsbHkgYmVlbiBtb3ZlZCBmdXJ0aGVyIG92ZXIsIHByb2JhYmx5IGZyb20g
YSBsYXJnZSBsaW5lLWhlaWdodCwgYnV0IHBvc3NpYmx5IGJlY2F1c2UgdGhlCiAgICAgICAgIC8v
IGxpbmUgd2FzIGZvcmNlZCB0byBjbGVhciBmbG9hdHMuICBJZiBzbywgbGV0J3MgY2hlY2sgdGhl
IG9mZnNldHMsIGFuZCBvbmx5IGJlIHdpbGxpbmcgdG8gdXNlIHRoZSBuZXh0CiAgICAgICAgIC8v
IGxpbmUncyB0b3AgaWYgdGhlIG9mZnNldHMgYXJlIGdyZWF0ZXIgb24gYm90aCBzaWRlcy4KLSAg
ICAgICAgaW50IG5leHRMZWZ0ID0gYmxvY2soKS0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKG5l
eHRUb3AsIGZhbHNlKTsKLSAgICAgICAgaW50IG5leHRSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUobmV4dFRvcCwgZmFsc2UpOwotICAgICAgICBpbnQgbmV3TGVmdCA9
IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNl
KTsKLSAgICAgICAgaW50IG5ld1JpZ2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXh0TGVm
dCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShuZXh0VG9wLCBmYWxzZSk7Cisg
ICAgICAgIExheW91dFVuaXQgbmV4dFJpZ2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yTGluZShuZXh0VG9wLCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgbmV3TGVmdCA9IGJs
b2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNlKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBuZXdSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUoc2VsZWN0aW9uQm90dG9tLCBmYWxzZSk7CiAgICAgICAgIGlmIChuZXh0TGVmdCA+
IG5ld0xlZnQgfHwgbmV4dFJpZ2h0IDwgbmV3UmlnaHQpCiAgICAgICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uQm90dG9tOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guaAkocmV2aXNpb24gOTA0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoK
ICAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3Ry
dXQ7IH0KICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgcykgeyBtX3BhZ2luYXRpb25T
dHJ1dCA9IHM7IH0KIAotICAgIGludCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKLSAgICBpbnQgc2Vs
ZWN0aW9uQm90dG9tKCkgY29uc3Q7Ci0gICAgaW50IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1heCgwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcCgpKTsgfQorICAg
IExheW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rp
b25Cb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlv
blRvcCgpKTsgfQogCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxpbmUoKSBjb25zdCB7
IHJldHVybiBtYXgobGluZVRvcCgpLCBzZWxlY3Rpb25Ub3AoKSk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100035</attachid>
            <date>2011-07-07 14:45:39 -0700</date>
            <delta_ts>2011-07-07 15:38:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63762-20110707144538.patch</filename>
            <type>text/plain</type>
            <size>39481</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNTkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDctMDcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCByZW5kZXJpbmcgdHJl
ZSBzZWxlY3Rpb24gY29kZSB0byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzc2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBzZWxlY3Rpb24gZ2V0dGVycyBh
bmQgc2VsZWN0aW9uIGdhcCBjYWxjdWxhdGlvbiBtZXRob2RzIG92ZXIgdG8KKyAgICAgICAgbmV3
IGxheW91dCBhYnN0cmFjdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9u
YWxpdHkgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Cb3R0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJSLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCUjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2Vs
ZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbmxpbmVT
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpibG9ja1NlbGVj
dGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9u
R2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlv
bkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0
aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVj
dGlvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
U2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlv
bkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvblJlY3RGb3JSZXBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVj
dGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25SZWN0
Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlbGVj
dGlvbkluZm86OlJlbmRlclNlbGVjdGlvbkluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RG
b3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxp
bmVCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpz
ZWxlY3Rpb25Cb3R0b20pOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25IZWlnaHQpOgorCiAyMDEx
LTA3LTA3ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTd2l0
Y2ggYWRkRm9jdXNSaW5nUmVjdHMgdG8gdG8gbmV3IGxheW91dCB0eXBlcwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTA1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDI1ICs5OCwyNSBAQCBpbnQgSW5saW5lVGV4dEJveDo6bGluZUhlaWdodCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIoKS0+cGFyZW50
KCkpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxM
aW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOwogfQogCi1pbnQg
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKCkKK0xheW91dFVuaXQgSW5saW5lVGV4dEJveDo6
c2VsZWN0aW9uVG9wKCkKIHsKICAgICByZXR1cm4gcm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKIH0K
IAotaW50IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRvbSgpCitMYXlvdXRVbml0IElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRvbSgpCiB7CiAgICAgcmV0dXJuIHJvb3QoKS0+c2VsZWN0
aW9uQm90dG9tKCk7CiB9CiAKLWludCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQor
TGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQogewogICAgIHJldHVy
biByb290KCktPnNlbGVjdGlvbkhlaWdodCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6Omlz
U2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9z
ID0gbWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7Ci0gICAgaW50IGVQb3MgPSBtaW4oZW5kUG9z
IC0gbV9zdGFydCwgKGludCltX2xlbik7CisgICAgTGF5b3V0VW5pdCBzUG9zID0gbWF4PExheW91
dFVuaXQ+KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7CisgICAgTGF5b3V0VW5pdCBlUG9zID0gbWlu
PExheW91dFVuaXQ+KGVuZFBvcyAtIG1fc3RhcnQsIG1fbGVuKTsKICAgICByZXR1cm4gKHNQb3Mg
PCBlUG9zKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oCShyZXZpc2lvbiA5MDU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogYm94TmFtZSgpIGNvbnN0OwogI2VuZGlmCiBwcml2YXRlOgotICAg
IGludCBzZWxlY3Rpb25Ub3AoKTsKLSAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgaW50
IHNlbGVjdGlvbkhlaWdodCgpOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wKCk7CisgICAg
TGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhl
aWdodCgpOwogCiAgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29u
c3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBjb25zdDsKICAgICBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2aXNpb24gOTA1OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyQlIiOyB9CiAgCi0gICAgdmlydHVhbCBJbnRSZWN0IHNl
bGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250
YWluZXIqLywgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8pIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIGJvb2wgLypjbGlwVG9WaXNp
YmxlQ29udGVudCovKSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgZmxv
YXQgd2lkdGgodW5zaWduZWQgLypmcm9tKi8sIHVuc2lnbmVkIC8qbGVuKi8sIGNvbnN0IEZvbnQm
LCBmbG9hdCAvKnhQb3MqLywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiA9IDAgLypm
YWxsYmFja0ZvbnRzKi8gLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIC8qZnJvbSovLCB1bnNpZ25lZCAvKmxl
biovLCBmbG9hdCAvKnhwb3MqLywgYm9vbCA9IGZhbHNlIC8qZmlyc3RMaW5lKi8sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogPSAwIC8qZmFsbGJhY2tGb250cyovLCBHbHlwaE92ZXJm
bG93KiA9IDApIGNvbnN0IHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU0LDkgKzI3NTQs
OSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwUmVjdHNGCiAgICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpKQogICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lciAtPSBs
YXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKIAotICAgIGludCBsYXN0VG9wID0gMDsK
LSAgICBpbnQgbGFzdExlZnQgPSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0
VG9wKTsKLSAgICBpbnQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRo
aXMsIGxhc3RUb3ApOworICAgIExheW91dFVuaXQgbGFzdFRvcCA9IDA7CisgICAgTGF5b3V0VW5p
dCBsYXN0TGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwor
ICAgIExheW91dFVuaXQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRo
aXMsIGxhc3RUb3ApOwogICAgIAogICAgIHJldHVybiBzZWxlY3Rpb25HYXBzKHRoaXMsIG9mZnNl
dEZyb21SZXBhaW50Q29udGFpbmVyLCBJbnRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQpOwogfQpAQCAtMjgxOSwxNCArMjgxOSwxNCBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjps
b2dpY2FsUmVjdFRvUGh5c2ljCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2FwUmVjdHMgUmVu
ZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50
UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZy
b21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxh
c3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0
LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKK0dhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxl
Y3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFz
dExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFz
dExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgLy8gSU1Q
T1JUQU5UOiBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kIHRoYXQgaW50ZW5kIGZvciBwYWludGluZyB0
byBoYXBwZW4gbmVlZCB0byBkbyBhIHNhdmUvcmVzdG9yZS4KICAgICAvLyBDbGlwIG91dCBmbG9h
dGluZyBhbmQgcG9zaXRpb25lZCBvYmplY3RzIHdoZW4gcGFpbnRpbmcgc2VsZWN0aW9uIGdhcHMu
CiAgICAgaWYgKHBhaW50SW5mbykgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xp
cCBvdXQgb3ZlcmZsb3cgZm9yIHBvc2l0aW9uZWQgb2JqZWN0cy4gIFdlIGp1c3Qgc3RpY2sgdG8g
dGhlIGJvcmRlciBib3guCi0gICAgICAgIEludFJlY3QgZmxpcHBlZEJsb2NrUmVjdCA9IEludFJl
Y3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdo
dCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3QgZmxpcHBlZEJsb2Nr
UmVjdChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCksIG9mZnNldEZyb21Sb290QmxvY2suaGVp
Z2h0KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9yV3Jp
dGluZ01vZGUoZmxpcHBlZEJsb2NrUmVjdCk7CiAgICAgICAgIGZsaXBwZWRCbG9ja1JlY3QubW92
ZUJ5KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOwogICAgICAgICBjbGlwT3V0UG9zaXRpb25l
ZE9iamVjdHMocGFpbnRJbmZvLCBmbGlwcGVkQmxvY2tSZWN0LmxvY2F0aW9uKCksIG1fcG9zaXRp
b25lZE9iamVjdHMuZ2V0KCkpOwpAQCAtMjgzOCw5ICsyODM4LDkgQEAgR2FwUmVjdHMgUmVuZGVy
QmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwotICAgICAgICAgICAgICAgIEludFJlY3QgZmxvYXRCb3ggPSBJbnRSZWN0KG9mZnNldEZy
b21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEZyb21S
b290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVy
LT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgTGF5
b3V0UmVjdCBmbG9hdEJveChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyB4UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIt
Pm1fcmVuZGVyZXItPndpZHRoKCksIHItPm1fcmVuZGVyZXItPmhlaWdodCgpKTsKICAgICAgICAg
ICAgICAgICByb290QmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShmbG9hdEJveCk7CiAgICAgICAg
ICAgICAgICAgZmxvYXRCb3gubW92ZShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLngoKSwgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbi55KCkpOwogICAgICAgICAgICAgICAgIHBhaW50SW5mby0+
Y29udGV4dC0+Y2xpcE91dChmbG9hdEJveCk7CkBAIC0yODc0LDggKzI4NzQsOCBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sq
IHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNv
bnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2Fs
TGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykK
K0dhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiBy
b290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBj
b25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91
dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29u
c3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgR2FwUmVjdHMgcmVzdWx0OwogCkBAIC0y
ODk4LDE2ICsyODk4LDE2IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25H
YXAKIAogICAgIC8vIE5vdyBwYWludCB0aGUgZ2FwcyBmb3IgdGhlIGxpbmVzLgogICAgIGZvciAo
OyBjdXJyICYmIGN1cnItPmhhc1NlbGVjdGVkQ2hpbGRyZW4oKTsgY3VyciA9IGN1cnItPm5leHRS
b290Qm94KCkpIHsKLSAgICAgICAgaW50IHNlbFRvcCA9ICBjdXJyLT5zZWxlY3Rpb25Ub3AoKTsK
LSAgICAgICAgaW50IHNlbEhlaWdodCA9IGN1cnItPnNlbGVjdGlvbkhlaWdodCgpOworICAgICAg
ICBMYXlvdXRVbml0IHNlbFRvcCA9ICBjdXJyLT5zZWxlY3Rpb25Ub3AoKTsKKyAgICAgICAgTGF5
b3V0VW5pdCBzZWxIZWlnaHQgPSBjdXJyLT5zZWxlY3Rpb25IZWlnaHQoKTsKIAogICAgICAgICBp
ZiAoIWNvbnRhaW5zU3RhcnQgJiYgIWxhc3RTZWxlY3RlZExpbmUgJiYKICAgICAgICAgICAgIHNl
bGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBT
ZWxlY3Rpb25Cb3RoKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrU2VsZWN0
aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJv
b3RCbG9jaywgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdo
dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
VG9wLCBwYWludEluZm8pKTsKICAgICAgICAgCi0gICAgICAgIEludFJlY3QgbG9naWNhbFJlY3Qo
Y3Vyci0+bG9naWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgc2VsVG9w
ICsgc2VsSGVpZ2h0KTsKLSAgICAgICAgbG9naWNhbFJlY3QubW92ZShpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IEludFNpemUob2Zmc2V0RnJvbVJvb3RC
bG9jay5oZWlnaHQoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpKSk7CisgICAgICAgIExh
eW91dFJlY3QgbG9naWNhbFJlY3QoY3Vyci0+bG9naWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5s
b2dpY2FsV2lkdGgoKSwgc2VsVG9wICsgc2VsSGVpZ2h0KTsKKyAgICAgICAgbG9naWNhbFJlY3Qu
bW92ZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IG9m
ZnNldEZyb21Sb290QmxvY2sudHJhbnNwb3NlZFNpemUoKSk7CiAgICAgICAgIEludFJlY3QgcGh5
c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAgaWYgKCFwYWludEluZm8g
fHwgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LnkoKSA8IHBhaW50
SW5mby0+cmVjdC5tYXhZKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50SW5mby0+cmVj
dC55KCkpCiAgICAgICAgICAgICB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5
c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2ljYWxSZWN0Lm1h
eFgoKSA+IHBhaW50SW5mby0+cmVjdC54KCkpKQpAQCAtMjkyOSw4ICsyOTI5LDggQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdhcAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sq
IHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNv
bnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgbGFzdExvZ2ljYWxUb3AsIGludCYgbGFzdExvZ2ljYWxM
ZWZ0LCBpbnQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQor
R2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9v
dEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29u
c3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVu
aXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3Qg
UGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgR2FwUmVjdHMgcmVzdWx0OwogCkBAIC0yOTQ5
LDcgKzI5NDksNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzCiAg
ICAgICAgIGlmIChjdXJyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjdXJyLT5oYXNMYXllcigpKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVscG9zaXRpb24gb2Zmc2V0IGlzIGFueXRoaW5nIG90
aGVyIHRoYW4gMCwgdGhlbiB0cmVhdCB0aGlzIGp1c3QgbGlrZSBhbiBhYnNvbHV0ZSBwb3NpdGlv
bmVkIGVsZW1lbnQuCiAgICAgICAgICAgICAvLyBKdXN0IGRpc3JlZ2FyZCBpdCBjb21wbGV0ZWx5
LgotICAgICAgICAgICAgSW50U2l6ZSByZWxPZmZzZXQgPSBjdXJyLT5sYXllcigpLT5yZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIHJlbE9mZnNldCA9IGN1
cnItPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAgIGlmIChy
ZWxPZmZzZXQud2lkdGgoKSB8fCByZWxPZmZzZXQuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KQEAgLTI5ODUsNjAgKzI5ODUsNjAgQEAgR2FwUmVjdHMgUmVu
ZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcwogICAgICAgICAgICAgbGFzdExvZ2ljYWxSaWdo
dCA9IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGN1cnItPmxvZ2ljYWxC
b3R0b20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25l
KQogICAgICAgICAgICAgLy8gV2UgbXVzdCBiZSBhIGJsb2NrIHRoYXQgaGFzIHNvbWUgc2VsZWN0
ZWQgb2JqZWN0IGluc2lkZSBpdC4gIEdvIGFoZWFkIGFuZCByZWN1ci4KLSAgICAgICAgICAgIHJl
c3VsdC51bml0ZSh0b1JlbmRlckJsb2NrKGN1cnIpLT5zZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywg
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgSW50U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLndp
ZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyBjdXJyLT55
KCkpLCAKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZSh0b1JlbmRlckJsb2NrKGN1cnIpLT5zZWxl
Y3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0U2l6
ZShvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldEZyb21Sb290
QmxvY2suaGVpZ2h0KCkgKyBjdXJyLT55KCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9n
aWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIHBhaW50SW5mbykpOwogICAgIH0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcChS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0TG9naWNhbFRvcCwgaW50IGxhc3RM
b2dpY2FsTGVmdCwgaW50IGxhc3RMb2dpY2FsUmlnaHQsIGludCBsb2dpY2FsQm90dG9tLCBjb25z
dCBQYWludEluZm8qIHBhaW50SW5mbykKK0xheW91dFJlY3QgUmVuZGVyQmxvY2s6OmJsb2NrU2Vs
ZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBsYXN0TG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQg
bGFzdExvZ2ljYWxSaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tLCBjb25zdCBQYWludElu
Zm8qIHBhaW50SW5mbykKIHsKLSAgICBpbnQgbG9naWNhbFRvcCA9IGxhc3RMb2dpY2FsVG9wOwot
ICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBv
ZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wOwotICAgIGlm
IChsb2dpY2FsSGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wID0gbGFzdExvZ2ljYWxUb3A7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9v
dEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wOworICAgIGlmIChsb2dpY2FsSGVp
Z2h0IDw9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KDApKQorICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gb2Zmc2V0cyBmb3IgdGhlIGJvdHRv
bSBvZiB0aGUgZ2FwCi0gICAgaW50IGxvZ2ljYWxMZWZ0ID0gbWF4KGxhc3RMb2dpY2FsTGVmdCwg
bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7Ci0g
ICAgaW50IGxvZ2ljYWxSaWdodCA9IG1pbihsYXN0TG9naWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRT
ZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7Ci0gICAgaW50IGxvZ2lj
YWxXaWR0aCA9IGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0OwotICAgIGlmIChsb2dpY2FsV2lk
dGggPD0gMCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0ID0gbWF4KGxhc3RMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQo
cm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQg
PSBtaW4obGFzdExvZ2ljYWxSaWdodCwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgbG9naWNhbEJvdHRvbSkpOworICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gbG9n
aWNhbFJpZ2h0IC0gbG9naWNhbExlZnQ7CisgICAgaWYgKGxvZ2ljYWxXaWR0aCA8PSBzdGF0aWNf
Y2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAg
IEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChy
b290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KGxvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9w
LCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3Qg
PSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgTGF5b3V0UmVjdChsb2dpY2FsTGVmdCwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAgcGFpbnRJbmZv
LT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwg
c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0KIAotSW50UmVj
dCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RC
bG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IElu
dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxMZWZ0LCBp
bnQgbG9naWNhbFRvcCwgaW50IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJ
bmZvKQorTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVu
ZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNl
bE9iaiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewotICAg
IGludCByb290QmxvY2tMb2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxUb3A7Ci0gICAgaW50IHJvb3RCbG9ja0xv
Z2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9n
aWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRv
cCArIGxvZ2ljYWxIZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWlu
KGlubGluZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsg
bG9naWNhbExlZnQsIG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBs
b2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNh
bFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9
IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OwotICAgIGlmIChy
b290QmxvY2tMb2dpY2FsV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAg
ICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9mZnNldChy
b290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbFRvcDsKKyAgICBMYXlvdXRV
bml0IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlvdXRVbml0IHJvb3RC
bG9ja0xvZ2ljYWxSaWdodCA9IG1pbihpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBv
ZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxMZWZ0LCBtaW4obG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOworICAgIExheW91
dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9v
dEJsb2NrTG9naWNhbExlZnQ7CisgICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBzdGF0
aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAot
ICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVj
dChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KHJvb3RCbG9ja0xvZ2ljYWxMZWZ0
LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWln
aHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9Q
aHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0UmVjdChyb290Qmxv
Y2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAgcGFpbnRJbmZv
LT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpLCBzZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdhcFJl
Y3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbkdhcChS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwg
aW50IGxvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25z
dCBQYWludEluZm8qIHBhaW50SW5mbykKK0xheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxS
aWdodFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2lu
dCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJv
bVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxU
b3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAg
ICBpbnQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOwotICAgIGludCByb290QmxvY2tM
b2dpY2FsTGVmdCA9IG1heChpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRG
cm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxSaWdodCwgbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zm
c2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJv
b3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7Ci0gICAgaW50IHJvb3RCbG9j
a0xvZ2ljYWxSaWdodCA9IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9n
aWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFdpZHRo
ID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7Ci0gICAgaWYg
KHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwor
ICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOworICAgIExheW91
dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgoaW5saW5lRGlyZWN0aW9uT2Zmc2V0KHJv
b3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsUmlnaHQsIG1heChsb2dpY2Fs
TGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwor
ICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGxvZ2ljYWxSaWdodFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsUmlnaHRTZWxlY3Rp
b25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkpOworICAgIExh
eW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0g
cm9vdEJsb2NrTG9naWNhbExlZnQ7CisgICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PigwKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
IAotICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2Fs
UmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBJbnRSZWN0KHJvb3RCbG9ja0xvZ2ljYWxM
ZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0
VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0UmVjdChyb290
QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAgcGFpbnRJ
bmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpLCBzZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdh
cFJlY3Q7CkBAIC0zMDU1LDkgKzMwNTUsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpnZXRTZWxlY3Rp
b25HYXBJbmZvKFNlCiAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25FbmQgJiYgIWx0cik7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHBvc2l0aW9uKQorTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sq
IHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbikKIHsKLSAgICBpbnQgbG9naWNhbExlZnQg
PSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNlKTsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmYWxz
ZSk7CiAgICAgaWYgKGxvZ2ljYWxMZWZ0ID09IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
KSB7CiAgICAgICAgIGlmIChyb290QmxvY2sgIT0gdGhpcykKICAgICAgICAgICAgIC8vIFRoZSBi
b3JkZXIgY2FuIHBvdGVudGlhbGx5IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3VyIGNvbnRhaW5p
bmdCbG9jaygpLgpAQCAtMzA3Myw5ICszMDczLDkgQEAgaW50IFJlbmRlckJsb2NrOjpsb2dpY2Fs
TGVmdFNlbGVjdGlvbk9mZgogICAgIHJldHVybiBsb2dpY2FsTGVmdDsKIH0KIAotaW50IFJlbmRl
ckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgaW50IHBvc2l0aW9uKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIExheW91dFVuaXQgcG9zaXRpb24p
CiB7Ci0gICAgaW50IGxvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9z
aXRpb24sIGZhbHNlKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNlKTsKICAgICBpZiAobG9naWNhbFJpZ2h0ID09
IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKSkgewogICAgICAgICBpZiAocm9vdEJsb2Nr
ICE9IHRoaXMpCiAgICAgICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBm
dXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4KQEAgLTQxNDUsNyArNDE0
NSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFIKICAgICByZXR1
cm4gYW5jZXN0b3ItPmNyZWF0ZVZpc2libGVQb3NpdGlvbihjaGlsZE5vZGUtPm5vZGVJbmRleCgp
ICsgMSwgVVBTVFJFQU0pOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0
aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgSW50UG9pbnQmIHBvaW50SW5Mb2dp
Y2FsQ29udGVudHMpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9p
bnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Mb2dpY2FsQ29u
dGVudHMpCiB7CiAgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwogCkBAIC00MzM2LDcgKzQz
MzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBCiAgICAgfQog
fQogCi1pbnQgUmVuZGVyQmxvY2s6OmRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25zdAogewogICAgIGlmICgh
aGFzQ29sdW1ucygpKQogICAgICAgICByZXR1cm4gY29udGVudExvZ2ljYWxXaWR0aCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDkwNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5OCw4ICsyOTgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBpbnQgbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShpbnQgcG9zaXRpb24sIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBs
eVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGxvZ2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25z
dDsKLSAgICBpbnQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGludCBwb3NpdGlvbiwgaW50IGZp
eGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogbG9naWNhbEhlaWdo
dFJlbWFpbmluZyA9IDApIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29s
IGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogbG9naWNhbEhlaWdodFJlbWFpbmluZyA9IDAp
IGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVu
aXQgcG9zaXRpb24sIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50
ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRC
cmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURpcmVjdGlvbkxpbmVC
b3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dp
Y2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3QgeyB9CkBAIC02MTIs
MjcgKzYxMiwyNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEcmFnU3RhdGUo
Ym9vbCBkcmFnT24pOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZEJlY2FtZU5vbklubGluZShSZW5k
ZXJPYmplY3QqIGNoaWxkKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCAvKmNs
aXBUb1Zpc2libGVDb250ZW50Ki8pCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLykKICAgICB7CiAgICAgICAgIHJldHVybiBzZWxlY3Rp
b25HYXBSZWN0c0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiAgICAgfQogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSBjb25zdDsKICAgICBib29sIGlzU2Vs
ZWN0aW9uUm9vdCgpIGNvbnN0OwotICAgIEdhcFJlY3RzIHNlbGVjdGlvbkdhcHMoUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBs
YXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qID0gMCk7Ci0gICAgR2FwUmVjdHMgaW5s
aW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYg
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RC
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdExvZ2ljYWxUb3AsIGlu
dCYgbGFzdExvZ2ljYWxMZWZ0LCBpbnQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5m
byopOwotICAgIEdhcFJlY3RzIGJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgbGFzdExvZ2ljYWxUb3AsIGludCYgbGFzdExvZ2ljYWxMZWZ0LCBpbnQmIGxhc3RMb2dpY2Fs
UmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOwotICAgIEludFJlY3QgYmxvY2tTZWxlY3Rpb25HYXAo
UmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdExvZ2ljYWxUb3AsIGludCBsYXN0TG9naWNhbExl
ZnQsIGludCBsYXN0TG9naWNhbFJpZ2h0LCBpbnQgbG9naWNhbEJvdHRvbSwgY29uc3QgUGFpbnRJ
bmZvKik7Ci0gICAgaW50IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiBy
b290QmxvY2ssIGludCBwb3NpdGlvbik7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgcG9zaXRpb24pOworICAgIEdhcFJlY3Rz
IHNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQm
IHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21S
b290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0JiBsYXN0TG9n
aWNhbFRvcCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0JiBsYXN0TG9n
aWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qID0gMCk7CisgICAgR2FwUmVjdHMgaW5saW5lU2Vs
ZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RC
bG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQmIGxhc3RM
b2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RM
b2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOworICAgIEdhcFJlY3RzIGJsb2NrU2VsZWN0
aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9j
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2lj
YWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2lj
YWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKik7CisgICAgSW50UmVjdCBibG9ja1NlbGVjdGlvbkdh
cChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5
c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdExvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbGFzdExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsUmlnaHQsIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbSwgY29uc3QgUGFpbnRJbmZvKik7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBMYXlv
dXRVbml0IHBvc2l0aW9uKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uKTsKICAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKLSAgICBpbnQgZGVzaXJlZENvbHVtbldp
ZHRoKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25zdDsKICAgICB2b2lkIHNldERl
c2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgaW50IHdpZHRoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNp
b24gOTA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsMTUgKzE2OTgsMTUgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpzZXRTZWxlY3Rpb25TdGF0ZQogICAgIGNvbnRhaW5pbmdCbG9jaygpLT5zZXRTZWxl
Y3Rpb25TdGF0ZShzdGF0ZSk7CiB9CiAKLUludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0
aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCitMYXlvdXRSZWN0IFJlbmRlckxpc3RNYXJrZXI6
OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogewogICAgIEFTU0VSVCghbmVlZHNM
YXlvdXQoKSk7CiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lIHx8
ICFpbmxpbmVCb3hXcmFwcGVyKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBSb290SW5saW5lQm94KiByb290ID0gaW5saW5l
Qm94V3JhcHBlcigpLT5yb290KCk7Ci0gICAgSW50UmVjdCByZWN0KDAsIHJvb3QtPnNlbGVjdGlv
blRvcCgpIC0geSgpLCB3aWR0aCgpLCByb290LT5zZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgTGF5
b3V0UmVjdCByZWN0KDAsIHJvb3QtPnNlbGVjdGlvblRvcCgpIC0geSgpLCB3aWR0aCgpLCByb290
LT5zZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgICAgICAgICAKICAgICBpZiAoY2xpcFRvVmlzaWJs
ZUNvbnRlbnQpCiAgICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVy
LCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuaAkocmV2aXNpb24gOTA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiAhaXNJbWFnZSgpOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpOwotICAgIHZpcnR1YWwg
SW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpOworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUp
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2b2lkIHVwZGF0ZU1hcmdpbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDkwNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MDMsOCArNzAz
LDggQEAgcHVibGljOgogCiAgICAgLy8gQSBzaW5nbGUgcmVjdGFuZ2xlIHRoYXQgZW5jb21wYXNz
ZXMgYWxsIG9mIHRoZSBzZWxlY3RlZCBvYmplY3RzIHdpdGhpbiB0aGlzIG9iamVjdC4gIFVzZWQg
dG8gZGV0ZXJtaW5lIHRoZSB0aWdodGVzdAogICAgIC8vIHBvc3NpYmxlIGJvdW5kaW5nIGJveCBm
b3IgdGhlIHNlbGVjdGlvbi4KLSAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCA9IHRydWUpIHsgcmV0dXJuIHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KDAs
IGNsaXBUb1Zpc2libGVDb250ZW50KTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25S
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8s
IGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovID0gdHJ1ZSkgeyByZXR1cm4gSW50UmVjdCgp
OyB9CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQgPSB0cnVlKSB7IHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCgwLCBjbGlwVG9WaXNp
YmxlQ29udGVudCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBib29sIC8q
Y2xpcFRvVmlzaWJsZUNvbnRlbnQqLyA9IHRydWUpIHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQog
CiAgICAgLy8gV2hldGhlciBvciBub3QgYW4gb2JqZWN0IGNhbiBiZSBwYXJ0IG9mIHRoZSBsZWFm
IGVsZW1lbnRzIG9mIHRoZSBzZWxlY3Rpb24uCiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0
aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDkwNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMxLDE0ICs0MzEsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3NpdGlv
bgogICAgIHJldHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogfQogCi1J
bnRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkK
K0xheW91dFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250
ZW50KQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAKICAgICBpZiAoIWlzU2VsZWN0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKICAgICAKLSAgICBJbnRSZWN0IHJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKKyAg
ICBMYXlvdXRSZWN0IHJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKICAgICBpZiAoY2xpcFRv
VmlzaWJsZUNvbnRlbnQpCiAgICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29u
dGFpbmVyLCByZWN0KTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gOTA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0
aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKTsKIAogICAgIEludFNpemUgbV9pbnRy
aW5zaWNTaXplOwogICAgIGJvb2wgbV9oYXNJbnRyaW5zaWNTaXplOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oCShyZXZpc2lvbiA5MDU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3MgUmVuZGVyU2VsZWN0aW9uSW5mbyA6
IHB1YmxpYyBSZW5kZQogcHVibGljOgogICAgIFJlbmRlclNlbGVjdGlvbkluZm8oUmVuZGVyT2Jq
ZWN0KiBvLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICA6IFJlbmRlclNlbGVj
dGlvbkluZm9CYXNlKG8pCi0gICAgICAgICwgbV9yZWN0KG8tPm5lZWRzTGF5b3V0KCkgPyBJbnRS
ZWN0KCkgOiBvLT5zZWxlY3Rpb25SZWN0Rm9yUmVwYWludChtX3JlcGFpbnRDb250YWluZXIsIGNs
aXBUb1Zpc2libGVDb250ZW50KSkKKyAgICAgICAgLCBtX3JlY3Qoby0+bmVlZHNMYXlvdXQoKSA/
IExheW91dFJlY3QoKSA6IG8tPnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KG1fcmVwYWludENvbnRh
aW5lciwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKQogICAgIHsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA5MDU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM4MSwxOSArMTM4MSwxOSBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmNsaXBwZWRPdmVyZmxv
d1JlY3RGCiAgICAgcmV0dXJuIHJlbmRlcmVyVG9SZXBhaW50LT5jbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKIH0KIAotSW50UmVjdCBSZW5kZXJUZXh0Ojpz
ZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKK0xheW91dFJlY3QgUmVuZGVyVGV4dDo6
c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xh
eW91dCgpKTsKIAogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjYikKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAog
ICAgIC8vIE5vdyBjYWxjdWxhdGUgc3RhcnRQb3MgYW5kIGVuZFBvcyBmb3IgcGFpbnRpbmcgc2Vs
ZWN0aW9uLgogICAgIC8vIFdlIGluY2x1ZGUgYSBzZWxlY3Rpb24gd2hpbGUgZW5kUG9zID4gMAot
ICAgIGludCBzdGFydFBvcywgZW5kUG9zOworICAgIExheW91dFVuaXQgc3RhcnRQb3MsIGVuZFBv
czsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAg
ICAgLy8gV2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CkBAIC0x
NDA5LDcgKzE0MDksNyBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBh
CiAgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
IAotICAgIEludFJlY3QgcmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlY3Q7CiAgICAgZm9yIChJbmxp
bmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0
Qm94KCkpIHsKICAgICAgICAgcmVjdC51bml0ZShib3gtPnNlbGVjdGlvblJlY3Qoc3RhcnRQb3Ms
IGVuZFBvcykpOwogICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvckJveChib3gsIHN0
YXJ0UG9zLCBlbmRQb3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAkocmV2aXNpb24gOTA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpOwor
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9
IHRydWUpOwogICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPm1h
cmdpbkxlZnQoKS5jYWxjTWluVmFsdWUoMCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDkwNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsOSAr
Mzk2LDkgQEAgSW5saW5lQm94KiBSb290SW5saW5lQm94OjpsYXN0U2VsZWN0ZWRCbwogICAgIHJl
dHVybiAwOwogfQogCi1pbnQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKK0xh
eW91dFVuaXQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKIHsKLSAgICBpbnQg
c2VsZWN0aW9uVG9wID0gbV9saW5lVG9wOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0g
bV9saW5lVG9wOwogCiAgICAgaWYgKG1faGFzQW5ub3RhdGlvbnNCZWZvcmUpCiAgICAgICAgIHNl
bGVjdGlvblRvcCAtPSAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpID8gY29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudChtX2xpbmVUb3ApIDogY29t
cHV0ZVVuZGVyQW5ub3RhdGlvbkFkanVzdG1lbnQobV9saW5lVG9wKTsKQEAgLTQwNiwxNSArNDA2
LDE1IEBAIGludCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3AoKSBjb25zdAogICAgIGlmIChy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAgICAg
IHJldHVybiBzZWxlY3Rpb25Ub3A7CiAKLSAgICBpbnQgcHJldkJvdHRvbSA9IHByZXZSb290Qm94
KCkgPyBwcmV2Um9vdEJveCgpLT5zZWxlY3Rpb25Cb3R0b20oKSA6IGJsb2NrKCktPmJvcmRlckJl
Zm9yZSgpICsgYmxvY2soKS0+cGFkZGluZ0JlZm9yZSgpOworICAgIExheW91dFVuaXQgcHJldkJv
dHRvbSA9IHByZXZSb290Qm94KCkgPyBwcmV2Um9vdEJveCgpLT5zZWxlY3Rpb25Cb3R0b20oKSA6
IGJsb2NrKCktPmJvcmRlckJlZm9yZSgpICsgYmxvY2soKS0+cGFkZGluZ0JlZm9yZSgpOwogICAg
IGlmIChwcmV2Qm90dG9tIDwgc2VsZWN0aW9uVG9wICYmIGJsb2NrKCktPmNvbnRhaW5zRmxvYXRz
KCkpIHsKICAgICAgICAgLy8gVGhpcyBsaW5lIGhhcyBhY3R1YWxseSBiZWVuIG1vdmVkIGZ1cnRo
ZXIgZG93biwgcHJvYmFibHkgZnJvbSBhIGxhcmdlIGxpbmUtaGVpZ2h0LCBidXQgcG9zc2libHkg
YmVjYXVzZSB0aGUKICAgICAgICAgLy8gbGluZSB3YXMgZm9yY2VkIHRvIGNsZWFyIGZsb2F0cy4g
IElmIHNvLCBsZXQncyBjaGVjayB0aGUgb2Zmc2V0cywgYW5kIG9ubHkgYmUgd2lsbGluZyB0byB1
c2UgdGhlIHByZXZpb3VzCiAgICAgICAgIC8vIGxpbmUncyBib3R0b20gaWYgdGhlIG9mZnNldHMg
YXJlIGdyZWF0ZXIgb24gYm90aCBzaWRlcy4KLSAgICAgICAgaW50IHByZXZMZWZ0ID0gYmxvY2so
KS0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHByZXZCb3R0b20sIGZhbHNlKTsKLSAgICAgICAg
aW50IHByZXZSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocHJldkJv
dHRvbSwgZmFsc2UpOwotICAgICAgICBpbnQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Ub3AsIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld1JpZ2h0
ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Ub3AsIGZhbHNl
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBwcmV2TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZShwcmV2Qm90dG9tLCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgcHJldlJp
Z2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwcmV2Qm90dG9tLCBmYWxz
ZSk7CisgICAgICAgIExheW91dFVuaXQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZShzZWxlY3Rpb25Ub3AsIGZhbHNlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXdS
aWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoc2VsZWN0aW9uVG9wLCBm
YWxzZSk7CiAgICAgICAgIGlmIChwcmV2TGVmdCA+IG5ld0xlZnQgfHwgcHJldlJpZ2h0IDwgbmV3
UmlnaHQpCiAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uVG9wOwogICAgIH0KQEAgLTQyMiw5
ICs0MjIsOSBAQCBpbnQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKICAgICBy
ZXR1cm4gcHJldkJvdHRvbTsKIH0KIAotaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvbkJvdHRv
bSgpIGNvbnN0CitMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvbkJvdHRvbSgpIGNv
bnN0CiB7Ci0gICAgaW50IHNlbGVjdGlvbkJvdHRvbSA9IG1fbGluZUJvdHRvbTsKKyAgICBMYXlv
dXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9IG1fbGluZUJvdHRvbTsKIAogICAgIGlmIChtX2hhc0Fu
bm90YXRpb25zQWZ0ZXIpCiAgICAgICAgIHNlbGVjdGlvbkJvdHRvbSArPSAhcmVuZGVyZXIoKS0+
c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gY29tcHV0ZVVuZGVyQW5ub3Rh
dGlvbkFkanVzdG1lbnQobV9saW5lQm90dG9tKSA6IGNvbXB1dGVPdmVyQW5ub3RhdGlvbkFkanVz
dG1lbnQobV9saW5lQm90dG9tKTsKQEAgLTQzMiwxNSArNDMyLDE1IEBAIGludCBSb290SW5saW5l
Qm94OjpzZWxlY3Rpb25Cb3R0b20oKSBjb24KICAgICBpZiAoIXJlbmRlcmVyKCktPnN0eWxlKCkt
PmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSB8fCAhbmV4dFJvb3RCb3goKSkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkJvdHRvbTsKIAotICAgIGludCBuZXh0VG9wID0gbmV4dFJvb3RCb3go
KS0+c2VsZWN0aW9uVG9wKCk7CisgICAgTGF5b3V0VW5pdCBuZXh0VG9wID0gbmV4dFJvb3RCb3go
KS0+c2VsZWN0aW9uVG9wKCk7CiAgICAgaWYgKG5leHRUb3AgPiBzZWxlY3Rpb25Cb3R0b20gJiYg
YmxvY2soKS0+Y29udGFpbnNGbG9hdHMoKSkgewogICAgICAgICAvLyBUaGUgbmV4dCBsaW5lIGhh
cyBhY3R1YWxseSBiZWVuIG1vdmVkIGZ1cnRoZXIgb3ZlciwgcHJvYmFibHkgZnJvbSBhIGxhcmdl
IGxpbmUtaGVpZ2h0LCBidXQgcG9zc2libHkgYmVjYXVzZSB0aGUKICAgICAgICAgLy8gbGluZSB3
YXMgZm9yY2VkIHRvIGNsZWFyIGZsb2F0cy4gIElmIHNvLCBsZXQncyBjaGVjayB0aGUgb2Zmc2V0
cywgYW5kIG9ubHkgYmUgd2lsbGluZyB0byB1c2UgdGhlIG5leHQKICAgICAgICAgLy8gbGluZSdz
IHRvcCBpZiB0aGUgb2Zmc2V0cyBhcmUgZ3JlYXRlciBvbiBib3RoIHNpZGVzLgotICAgICAgICBp
bnQgbmV4dExlZnQgPSBibG9jaygpLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobmV4dFRvcCwg
ZmFsc2UpOwotICAgICAgICBpbnQgbmV4dFJpZ2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZShuZXh0VG9wLCBmYWxzZSk7Ci0gICAgICAgIGludCBuZXdMZWZ0ID0gYmxvY2so
KS0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHNlbGVjdGlvbkJvdHRvbSwgZmFsc2UpOwotICAg
ICAgICBpbnQgbmV3UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHNl
bGVjdGlvbkJvdHRvbSwgZmFsc2UpOworICAgICAgICBMYXlvdXRVbml0IG5leHRMZWZ0ID0gYmxv
Y2soKS0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKG5leHRUb3AsIGZhbHNlKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBuZXh0UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KG5leHRUb3AsIGZhbHNlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXdMZWZ0ID0gYmxvY2soKS0+
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHNlbGVjdGlvbkJvdHRvbSwgZmFsc2UpOworICAgICAg
ICBMYXlvdXRVbml0IG5ld1JpZ2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNlKTsKICAgICAgICAgaWYgKG5leHRMZWZ0ID4gbmV3TGVm
dCB8fCBuZXh0UmlnaHQgPCBuZXdSaWdodCkKICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25C
b3R0b207CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5oCShyZXZpc2lvbiA5MDU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIGlu
dCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25TdHJ1dDsgfQog
ICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCBzKSB7IG1fcGFnaW5hdGlvblN0cnV0ID0g
czsgfQogCi0gICAgaW50IHNlbGVjdGlvblRvcCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25C
b3R0b20oKSBjb25zdDsKLSAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bWF4KDAsIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkpOyB9CisgICAgTGF5b3V0
VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRv
bSgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbWF4PExheW91dFVuaXQ+KDAsIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkp
OyB9CiAKICAgICBpbnQgYmxvY2tEaXJlY3Rpb25Qb2ludEluTGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1heChsaW5lVG9wKCksIHNlbGVjdGlvblRvcCgpKTsgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>