<?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>69790</bug_id>
          
          <creation_ts>2011-10-10 15:03:17 -0700</creation_ts>
          <short_desc>Make CachedResourceClient a base class, with specialized callbacks in subclasses</short_desc>
          <delta_ts>2011-10-11 12:40:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61225</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481194</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 15:03:17 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=61225#c17

notifyFinished() is the only callback which is implemented in CachedResource.cpp, so it makes sense to leave that in CachedResourceClient.  However, all the other callbacks are specific to a given type of CachedResource.

This patch will make each subtype of CachedResource use a different CachedResourceClient (e.g., CachedImage will expect a CachedImageClient).  The exceptions to this will be Scripts (since they only use notifyFinished()) and Links (since they use CachedResource directly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481205</commentid>
    <comment_count>1</comment_count>
      <attachid>110411</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 15:11:53 -0700</bug_when>
    <thetext>Created attachment 110411
patch

I tried very hard to find all the platform-specific CachedResourceClients, but I would be surprised if I succeeded.  EWS will probably explode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481218</commentid>
    <comment_count>2</comment_count>
      <attachid>110411</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-10 15:22:00 -0700</bug_when>
    <thetext>Comment on attachment 110411
patch

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

This looks like a nice separation-of-concerns win.  One question below.  I wonder if we should keep the two stylesheet interfaces together to avoid diamond inheritance.

&gt; Source/WebCore/dom/ProcessingInstruction.h:35
&gt; -class ProcessingInstruction : public ContainerNode, private CachedResourceClient {
&gt; +class ProcessingInstruction : public ContainerNode, private CachedXSLStyleSheetClient, private CachedCSSStyleSheetClient {

Are we going to have a diamond inheritance problem here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481220</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 15:24:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 110411 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110411&amp;action=review
&gt; 
&gt; This looks like a nice separation-of-concerns win.  One question below.  I wonder if we should keep the two stylesheet interfaces together to avoid diamond inheritance.
&gt; 
&gt; &gt; Source/WebCore/dom/ProcessingInstruction.h:35
&gt; &gt; -class ProcessingInstruction : public ContainerNode, private CachedResourceClient {
&gt; &gt; +class ProcessingInstruction : public ContainerNode, private CachedXSLStyleSheetClient, private CachedCSSStyleSheetClient {
&gt; 
&gt; Are we going to have a diamond inheritance problem here?

Yes.

See ProcessingInstruction.cpp for how I handled it in the one place it currently exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481280</commentid>
    <comment_count>4</comment_count>
      <attachid>110433</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 16:35:47 -0700</bug_when>
    <thetext>Created attachment 110433
patch without diamond inheritance

I talked with abarth some more off-bugzilla, and we concluded that the diamond inheritance is a disaster waiting to happen.  This new patch has a single CachedResourceClient subclass for both XSL and CSS stylesheets (CachedStyleSheetClient).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481306</commentid>
    <comment_count>5</comment_count>
      <attachid>110433</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-10 17:06:09 -0700</bug_when>
    <thetext>Comment on attachment 110433
patch without diamond inheritance

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

&gt; Source/WebCore/loader/cache/CachedFont.cpp:83
&gt; -        c-&gt;fontLoaded(this);
&gt; +        static_cast&lt;CachedFontClient*&gt;(c)-&gt;fontLoaded(this);

I wish there was a way to check this cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481348</commentid>
    <comment_count>6</comment_count>
      <attachid>110433</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-10 17:40:27 -0700</bug_when>
    <thetext>Comment on attachment 110433
patch without diamond inheritance

Clearing flags on attachment: 110433

Committed r97113: &lt;http://trac.webkit.org/changeset/97113&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481349</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-10 17:40:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481780</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-11 11:47:34 -0700</bug_when>
    <thetext>CachedResourceClientWalker needs some templating.

Lots of other nasty casting still left too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481833</commentid>
    <comment_count>9</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 12:40:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; CachedResourceClientWalker needs some templating.
&gt; 
&gt; Lots of other nasty casting still left too.

My current thought is to:
* Add a type enum to CachedResourceClient, a la CachedResource::type().
* Template CachedResourceClientWalker and have it do the filtering and downcasting.

Does that seem reasonable?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110411</attachid>
            <date>2011-10-10 15:11:53 -0700</date>
            <delta_ts>2011-10-10 16:35:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>crc.txt</filename>
            <type>text/plain</type>
            <size>33028</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDkyKQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMTAg
IE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBVc2UgYSBDYWNo
ZWRJbWFnZUNsaWVudCBpbnN0ZWFkIG9mIENhY2hlZFJlc291cmNlQ2xpZW50CisgICAgICAgIGlu
IFdlYkhUTUxWaWV3LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChwcm9taXNlZERhdGFDbGll
bnQpOgorCiAyMDExLTEwLTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY5OTYuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDk3MDY1KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDkgKzM1NCw5IEBACiBAZW5kCiAKIC8vIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxl
IHRvIHNhZmVseSByZWZlcmVuY2UgdGhlIENhY2hlZEltYWdlIGZvciB0aGUgcHJvbWlzZWQgZHJh
ZyBkYXRhCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgp
CitzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgpCiB7Ci0gICAg
c3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9
IG5ldyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAgICBzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQq
IHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0gbmV3IENhY2hlZEltYWdlQ2xpZW50OwogICAg
IHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gOTcwNjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDkgQEAKICNpZm5kZWYgUHJvY2Vzc2luZ0luc3RydWN0aW9uX2gKICNkZWZp
bmUgUHJvY2Vzc2luZ0luc3RydWN0aW9uX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2lu
Y2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzEsNyAr
MzIsNyBAQAogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAKLWNsYXNz
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwcml2YXRlIENh
Y2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA6IHB1Ymxp
YyBDb250YWluZXJOb2RlLCBwcml2YXRlIENhY2hlZFhTTFN0eWxlU2hlZXRDbGllbnQsIHByaXZh
dGUgQ2FjaGVkQ1NTU3R5bGVTaGVldENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBTdHJp
bmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIH5Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCwxNCBAQAog
ICAgIGlmIChtX3NoZWV0KQogICAgICAgICBtX3NoZWV0LT5jbGVhck93bmVyTm9kZSgpOwogCi0g
ICAgaWYgKG1fY2FjaGVkU2hlZXQpCi0gICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKKyAgICBpZiAobV9jYWNoZWRTaGVldCkgeworICAgICAgICBpZiAobV9pc0NTUykK
KyAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVudChzdGF0aWNfY2FzdDxDYWNo
ZWRDU1NTdHlsZVNoZWV0Q2xpZW50Kj4odGhpcykpOworI2lmIEVOQUJMRShYU0xUKQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQoc3RhdGljX2Nh
c3Q8Q2FjaGVkWFNMU3R5bGVTaGVldENsaWVudCo+KHRoaXMpKTsKKyNlbmRpZgorICAgIH0KIAog
ICAgIGlmIChpbkRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZVN0eWxlU2hl
ZXRDYW5kaWRhdGVOb2RlKHRoaXMpOwpAQCAtMTUzLDcgKzE1OSwxMiBAQAogI2VuZGlmCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICAg
ICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9pc0NTUykKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3Zl
Q2xpZW50KHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXRDbGllbnQqPih0aGlzKSk7Cisj
aWYgRU5BQkxFKFhTTFQpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQoc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVT
aGVldENsaWVudCo+KHRoaXMpKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hl
ZXQgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzcsOSArMTg4LDE0IEBA
CiAKICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQocmVxdWVzdCwgY2hhcnNldCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgICAg
ICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7ICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChtX2lzQ1NTKQorICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0
LT5hZGRDbGllbnQoc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldENsaWVudCo+KHRoaXMp
KTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENsaWVudChzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHls
ZVNoZWV0Q2xpZW50Kj4odGhpcykpOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IG1heSBoYXZlIGJlZW4gZGVuaWVkIGlmIChmb3Ig
ZXhhbXBsZSkgdGhlIHN0eWxlc2hlZXQgaXMgbG9jYWwgYW5kIHRoZSBkb2N1bWVudCBpcyByZW1v
dGUuCiAgICAgICAgICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CkBAIC0yMzcsOCArMjUzLDE0IEBACiB2
b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYg
c2hlZXQpCiB7CiAgICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQsIHRydWUpOwotICAgIGlm
IChtX2NhY2hlZFNoZWV0KQotICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQodGhp
cyk7CisgICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsgICAgICAgICAgICAgICAgCisgICAgICAgIGlm
IChtX2lzQ1NTKQorICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHN0YXRp
Y19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXRDbGllbnQqPih0aGlzKSk7CisjaWYgRU5BQkxFKFhT
TFQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVu
dChzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Q2xpZW50Kj4odGhpcykpOworI2VuZGlm
CisgICAgfQogICAgIG1fY2FjaGVkU2hlZXQgPSAwOwogCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzA5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDExLTEwLTEwICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVuY3Rp
b25zIGluIENhY2hlZFJlc291cmNlQ2xpZW50IGFyZSBzcGVjaWZpYworICAgICAgICB0byBhIHNp
bmdsZSB0eXBlIG9mIENhY2hlZFJlc291cmNlLiBNb3ZlIHRoZXNlIGNhbGxiYWNrcyBpbnRvCisg
ICAgICAgIHNlcGFyYXRlIHN1YmNsYXNzZXMgb2YgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIGFuZCBs
ZWF2ZSBvbmx5CisgICAgICAgIHRoZSBjb21tb24gY2FsbGJhY2sgKG5vdGlmeUZpbmlzaGVkKSBp
biB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5NzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZWQgaW50ZW5kZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuaDoKKyAgICAgICAgKiBjc3MvQ1NT
SW1hZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmg6CisgICAgICAgICog
ZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9JbWFnZURvY3VtZW50Lmg6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmg6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
Q2xpcGJvYXJkTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250
RmFjZVVyaUVsZW1lbnQuaDoKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5oOgorCiAyMDEx
LTEwLTEwICBKZXJlbXkgQXB0aG9ycCAgPGplcmVteWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEV4aXRpbmcgZnVsbHNjcmVlbiBzaG91bGRuJ3QgY3Jhc2ggaWYgdGhlIGVsZW1lbnQgdGhhdCB3
YXMgZnVsbHNjcmVlbmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2Fy
ZFF0LmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xp
cGJvYXJkUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBDbGlw
Ym9hcmRRdF9oCiAjZGVmaW5lIENsaXBib2FyZFF0X2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9h
cmQuaCIKIAogUVRfQkVHSU5fTkFNRVNQQUNFCkBAIC0zOCw3ICszOCw3IEBACiBjbGFzcyBDYWNo
ZWRJbWFnZTsKIAogLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJh
ZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotY2xhc3MgQ2xpcGJvYXJkUXQgOiBwdWJsaWMgQ2xp
cGJvYXJkLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgQ2xpcGJvYXJkUXQg
OiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBi
b2FyZFF0PiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgY29uc3QgUU1pbWVE
YXRhKiByZWFkYWJsZUNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQ2xpcGJvYXJkV2luX2gKIAogI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgog
CkBAIC00MSw3ICs0MSw3IEBACiBjbGFzcyBXQ0RhdGFPYmplY3Q7CiAKIC8vIFN0YXRlIGF2YWls
YWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUK
LWNsYXNzIENsaXBib2FyZFdpbiA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRSZXNv
dXJjZUNsaWVudCB7CitjbGFzcyBDbGlwYm9hcmRXaW4gOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJs
aWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZFdpbj4gY3JlYXRlKENsaXBib2Fy
ZFR5cGUgY2xpcGJvYXJkVHlwZSwgSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAkocmV2aXNpb24g
OTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTAgQEAKICNpZm5kZWYgQ2xpcGJv
YXJkQ2hyb21pdW1faAogI2RlZmluZSBDbGlwYm9hcmRDaHJvbWl1bV9oCiAKKyNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUg
IkNsaXBib2FyZC5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7CkBAIC00Miw3ICs0MSw3
IEBACiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW50UG9pbnQ7CiAKLSAgICBjbGFzcyBD
bGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRSZXNvdXJj
ZUNsaWVudCB7CisgICAgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW0gOiBwdWJsaWMgQ2xpcGJvYXJk
LCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIH5DbGlwYm9hcmRDaHJvbWl1bSgpIHt9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCShyZXZpc2lvbiA5
NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDbGlwYm9hcmRHdGtfaAogI2Rl
ZmluZSBDbGlwYm9hcmRHdGtfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
KyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1
ZGUgIkRhdGFPYmplY3RHdGsuaCIKIApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgLy8gU3RhdGUg
YXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9w
YXN0ZQogICAgIC8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQg
YnkgdGhlIGRvbQotICAgIGNsYXNzIENsaXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgY2xhc3MgQ2xpcGJvYXJkR3RrIDogcHVi
bGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKICAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgQ2xpcGJvYXJkTWFjX2gKICNkZWZpbmUgQ2xpcGJvYXJkTWFj
X2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAKIGNsYXNzIEZyYW1lOwogY2xhc3MgRmlsZUxpc3Q7CiAK
LWNsYXNzIENsaXBib2FyZE1hYyA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRSZXNv
dXJjZUNsaWVudCB7CitjbGFzcyBDbGlwYm9hcmRNYWMgOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJs
aWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZE1hYz4gY3JlYXRlKENsaXBib2Fy
ZFR5cGUgY2xpcGJvYXJkVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NyArMjEsNyBAQAogI2RlZmluZSBTVkdGb250RmFjZVVyaUVsZW1lbnRfaAogCiAjaWYgRU5BQkxF
KFNWR19GT05UUykKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUg
IkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnQuaCIKIApAQCAtMzAsNyArMzAsNyBAQAogY2xhc3MgQ1NTRm9udEZhY2VT
cmNWYWx1ZTsKIGNsYXNzIENhY2hlZEZvbnQ7CiAKLWNsYXNzIFNWR0ZvbnRGYWNlVXJpRWxlbWVu
dCA6IHB1YmxpYyBTVkdFbGVtZW50LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xh
c3MgU1ZHRm9udEZhY2VVcmlFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQsIHB1YmxpYyBDYWNo
ZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGb250RmFj
ZVVyaUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDk3MDY1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1ZHRkVJbWFnZUVsZW1lbnRfaAogCiAjaWYg
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJTVkdBbmlt
YXRlZEJvb2xlYW4uaCIKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0xhbmdTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBDYWNoZWRJbWFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZH
RkVJbWFnZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiA5NzA2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgSFRNTExpbmtFbGVtZW50X2gKIAogI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgor
I2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIkRPTVNldHRhYmxlVG9rZW5MaXN0LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKQEAgLTM3LDExICszNyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZFJlc291cmNlOwogY2xh
c3MgS1VSTDsKIAotY2xhc3MgSFRNTExpbmtFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBw
dWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIHB1YmxpYyBMaW5rTG9hZGVyQ2xpZW50IHsKK2Ns
YXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhY2hlZENT
U1N0eWxlU2hlZXRDbGllbnQsIHB1YmxpYyBMaW5rTG9hZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MTGlua0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgdmlydHVhbCB+
SFRNTExpbmtFbGVtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaAko
cmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOCBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKK2NsYXNzIENhY2hlZEltYWdlOwogY2xh
c3MgSW1hZ2VEb2N1bWVudEVsZW1lbnQ7CiAKIGNsYXNzIEltYWdlRG9jdW1lbnQgOiBwdWJsaWMg
SFRNTERvY3VtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAKIERFRklORV9E
RUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgcmVuZGVyT2JqZWN0
Q291bnRlciwgKCJSZW5kZXJPYmplY3QiKSk7CiAKIFJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0
KE5vZGUqIG5vZGUpCi0gICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudCgpCisgICAgOiBDYWNoZWRJ
bWFnZUNsaWVudCgpCiAgICAgLCBtX3N0eWxlKDApCiAgICAgLCBtX25vZGUobm9kZSkKICAgICAs
IG1fcGFyZW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBSZW5kZXJPYmpl
Y3RfaAogI2RlZmluZSBSZW5kZXJPYmplY3RfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgpAQCAtMTIwLDcg
KzEyMCw3IEBACiAjZW5kaWYKIAogLy8gQmFzZSBjbGFzcyBmb3IgYWxsIHJlbmRlcmluZyB0cmVl
IG9iamVjdHMuCi1jbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgeworY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKICAg
ICBmcmllbmQgY2xhc3MgTGF5b3V0UmVwYWludGVyOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJC
bG9jazsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQm94OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW1hZ2VWYWx1ZS5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgQ1NT
SW1hZ2VWYWx1ZV9oCiAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxLDcgKzMxLDcg
QEAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2U7CiBjbGFzcyBTdHlsZUltYWdlOwogCi1jbGFzcyBD
U1NJbWFnZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlLCBwcml2YXRlIENhY2hlZFJl
c291cmNlQ2xpZW50IHsKK2NsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZl
VmFsdWUsIHByaXZhdGUgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NJbWFnZVZhbHVlKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgQ1NTRm9udEZhY2VTb3VyY2VfaAogI2RlZmluZSBDU1NGb250
RmFjZVNvdXJjZV9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1
ZGUgIkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQ1LDcgKzQ1LDcg
QEAKICNlbmRpZgogCiAKLWNsYXNzIENTU0ZvbnRGYWNlU291cmNlIDogcHVibGljIENhY2hlZFJl
c291cmNlQ2xpZW50IHsKK2NsYXNzIENTU0ZvbnRGYWNlU291cmNlIDogcHVibGljIENhY2hlZEZv
bnRDbGllbnQgewogcHVibGljOgogICAgIENTU0ZvbnRGYWNlU291cmNlKGNvbnN0IFN0cmluZyYs
IENhY2hlZEZvbnQqID0gMCk7CiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VTb3VyY2UoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsy
Myw3IEBACiAjZGVmaW5lIENTU0ltcG9ydFJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
TWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTMzLDcgKzMzLDcg
QEAKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBNZWRpYUxpc3Q7CiAKLWNsYXNz
IENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZSwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CitjbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENTU1J1bGUsIHByaXZhdGUgQ2Fj
aGVkQ1NTU3R5bGVTaGVldENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1wb3J0UnVsZT4gY3JlYXRlKENTU1N0
eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhTGlz
dD4gbWVkaWEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDk3
MDY1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOCArMjUsOCBAQAogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgog
I2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIApAQCAtMzQsNyArMzQsNyBAQAogCiBjbGFzcyBD
YWNoZWRYU0xTdHlsZVNoZWV0OwogCi1jbGFzcyBYU0xJbXBvcnRSdWxlIDogcHVibGljIFN0eWxl
QmFzZSwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBYU0xJbXBvcnRSdWxl
IDogcHVibGljIFN0eWxlQmFzZSwgcHJpdmF0ZSBDYWNoZWRYU0xTdHlsZVNoZWV0Q2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxYU0xJbXBvcnRSdWxlPiBjcmVhdGUoWFNMU3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNv
bnN0IFN0cmluZyYgaHJlZikKQEAgLTU3LDcgKzU3LDcgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAvLyBmcm9tIENhY2hl
ZFJlc291cmNlQ2xpZW50CisgICAgLy8gZnJvbSBDYWNoZWRYU0xTdHlsZVNoZWV0Q2xpZW50CiAg
ICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25z
dCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHNoZWV0KTsKICAgICAKICAgICBTdHJpbmcg
bV9zdHJIcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250
LmNwcAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAKIHZvaWQgQ2FjaGVk
Rm9udDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQogewogICAgIGlmICgh
aXNMb2FkaW5nKCkpCi0gICAgICAgIGMtPmZvbnRMb2FkZWQodGhpcyk7CisgICAgICAgIHN0YXRp
Y19jYXN0PENhY2hlZEZvbnRDbGllbnQqPihjKS0+Zm9udExvYWRlZCh0aGlzKTsKIH0KIAogdm9p
ZCBDYWNoZWRGb250OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgIAogICAgIENhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VD
bGllbnQgKmMgPSB3Lm5leHQoKSkKLSAgICAgICAgIGMtPmZvbnRMb2FkZWQodGhpcyk7CisgICAg
ICAgICBzdGF0aWNfY2FzdDxDYWNoZWRGb250Q2xpZW50Kj4oYyktPmZvbnRMb2FkZWQodGhpcyk7
CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxl
U2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQxICsy
Nyw0OCBAQAogI2RlZmluZSBDYWNoZWRDU1NTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENhY2hl
ZFJlc291cmNlQ2xpZW50OwotICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLSAgICBjbGFzcyBUZXh0
UmVzb3VyY2VEZWNvZGVyOworY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CitjbGFzcyBTaGFy
ZWRCdWZmZXI7CitjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogCi0gICAgY2xhc3MgQ2FjaGVk
Q1NTU3R5bGVTaGVldCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCk7Ci0gICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQoKTsK
K2NsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworcHVi
bGljOgorICAgIENhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICB2aXJ0dWFsIH5DYWNoZWRDU1NTdHlsZVNoZWV0KCk7
CiAKLSAgICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9
IHRydWUsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUgPSAwKSBjb25zdDsKKyAgICBjb25zdCBTdHJp
bmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1ZSwgYm9vbCogaGFzVmFsaWRN
SU1FVHlwZSA9IDApIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBh
bGxDbGllbnRzUmVtb3ZlZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92
ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJik7
Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3Rh
dHVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJik7CisgICAg
dmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YShQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAg
IHZpcnR1YWwgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzKTsKIAotICAgICAgICB2
b2lkIGNoZWNrTm90aWZ5KCk7Ci0gICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBjYW5V
c2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29u
c3Q7Ci0gICAgICAgIHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gUHVyZ2VMYXN0OyB9CisgICAgdm9pZCBjaGVja05vdGlmeSgpOwogCi0gICAgcHJv
dGVjdGVkOgotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwot
ICAgICAgICBTdHJpbmcgbV9kZWNvZGVkU2hlZXRUZXh0OwotICAgIH07Citwcml2YXRlOgorICAg
IGJvb2wgY2FuVXNlU2hlZXQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlkTUlN
RVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9CiAKK3Byb3RlY3RlZDoKKyAgICBSZWZQdHI8VGV4
dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIFN0cmluZyBtX2RlY29kZWRTaGVldFRl
eHQ7Cit9OworCitjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0Q2xpZW50IDogcHVibGljIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRDU1NTdHlsZVNo
ZWV0Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJp
bmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0KK307CisK
IH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250
LmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDYWNoZWRG
b250X2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJG
b250UmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIkZvbnRXaWR0aFZhcmlhbnQuaCIKQEAgLTgw
LDYgKzgxLDEyIEBACiAgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOwogfTsKIAorY2xhc3Mg
Q2FjaGVkRm9udENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+Q2FjaGVkRm9udENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBm
b250TG9hZGVkKENhY2hlZEZvbnQqKSB7IH0KK307CisKIH0KIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3Bw
CShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRY
U0xTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAogdm9pZCBD
YWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMp
CiB7ICAKICAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0
KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVldENsaWVudCo+KGMpLT5zZXRYU0xT
dHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3No
ZWV0KTsKIH0KIAogdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBT
dHJpbmcmIGNocykKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAKICAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlciB3KG1fY2xpZW50cyk7CiAgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50
ICpjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJl
cXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOworICAgICAgICBzdGF0aWNf
Y2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldFhTTFN0eWxlU2hlZXQobV9y
ZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwogfQogCiB2
b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3Rh
dHVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIH0KIAogICAg
IGlmIChtX2ltYWdlICYmICFtX2ltYWdlLT5pc051bGwoKSkKLSAgICAgICAgYy0+aW1hZ2VDaGFu
Z2VkKHRoaXMpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGMpLT5p
bWFnZUNoYW5nZWQodGhpcyk7CiAKICAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMp
OwogfQpAQCAtMjMwLDcgKzIzMCw3IEBACiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIgdyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcu
bmV4dCgpKQotICAgICAgICBjLT5pbWFnZUNoYW5nZWQodGhpcywgY2hhbmdlUmVjdCk7CisgICAg
ICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oYyktPmltYWdlQ2hhbmdlZCh0aGlz
LCBjaGFuZ2VSZWN0KTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6Y2hlY2tTaG91bGRQYWludEJy
b2tlbkltYWdlKCkKQEAgLTM3Myw3ICszNzMsNyBAQAogICAgIAogICAgIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGMgPSB3Lm5leHQoKSkgewotICAgICAgICBpZiAoYy0+d2lsbFJlbmRlckltYWdlKHRoaXMp
KQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjKS0+d2lsbFJl
bmRlckltYWdlKHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZp
bmUgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgor
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSwyNiArMzYsMzIgQEAKICAgICBjbGFzcyBU
ZXh0UmVzb3VyY2VEZWNvZGVyOwogCiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgY2xhc3MgQ2FjaGVk
WFNMU3R5bGVTaGVldCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworY2xhc3Mg
Q2FjaGVkWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgQ2FjaGVkWFNMU3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgICAg
ICBjb25zdCBTdHJpbmcmIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQotICAgICAg
ICAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0
cmluZyYpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3Vy
Y2U6OlN0YXR1cyk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7Ci0gICAg
ICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgU3RyaW5nIG1fc2hlZXQ7Ci0gICAgICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7Ci0gICAgfTsKKyAgICBjb25zdCBT
dHJpbmcmIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQorICAgIAorICAgIHZpcnR1
YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJp
bmcgZW5jb2RpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9p
ZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzKTsKKyAgICAKKyAgICB2b2lkIGNoZWNrTm90
aWZ5KCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgU3RyaW5nIG1fc2hlZXQ7CisgICAgUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKK307CiAKK2NsYXNzIENhY2hlZFhTTFN0
eWxlU2hlZXRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkNhY2hlZFhTTFN0eWxlU2hlZXRDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IEtV
UkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsgfQorfTsKKwog
I2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIENhY2hl
ZEltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0xMDMsNiArMTA0LDIxIEBACiAgICAg
Ym9vbCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7CiB9OwogCitjbGFzcyBDYWNoZWRJbWFnZUNs
aWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q2FjaGVkSW1hZ2VDbGllbnQoKSB7IH0KKworICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIGZy
YW1lIG9mIGFuIGltYWdlIGNoYW5nZXMsIGVpdGhlciBiZWNhdXNlIHdlIGdvdCBtb3JlIGRhdGEg
ZnJvbSB0aGUgbmV0d29yayBvcgorICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGFuaW1hdGluZy4gSWYg
bm90IG51bGwsIHRoZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGltYWdlLgor
ICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0
KiA9IDApIHsgfQorCisgICAgLy8gQ2FsbGVkIHRvIGZpbmQgb3V0IGlmIHRoaXMgY2xpZW50IHdh
bnRzIHRvIGFjdHVhbGx5IGRpc3BsYXkgdGhlIGltYWdlLiBVc2VkIHRvIHRlbGwgd2hlbiB3ZQor
ICAgIC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gQ29udGVudCBub2RlcyB0aGF0IGhvbGQgaW1hZ2Ug
cmVmcyBmb3IgZXhhbXBsZSB3b3VsZCBub3QgcmVuZGVyIHRoZSBpbWFnZSwKKyAgICAvLyBidXQg
UmVuZGVySW1hZ2VzIHdvdWxkIChhc3N1bWluZyB0aGV5IGhhdmUgdmlzaWJpbGl0eTogdmlzaWJs
ZSBhbmQgdGhlaXIgcmVuZGVyIHRyZWUgaXNuJ3QgaGlkZGVuCisgICAgLy8gZS5nLiwgaW4gdGhl
IGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQgdGFiKS4KKyAgICB2aXJ0dWFsIGJvb2wgd2ls
bFJlbmRlckltYWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0KK307CisKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNDMg
KzI5LDE2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAKLSAgICBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0
OwotICAgIGNsYXNzIENhY2hlZEZvbnQ7Ci0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci0gICAg
Y2xhc3MgQ2FjaGVkSW1hZ2U7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSW50UmVjdDsK
LSAgICBjbGFzcyBLVVJMOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICoKLSAg
ICAgKiBhIGNsaWVudCB3aG8gd2FudHMgdG8gbG9hZCBzdHlsZXNoZWV0cywgaW1hZ2VzIG9yIHNj
cmlwdHMgZnJvbSB0aGUgd2ViIGhhcyB0bwotICAgICAqIGluaGVyaXQgZnJvbSB0aGlzIGNsYXNz
IGFuZCBvdmVybG9hZCBvbmUgb2YgdGhlIDMgZnVuY3Rpb25zCi0gICAgICoKLSAgICAgKi8KLSAg
ICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VDbGll
bnQoKSB7IH0KLQotICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBvZiBhbiBpbWFn
ZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5ldHdv
cmsgb3IKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgYW5pbWF0aW5nLiBJZiBub3QgbnVsbCwg
dGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1hZ2UuCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9IDAp
IHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGxlZCB0byBmaW5kIG91dCBpZiB0aGlzIGNs
aWVudCB3YW50cyB0byBhY3R1YWxseSBkaXNwbGF5IHRoZSBpbWFnZS4gIFVzZWQgdG8gdGVsbCB3
aGVuIHdlCi0gICAgICAgIC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gIENvbnRlbnQgbm9kZXMgdGhh
dCBob2xkIGltYWdlIHJlZnMgZm9yIGV4YW1wbGUgd291bGQgbm90IHJlbmRlciB0aGUgaW1hZ2Us
Ci0gICAgICAgIC8vIGJ1dCBSZW5kZXJJbWFnZXMgd291bGQgKGFzc3VtaW5nIHRoZXkgaGF2ZSB2
aXNpYmlsaXR5OiB2aXNpYmxlIGFuZCB0aGVpciByZW5kZXIgdHJlZSBpc24ndCBoaWRkZW4KLSAg
ICAgICAgLy8gZS5nLiwgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQgdGFiKS4K
LSAgICAgICAgdmlydHVhbCBib29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBT
dHJpbmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKiBocmVm
ICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8qIHNoZWV0ICov
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIHt9Owot
ICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSB7IH0K
LSAgICB9OwotCitjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VDbGllbnQo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSB7
IH0KK3Byb3RlY3RlZDoKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQorfTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQgKmMpCiB7CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAgICAgYy0+
c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwo
KSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7CisgICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZENTU1N0eWxlU2hlZXRDbGllbnQqPihjKS0+c2V0Q1NTU3R5bGVTaGVldChtX3Jl
c291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLm5hbWUoKSwgdGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6YWxsQ2xp
ZW50c1JlbW92ZWQoKQpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlciB3KG1fY2xpZW50cyk7CiAgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50
ICpjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV9yZXNvdXJjZVJl
cXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1l
KCksIHRoaXMpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Q2xpZW50
Kj4oYyktPnNldENTU1N0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9u
c2UudXJsKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOwogfQogCiB2b2lk
IENhY2hlZENTU1N0eWxlU2hlZXQ6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3RhdHVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmgJKHJldmlzaW9uIDk3MDY1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDcgKzIzLDcgQEAKICNpZm5kZWYgSW1hZ2VMb2FkZXJfaAogI2RlZmluZSBJbWFnZUxvYWRl
cl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtMzMsNyArMzMsNyBAQAogY2xhc3MgSW1hZ2VM
b2FkRXZlbnRTZW5kZXI7CiBjbGFzcyBSZW5kZXJJbWFnZVJlc291cmNlOwogCi1jbGFzcyBJbWFn
ZUxvYWRlciA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBJbWFnZUxvYWRl
ciA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgSW1hZ2VMb2FkZXIo
RWxlbWVudCopOwogICAgIHZpcnR1YWwgfkltYWdlTG9hZGVyKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjExLDkgKzIxMSw5IEBACiAKIEBpbXBsZW1lbnRhdGlvbiBXS1Bhc3RlYm9h
cmRPd25lcgogCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVu
dCgpCitzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgpCiB7Ci0g
ICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBuZXcgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQ7CisgICAgc3RhdGljIENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQgPSBuZXcgQ2Fj
aGVkSW1hZ2VDbGllbnQ7CiAgICAgcmV0dXJuIGNsaWVudDsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gOTcwOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMC0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFVzZSBhIENhY2hlZEltYWdlQ2xpZW50IGluc3RlYWQgb2Yg
Q2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAgaW4gV2ViRHJhZ0NsaWVudE1hYy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzkwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAocHJvbWlzZWRE
YXRhQ2xpZW50KToKKwogMjAxMS0xMC0xMCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFu
bkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBGaXggYnVpbGQgd2l0aCBxcmVhbCA9PSBmbG9h
dCBvbiBNZWVHbyAxLjIgSGFybWF0dGFuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110433</attachid>
            <date>2011-10-10 16:35:47 -0700</date>
            <delta_ts>2011-10-10 17:40:27 -0700</delta_ts>
            <desc>patch without diamond inheritance</desc>
            <filename>crc2.txt</filename>
            <type>text/plain</type>
            <size>34881</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDkyKQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMTAg
IE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBVc2UgYSBDYWNo
ZWRJbWFnZUNsaWVudCBpbnN0ZWFkIG9mIENhY2hlZFJlc291cmNlQ2xpZW50CisgICAgICAgIGlu
IFdlYkhUTUxWaWV3LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChwcm9taXNlZERhdGFDbGll
bnQpOgorCiAyMDExLTEwLTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY5OTYuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDk3MDY1KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDkgKzM1NCw5IEBACiBAZW5kCiAKIC8vIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxl
IHRvIHNhZmVseSByZWZlcmVuY2UgdGhlIENhY2hlZEltYWdlIGZvciB0aGUgcHJvbWlzZWQgZHJh
ZyBkYXRhCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgp
CitzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgpCiB7Ci0gICAg
c3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9
IG5ldyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAgICBzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQq
IHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0gbmV3IENhY2hlZEltYWdlQ2xpZW50OwogICAg
IHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIxMTcsNiArMjExNyw3IEBACiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9NZW1vcnlDYWNoZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aWZuZGVmIFByb2Nlc3NpbmdJbnN0cnVjdGlvbl9oCiAjZGVmaW5lIFByb2Nlc3NpbmdJbnN0cnVj
dGlvbl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENsaWVudC5o
IgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzEsNyArMzEsNyBAQAogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAK
LWNsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwcml2
YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA6
IHB1YmxpYyBDb250YWluZXJOb2RlLCBwcml2YXRlIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gY3Jl
YXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7
CiAgICAgdmlydHVhbCB+UHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5NzA5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQzIEBACisyMDExLTEwLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGluIENhY2hlZFJlc291
cmNlQ2xpZW50IGFyZSBzcGVjaWZpYworICAgICAgICB0byBhIHNpbmdsZSB0eXBlIG9mIENhY2hl
ZFJlc291cmNlLiBNb3ZlIHRoZXNlIGNhbGxiYWNrcyBpbnRvCisgICAgICAgIHNlcGFyYXRlIHN1
YmNsYXNzZXMgb2YgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIGFuZCBsZWF2ZSBvbmx5CisgICAgICAg
IHRoZSBjb21tb24gY2FsbGJhY2sgKG5vdGlmeUZpbmlzaGVkKSBpbiB0aGUgYmFzZSBjbGFzcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZWQgaW50ZW5kZWQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTRm9udEZhY2VTb3VyY2UuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VWYWx1ZS5oOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmg6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHA6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oOgorICAg
ICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZURvY3Vt
ZW50Lmg6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250Lmg6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaDoK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHA6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuaDoK
KyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5oOgorCiAyMDExLTEwLTEwICBKZXJlbXkgQXB0
aG9ycCAgPGplcmVteWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEV4aXRpbmcgZnVsbHNjcmVl
biBzaG91bGRuJ3QgY3Jhc2ggaWYgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZnVsbHNjcmVlbmVkCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY3MjEsNiArMjY3MjEsMTAgQEAKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxD
YWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkWFNMU3R5bGVTaGVldC5j
cHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9DbGlwYm9hcmRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvQ2xpcGJvYXJkUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lm
bmRlZiBDbGlwYm9hcmRRdF9oCiAjZGVmaW5lIENsaXBib2FyZFF0X2gKIAotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmQuaCIKIAogUVRfQkVHSU5fTkFNRVNQQUNFCkBAIC0zOCw3ICszOCw3IEBACiBj
bGFzcyBDYWNoZWRJbWFnZTsKIAogLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50
cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotY2xhc3MgQ2xpcGJvYXJkUXQgOiBw
dWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgQ2xp
cGJvYXJkUXQgOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsaXBib2FyZFF0PiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgY29u
c3QgUU1pbWVEYXRhKiByZWFkYWJsZUNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkocmV2aXNpb24gOTcwNjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQ2xpcGJvYXJkV2luX2gKIAogI2luY2x1
ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJEcmFn
RGF0YS5oIgogCkBAIC00MSw3ICs0MSw3IEBACiBjbGFzcyBXQ0RhdGFPYmplY3Q7CiAKIC8vIFN0
YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNv
cHkvcGFzdGUKLWNsYXNzIENsaXBib2FyZFdpbiA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBD
YWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBDbGlwYm9hcmRXaW4gOiBwdWJsaWMgQ2xpcGJv
YXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZFdpbj4gY3JlYXRl
KENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIENs
aXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAko
cmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTAgQEAKICNpZm5k
ZWYgQ2xpcGJvYXJkQ2hyb21pdW1faAogI2RlZmluZSBDbGlwYm9hcmRDaHJvbWl1bV9oCiAKKyNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgog
I2luY2x1ZGUgIkNsaXBib2FyZC5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7CkBAIC00
Miw3ICs0MSw3IEBACiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW50UG9pbnQ7CiAKLSAg
ICBjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CisgICAgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW0gOiBwdWJsaWMg
Q2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIH5DbGlwYm9hcmRDaHJvbWl1bSgp
IHt9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCShy
ZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDbGlwYm9hcmRH
dGtfaAogI2RlZmluZSBDbGlwYm9hcmRHdGtfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZC5o
IgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKIApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAg
Ly8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBh
bmQgY29weS9wYXN0ZQogICAgIC8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRv
IGJlIHVzZWQgYnkgdGhlIGRvbQotICAgIGNsYXNzIENsaXBib2FyZEd0ayA6IHB1YmxpYyBDbGlw
Ym9hcmQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgY2xhc3MgQ2xpcGJvYXJk
R3RrIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaAkocmV2aXNpb24gOTcwNjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgQ2xpcGJvYXJkTWFjX2gKICNkZWZpbmUgQ2xp
cGJvYXJkTWFjX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAKIGNsYXNzIEZyYW1lOwogY2xhc3MgRmls
ZUxpc3Q7CiAKLWNsYXNzIENsaXBib2FyZE1hYyA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBD
YWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBDbGlwYm9hcmRNYWMgOiBwdWJsaWMgQ2xpcGJv
YXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZE1hYz4gY3JlYXRl
KENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtNTk2LDYgKzU5Niw3IEBACiAgICAgICAgICAgICAnbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmgnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRTdHls
ZVNoZWV0Q2xpZW50LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5o
JywKICAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uQ29udHJvbGxlci5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5oCShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTYgKzIxLDE1IEBACiAjZGVmaW5lIFNWR0ZvbnRGYWNlVXJpRWxlbWVudF9oCiAKICNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiQ2FjaGVkRm9udC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU0Zv
bnRGYWNlU3JjVmFsdWU7Ci1jbGFzcyBDYWNoZWRGb250OwogCi1jbGFzcyBTVkdGb250RmFjZVVy
aUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50
IHsKK2NsYXNzIFNWR0ZvbnRGYWNlVXJpRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50LCBwdWJs
aWMgQ2FjaGVkRm9udENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZH
Rm9udEZhY2VVcmlFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCShyZXZpc2lv
biA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFSW1hZ2VFbGVtZW50X2gK
IAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRCb29sZWFuLmgiCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNWR0ZFSW1hZ2VFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNp
b24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEhUTUxMaW5rRWxlbWVudF9oCiAK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKKyNpbmNsdWRlICJDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC0zNywxMSArMzcsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDYWNoZWRSZXNv
dXJjZTsKIGNsYXNzIEtVUkw7CiAKLWNsYXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50LCBwdWJsaWMgTGlua0xvYWRlckNs
aWVudCB7CitjbGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1Ymxp
YyBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LCBwdWJsaWMgTGlua0xvYWRlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTExpbmtFbGVtZW50PiBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogICAgIHZp
cnR1YWwgfkhUTUxMaW5rRWxlbWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3Vt
ZW50LmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDggQEAKICNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCitjbGFzcyBDYWNoZWRJbWFn
ZTsKIGNsYXNzIEltYWdlRG9jdW1lbnRFbGVtZW50OwogCiBjbGFzcyBJbWFnZURvY3VtZW50IDog
cHVibGljIEhUTUxEb2N1bWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBACiBE
RUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIHJlbmRl
ck9iamVjdENvdW50ZXIsICgiUmVuZGVyT2JqZWN0IikpOwogCiBSZW5kZXJPYmplY3Q6OlJlbmRl
ck9iamVjdChOb2RlKiBub2RlKQotICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQoKQorICAgIDog
Q2FjaGVkSW1hZ2VDbGllbnQoKQogICAgICwgbV9zdHlsZSgwKQogICAgICwgbV9ub2RlKG5vZGUp
CiAgICAgLCBtX3BhcmVudCgwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUmVu
ZGVyT2JqZWN0X2gKICNkZWZpbmUgUmVuZGVyT2JqZWN0X2gKIAotI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKQEAg
LTEyMCw3ICsxMjAsNyBAQAogI2VuZGlmCiAKIC8vIEJhc2UgY2xhc3MgZm9yIGFsbCByZW5kZXJp
bmcgdHJlZSBvYmplY3RzLgotY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKK2NsYXNzIFJlbmRlck9iamVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVu
dCB7CiAgICAgZnJpZW5kIGNsYXNzIExheW91dFJlcGFpbnRlcjsKICAgICBmcmllbmQgY2xhc3Mg
UmVuZGVyQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJveDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk3MDY1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NzQwLDYgKzU3NDAsNyBAQAogCQlEMEEzQTczMTE0MDVB
Mzk4MDBGQjhFRDMgLyogUmVzb3VyY2VMb2FkZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEEzQTczMDE0MDVBMzk4MDBGQjhFRDMgLyog
UmVzb3VyY2VMb2FkZXJPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRDBCMDU1NjgwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtD
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MEIwNTU2NjA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuaCAqLzsgfTsKIAkJ
RDBCMDU1NjkwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQjA1NTY3MDlDNjcwMDEw
MDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgKi87IH07CisJCUQwQkM1NDQ5MTQ0M0FD
NEEwMEUxMDVEQSAvKiBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJDNTQ0ODE0NDNBQzRBMDBFMTA1REEgLyog
Q2FjaGVkU3R5bGVTaGVldENsaWVudC5oICovOyB9OwogCQlEMENFNThGODEyNUU0Q0MyMDBGM0Yx
OTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwICovOyB9OwogCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyog
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRDBEMTQxQjIxMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEQxNDFCMDEy
QjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTEz
MDI4LDYgKzEzMDI5LDcgQEAKIAkJRDBBM0E3MzAxNDA1QTM5ODAwRkI4RUQzIC8qIFJlc291cmNl
TG9hZGVyT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCMDU1NjYw
OUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyZWF0ZUxpbmtDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcmVhdGVMaW5rQ29tbWFu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwQkM1NDQ4MTQ0M0FDNEEwMEUx
MDVEQSAvKiBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDBDRTU4RjYxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMENFNThGNzEyNUU0
Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMEQxNDFCMDEyQjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJl
c291cmNlUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODQwMCwx
NCArMTg0MDIsMTQgQEAKIAkJQThEMkIyNTIxMjg3QTU2MDAwQUY0RERBIC8qIGNhY2hlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlEMEVEQTc3MjE0M0Uz
MDNDMDAyOEUzODMgLyogQ2FjaGVkUmF3UmVzb3VyY2UuY3BwICovLAotCQkJCUQwRURBNzczMTQz
RTMwM0MwMDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oICovLAogCQkJCUJDQjE2QzAwMDk3
OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCAqLywKIAkJCQlCQ0IxNkMw
MTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5oICovLAogCQkJCUJDNjRC
NEM5MENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250LmNwcCAqLywKIAkJCQlCQzY0QjRDQTBD
QjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9udC5oICovLAogCQkJCUJDQjE2QzAyMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5jcHAgKi8sCiAJCQkJQkNCMTZDMDMwOTc5QzNCRDAwNDY3
NzQxIC8qIENhY2hlZEltYWdlLmggKi8sCisJCQkJRDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8q
IENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLywKKwkJCQlEMEVEQTc3MzE0M0UzMDNDMDAyOEUzODMg
LyogQ2FjaGVkUmF3UmVzb3VyY2UuaCAqLywKIAkJCQlCQ0IxNkMwNjA5NzlDM0JEMDA0Njc3NDEg
LyogQ2FjaGVkUmVzb3VyY2UuY3BwICovLAogCQkJCUJDQjE2QzA3MDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRSZXNvdXJjZS5oICovLAogCQkJCUJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBD
YWNoZWRSZXNvdXJjZUNsaWVudC5oICovLApAQCAtMTg0MjEsNiArMTg0MjMsNyBAQAogCQkJCUQw
RDE0MUIxMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCAqLywKIAkJ
CQlCQ0IxNkMwQTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkU2NyaXB0LmNwcCAqLywKIAkJCQlC
Q0IxNkMwQjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkU2NyaXB0LmggKi8sCisJCQkJRDBCQzU0
NDgxNDQzQUM0QTAwRTEwNURBIC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLywKIAkJCQlC
Q0IxNkMwRTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgKi8sCiAJ
CQkJQkNCMTZDMEYwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQuaCAqLywK
IAkJCQlGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLywKQEAgLTIx
Njk0LDYgKzIxNjk3LDcgQEAKIAkJCQlEMEQxNDFCMzEyQjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMyNDA5NzlDM0JEMDA0
Njc3NDEgLyogQ2FjaGVkU2NyaXB0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Q1MzM2NDBFRDY4
NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCUQwQkM1NDQ5MTQ0M0FDNEEwMEUxMDVEQSAvKiBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMyODA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVk
WFNMU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NTAwODI0NUU1OTAwMUU5
QUJDIC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMUQ1RUNCNTEzNEI1OERB
MDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgJKHJldmlzaW9uIDk3MDY1KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAog
I2RlZmluZSBDU1NJbWFnZVZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzEsNyArMzEsNyBAQAogY2xhc3MgU3R5bGVDYWNoZWRJbWFnZTsKIGNsYXNzIFN0eWxlSW1hZ2U7
CiAKLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUsIHByaXZh
dGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBD
U1NQcmltaXRpdmVWYWx1ZSwgcHJpdmF0ZSBDYWNoZWRJbWFnZUNsaWVudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1h
Z2VWYWx1ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU0ltYWdlVmFsdWUpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkocmV2aXNpb24gOTcw
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBDU1NGb250RmFjZVNvdXJjZV9oCiAjZGVm
aW5lIENTU0ZvbnRGYWNlU291cmNlX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCisjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAt
NDUsNyArNDUsNyBAQAogI2VuZGlmCiAKIAotY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2UgOiBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2UgOiBwdWJs
aWMgQ2FjaGVkRm9udENsaWVudCB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VTb3VyY2UoY29u
c3QgU3RyaW5nJiwgQ2FjaGVkRm9udCogPSAwKTsKICAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNv
dXJjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCShyZXZpc2lvbiA5NzA2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICNkZWZpbmUgQ1NTSW1wb3J0UnVsZV9oCiAKICNpbmNsdWRlICJD
U1NSdWxlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
CkBAIC0zMyw3ICszMyw3IEBACiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3MgTWVk
aWFMaXN0OwogCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENTU1J1bGUsIHByaXZhdGUg
Q2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgQ1NTSW1wb3J0UnVsZSA6IHB1YmxpYyBDU1NS
dWxlLCBwcml2YXRlIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0ltcG9ydFJ1bGU+
IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1Jl
ZlB0cjxNZWRpYUxpc3Q+IG1lZGlhKQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9y
dFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5o
CShyZXZpc2lvbiA5NzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmIEVOQUJMRShYU0xUKQogCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCIKICNpbmNsdWRl
ICJTdHlsZUJhc2UuaCIKICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCiAKQEAgLTM0LDcgKzM0
LDcgQEAKIAogY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldDsKIAotY2xhc3MgWFNMSW1wb3J0UnVs
ZSA6IHB1YmxpYyBTdHlsZUJhc2UsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xh
c3MgWFNMSW1wb3J0UnVsZSA6IHB1YmxpYyBTdHlsZUJhc2UsIHByaXZhdGUgQ2FjaGVkU3R5bGVT
aGVldENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY3JlYXRlKFhTTFN0eWxlU2hlZXQqIHBh
cmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIGhyZWYpCkBAIC01Nyw3ICs1Nyw2IEBACiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
Ly8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRYU0xTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3Ry
aW5nJiBzaGVldCk7CiAgICAgCiAgICAgU3RyaW5nIG1fc3RySHJlZjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAJKHJldmlzaW9uIDk3MDY1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw3ICs4MCw3IEBACiB2b2lkIENhY2hlZEZvbnQ6OmRpZEFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYykKIHsKICAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5m
b250TG9hZGVkKHRoaXMpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRGb250Q2xpZW50Kj4o
YyktPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkRm9udDo6ZGF0YShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCkBAIC0xOTQsNyAr
MTk0LDcgQEAKICAgICAKICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50
cyk7CiAgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0KCkpCi0gICAg
ICAgICBjLT5mb250TG9hZGVkKHRoaXMpOworICAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkRm9u
dENsaWVudCo+KGMpLT5mb250TG9hZGVkKHRoaXMpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIENhY2hlZEZvbnRfaAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkZvbnRP
cmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAi
Rm9udFdpZHRoVmFyaWFudC5oIgpAQCAtMzQsNyArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3MgU1ZHRG9jdW1lbnQ7CkBAIC04
MCw2ICs4MCwxMiBAQAogICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKIH07CiAKK2NsYXNz
IENhY2hlZEZvbnRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkNhY2hlZEZvbnRDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Zm9udExvYWRlZChDYWNoZWRGb250KikgeyB9Cit9OworCiB9CiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCiAKLSNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00OSw3ICs0OSw3IEBACiB2b2lkIENhY2hlZFhTTFN0
eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKIHsgIAogICAg
IGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGMtPnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJj
ZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOworICAgICAgICBzdGF0
aWNfY2FzdDxDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldFhTTFN0eWxlU2hlZXQobV9y
ZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwogfQogCiB2
b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQpA
QCAtODQsNyArODQsNyBAQAogICAgIAogICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHco
bV9jbGllbnRzKTsKICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQo
KSkKLSAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwg
bV9yZXNwb25zZS51cmwoKSwgbV9zaGVldCk7CisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0
eWxlU2hlZXRDbGllbnQqPihjKS0+c2V0WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51
cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9zaGVldCk7CiB9CiAKIHZvaWQgQ2FjaGVkWFNMU3R5
bGVTaGVldDo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk3MDY1
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgaWYgKG1faW1hZ2UgJiYg
IW1faW1hZ2UtPmlzTnVsbCgpKQotICAgICAgICBjLT5pbWFnZUNoYW5nZWQodGhpcyk7CisgICAg
ICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oYyktPmltYWdlQ2hhbmdlZCh0aGlz
KTsKIAogICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoYyk7CiB9CkBAIC0yMzAsNyAr
MjMwLDcgQEAKIHsKICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7
CiAgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAg
IGMtPmltYWdlQ2hhbmdlZCh0aGlzLCBjaGFuZ2VSZWN0KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2VDbGllbnQqPihjKS0+aW1hZ2VDaGFuZ2VkKHRoaXMsIGNoYW5nZVJlY3QpOwog
fQogCiB2b2lkIENhY2hlZEltYWdlOjpjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2UoKQpAQCAt
MzczLDcgKzM3Myw3IEBACiAgICAgCiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyht
X2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgp
KSB7Ci0gICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGMpLT53aWxsUmVuZGVySW1hZ2UodGhpcykp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NiArMjQsNyBAQAogI2RlZmluZSBDYWNoZWRJbWFnZV9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUaW1lci5oIgpA
QCAtMTAzLDYgKzEwNCwyMSBAQAogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tlbkltYWdlOwog
fTsKIAorY2xhc3MgQ2FjaGVkSW1hZ2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlQ2xpZW50KCkgeyB9CisKKyAg
ICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBvZiBhbiBpbWFnZSBjaGFuZ2VzLCBlaXRoZXIg
YmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5ldHdvcmsgb3IKKyAgICAvLyBiZWNh
dXNlIHdlIGFyZSBhbmltYXRpbmcuIElmIG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hh
bmdlZCByZWN0IG9mIHRoZSBpbWFnZS4KKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENh
Y2hlZEltYWdlKiwgY29uc3QgSW50UmVjdCogPSAwKSB7IH0KKworICAgIC8vIENhbGxlZCB0byBm
aW5kIG91dCBpZiB0aGlzIGNsaWVudCB3YW50cyB0byBhY3R1YWxseSBkaXNwbGF5IHRoZSBpbWFn
ZS4gVXNlZCB0byB0ZWxsIHdoZW4gd2UKKyAgICAvLyBjYW4gaGFsdCBhbmltYXRpb24uIENvbnRl
bnQgbm9kZXMgdGhhdCBob2xkIGltYWdlIHJlZnMgZm9yIGV4YW1wbGUgd291bGQgbm90IHJlbmRl
ciB0aGUgaW1hZ2UsCisgICAgLy8gYnV0IFJlbmRlckltYWdlcyB3b3VsZCAoYXNzdW1pbmcgdGhl
eSBoYXZlIHZpc2liaWxpdHk6IHZpc2libGUgYW5kIHRoZWlyIHJlbmRlciB0cmVlIGlzbid0IGhp
ZGRlbgorICAgIC8vIGUuZy4sIGluIHRoZSBiL2YgY2FjaGUgb3IgaW4gYSBiYWNrZ3JvdW5kIHRh
YikuCisgICAgdmlydHVhbCBib29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopIHsgcmV0
dXJuIGZhbHNlOyB9Cit9OworCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgJKHJldmlzaW9uIDk3MDY1
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDQzICsyOSwxNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENhY2hlZFJlc291cmNlOwogCi0gICAg
Y2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLSAgICBjbGFzcyBDYWNoZWRGb250OwotICAgIGNs
YXNzIENhY2hlZFJlc291cmNlOwotICAgIGNsYXNzIENhY2hlZEltYWdlOwotICAgIGNsYXNzIElt
YWdlOwotICAgIGNsYXNzIEludFJlY3Q7Ci0gICAgY2xhc3MgS1VSTDsKLQotICAgIC8qKgotICAg
ICAqIEBpbnRlcm5hbAotICAgICAqCi0gICAgICogYSBjbGllbnQgd2hvIHdhbnRzIHRvIGxvYWQg
c3R5bGVzaGVldHMsIGltYWdlcyBvciBzY3JpcHRzIGZyb20gdGhlIHdlYiBoYXMgdG8KLSAgICAg
KiBpbmhlcml0IGZyb20gdGhpcyBjbGFzcyBhbmQgb3ZlcmxvYWQgb25lIG9mIHRoZSAzIGZ1bmN0
aW9ucwotICAgICAqCi0gICAgICovCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewot
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgfkNhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9Ci0KLSAgICAgICAgLy8gQ2FsbGVkIHdo
ZW5ldmVyIGEgZnJhbWUgb2YgYW4gaW1hZ2UgY2hhbmdlcywgZWl0aGVyIGJlY2F1c2Ugd2UgZ290
IG1vcmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG9yCi0gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXJl
IGFuaW1hdGluZy4gSWYgbm90IG51bGwsIHRoZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qg
b2YgdGhlIGltYWdlLgotICAgICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UmVjdCogPSAwKSB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxs
ZWQgdG8gZmluZCBvdXQgaWYgdGhpcyBjbGllbnQgd2FudHMgdG8gYWN0dWFsbHkgZGlzcGxheSB0
aGUgaW1hZ2UuICBVc2VkIHRvIHRlbGwgd2hlbiB3ZQotICAgICAgICAvLyBjYW4gaGFsdCBhbmlt
YXRpb24uICBDb250ZW50IG5vZGVzIHRoYXQgaG9sZCBpbWFnZSByZWZzIGZvciBleGFtcGxlIHdv
dWxkIG5vdCByZW5kZXIgdGhlIGltYWdlLAotICAgICAgICAvLyBidXQgUmVuZGVySW1hZ2VzIHdv
dWxkIChhc3N1bWluZyB0aGV5IGhhdmUgdmlzaWJpbGl0eTogdmlzaWJsZSBhbmQgdGhlaXIgcmVu
ZGVyIHRyZWUgaXNuJ3QgaGlkZGVuCi0gICAgICAgIC8vIGUuZy4sIGluIHRoZSBiL2YgY2FjaGUg
b3IgaW4gYSBiYWNrZ3JvdW5kIHRhYikuCi0gICAgICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVuZGVy
SW1hZ2UoQ2FjaGVkSW1hZ2UqKSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3QgS1VS
TCYgLyogYmFzZVVSTCAqLywgY29uc3QgU3RyaW5nJiAvKiBjaGFyc2V0ICovLCBjb25zdCBDYWNo
ZWRDU1NTdHlsZVNoZWV0KikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRYU0xTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3QgS1VSTCYgLyogYmFzZVVSTCAqLywg
Y29uc3QgU3RyaW5nJiAvKiBzaGVldCAqLykgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb250
TG9hZGVkKENhY2hlZEZvbnQqKSB7fTsKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlKikgeyB9Ci0gICAgfTsKLQorY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1
YWwgfkNhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKikgeyB9Citwcm90ZWN0ZWQ6CisgICAgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQoKSB7IH0KK307CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDE5OTgg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgCisgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVk
ZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyBwYWdlcyBmcm9t
IHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyAqLwor
CisjaWZuZGVmIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaAorI2RlZmluZSBDYWNoZWRTdHlsZVNo
ZWV0Q2xpZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OworCitjbGFzcyBDYWNo
ZWRTdHlsZVNoZWV0Q2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRTdHls
ZVNoZWV0Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBT
dHJpbmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8s
IGNvbnN0IEtVUkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsg
fQorfTsKK30KKworI2VuZGlmIC8vIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpbmNs
dWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCiAj
aW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01Myw3ICs1Myw3IEBACiB2b2lkIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYykKIHsK
ICAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVz
b3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5n
KCkubmFtZSgpLCB0aGlzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENs
aWVudCo+KGMpLT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jl
c3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKIH0KIAog
dm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjphbGxDbGllbnRzUmVtb3ZlZCgpCkBAIC0xMTMsNyAr
MTEzLDcgQEAKIAogICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsK
ICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkKLSAgICAgICAg
Yy0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51
cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7CisgICAgICAgIHN0YXRp
Y19jYXN0PENhY2hlZFN0eWxlU2hlZXRDbGllbnQqPihjKS0+c2V0Q1NTU3R5bGVTaGVldChtX3Jl
c291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLm5hbWUoKSwgdGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZXJyb3Io
Q2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSW1hZ2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1h
Z2VMb2FkZXIuaAkocmV2aXNpb24gOTcwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1h
Z2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lmbmRlZiBJbWFn
ZUxvYWRlcl9oCiAjZGVmaW5lIEltYWdlTG9hZGVyX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBA
IC0zMyw3ICszMyw3IEBACiBjbGFzcyBJbWFnZUxvYWRFdmVudFNlbmRlcjsKIGNsYXNzIFJlbmRl
ckltYWdlUmVzb3VyY2U7CiAKLWNsYXNzIEltYWdlTG9hZGVyIDogcHVibGljIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKK2NsYXNzIEltYWdlTG9hZGVyIDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBJbWFnZUxvYWRlcihFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+SW1h
Z2VMb2FkZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkocmV2aXNp
b24gOTcwNjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJEcmFnQ2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsOSArMjExLDkgQEAK
IAogQGltcGxlbWVudGF0aW9uIFdLUGFzdGVib2FyZE93bmVyCiAKLXN0YXRpYyBDYWNoZWRSZXNv
dXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKK3N0YXRpYyBDYWNoZWRJbWFnZUNsaWVu
dCogcHJvbWlzZWREYXRhQ2xpZW50KCkKIHsKLSAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAgICBzdGF0aWMgQ2FjaGVk
SW1hZ2VDbGllbnQqIGNsaWVudCA9IG5ldyBDYWNoZWRJbWFnZUNsaWVudDsKICAgICByZXR1cm4g
Y2xpZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzA5MikKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEw
LTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVXNlIGEg
Q2FjaGVkSW1hZ2VDbGllbnQgaW5zdGVhZCBvZiBDYWNoZWRSZXNvdXJjZUNsaWVudAorICAgICAg
ICBpbiBXZWJEcmFnQ2xpZW50TWFjLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGll
bnRNYWMubW06CisgICAgICAgIChwcm9taXNlZERhdGFDbGllbnQpOgorCiAyMDExLTEwLTEwICBT
aW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRd
IEZpeCBidWlsZCB3aXRoIHFyZWFsID09IGZsb2F0IG9uIE1lZUdvIDEuMiBIYXJtYXR0YW4K
</data>

          </attachment>
      

    </bug>

</bugzilla>