<?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>92685</bug_id>
          
          <creation_ts>2012-07-30 15:14:35 -0700</creation_ts>
          <short_desc>[BlackBerry] Enable CSS Filter Effects</short_desc>
          <delta_ts>2012-07-31 12:52:58 -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>WebKit BlackBerry</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joshua Netterfield">jnetterfield</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>anilsson</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jnetterfield</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>682446</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-30 15:14:35 -0700</bug_when>
    <thetext>BlackBerry does not currently support hardware-accelerated CSS filter effects.

This bug covers neither CSS reference (SVG) filters, nor CSS custom (shader) filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683113</commentid>
    <comment_count>1</comment_count>
      <attachid>155548</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 08:37:06 -0700</bug_when>
    <thetext>Created attachment 155548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683129</commentid>
    <comment_count>2</comment_count>
      <attachid>155548</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-31 08:50:10 -0700</bug_when>
    <thetext>Comment on attachment 155548
Patch

Attachment 155548 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13386881</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683147</commentid>
    <comment_count>3</comment_count>
      <attachid>155548</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-31 09:02:15 -0700</bug_when>
    <thetext>Comment on attachment 155548
Patch

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

nice!

please fix the style nits and minor issues. r-&apos;ing since it needs another iteration to fix EFL anyways.

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsLayerBlackBerry.h:83
&gt; +    virtual bool setFilters(const FilterOperations &amp;);

the &apos;bool&apos; return type here is very unclear. I imagine this class implements this method which is inherited from someone else?

&gt; Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h:215
&gt; +    bool filterOperationsChanged() { return m_filterOperationsChanged; }

const

&gt; Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h:218
&gt; +    WTF::Vector&lt;RefPtr&lt;LayerFilterRendererAction&gt; &gt; filterActions() { return m_filterActions; }

const

&gt; Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h:266
&gt; +    bool m_filterOperationsChanged;

you should manually default initialize it in the ctor.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:70
&gt; +    default:
&gt; +        return -1;
&gt; +    }

does it cover all cases of the enum? if you ASSERT_NOT_REACHED here, please.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:89
&gt; +Uniform1f::Uniform1f(int c_location, float c_val) : Uniformf(c_location), m_val(c_val)

wrong style, new line here.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:138
&gt; +{
&gt; +
&gt; +}

unneeded extra line.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:142
&gt; +LayerFilterRendererAction::~LayerFilterRendererAction()
&gt; +{
&gt; +}

omit this. let the compiler private one to us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683186</commentid>
    <comment_count>4</comment_count>
      <attachid>155565</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 09:20:44 -0700</bug_when>
    <thetext>Created attachment 155565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683189</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 09:24:02 -0700</bug_when>
    <thetext>Please disregard the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683194</commentid>
    <comment_count>6</comment_count>
      <attachid>155567</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 09:34:19 -0700</bug_when>
    <thetext>Created attachment 155567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683231</commentid>
    <comment_count>7</comment_count>
      <attachid>155578</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 10:11:33 -0700</bug_when>
    <thetext>Created attachment 155578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683232</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 10:11:52 -0700</bug_when>
    <thetext>Got rid of WTF:: prefixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683249</commentid>
    <comment_count>9</comment_count>
      <attachid>155578</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-31 10:35:49 -0700</bug_when>
    <thetext>Comment on attachment 155578
Patch

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

Looks good, one more iteration needed.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:371
&gt; +    for (int i = 0;i &lt; LayerData::NumberOfCSSFilterShaders; ++i)

Add a space after i = 0;

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:98
&gt; +        // see the ping-pong note in LayerFilterRenderer::applyActions

Not completely WebKit style comments.

&gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h:102
&gt; +    void setFilters(const FilterOperations&amp; filters) { m_filters = filters; m_filtersChanged = 1; setNeedsCommit(); }

Inconsistent use of m_filtersChanged, setting to 1 and false.

&gt; ChangeLog:11
&gt; +        * Source/cmakeconfig.h.cmake: Acknowldge CSS filter effects

Typo Acknowldge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683252</commentid>
    <comment_count>10</comment_count>
      <attachid>155578</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-07-31 10:42:15 -0700</bug_when>
    <thetext>Comment on attachment 155578
Patch

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

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:76
&gt; +    , m_refCount(1)

Now that Uniformf is RefCounted, you can remove m_refCount =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683287</commentid>
    <comment_count>11</comment_count>
      <attachid>155589</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 11:25:54 -0700</bug_when>
    <thetext>Created attachment 155589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683303</commentid>
    <comment_count>12</comment_count>
      <attachid>155589</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-31 11:37:30 -0700</bug_when>
    <thetext>Comment on attachment 155589
Patch

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

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:100
&gt; +    bool shouldPushSnapshot() { return m_pushSnapshot; }

Could be const.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:101
&gt; +    void setPushSnapshot() { m_pushSnapshot = 1; }

Better use true.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:103
&gt; +    bool shouldPopSnapshot() { return m_popSnapshot; }

Ditto.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:104
&gt; +    void setPopSnapshot() { m_popSnapshot = 1; }

Etcetera.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683310</commentid>
    <comment_count>13</comment_count>
      <attachid>155596</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-31 11:41:59 -0700</bug_when>
    <thetext>Created attachment 155596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683312</commentid>
    <comment_count>14</comment_count>
      <attachid>155596</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-31 11:43:01 -0700</bug_when>
    <thetext>Comment on attachment 155596
Patch

Good work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683401</commentid>
    <comment_count>15</comment_count>
      <attachid>155596</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 12:52:52 -0700</bug_when>
    <thetext>Comment on attachment 155596
Patch

Clearing flags on attachment: 155596

Committed r124242: &lt;http://trac.webkit.org/changeset/124242&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683402</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 12:52:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155548</attachid>
            <date>2012-07-31 08:37:06 -0700</date>
            <delta_ts>2012-07-31 09:20:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731113547.patch</filename>
            <type>text/plain</type>
            <size>61470</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uN2YyNmU4ZDFkNzcyNjQ5MjU0NDg0OTYwMzcxZDE1
ZTExNjJiMDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJPdmVycmlkZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6ZmlsdGVyQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRGaWx0ZXJBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoTGF5ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6ZmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVbmlmb3JtZjo6VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTFmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OlVuaWZvcm0xZik6CisgICAgICAgIChXZWJD
b3JlOjpVbmlmb3JtMmY6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm0zZjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNmOjpVbmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjpwb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybWY6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAg
ICAgICAoVW5pZm9ybTNmKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxkUHVzaFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNl
dFB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpzaG91bGRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpzZXRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjphcHBlbmRVbmlmb3JtKToKKyAgICAgICAgKExheWVyRmlsdGVy
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmRpc2FibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oOgorICAgICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpbHRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorCiAyMDEyLTA3LTMxICBB
bGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiB0YWtlIGludG8gYWNjb3VudCB0aGUgd2hvbGUgc2VjdXJpdHkgb3JpZ2luIGluc3Rl
YWQgb2YganVzdCBob3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUzNjEwZGY5MjNjOTAxOWQ4
NmZkNGJiZmNmZDdlNGM5MjhiNGFjNjkuLmU0MzgzYzc2YzdlNzhhMWFkNzRkMDUyNTkxNzVhYWE0
YzljZDM1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDM4LDYgKzEwMzgsNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAgICBjc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5j
cHAKKyAgICBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCiAgICAgY3NzL1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcAogICAgIGNzcy9XcmFwU2hhcGVGdW5jdGlvbnMuY3BwCiAKQEAgLTE2
MDUsNiArMTYwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNoYWRlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAKICAgICBsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTE4MjEsMTAgKzE4MjMsMTEgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTg0OSwxNiArMTg1MiwxNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vTkVPTkhlbHBlcnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQmxl
bmRORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUNvbXBvc2l0ZUFy
aXRobWV0aWNORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQ29tcG9z
aXRlQXJpdGhtZXRpY05FT04uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0v
RkVHYXVzc2lhbkJsdXJORU9OLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJt
L0ZFTGlnaHRpbmdORU9OLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZF
TGlnaHRpbmdORU9OLmgKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDFh
ZTVmZTY5MDdhNDczODQwOTlmYWViMGM3OWMyYWY5ZDFhYmJiY2UuLmE4MTZiMTQ4OTA1YzYzOGVi
N2Y4NjdiZTNmYWQ0M2IzNzZmM2VmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVy
cnkuY21ha2UKQEAgLTI3Miw2ICsyNzIsNyBAQCBJRiAoV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAKICAgICAgICAg
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0
aW5nVGhyZWFkLmNwcAorICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKICAgICAgICAg
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
U3VyZmFjZS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclRpbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwCmluZGV4IDFiODFmNTRkZDAzOGU0ZWQ2ZTI1OTUwZjg5M2MxN2I2NGFiZGFkMTQu
LmUyNzc5YzNjMjFlYzEyZDZlNDZlZGRhZDU4ODdkOWFjMjI3YWI2NWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxh
eWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yOTIsNiArMjkzLDI2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBoYXNGaXhlZEFuY2Vz
dG9yCiAgICAgdXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogfQogCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVy
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmIChtX2ZpbHRlcnMg
PT0gZmlsdGVycykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkNvbXBvc2l0
ZUZpbHRlcnMgPSBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0
ZXJzKTsKKyAgICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBtX2ZpbHRlcnMg
PSBmaWx0ZXJzOworICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOwor
ICAgICAgICB1cGRhdGVGaWx0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWx0ZXJz
LmNsZWFyKCk7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGNhbkNvbXBvc2l0ZUZpbHRlcnM7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBp
ZiAobV9iYWNrZ3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBA
IC04MDMsNiArODI0LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxh
eWVyQmFja2dyb3VuZENvbG9yKCkKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigq
bV9jb250ZW50c0xheWVyKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgR3Jh
cGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUZpbHRlcnMoKQoreworICAgIGlmICghbV9maWx0
ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbWFyeUxheWVyKCktPnNldEZp
bHRlcnMobV9maWx0ZXJzKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5Ojp1cGRhdGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgdHJhbnNm
b3JtIGxheWVyLCB0aGUgdHJhbnNmb3JtIG11c3QgYmUgc2V0IG9uIHRoYXQgbGF5ZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhp
Y3NMYXllckJsYWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRleCBjMjY2OTQ3YWYxYzlhYjM1
OWI1MzViOTRkZWQ1NjhjYjcyMjRkNmQ5Li5mOWZlZTc4M2EwNmQ3MWMwYTQ5NmJkNzVmYTk5ZTdh
ZmZlOThlZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCkBA
IC0yOSwxMyArMjksMTUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlBsYXRm
b3JtLmgiCisKICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2RlZmluZSBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgotCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Nyw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQ29u
dGFpbmVyKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01U
cmVlKGJvb2wpOwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgYm9vbCBz
ZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMgJik7CisgICAgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQorI2VuZGlmCisK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAKQEAgLTE0Niw2ICsxNTMsOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlSGFzRml4ZWRDb250YWluZXIoKTsKICAgICB2b2lk
IHVwZGF0ZUhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVy
QmFja2dyb3VuZENvbG9yKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgdXBk
YXRlRmlsdGVycygpOworI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKCk7CiAKICAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoSW1hZ2UqKTsKQEAgLTE1OSw2ICsxNjksMTAgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fdHJhbnNmb3JtTGF5ZXI7
CiAgICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX2NvbnRlbnRzTGF5ZXI7CiAKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisjZW5k
aWYKKwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9ydW5uaW5nQW5pbWF0
aW9uczsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fc3VzcGVuZGVkQW5p
bWF0aW9uczsKICAgICBkb3VibGUgbV9zdXNwZW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgKaW5kZXggYjMzNTYwNjY5YzUxNDBkYzVkNWY5MjAxMmEzMDM1MTli
ZTAxMTliMC4uOGQxODFlMWVmNDhhMDIwNmRhYjI0MzIwZGQ3NTc4MmQ1ZTgwMDJiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKQEAgLTM1LDkgKzM1LDExIEBACiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmltYXRp
b24uaCIKICNpbmNsdWRlICJMYXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRl
cmVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKICNpbmNsdWRlICJMYXll
clRpbGVyLmgiCiAKQEAgLTEwMSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgZmxvYXQg
bV9vcGFjaXR5OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1h
dGlvbnM7CiAKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKQEAgLTExMCw2ICsxMTMs
OCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7CiB9OwogCitjbGFz
cyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOworCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+
LCBwdWJsaWMgTGF5ZXJEYXRhLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQ
b2ludGVyQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21wb3Np
dGluZ1RocmVhZD4gY3JlYXRlKExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dCopOwpAQCAtMjA3LDYgKzIxMiwxMiBAQCBwdWJsaWM6CiAgICAgTGF5ZXJPdmVycmlkZSogb3Zl
cnJpZGUoKTsKICAgICB2b2lkIGNsZWFyT3ZlcnJpZGUoKTsKIAorICAgIGJvb2wgZmlsdGVyT3Bl
cmF0aW9uc0NoYW5nZWQoKSB7IHJldHVybiBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkOyB9Cisg
ICAgdm9pZCBzZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChib29sIGNoYW5nZWQpIHsgbV9maWx0
ZXJPcGVyYXRpb25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0KKworICAgIFdURjo6VmVjdG9yPFJlZlB0
cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGZpbHRlckFjdGlvbnMoKSB7IHJldHVybiBt
X2ZpbHRlckFjdGlvbnM7IH0KKyAgICB2b2lkIHNldEZpbHRlckFjdGlvbnMoY29uc3QgV1RGOjpW
ZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4mIGFjdGlvbnMpIHsgbV9m
aWx0ZXJBY3Rpb25zID0gYWN0aW9uczsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TGF5
ZXJDb21wb3NpdGluZ1RocmVhZCgpOwogCkBAIC0yNTEsNiArMjYyLDkgQEAgcHJpdmF0ZToKIAog
ICAgIE93blB0cjxMYXllck92ZXJyaWRlPiBtX292ZXJyaWRlOwogICAgIExheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQqIG1fY2xpZW50OworCisgICAgYm9vbCBtX2ZpbHRlck9wZXJhdGlvbnND
aGFuZ2VkOworICAgIFdURjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9u
PiA+IG1fZmlsdGVyQWN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RGF0YS5oCmluZGV4IGQ5OTEyMTU1MTExMTkwYzVmNGM2YmMxMjEyMTU3NDExYTExMWU4NzUuLjdl
YzU4MWI4ZGE0OTkxMmM2MGFhMzFmZDA2OWYyMTRiM2NjZjg2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaApA
QCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBMYXllckRhdGFfaAogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTU5LDYg
KzYwLDI1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyUHJv
Z3JhbVNoYWRlckJHUkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkxh
eWVyUHJvZ3JhbVNoYWRlcnMgfTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBlbnVt
IENTU0ZpbHRlclNoYWRlcnMgeyBDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGUgPSAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlclNlcGlhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlclNhdHVyYXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlckh1ZVJvdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJJbnZlcnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTRmlsdGVyU2hhZGVyQnJpZ2h0bmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJDb250cmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJPcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U0ZpbHRlclNoYWRlckJsdXJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRl
clNoYWRlckJsdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRl
clNoYWRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJQYXNz
dGhyb3VnaCwKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTRmlsdGVyU2hhZGVyQ3VzdG9tLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzIH07CisjZW5kaWYKKwogICAgIExheWVy
RGF0YShMYXllclR5cGUgdHlwZSkKICAgICAgICAgOiBtX2xheWVyVHlwZSh0eXBlKQogICAgICAg
ICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCkBAIC0xMTUsNiArMTM1LDEwIEBAIHB1YmxpYzoK
IAogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAorI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KKyNlbmRpZgorCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNPcGFxdWU7IH0KIAogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0xNzcsNiArMjAxLDkgQEAgcHJvdGVjdGVk
OgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CiAKICAgICBm
bG9hdCBtX29wYWNpdHk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIEZpbHRlck9wZXJh
dGlvbnMgbV9maWx0ZXJzOworI2VuZGlmCiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CiAgICAg
ZmxvYXQgbV9ib3JkZXJXaWR0aDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTNmMzkwNzFkYWUyOTQ5YWY0MDBkNjZmZWVhZDhjMmMxZWFhYmJiNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisK
KyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJPcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNpbmNsdWRlIDxWZWN0b3IuaD4KKworI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbnQgb3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKGNvbnN0IEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSYgdCkKK3sKKyAgICBzd2l0Y2ggKHQpIHsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0
ZXJTaGFkZXJHcmF5c2NhbGU7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAg
ICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTZXBpYTsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0Zp
bHRlclNoYWRlclNhdHVyYXRlOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRF
OgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGU7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0
YTo6Q1NTRmlsdGVyU2hhZGVySW52ZXJ0OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJPcGFjaXR5Owor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gTGF5
ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzOworICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVy
Q29udHJhc3Q7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVy
biBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZOworICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hh
ZGVyU2hhZG93OworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q1VTVE9NOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJDdXN0b207
CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitV
bmlmb3JtZjo6VW5pZm9ybWYoaW50IGNfbG9jYXRpb24pCisgICAgOiBtX2xvY2F0aW9uKGNfbG9j
YXRpb24pCisgICAgLCBtX3JlZkNvdW50KDEpCit7Cit9CisKK3ZvaWQgVW5pZm9ybTFmOjphcHBs
eSgpCit7CisgICAgZ2xVbmlmb3JtMWYobG9jYXRpb24oKSwgbV92YWwpOworfQorCitQYXNzUmVm
UHRyPFVuaWZvcm1mPiBVbmlmb3JtMWY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0xZihsb2NhdGlvbiwgdmFsKSk7Cit9
CisKK1VuaWZvcm0xZjo6VW5pZm9ybTFmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbCkgOiBV
bmlmb3JtZihjX2xvY2F0aW9uKSwgbV92YWwoY192YWwpCit7Cit9CisKK3ZvaWQgVW5pZm9ybTJm
OjphcHBseSgpCit7CisgICAgZ2xVbmlmb3JtMmYobG9jYXRpb24oKSwgbV92YWxbMF0sIG1fdmFs
WzFdKTsKK30KKworUGFzc1JlZlB0cjxVbmlmb3JtZj4gVW5pZm9ybTJmOjpjcmVhdGUoaW50IGxv
Y2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVW5pZm9ybTJmKGxvY2F0aW9uLCB2YWwwLCB2YWwxKSk7Cit9CisKK1VuaWZvcm0yZjo6VW5p
Zm9ybTJmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSkgOiBVbmlm
b3JtZihjX2xvY2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFd
ID0gY192YWwxOworfQorCit2b2lkIFVuaWZvcm0zZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9y
bTNmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0pOworfQorCitQYXNz
UmVmUHRyPFVuaWZvcm1mPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZh
bDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBV
bmlmb3JtM2YobG9jYXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKK30KKworVW5pZm9ybTNmOjpV
bmlmb3JtM2YoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9h
dCBjX3ZhbDIpIDogVW5pZm9ybWYoY19sb2NhdGlvbikKK3sKKyAgICBtX3ZhbFswXSA9IGNfdmFs
MDsKKyAgICBtX3ZhbFsxXSA9IGNfdmFsMTsKKyAgICBtX3ZhbFsyXSA9IGNfdmFsMjsKK30KKwor
UGFzc1JlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiBMYXllckZpbHRlclJlbmRlcmVy
QWN0aW9uOjpjcmVhdGUoaW50IHByb2dyYW1JZCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24ocHJvZ3JhbUlkKSk7Cit9CisKK0xheWVyRmlsdGVy
UmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IGNfcHJvZ3JhbUlk
KQorICAgIDogbV9yZWZDb3VudCgxKQorICAgICwgbV9wcm9ncmFtSWQoY19wcm9ncmFtSWQpCisg
ICAgLCBtX3B1c2hTbmFwc2hvdChmYWxzZSkKKyAgICAsIG1fcG9wU25hcHNob3QoZmFsc2UpCit7
CisKK30KKworTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6fkxheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb24oKQoreworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnVzZUFjdGlv
bk9uKExheWVyRmlsdGVyUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIEFTU0VSVChtX3Byb2dy
YW1JZCAhPSAtMSk7CisgICAgaWYgKG1fcHJvZ3JhbUlkID09IC0xKSB7CisgICAgICAgIGdsVXNl
UHJvZ3JhbShyZW5kZXJlci0+bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyUGFzc3Rocm91Z2hdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBn
bFVzZVByb2dyYW0ocmVuZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFttX3Byb2dyYW1J
ZF0pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VuaWZvcm1zLnNpemUoKTsgKytp
KQorICAgICAgICBtX3VuaWZvcm1zW2ldLT5hcHBseSgpOworfQorCitQYXNzT3duUHRyPExheWVy
RmlsdGVyUmVuZGVyZXI+IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShjb25zdCBpbnQmIHBv
c2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IExheWVyRmlsdGVyUmVuZGVyZXIocG9zaXRpb25Mb2NhdGlvbiwgdGV4
Q29vcmRMb2NhdGlvbikpOworfQorCitMYXllckZpbHRlclJlbmRlcmVyOjpMYXllckZpbHRlclJl
bmRlcmVyKGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50JiB0ZXhDb29yZExv
Y2F0aW9uKQorICAgIDogbV9wb3NpdGlvbkxvY2F0aW9uKHBvc2l0aW9uTG9jYXRpb24pCisgICAg
LCBtX3RleENvb3JkTG9jYXRpb24odGV4Q29vcmRMb2NhdGlvbikKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAg
ICAgIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSA9IDA7CisKKyAgICBpZiAoIShtX2VuYWJs
ZWQgPSBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkpKQorICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJD
U1MgRmlsdGVycyBhcmUgbm90IGVuYWJsZWQgZHVlIHRvIGZhaWxlZCBpbml0aWFsaXphdGlvbi4i
KTsKK30KKworLy8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9uIGxv
Y2F0aW9uIGFjcm9zcyBhbGwgcHJvZ3JhbXMKKy8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRo
aXMgYWxsb3dzIHRoZSBjb2RlIHRvIGJpbmQgdGhlIGF0dHJpYnV0ZXMgb25seSBvbmNlCisvLyBl
dmVuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gcHJvZ3JhbXMuCisvLworLy8gVGhpcyBpcyBhbiBl
eHRlbnNpb24gb2YgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uIGFuZCB0
aGUgbG9jYXRpb25zCisvLyB3aWxsIG1hdGNoIHRob3NlIG9mIExheWVyUmVuZGVyZXIuIFNlZSBM
YXllckZpbHRlclJlbmRlcmVyOjpMYXllckZpbHRlclJlbmRlcmVyKCkKK3ZvaWQgTGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3Qg
Y2hhciogYXR0cmliTmFtZSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6
TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIGdsQmluZEF0dHJpYkxvY2F0
aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSwgbG9jYXRpb24sIGF0dHJpYk5hbWUpOwor
fQorCitib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMo
KQoreworICAgIC8vIFNlZSBhbHNvIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorCisg
ICAgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBh
X3Bvc2l0aW9uOyAgIFxuIgorICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBc
biIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ2
b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOyAg
XG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyNkZWZpbmUgU1RBTkRBUkRfRklM
VEVSKHguLi4pIFwKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiJcCisgICAg
ICAgICJcbiJcCisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkO1xuIlwK
KyAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlO1xuIlwKKyAgICAgICAg
InVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAgICAgICAjeFwKKyAgICAgICAg
InZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHNfdGV4
dHVyZSwgdl90ZXhDb29yZCkpOyB9IgorCisjZGVmaW5lIE9GRlNFVF9GSUxURVIoeC4uLikgXAor
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIlwKKyAgICAgICAgIlxuIlwKKyAg
ICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5p
Zm9ybSBsb3dwIHNhbXBsZXIyRCBzX3RleHR1cmU7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdo
cCBmbG9hdCB1X2Ftb3VudDtcbiJcCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgdmVjMiB1X29m
ZnNldDtcbiJcCisgICAgICAgICN4XAorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9G
cmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkIC0gdV9vZmZz
ZXQpKTsgfSIKKworI2RlZmluZSBCTFVSX0ZJTFRFUih4Li4uKSBcCisgICAgICAgICJwcmVjaXNp
b24gaGlnaHAgZmxvYXQ7IFxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgInZhcnlpbmcgbWVk
aXVtcCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIy
RCBzX3RleHR1cmU7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtc
biJcCisgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYmx1clNpemU7XG4iXAorICAgICAg
ICAiY29uc3QgZmxvYXQgcGkgPSAzLjE0MTU5Mjc7XG4iXAorICAgICAgICAjeFwKKyAgICAgICAg
InZvaWQgbWFpbih2b2lkKVxuIlwKKyAgICAgICAgIntcbiJcCisgICAgICAgICJ2ZWMzIGluY3I7
XG4iXAorICAgICAgICAiaW5jci54ID0gMS4wIC8gKHNxcnQoMi4wICogcGkpICogdV9hbW91bnQp
O1xuIlwKKyAgICAgICAgImluY3IueSA9IGV4cCgtMC41IC8gKHVfYW1vdW50ICogdV9hbW91bnQp
KTtcbiJcCisgICAgICAgICJpbmNyLnogPSBpbmNyLnkgKiBpbmNyLnk7XG4iXAorICAgICAgICAi
XG4iXAorICAgICAgICAidmVjNCBhdmcgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4iXAor
ICAgICAgICAiZmxvYXQgY29lZmZpY2llbnRTdW0gPSAwLjA7XG4iXAorICAgICAgICAiXG4iXAor
ICAgICAgICAiYXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQueHkpICogaW5j
ci54O1xuIlwKKyAgICAgICAgImNvZWZmaWNpZW50U3VtICs9IGluY3IueDtcbiJcCisgICAgICAg
ICJpbmNyLnh5ICo9IGluY3IueXo7XG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAiZm9yIChm
bG9hdCBpID0gMS4wOyBpIDw9IG51bUJsdXJQaXhlbHNQZXJTaWRlOyBpKyspIHtcbiJcCisgICAg
ICAgICIgICAgYXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQueHkgLSBpICog
dV9ibHVyU2l6ZSAqIGJsdXJNdWx0aXBseVZlYykgKiBpbmNyLng7XG4iXAorICAgICAgICAiICAg
IGF2ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5ICsgaSAqIHVfYmx1clNp
emUgKiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBjb2VmZmlj
aWVudFN1bSArPSAyLjAgKiBpbmNyLng7XG4iXAorICAgICAgICAiICAgIGluY3IueHkgKj0gaW5j
ci55ejtcbiJcCisgICAgICAgICJ9XG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAiZ2xfRnJh
Z0NvbG9yID0gYXZnIC8gY29lZmZpY2llbnRTdW07XG4iXAorICAgICAgICAifSIKKworICAgIGNv
bnN0IGNoYXIqIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnNd
OworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckdyYXlzY2FsZV0g
PSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9h
bW91bnQ7CisgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAq
IGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIy
ICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6
Q1NTRmlsdGVyU2hhZGVyU2VwaWFdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZl
YzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dwIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAu
MzkzICsgMC42MDcgKiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50
KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgw
LjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3Vu
dCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBh
bW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuYSk7CisgICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZV0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAg
IGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcx
NSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91
bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICog
dV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAt
IDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9hbW91bnQp
ICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9
CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJIdWVS
b3RhdGVdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQx
NTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBjID0gY29zKHVfYW1v
dW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1v
dW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yICogKDAu
MjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43
MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjky
OCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEz
ICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4xNDAp
ICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSAr
ICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAo
MC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSk7CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6
OkNTU0ZpbHRlclNoYWRlckludmVydF0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3Ag
ZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQg
KyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29s
b3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAg
ICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVy
QnJpZ2h0bmVzc10gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9y
LnJnYiAqICgxLjAgKyB1X2Ftb3VudCksIGNvbG9yLmEpOworICAgICAgICB9CisgICAgKTsKKwor
ICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJDb250cmFzdF0gPSBTVEFO
REFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7
IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQorICAgICAgICBsb3dwIHZlYzQg
c2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVj
NChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIp
LCBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0
YTo6Q1NTRmlsdGVyU2hhZGVyT3BhY2l0eV0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7
CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckJsdXJYXSA9IEJMVVJfRklMVEVSKAorICAgICAgICBjb25zdCBmbG9hdCBudW1CbHVy
UGl4ZWxzUGVyU2lkZSA9IDIuMDsKKyAgICAgICAgY29uc3QgdmVjMiAgYmx1ck11bHRpcGx5VmVj
ICAgICAgPSB2ZWMyKDEuMCwgMC4wKTsKKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXSA9IEJMVVJfRklMVEVSKAorICAgICAgICBjb25zdCBm
bG9hdCBudW1CbHVyUGl4ZWxzUGVyU2lkZSA9IDIuMDsKKyAgICAgICAgY29uc3QgdmVjMiAgYmx1
ck11bHRpcGx5VmVjICAgICAgPSB2ZWMyKDAuMCwgMS4wKTsKKyAgICApOworCisgICAgc2hhZGVy
U3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvd10gPSBPRkZTRVRfRklMVEVSKAor
ICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMyB1X2NvbG9yOworICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29sb3IuYSA+
IDAuNSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCh1X2NvbG9yLnIsIHVfY29sb3IuZywg
dV9jb2xvci5iLCBjb2xvci5hKTsKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAg
fQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFz
c3Rocm91Z2hdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAg
ICAgIH0KKyAgICApOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJl
ck9mQ1NTRmlsdGVyU2hhZGVyczsgaSsrKSB7CisgICAgICAgIG1fY3NzRmlsdGVyUHJvZ3JhbU9i
amVjdFtpXSA9IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0
cmluZywgc2hhZGVyU3Ryc1tpXSk7CisgICAgICAgIGlmICghbV9jc3NGaWx0ZXJQcm9ncmFtT2Jq
ZWN0W2ldKSB7CisgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDb3VsZCBub3QgbG9hZCBDU1MgRmls
dGVyIFNoYWRlciAlaSIsIGkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gU2V0IEFUVFJJQiBsb2NhdGlvbnMgLSB0aGVzZSB3aWxsIGJlIHRo
ZSBzYW1lIGFzIHRoZSBwcm9ncmFtcyBpbiBMYXllclJlbmRlcmVyLmNwcAorICAgIGJpbmRDb21t
b25BdHRyaWJMb2NhdGlvbihtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0aW9uIik7CisgICAg
YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fdGV4Q29vcmRMb2NhdGlvbiwgImFfdGV4Q29vcmQi
KTsKKworICAgIC8vIFJlLWxpbmsgdG8gdGFrZSBlZmZlY3QKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIGds
TGlua1Byb2dyYW0obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldKTsKKworICAgIC8vIEdldCBV
TklGT1JNIGxvY2F0aW9ucworICAgIGZvciAoaW50IGkgPSAwO2kgPCBMYXllckRhdGE6Ok51bWJl
ck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBtX2Ftb3VudExvY2F0aW9uW2ldID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldLCAidV9hbW91
bnQiKTsKKworICAgIG1fYmx1ckFtb3VudExvY2F0aW9uWzBdID0gZ2xHZXRVbmlmb3JtTG9jYXRp
b24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1
clldLCAidV9ibHVyU2l6ZSIpOworICAgIG1fYmx1ckFtb3VudExvY2F0aW9uWzFdID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyQmx1clhdLCAidV9ibHVyU2l6ZSIpOworCisgICAgbV9zaGFkb3dDb2xvckxvY2F0
aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVy
RGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSwgInVfY29sb3IiKTsKKyAgICBtX29mZnNldExv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xh
eWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSwgInVfb2Zmc2V0Iik7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwaW5nKExheWVyUmVuZGVy
ZXJTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJB
TUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUt
PnRleHR1cmVJZCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZh
Y2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVy
ZXI6OnBvbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCksIDApOworICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNl
KiBzdXJmYWNlLCBpbnQgc291cmNlSWQpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fc25h
cHNob3RUZXh0dXJlLT50ZXh0dXJlSWQoKSwgMCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIHNvdXJjZUlkKTsKKyAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAv
LyB0byB0cmFuc3BhcmVuY3kKKworICAgIGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgp
LndpZHRoKCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSk7CisKKyAgICBnbFVzZVByb2dyYW0o
bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Ro
cm91Z2hdKTsKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKK30KKwor
dm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwb3BTbmFwc2hvdCgpCit7CisgICAgLy8gVGhlIG5h
bWUgaXMgc2xpZ2h0bHkgbWlzbGVhZGluZy4KKyAgICAvLyBUaGlzIERSQVdTIHRoZSBwcmV2aW91
cyB0ZXh0dXJlIHVzaW5nIHRoZSBjdXJyZW50IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24sIHRo
ZW4gc2V0cyB0aGUgdGV4dHVyZQorICAgIC8vIHRvIHRoZSBzbmFwc2hvdCB0ZXh0dXJlLiBOZXh0
IHRpbWUgZ2xEcmF3QXJyYXlzIGlzIGNhbGxlZCwgdGhlIHNuYXBzaG90IHdpbGwgYmUgZHJhd24u
CisKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc25hcHNob3RUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9
CisKK1dURjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IExheWVy
RmlsdGVyUmVuZGVyZXI6OmFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNl
KiBzdXJmYWNlLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BzKQor
eworICAgIFdURjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IHJl
dDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiA9ICpvcHNbaV0uZ2V0KCk7
CisgICAgICAgIGlmIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJh
dGlvbjo6QkxVUiAmJiBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3Bl
cmF0aW9uKS5zdGREZXZpYXRpb24oKS52YWx1ZSgpIDwgMC4xKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaW50IHByb2dyYW1JZCA9IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChv
cGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAgcmV0LmFwcGVuZChMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUocHJvZ3JhbUlkKSk7CisKKyAgICAgICAgc3dpdGNo
IChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVu
ZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCisg
ICAgICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAg
ICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExv
Y2F0aW9uW3Byb2dyYW1JZF0KKyAgICAgICAgICAgICAgICAsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJM
VVI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAvLyBCbHVyIGlzIGEgdHdvLXN0ZXAgcHJv
Y2VzczoKKyAgICAgICAgICAgIC8vICAgICAxLiBibHVyIFgKKyAgICAgICAgICAgIC8vICAgICAy
LiBibHVyIFkKKyAgICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGNhbiBoYXZlIDJuIHRpbWUgaW5z
dGVhZCBvZiBuXjIgdGltZSkKKworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLnN0ZERldmlhdGlvbigp
LnZhbHVlKCk7CisKKyAgICAgICAgICAgIC8vIEJMVVIgWToKKyAgICAgICAgICAgIHJldC5sYXN0
KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXll
ckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXSwgYW1vdW50KSk7CisgICAgICAgICAgICByZXQu
bGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0
aW9uWzBdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhl
aWdodCgpKSkpOworCisgICAgICAgICAgICAvLyBCTFVSIFg6CisgICAgICAgICAgICByZXQuYXBw
ZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckJsdXJYKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVu
aWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFk
ZXJCbHVyWF0sIGFtb3VudCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9y
bShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAgICAgICAg
ICAgICwgMS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKSkpOworCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkRST1BfU0hBRE9XOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gU2hhZG93IGlzIGEg
Zm91ci1zdGVwIHByb2Nlc3M6CisgICAgICAgICAgICAvLyAgICAgMS4gY2FwdHVyZSBzbmFwc2hv
dAorICAgICAgICAgICAgLy8gICAgICAgIHR1cm4gaW50byBhIHNvbGlkIG9mZnNldCBtYXNrCisg
ICAgICAgICAgICAvLyAgICAgMi4gYmx1ciBYCisgICAgICAgICAgICAvLyAgICAgMy4gYmx1ciBZ
CisgICAgICAgICAgICAvLyAgICAgNC4gcmVwYWludCBvcmlnaW5hbCBvbiB0b3Agb2YgbWFzawor
ICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9IHN0YXRp
Y19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0UHVzaFNuYXBzaG90KCk7CisgICAgICAgICAgICByZXQu
bGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0yZjo6Y3JlYXRlKG1fb2Zmc2V0TG9jYXRpb24K
KyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8ueCgpKSAvIGZsb2F0KHN1cmZhY2UtPnNpemUo
KS53aWR0aCgpKQorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby55KCkpIC8gZmxvYXQoc3Vy
ZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5k
VW5pZm9ybShVbmlmb3JtM2Y6OmNyZWF0ZShtX3NoYWRvd0NvbG9yTG9jYXRpb24KKyAgICAgICAg
ICAgICAgICAsIGZsb2F0KGRzZm8uY29sb3IoKS5yZWQoKSkgLyAyNTUuMGYKKyAgICAgICAgICAg
ICAgICAsIGZsb2F0KGRzZm8uY29sb3IoKS5ncmVlbigpKSAvIDI1NS4wZgorICAgICAgICAgICAg
ICAgICwgZmxvYXQoZHNmby5jb2xvcigpLmJsdWUoKSkgLyAyNTUuMGYpKTsKKworICAgICAgICAg
ICAgLy8gQkxVUiBZCisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZKSk7CisgICAgICAg
ICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50
TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0KKyAgICAgICAgICAgICAg
ICAsIGRzZm8uc3RkRGV2aWF0aW9uKCkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVu
ZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMF0KKyAgICAg
ICAgICAgICAgICAsIDEuMGYgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7CisK
KyAgICAgICAgICAgIC8vIEJMVVIgWAorICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWCkp
OworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0
ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdCisgICAg
ICAgICAgICAgICAgLCBkc2ZvLnN0ZERldmlhdGlvbigpKSk7CisgICAgICAgICAgICByZXQubGFz
dCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9u
WzFdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRo
KCkpKSk7CisKKyAgICAgICAgICAgIC8vIFJlcGFpbnQgb3JpZ2luYWwgaW1hZ2UKKyAgICAgICAg
ICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0
YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCkt
PnNldFBvcFNuYXBzaG90KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmV0LnNpemUoKSAlIDIp
IC8vIFdlIG5lZWQgYW4gZXZlbiBudW1iZXIgb2YgYWN0aW9ucy4gU2VlIHBpbmctcG9uZyBub3Rl
IGluIGFwcGx5TGF5ZXJGaWx0ZXJzKCkuCisgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91
Z2gpKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAq
IDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07CisKK3ZvaWQgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcjo6YXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIGxheWVyLCBXVEY6OlZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4g
PiBhY3Rpb25zKQoreworICAgIGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsK
KyAgICBBU1NFUlQoIShhY3Rpb25zLnNpemUoKSAlIDIpKTsgLy8gU2VlIHBpbmctcG9uZ2luZyBu
b3RlIGJlbG93LgorCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbGF5ZXItPmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZCgpLT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICBib29sIHJlcXVpcmVTbmFwc2hvdCA9
IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkKKyAgICAg
ICAgICAgIHJlcXVpcmVTbmFwc2hvdCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX3NuYXBz
aG90VGV4dHVyZSAmJiByZXF1aXJlU25hcHNob3QpCisgICAgICAgIG1fc25hcHNob3RUZXh0dXJl
ID0gdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y3JlYXRlVGV4dHVyZSgpOworCisg
ICAgTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+bGF5ZXJSZW5kZXJlclN1
cmZhY2UoKTsKKworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsICZsYXllci0+Z2V0VHJhbnNmb3JtZWRCb3VuZHMoKSApOworICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwg
MCwgdGV4Y29vcmRzKTsKKworICAgIG1fdGV4dHVyZS0+cHJvdGVjdChzdXJmYWNlLT50ZXh0dXJl
KCktPnNpemUoKSk7CisgICAgaWYgKHJlcXVpcmVTbmFwc2hvdCkKKyAgICAgICAgbV9zbmFwc2hv
dFRleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCkpOworCisgICAgaWYg
KCFmYm8pCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworCisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gTk9URSBBQk9V
VCBQSU5HLVBPTkdJTkcKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAg
ICAgLy8gVW5kZXIgT3BlbkdMIEVTIDIuMCwgd2UgY2Fubm90IHVzZSB0aGUgZmJvIHdlIGFyZSB3
cml0dGluZyB0byBhcyBhIHRleHR1cmUsIHNvIHdlIG5lZWQgdG8gcGxheSBwaW5nLXBvbmc6Cisg
ICAgICAgIC8vICAxKSBEcmF3IHBhcmVudCBzdXJmYWNlIHRvIG91ciB0ZXh0dXJlIHdpdGggZWZm
ZWN0LgorICAgICAgICAvLyAgMikgRHJhdyBvdXIgc3VyZmFjZSB0byBwYXJlbnQgdGV4dHVyZSB3
aXRoIGVmZmVjdC4KKyAgICAgICAgLy8gIDMpIFJlcGVhdC4KKyAgICAgICAgLy8gQmVjYXVzZSB3
ZSBldmVudHVhbGx5IGhhdmUgdG8gZW5kIG9uIHRoZSBwYXJlbnQgdGV4dHVyZSwgd2UgbmVlZCBh
biBldmVuIG51bWJlciBvZiBhY3Rpb25zLgorICAgICAgICAvLyBhY3Rpb25zRm9yT3BlcmF0aW9u
cyB0YWtlcyBjYXJlIG9mIHRoYXQuCisKKyAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFB1
c2hTbmFwc2hvdCgpKQorICAgICAgICAgICAgcHVzaFNuYXBzaG90KHN1cmZhY2UsICghKGkgJSAy
KSA/IHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkgOiBtX3RleHR1cmUtPnRleHR1cmVJ
ZCgpKSk7CisKKyAgICAgICAgaWYgKCEoaSAlIDIpKQorICAgICAgICAgICAgcGluZyhzdXJmYWNl
KTsgLy8gU2V0IGZyYW1lYnVmZmVyIHRvIG91cnMsIGFuZCB0ZXh0dXJlIHRvIHBhcmVudAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwb25nKHN1cmZhY2UpOyAvLyBTZXQgdGV4dHVyZSB0byBw
YXJlbnQsIGFuZCBmcmFtZWJ1ZmZlciB0byB1cworCisgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7IC8vIHRvIHRyYW5zcGFyZW5jeQorICAgICAgICBnbFZpZXdwb3J0KDAsIDAs
IHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpOworCisg
ICAgICAgIGFjdGlvbnNbaV0tPnVzZUFjdGlvbk9uKHRoaXMpOworCisgICAgICAgIGlmIChhY3Rp
b25zW2ldLT5zaG91bGRQb3BTbmFwc2hvdCgpKQorICAgICAgICAgICAgcG9wU25hcHNob3QoKTsK
KworICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICB9CisK
KyAgICBtX3RleHR1cmUtPnVucHJvdGVjdCgpOworICAgIGlmIChyZXF1aXJlU25hcHNob3QpCisg
ICAgICAgIG1fc25hcHNob3RUZXh0dXJlLT51bnByb3RlY3QoKTsKKyAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgZ2xDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYs
IDAuMGYpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShDU1NfRklMVEVSUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5k
ZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckZpbHRlclJlbmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUxNTdiNTBhOGI0MjljNWU2MWQ1YjgzZTFk
YjVjZjVhYjdiYzc2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTGF5
ZXJGaWx0ZXJSZW5kZXJlcl9oCisjZGVmaW5lIExheWVyRmlsdGVyUmVuZGVyZXJfaAorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiT3du
UHRyLmgiCisjaW5jbHVkZSAiVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHQuaD4KKyNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOworY2xhc3MgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcjsKK2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb247CitjbGFzcyBMYXllclJl
bmRlcmVyU3VyZmFjZTsKKworY2xhc3MgVW5pZm9ybWYgOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlm
b3JtZj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVuaWZvcm1mKTsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBVbmlmb3JtZihp
bnQgbG9jYXRpb24pOworICAgIGNvbnN0IGludCYgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbG9jYXRpb247CisgICAgaW50IG1f
cmVmQ291bnQ7Cit9OworCitjbGFzcyBVbmlmb3JtMWYgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9u
LCBmbG9hdCB2YWwpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTFmKGludCBsb2NhdGlvbiwg
ZmxvYXQgdmFsKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBm
bG9hdCBtX3ZhbDsKK307CisKK2NsYXNzIFVuaWZvcm0yZiA6IHB1YmxpYyBVbmlmb3JtZiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShpbnQgbG9jYXRp
b24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTJm
KGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWxbMl07Cit9OworCitjbGFzcyBV
bmlmb3JtM2YgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwx
LCBmbG9hdCB2YWwyKTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm0zZihpbnQgbG9jYXRpb24s
IGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCBhcHBseSgpOworICAgIGZsb2F0IG1fdmFsWzNdOworfTsKKworY2xhc3MgTGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyRmlsdGVyUmVu
ZGVyZXJBY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uPiBjcmVhdGUoaW50IHByb2dyYW1JZCk7CisgICAgICAgIC8vIGEgdmVj
dG9yIG9mIGFjdGlvbnMgbXVzdCBoYXZlIGFuIGV2ZW4gY291bnQsIHNvIGlmIHlvdSBoYXZlIGFu
IG9kZCBjb3VudCwgYWRkIGEgcGFzc3Rocm91Z2ggZXZlbnQgYXQgdGhlIGVuZAorICAgICAgICAv
LyBzZWUgdGhlIHBpbmctcG9uZyBub3RlIGluIExheWVyRmlsdGVyUmVuZGVyZXI6OmFwcGx5QWN0
aW9ucworICAgIH5MYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKCk7CisKKyAgICBib29sIHNob3Vs
ZFB1c2hTbmFwc2hvdCgpIHsgcmV0dXJuIG1fcHVzaFNuYXBzaG90OyB9CisgICAgdm9pZCBzZXRQ
dXNoU25hcHNob3QoKSB7IG1fcHVzaFNuYXBzaG90ID0gMTsgfQorCisgICAgYm9vbCBzaG91bGRQ
b3BTbmFwc2hvdCgpIHsgcmV0dXJuIG1fcG9wU25hcHNob3Q7IH0KKyAgICB2b2lkIHNldFBvcFNu
YXBzaG90KCkgeyBtX3BvcFNuYXBzaG90ID0gMTsgfQorCisgICAgdm9pZCBhcHBlbmRVbmlmb3Jt
KGNvbnN0IFJlZlB0cjxVbmlmb3JtZj4mIHVuaWZvcm0pIHsgbV91bmlmb3Jtcy5hcHBlbmQodW5p
Zm9ybSk7IH0KKyAgICB2b2lkIHVzZUFjdGlvbk9uKExheWVyRmlsdGVyUmVuZGVyZXIqKTsKKwor
cHJvdGVjdGVkOgorICAgIGludCBtX3JlZkNvdW50OworICAgIGludCBtX3Byb2dyYW1JZDsKKyAg
ICBib29sIG1fcHVzaFNuYXBzaG90OworICAgIGJvb2wgbV9wb3BTbmFwc2hvdDsKKworICAgIFdU
Rjo6VmVjdG9yPFJlZlB0cjxVbmlmb3JtZj4gPiBtX3VuaWZvcm1zOworcHJpdmF0ZToKKyAgICBM
YXllckZpbHRlclJlbmRlcmVyQWN0aW9uKGludCBwcm9ncmFtSWQpOworfTsKKworY2xhc3MgTGF5
ZXJGaWx0ZXJSZW5kZXJlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGaWx0ZXJS
ZW5kZXJlcik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllckZpbHRlclJl
bmRlcmVyPiBjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRl
eENvb3JkTG9jYXRpb24pOworICAgIHZvaWQgYXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBXVEY6OlZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbj4gPik7CisgICAgV1RGOjpWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24+ID4gYWN0aW9uc0Zvck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqLCBj
b25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYpOworCisgICAgLy8gSWYgaW5p
dGlhbGl6YXRpb24gZmFpbHMsIG9yIGRpc2FibGUoKSBpcyBjYWxsZWQsIHRoaXMgaXMgZmFsc2Uu
CisgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICB2
b2lkIGRpc2FibGUoKSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgTGF5
ZXJGaWx0ZXJSZW5kZXJlcihjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYg
dGV4Q29vcmRMb2NhdGlvbik7CisgICAgdm9pZCBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50
IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBhdHRyaWJOYW1lKTsKKyAgICBib29sIGluaXRpYWxpemVT
aGFyZWRHTE9iamVjdHMoKTsKKworICAgIC8vIFNlZSBub3RlIGFib3V0IHBpbmctcG9uZ2luZyBp
biBhcHBseUFjdGlvbnMoKQorICAgIHZvaWQgcGluZyhMYXllclJlbmRlcmVyU3VyZmFjZSopOwor
ICAgIHZvaWQgcG9uZyhMYXllclJlbmRlcmVyU3VyZmFjZSopOworCisgICAgLy8gVGhpcyBpcyBm
b3Igc2hhZG93cywgd2hlcmUgd2UgbmVlZCB0byBjcmVhdGUgYSBzaGFkb3csIGFuZCB0aGVuIHJl
cGFpbnQgdGhlIG9yaWdpbmFsIGltYWdlCisgICAgLy8gb24gdG9wIG9mIHRoZSBzaGFkb3cuCisg
ICAgdm9pZCBwdXNoU25hcHNob3QoTGF5ZXJSZW5kZXJlclN1cmZhY2UqLCBpbnQgc291cmNlSWQp
OworICAgIHZvaWQgcG9wU25hcHNob3QoKTsKKworICAgIGJvb2wgbV9lbmFibGVkOworCisgICAg
Ly8gRVNTTCBhdHRyaWJ1dGVzIHNoYXJlZCB3aXRoIExheWVyUmVuZGVyZXIgLSBzZWUgY29uc3Ry
dWN0b3I6CisgICAgY29uc3QgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKKyAgICBjb25zdCBpbnQg
bV90ZXhDb29yZExvY2F0aW9uOworCisgICAgLy8gRVNTTCBwcm9ncmFtIG9iamVjdCBJRHM6Cisg
ICAgdW5zaWduZWQgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TnVtYmVyT2ZD
U1NGaWx0ZXJTaGFkZXJzXTsKKworICAgIC8vIEVTU0wgdW5pZm9ybSBsb2NhdGlvbnM6CisgICAg
aW50IG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnNd
OworICAgIGludCBtX2JsdXJBbW91bnRMb2NhdGlvblsyXTsgLy8gMCA9IFksIDEgPSBYCisgICAg
aW50IG1fc2hhZG93Q29sb3JMb2NhdGlvbjsKKyAgICBpbnQgbV9vZmZzZXRMb2NhdGlvbjsKKwor
ICAgIC8vIFRleHR1cmVzIGZvciBwbGF5aW5nIHBpbmctcG9uZyAtIHNlZSBub3RlIGluIGFwcGx5
QWN0aW9ucygpCisgICAgUmVmUHRyPFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8VGV4
dHVyZT4gbV9zbmFwc2hvdFRleHR1cmU7CisKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorCisjZW5kaWYgLy8gTGF5ZXJGaWx0ZXJS
ZW5kZXJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAppbmRleCA3NzYyM2U1OGNmNjkyZWJi
OGRjMTQ4ZjBlOTExYTRlNjU5MGU4YWY2Li4wNzJiNjNiOWI0MDk4ZDM0Mjg0MTA3MjA0NWUyNzI4
Njc4ODNjZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyLmgiCiAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5n
VGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQu
aCIKIApAQCAtNjQsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0dMRXJyb3IoKQogI2VuZGlm
CiB9CiAKLXN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciog
c2hhZGVyU291cmNlKQorR0x1aW50IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXIoR0xlbnVtIHR5
cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKIHsKICAgICBHTHVpbnQgc2hhZGVyID0gZ2xD
cmVhdGVTaGFkZXIodHlwZSk7CiAgICAgaWYgKCFzaGFkZXIpCkBAIC04Niw3ICs4Nyw3IEBAIHN0
YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVyU291
cmNlKQogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlclBy
b2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZSkKK0dMdWludCBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlKQogewogICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXI7CiAgICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyOwpAQCAtNTAwLDYgKzUwMSwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdMYXll
cnNPblN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocgogICAg
ICAgICBpbnQgY3VycmVudFN0ZW5jaWxWYWx1ZSA9IDA7CiAgICAgICAgIEZsb2F0UmVjdCBjbGlw
UmVjdCgtMSwgLTEsIDIsIDIpOwogICAgICAgICBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoc3Vy
ZmFjZUxheWVyc1tpXS5nZXQoKSwgY3VycmVudFN0ZW5jaWxWYWx1ZSwgY2xpcFJlY3QpOworCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCisg
ICAgICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6Y3JlYXRl
KG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29yZExvY2F0aW9uKTsKKyAgICAgICAgaWYgKGxh
eWVyLT5maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZCgpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0
RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoZmFsc2UpOworICAgICAgICAgICAgbGF5ZXItPnNldEZp
bHRlckFjdGlvbnMobV9maWx0ZXJSZW5kZXJlci0+YWN0aW9uc0Zvck9wZXJhdGlvbnMoc3VyZmFj
ZSwgbGF5ZXItPmZpbHRlcnMoKS5vcGVyYXRpb25zKCkpKTsKKyAgICAgICAgfQorICAgICAgICBt
X2ZpbHRlclJlbmRlcmVyLT5hcHBseUFjdGlvbnMobV9mYm8sIGxheWVyLCBsYXllci0+ZmlsdGVy
QWN0aW9ucygpKTsKKyAgICAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworI2VuZGlmCiAg
ICAgfQogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGxheWVycyBkcmF3ZWQgb24gc3VyZmFjZXMsIHdl
IG5lZWQgdG8gc3dpdGNoIHRvIGRlZmF1bHQgZnJhbWVidWZmZXIuCkBAIC03MTIsNyArNzI0LDcg
QEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKICAgICAvLyBDYWxjdWxhdGUgdGhlIGxheWVyJ3Mg
b3BhY2l0eS4KICAgICBvcGFjaXR5ICo9IGxheWVyLT5vcGFjaXR5KCk7CiAKLSAgICBib29sIHVz
ZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigpIHx8IGxheWVyLT5yZXBs
aWNhTGF5ZXIoKTsKKyAgICBib29sIHVzZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1h
c2tMYXllcigpIHx8IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSB8fCBsYXllci0+ZmlsdGVycygpLnNp
emUoKTsKICAgICBpZiAoIXVzZUxheWVyUmVuZGVyZXJTdXJmYWNlKSB7CiAgICAgICAgIGxheWVy
LT5zZXREcmF3T3BhY2l0eShvcGFjaXR5KTsKICAgICAgICAgbGF5ZXItPmNsZWFyTGF5ZXJSZW5k
ZXJlclN1cmZhY2UoKTsKQEAgLTk4NCw3ICs5OTYsNyBAQCBib29sIExheWVyUmVuZGVyZXI6Om1h
a2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsK
IH0KIAotLy8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9uIGxvY2F0
aW9uIGFjcm9zcyBhbGwgdGhyZWUgcHJvZ3JhbXMKKy8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1
dGUgbmFtZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHByb2dyYW1zCiAvLyB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGFsbG93cyB0aGUgY29kZSB0byBiaW5kIHRoZSBhdHRy
aWJ1dGVzIG9ubHkgb25jZQogLy8gZXZlbiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHByb2dyYW1z
Lgogdm9pZCBMYXllclJlbmRlcmVyOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50IGxvY2F0
aW9uLCBjb25zdCBjaGFyKiBhdHRyaWJOYW1lKQpAQCAtMTA1Myw3ICsxMDY1LDYgQEAgYm9vbCBM
YXllclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKICAgICAgICAgIiAgZ2xf
RnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhD
b2xvci53KSAqIGFscGhhICogbWFza0NvbG9yLnc7ICAgICAgICAgXG4iCiAgICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iOwogCi0KICAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXJz
IGFyb3VuZCB0aGUgbGF5ZXJzLgogICAgIGNoYXIgY29sb3JWZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9
CiAgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgpAQCAtMTEzOSw3ICsx
MTUwLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFNwZWNpZnkgdGhlIGF0dHJp
YiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uIGFuZCBtYWtlIGl0IHRoZSBzYW1lIGZvciBhbGwg
dGhyZWUgcHJvZ3JhbXMgdG8KKyAgICAvLyBTcGVjaWZ5IHRoZSBhdHRyaWIgbG9jYXRpb24gZm9y
IHRoZSBwb3NpdGlvbiBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRvCiAg
ICAgLy8gYXZvaWQgYmluZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4KICAg
ICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV9wb3NpdGlvbkxvY2F0aW9uLCAiYV9wb3NpdGlv
biIpOwogICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihtX3RleENvb3JkTG9jYXRpb24sICJh
X3RleENvb3JkIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCmluZGV4IGY2YzNiZTg3OGZhMTFlYmUx
NzliYjNlZTZkMmE3ZjBkNjQzOGIyYjAuLjQzNzkyN2JlZWFjOGEwNDg3YjQxNGVmNTQ3MDdmYjM0
MTc2YTQ4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCkBAIC0zNyw2ICszNyw3IEBACiAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiTGF5
ZXJGaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAK
ICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHQuaD4KQEAgLTEzNCw2ICsx
MzUsOSBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBhbHJlYWR5IGJlZW4gZHJh
d2VkIG9uIGEgc3VyZmFjZS4KICAgICBib29sIGxheWVyQWxyZWFkeU9uU3VyZmFjZShMYXllckNv
bXBvc2l0aW5nVGhyZWFkKikgY29uc3Q7CiAKKyAgICBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIo
R0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSk7CisgICAgc3RhdGljIEdMdWlu
dCBsb2FkU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0
IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHByZXBh
cmVGcmFtZVJlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIGFuaW1hdGlv
blRpbWUsIGJvb2wgaXNDb250ZXh0Q3VycmVudCk7CiAgICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYg
c3VyZmFjZUxheWVycywgZmxvYXQgb3BhY2l0eSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKQEAgLTE2
NCw2ICsxNjgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBTaGFkZXIgdW5pZm9ybSBhbmQgYXR0cmli
dXRlIGxvY2F0aW9ucy4KICAgICBjb25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwogICAgIGNv
bnN0IGludCBtX3RleENvb3JkTG9jYXRpb247CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IE93blB0cjxMYXllckZpbHRlclJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOworI2VuZGlmCisK
ICAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3Jh
bVNoYWRlcnNdOwogICAgIGludCBtX2FscGhhTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxh
eWVyUHJvZ3JhbVNoYWRlcnNdOwogICAgIGludCBtX21hc2tTYW1wbGVyTG9jYXRpb25bTGF5ZXJE
YXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0
VGhyZWFkLmNwcAppbmRleCAxNWJiZTBhOGYxMzg4YTE2ZTQwMTk0YWZlYzIwYThmOGIwMmY4NDNh
Li5lOWQzZGZmNDJjOWMxMGZmZjUwOWQ2NWMzOGI0M2U3NmY0YmNmNzMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtNjUsNiArNjUsOSBAQCBMYXllcldlYktpdFRocmVh
ZDo6TGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5KiBvdwogICAgICwgbV9pc01hc2soZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbnNDaGFuZ2Vk
KGZhbHNlKQogICAgICwgbV9jbGVhck92ZXJyaWRlT25Db21taXQoZmFsc2UpCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgICwgbV9maWx0ZXJzQ2hhbmdlZChmYWxzZSkKKyNlbmRpZgogewog
ICAgIGlmICh0eXBlID09IExheWVyKQogICAgICAgICBtX3RpbGVyID0gTGF5ZXJUaWxlcjo6Y3Jl
YXRlKHRoaXMpOwpAQCAtMjg0LDYgKzI4NywxMiBAQCB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpj
b21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCkKICAgICBtX3Bvc2l0aW9uICs9IG1fYWJzb2x1dGVP
ZmZzZXQ7CiAgICAgLy8gQ29weSB0aGUgYmFzZSB2YXJpYWJsZXMgZnJvbSB0aGlzIG9iamVjdCBp
bnRvIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZAogICAgIHJlcGxpY2F0ZShtX2xheWVyQ29tcG9z
aXRpbmdUaHJlYWQuZ2V0KCkpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBpZiAobV9m
aWx0ZXJzQ2hhbmdlZCkgeworICAgICAgICBtX2ZpbHRlcnNDaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQo
dHJ1ZSk7CisgICAgfQorI2VuZGlmCiAgICAgaWYgKG1fYW5pbWF0aW9uc0NoYW5nZWQpIHsKICAg
ICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRSdW5uaW5nQW5pbWF0aW9ucyhtX3J1
bm5pbmdBbmltYXRpb25zKTsKICAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRT
dXNwZW5kZWRBbmltYXRpb25zKG1fc3VzcGVuZGVkQW5pbWF0aW9ucyk7CkBAIC00MDUsNiArNDE0
LDMxIEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKK2Jvb2wgTGF5ZXJXZWJLaXRUaHJlYWQ6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBUaGVyZSBpcyB3b3JrIGFzc29j
aWF0ZWQgd2l0aCBjb21wb3NpdGluZyBmaWx0ZXJzLCBldmVuIGlmIHRoZXJlIGFyZSB6ZXJvIGZp
bHRlcnMsCisgICAgLy8gc28gaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMsIGNsYWltIHdlIGNhbid0
IGNvbXBvc2l0ZSB0aGVtLgorICAgIGlmICghZmlsdGVycy5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0g
ZmlsdGVycy5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJh
dGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiBjb25zdCBMYXllcldlYktpdFRocmVhZCogTGF5ZXJXZWJLaXRUaHJl
YWQ6OnJvb3RMYXllcigpIGNvbnN0CiB7CiAgICAgY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIGxh
eWVyID0gdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaAppbmRleCA0OWE0OWJlNWYx
M2M5MDA5MDdlNjJlZTgxNTkzOTNjYjMxMTY4ZDNmLi41MmJmMmYxMTFlNmU4MDk0NDJjZTNiMjQ5
NGM4Y2FmNzA1YTdiMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oCkBAIC05OCw2
ICs5OCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkg
eyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMpIHsgbV9maWx0ZXJzID0gZmlsdGVyczsgbV9maWx0ZXJzQ2hhbmdlZCA9IDE7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVk
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpOworI2VuZGlmCisKICAgICB2b2lkIHNl
dE9wYXF1ZShib29sIGlzT3BhcXVlKSB7IG1faXNPcGFxdWUgPSBpc09wYXF1ZTsgc2V0TmVlZHND
b21taXQoKTsgfQogCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KQEAgLTIw
Miw2ICsyMDcsOSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faXNNYXNrIDogMTsKICAgICB1
bnNpZ25lZCBtX2FuaW1hdGlvbnNDaGFuZ2VkIDogMTsKICAgICB1bnNpZ25lZCBtX2NsZWFyT3Zl
cnJpZGVPbkNvbW1pdCA6IDE7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHVuc2lnbmVk
IG1fZmlsdGVyc0NoYW5nZWQgOiAxOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
Y3BwCmluZGV4IDM2ZDA2ZDMyYjY5YzQ3MTZmMzBiNTQ5MzM0N2FkYmFlZDE2MDIzNDMuLjQ4YWJh
MmJhNGMxYTAxOTlkNmZmODBjNDg5M2Y4ODk2ZjljYWMxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
Y3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmUuaCIKQEAgLTEzOSw5ICsxNDAs
MTEgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBp
ZiAoIWhhZENvbnRleHQgfHwgbV9jb250ZXh0U2l6ZSAhPSBuZXdDb250ZXh0U2l6ZSkKICAgICAg
ICAgcmVzaXplQ29udGV4dChuZXdDb250ZXh0U2l6ZSk7CiAKKyNpZiAhUExBVEZPUk0oQkxBQ0tC
RVJSWSkgLy8gQmxhY2tCZXJyeSBkZWZpbmVzIGl0cyBvd24gVGV4dHVyZSBjbGFzcy4KICAgICAv
LyBEbyBub3QgZHJhdyB0aGUgZmlsdGVyIGlmIHRoZSBpbnB1dCBpbWFnZSBjYW5ub3QgZml0IGlu
c2lkZSBhIHNpbmdsZSBHUFUgdGV4dHVyZS4KICAgICBpZiAobV9pbnB1dFRleHR1cmUtPnRpbGVz
KCkubnVtVGlsZXNYKCkgIT0gMSB8fCBtX2lucHV0VGV4dHVyZS0+dGlsZXMoKS5udW1UaWxlc1ko
KSAhPSAxKQogICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAKICAgICAvLyBUaGUgc2hhZGVy
IGhhZCBjb21waWxlciBlcnJvcnMuIFdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgogICAgIGlmICgh
bV9jb21waWxlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKQEAgLTE4NSw3ICsxODgsMTEgQEAg
Ym9vbCBGRUN1c3RvbUZpbHRlcjo6aW5pdGlhbGl6ZUNvbnRleHQoKQogCiB2b2lkIEZFQ3VzdG9t
RmlsdGVyOjpyZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQogewor
I2lmICFQTEFURk9STShCTEFDS0JFUlJZKSAvLyBCbGFja0JlcnJ5IGRlZmluZXMgaXRzIG93biBU
ZXh0dXJlIGNsYXNzCiAgICAgbV9pbnB1dFRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250
ZXh0LmdldCgpLCBUZXh0dXJlOjpSR0JBOCwgbmV3Q29udGV4dFNpemUud2lkdGgoKSwgbmV3Q29u
dGV4dFNpemUuaGVpZ2h0KCkpOworI2Vsc2UKKyAgICBtX2lucHV0VGV4dHVyZSA9IFRleHR1cmU6
OmNyZWF0ZSh0cnVlKTsKKyNlbmRpZgogICAgIAogICAgIGlmICghbV9mcmFtZUJ1ZmZlcikKICAg
ICAgICAgbV9mcmFtZUJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKQEAg
LTI2OSw4ICsyNzYsMTIgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZm
ZXJzKFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5KQogICAgIGlmIChtX2NvbXBpbGVk
UHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgIT0gLTEpIHsKICAgICAgICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFpKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7
CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgICAgIG1faW5wdXRUZXh0dXJlLT5sb2Fk
KHNyY1BpeGVsQXJyYXktPmRhdGEoKSk7CiAgICAgICAgIG1faW5wdXRUZXh0dXJlLT5iaW5kVGls
ZSgwKTsKKyNlbHNlCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKICAgICB9CiAg
ICAgCiAgICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24o
KSAhPSAtMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYjg3OTZlODAyOTE4YmNiNmFhMzU3
MGQxOTNjY2NiZGYzZDFjOWU2My4uMGExYjdkMWEwMTk2ZGNmYmYzMzhhMjg5MmY1MTYyYzllYzQ1
NDgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgorI2VuZGlmCisKIC8vIEFubm95aW5nbHksIHdpbmdkaS5oICNkZWZpbmVzIHRoaXMuCiAj
aWZkZWYgUEFTU1RIUk9VR0gKICN1bmRlZiBQQVNTVEhST1VHSApAQCAtNDQsNyArNDgsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBDU1MgRmlsdGVycwogCisjaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKK2NsYXNzIEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKKyNlbHNlCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKKyNlbmRpZgogcHVibGljOgogICAg
IGVudW0gT3BlcmF0aW9uVHlwZSB7CiAgICAgICAgIFJFRkVSRU5DRSwgLy8gdXJsKCNzb21lZmls
dGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlCmluZGV4IGFmMThjYzFlOTM3NmM3
MDEzMjkyMzcwMzc3YTVjYzg2MTdiZDI2MmYuLjE5N2QxMGU1MWQ1OGY3NTdkYjk1ZTVlM2I5Mzlh
YzZlN2ZlYjFjZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2UKQEAgLTE3Myw5
ICsxNzMsMTUgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dPUktF
UlMgT04pCiAKIElGIChFTkFCTEVfR0xFUzIpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFXzNEX1JFTkRFUklORyBPTikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIE9OKQorICAgIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfRklMVEVSUyBPTikKKyAgICBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NIQURFUlMgT04pCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMIE9OKQogRUxT
RSAoKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9SRU5E
RVJJTkcgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9B
Q0NFTEVSQVRFRF8yRF9DQU5WQVMgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9DU1NfRklMVEVSUyBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TSEFERVJTIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wgT0ZGKQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFr
ZQppbmRleCBlMjU2YjBlNThhNDAzMTYxYTllYWQ0YjM2MzYxYTNjMmJkNTkxYjlhLi5iMjQ2Mjkx
MTM0MzdkODE0NDYyZjYwYTBmNzM3YzQ4M2ZjOTdiOGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQpAQCAtMjUs
NiArMjUsOCBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04KICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9DU1NfVkFSSUFCTEVTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
Q1NTM19GTEVYQk9YCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTX0ZJTFRFUlMKKyNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9DU1NfU0hBREVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NVU1RPTV9T
Q0hFTUVfSEFORExFUgogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVhZWQ3NTk5ODczMjE1MzI0MGZi
YTkwZWE0ZTFlNmE4OTI0MTBlMy4uYzFjNGRmNTBhN2Q5ZDY1NDgxYWRmNTRjNjk5Yjc2NDVhOGQy
ODYxZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTMxICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0dGVy
ZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gRW5hYmxlIENTUyBGaWx0ZXIg
RWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTI2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bmFibGUgQ1NTIGZpbHRlciBlZmZlY3RzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgY3VzdG9tIGVm
ZmVjdHMgKENTUyBzaGFkZXJzKSBhbmQgcmVmZXJlbmNlIGVmZmVjdHMgKFNWRyBlZmZlY3RzKQor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOiBBY2tub3dsZWRn
ZSBDU1MgZmlsdGVyIGVmZmVjdHMuCisKIDIwMTItMDctMzEgIEpvY2hlbiBFaXNpbmdlciAgPGpv
Y2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtb3ZlIEV2ZW50U2VuZGVy
IGludG8gVGVzdFJ1bm5lci5hCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
RmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0K
aW5kZXggNzdjYzFmNzYzMjBmYWNkNGFlY2U3ODIxZTkzYzlkYmE2ZTYzY2QxMy4uMzQ0NTA5ZjZm
Nzg1ZWZiZTkzNGRiZDNkZTNmYmUxMDNhZjAyMTJkZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9GZWF0dXJlTGlzdC5wbQpAQCAtMTYzLDcgKzE2Myw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTU19FWENMVVNJT05TIiwgZGVmYXVsdCA9PiAxLCB2YWx1
ZSA9PiBcJGNzc0V4Y2x1c2lvbnNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzLWZp
bHRlcnMiLCBkZXNjID0+ICJUb2dnbGUgQ1NTIEZpbHRlcnMgc3VwcG9ydCIsCi0gICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9DU1NfRklMVEVSUyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpLCB2
YWx1ZSA9PiBcJGNzc0ZpbHRlcnNTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9D
U1NfRklMVEVSUyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpIHx8IGlzQmxhY2tCZXJyeSgp
LCB2YWx1ZSA9PiBcJGNzc0ZpbHRlcnNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3Nz
My1mbGV4Ym94IiwgZGVzYyA9PiAiVG9nZ2xlIENTUzMgRmxleGJveCBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX0NTUzNfRkxFWEJPWCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4g
XCRjc3MzRmxleGJveFN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxv
ZwppbmRleCA3YjQ5MTY0ZGE3ZmYzNDMwZGVkMDNlOTViN2UwYjg0MmNjZmQzM2ZiLi5iMDYyOWJh
MDQ4MTI3MjIyZjU5NTJhOGE4YWY1YmE5NDUzNDUxYjlkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMzEgIEpvc2h1YSBOZXR0
ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBF
bmFibGUgQ1NTIEZpbHRlciBFZmZlY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MjY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEVuYWJsZSBDU1MgZmlsdGVyIGVmZmVjdHMsIHdpdGggdGhlIGV4Y2Vw
dGlvbiBvZiBjdXN0b20gZWZmZWN0cyAoQ1NTIHNoYWRlcnMpIGFuZCByZWZlcmVuY2UgZWZmZWN0
cyAoU1ZHIGVmZmVjdHMpCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVy
cnkuY21ha2U6IEFkZCBMYXllckZpbHRlclJlbmRlcmVyCisgICAgICAgICogU291cmNlL2NtYWtl
Y29uZmlnLmguY21ha2U6IEFja25vd2xkZ2UgQ1NTIGZpbHRlciBlZmZlY3RzCisKIDIwMTItMDct
MzEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1h
dGljOiBkYXNoYm9hcmQgaW1hZ2VzIGFyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IGZyb20gaW5j
cmVtZW50YWxseSB1cGRhdGVkIEpTT04K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155565</attachid>
            <date>2012-07-31 09:20:44 -0700</date>
            <delta_ts>2012-07-31 09:34:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731121926.patch</filename>
            <type>text/plain</type>
            <size>61347</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uN2YyNmU4ZDFkNzcyNjQ5MjU0NDg0OTYwMzcxZDE1
ZTExNjJiMDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJPdmVycmlkZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6ZmlsdGVyQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRGaWx0ZXJBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoTGF5ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6ZmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVbmlmb3JtZjo6VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTFmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OlVuaWZvcm0xZik6CisgICAgICAgIChXZWJD
b3JlOjpVbmlmb3JtMmY6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm0zZjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNmOjpVbmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjpwb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybWY6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAg
ICAgICAoVW5pZm9ybTNmKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxkUHVzaFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNl
dFB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpzaG91bGRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpzZXRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjphcHBlbmRVbmlmb3JtKToKKyAgICAgICAgKExheWVyRmlsdGVy
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmRpc2FibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oOgorICAgICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpbHRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorCiAyMDEyLTA3LTMxICBB
bGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiB0YWtlIGludG8gYWNjb3VudCB0aGUgd2hvbGUgc2VjdXJpdHkgb3JpZ2luIGluc3Rl
YWQgb2YganVzdCBob3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUzNjEwZGY5MjNjOTAxOWQ4
NmZkNGJiZmNmZDdlNGM5MjhiNGFjNjkuLjIzZDI1MjFjY2QwMjMyYTQ3MDdlNDU5YTgyY2Y5ZmQx
ODIzMDI1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDM4LDYgKzEwMzgsNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAgICBjc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5j
cHAKKyAgICBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCiAgICAgY3NzL1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcAogICAgIGNzcy9XcmFwU2hhcGVGdW5jdGlvbnMuY3BwCiAKQEAgLTE2
MDUsNiArMTYwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNoYWRlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAKICAgICBsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTE4MjEsMTAgKzE4MjMsMTEgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTg0OSwxNiArMTg1MiwxNSBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vTkVPTkhlbHBlcnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQmxl
bmRORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUNvbXBvc2l0ZUFy
aXRobWV0aWNORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRp
bmdORU9OLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdO
RU9OLmgKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDFhZTVmZTY5MDdh
NDczODQwOTlmYWViMGM3OWMyYWY5ZDFhYmJiY2UuLmE4MTZiMTQ4OTA1YzYzOGViN2Y4NjdiZTNm
YWQ0M2IzNzZmM2VmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
QEAgLTI3Miw2ICsyNzIsNyBAQCBJRiAoV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0xheWVyQmxhY2tCZXJyeS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcAorICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5j
cHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3Bw
CmluZGV4IDFiODFmNTRkZDAzOGU0ZWQ2ZTI1OTUwZjg5M2MxN2I2NGFiZGFkMTQuLmUyNzc5YzNj
MjFlYzEyZDZlNDZlZGRhZDU4ODdkOWFjMjI3YWI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0yOTIsNiArMjkzLDI2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBoYXNGaXhlZEFuY2VzdG9yCiAgICAg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogfQogCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmIChtX2ZpbHRlcnMgPT0gZmlsdGVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMg
PSBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OworICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAgICB1
cGRhdGVGaWx0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWx0ZXJzLmNsZWFyKCk7
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkNvbXBv
c2l0ZUZpbHRlcnM7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNr
Z3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC04MDMsNiAr
ODI0LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVyQmFja2dy
b3VuZENvbG9yKCkKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50
c0xheWVyKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OnVwZGF0ZUZpbHRlcnMoKQoreworICAgIGlmICghbV9maWx0ZXJzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbWFyeUxheWVyKCktPnNldEZpbHRlcnMobV9m
aWx0ZXJzKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRh
dGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgdHJhbnNmb3JtIGxheWVy
LCB0aGUgdHJhbnNmb3JtIG11c3QgYmUgc2V0IG9uIHRoYXQgbGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
R3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRleCBjMjY2OTQ3YWYxYzlhYjM1OWI1MzViOTRk
ZWQ1NjhjYjcyMjRkNmQ5Li5mOWZlZTc4M2EwNmQ3MWMwYTQ5NmJkNzVmYTk5ZTdhZmZlOThlZjBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCkBAIC0yOSwxMyAr
MjksMTUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2RlZmluZSBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw2ICs3
OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQ29udGFpbmVyKGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGJvb2wp
OwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJz
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMgJik7CisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQorI2VuZGlmCisKICAgICB2aXJ0
dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAKQEAgLTE0Niw2ICsxNTMsOSBAQCBwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlSGFzRml4ZWRDb250YWluZXIoKTsKICAgICB2b2lkIHVwZGF0ZUhh
c0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyQmFja2dyb3Vu
ZENvbG9yKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgdXBkYXRlRmlsdGVy
cygpOworI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKCk7CiAKICAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRzSW1hZ2UoSW1hZ2UqKTsKQEAgLTE1OSw2ICsxNjksMTAgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fdHJhbnNmb3JtTGF5ZXI7CiAgICAgUmVm
UHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX2NvbnRlbnRzTGF5ZXI7CiAKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisjZW5kaWYKKwogICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9ydW5uaW5nQW5pbWF0aW9uczsKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fc3VzcGVuZGVkQW5pbWF0aW9uczsK
ICAgICBkb3VibGUgbV9zdXNwZW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5n
VGhyZWFkLmgKaW5kZXggYjMzNTYwNjY5YzUxNDBkYzVkNWY5MjAxMmEzMDM1MTliZTAxMTliMC4u
OGQxODFlMWVmNDhhMDIwNmRhYjI0MzIwZGQ3NTc4MmQ1ZTgwMDJiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5n
VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKQEAgLTM1LDkgKzM1LDExIEBACiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKICNp
bmNsdWRlICJMYXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKICNpbmNsdWRlICJMYXllclRpbGVyLmgi
CiAKQEAgLTEwMSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgZmxvYXQgbV9vcGFjaXR5
OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CiAK
ICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKQEAgLTExMCw2ICsxMTMsOCBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7CiB9OwogCitjbGFzcyBMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOworCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+LCBwdWJsaWMg
TGF5ZXJEYXRhLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQb2ludGVyQmFz
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZD4gY3JlYXRlKExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCopOwpAQCAt
MjA3LDYgKzIxMiwxMiBAQCBwdWJsaWM6CiAgICAgTGF5ZXJPdmVycmlkZSogb3ZlcnJpZGUoKTsK
ICAgICB2b2lkIGNsZWFyT3ZlcnJpZGUoKTsKIAorICAgIGJvb2wgZmlsdGVyT3BlcmF0aW9uc0No
YW5nZWQoKSB7IHJldHVybiBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkOyB9CisgICAgdm9pZCBz
ZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChib29sIGNoYW5nZWQpIHsgbV9maWx0ZXJPcGVyYXRp
b25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0KKworICAgIFdURjo6VmVjdG9yPFJlZlB0cjxMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uPiA+IGZpbHRlckFjdGlvbnMoKSB7IHJldHVybiBtX2ZpbHRlckFj
dGlvbnM7IH0KKyAgICB2b2lkIHNldEZpbHRlckFjdGlvbnMoY29uc3QgV1RGOjpWZWN0b3I8UmVm
UHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4mIGFjdGlvbnMpIHsgbV9maWx0ZXJBY3Rp
b25zID0gYWN0aW9uczsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TGF5ZXJDb21wb3Np
dGluZ1RocmVhZCgpOwogCkBAIC0yNTEsNiArMjYyLDkgQEAgcHJpdmF0ZToKIAogICAgIE93blB0
cjxMYXllck92ZXJyaWRlPiBtX292ZXJyaWRlOwogICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQqIG1fY2xpZW50OworCisgICAgYm9vbCBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkOwor
ICAgIFdURjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IG1fZmls
dGVyQWN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCmlu
ZGV4IGQ5OTEyMTU1MTExMTkwYzVmNGM2YmMxMjEyMTU3NDExYTExMWU4NzUuLjdlYzU4MWI4ZGE0
OTkxMmM2MGFhMzFmZDA2OWYyMTRiM2NjZjg2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaApAQCAtMzQsNiAr
MzQsNyBAQAogI2RlZmluZSBMYXllckRhdGFfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTU5LDYgKzYwLDI1IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyUHJvZ3JhbVNoYWRl
ckJHUkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkxheWVyUHJvZ3Jh
bVNoYWRlcnMgfTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBlbnVtIENTU0ZpbHRl
clNoYWRlcnMgeyBDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGUgPSAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlclNlcGlhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU0ZpbHRlclNoYWRlclNhdHVyYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU0ZpbHRlclNoYWRlckh1ZVJvdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJJbnZlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
RmlsdGVyU2hhZGVyQnJpZ2h0bmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NG
aWx0ZXJTaGFkZXJDb250cmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0
ZXJTaGFkZXJPcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNo
YWRlckJsdXJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlckJs
dXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlclNoYWRvdywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCwK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
RmlsdGVyU2hhZGVyQ3VzdG9tLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzIH07CisjZW5kaWYKKwogICAgIExheWVyRGF0YShMYXll
clR5cGUgdHlwZSkKICAgICAgICAgOiBtX2xheWVyVHlwZSh0eXBlKQogICAgICAgICAsIG1fYW5j
aG9yUG9pbnQoMC41LCAwLjUpCkBAIC0xMTUsNiArMTM1LDEwIEBAIHB1YmxpYzoKIAogICAgIGZs
b2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAorI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlcnM7IH0KKyNlbmRpZgorCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNPcGFxdWU7IH0KIAogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0xNzcsNiArMjAxLDkgQEAgcHJvdGVjdGVkOgogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CiAKICAgICBmbG9hdCBtX29w
YWNpdHk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIEZpbHRlck9wZXJhdGlvbnMgbV9m
aWx0ZXJzOworI2VuZGlmCiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CiAgICAgZmxvYXQgbV9i
b3JkZXJXaWR0aDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTNmMzkwNzFkYWUyOTQ5YWY0MDBkNjZmZWVhZDhjMmMxZWFhYmJiNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJGaWx0ZXJSZW5kZXJlci5jcHAKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyNpbmNsdWRl
ICJMYXllckZpbHRlclJlbmRlcmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgorCisj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1Mb2cuaD4KKyNpbmNsdWRlIDxWZWN0b3IuaD4KKworI2luY2x1ZGUgPGNzdHJp
bmc+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBp
bnQgb3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKGNvbnN0IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSYgdCkKK3sKKyAgICBzd2l0Y2ggKHQpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJH
cmF5c2NhbGU7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICByZXR1
cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTZXBpYTsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
clNhdHVyYXRlOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAg
ICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGU7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVySW52ZXJ0OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAg
ICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJPcGFjaXR5OworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQ29udHJhc3Q7
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVybiBMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93
OworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VT
VE9NOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJDdXN0b207CisjZW5kaWYK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitVbmlmb3JtZjo6
VW5pZm9ybWYoaW50IGNfbG9jYXRpb24pCisgICAgOiBtX2xvY2F0aW9uKGNfbG9jYXRpb24pCisg
ICAgLCBtX3JlZkNvdW50KDEpCit7Cit9CisKK3ZvaWQgVW5pZm9ybTFmOjphcHBseSgpCit7Cisg
ICAgZ2xVbmlmb3JtMWYobG9jYXRpb24oKSwgbV92YWwpOworfQorCitQYXNzUmVmUHRyPFVuaWZv
cm1mPiBVbmlmb3JtMWY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0xZihsb2NhdGlvbiwgdmFsKSk7Cit9CisKK1VuaWZv
cm0xZjo6VW5pZm9ybTFmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbCkgOiBVbmlmb3JtZihj
X2xvY2F0aW9uKSwgbV92YWwoY192YWwpCit7Cit9CisKK3ZvaWQgVW5pZm9ybTJmOjphcHBseSgp
Cit7CisgICAgZ2xVbmlmb3JtMmYobG9jYXRpb24oKSwgbV92YWxbMF0sIG1fdmFsWzFdKTsKK30K
KworUGFzc1JlZlB0cjxVbmlmb3JtZj4gVW5pZm9ybTJmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBm
bG9hdCB2YWwwLCBmbG9hdCB2YWwxKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9y
bTJmKGxvY2F0aW9uLCB2YWwwLCB2YWwxKSk7Cit9CisKK1VuaWZvcm0yZjo6VW5pZm9ybTJmKGlu
dCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSkgOiBVbmlmb3JtZihjX2xv
Y2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFdID0gY192YWwx
OworfQorCit2b2lkIFVuaWZvcm0zZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9ybTNmKGxvY2F0
aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0pOworfQorCitQYXNzUmVmUHRyPFVu
aWZvcm1mPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0
IHZhbDEsIGZsb2F0IHZhbDIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtM2Yo
bG9jYXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKK30KKworVW5pZm9ybTNmOjpVbmlmb3JtM2Yo
aW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3ZhbDIp
IDogVW5pZm9ybWYoY19sb2NhdGlvbikKK3sKKyAgICBtX3ZhbFswXSA9IGNfdmFsMDsKKyAgICBt
X3ZhbFsxXSA9IGNfdmFsMTsKKyAgICBtX3ZhbFsyXSA9IGNfdmFsMjsKK30KKworUGFzc1JlZlB0
cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpj
cmVhdGUoaW50IHByb2dyYW1JZCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyRmls
dGVyUmVuZGVyZXJBY3Rpb24ocHJvZ3JhbUlkKSk7Cit9CisKK0xheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb246OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IGNfcHJvZ3JhbUlkKQorICAgIDog
bV9yZWZDb3VudCgxKQorICAgICwgbV9wcm9ncmFtSWQoY19wcm9ncmFtSWQpCisgICAgLCBtX3B1
c2hTbmFwc2hvdChmYWxzZSkKKyAgICAsIG1fcG9wU25hcHNob3QoZmFsc2UpCit7CisKK30KKwor
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oKQor
eworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnVzZUFjdGlvbk9uKExheWVy
RmlsdGVyUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIEFTU0VSVChtX3Byb2dyYW1JZCAhPSAt
MSk7CisgICAgaWYgKG1fcHJvZ3JhbUlkID09IC0xKSB7CisgICAgICAgIGdsVXNlUHJvZ3JhbShy
ZW5kZXJlci0+bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hh
ZGVyUGFzc3Rocm91Z2hdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnbFVzZVByb2dy
YW0ocmVuZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFttX3Byb2dyYW1JZF0pOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VuaWZvcm1zLnNpemUoKTsgKytpKQorICAgICAg
ICBtX3VuaWZvcm1zW2ldLT5hcHBseSgpOworfQorCitQYXNzT3duUHRyPExheWVyRmlsdGVyUmVu
ZGVyZXI+IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShjb25zdCBpbnQmIHBvc2l0aW9uTG9j
YXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IExheWVyRmlsdGVyUmVuZGVyZXIocG9zaXRpb25Mb2NhdGlvbiwgdGV4Q29vcmRMb2Nh
dGlvbikpOworfQorCitMYXllckZpbHRlclJlbmRlcmVyOjpMYXllckZpbHRlclJlbmRlcmVyKGNv
bnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50JiB0ZXhDb29yZExvY2F0aW9uKQor
ICAgIDogbV9wb3NpdGlvbkxvY2F0aW9uKHBvc2l0aW9uTG9jYXRpb24pCisgICAgLCBtX3RleENv
b3JkTG9jYXRpb24odGV4Q29vcmRMb2NhdGlvbikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIG1fY3Nz
RmlsdGVyUHJvZ3JhbU9iamVjdFtpXSA9IDA7CisKKyAgICBpZiAoIShtX2VuYWJsZWQgPSBpbml0
aWFsaXplU2hhcmVkR0xPYmplY3RzKCkpKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDU1MgRmlsdGVy
cyBhcmUgbm90IGVuYWJsZWQgZHVlIHRvIGZhaWxlZCBpbml0aWFsaXphdGlvbi4iKTsKK30KKwor
Ly8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9uIGxvY2F0aW9uIGFj
cm9zcyBhbGwgcHJvZ3JhbXMKKy8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRoaXMgYWxsb3dz
IHRoZSBjb2RlIHRvIGJpbmQgdGhlIGF0dHJpYnV0ZXMgb25seSBvbmNlCisvLyBldmVuIHdoZW4g
c3dpdGNoaW5nIGJldHdlZW4gcHJvZ3JhbXMuCisvLworLy8gVGhpcyBpcyBhbiBleHRlbnNpb24g
b2YgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uIGFuZCB0aGUgbG9jYXRp
b25zCisvLyB3aWxsIG1hdGNoIHRob3NlIG9mIExheWVyUmVuZGVyZXIuIFNlZSBMYXllckZpbHRl
clJlbmRlcmVyOjpMYXllckZpbHRlclJlbmRlcmVyKCkKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJl
cjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0
cmliTmFtZSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZD
U1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKG1fY3Nz
RmlsdGVyUHJvZ3JhbU9iamVjdFtpXSwgbG9jYXRpb24sIGF0dHJpYk5hbWUpOworfQorCitib29s
IExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQoreworICAg
IC8vIFNlZSBhbHNvIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorCisgICAgY2hhciB2
ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9u
OyAgIFxuIgorICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAg
ICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4o
KSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOyAgXG4iCisgICAg
ICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAifSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKHguLi4p
IFwKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiJcCisgICAgICAgICJcbiJc
CisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAg
InVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlO1xuIlwKKyAgICAgICAgInVuaWZvcm0g
aGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAgICAgICAjeFwKKyAgICAgICAgInZvaWQgbWFp
bih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90
ZXhDb29yZCkpOyB9IgorCisjZGVmaW5lIE9GRlNFVF9GSUxURVIoeC4uLikgXAorICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgInZh
cnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBsb3dw
IHNhbXBsZXIyRCBzX3RleHR1cmU7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1
X2Ftb3VudDtcbiJcCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgdmVjMiB1X29mZnNldDtcbiJc
CisgICAgICAgICN4XAorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3Ig
PSBzaGFkZSh0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkIC0gdV9vZmZzZXQpKTsgfSIK
KworI2RlZmluZSBCTFVSX0ZJTFRFUih4Li4uKSBcCisgICAgICAgICJwcmVjaXNpb24gaGlnaHAg
ZmxvYXQ7IFxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMy
IHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX3RleHR1
cmU7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCisgICAg
ICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYmx1clNpemU7XG4iXAorICAgICAgICAiY29uc3Qg
ZmxvYXQgcGkgPSAzLjE0MTU5Mjc7XG4iXAorICAgICAgICAjeFwKKyAgICAgICAgInZvaWQgbWFp
bih2b2lkKVxuIlwKKyAgICAgICAgIntcbiJcCisgICAgICAgICJ2ZWMzIGluY3I7XG4iXAorICAg
ICAgICAiaW5jci54ID0gMS4wIC8gKHNxcnQoMi4wICogcGkpICogdV9hbW91bnQpO1xuIlwKKyAg
ICAgICAgImluY3IueSA9IGV4cCgtMC41IC8gKHVfYW1vdW50ICogdV9hbW91bnQpKTtcbiJcCisg
ICAgICAgICJpbmNyLnogPSBpbmNyLnkgKiBpbmNyLnk7XG4iXAorICAgICAgICAiXG4iXAorICAg
ICAgICAidmVjNCBhdmcgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4iXAorICAgICAgICAi
ZmxvYXQgY29lZmZpY2llbnRTdW0gPSAwLjA7XG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAi
YXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQueHkpICogaW5jci54O1xuIlwK
KyAgICAgICAgImNvZWZmaWNpZW50U3VtICs9IGluY3IueDtcbiJcCisgICAgICAgICJpbmNyLnh5
ICo9IGluY3IueXo7XG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAiZm9yIChmbG9hdCBpID0g
MS4wOyBpIDw9IG51bUJsdXJQaXhlbHNQZXJTaWRlOyBpKyspIHtcbiJcCisgICAgICAgICIgICAg
YXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQueHkgLSBpICogdV9ibHVyU2l6
ZSAqIGJsdXJNdWx0aXBseVZlYykgKiBpbmNyLng7XG4iXAorICAgICAgICAiICAgIGF2ZyArPSB0
ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5ICsgaSAqIHVfYmx1clNpemUgKiBibHVy
TXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBjb2VmZmljaWVudFN1bSAr
PSAyLjAgKiBpbmNyLng7XG4iXAorICAgICAgICAiICAgIGluY3IueHkgKj0gaW5jci55ejtcbiJc
CisgICAgICAgICJ9XG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAiZ2xfRnJhZ0NvbG9yID0g
YXZnIC8gY29lZmZpY2llbnRTdW07XG4iXAorICAgICAgICAifSIKKworICAgIGNvbnN0IGNoYXIq
IHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnNdOworCisgICAg
c2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckdyYXlzY2FsZV0gPSBTVEFOREFS
RF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7Cisg
ICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4w
NzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2
IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50
KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45Mjc4
ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsK
KyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVy
U2hhZGVyU2VwaWFdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUo
bG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3Vu
dCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42
MDcgKiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAu
MzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xv
ci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAw
Ljg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Iu
YSk7CisgICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJTYXR1cmF0ZV0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVj
NCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2
ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1
ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29s
b3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQp
ICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3
MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICog
dV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9hbW91bnQpICogY29sb3Iu
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisgICAgKTsK
KworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGVdID0g
U1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9y
KQorICAgICAgICB7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5
NzkzMjM4NDY7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBjID0gY29zKHVfYW1vdW50ICogcGkg
LyAxODAuMCk7CisgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkg
LyAxODAuMCk7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAq
IDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICog
MC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAu
MTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3Iu
YiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5n
ICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBj
ICogMC45MjggKyBzICogMC4wNzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7
CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckludmVydF0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgZmxvYXQgaW52
ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBuICogKDEu
MCAtIHVfYW1vdW50KTsgfQorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9y
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGlu
dmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQorICAg
ICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQnJpZ2h0bmVz
c10gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQg
Y29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnJnYiAqICgx
LjAgKyB1X2Ftb3VudCksIGNvbG9yLmEpOworICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRl
clN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJDb250cmFzdF0gPSBTVEFOREFSRF9GSUxU
RVIoCisgICAgICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAo
biAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFz
dChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5h
KTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyT3BhY2l0eV0gPSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBz
aGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0
KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CisgICAgICAg
IH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJs
dXJYXSA9IEJMVVJfRklMVEVSKAorICAgICAgICBjb25zdCBmbG9hdCBudW1CbHVyUGl4ZWxzUGVy
U2lkZSA9IDIuMDsKKyAgICAgICAgY29uc3QgdmVjMiAgYmx1ck11bHRpcGx5VmVjICAgICAgPSB2
ZWMyKDEuMCwgMC4wKTsKKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0Zp
bHRlclNoYWRlckJsdXJZXSA9IEJMVVJfRklMVEVSKAorICAgICAgICBjb25zdCBmbG9hdCBudW1C
bHVyUGl4ZWxzUGVyU2lkZSA9IDIuMDsKKyAgICAgICAgY29uc3QgdmVjMiAgYmx1ck11bHRpcGx5
VmVjICAgICAgPSB2ZWMyKDAuMCwgMS4wKTsKKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXll
ckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvd10gPSBPRkZTRVRfRklMVEVSKAorICAgICAgICB1
bmlmb3JtIGxvd3AgdmVjMyB1X2NvbG9yOworICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29sb3IuYSA+IDAuNSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmVjNCh1X2NvbG9yLnIsIHVfY29sb3IuZywgdV9jb2xvci5i
LCBjb2xvci5hKTsKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgfQorICAgICk7
CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2hd
ID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgIH0KKyAg
ICApOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmls
dGVyU2hhZGVyczsgaSsrKSB7CisgICAgICAgIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSA9
IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgc2hh
ZGVyU3Ryc1tpXSk7CisgICAgICAgIGlmICghbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldKSB7
CisgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDb3VsZCBub3QgbG9hZCBDU1MgRmlsdGVyIFNoYWRl
ciAlaSIsIGkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gU2V0IEFUVFJJQiBsb2NhdGlvbnMgLSB0aGVzZSB3aWxsIGJlIHRoZSBzYW1lIGFz
IHRoZSBwcm9ncmFtcyBpbiBMYXllclJlbmRlcmVyLmNwcAorICAgIGJpbmRDb21tb25BdHRyaWJM
b2NhdGlvbihtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0aW9uIik7CisgICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9uKG1fdGV4Q29vcmRMb2NhdGlvbiwgImFfdGV4Q29vcmQiKTsKKworICAg
IC8vIFJlLWxpbmsgdG8gdGFrZSBlZmZlY3QKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVy
RGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIGdsTGlua1Byb2dy
YW0obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldKTsKKworICAgIC8vIEdldCBVTklGT1JNIGxv
Y2F0aW9ucworICAgIGZvciAoaW50IGkgPSAwO2kgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmls
dGVyU2hhZGVyczsgKytpKQorICAgICAgICBtX2Ftb3VudExvY2F0aW9uW2ldID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldLCAidV9hbW91bnQiKTsKKwor
ICAgIG1fYmx1ckFtb3VudExvY2F0aW9uWzBdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NG
aWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldLCAidV9i
bHVyU2l6ZSIpOworICAgIG1fYmx1ckFtb3VudExvY2F0aW9uWzFdID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVy
Qmx1clhdLCAidV9ibHVyU2l6ZSIpOworCisgICAgbV9zaGFkb3dDb2xvckxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyU2hhZG93XSwgInVfY29sb3IiKTsKKyAgICBtX29mZnNldExvY2F0aW9uID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6
Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSwgInVfb2Zmc2V0Iik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwaW5nKExheWVyUmVuZGVyZXJTdXJmYWNl
KiBzdXJmYWNlKQoreworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUtPnRleHR1cmVJ
ZCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPnRleHR1
cmUoKS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OnBvbmco
TGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQs
IHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCksIDApOworICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6cHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNl
LCBpbnQgc291cmNlSWQpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fc25hcHNob3RUZXh0
dXJlLT50ZXh0dXJlSWQoKSwgMCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHNvdXJjZUlkKTsKKyAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFu
c3BhcmVuY3kKKworICAgIGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCks
IHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSk7CisKKyAgICBnbFVzZVByb2dyYW0obV9jc3NGaWx0
ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2hdKTsK
KyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKK30KKwordm9pZCBMYXll
ckZpbHRlclJlbmRlcmVyOjpwb3BTbmFwc2hvdCgpCit7CisgICAgLy8gVGhlIG5hbWUgaXMgc2xp
Z2h0bHkgbWlzbGVhZGluZy4KKyAgICAvLyBUaGlzIERSQVdTIHRoZSBwcmV2aW91cyB0ZXh0dXJl
IHVzaW5nIHRoZSBjdXJyZW50IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24sIHRoZW4gc2V0cyB0
aGUgdGV4dHVyZQorICAgIC8vIHRvIHRoZSBzbmFwc2hvdCB0ZXh0dXJlLiBOZXh0IHRpbWUgZ2xE
cmF3QXJyYXlzIGlzIGNhbGxlZCwgdGhlIHNuYXBzaG90IHdpbGwgYmUgZHJhd24uCisKKyAgICBn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fc25hcHNob3RUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK1dURjo6
VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IExheWVyRmlsdGVyUmVu
ZGVyZXI6OmFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNl
LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BzKQoreworICAgIFdU
Rjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IHJldDsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiA9ICpvcHNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6QkxV
UiAmJiBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5z
dGREZXZpYXRpb24oKS52YWx1ZSgpIDwgMC4xKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaW50IHByb2dyYW1JZCA9IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChvcGVyYXRpb24u
Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOjpjcmVhdGUocHJvZ3JhbUlkKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRp
b24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0o
VW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCisgICAgICAgICAg
ICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Jj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgcmV0Lmxh
c3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW3By
b2dyYW1JZF0KKyAgICAgICAgICAgICAgICAsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAvLyBCbHVyIGlzIGEgdHdvLXN0ZXAgcHJvY2VzczoKKyAg
ICAgICAgICAgIC8vICAgICAxLiBibHVyIFgKKyAgICAgICAgICAgIC8vICAgICAyLiBibHVyIFkK
KyAgICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGNhbiBoYXZlIDJuIHRpbWUgaW5zdGVhZCBvZiBu
XjIgdGltZSkKKworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLnN0ZERldmlhdGlvbigpLnZhbHVlKCk7
CisKKyAgICAgICAgICAgIC8vIEJMVVIgWToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVu
ZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlckJsdXJZXSwgYW1vdW50KSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5h
cHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCisg
ICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkp
OworCisgICAgICAgICAgICAvLyBCTFVSIFg6CisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJs
dXJYKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6
Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0s
IGFtb3VudCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3Jt
MWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAgICAgICAgICAgICwgMS4w
ZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKSkpOworCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gU2hhZG93IGlzIGEgZm91ci1zdGVw
IHByb2Nlc3M6CisgICAgICAgICAgICAvLyAgICAgMS4gY2FwdHVyZSBzbmFwc2hvdAorICAgICAg
ICAgICAgLy8gICAgICAgIHR1cm4gaW50byBhIHNvbGlkIG9mZnNldCBtYXNrCisgICAgICAgICAg
ICAvLyAgICAgMi4gYmx1ciBYCisgICAgICAgICAgICAvLyAgICAgMy4gYmx1ciBZCisgICAgICAg
ICAgICAvLyAgICAgNC4gcmVwYWludCBvcmlnaW5hbCBvbiB0b3Agb2YgbWFzaworICAgICAgICAg
ICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9IHN0YXRpY19jYXN0PGNv
bnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAgICAgICAgICAg
cmV0Lmxhc3QoKS0+c2V0UHVzaFNuYXBzaG90KCk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5h
cHBlbmRVbmlmb3JtKFVuaWZvcm0yZjo6Y3JlYXRlKG1fb2Zmc2V0TG9jYXRpb24KKyAgICAgICAg
ICAgICAgICAsIGZsb2F0KGRzZm8ueCgpKSAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgp
KQorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby55KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6
ZSgpLmhlaWdodCgpKSkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShV
bmlmb3JtM2Y6OmNyZWF0ZShtX3NoYWRvd0NvbG9yTG9jYXRpb24KKyAgICAgICAgICAgICAgICAs
IGZsb2F0KGRzZm8uY29sb3IoKS5yZWQoKSkgLyAyNTUuMGYKKyAgICAgICAgICAgICAgICAsIGZs
b2F0KGRzZm8uY29sb3IoKS5ncmVlbigpKSAvIDI1NS4wZgorICAgICAgICAgICAgICAgICwgZmxv
YXQoZHNmby5jb2xvcigpLmJsdWUoKSkgLyAyNTUuMGYpKTsKKworICAgICAgICAgICAgLy8gQkxV
UiBZCisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNy
ZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZKSk7CisgICAgICAgICAgICByZXQu
bGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25b
TGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0KKyAgICAgICAgICAgICAgICAsIGRzZm8u
c3RkRGV2aWF0aW9uKCkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0o
VW5pZm9ybTFmOjpjcmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMF0KKyAgICAgICAgICAgICAg
ICAsIDEuMGYgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAg
ICAgIC8vIEJMVVIgWAorICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVy
QWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWCkpOworICAgICAg
ICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3Vu
dExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdCisgICAgICAgICAgICAg
ICAgLCBkc2ZvLnN0ZERldmlhdGlvbigpKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBl
bmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzFdCisgICAg
ICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpKSk7CisK
KyAgICAgICAgICAgIC8vIFJlcGFpbnQgb3JpZ2luYWwgaW1hZ2UKKyAgICAgICAgICAgIHJldC5h
cHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPnNldFBvcFNu
YXBzaG90KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmV0LnNpemUoKSAlIDIpIC8vIFdlIG5l
ZWQgYW4gZXZlbiBudW1iZXIgb2YgYWN0aW9ucy4gU2VlIHBpbmctcG9uZyBub3RlIGluIGFwcGx5
TGF5ZXJGaWx0ZXJzKCkuCisgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKwor
ICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAw
LCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
YXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVy
LCBXVEY6OlZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBhY3Rpb25z
KQoreworICAgIGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKyAgICBBU1NF
UlQoIShhY3Rpb25zLnNpemUoKSAlIDIpKTsgLy8gU2VlIHBpbmctcG9uZ2luZyBub3RlIGJlbG93
LgorCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbGF5
ZXItPmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90ZXh0
dXJlKQorICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgp
LT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICBib29sIHJlcXVpcmVTbmFwc2hvdCA9IGZhbHNlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkKKyAgICAgICAgICAgIHJl
cXVpcmVTbmFwc2hvdCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX3NuYXBzaG90VGV4dHVy
ZSAmJiByZXF1aXJlU25hcHNob3QpCisgICAgICAgIG1fc25hcHNob3RUZXh0dXJlID0gdGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y3JlYXRlVGV4dHVyZSgpOworCisgICAgTGF5ZXJS
ZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsK
KworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
ICZsYXllci0+Z2V0VHJhbnNmb3JtZWRCb3VuZHMoKSApOworICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29v
cmRzKTsKKworICAgIG1fdGV4dHVyZS0+cHJvdGVjdChzdXJmYWNlLT50ZXh0dXJlKCktPnNpemUo
KSk7CisgICAgaWYgKHJlcXVpcmVTbmFwc2hvdCkKKyAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUt
PnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCkpOworCisgICAgaWYgKCFmYm8pCisg
ICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworCisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gTk9URSBBQk9VVCBQSU5HLVBP
TkdJTkcKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8gVW5k
ZXIgT3BlbkdMIEVTIDIuMCwgd2UgY2Fubm90IHVzZSB0aGUgZmJvIHdlIGFyZSB3cml0dGluZyB0
byBhcyBhIHRleHR1cmUsIHNvIHdlIG5lZWQgdG8gcGxheSBwaW5nLXBvbmc6CisgICAgICAgIC8v
ICAxKSBEcmF3IHBhcmVudCBzdXJmYWNlIHRvIG91ciB0ZXh0dXJlIHdpdGggZWZmZWN0LgorICAg
ICAgICAvLyAgMikgRHJhdyBvdXIgc3VyZmFjZSB0byBwYXJlbnQgdGV4dHVyZSB3aXRoIGVmZmVj
dC4KKyAgICAgICAgLy8gIDMpIFJlcGVhdC4KKyAgICAgICAgLy8gQmVjYXVzZSB3ZSBldmVudHVh
bGx5IGhhdmUgdG8gZW5kIG9uIHRoZSBwYXJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhbiBldmVuIG51
bWJlciBvZiBhY3Rpb25zLgorICAgICAgICAvLyBhY3Rpb25zRm9yT3BlcmF0aW9ucyB0YWtlcyBj
YXJlIG9mIHRoYXQuCisKKyAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFB1c2hTbmFwc2hv
dCgpKQorICAgICAgICAgICAgcHVzaFNuYXBzaG90KHN1cmZhY2UsICghKGkgJSAyKSA/IHN1cmZh
Y2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkgOiBtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisK
KyAgICAgICAgaWYgKCEoaSAlIDIpKQorICAgICAgICAgICAgcGluZyhzdXJmYWNlKTsgLy8gU2V0
IGZyYW1lYnVmZmVyIHRvIG91cnMsIGFuZCB0ZXh0dXJlIHRvIHBhcmVudAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBwb25nKHN1cmZhY2UpOyAvLyBTZXQgdGV4dHVyZSB0byBwYXJlbnQsIGFu
ZCBmcmFtZWJ1ZmZlciB0byB1cworCisgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7IC8vIHRvIHRyYW5zcGFyZW5jeQorICAgICAgICBnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2Ut
PnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpOworCisgICAgICAgIGFj
dGlvbnNbaV0tPnVzZUFjdGlvbk9uKHRoaXMpOworCisgICAgICAgIGlmIChhY3Rpb25zW2ldLT5z
aG91bGRQb3BTbmFwc2hvdCgpKQorICAgICAgICAgICAgcG9wU25hcHNob3QoKTsKKworICAgICAg
ICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICB9CisKKyAgICBtX3Rl
eHR1cmUtPnVucHJvdGVjdCgpOworICAgIGlmIChyZXF1aXJlU25hcHNob3QpCisgICAgICAgIG1f
c25hcHNob3RUZXh0dXJlLT51bnByb3RlY3QoKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOworCisgICAgZ2xDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShDU1NfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJl
bmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUxNTdiNTBhOGI0MjljNWU2MWQ1YjgzZTFkYjVjZjVhYjdi
Yzc2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcl9oCisjZGVmaW5lIExheWVyRmlsdGVyUmVuZGVyZXJfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiT3duUHRyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHQuaD4KKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOworY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlcjsK
K2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb247CitjbGFzcyBMYXllclJlbmRlcmVyU3Vy
ZmFjZTsKKworY2xhc3MgVW5pZm9ybWYgOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlmb3JtZj4gewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVuaWZvcm1mKTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBVbmlmb3JtZihpbnQgbG9jYXRp
b24pOworICAgIGNvbnN0IGludCYgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbG9jYXRpb247CisgICAgaW50IG1fcmVmQ291bnQ7
Cit9OworCitjbGFzcyBVbmlmb3JtMWYgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2
YWwpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTFmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFs
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBmbG9hdCBtX3Zh
bDsKK307CisKK2NsYXNzIFVuaWZvcm0yZiA6IHB1YmxpYyBVbmlmb3JtZiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0
IHZhbDAsIGZsb2F0IHZhbDEpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTJmKGludCBsb2Nh
dGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWxbMl07Cit9OworCitjbGFzcyBVbmlmb3JtM2Yg
OiBwdWJsaWMgVW5pZm9ybWYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZv
cm1mPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2
YWwyKTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm0zZihpbnQgbG9jYXRpb24sIGZsb2F0IHZh
bDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCBhcHBseSgpOworICAgIGZsb2F0IG1fdmFsWzNdOworfTsKKworY2xhc3MgTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rp
b24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckZpbHRlclJlbmRlcmVy
QWN0aW9uPiBjcmVhdGUoaW50IHByb2dyYW1JZCk7CisgICAgICAgIC8vIGEgdmVjdG9yIG9mIGFj
dGlvbnMgbXVzdCBoYXZlIGFuIGV2ZW4gY291bnQsIHNvIGlmIHlvdSBoYXZlIGFuIG9kZCBjb3Vu
dCwgYWRkIGEgcGFzc3Rocm91Z2ggZXZlbnQgYXQgdGhlIGVuZAorICAgICAgICAvLyBzZWUgdGhl
IHBpbmctcG9uZyBub3RlIGluIExheWVyRmlsdGVyUmVuZGVyZXI6OmFwcGx5QWN0aW9ucworICAg
IH5MYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKCk7CisKKyAgICBib29sIHNob3VsZFB1c2hTbmFw
c2hvdCgpIHsgcmV0dXJuIG1fcHVzaFNuYXBzaG90OyB9CisgICAgdm9pZCBzZXRQdXNoU25hcHNo
b3QoKSB7IG1fcHVzaFNuYXBzaG90ID0gMTsgfQorCisgICAgYm9vbCBzaG91bGRQb3BTbmFwc2hv
dCgpIHsgcmV0dXJuIG1fcG9wU25hcHNob3Q7IH0KKyAgICB2b2lkIHNldFBvcFNuYXBzaG90KCkg
eyBtX3BvcFNuYXBzaG90ID0gMTsgfQorCisgICAgdm9pZCBhcHBlbmRVbmlmb3JtKGNvbnN0IFJl
ZlB0cjxVbmlmb3JtZj4mIHVuaWZvcm0pIHsgbV91bmlmb3Jtcy5hcHBlbmQodW5pZm9ybSk7IH0K
KyAgICB2b2lkIHVzZUFjdGlvbk9uKExheWVyRmlsdGVyUmVuZGVyZXIqKTsKKworcHJvdGVjdGVk
OgorICAgIGludCBtX3JlZkNvdW50OworICAgIGludCBtX3Byb2dyYW1JZDsKKyAgICBib29sIG1f
cHVzaFNuYXBzaG90OworICAgIGJvb2wgbV9wb3BTbmFwc2hvdDsKKworICAgIFdURjo6VmVjdG9y
PFJlZlB0cjxVbmlmb3JtZj4gPiBtX3VuaWZvcm1zOworcHJpdmF0ZToKKyAgICBMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uKGludCBwcm9ncmFtSWQpOworfTsKKworY2xhc3MgTGF5ZXJGaWx0ZXJS
ZW5kZXJlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGaWx0ZXJSZW5kZXJlcik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllckZpbHRlclJlbmRlcmVyPiBj
cmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9j
YXRpb24pOworICAgIHZvaWQgYXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBXVEY6OlZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlv
bj4gPik7CisgICAgV1RGOjpWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+
ID4gYWN0aW9uc0Zvck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqLCBjb25zdCBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYpOworCisgICAgLy8gSWYgaW5pdGlhbGl6YXRp
b24gZmFpbHMsIG9yIGRpc2FibGUoKSBpcyBjYWxsZWQsIHRoaXMgaXMgZmFsc2UuCisgICAgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICB2b2lkIGRpc2Fi
bGUoKSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcihjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRM
b2NhdGlvbik7CisgICAgdm9pZCBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50IGxvY2F0aW9u
LCBjb25zdCBjaGFyKiBhdHRyaWJOYW1lKTsKKyAgICBib29sIGluaXRpYWxpemVTaGFyZWRHTE9i
amVjdHMoKTsKKworICAgIC8vIFNlZSBub3RlIGFib3V0IHBpbmctcG9uZ2luZyBpbiBhcHBseUFj
dGlvbnMoKQorICAgIHZvaWQgcGluZyhMYXllclJlbmRlcmVyU3VyZmFjZSopOworICAgIHZvaWQg
cG9uZyhMYXllclJlbmRlcmVyU3VyZmFjZSopOworCisgICAgLy8gVGhpcyBpcyBmb3Igc2hhZG93
cywgd2hlcmUgd2UgbmVlZCB0byBjcmVhdGUgYSBzaGFkb3csIGFuZCB0aGVuIHJlcGFpbnQgdGhl
IG9yaWdpbmFsIGltYWdlCisgICAgLy8gb24gdG9wIG9mIHRoZSBzaGFkb3cuCisgICAgdm9pZCBw
dXNoU25hcHNob3QoTGF5ZXJSZW5kZXJlclN1cmZhY2UqLCBpbnQgc291cmNlSWQpOworICAgIHZv
aWQgcG9wU25hcHNob3QoKTsKKworICAgIGJvb2wgbV9lbmFibGVkOworCisgICAgLy8gRVNTTCBh
dHRyaWJ1dGVzIHNoYXJlZCB3aXRoIExheWVyUmVuZGVyZXIgLSBzZWUgY29uc3RydWN0b3I6Cisg
ICAgY29uc3QgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKKyAgICBjb25zdCBpbnQgbV90ZXhDb29y
ZExvY2F0aW9uOworCisgICAgLy8gRVNTTCBwcm9ncmFtIG9iamVjdCBJRHM6CisgICAgdW5zaWdu
ZWQgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJT
aGFkZXJzXTsKKworICAgIC8vIEVTU0wgdW5pZm9ybSBsb2NhdGlvbnM6CisgICAgaW50IG1fYW1v
dW50TG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnNdOworICAgIGlu
dCBtX2JsdXJBbW91bnRMb2NhdGlvblsyXTsgLy8gMCA9IFksIDEgPSBYCisgICAgaW50IG1fc2hh
ZG93Q29sb3JMb2NhdGlvbjsKKyAgICBpbnQgbV9vZmZzZXRMb2NhdGlvbjsKKworICAgIC8vIFRl
eHR1cmVzIGZvciBwbGF5aW5nIHBpbmctcG9uZyAtIHNlZSBub3RlIGluIGFwcGx5QWN0aW9ucygp
CisgICAgUmVmUHRyPFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8VGV4dHVyZT4gbV9z
bmFwc2hvdFRleHR1cmU7CisKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgRU5BQkxFKENTU19GSUxURVJTKQorCisjZW5kaWYgLy8gTGF5ZXJGaWx0ZXJSZW5kZXJlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAppbmRleCA3NzYyM2U1OGNmNjkyZWJiOGRjMTQ4ZjBl
OTExYTRlNjU5MGU4YWY2Li4wNzJiNjNiOWI0MDk4ZDM0Mjg0MTA3MjA0NWUyNzI4Njc4ODNjZjVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyLmgiCiAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgi
CisjaW5jbHVkZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKIApAQCAt
NjQsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0dMRXJyb3IoKQogI2VuZGlmCiB9CiAKLXN0
YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVyU291
cmNlKQorR0x1aW50IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZSkKIHsKICAgICBHTHVpbnQgc2hhZGVyID0gZ2xDcmVhdGVTaGFk
ZXIodHlwZSk7CiAgICAgaWYgKCFzaGFkZXIpCkBAIC04Niw3ICs4Nyw3IEBAIHN0YXRpYyBHTHVp
bnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVyU291cmNlKQogICAg
IHJldHVybiBzaGFkZXI7CiB9CiAKLXN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlclByb2dyYW0oY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSkKK0dMdWludCBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQog
ewogICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXI7CiAgICAgR0x1aW50IGZyYWdtZW50U2hhZGVyOwpA
QCAtNTAwLDYgKzUwMSwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZh
Y2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocgogICAgICAgICBpbnQg
Y3VycmVudFN0ZW5jaWxWYWx1ZSA9IDA7CiAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdCgtMSwg
LTEsIDIsIDIpOwogICAgICAgICBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoc3VyZmFjZUxheWVy
c1tpXS5nZXQoKSwgY3VycmVudFN0ZW5jaWxWYWx1ZSwgY2xpcFJlY3QpOworCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgICAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgICAg
ICBtX2ZpbHRlclJlbmRlcmVyID0gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKG1fcG9zaXRp
b25Mb2NhdGlvbiwgbV90ZXhDb29yZExvY2F0aW9uKTsKKyAgICAgICAgaWYgKGxheWVyLT5maWx0
ZXJPcGVyYXRpb25zQ2hhbmdlZCgpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0RmlsdGVyT3Bl
cmF0aW9uc0NoYW5nZWQoZmFsc2UpOworICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlckFjdGlv
bnMobV9maWx0ZXJSZW5kZXJlci0+YWN0aW9uc0Zvck9wZXJhdGlvbnMoc3VyZmFjZSwgbGF5ZXIt
PmZpbHRlcnMoKS5vcGVyYXRpb25zKCkpKTsKKyAgICAgICAgfQorICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyLT5hcHBseUFjdGlvbnMobV9mYm8sIGxheWVyLCBsYXllci0+ZmlsdGVyQWN0aW9ucygp
KTsKKyAgICAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworI2VuZGlmCiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlcmUgYXJlIGxheWVycyBkcmF3ZWQgb24gc3VyZmFjZXMsIHdlIG5lZWQgdG8g
c3dpdGNoIHRvIGRlZmF1bHQgZnJhbWVidWZmZXIuCkBAIC03MTIsNyArNzI0LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXIsIGNvbnN0IFQKICAgICAvLyBDYWxjdWxhdGUgdGhlIGxheWVyJ3Mgb3BhY2l0eS4K
ICAgICBvcGFjaXR5ICo9IGxheWVyLT5vcGFjaXR5KCk7CiAKLSAgICBib29sIHVzZUxheWVyUmVu
ZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigpIHx8IGxheWVyLT5yZXBsaWNhTGF5ZXIo
KTsKKyAgICBib29sIHVzZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigp
IHx8IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSB8fCBsYXllci0+ZmlsdGVycygpLnNpemUoKTsKICAg
ICBpZiAoIXVzZUxheWVyUmVuZGVyZXJTdXJmYWNlKSB7CiAgICAgICAgIGxheWVyLT5zZXREcmF3
T3BhY2l0eShvcGFjaXR5KTsKICAgICAgICAgbGF5ZXItPmNsZWFyTGF5ZXJSZW5kZXJlclN1cmZh
Y2UoKTsKQEAgLTk4NCw3ICs5OTYsNyBAQCBib29sIExheWVyUmVuZGVyZXI6Om1ha2VDb250ZXh0
Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKIH0KIAotLy8g
QmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9uIGxvY2F0aW9uIGFjcm9z
cyBhbGwgdGhyZWUgcHJvZ3JhbXMKKy8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0
byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHByb2dyYW1zCiAvLyB1c2VkIGJ5IHRoZSBj
b21wb3NpdG9yLiBUaGlzIGFsbG93cyB0aGUgY29kZSB0byBiaW5kIHRoZSBhdHRyaWJ1dGVzIG9u
bHkgb25jZQogLy8gZXZlbiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHByb2dyYW1zLgogdm9pZCBM
YXllclJlbmRlcmVyOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50IGxvY2F0aW9uLCBjb25z
dCBjaGFyKiBhdHRyaWJOYW1lKQpAQCAtMTA1Myw3ICsxMDY1LDYgQEAgYm9vbCBMYXllclJlbmRl
cmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAq
IGFscGhhICogbWFza0NvbG9yLnc7ICAgICAgICAgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwog
Ci0KICAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXJzIGFyb3VuZCB0
aGUgbGF5ZXJzLgogICAgIGNoYXIgY29sb3JWZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAg
ICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgpAQCAtMTEzOSw3ICsxMTUwLDcgQEAg
Ym9vbCBMYXllclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFNwZWNpZnkgdGhlIGF0dHJpYiBsb2NhdGlv
biBmb3IgdGhlIHBvc2l0aW9uIGFuZCBtYWtlIGl0IHRoZSBzYW1lIGZvciBhbGwgdGhyZWUgcHJv
Z3JhbXMgdG8KKyAgICAvLyBTcGVjaWZ5IHRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRoZSBwb3Np
dGlvbiBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRvCiAgICAgLy8gYXZv
aWQgYmluZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4KICAgICBiaW5kQ29t
bW9uQXR0cmliTG9jYXRpb24obV9wb3NpdGlvbkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpOwogICAg
IGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihtX3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3Jk
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCmluZGV4IGY2YzNiZTg3OGZhMTFlYmUxNzliYjNlZTZk
MmE3ZjBkNjQzOGIyYjAuLjQzNzkyN2JlZWFjOGEwNDg3YjQxNGVmNTQ3MDdmYjM0MTc2YTQ4ZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiTGF5ZXJGaWx0ZXJS
ZW5kZXJlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHQuaD4KQEAgLTEzNCw2ICsxMzUsOSBAQCBw
dWJsaWM6CiAgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBhbHJlYWR5IGJlZW4gZHJhd2VkIG9uIGEg
c3VyZmFjZS4KICAgICBib29sIGxheWVyQWxyZWFkeU9uU3VyZmFjZShMYXllckNvbXBvc2l0aW5n
VGhyZWFkKikgY29uc3Q7CiAKKyAgICBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5
cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSk7CisgICAgc3RhdGljIEdMdWludCBsb2FkU2hh
ZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVGcmFtZVJl
Y3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIGFuaW1hdGlvblRpbWUsIGJv
b2wgaXNDb250ZXh0Q3VycmVudCk7CiAgICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRN
YXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VyZmFjZUxh
eWVycywgZmxvYXQgb3BhY2l0eSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKQEAgLTE2NCw2ICsxNjgs
MTAgQEAgcHJpdmF0ZToKICAgICAvLyBTaGFkZXIgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0
aW9ucy4KICAgICBjb25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwogICAgIGNvbnN0IGludCBt
X3RleENvb3JkTG9jYXRpb247CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIE93blB0cjxM
YXllckZpbHRlclJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOworI2VuZGlmCisKICAgICBpbnQg
bV9zYW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNd
OwogICAgIGludCBtX2FscGhhTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3Jh
bVNoYWRlcnNdOwogICAgIGludCBtX21hc2tTYW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1i
ZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNw
cAppbmRleCAxNWJiZTBhOGYxMzg4YTE2ZTQwMTk0YWZlYzIwYThmOGIwMmY4NDNhLi5lOWQzZGZm
NDJjOWMxMGZmZjUwOWQ2NWMzOGI0M2U3NmY0YmNmNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2Vi
S2l0VGhyZWFkLmNwcApAQCAtNjUsNiArNjUsOSBAQCBMYXllcldlYktpdFRocmVhZDo6TGF5ZXJX
ZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvdwog
ICAgICwgbV9pc01hc2soZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbnNDaGFuZ2VkKGZhbHNlKQog
ICAgICwgbV9jbGVhck92ZXJyaWRlT25Db21taXQoZmFsc2UpCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgICwgbV9maWx0ZXJzQ2hhbmdlZChmYWxzZSkKKyNlbmRpZgogewogICAgIGlmICh0
eXBlID09IExheWVyKQogICAgICAgICBtX3RpbGVyID0gTGF5ZXJUaWxlcjo6Y3JlYXRlKHRoaXMp
OwpAQCAtMjg0LDYgKzI4NywxMiBAQCB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpjb21taXRPbkNv
bXBvc2l0aW5nVGhyZWFkKCkKICAgICBtX3Bvc2l0aW9uICs9IG1fYWJzb2x1dGVPZmZzZXQ7CiAg
ICAgLy8gQ29weSB0aGUgYmFzZSB2YXJpYWJsZXMgZnJvbSB0aGlzIG9iamVjdCBpbnRvIG1fbGF5
ZXJDb21wb3NpdGluZ1RocmVhZAogICAgIHJlcGxpY2F0ZShtX2xheWVyQ29tcG9zaXRpbmdUaHJl
YWQuZ2V0KCkpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBpZiAobV9maWx0ZXJzQ2hh
bmdlZCkgeworICAgICAgICBtX2ZpbHRlcnNDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIG1fbGF5
ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQodHJ1ZSk7Cisg
ICAgfQorI2VuZGlmCiAgICAgaWYgKG1fYW5pbWF0aW9uc0NoYW5nZWQpIHsKICAgICAgICAgbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRSdW5uaW5nQW5pbWF0aW9ucyhtX3J1bm5pbmdBbmlt
YXRpb25zKTsKICAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRTdXNwZW5kZWRB
bmltYXRpb25zKG1fc3VzcGVuZGVkQW5pbWF0aW9ucyk7CkBAIC00MDUsNiArNDE0LDMxIEBAIHZv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK2Jvb2wg
TGF5ZXJXZWJLaXRUaHJlYWQ6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBUaGVyZSBpcyB3b3JrIGFzc29jaWF0ZWQgd2l0
aCBjb21wb3NpdGluZyBmaWx0ZXJzLCBldmVuIGlmIHRoZXJlIGFyZSB6ZXJvIGZpbHRlcnMsCisg
ICAgLy8gc28gaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMsIGNsYWltIHdlIGNhbid0IGNvbXBvc2l0
ZSB0aGVtLgorICAgIGlmICghZmlsdGVycy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5h
dChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUo
KSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCiBjb25zdCBMYXllcldlYktpdFRocmVhZCogTGF5ZXJXZWJLaXRUaHJlYWQ6OnJvb3RM
YXllcigpIGNvbnN0CiB7CiAgICAgY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gdGhp
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJXZWJLaXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaAppbmRleCA0OWE0OWJlNWYxM2M5MDA5MDdl
NjJlZTgxNTkzOTNjYjMxMTY4ZDNmLi41MmJmMmYxMTFlNmU4MDk0NDJjZTNiMjQ5NGM4Y2FmNzA1
YTdiMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oCkBAIC05OCw2ICs5OCwxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNp
dHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
IHsgbV9maWx0ZXJzID0gZmlsdGVyczsgbV9maWx0ZXJzQ2hhbmdlZCA9IDE7IHNldE5lZWRzQ29t
bWl0KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpOworI2VuZGlmCisKICAgICB2b2lkIHNldE9wYXF1ZShi
b29sIGlzT3BhcXVlKSB7IG1faXNPcGFxdWUgPSBpc09wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsg
fQogCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBt
X3Bvc2l0aW9uID0gcG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KQEAgLTIwMiw2ICsyMDcs
OSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faXNNYXNrIDogMTsKICAgICB1bnNpZ25lZCBt
X2FuaW1hdGlvbnNDaGFuZ2VkIDogMTsKICAgICB1bnNpZ25lZCBtX2NsZWFyT3ZlcnJpZGVPbkNv
bW1pdCA6IDE7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHVuc2lnbmVkIG1fZmlsdGVy
c0NoYW5nZWQgOiAxOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCmluZGV4
IDM2ZDA2ZDMyYjY5YzQ3MTZmMzBiNTQ5MzM0N2FkYmFlZDE2MDIzNDMuLjQ4YWJhMmJhNGMxYTAx
OTlkNmZmODBjNDg5M2Y4ODk2ZjljYWMxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmUuaCIKQEAgLTEzOSw5ICsxNDAsMTEgQEAgdm9p
ZCBGRUN1c3RvbUZpbHRlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIWhhZENv
bnRleHQgfHwgbV9jb250ZXh0U2l6ZSAhPSBuZXdDb250ZXh0U2l6ZSkKICAgICAgICAgcmVzaXpl
Q29udGV4dChuZXdDb250ZXh0U2l6ZSk7CiAKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkgLy8g
QmxhY2tCZXJyeSBkZWZpbmVzIGl0cyBvd24gVGV4dHVyZSBjbGFzcy4KICAgICAvLyBEbyBub3Qg
ZHJhdyB0aGUgZmlsdGVyIGlmIHRoZSBpbnB1dCBpbWFnZSBjYW5ub3QgZml0IGluc2lkZSBhIHNp
bmdsZSBHUFUgdGV4dHVyZS4KICAgICBpZiAobV9pbnB1dFRleHR1cmUtPnRpbGVzKCkubnVtVGls
ZXNYKCkgIT0gMSB8fCBtX2lucHV0VGV4dHVyZS0+dGlsZXMoKS5udW1UaWxlc1koKSAhPSAxKQog
ICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAKICAgICAvLyBUaGUgc2hhZGVyIGhhZCBjb21w
aWxlciBlcnJvcnMuIFdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgogICAgIGlmICghbV9jb21waWxl
ZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKQEAgLTE4NSw3ICsxODgsMTEgQEAgYm9vbCBGRUN1
c3RvbUZpbHRlcjo6aW5pdGlhbGl6ZUNvbnRleHQoKQogCiB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpy
ZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQogeworI2lmICFQTEFU
Rk9STShCTEFDS0JFUlJZKSAvLyBCbGFja0JlcnJ5IGRlZmluZXMgaXRzIG93biBUZXh0dXJlIGNs
YXNzCiAgICAgbV9pbnB1dFRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBUZXh0dXJlOjpSR0JBOCwgbmV3Q29udGV4dFNpemUud2lkdGgoKSwgbmV3Q29udGV4dFNpemUu
aGVpZ2h0KCkpOworI2Vsc2UKKyAgICBtX2lucHV0VGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZSh0
cnVlKTsKKyNlbmRpZgogICAgIAogICAgIGlmICghbV9mcmFtZUJ1ZmZlcikKICAgICAgICAgbV9m
cmFtZUJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKQEAgLTI2OSw4ICsy
NzYsMTIgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKFVpbnQ4
Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5KQogICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+
c2FtcGxlckxvY2F0aW9uKCkgIT0gLTEpIHsKICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFpKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CisjaWYgIVBM
QVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgICAgIG1faW5wdXRUZXh0dXJlLT5sb2FkKHNyY1BpeGVs
QXJyYXktPmRhdGEoKSk7CiAgICAgICAgIG1faW5wdXRUZXh0dXJlLT5iaW5kVGlsZSgwKTsKKyNl
bHNlCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
aWYgKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSAhPSAtMSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYjg3OTZlODAyOTE4YmNiNmFhMzU3MGQxOTNjY2Ni
ZGYzZDFjOWU2My4uMGExYjdkMWEwMTk2ZGNmYmYzMzhhMjg5MmY1MTYyYzllYzQ1NDgxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2Vu
ZGlmCisKIC8vIEFubm95aW5nbHksIHdpbmdkaS5oICNkZWZpbmVzIHRoaXMuCiAjaWZkZWYgUEFT
U1RIUk9VR0gKICN1bmRlZiBQQVNTVEhST1VHSApAQCAtNDQsNyArNDgsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAvLyBDU1MgRmlsdGVycwogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
K2NsYXNzIEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGaWx0
ZXJPcGVyYXRpb24+IHsKKyNlbHNlCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKKyNlbmRpZgogcHVibGljOgogICAgIGVudW0gT3Bl
cmF0aW9uVHlwZSB7CiAgICAgICAgIFJFRkVSRU5DRSwgLy8gdXJsKCNzb21lZmlsdGVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlCmluZGV4IGFmMThjYzFlOTM3NmM3MDEzMjkyMzcw
Mzc3YTVjYzg2MTdiZDI2MmYuLjE5N2QxMGU1MWQ1OGY3NTdkYjk1ZTVlM2I5MzlhYzZlN2ZlYjFj
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2UKQEAgLTE3Myw5ICsxNzMsMTUg
QEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dPUktFUlMgT04pCiAK
IElGIChFTkFCTEVfR0xFUzIpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFXzNEX1JFTkRFUklORyBPTikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIE9OKQorICAgIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfRklMVEVSUyBPTikKKyAgICBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NIQURFUlMgT04pCiAgICAgV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMIE9OKQogRUxTRSAoKQogICAg
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9SRU5ERVJJTkcgT0ZG
KQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVSQVRF
RF8yRF9DQU5WQVMgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfRklMVEVSUyBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0NTU19TSEFERVJTIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfV0VCR0wgT0ZGKQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQppbmRleCBl
MjU2YjBlNThhNDAzMTYxYTllYWQ0YjM2MzYxYTNjMmJkNTkxYjlhLi5iMjQ2MjkxMTM0MzdkODE0
NDYyZjYwYTBmNzM3YzQ4M2ZjOTdiOGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQpAQCAtMjUsNiArMjUsOCBA
QAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04KICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9DU1NfVkFSSUFCTEVTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTM19GTEVY
Qk9YCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTX0ZJTFRFUlMKKyNjbWFrZWRlZmluZTAxIEVO
QUJMRV9DU1NfU0hBREVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFO
RExFUgogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQKICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVhZWQ3NTk5ODczMjE1MzI0MGZiYTkwZWE0ZTFl
NmE4OTI0MTBlMy4uYzFjNGRmNTBhN2Q5ZDY1NDgxYWRmNTRjNjk5Yjc2NDVhOGQyODYxZiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEyLTA3LTMxICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmlt
LmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gRW5hYmxlIENTUyBGaWx0ZXIgRWZmZWN0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI2ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgQ1NT
IGZpbHRlciBlZmZlY3RzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgY3VzdG9tIGVmZmVjdHMgKENT
UyBzaGFkZXJzKSBhbmQgcmVmZXJlbmNlIGVmZmVjdHMgKFNWRyBlZmZlY3RzKQorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOiBBY2tub3dsZWRnZSBDU1MgZmls
dGVyIGVmZmVjdHMuCisKIDIwMTItMDctMzEgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtb3ZlIEV2ZW50U2VuZGVyIGludG8gVGVz
dFJ1bm5lci5hCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggNzdj
YzFmNzYzMjBmYWNkNGFlY2U3ODIxZTkzYzlkYmE2ZTYzY2QxMy4uMzQ0NTA5ZjZmNzg1ZWZiZTkz
NGRiZDNkZTNmYmUxMDNhZjAyMTJkZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
ZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJl
TGlzdC5wbQpAQCAtMTYzLDcgKzE2Myw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX0NTU19FWENMVVNJT05TIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGNz
c0V4Y2x1c2lvbnNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzLWZpbHRlcnMiLCBk
ZXNjID0+ICJUb2dnbGUgQ1NTIEZpbHRlcnMgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9DU1NfRklMVEVSUyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpLCB2YWx1ZSA9PiBc
JGNzc0ZpbHRlcnNTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfRklMVEVS
UyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpIHx8IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9
PiBcJGNzc0ZpbHRlcnNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzMy1mbGV4Ym94
IiwgZGVzYyA9PiAiVG9nZ2xlIENTUzMgRmxleGJveCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX0NTUzNfRkxFWEJPWCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3MzRmxl
eGJveFN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3
YjQ5MTY0ZGE3ZmYzNDMwZGVkMDNlOTViN2UwYjg0MmNjZmQzM2ZiLi5iMDYyOWJhMDQ4MTI3MjIy
ZjU5NTJhOGE4YWY1YmE5NDUzNDUxYjlkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMzEgIEpvc2h1YSBOZXR0ZXJmaWVsZCAg
PGpuZXR0ZXJmaWVsZEByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBFbmFibGUgQ1NT
IEZpbHRlciBFZmZlY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MjY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEVuYWJsZSBDU1MgZmlsdGVyIGVmZmVjdHMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBj
dXN0b20gZWZmZWN0cyAoQ1NTIHNoYWRlcnMpIGFuZCByZWZlcmVuY2UgZWZmZWN0cyAoU1ZHIGVm
ZmVjdHMpCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2U6
IEFkZCBMYXllckZpbHRlclJlbmRlcmVyCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmgu
Y21ha2U6IEFja25vd2xkZ2UgQ1NTIGZpbHRlciBlZmZlY3RzCisKIDIwMTItMDctMzEgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1hdGljOiBkYXNo
Ym9hcmQgaW1hZ2VzIGFyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IGZyb20gaW5jcmVtZW50YWxs
eSB1cGRhdGVkIEpTT04K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155567</attachid>
            <date>2012-07-31 09:34:19 -0700</date>
            <delta_ts>2012-07-31 10:11:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731123300.patch</filename>
            <type>text/plain</type>
            <size>62155</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uN2YyNmU4ZDFkNzcyNjQ5MjU0NDg0OTYwMzcxZDE1
ZTExNjJiMDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJPdmVycmlkZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6ZmlsdGVyQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRGaWx0ZXJBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoTGF5ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6ZmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVbmlmb3JtZjo6VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTFmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OlVuaWZvcm0xZik6CisgICAgICAgIChXZWJD
b3JlOjpVbmlmb3JtMmY6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm0zZjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNmOjpVbmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjpwb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybWY6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAg
ICAgICAoVW5pZm9ybTNmKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxkUHVzaFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNl
dFB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpzaG91bGRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpzZXRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjphcHBlbmRVbmlmb3JtKToKKyAgICAgICAgKExheWVyRmlsdGVy
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmRpc2FibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oOgorICAgICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpbHRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorCiAyMDEyLTA3LTMxICBB
bGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiB0YWtlIGludG8gYWNjb3VudCB0aGUgd2hvbGUgc2VjdXJpdHkgb3JpZ2luIGluc3Rl
YWQgb2YganVzdCBob3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUzNjEwZGY5MjNjOTAxOWQ4
NmZkNGJiZmNmZDdlNGM5MjhiNGFjNjkuLjIzZDI1MjFjY2QwMjMyYTQ3MDdlNDU5YTgyY2Y5ZmQx
ODIzMDI1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDM4LDYgKzEwMzgsNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAgICBjc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5j
cHAKKyAgICBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCiAgICAgY3NzL1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcAogICAgIGNzcy9XcmFwU2hhcGVGdW5jdGlvbnMuY3BwCiAKQEAgLTE2
MDUsNiArMTYwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNoYWRlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAKICAgICBsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTE4MjEsMTAgKzE4MjMsMTEgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTg0OSwxNiArMTg1MiwxNSBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vTkVPTkhlbHBlcnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQmxl
bmRORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUNvbXBvc2l0ZUFy
aXRobWV0aWNORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRp
bmdORU9OLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdO
RU9OLmgKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDFhZTVmZTY5MDdh
NDczODQwOTlmYWViMGM3OWMyYWY5ZDFhYmJiY2UuLmE4MTZiMTQ4OTA1YzYzOGViN2Y4NjdiZTNm
YWQ0M2IzNzZmM2VmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
QEAgLTI3Miw2ICsyNzIsNyBAQCBJRiAoV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0xheWVyQmxhY2tCZXJyeS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcAorICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5j
cHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3Bw
CmluZGV4IDFiODFmNTRkZDAzOGU0ZWQ2ZTI1OTUwZjg5M2MxN2I2NGFiZGFkMTQuLmUyNzc5YzNj
MjFlYzEyZDZlNDZlZGRhZDU4ODdkOWFjMjI3YWI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0yOTIsNiArMjkzLDI2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBoYXNGaXhlZEFuY2VzdG9yCiAgICAg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogfQogCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmIChtX2ZpbHRlcnMgPT0gZmlsdGVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMg
PSBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OworICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAgICB1
cGRhdGVGaWx0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWx0ZXJzLmNsZWFyKCk7
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkNvbXBv
c2l0ZUZpbHRlcnM7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNr
Z3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC04MDMsNiAr
ODI0LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVyQmFja2dy
b3VuZENvbG9yKCkKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50
c0xheWVyKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OnVwZGF0ZUZpbHRlcnMoKQoreworICAgIGlmICghbV9maWx0ZXJzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbWFyeUxheWVyKCktPnNldEZpbHRlcnMobV9m
aWx0ZXJzKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRh
dGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgdHJhbnNmb3JtIGxheWVy
LCB0aGUgdHJhbnNmb3JtIG11c3QgYmUgc2V0IG9uIHRoYXQgbGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
R3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRleCBjMjY2OTQ3YWYxYzlhYjM1OWI1MzViOTRk
ZWQ1NjhjYjcyMjRkNmQ5Li5kOGQ2YjZhZTkzYjEzMDExZmNmMWIxMmMwZmQxNTgzODM2YjI0ZmRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCkBAIC0yOSwxMyAr
MjksMTUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2RlZmluZSBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw2ICs3
OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQ29udGFpbmVyKGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGJvb2wp
OwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBmaWx0
ZXIgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdG9yCisgICAgdmlydHVhbCBib29sIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyAmKTsKKyAgICBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKIApAQCAtMTQ2LDYgKzE1NCw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVIYXNGaXhlZENvbnRhaW5lcigpOwogICAgIHZvaWQg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJC
YWNrZ3JvdW5kQ29sb3IoKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCB1cGRh
dGVGaWx0ZXJzKCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoKTsKIAogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZShJbWFnZSopOwpAQCAtMTU5LDYgKzE3MCwxMCBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbV90cmFuc2Zvcm1MYXllcjsK
ICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fY29udGVudHNMYXllcjsKIAorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX3J1bm5pbmdBbmltYXRp
b25zOwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmlt
YXRpb25zOwogICAgIGRvdWJsZSBtX3N1c3BlbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggYzc1MGViZDI4NjQ3YzZkMWViMmIwZWFlMzA4OWRl
Nzc3MDcyNjRhZi4uODFjOTE4MDhkM2Y5YTBkZGExNWEyMTM0ZDY5ZmVmMjM0MmYzMmNmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC03OSw2ICs3OSw5
IEBAIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQoTGF5ZXJU
eXBlIHR5cGUsIExheWVyQ29tcG9zaXRpbmdUCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAg
LCBtX2NvbW1pdFNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgLCBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNl
KQorI2VuZGlmCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
aW5kZXggYjMzNTYwNjY5YzUxNDBkYzVkNWY5MjAxMmEzMDM1MTliZTAxMTliMC4uNWY3NTA3NDQx
ZTg0OWUyMDdhNGY2ZTgyMzkwNWY4MTVhNzdkMWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgKQEAgLTM1LDkgKzM1LDExIEBACiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJM
YXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKICNpbmNsdWRlICJMYXllclRpbGVyLmgiCiAKQEAgLTEw
MSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgZmxvYXQgbV9vcGFjaXR5OworCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CiAKICAgICB1bnNp
Z25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKQEAgLTExMCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7CiB9OwogCitjbGFzcyBMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOworCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+LCBwdWJsaWMgTGF5ZXJEYXRh
LCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQb2ludGVyQmFzZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gY3JlYXRl
KExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCopOwpAQCAtMjA3LDYgKzIx
MiwxNCBAQCBwdWJsaWM6CiAgICAgTGF5ZXJPdmVycmlkZSogb3ZlcnJpZGUoKTsKICAgICB2b2lk
IGNsZWFyT3ZlcnJpZGUoKTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGZp
bHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJPcGVyYXRpb25z
Q2hhbmdlZDsgfQorICAgIHZvaWQgc2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoYm9vbCBjaGFu
Z2VkKSB7IG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQgPSBjaGFuZ2VkOyB9CisKKyAgICBXVEY6
OlZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBmaWx0ZXJBY3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJBY3Rpb25zOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJB
Y3Rpb25zKGNvbnN0IFdURjo6VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9u
PiA+JiBhY3Rpb25zKSB7IG1fZmlsdGVyQWN0aW9ucyA9IGFjdGlvbnM7IH0KKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpOwogCkBAIC0y
NTEsNiArMjY0LDExIEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8TGF5ZXJPdmVycmlkZT4gbV9v
dmVycmlkZTsKICAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KiBtX2NsaWVudDsKKwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5n
ZWQ7CisgICAgV1RGOjpWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4g
bV9maWx0ZXJBY3Rpb25zOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllckRhdGEuaAppbmRleCBkOTkxMjE1NTExMTE5MGM1ZjRjNmJjMTIxMjE1NzQxMWExMTFlODc1
Li43ZWM1ODFiOGRhNDk5MTJjNjBhYTMxZmQwNjlmMjE0YjNjY2Y4NjlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRh
LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgTGF5ZXJEYXRhX2gKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC01
OSw2ICs2MCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXll
clByb2dyYW1TaGFkZXJCR1JBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy
T2ZMYXllclByb2dyYW1TaGFkZXJzIH07CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
ZW51bSBDU1NGaWx0ZXJTaGFkZXJzIHsgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVySW52ZXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU0ZpbHRlclNoYWRlckJyaWdodG5lc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQ29udHJhc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTRmlsdGVyU2hhZGVyT3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJCbHVyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NG
aWx0ZXJTaGFkZXJCbHVyWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJT
aGFkZXJTaGFkb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVy
UGFzc3Rocm91Z2gsCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU0ZpbHRlclNoYWRlckN1c3RvbSwKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE51bWJlck9mQ1NTRmlsdGVyU2hhZGVycyB9OworI2VuZGlmCisKICAgICBM
YXllckRhdGEoTGF5ZXJUeXBlIHR5cGUpCiAgICAgICAgIDogbV9sYXllclR5cGUodHlwZSkKICAg
ICAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQpAQCAtMTE1LDYgKzEzNSwxMCBAQCBwdWJs
aWM6CiAKICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAK
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNPcGFxdWUo
KSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMTc3LDYgKzIwMSw5IEBAIHByb3Rl
Y3RlZDoKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogCiAg
ICAgZmxvYXQgbV9vcGFjaXR5OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJP
cGVyYXRpb25zIG1fZmlsdGVyczsKKyNlbmRpZgogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwog
ICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVy
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE1NWYwYjBiMTRjN2E1NTY4M2MyODJmYWNkMjJkNWY5M2FhMjMz
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNTkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJT
KQorCisjaW5jbHVkZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiRmlsdGVy
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjaW5jbHVkZSA8VmVjdG9yLmg+CisKKyNp
bmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgaW50IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChjb25zdCBGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUmIHQpCit7CisgICAgc3dpdGNoICh0KSB7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyR3JheXNjYWxlOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2VwaWE7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRl
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJldHVybiBMYXll
ckRhdGE6OkNTU0ZpbHRlclNoYWRlckludmVydDsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyT3BhY2l0
eTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJu
IExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQnJpZ2h0bmVzczsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlckNvbnRyYXN0OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICBy
ZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWTsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlclNoYWRvdzsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNVU1RPTToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyQ3Vz
dG9tOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKK1VuaWZvcm1mOjpVbmlmb3JtZihpbnQg
Y19sb2NhdGlvbikKKyAgICA6IG1fbG9jYXRpb24oY19sb2NhdGlvbikKKyAgICAsIG1fcmVmQ291
bnQoMSkKK3sKK30KKwordm9pZCBVbmlmb3JtMWY6OmFwcGx5KCkKK3sKKyAgICBnbFVuaWZvcm0x
Zihsb2NhdGlvbigpLCBtX3ZhbCk7Cit9CisKK1Bhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0x
Zjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVW5pZm9ybTFmKGxvY2F0aW9uLCB2YWwpKTsKK30KKworVW5pZm9ybTFmOjpVbmlmb3Jt
MWYoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsKQorICAgIDogVW5pZm9ybWYoY19sb2NhdGlv
bikKKyAgICAsIG1fdmFsKGNfdmFsKQoreworfQorCit2b2lkIFVuaWZvcm0yZjo6YXBwbHkoKQor
eworICAgIGdsVW5pZm9ybTJmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSk7Cit9CisK
K1Bhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0yZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxv
YXQgdmFsMCwgZmxvYXQgdmFsMSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0y
Zihsb2NhdGlvbiwgdmFsMCwgdmFsMSkpOworfQorCitVbmlmb3JtMmY6OlVuaWZvcm0yZihpbnQg
Y19sb2NhdGlvbiwgZmxvYXQgY192YWwwLCBmbG9hdCBjX3ZhbDEpCisgICAgOiBVbmlmb3JtZihj
X2xvY2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFdID0gY192
YWwxOworfQorCit2b2lkIFVuaWZvcm0zZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9ybTNmKGxv
Y2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0pOworfQorCitQYXNzUmVmUHRy
PFVuaWZvcm1mPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZs
b2F0IHZhbDEsIGZsb2F0IHZhbDIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3Jt
M2YobG9jYXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKK30KKworVW5pZm9ybTNmOjpVbmlmb3Jt
M2YoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3Zh
bDIpCisgICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWww
OworICAgIG1fdmFsWzFdID0gY192YWwxOworICAgIG1fdmFsWzJdID0gY192YWwyOworfQorCitQ
YXNzUmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+IExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb246OmNyZWF0ZShpbnQgcHJvZ3JhbUlkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbihwcm9ncmFtSWQpKTsKK30KKworTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbihpbnQgY19wcm9ncmFtSWQp
CisgICAgOiBtX3JlZkNvdW50KDEpCisgICAgLCBtX3Byb2dyYW1JZChjX3Byb2dyYW1JZCkKKyAg
ICAsIG1fcHVzaFNuYXBzaG90KGZhbHNlKQorICAgICwgbV9wb3BTbmFwc2hvdChmYWxzZSkKK3sK
K30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25PbihMYXllckZp
bHRlclJlbmRlcmVyKiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQobV9wcm9ncmFtSWQgIT0gLTEp
OworICAgIGlmIChtX3Byb2dyYW1JZCA9PSAtMSkgeworICAgICAgICBnbFVzZVByb2dyYW0ocmVu
ZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
clBhc3N0aHJvdWdoXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ2xVc2VQcm9ncmFt
KHJlbmRlcmVyLT5tX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbbV9wcm9ncmFtSWRdKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91bmlmb3Jtcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV91bmlmb3Jtc1tpXS0+YXBwbHkoKTsKK30KKworUGFzc093blB0cjxMYXllckZpbHRlclJlbmRl
cmVyPiBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0
aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMYXllckZpbHRlclJlbmRlcmVyKHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3JkTG9jYXRp
b24pKTsKK30KKworTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcihjb25z
dCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKKyAg
ICA6IG1fcG9zaXRpb25Mb2NhdGlvbihwb3NpdGlvbkxvY2F0aW9uKQorICAgICwgbV90ZXhDb29y
ZExvY2F0aW9uKHRleENvb3JkTG9jYXRpb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBM
YXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbaV0gPSAwOworCisgICAgaWYgKCEobV9lbmFibGVkID0gaW5pdGlh
bGl6ZVNoYXJlZEdMT2JqZWN0cygpKSkKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Omxv
Z0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiQ1NTIEZpbHRlcnMg
YXJlIG5vdCBlbmFibGVkIGR1ZSB0byBmYWlsZWQgaW5pdGlhbGl6YXRpb24uIik7Cit9CisKKy8v
IEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jv
c3MgYWxsIHByb2dyYW1zCisvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGFsbG93cyB0
aGUgY29kZSB0byBiaW5kIHRoZSBhdHRyaWJ1dGVzIG9ubHkgb25jZQorLy8gZXZlbiB3aGVuIHN3
aXRjaGluZyBiZXR3ZWVuIHByb2dyYW1zLgorLy8KKy8vIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9m
IExheWVyUmVuZGVyZXI6OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbiBhbmQgdGhlIGxvY2F0aW9u
cworLy8gd2lsbCBtYXRjaCB0aG9zZSBvZiBMYXllclJlbmRlcmVyLiBTZWUgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcigpCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6
OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIGF0dHJp
Yk5hbWUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NT
RmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbaV0sIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKK30KKworYm9vbCBM
YXllckZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKK3sKKyAgICAv
LyBTZWUgYWxzbyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKworICAgIGNoYXIgdmVy
dGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsg
ICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkg
ICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsgIFxuIgorICAgICAg
ICAiICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iOworCisjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBc
CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iXAorICAgICAgICAiXG4iXAor
ICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICJ1
bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTtcbiJcCisgICAgICAgICJ1bmlmb3JtIGhp
Z2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4o
dm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4
Q29vcmQpKTsgfSIKKworI2RlZmluZSBPRkZTRVRfRklMVEVSKHguLi4pIFwKKyAgICAgICAgInBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2YXJ5
aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAgInVuaWZvcm0gbG93cCBz
YW1wbGVyMkQgc190ZXh0dXJlO1xuIlwKKyAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9h
bW91bnQ7XG4iXAorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgdV9vZmZzZXQ7XG4iXAor
ICAgICAgICAjeFwKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0g
c2hhZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCAtIHVfb2Zmc2V0KSk7IH0iCisK
KyNkZWZpbmUgQkxVUl9GSUxURVIoeC4uLikgXAorICAgICAgICAicHJlY2lzaW9uIGhpZ2hwIGZs
b2F0OyBcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2
X3RleENvb3JkO1xuIlwKKyAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJl
O1xuIlwKKyAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAgICAg
ICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2JsdXJTaXplO1xuIlwKKyAgICAgICAgImNvbnN0IGZs
b2F0IHBpID0gMy4xNDE1OTI3O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4o
dm9pZClcbiJcCisgICAgICAgICJ7XG4iXAorICAgICAgICAidmVjMyBpbmNyO1xuIlwKKyAgICAg
ICAgImluY3IueCA9IDEuMCAvIChzcXJ0KDIuMCAqIHBpKSAqIHVfYW1vdW50KTtcbiJcCisgICAg
ICAgICJpbmNyLnkgPSBleHAoLTAuNSAvICh1X2Ftb3VudCAqIHVfYW1vdW50KSk7XG4iXAorICAg
ICAgICAiaW5jci56ID0gaW5jci55ICogaW5jci55O1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAg
ICAgInZlYzQgYXZnID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuIlwKKyAgICAgICAgImZs
b2F0IGNvZWZmaWNpZW50U3VtID0gMC4wO1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImF2
ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5KSAqIGluY3IueDtcbiJcCisg
ICAgICAgICJjb2VmZmljaWVudFN1bSArPSBpbmNyLng7XG4iXAorICAgICAgICAiaW5jci54eSAq
PSBpbmNyLnl6O1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImZvciAoZmxvYXQgaSA9IDEu
MDsgaSA8PSBudW1CbHVyUGl4ZWxzUGVyU2lkZTsgaSsrKSB7XG4iXAorICAgICAgICAiICAgIGF2
ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5IC0gaSAqIHVfYmx1clNpemUg
KiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBhdmcgKz0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSArIGkgKiB1X2JsdXJTaXplICogYmx1ck11
bHRpcGx5VmVjKSAqIGluY3IueDtcbiJcCisgICAgICAgICIgICAgY29lZmZpY2llbnRTdW0gKz0g
Mi4wICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBpbmNyLnh5ICo9IGluY3IueXo7XG4iXAor
ICAgICAgICAifVxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImdsX0ZyYWdDb2xvciA9IGF2
ZyAvIGNvZWZmaWNpZW50U3VtO1xuIlwKKyAgICAgICAgIn0iCisKKyAgICBjb25zdCBjaGFyKiBz
aGFkZXJTdHJzW0xheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzXTsKKworICAgIHNo
YWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGVdID0gU1RBTkRBUkRf
RklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcy
MiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAt
IDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAq
IGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Cisg
ICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlclNlcGlhXSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQg
PSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3
ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5n
ICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMx
NCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3Iu
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44
NjkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEp
OworICAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyU2F0dXJhdGVdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQg
c2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVj
NCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAq
IGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIg
LSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAo
MC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVf
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1vdW50KSAqIGNvbG9yLmIs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisK
KyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRlXSA9IFNU
QU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2OworICAgICAgICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8g
MTgwLjApOworICAgICAgICAgICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8g
MTgwLjApOworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAw
Ljc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAu
NzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0
MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIg
KiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAq
ICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAq
IDAuOTI4ICsgcyAqIDAuMDcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwor
ICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJT
aGFkZXJJbnZlcnRdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIGZsb2F0IGludmVy
dChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAg
LSB1X2Ftb3VudCk7IH0KKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZl
cnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICAp
OworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJyaWdodG5lc3Nd
ID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4w
ICsgdV9hbW91bnQpLCBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJT
dHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQ29udHJhc3RdID0gU1RBTkRBUkRfRklMVEVS
KAorICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4g
LSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3Qo
Y29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7
CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlck9wYWNpdHldID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOworICAgICAgICB9
CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVy
WF0gPSBCTFVSX0ZJTFRFUigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1BlclNp
ZGUgPSAyLjA7CisgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVj
MigxLjAsIDAuMCk7CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0
ZXJTaGFkZXJCbHVyWV0gPSBCTFVSX0ZJTFRFUigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1
clBpeGVsc1BlclNpZGUgPSAyLjA7CisgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZl
YyAgICAgID0gdmVjMigwLjAsIDEuMCk7CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3ddID0gT0ZGU0VUX0ZJTFRFUigKKyAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzMgdV9jb2xvcjsKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbG9yLmEgPiAwLjUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQodV9jb2xvci5yLCB1X2NvbG9yLmcsIHVfY29sb3IuYiwg
Y29sb3IuYSk7CisgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgIH0KKyAgICApOwor
CisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSA9
IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisgICAg
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRl
clNoYWRlcnM7IGkrKykgeworICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBM
YXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHNoYWRl
clN0cnNbaV0pOworICAgICAgICBpZiAoIW1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSkgewor
ICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiQ291bGQgbm90IGxvYWQgQ1NTIEZpbHRlciBTaGFkZXIg
JWkiLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFNldCBBVFRSSUIgbG9jYXRpb25zIC0gdGhlc2Ugd2lsbCBiZSB0aGUgc2FtZSBhcyB0
aGUgcHJvZ3JhbXMgaW4gTGF5ZXJSZW5kZXJlci5jcHAKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9j
YXRpb24obV9wb3NpdGlvbkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpOworICAgIGJpbmRDb21tb25B
dHRyaWJMb2NhdGlvbihtX3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3JkIik7CisKKyAgICAv
LyBSZS1saW5rIHRvIHRha2UgZWZmZWN0CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRh
dGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBnbExpbmtQcm9ncmFt
KG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSk7CisKKyAgICAvLyBHZXQgVU5JRk9STSBsb2Nh
dGlvbnMKKyAgICBmb3IgKGludCBpID0gMDtpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRl
clNoYWRlcnM7ICsraSkKKyAgICAgICAgbV9hbW91bnRMb2NhdGlvbltpXSA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSwgInVfYW1vdW50Iik7CisKKyAg
ICBtX2JsdXJBbW91bnRMb2NhdGlvblswXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmls
dGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXSwgInVfYmx1
clNpemUiKTsKKyAgICBtX2JsdXJBbW91bnRMb2NhdGlvblsxXSA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJs
dXJYXSwgInVfYmx1clNpemUiKTsKKworICAgIG1fc2hhZG93Q29sb3JMb2NhdGlvbiA9IGdsR2V0
VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0Zp
bHRlclNoYWRlclNoYWRvd10sICJ1X2NvbG9yIik7CisgICAgbV9vZmZzZXRMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlclNoYWRvd10sICJ1X29mZnNldCIpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyhMYXllclJlbmRlcmVyU3VyZmFjZSog
c3VyZmFjZSkKK3sKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQo
KSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLT50ZXh0dXJl
KCktPnRleHR1cmVJZCgpKTsKK30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKExh
eWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBz
dXJmYWNlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSwg
aW50IHNvdXJjZUlkKQoreworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3NuYXBzaG90VGV4dHVy
ZS0+dGV4dHVyZUlkKCksIDApOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBz
b3VyY2VJZCk7CisgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsgLy8gdG8gdHJhbnNw
YXJlbmN5CisKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBz
dXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpOworCisgICAgZ2xVc2VQcm9ncmFtKG1fY3NzRmlsdGVy
UHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSk7Cisg
ICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Cit9CisKK3ZvaWQgTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6cG9wU25hcHNob3QoKQoreworICAgIC8vIFRoZSBuYW1lIGlzIHNsaWdo
dGx5IG1pc2xlYWRpbmcuCisgICAgLy8gVGhpcyBEUkFXUyB0aGUgcHJldmlvdXMgdGV4dHVyZSB1
c2luZyB0aGUgY3VycmVudCBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uLCB0aGVuIHNldHMgdGhl
IHRleHR1cmUKKyAgICAvLyB0byB0aGUgc25hcHNob3QgdGV4dHVyZS4gTmV4dCB0aW1lIGdsRHJh
d0FycmF5cyBpcyBjYWxsZWQsIHRoZSBzbmFwc2hvdCB3aWxsIGJlIGRyYXduLgorCisgICAgZ2xE
cmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3NuYXBzaG90VGV4dHVyZS0+dGV4dHVyZUlkKCkpOworfQorCitWZWN0b3I8
UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
YWN0aW9uc0Zvck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBvcHMpCit7CisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IHJldDsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb24mIG9wZXJhdGlvbiA9ICpvcHNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChvcGVyYXRp
b24uZ2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6QkxVUiAmJiBzdGF0aWNf
Y2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24o
KS52YWx1ZSgpIDwgMC4xKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaW50IHBy
b2dyYW1JZCA9IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChvcGVyYXRpb24uZ2V0T3BlcmF0aW9u
VHlwZSgpKTsKKyAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpj
cmVhdGUocHJvZ3JhbUlkKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0
aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpj
cmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCisgICAgICAgICAgICAgICAgLCBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9u
KS5hbW91bnQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5k
VW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW3Byb2dyYW1JZF0KKyAg
ICAgICAgICAgICAgICAsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBCbHVyIGlzIGEgdHdvLXN0ZXAgcHJvY2VzczoKKyAgICAgICAgICAgIC8v
ICAgICAxLiBibHVyIFgKKyAgICAgICAgICAgIC8vICAgICAyLiBibHVyIFkKKyAgICAgICAgICAg
IC8vIFRoaXMgd2F5IHdlIGNhbiBoYXZlIDJuIHRpbWUgaW5zdGVhZCBvZiBuXjIgdGltZSkKKwor
ICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJP
cGVyYXRpb24mPihvcGVyYXRpb24pLnN0ZERldmlhdGlvbigpLnZhbHVlKCk7CisKKyAgICAgICAg
ICAgIC8vIEJMVVIgWToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5p
Zm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
ckJsdXJZXSwgYW1vdW50KSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3Jt
KFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCisgICAgICAgICAgICAg
ICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOworCisgICAgICAg
ICAgICAvLyBCTFVSIFg6CisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYKSk7CisgICAg
ICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1v
dW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOwor
ICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZSht
X2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAgICAgICAgICAgICwgMS4wZiAvIGZsb2F0KHN1
cmZhY2UtPnNpemUoKS53aWR0aCgpKSkpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgLy8gU2hhZG93IGlzIGEgZm91ci1zdGVwIHByb2Nlc3M6Cisg
ICAgICAgICAgICAvLyAgICAgMS4gY2FwdHVyZSBzbmFwc2hvdAorICAgICAgICAgICAgLy8gICAg
ICAgIHR1cm4gaW50byBhIHNvbGlkIG9mZnNldCBtYXNrCisgICAgICAgICAgICAvLyAgICAgMi4g
Ymx1ciBYCisgICAgICAgICAgICAvLyAgICAgMy4gYmx1ciBZCisgICAgICAgICAgICAvLyAgICAg
NC4gcmVwYWludCBvcmlnaW5hbCBvbiB0b3Agb2YgbWFzaworICAgICAgICAgICAgY29uc3QgRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFk
b3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+
c2V0UHVzaFNuYXBzaG90KCk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3Jt
KFVuaWZvcm0yZjo6Y3JlYXRlKG1fb2Zmc2V0TG9jYXRpb24KKyAgICAgICAgICAgICAgICAsIGZs
b2F0KGRzZm8ueCgpKSAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKQorICAgICAgICAg
ICAgICAgICwgZmxvYXQoZHNmby55KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgp
KSkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtM2Y6OmNy
ZWF0ZShtX3NoYWRvd0NvbG9yTG9jYXRpb24KKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8u
Y29sb3IoKS5yZWQoKSkgLyAyNTUuMGYKKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29s
b3IoKS5ncmVlbigpKSAvIDI1NS4wZgorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xv
cigpLmJsdWUoKSkgLyAyNTUuMGYpKTsKKworICAgICAgICAgICAgLy8gQkxVUiBZCisgICAgICAg
ICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBl
bmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJCbHVyWV0KKyAgICAgICAgICAgICAgICAsIGRzZm8uc3RkRGV2aWF0aW9u
KCkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpj
cmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMF0KKyAgICAgICAgICAgICAgICAsIDEuMGYgLyBm
bG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgICAgIC8vIEJMVVIg
WAorICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVh
dGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWCkpOworICAgICAgICAgICAgcmV0Lmxh
c3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xh
eWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdCisgICAgICAgICAgICAgICAgLCBkc2ZvLnN0
ZERldmlhdGlvbigpKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVu
aWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzFdCisgICAgICAgICAgICAgICAg
LCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpKSk7CisKKyAgICAgICAgICAg
IC8vIFJlcGFpbnQgb3JpZ2luYWwgaW1hZ2UKKyAgICAgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJG
aWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFz
c3Rocm91Z2gpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPnNldFBvcFNuYXBzaG90KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAocmV0LnNpemUoKSAlIDIpIC8vIFdlIG5lZWQgYW4gZXZlbiBu
dW1iZXIgb2YgYWN0aW9ucy4gU2VlIHBpbmctcG9uZyBub3RlIGluIGFwcGx5TGF5ZXJGaWx0ZXJz
KCkuCisgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRl
KExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKworICAgIHJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwg
IDEsIDEsICAxLCAwIH07CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25z
KHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBWZWN0b3I8UmVm
UHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gYWN0aW9ucykKK3sKKyAgICBnbENsZWFy
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisgICAgQVNTRVJUKCEoYWN0aW9ucy5zaXpl
KCkgJSAyKSk7IC8vIFNlZSBwaW5nLXBvbmdpbmcgbm90ZSBiZWxvdy4KKworICAgIGlmICghbV9l
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyLT5maWx0ZXJzKCkuc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgbV90
ZXh0dXJlID0gdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y3JlYXRlVGV4dHVyZSgp
OworCisgICAgYm9vbCByZXF1aXJlU25hcHNob3QgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYWN0aW9uc1tp
XS0+c2hvdWxkUHVzaFNuYXBzaG90KCkpCisgICAgICAgICAgICByZXF1aXJlU25hcHNob3QgPSB0
cnVlOworICAgIH0KKworICAgIGlmICghbV9zbmFwc2hvdFRleHR1cmUgJiYgcmVxdWlyZVNuYXBz
aG90KQorICAgICAgICBtX3NuYXBzaG90VGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPmNyZWF0ZVRleHR1cmUoKTsKKworICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBz
dXJmYWNlID0gbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCk7CisKKyAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5z
Zm9ybWVkQm91bmRzKCkgKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExv
Y2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CisKKyAgICBtX3Rl
eHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCkpOworICAgIGlmIChyZXF1
aXJlU25hcHNob3QpCisgICAgICAgIG1fc25hcHNob3RUZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2Ut
PnRleHR1cmUoKS0+c2l6ZSgpKTsKKworICAgIGlmICghZmJvKQorICAgICAgICBnbEdlbkZyYW1l
YnVmZmVycygxLCAmZmJvKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBmYm8pOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIC8vIE5PVEUgQUJPVVQgUElORy1QT05HSU5HCisgICAgICAgIC8v
ID09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vIFVuZGVyIE9wZW5HTCBFUyAyLjAs
IHdlIGNhbm5vdCB1c2UgdGhlIGZibyB3ZSBhcmUgd3JpdHRpbmcgdG8gYXMgYSB0ZXh0dXJlLCBz
byB3ZSBuZWVkIHRvIHBsYXkgcGluZy1wb25nOgorICAgICAgICAvLyAgMSkgRHJhdyBwYXJlbnQg
c3VyZmFjZSB0byBvdXIgdGV4dHVyZSB3aXRoIGVmZmVjdC4KKyAgICAgICAgLy8gIDIpIERyYXcg
b3VyIHN1cmZhY2UgdG8gcGFyZW50IHRleHR1cmUgd2l0aCBlZmZlY3QuCisgICAgICAgIC8vICAz
KSBSZXBlYXQuCisgICAgICAgIC8vIEJlY2F1c2Ugd2UgZXZlbnR1YWxseSBoYXZlIHRvIGVuZCBv
biB0aGUgcGFyZW50IHRleHR1cmUsIHdlIG5lZWQgYW4gZXZlbiBudW1iZXIgb2YgYWN0aW9ucy4K
KyAgICAgICAgLy8gYWN0aW9uc0Zvck9wZXJhdGlvbnMgdGFrZXMgY2FyZSBvZiB0aGF0LgorCisg
ICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkKKyAgICAgICAgICAg
IHB1c2hTbmFwc2hvdChzdXJmYWNlLCAoIShpICUgMikgPyBzdXJmYWNlLT50ZXh0dXJlKCktPnRl
eHR1cmVJZCgpIDogbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworCisgICAgICAgIGlmICghKGkg
JSAyKSkKKyAgICAgICAgICAgIHBpbmcoc3VyZmFjZSk7IC8vIFNldCBmcmFtZWJ1ZmZlciB0byBv
dXJzLCBhbmQgdGV4dHVyZSB0byBwYXJlbnQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9u
ZyhzdXJmYWNlKTsgLy8gU2V0IHRleHR1cmUgdG8gcGFyZW50LCBhbmQgZnJhbWVidWZmZXIgdG8g
dXMKKworICAgICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFuc3Bh
cmVuY3kKKyAgICAgICAgZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwg
c3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKTsKKworICAgICAgICBhY3Rpb25zW2ldLT51c2VBY3Rp
b25Pbih0aGlzKTsKKworICAgICAgICBpZiAoYWN0aW9uc1tpXS0+c2hvdWxkUG9wU25hcHNob3Qo
KSkKKyAgICAgICAgICAgIHBvcFNuYXBzaG90KCk7CisKKyAgICAgICAgZ2xEcmF3QXJyYXlzKEdM
X1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgfQorCisgICAgbV90ZXh0dXJlLT51bnByb3RlY3Qo
KTsKKyAgICBpZiAocmVxdWlyZVNuYXBzaG90KQorICAgICAgICBtX3NuYXBzaG90VGV4dHVyZS0+
dW5wcm90ZWN0KCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAg
IGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUyMTU2N2YzNGE2ZTc3ZDlkMTAzNWEwMGQyMGQyMDA1YjI5NWNlMjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RmlsdGVyUmVuZGVyZXIuaApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIExheWVyRmlsdGVyUmVuZGVyZXJfaAorI2RlZmlu
ZSBMYXllckZpbHRlclJlbmRlcmVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIkxheWVyRGF0YS5oIgorI2luY2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlRleHR1cmUu
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0Lmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
SW50UmVjdFJlZ2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJDb21wb3Np
dGluZ1RocmVhZDsKK2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXI7CitjbGFzcyBMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uOworY2xhc3MgTGF5ZXJSZW5kZXJlclN1cmZhY2U7CisKK2NsYXNzIFVu
aWZvcm1mIDogcHVibGljIFJlZkNvdW50ZWQ8VW5pZm9ybWY+IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShVbmlmb3JtZik7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAw
OworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybWYoaW50IGxvY2F0aW9uKTsKKyAgICBjb25zdCBp
bnQmIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorCitwcml2YXRlOgor
ICAgIGludCBtX2xvY2F0aW9uOworICAgIGludCBtX3JlZkNvdW50OworfTsKKworY2xhc3MgVW5p
Zm9ybTFmIDogcHVibGljIFVuaWZvcm1mIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxVbmlmb3JtZj4gY3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKTsKKworcHJvdGVjdGVk
OgorICAgIFVuaWZvcm0xZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCk7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWw7Cit9OworCitjbGFzcyBV
bmlmb3JtMmYgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwx
KTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm0yZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAs
IGZsb2F0IHZhbDEpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAg
IGZsb2F0IG1fdmFsWzJdOworfTsKKworY2xhc3MgVW5pZm9ybTNmIDogcHVibGljIFVuaWZvcm1m
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtZj4gY3JlYXRlKGludCBs
b2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBVbmlmb3JtM2YoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBm
bG9hdCB2YWwyKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBm
bG9hdCBtX3ZhbFszXTsKK307CisKK2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gY3JlYXRlKGlu
dCBwcm9ncmFtSWQpOworICAgICAgICAvLyBhIHZlY3RvciBvZiBhY3Rpb25zIG11c3QgaGF2ZSBh
biBldmVuIGNvdW50LCBzbyBpZiB5b3UgaGF2ZSBhbiBvZGQgY291bnQsIGFkZCBhIHBhc3N0aHJv
dWdoIGV2ZW50IGF0IHRoZSBlbmQKKyAgICAgICAgLy8gc2VlIHRoZSBwaW5nLXBvbmcgbm90ZSBp
biBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMKKyAgICB+TGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbigpOworCisgICAgYm9vbCBzaG91bGRQdXNoU25hcHNob3QoKSB7IHJldHVybiBt
X3B1c2hTbmFwc2hvdDsgfQorICAgIHZvaWQgc2V0UHVzaFNuYXBzaG90KCkgeyBtX3B1c2hTbmFw
c2hvdCA9IDE7IH0KKworICAgIGJvb2wgc2hvdWxkUG9wU25hcHNob3QoKSB7IHJldHVybiBtX3Bv
cFNuYXBzaG90OyB9CisgICAgdm9pZCBzZXRQb3BTbmFwc2hvdCgpIHsgbV9wb3BTbmFwc2hvdCA9
IDE7IH0KKworICAgIHZvaWQgYXBwZW5kVW5pZm9ybShjb25zdCBSZWZQdHI8VW5pZm9ybWY+JiB1
bmlmb3JtKSB7IG1fdW5pZm9ybXMuYXBwZW5kKHVuaWZvcm0pOyB9CisgICAgdm9pZCB1c2VBY3Rp
b25PbihMYXllckZpbHRlclJlbmRlcmVyKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9yZWZD
b3VudDsKKyAgICBpbnQgbV9wcm9ncmFtSWQ7CisgICAgYm9vbCBtX3B1c2hTbmFwc2hvdDsKKyAg
ICBib29sIG1fcG9wU25hcHNob3Q7CisKKyAgICBWZWN0b3I8UmVmUHRyPFVuaWZvcm1mPiA+IG1f
dW5pZm9ybXM7Citwcml2YXRlOgorICAgIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IHBy
b2dyYW1JZCk7Cit9OworCitjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShMYXllckZpbHRlclJlbmRlcmVyKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPExheWVyRmlsdGVyUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBpbnQmIHBvc2l0
aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgdm9pZCBhcHBs
eUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPik7CisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVu
ZGVyZXJTdXJmYWNlKiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mKTsK
KworICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGZhaWxzLCBvciBkaXNhYmxlKCkgaXMgY2FsbGVk
LCB0aGlzIGlzIGZhbHNlLgorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9l
bmFibGVkOyB9CisgICAgdm9pZCBkaXNhYmxlKCkgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQorCitw
cml2YXRlOgorICAgIExheWVyRmlsdGVyUmVuZGVyZXIoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0
aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pOworICAgIHZvaWQgYmluZENvbW1vbkF0
dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSk7CisgICAg
Ym9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7CisKKyAgICAvLyBTZWUgbm90ZSBhYm91
dCBwaW5nLXBvbmdpbmcgaW4gYXBwbHlBY3Rpb25zKCkKKyAgICB2b2lkIHBpbmcoTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqKTsKKyAgICB2b2lkIHBvbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKKwor
ICAgIC8vIFRoaXMgaXMgZm9yIHNoYWRvd3MsIHdoZXJlIHdlIG5lZWQgdG8gY3JlYXRlIGEgc2hh
ZG93LCBhbmQgdGhlbiByZXBhaW50IHRoZSBvcmlnaW5hbCBpbWFnZQorICAgIC8vIG9uIHRvcCBv
ZiB0aGUgc2hhZG93LgorICAgIHZvaWQgcHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNl
KiwgaW50IHNvdXJjZUlkKTsKKyAgICB2b2lkIHBvcFNuYXBzaG90KCk7CisKKyAgICBib29sIG1f
ZW5hYmxlZDsKKworICAgIC8vIEVTU0wgYXR0cmlidXRlcyBzaGFyZWQgd2l0aCBMYXllclJlbmRl
cmVyIC0gc2VlIGNvbnN0cnVjdG9yOgorICAgIGNvbnN0IGludCBtX3Bvc2l0aW9uTG9jYXRpb247
CisgICAgY29uc3QgaW50IG1fdGV4Q29vcmRMb2NhdGlvbjsKKworICAgIC8vIEVTU0wgcHJvZ3Jh
bSBvYmplY3QgSURzOgorICAgIHVuc2lnbmVkIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXll
ckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyc107CisKKyAgICAvLyBFU1NMIHVuaWZvcm0g
bG9jYXRpb25zOgorICAgIGludCBtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZD
U1NGaWx0ZXJTaGFkZXJzXTsKKyAgICBpbnQgbV9ibHVyQW1vdW50TG9jYXRpb25bMl07IC8vIDAg
PSBZLCAxID0gWAorICAgIGludCBtX3NoYWRvd0NvbG9yTG9jYXRpb247CisgICAgaW50IG1fb2Zm
c2V0TG9jYXRpb247CisKKyAgICAvLyBUZXh0dXJlcyBmb3IgcGxheWluZyBwaW5nLXBvbmcgLSBz
ZWUgbm90ZSBpbiBhcHBseUFjdGlvbnMoKQorICAgIFJlZlB0cjxUZXh0dXJlPiBtX3RleHR1cmU7
CisgICAgUmVmUHRyPFRleHR1cmU+IG1fc25hcHNob3RUZXh0dXJlOworCisgICAgZnJpZW5kIGNs
YXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2VuZGlm
IC8vIExheWVyRmlsdGVyUmVuZGVyZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKaW5kZXgg
Nzc2MjNlNThjZjY5MmViYjhkYzE0OGYwZTkxMWE0ZTY1OTBlOGFmNi4uMGU0MmRkNDQzMWNjNWQ2
NGMwYzY3ZGY0ZDg2MjEzMThmYTVkMTcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgogCiAjaW5jbHVkZSAi
TGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVyZXIu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkLmgiCiAKQEAgLTY0LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tH
TEVycm9yKCkKICNlbmRpZgogfQogCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5
cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKK0dMdWludCBMYXllclJlbmRlcmVyOjpsb2Fk
U2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCiB7CiAgICAgR0x1
aW50IHNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKHR5cGUpOwogICAgIGlmICghc2hhZGVyKQpAQCAt
ODYsNyArODcsNyBAQCBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZSkKICAgICByZXR1cm4gc2hhZGVyOwogfQogCi1zdGF0aWMgR0x1
aW50IGxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCitHTHVpbnQgTGF5ZXJSZW5kZXJlcjo6bG9h
ZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSkKIHsKICAgICBHTHVpbnQgdmVydGV4U2hhZGVyOwogICAg
IEdMdWludCBmcmFnbWVudFNoYWRlcjsKQEAgLTUwMCw2ICs1MDEsMTcgQEAgdm9pZCBMYXllclJl
bmRlcmVyOjpkcmF3TGF5ZXJzT25TdXJmYWNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29t
cG9zaXRpbmdUaHIKICAgICAgICAgaW50IGN1cnJlbnRTdGVuY2lsVmFsdWUgPSAwOwogICAgICAg
ICBGbG9hdFJlY3QgY2xpcFJlY3QoLTEsIC0xLCAyLCAyKTsKICAgICAgICAgY29tcG9zaXRlTGF5
ZXJzUmVjdXJzaXZlKHN1cmZhY2VMYXllcnNbaV0uZ2V0KCksIGN1cnJlbnRTdGVuY2lsVmFsdWUs
IGNsaXBSZWN0KTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgaWYgKCFtX2Zp
bHRlclJlbmRlcmVyKQorICAgICAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IExheWVyRmlsdGVy
UmVuZGVyZXI6OmNyZWF0ZShtX3Bvc2l0aW9uTG9jYXRpb24sIG1fdGV4Q29vcmRMb2NhdGlvbik7
CisgICAgICAgIGlmIChsYXllci0+ZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoKSkgeworICAgICAg
ICAgICAgbGF5ZXItPnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNlKTsKKyAgICAgICAg
ICAgIGxheWVyLT5zZXRGaWx0ZXJBY3Rpb25zKG1fZmlsdGVyUmVuZGVyZXItPmFjdGlvbnNGb3JP
cGVyYXRpb25zKHN1cmZhY2UsIGxheWVyLT5maWx0ZXJzKCkub3BlcmF0aW9ucygpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlBY3Rpb25zKG1fZmJvLCBsYXll
ciwgbGF5ZXItPmZpbHRlckFjdGlvbnMoKSk7CisgICAgICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIElmIHRoZXJlIGFyZSBsYXllcnMgZHJhd2Vk
IG9uIHN1cmZhY2VzLCB3ZSBuZWVkIHRvIHN3aXRjaCB0byBkZWZhdWx0IGZyYW1lYnVmZmVyLgpA
QCAtNzEyLDcgKzcyNCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVAogICAgIC8vIENhbGN1
bGF0ZSB0aGUgbGF5ZXIncyBvcGFjaXR5LgogICAgIG9wYWNpdHkgKj0gbGF5ZXItPm9wYWNpdHko
KTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIHVzZUxheWVyUmVuZGVyZXJT
dXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigpIHx8IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSB8fCBs
YXllci0+ZmlsdGVycygpLnNpemUoKTsKKyNlbHNlCiAgICAgYm9vbCB1c2VMYXllclJlbmRlcmVy
U3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5ZXIoKSB8fCBsYXllci0+cmVwbGljYUxheWVyKCk7Cisj
ZW5kaWYKICAgICBpZiAoIXVzZUxheWVyUmVuZGVyZXJTdXJmYWNlKSB7CiAgICAgICAgIGxheWVy
LT5zZXREcmF3T3BhY2l0eShvcGFjaXR5KTsKICAgICAgICAgbGF5ZXItPmNsZWFyTGF5ZXJSZW5k
ZXJlclN1cmZhY2UoKTsKQEAgLTk4NCw3ICsxMDAwLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQogICAgIHJldHVybiBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7
CiB9CiAKLS8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2Nh
dGlvbiBhY3Jvc3MgYWxsIHRocmVlIHByb2dyYW1zCisvLyBCaW5kcyB0aGUgZ2l2ZW4gYXR0cmli
dXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9ncmFtcwogLy8gdXNl
ZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0
cmlidXRlcyBvbmx5IG9uY2UKIC8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBwcm9ncmFt
cy4KIHZvaWQgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2Nh
dGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSkKQEAgLTEwNTMsNyArMTA2OSw2IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAgICAgICIgIGds
X0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4
Q29sb3IudykgKiBhbHBoYSAqIG1hc2tDb2xvci53OyAgICAgICAgIFxuIgogICAgICAgICAifSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIjsKIAotCiAgICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgZGVidWcgYm9yZGVy
cyBhcm91bmQgdGhlIGxheWVycy4KICAgICBjaGFyIGNvbG9yVmVydGV4U2hhZGVyU3RyaW5nW10g
PQogICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKQEAgLTExMzksNyAr
MTE1NCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBTcGVjaWZ5IHRoZSBhdHRy
aWIgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxs
IHRocmVlIHByb2dyYW1zIHRvCisgICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZv
ciB0aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwog
ICAgIC8vIGF2b2lkIGJpbmRpbmcgcmUtYmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCiAg
ICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25Mb2NhdGlvbiwgImFfcG9zaXRp
b24iKTsKICAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV90ZXhDb29yZExvY2F0aW9uLCAi
YV90ZXhDb29yZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAppbmRleCBmNmMzYmU4NzhmYTExZWJl
MTc5YmIzZWU2ZDJhN2YwZDY0MzhiMmIwLi40Mzc5MjdiZWVhYzhhMDQ4N2I0MTRlZjU0NzA3ZmIz
NDE3NmE0OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaApAQCAtMzcsNiArMzcsNyBAQAogCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyRGF0YS5oIgorI2luY2x1ZGUgIkxh
eWVyRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0Lmg+CkBAIC0xMzQsNiAr
MTM1LDkgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBsYXllciBoYXMgYWxyZWFkeSBiZWVuIGRy
YXdlZCBvbiBhIHN1cmZhY2UuCiAgICAgYm9vbCBsYXllckFscmVhZHlPblN1cmZhY2UoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopIGNvbnN0OwogCisgICAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVy
KEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpOworICAgIHN0YXRpYyBHTHVp
bnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBwcmVw
YXJlRnJhbWVSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBhbmltYXRp
b25UaW1lLCBib29sIGlzQ29udGV4dEN1cnJlbnQpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGFyZW50TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4m
IHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZsb2F0UmVjdCBjbGlwUmVjdCk7CkBAIC0x
NjQsNiArMTY4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gU2hhZGVyIHVuaWZvcm0gYW5kIGF0dHJp
YnV0ZSBsb2NhdGlvbnMuCiAgICAgY29uc3QgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKICAgICBj
b25zdCBpbnQgbV90ZXhDb29yZExvY2F0aW9uOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAg
ICBPd25QdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKKyNlbmRpZgor
CiAgICAgaW50IG1fc2FtcGxlckxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dy
YW1TaGFkZXJzXTsKICAgICBpbnQgbV9hbHBoYUxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZM
YXllclByb2dyYW1TaGFkZXJzXTsKICAgICBpbnQgbV9tYXNrU2FtcGxlckxvY2F0aW9uW0xheWVy
RGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktp
dFRocmVhZC5jcHAKaW5kZXggMTViYmUwYThmMTM4OGExNmU0MDE5NGFmZWMyMGE4ZjhiMDJmODQz
YS4uZTlkM2RmZjQyYzljMTBmZmY1MDlkNjVjMzhiNDNlNzZmNGJjZjczMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRo
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTY1LDYgKzY1LDkgQEAgTGF5ZXJXZWJLaXRUaHJl
YWQ6OkxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeSogb3cKICAgICAsIG1faXNNYXNrKGZhbHNlKQogICAgICwgbV9hbmltYXRpb25zQ2hhbmdl
ZChmYWxzZSkKICAgICAsIG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0KGZhbHNlKQorI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICAsIG1fZmlsdGVyc0NoYW5nZWQoZmFsc2UpCisjZW5kaWYKIHsK
ICAgICBpZiAodHlwZSA9PSBMYXllcikKICAgICAgICAgbV90aWxlciA9IExheWVyVGlsZXI6OmNy
ZWF0ZSh0aGlzKTsKQEAgLTI4NCw2ICsyODcsMTIgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6
Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpCiAgICAgbV9wb3NpdGlvbiArPSBtX2Fic29sdXRl
T2Zmc2V0OwogICAgIC8vIENvcHkgdGhlIGJhc2UgdmFyaWFibGVzIGZyb20gdGhpcyBvYmplY3Qg
aW50byBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQKICAgICByZXBsaWNhdGUobV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkLmdldCgpKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKG1f
ZmlsdGVyc0NoYW5nZWQpIHsKKyAgICAgICAgbV9maWx0ZXJzQ2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2Vk
KHRydWUpOworICAgIH0KKyNlbmRpZgogICAgIGlmIChtX2FuaW1hdGlvbnNDaGFuZ2VkKSB7CiAg
ICAgICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0UnVubmluZ0FuaW1hdGlvbnMobV9y
dW5uaW5nQW5pbWF0aW9ucyk7CiAgICAgICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0
U3VzcGVuZGVkQW5pbWF0aW9ucyhtX3N1c3BlbmRlZEFuaW1hdGlvbnMpOwpAQCAtNDA1LDYgKzQx
NCwzMSBAQCB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCitib29sIExheWVyV2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgLy8gVGhlcmUgaXMgd29yayBhc3Nv
Y2lhdGVkIHdpdGggY29tcG9zaXRpbmcgZmlsdGVycywgZXZlbiBpZiB0aGVyZSBhcmUgemVybyBm
aWx0ZXJzLAorICAgIC8vIHNvIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzLCBjbGFpbSB3ZSBjYW4n
dCBjb21wb3NpdGUgdGhlbS4KKyAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9
IGZpbHRlcnMuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpD
VVNUT006CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisjZW5kaWYKKwogY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIExheWVyV2ViS2l0VGhy
ZWFkOjpyb290TGF5ZXIoKSBjb25zdAogewogICAgIGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBs
YXllciA9IHRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKaW5kZXggNDlhNDliZTVm
MTNjOTAwOTA3ZTYyZWU4MTU5MzkzY2IzMTE2OGQzZi4uNTJiZjJmMTExZTZlODA5NDQyY2UzYjI0
OTRjOGNhZjcwNWE3YjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtOTgs
NiArOTgsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQoKTsgfQogCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IG1fZmlsdGVyc0NoYW5nZWQgPSAxOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CisgICAgc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKTsKKyNlbmRpZgorCiAgICAgdm9pZCBz
ZXRPcGFxdWUoYm9vbCBpc09wYXF1ZSkgeyBtX2lzT3BhcXVlID0gaXNPcGFxdWU7IHNldE5lZWRz
Q29tbWl0KCk7IH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyBzZXROZWVkc0NvbW1pdCgpOyB9CkBAIC0y
MDIsNiArMjA3LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2lzTWFzayA6IDE7CiAgICAg
dW5zaWduZWQgbV9hbmltYXRpb25zQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jbGVhck92
ZXJyaWRlT25Db21taXQgOiAxOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB1bnNpZ25l
ZCBtX2ZpbHRlcnNDaGFuZ2VkIDogMTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVy
LmNwcAppbmRleCAzNmQwNmQzMmI2OWM0NzE2ZjMwYjU0OTMzNDdhZGJhZWQxNjAyMzQzLi40OGFi
YTJiYTRjMWEwMTk5ZDZmZjgwYzQ4OTNmODg5NmY5Y2FjMTk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVy
LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCkBAIC0xMzksOSArMTQw
LDExIEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
aWYgKCFoYWRDb250ZXh0IHx8IG1fY29udGV4dFNpemUgIT0gbmV3Q29udGV4dFNpemUpCiAgICAg
ICAgIHJlc2l6ZUNvbnRleHQobmV3Q29udGV4dFNpemUpOwogCisjaWYgIVBMQVRGT1JNKEJMQUNL
QkVSUlkpIC8vIEJsYWNrQmVycnkgZGVmaW5lcyBpdHMgb3duIFRleHR1cmUgY2xhc3MuCiAgICAg
Ly8gRG8gbm90IGRyYXcgdGhlIGZpbHRlciBpZiB0aGUgaW5wdXQgaW1hZ2UgY2Fubm90IGZpdCBp
bnNpZGUgYSBzaW5nbGUgR1BVIHRleHR1cmUuCiAgICAgaWYgKG1faW5wdXRUZXh0dXJlLT50aWxl
cygpLm51bVRpbGVzWCgpICE9IDEgfHwgbV9pbnB1dFRleHR1cmUtPnRpbGVzKCkubnVtVGlsZXNZ
KCkgIT0gMSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgCiAgICAgLy8gVGhlIHNoYWRl
ciBoYWQgY29tcGlsZXIgZXJyb3JzLiBXZSBjYW5ub3QgZHJhdyBhbnl0aGluZy4KICAgICBpZiAo
IW1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpCkBAIC0xODUsNyArMTg4LDExIEBA
IGJvb2wgRkVDdXN0b21GaWx0ZXI6OmluaXRpYWxpemVDb250ZXh0KCkKIAogdm9pZCBGRUN1c3Rv
bUZpbHRlcjo6cmVzaXplQ29udGV4dChjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIHsK
KyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkgLy8gQmxhY2tCZXJyeSBkZWZpbmVzIGl0cyBvd24g
VGV4dHVyZSBjbGFzcwogICAgIG1faW5wdXRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKG1fY29u
dGV4dC5nZXQoKSwgVGV4dHVyZTo6UkdCQTgsIG5ld0NvbnRleHRTaXplLndpZHRoKCksIG5ld0Nv
bnRleHRTaXplLmhlaWdodCgpKTsKKyNlbHNlCisgICAgbV9pbnB1dFRleHR1cmUgPSBUZXh0dXJl
OjpjcmVhdGUodHJ1ZSk7CisjZW5kaWYKICAgICAKICAgICBpZiAoIW1fZnJhbWVCdWZmZXIpCiAg
ICAgICAgIG1fZnJhbWVCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CkBA
IC0yNjksOCArMjc2LDEyIEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVm
ZmVycyhVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheSkKICAgICBpZiAobV9jb21waWxl
ZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKSB7CiAgICAgICAgIG1fY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xaShtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDAp
OworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgICAgICBtX2lucHV0VGV4dHVyZS0+bG9h
ZChzcmNQaXhlbEFycmF5LT5kYXRhKCkpOwogICAgICAgICBtX2lucHV0VGV4dHVyZS0+YmluZFRp
bGUoMCk7CisjZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiAgICAgfQog
ICAgIAogICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9u
KCkgIT0gLTEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmluZGV4IGI4Nzk2ZTgwMjkxOGJjYjZhYTM1
NzBkMTkzY2NjYmRmM2QxYzllNjMuLjBhMWI3ZDFhMDE5NmRjZmJmMzM4YTI4OTJmNTE2MmM5ZWM0
NTQ4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisj
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKyNlbmRpZgorCiAvLyBBbm5veWluZ2x5LCB3aW5nZGkuaCAjZGVmaW5lcyB0aGlzLgog
I2lmZGVmIFBBU1NUSFJPVUdICiAjdW5kZWYgUEFTU1RIUk9VR0gKQEAgLTQ0LDcgKzQ4LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ1NTIEZpbHRlcnMKIAorI2lmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCitjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CisjZWxzZQogY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CisjZW5kaWYKIHB1YmxpYzoKICAg
ICBlbnVtIE9wZXJhdGlvblR5cGUgewogICAgICAgICBSRUZFUkVOQ0UsIC8vIHVybCgjc29tZWZp
bHRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhZjE4Y2MxZTkzNzZj
NzAxMzI5MjM3MDM3N2E1Y2M4NjE3YmQyNjJmLi4xOTdkMTBlNTFkNThmNzU3ZGI5NWU1ZTNiOTM5
YWM2ZTdmZWIxY2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnku
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlCkBAIC0xNzMs
OSArMTczLDE1IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XT1JL
RVJTIE9OKQogCiBJRiAoRU5BQkxFX0dMRVMyKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV8zRF9SRU5ERVJJTkcgT04pCisgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBPTikKKyAgICBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0ZJTFRFUlMgT04pCisgICAg
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TSEFERVJTIE9OKQog
ICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJHTCBPTikKIEVM
U0UgKCkKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfUkVO
REVSSU5HIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
QUNDRUxFUkFURURfMkRfQ0FOVkFTIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfQ1NTX0ZJTFRFUlMgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfU0hBREVSUyBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMIE9GRikKIEVORElGICgpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2UKaW5kZXggZTI1NmIwZTU4YTQwMzE2MWE5ZWFkNGIzNjM2MWEzYzJiZDU5MWI5YS4uYjI0NjI5
MTEzNDM3ZDgxNDQ2MmY2MGEwZjczN2M0ODNmYzk3YjhjMiAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTI1
LDYgKzI1LDggQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTX1ZBUklBQkxFUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X0NTUzNfRkxFWEJPWAorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19GSUxURVJTCisjY21ha2Vk
ZWZpbmUwMSBFTkFCTEVfQ1NTX1NIQURFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DVVNUT01f
U0NIRU1FX0hBTkRMRVIKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDBlYWVkNzU5OTg3MzIxNTMyNDBm
YmE5MGVhNGUxZTZhODkyNDEwZTMuLmMxYzRkZjUwYTdkOWQ2NTQ4MWFkZjU0YzY5OWI3NjQ1YThk
Mjg2MWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0zMSAgSm9zaHVhIE5ldHRlcmZpZWxkICA8am5ldHRl
cmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEVuYWJsZSBDU1MgRmlsdGVy
IEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBl
ZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5jZSBlZmZlY3RzIChTVkcgZWZmZWN0cykK
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbTogQWNrbm93bGVk
Z2UgQ1NTIGZpbHRlciBlZmZlY3RzLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxq
b2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBFdmVudFNlbmRl
ciBpbnRvIFRlc3RSdW5uZXIuYQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJs
L0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBt
CmluZGV4IDc3Y2MxZjc2MzIwZmFjZDRhZWNlNzgyMWU5M2M5ZGJhNmU2M2NkMTMuLjM0NDUwOWY2
Zjc4NWVmYmU5MzRkYmQzZGUzZmJlMTAzYWYwMjEyZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0KQEAgLTE2Myw3ICsxNjMsNyBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfRVhDTFVTSU9OUyIsIGRlZmF1bHQgPT4gMSwgdmFs
dWUgPT4gXCRjc3NFeGNsdXNpb25zU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImNzcy1m
aWx0ZXJzIiwgZGVzYyA9PiAiVG9nZ2xlIENTUyBGaWx0ZXJzIHN1cHBvcnQiLAotICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfQ1NTX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQoKSwg
dmFsdWUgPT4gXCRjc3NGaWx0ZXJzU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
Q1NTX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQoKSB8fCBpc0JsYWNrQmVycnko
KSwgdmFsdWUgPT4gXCRjc3NGaWx0ZXJzU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImNz
czMtZmxleGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBDU1MzIEZsZXhib3ggc3VwcG9ydCIsCiAgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9DU1MzX0ZMRVhCT1giLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+
IFwkY3NzM0ZsZXhib3hTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggN2I0OTE2NGRhN2ZmMzQzMGRlZDAzZTk1YjdlMGI4NDJjY2ZkMzNmYi4uYjA2Mjli
YTA0ODEyNzIyMmY1OTUyYThhOGFmNWJhOTQ1MzQ1MWI5ZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTMxICBKb3NodWEgTmV0
dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0g
RW5hYmxlIENTUyBGaWx0ZXIgRWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTI2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFbmFibGUgQ1NTIGZpbHRlciBlZmZlY3RzLCB3aXRoIHRoZSBleGNl
cHRpb24gb2YgY3VzdG9tIGVmZmVjdHMgKENTUyBzaGFkZXJzKSBhbmQgcmVmZXJlbmNlIGVmZmVj
dHMgKFNWRyBlZmZlY3RzKQorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNCbGFja0Jl
cnJ5LmNtYWtlOiBBZGQgTGF5ZXJGaWx0ZXJSZW5kZXJlcgorICAgICAgICAqIFNvdXJjZS9jbWFr
ZWNvbmZpZy5oLmNtYWtlOiBBY2tub3dsZGdlIENTUyBmaWx0ZXIgZWZmZWN0cworCiAyMDEyLTA3
LTMxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFBlcmYtby1t
YXRpYzogZGFzaGJvYXJkIGltYWdlcyBhcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSBmcm9tIGlu
Y3JlbWVudGFsbHkgdXBkYXRlZCBKU09OCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155578</attachid>
            <date>2012-07-31 10:11:33 -0700</date>
            <delta_ts>2012-07-31 11:25:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731131009.patch</filename>
            <type>text/plain</type>
            <size>62140</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uN2YyNmU4ZDFkNzcyNjQ5MjU0NDg0OTYwMzcxZDE1
ZTExNjJiMDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJPdmVycmlkZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6ZmlsdGVyQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRGaWx0ZXJBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoTGF5ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6ZmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVbmlmb3JtZjo6VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTFmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OlVuaWZvcm0xZik6CisgICAgICAgIChXZWJD
b3JlOjpVbmlmb3JtMmY6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm0zZjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNmOjpVbmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjpwb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybWY6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAg
ICAgICAoVW5pZm9ybTNmKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxkUHVzaFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNl
dFB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpzaG91bGRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpzZXRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjphcHBlbmRVbmlmb3JtKToKKyAgICAgICAgKExheWVyRmlsdGVy
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmRpc2FibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oOgorICAgICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpbHRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorCiAyMDEyLTA3LTMxICBB
bGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiB0YWtlIGludG8gYWNjb3VudCB0aGUgd2hvbGUgc2VjdXJpdHkgb3JpZ2luIGluc3Rl
YWQgb2YganVzdCBob3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUzNjEwZGY5MjNjOTAxOWQ4
NmZkNGJiZmNmZDdlNGM5MjhiNGFjNjkuLjIzZDI1MjFjY2QwMjMyYTQ3MDdlNDU5YTgyY2Y5ZmQx
ODIzMDI1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDM4LDYgKzEwMzgsNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAgICBjc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5j
cHAKKyAgICBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCiAgICAgY3NzL1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcAogICAgIGNzcy9XcmFwU2hhcGVGdW5jdGlvbnMuY3BwCiAKQEAgLTE2
MDUsNiArMTYwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNoYWRlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAKICAgICBsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTE4MjEsMTAgKzE4MjMsMTEgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTg0OSwxNiArMTg1MiwxNSBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vTkVPTkhlbHBlcnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQmxl
bmRORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUNvbXBvc2l0ZUFy
aXRobWV0aWNORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRp
bmdORU9OLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdO
RU9OLmgKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDFhZTVmZTY5MDdh
NDczODQwOTlmYWViMGM3OWMyYWY5ZDFhYmJiY2UuLmE4MTZiMTQ4OTA1YzYzOGViN2Y4NjdiZTNm
YWQ0M2IzNzZmM2VmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
QEAgLTI3Miw2ICsyNzIsNyBAQCBJRiAoV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0xheWVyQmxhY2tCZXJyeS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcAorICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5j
cHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3Bw
CmluZGV4IDFiODFmNTRkZDAzOGU0ZWQ2ZTI1OTUwZjg5M2MxN2I2NGFiZGFkMTQuLmUyNzc5YzNj
MjFlYzEyZDZlNDZlZGRhZDU4ODdkOWFjMjI3YWI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0yOTIsNiArMjkzLDI2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBoYXNGaXhlZEFuY2VzdG9yCiAgICAg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogfQogCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmIChtX2ZpbHRlcnMgPT0gZmlsdGVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMg
PSBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OworICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAgICB1
cGRhdGVGaWx0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWx0ZXJzLmNsZWFyKCk7
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkNvbXBv
c2l0ZUZpbHRlcnM7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNr
Z3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC04MDMsNiAr
ODI0LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVyQmFja2dy
b3VuZENvbG9yKCkKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50
c0xheWVyKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OnVwZGF0ZUZpbHRlcnMoKQoreworICAgIGlmICghbV9maWx0ZXJzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbWFyeUxheWVyKCktPnNldEZpbHRlcnMobV9m
aWx0ZXJzKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRh
dGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgdHJhbnNmb3JtIGxheWVy
LCB0aGUgdHJhbnNmb3JtIG11c3QgYmUgc2V0IG9uIHRoYXQgbGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
R3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRleCBjMjY2OTQ3YWYxYzlhYjM1OWI1MzViOTRk
ZWQ1NjhjYjcyMjRkNmQ5Li5kOGQ2YjZhZTkzYjEzMDExZmNmMWIxMmMwZmQxNTgzODM2YjI0ZmRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCkBAIC0yOSwxMyAr
MjksMTUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2RlZmluZSBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw2ICs3
OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQ29udGFpbmVyKGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGJvb2wp
OwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBmaWx0
ZXIgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdG9yCisgICAgdmlydHVhbCBib29sIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyAmKTsKKyAgICBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKIApAQCAtMTQ2LDYgKzE1NCw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVIYXNGaXhlZENvbnRhaW5lcigpOwogICAgIHZvaWQg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJC
YWNrZ3JvdW5kQ29sb3IoKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCB1cGRh
dGVGaWx0ZXJzKCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoKTsKIAogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZShJbWFnZSopOwpAQCAtMTU5LDYgKzE3MCwxMCBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbV90cmFuc2Zvcm1MYXllcjsK
ICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fY29udGVudHNMYXllcjsKIAorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX3J1bm5pbmdBbmltYXRp
b25zOwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmlt
YXRpb25zOwogICAgIGRvdWJsZSBtX3N1c3BlbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggYzc1MGViZDI4NjQ3YzZkMWViMmIwZWFlMzA4OWRl
Nzc3MDcyNjRhZi4uODFjOTE4MDhkM2Y5YTBkZGExNWEyMTM0ZDY5ZmVmMjM0MmYzMmNmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC03OSw2ICs3OSw5
IEBAIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQoTGF5ZXJU
eXBlIHR5cGUsIExheWVyQ29tcG9zaXRpbmdUCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAg
LCBtX2NvbW1pdFNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgLCBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNl
KQorI2VuZGlmCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
aW5kZXggYjMzNTYwNjY5YzUxNDBkYzVkNWY5MjAxMmEzMDM1MTliZTAxMTliMC4uZGYwNzg0NDcx
MWIyMzVjMjM5NjZlMWY3YTFjNGIzYTg2MTYwZWZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgKQEAgLTM1LDkgKzM1LDExIEBACiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJM
YXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKICNpbmNsdWRlICJMYXllclRpbGVyLmgiCiAKQEAgLTEw
MSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgZmxvYXQgbV9vcGFjaXR5OworCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CiAKICAgICB1bnNp
Z25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKQEAgLTExMCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7CiB9OwogCitjbGFzcyBMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOworCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+LCBwdWJsaWMgTGF5ZXJEYXRh
LCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQb2ludGVyQmFzZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gY3JlYXRl
KExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCopOwpAQCAtMjA3LDYgKzIx
MiwxNCBAQCBwdWJsaWM6CiAgICAgTGF5ZXJPdmVycmlkZSogb3ZlcnJpZGUoKTsKICAgICB2b2lk
IGNsZWFyT3ZlcnJpZGUoKTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGZp
bHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJPcGVyYXRpb25z
Q2hhbmdlZDsgfQorICAgIHZvaWQgc2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoYm9vbCBjaGFu
Z2VkKSB7IG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQgPSBjaGFuZ2VkOyB9CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gZmlsdGVyQWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyQWN0aW9uczsgfQorICAgIHZvaWQgc2V0RmlsdGVyQWN0aW9u
cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4mIGFjdGlv
bnMpIHsgbV9maWx0ZXJBY3Rpb25zID0gYWN0aW9uczsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5MYXllckNvbXBvc2l0aW5nVGhyZWFkKCk7CiAKQEAgLTI1MSw2ICsyNjQs
MTEgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxMYXllck92ZXJyaWRlPiBtX292ZXJyaWRlOwog
ICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIG1fY2xpZW50OworCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIGJvb2wgbV9maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gbV9maWx0ZXJBY3Rpb25z
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAppbmRl
eCBkOTkxMjE1NTExMTE5MGM1ZjRjNmJjMTIxMjE1NzQxMWExMTFlODc1Li43ZWM1ODFiOGRhNDk5
MTJjNjBhYTMxZmQwNjlmMjE0YjNjY2Y4NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNkZWZpbmUgTGF5ZXJEYXRhX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC01OSw2ICs2MCwyNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllclByb2dyYW1TaGFkZXJC
R1JBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZMYXllclByb2dyYW1T
aGFkZXJzIH07CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgZW51bSBDU1NGaWx0ZXJT
aGFkZXJzIHsgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTRmlsdGVyU2hhZGVySW52ZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0Zp
bHRlclNoYWRlckJyaWdodG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmls
dGVyU2hhZGVyQ29udHJhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVy
U2hhZGVyT3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFk
ZXJCbHVyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJCbHVy
WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTaGFkb3csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gsCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0Zp
bHRlclNoYWRlckN1c3RvbSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bWJlck9mQ1NTRmlsdGVyU2hhZGVycyB9OworI2VuZGlmCisKICAgICBMYXllckRhdGEoTGF5ZXJU
eXBlIHR5cGUpCiAgICAgICAgIDogbV9sYXllclR5cGUodHlwZSkKICAgICAgICAgLCBtX2FuY2hv
clBvaW50KDAuNSwgMC41KQpAQCAtMTE1LDYgKzEzNSwxMCBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJzOyB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVy
biBtX2lzT3BhcXVlOyB9CiAKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQpAQCAtMTc3LDYgKzIwMSw5IEBAIHByb3RlY3RlZDoKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogCiAgICAgZmxvYXQgbV9vcGFj
aXR5OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKKyNlbmRpZgogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwogICAgIGZsb2F0IG1fYm9y
ZGVyV2lkdGg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE1NWYwYjBiMTRjN2E1NTY4M2MyODJmYWNkMjJkNWY5M2FhMjMzNmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RmlsdGVyUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNTkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorCisjaW5jbHVkZSAi
TGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKKworI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtTG9nLmg+CisjaW5jbHVkZSA8VmVjdG9yLmg+CisKKyNpbmNsdWRlIDxjc3RyaW5n
PgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50
IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChjb25zdCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUmIHQpCit7CisgICAgc3dpdGNoICh0KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyR3Jh
eXNjYWxlOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgcmV0dXJu
IExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2VwaWE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJT
YXR1cmF0ZTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAg
cmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRlOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckludmVydDsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAg
ICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyT3BhY2l0eTsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyQnJpZ2h0bmVzczsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckNvbnRyYXN0Owor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJCbHVyWTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvdzsK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyQ3VzdG9tOworI2VuZGlmCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9Cit9CisKK1VuaWZvcm1mOjpVbmlmb3JtZihpbnQgY19sb2NhdGlvbikKKyAg
ICA6IG1fbG9jYXRpb24oY19sb2NhdGlvbikKKyAgICAsIG1fcmVmQ291bnQoMSkKK3sKK30KKwor
dm9pZCBVbmlmb3JtMWY6OmFwcGx5KCkKK3sKKyAgICBnbFVuaWZvcm0xZihsb2NhdGlvbigpLCBt
X3ZhbCk7Cit9CisKK1Bhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0xZjo6Y3JlYXRlKGludCBs
b2NhdGlvbiwgZmxvYXQgdmFsKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9ybTFm
KGxvY2F0aW9uLCB2YWwpKTsKK30KKworVW5pZm9ybTFmOjpVbmlmb3JtMWYoaW50IGNfbG9jYXRp
b24sIGZsb2F0IGNfdmFsKQorICAgIDogVW5pZm9ybWYoY19sb2NhdGlvbikKKyAgICAsIG1fdmFs
KGNfdmFsKQoreworfQorCit2b2lkIFVuaWZvcm0yZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9y
bTJmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSk7Cit9CisKK1Bhc3NSZWZQdHI8VW5p
Zm9ybWY+IFVuaWZvcm0yZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQg
dmFsMSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0yZihsb2NhdGlvbiwgdmFs
MCwgdmFsMSkpOworfQorCitVbmlmb3JtMmY6OlVuaWZvcm0yZihpbnQgY19sb2NhdGlvbiwgZmxv
YXQgY192YWwwLCBmbG9hdCBjX3ZhbDEpCisgICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQorewor
ICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFdID0gY192YWwxOworfQorCit2b2lk
IFVuaWZvcm0zZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9ybTNmKGxvY2F0aW9uKCksIG1fdmFs
WzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0pOworfQorCitQYXNzUmVmUHRyPFVuaWZvcm1mPiBVbmlm
b3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0
IHZhbDIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtM2YobG9jYXRpb24sIHZh
bDAsIHZhbDEsIHZhbDIpKTsKK30KKworVW5pZm9ybTNmOjpVbmlmb3JtM2YoaW50IGNfbG9jYXRp
b24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3ZhbDIpCisgICAgOiBVbmlm
b3JtZihjX2xvY2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFd
ID0gY192YWwxOworICAgIG1fdmFsWzJdID0gY192YWwyOworfQorCitQYXNzUmVmUHRyPExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24+IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShp
bnQgcHJvZ3JhbUlkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbihwcm9ncmFtSWQpKTsKK30KKworTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbihpbnQgY19wcm9ncmFtSWQpCisgICAgOiBtX3JlZkNv
dW50KDEpCisgICAgLCBtX3Byb2dyYW1JZChjX3Byb2dyYW1JZCkKKyAgICAsIG1fcHVzaFNuYXBz
aG90KGZhbHNlKQorICAgICwgbV9wb3BTbmFwc2hvdChmYWxzZSkKK3sKK30KKwordm9pZCBMYXll
ckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25PbihMYXllckZpbHRlclJlbmRlcmVyKiBy
ZW5kZXJlcikKK3sKKyAgICBBU1NFUlQobV9wcm9ncmFtSWQgIT0gLTEpOworICAgIGlmIChtX3By
b2dyYW1JZCA9PSAtMSkgeworICAgICAgICBnbFVzZVByb2dyYW0ocmVuZGVyZXItPm1fY3NzRmls
dGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ2xVc2VQcm9ncmFtKHJlbmRlcmVyLT5tX2Nz
c0ZpbHRlclByb2dyYW1PYmplY3RbbV9wcm9ncmFtSWRdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV91bmlmb3Jtcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV91bmlmb3Jtc1tpXS0+
YXBwbHkoKTsKK30KKworUGFzc093blB0cjxMYXllckZpbHRlclJlbmRlcmVyPiBMYXllckZpbHRl
clJlbmRlcmVyOjpjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQm
IHRleENvb3JkTG9jYXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllckZpbHRl
clJlbmRlcmVyKHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3JkTG9jYXRpb24pKTsKK30KKworTGF5
ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcihjb25zdCBpbnQmIHBvc2l0aW9u
TG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKKyAgICA6IG1fcG9zaXRpb25M
b2NhdGlvbihwb3NpdGlvbkxvY2F0aW9uKQorICAgICwgbV90ZXhDb29yZExvY2F0aW9uKHRleENv
b3JkTG9jYXRpb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJl
ck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmpl
Y3RbaV0gPSAwOworCisgICAgaWYgKCEobV9lbmFibGVkID0gaW5pdGlhbGl6ZVNoYXJlZEdMT2Jq
ZWN0cygpKSkKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiQ1NTIEZpbHRlcnMgYXJlIG5vdCBlbmFibGVk
IGR1ZSB0byBmYWlsZWQgaW5pdGlhbGl6YXRpb24uIik7Cit9CisKKy8vIEJpbmRzIHRoZSBnaXZl
biBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHByb2dyYW1z
CisvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGFsbG93cyB0aGUgY29kZSB0byBiaW5k
IHRoZSBhdHRyaWJ1dGVzIG9ubHkgb25jZQorLy8gZXZlbiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVu
IHByb2dyYW1zLgorLy8KKy8vIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIExheWVyUmVuZGVyZXI6
OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbiBhbmQgdGhlIGxvY2F0aW9ucworLy8gd2lsbCBtYXRj
aCB0aG9zZSBvZiBMYXllclJlbmRlcmVyLiBTZWUgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcigpCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OmJpbmRDb21tb25BdHRy
aWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIGF0dHJpYk5hbWUpCit7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsg
KytpKQorICAgICAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX2Nzc0ZpbHRlclByb2dyYW1PYmpl
Y3RbaV0sIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKK30KKworYm9vbCBMYXllckZpbHRlclJlbmRl
cmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKK3sKKyAgICAvLyBTZWUgYWxzbyBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKworICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5n
W10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAg
ImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAg
ICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsgIFxuIgorICAgICAgICAiICB2X3RleENvb3Jk
ID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iOworCisjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCisgICAgICAgICJwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAidmFyeWlu
ZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICJ1bmlmb3JtIGxvd3Agc2Ft
cGxlcjJEIHNfdGV4dHVyZTtcbiJcCisgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1v
dW50O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0Zy
YWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpKTsgfSIKKwor
I2RlZmluZSBPRkZTRVRfRklMVEVSKHguLi4pIFwKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OyBcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVj
MiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0
dXJlO1xuIlwKKyAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAg
ICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgdV9vZmZzZXQ7XG4iXAorICAgICAgICAjeFwKKyAg
ICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4dHVyZTJE
KHNfdGV4dHVyZSwgdl90ZXhDb29yZCAtIHVfb2Zmc2V0KSk7IH0iCisKKyNkZWZpbmUgQkxVUl9G
SUxURVIoeC4uLikgXAorICAgICAgICAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyBcbiJcCisgICAg
ICAgICJcbiJcCisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkO1xuIlwK
KyAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlO1xuIlwKKyAgICAgICAg
InVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdo
cCBmbG9hdCB1X2JsdXJTaXplO1xuIlwKKyAgICAgICAgImNvbnN0IGZsb2F0IHBpID0gMy4xNDE1
OTI3O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiJcCisgICAg
ICAgICJ7XG4iXAorICAgICAgICAidmVjMyBpbmNyO1xuIlwKKyAgICAgICAgImluY3IueCA9IDEu
MCAvIChzcXJ0KDIuMCAqIHBpKSAqIHVfYW1vdW50KTtcbiJcCisgICAgICAgICJpbmNyLnkgPSBl
eHAoLTAuNSAvICh1X2Ftb3VudCAqIHVfYW1vdW50KSk7XG4iXAorICAgICAgICAiaW5jci56ID0g
aW5jci55ICogaW5jci55O1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgInZlYzQgYXZnID0g
dmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuIlwKKyAgICAgICAgImZsb2F0IGNvZWZmaWNpZW50
U3VtID0gMC4wO1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImF2ZyArPSB0ZXh0dXJlMkQo
c190ZXh0dXJlLCB2X3RleENvb3JkLnh5KSAqIGluY3IueDtcbiJcCisgICAgICAgICJjb2VmZmlj
aWVudFN1bSArPSBpbmNyLng7XG4iXAorICAgICAgICAiaW5jci54eSAqPSBpbmNyLnl6O1xuIlwK
KyAgICAgICAgIlxuIlwKKyAgICAgICAgImZvciAoZmxvYXQgaSA9IDEuMDsgaSA8PSBudW1CbHVy
UGl4ZWxzUGVyU2lkZTsgaSsrKSB7XG4iXAorICAgICAgICAiICAgIGF2ZyArPSB0ZXh0dXJlMkQo
c190ZXh0dXJlLCB2X3RleENvb3JkLnh5IC0gaSAqIHVfYmx1clNpemUgKiBibHVyTXVsdGlwbHlW
ZWMpICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBhdmcgKz0gdGV4dHVyZTJEKHNfdGV4dHVy
ZSwgdl90ZXhDb29yZC54eSArIGkgKiB1X2JsdXJTaXplICogYmx1ck11bHRpcGx5VmVjKSAqIGlu
Y3IueDtcbiJcCisgICAgICAgICIgICAgY29lZmZpY2llbnRTdW0gKz0gMi4wICogaW5jci54O1xu
IlwKKyAgICAgICAgIiAgICBpbmNyLnh5ICo9IGluY3IueXo7XG4iXAorICAgICAgICAifVxuIlwK
KyAgICAgICAgIlxuIlwKKyAgICAgICAgImdsX0ZyYWdDb2xvciA9IGF2ZyAvIGNvZWZmaWNpZW50
U3VtO1xuIlwKKyAgICAgICAgIn0iCisKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTdHJzW0xheWVy
RGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzXTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGVdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgcmV0dXJu
IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAu
NzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBj
b2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1
MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xv
ci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICAp
OworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNlcGlhXSA9IFNU
QU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3Vu
dDsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4x
ODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjM0OSAt
IDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQg
LSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICog
Y29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICAgfQor
ICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2F0dXJh
dGVdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4
NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43
MTUgKyAwLjI4NSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1v
dW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAq
IHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJz
W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRlXSA9IFNUQU5EQVJEX0ZJTFRFUigK
KyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OworICAgICAg
ICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAg
ICAgICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAg
ICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIx
MykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIg
KiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICog
KDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICog
MC4wNzIgLSBzICogMC4yODMpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgw
LjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAw
LjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAu
MDcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisgICAg
KTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJJbnZlcnRdID0g
U1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIGZsb2F0IGludmVydChsb3dwIGZsb2F0IG4p
IHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7IH0K
KyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGlu
dmVydChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVy
U3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJyaWdodG5lc3NdID0gU1RBTkRBUkRfRklM
VEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBj
b2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6
Q1NTRmlsdGVyU2hhZGVyQ29udHJhc3RdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dw
IGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91
bnQgKyAwLjU7IH0KKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRy
YXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKyAg
ICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlck9wYWNpdHld
ID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yLCBjb2xvci5n
LCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOworICAgICAgICB9CisgICAgKTsKKworICAg
IHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0gPSBCTFVSX0ZJTFRF
UigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1BlclNpZGUgPSAyLjA7CisgICAg
ICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVjMigxLjAsIDAuMCk7Cisg
ICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0g
PSBCTFVSX0ZJTFRFUigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1BlclNpZGUg
PSAyLjA7CisgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVjMigw
LjAsIDEuMCk7CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJT
aGFkZXJTaGFkb3ddID0gT0ZGU0VUX0ZJTFRFUigKKyAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzMg
dV9jb2xvcjsKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbG9yLmEgPiAwLjUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHZlYzQodV9jb2xvci5yLCB1X2NvbG9yLmcsIHVfY29sb3IuYiwgY29sb3IuYSk7CisgICAg
ICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ry
c1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSA9IFNUQU5EQVJEX0ZJTFRF
UigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisgICAgKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7IGkrKykg
eworICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBMYXllclJlbmRlcmVyOjps
b2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHNoYWRlclN0cnNbaV0pOworICAg
ICAgICBpZiAoIW1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSkgeworICAgICAgICAgICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxXYXJuLCAiQ291bGQgbm90IGxvYWQgQ1NTIEZpbHRlciBTaGFkZXIgJWkiLCBpKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCBBVFRS
SUIgbG9jYXRpb25zIC0gdGhlc2Ugd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvZ3JhbXMgaW4g
TGF5ZXJSZW5kZXJlci5jcHAKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV9wb3NpdGlv
bkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpOworICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbiht
X3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3JkIik7CisKKyAgICAvLyBSZS1saW5rIHRvIHRh
a2UgZWZmZWN0CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NT
RmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBnbExpbmtQcm9ncmFtKG1fY3NzRmlsdGVyUHJv
Z3JhbU9iamVjdFtpXSk7CisKKyAgICAvLyBHZXQgVU5JRk9STSBsb2NhdGlvbnMKKyAgICBmb3Ig
KGludCBpID0gMDtpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7ICsraSkK
KyAgICAgICAgbV9hbW91bnRMb2NhdGlvbltpXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3Nz
RmlsdGVyUHJvZ3JhbU9iamVjdFtpXSwgInVfYW1vdW50Iik7CisKKyAgICBtX2JsdXJBbW91bnRM
b2NhdGlvblswXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVj
dFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXSwgInVfYmx1clNpemUiKTsKKyAgICBt
X2JsdXJBbW91bnRMb2NhdGlvblsxXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVy
UHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXSwgInVfYmx1clNp
emUiKTsKKworICAgIG1fc2hhZG93Q29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9u
KG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRv
d10sICJ1X2NvbG9yIik7CisgICAgbV9vZmZzZXRMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNo
YWRvd10sICJ1X29mZnNldCIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6cGluZyhMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hN
RU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwgMCk7CisgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgp
KTsKK30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKExheWVyUmVuZGVyZXJTdXJm
YWNlKiBzdXJmYWNlKQoreworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBzdXJmYWNlLT50ZXh0dXJl
KCktPnRleHR1cmVJZCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OnB1
c2hTbmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSwgaW50IHNvdXJjZUlkKQor
eworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3NuYXBzaG90VGV4dHVyZS0+dGV4dHVyZUlkKCks
IDApOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzb3VyY2VJZCk7CisgICAg
Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsgLy8gdG8gdHJhbnNwYXJlbmN5CisKKyAgICBn
bFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCku
aGVpZ2h0KCkpOworCisgICAgZ2xVc2VQcm9ncmFtKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtM
YXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSk7CisgICAgZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Cit9CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
cG9wU25hcHNob3QoKQoreworICAgIC8vIFRoZSBuYW1lIGlzIHNsaWdodGx5IG1pc2xlYWRpbmcu
CisgICAgLy8gVGhpcyBEUkFXUyB0aGUgcHJldmlvdXMgdGV4dHVyZSB1c2luZyB0aGUgY3VycmVu
dCBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uLCB0aGVuIHNldHMgdGhlIHRleHR1cmUKKyAgICAv
LyB0byB0aGUgc25hcHNob3QgdGV4dHVyZS4gTmV4dCB0aW1lIGdsRHJhd0FycmF5cyBpcyBjYWxs
ZWQsIHRoZSBzbmFwc2hvdCB3aWxsIGJlIGRyYXduLgorCisgICAgZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Nu
YXBzaG90VGV4dHVyZS0+dGV4dHVyZUlkKCkpOworfQorCitWZWN0b3I8UmVmUHRyPExheWVyRmls
dGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0aW9uc0Zvck9wZXJh
dGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+JiBvcHMpCit7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uPiA+IHJldDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJh
dGlvbiA9ICpvcHNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9u
VHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6QkxVUiAmJiBzdGF0aWNfY2FzdDxjb25zdCBCbHVy
RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKS52YWx1ZSgpIDwgMC4x
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaW50IHByb2dyYW1JZCA9IG9wZXJh
dGlvblR5cGVUb1Byb2dyYW1JRChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICAg
ICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUocHJvZ3JhbUlk
KSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAg
ICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRM
b2NhdGlvbltwcm9ncmFtSWRdCisgICAgICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOgorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3Jt
MWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW3Byb2dyYW1JZF0KKyAgICAgICAgICAgICAgICAs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24m
PihvcGVyYXRpb24pLmFtb3VudCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAvLyBC
bHVyIGlzIGEgdHdvLXN0ZXAgcHJvY2VzczoKKyAgICAgICAgICAgIC8vICAgICAxLiBibHVyIFgK
KyAgICAgICAgICAgIC8vICAgICAyLiBibHVyIFkKKyAgICAgICAgICAgIC8vIFRoaXMgd2F5IHdl
IGNhbiBoYXZlIDJuIHRpbWUgaW5zdGVhZCBvZiBuXjIgdGltZSkKKworICAgICAgICAgICAgZG91
YmxlIGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLnN0ZERldmlhdGlvbigpLnZhbHVlKCk7CisKKyAgICAgICAgICAgIC8vIEJMVVIgWToK
KyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUo
bV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXSwgYW1vdW50
KSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3Jl
YXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxv
YXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICAvLyBCTFVSIFg6
CisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0
ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYKSk7CisgICAgICAgICAgICByZXQubGFz
dCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5
ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOworICAgICAgICAgICAgcmV0
Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2Nh
dGlvblsxXQorICAgICAgICAgICAgICAgICwgMS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53
aWR0aCgpKSkpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgLy8gU2hhZG93IGlzIGEgZm91ci1zdGVwIHByb2Nlc3M6CisgICAgICAgICAgICAvLyAg
ICAgMS4gY2FwdHVyZSBzbmFwc2hvdAorICAgICAgICAgICAgLy8gICAgICAgIHR1cm4gaW50byBh
IHNvbGlkIG9mZnNldCBtYXNrCisgICAgICAgICAgICAvLyAgICAgMi4gYmx1ciBYCisgICAgICAg
ICAgICAvLyAgICAgMy4gYmx1ciBZCisgICAgICAgICAgICAvLyAgICAgNC4gcmVwYWludCBvcmln
aW5hbCBvbiB0b3Agb2YgbWFzaworICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiYgZHNmbyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0UHVzaFNuYXBzaG90
KCk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0yZjo6Y3Jl
YXRlKG1fb2Zmc2V0TG9jYXRpb24KKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8ueCgpKSAv
IGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKQorICAgICAgICAgICAgICAgICwgZmxvYXQo
ZHNmby55KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOworICAgICAgICAg
ICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtM2Y6OmNyZWF0ZShtX3NoYWRvd0Nv
bG9yTG9jYXRpb24KKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29sb3IoKS5yZWQoKSkg
LyAyNTUuMGYKKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29sb3IoKS5ncmVlbigpKSAv
IDI1NS4wZgorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xvcigpLmJsdWUoKSkgLyAy
NTUuMGYpKTsKKworICAgICAgICAgICAgLy8gQkxVUiBZCisgICAgICAgICAgICByZXQuYXBwZW5k
KExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlckJsdXJZKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZv
cm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJC
bHVyWV0KKyAgICAgICAgICAgICAgICAsIGRzZm8uc3RkRGV2aWF0aW9uKCkpKTsKKyAgICAgICAg
ICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9ibHVyQW1v
dW50TG9jYXRpb25bMF0KKyAgICAgICAgICAgICAgICAsIDEuMGYgLyBmbG9hdChzdXJmYWNlLT5z
aXplKCkuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgICAgIC8vIEJMVVIgWAorICAgICAgICAgICAg
cmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJCbHVyWCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5p
Zm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyQmx1clhdCisgICAgICAgICAgICAgICAgLCBkc2ZvLnN0ZERldmlhdGlvbigpKSk7
CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRl
KG1fYmx1ckFtb3VudExvY2F0aW9uWzFdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQo
c3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpKSk7CisKKyAgICAgICAgICAgIC8vIFJlcGFpbnQgb3Jp
Z2luYWwgaW1hZ2UKKyAgICAgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKyAg
ICAgICAgICAgIHJldC5sYXN0KCktPnNldFBvcFNuYXBzaG90KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocmV0LnNpemUoKSAlIDIpIC8vIFdlIG5lZWQgYW4gZXZlbiBudW1iZXIgb2YgYWN0aW9u
cy4gU2VlIHBpbmctcG9uZyBub3RlIGluIGFwcGx5TGF5ZXJGaWx0ZXJzKCkuCisgICAgICAgIHJl
dC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gpKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp
YyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07
CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8s
IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVy
UmVuZGVyZXJBY3Rpb24+ID4gYWN0aW9ucykKK3sKKyAgICBnbENsZWFyQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC4wZik7CisgICAgQVNTRVJUKCEoYWN0aW9ucy5zaXplKCkgJSAyKSk7IC8vIFNl
ZSBwaW5nLXBvbmdpbmcgbm90ZSBiZWxvdy4KKworICAgIGlmICghbV9lbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyLT5maWx0ZXJzKCkuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgbV90ZXh0dXJlID0gdGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y3JlYXRlVGV4dHVyZSgpOworCisgICAgYm9vbCBy
ZXF1aXJlU25hcHNob3QgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYWN0aW9uc1tpXS0+c2hvdWxkUHVzaFNu
YXBzaG90KCkpCisgICAgICAgICAgICByZXF1aXJlU25hcHNob3QgPSB0cnVlOworICAgIH0KKwor
ICAgIGlmICghbV9zbmFwc2hvdFRleHR1cmUgJiYgcmVxdWlyZVNuYXBzaG90KQorICAgICAgICBt
X3NuYXBzaG90VGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmNyZWF0
ZVRleHR1cmUoKTsKKworICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5ZXIt
PmxheWVyUmVuZGVyZXJTdXJmYWNlKCk7CisKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkg
KTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9G
TE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CisKKyAgICBtX3RleHR1cmUtPnByb3RlY3Qo
c3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCkpOworICAgIGlmIChyZXF1aXJlU25hcHNob3QpCisg
ICAgICAgIG1fc25hcHNob3RUZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6
ZSgpKTsKKworICAgIGlmICghZmJvKQorICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJv
KTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIC8vIE5PVEUgQUJPVVQgUElORy1QT05HSU5HCisgICAgICAgIC8vID09PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgIC8vIFVuZGVyIE9wZW5HTCBFUyAyLjAsIHdlIGNhbm5vdCB1c2Ug
dGhlIGZibyB3ZSBhcmUgd3JpdHRpbmcgdG8gYXMgYSB0ZXh0dXJlLCBzbyB3ZSBuZWVkIHRvIHBs
YXkgcGluZy1wb25nOgorICAgICAgICAvLyAgMSkgRHJhdyBwYXJlbnQgc3VyZmFjZSB0byBvdXIg
dGV4dHVyZSB3aXRoIGVmZmVjdC4KKyAgICAgICAgLy8gIDIpIERyYXcgb3VyIHN1cmZhY2UgdG8g
cGFyZW50IHRleHR1cmUgd2l0aCBlZmZlY3QuCisgICAgICAgIC8vICAzKSBSZXBlYXQuCisgICAg
ICAgIC8vIEJlY2F1c2Ugd2UgZXZlbnR1YWxseSBoYXZlIHRvIGVuZCBvbiB0aGUgcGFyZW50IHRl
eHR1cmUsIHdlIG5lZWQgYW4gZXZlbiBudW1iZXIgb2YgYWN0aW9ucy4KKyAgICAgICAgLy8gYWN0
aW9uc0Zvck9wZXJhdGlvbnMgdGFrZXMgY2FyZSBvZiB0aGF0LgorCisgICAgICAgIGlmIChhY3Rp
b25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkKKyAgICAgICAgICAgIHB1c2hTbmFwc2hvdChz
dXJmYWNlLCAoIShpICUgMikgPyBzdXJmYWNlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpIDogbV90
ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworCisgICAgICAgIGlmICghKGkgJSAyKSkKKyAgICAgICAg
ICAgIHBpbmcoc3VyZmFjZSk7IC8vIFNldCBmcmFtZWJ1ZmZlciB0byBvdXJzLCBhbmQgdGV4dHVy
ZSB0byBwYXJlbnQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9uZyhzdXJmYWNlKTsgLy8g
U2V0IHRleHR1cmUgdG8gcGFyZW50LCBhbmQgZnJhbWVidWZmZXIgdG8gdXMKKworICAgICAgICBn
bENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFuc3BhcmVuY3kKKyAgICAgICAg
Z2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+c2l6ZSgp
LmhlaWdodCgpKTsKKworICAgICAgICBhY3Rpb25zW2ldLT51c2VBY3Rpb25Pbih0aGlzKTsKKwor
ICAgICAgICBpZiAoYWN0aW9uc1tpXS0+c2hvdWxkUG9wU25hcHNob3QoKSkKKyAgICAgICAgICAg
IHBvcFNuYXBzaG90KCk7CisKKyAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwg
MCwgNCk7CisgICAgfQorCisgICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKKyAgICBpZiAocmVx
dWlyZVNuYXBzaG90KQorICAgICAgICBtX3NuYXBzaG90VGV4dHVyZS0+dW5wcm90ZWN0KCk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIGdsQ2xlYXJDb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoQ1NTX0ZJTFRFUlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMTU2N2YzNGE2
ZTc3ZDlkMTAzNWEwMGQyMGQyMDA1YjI5NWNlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIu
aApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaWZuZGVmIExheWVyRmlsdGVyUmVuZGVyZXJfaAorI2RlZmluZSBMYXllckZpbHRlclJl
bmRlcmVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKENT
U19GSUxURVJTKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheWVyRGF0YS5o
IgorI2luY2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xF
UzJDb250ZXh0Lmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDsKK2Ns
YXNzIExheWVyRmlsdGVyUmVuZGVyZXI7CitjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9u
OworY2xhc3MgTGF5ZXJSZW5kZXJlclN1cmZhY2U7CisKK2NsYXNzIFVuaWZvcm1mIDogcHVibGlj
IFJlZkNvdW50ZWQ8VW5pZm9ybWY+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbmlmb3Jt
Zik7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgVW5pZm9ybWYoaW50IGxvY2F0aW9uKTsKKyAgICBjb25zdCBpbnQmIGxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorCitwcml2YXRlOgorICAgIGludCBtX2xvY2F0
aW9uOworICAgIGludCBtX3JlZkNvdW50OworfTsKKworY2xhc3MgVW5pZm9ybTFmIDogcHVibGlj
IFVuaWZvcm1mIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtZj4gY3Jl
YXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm0x
ZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWw7Cit9OworCitjbGFzcyBVbmlmb3JtMmYgOiBwdWJs
aWMgVW5pZm9ybWYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBj
cmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxKTsKKworcHJvdGVjdGVk
OgorICAgIFVuaWZvcm0yZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpOwor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIGZsb2F0IG1fdmFsWzJd
OworfTsKKworY2xhc3MgVW5pZm9ybTNmIDogcHVibGljIFVuaWZvcm1mIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtZj4gY3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQg
dmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7CisKK3Byb3RlY3RlZDoKKyAgICBVbmlmb3Jt
M2YoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBmbG9hdCBtX3ZhbFszXTsK
K307CisKK2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gY3JlYXRlKGludCBwcm9ncmFtSWQpOwor
ICAgICAgICAvLyBhIHZlY3RvciBvZiBhY3Rpb25zIG11c3QgaGF2ZSBhbiBldmVuIGNvdW50LCBz
byBpZiB5b3UgaGF2ZSBhbiBvZGQgY291bnQsIGFkZCBhIHBhc3N0aHJvdWdoIGV2ZW50IGF0IHRo
ZSBlbmQKKyAgICAgICAgLy8gc2VlIHRoZSBwaW5nLXBvbmcgbm90ZSBpbiBMYXllckZpbHRlclJl
bmRlcmVyOjphcHBseUFjdGlvbnMKKyAgICB+TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbigpOwor
CisgICAgYm9vbCBzaG91bGRQdXNoU25hcHNob3QoKSB7IHJldHVybiBtX3B1c2hTbmFwc2hvdDsg
fQorICAgIHZvaWQgc2V0UHVzaFNuYXBzaG90KCkgeyBtX3B1c2hTbmFwc2hvdCA9IDE7IH0KKwor
ICAgIGJvb2wgc2hvdWxkUG9wU25hcHNob3QoKSB7IHJldHVybiBtX3BvcFNuYXBzaG90OyB9Cisg
ICAgdm9pZCBzZXRQb3BTbmFwc2hvdCgpIHsgbV9wb3BTbmFwc2hvdCA9IDE7IH0KKworICAgIHZv
aWQgYXBwZW5kVW5pZm9ybShjb25zdCBSZWZQdHI8VW5pZm9ybWY+JiB1bmlmb3JtKSB7IG1fdW5p
Zm9ybXMuYXBwZW5kKHVuaWZvcm0pOyB9CisgICAgdm9pZCB1c2VBY3Rpb25PbihMYXllckZpbHRl
clJlbmRlcmVyKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9yZWZDb3VudDsKKyAgICBpbnQg
bV9wcm9ncmFtSWQ7CisgICAgYm9vbCBtX3B1c2hTbmFwc2hvdDsKKyAgICBib29sIG1fcG9wU25h
cHNob3Q7CisKKyAgICBWZWN0b3I8UmVmUHRyPFVuaWZvcm1mPiA+IG1fdW5pZm9ybXM7Citwcml2
YXRlOgorICAgIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IHByb2dyYW1JZCk7Cit9Owor
CitjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
YXllckZpbHRlclJlbmRlcmVyKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExh
eWVyRmlsdGVyUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNv
bnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgdm9pZCBhcHBseUFjdGlvbnModW5zaWdu
ZWQmIGZibywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbj4gPik7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uPiA+IGFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mKTsKKworICAgIC8vIElmIGlu
aXRpYWxpemF0aW9uIGZhaWxzLCBvciBkaXNhYmxlKCkgaXMgY2FsbGVkLCB0aGlzIGlzIGZhbHNl
LgorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAg
dm9pZCBkaXNhYmxlKCkgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExh
eWVyRmlsdGVyUmVuZGVyZXIoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQm
IHRleENvb3JkTG9jYXRpb24pOworICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGlu
dCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSk7CisgICAgYm9vbCBpbml0aWFsaXpl
U2hhcmVkR0xPYmplY3RzKCk7CisKKyAgICAvLyBTZWUgbm90ZSBhYm91dCBwaW5nLXBvbmdpbmcg
aW4gYXBwbHlBY3Rpb25zKCkKKyAgICB2b2lkIHBpbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsK
KyAgICB2b2lkIHBvbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKKworICAgIC8vIFRoaXMgaXMg
Zm9yIHNoYWRvd3MsIHdoZXJlIHdlIG5lZWQgdG8gY3JlYXRlIGEgc2hhZG93LCBhbmQgdGhlbiBy
ZXBhaW50IHRoZSBvcmlnaW5hbCBpbWFnZQorICAgIC8vIG9uIHRvcCBvZiB0aGUgc2hhZG93Lgor
ICAgIHZvaWQgcHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNlKiwgaW50IHNvdXJjZUlk
KTsKKyAgICB2b2lkIHBvcFNuYXBzaG90KCk7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKworICAg
IC8vIEVTU0wgYXR0cmlidXRlcyBzaGFyZWQgd2l0aCBMYXllclJlbmRlcmVyIC0gc2VlIGNvbnN0
cnVjdG9yOgorICAgIGNvbnN0IGludCBtX3Bvc2l0aW9uTG9jYXRpb247CisgICAgY29uc3QgaW50
IG1fdGV4Q29vcmRMb2NhdGlvbjsKKworICAgIC8vIEVTU0wgcHJvZ3JhbSBvYmplY3QgSURzOgor
ICAgIHVuc2lnbmVkIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6Ok51bWJlck9m
Q1NTRmlsdGVyU2hhZGVyc107CisKKyAgICAvLyBFU1NMIHVuaWZvcm0gbG9jYXRpb25zOgorICAg
IGludCBtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJz
XTsKKyAgICBpbnQgbV9ibHVyQW1vdW50TG9jYXRpb25bMl07IC8vIDAgPSBZLCAxID0gWAorICAg
IGludCBtX3NoYWRvd0NvbG9yTG9jYXRpb247CisgICAgaW50IG1fb2Zmc2V0TG9jYXRpb247CisK
KyAgICAvLyBUZXh0dXJlcyBmb3IgcGxheWluZyBwaW5nLXBvbmcgLSBzZWUgbm90ZSBpbiBhcHBs
eUFjdGlvbnMoKQorICAgIFJlZlB0cjxUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgUmVmUHRyPFRl
eHR1cmU+IG1fc25hcHNob3RUZXh0dXJlOworCisgICAgZnJpZW5kIGNsYXNzIExheWVyRmlsdGVy
UmVuZGVyZXJBY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2VuZGlmIC8vIExheWVyRmlsdGVy
UmVuZGVyZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKaW5kZXggNzc2MjNlNThjZjY5MmVi
YjhkYzE0OGYwZTkxMWE0ZTY1OTBlOGFmNi4uMGU0MmRkNDQzMWNjNWQ2NGMwYzY3ZGY0ZDg2MjEz
MThmYTVkMTcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
LmgiCiAKQEAgLTY0LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tHTEVycm9yKCkKICNlbmRp
ZgogfQogCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIq
IHNoYWRlclNvdXJjZSkKK0dMdWludCBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKEdMZW51bSB0
eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCiB7CiAgICAgR0x1aW50IHNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyKHR5cGUpOwogICAgIGlmICghc2hhZGVyKQpAQCAtODYsNyArODcsNyBAQCBz
dGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNv
dXJjZSkKICAgICByZXR1cm4gc2hhZGVyOwogfQogCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFkZXJQ
cm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2UpCitHTHVpbnQgTGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlclByb2dyYW0o
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZSkKIHsKICAgICBHTHVpbnQgdmVydGV4U2hhZGVyOwogICAgIEdMdWludCBmcmFnbWVu
dFNoYWRlcjsKQEAgLTUwMCw2ICs1MDEsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpkcmF3TGF5
ZXJzT25TdXJmYWNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHIKICAg
ICAgICAgaW50IGN1cnJlbnRTdGVuY2lsVmFsdWUgPSAwOwogICAgICAgICBGbG9hdFJlY3QgY2xp
cFJlY3QoLTEsIC0xLCAyLCAyKTsKICAgICAgICAgY29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKHN1
cmZhY2VMYXllcnNbaV0uZ2V0KCksIGN1cnJlbnRTdGVuY2lsVmFsdWUsIGNsaXBSZWN0KTsKKwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQor
ICAgICAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0
ZShtX3Bvc2l0aW9uTG9jYXRpb24sIG1fdGV4Q29vcmRMb2NhdGlvbik7CisgICAgICAgIGlmIChs
YXllci0+ZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNl
dEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNlKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRG
aWx0ZXJBY3Rpb25zKG1fZmlsdGVyUmVuZGVyZXItPmFjdGlvbnNGb3JPcGVyYXRpb25zKHN1cmZh
Y2UsIGxheWVyLT5maWx0ZXJzKCkub3BlcmF0aW9ucygpKSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9maWx0ZXJSZW5kZXJlci0+YXBwbHlBY3Rpb25zKG1fZmJvLCBsYXllciwgbGF5ZXItPmZpbHRl
ckFjdGlvbnMoKSk7CisgICAgICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIC8vIElmIHRoZXJlIGFyZSBsYXllcnMgZHJhd2VkIG9uIHN1cmZhY2VzLCB3
ZSBuZWVkIHRvIHN3aXRjaCB0byBkZWZhdWx0IGZyYW1lYnVmZmVyLgpAQCAtNzEyLDcgKzcyNCwx
MSBAQCB2b2lkIExheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVAogICAgIC8vIENhbGN1bGF0ZSB0aGUgbGF5ZXIn
cyBvcGFjaXR5LgogICAgIG9wYWNpdHkgKj0gbGF5ZXItPm9wYWNpdHkoKTsKIAorI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICBib29sIHVzZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXIt
Pm1hc2tMYXllcigpIHx8IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSB8fCBsYXllci0+ZmlsdGVycygp
LnNpemUoKTsKKyNlbHNlCiAgICAgYm9vbCB1c2VMYXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVy
LT5tYXNrTGF5ZXIoKSB8fCBsYXllci0+cmVwbGljYUxheWVyKCk7CisjZW5kaWYKICAgICBpZiAo
IXVzZUxheWVyUmVuZGVyZXJTdXJmYWNlKSB7CiAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0
eShvcGFjaXR5KTsKICAgICAgICAgbGF5ZXItPmNsZWFyTGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsK
QEAgLTk4NCw3ICsxMDAwLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyOjptYWtlQ29udGV4dEN1cnJl
bnQoKQogICAgIHJldHVybiBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLS8vIEJpbmRz
IHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxs
IHRocmVlIHByb2dyYW1zCisvLyBCaW5kcyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBj
b21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9ncmFtcwogLy8gdXNlZCBieSB0aGUgY29tcG9z
aXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9u
Y2UKIC8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBwcm9ncmFtcy4KIHZvaWQgTGF5ZXJS
ZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hh
ciogYXR0cmliTmFtZSkKQEAgLTEwNTMsNyArMTA2OSw2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6
aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZl
YzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBo
YSAqIG1hc2tDb2xvci53OyAgICAgICAgIFxuIgogICAgICAgICAifSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotCiAg
ICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgZGVidWcgYm9yZGVycyBhcm91bmQgdGhlIGxh
eWVycy4KICAgICBjaGFyIGNvbG9yVmVydGV4U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAiYXR0
cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKQEAgLTExMzksNyArMTE1NCw3IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBTcGVjaWZ5IHRoZSBhdHRyaWIgbG9jYXRpb24gZm9y
IHRoZSBwb3NpdGlvbiBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHRocmVlIHByb2dyYW1z
IHRvCisgICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24g
YW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwogICAgIC8vIGF2b2lkIGJp
bmRpbmcgcmUtYmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCiAgICAgYmluZENvbW1vbkF0
dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25Mb2NhdGlvbiwgImFfcG9zaXRpb24iKTsKICAgICBiaW5k
Q29tbW9uQXR0cmliTG9jYXRpb24obV90ZXhDb29yZExvY2F0aW9uLCAiYV90ZXhDb29yZCIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyUmVuZGVyZXIuaAppbmRleCBmNmMzYmU4NzhmYTExZWJlMTc5YmIzZWU2ZDJhN2Yw
ZDY0MzhiMmIwLi40Mzc5MjdiZWVhYzhhMDQ4N2I0MTRlZjU0NzA3ZmIzNDE3NmE0OGVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyUmVuZGVyZXIuaApAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkxheWVyRGF0YS5oIgorI2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0Lmg+CkBAIC0xMzQsNiArMTM1LDkgQEAgcHVibGlj
OgogICAgIC8vIElmIHRoZSBsYXllciBoYXMgYWxyZWFkeSBiZWVuIGRyYXdlZCBvbiBhIHN1cmZh
Y2UuCiAgICAgYm9vbCBsYXllckFscmVhZHlPblN1cmZhY2UoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCopIGNvbnN0OwogCisgICAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBj
b25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpOworICAgIHN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlclBy
b2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBwcmVwYXJlRnJhbWVSZWN1cnNp
dmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBhbmltYXRpb25UaW1lLCBib29sIGlz
Q29udGV4dEN1cnJlbnQpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VMYXllcnMs
IGZsb2F0IG9wYWNpdHksIEZsb2F0UmVjdCBjbGlwUmVjdCk7CkBAIC0xNjQsNiArMTY4LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gU2hhZGVyIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMu
CiAgICAgY29uc3QgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKICAgICBjb25zdCBpbnQgbV90ZXhD
b29yZExvY2F0aW9uOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBPd25QdHI8TGF5ZXJG
aWx0ZXJSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKKyNlbmRpZgorCiAgICAgaW50IG1fc2Ft
cGxlckxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKICAg
ICBpbnQgbV9hbHBoYUxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFk
ZXJzXTsKICAgICBpbnQgbV9tYXNrU2FtcGxlckxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZM
YXllclByb2dyYW1TaGFkZXJzXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKaW5k
ZXggMTViYmUwYThmMTM4OGExNmU0MDE5NGFmZWMyMGE4ZjhiMDJmODQzYS4uZTlkM2RmZjQyYzlj
MTBmZmY1MDlkNjVjMzhiNDNlNzZmNGJjZjczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRo
cmVhZC5jcHAKQEAgLTY1LDYgKzY1LDkgQEAgTGF5ZXJXZWJLaXRUaHJlYWQ6OkxheWVyV2ViS2l0
VGhyZWFkKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3cKICAgICAs
IG1faXNNYXNrKGZhbHNlKQogICAgICwgbV9hbmltYXRpb25zQ2hhbmdlZChmYWxzZSkKICAgICAs
IG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0KGZhbHNlKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICAsIG1fZmlsdGVyc0NoYW5nZWQoZmFsc2UpCisjZW5kaWYKIHsKICAgICBpZiAodHlwZSA9
PSBMYXllcikKICAgICAgICAgbV90aWxlciA9IExheWVyVGlsZXI6OmNyZWF0ZSh0aGlzKTsKQEAg
LTI4NCw2ICsyODcsMTIgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6Y29tbWl0T25Db21wb3Np
dGluZ1RocmVhZCgpCiAgICAgbV9wb3NpdGlvbiArPSBtX2Fic29sdXRlT2Zmc2V0OwogICAgIC8v
IENvcHkgdGhlIGJhc2UgdmFyaWFibGVzIGZyb20gdGhpcyBvYmplY3QgaW50byBtX2xheWVyQ29t
cG9zaXRpbmdUaHJlYWQKICAgICByZXBsaWNhdGUobV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdl
dCgpKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKG1fZmlsdGVyc0NoYW5nZWQp
IHsKKyAgICAgICAgbV9maWx0ZXJzQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBtX2xheWVyQ29t
cG9zaXRpbmdUaHJlYWQtPnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKHRydWUpOworICAgIH0K
KyNlbmRpZgogICAgIGlmIChtX2FuaW1hdGlvbnNDaGFuZ2VkKSB7CiAgICAgICAgIG1fbGF5ZXJD
b21wb3NpdGluZ1RocmVhZC0+c2V0UnVubmluZ0FuaW1hdGlvbnMobV9ydW5uaW5nQW5pbWF0aW9u
cyk7CiAgICAgICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U3VzcGVuZGVkQW5pbWF0
aW9ucyhtX3N1c3BlbmRlZEFuaW1hdGlvbnMpOwpAQCAtNDA1LDYgKzQxNCwzMSBAQCB2b2lkIExh
eWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgc2V0
TmVlZHNEaXNwbGF5KCk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIExheWVy
V2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCit7CisgICAgLy8gVGhlcmUgaXMgd29yayBhc3NvY2lhdGVkIHdpdGggY29t
cG9zaXRpbmcgZmlsdGVycywgZXZlbiBpZiB0aGVyZSBhcmUgemVybyBmaWx0ZXJzLAorICAgIC8v
IHNvIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzLCBjbGFpbSB3ZSBjYW4ndCBjb21wb3NpdGUgdGhl
bS4KKyAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7
CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisjZW5kaWYK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYK
KwogY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIExheWVyV2ViS2l0VGhyZWFkOjpyb290TGF5ZXIo
KSBjb25zdAogewogICAgIGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBsYXllciA9IHRoaXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyV2ViS2l0VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKaW5kZXggNDlhNDliZTVmMTNjOTAwOTA3ZTYyZWU4
MTU5MzkzY2IzMTE2OGQzZi4uNTJiZjJmMTExZTZlODA5NDQyY2UzYjI0OTRjOGNhZjcwNWE3YjBm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllcldlYktpdFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtOTgsNiArOTgsMTEgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0g
b3BhY2l0eTsgc2V0TmVlZHNDb21taXQoKTsgfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
ICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1f
ZmlsdGVycyA9IGZpbHRlcnM7IG1fZmlsdGVyc0NoYW5nZWQgPSAxOyBzZXROZWVkc0NvbW1pdCgp
OyB9CisgICAgc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKTsKKyNlbmRpZgorCiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCBp
c09wYXF1ZSkgeyBtX2lzT3BhcXVlID0gaXNPcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0KIAog
ICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3Np
dGlvbiA9IHBvc2l0aW9uOyBzZXROZWVkc0NvbW1pdCgpOyB9CkBAIC0yMDIsNiArMjA3LDkgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2lzTWFzayA6IDE7CiAgICAgdW5zaWduZWQgbV9hbmlt
YXRpb25zQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jbGVhck92ZXJyaWRlT25Db21taXQg
OiAxOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB1bnNpZ25lZCBtX2ZpbHRlcnNDaGFu
Z2VkIDogMTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAppbmRleCAzNmQw
NmQzMmI2OWM0NzE2ZjMwYjU0OTMzNDdhZGJhZWQxNjAyMzQzLi40OGFiYTJiYTRjMWEwMTk5ZDZm
ZjgwYzQ4OTNmODg5NmY5Y2FjMTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCkBAIC0xMzksOSArMTQwLDExIEBAIHZvaWQgRkVD
dXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFoYWRDb250ZXh0
IHx8IG1fY29udGV4dFNpemUgIT0gbmV3Q29udGV4dFNpemUpCiAgICAgICAgIHJlc2l6ZUNvbnRl
eHQobmV3Q29udGV4dFNpemUpOwogCisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpIC8vIEJsYWNr
QmVycnkgZGVmaW5lcyBpdHMgb3duIFRleHR1cmUgY2xhc3MuCiAgICAgLy8gRG8gbm90IGRyYXcg
dGhlIGZpbHRlciBpZiB0aGUgaW5wdXQgaW1hZ2UgY2Fubm90IGZpdCBpbnNpZGUgYSBzaW5nbGUg
R1BVIHRleHR1cmUuCiAgICAgaWYgKG1faW5wdXRUZXh0dXJlLT50aWxlcygpLm51bVRpbGVzWCgp
ICE9IDEgfHwgbV9pbnB1dFRleHR1cmUtPnRpbGVzKCkubnVtVGlsZXNZKCkgIT0gMSkKICAgICAg
ICAgcmV0dXJuOworI2VuZGlmCiAgICAgCiAgICAgLy8gVGhlIHNoYWRlciBoYWQgY29tcGlsZXIg
ZXJyb3JzLiBXZSBjYW5ub3QgZHJhdyBhbnl0aGluZy4KICAgICBpZiAoIW1fY29tcGlsZWRQcm9n
cmFtLT5pc0luaXRpYWxpemVkKCkpCkBAIC0xODUsNyArMTg4LDExIEBAIGJvb2wgRkVDdXN0b21G
aWx0ZXI6OmluaXRpYWxpemVDb250ZXh0KCkKIAogdm9pZCBGRUN1c3RvbUZpbHRlcjo6cmVzaXpl
Q29udGV4dChjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIHsKKyNpZiAhUExBVEZPUk0o
QkxBQ0tCRVJSWSkgLy8gQmxhY2tCZXJyeSBkZWZpbmVzIGl0cyBvd24gVGV4dHVyZSBjbGFzcwog
ICAgIG1faW5wdXRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgVGV4
dHVyZTo6UkdCQTgsIG5ld0NvbnRleHRTaXplLndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdo
dCgpKTsKKyNlbHNlCisgICAgbV9pbnB1dFRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUodHJ1ZSk7
CisjZW5kaWYKICAgICAKICAgICBpZiAoIW1fZnJhbWVCdWZmZXIpCiAgICAgICAgIG1fZnJhbWVC
dWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CkBAIC0yNjksOCArMjc2LDEy
IEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVycyhVaW50OENsYW1w
ZWRBcnJheSogc3JjUGl4ZWxBcnJheSkKICAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPnNhbXBs
ZXJMb2NhdGlvbigpICE9IC0xKSB7CiAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0x
aShtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOworI2lmICFQTEFURk9S
TShCTEFDS0JFUlJZKQogICAgICAgICBtX2lucHV0VGV4dHVyZS0+bG9hZChzcmNQaXhlbEFycmF5
LT5kYXRhKCkpOwogICAgICAgICBtX2lucHV0VGV4dHVyZS0+YmluZFRpbGUoMCk7CisjZWxzZQor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICht
X2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCkgIT0gLTEpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5oCmluZGV4IGI4Nzk2ZTgwMjkxOGJjYjZhYTM1NzBkMTkzY2NjYmRmM2Qx
YzllNjMuLjBhMWI3ZDFhMDE5NmRjZmJmMzM4YTI4OTJmNTE2MmM5ZWM0NTQ4MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uaApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNlbmRpZgor
CiAvLyBBbm5veWluZ2x5LCB3aW5nZGkuaCAjZGVmaW5lcyB0aGlzLgogI2lmZGVmIFBBU1NUSFJP
VUdICiAjdW5kZWYgUEFTU1RIUk9VR0gKQEAgLTQ0LDcgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gQ1NTIEZpbHRlcnMKIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCitjbGFz
cyBGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsdGVyT3Bl
cmF0aW9uPiB7CisjZWxzZQogY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CisjZW5kaWYKIHB1YmxpYzoKICAgICBlbnVtIE9wZXJhdGlv
blR5cGUgewogICAgICAgICBSRUZFUkVOQ0UsIC8vIHVybCgjc29tZWZpbHRlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhZjE4Y2MxZTkzNzZjNzAxMzI5MjM3MDM3N2E1
Y2M4NjE3YmQyNjJmLi4xOTdkMTBlNTFkNThmNzU3ZGI5NWU1ZTNiOTM5YWM2ZTdmZWIxY2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlCkBAIC0xNzMsOSArMTczLDE1IEBAIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XT1JLRVJTIE9OKQogCiBJRiAo
RU5BQkxFX0dMRVMyKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV8zRF9SRU5ERVJJTkcgT04pCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBPTikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0ZJTFRFUlMgT04pCisgICAgV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TSEFERVJTIE9OKQogICAgIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJHTCBPTikKIEVMU0UgKCkKICAgICBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfUkVOREVSSU5HIE9GRikKKyAg
ICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRf
Q0FOVkFTIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
Q1NTX0ZJTFRFUlMgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfU0hBREVSUyBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1dFQkdMIE9GRikKIEVORElGICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggZTI1NmIw
ZTU4YTQwMzE2MWE5ZWFkNGIzNjM2MWEzYzJiZDU5MWI5YS4uYjI0NjI5MTEzNDM3ZDgxNDQ2MmY2
MGEwZjczN2M0ODNmYzk3YjhjMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTI1LDYgKzI1LDggQEAKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfQ1NTX1ZBUklBQkxFUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTUzNfRkxFWEJPWAor
I2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19GSUxURVJTCisjY21ha2VkZWZpbmUwMSBFTkFCTEVf
Q1NTX1NIQURFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIK
ICNjbWFrZWRlZmluZTAxIEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDBlYWVkNzU5OTg3MzIxNTMyNDBmYmE5MGVhNGUxZTZhODky
NDEwZTMuLmMxYzRkZjUwYTdkOWQ2NTQ4MWFkZjU0YzY5OWI3NjQ1YThkMjg2MWYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0wNy0zMSAgSm9zaHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+
CisKKyAgICAgICAgW0JsYWNrQmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0
ZXIgZWZmZWN0cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hh
ZGVycykgYW5kIHJlZmVyZW5jZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbTogQWNrbm93bGVkZ2UgQ1NTIGZpbHRlciBl
ZmZlY3RzLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBFdmVudFNlbmRlciBpbnRvIFRlc3RSdW5u
ZXIuYQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBt
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDc3Y2MxZjc2
MzIwZmFjZDRhZWNlNzgyMWU5M2M5ZGJhNmU2M2NkMTMuLjM0NDUwOWY2Zjc4NWVmYmU5MzRkYmQz
ZGUzZmJlMTAzYWYwMjEyZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0KQEAgLTE2Myw3ICsxNjMsNyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4g
IkVOQUJMRV9DU1NfRVhDTFVTSU9OUyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3NFeGNs
dXNpb25zU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImNzcy1maWx0ZXJzIiwgZGVzYyA9
PiAiVG9nZ2xlIENTUyBGaWx0ZXJzIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
Q1NTX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQoKSwgdmFsdWUgPT4gXCRjc3NG
aWx0ZXJzU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQ1NTX0ZJTFRFUlMiLCBk
ZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQoKSB8fCBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRj
c3NGaWx0ZXJzU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImNzczMtZmxleGJveCIsIGRl
c2MgPT4gIlRvZ2dsZSBDU1MzIEZsZXhib3ggc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9DU1MzX0ZMRVhCT1giLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkY3NzM0ZsZXhib3hT
dXBwb3J0IH0sCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2I0OTE2
NGRhN2ZmMzQzMGRlZDAzZTk1YjdlMGI4NDJjY2ZkMzNmYi4uYjA2MjliYTA0ODEyNzIyMmY1OTUy
YThhOGFmNWJhOTQ1MzQ1MWI5ZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTMxICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0
dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gRW5hYmxlIENTUyBGaWx0
ZXIgRWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTI2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBFbmFibGUgQ1NTIGZpbHRlciBlZmZlY3RzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgY3VzdG9t
IGVmZmVjdHMgKENTUyBzaGFkZXJzKSBhbmQgcmVmZXJlbmNlIGVmZmVjdHMgKFNWRyBlZmZlY3Rz
KQorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlOiBBZGQg
TGF5ZXJGaWx0ZXJSZW5kZXJlcgorICAgICAgICAqIFNvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtl
OiBBY2tub3dsZGdlIENTUyBmaWx0ZXIgZWZmZWN0cworCiAyMDEyLTA3LTMxICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFBlcmYtby1tYXRpYzogZGFzaGJvYXJk
IGltYWdlcyBhcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSBmcm9tIGluY3JlbWVudGFsbHkgdXBk
YXRlZCBKU09OCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155589</attachid>
            <date>2012-07-31 11:25:54 -0700</date>
            <delta_ts>2012-07-31 11:41:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731142435.patch</filename>
            <type>text/plain</type>
            <size>62063</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uN2YyNmU4ZDFkNzcyNjQ5MjU0NDg0OTYwMzcxZDE1
ZTExNjJiMDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJPdmVycmlkZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6ZmlsdGVyQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRGaWx0ZXJBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoTGF5ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6ZmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVbmlmb3JtZjo6VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTFmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMWY6OlVuaWZvcm0xZik6CisgICAgICAgIChXZWJD
b3JlOjpVbmlmb3JtMmY6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm0zZjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTNmOjpVbmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
fkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjpwb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybWY6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAg
ICAgICAoVW5pZm9ybTNmKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxkUHVzaFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNl
dFB1c2hTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpzaG91bGRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpzZXRQb3BTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjphcHBlbmRVbmlmb3JtKToKKyAgICAgICAgKExheWVyRmlsdGVy
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmRpc2FibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oOgorICAgICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpbHRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorCiAyMDEyLTA3LTMxICBB
bGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiB0YWtlIGludG8gYWNjb3VudCB0aGUgd2hvbGUgc2VjdXJpdHkgb3JpZ2luIGluc3Rl
YWQgb2YganVzdCBob3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUzNjEwZGY5MjNjOTAxOWQ4
NmZkNGJiZmNmZDdlNGM5MjhiNGFjNjkuLjIzZDI1MjFjY2QwMjMyYTQ3MDdlNDU5YTgyY2Y5ZmQx
ODIzMDI1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDM4LDYgKzEwMzgsNyBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAgICBjc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5j
cHAKKyAgICBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCiAgICAgY3NzL1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcAogICAgIGNzcy9XcmFwU2hhcGVGdW5jdGlvbnMuY3BwCiAKQEAgLTE2
MDUsNiArMTYwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNoYWRlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAKICAgICBsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTE4MjEsMTAgKzE4MjMsMTEgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTg0OSwxNiArMTg1MiwxNSBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vTkVPTkhlbHBlcnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFQmxl
bmRORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUNvbXBvc2l0ZUFy
aXRobWV0aWNORU9OLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRp
bmdORU9OLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdO
RU9OLmgKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDFhZTVmZTY5MDdh
NDczODQwOTlmYWViMGM3OWMyYWY5ZDFhYmJiY2UuLmE4MTZiMTQ4OTA1YzYzOGViN2Y4NjdiZTNm
YWQ0M2IzNzZmM2VmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
QEAgLTI3Miw2ICsyNzIsNyBAQCBJRiAoV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0xheWVyQmxhY2tCZXJyeS5jcHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcAorICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKICAgICAgICAgJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5j
cHAKICAgICAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3Bw
CmluZGV4IDFiODFmNTRkZDAzOGU0ZWQ2ZTI1OTUwZjg5M2MxN2I2NGFiZGFkMTQuLmUyNzc5YzNj
MjFlYzEyZDZlNDZlZGRhZDU4ODdkOWFjMjI3YWI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0yOTIsNiArMjkzLDI2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBoYXNGaXhlZEFuY2VzdG9yCiAgICAg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogfQogCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmIChtX2ZpbHRlcnMgPT0gZmlsdGVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMg
PSBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OworICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAgICB1
cGRhdGVGaWx0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWx0ZXJzLmNsZWFyKCk7
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkNvbXBv
c2l0ZUZpbHRlcnM7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNr
Z3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC04MDMsNiAr
ODI0LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVyQmFja2dy
b3VuZENvbG9yKCkKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50
c0xheWVyKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OnVwZGF0ZUZpbHRlcnMoKQoreworICAgIGlmICghbV9maWx0ZXJzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbWFyeUxheWVyKCktPnNldEZpbHRlcnMobV9m
aWx0ZXJzKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRh
dGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgdHJhbnNmb3JtIGxheWVy
LCB0aGUgdHJhbnNmb3JtIG11c3QgYmUgc2V0IG9uIHRoYXQgbGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
R3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRleCBjMjY2OTQ3YWYxYzlhYjM1OWI1MzViOTRk
ZWQ1NjhjYjcyMjRkNmQ5Li5kOGQ2YjZhZTkzYjEzMDExZmNmMWIxMmMwZmQxNTgzODM2YjI0ZmRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCkBAIC0yOSwxMyAr
MjksMTUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2RlZmluZSBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw2ICs3
OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQ29udGFpbmVyKGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGJvb2wp
OwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBmaWx0
ZXIgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdG9yCisgICAgdmlydHVhbCBib29sIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyAmKTsKKyAgICBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKIApAQCAtMTQ2LDYgKzE1NCw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVIYXNGaXhlZENvbnRhaW5lcigpOwogICAgIHZvaWQg
dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJC
YWNrZ3JvdW5kQ29sb3IoKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCB1cGRh
dGVGaWx0ZXJzKCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoKTsKIAogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZShJbWFnZSopOwpAQCAtMTU5LDYgKzE3MCwxMCBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbV90cmFuc2Zvcm1MYXllcjsK
ICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fY29udGVudHNMYXllcjsKIAorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX3J1bm5pbmdBbmltYXRp
b25zOwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmlt
YXRpb25zOwogICAgIGRvdWJsZSBtX3N1c3BlbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggYzc1MGViZDI4NjQ3YzZkMWViMmIwZWFlMzA4OWRl
Nzc3MDcyNjRhZi4uODFjOTE4MDhkM2Y5YTBkZGExNWEyMTM0ZDY5ZmVmMjM0MmYzMmNmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC03OSw2ICs3OSw5
IEBAIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQoTGF5ZXJU
eXBlIHR5cGUsIExheWVyQ29tcG9zaXRpbmdUCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAg
LCBtX2NvbW1pdFNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgLCBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNl
KQorI2VuZGlmCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
aW5kZXggYjMzNTYwNjY5YzUxNDBkYzVkNWY5MjAxMmEzMDM1MTliZTAxMTliMC4uZGYwNzg0NDcx
MWIyMzVjMjM5NjZlMWY3YTFjNGIzYTg2MTYwZWZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgKQEAgLTM1LDkgKzM1LDExIEBACiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJM
YXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKICNpbmNsdWRlICJMYXllclRpbGVyLmgiCiAKQEAgLTEw
MSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgZmxvYXQgbV9vcGFjaXR5OworCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CiAKICAgICB1bnNp
Z25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKQEAgLTExMCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7CiB9OwogCitjbGFzcyBMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOworCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+LCBwdWJsaWMgTGF5ZXJEYXRh
LCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQb2ludGVyQmFzZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gY3JlYXRl
KExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCopOwpAQCAtMjA3LDYgKzIx
MiwxNCBAQCBwdWJsaWM6CiAgICAgTGF5ZXJPdmVycmlkZSogb3ZlcnJpZGUoKTsKICAgICB2b2lk
IGNsZWFyT3ZlcnJpZGUoKTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGZp
bHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJPcGVyYXRpb25z
Q2hhbmdlZDsgfQorICAgIHZvaWQgc2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoYm9vbCBjaGFu
Z2VkKSB7IG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQgPSBjaGFuZ2VkOyB9CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gZmlsdGVyQWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyQWN0aW9uczsgfQorICAgIHZvaWQgc2V0RmlsdGVyQWN0aW9u
cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4mIGFjdGlv
bnMpIHsgbV9maWx0ZXJBY3Rpb25zID0gYWN0aW9uczsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5MYXllckNvbXBvc2l0aW5nVGhyZWFkKCk7CiAKQEAgLTI1MSw2ICsyNjQs
MTEgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxMYXllck92ZXJyaWRlPiBtX292ZXJyaWRlOwog
ICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIG1fY2xpZW50OworCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIGJvb2wgbV9maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gbV9maWx0ZXJBY3Rpb25z
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAppbmRl
eCBkOTkxMjE1NTExMTE5MGM1ZjRjNmJjMTIxMjE1NzQxMWExMTFlODc1Li43ZWM1ODFiOGRhNDk5
MTJjNjBhYTMxZmQwNjlmMjE0YjNjY2Y4NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNkZWZpbmUgTGF5ZXJEYXRhX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC01OSw2ICs2MCwyNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllclByb2dyYW1TaGFkZXJC
R1JBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZMYXllclByb2dyYW1T
aGFkZXJzIH07CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgZW51bSBDU1NGaWx0ZXJT
aGFkZXJzIHsgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTRmlsdGVyU2hhZGVySW52ZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0Zp
bHRlclNoYWRlckJyaWdodG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmls
dGVyU2hhZGVyQ29udHJhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVy
U2hhZGVyT3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFk
ZXJCbHVyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJCbHVy
WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTaGFkb3csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gsCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0Zp
bHRlclNoYWRlckN1c3RvbSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bWJlck9mQ1NTRmlsdGVyU2hhZGVycyB9OworI2VuZGlmCisKICAgICBMYXllckRhdGEoTGF5ZXJU
eXBlIHR5cGUpCiAgICAgICAgIDogbV9sYXllclR5cGUodHlwZSkKICAgICAgICAgLCBtX2FuY2hv
clBvaW50KDAuNSwgMC41KQpAQCAtMTE1LDYgKzEzNSwxMCBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJzOyB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVy
biBtX2lzT3BhcXVlOyB9CiAKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQpAQCAtMTc3LDYgKzIwMSw5IEBAIHByb3RlY3RlZDoKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogCiAgICAgZmxvYXQgbV9vcGFj
aXR5OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKKyNlbmRpZgogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwogICAgIGZsb2F0IG1fYm9y
ZGVyV2lkdGg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg3OTdjMTBmMzZlMDkyMWY2NDQxZDI5YWNhNzUxNjlmMTQxNjNmZmUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RmlsdGVyUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorCisjaW5jbHVkZSAi
TGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKKworI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtTG9nLmg+CisjaW5jbHVkZSA8VmVjdG9yLmg+CisKKyNpbmNsdWRlIDxjc3RyaW5n
PgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50
IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChjb25zdCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUmIHQpCit7CisgICAgc3dpdGNoICh0KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyR3Jh
eXNjYWxlOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgcmV0dXJu
IExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2VwaWE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJT
YXR1cmF0ZTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAg
cmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRlOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckludmVydDsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAg
ICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyT3BhY2l0eTsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyQnJpZ2h0bmVzczsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckNvbnRyYXN0Owor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJCbHVyWTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvdzsK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyQ3VzdG9tOworI2VuZGlmCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9Cit9CisKK1VuaWZvcm1mOjpVbmlmb3JtZihpbnQgY19sb2NhdGlvbikKKyAg
ICA6IG1fbG9jYXRpb24oY19sb2NhdGlvbikKK3sKK30KKwordm9pZCBVbmlmb3JtMWY6OmFwcGx5
KCkKK3sKKyAgICBnbFVuaWZvcm0xZihsb2NhdGlvbigpLCBtX3ZhbCk7Cit9CisKK1Bhc3NSZWZQ
dHI8VW5pZm9ybWY+IFVuaWZvcm0xZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9ybTFmKGxvY2F0aW9uLCB2YWwpKTsKK30K
KworVW5pZm9ybTFmOjpVbmlmb3JtMWYoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsKQorICAg
IDogVW5pZm9ybWYoY19sb2NhdGlvbikKKyAgICAsIG1fdmFsKGNfdmFsKQoreworfQorCit2b2lk
IFVuaWZvcm0yZjo6YXBwbHkoKQoreworICAgIGdsVW5pZm9ybTJmKGxvY2F0aW9uKCksIG1fdmFs
WzBdLCBtX3ZhbFsxXSk7Cit9CisKK1Bhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0yZjo6Y3Jl
YXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFVuaWZvcm0yZihsb2NhdGlvbiwgdmFsMCwgdmFsMSkpOworfQorCitVbmlm
b3JtMmY6OlVuaWZvcm0yZihpbnQgY19sb2NhdGlvbiwgZmxvYXQgY192YWwwLCBmbG9hdCBjX3Zh
bDEpCisgICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQoreworICAgIG1fdmFsWzBdID0gY192YWww
OworICAgIG1fdmFsWzFdID0gY192YWwxOworfQorCit2b2lkIFVuaWZvcm0zZjo6YXBwbHkoKQor
eworICAgIGdsVW5pZm9ybTNmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxb
Ml0pOworfQorCitQYXNzUmVmUHRyPFVuaWZvcm1mPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9j
YXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBVbmlmb3JtM2YobG9jYXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKK30K
KworVW5pZm9ybTNmOjpVbmlmb3JtM2YoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxv
YXQgY192YWwxLCBmbG9hdCBjX3ZhbDIpCisgICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQorewor
ICAgIG1fdmFsWzBdID0gY192YWwwOworICAgIG1fdmFsWzFdID0gY192YWwxOworICAgIG1fdmFs
WzJdID0gY192YWwyOworfQorCitQYXNzUmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+
IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShpbnQgcHJvZ3JhbUlkKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbihwcm9ncmFtSWQp
KTsKK30KKworTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbihpbnQgY19wcm9ncmFtSWQpCisgICAgLCBtX3Byb2dyYW1JZChjX3Byb2dyYW1JZCkKKyAg
ICAsIG1fcHVzaFNuYXBzaG90KGZhbHNlKQorICAgICwgbV9wb3BTbmFwc2hvdChmYWxzZSkKK3sK
K30KKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25PbihMYXllckZp
bHRlclJlbmRlcmVyKiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQobV9wcm9ncmFtSWQgIT0gLTEp
OworICAgIGlmIChtX3Byb2dyYW1JZCA9PSAtMSkgeworICAgICAgICBnbFVzZVByb2dyYW0ocmVu
ZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
clBhc3N0aHJvdWdoXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ2xVc2VQcm9ncmFt
KHJlbmRlcmVyLT5tX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbbV9wcm9ncmFtSWRdKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91bmlmb3Jtcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV91bmlmb3Jtc1tpXS0+YXBwbHkoKTsKK30KKworUGFzc093blB0cjxMYXllckZpbHRlclJlbmRl
cmVyPiBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0
aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMYXllckZpbHRlclJlbmRlcmVyKHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3JkTG9jYXRp
b24pKTsKK30KKworTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcihjb25z
dCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKKyAg
ICA6IG1fcG9zaXRpb25Mb2NhdGlvbihwb3NpdGlvbkxvY2F0aW9uKQorICAgICwgbV90ZXhDb29y
ZExvY2F0aW9uKHRleENvb3JkTG9jYXRpb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBM
YXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbaV0gPSAwOworCisgICAgaWYgKCEobV9lbmFibGVkID0gaW5pdGlh
bGl6ZVNoYXJlZEdMT2JqZWN0cygpKSkKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Omxv
Z0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiQ1NTIEZpbHRlcnMg
YXJlIG5vdCBlbmFibGVkIGR1ZSB0byBmYWlsZWQgaW5pdGlhbGl6YXRpb24uIik7Cit9CisKKy8v
IEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jv
c3MgYWxsIHByb2dyYW1zCisvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGFsbG93cyB0
aGUgY29kZSB0byBiaW5kIHRoZSBhdHRyaWJ1dGVzIG9ubHkgb25jZQorLy8gZXZlbiB3aGVuIHN3
aXRjaGluZyBiZXR3ZWVuIHByb2dyYW1zLgorLy8KKy8vIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9m
IExheWVyUmVuZGVyZXI6OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbiBhbmQgdGhlIGxvY2F0aW9u
cworLy8gd2lsbCBtYXRjaCB0aG9zZSBvZiBMYXllclJlbmRlcmVyLiBTZWUgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcigpCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6
OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIGF0dHJp
Yk5hbWUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NT
RmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbaV0sIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKK30KKworYm9vbCBM
YXllckZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKK3sKKyAgICAv
LyBTZWUgYWxzbyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKworICAgIGNoYXIgdmVy
dGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsg
ICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkg
ICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsgIFxuIgorICAgICAg
ICAiICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iOworCisjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBc
CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iXAorICAgICAgICAiXG4iXAor
ICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICJ1
bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTtcbiJcCisgICAgICAgICJ1bmlmb3JtIGhp
Z2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4o
dm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4
Q29vcmQpKTsgfSIKKworI2RlZmluZSBPRkZTRVRfRklMVEVSKHguLi4pIFwKKyAgICAgICAgInBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2YXJ5
aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAgInVuaWZvcm0gbG93cCBz
YW1wbGVyMkQgc190ZXh0dXJlO1xuIlwKKyAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9h
bW91bnQ7XG4iXAorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgdV9vZmZzZXQ7XG4iXAor
ICAgICAgICAjeFwKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0g
c2hhZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCAtIHVfb2Zmc2V0KSk7IH0iCisK
KyNkZWZpbmUgQkxVUl9GSUxURVIoeC4uLikgXAorICAgICAgICAicHJlY2lzaW9uIGhpZ2hwIGZs
b2F0OyBcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2
X3RleENvb3JkO1xuIlwKKyAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJl
O1xuIlwKKyAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAorICAgICAg
ICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2JsdXJTaXplO1xuIlwKKyAgICAgICAgImNvbnN0IGZs
b2F0IHBpID0gMy4xNDE1OTI3O1xuIlwKKyAgICAgICAgI3hcCisgICAgICAgICJ2b2lkIG1haW4o
dm9pZClcbiJcCisgICAgICAgICJ7XG4iXAorICAgICAgICAidmVjMyBpbmNyO1xuIlwKKyAgICAg
ICAgImluY3IueCA9IDEuMCAvIChzcXJ0KDIuMCAqIHBpKSAqIHVfYW1vdW50KTtcbiJcCisgICAg
ICAgICJpbmNyLnkgPSBleHAoLTAuNSAvICh1X2Ftb3VudCAqIHVfYW1vdW50KSk7XG4iXAorICAg
ICAgICAiaW5jci56ID0gaW5jci55ICogaW5jci55O1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAg
ICAgInZlYzQgYXZnID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuIlwKKyAgICAgICAgImZs
b2F0IGNvZWZmaWNpZW50U3VtID0gMC4wO1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImF2
ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5KSAqIGluY3IueDtcbiJcCisg
ICAgICAgICJjb2VmZmljaWVudFN1bSArPSBpbmNyLng7XG4iXAorICAgICAgICAiaW5jci54eSAq
PSBpbmNyLnl6O1xuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImZvciAoZmxvYXQgaSA9IDEu
MDsgaSA8PSBudW1CbHVyUGl4ZWxzUGVyU2lkZTsgaSsrKSB7XG4iXAorICAgICAgICAiICAgIGF2
ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5IC0gaSAqIHVfYmx1clNpemUg
KiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBhdmcgKz0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSArIGkgKiB1X2JsdXJTaXplICogYmx1ck11
bHRpcGx5VmVjKSAqIGluY3IueDtcbiJcCisgICAgICAgICIgICAgY29lZmZpY2llbnRTdW0gKz0g
Mi4wICogaW5jci54O1xuIlwKKyAgICAgICAgIiAgICBpbmNyLnh5ICo9IGluY3IueXo7XG4iXAor
ICAgICAgICAifVxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgImdsX0ZyYWdDb2xvciA9IGF2
ZyAvIGNvZWZmaWNpZW50U3VtO1xuIlwKKyAgICAgICAgIn0iCisKKyAgICBjb25zdCBjaGFyKiBz
aGFkZXJTdHJzW0xheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzXTsKKworICAgIHNo
YWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGVdID0gU1RBTkRBUkRf
RklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcy
MiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAt
IDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAq
IGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Cisg
ICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlclNlcGlhXSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQg
PSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3
ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5n
ICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMx
NCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3Iu
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44
NjkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEp
OworICAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyU2F0dXJhdGVdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQg
c2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVj
NCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAq
IGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIg
LSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAo
MC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVf
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1vdW50KSAqIGNvbG9yLmIs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisK
KyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySHVlUm90YXRlXSA9IFNU
QU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2OworICAgICAgICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8g
MTgwLjApOworICAgICAgICAgICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8g
MTgwLjApOworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAw
Ljc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAu
NzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0
MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIg
KiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAq
ICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAq
IDAuOTI4ICsgcyAqIDAuMDcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwor
ICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJT
aGFkZXJJbnZlcnRdID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIGZsb2F0IGludmVy
dChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAg
LSB1X2Ftb3VudCk7IH0KKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZl
cnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICAp
OworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJyaWdodG5lc3Nd
ID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4w
ICsgdV9hbW91bnQpLCBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzaGFkZXJT
dHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQ29udHJhc3RdID0gU1RBTkRBUkRfRklMVEVS
KAorICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4g
LSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3Qo
Y29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7
CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlck9wYWNpdHldID0gU1RBTkRBUkRfRklMVEVSKAorICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmVjNChj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOworICAgICAgICB9
CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVy
WF0gPSBCTFVSX0ZJTFRFUigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1BlclNp
ZGUgPSAyLjA7CisgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVj
MigxLjAsIDAuMCk7CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0
ZXJTaGFkZXJCbHVyWV0gPSBCTFVSX0ZJTFRFUigKKyAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1
clBpeGVsc1BlclNpZGUgPSAyLjA7CisgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZl
YyAgICAgID0gdmVjMigwLjAsIDEuMCk7CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3ddID0gT0ZGU0VUX0ZJTFRFUigKKyAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzMgdV9jb2xvcjsKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbG9yLmEgPiAwLjUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQodV9jb2xvci5yLCB1X2NvbG9yLmcsIHVfY29sb3IuYiwg
Y29sb3IuYSk7CisgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgIH0KKyAgICApOwor
CisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSA9
IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisgICAg
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRl
clNoYWRlcnM7IGkrKykgeworICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBM
YXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHNoYWRl
clN0cnNbaV0pOworICAgICAgICBpZiAoIW1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSkgewor
ICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiQ291bGQgbm90IGxvYWQgQ1NTIEZpbHRlciBTaGFkZXIg
JWkiLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFNldCBBVFRSSUIgbG9jYXRpb25zIC0gdGhlc2Ugd2lsbCBiZSB0aGUgc2FtZSBhcyB0
aGUgcHJvZ3JhbXMgaW4gTGF5ZXJSZW5kZXJlci5jcHAKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9j
YXRpb24obV9wb3NpdGlvbkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpOworICAgIGJpbmRDb21tb25B
dHRyaWJMb2NhdGlvbihtX3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3JkIik7CisKKyAgICAv
LyBSZS1saW5rIHRvIHRha2UgZWZmZWN0CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRh
dGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQorICAgICAgICBnbExpbmtQcm9ncmFt
KG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSk7CisKKyAgICAvLyBHZXQgVU5JRk9STSBsb2Nh
dGlvbnMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0
ZXJTaGFkZXJzOyArK2kpCisgICAgICAgIG1fYW1vdW50TG9jYXRpb25baV0gPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0sICJ1X2Ftb3VudCIpOworCisg
ICAgbV9ibHVyQW1vdW50TG9jYXRpb25bMF0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0sICJ1X2Js
dXJTaXplIik7CisgICAgbV9ibHVyQW1vdW50TG9jYXRpb25bMV0gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJC
bHVyWF0sICJ1X2JsdXJTaXplIik7CisKKyAgICBtX3NoYWRvd0NvbG9yTG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJTaGFkb3ddLCAidV9jb2xvciIpOworICAgIG1fb2Zmc2V0TG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJTaGFkb3ddLCAidV9vZmZzZXQiKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OnBpbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2Uq
IHN1cmZhY2UpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZS0+dGV4dHVyZUlk
KCksIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+dGV4dHVy
ZSgpLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cG9uZyhM
YXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
c3VyZmFjZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKK30KKwordm9pZCBMYXllckZp
bHRlclJlbmRlcmVyOjpwdXNoU25hcHNob3QoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2Us
IGludCBzb3VyY2VJZCkKK3sKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVG
RkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9zbmFwc2hvdFRleHR1
cmUtPnRleHR1cmVJZCgpLCAwKTsKKworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
c291cmNlSWQpOworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7IC8vIHRvIHRyYW5z
cGFyZW5jeQorCisgICAgZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwg
c3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKTsKKworICAgIGdsVXNlUHJvZ3JhbShtX2Nzc0ZpbHRl
clByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaF0pOwor
ICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworfQorCit2b2lkIExheWVy
RmlsdGVyUmVuZGVyZXI6OnBvcFNuYXBzaG90KCkKK3sKKyAgICAvLyBUaGUgbmFtZSBpcyBzbGln
aHRseSBtaXNsZWFkaW5nLgorICAgIC8vIFRoaXMgRFJBV1MgdGhlIHByZXZpb3VzIHRleHR1cmUg
dXNpbmcgdGhlIGN1cnJlbnQgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbiwgdGhlbiBzZXRzIHRo
ZSB0ZXh0dXJlCisgICAgLy8gdG8gdGhlIHNuYXBzaG90IHRleHR1cmUuIE5leHQgdGltZSBnbERy
YXdBcnJheXMgaXMgY2FsbGVkLCB0aGUgc25hcHNob3Qgd2lsbCBiZSBkcmF3bi4KKworICAgIGds
RHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9zbmFwc2hvdFRleHR1cmUtPnRleHR1cmVJZCgpKTsKK30KKworVmVjdG9y
PFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IExheWVyRmlsdGVyUmVuZGVyZXI6
OmFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlLCBjb25z
dCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BzKQoreworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiByZXQ7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBvcGVyYXRpb24gPSAqb3BzW2ldLmdldCgpOworICAgICAgICBpZiAob3BlcmF0
aW9uLmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkJMVVIgJiYgc3RhdGlj
X2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuc3RkRGV2aWF0aW9u
KCkudmFsdWUoKSA8IDAuMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGludCBw
cm9ncmFtSWQgPSBvcGVyYXRpb25UeXBlVG9Qcm9ncmFtSUQob3BlcmF0aW9uLmdldE9wZXJhdGlv
blR5cGUoKSk7CisgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
Y3JlYXRlKHByb2dyYW1JZCkpOworCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJh
dGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6
Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQorICAgICAgICAgICAgICAgICwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVT
UzoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVu
ZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCisg
ICAgICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgLy8gQmx1ciBpcyBhIHR3by1zdGVwIHByb2Nlc3M6CisgICAgICAgICAgICAv
LyAgICAgMS4gYmx1ciBYCisgICAgICAgICAgICAvLyAgICAgMi4gYmx1ciBZCisgICAgICAgICAg
ICAvLyBUaGlzIHdheSB3ZSBjYW4gaGF2ZSAybiB0aW1lIGluc3RlYWQgb2Ygbl4yIHRpbWUpCisK
KyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKS52YWx1ZSgpOworCisgICAgICAg
ICAgICAvLyBCTFVSIFk6CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVu
aWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFk
ZXJCbHVyWV0sIGFtb3VudCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9y
bShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblswXQorICAgICAgICAgICAg
ICAgICwgMS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpKTsKKworICAgICAg
ICAgICAgLy8gQkxVUiBYOgorICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWCkpOworICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ft
b3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdLCBhbW91bnQpKTsK
KyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUo
bV9ibHVyQW1vdW50TG9jYXRpb25bMV0KKyAgICAgICAgICAgICAgICAsIDEuMGYgLyBmbG9hdChz
dXJmYWNlLT5zaXplKCkud2lkdGgoKSkpKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNoYWRvdyBpcyBhIGZvdXItc3RlcCBwcm9jZXNzOgor
ICAgICAgICAgICAgLy8gICAgIDEuIGNhcHR1cmUgc25hcHNob3QKKyAgICAgICAgICAgIC8vICAg
ICAgICB0dXJuIGludG8gYSBzb2xpZCBvZmZzZXQgbWFzaworICAgICAgICAgICAgLy8gICAgIDIu
IGJsdXIgWAorICAgICAgICAgICAgLy8gICAgIDMuIGJsdXIgWQorICAgICAgICAgICAgLy8gICAg
IDQuIHJlcGFpbnQgb3JpZ2luYWwgb24gdG9wIG9mIG1hc2sKKyAgICAgICAgICAgIGNvbnN0IERy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRzZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCkt
PnNldFB1c2hTbmFwc2hvdCgpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9y
bShVbmlmb3JtMmY6OmNyZWF0ZShtX29mZnNldExvY2F0aW9uCisgICAgICAgICAgICAgICAgLCBm
bG9hdChkc2ZvLngoKSkgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkud2lkdGgoKSkKKyAgICAgICAg
ICAgICAgICAsIGZsb2F0KGRzZm8ueSgpKSAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS5oZWlnaHQo
KSkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTNmOjpj
cmVhdGUobV9zaGFkb3dDb2xvckxvY2F0aW9uCisgICAgICAgICAgICAgICAgLCBmbG9hdChkc2Zv
LmNvbG9yKCkucmVkKCkpIC8gMjU1LjBmCisgICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNv
bG9yKCkuZ3JlZW4oKSkgLyAyNTUuMGYKKyAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29s
b3IoKS5ibHVlKCkpIC8gMjU1LjBmKSk7CisKKyAgICAgICAgICAgIC8vIEJMVVIgWQorICAgICAg
ICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWSkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBw
ZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6
Q1NTRmlsdGVyU2hhZGVyQmx1clldCisgICAgICAgICAgICAgICAgLCBkc2ZvLnN0ZERldmlhdGlv
bigpKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6
Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8g
ZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICAvLyBCTFVS
IFgKKyAgICAgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3Jl
YXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clgpKTsKKyAgICAgICAgICAgIHJldC5s
YXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltM
YXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXQorICAgICAgICAgICAgICAgICwgZHNmby5z
dGREZXZpYXRpb24oKSkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShV
bmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAgICAgICAgICAg
ICwgMS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKSkpOworCisgICAgICAgICAg
ICAvLyBSZXBhaW50IG9yaWdpbmFsIGltYWdlCisgICAgICAgICAgICByZXQuYXBwZW5kKExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBh
c3N0aHJvdWdoKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5zZXRQb3BTbmFwc2hvdCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHJldC5zaXplKCkgJSAyKSAvLyBXZSBuZWVkIGFuIGV2ZW4g
bnVtYmVyIG9mIGFjdGlvbnMuIFNlZSBwaW5nLXBvbmcgbm90ZSBpbiBhcHBseUxheWVyRmlsdGVy
cygpLgorICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0
ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoKSk7CisKKyAgICByZXR1cm4g
cmV0OworfQorCitzdGF0aWMgZmxvYXQgdGV4Y29vcmRzWzQgKiAyXSA9IHsgMCwgMCwgIDAsIDEs
ICAxLCAxLCAgMSwgMCB9OworCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OmFwcGx5QWN0aW9u
cyh1bnNpZ25lZCYgZmJvLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgVmVjdG9yPFJl
ZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGFjdGlvbnMpCit7CisgICAgZ2xDbGVh
ckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworICAgIEFTU0VSVCghKGFjdGlvbnMuc2l6
ZSgpICUgMikpOyAvLyBTZWUgcGluZy1wb25naW5nIG5vdGUgYmVsb3cuCisKKyAgICBpZiAoIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsYXllci0+ZmlsdGVycygpLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1f
dGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmNyZWF0ZVRleHR1cmUo
KTsKKworICAgIGJvb2wgcmVxdWlyZVNuYXBzaG90ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFjdGlvbnNb
aV0tPnNob3VsZFB1c2hTbmFwc2hvdCgpKQorICAgICAgICAgICAgcmVxdWlyZVNuYXBzaG90ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fc25hcHNob3RUZXh0dXJlICYmIHJlcXVpcmVTbmFw
c2hvdCkKKyAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZCgpLT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICBMYXllclJlbmRlcmVyU3VyZmFjZSog
c3VyZmFjZSA9IGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgpOworCisgICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRUcmFu
c2Zvcm1lZEJvdW5kcygpICk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4Q29vcmRM
b2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworCisgICAgbV90
ZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6ZSgpKTsKKyAgICBpZiAocmVx
dWlyZVNuYXBzaG90KQorICAgICAgICBtX3NuYXBzaG90VGV4dHVyZS0+cHJvdGVjdChzdXJmYWNl
LT50ZXh0dXJlKCktPnNpemUoKSk7CisKKyAgICBpZiAoIWZibykKKyAgICAgICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnMoMSwgJmZibyk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgZmJvKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBOT1RFIEFCT1VUIFBJTkctUE9OR0lORworICAgICAgICAv
LyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLyBVbmRlciBPcGVuR0wgRVMgMi4w
LCB3ZSBjYW5ub3QgdXNlIHRoZSBmYm8gd2UgYXJlIHdyaXR0aW5nIHRvIGFzIGEgdGV4dHVyZSwg
c28gd2UgbmVlZCB0byBwbGF5IHBpbmctcG9uZzoKKyAgICAgICAgLy8gIDEpIERyYXcgcGFyZW50
IHN1cmZhY2UgdG8gb3VyIHRleHR1cmUgd2l0aCBlZmZlY3QuCisgICAgICAgIC8vICAyKSBEcmF3
IG91ciBzdXJmYWNlIHRvIHBhcmVudCB0ZXh0dXJlIHdpdGggZWZmZWN0LgorICAgICAgICAvLyAg
MykgUmVwZWF0LgorICAgICAgICAvLyBCZWNhdXNlIHdlIGV2ZW50dWFsbHkgaGF2ZSB0byBlbmQg
b24gdGhlIHBhcmVudCB0ZXh0dXJlLCB3ZSBuZWVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFjdGlvbnMu
CisgICAgICAgIC8vIGFjdGlvbnNGb3JPcGVyYXRpb25zIHRha2VzIGNhcmUgb2YgdGhhdC4KKwor
ICAgICAgICBpZiAoYWN0aW9uc1tpXS0+c2hvdWxkUHVzaFNuYXBzaG90KCkpCisgICAgICAgICAg
ICBwdXNoU25hcHNob3Qoc3VyZmFjZSwgKCEoaSAlIDIpID8gc3VyZmFjZS0+dGV4dHVyZSgpLT50
ZXh0dXJlSWQoKSA6IG1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKworICAgICAgICBpZiAoIShp
ICUgMikpCisgICAgICAgICAgICBwaW5nKHN1cmZhY2UpOyAvLyBTZXQgZnJhbWVidWZmZXIgdG8g
b3VycywgYW5kIHRleHR1cmUgdG8gcGFyZW50CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBv
bmcoc3VyZmFjZSk7IC8vIFNldCB0ZXh0dXJlIHRvIHBhcmVudCwgYW5kIGZyYW1lYnVmZmVyIHRv
IHVzCisKKyAgICAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsgLy8gdG8gdHJhbnNw
YXJlbmN5CisgICAgICAgIGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCks
IHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAgYWN0aW9uc1tpXS0+dXNlQWN0
aW9uT24odGhpcyk7CisKKyAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFBvcFNuYXBzaG90
KCkpCisgICAgICAgICAgICBwb3BTbmFwc2hvdCgpOworCisgICAgICAgIGdsRHJhd0FycmF5cyhH
TF9UUklBTkdMRV9GQU4sIDAsIDQpOworICAgIH0KKworICAgIG1fdGV4dHVyZS0+dW5wcm90ZWN0
KCk7CisgICAgaWYgKHJlcXVpcmVTbmFwc2hvdCkKKyAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUt
PnVucHJvdGVjdCgpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAg
ICBnbENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKENTU19GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44M2QyYWI4M2Q1ZDQ5MDhkNGFmYzY1ZTY3ZTA2ZDA0YzBkZTEyMjg4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckZpbHRlclJlbmRlcmVyLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBMYXllckZpbHRlclJlbmRlcmVyX2gKKyNkZWZp
bmUgTGF5ZXJGaWx0ZXJSZW5kZXJlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJMYXllckRhdGEuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUdMRVMyQ29udGV4dC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bUludFJlY3RSZWdpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ7CitjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyOworY2xhc3MgTGF5ZXJGaWx0
ZXJSZW5kZXJlckFjdGlvbjsKK2NsYXNzIExheWVyUmVuZGVyZXJTdXJmYWNlOworCitjbGFzcyBV
bmlmb3JtZiA6IHB1YmxpYyBSZWZDb3VudGVkPFVuaWZvcm1mPiB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoVW5pZm9ybWYpOworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0g
MDsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm1mKGludCBsb2NhdGlvbik7CisgICAgY29uc3Qg
aW50JiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKworcHJpdmF0ZToK
KyAgICBpbnQgbV9sb2NhdGlvbjsKK307CisKK2NsYXNzIFVuaWZvcm0xZiA6IHB1YmxpYyBVbmlm
b3JtZiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShp
bnQgbG9jYXRpb24sIGZsb2F0IHZhbCk7CisKK3Byb3RlY3RlZDoKKyAgICBVbmlmb3JtMWYoaW50
IGxvY2F0aW9uLCBmbG9hdCB2YWwpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOworICAgIGZsb2F0IG1fdmFsOworfTsKKworY2xhc3MgVW5pZm9ybTJmIDogcHVibGljIFVu
aWZvcm1mIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtZj4gY3JlYXRl
KGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBVbmlmb3JtMmYoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxKTsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBmbG9hdCBtX3ZhbFsyXTsKK307
CisKK2NsYXNzIFVuaWZvcm0zZiA6IHB1YmxpYyBVbmlmb3JtZiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAs
IGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTNmKGlu
dCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWxbM107Cit9Owor
CitjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+IGNyZWF0ZShpbnQgcHJvZ3JhbUlkKTsKKyAgICAg
ICAgLy8gQSB2ZWN0b3Igb2YgYWN0aW9ucyBtdXN0IGhhdmUgYW4gZXZlbiBjb3VudCwgc28gaWYg
eW91IGhhdmUgYW4gb2RkIGNvdW50LCBhZGQgYSBwYXNzdGhyb3VnaCBldmVudCBhdCB0aGUgZW5k
LgorICAgICAgICAvLyBTZWUgdGhlIHBpbmctcG9uZyBub3RlIGluIExheWVyRmlsdGVyUmVuZGVy
ZXI6OmFwcGx5QWN0aW9ucy4KKyAgICB+TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbigpOworCisg
ICAgYm9vbCBzaG91bGRQdXNoU25hcHNob3QoKSB7IHJldHVybiBtX3B1c2hTbmFwc2hvdDsgfQor
ICAgIHZvaWQgc2V0UHVzaFNuYXBzaG90KCkgeyBtX3B1c2hTbmFwc2hvdCA9IDE7IH0KKworICAg
IGJvb2wgc2hvdWxkUG9wU25hcHNob3QoKSB7IHJldHVybiBtX3BvcFNuYXBzaG90OyB9CisgICAg
dm9pZCBzZXRQb3BTbmFwc2hvdCgpIHsgbV9wb3BTbmFwc2hvdCA9IDE7IH0KKworICAgIHZvaWQg
YXBwZW5kVW5pZm9ybShjb25zdCBSZWZQdHI8VW5pZm9ybWY+JiB1bmlmb3JtKSB7IG1fdW5pZm9y
bXMuYXBwZW5kKHVuaWZvcm0pOyB9CisgICAgdm9pZCB1c2VBY3Rpb25PbihMYXllckZpbHRlclJl
bmRlcmVyKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9wcm9ncmFtSWQ7CisgICAgYm9vbCBt
X3B1c2hTbmFwc2hvdDsKKyAgICBib29sIG1fcG9wU25hcHNob3Q7CisKKyAgICBWZWN0b3I8UmVm
UHRyPFVuaWZvcm1mPiA+IG1fdW5pZm9ybXM7Citwcml2YXRlOgorICAgIExheWVyRmlsdGVyUmVu
ZGVyZXJBY3Rpb24oaW50IHByb2dyYW1JZCk7Cit9OworCitjbGFzcyBMYXllckZpbHRlclJlbmRl
cmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllckZpbHRlclJlbmRlcmVyKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyRmlsdGVyUmVuZGVyZXI+IGNyZWF0
ZShjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlv
bik7CisgICAgdm9pZCBhcHBseUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCosIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPik7Cisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGFjdGlvbnNGb3JP
cGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+ID4mKTsKKworICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGZhaWxzLCBvciBk
aXNhYmxlKCkgaXMgY2FsbGVkLCB0aGlzIGlzIGZhbHNlLgorICAgIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAgdm9pZCBkaXNhYmxlKCkgeyBtX2VuYWJs
ZWQgPSBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExheWVyRmlsdGVyUmVuZGVyZXIoY29uc3Qg
aW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pOworICAg
IHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hhciog
YXR0cmliTmFtZSk7CisgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7CisKKyAg
ICAvLyBTZWUgbm90ZSBhYm91dCBwaW5nLXBvbmdpbmcgaW4gYXBwbHlBY3Rpb25zKCkKKyAgICB2
b2lkIHBpbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKKyAgICB2b2lkIHBvbmcoTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqKTsKKworICAgIC8vIFRoaXMgaXMgZm9yIHNoYWRvd3MsIHdoZXJlIHdlIG5l
ZWQgdG8gY3JlYXRlIGEgc2hhZG93LCBhbmQgdGhlbiByZXBhaW50IHRoZSBvcmlnaW5hbCBpbWFn
ZQorICAgIC8vIG9uIHRvcCBvZiB0aGUgc2hhZG93LgorICAgIHZvaWQgcHVzaFNuYXBzaG90KExh
eWVyUmVuZGVyZXJTdXJmYWNlKiwgaW50IHNvdXJjZUlkKTsKKyAgICB2b2lkIHBvcFNuYXBzaG90
KCk7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKworICAgIC8vIEVTU0wgYXR0cmlidXRlcyBzaGFy
ZWQgd2l0aCBMYXllclJlbmRlcmVyIC0gc2VlIGNvbnN0cnVjdG9yOgorICAgIGNvbnN0IGludCBt
X3Bvc2l0aW9uTG9jYXRpb247CisgICAgY29uc3QgaW50IG1fdGV4Q29vcmRMb2NhdGlvbjsKKwor
ICAgIC8vIEVTU0wgcHJvZ3JhbSBvYmplY3QgSURzOgorICAgIHVuc2lnbmVkIG1fY3NzRmlsdGVy
UHJvZ3JhbU9iamVjdFtMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyc107CisKKyAg
ICAvLyBFU1NMIHVuaWZvcm0gbG9jYXRpb25zOgorICAgIGludCBtX2Ftb3VudExvY2F0aW9uW0xh
eWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzXTsKKyAgICBpbnQgbV9ibHVyQW1vdW50
TG9jYXRpb25bMl07IC8vIDAgPSBZLCAxID0gWAorICAgIGludCBtX3NoYWRvd0NvbG9yTG9jYXRp
b247CisgICAgaW50IG1fb2Zmc2V0TG9jYXRpb247CisKKyAgICAvLyBUZXh0dXJlcyBmb3IgcGxh
eWluZyBwaW5nLXBvbmcgLSBzZWUgbm90ZSBpbiBhcHBseUFjdGlvbnMoKQorICAgIFJlZlB0cjxU
ZXh0dXJlPiBtX3RleHR1cmU7CisgICAgUmVmUHRyPFRleHR1cmU+IG1fc25hcHNob3RUZXh0dXJl
OworCisgICAgZnJpZW5kIGNsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb247Cit9OworCit9
CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShDU1Nf
RklMVEVSUykKKworI2VuZGlmIC8vIExheWVyRmlsdGVyUmVuZGVyZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlci5jcHAKaW5kZXggNzc2MjNlNThjZjY5MmViYjhkYzE0OGYwZTkxMWE0ZTY1OTBlOGFm
Ni4uMGU0MmRkNDQzMWNjNWQ2NGMwYzY3ZGY0ZDg2MjEzMThmYTVkMTcyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyUmVuZGVyZXIuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxh
eWVyRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCiAKQEAgLTY0LDcgKzY1LDcgQEAg
c3RhdGljIHZvaWQgY2hlY2tHTEVycm9yKCkKICNlbmRpZgogfQogCi1zdGF0aWMgR0x1aW50IGxv
YWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKK0dMdWludCBM
YXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJT
b3VyY2UpCiB7CiAgICAgR0x1aW50IHNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKHR5cGUpOwogICAg
IGlmICghc2hhZGVyKQpAQCAtODYsNyArODcsNyBAQCBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIo
R0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCitHTHVpbnQg
TGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKIHsKICAgICBHTHVpbnQg
dmVydGV4U2hhZGVyOwogICAgIEdMdWludCBmcmFnbWVudFNoYWRlcjsKQEAgLTUwMCw2ICs1MDEs
MTcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpkcmF3TGF5ZXJzT25TdXJmYWNlcyhjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHIKICAgICAgICAgaW50IGN1cnJlbnRTdGVuY2ls
VmFsdWUgPSAwOwogICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QoLTEsIC0xLCAyLCAyKTsKICAg
ICAgICAgY29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKHN1cmZhY2VMYXllcnNbaV0uZ2V0KCksIGN1
cnJlbnRTdGVuY2lsVmFsdWUsIGNsaXBSZWN0KTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICAgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQorICAgICAgICAgICAgbV9maWx0ZXJSZW5k
ZXJlciA9IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShtX3Bvc2l0aW9uTG9jYXRpb24sIG1f
dGV4Q29vcmRMb2NhdGlvbik7CisgICAgICAgIGlmIChsYXllci0+ZmlsdGVyT3BlcmF0aW9uc0No
YW5nZWQoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2Vk
KGZhbHNlKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXJBY3Rpb25zKG1fZmlsdGVyUmVu
ZGVyZXItPmFjdGlvbnNGb3JPcGVyYXRpb25zKHN1cmZhY2UsIGxheWVyLT5maWx0ZXJzKCkub3Bl
cmF0aW9ucygpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlB
Y3Rpb25zKG1fZmJvLCBsYXllciwgbGF5ZXItPmZpbHRlckFjdGlvbnMoKSk7CisgICAgICAgIGds
Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIElmIHRoZXJl
IGFyZSBsYXllcnMgZHJhd2VkIG9uIHN1cmZhY2VzLCB3ZSBuZWVkIHRvIHN3aXRjaCB0byBkZWZh
dWx0IGZyYW1lYnVmZmVyLgpAQCAtNzEyLDcgKzcyNCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXI6
OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29u
c3QgVAogICAgIC8vIENhbGN1bGF0ZSB0aGUgbGF5ZXIncyBvcGFjaXR5LgogICAgIG9wYWNpdHkg
Kj0gbGF5ZXItPm9wYWNpdHkoKTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29s
IHVzZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigpIHx8IGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSB8fCBsYXllci0+ZmlsdGVycygpLnNpemUoKTsKKyNlbHNlCiAgICAgYm9v
bCB1c2VMYXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5ZXIoKSB8fCBsYXllci0+
cmVwbGljYUxheWVyKCk7CisjZW5kaWYKICAgICBpZiAoIXVzZUxheWVyUmVuZGVyZXJTdXJmYWNl
KSB7CiAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShvcGFjaXR5KTsKICAgICAgICAgbGF5
ZXItPmNsZWFyTGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKQEAgLTk4NCw3ICsxMDAwLDcgQEAgYm9v
bCBMYXllclJlbmRlcmVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQogICAgIHJldHVybiBtX2NvbnRl
eHQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLS8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFt
ZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHRocmVlIHByb2dyYW1zCisvLyBCaW5k
cyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFs
bCBwcm9ncmFtcwogLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNv
ZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9uY2UKIC8vIGV2ZW4gd2hlbiBzd2l0Y2hp
bmcgYmV0d2VlbiBwcm9ncmFtcy4KIHZvaWQgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJp
YkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSkKQEAgLTEwNTMs
NyArMTA2OSw2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0
cygpCiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3Iu
eSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYSAqIG1hc2tDb2xvci53OyAgICAgICAg
IFxuIgogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotCiAgICAgLy8gU2hhZGVycyBmb3IgZHJhd2lu
ZyB0aGUgZGVidWcgYm9yZGVycyBhcm91bmQgdGhlIGxheWVycy4KICAgICBjaGFyIGNvbG9yVmVy
dGV4U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsg
ICBcbiIKQEAgLTExMzksNyArMTE1NCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6
ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAv
LyBTcGVjaWZ5IHRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiBhbmQgbWFrZSBp
dCB0aGUgc2FtZSBmb3IgYWxsIHRocmVlIHByb2dyYW1zIHRvCisgICAgLy8gU3BlY2lmeSB0aGUg
YXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9y
IGFsbCBwcm9ncmFtcyB0bwogICAgIC8vIGF2b2lkIGJpbmRpbmcgcmUtYmluZGluZyB0aGUgdmVy
dGV4IGF0dHJpYnV0ZXMuCiAgICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25M
b2NhdGlvbiwgImFfcG9zaXRpb24iKTsKICAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV90
ZXhDb29yZExvY2F0aW9uLCAiYV90ZXhDb29yZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAppbmRl
eCBmNmMzYmU4NzhmYTExZWJlMTc5YmIzZWU2ZDJhN2YwZDY0MzhiMmIwLi40Mzc5MjdiZWVhYzhh
MDQ4N2I0MTRlZjU0NzA3ZmIzNDE3NmE0OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaApAQCAt
MzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyRGF0
YS5oIgorI2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250
ZXh0Lmg+CkBAIC0xMzQsNiArMTM1LDkgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBsYXllciBo
YXMgYWxyZWFkeSBiZWVuIGRyYXdlZCBvbiBhIHN1cmZhY2UuCiAgICAgYm9vbCBsYXllckFscmVh
ZHlPblN1cmZhY2UoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIGNvbnN0OwogCisgICAgc3RhdGlj
IEdMdWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2Up
OworICAgIHN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBwcmVwYXJlRnJhbWVSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCosIGRvdWJsZSBhbmltYXRpb25UaW1lLCBib29sIGlzQ29udGV4dEN1cnJlbnQpOwogICAgIHZv
aWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZsb2F0UmVj
dCBjbGlwUmVjdCk7CkBAIC0xNjQsNiArMTY4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gU2hhZGVy
IHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCiAgICAgY29uc3QgaW50IG1fcG9zaXRp
b25Mb2NhdGlvbjsKICAgICBjb25zdCBpbnQgbV90ZXhDb29yZExvY2F0aW9uOworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICBPd25QdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlcj4gbV9maWx0ZXJS
ZW5kZXJlcjsKKyNlbmRpZgorCiAgICAgaW50IG1fc2FtcGxlckxvY2F0aW9uW0xheWVyRGF0YTo6
TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKICAgICBpbnQgbV9hbHBoYUxvY2F0aW9uW0xh
eWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKICAgICBpbnQgbV9tYXNrU2Ft
cGxlckxvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJXZWJLaXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKaW5kZXggMTViYmUwYThmMTM4OGExNmU0MDE5
NGFmZWMyMGE4ZjhiMDJmODQzYS4uZTlkM2RmZjQyYzljMTBmZmY1MDlkNjVjMzhiNDNlNzZmNGJj
ZjczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTY1LDYgKzY1LDkg
QEAgTGF5ZXJXZWJLaXRUaHJlYWQ6OkxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBlLCBH
cmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3cKICAgICAsIG1faXNNYXNrKGZhbHNlKQogICAgICwg
bV9hbmltYXRpb25zQ2hhbmdlZChmYWxzZSkKICAgICAsIG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0
KGZhbHNlKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAsIG1fZmlsdGVyc0NoYW5nZWQo
ZmFsc2UpCisjZW5kaWYKIHsKICAgICBpZiAodHlwZSA9PSBMYXllcikKICAgICAgICAgbV90aWxl
ciA9IExheWVyVGlsZXI6OmNyZWF0ZSh0aGlzKTsKQEAgLTI4NCw2ICsyODcsMTIgQEAgdm9pZCBM
YXllcldlYktpdFRocmVhZDo6Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpCiAgICAgbV9wb3Np
dGlvbiArPSBtX2Fic29sdXRlT2Zmc2V0OwogICAgIC8vIENvcHkgdGhlIGJhc2UgdmFyaWFibGVz
IGZyb20gdGhpcyBvYmplY3QgaW50byBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQKICAgICByZXBs
aWNhdGUobV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgaWYgKG1fZmlsdGVyc0NoYW5nZWQpIHsKKyAgICAgICAgbV9maWx0ZXJzQ2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldEZpbHRl
ck9wZXJhdGlvbnNDaGFuZ2VkKHRydWUpOworICAgIH0KKyNlbmRpZgogICAgIGlmIChtX2FuaW1h
dGlvbnNDaGFuZ2VkKSB7CiAgICAgICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0UnVu
bmluZ0FuaW1hdGlvbnMobV9ydW5uaW5nQW5pbWF0aW9ucyk7CiAgICAgICAgIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZC0+c2V0U3VzcGVuZGVkQW5pbWF0aW9ucyhtX3N1c3BlbmRlZEFuaW1hdGlv
bnMpOwpAQCAtNDA1LDYgKzQxNCwzMSBAQCB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFt
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIExheWVyV2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2Fu
QmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgLy8g
VGhlcmUgaXMgd29yayBhc3NvY2lhdGVkIHdpdGggY29tcG9zaXRpbmcgZmlsdGVycywgZXZlbiBp
ZiB0aGVyZSBhcmUgemVybyBmaWx0ZXJzLAorICAgIC8vIHNvIGlmIHRoZXJlIGFyZSBubyBmaWx0
ZXJzLCBjbGFpbSB3ZSBjYW4ndCBjb21wb3NpdGUgdGhlbS4KKyAgICBpZiAoIWZpbHRlcnMuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZmlsdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVy
T3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRToKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogY29uc3QgTGF5ZXJXZWJLaXRUaHJl
YWQqIExheWVyV2ViS2l0VGhyZWFkOjpyb290TGF5ZXIoKSBjb25zdAogewogICAgIGNvbnN0IExh
eWVyV2ViS2l0VGhyZWFkKiBsYXllciA9IHRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFk
LmgKaW5kZXggNDlhNDliZTVmMTNjOTAwOTA3ZTYyZWU4MTU5MzkzY2IzMTE2OGQzZi4uZTFhOTI1
NGEzOGRlZjRiNWY1Y2FkNjE3YzdjOTA5MGUyNjhhNTQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJL
aXRUaHJlYWQuaApAQCAtOTgsNiArOTgsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcGFj
aXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQo
KTsgfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0RmlsdGVycyhjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IG1fZmls
dGVyc0NoYW5nZWQgPSB0cnVlOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKTsK
KyNlbmRpZgorCiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCBpc09wYXF1ZSkgeyBtX2lzT3BhcXVl
ID0gaXNPcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyBzZXRO
ZWVkc0NvbW1pdCgpOyB9CkBAIC0yMDIsNiArMjA3LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBtX2lzTWFzayA6IDE7CiAgICAgdW5zaWduZWQgbV9hbmltYXRpb25zQ2hhbmdlZCA6IDE7CiAg
ICAgdW5zaWduZWQgbV9jbGVhck92ZXJyaWRlT25Db21taXQgOiAxOworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICB1bnNpZ25lZCBtX2ZpbHRlcnNDaGFuZ2VkIDogMTsKKyNlbmRpZgogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUN1c3RvbUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAppbmRleCAzNmQwNmQzMmI2OWM0NzE2ZjMwYjU0OTMz
NDdhZGJhZWQxNjAyMzQzLi40OGFiYTJiYTRjMWEwMTk5ZDZmZjgwYzQ4OTNmODg5NmY5Y2FjMTk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q3VzdG9tRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0
dXJlLmgiCkBAIC0xMzksOSArMTQwLDExIEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFoYWRDb250ZXh0IHx8IG1fY29udGV4dFNpemUgIT0g
bmV3Q29udGV4dFNpemUpCiAgICAgICAgIHJlc2l6ZUNvbnRleHQobmV3Q29udGV4dFNpemUpOwog
CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpIC8vIEJsYWNrQmVycnkgZGVmaW5lcyBpdHMgb3du
IFRleHR1cmUgY2xhc3MuCiAgICAgLy8gRG8gbm90IGRyYXcgdGhlIGZpbHRlciBpZiB0aGUgaW5w
dXQgaW1hZ2UgY2Fubm90IGZpdCBpbnNpZGUgYSBzaW5nbGUgR1BVIHRleHR1cmUuCiAgICAgaWYg
KG1faW5wdXRUZXh0dXJlLT50aWxlcygpLm51bVRpbGVzWCgpICE9IDEgfHwgbV9pbnB1dFRleHR1
cmUtPnRpbGVzKCkubnVtVGlsZXNZKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAg
ICAgCiAgICAgLy8gVGhlIHNoYWRlciBoYWQgY29tcGlsZXIgZXJyb3JzLiBXZSBjYW5ub3QgZHJh
dyBhbnl0aGluZy4KICAgICBpZiAoIW1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkp
CkBAIC0xODUsNyArMTg4LDExIEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmluaXRpYWxpemVDb250
ZXh0KCkKIAogdm9pZCBGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dChjb25zdCBJbnRTaXpl
JiBuZXdDb250ZXh0U2l6ZSkKIHsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkgLy8gQmxhY2tC
ZXJyeSBkZWZpbmVzIGl0cyBvd24gVGV4dHVyZSBjbGFzcwogICAgIG1faW5wdXRUZXh0dXJlID0g
VGV4dHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgVGV4dHVyZTo6UkdCQTgsIG5ld0NvbnRl
eHRTaXplLndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpKTsKKyNlbHNlCisgICAgbV9p
bnB1dFRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUodHJ1ZSk7CisjZW5kaWYKICAgICAKICAgICBp
ZiAoIW1fZnJhbWVCdWZmZXIpCiAgICAgICAgIG1fZnJhbWVCdWZmZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7CkBAIC0yNjksOCArMjc2LDEyIEBAIHZvaWQgRkVDdXN0b21GaWx0
ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVycyhVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJh
eSkKICAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKSB7
CiAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2NvbXBpbGVkUHJvZ3JhbS0+
c2FtcGxlckxvY2F0aW9uKCksIDApOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgICAg
ICBtX2lucHV0VGV4dHVyZS0+bG9hZChzcmNQaXhlbEFycmF5LT5kYXRhKCkpOwogICAgICAgICBt
X2lucHV0VGV4dHVyZS0+YmluZFRpbGUoMCk7CisjZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+cHJv
amVjdGlvbk1hdHJpeExvY2F0aW9uKCkgIT0gLTEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmluZGV4
IGI4Nzk2ZTgwMjkxOGJjYjZhYTM1NzBkMTkzY2NjYmRmM2QxYzllNjMuLjBhMWI3ZDFhMDE5NmRj
ZmJmMzM4YTI4OTJmNTE2MmM5ZWM0NTQ4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaApAQCAtMzUs
NiArMzUsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNlbmRpZgorCiAvLyBBbm5veWluZ2x5LCB3aW5n
ZGkuaCAjZGVmaW5lcyB0aGlzLgogI2lmZGVmIFBBU1NUSFJPVUdICiAjdW5kZWYgUEFTU1RIUk9V
R0gKQEAgLTQ0LDcgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ1NTIEZpbHRl
cnMKIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCitjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CisjZWxzZQogY2xh
c3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7
CisjZW5kaWYKIHB1YmxpYzoKICAgICBlbnVtIE9wZXJhdGlvblR5cGUgewogICAgICAgICBSRUZF
UkVOQ0UsIC8vIHVybCgjc29tZWZpbHRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQmxhY2tCZXJyeS5jbWFr
ZQppbmRleCBhZjE4Y2MxZTkzNzZjNzAxMzI5MjM3MDM3N2E1Y2M4NjE3YmQyNjJmLi4xOTdkMTBl
NTFkNThmNzU3ZGI5NWU1ZTNiOTM5YWM2ZTdmZWIxY2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNCbGFj
a0JlcnJ5LmNtYWtlCkBAIC0xNzMsOSArMTczLDE1IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XT1JLRVJTIE9OKQogCiBJRiAoRU5BQkxFX0dMRVMyKQogICAgIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9SRU5ERVJJTkcgT04pCisg
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJE
X0NBTlZBUyBPTikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
Q1NTX0ZJTFRFUlMgT04pCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0NTU19TSEFERVJTIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9XRUJHTCBPTikKIEVMU0UgKCkKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfM0RfUkVOREVSSU5HIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIE9GRikKKyAgICBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0ZJTFRFUlMgT0ZGKQorICAg
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfU0hBREVSUyBPRkYp
CiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMIE9GRikK
IEVORElGICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggZTI1NmIwZTU4YTQwMzE2MWE5ZWFkNGIzNjM2
MWEzYzJiZDU5MWI5YS4uYjI0NjI5MTEzNDM3ZDgxNDQ2MmY2MGEwZjczN2M0ODNmYzk3YjhjMiAx
MDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtl
Y29uZmlnLmguY21ha2UKQEAgLTI1LDYgKzI1LDggQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9D
U1NfU1RJQ0tZX1BPU0lUSU9OCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTX1ZBUklBQkxFUwog
I2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTUzNfRkxFWEJPWAorI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X0NTU19GSUxURVJTCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ1NTX1NIQURFUlMKICNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIKICNjbWFrZWRlZmluZTAxIEVOQUJM
RV9EQVRBTElTVF9FTEVNRU5UCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfREFUQV9UUkFOU0ZFUl9J
VEVNUwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDBlYWVkNzU5OTg3MzIxNTMyNDBmYmE5MGVhNGUxZTZhODkyNDEwZTMuLmMxYzRkZjUwYTdkOWQ2
NTQ4MWFkZjU0YzY5OWI3NjQ1YThkMjg2MWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0zMSAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVy
cnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0aGUg
ZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5jZSBl
ZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbTogQWNrbm93bGVkZ2UgQ1NTIGZpbHRlciBlZmZlY3RzLgorCiAyMDEyLTA3LTMx
ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gbW92ZSBFdmVudFNlbmRlciBpbnRvIFRlc3RSdW5uZXIuYQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDc3Y2MxZjc2MzIwZmFjZDRhZWNlNzgyMWU5M2M5
ZGJhNmU2M2NkMTMuLjM0NDUwOWY2Zjc4NWVmYmU5MzRkYmQzZGUzZmJlMTAzYWYwMjEyZGYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTE2Myw3ICsxNjMsNyBA
QCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfRVhDTFVTSU9O
UyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3NFeGNsdXNpb25zU3VwcG9ydCB9LAogCiAg
ICAgeyBvcHRpb24gPT4gImNzcy1maWx0ZXJzIiwgZGVzYyA9PiAiVG9nZ2xlIENTUyBGaWx0ZXJz
IHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQ1NTX0ZJTFRFUlMiLCBkZWZhdWx0
ID0+IGlzQXBwbGVXZWJLaXQoKSwgdmFsdWUgPT4gXCRjc3NGaWx0ZXJzU3VwcG9ydCB9LAorICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfQ1NTX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJL
aXQoKSB8fCBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRjc3NGaWx0ZXJzU3VwcG9ydCB9LAog
CiAgICAgeyBvcHRpb24gPT4gImNzczMtZmxleGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBDU1MzIEZs
ZXhib3ggc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1MzX0ZMRVhCT1giLCBk
ZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkY3NzM0ZsZXhib3hTdXBwb3J0IH0sCmRpZmYgLS1naXQg
YS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2I0OTE2NGRhN2ZmMzQzMGRlZDAzZTk1Yjdl
MGI4NDJjY2ZkMzNmYi4uNjk2NjllMTJhMTExNjgyZmEzYjZiNWU4YTBlMmE0NWZlZTYyNDYwYiAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEyLTA3LTMxICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKwor
ICAgICAgICBbQmxhY2tCZXJyeV0gRW5hYmxlIENTUyBGaWx0ZXIgRWZmZWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI2ODUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgQ1NTIGZpbHRlciBl
ZmZlY3RzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgY3VzdG9tIGVmZmVjdHMgKENTUyBzaGFkZXJz
KSBhbmQgcmVmZXJlbmNlIGVmZmVjdHMgKFNWRyBlZmZlY3RzKQorCisgICAgICAgICogU291cmNl
L2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlOiBBZGQgTGF5ZXJGaWx0ZXJSZW5kZXJlcgor
ICAgICAgICAqIFNvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlOiBBY2tub3dsZWRnZSBDU1MgZmls
dGVyIGVmZmVjdHMKKwogMjAxMi0wNy0zMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBQZXJmLW8tbWF0aWM6IGRhc2hib2FyZCBpbWFnZXMgYXJlIG5vdCBnZW5l
cmF0ZWQgcHJvcGVybHkgZnJvbSBpbmNyZW1lbnRhbGx5IHVwZGF0ZWQgSlNPTgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155596</attachid>
            <date>2012-07-31 11:41:59 -0700</date>
            <delta_ts>2012-07-31 12:52:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92685-20120731144040.patch</filename>
            <type>text/plain</type>
            <size>62390</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxMTAyNDFkNWMxMTgy
YWYzMTUwM2ZhNmFiOTlmNTI4OTU1ZTE4Ny4uMDllY2QxM2EyMTBhMWU3NTQ2NWUzY2Y2NjM0NTY2
YWU2MzhhM2IyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxMi0wNy0zMSAgSm9z
aHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEVuYWJsZSBDU1MgRmlsdGVyIEVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIENTUyBmaWx0ZXIgZWZmZWN0cywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIGN1c3RvbSBlZmZlY3RzIChDU1Mgc2hhZGVycykgYW5kIHJlZmVyZW5j
ZSBlZmZlY3RzIChTVkcgZWZmZWN0cykKKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIGZyb20gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAg
IEludGVybmFsbHkgcmV2aWV3ZWQgYnkgQXJ2aWQgTmlsc3NvbiA8YW5pbHNzb25AcmltLmNvbT4g
YW5kIEFudG9uaW8gR29tZXMgPGFnb21lc0ByaW0uY29tPi4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNr
QmVycnk6OnNldEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNr
QmVycnk6OnVwZGF0ZUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojpm
aWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29t
cG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExheWVyT3ZlcnJpZGUpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpmaWx0ZXJP
cGVyYXRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhy
ZWFkOjpzZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZCk6CisgICAgICAgIChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmZp
bHRlckFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6
c2V0RmlsdGVyQWN0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckRhdGEuaDoKKyAgICAgICAgKExheWVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckRhdGE6OmZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRpb25UeXBlVG9Qcm9ncmFtSUQpOgorICAgICAgICAoV2Vi
Q29yZTo6VW5pZm9ybWY6OlVuaWZvcm1mKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0xZjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTFmOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VW5pZm9ybTFmOjpVbmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9y
bTJmOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpVbmlmb3JtMmY6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlmb3JtMmY6OlVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpV
bmlmb3JtM2Y6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6VW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246On5MYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb246OnVzZUFjdGlvbk9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVy
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyOjpMYXll
ckZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6
OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRl
clJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyRmlsdGVyUmVuZGVyZXI6OnBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6cG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVy
OjpwdXNoU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
cG9wU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0
aW9uc0Zvck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJl
cjo6YXBwbHlBY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFVuaWZvcm1mKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm1mOjpsb2NhdGlvbik6Cisg
ICAgICAgIChVbmlmb3JtMWYpOgorICAgICAgICAoVW5pZm9ybTJmKToKKyAgICAgICAgKFVuaWZv
cm0zZik6CisgICAgICAgIChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNob3VsZFB1c2hTbmFwc2hvdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpzZXRQdXNoU25hcHNo
b3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2hvdWxk
UG9wU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlv
bjo6c2V0UG9wU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJl
ckFjdGlvbjo6YXBwZW5kVW5pZm9ybSk6CisgICAgICAgIChMYXllckZpbHRlclJlbmRlcmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyOjpkaXNhYmxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyOjpkcmF3TGF5ZXJzT25TdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3Rz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIu
aDoKKyAgICAgICAgKExheWVyUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJXZWJLaXRUaHJlYWQ6OkxheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyV2ViS2l0VGhyZWFkOjpjb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmZpbHRlcnNDYW5C
ZUNvbXBvc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJXZWJLaXRUaHJlYWQuaDoKKyAgICAgICAgKExheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ3VzdG9tRmlsdGVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVycyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRmlsdGVyT3BlcmF0aW9uKToKKwogMjAxMi0wNy0zMSAgQWxleGVpIEZpbGlw
cG92ICA8YWxleGVpZkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGFr
ZSBpbnRvIGFjY291bnQgdGhlIHdob2xlIHNlY3VyaXR5IG9yaWdpbiBpbnN0ZWFkIG9mIGp1c3Qg
aG9zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzYxMGRmOTIzYzkwMTlkODZmZDRiYmZjZmQ3
ZTRjOTI4YjRhYzY5Li4yM2QyNTIxY2NkMDIzMmE0NzA3ZTQ1OWE4MmNmOWZkMTgyMzAyNWI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTAzOCw2ICsxMDM4LDcgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwCiAgICAgY3NzL1dlYktpdENTU1JlZ2lv
blJ1bGUuY3BwCiAgICAgY3NzL1dlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuY3BwCisgICAgY3Nz
L1dlYktpdENTU1NoYWRlclZhbHVlLmNwcAogICAgIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5jcHAKICAgICBjc3MvV3JhcFNoYXBlRnVuY3Rpb25zLmNwcAogCkBAIC0xNjA1LDYgKzE2MDYs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
SGFuZGxlLmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKICAg
ICBsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAorICAgIGxvYWRlci9jYWNoZS9DYWNoZWRT
aGFkZXIuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50LmNwcAogICAgIGxv
YWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhT
TFN0eWxlU2hlZXQuY3BwCkBAIC0xODIxLDEwICsxODIzLDExIEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKQEAgLTE4NDksMTYgKzE4NTIsMTUgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL05FT05IZWxw
ZXJzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUJsZW5kTkVPTi5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVDb21wb3NpdGVBcml0aG1ldGljTkVP
Ti5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9O
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5oCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCAxYWU1ZmU2OTA3YTQ3Mzg0MDk5ZmFl
YjBjNzljMmFmOWQxYWJiYmNlLi5hODE2YjE0ODkwNWM2MzhlYjdmODY3YmUzZmFkNDNiMzc2ZjNl
ZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCkBAIC0yNzIsNiAr
MjcyLDcgQEAgSUYgKFdURl9VU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgICR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJBbmltYXRpb24uY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKKyAgICAg
ICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRl
clJlbmRlcmVyLmNwcAogICAgICAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCiAgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3BwCiAgICAgICAg
ICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcAppbmRleCAxYjgx
ZjU0ZGQwMzhlNGVkNmUyNTk1MGY4OTNjMTdiNjRhYmRhZDE0Li5lMjc3OWMzYzIxZWMxMmQ2ZTQ2
ZWRkYWQ1ODg3ZDlhYzIyN2FiNjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MjkyLDYgKzI5MywyNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRIYXNGaXhl
ZEFuY2VzdG9ySW5ET01UcmVlKGJvb2wgaGFzRml4ZWRBbmNlc3RvcgogICAgIHVwZGF0ZUhhc0Zp
eGVkQW5jZXN0b3JJbkRPTVRyZWUoKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK2Jv
b2wgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBpZiAobV9maWx0ZXJzID09IGZpbHRlcnMpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gTGF5ZXJXZWJL
aXRUaHJlYWQ6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7CisgICAgaWYgKGNhbkNv
bXBvc2l0ZUZpbHRlcnMpIHsKKyAgICAgICAgbV9maWx0ZXJzID0gZmlsdGVyczsKKyAgICAgICAg
R3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICAgICAgdXBkYXRlRmlsdGVy
cygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmlsdGVycy5jbGVhcigpOworICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJz
OworfQorI2VuZGlmCisKIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKG1fYmFja2dyb3VuZENvbG9y
U2V0ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9yKQpAQCAtODAzLDYgKzgyNCwxNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigp
CiAgICAgICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fY29udGVudHNMYXllcik7CiB9
CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
Ojp1cGRhdGVGaWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fZmlsdGVycy5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHByaW1hcnlMYXllcigpLT5zZXRGaWx0ZXJzKG1fZmlsdGVycyk7Cit9
CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlQW5pbWF0aW9u
cygpCiB7CiAgICAgLy8gV2hlbiB0aGVyZSBpcyBhIHRyYW5zZm9ybSBsYXllciwgdGhlIHRyYW5z
Zm9ybSBtdXN0IGJlIHNldCBvbiB0aGF0IGxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5LmgKaW5kZXggYzI2Njk0N2FmMWM5YWIzNTliNTM1Yjk0ZGVkNTY4Y2I3MjI0
ZDZkOS4uZDhkNmI2YWU5M2IxMzAxMWZjZjFiMTJjMGZkMTU4MzgzNmIyNGZkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xh
eWVyQmxhY2tCZXJyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaApAQCAtMjksMTMgKzI5LDE1IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorCiAjaWZuZGVmIEdy
YXBoaWNzTGF5ZXJCbGFja0JlcnJ5X2gKICNkZWZpbmUgR3JhcGhpY3NMYXllckJsYWNrQmVycnlf
aAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaW5jbHVkZSAiRmlsdGVy
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLQogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNiArNzksMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZENvbnRhaW5lcihib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShib29sKTsKIAorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgZmlsdGVyIGNhbiBiZSBy
ZW5kZXJlZCBieSB0aGUgY29tcG9zaXRvcgorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMgJik7CisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAKQEAgLTE0Niw2ICsxNTQsOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlSGFzRml4ZWRDb250YWluZXIoKTsKICAgICB2b2lkIHVwZGF0ZUhhc0Zp
eGVkQW5jZXN0b3JJbkRPTVRyZWUoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyQmFja2dyb3VuZENv
bG9yKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgdXBkYXRlRmlsdGVycygp
OworI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKCk7CiAKICAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRzSW1hZ2UoSW1hZ2UqKTsKQEAgLTE1OSw2ICsxNzAsMTAgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fdHJhbnNmb3JtTGF5ZXI7CiAgICAgUmVmUHRy
PExheWVyV2ViS2l0VGhyZWFkPiBtX2NvbnRlbnRzTGF5ZXI7CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisjZW5kaWYKKwogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9ydW5uaW5nQW5pbWF0aW9uczsKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fc3VzcGVuZGVkQW5pbWF0aW9uczsKICAg
ICBkb3VibGUgbV9zdXNwZW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdU
aHJlYWQuY3BwCmluZGV4IGM3NTBlYmQyODY0N2M2ZDFlYjJiMGVhZTMwODlkZTc3NzA3MjY0YWYu
LjgxYzkxODA4ZDNmOWEwZGRhMTVhMjEzNGQ2OWZlZjIzNDJmMzJjZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcApAQCAtNzksNiArNzksOSBAQCBMYXllckNv
bXBvc2l0aW5nVGhyZWFkOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKExheWVyVHlwZSB0eXBlLCBM
YXllckNvbXBvc2l0aW5nVAogICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAgICwgbV9jb21taXRT
Y2hlZHVsZWQoZmFsc2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgICwgbV9maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChmYWxzZSkKKyNlbmRpZgog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCmluZGV4IGIzMzU2
MDY2OWM1MTQwZGM1ZDVmOTIwMTJhMzAzNTE5YmUwMTE5YjAuLmRmMDc4NDQ3MTFiMjM1YzIzOTY2
ZTFmN2ExYzRiM2E4NjE2MGVmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZC5oCkBAIC0zNSw5ICszNSwxMSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgIkxheWVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJEYXRhLmgi
CisjaW5jbHVkZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlci5oIgogCkBAIC0xMDEsNiArMTAzLDcg
QEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fdHJhbnNmb3JtOwogICAgIGZsb2F0IG1fb3BhY2l0eTsKKwogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwogCiAgICAgdW5zaWduZWQgbV9wb3Np
dGlvblNldCA6IDE7CkBAIC0xMTAsNiArMTEzLDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X29wYWNpdHlTZXQgOiAxOwogfTsKIAorY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjsK
KwogY2xhc3MgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiwgcHVibGljIExheWVyRGF0YSwgcHVibGljIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHdWFyZGVkUG9pbnRlckJhc2UgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IGNyZWF0ZShMYXllclR5cGUs
IExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqKTsKQEAgLTIwNyw2ICsyMTIsMTQgQEAgcHVi
bGljOgogICAgIExheWVyT3ZlcnJpZGUqIG92ZXJyaWRlKCk7CiAgICAgdm9pZCBjbGVhck92ZXJy
aWRlKCk7CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBmaWx0ZXJPcGVyYXRp
b25zQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQ7IH0K
KyAgICB2b2lkIHNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGJvb2wgY2hhbmdlZCkgeyBtX2Zp
bHRlck9wZXJhdGlvbnNDaGFuZ2VkID0gY2hhbmdlZDsgfQorCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGZpbHRlckFjdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlckFjdGlvbnM7IH0KKyAgICB2b2lkIHNldEZpbHRlckFjdGlvbnMoY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+JiBhY3Rpb25zKSB7IG1fZmls
dGVyQWN0aW9ucyA9IGFjdGlvbnM7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB+TGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpOwogCkBAIC0yNTEsNiArMjY0LDExIEBAIHByaXZh
dGU6CiAKICAgICBPd25QdHI8TGF5ZXJPdmVycmlkZT4gbV9vdmVycmlkZTsKICAgICBMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KiBtX2NsaWVudDsKKworI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKKyAgICBib29sIG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQ7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IG1fZmlsdGVyQWN0aW9uczsKKyNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKaW5kZXggZDk5MTIxNTUx
MTExOTBjNWY0YzZiYzEyMTIxNTc0MTFhMTExZTg3NS4uN2VjNTgxYjhkYTQ5OTEyYzYwYWEzMWZk
MDY5ZjIxNGIzY2NmODY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVm
aW5lIExheWVyRGF0YV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZpbHRlck9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTksNiArNjAsMjUgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJQcm9ncmFtU2hhZGVyQkdSQSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVycyB9Owog
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGVudW0gQ1NTRmlsdGVyU2hhZGVycyB7IENT
U0ZpbHRlclNoYWRlckdyYXlzY2FsZSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTRmlsdGVyU2hhZGVyU2VwaWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmls
dGVyU2hhZGVyU2F0dXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVy
U2hhZGVySHVlUm90YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNo
YWRlckludmVydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJC
cmlnaHRuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlckNv
bnRyYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlck9wYWNp
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQmx1clksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQmx1clgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2hhZG93LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoLAorI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJD
dXN0b20sCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNTU0Zp
bHRlclNoYWRlcnMgfTsKKyNlbmRpZgorCiAgICAgTGF5ZXJEYXRhKExheWVyVHlwZSB0eXBlKQog
ICAgICAgICA6IG1fbGF5ZXJUeXBlKHR5cGUpCiAgICAgICAgICwgbV9hbmNob3JQb2ludCgwLjUs
IDAuNSkKQEAgLTExNSw2ICsxMzUsMTAgQEAgcHVibGljOgogCiAgICAgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
ICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsg
fQorI2VuZGlmCisKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wYXF1
ZTsgfQogCiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KQEAgLTE3Nyw2ICsyMDEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKIAogICAgIGZsb2F0IG1fb3BhY2l0eTsKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisjZW5k
aWYKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKICAgICBmbG9hdCBtX2JvcmRlcldpZHRoOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Nzk3YzEw
ZjM2ZTA5MjFmNjQ0MWQyOWFjYTc1MTY5ZjE0MTYzZmZlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRl
cmVyLmNwcApAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2luY2x1ZGUgIkxheWVyRmlsdGVy
UmVuZGVyZXIuaCIKKworI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCisKKyNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxv
Zy5oPgorI2luY2x1ZGUgPFZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRl
IDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGludCBvcGVyYXRpb25U
eXBlVG9Qcm9ncmFtSUQoY29uc3QgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlJiB0KQor
eworICAgIHN3aXRjaCAodCkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckdyYXlzY2FsZTsKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6
OkNTU0ZpbHRlclNoYWRlclNlcGlhOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2F0dXJhdGU7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgIHJldHVybiBMYXll
ckRhdGE6OkNTU0ZpbHRlclNoYWRlckh1ZVJvdGF0ZTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SU5WRVJUOgorICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJJbnZl
cnQ7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgIHJldHVybiBM
YXllckRhdGE6OkNTU0ZpbHRlclNoYWRlck9wYWNpdHk7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6CisgICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
ckJyaWdodG5lc3M7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAg
ICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJDb250cmFzdDsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVy
U2hhZGVyQmx1clk7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAg
ICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3c7CisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAgICAg
IHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlckN1c3RvbTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorfQorCitVbmlmb3JtZjo6VW5pZm9ybWYoaW50IGNfbG9jYXRpb24pCisgICAgOiBtX2xvY2F0
aW9uKGNfbG9jYXRpb24pCit7Cit9CisKK3ZvaWQgVW5pZm9ybTFmOjphcHBseSgpCit7CisgICAg
Z2xVbmlmb3JtMWYobG9jYXRpb24oKSwgbV92YWwpOworfQorCitQYXNzUmVmUHRyPFVuaWZvcm1m
PiBVbmlmb3JtMWY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0xZihsb2NhdGlvbiwgdmFsKSk7Cit9CisKK1VuaWZvcm0x
Zjo6VW5pZm9ybTFmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbCkKKyAgICA6IFVuaWZvcm1m
KGNfbG9jYXRpb24pCisgICAgLCBtX3ZhbChjX3ZhbCkKK3sKK30KKwordm9pZCBVbmlmb3JtMmY6
OmFwcGx5KCkKK3sKKyAgICBnbFVuaWZvcm0yZihsb2NhdGlvbigpLCBtX3ZhbFswXSwgbV92YWxb
MV0pOworfQorCitQYXNzUmVmUHRyPFVuaWZvcm1mPiBVbmlmb3JtMmY6OmNyZWF0ZShpbnQgbG9j
YXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBVbmlmb3JtMmYobG9jYXRpb24sIHZhbDAsIHZhbDEpKTsKK30KKworVW5pZm9ybTJmOjpVbmlm
b3JtMmYoaW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxKQorICAgIDog
VW5pZm9ybWYoY19sb2NhdGlvbikKK3sKKyAgICBtX3ZhbFswXSA9IGNfdmFsMDsKKyAgICBtX3Zh
bFsxXSA9IGNfdmFsMTsKK30KKwordm9pZCBVbmlmb3JtM2Y6OmFwcGx5KCkKK3sKKyAgICBnbFVu
aWZvcm0zZihsb2NhdGlvbigpLCBtX3ZhbFswXSwgbV92YWxbMV0sIG1fdmFsWzJdKTsKK30KKwor
UGFzc1JlZlB0cjxVbmlmb3JtZj4gVW5pZm9ybTNmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9h
dCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVW5pZm9ybTNmKGxvY2F0aW9uLCB2YWwwLCB2YWwxLCB2YWwyKSk7Cit9CisKK1VuaWZvcm0z
Zjo6VW5pZm9ybTNmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSwg
ZmxvYXQgY192YWwyKQorICAgIDogVW5pZm9ybWYoY19sb2NhdGlvbikKK3sKKyAgICBtX3ZhbFsw
XSA9IGNfdmFsMDsKKyAgICBtX3ZhbFsxXSA9IGNfdmFsMTsKKyAgICBtX3ZhbFsyXSA9IGNfdmFs
MjsKK30KKworUGFzc1JlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiBMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoaW50IHByb2dyYW1JZCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24ocHJvZ3JhbUlkKSk7Cit9CisKK0xh
eWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IGNf
cHJvZ3JhbUlkKQorICAgICwgbV9wcm9ncmFtSWQoY19wcm9ncmFtSWQpCisgICAgLCBtX3B1c2hT
bmFwc2hvdChmYWxzZSkKKyAgICAsIG1fcG9wU25hcHNob3QoZmFsc2UpCit7Cit9CisKK3ZvaWQg
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9uT24oTGF5ZXJGaWx0ZXJSZW5kZXJl
ciogcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKG1fcHJvZ3JhbUlkICE9IC0xKTsKKyAgICBpZiAo
bV9wcm9ncmFtSWQgPT0gLTEpIHsKKyAgICAgICAgZ2xVc2VQcm9ncmFtKHJlbmRlcmVyLT5tX2Nz
c0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3Vn
aF0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdsVXNlUHJvZ3JhbShyZW5kZXJlci0+
bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W21fcHJvZ3JhbUlkXSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdW5pZm9ybXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdW5pZm9ybXNb
aV0tPmFwcGx5KCk7Cit9CisKK1Bhc3NPd25QdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlcj4gTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3Qg
aW50JiB0ZXhDb29yZExvY2F0aW9uKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJG
aWx0ZXJSZW5kZXJlcihwb3NpdGlvbkxvY2F0aW9uLCB0ZXhDb29yZExvY2F0aW9uKSk7Cit9CisK
K0xheWVyRmlsdGVyUmVuZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIoY29uc3QgaW50JiBwb3Np
dGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pCisgICAgOiBtX3Bvc2l0
aW9uTG9jYXRpb24ocG9zaXRpb25Mb2NhdGlvbikKKyAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbih0
ZXhDb29yZExvY2F0aW9uKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpO
dW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7ICsraSkKKyAgICAgICAgbV9jc3NGaWx0ZXJQcm9ncmFt
T2JqZWN0W2ldID0gMDsKKworICAgIGlmICghKG1fZW5hYmxlZCA9IGluaXRpYWxpemVTaGFyZWRH
TE9iamVjdHMoKSkpCisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2FybiwgIkNTUyBGaWx0ZXJzIGFyZSBub3QgZW5h
YmxlZCBkdWUgdG8gZmFpbGVkIGluaXRpYWxpemF0aW9uLiIpOworfQorCisvLyBCaW5kcyB0aGUg
Z2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9n
cmFtcworLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8g
YmluZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9uY2UKKy8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0
d2VlbiBwcm9ncmFtcy4KKy8vCisvLyBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBMYXllclJlbmRl
cmVyOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24gYW5kIHRoZSBsb2NhdGlvbnMKKy8vIHdpbGwg
bWF0Y2ggdGhvc2Ugb2YgTGF5ZXJSZW5kZXJlci4gU2VlIExheWVyRmlsdGVyUmVuZGVyZXI6Okxh
eWVyRmlsdGVyUmVuZGVyZXIoKQordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpiaW5kQ29tbW9u
QXR0cmliTG9jYXRpb24oaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBhdHRyaWJOYW1lKQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRl
cnM7ICsraSkKKyAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFt
T2JqZWN0W2ldLCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Cit9CisKK2Jvb2wgTGF5ZXJGaWx0ZXJS
ZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCit7CisgICAgLy8gU2VlIGFsc28g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisKKyAgICBjaGFyIHZlcnRleFNoYWRlclN0
cmluZ1tdID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidmFyeWluZyB2
ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAiICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247ICBcbiIKKyAgICAgICAgIiAgdl90ZXhD
b29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIjsKKworI2RlZmluZSBTVEFOREFSRF9GSUxURVIoeC4uLikgXAorICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIlwKKyAgICAgICAgIlxuIlwKKyAgICAgICAgInZh
cnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBsb3dw
IHNhbXBsZXIyRCBzX3RleHR1cmU7XG4iXAorICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1
X2Ftb3VudDtcbiJcCisgICAgICAgICN4XAorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBn
bF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKSk7IH0i
CisKKyNkZWZpbmUgT0ZGU0VUX0ZJTFRFUih4Li4uKSBcCisgICAgICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsgXG4iXAorICAgICAgICAiXG4iXAorICAgICAgICAidmFyeWluZyBtZWRpdW1w
IHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNf
dGV4dHVyZTtcbiJcCisgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwK
KyAgICAgICAgInVuaWZvcm0gbWVkaXVtcCB2ZWMyIHVfb2Zmc2V0O1xuIlwKKyAgICAgICAgI3hc
CisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1
cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQgLSB1X29mZnNldCkpOyB9IgorCisjZGVmaW5lIEJM
VVJfRklMVEVSKHguLi4pIFwKKyAgICAgICAgInByZWNpc2lvbiBoaWdocCBmbG9hdDsgXG4iXAor
ICAgICAgICAiXG4iXAorICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtc
biJcCisgICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTtcbiJcCisgICAg
ICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKKyAgICAgICAgInVuaWZvcm0g
aGlnaHAgZmxvYXQgdV9ibHVyU2l6ZTtcbiJcCisgICAgICAgICJjb25zdCBmbG9hdCBwaSA9IDMu
MTQxNTkyNztcbiJcCisgICAgICAgICN4XAorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iXAor
ICAgICAgICAie1xuIlwKKyAgICAgICAgInZlYzMgaW5jcjtcbiJcCisgICAgICAgICJpbmNyLngg
PSAxLjAgLyAoc3FydCgyLjAgKiBwaSkgKiB1X2Ftb3VudCk7XG4iXAorICAgICAgICAiaW5jci55
ID0gZXhwKC0wLjUgLyAodV9hbW91bnQgKiB1X2Ftb3VudCkpO1xuIlwKKyAgICAgICAgImluY3Iu
eiA9IGluY3IueSAqIGluY3IueTtcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJ2ZWM0IGF2
ZyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiJcCisgICAgICAgICJmbG9hdCBjb2VmZmlj
aWVudFN1bSA9IDAuMDtcbiJcCisgICAgICAgICJcbiJcCisgICAgICAgICJhdmcgKz0gdGV4dHVy
ZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSkgKiBpbmNyLng7XG4iXAorICAgICAgICAiY29l
ZmZpY2llbnRTdW0gKz0gaW5jci54O1xuIlwKKyAgICAgICAgImluY3IueHkgKj0gaW5jci55ejtc
biJcCisgICAgICAgICJcbiJcCisgICAgICAgICJmb3IgKGZsb2F0IGkgPSAxLjA7IGkgPD0gbnVt
Qmx1clBpeGVsc1BlclNpZGU7IGkrKykge1xuIlwKKyAgICAgICAgIiAgICBhdmcgKz0gdGV4dHVy
ZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSAtIGkgKiB1X2JsdXJTaXplICogYmx1ck11bHRp
cGx5VmVjKSAqIGluY3IueDtcbiJcCisgICAgICAgICIgICAgYXZnICs9IHRleHR1cmUyRChzX3Rl
eHR1cmUsIHZfdGV4Q29vcmQueHkgKyBpICogdV9ibHVyU2l6ZSAqIGJsdXJNdWx0aXBseVZlYykg
KiBpbmNyLng7XG4iXAorICAgICAgICAiICAgIGNvZWZmaWNpZW50U3VtICs9IDIuMCAqIGluY3Iu
eDtcbiJcCisgICAgICAgICIgICAgaW5jci54eSAqPSBpbmNyLnl6O1xuIlwKKyAgICAgICAgIn1c
biJcCisgICAgICAgICJcbiJcCisgICAgICAgICJnbF9GcmFnQ29sb3IgPSBhdmcgLyBjb2VmZmlj
aWVudFN1bTtcbiJcCisgICAgICAgICJ9IgorCisgICAgY29uc3QgY2hhciogc2hhZGVyU3Ryc1tM
YXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyc107CisKKyAgICBzaGFkZXJTdHJzW0xh
eWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlXSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAg
ICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAg
ICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgIHJl
dHVybiB2ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIg
LSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQp
ICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBh
bW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAw
LjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICog
Y29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9Cisg
ICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTZXBpYV0g
PSBTVEFOREFSRF9GSUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9h
bW91bnQ7CisgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAt
IDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAoMC4z
NDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAu
NTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50
KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAg
IH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNh
dHVyYXRlXSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEzICsg
MC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1ICsgMC4yODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1
X2Ftb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4y
MTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBj
b2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1X2Ftb3VudCkgKiBjb2xvci5iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVy
U3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckh1ZVJvdGF0ZV0gPSBTVEFOREFSRF9GSUxU
RVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKKyAg
ICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAg
ICAgICAgICAgIGhpZ2hwIGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICog
MC4yMTMpICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xv
ci5iICogKDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3Iu
ZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0g
YyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIg
KiAoMC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBj
ICogMC43MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMg
KiAwLjA3MiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQor
ICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySW52ZXJ0
XSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCBmbG9hdCBpbnZlcnQobG93cCBmbG9h
dCBuKSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQp
OyB9CisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcp
LCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9CisgICAgKTsKKworICAgIHNo
YWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzXSA9IFNUQU5EQVJE
X0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50
KSwgY29sb3IuYSk7CisgICAgICAgIH0KKyAgICApOworCisgICAgc2hhZGVyU3Ryc1tMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlckNvbnRyYXN0XSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAg
bG93cCBmbG9hdCBjb250cmFzdChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVf
YW1vdW50ICsgMC41OyB9CisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBj
b250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9
CisgICAgKTsKKworICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJPcGFj
aXR5XSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29s
b3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKKyAgICAgICAgfQorICAgICk7CisK
KyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdID0gQkxVUl9G
SUxURVIoCisgICAgICAgIGNvbnN0IGZsb2F0IG51bUJsdXJQaXhlbHNQZXJTaWRlID0gMi4wOwor
ICAgICAgICBjb25zdCB2ZWMyICBibHVyTXVsdGlwbHlWZWMgICAgICA9IHZlYzIoMS4wLCAwLjAp
OworICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1
clldID0gQkxVUl9GSUxURVIoCisgICAgICAgIGNvbnN0IGZsb2F0IG51bUJsdXJQaXhlbHNQZXJT
aWRlID0gMi4wOworICAgICAgICBjb25zdCB2ZWMyICBibHVyTXVsdGlwbHlWZWMgICAgICA9IHZl
YzIoMC4wLCAxLjApOworICAgICk7CisKKyAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyU2hhZG93XSA9IE9GRlNFVF9GSUxURVIoCisgICAgICAgIHVuaWZvcm0gbG93cCB2
ZWMzIHVfY29sb3I7CisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb2xvci5hID4gMC41KQorICAgICAgICAgICAgICAg
IHJldHVybiB2ZWM0KHVfY29sb3IuciwgdV9jb2xvci5nLCB1X2NvbG9yLmIsIGNvbG9yLmEpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisgICAgKTsKKworICAgIHNoYWRl
clN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaF0gPSBTVEFOREFSRF9G
SUxURVIoCisgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyBp
KyspIHsKKyAgICAgICAgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldID0gTGF5ZXJSZW5kZXJl
cjo6bG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBzaGFkZXJTdHJzW2ldKTsK
KyAgICAgICAgaWYgKCFtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0pIHsKKyAgICAgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okxv
Z0xldmVsV2FybiwgIkNvdWxkIG5vdCBsb2FkIENTUyBGaWx0ZXIgU2hhZGVyICVpIiwgaSk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQg
QVRUUklCIGxvY2F0aW9ucyAtIHRoZXNlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHByb2dyYW1z
IGluIExheWVyUmVuZGVyZXIuY3BwCisgICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9z
aXRpb25Mb2NhdGlvbiwgImFfcG9zaXRpb24iKTsKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRp
b24obV90ZXhDb29yZExvY2F0aW9uLCAiYV90ZXhDb29yZCIpOworCisgICAgLy8gUmUtbGluayB0
byB0YWtlIGVmZmVjdAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJP
ZkNTU0ZpbHRlclNoYWRlcnM7ICsraSkKKyAgICAgICAgZ2xMaW5rUHJvZ3JhbShtX2Nzc0ZpbHRl
clByb2dyYW1PYmplY3RbaV0pOworCisgICAgLy8gR2V0IFVOSUZPUk0gbG9jYXRpb25zCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsg
KytpKQorICAgICAgICBtX2Ftb3VudExvY2F0aW9uW2ldID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldLCAidV9hbW91bnQiKTsKKworICAgIG1fYmx1ckFt
b3VudExvY2F0aW9uWzBdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFt
T2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldLCAidV9ibHVyU2l6ZSIpOwor
ICAgIG1fYmx1ckFtb3VudExvY2F0aW9uWzFdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NG
aWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdLCAidV9i
bHVyU2l6ZSIpOworCisgICAgbV9zaGFkb3dDb2xvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVy
U2hhZG93XSwgInVfY29sb3IiKTsKKyAgICBtX29mZnNldExvY2F0aW9uID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hh
ZGVyU2hhZG93XSwgInVfb2Zmc2V0Iik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBM
YXllckZpbHRlclJlbmRlcmVyOjpwaW5nKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQor
eworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUtPnRleHR1cmVJZCgpLCAwKTsKKyAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVy
ZUlkKCkpOworfQorCit2b2lkIExheWVyRmlsdGVyUmVuZGVyZXI6OnBvbmcoTGF5ZXJSZW5kZXJl
clN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPnRl
eHR1cmUoKS0+dGV4dHVyZUlkKCksIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJl
cjo6cHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlLCBpbnQgc291cmNl
SWQpCit7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fc25hcHNob3RUZXh0dXJlLT50ZXh0dXJl
SWQoKSwgMCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZUlkKTsK
KyAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFuc3BhcmVuY3kKKwor
ICAgIGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNp
emUoKS5oZWlnaHQoKSk7CisKKyAgICBnbFVzZVByb2dyYW0obV9jc3NGaWx0ZXJQcm9ncmFtT2Jq
ZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2hdKTsKKyAgICBnbERyYXdB
cnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKK30KKwordm9pZCBMYXllckZpbHRlclJlbmRl
cmVyOjpwb3BTbmFwc2hvdCgpCit7CisgICAgLy8gVGhlIG5hbWUgaXMgc2xpZ2h0bHkgbWlzbGVh
ZGluZy4KKyAgICAvLyBUaGlzIERSQVdTIHRoZSBwcmV2aW91cyB0ZXh0dXJlIHVzaW5nIHRoZSBj
dXJyZW50IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24sIHRoZW4gc2V0cyB0aGUgdGV4dHVyZQor
ICAgIC8vIHRvIHRoZSBzbmFwc2hvdCB0ZXh0dXJlLiBOZXh0IHRpbWUgZ2xEcmF3QXJyYXlzIGlz
IGNhbGxlZCwgdGhlIHNuYXBzaG90IHdpbGwgYmUgZHJhd24uCisKKyAgICBnbERyYXdBcnJheXMo
R0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fc25hcHNob3RUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK1ZlY3RvcjxSZWZQdHI8TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBMYXllckZpbHRlclJlbmRlcmVyOjphY3Rpb25zRm9y
T3BlcmF0aW9ucyhMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIG9wcykKK3sKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gcmV0OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgb3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
b3BlcmF0aW9uID0gKm9wc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbi5nZXRPcGVy
YXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpCTFVSICYmIHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLnN0ZERldmlhdGlvbigpLnZhbHVlKCkg
PCAwLjEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpbnQgcHJvZ3JhbUlkID0g
b3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpOwor
ICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShwcm9n
cmFtSWQpKTsKKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkp
IHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ft
b3VudExvY2F0aW9uW3Byb2dyYW1JZF0KKyAgICAgICAgICAgICAgICAsIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVu
aWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQorICAgICAgICAgICAg
ICAgICwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEJsdXIgaXMgYSB0d28tc3RlcCBwcm9jZXNzOgorICAgICAgICAgICAgLy8gICAgIDEuIGJs
dXIgWAorICAgICAgICAgICAgLy8gICAgIDIuIGJsdXIgWQorICAgICAgICAgICAgLy8gVGhpcyB3
YXkgd2UgY2FuIGhhdmUgMm4gdGltZSBpbnN0ZWFkIG9mIG5eMiB0aW1lKQorCisgICAgICAgICAg
ICBkb3VibGUgYW1vdW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+
KG9wZXJhdGlvbikuc3RkRGV2aWF0aW9uKCkudmFsdWUoKTsKKworICAgICAgICAgICAgLy8gQkxV
UiBZOgorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNy
ZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldLCBh
bW91bnQpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFm
OjpjcmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMF0KKyAgICAgICAgICAgICAgICAsIDEuMGYg
LyBmbG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgICAgIC8vIEJM
VVIgWDoKKyAgICAgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clgpKTsKKyAgICAgICAgICAgIHJl
dC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlv
bltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXSwgYW1vdW50KSk7CisgICAgICAgICAg
ICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3Vu
dExvY2F0aW9uWzFdCisgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6
ZSgpLndpZHRoKCkpKSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBTaGFkb3cgaXMgYSBmb3VyLXN0ZXAgcHJvY2VzczoKKyAgICAgICAgICAg
IC8vICAgICAxLiBjYXB0dXJlIHNuYXBzaG90CisgICAgICAgICAgICAvLyAgICAgICAgdHVybiBp
bnRvIGEgc29saWQgb2Zmc2V0IG1hc2sKKyAgICAgICAgICAgIC8vICAgICAyLiBibHVyIFgKKyAg
ICAgICAgICAgIC8vICAgICAzLiBibHVyIFkKKyAgICAgICAgICAgIC8vICAgICA0LiByZXBhaW50
IG9yaWdpbmFsIG9uIHRvcCBvZiBtYXNrCisgICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uJiBkc2ZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgICAgICByZXQubGFzdCgpLT5zZXRQdXNoU25h
cHNob3QoKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTJm
OjpjcmVhdGUobV9vZmZzZXRMb2NhdGlvbgorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby54
KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgLCBm
bG9hdChkc2ZvLnkoKSkgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7CisgICAg
ICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0zZjo6Y3JlYXRlKG1fc2hh
ZG93Q29sb3JMb2NhdGlvbgorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xvcigpLnJl
ZCgpKSAvIDI1NS4wZgorICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xvcigpLmdyZWVu
KCkpIC8gMjU1LjBmCisgICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNvbG9yKCkuYmx1ZSgp
KSAvIDI1NS4wZikpOworCisgICAgICAgICAgICAvLyBCTFVSIFkKKyAgICAgICAgICAgIHJldC5h
cHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyQmx1clkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0o
VW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlckJsdXJZXQorICAgICAgICAgICAgICAgICwgZHNmby5zdGREZXZpYXRpb24oKSkpOworICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Js
dXJBbW91bnRMb2NhdGlvblswXQorICAgICAgICAgICAgICAgICwgMS4wZiAvIGZsb2F0KHN1cmZh
Y2UtPnNpemUoKS5oZWlnaHQoKSkpKTsKKworICAgICAgICAgICAgLy8gQkxVUiBYCisgICAgICAg
ICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYKSk7CisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBl
bmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJCbHVyWF0KKyAgICAgICAgICAgICAgICAsIGRzZm8uc3RkRGV2aWF0aW9u
KCkpKTsKKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpj
cmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMV0KKyAgICAgICAgICAgICAgICAsIDEuMGYgLyBm
bG9hdChzdXJmYWNlLT5zaXplKCkud2lkdGgoKSkpKTsKKworICAgICAgICAgICAgLy8gUmVwYWlu
dCBvcmlnaW5hbCBpbWFnZQorICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCkp
OworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0UG9wU25hcHNob3QoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChyZXQuc2l6ZSgpICUgMikgLy8gV2UgbmVlZCBhbiBldmVuIG51bWJlciBvZiBh
Y3Rpb25zLiBTZWUgcGluZy1wb25nIG5vdGUgaW4gYXBwbHlMYXllckZpbHRlcnMoKS4KKyAgICAg
ICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCkpOworCisgICAgcmV0dXJuIHJldDsKK30KKwor
c3RhdGljIGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAsICAwLCAxLCAgMSwgMSwgIDEs
IDAgfTsKKwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQm
IGZibywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIFZlY3RvcjxSZWZQdHI8TGF5ZXJG
aWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBhY3Rpb25zKQoreworICAgIGdsQ2xlYXJDb2xvcigwLjBm
LCAwLjBmLCAwLjBmLCAwLjBmKTsKKyAgICBBU1NFUlQoIShhY3Rpb25zLnNpemUoKSAlIDIpKTsg
Ly8gU2VlIHBpbmctcG9uZ2luZyBub3RlIGJlbG93LgorCisgICAgaWYgKCFtX2VuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbGF5ZXItPmZpbHRlcnMoKS5zaXplKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUgPSB0
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICBi
b29sIHJlcXVpcmVTbmFwc2hvdCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQ
dXNoU25hcHNob3QoKSkKKyAgICAgICAgICAgIHJlcXVpcmVTbmFwc2hvdCA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKCFtX3NuYXBzaG90VGV4dHVyZSAmJiByZXF1aXJlU25hcHNob3QpCisgICAg
ICAgIG1fc25hcHNob3RUZXh0dXJlID0gdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+
Y3JlYXRlVGV4dHVyZSgpOworCisgICAgTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UgPSBs
YXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKKworICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZsYXllci0+Z2V0VHJhbnNmb3JtZWRCb3Vu
ZHMoKSApOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKKworICAgIG1fdGV4dHVyZS0+cHJv
dGVjdChzdXJmYWNlLT50ZXh0dXJlKCktPnNpemUoKSk7CisgICAgaWYgKHJlcXVpcmVTbmFwc2hv
dCkKKyAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgp
LT5zaXplKCkpOworCisgICAgaWYgKCFmYm8pCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEs
ICZmYm8pOworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgLy8gTk9URSBBQk9VVCBQSU5HLVBPTkdJTkcKKyAgICAgICAgLy8gPT09PT09PT09
PT09PT09PT09PT09PT0KKyAgICAgICAgLy8gVW5kZXIgT3BlbkdMIEVTIDIuMCwgd2UgY2Fubm90
IHVzZSB0aGUgZmJvIHdlIGFyZSB3cml0dGluZyB0byBhcyBhIHRleHR1cmUsIHNvIHdlIG5lZWQg
dG8gcGxheSBwaW5nLXBvbmc6CisgICAgICAgIC8vICAxKSBEcmF3IHBhcmVudCBzdXJmYWNlIHRv
IG91ciB0ZXh0dXJlIHdpdGggZWZmZWN0LgorICAgICAgICAvLyAgMikgRHJhdyBvdXIgc3VyZmFj
ZSB0byBwYXJlbnQgdGV4dHVyZSB3aXRoIGVmZmVjdC4KKyAgICAgICAgLy8gIDMpIFJlcGVhdC4K
KyAgICAgICAgLy8gQmVjYXVzZSB3ZSBldmVudHVhbGx5IGhhdmUgdG8gZW5kIG9uIHRoZSBwYXJl
bnQgdGV4dHVyZSwgd2UgbmVlZCBhbiBldmVuIG51bWJlciBvZiBhY3Rpb25zLgorICAgICAgICAv
LyBhY3Rpb25zRm9yT3BlcmF0aW9ucyB0YWtlcyBjYXJlIG9mIHRoYXQuCisKKyAgICAgICAgaWYg
KGFjdGlvbnNbaV0tPnNob3VsZFB1c2hTbmFwc2hvdCgpKQorICAgICAgICAgICAgcHVzaFNuYXBz
aG90KHN1cmZhY2UsICghKGkgJSAyKSA/IHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkg
OiBtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgaWYgKCEoaSAlIDIpKQorICAg
ICAgICAgICAgcGluZyhzdXJmYWNlKTsgLy8gU2V0IGZyYW1lYnVmZmVyIHRvIG91cnMsIGFuZCB0
ZXh0dXJlIHRvIHBhcmVudAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwb25nKHN1cmZhY2Up
OyAvLyBTZXQgdGV4dHVyZSB0byBwYXJlbnQsIGFuZCBmcmFtZWJ1ZmZlciB0byB1cworCisgICAg
ICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7IC8vIHRvIHRyYW5zcGFyZW5jeQorICAg
ICAgICBnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5z
aXplKCkuaGVpZ2h0KCkpOworCisgICAgICAgIGFjdGlvbnNbaV0tPnVzZUFjdGlvbk9uKHRoaXMp
OworCisgICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQb3BTbmFwc2hvdCgpKQorICAgICAg
ICAgICAgcG9wU25hcHNob3QoKTsKKworICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVf
RkFOLCAwLCA0KTsKKyAgICB9CisKKyAgICBtX3RleHR1cmUtPnVucHJvdGVjdCgpOworICAgIGlm
IChyZXF1aXJlU25hcHNob3QpCisgICAgICAgIG1fc25hcHNob3RUZXh0dXJlLT51bnByb3RlY3Qo
KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgZ2xDbGVhckNv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShDU1NfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWMxZjA2
ZTAzMTliZTkzMGRiYmFmMTRjZmY1ZWZjMjg2ZDdkODMzOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5k
ZXJlci5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpZm5kZWYgTGF5ZXJGaWx0ZXJSZW5kZXJlcl9oCisjZGVmaW5lIExheWVyRmls
dGVyUmVuZGVyZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJE
YXRhLmgiCisjaW5jbHVkZSAiT3duUHRyLmgiCisjaW5jbHVkZSAiVGV4dHVyZS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1HTEVTMkNvbnRleHQuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVn
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFk
OworY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlcjsKK2NsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb247CitjbGFzcyBMYXllclJlbmRlcmVyU3VyZmFjZTsKKworY2xhc3MgVW5pZm9ybWYgOiBw
dWJsaWMgUmVmQ291bnRlZDxVbmlmb3JtZj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVu
aWZvcm1mKTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9IDA7CisKK3Byb3Rl
Y3RlZDoKKyAgICBVbmlmb3JtZihpbnQgbG9jYXRpb24pOworICAgIGNvbnN0IGludCYgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1f
bG9jYXRpb247Cit9OworCitjbGFzcyBVbmlmb3JtMWYgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9u
LCBmbG9hdCB2YWwpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTFmKGludCBsb2NhdGlvbiwg
ZmxvYXQgdmFsKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBm
bG9hdCBtX3ZhbDsKK307CisKK2NsYXNzIFVuaWZvcm0yZiA6IHB1YmxpYyBVbmlmb3JtZiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShpbnQgbG9jYXRp
b24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTJm
KGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWxbMl07Cit9OworCitjbGFzcyBV
bmlmb3JtM2YgOiBwdWJsaWMgVW5pZm9ybWYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwx
LCBmbG9hdCB2YWwyKTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZvcm0zZihpbnQgbG9jYXRpb24s
IGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCBhcHBseSgpOworICAgIGZsb2F0IG1fdmFsWzNdOworfTsKKworY2xhc3MgTGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyRmlsdGVyUmVu
ZGVyZXJBY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uPiBjcmVhdGUoaW50IHByb2dyYW1JZCk7CisgICAgICAgIC8vIEEgdmVj
dG9yIG9mIGFjdGlvbnMgbXVzdCBoYXZlIGFuIGV2ZW4gY291bnQsIHNvIGlmIHlvdSBoYXZlIGFu
IG9kZCBjb3VudCwgYWRkIGEgcGFzc3Rocm91Z2ggZXZlbnQgYXQgdGhlIGVuZC4KKyAgICAgICAg
Ly8gU2VlIHRoZSBwaW5nLXBvbmcgbm90ZSBpbiBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFj
dGlvbnMuCisgICAgfkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oKTsKKworICAgIGJvb2wgc2hv
dWxkUHVzaFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gbV9wdXNoU25hcHNob3Q7IH0KKyAgICB2
b2lkIHNldFB1c2hTbmFwc2hvdCgpIHsgbV9wdXNoU25hcHNob3QgPSB0cnVlOyB9CisKKyAgICBi
b29sIHNob3VsZFBvcFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gbV9wb3BTbmFwc2hvdDsgfQor
ICAgIHZvaWQgc2V0UG9wU25hcHNob3QoKSB7IG1fcG9wU25hcHNob3QgPSB0cnVlOyB9CisKKyAg
ICB2b2lkIGFwcGVuZFVuaWZvcm0oY29uc3QgUmVmUHRyPFVuaWZvcm1mPiYgdW5pZm9ybSkgeyBt
X3VuaWZvcm1zLmFwcGVuZCh1bmlmb3JtKTsgfQorICAgIHZvaWQgdXNlQWN0aW9uT24oTGF5ZXJG
aWx0ZXJSZW5kZXJlciopOworCitwcm90ZWN0ZWQ6CisgICAgaW50IG1fcHJvZ3JhbUlkOworICAg
IGJvb2wgbV9wdXNoU25hcHNob3Q7CisgICAgYm9vbCBtX3BvcFNuYXBzaG90OworCisgICAgVmVj
dG9yPFJlZlB0cjxVbmlmb3JtZj4gPiBtX3VuaWZvcm1zOworcHJpdmF0ZToKKyAgICBMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uKGludCBwcm9ncmFtSWQpOworfTsKKworY2xhc3MgTGF5ZXJGaWx0
ZXJSZW5kZXJlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGaWx0ZXJSZW5kZXJl
cik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllckZpbHRlclJlbmRlcmVy
PiBjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENvb3Jk
TG9jYXRpb24pOworICAgIHZvaWQgYXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+
ID4pOworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBhY3Rp
b25zRm9yT3BlcmF0aW9ucyhMYXllclJlbmRlcmVyU3VyZmFjZSosIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiA+Jik7CisKKyAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBmYWls
cywgb3IgZGlzYWJsZSgpIGlzIGNhbGxlZCwgdGhpcyBpcyBmYWxzZS4KKyAgICBib29sIGlzRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQorICAgIHZvaWQgZGlzYWJsZSgpIHsg
bV9lbmFibGVkID0gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBMYXllckZpbHRlclJlbmRlcmVy
KGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50JiB0ZXhDb29yZExvY2F0aW9u
KTsKKyAgICB2b2lkIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNvbnN0
IGNoYXIqIGF0dHJpYk5hbWUpOworICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygp
OworCisgICAgLy8gU2VlIG5vdGUgYWJvdXQgcGluZy1wb25naW5nIGluIGFwcGx5QWN0aW9ucygp
CisgICAgdm9pZCBwaW5nKExheWVyUmVuZGVyZXJTdXJmYWNlKik7CisgICAgdm9pZCBwb25nKExh
eWVyUmVuZGVyZXJTdXJmYWNlKik7CisKKyAgICAvLyBUaGlzIGlzIGZvciBzaGFkb3dzLCB3aGVy
ZSB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHNoYWRvdywgYW5kIHRoZW4gcmVwYWludCB0aGUgb3JpZ2lu
YWwgaW1hZ2UKKyAgICAvLyBvbiB0b3Agb2YgdGhlIHNoYWRvdy4KKyAgICB2b2lkIHB1c2hTbmFw
c2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSosIGludCBzb3VyY2VJZCk7CisgICAgdm9pZCBwb3BT
bmFwc2hvdCgpOworCisgICAgYm9vbCBtX2VuYWJsZWQ7CisKKyAgICAvLyBFU1NMIGF0dHJpYnV0
ZXMgc2hhcmVkIHdpdGggTGF5ZXJSZW5kZXJlciAtIHNlZSBjb25zdHJ1Y3RvcjoKKyAgICBjb25z
dCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOworICAgIGNvbnN0IGludCBtX3RleENvb3JkTG9jYXRp
b247CisKKyAgICAvLyBFU1NMIHByb2dyYW0gb2JqZWN0IElEczoKKyAgICB1bnNpZ25lZCBtX2Nz
c0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnNd
OworCisgICAgLy8gRVNTTCB1bmlmb3JtIGxvY2F0aW9uczoKKyAgICBpbnQgbV9hbW91bnRMb2Nh
dGlvbltMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyc107CisgICAgaW50IG1fYmx1
ckFtb3VudExvY2F0aW9uWzJdOyAvLyAwID0gWSwgMSA9IFgKKyAgICBpbnQgbV9zaGFkb3dDb2xv
ckxvY2F0aW9uOworICAgIGludCBtX29mZnNldExvY2F0aW9uOworCisgICAgLy8gVGV4dHVyZXMg
Zm9yIHBsYXlpbmcgcGluZy1wb25nIC0gc2VlIG5vdGUgaW4gYXBwbHlBY3Rpb25zKCkKKyAgICBS
ZWZQdHI8VGV4dHVyZT4gbV90ZXh0dXJlOworICAgIFJlZlB0cjxUZXh0dXJlPiBtX3NuYXBzaG90
VGV4dHVyZTsKKworICAgIGZyaWVuZCBjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOwor
fTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBMYXllckZpbHRlclJlbmRlcmVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyUmVuZGVyZXIuY3BwCmluZGV4IDc3NjIzZTU4Y2Y2OTJlYmI4ZGMxNDhmMGU5MTFhNGU2
NTkwZThhZjYuLjBlNDJkZDQ0MzFjYzVkNjRjMGM2N2RmNGQ4NjIxMzE4ZmE1ZDE3MjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclJlbmRlcmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNs
dWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgogCkBAIC02NCw3ICs2
NSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcigpCiAjZW5kaWYKIH0KIAotc3RhdGljIEdM
dWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCitH
THVpbnQgTGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciog
c2hhZGVyU291cmNlKQogewogICAgIEdMdWludCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcih0eXBl
KTsKICAgICBpZiAoIXNoYWRlcikKQEAgLTg2LDcgKzg3LDcgQEAgc3RhdGljIEdMdWludCBsb2Fk
U2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCiAgICAgcmV0dXJu
IHNoYWRlcjsKIH0KIAotc3RhdGljIEdMdWludCBsb2FkU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQor
R0x1aW50IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiB7CiAgICAg
R0x1aW50IHZlcnRleFNoYWRlcjsKICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXI7CkBAIC01MDAs
NiArNTAxLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0xheWVyc09uU3VyZmFjZXMoY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyCiAgICAgICAgIGludCBjdXJyZW50
U3RlbmNpbFZhbHVlID0gMDsKICAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KC0xLCAtMSwgMiwg
Mik7CiAgICAgICAgIGNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShzdXJmYWNlTGF5ZXJzW2ldLmdl
dCgpLCBjdXJyZW50U3RlbmNpbFZhbHVlLCBjbGlwUmVjdCk7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKKyAgICAgICAgICAgIG1fZmls
dGVyUmVuZGVyZXIgPSBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUobV9wb3NpdGlvbkxvY2F0
aW9uLCBtX3RleENvb3JkTG9jYXRpb24pOworICAgICAgICBpZiAobGF5ZXItPmZpbHRlck9wZXJh
dGlvbnNDaGFuZ2VkKCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXJPcGVyYXRpb25z
Q2hhbmdlZChmYWxzZSk7CisgICAgICAgICAgICBsYXllci0+c2V0RmlsdGVyQWN0aW9ucyhtX2Zp
bHRlclJlbmRlcmVyLT5hY3Rpb25zRm9yT3BlcmF0aW9ucyhzdXJmYWNlLCBsYXllci0+ZmlsdGVy
cygpLm9wZXJhdGlvbnMoKSkpOworICAgICAgICB9CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIt
PmFwcGx5QWN0aW9ucyhtX2ZibywgbGF5ZXIsIGxheWVyLT5maWx0ZXJBY3Rpb25zKCkpOworICAg
ICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBJ
ZiB0aGVyZSBhcmUgbGF5ZXJzIGRyYXdlZCBvbiBzdXJmYWNlcywgd2UgbmVlZCB0byBzd2l0Y2gg
dG8gZGVmYXVsdCBmcmFtZWJ1ZmZlci4KQEAgLTcxMiw3ICs3MjQsMTEgQEAgdm9pZCBMYXllclJl
bmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5
ZXIsIGNvbnN0IFQKICAgICAvLyBDYWxjdWxhdGUgdGhlIGxheWVyJ3Mgb3BhY2l0eS4KICAgICBv
cGFjaXR5ICo9IGxheWVyLT5vcGFjaXR5KCk7CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisg
ICAgYm9vbCB1c2VMYXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5ZXIoKSB8fCBs
YXllci0+cmVwbGljYUxheWVyKCkgfHwgbGF5ZXItPmZpbHRlcnMoKS5zaXplKCk7CisjZWxzZQog
ICAgIGJvb2wgdXNlTGF5ZXJSZW5kZXJlclN1cmZhY2UgPSBsYXllci0+bWFza0xheWVyKCkgfHwg
bGF5ZXItPnJlcGxpY2FMYXllcigpOworI2VuZGlmCiAgICAgaWYgKCF1c2VMYXllclJlbmRlcmVy
U3VyZmFjZSkgewogICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7CiAgICAg
ICAgIGxheWVyLT5jbGVhckxheWVyUmVuZGVyZXJTdXJmYWNlKCk7CkBAIC05ODQsNyArMTAwMCw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4g
bV9jb250ZXh0LT5tYWtlQ3VycmVudCgpOwogfQogCi0vLyBCaW5kcyB0aGUgZ2l2ZW4gYXR0cmli
dXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCB0aHJlZSBwcm9ncmFtcwor
Ly8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9uIGxvY2F0aW9uIGFj
cm9zcyBhbGwgcHJvZ3JhbXMKIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRoaXMgYWxsb3dz
IHRoZSBjb2RlIHRvIGJpbmQgdGhlIGF0dHJpYnV0ZXMgb25seSBvbmNlCiAvLyBldmVuIHdoZW4g
c3dpdGNoaW5nIGJldHdlZW4gcHJvZ3JhbXMuCiB2b2lkIExheWVyUmVuZGVyZXI6OmJpbmRDb21t
b25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIGF0dHJpYk5hbWUpCkBA
IC0xMDUzLDcgKzEwNjksNiBAQCBib29sIExheWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRH
TE9iamVjdHMoKQogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRl
eENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGEgKiBtYXNrQ29sb3Iudzsg
ICAgICAgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLQogICAgIC8vIFNoYWRlcnMgZm9y
IGRyYXdpbmcgdGhlIGRlYnVnIGJvcmRlcnMgYXJvdW5kIHRoZSBsYXllcnMuCiAgICAgY2hhciBj
b2xvclZlcnRleFNoYWRlclN0cmluZ1tdID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9z
aXRpb247ICAgXG4iCkBAIC0xMTM5LDcgKzExNTQsNyBAQCBib29sIExheWVyUmVuZGVyZXI6Omlu
aXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24gYW5k
IG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCB0aHJlZSBwcm9ncmFtcyB0bworICAgIC8vIFNwZWNp
ZnkgdGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uIGFuZCBtYWtlIGl0IHRoZSBz
YW1lIGZvciBhbGwgcHJvZ3JhbXMgdG8KICAgICAvLyBhdm9pZCBiaW5kaW5nIHJlLWJpbmRpbmcg
dGhlIHZlcnRleCBhdHRyaWJ1dGVzLgogICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihtX3Bv
c2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0aW9uIik7CiAgICAgYmluZENvbW1vbkF0dHJpYkxvY2F0
aW9uKG1fdGV4Q29vcmRMb2NhdGlvbiwgImFfdGV4Q29vcmQiKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
LmgKaW5kZXggZjZjM2JlODc4ZmExMWViZTE3OWJiM2VlNmQyYTdmMGQ2NDM4YjJiMC4uNDM3OTI3
YmVlYWM4YTA0ODdiNDE0ZWY1NDcwN2ZiMzQxNzZhNDhlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
LmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJM
YXllckRhdGEuaCIKKyNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdM
RVMyQ29udGV4dC5oPgpAQCAtMTM0LDYgKzEzNSw5IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUg
bGF5ZXIgaGFzIGFscmVhZHkgYmVlbiBkcmF3ZWQgb24gYSBzdXJmYWNlLgogICAgIGJvb2wgbGF5
ZXJBbHJlYWR5T25TdXJmYWNlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBjb25zdDsKIAorICAg
IHN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVy
U291cmNlKTsKKyAgICBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwor
CiBwcml2YXRlOgogICAgIHZvaWQgcHJlcGFyZUZyYW1lUmVjdXJzaXZlKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBpc0NvbnRleHRDdXJyZW50KTsK
ICAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPFJlZlB0cjxM
YXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdXJmYWNlTGF5ZXJzLCBmbG9hdCBvcGFjaXR5LCBG
bG9hdFJlY3QgY2xpcFJlY3QpOwpAQCAtMTY0LDYgKzE2OCwxMCBAQCBwcml2YXRlOgogICAgIC8v
IFNoYWRlciB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgogICAgIGNvbnN0IGludCBt
X3Bvc2l0aW9uTG9jYXRpb247CiAgICAgY29uc3QgaW50IG1fdGV4Q29vcmRMb2NhdGlvbjsKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgT3duUHRyPExheWVyRmlsdGVyUmVuZGVyZXI+IG1f
ZmlsdGVyUmVuZGVyZXI7CisjZW5kaWYKKwogICAgIGludCBtX3NhbXBsZXJMb2NhdGlvbltMYXll
ckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVyc107CiAgICAgaW50IG1fYWxwaGFMb2Nh
dGlvbltMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVyc107CiAgICAgaW50IG1f
bWFza1NhbXBsZXJMb2NhdGlvbltMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVy
c107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmluZGV4IDE1YmJlMGE4ZjEzODhh
MTZlNDAxOTRhZmVjMjBhOGY4YjAyZjg0M2EuLmU5ZDNkZmY0MmM5YzEwZmZmNTA5ZDY1YzM4YjQz
ZTc2ZjRiY2Y3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCkBAIC02NSw2
ICs2NSw5IEBAIExheWVyV2ViS2l0VGhyZWFkOjpMYXllcldlYktpdFRocmVhZChMYXllclR5cGUg
dHlwZSwgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG93CiAgICAgLCBtX2lzTWFzayhmYWxzZSkK
ICAgICAsIG1fYW5pbWF0aW9uc0NoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2NsZWFyT3ZlcnJpZGVP
bkNvbW1pdChmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgLCBtX2ZpbHRlcnND
aGFuZ2VkKGZhbHNlKQorI2VuZGlmCiB7CiAgICAgaWYgKHR5cGUgPT0gTGF5ZXIpCiAgICAgICAg
IG1fdGlsZXIgPSBMYXllclRpbGVyOjpjcmVhdGUodGhpcyk7CkBAIC0yODQsNiArMjg3LDEyIEBA
IHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKQogICAg
IG1fcG9zaXRpb24gKz0gbV9hYnNvbHV0ZU9mZnNldDsKICAgICAvLyBDb3B5IHRoZSBiYXNlIHZh
cmlhYmxlcyBmcm9tIHRoaXMgb2JqZWN0IGludG8gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkCiAg
ICAgcmVwbGljYXRlKG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSk7CisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIGlmIChtX2ZpbHRlcnNDaGFuZ2VkKSB7CisgICAgICAgIG1fZmls
dGVyc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5z
ZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZCh0cnVlKTsKKyAgICB9CisjZW5kaWYKICAgICBpZiAo
bV9hbmltYXRpb25zQ2hhbmdlZCkgewogICAgICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQt
PnNldFJ1bm5pbmdBbmltYXRpb25zKG1fcnVubmluZ0FuaW1hdGlvbnMpOwogICAgICAgICBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFN1c3BlbmRlZEFuaW1hdGlvbnMobV9zdXNwZW5kZWRB
bmltYXRpb25zKTsKQEAgLTQwNSw2ICs0MTQsMzEgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6
c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHNldE5lZWRzRGlzcGxheSgpOwog
fQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBMYXllcldlYktpdFRocmVhZDo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorewor
ICAgIC8vIFRoZXJlIGlzIHdvcmsgYXNzb2NpYXRlZCB3aXRoIGNvbXBvc2l0aW5nIGZpbHRlcnMs
IGV2ZW4gaWYgdGhlcmUgYXJlIHplcm8gZmlsdGVycywKKyAgICAvLyBzbyBpZiB0aGVyZSBhcmUg
bm8gZmlsdGVycywgY2xhaW0gd2UgY2FuJ3QgY29tcG9zaXRlIHRoZW0uCisgICAgaWYgKCFmaWx0
ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3Bl
cmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJzLmF0KGkpOworICAgICAgICBzd2l0Y2gg
KGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgorI2VuZGlmCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIGNvbnN0IExheWVyV2Vi
S2l0VGhyZWFkKiBMYXllcldlYktpdFRocmVhZDo6cm9vdExheWVyKCkgY29uc3QKIHsKICAgICBj
b25zdCBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSB0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktp
dFRocmVhZC5oCmluZGV4IDQ5YTQ5YmU1ZjEzYzkwMDkwN2U2MmVlODE1OTM5M2NiMzExNjhkM2Yu
LmUxYTkyNTRhMzhkZWY0YjVmNWNhZDYxN2M3YzkwOTBlMjY4YTU0MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJl
YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyV2ViS2l0VGhyZWFkLmgKQEAgLTk4LDYgKzk4LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNldE5lZWRz
Q29tbWl0KCk7IH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldEZpbHRl
cnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OyBtX2ZpbHRlcnNDaGFuZ2VkID0gdHJ1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHN0YXRp
YyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycyk7CisjZW5kaWYKKwogICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wgaXNPcGFxdWUpIHsgbV9p
c09wYXF1ZSA9IGlzT3BhcXVlOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKICAgICB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlv
bjsgc2V0TmVlZHNDb21taXQoKTsgfQpAQCAtMjAyLDYgKzIwNyw5IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9pc01hc2sgOiAxOwogICAgIHVuc2lnbmVkIG1fYW5pbWF0aW9uc0NoYW5nZWQg
OiAxOwogICAgIHVuc2lnbmVkIG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0IDogMTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgdW5zaWduZWQgbV9maWx0ZXJzQ2hhbmdlZCA6IDE7CisjZW5k
aWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKaW5kZXggMzZkMDZkMzJiNjljNDcxNmYz
MGI1NDkzMzQ3YWRiYWVkMTYwMjM0My4uNDhhYmEyYmE0YzFhMDE5OWQ2ZmY4MGM0ODkzZjg4OTZm
OWNhYzE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUN1c3RvbUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZS5oIgpAQCAtMTM5LDkgKzE0MCwxMSBAQCB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghaGFkQ29udGV4dCB8fCBtX2NvbnRleHRT
aXplICE9IG5ld0NvbnRleHRTaXplKQogICAgICAgICByZXNpemVDb250ZXh0KG5ld0NvbnRleHRT
aXplKTsKIAorI2lmICFQTEFURk9STShCTEFDS0JFUlJZKSAvLyBCbGFja0JlcnJ5IGRlZmluZXMg
aXRzIG93biBUZXh0dXJlIGNsYXNzLgogICAgIC8vIERvIG5vdCBkcmF3IHRoZSBmaWx0ZXIgaWYg
dGhlIGlucHV0IGltYWdlIGNhbm5vdCBmaXQgaW5zaWRlIGEgc2luZ2xlIEdQVSB0ZXh0dXJlLgog
ICAgIGlmIChtX2lucHV0VGV4dHVyZS0+dGlsZXMoKS5udW1UaWxlc1goKSAhPSAxIHx8IG1faW5w
dXRUZXh0dXJlLT50aWxlcygpLm51bVRpbGVzWSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKKyNl
bmRpZgogICAgIAogICAgIC8vIFRoZSBzaGFkZXIgaGFkIGNvbXBpbGVyIGVycm9ycy4gV2UgY2Fu
bm90IGRyYXcgYW55dGhpbmcuCiAgICAgaWYgKCFtX2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFs
aXplZCgpKQpAQCAtMTg1LDcgKzE4OCwxMSBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjppbml0aWFs
aXplQ29udGV4dCgpCiAKIHZvaWQgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQoY29uc3Qg
SW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiB7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpIC8v
IEJsYWNrQmVycnkgZGVmaW5lcyBpdHMgb3duIFRleHR1cmUgY2xhc3MKICAgICBtX2lucHV0VGV4
dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIFRleHR1cmU6OlJHQkE4LCBu
ZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSk7CisjZWxzZQor
ICAgIG1faW5wdXRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKHRydWUpOworI2VuZGlmCiAgICAg
CiAgICAgaWYgKCFtX2ZyYW1lQnVmZmVyKQogICAgICAgICBtX2ZyYW1lQnVmZmVyID0gbV9jb250
ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwpAQCAtMjY5LDggKzI3NiwxMiBAQCB2b2lkIEZFQ3Vz
dG9tRmlsdGVyOjpiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXkpCiAgICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAh
PSAtMSkgewogICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUwKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9jb21waWxlZFBy
b2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkK
ICAgICAgICAgbV9pbnB1dFRleHR1cmUtPmxvYWQoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpKTsKICAg
ICAgICAgbV9pbnB1dFRleHR1cmUtPmJpbmRUaWxlKDApOworI2Vsc2UKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAobV9jb21waWxlZFByb2dy
YW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
aAppbmRleCBiODc5NmU4MDI5MThiY2I2YWEzNTcwZDE5M2NjY2JkZjNkMWM5ZTYzLi4wYTFiN2Qx
YTAxOTZkY2ZiZjMzOGEyODkyZjUxNjJjOWVjNDU0ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgK
QEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjZW5kaWYKKwogLy8gQW5ub3lpbmds
eSwgd2luZ2RpLmggI2RlZmluZXMgdGhpcy4KICNpZmRlZiBQQVNTVEhST1VHSAogI3VuZGVmIFBB
U1NUSFJPVUdICkBAIC00NCw3ICs0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIENT
UyBGaWx0ZXJzCiAKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorY2xhc3MgRmlsdGVyT3BlcmF0
aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZpbHRlck9wZXJhdGlvbj4geworI2Vs
c2UKIGNsYXNzIEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlck9wZXJh
dGlvbj4geworI2VuZGlmCiBwdWJsaWM6CiAgICAgZW51bSBPcGVyYXRpb25UeXBlIHsKICAgICAg
ICAgUkVGRVJFTkNFLCAvLyB1cmwoI3NvbWVmaWx0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVy
cnkuY21ha2UKaW5kZXggYWYxOGNjMWU5Mzc2YzcwMTMyOTIzNzAzNzdhNWNjODYxN2JkMjYyZi4u
MTk3ZDEwZTUxZDU4Zjc1N2RiOTVlNWUzYjkzOWFjNmU3ZmViMWNlZSAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNCbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zQmxhY2tCZXJyeS5jbWFrZQpAQCAtMTczLDkgKzE3MywxNSBAQCBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV09SS0VSUyBPTikKIAogSUYgKEVOQUJMRV9HTEVTMikK
ICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfUkVOREVSSU5H
IE9OKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVS
QVRFRF8yRF9DQU5WQVMgT04pCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NTU19GSUxURVJTIE9OKQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9DU1NfU0hBREVSUyBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfV0VCR0wgT04pCiBFTFNFICgpCiAgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFXzNEX1JFTkRFUklORyBPRkYpCisgICAgV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBPRkYpCisg
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19GSUxURVJTIE9G
RikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NIQURF
UlMgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJH
TCBPRkYpCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFr
ZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGUyNTZiMGU1OGE0MDMxNjFhOWVh
ZDRiMzYzNjFhM2MyYmQ1OTFiOWEuLmIyNDYyOTExMzQzN2Q4MTQ0NjJmNjBhMGY3MzdjNDgzZmM5
N2I4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC0yNSw2ICsyNSw4IEBACiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTgogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19WQVJJ
QUJMRVMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DU1MzX0ZMRVhCT1gKKyNjbWFrZWRlZmluZTAx
IEVOQUJMRV9DU1NfRklMVEVSUworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NTU19TSEFERVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSCiAjY21ha2VkZWZpbmUw
MSBFTkFCTEVfREFUQUxJU1RfRUxFTUVOVAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0RBVEFfVFJB
TlNGRVJfSVRFTVMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZWFlZDc1OTk4NzMyMTUzMjQwZmJhOTBlYTRlMWU2YTg5MjQxMGUzLi4xMjAwZGEy
NWI5ZTlkZmRkNjBmZmUyNDk1MTE5NjFjZGZlZDExMDM0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMzEg
IEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgorCisgICAgICAgIFtC
bGFja0JlcnJ5XSBFbmFibGUgQ1NTIEZpbHRlciBFZmZlY3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjY4NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBDU1MgZmlsdGVyIGVmZmVjdHMsIHdp
dGggdGhlIGV4Y2VwdGlvbiBvZiBjdXN0b20gZWZmZWN0cyAoQ1NTIHNoYWRlcnMpIGFuZCByZWZl
cmVuY2UgZWZmZWN0cyAoU1ZHIGVmZmVjdHMpCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdl
ZCBieSBBcnZpZCBOaWxzc29uIDxhbmlsc3NvbkByaW0uY29tPiBhbmQgQW50b25pbyBHb21lcyA8
YWdvbWVzQHJpbS5jb20+LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtOiBBY2tub3dsZWRnZSBDU1MgZmlsdGVyIGVmZmVjdHMuCisKIDIwMTItMDctMzEgIEpv
Y2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBtb3ZlIEV2ZW50U2VuZGVyIGludG8gVGVzdFJ1bm5lci5hCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0KaW5kZXggNzdjYzFmNzYzMjBmYWNkNGFlY2U3ODIxZTkzYzlkYmE2
ZTYzY2QxMy4uMzQ0NTA5ZjZmNzg1ZWZiZTkzNGRiZDNkZTNmYmUxMDNhZjAyMTJkZiAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTYzLDcgKzE2Myw3IEBAIG15
IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTU19FWENMVVNJT05TIiwg
ZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGNzc0V4Y2x1c2lvbnNTdXBwb3J0IH0sCiAKICAgICB7
IG9wdGlvbiA9PiAiY3NzLWZpbHRlcnMiLCBkZXNjID0+ICJUb2dnbGUgQ1NTIEZpbHRlcnMgc3Vw
cG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfRklMVEVSUyIsIGRlZmF1bHQgPT4g
aXNBcHBsZVdlYktpdCgpLCB2YWx1ZSA9PiBcJGNzc0ZpbHRlcnNTdXBwb3J0IH0sCisgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV9DU1NfRklMVEVSUyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgp
IHx8IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJGNzc0ZpbHRlcnNTdXBwb3J0IH0sCiAKICAg
ICB7IG9wdGlvbiA9PiAiY3NzMy1mbGV4Ym94IiwgZGVzYyA9PiAiVG9nZ2xlIENTUzMgRmxleGJv
eCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTUzNfRkxFWEJPWCIsIGRlZmF1
bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3MzRmxleGJveFN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL0No
YW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3YjQ5MTY0ZGE3ZmYzNDMwZGVkMDNlOTViN2UwYjg0
MmNjZmQzM2ZiLi5iZjI3ZGZjZjRiODRlOTJkYzgzZWNmNTUzNWYyMjg4MzYxZTdjMWE1IDEwMDY0
NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTIt
MDctMzEgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgorCisgICAg
ICAgIFtCbGFja0JlcnJ5XSBFbmFibGUgQ1NTIEZpbHRlciBFZmZlY3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjY4NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBDU1MgZmlsdGVyIGVmZmVj
dHMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBjdXN0b20gZWZmZWN0cyAoQ1NTIHNoYWRlcnMpIGFu
ZCByZWZlcmVuY2UgZWZmZWN0cyAoU1ZHIGVmZmVjdHMpCisKKyAgICAgICAgSW50ZXJuYWxseSBy
ZXZpZXdlZCBieSBBcnZpZCBOaWxzc29uIDxhbmlsc3NvbkByaW0uY29tPiBhbmQgQW50b25pbyBH
b21lcyA8YWdvbWVzQHJpbS5jb20+LgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNC
bGFja0JlcnJ5LmNtYWtlOiBBZGQgTGF5ZXJGaWx0ZXJSZW5kZXJlcgorICAgICAgICAqIFNvdXJj
ZS9jbWFrZWNvbmZpZy5oLmNtYWtlOiBBY2tub3dsZWRnZSBDU1MgZmlsdGVyIGVmZmVjdHMKKwog
MjAxMi0wNy0zMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBQ
ZXJmLW8tbWF0aWM6IGRhc2hib2FyZCBpbWFnZXMgYXJlIG5vdCBnZW5lcmF0ZWQgcHJvcGVybHkg
ZnJvbSBpbmNyZW1lbnRhbGx5IHVwZGF0ZWQgSlNPTgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>