<?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>44375</bug_id>
          
          <creation_ts>2010-08-20 19:49:47 -0700</creation_ts>
          <short_desc>Copying Paths is expensive.  toPathData() should avoid causing a copy.</short_desc>
          <delta_ts>2010-10-11 09:24:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>46052</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44374</dependson>
          <blocked>44402</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>krit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267514</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-20 19:49:47 -0700</bug_when>
    <thetext>Copying Paths is expensive.  toPathData() should avoid causing a copy.

http://themaninblue.com/experiment/AnimationBenchmark/svg

source: http://themaninblue.com/experiment/AnimationBenchmark/svg/js/main.js

We&apos;re spending 3% of that benchmark in Path::operator=  Crazy!  (45% is spent in RenderPath::paint().)  toPathData() always causes a copy of the Path which is expensive (at least for CoreGraphics as it&apos;s a malloc).

We either should make Path, COW, or we should find a way to avoid this copy in this return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267517</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-20 19:56:05 -0700</bug_when>
    <thetext>It&apos;s actually closer to 4%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267518</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-20 19:57:55 -0700</bug_when>
    <thetext>This will stop showing up on this benchmark if bug 44374 is fixed, since we could avoid regenerating path data all together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267571</commentid>
    <comment_count>3</comment_count>
      <attachid>65026</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-21 09:17:28 -0700</bug_when>
    <thetext>Created attachment 65026
one possible approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267574</commentid>
    <comment_count>4</comment_count>
      <attachid>65026</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-21 09:21:57 -0700</bug_when>
    <thetext>Comment on attachment 65026
one possible approach

This doesn&apos;t really change our performance on http://themaninblue.com/experiment/AnimationBenchmark/svg/

I think a better approach would be the one mentioned in 44374 of using the unit circle and transforming it.

This might speed up some painting ever so slightly, since we&apos;re not copying Paths as much.  All of the uses of Path::create* were causing a Path copy.

In the shark sample, this brought our time spent under SVGCircleElement::toPathData up to 8.9% after the change, but before the change, toPathData + Path::operator= + CFRelease (which were all related to copying paths) was over 12% in total.

I&apos;m not sure if I should finish this land this patch or not, but I&apos;m putting it here for comments anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267575</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-21 09:23:19 -0700</bug_when>
    <thetext>It&apos;s possible this could be a tiny win on the PLT, if the PLT uses any of the GraphicsContext code paths which were previously copying paths.

I&apos;m not able to run the PLT, so I can&apos;t tell you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267578</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-21 09:42:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 65026 [details])
&gt; This doesn&apos;t really change our performance on http://themaninblue.com/experiment/AnimationBenchmark/svg/
&gt; 
&gt; I think a better approach would be the one mentioned in 44374 of using the unit circle and transforming it.
&gt; 
&gt; This might speed up some painting ever so slightly, since we&apos;re not copying Paths as much.  All of the uses of Path::create* were causing a Path copy.
&gt; 
&gt; In the shark sample, this brought our time spent under SVGCircleElement::toPathData up to 8.9% after the change, but before the change, toPathData + Path::operator= + CFRelease (which were all related to copying paths) was over 12% in total.
&gt; 
&gt; I&apos;m not sure if I should finish this land this patch or not, but I&apos;m putting it here for comments anyway.

I think I had perf problems with path transformations in CG in the past. IIRC CG copys the patch on transformations anyway. So it might not bring a better performance. I Discussed a similar issue with Oliver in Canvas. Oliver should know better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268050</commentid>
    <comment_count>7</comment_count>
      <attachid>65026</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-23 12:19:06 -0700</bug_when>
    <thetext>Comment on attachment 65026
one possible approach

I think that the general direction of making Path RefCounted (https://bugs.webkit.org/show_bug.cgi?id=44402) and reusing the unit circle&apos;s path (https://bugs.webkit.org/show_bug.cgi?id=44374) are better than making these changes simply to avoid calling Path&apos;s copy constructor and/or assignment operator. Note that with these changes there is still no caching of Paths going on inside of routines like RenderMathMLRoot::paint, GraphicsContext::addRoundedRectClip, etc., and no clear opportunity to do so.

If it seems that making Path RefCounted would be a loss because of additional mallocs/frees during temporary Path construction and destruction, perhaps we could consider making a cross-platform internal data structure in Path which holds the PlatformPathPtr and itself is reference counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292506</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-11 09:24:20 -0700</bug_when>
    <thetext>Andreas is working on a solution for SVG on bug 46052.

*** This bug has been marked as a duplicate of bug 46052 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65026</attachid>
            <date>2010-08-21 09:17:28 -0700</date>
            <delta_ts>2010-08-23 12:19:06 -0700</delta_ts>
            <desc>one possible approach</desc>
            <filename>bug-44375-20100821111726.patch</filename>
            <type>text/plain</type>
            <size>41939</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjljN2VkODY0ZjgzMmNmZjY4MzBhNGY5YTkzODlhOGQzNWZkODgwOC4uMzllMjRhZWMzNTY0NzI0
MmRiZWZiMWEyZDZkOGIwM2IwZTE1NjBiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxMC0wOC0yMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ29weWluZyBQYXRocyBpcyBleHBlbnNpdmUuICB0b1BhdGhE
YXRhKCkgc2hvdWxkIGF2b2lkIGNhdXNpbmcgYSBjb3B5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzNzUKKworICAgICAgICBObyBuZXcgdGVzdHMu
IChPT1BTISkKKworICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KToKKyAgICAgICAgKiBtYXRobWwv
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxTcXVhcmVSb290OjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91
bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJvdW5kZWRSZWN0YW5nbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkUmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVs
bGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQ2lyY2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmFkZExpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6
OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5
Q2xpcHBpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6bGF5b3V0UGF0aCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERh
dGEpOgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50
Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVs
ZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
RWxlbWVudDo6Z2V0VG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1l
bnQ6OmdldFBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5Z29u
RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BvbHlnb25FbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5
bGluZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9T
VkdSZWN0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6dG9QYXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1Vz
ZUVsZW1lbnQuaDoKKwogMjAxMC0wOC0yMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcAppbmRleCA0ZWQ4YzE5MGYwN2YzNTQxZDRlN2M0OWY5MWJlZDNi
OTJhNDRlYjViLi5iYmVlYWMzZWQ2OWUxNTUzMTFiMzdhYTE5OTFiN2ZkZTU0N2ZhYTk1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9XZWJDb3Jl
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcApAQCAtOTIsNyArOTIsOSBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJvb3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
KQogICAgICAgICBmaXJzdENoaWxkKCktPmFkZENoaWxkKGNoaWxkKTsKICAgICB9CiB9Ci0gICAg
CisKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBhIHRvdGFsIGRpc2FzdGVyLiAgUGxlYXNlIHNw
bGl0IGl0IGludG8gbXVsdGlwbGUKKy8vIHNtYWxsZXIgZnVuY3Rpb25zIHNvIG5vcm1hbCBodW1h
bnMgY2FuIHJlYWQgaXQuCiB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYg
aW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGlu
Zm8gLCB0eCAsIHR5KTsKQEAgLTE4MSwyMSArMTgzLDIyIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9v
dDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBpbmZvLmNvbnRl
eHQtPmJlZ2luUGF0aCgpOwogICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChtYXNrKTsKICAgICBp
bmZvLmNvbnRleHQtPmNsaXAobWFzayk7Ci0gICAgCisKICAgICAvLyBEcmF3IHRoZSB0aGljayBw
YXJ0IG9mIHRoZSByb290LgogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGdS
YWRpY2FsVGhpY2tMaW5lVGhpY2tuZXNzICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgaW5m
by5jb250ZXh0LT5zZXRMaW5lQ2FwKFNxdWFyZUNhcCk7Ci0gICAgCisKICAgICBQYXRoIGxpbmU7
Ci0gICAgCi0gICAgbGluZSA9IGxpbmUuY3JlYXRlTGluZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsK
LSAgICAKKyAgICBsaW5lLmFkZExpbmUoYm90dG9tTGVmdCwgdG9wTGVmdCk7CisKICAgICBpbmZv
LmNvbnRleHQtPmJlZ2luUGF0aCgpOwogICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChsaW5lKTsK
ICAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgoKTsKLSAgICAKKworICAgIC8vIEZJWE1FOiBB
IGRvdWJsZSByZXN0b3JlIGlzIGEgc2lnbiB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyB0b28gbXVj
aC4KKyAgICAvLyBQbGVhc2UgdXNlIGhlbHBlciBmdW5jdGlvbnMuCiAgICAgaW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7Ci0gICAgCisKICAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgYi9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAppbmRleCA4NmFkZDdhNTdi
ODAwZGJhNGUzMWMyNmFhNDU2NTViYTk0ZjRkMGQ3Li4wMjc4ZGUzMTkwODBlNDg0OTRhN2M4ZDcx
NzE4NDQxOWQ4M2IyMThlIDEwMDY0NAotLS0gYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxT
cXVhcmVSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcApAQCAtNjUsNiArNjUsOCBAQCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpSZW5kZXJNYXRo
TUxTcXVhcmVSb290KE5vZGUgKmV4cHJlc3Npb24pCiB7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGlz
IG5lYXJseSBhIGNvcHkgb2YgTWF0aE1MUm9vdC5jcHAhCisvLyBNb3JlIGNvZGUgbmVlZHMgdG8g
YmUgc2hhcmVkIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4KIHZvaWQgUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAg
ICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgdHgsIHR5KTsKQEAgLTE1NCwxMSArMTU2
LDEwIEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBpbnQgdHgsIGludCB0eSkKICAgICAvLyBEcmF3IHRoZSB0aGljayBwYXJ0IG9mIHRoZSByb290
LgogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGdSYWRpY2FsVGhpY2tMaW5l
VGhpY2tuZXNzICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRM
aW5lQ2FwKFNxdWFyZUNhcCk7Ci0gICAgCisKICAgICBQYXRoIGxpbmU7Ci0gICAgCi0gICAgbGlu
ZSA9IGxpbmUuY3JlYXRlTGluZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsKLSAgICAKKyAgICBsaW5l
LmFkZExpbmUoYm90dG9tTGVmdCwgdG9wTGVmdCk7CisKICAgICBpbmZvLmNvbnRleHQtPmJlZ2lu
UGF0aCgpOwogICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChsaW5lKTsKICAgICBpbmZvLmNvbnRl
eHQtPnN0cm9rZVBhdGgoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAppbmRleCBiNTExNDFhZGZhMTYyOTk1NjhiZDA0ZTFiYzRjZWI4NzhhNGRlN2My
Li5kMjhiY2VlNTNmMmU5MDQ1YWMwM2E1MjdkZDAwMTQxOTM2NDA4YTBkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01MDAsNyArNTAwLDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUo
cmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAg
UGF0aCByb3VuZGVkUmVjdDsKKyAgICByb3VuZGVkUmVjdC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHJl
Y3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgY2xp
cChyb3VuZGVkUmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRl
ZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3Qg
SW50U2l6ZSYgdG9wUmlnaHQsCkBAIC01MDksNyArNTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXpl
JiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCByb3VuZGVkUmVjdDsK
KyAgICByb3VuZGVkUmVjdC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJp
Z2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgY2xpcE91dChyb3VuZGVkUmVjdCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmNwcAppbmRleCAzMzNhZmNiMGE1OTNiMzE5OGI5YWQ5MWZlODU3OWVmYThjYjM4ZTU1Li45YzYx
ODc4OGZjNDU5NjE4MzQwZGJmOTdlYzdmNGUyMzNjMzM5MjYyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAKQEAgLTExMCw5ICsxMTAsOCBAQCBmbG9hdCBQYXRoOjpub3JtYWxBbmdsZUF0
TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spCiB9CiAjZW5kaWYKIAotUGF0aCBQYXRoOjpj
cmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBG
bG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0YW5nbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRp
aSkKIHsKLSAgICBQYXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CiAgICAg
ZmxvYXQgeSA9IHJlY3RhbmdsZS55KCk7CiAgICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lk
dGgoKTsKQEAgLTEyMCw3ICsxMTksNyBAQCBQYXRoIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcgogICAgIGZs
b2F0IHJ4ID0gcm91bmRpbmdSYWRpaS53aWR0aCgpOwogICAgIGZsb2F0IHJ5ID0gcm91bmRpbmdS
YWRpaS5oZWlnaHQoKTsKICAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0gMC4wZikK
LSAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IGR4ID0g
cngsIGR5ID0gcnk7CiAgICAgLy8gSWYgcnggaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIHdp
ZHRoIG9mIHRoZSByZWN0YW5nbGUKQEAgLTEzMywxMTEgKzEzMiwxMDAgQEAgUGF0aCBQYXRoOjpj
cmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBG
bG9hdFNpemUmIHIKICAgICBpZiAoZHkgPiBoZWlnaHQgKiAwLjVmKQogICAgICAgICBkeSA9IGhl
aWdodCAqIDAuNWY7CiAKLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHggKyBkeCwgeSkpOwor
ICAgIG1vdmVUbyhGbG9hdFBvaW50KHggKyBkeCwgeSkpOwogCiAgICAgaWYgKGR4IDwgd2lkdGgg
KiAwLjVmKQotICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHJ4
LCB5KSk7CisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHJ4LCB5KSk7
CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCAq
ICgxIC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGR5ICogKDEgLSBR
VUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkpKTsKKyAgICBhZGRCZXppZXJD
dXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHggKiAoMSAtIFFVQVJURVIpLCB5KSwgRmxv
YXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHgg
KyB3aWR0aCwgeSArIGR5KSk7CiAKICAgICBpZiAoZHkgPCBoZWlnaHQgKiAwLjUpCi0gICAgICAg
IHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkpKTsK
KyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkp
KTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSAr
IGhlaWdodCAtIGR5ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHgg
KiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCwg
eSArIGhlaWdodCkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgs
IHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAt
IGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0g
ZHgsIHkgKyBoZWlnaHQpKTsKIAogICAgIGlmIChkeCA8IHdpZHRoICogMC41KQotICAgICAgICBw
YXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyBkeCwgeSArIGhlaWdodCkpOworICAgICAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkgKyBoZWlnaHQpKTsKIAotICAgIHBhdGguYWRk
QmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBkeCAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWln
aHQpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9h
dFBvaW50KHgsIHkgKyBoZWlnaHQgLSBkeSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQ
b2ludCh4ICsgZHggKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5
ICsgaGVpZ2h0IC0gZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0
IC0gZHkpKTsKIAogICAgIGlmIChkeSA8IGhlaWdodCAqIDAuNSkKLSAgICAgICAgcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgZHkpKTsKLQotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVU
byhGbG9hdFBvaW50KHgsIHkgKyBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyBk
eCAqICgxIC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyBkeCwgeSkpOworICAgICAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgZHkpKTsKIAotICAgIHBhdGguY2xvc2VTdWJwYXRo
KCk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSAqICgxIC0gUVVB
UlRFUikpLCBGbG9hdFBvaW50KHggKyBkeCAqICgxIC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50
KHggKyBkeCwgeSkpOwogCi0gICAgcmV0dXJuIHBhdGg7CisgICAgY2xvc2VTdWJwYXRoKCk7CiB9
CiAKLVBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0
YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXpl
JiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQog
ewotICAgIFBhdGggcGF0aDsKLQogICAgIGZsb2F0IHdpZHRoID0gcmVjdGFuZ2xlLndpZHRoKCk7
CiAgICAgZmxvYXQgaGVpZ2h0ID0gcmVjdGFuZ2xlLmhlaWdodCgpOwogICAgIGlmICh3aWR0aCA8
PSAwLjAgfHwgaGVpZ2h0IDw9IDAuMCkKLSAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIHJl
dHVybjsKIAogICAgIGlmICh3aWR0aCA8IHRvcExlZnRSYWRpdXMud2lkdGgoKSArIHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCkKICAgICAgICAgICAgIHx8IHdpZHRoIDwgYm90dG9tTGVmdFJhZGl1cy53
aWR0aCgpICsgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKQogICAgICAgICAgICAgfHwgaGVpZ2h0
IDwgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkKICAg
ICAgICAgICAgIHx8IGhlaWdodCA8IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tUmln
aHRSYWRpdXMuaGVpZ2h0KCkpCiAgICAgICAgIC8vIElmIGFsbCB0aGUgcmFkaWkgY2Fubm90IGJl
IGFjY29tbW9kYXRlZCwgcmV0dXJuIGEgcmVjdC4KLSAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3Rh
bmdsZShyZWN0YW5nbGUpOworICAgICAgICByZXR1cm4gYWRkUmVjdGFuZ2xlKHJlY3RhbmdsZSk7
CiAKICAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKICAgICBmbG9hdCB5ID0gcmVjdGFuZ2xl
LnkoKTsKIAotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lk
dGgoKSwgeSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0
b3BSaWdodFJhZGl1cy53aWR0aCgpLCB5KSk7CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUg
d3JpdHRlbiBtdWNoIG1vcmUgY2xlYXJseSEKKyAgICBtb3ZlVG8oRmxvYXRQb2ludCh4ICsgdG9w
TGVmdFJhZGl1cy53aWR0aCgpLCB5KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVS
KSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
KiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyB0b3BSaWdodFJhZGl1
cy5oZWlnaHQoKSkpOworICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHRvcFJp
Z2h0UmFkaXVzLndpZHRoKCksIHkpKTsKIAotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQo
eCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAg
ICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gdG9wUmlnaHRSYWRpdXMu
d2lkdGgoKSAqICgxIC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIHRv
cFJpZ2h0UmFkaXVzLmhlaWdodCgpICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdp
ZHRoLCB5ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKIAotICAgIHBhdGguYWRkQmV6aWVy
Q3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGJvdHRvbVJpZ2h0UmFk
aXVzLmhlaWdodCgpICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90
dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWlnaHQpLCBGbG9h
dFBvaW50KHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHkgKyBoZWlnaHQp
KTsKKyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBib3R0
b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwogCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7CisgICAgYWRkQmV6
aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGJvdHRvbVJpZ2h0
UmFkaXVzLmhlaWdodCgpICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0g
Ym90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWlnaHQpLCBG
bG9hdFBvaW50KHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHkgKyBoZWln
aHQpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBib3R0b21M
ZWZ0UmFkaXVzLndpZHRoKCkgKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2lu
dCh4LCB5ICsgaGVpZ2h0IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVBUlRF
UikpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgp
KSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgo
KSwgeSArIGhlaWdodCkpOwogCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsg
dG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2lu
dCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdo
dCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkg
KiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gYm90dG9tTGVmdFJh
ZGl1cy5oZWlnaHQoKSkpOwogCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQo
eCwgeSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2lu
dCh4ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9p
bnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgeSkpOworICAgIGFkZExpbmVUbyhGbG9hdFBv
aW50KHgsIHkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKSk7CiAKLSAgICBwYXRoLmNsb3NlU3Vi
cGF0aCgpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgdG9wTGVmdFJh
ZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB0b3BMZWZ0UmFk
aXVzLndpZHRoKCkgKiAoMSAtIFFVQVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgdG9wTGVmdFJh
ZGl1cy53aWR0aCgpLCB5KSk7CiAKLSAgICByZXR1cm4gcGF0aDsKKyAgICBjbG9zZVN1YnBhdGgo
KTsKIH0KIAotUGF0aCBQYXRoOjpjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
YW5nbGUpCit2b2lkIFBhdGg6OmFkZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3Rhbmds
ZSkKIHsKLSAgICBQYXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CiAgICAg
ZmxvYXQgeSA9IHJlY3RhbmdsZS55KCk7CiAgICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lk
dGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7CiAgICAgaWYgKHdp
ZHRoIDw9IDAuMGYgfHwgaGVpZ2h0IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotICAg
IAotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIHBhdGguYWRkTGluZVRv
KEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50
KHgsIHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJu
IHBhdGg7CisgICAgICAgIHJldHVybjsKKworICAgIG1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsK
KyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkpKTsKKyAgICBhZGRMaW5lVG8o
RmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpKTsKKyAgICBhZGRMaW5lVG8oRmxvYXRQ
b2ludCh4LCB5ICsgaGVpZ2h0KSk7CisgICAgY2xvc2VTdWJwYXRoKCk7CiB9CiAKLVBhdGggUGF0
aDo6Y3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJ4LCBmbG9h
dCByeSkKK3ZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZs
b2F0IHJ4LCBmbG9hdCByeSkKIHsKICAgICBmbG9hdCBjeCA9IGNlbnRlci54KCk7CiAgICAgZmxv
YXQgY3kgPSBjZW50ZXIueSgpOwotICAgIFBhdGggcGF0aDsKICAgICBpZiAocnggPD0gMC4wZiB8
fCByeSA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgZmxvYXQgeCA9IGN4OwogICAgIGZsb2F0IHkgPSBjeTsKIAogICAgIHVuc2lnbmVkIHN0ZXAg
PSAwLCBudW0gPSAxMDA7CiAgICAgYm9vbCBydW5uaW5nID0gdHJ1ZTsKLSAgICB3aGlsZSAocnVu
bmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdGVwID09IG51bSkKLSAgICAgICAgeworICAgIHdo
aWxlIChydW5uaW5nKSB7CisgICAgICAgIGlmIChzdGVwID09IG51bSkgewogICAgICAgICAgICAg
cnVubmluZyA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0OCwy
OSArMjM2LDIzIEBAIFBhdGggUGF0aDo6Y3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXIsIGZsb2F0IHJ4LCBmbG9hdCByeSkKIAogICAgICAgICBzdGVwKys7CiAgICAgICAgIGlm
IChzdGVwID09IDEpCi0gICAgICAgICAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsK
KyAgICAgICAgICAgIG1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgICAgICAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CiAgICAgfQogCi0gICAgcGF0aC5jbG9zZVN1YnBh
dGgoKTsKLQotICAgIHJldHVybiBwYXRoOworICAgIGNsb3NlU3VicGF0aCgpOwogfQogCi1QYXRo
IFBhdGg6OmNyZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpCit2
b2lkIFBhdGg6OmFkZENpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVsbGlwc2UoY2VudGVyLCByLCByKTsKKyAgICBhZGRFbGxpcHNl
KGNlbnRlciwgciwgcik7CiB9CiAKLVBhdGggUGF0aDo6Y3JlYXRlTGluZShjb25zdCBGbG9hdFBv
aW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQordm9pZCBQYXRoOjphZGRMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpCiB7Ci0gICAgUGF0
aCBwYXRoOwotCi0gICAgcGF0aC5tb3ZlVG8oc3RhcnQpOwotICAgIHBhdGguYWRkTGluZVRvKGVu
ZCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKKyAgICBtb3ZlVG8oc3RhcnQpOworICAgIGFkZExpbmVU
byhlbmQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmluZGV4IDYxZWEzMjg1NmVj
MGFjOWQxZTYwYmYyNDI4ZDMwZGU4ZDMyNWQ0ZWIuLjJjMWJhYjBjN2JiZmM4ZTA4OWMwNjZiZDYw
ZDVlMzc4ODQ5Mjc0ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC0xNDQsMTIgKzE0
NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBs
YXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCi0gICAgICAgIHN0YXRpYyBQ
YXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRT
aXplJiByb3VuZGluZ1JhZGlpKTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlUm91bmRlZFJl
Y3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9t
TGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cyk7Ci0gICAgICAg
IHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAg
c3RhdGljIFBhdGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0
IHJ4LCBmbG9hdCByeSk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUNpcmNsZShjb25zdCBG
bG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpOwotICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIC8vIFRo
ZXNlIGFyZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgdXNlZCBmb3IgY29u
c2lzdGVuY3kuCisgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpOworICAgICAgICB2b2lkIGFkZFJv
dW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0
UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwor
ICAgICAgICB2b2lkIGFkZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9p
ZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcngsIGZsb2F0IHJ5
KTsKKyAgICAgICAgdm9pZCBhZGRDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9h
dCByKTsKKyAgICAgICAgdm9pZCBhZGRMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jik7CiAKICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1
bmN0aW9uKSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCmluZGV4IGU1MDc5ZGNmYzFiODQ3ZmM5YzNmNTU3NWNjZjMxZDE2NGZjMDcyYjQu
LmExMWVhZTMyYzBjMjVkZmQ2MGUzNTJhNjI5MThjODg4MjIwNzIzYjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC02ODQs
NyArNjg0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBpZiAob2xkRmlsbENvbG9y
ICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9yU3BhY2UpOwogCi0gICAgYWRkUGF0aChQYXRo
OjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21M
ZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcm91bmRlZFJlY3Q7CisgICAgcm91bmRlZFJl
Y3QuYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVm
dCwgYm90dG9tUmlnaHQpOworICAgIGFkZFBhdGgocm91bmRlZFJlY3QpOwogICAgIGZpbGxQYXRo
KCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0g
Y29sb3JTcGFjZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCA3ODYxOGQxMzAyMTMyNjdmMjMxZGIyNDUyZWExMTlkYzk5ZTNhZTAxLi5kYmQwYmFlYjRj
MTkyODA1Mjg4NzY0ZjUxMzU2MjRlNjYyODZiYmIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LAogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChi
b3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwog
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChpbm5lckJvcmRlclJl
Y3QsIGlubmVyVG9wTGVmdFJhZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0b21M
ZWZ0UmFkaXVzLCBpbm5lckJvdHRvbVJpZ2h0UmFkaXVzKTsKIAotICAgICAgICByb3VuZGVkUGF0
aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgcm91bmRlZFBhdGguYWRk
Um91bmRlZFJlY3RhbmdsZShib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVm
dCwgYm90dG9tUmlnaHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFBhdGgocm91bmRl
ZFBhdGgpOwogICAgIH0KIApAQCAtMTcwNSw5ICsxNzA1LDExIEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHR4
LCBpbnQKIAogICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogCi0gICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAoUGF0aDo6Y3Jl
YXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwg
Ym90dG9tUmlnaHQpKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChoYXNCb3Jk
ZXJSYWRpdXMpIHsKKyAgICAgICAgICAgICAgICBQYXRoIHJvdW5kZWRSZWN0OworICAgICAgICAg
ICAgICAgIHJvdW5kZWRSZWN0LmFkZFJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5jbGlwKHJvdW5kZWRSZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmNsaXAocmVjdCk7CiAKICAgICAgICAgICAgIEludFNpemUgZXh0cmFPZmZzZXQo
MiAqIHcgKyBtYXgoMCwgc2hhZG93T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93Qmx1ciAtIDIgKiBz
aGFkb3dTcHJlYWQgKyAxLCAwKTsKQEAgLTE3MTUsOCArMTcxNywxMSBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0eCwgaW50CiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY29udGV4dC0+YWRk
UGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUob3V0ZXJSZWN0KSk7CisgICAgICAgICAgICBQYXRo
IG91dGVyUmVjdFBhdGg7CisgICAgICAgICAgICBvdXRlclJlY3RQYXRoLmFkZFJlY3RhbmdsZShv
dXRlclJlY3QpOworICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChvdXRlclJlY3RQYXRoKTsK
IAorICAgICAgICAgICAgUGF0aCBob2xlUGF0aDsKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJS
YWRpdXMpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hhZG93U3ByZWFkID4gMCkgewogICAgICAg
ICAgICAgICAgICAgICB0b3BMZWZ0LmV4cGFuZCgtc2hhZG93U3ByZWFkLCAtc2hhZG93U3ByZWFk
KTsKQEAgLTE3MzEsOSArMTczNiwxMSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50CiAgICAgICAg
ICAgICAgICAgICAgIGJvdHRvbVJpZ2h0LmV4cGFuZCgtc2hhZG93U3ByZWFkLCAtc2hhZG93U3By
ZWFkKTsKICAgICAgICAgICAgICAgICAgICAgYm90dG9tUmlnaHQuY2xhbXBOZWdhdGl2ZVRvWmVy
bygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRo
KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoaG9sZVJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0
LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgICAgICAgICAgICAgIGhvbGVQYXRoLmFk
ZFJvdW5kZWRSZWN0YW5nbGUoaG9sZVJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShob2xlUmVjdCkpOworICAgICAgICAg
ICAgICAgIGhvbGVQYXRoLmFkZFJlY3RhbmdsZShob2xlUmVjdCk7CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmFkZFBhdGgoaG9sZVBhdGgpOwogCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
UnVsZShSVUxFX0VWRU5PREQpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZp
bGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAppbmRleCA1NWIyMzBiYmJmOThjMzM2M2M4MWZhZTQ5MmRiZGIzZjQxYmQ5
NmU0Li5iZDlhYjUyY2IwZTAxMzU4NjFiYjIyZjE2MTM5Y2FiZGVjNDBmY2U1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC00NDYsOCArNDQ2LDkgQEAg
Ym9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoaW50
IHR4LCBpbnQgdHksIEZsb2F0UmVjdCYKICAgICBmbG9hdCB4ID0gKGNvbnRlbnRSZWN0LnNpemUo
KS53aWR0aCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRoKCkgLyAyKSAr
IGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueCgpOwogICAgIGZsb2F0IHkgPSAoY29udGVudFJlY3Qu
c2l6ZSgpLmhlaWdodCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgp
IC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLnkoKTsKICAgICByZXBsYWNlbWVudFRleHRS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIAotICAgIHBhdGggPSBQYXRo
OjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0U2l6ZShy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cywgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJl
Y3RSYWRpdXMpKTsKKworICAgIHBhdGguY2xlYXIoKTsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
YW5nbGUocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRo
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCmluZGV4IGI5YWU2YjAzNjc2
MDhmMzlmYzc3ZTNkNGYwMjU2ZGIwNmY3Y2JiMTAuLmU2YmUwMDcwNjAxNzJjYmFlMWFiZTgyNTRi
MDI5ZDVlZTQ2YzYyOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGgu
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCkBAIC0xMDMsNyArMTAz
LDcgQEAgdm9pZCBSZW5kZXJQYXRoOjpsYXlvdXQoKQogCiAgICAgYm9vbCBuZWVkc1BhdGhVcGRh
dGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKICAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAg
ICAgIG1fcGF0aCA9IGVsZW1lbnQtPnRvUGF0aERhdGEoKTsKKyAgICAgICAgZWxlbWVudC0+dG9Q
YXRoRGF0YShtX3BhdGgpOwogICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
aW5kZXggZThhYTY1ZTM0ZjE4N2JlMDA0NTk2MGZmNTU2ZDc0OTE2OTAwNjgzMi4uZjRmZTc1NjFi
N2FkM2U2NWQ0OGU4Yjc1MmE1Y2YxMTdjZWFkOWE2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBG
YWxsYmFjayB0byBtYXNraW5nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNsaXBwaW5nIHBh
dGguCiAgICAgICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNsaXBQ
YXRoID0gc3R5bGVkLT50b0NsaXBQYXRoKCk7CisgICAgICAgICAgICBzdHlsZWQtPnRvQ2xpcFBh
dGgoY2xpcFBhdGgpOwogICAgICAgICAgICAgY2xpcFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKaW5kZXggNWQ5NzdmOWYxNWQ3MmQ1ZTk1YzdjMTg5
MTZjNjM0M2NiOTc5YTVjMi4uMzQ2NjgxZGY4ZmQyMzAxZGQ1NzdjNDgxNTI0MmFiNDRjYjg3YTBl
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcApAQCAtNTMsMTQgKzUz
LDE1IEBAIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgoKSBjb25zdAogICAgIAog
ICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVt
ZW50Kj4odGFyZ2V0RWxlbWVudCk7CiAgICAgCi0gICAgUGF0aCBwYXRoRGF0YSA9IHBhdGhFbGVt
ZW50LT50b1BhdGhEYXRhKCk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGhFbGVtZW50LT50b1Bh
dGhEYXRhKHBhdGgpOwogICAgIC8vIFNwZWM6ICBUaGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0
aGUgcmVmZXJlbmNlZCAncGF0aCcgZWxlbWVudCByZXByZXNlbnRzIGEKICAgICAvLyBzdXBwbGVt
ZW50YWwgdHJhbnNmb3JtYXRpb24gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdXNlciBjb29yZGlu
YXRlIHN5c3RlbSBmb3IKICAgICAvLyB0aGUgY3VycmVudCAndGV4dCcgZWxlbWVudCwgaW5jbHVk
aW5nIGFueSBhZGp1c3RtZW50cyB0byB0aGUgY3VycmVudCB1c2VyIGNvb3JkaW5hdGUKICAgICAv
LyBzeXN0ZW0gZHVlIHRvIGEgcG9zc2libGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0aGUgY3Vy
cmVudCAndGV4dCcgZWxlbWVudC4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvdGV4
dC5odG1sI1RleHRQYXRoRWxlbWVudAotICAgIHBhdGhEYXRhLnRyYW5zZm9ybShwYXRoRWxlbWVu
dC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpKTsKLSAgICByZXR1cm4gcGF0aERhdGE7CisgICAg
cGF0aC50cmFuc2Zvcm0ocGF0aEVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7Cisg
ICAgcmV0dXJuIHBhdGg7CiB9CiAKIGZsb2F0IFJlbmRlclNWR1RleHRQYXRoOjpzdGFydE9mZnNl
dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IGY1YmJl
NWJhOWE2YTg1ODkyNjFlZGJkMzBkMjg5M2M2Y2ViZjliN2EuLjE0MjEyMzE2Y2NiNTdlNDY3OGVi
ZDI0ZGQxOTNiZjljNmU3YzgzMjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3gu
Y3BwCkBAIC01MzQsNyArNTM0LDkgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29y
YXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogCiAgICAgY29u
dGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFk
ZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCBtX2N1cnJlbnRDaHVu
a1BhcnQud2lkdGgsIHRoaWNrbmVzcykpKTsKKyAgICBQYXRoIHJlY3RQYXRoOworICAgIHJlY3RQ
YXRoLmFkZFJlY3RhbmdsZShGbG9hdFJlY3QoeCwgeSwgbV9jdXJyZW50Q2h1bmtQYXJ0LndpZHRo
LCB0aGlja25lc3MpKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKHJlY3RQYXRoKTsKIAogICAgIGlm
IChhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRl
Y29yYXRpb25TdHlsZSkpCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCmluZGV4IDRkZGRhNzNiYWUz
N2UwMDZmYTNjZDY2MzRlYzQxMzhlZDc2YTc2MzMuLjc3ZjYyMGY0YjZhNjM3MzM1NGMxMzc0NzU1
Zjg0NTJkZGYwMWFjMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAK
QEAgLTExMSw5ICsxMTEsMTAgQEAgUGF0aCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YW5pbWF0
aW9uUGF0aCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
bXBhdGhUYWcpKSB7CiAgICAgICAgICAgICBTVkdNUGF0aEVsZW1lbnQqIG1QYXRoID0gc3RhdGlj
X2Nhc3Q8U1ZHTVBhdGhFbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAgU1ZHUGF0aEVsZW1l
bnQqIHBhdGhFbGVtZW50ID0gbVBhdGgtPnBhdGhFbGVtZW50KCk7CisgICAgICAgICAgICBQYXRo
IHBhdGg7CiAgICAgICAgICAgICBpZiAocGF0aEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKCk7Ci0gICAgICAgICAgICByZXR1cm4gUGF0aCgp
OworICAgICAgICAgICAgICAgIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKHBhdGgpOworICAgICAg
ICAgICAgcmV0dXJuIHBhdGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6cGF0aEF0dHIpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xl
RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCBmZmJh
YTdiZTg1NjM1NjFlODM5NTUzYjc4ZWY1M2RlYTVjMDNjMTYzLi5kMjE2NGRmZjlhZTUyNGRjYmI2
M2U4NTNjYzljYWQ1OTA1ZGQ0Mzk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTIz
LDkgKzEyMywxMCBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0
aERhdGEoKSBjb25zdAordm9pZCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBh
dGgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KGN4
KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUodGhpcykpLCByKCkudmFsdWUodGhpcykpOworICAg
IHBhdGguY2xlYXIoKTsKKyAgICBwYXRoLmFkZENpcmNsZShGbG9hdFBvaW50KGN4KCkudmFsdWUo
dGhpcyksIGN5KCkudmFsdWUodGhpcykpLCByKCkudmFsdWUodGhpcykpOwogfQogCiBib29sIFNW
R0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xl
RWxlbWVudC5oCmluZGV4IGY0MzZiM2M1NzNiYTNlMmZiZWRiNTdhYTY3ZGM1YzdmZGIzMmQyZTgu
LjhkODVlMmU1NmYwNjIzYmZlZTA2YmU5N2M1MjM2OTk4N2UwMWVkMzUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVF
bGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IDEyOGI1ZTAxOWE0ZDg3ZjlmMTBlYjUyYzllZTNk
ZGJmNzcxM2MzMTcuLmY1Mjk5MzU1NzgxZjZjZjg0NTMxYzQwNzc3YmY3MTQzNzgyOWExYmYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEzMiw5ICsxMzIsMTAgQEAgdm9pZCBTVkdF
bGxpcHNlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
CiB9CiAKLVBhdGggU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBT
VkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIHJl
dHVybiBQYXRoOjpjcmVhdGVFbGxpcHNlKEZsb2F0UG9pbnQoY3goKS52YWx1ZSh0aGlzKSwgY3ko
KS52YWx1ZSh0aGlzKSksCisgICAgcGF0aC5jbGVhcigpOworICAgIHBhdGguYWRkRWxsaXBzZShG
bG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUodGhpcykpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcngoKS52YWx1ZSh0aGlzKSwgcnkoKS52
YWx1ZSh0aGlzKSk7CiB9CiAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxl
bWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAppbmRleCA4NWVjNGM4ZWE2
NzEwMWU4ODk4ZDFiYmRjNzFjMjBmNjQzZWRmNWFkLi4wMjFkMjllMTM4ZTQ5ZDNlYWJjMWUzZmNj
OTZjNDlhMDBiYTA5YWVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFs
IFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0
YShQYXRoJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgc2Vs
Zkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
TGluZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGVi
YmNkZjY3M2ZjZTg0ZDg1YzU3Mzk1ZjA3MjBmMDIyM2NmMTUzMzUuLjlmOWUyMWMwYzE0ZTBkZGQw
MjE1NzA5MTMxZThmZGQxMDYxMGY4ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKQEAgLTEyOCwx
MCArMTI4LDExIEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRh
KCkgY29uc3QKK3ZvaWQgU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29u
c3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KHgxKCkudmFsdWUo
dGhpcyksIHkxKCkudmFsdWUodGhpcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQoeDIoKS52YWx1ZSh0aGlzKSwgeTIoKS52YWx1ZSh0aGlzKSkpOworICAgIHBhdGgu
Y2xlYXIoKTsKKyAgICBwYXRoLmFkZExpbmUoRmxvYXRQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5
MSgpLnZhbHVlKHRoaXMpKSwKKyAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCh4MigpLnZhbHVl
KHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnNl
bGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
TGluZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmgKaW5kZXggY2RmYTJh
YTY3YjVkMWI5NTczNzE0YjBiOTE0M2JiNTlhYzlkNGNjZi4uN2NiNTZmYzE3NmVhMDA1Y2VkZGZj
MjVlZDIxNjE0MzFlN2I0YjAxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCkBAIC00NSw3ICs0NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEo
UGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhF
bGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCA2ZDgwMWZi
MTRkOGNlZDgxZDQzNjNjZDY0YzQwMzJkMzIwYmIyOGU2Li5kZDMzOGI0OTE1MGI0ZDg5YzQxOWVi
NzYwYWE3ZjY3NTNmM2Y4NTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC01OSwxNCArNTks
MTggQEAgU1ZHUGF0aEVsZW1lbnQ6On5TVkdQYXRoRWxlbWVudCgpCiBmbG9hdCBTVkdQYXRoRWxl
bWVudDo6Z2V0VG90YWxMZW5ndGgoKQogewogICAgIC8vIEZJWE1FOiB0aGlzIG1heSB3aXNoIHRv
IHVzZSB0aGUgcGF0aFNlZ0xpc3QgaW5zdGVhZCBvZiB0aGUgcGF0aGRhdGEgaWYgdGhhdCdzIGNo
ZWFwZXIgdG8gYnVpbGQgKG9yIGNhY2hlZCkKLSAgICByZXR1cm4gdG9QYXRoRGF0YSgpLmxlbmd0
aCgpOworICAgIFBhdGggcGF0aDsKKyAgICB0b1BhdGhEYXRhKHBhdGgpOworICAgIHJldHVybiBw
YXRoLmxlbmd0aCgpOwogfQogCiBGbG9hdFBvaW50IFNWR1BhdGhFbGVtZW50OjpnZXRQb2ludEF0
TGVuZ3RoKGZsb2F0IGxlbmd0aCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBtYXkgd2lzaCB0byB1
c2UgdGhlIHBhdGhTZWdMaXN0IGluc3RlYWQgb2YgdGhlIHBhdGhkYXRhIGlmIHRoYXQncyBjaGVh
cGVyIHRvIGJ1aWxkIChvciBjYWNoZWQpCisgICAgUGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEo
cGF0aCk7CiAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgIHJldHVybiB0b1BhdGhEYXRhKCkucG9p
bnRBdExlbmd0aChsZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gcGF0aC5wb2ludEF0TGVuZ3RoKGxl
bmd0aCwgb2spOwogfQogCiB1bnNpZ25lZCBsb25nIFNWR1BhdGhFbGVtZW50OjpnZXRQYXRoU2Vn
QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQpAQCAtMjY0LDEyICsyNjgsMTAgQEAgU1ZHUGF0aFNlZ0xp
c3QqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhdGggU1ZHUGF0aEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBj
b25zdAordm9pZCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAog
ewotICAgIFBhdGggcmVzdWx0OwogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0g
U1ZHUGF0aFBhcnNlckZhY3Rvcnk6OnNlbGYoKTsKLSAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U1ZHUGF0aFNlZ0xpc3QocGF0aFNlZ0xpc3QoKSwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIGZhY3RvcnktPmJ1aWxkUGF0aEZyb21TVkdQYXRoU2VnTGlzdChwYXRoU2VnTGlzdCgp
LCBwYXRoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
aCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMDc2MTJjNjUwOGY5NGRjMDIw
OWFjY2IwZjYxN2NmNmEyYTU4MWM3My4uZDgwM2ZkMzcwYjNmZmI5ODIxNTRkMjZlN2NkZjE5Mjdj
MTlmMzcxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCkBAIC05NCw3ICs5NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERh
dGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0
OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNw
cCBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAppbmRleCBjN2FiMDliZjRiNjE4
ZmQ5NzhkMWZlN2FmZjIxZDYwZDM0ZDUzNDc2Li43MDZkMGIxZjA1YjFlMjlkYmJmMmE1ZjI3OWNl
Y2IyNTcyOWQ1ZDAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQb2x5Z29uRWxlbWVudC5oIgogCisj
aW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zNiwyMiArMzcsMjEgQEAgU1ZHUG9seWdvbkVsZW1lbnQ6On5TVkdQb2x5
Z29uRWxlbWVudCgpCiB7CiB9CiAKLVBhdGggU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEo
KSBjb25zdAordm9pZCBTVkdQb2x5Z29uRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBj
b25zdAogewotICAgIFBhdGggcG9seURhdGE7CisgICAgcGF0aC5jbGVhcigpOwogCiAgICAgaW50
IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYgKGxlbiA8IDEpCi0gICAg
ICAgIHJldHVybiBwb2x5RGF0YTsKLSAgICAKKyAgICAgICAgcmV0dXJuOworCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgcG9seURhdGEubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAs
IGVjKSk7CisgICAgcGF0aC5tb3ZlVG8ocG9pbnRzKCktPmdldEl0ZW0oMCwgZWMpKTsKIAogICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyArK2kpCi0gICAgICAgIHBvbHlEYXRhLmFkZExpbmVU
byhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykpOworICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2lu
dHMoKS0+Z2V0SXRlbShpLCBlYykpOwogCi0gICAgcG9seURhdGEuY2xvc2VTdWJwYXRoKCk7Ci0g
ICAgcmV0dXJuIHBvbHlEYXRhOworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudC5oCmluZGV4IDc2YjExYTJiODkzNGJkNTJlOTI2Y2UyNmQ3NDEyMTY0
NWI0MzUxMDcuLjU1OTgxZDAxZDNmNjc0NmIxMDg2YjEwMjFmYzYwYzljZjkyNWI3ZWEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcv
U1ZHUG9seWdvbkVsZW1lbnQuaApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFNWR1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdQb2x5Z29uRWxlbWVudCgpOwogCi0gICAgICAgIHZp
cnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1Bh
dGhEYXRhKFBhdGgmKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9z
dmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAppbmRleCBhMWRmY2Q2MThhZGZmNDEwZmRkZjA5ZThi
NzA0ZTc0NmRmMDAzMGYxLi44Y2JmNzRiN2UwZDY2ZmM5NTcwMmJmOWQwYWZjNjE1ZDFjMTBjODQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BvbHlsaW5lRWxlbWVudC5oIgogCisjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zNiwyMSArMzcsMTggQEAgU1ZHUG9seWxpbmVFbGVtZW50Ojp+U1ZHUG9seWxpbmVFbGVt
ZW50KCkKIHsKIH0KIAotUGF0aCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25z
dAordm9pZCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QK
IHsKLSAgICBQYXRoIHBvbHlEYXRhOwotCisgICAgcGF0aC5jbGVhcigpOwogICAgIGludCBsZW4g
PSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmIChsZW4gPCAxKQotICAgICAgICBy
ZXR1cm4gcG9seURhdGE7CisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIHBvbHlEYXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykpOworICAg
IHBhdGgubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAKICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IGxlbjsgKytpKQotICAgICAgICBwb2x5RGF0YS5hZGRMaW5lVG8ocG9pbnRzKCkt
PmdldEl0ZW0oaSwgZWMpKTsKLSAgICAKLSAgICByZXR1cm4gcG9seURhdGE7CisgICAgICAgIHBh
dGguYWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUG9s
eWxpbmVFbGVtZW50LmgKaW5kZXggZmJkYWE4MWY2MmE1MDRmNmJiMzdhYTgzNmRhNGIyNTkzNzVl
YjdhNS4uZmI2ZjFhOTI2MTc0ZTJjNzRhYzY0ODhkYjBhNDg2NDI3Y2M0OGE5YiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZH
UG9seWxpbmVFbGVtZW50LmgKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBTVkdQb2x5bGluZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1BvbHlsaW5lRWxlbWVudCgpOwogCi0gICAgICAgIHZp
cnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1Bh
dGhEYXRhKFBhdGgmKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAKaW5kZXggZDU0NTFlMjU4ZDNmMTRjNTZkZmQyMDc2YjVjNDM2MzA2
YmYxODBlZi4uN2YxNjlmMmUyZjE0YWYwZGI4ZjQ0ZDk0MGEyYWI0MTcxZmMxODgwZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcApAQCAtMTQ5LDggKzE0OSw5IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
ICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNW
R1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnRv
UGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKKyAgICBwYXRoLmNsZWFyKCk7CiAgICAgRmxv
YXRSZWN0IHJlY3QoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcyksIHdpZHRoKCkudmFs
dWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKIAogICAgIGJvb2wgaGFzUnggPSBoYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CkBAIC0xNTgsMTAgKzE1OSwxMSBAQCBQYXRoIFNW
R1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKICAgICBpZiAoaGFzUnggfHwgaGFzUnkp
IHsKICAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeCgpLnZhbHVlKHRoaXMpIDogcnkoKS52
YWx1ZSh0aGlzKTsKICAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkgPyByeSgpLnZhbHVlKHRoaXMp
IDogcngoKS52YWx1ZSh0aGlzKTsKLSAgICAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUocmVjdCwgRmxvYXRTaXplKF9yeCwgX3J5KSk7CisgICAgICAgIHBhdGguYWRkUm91
bmRlZFJlY3RhbmdsZShyZWN0LCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJldHVybiBQYXRoOjpjcmVhdGVSZWN0YW5nbGUocmVjdCk7CisgICAg
cGF0aC5hZGRSZWN0YW5nbGUocmVjdCk7CiB9CiAKIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZI
YXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUmVj
dEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggYmM5MDkxOTlm
NWI5OTlhMTg3OTY5ZWZjYzI5YmEwMTU3YmNmMzBjNC4uNDRjMjQ2YjllYzIwNWJiZTgyZDY4ZDU1
Y2FjOGQxZDMzNTVjNTE2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRo
IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNS
ZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcAppbmRleCAyNzlmNDM3Y2Q0Mzg3YzU0YjRkMjVlZGYxNTk2MjFmZWFl
ZmJlZGU3Li43YmRhYjg2MTVhNjQ4ZTA2OGM3MGM0ZjZhZWExMTI1MDcxYmQ0YWQzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCkBAIC0xMTIsMTIg
KzExMiwxNiBAQCBSZW5kZXJPYmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclBhdGgodGhpcyk7CiB9CiAKLVBhdGggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnRvQ2xpcFBhdGgoKSBjb25zdAordm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIFBhdGggcGF0aERhdGEgPSB0
b1BhdGhEYXRhKCk7CisgICAgcGF0aC5jbGVhcigpOworfQorCit2b2lkIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIGNsaXBQYXRoKSBjb25zdAoreworICAg
IHRvUGF0aERhdGEoY2xpcFBhdGgpOwogICAgIC8vIEZJWE1FOiBIb3cgZG8gd2Uga25vdyB0aGUg
ZWxlbWVudCBoYXMgZG9uZSBhIGxheW91dD8KLSAgICBwYXRoRGF0YS50cmFuc2Zvcm0oYW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpKTsKLSAgICByZXR1cm4gcGF0aERhdGE7CisgICAgY2xpcFBhdGgu
dHJhbnNmb3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmggYi9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCmluZGV4IDFkN2IxOTcwMzVlOTBjZTg1
ZGRiYzM2MTc4ZTIzNzk0NmYxYjY1NGYuLjE0ZmZjNTZlOTlmN2JmZGM4ZmI3OWVjYzlhNGUyMjZh
NTgzMTYyMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aApAQCAtMjIsMTMgKzIyLDEzIEBACiAjZGVmaW5lIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3Mg
UGF0aDsKIAogY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgOiBwdWJsaWMgU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGUgewpAQCAtNTQsOCArNTQsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAg
IC8vICJiYXNlIGNsYXNzIiBtZXRob2RzIGZvciBhbGwgdGhlIGVsZW1lbnRzIHdoaWNoIHJlbmRl
ciBhcyBwYXRocwotICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3QgeyByZXR1cm4g
UGF0aCgpOyB9Ci0gICAgdmlydHVhbCBQYXRoIHRvQ2xpcFBhdGgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRvQ2xp
cFBhdGgoUGF0aCYpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAKaW5kZXggNjhjMDg3Y2ZkMzQwMTdhYzJmNzYwYWZkMzQwNGQzNDU4Y2FlYjk5OC4u
ZDlmYmMyYzYzZTNhMDBlODg5OTgzMGYyOTA1YzIyMjIxNjU4YzcxOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAKQEAgLTYyNiwyNSArNjI2LDI0IEBAIHN0YXRpYyBib29sIGlzRGlyZWN0UmVmZXJlbmNl
KE5vZGUqIG4pCiAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRUYWcpOwog
fQogCi1QYXRoIFNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoKSBjb25zdAordm9pZCBTVkdVc2VF
bGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIGNsaXBQYXRoKSBjb25zdAogeworICAgIGNsaXBQYXRo
LmNsZWFyKCk7CiAgICAgTm9kZSogbiA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlID8gbV90YXJn
ZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgOiAwOwogICAgIGlmICghbikK
LSAgICAgICAgcmV0dXJuIFBhdGgoKTsKLQotICAgIGlmIChuLT5pc1NWR0VsZW1lbnQoKSAmJiBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obiktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKSB7Ci0g
ICAgICAgIGlmICghaXNEaXJlY3RSZWZlcmVuY2UobikpCi0gICAgICAgICAgICAvLyBTcGVjOiBJ
bmRpcmVjdCByZWZlcmVuY2VzIGFyZSBhbiBlcnJvciAoMTQuMy41KQotICAgICAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiTm90IGFsbG93ZWQg
dG8gdXNlIGluZGlyZWN0IHJlZmVyZW5jZSBpbiA8Y2xpcC1wYXRoPiIpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIFBhdGggY2xpcFBhdGggPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KG4pLT50b0NsaXBQYXRoKCk7Ci0gICAgICAgICAgICBjbGlwUGF0
aC50cmFuc2xhdGUoRmxvYXRTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7
Ci0gICAgICAgICAgICBjbGlwUGF0aC50cmFuc2Zvcm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBjbGlwUGF0aDsKLSAgICAgICAgfQotICAgIH0KKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIFBhdGgoKTsKKyAgICBpZiAoIW4tPmlzU1ZHRWxlbWVu
dCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obiktPmlzU3R5bGVkVHJhbnNmb3JtYWJs
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlzRGlyZWN0UmVmZXJlbmNlKG4pKQor
ICAgICAgICAvLyBTcGVjOiBJbmRpcmVjdCByZWZlcmVuY2VzIGFyZSBhbiBlcnJvciAoMTQuMy41
KQorICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9y
KCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxjbGlwLXBhdGg+Iik7
CisgICAgZWxzZSB7CisgICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50Kj4obiktPnRvQ2xpcFBhdGgoY2xpcFBhdGgpOworICAgICAgICBjbGlwUGF0aC50cmFu
c2xhdGUoRmxvYXRTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CisgICAg
ICAgIGNsaXBQYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOworICAgIH0K
IH0KIAogUmVuZGVyT2JqZWN0KiBTVkdVc2VFbGVtZW50OjpyZW5kZXJlckNsaXBDaGlsZCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmggYi9XZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmgKaW5kZXggNTJmM2Y2ZTBhMjJiMDMzMDk5YzAwYzUzYTI3ZjY4MWM3
Njc2OTczMi4uNDlhZjk2NjNhNWJiMmNkMjRkZjM2NDEyNjg4MDc0MGIzZjIwNjg3OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuaApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
Ci0gICAgICAgIHZpcnR1YWwgUGF0aCB0b0NsaXBQYXRoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBjb25zdDsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlckNsaXBDaGlsZCgpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZURp
c2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKE5vZGUqIGVsZW1lbnQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>