<?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>39692</bug_id>
          
          <creation_ts>2010-05-25 15:08:50 -0700</creation_ts>
          <short_desc>Partly done support for alternate ID attributes should be removed</short_desc>
          <delta_ts>2019-02-06 09:03:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230487</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 15:08:50 -0700</bug_when>
    <thetext>A while back we got partway into adding support for alternate ID attributes.

Maciej pointed out we should not add the feature, so we stopped.

The partly-done support currently has some costs:

    1) There is a small runtime cost.
    2) There is a lot of code more complex than it needs to be.
    3) Element.h includes HTMLNames.h which means rebuilding most of the world any time HTMLTagNames.in changes.

Issue (3) is bothering me a lot, so I’d like to see this fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230801</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-26 11:54:33 -0700</bug_when>
    <thetext>There were two sides to this work:
1) Make ID attributes with names other than &quot;id&quot; work, as specified by DTD.
2) Make it possible to have per-element alternate IDs.

Part 1 is something that I think we still want, it&apos;s tracked as bug 12971.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230880</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-26 14:08:19 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; There were two sides to this work:
&gt; 1) Make ID attributes with names other than &quot;id&quot; work, as specified by DTD.
&gt; 2) Make it possible to have per-element alternate IDs.
&gt; 
&gt; Part 1 is something that I think we still want, it&apos;s tracked as bug 12971.

Thanks. I would probably have gotten that wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232465</commentid>
    <comment_count>3</comment_count>
      <attachid>57481</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-31 10:59:23 -0700</bug_when>
    <thetext>Created attachment 57481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232478</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-31 11:32:54 -0700</bug_when>
    <thetext>Attachment 57481 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2808013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232937</commentid>
    <comment_count>5</comment_count>
      <attachid>57481</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-01 13:41:00 -0700</bug_when>
    <thetext>Comment on attachment 57481
Patch

&gt; -        const QualifiedName&amp; attributeName = (attrName == idAttr) ? e-&gt;idAttributeName() : attrName;
&gt; -        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attributeName) == name) {
&gt; +        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attrName) == name) {

I don&apos;t see this change explained in ChangeLog, and I&apos;m not sure if I understand it.

&gt;      RenderSVGResourceContainer(SVGStyledElement* node)
&gt;          : RenderSVGHiddenContainer(node)
&gt;          , RenderSVGResource()
&gt; -        , m_id(node-&gt;getIDAttribute())
&gt; +        // FIXME: Should probably be using getIdAttribute rather than idForStyleResolution.
&gt; +        , m_id(node-&gt;hasID() ? node-&gt;idForStyleResolution() : nullAtom)

The FIXME doesn&apos;t make it immediately clear why (it&apos;s also not always clear elsewhere, but this instance particularly caught my eye, because this is rendering code, so it&apos;s kind of closer to &quot;for style resolution&quot;).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232976</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-01 15:56:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 57481 [details])
&gt; &gt; -        const QualifiedName&amp; attributeName = (attrName == idAttr) ? e-&gt;idAttributeName() : attrName;
&gt; &gt; -        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attributeName) == name) {
&gt; &gt; +        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attrName) == name) {
&gt; 
&gt; I don&apos;t see this change explained in ChangeLog, and I&apos;m not sure if I understand it.

This code was added as part of attempting to make custom attribute names work. For someone reason the idea is that if you explicitly pass &quot;id&quot; as the attribute here, that should map to the abstract &quot;id&quot; attribute. The code has no effect since we don&apos;t support custom id attributes. And it slows things down unnecessarily. At some point, if we actually implement alternate ID attributes we&apos;ll have to figure out what code we do and don&apos;t need. This code was just too strange to live, though.

&gt; &gt;      RenderSVGResourceContainer(SVGStyledElement* node)
&gt; &gt;          : RenderSVGHiddenContainer(node)
&gt; &gt;          , RenderSVGResource()
&gt; &gt; -        , m_id(node-&gt;getIDAttribute())
&gt; &gt; +        // FIXME: Should probably be using getIdAttribute rather than idForStyleResolution.
&gt; &gt; +        , m_id(node-&gt;hasID() ? node-&gt;idForStyleResolution() : nullAtom)
&gt; 
&gt; The FIXME doesn&apos;t make it immediately clear why (it&apos;s also not always clear elsewhere, but this instance particularly caught my eye, because this is rendering code, so it&apos;s kind of closer to &quot;for style resolution&quot;).

I really don’t know which of these cases should and should not be changed. The issue is simply whether a lowercased version of the ID is right for HTML documents. If it is right, then this is fine, and perhaps it&apos;s the name idForStyleResolution that is wrong. More likely, the lowercasing of the ID actually breaks something, in which case the code does need to be changed.

But I wanted to avoid fixing a bug in this patch. The fix can go in a separate patch with a regression test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232977</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-01 15:57:46 -0700</bug_when>
    <thetext>Based on the EWS bot it seems an include of HTMLNames.h has to be added to BindingSecurity.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237579</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-13 10:29:39 -0700</bug_when>
    <thetext>Committed r61094: &lt;http://trac.webkit.org/changeset/61094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237581</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-13 10:37:33 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61094 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237630</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-13 17:17:29 -0700</bug_when>
    <thetext>Chromium builders seem unhappy after this change:

3&gt;V8NamedNodesCollection.cpp
3&gt;..\bindings\v8\custom\V8NamedNodesCollection.cpp(49) : error C2039: &apos;id&apos; : is not a member of &apos;WebCore::NamedNodeMap&apos;
3&gt;        c:\WebKitBuildSlave\chromium-win-release\build\WebCore\dom\NamedNodeMap.h(37) : see declaration of &apos;WebCore::NamedNodeMap&apos;
3&gt;Build log was saved at &quot;file://C:\WebKitBuildSlave\chromium-win-release\build\WebKit\chromium\Release\obj\webcore\BuildLog.htm&quot;
3&gt;webcore - 1 error(s), 0 warning(s)
4&gt;------ Build started: Project: webkit, Configuration: Release Win32 ------
4&gt;Compiling...
4&gt;WebFormControlElement.cpp
4&gt;c:\webkitbuildslave\chromium-win-release\build\javascriptcore\wtf\text\StringImpl.h(96) : warning C4355: &apos;this&apos; : used in base member initializer list
4&gt;.\src\WebFormControlElement.cpp(62) : error C2653: &apos;HTMLNames&apos; : is not a class or namespace name
4&gt;.\src\WebFormControlElement.cpp(62) : error C2065: &apos;idAttr&apos; : undeclared identifier
4&gt;ChromeClientImpl.cpp
4&gt;c:\webkitbuildslave\chromium-win-release\build\javascriptcore\wtf\text\StringImpl.h(96) : warning C4355: &apos;this&apos; : used in base member initializer list
4&gt;c:\webkitbuildslave\chromium-win-release\build\webcore\page\PositionCallback.h(38) : warning C4355: &apos;this&apos; : used in base member initializer list
4&gt;c:\webkitbuildslave\chromium-win-release\build\webcore\page\PositionErrorCallback.h(38) : warning C4355: &apos;this&apos; : used in base member initializer list
4&gt;.\src\ChromeClientImpl.cpp(734) : error C3083: &apos;HTMLNames&apos;: the symbol to the left of a &apos;::&apos; must be a type
4&gt;.\src\ChromeClientImpl.cpp(734) : error C2039: &apos;videoTag&apos; : is not a member of &apos;WebCore&apos;
4&gt;.\src\ChromeClientImpl.cpp(734) : error C2065: &apos;videoTag&apos; : undeclared identifier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237646</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-13 18:10:27 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Chromium builders seem unhappy after this change:

I submitted a build fix in http://trac.webkit.org/changeset/61097
https://bugs.webkit.org/show_bug.cgi?id=40553</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809169</commentid>
    <comment_count>12</comment_count>
      <attachid>57481</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-17 01:08:04 -0800</bug_when>
    <thetext>Comment on attachment 57481
Patch

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

&gt; WebCore/ChangeLog:24
&gt; +        Added an idAttributeName function to Document. This is for a future
&gt; +        where a document can have a custom id attribute name specified in its
&gt; +        doctype. It&apos;s possible this will be insufficient because the same

Although it&apos;s been a long time since this patch was landed, a Document has not yet supported a custom id attribute name. Document::m_idAttributeName is always idAttr. Can we remove Document::m_idAttributeName for performance? (I&apos;ll write a patch.) Or do you have a plan to support a custom id name in a future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809392</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-17 09:29:07 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Although it&apos;s been a long time since this patch was landed, a Document has not yet supported a custom id attribute name. Document::m_idAttributeName is always idAttr. Can we remove Document::m_idAttributeName for performance? (I&apos;ll write a patch.) Or do you have a plan to support a custom id name in a future?

Alexey is the one you should ask, not me. I have no opinion on this. See comment #1 and bug 12971 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809395</commentid>
    <comment_count>14</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-17 09:34:24 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; Alexey is the one you should ask, not me. I have no opinion on this. See comment #1 and bug 12971 for details.

darin: Thanks for giving me the context!

ap: Do you have any idea on supporting a custom id attribute name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809407</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-17 09:52:29 -0800</bug_when>
    <thetext>I still think that we want to fix bug 12971 eventually. It&apos;s a glaring correctness issue when working with arbitrary XML documents retrieved with XHR. I don&apos;t have a very strong opinion about this though.

Keeping the unfinished implementation in tree does not necessarily help achieve the goal. As Darin mentioned in ChangeLog, &quot;it&apos;s possible this will be insufficient &lt;...&gt;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809411</commentid>
    <comment_count>16</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-17 09:55:06 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Keeping the unfinished implementation in tree does not necessarily help achieve the goal. As Darin mentioned in ChangeLog, &quot;it&apos;s possible this will be insufficient &lt;...&gt;&quot;

OK, thanks. Then if I could observe any performance win by removing Document::m_idAttributeName, I will consider removing it. Let me investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502891</commentid>
    <comment_count>17</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:02 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57481</attachid>
            <date>2010-05-31 10:59:23 -0700</date>
            <delta_ts>2013-01-17 01:08:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39692-20100531105922.patch</filename>
            <type>text/plain</type>
            <size>57525</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQxIEBACisyMDEwLTA1LTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0
bHkgZG9uZSBzdXBwb3J0IGZvciBhbHRlcm5hdGUgSUQgYXR0cmlidXRlcyBzaG91bGQgYmUgcmVt
b3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk2
OTIKKworICAgICAgICBSZW1vdmVkIHRoZSBpbmNsdWRlIG9mICJIVE1MTmFtZXMuaCIgZnJvbSAi
RWxlbWVudC5oIi4gVGhpcyBwcmV2ZW50cworICAgICAgICBuZWFyLXdvcmxkLXJlYnVpbGRzIGV2
ZXJ5IHRpbWUgeW91IGNoYW5nZSBIVE1MVGFnTmFtZXMuaW4uCisKKyAgICAgICAgUmVuYW1lZCB0
aGUgZ2V0SURBdHRyaWJ1dGUgZnVuY3Rpb24gaW4gdGhlIEVsZW1lbnQgY2xhc3MgdG8KKyAgICAg
ICAgaWRGb3JTdHlsZVJlc29sdXRpb24sIHNpbmNlIGl0IHJldHVybnMgYSB2YWx1ZSBvZiB0aGUg
aWQgYXR0cmlidXRlCisgICAgICAgIHRoYXQgaGFzIGJlZW4gbG93ZXJjYXNlZCBhcyBhcHByb3By
aWF0ZSBmb3Igc3R5bGUgbWF0Y2hpbmcsIG5vdCB0aGUKKyAgICAgICAgYWN0dWFsIHZhbHVlIG9m
IHRoZSBhdHRyaWJ1dGUuIFdpdGggdGhlIG9sZCBuYW1lIGl0IHdhcyBlYXN5IHRvCisgICAgICAg
IG1pc3VzZSBpdCBpbiBub24tc3R5bGUgY29udGV4dHMuCisKKyAgICAgICAgR290IHJpZCBvZiB0
aGUgaWRBdHRyaWJ1dGVOYW1lIGZ1bmN0aW9uIG9uIEVsZW1lbnQsIHNpbmNlIGl0IGlzCisgICAg
ICAgIGVhc3kgdG8gdXNlIGl0IHdyb25nLiBSZXBsYWNlIGl0IHdpdGggaXNJZEF0dHJpYnV0ZU5h
bWUsIGdldElkQXR0cmlidXRlLAorICAgICAgICBhbmQgc2V0SWRBdHRyaWJ1dGUgZnVuY3Rpb25z
LCB3aGljaCBhcmUgYSBnb29kIGZpdCBmb3IgdGhlIG5lZWRzIG9mCisgICAgICAgIG1vc3QgY2Fs
bCBzaXRlcyB0aGF0IHdlcmUgZGVhbGluZyB3aXRoIHRoZSBpZCBhdHRyaWJ1dGUuCisKKyAgICAg
ICAgQWRkZWQgYW4gaWRBdHRyaWJ1dGVOYW1lIGZ1bmN0aW9uIHRvIERvY3VtZW50LiBUaGlzIGlz
IGZvciBhIGZ1dHVyZQorICAgICAgICB3aGVyZSBhIGRvY3VtZW50IGNhbiBoYXZlIGEgY3VzdG9t
IGlkIGF0dHJpYnV0ZSBuYW1lIHNwZWNpZmllZCBpbiBpdHMKKyAgICAgICAgZG9jdHlwZS4gSXQn
cyBwb3NzaWJsZSB0aGlzIHdpbGwgYmUgaW5zdWZmaWNpZW50IGJlY2F1c2UgdGhlIHNhbWUKKyAg
ICAgICAgZG9jdW1lbnQgbWlnaHQgaGF2ZSBYSFRNTCBvciBTVkcgZWxlbWVudHMgaW4gaXQsIGFu
ZCBpdCdzIHBvc3NpYmxlCisgICAgICAgIHRoYXQgb24gdGhvc2UgZWxlbWVudHMgd2Ugd2lsbCB3
YW50IHRoZSBhdHRyaWJ1dGUgbmFtZWQgImlkIiB3aXRoCisgICAgICAgIG5vIG5hbWVzcGFjZSB0
byBzdGlsbCB3b3JrLiBXZSBjYW4gZGVhbCB3aXRoIHRoYXQgd2hlbiB3ZSBpbXBsZW1lbnQKKyAg
ICAgICAgdGhlIGFjdHVhbCBmZWF0dXJlLCB0aG91Z2guIEZvciBub3csIGl0IHNlZW1zIE9LIHRv
IGZldGNoIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgZG9j
dW1lbnQuCisKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKToKKyAgICAgICAgKiBkb20vU3Rh
dGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW1X
aXRoTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6UmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXI6OmlkQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6aGFuZGxlRGVlcFVzZVJlZmVyZW5j
aW5nKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKToKKyAg
ICAgICAgVXNlIHRoZSBuZXcgaWRGb3JTdHlsZVJlc29sdXRpb24gZnVuY3Rpb24sIHdoaWNoIGlz
IHRoZSBuZXcgbmFtZSBvZgorICAgICAgICB0aGUgZ2V0SURBdHRyaWJ1dGUgZnVuY3Rpb24uIFRo
ZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGVzZSBjYWxsIHNpdGVzIGFyZQorICAgICAgICBpbmNvcnJl
Y3QsIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgbGF0ZXIsIHNvIHRo
ZXJlJ3MKKyAgICAgICAgYSBGSVhNRSBhdCBlYWNoIGNhbGwgc2l0ZS4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBJ
bml0aWFsaXplIG1faWRBdHRyaWJ1dGVOYW1lIHRvIHRoZQorICAgICAgICBzdGFuZGFyZCBpZCBh
dHRyaWJ1dGUgZnJvbSBIVE1MLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldEVsZW1l
bnRCeUlkKTogVXNlIEVsZW1lbnQ6OmdldElkQXR0cmlidXRlLgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOiBBZGRlZCBEb2N1bWVudDo6aWRBdHRyaWJ1dGVOYW1lLgorCisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKTog
VXNlIERvY3VtZW50OjppZEF0dHJpYnV0ZU5hbWUuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRBdHRyaWJ1dGVNYXApOiBVc2UgRWxlbWVudDo6aXNJZEF0dHJpYnV0ZU5hbWUuCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IFVzZSBEb2N1bWVu
dDo6aWRBdHRyaWJ1dGVOYW1lLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9ybWF0Rm9y
RGVidWdnZXIpOiBVc2UgRWxlbWVudDo6Z2V0SWRBdHRyaWJ1dGUuCisgICAgICAgICogZG9tL0Vs
ZW1lbnQuaDogQWRkZWQgaXNJZEF0dHJpYnV0ZU5hbWUsIGdldElkQXR0cmlidXRlLCBzZXRJZEF0
dHJpYnV0ZSwKKyAgICAgICAgaWRGb3JTdHlsZVJlc29sdXRpb24uIFJlbW92ZWQgcmFyZUlEQXR0
cmlidXRlTmFtZS4KKworICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDogUmVtb3ZlZCBt
X2lkQXR0cmlidXRlTmFtZS4KKworICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKTogVXNlIERvY3VtZW50
OjppZEF0dHJpYnV0ZU5hbWUuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5oOiBSZW5hbWVk
IGlkLCBzZXRJRCwgYW5kIG1faWQgdG8gaWRGb3JTdHlsZVJlc29sdXRpb24sCisgICAgICAgIHNl
dElkRm9yU3R5bGVSZXNvbHV0aW9uLCBhbmQgbV9pZEZvclN0eWxlUmVzb2x1dGlvbiBzaW5jZSB0
aGlzIGlzIG5vdCB0aGUKKyAgICAgICAgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBiZWNhdXNl
IGl0IGdldHMgbG93ZXJjYXNlZCBmb3IgY29tcGF0aWJpbGl0eS1tb2RlCisgICAgICAgIGRvY3Vt
ZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJQcm9ncmVzcy5jcHA6CisgICAgICAgIEFkZGVkIGluY2x1ZGUgb2YgSFRNTE5hbWVz
Lmggbm93IHRoYXQgRWxlbWVudC5oIG5vIGxvbmdlciBpbmNsdWRlcyBpdC4KKworICAgICAgICAq
IGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL21h
cmt1cC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgUmVtb3Zl
ZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5oOiBTb3J0
ZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKTogVXNlIGlkRm9yU3R5
bGVSZXNvbHV0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKTogVXNlIGlkRm9yU3R5bGVSZXNvbHV0aW9uLgor
ICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmlzSWQpOiBV
c2UgRG9jdW1lbnQ6OmlkQXR0cmlidXRlTmFtZS4KKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6IFVzZSBpc0lkQXR0cmlidXRlTmFtZSwKKyAgICAgICAgYW5kIHNldElkRm9yU3R5bGVS
ZXNvbHV0aW9uLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxldGlv
blVJKTogVXNlIHNldElkQXR0cmlidXRlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlSW5zZXJ0SG9yaXpvbnRhbFJ1bGUpOiBE
aXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVzZSBpc0lk
QXR0cmlidXRlTmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcik6IFVzZSBnZXRJZEF0dHJpYnV0ZS4KKyAgICAgICAgKiBodG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5h
bWVNYXRjaCk6IFVzZSBnZXRJZEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xs
ZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBVc2UgZ2V0SWRBdHRyaWJ1dGUuCisgICAgICAgICog
aHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
YXRhR3JpZENvbEVsZW1lbnQ6OmVuc3VyZUNvbHVtbik6IFVzZSBnZXRJZEF0dHJpYnV0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKTogVXNlIGlzSWRBdHRyaWJ1dGVOYW1lLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KTogVXNlIGlzSWRBdHRyaWJ1dGVOYW1lLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db2xsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVk
SXRlbSk6IEFkZGVkIG1pc3NpbmcgYnJhY2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBVc2UgZ2V0SWRBdHRyaWJ1dGUuCisgICAgICAg
ICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RnJhbWVFbGVtZW50QmFzZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBVc2UgaXNJZEF0dHJpYnV0
ZU5hbWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZSk6
IFVzZSBnZXRJZEF0dHJpYnV0ZS4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOiBVc2UgaXNJZEF0dHJpYnV0ZU5hbWUuCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOiBVc2UgaXNJZEF0dHJpYnV0ZU5hbWUuCisgICAgICAgIEFsc28gcmVzdHJ1Y3R1cmVk
IHRoZSBmdW5jdGlvbiBhIGJpdCB0byBtYWtlIGl0cyBzdHJ1Y3R1cmUgY2xlYXJlciBhbmQgYWRk
ZWQKKyAgICAgICAgYSBjb21tZW50IHBvaW50aW5nIG91dCB0aGF0IGl0IGNhbid0IGJlIHF1aXRl
IHJpZ2h0LgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVyKTogVXNlIGdldElkQXR0cmli
dXRlLgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVXNlIGlzSWRB
dHRyaWJ1dGVOYW1lLgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVz
ZSBpc0lkQXR0cmlidXRlTmFtZS4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRGb250OjpnZXRTVkdGb250QnlJZCk6IFVzZSBnZXRJZEF0
dHJpYnV0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bmFtZUZvckxheWVyKTogVXNlIGdl
dElkQXR0cmlidXRlLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSk6IFVzZSBnZXRJ
ZEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIp
OiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IFVzZSBnZXRJZEF0dHJpYnV0ZS4K
KyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKTogVXNlIGlzSWRBdHRyaWJ1dGVOYW1l
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6IFVzZSBpc0lkQXR0cmlidXRlTmFtZS4KKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVz
ZSBpc0lkQXR0cmlidXRlTmFtZS4KKwogMjAxMC0wNS0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlZCBiaW5kaW5ncyB0ZXN0IHJlc3VsdHMgZm9yIGNo
YW5nZSBpbiBKYXZhU2NyaXB0IGhvc3QgY2FsbGluZyBjb252ZW50aW9uIGNoYW5nZQpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNr
c2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQpAQCAtNjY2
LDcgKzY2Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAg
ICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5k
IGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUg
YnVmZmVyLgogICAgIGlmIChtX2VsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIG1hdGNoUnVsZXNG
b3JMaXN0KHJ1bGVzLT5nZXRJRFJ1bGVzKG1fZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKS5pbXBs
KCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CisgICAgICAgIG1hdGNoUnVsZXNG
b3JMaXN0KHJ1bGVzLT5nZXRJRFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgaWYgKG1fZWxl
bWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKICAg
ICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcyA9IG1fc3R5bGVkRWxlbWVu
dC0+Y2xhc3NOYW1lcygpOwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpTZWxlY3RvckNoZWNrZXI6OgogICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0NsYXNzKCkg
JiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFzc05hbWVzKCkuY29udGFpbnMo
c2VsLT5tX3ZhbHVlKTsKIAogICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCkKLSAgICAgICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmdldElEQXR0cmlidXRl
KCkgPT0gc2VsLT5tX3ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0lEKCkgJiYgZS0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPm1fdmFsdWU7CiAgICAgICAgIAogICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2VsLT5hdHRyaWJ1dGUoKTsKIApJbmRleDog
V2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5jcHAJ
KHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAKQEAgLTE3
NSw3ICsxNzUsNyBAQCB2b2lkIEF0dHI6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCCiAK
IGJvb2wgQXR0cjo6aXNJZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHF1YWxpZmllZE5hbWUoKS5t
YXRjaGVzKG1fZWxlbWVudCA/IG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkgOiBpZEF0dHIp
OworICAgIHJldHVybiBxdWFsaWZpZWROYW1lKCkubWF0Y2hlcyhkb2N1bWVudCgpLT5pZEF0dHJp
YnV0ZU5hbWUoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysg
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcg
QEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgICwgbV9jb250
YWluc1dNTENvbnRlbnQoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fd2Vha1JlZmVyZW5jZShEb2N1
bWVudFdlYWtSZWZlcmVuY2U6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1faWRBdHRyaWJ1dGVOYW1l
KGlkQXR0cikKIHsKICAgICBtX2RvY3VtZW50ID0gdGhpczsKIApAQCAtODczLDcgKzg3NCw3IEBA
IFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICBlbHNlIGlmIChx
TmFtZS5uYW1lc3BhY2VVUkkoKSA9PSBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJKQog
ICAgICAgICBlID0gTWF0aE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZU1hdGhNTEVsZW1lbnQocU5h
bWUsIHRoaXMsIGNyZWF0ZWRCeVBhcnNlcik7CiAjZW5kaWYKLSAgICAKKwogICAgIGlmICghZSkK
ICAgICAgICAgZSA9IEVsZW1lbnQ6OmNyZWF0ZShxTmFtZSwgZG9jdW1lbnQoKSk7CiAKQEAgLTkx
Nyw3ICs5MTgsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgCiAg
ICAgICAgIGZvciAoTm9kZSAqbiA9IHRyYXZlcnNlTmV4dE5vZGUoKTsgbiAhPSAwOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsK
LSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUoZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IGVsZW1lbnRJZCkgeworICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldElkQXR0cmlidXRl
KCkgPT0gZWxlbWVudElkKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZHVwbGljYXRlSWRzLnJl
bW92ZShlbGVtZW50SWQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9lbGVtZW50c0J5
SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
Q29sb3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRl
ZFNldC5oPgpAQCAtOTgwLDYgKzk4MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqKTsKICAgICBNZWRpYUNhblN0
YXJ0TGlzdGVuZXIqIHRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKTsKIAorICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faWRBdHRy
aWJ1dGVOYW1lOyB9CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGJvb2wgaXNY
SFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC0xMjU2LDYgKzEyNTksOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxEb2N1bWVudFdlYWtSZWZlcmVuY2U+IG1fd2Vha1JlZmVyZW5jZTsKIAogICAgIEhh
c2hTZXQ8TWVkaWFDYW5TdGFydExpc3RlbmVyKj4gbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzOwor
CisgICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0cmlidXRlTmFtZTsKIH07CiAKIGlubGluZSBib29s
IERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdApJ
bmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMzcsNyAr
MTM3LDggQEAgTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29ucwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgZ2V0SWRBdHRyaWJ1dGUgaW5zdGVhZCBvZiBpZEZv
clN0eWxlUmVzb2x1dGlvbi4KKyAgICAgICAgaWYgKG5vZGUtPmhhc0lEKCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGVsZW1lbnRJZCkK
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYwNDQ0KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NiwyMSArMjA2LDYgQEAgTm9kZTo6Tm9kZVR5cGUgRWxlbWVudDo6bm9kZVR5cGUoKSBjb25zdAog
ICAgIHJldHVybiBFTEVNRU5UX05PREU7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVu
dDo6Z2V0SURBdHRyaWJ1dGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgdHdv
IHByb2JsZW1zIHdpdGggdGhpcyBmdW5jdGlvbiBmb3IgZ2VuZXJhbCBwdXJwb3NlIHVzZS4KLSAg
ICAvLwotICAgIC8vIDEpIElmIHRoaXMgaXMgbm90IGEgU3R5bGVkRWxlbWVudCwgdGhlbiB0aGUg
cmVzdWx0IHdpbGwgYWx3YXlzIGJlIG51bGwuCi0gICAgLy8gMikgSWYgdGhlIGRvY3VtZW50IHRo
aXMgZWxlbWVudCBpcyBwYXJ0IG9mIGlzIGluIGNvbXBhdGliaWxpdHkgbW9kZQotICAgIC8vIChp
bkNvbXBhdE1vZGUpLCB0aGVuIHRoZSBJRCB3aWxsIGJlIGxvd2VyY2FzZWQuCi0gICAgLy8KLSAg
ICAvLyBTZWUgU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUgZm9yIGRldGFpbHMu
IEJlY2F1c2Ugb2YgdGhlc2UgaXNzdWVzLAotICAgIC8vIHRoaXMgZnVuY3Rpb24gYW5kIE5hbWVk
Tm9kZU1hcDo6aWQgc2hvdWxkIGJvdGggcHJvYmFibHkgYmUgcmVuYW1lZCB0byBtYWtlIGl0Ci0g
ICAgLy8gY2xlYXIgdGhpcyBkb2VzIG5vdCBnaXZlIHRoZSBzYW1lIHJlc3VsdCBhcyBnZXRBdHRy
aWJ1dGUuCi0KLSAgICByZXR1cm4gbmFtZWRBdHRyTWFwID8gbmFtZWRBdHRyTWFwLT5pZCgpIDog
bnVsbEF0b207Ci19Ci0KIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc0F0dHJpYnV0ZU5TKG5hbWUubmFt
ZXNwYWNlVVJJKCksIG5hbWUubG9jYWxOYW1lKCkpOwpAQCAtNTQxLDEwICs1MjYsMTEgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1dAogICAgIH0KICNlbmRpZgogCi0g
ICAgaWYgKG5hbWVkQXR0ck1hcCkKKyAgICBpZiAobmFtZWRBdHRyTWFwKSB7CiAgICAgICAgIGlm
IChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lLCBpZ25vcmVDYXNlKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7
Ci0gICAgCisgICAgfQorCiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCkBAIC01NjIsMTIgKzU0
OCwxNSBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTCiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
dGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCi0gICAgLy8gYWxsb2NhdGUgYXR0cmlidXRl
bWFwIGlmIG5lY2Vzc2FyeQorICAgIC8vIEFsbG9jYXRlIGF0dHJpYnV0ZSBtYXAgaWYgbmVjZXNz
YXJ5LgogICAgIEF0dHJpYnV0ZSogb2xkID0gYXR0cmlidXRlcyhmYWxzZSktPmdldEF0dHJpYnV0
ZUl0ZW0obG9jYWxOYW1lLCBmYWxzZSk7CiAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVy
c2lvbigpOwogCi0gICAgaWYgKGxvY2FsTmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKS5sb2NhbE5h
bWUoKSkKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBwcm9iYWJseSBub3QgY29ycmVjdCBm
b3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGRvY3VtZW50IGhhcyBhbiBpZCBhdHRyaWJ1dGUKKyAgICAv
LyB3aXRoIGEgbm9uLW51bGwgbmFtZXNwYWNlLCBiZWNhdXNlIGl0IHdpbGwgcmV0dXJuIHRydWUg
aWYgdGhlIGxvY2FsIG5hbWUgaGFwcGVucyB0byBtYXRjaAorICAgIC8vIGJ1dCB0aGUgbmFtZXNw
YWNlIGRvZXMgbm90LgorICAgIGlmIChsb2NhbE5hbWUgPT0gZG9jdW1lbnQoKS0+aWRBdHRyaWJ1
dGVOYW1lKCkubG9jYWxOYW1lKCkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUo
KSA6IG51bGxBdG9tLCB2YWx1ZSk7CiAKICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKQpA
QCAtNTkzLDEwICs1ODIsMTAgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaQogewogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKLSAgICAvLyBh
bGxvY2F0ZSBhdHRyaWJ1dGVtYXAgaWYgbmVjZXNzYXJ5CisgICAgLy8gQWxsb2NhdGUgYXR0cmli
dXRlIG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVzKGZh
bHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAotICAgIGlmIChuYW1lID09IGlkQXR0cmli
dXRlTmFtZSgpKQorICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAgICAgdXBk
YXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKIAogICAgIGlmIChv
bGQgJiYgdmFsdWUuaXNOdWxsKCkpCkBAIC02NzgsNyArNjY3LDcgQEAgdm9pZCBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVNYXAoUGFzc1JlZlB0cgogCiAgICAgLy8gSWYgc2V0dGluZyB0aGUgd2hvbGUg
bWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2UgbmVlZCB0byBjYWxsIHVwZGF0ZUlkLgog
Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWROYW1lID0gaWRBdHRyaWJ1dGVOYW1lKCk7Cisg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWROYW1lID0gZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVO
YW1lKCk7CiAgICAgQXR0cmlidXRlKiBvbGRJZCA9IG5hbWVkQXR0ck1hcCA/IG5hbWVkQXR0ck1h
cC0+Z2V0QXR0cmlidXRlSXRlbShpZE5hbWUpIDogMDsKICAgICBBdHRyaWJ1dGUqIG5ld0lkID0g
bGlzdCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oaWROYW1lKSA6IDA7CiAKQEAgLTgwMiw3ICs3
OTEsNyBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogICAgIGlmICho
YXNJRCgpKSB7CiAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFw
LmdldCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRy
aWJ1dGVJdGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJ
dGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1l
KCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAg
ICAgICAgICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsKICAgICAgICAg
fQpAQCAtODEzLDcgKzgwMiw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
CiB7CiAgICAgaWYgKGhhc0lEKCkpIHsKICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMg
PSBuYW1lZEF0dHJNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0g
YXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICAgICAg
QXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShkb2N1bWVudCgpLT5p
ZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlz
TnVsbCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZUlkKGlkSXRlbS0+dmFsdWUoKSwgbnVsbEF0
b20pOwogICAgICAgICB9CkBAIC0xMTYyLDcgKzExNTEsNyBAQCB2b2lkIEVsZW1lbnQ6OmZvcm1h
dEZvckRlYnVnZ2VyKGNoYXIqIGJ1CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgIH0KICAgICAg
ICAgICAKLSAgICBzID0gZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICBzID0g
Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgaWYg
KHJlc3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICByZXN1bHQgKz0gIjsgIjsKQEAgLTE1
MzcsOSArMTUyNiw0IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKGNvbnN0IFF1YWwK
ICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGdl
dEF0dHJpYnV0ZShuYW1lKSkpOwogfQogCi1jb25zdCBRdWFsaWZpZWROYW1lJiBFbGVtZW50Ojpy
YXJlSURBdHRyaWJ1dGVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmFyZURhdGEoKS0+bV9p
ZEF0dHJpYnV0ZU5hbWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTkgKzI1LDE0
IEBACiAjaWZuZGVmIEVsZW1lbnRfaAogI2RlZmluZSBFbGVtZW50X2gKIAotI2luY2x1ZGUgIkNv
bnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZUVudHJ5LmgiCiAjaW5jbHVkZSAiTmFtZWRO
b2RlTWFwLmgiCi0jaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXR0cjsKIGNsYXNzIEF0dHJp
YnV0ZTsKLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDbGllbnRSZWN0OwogY2xh
c3MgQ2xpZW50UmVjdExpc3Q7CiBjbGFzcyBFbGVtZW50UmFyZURhdGE7CkBAIC0xMTEsOSArMTA2
LDYgQEAgcHVibGljOgogICAgIGJvb2wgZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYXN0R2V0QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKIAotICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhl
IHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUuIEZhc3RlciB0aGFuIGNhbGxpbmcgZmFzdEdldEF0
dHJpYnV0ZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldElEQXR0cmlidXRlKCkgY29uc3Q7
Ci0KICAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzQXR0cmli
dXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CkBAIC0xMjUsNyArMTE3LDE0IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEF0dHJp
YnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJp
bmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93
ZWQpOwogCi0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7
CisgICAgYm9vbCBpc0lkQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRJZEF0dHJpYnV0ZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICAvLyBDYWxsIHRo
aXMgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGZvciBzdHlsZSByZXNvbHV0
aW9uIHB1cnBvc2VzLgorICAgIC8vIFRoZSB2YWx1ZSB3aWxsIGFscmVhZHkgYmUgbG93ZXJjYXNl
ZCBpZiB0aGUgZG9jdW1lbnQgaXMgaW4gY29tcGF0aWJpbGl0eSBtb2RlLAorICAgIC8vIHNvIHRo
aXMgZnVuY3Rpb24gaXMgbm90IHN1aXRhYmxlIGZvciBub24tc3R5bGUgdXNlcy4KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lk
IHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9IHRydWUpOwogICAgIHZvaWQgc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVlZGVkID0gdHJ1ZSk7CkBAIC0zMDQsNyAr
MzAzLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2Rl
VHlwZSk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwotICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHJhcmVJREF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAgICAK
ICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTM2MiwxMSArMzYwLDYgQEAgaW5s
aW5lIEVsZW1lbnQqIE5vZGU6OnBhcmVudEVsZW1lbnQoKSBjbwogICAgIHJldHVybiBwYXJlbnQg
JiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocGFyZW50
KSA6IDA7CiB9CiAKLWlubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBFbGVtZW50OjppZEF0dHJp
YnV0ZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZUlEQXR0
cmlidXRlTmFtZSgpIDogSFRNTE5hbWVzOjppZEF0dHI7Ci19Ci0KIGlubGluZSBOYW1lZE5vZGVN
YXAqIEVsZW1lbnQ6OmF0dHJpYnV0ZXMoYm9vbCByZWFkb25seSkgY29uc3QKIHsKICAgICBpZiAo
IWlzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpKQpAQCAtNDExLDYgKzQwNCwzMSBAQCBpbmxpbmUgY29u
c3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQog
Ci19IC8vbmFtZXNwYWNlCitpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZv
clN0eWxlUmVzb2x1dGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0lEKCkpOworICAgIHJl
dHVybiBuYW1lZEF0dHJNYXAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7Cit9CisKK2lubGluZSBi
b29sIEVsZW1lbnQ6OmlzSWRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgcHJvYmFibHkg
bm90IGNvcnJlY3QgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBkb2N1bWVudCBoYXMgYW4gaWQgYXR0
cmlidXRlCisgICAgLy8gd2l0aCBhIG5vbi1udWxsIG5hbWVzcGFjZSwgYmVjYXVzZSBpdCB3aWxs
IHJldHVybiBmYWxzZSwgYSBmYWxzZSBuZWdhdGl2ZSwgaWYgdGhlIHByZWZpeGVzCisgICAgLy8g
ZG9uJ3QgbWF0Y2ggYnV0IHRoZSBsb2NhbCBuYW1lIGFuZCBuYW1lc3BhY2UgYm90aCBkby4gSG93
ZXZlciwgc2luY2UgdGhpcyBoYXMgYmVlbiBsaWtlIHRoaXMKKyAgICAvLyBmb3IgYSB3aGlsZSBh
bmQgdGhlIGNvZGUgcGF0aHMgbWF5IGJlIGhvdCwgd2UnbGwgaGF2ZSB0byBtZWFzdXJlIHBlcmZv
cm1hbmNlIGlmIHdlIGZpeCBpdC4KKyAgICByZXR1cm4gYXR0cmlidXRlTmFtZSA9PSBkb2N1bWVu
dCgpLT5pZEF0dHJpYnV0ZU5hbWUoKTsKK30KKworaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYg
RWxlbWVudDo6Z2V0SWRBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIHJldHVybiBmYXN0R2V0QXR0
cmlidXRlKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKK30KKworaW5saW5lIHZvaWQg
RWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBzZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsKK30K
KworfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50UmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2
aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBEYXZpZCBTbWl0aCA8Y2F0ZmlzaC5tYW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCiBjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRh
IHsKIHB1YmxpYzoKICAgICBFbGVtZW50UmFyZURhdGEoKTsKQEAgLTQwLDcgKzM4LDYgQEAgcHVi
bGljOgogCiAgICAgSW50U2l6ZSBtX21pbmltdW1TaXplRm9yUmVzaXppbmc7CiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7Ci0gICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0
cmlidXRlTmFtZTsKIH07CiAKIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJl
c2l6aW5nKCkKQEAgLTUwLDcgKzQ3LDYgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1T
aXplRm9yUmVzaQogCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEoKQog
ICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6
aW5nKCkpCi0gICAgLCBtX2lkQXR0cmlidXRlTmFtZShpZEF0dHIpCiB7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsOCArMjI1LDggQEAgdm9pZCBOYW1lZE5vZGVN
YXA6OnNldEF0dHJpYnV0ZXMoY29uc3QgTgogCiAgICAgLy8gSWYgYXNzaWduaW5nIHRoZSBtYXAg
Y2hhbmdlcyB0aGUgaWQgYXR0cmlidXRlLCB3ZSBuZWVkIHRvIGNhbGwKICAgICAvLyB1cGRhdGVJ
ZC4KLSAgICBBdHRyaWJ1dGUqIG9sZElkID0gZ2V0QXR0cmlidXRlSXRlbShtX2VsZW1lbnQtPmlk
QXR0cmlidXRlTmFtZSgpKTsKLSAgICBBdHRyaWJ1dGUqIG5ld0lkID0gb3RoZXIuZ2V0QXR0cmli
dXRlSXRlbShtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICBBdHRyaWJ1dGUqIG9s
ZElkID0gZ2V0QXR0cmlidXRlSXRlbShtX2VsZW1lbnQtPmRvY3VtZW50KCktPmlkQXR0cmlidXRl
TmFtZSgpKTsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0gb3RoZXIuZ2V0QXR0cmlidXRlSXRlbSht
X2VsZW1lbnQtPmRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKIAogICAgIGlmIChvbGRJ
ZCB8fCBuZXdJZCkKICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVJZChvbGRJZCA/IG9sZElkLT52
YWx1ZSgpIDogbnVsbEF0b20sIG5ld0lkID8gbmV3SWQtPnZhbHVlKCkgOiBudWxsQXRvbSk7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9OYW1lZE5vZGVNYXAuaAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE5v
ZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEwICsyOCw2
IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5o
IgogCi0jaWZkZWYgX19PQkpDX18KLSNkZWZpbmUgaWQgaWRfQVZPSURfS0VZV09SRAotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTm9kZTsKQEAgLTg1LDggKzgxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgYWRkQXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7CiAgICAgfQog
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAg
ICB2b2lkIHNldElEKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpIHsgbV9pZCA9IG5ld0lkOyB9
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEZvclN0eWxlUmVzb2x1dGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faWRGb3JTdHlsZVJlc29sdXRpb247IH0KKyAgICB2b2lkIHNldElkRm9yU3R5bGVS
ZXNvbHV0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpIHsgbV9pZEZvclN0eWxlUmVzb2x1
dGlvbiA9IG5ld0lkOyB9CiAKICAgICAvLyBGSVhNRTogVGhlc2UgdHdvIGZ1bmN0aW9ucyBzaG91
bGQgYmUgbWVyZ2VkIGlmIHBvc3NpYmxlLgogICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQoY29uc3Qg
TmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3Q7CkBAIC0xMjQsNyArMTIwLDcgQEAgcHJpdmF0
ZToKICAgICBTcGFjZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKICAgICBFbGVtZW50KiBtX2Vs
ZW1lbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gbV9hdHRyaWJ1dGVzOwotICAg
IEF0b21pY1N0cmluZyBtX2lkOworICAgIEF0b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0
aW9uOwogfTsKIAogaW5saW5lIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpnZXRBdHRyaWJ1dGVJ
dGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CkBAIC0xMzgsNyArMTM0LDcgQEAg
aW5saW5lIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpnZXRBdHRyaQogfQogCiAvLyBXZSB1c2Ug
YSBib29sZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSBzbyB0aGF0IHRoZSBjYWxsZXIKLS8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvdXIgKGhh
c0F0dHJpYnV0ZSBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVyZWFzIGdldEF0dHJpYnV0ZSBpcyBub3Qp
LgorLy8gY2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5zaXRp
dmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KIGlubGluZSBBdHRyaWJ1dGUqIE5hbWVk
Tm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgo
KTsKQEAgLTE2MSw2ICsxNTcsNCBAQCBpbmxpbmUgQXR0cmlidXRlKiBOYW1lZE5vZGVNYXA6Omdl
dEF0dHJpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI3VuZGVmIGlkCi0KICNlbmRpZiAv
LyBOYW1lZE5vZGVNYXBfaApJbmRleDogV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcAkocmV2aXNpb24gNjA0
NDQpCisrKyBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUw
LDcgKzUwLDggQEAgTm9kZSogU3RhdGljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdAogICAg
IHNpemVfdCBsZW5ndGggPSBtX25vZGVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGVzW2ldLmdldCgp
OwotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBnZXRJZEF0dHJpYnV0ZSBpbnN0ZWFk
IG9mIGlkRm9yU3R5bGVSZXNvbHV0aW9uLgorICAgICAgICBpZiAobm9kZS0+aGFzSUQoKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldElkQXR0cmlidXRlKCkgPT0gZWxlbWVudElk
KQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2RvbS9T
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmNwcAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5NCw2ICsxOTQsNyBAQCB2b2lkIFN0eWxlZEVsZW1l
bnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0CiAgICAgICAgIGlmIChuYW1lZEF0dHJNYXApCiAgICAg
ICAgICAgICBtYXBwZWRBdHRyaWJ1dGVzKCktPmRlY2xBZGRlZCgpOwogICAgIH0KKwogICAgIHVw
ZGF0ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChhdHRyKTsKIH0KIApAQCAtMjI3LDE2ICsyMjgsMTUg
QEAgdm9pZCBTdHlsZWRFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZQogCiB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7Ci0gICAgICAgIC8vIHVuaXF1
ZSBpZAorICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAg
IHNldEhhc0lEKCFhdHRyLT5pc051bGwoKSk7CiAgICAgICAgIGlmIChuYW1lZEF0dHJNYXApIHsK
ICAgICAgICAgICAgIGlmIChhdHRyLT5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBuYW1lZEF0
dHJNYXAtPnNldElEKG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNl
dElkRm9yU3R5bGVSZXNvbHV0aW9uKG51bGxBdG9tKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGRv
Y3VtZW50KCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+
c2V0SUQoYXR0ci0+dmFsdWUoKS5sb3dlcigpKTsKKyAgICAgICAgICAgICAgICBuYW1lZEF0dHJN
YXAtPnNldElkRm9yU3R5bGVSZXNvbHV0aW9uKGF0dHItPnZhbHVlKCkubG93ZXIoKSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJRChhdHRyLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNldElkRm9yU3R5bGVSZXNv
bHV0aW9uKGF0dHItPnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjbGFzc0F0dHIpCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2
MDQ0NCkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjo6cmVzcG9uZFRvQ2gKIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRp
b25VSSgpCiB7CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKLSAgICBjb250YWluZXItPnNl
dEF0dHJpYnV0ZShjb250YWluZXItPmlkQXR0cmlidXRlTmFtZSgpLCBjb250YWluZXJFbGVtZW50
SWRlbnRpZmllcik7CisgICAgY29udGFpbmVyLT5zZXRJZEF0dHJpYnV0ZShjb250YWluZXJFbGVt
ZW50SWRlbnRpZmllcik7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUg
PSBjb250YWluZXItPmdldElubGluZVN0eWxlRGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwpAQCAtMjAyLDcgKzIw
Miw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOwogCiAgICAgUmVmUHRyPEhUTUxE
aXZFbGVtZW50PiBvdXRsaW5lID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+ZG9j
dW1lbnQoKSk7Ci0gICAgb3V0bGluZS0+c2V0QXR0cmlidXRlKG91dGxpbmUtPmlkQXR0cmlidXRl
TmFtZSgpLCBvdXRsaW5lRWxlbWVudElkZW50aWZpZXIpOworICAgIG91dGxpbmUtPnNldElkQXR0
cmlidXRlKG91dGxpbmVFbGVtZW50SWRlbnRpZmllcik7CiAKICAgICBjb25zdCBpbnQgYm9yZGVy
V2lkdGggPSA0OwogICAgIGNvbnN0IGludCBib3JkZXJSYWRpdXMgPSA2OwpAQCAtMjI1LDcgKzIy
NSw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVmUHRyPERlbGV0ZUJ1dHRvbj4gYnV0dG9uID0gRGVsZXRlQnV0dG9u
OjpjcmVhdGUobV90YXJnZXQtPmRvY3VtZW50KCkpOwotICAgIGJ1dHRvbi0+c2V0QXR0cmlidXRl
KGJ1dHRvbi0+aWRBdHRyaWJ1dGVOYW1lKCksIGJ1dHRvbkVsZW1lbnRJZGVudGlmaWVyKTsKKyAg
ICBidXR0b24tPnNldElkQXR0cmlidXRlKGJ1dHRvbkVsZW1lbnRJZGVudGlmaWVyKTsKIAogICAg
IGNvbnN0IGludCBidXR0b25XaWR0aCA9IDMwOwogICAgIGNvbnN0IGludCBidXR0b25IZWlnaHQg
PSAzMDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDYwNDQ0KQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NzQsNyArNDc0LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKAog
ewogICAgIFJlZlB0cjxIVE1MSFJFbGVtZW50PiBydWxlID0gSFRNTEhSRWxlbWVudDo6Y3JlYXRl
KGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAg
cnVsZS0+c2V0QXR0cmlidXRlKHJ1bGUtPmlkQXR0cmlidXRlTmFtZSgpLCB2YWx1ZSk7CisgICAg
ICAgIHJ1bGUtPnNldElkQXR0cmlidXRlKHZhbHVlKTsKICAgICByZXR1cm4gZXhlY3V0ZUluc2Vy
dE5vZGUoZnJhbWUsIHJ1bGUucmVsZWFzZSgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDYgQEAKICNkZWZpbmUgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmRfaAogCiAjaW5jbHVkZSAi
RWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCkBAIC01Miw3ICs1MSw2IEBACiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
LSNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBk
b2N1bWVudC0+YWRkTmFtZWRJdGVtKG5ld05hbWUpOwogICAgICAgICB9CiAgICAgICAgIG1fbmFt
ZSA9IG5ld05hbWU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVO
YW1lKCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKGF0dHItPm5hbWUoKSkp
IHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudCo+KHRoaXMtPmRvY3VtZW50KCkpOwpAQCAtMTE4LDcgKzExOCw3IEBAIFJlbmRlck9i
amVjdCogSFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVIKICAgICAgICAgaWYgKCFjb2RlQmFzZS5p
c051bGwoKSkKICAgICAgICAgICAgIGFyZ3Muc2V0KCJjb2RlQmFzZSIsIGNvZGVCYXNlKTsKIAot
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBnZXRBdHRyaWJ1dGUoZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSA/IG5hbWVBdHRyIDogaWRBdHRyaWJ1dGVOYW1lKCkpOworICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpID8gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKSA6IGdldElkQXR0cmlidXRlKCk7CiAgICAgICAg
IGlmICghbmFtZS5pc051bGwoKSkKICAgICAgICAgICAgIGFyZ3Muc2V0KCJuYW1lIiwgbmFtZSk7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJjaGl2ZSA9IGdldEF0dHJpYnV0ZShhcmNo
aXZlQXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDYwNDQ0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2
LDcgKzI2Niw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKEUKICAg
ICAKICAgICBIVE1MRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVu
dCk7CiAgICAgaWYgKCFjaGVja05hbWUpCi0gICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUo
ZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG5hbWU7CisgICAgICAgIHJldHVybiBlLT5nZXRJZEF0
dHJpYnV0ZSgpID09IG5hbWU7CiAKICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGlt
YWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgIC8vIGJ5IG5hbWUg
KHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQpAQCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgSFRNTENv
bGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKEUKICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
c2VsZWN0VGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBlLT5nZXRB
dHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmli
dXRlTmFtZSgpKSAhPSBuYW1lOworICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIp
ID09IG5hbWUgJiYgZS0+Z2V0SWRBdHRyaWJ1dGUoKSAhPSBuYW1lOwogfQogCiBOb2RlKiBIVE1M
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAg
LTMxOSw3ICszMTksNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBj
CiAgICAgICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihlbGVtZW50KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5n
ZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAg
ICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBp
ZCBjYWNoZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAkocmV2
aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBIVE1MRGF0YUdyaWRDb2xFbGVt
ZW50OjplbnN1cmVDb2x1bQogewogICAgIGlmIChtX2NvbHVtbikKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29sdW1uID0gRGF0YUdyaWRDb2x1bW46OmNyZWF0ZShnZXRBdHRyaWJ1dGUoaWRBdHRy
aWJ1dGVOYW1lKCkpLCBsYWJlbCgpLCB0eXBlKCksIHByaW1hcnkoKSwgc29ydGFibGUoKSk7Cisg
ICAgbV9jb2x1bW4gPSBEYXRhR3JpZENvbHVtbjo6Y3JlYXRlKGdldElkQXR0cmlidXRlKCksIGxh
YmVsKCksIHR5cGUoKSwgcHJpbWFyeSgpLCBzb3J0YWJsZSgpKTsKIH0KIAogdm9pZCBIVE1MRGF0
YUdyaWRDb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKQEAgLTE2Nyw4ICsx
NjcsOCBAQCB2b2lkIEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkCiAgICAgICAg
IGNvbHVtbigpLT5zZXRTb3J0YWJsZShzb3J0YWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gc29ydGRpcmVjdGlvbkF0dHIpCiAgICAgICAgIGNvbHVtbigpLT5zZXRTb3J0RGly
ZWN0aW9uKHNvcnREaXJlY3Rpb24oKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlk
QXR0cmlidXRlTmFtZSgpKQotICAgICAgICBjb2x1bW4oKS0+c2V0SWQoZ2V0QXR0cmlidXRlKGlk
QXR0cmlidXRlTmFtZSgpKSk7CisgICAgZWxzZSBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ci0+
bmFtZSgpKSkKKyAgICAgICAgY29sdW1uKCktPnNldElkKGdldElkQXR0cmlidXRlKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYwNDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVh
bGkKICAgICAKIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpIHx8
IGF0dHItPm5hbWUoKSA9PSBjbGFzc0F0dHIgfHwgYXR0ci0+bmFtZSgpID09IHN0eWxlQXR0cikK
KyAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSB8fCBhdHRyLT5uYW1lKCkg
PT0gY2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCiAgICAgICAgIHJldHVy
biBTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIAogICAgIFN0cmlu
ZyBpbmRleHN0cmluZzsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9u
OjpnZXROYW1lZEZvcgogICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmb3JtLT5tX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSA9IChhdHRyTmFtZSA9PSBpZEF0dHIpID8gZS0+aWRBdHRyaWJ1dGVOYW1lKCkgOiBh
dHRyTmFtZTsKLSAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkgJiYgZS0+Z2V0QXR0cmli
dXRlKGF0dHJpYnV0ZU5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRh
YmxlKCkgJiYgZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAg
ICBmb3VuZElucHV0RWxlbWVudHMgPSB0cnVlOwogICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVO
dW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CkBAIC0xMjMsOCArMTIyLDcgQEAgRWxl
bWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcgogICAgIGlmICghZm91bmRJbnB1
dEVsZW1lbnRzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2lt
YWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGUgPSBmb3JtLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gKGF0dHJOYW1lID09IGlkQXR0cikgPyBlLT5pZEF0dHJp
YnV0ZU5hbWUoKSA6IGF0dHJOYW1lOwotICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShh
dHRyaWJ1dGVOYW1lKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRl
KGF0dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1i
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIC0tZHVw
bGljYXRlTnVtYmVyOwpAQCAtMTc2LDkgKzE3NCwxMCBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rp
b246Om5leHROYW1lZEl0ZW0oCiAgICAgLy8gY2hlY2tzIGlmIHdlIGFyZSBvbiB0aGUgbmFtZUF0
dHIgaGFsZiBvZiB0aGUgaXRlcmF0aW9uIGFuZCBza2lwcyBvdmVyIGFueQogICAgIC8vIHRoYXQg
YWxzbyBoYXZlIHRoZSBzYW1lIGlkQXR0cmlidXRlTmFtZS4KICAgICBFbGVtZW50KiBpbXBsID0g
bmV4dE5hbWVkSXRlbUludGVybmFsKG5hbWUpOwotICAgIGlmIChtX2lkc0RvbmUpCi0gICAgICAg
IHdoaWxlIChpbXBsICYmIGltcGwtPmdldEF0dHJpYnV0ZShpbXBsLT5pZEF0dHJpYnV0ZU5hbWUo
KSkgPT0gbmFtZSkKKyAgICBpZiAobV9pZHNEb25lKSB7CisgICAgICAgIHdoaWxlIChpbXBsICYm
IGltcGwtPmdldElkQXR0cmlidXRlKCkgPT0gbmFtZSkKICAgICAgICAgICAgIGltcGwgPSBuZXh0
TmFtZWRJdGVtSW50ZXJuYWwobmFtZSk7CisgICAgfQogICAgIHJldHVybiBpbXBsOwogfQogCkBA
IC0xOTQsNyArMTkzLDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNo
ZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5z
aXplKCk7ICsraSkgewogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZi0+bV9h
c3NvY2lhdGVkRWxlbWVudHNbaV07CiAgICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJp
YnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkQXR0clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAg
ICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8v
IGFkZCB0byBpZCBjYWNoZQpAQCAtMjIxLDcgKzIyMCw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0
aW9uOjp1cGRhdGVOYW1lQ2FjaGUKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5t
X2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCog
ZSA9IGYtPm1faW1hZ2VFbGVtZW50c1tpXTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7CiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5w
dXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAgICAgLy8g
YWRkIHRvIGlkIGNhY2hlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJ
KHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXQKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIp
CiAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CisgICAg
ZWxzZSBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICAvLyBJ
bXBvcnRhbnQgdG8gY2FsbCB0aHJvdWdoIHRvIGJhc2UgZm9yIHRoZSBpZCBhdHRyaWJ1dGUgc28g
dGhlIGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgbV9mcmFtZU5hbWUgPSBhdHRyLT52
YWx1ZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNl
dE5hbWUoKQogewogICAgIG1fZnJhbWVOYW1lID0gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAg
ICBpZiAobV9mcmFtZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIG1fZnJhbWVOYW1lID0gZ2V0QXR0
cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgbV9mcmFtZU5hbWUgPSBnZXRJZEF0
dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChGcmFtZSogcGFyZW50RnJhbWUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpKQogICAgICAgICBtX2ZyYW1lTmFtZSA9IHBhcmVudEZyYW1lLT50cmVlKCktPnVu
aXF1ZUNoaWxkTmFtZShtX2ZyYW1lTmFtZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0o
bmV3TmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgeworICAgIH0gZWxzZSBp
ZiAoaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5ld0lkID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGluRG9jdW1lbnQo
KSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4odGhpcy0+ZG9jdW1l
bnQoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDI1
ICsxMDUsMzAgQEAgSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRQogICAg
IHJldHVybiAwOyAgICAKIH0KICAgICAKLXZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3ZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRlKQogewotICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwotICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0
dHJpYnV0ZU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBuYW1lQXR0cikgewotICAgICAgICBEb2N1bWVu
dCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cmlidXRl
TmFtZSgpKSB7CisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgc2VlbXMgd3JvbmcgZm9yIFhNTCBk
b2N1bWVudHMuCisgICAgLy8gRWl0aGVyIHRoZSBpZCBvciBuYW1lIHdpbGwgYmUgdXNlZCBkZXBl
bmRpbmcgb24gdGhlIG9yZGVyIHRoZSBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQuCisKKyAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHJpYnV0ZS0+bmFtZSgpOworICAgIGlmIChp
c0lkQXR0cmlidXRlTmFtZShhdHRyTmFtZSkgfHwgYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYg
KGlzSWRBdHRyaWJ1dGVOYW1lKGF0dHJOYW1lKSkgewogICAgICAgICAgICAgLy8gQ2FsbCBiYXNl
IGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgotICAgICAgICAgICAgSFRNTEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgaWYgKGRvYy0+aXNI
VE1MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyaWJ1dGUpOworICAgICAgICAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBkb2MtPnJl
bW92ZUltYWdlTWFwKHRoaXMpOwotICAgICAgICBTdHJpbmcgbWFwTmFtZSA9IGF0dHItPnZhbHVl
KCk7CisgICAgICAgIGRvY3VtZW50LT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKKyAgICAgICAgU3Ry
aW5nIG1hcE5hbWUgPSBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgICAgIGlmIChtYXBOYW1lWzBd
ID09ICcjJykKICAgICAgICAgICAgIG1hcE5hbWUgPSBtYXBOYW1lLnN1YnN0cmluZygxKTsKLSAg
ICAgICAgbV9uYW1lID0gZG9jLT5pc0hUTUxEb2N1bWVudCgpID8gbWFwTmFtZS5sb3dlcigpIDog
bWFwTmFtZTsKLSAgICAgICAgZG9jLT5hZGRJbWFnZU1hcCh0aGlzKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBt
X25hbWUgPSBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSA/IG1hcE5hbWUubG93ZXIoKSA6IG1h
cE5hbWU7CisgICAgICAgIGRvY3VtZW50LT5hZGRJbWFnZU1hcCh0aGlzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
aWJ1dGUpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MTWFwRWxlbWVudDo6
YXJlYXMoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDYw
NDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDcgQEAgRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0
ZXIoRQogICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgICAgIGlmIChl
LT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKKyAgICAgICAg
ICAgICAgICBpZiAoZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE5hbWVkSXRlbXM6CkBAIC03NCwxNCArNzQsMTQgQEAgRWxlbWVudCogSFRNTE5h
bWVDb2xsZWN0aW9uOjppdGVtQWZ0ZXIoRQogICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0
QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoYXBwbGV0
VGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRy
KSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKSA9PSBt
X25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIp
ID09IG1fbmFtZSB8fCBlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFz
VGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZS0+Z2V0QXR0
cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmli
dXRlTmFtZSgpKSA9PSBtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICgoZS0+Z2V0QXR0
cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25h
bWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9iamVj
dEVsZW1lbnQqPihlKS0+aXNEb2NOYW1lZEl0ZW0oKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShpbWdU
YWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIp
ID09IG1fbmFtZSB8fCAoZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKSA9PSBt
X25hbWUgJiYgZS0+aGFzQXR0cmlidXRlKG5hbWVBdHRyKSkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8fCAoZS0+Z2V0SWRBdHRy
aWJ1dGUoKSA9PSBtX25hbWUgJiYgZS0+aGFzQXR0cmlidXRlKG5hbWVBdHRyKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDYwNDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmkKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CiAg
ICAgICAgIH0KICAgICAgICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgeworICAgIH0gZWxzZSBpZiAoaXNJZEF0dHJp
YnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d0lkID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgaW5E
b2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAg
IEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlz
LT5kb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYwNDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIFBhc3NSZWZQdHI8SFRNTFBhcmFtRWxlbWVudD4gSFRNTFBh
cmFtRWwKIAogdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUo
KSkgeworICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAg
IC8vIE11c3QgY2FsbCBiYXNlIGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIGlm
IChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2
aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuaAkocmV2aXNpb24gNjA0
NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MiArMjQsMTIgQEAKICNpZm5kZWYgSFRNTFBhcnNlcl9oCiAjZGVmaW5lIEhUTUxQYXJzZXJfaAog
CisjaW5jbHVkZSAiSFRNTFBhcnNlckVycm9yQ29kZXMuaCIKKyNpbmNsdWRlICJNYXBwZWRBdHRy
aWJ1dGVFbnRyeS5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSAiSFRNTFBhcnNlckVycm9yQ29kZXMuaCIKLSNpbmNsdWRlICJNYXBwZWRB
dHRyaWJ1dGVFbnRyeS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3Niw5IEBAIFNWR0ZvbnRFbGVtZW50KiBD
YWNoZWRGb250OjpnZXRTVkdGb250QnkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0Zv
bnRFbGVtZW50Kj4obGlzdC0+aXRlbSgwKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdExlbmd0aDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBsaXN0LT5pdGVtKGkp
OwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pZEF0dHJpYnV0ZU5hbWUoKSkgIT0gZm9udE5h
bWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U1ZHRm9udEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOworICAgICAgICBp
ZiAoZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBmb250TmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50OwogICAgIH0KIAogICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySUZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJRnJhbWUuY3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJJRnJhbWUuaCIKIAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1MiwxMCAr
MTI1Miw5IEBAIFN0cmluZyBSZW5kZXJMYXllckJhY2tpbmc6Om5hbWVGb3JMYXllcigKICAgICBT
dHJpbmcgbmFtZSA9IHJlbmRlcmVyKCktPnJlbmRlck5hbWUoKTsKICAgICBpZiAoTm9kZSogbm9k
ZSA9IHJlbmRlcmVyKCktPm5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQotICAgICAgICAgICAgbmFtZSArPSAiICIgKyBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG5v
ZGUpLT50YWdOYW1lKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihub2RlKS0+aGFzSUQoKSkKLSAgICAgICAgICAgIG5h
bWUgKz0gIiBcJyIgKyBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG5vZGUpLT5nZXRJREF0dHJpYnV0
ZSgpICsgIlwnIjsKKyAgICAgICAgICAgIG5hbWUgKz0gIiAiICsgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUpLT50YWdOYW1lKCk7CisgICAgICAgIGlmIChub2RlLT5oYXNJRCgpKQorICAgICAg
ICAgICAgbmFtZSArPSAiIFwnIiArIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SWRB
dHRyaWJ1dGUoKSArICJcJyI7CiAgICAgfQogCiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmlzUmVm
bGVjdGlvbigpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE5ICsyOSwxNiBAQAogI2luY2x1
ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNp
ZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKQEAgLTUyLDYgKzQ5LDEwIEBACiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKKyNpZiBFTkFCTEUoUExV
R0lOX1BST1hZX0ZPUl9WSURFTykKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjZW5k
aWYKKwogI2lmIFBST0ZJTEVfTEFZRVJfUkVCVUlMRAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZp
c2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgi
CiAKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihT
VkdTdHlsZWRFbGVtZW50KiBub2RlKQogICAgICAgICA6IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cihub2RlKQogICAgICAgICAsIFJlbmRlclNWR1Jlc291cmNlKCkKLSAgICAgICAgLCBtX2lkKG5v
ZGUtPmdldElEQXR0cmlidXRlKCkpCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcHJvYmFibHkg
YmUgdXNpbmcgZ2V0SWRBdHRyaWJ1dGUgcmF0aGVyIHRoYW4gaWRGb3JTdHlsZVJlc29sdXRpb24u
CisgICAgICAgICwgbV9pZChub2RlLT5oYXNJRCgpID8gbm9kZS0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKSA6IG51bGxBdG9tKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmRvY3VtZW50KCkp
OwogICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFJl
c291cmNlKG1faWQsIHRoaXMpOwpAQCAtNTUsNyArNTYsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFJlbW92ZSBvbGQgaWQsIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIGNhY2hl
CiAgICAgICAgIGV4dGVuc2lvbnMtPnJlbW92ZVJlc291cmNlKG1faWQpOwogCi0gICAgICAgIG1f
aWQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0SURBdHRyaWJ1dGUoKTsKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBnZXRJZEF0dHJpYnV0ZSBy
YXRoZXIgdGhhbiBpZEZvclN0eWxlUmVzb2x1dGlvbi4KKyAgICAgICAgbV9pZCA9IG5vZGUoKS0+
aGFzSUQoKSA/IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpIDogbnVsbEF0b207CiAKICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGFuIGVs
ZW1lbnQgaXMgcmVmZXJlbmNpbmcgdXMgd2l0aCB0aGUgbmV3IGlkLCBhbmQgaGFzIHRvIGJlIG5v
dGlmaWVkIHRoYXQgd2UncmUgZXhpc3Rpbmcgbm93CiAgICAgICAgIGlmIChleHRlbnNpb25zLT5p
c1BlbmRpbmdSZXNvdXJjZShtX2lkKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw3ICszNTEsNyBA
QCBzdGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4CiAgICAgZWxzZSBpZiAo
cmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQog
ICAgICAgICB0cyA8PCAiW3R5cGU9UkFESUFMLUdSQURJRU5UXSI7CiAKLSAgICB0cyA8PCAiIFtp
ZD1cIiIgPDwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgp
IDw8ICJcIl0iOworICAgIHRzIDw8ICIgW2lkPVwiIiA8PCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4obm9kZSktPmdldElkQXR0cmlidXRlKCkgPDwgIlwiXSI7CiB9CiAKIHN0YXRpYyB2b2lkIHdy
aXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAt
NTgxLDcgKzU4MSw3IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWEK
ICAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBvYmplY3QsIGluZGVudCk7CiAKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG9iamVjdC5ub2RlKCkpOwotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQgPSBlbGVtZW50LT5nZXRJREF0dHJpYnV0ZSgpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwogICAg
IHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAiaWQiLCBpZCk7ICAgIAogCiAgICAgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qm
PihvYmplY3QpLnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKTsKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MDQ0NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBTVkdFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpCiAgICAgU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
ICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCk7CiAKLSAgICBTdHJpbmcgcmVzb3VyY2VJZCA9IGdldEF0dHJpYnV0
ZShpZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgU3RyaW5nIHJlc291cmNlSWQgPSBnZXRJZEF0dHJp
YnV0ZSgpOwogICAgIGlmIChleHRlbnNpb25zLT5pc1BlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlk
KSkgewogICAgICAgICBPd25QdHI8SGFzaFNldDxTVkdTdHlsZWRFbGVtZW50Kj4gPiBjbGllbnRz
KGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSk7CiAgICAgICAg
IGlmIChjbGllbnRzLT5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAko
cmV2aXNpb24gNjA0NDQpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aXNL
bm93bkF0dHJpYnV0ZSgKICAgICBpZiAocHJvcElkID4gMCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gKGF0dHJOYW1lID09IGlkQXR0cmlidXRlTmFtZSgpIHx8IGF0dHJOYW1l
ID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKTsgCisgICAgcmV0dXJuIGlzSWRBdHRyaWJ1dGVOYW1l
KGF0dHJOYW1lKSB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0cjsgCiB9CiAKIHZv
aWQgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nCiAKICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVy
KCk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKKyAgICBpZiAo
aXNJZEF0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpKSB7CiAgICAgICAgIC8vIE5vdGlmeSByZXNvdXJj
ZXMgYWJvdXQgaWQgY2hhbmdlcywgdGhpcyBpcyBpbXBvcnRhbnQgYXMgd2UgY2FjaGUgcmVzb3Vy
Y2VzIGJ5IGlkIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucwogICAgICAgICBpZiAob2JqZWN0ICYm
IG9iamVjdC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKQogICAgICAgICAgICAgb2JqZWN0LT50
b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPmlkQ2hhbmdlZCgpOwpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYwNDQ0KQorKysgV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIGR1bXBJbnN0YW5j
ZVRyZWUodW5zaWduZWQgaW50JiBkZXB0CiAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1l
bnQgPSB0YXJnZXRJbnN0YW5jZS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoc2hh
ZG93VHJlZUVsZW1lbnQpOwogCi0gICAgU3RyaW5nIGVsZW1lbnRJZCA9IGVsZW1lbnQtPmdldElE
QXR0cmlidXRlKCk7CisgICAgU3RyaW5nIGVsZW1lbnRJZCA9IGVsZW1lbnQtPmdldElkQXR0cmli
dXRlKCk7CiAgICAgU3RyaW5nIGVsZW1lbnROb2RlTmFtZSA9IGVsZW1lbnQtPm5vZGVOYW1lKCk7
CiAgICAgU3RyaW5nIHNoYWRvd1RyZWVFbGVtZW50Tm9kZU5hbWUgPSBzaGFkb3dUcmVlRWxlbWVu
dC0+bm9kZU5hbWUoKTsKICAgICBTdHJpbmcgcGFyZW50Tm9kZU5hbWUgPSBlbGVtZW50LT5wYXJl
bnROb2RlKCkgPyBlbGVtZW50LT5wYXJlbnROb2RlKCktPm5vZGVOYW1lKCkgOiAibnVsbCI7CkBA
IC02ODEsNyArNjgxLDggQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpoYW5kbGVEZWVwVXNlUmVmZXJl
bgogICAgIHdoaWxlIChpbnN0YW5jZSkgewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0g
aW5zdGFuY2UtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCk7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQt
PmdldElEQXR0cmlidXRlKCkgPT0gaWQpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JTdHlsZVJl
c29sdXRpb24uCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkgPT0gaWQpIHsKICAgICAgICAgICAgIGZvdW5kUHJvYmxlbSA9IHRy
dWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNjA0NDQpCisrKyBXZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYsNyArMjM2LDggQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9u
cwogICAgICAgICAgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMp
OwogCiAgICAgICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYW5pbWF0aW9uLT50
YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgdGFyZ2V0
RWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKSAhPSBtX25leHRTYW1wbGluZ1RhcmdldCkKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBnZXRJZEF0dHJp
YnV0ZSBpbnN0ZWFkIG9mIGlkRm9yU3R5bGVSZXNvbHV0aW9uLgorICAgICAgICAgICAgaWYgKCF0
YXJnZXRFbGVtZW50IHx8ICF0YXJnZXRFbGVtZW50LT5oYXNJRCgpIHx8IHRhcmdldEVsZW1lbnQt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgIT0gbV9uZXh0U2FtcGxpbmdUYXJnZXQpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNhbXBsaW5nRGlmZiA9IGFuaW1hdGlv
bi0+aW50ZXJ2YWxCZWdpbigpOwpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwNDQ0KQor
KysgV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgYm9vbCBXTUxFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZgogICAgIAogdm9p
ZCBXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKQorICAgIGlmIChpc0lkQXR0
cmlidXRlTmFtZShhdHRyLT5uYW1lKCkpCiAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBIVE1M
TmFtZXM6OmNsYXNzQXR0cgogICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpz
dHlsZUF0dHIpCiAgICAgICAgIHJldHVybiBTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsK
</data>
<flag name="review"
          id="42075"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>