<?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>99694</bug_id>
          
          <creation_ts>2012-10-18 00:45:59 -0700</creation_ts>
          <short_desc>Refactor SVGAnimationElement&apos;s calcMode() and animationMode() for performance</short_desc>
          <delta_ts>2012-10-31 13:54:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</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>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>pdr</cc>
    
    <cc>rakuco</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>745047</commentid>
    <comment_count>0</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-18 00:45:59 -0700</bug_when>
    <thetext>SVGAnimationElement::calcMode() and SVGAnimationElement::animationMode() are a large component in SVG animation profiles. These two functions are incredibly cacheable as they only return data based off of attributes (the only exception being AnimateMotion which depends on a path).

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747000</commentid>
    <comment_count>1</comment_count>
      <attachid>169775</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-20 15:06:37 -0700</bug_when>
    <thetext>Created attachment 169775
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747001</commentid>
    <comment_count>2</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-20 15:09:04 -0700</bug_when>
    <thetext>It may be best to split this patch into two but I wanted to let reviewers see the final goal before splitting it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747006</commentid>
    <comment_count>3</comment_count>
      <attachid>169775</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-20 15:48:25 -0700</bug_when>
    <thetext>Comment on attachment 169775
First pass

There is one step further, which is to carry a dirty-bit and only recalc on demand.  Is it possible to do these two separate?  Not required.  Just curious how hard it would have been.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748024</commentid>
    <comment_count>4</comment_count>
      <attachid>169775</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-22 16:02:38 -0700</bug_when>
    <thetext>Comment on attachment 169775
First pass

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

It looks good for me. I can remember tat we had a reason not to put it on SVGElement but don&apos;t know why right now.

&gt; Source/WebCore/ChangeLog:147
&gt; +            SVGPathElemetn has been changed so that it notifies any &lt;mpath&gt;

s/SVGPathElemetn/SVGPathElement/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749121</commentid>
    <comment_count>5</comment_count>
      <attachid>169775</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-23 16:36:57 -0700</bug_when>
    <thetext>Comment on attachment 169775
First pass

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

pdr says he&apos;ll split this up. :)

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:49
&gt; +    m_calcMode = CalcModePaced;

setCalcMode()?

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:115
&gt;          m_path = Path();
&gt;          buildPathFromString(attribute.value(), m_path);
&gt; +        updateAnimationPath();

What about calling this from a setPath() (or setPathFromString?) method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749297</commentid>
    <comment_count>6</comment_count>
      <attachid>170307</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-23 21:08:01 -0700</bug_when>
    <thetext>Created attachment 170307
Patch 1 - Cache calcMode()

The original patch was way too big. This is the first self-contained piece: caching calcMode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749396</commentid>
    <comment_count>7</comment_count>
      <attachid>170327</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-23 23:39:19 -0700</bug_when>
    <thetext>Created attachment 170327
Patch 2 - Let SVGElements have pending resources.

This is the second self-contained piece: let SVGElements have pending resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752965</commentid>
    <comment_count>8</comment_count>
      <attachid>170307</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-28 10:40:29 -0700</bug_when>
    <thetext>Comment on attachment 170307
Patch 1 - Cache calcMode()

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753002</commentid>
    <comment_count>9</comment_count>
      <attachid>170307</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-28 16:05:44 -0700</bug_when>
    <thetext>Comment on attachment 170307
Patch 1 - Cache calcMode()

Patch #1: off to the queue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753004</commentid>
    <comment_count>10</comment_count>
      <attachid>170307</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-28 16:32:42 -0700</bug_when>
    <thetext>Comment on attachment 170307
Patch 1 - Cache calcMode()

Clearing flags on attachment: 170307

Committed r132755: &lt;http://trac.webkit.org/changeset/132755&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753729</commentid>
    <comment_count>11</comment_count>
      <attachid>170327</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-29 13:53:27 -0700</bug_when>
    <thetext>Comment on attachment 170327
Patch 2 - Let SVGElements have pending resources.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753746</commentid>
    <comment_count>12</comment_count>
      <attachid>170327</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-29 14:08:04 -0700</bug_when>
    <thetext>Comment on attachment 170327
Patch 2 - Let SVGElements have pending resources.

Clearing flags on attachment: 170327

Committed r132847: &lt;http://trac.webkit.org/changeset/132847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753747</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-29 14:08:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753761</commentid>
    <comment_count>14</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-29 14:23:09 -0700</bug_when>
    <thetext>Reopening. I saved the best patch for last! Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753979</commentid>
    <comment_count>15</comment_count>
      <attachid>171370</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-29 21:56:49 -0700</bug_when>
    <thetext>Created attachment 171370
Patch 3 - Cache animationMode()

This is the final and best patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753980</commentid>
    <comment_count>16</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-29 21:57:26 -0700</bug_when>
    <thetext>Re-reopening for the final patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754531</commentid>
    <comment_count>17</comment_count>
      <attachid>171370</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 11:33:59 -0700</bug_when>
    <thetext>Comment on attachment 171370
Patch 3 - Cache animationMode()

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755420</commentid>
    <comment_count>18</comment_count>
      <attachid>171681</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-10-31 10:16:11 -0700</bug_when>
    <thetext>Created attachment 171681
Patch 3 - Cache animationMode()

Updating the 3rd patch with expectations for EFL and QT so we don&apos;t break their tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755602</commentid>
    <comment_count>19</comment_count>
      <attachid>171681</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 13:54:48 -0700</bug_when>
    <thetext>Comment on attachment 171681
Patch 3 - Cache animationMode()

Clearing flags on attachment: 171681

Committed r133074: &lt;http://trac.webkit.org/changeset/133074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755603</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 13:54:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169775</attachid>
            <date>2012-10-20 15:06:37 -0700</date>
            <delta_ts>2012-10-23 16:36:57 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>99694.1.patch</filename>
            <type>text/plain</type>
            <size>45493</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTk4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAxMi0xMC0yMCAgUGhpbGlw
IFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFNWR0FuaW1hdGlv
bkVsZW1lbnQncyBjYWxjTW9kZSgpIGFuZCBhbmltYXRpb25Nb2RlKCkgZm9yIHBlcmZvcm1hbmNl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk2OTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIHJlZmFjdG9ycyBTVkdBbmltYXRpb25FbGVtZW50IHNvIGNhbGNNb2RlKCkgYW5kIGFuaW1h
dGlvbk1vZGUoKSByZXR1cm4KKyAgICAgICAgY2FjaGVkIHZhbHVlcyBpbnN0ZWFkIG9mIHJlY2Fs
Y3VsYXRpbmcgdGhlbSBkdXJpbmcgYW5pbWF0aW9uLiBUaGVzZSB0d28KKyAgICAgICAgZnVuY3Rp
b25zIGFjY291bnRlZCBmb3IgMTglIG9mIGEgc2ltcGxlIGFuaW1hdGlvbiBiZW5jaG1hcmsuCisK
KyAgICAgICAgQmFja2dyb3VuZDogU1ZHQW5pbWF0aW9uRWxlbWVudCBjb250YWlucyBtb3N0IG9m
IHRoZSBzaGFyZWQgYW5pbWF0aW9uIGxvZ2ljCisgICAgICAgIGZvciA8YW5pbWF0ZT4sIDxzZXQ+
LCA8YW5pbWF0ZUNvbG9yPiwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBhbmQgPGFuaW1hdGVNb3Rpb24+
LgorICAgICAgICA8YW5pbWF0ZU1vdGlvbj4gaXMgdGhlIG9ubHkgYW5pbWF0aW9uIGVsZW1lbnQg
dGhhdCBjYW4gZGVwZW5kIG9uIG90aGVyIGVsZW1lbnRzCisgICAgICAgIGluIHRoZSBwYWdlLiBG
b3IgZXhhbXBsZToKKyAgICAgICAgPHBhdGggaWQ9Im15cGF0aCIgZD0iTTAgMCBMIDEwMCAxMDBa
Ii8+IDwhLS0gbm90ZSwgY2FuIGJlIGFuaW1hdGVkISAtLT4KKyAgICAgICAgPHJlY3QgeD0iMCIg
eT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIj4KKyAgICAgICAgICAg
IDxhbmltYXRlTW90aW9uIGR1cj0iNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj4KKyAgICAg
ICAgICAgICAgICA8bXBhdGggeGxpbms6aHJlZj0iI215cGF0aCIvPgorICAgICAgICAgICAgPC9h
bmltYXRlTW90aW9uPgorICAgICAgICA8L3JlY3Q+CisgICAgICAgIFNlZTogaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHL3NpbmdsZS1wYWdlLmh0bWwjYW5pbWF0ZS1BbmltYXRlTW90aW9uRWxlbWVu
dAorCisgICAgICAgIFRoZSB0d28gcmVmYWN0b3JlZCBtZXRob2RzIGluIHRoaXMgcGF0Y2ggYXJl
IGNhbGNNb2RlKCkgYW5kIGFuaW1hdGlvbk1vZGUoKS4KKyAgICAgICAgY2FsY01vZGUgZGVwZW5k
cyBvbiBvbmx5IHRoZSAiY2FsY01vZGUiIGF0dHJpYnV0ZSBhbmQgd2hldGhlciB0aGUgYW5pbWF0
aW9uIGlzCisgICAgICAgIG9mIHR5cGUgYW5pbWF0ZU1vdGlvbi4gVGhpcyBwYXRjaCBkb2VzIHRo
ZSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgdGhhdCBtYWtlcworICAgICAgICBjYWxjTW9k
ZSB2YWx1ZSBjYWNoZWQuCisKKyAgICAgICAgYW5pbWF0aW9uTW9kZSBkZXBlbmRzIG9uIHNldmVy
YWwgcHJvcGVydGllcyBvZiBhbiBhbmltYXRpb246IHRoZSBzZXQgdGFnLCB3aGV0aGVyCisgICAg
ICAgIHRoZSBhbmltYXRpb24gaGFzIGEgcGF0aCwgYW5kIHRoZSAidmFsdWVzIiwgInRvIiwgYW5k
ICJieSIgYXR0cmlidXRlcy4gVGhpcyBmdW5jdGlvbgorICAgICAgICB3YXMgaG90IGZvciB0d28g
cmVhc29uczoKKyAgICAgICAgICAgIDEpIGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0
cikgaXMgZXhwZW5zaXZlIGJlY2F1c2Ugd2UgYXJlIHVuYWJsZSB0byB1c2UKKyAgICAgICAgICAg
ICAgIGZhc3RIYXNBdHRyaWJ1dGUuIFRoaXMgaXMgY2FjaGVhYmxlIGJ5IHNpbXBseSBjYWxjdWxh
dGluZyB0aGUgYW5pbWF0aW9uTW9kZQorICAgICAgICAgICAgICAgd2hlbiB0aGUgdmFsdWVzIGF0
dHJpYnV0ZSBjaGFuZ2VzLgorICAgICAgICAgICAgMikgSW4gdGhlIGFuaW1hdGVNb3Rpb24gY2Fz
ZSwgZGV0ZXJtaW5pbmcgaWYgdGhlIHBhdGggaXMgZW1wdHkgaXMgZXhwZW5zaXZlLgorICAgICAg
ICAgICAgICAgQW5pbWF0ZU1vdGlvbiBjYW4gaGF2ZSBhIHBhdGggYXR0cmlidXRlLCBvciBpdCBj
YW4gaGF2ZSA8bXBhdGg+IGNoaWxkcmVuIHRoYXQKKyAgICAgICAgICAgICAgIHJlZmVyZW5jZSBh
IChwb3NzaWJseSBub24tZXhpc3RlbnQpIDxwYXRoPiBlbGVtZW50IGVsc2V3aGVyZSBpbiB0aGUg
cGFnZS4gQmVmb3JlCisgICAgICAgICAgICAgICB0aGlzIHBhdGNoIHdlIGRpZCB0aGlzIGxvb2t1
cCBvbiBldmVyeSBhbmltYXRpb24gbG9vcCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkLgorICAg
ICAgICAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCB3ZSBvbmx5IHVwZGF0ZSBBbmltYXRlTW90aW9u
J3MgcGF0aCB3aGVuIGl0IGNoYW5nZXMuCisKKyAgICAgICAgVGhlIGNhbGNNb2RlKCkgYW5kIGFu
aW1hdGlvbk1vZGUoKSBjaGFuZ2VzIGFyZSBtb3N0bHkgc3RyYWlnaHRmb3J3YXJkIGJ1dCBjYXRj
aGluZyBjaGFuZ2VzCisgICAgICAgIHRvIDxhbmltYXRlTW90aW9uPidzIHBhdGggcmVxdWlyZWQg
aG9va2luZyBTVkdNUGF0aEVsZW1lbnQgaW50byBvdXIgdGFyZ2V0IGVsZW1lbnQgdHJhY2tpbmcK
KyAgICAgICAgc3lzdGVtIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy4gUHJldmlvdXNseSwgb25s
eSBTVkdTdHlsZWRFbGVtZW50IHVzZWQgdGhpcywgc28KKyAgICAgICAgdGhpcyBwYXRjaCBtb3Zl
cyBmdW5jdGlvbmFsaXR5IGZyb20gU1ZHU3R5bGVkRWxlbWVudCB0byBTVkdFbGVtZW50LCBhbGxv
d2luZyBTVkdNUGF0aEVsZW1lbnQKKyAgICAgICAgdG8gdHJhY2sgY2hhbmdlcyB0byBpdHMgdGFy
Z2V0IGVsZW1lbnQuIEluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGFsc28gYWxsb3cgdXMgdG8gdHJh
Y2sKKyAgICAgICAgZWxlbWVudCBkZXBlbmRlbmNpZXMgZm9yIFNWR0FuaW1hdGlvbkVsZW1lbnQg
d2hpY2ggaXMgYWxzbyBub3QgYW4gU1ZHU3R5bGVkRWxlbWVudC4KKworICAgICAgICBUaGlzIHJl
ZmFjdG9yaW5nIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisgICAgICAgIHN2Zy9hbmlt
YXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1tcGF0aC10YXJnZXRDaGFuZ2UtMS5zdmcgZmFp
bHMgYWZ0ZXIgdGhpcyBwYXRjaAorICAgICAgICBiZWNhdXNlIG91ciBlbGVtZW50IGRlcGVuZGVu
Y3kgdHJhY2tpbmcgaGFzIGEgYnVnIHdpdGggZHVwbGljYXRlIGlkczsgc2VlIFdLOTk4OTMuCisK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5p
bWF0aW9uUGF0aCk6CisKKyAgICAgICAgICAgIGFuaW1hdGlvblBhdGgoKSBoYXMgYmVlbiBjaGFu
Z2VkIHRvIHVwZGF0ZUFuaW1hdGlvblBhdGgoKSBhbmQKKyAgICAgICAgICAgIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gcGF0aCAocGF0aCBhdHRyaWJ1dGUsIG9yIG1w
YXRoJ3MKKyAgICAgICAgICAgIHJlZmVyZW5jZWQgcGF0aCkgaGFzIGNoYW5nZWQuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpidWlsZFRyYW5zZm9ybUZvclBy
b2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRh
dGVBbmltYXRpb25Nb2RlKToKKworICAgICAgICAgICAgSW5zdGVhZCBvZiBTVkdBbmltYXRpb25F
bGVtZW50IGhhdmluZyBhIHBhdGgoKSBmdW5jdGlvbiwgYWxsIHBhdGgoKQorICAgICAgICAgICAg
Y29kZSBoYXMgYmVlbiBtb3ZlZCBpbnRvIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LgorCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaDoK
KyAgICAgICAgKFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpTVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKworICAgICAgICAgICAgY2FsY01vZGVBdHRy
IHdhcyBub3QgcHJldmlvdXNseSBsaXN0ZWQgYXMgYSAic3VwcG9ydGVkIGF0dHJpYnV0ZSIgYmVj
YXVzZSBpdAorICAgICAgICAgICAgd2FzIHF1ZXJpZWQgb24gZXZlcnkgdXBkYXRlLiBUaGlzIGhh
cyBiZWVuIGNoYW5nZWQgc28gd2Ugbm93CisgICAgICAgICAgICBnZXQgYSBjYWxsYmFjayBpbiBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKCkgd2hlbiBjYWxjTW9kZSBjaGFuZ2VzLgorCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0Q2FsY01vZGUp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKToKKworICAgICAgICAgICAgUmV0
dXJucyBjYWNoZWQgdmFsdWUgbm93ISBGYXN0IQorCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpjYWxjTW9kZSk6CisKKyAgICAgICAgICAgIFJldHVybnMgY2FjaGVkIHZh
bHVlIG5vdyEgRmFzdCEKKworICAgICAgICAoU1ZHQW5pbWF0aW9uRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAg
ICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHA6CisKKyAgICAgICAgICAgIFRoZXNl
IGZ1bmN0aW9ucyBoYXZlIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGVpciBuZXcgU1ZHRWxlbWVudCog
c3VwcG9ydAorICAgICAgICAgICAgKGluc3RlYWQgb2YganVzdCBTVkdTdHlsZWRFbGVtZW50Kiku
CisKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVt
ZW50UGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9t
UGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisKKyAgICAgICAgICAgIE1l
cmdpbmcgbG9naWMgZnJvbSBTVkdTdHlsZWRFbGVtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpp
bnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Omhhc1BlbmRp
bmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c2V0SGFzUGVuZGlu
Z1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpjbGVhckhhc1BlbmRp
bmdSZXNvdXJjZXNJZlBvc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmJ1
aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5o
OgorICAgICAgICAoU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpu
ZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHTVBhdGhFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVz
b3VyY2UpOgorCisgICAgICAgICAgICBNdWNoIG9mIHRoaXMgbG9naWMgaXMgc2ltaWxhciBpbiBz
dHlsZSB0byBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UuCisKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50OjpjbGVhclJl
c291cmNlUmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6Omlu
c2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OnRhcmdldFBhdGhDaGFu
Z2VkKToKKworICAgICAgICAgICAgV2hlbiBhIDxwYXRoPidzIGQgYXR0cmlidXRlIGNoYW5nZXMs
IGl0IG5vdGlmaWVzIGFueQorICAgICAgICAgICAgcmVmZXJlbmNpbmcgPG1wYXRoPiBlbGVtZW50
cyBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZQorICAgICAgICAgICAgbXBhdGggZWxlbWVu
dCB0aGVuIG5vdGlmaWVzIGl0cyBTVkdBbmltYXRlTW90aW9uIHBhcmVudCBzbworICAgICAgICAg
ICAgdGhhdCB0aGUgYW5pbWF0aW9uTW9kZSBjYW4gYmUgcmVjYWxjdWxhdGVkIGlmIG5lZWRlZC4K
KworICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhD
aGFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKFNWR01Q
YXRoRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorCisgICAgICAgICAgICBTVkdQYXRoRWxlbWV0biBoYXMgYmVlbiBjaGFuZ2Vk
IHNvIHRoYXQgaXQgbm90aWZpZXMgYW55IDxtcGF0aD4KKyAgICAgICAgICAgIHJlZmVyZW5jaW5n
IGVsZW1lbnRzIGlmIHRoZSBkIGF0dHJpYnV0ZSBjaGFuZ2VzLCBvciBpZiBpdCBpcworICAgICAg
ICAgICAgaW5zZXJ0ZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudC4KKworICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogc3ZnL1NW
R1BhdGhFbGVtZW50Lmg6CisgICAgICAgIChTVkdQYXRoRWxlbWVudCk6CisgICAgICAgICogc3Zn
L1NWR1NldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uTW9kZSk6CisgICAgICAgICogc3ZnL1NWR1NldEVsZW1lbnQuaDoKKyAgICAg
ICAgKFNWR1NldEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50
OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6cmVt
b3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgIChT
VkdTdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OnNl
bGZIYXNSZWxhdGl2ZUxlbmd0aHMpOgorCiAyMDEyLTEwLTIwICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtBQ10gQnVpbGQgZml4IGFmdGVyIHIx
MzE5MzMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBpbmxp
bmUgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hCiAgICAgOiBTVkdBbmltYXRpb25F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0
aW9uKGZhbHNlKQogeworICAgIG1fY2FsY01vZGUgPSBDYWxjTW9kZVBhY2VkOwogICAgIEFTU0VS
VChoYXNUYWdOYW1lKGFuaW1hdGVNb3Rpb25UYWcpKTsKIH0KIApAQCAtMTExLDYgKzExMiw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmkKICAgICBpZiAoYXR0cmli
dXRlLm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0aEF0dHIpIHsKICAgICAgICAgbV9wYXRoID0gUGF0
aCgpOwogICAgICAgICBidWlsZFBhdGhGcm9tU3RyaW5nKGF0dHJpYnV0ZS52YWx1ZSgpLCBtX3Bh
dGgpOworICAgICAgICB1cGRhdGVBbmltYXRpb25QYXRoKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEyOSwyMSArMTMxLDI2IEBAIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpSb3Rh
dGVNb2RlIFNWR0EKICAgICByZXR1cm4gUm90YXRlQW5nbGU7CiB9CiAKLVBhdGggU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgoKSBjb25zdAordm9pZCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uUGF0aCgpCiB7CisgICAgbV9hbmltYXRpb25QYXRo
ID0gUGF0aCgpOworICAgIGJvb2wgZm91bmRNUGF0aCA9IGZhbHNlOwogICAgIGZvciAoTm9kZSog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bXBhdGhUYWcpKSB7
CiAgICAgICAgICAgICBTVkdNUGF0aEVsZW1lbnQqIG1QYXRoID0gc3RhdGljX2Nhc3Q8U1ZHTVBh
dGhFbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIHBhdGhFbGVt
ZW50ID0gbVBhdGgtPnBhdGhFbGVtZW50KCk7Ci0gICAgICAgICAgICBQYXRoIHBhdGg7Ci0gICAg
ICAgICAgICBpZiAocGF0aEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgdXBkYXRlUGF0aEZyb21H
cmFwaGljc0VsZW1lbnQocGF0aEVsZW1lbnQsIHBhdGgpOwotICAgICAgICAgICAgcmV0dXJuIHBh
dGg7CisgICAgICAgICAgICBpZiAocGF0aEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB1cGRh
dGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVudChwYXRoRWxlbWVudCwgbV9hbmltYXRpb25QYXRoKTsK
KyAgICAgICAgICAgICAgICBmb3VuZE1QYXRoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoZmFzdEhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6cGF0aEF0dHIpKQotICAgICAgICByZXR1cm4gbV9wYXRoOwotICAgIHJl
dHVybiBQYXRoKCk7CisKKyAgICBpZiAoIWZvdW5kTVBhdGggJiYgZmFzdEhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6cGF0aEF0dHIpKQorICAgICAgICBtX2FuaW1hdGlvblBhdGggPSBtX3BhdGg7CisK
KyAgICB1cGRhdGVBbmltYXRpb25Nb2RlKCk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUG9pbnQo
Y29uc3QgU3RyaW5nJiBzLCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTIxOCwxOSArMjI1LDE4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIAogdm9pZCBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyhBZmZpbmVUcmFuc2Zv
cm0qIHRyYW5zZm9ybSwgZmxvYXQgcGVyY2VudGFnZSkKIHsKLSAgICBQYXRoIHBhdGggPSBhbmlt
YXRpb25QYXRoKCk7Ci0gICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFt
X2FuaW1hdGlvblBhdGguaXNFbXB0eSgpKTsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICBm
bG9hdCBwb3NpdGlvbk9uUGF0aCA9IHBhdGgubGVuZ3RoKCkgKiBwZXJjZW50YWdlOwotICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBwYXRoLnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9r
KTsKKyAgICBmbG9hdCBwb3NpdGlvbk9uUGF0aCA9IG1fYW5pbWF0aW9uUGF0aC5sZW5ndGgoKSAq
IHBlcmNlbnRhZ2U7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IG1fYW5pbWF0aW9uUGF0aC5w
b2ludEF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CiAgICAgaWYgKCFvaykKICAgICAgICAg
cmV0dXJuOwogICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9zaXRpb24u
eSgpKTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUgPSB0aGlzLT5yb3RhdGVNb2RlKCk7CiAg
ICAgaWYgKHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0byAmJiByb3RhdGVNb2RlICE9IFJvdGF0ZUF1
dG9SZXZlcnNlKQogICAgICAgICByZXR1cm47Ci0gICAgZmxvYXQgYW5nbGUgPSBwYXRoLm5vcm1h
bEFuZ2xlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKKyAgICBmbG9hdCBhbmdsZSA9IG1f
YW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CiAg
ICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIGFuZ2xlICs9
IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShhbmdsZSk7CkBAIC0zMTgsNSArMzI0LDEzIEBA
IGZsb2F0IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGUKICAgICByZXR1cm4gc3Fy
dGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVp
Z2h0KCkpOwogfQogCit2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRp
b25Nb2RlKCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IG1fYW5pbWF0aW9uTW9kZSA9IFBhdGhBbmltYXRpb247CisgICAgZWxzZQorICAgICAgICBTVkdB
bmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25Nb2RlKCk7Cit9CisKIH0KICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmgJKHJldmlzaW9uIDEzMTk4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50IDogcHVibGlj
IFNWR0FuaW1hdGlvbkVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25QYXRoKCk7CiAKIHByaXZhdGU6CiAgICAg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CkBAIC00OCw3ICs0OSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFu
aW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR1NN
SUxFbGVtZW50KiByZXN1bHRFbGVtZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSZXN1bHRz
VG9UYXJnZXQoKTsKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0
cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7Ci0gICAgdmlydHVhbCBQ
YXRoIGFuaW1hdGlvblBhdGgoKSBjb25zdDsKIAogICAgIGVudW0gUm90YXRlTW9kZSB7CiAgICAg
ICAgIFJvdGF0ZUFuZ2xlLApAQCAtNjAsMTIgKzYwLDE1IEBAIHByaXZhdGU6CiAKICAgICBib29s
IG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbjsKIAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVB
bmltYXRpb25Nb2RlKCkgT1ZFUlJJREU7CisKICAgICAvLyBOb3RlOiB3ZSBkbyBub3Qgc3VwcG9y
dCBwZXJjZW50YWdlIHZhbHVlcyBmb3IgdG8vZnJvbSBjb29yZHMgYXMgdGhlIHNwZWMgaW1wbGll
cyB3ZSBzaG91bGQgKG9wZXJhIGRvZXNuJ3QgZWl0aGVyKQogICAgIEZsb2F0UG9pbnQgbV9mcm9t
UG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX3RvUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX3RvUG9p
bnRBdEVuZE9mRHVyYXRpb247CiAKICAgICBQYXRoIG1fcGF0aDsKKyAgICBQYXRoIG1fYW5pbWF0
aW9uUGF0aDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzE5ODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDYgKzU0LDcgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6U1ZHQW5pbWF0aW9uRWxl
bWVudAogICAgIDogU1ZHU01JTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Zy
b21Qcm9wZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKICAgICAsIG1fdG9Qcm9w
ZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKKyAgICAsIG1fY2FsY01vZGUoQ2Fs
Y01vZGVMaW5lYXIpCiAgICAgLCBtX2FuaW1hdGlvblZhbGlkKGZhbHNlKQogICAgICwgbV9hdHRy
aWJ1dGVUeXBlKEF0dHJpYnV0ZVR5cGVBdXRvKQogICAgICwgbV9oYXNJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZShmYWxzZSkKQEAgLTE0OCw2ICsxNDksNyBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjprZXlQb2ludHNBdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmtleVNwbGluZXNBdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmF0dHJpYnV0ZVR5cGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmNhbGNNb2RlQXR0cik7CiAgICAgfQogICAgIHJldHVybiBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zPFF1YWxpZmllZE5hbWUsIFNWR0F0dHJpYnV0ZUhhc2hUcmFu
c2xhdG9yPihhdHRyTmFtZSk7CiB9CkBAIC0xOTMsNiArMTk1LDExIEBAIHZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAg
IGlmIChhdHRyaWJ1dGUubmFtZSgpID09IFNWR05hbWVzOjpjYWxjTW9kZUF0dHIpIHsKKyAgICAg
ICAgc2V0Q2FsY01vZGUoYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0
cmlidXRlKGF0dHJpYnV0ZSkpCkBAIC0yMTMsNiArMjIwLDggQEAgdm9pZCBTVkdBbmltYXRpb25F
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaAogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFuaW1h
dGlvbkF0dHJpYnV0ZUNoYW5nZWQoKQogeworICAgIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKKwog
ICAgIC8vIEFzc3VtcHRpb25zIG1heSBub3QgaG9sZCBhZnRlciBhbiBhdHRyaWJ1dGUgY2hhbmdl
LgogICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBmYWxzZTsKICAgICBzZXRJbmFjdGl2ZSgpOwpAQCAt
MjU1LDM4ICsyNjQsMzUgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50QXQo
ZgogICAgIGFkZEVuZFRpbWUoZWxhcHNlZCwgZWxhcHNlZCArIG9mZnNldCwgU01JTFRpbWVXaXRo
T3JpZ2luOjpTY3JpcHRPcmlnaW4pOwogfQogCi1BbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmFuaW1hdGlvbk1vZGUoKSBjb25zdAordm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp1
cGRhdGVBbmltYXRpb25Nb2RlKCkKIHsKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAx
L1JFQy1zbWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8jQW5pbUZ1bmNWYWx1ZXMKLSAgICBpZiAoaGFz
VGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKLSAgICAgICAgcmV0dXJuIFRvQW5pbWF0aW9uOwot
ICAgIGlmICghYW5pbWF0aW9uUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFBhdGhB
bmltYXRpb247CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikpCi0g
ICAgICAgIHJldHVybiBWYWx1ZXNBbmltYXRpb247Ci0gICAgaWYgKCF0b1ZhbHVlKCkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gVG9BbmltYXRpb24g
OiBGcm9tVG9BbmltYXRpb247Ci0gICAgaWYgKCFieVZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gQnlBbmltYXRpb24gOiBGcm9tQnlBbmlt
YXRpb247Ci0gICAgcmV0dXJuIE5vQW5pbWF0aW9uOworICAgICAgICBtX2FuaW1hdGlvbk1vZGUg
PSBWYWx1ZXNBbmltYXRpb247CisgICAgZWxzZSBpZiAoIXRvVmFsdWUoKS5pc0VtcHR5KCkpCisg
ICAgICAgIG1fYW5pbWF0aW9uTW9kZSA9IGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IFRvQW5pbWF0
aW9uIDogRnJvbVRvQW5pbWF0aW9uOworICAgIGVsc2UgaWYgKCFieVZhbHVlKCkuaXNFbXB0eSgp
KQorICAgICAgICBtX2FuaW1hdGlvbk1vZGUgPSBmcm9tVmFsdWUoKS5pc0VtcHR5KCkgPyBCeUFu
aW1hdGlvbiA6IEZyb21CeUFuaW1hdGlvbjsKKyAgICBlbHNlCisgICAgICAgIG1fYW5pbWF0aW9u
TW9kZSA9IE5vQW5pbWF0aW9uOwogfQogCi1DYWxjTW9kZSBTVkdBbmltYXRpb25FbGVtZW50Ojpj
YWxjTW9kZSgpIGNvbnN0Cit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldENhbGNNb2RlKGNv
bnN0IEF0b21pY1N0cmluZyYgY2FsY01vZGUpCiB7ICAgIAogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgQXRvbWljU3RyaW5nLCBkaXNjcmV0ZSwgKCJkaXNjcmV0ZSIpKTsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbGluZWFyLCAoImxpbmVhciIpKTsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcGFjZWQsICgicGFj
ZWQiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNwbGlu
ZSwgKCJzcGxpbmUiKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmNhbGNNb2RlQXR0cik7Ci0gICAgaWYgKHZhbHVlID09IGRpc2Ny
ZXRlKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVEaXNjcmV0ZTsKLSAgICBpZiAodmFsdWUgPT0g
bGluZWFyKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVMaW5lYXI7Ci0gICAgaWYgKHZhbHVlID09
IHBhY2VkKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVQYWNlZDsKLSAgICBpZiAodmFsdWUgPT0g
c3BsaW5lKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVTcGxpbmU7Ci0gICAgcmV0dXJuIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpID8gQ2FsY01vZGVQYWNlZCA6IENhbGNN
b2RlTGluZWFyOworICAgIGlmIChjYWxjTW9kZSA9PSBkaXNjcmV0ZSkKKyAgICAgICAgbV9jYWxj
TW9kZSA9IENhbGNNb2RlRGlzY3JldGU7CisgICAgZWxzZSBpZiAoY2FsY01vZGUgPT0gbGluZWFy
KQorICAgICAgICBtX2NhbGNNb2RlID0gQ2FsY01vZGVMaW5lYXI7CisgICAgZWxzZSBpZiAoY2Fs
Y01vZGUgPT0gcGFjZWQpCisgICAgICAgIG1fY2FsY01vZGUgPSBDYWxjTW9kZVBhY2VkOworICAg
IGVsc2UgaWYgKGNhbGNNb2RlID09IHNwbGluZSkKKyAgICAgICAgbV9jYWxjTW9kZSA9IENhbGNN
b2RlU3BsaW5lOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxjTW9kZSA9IGhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpID8gQ2FsY01vZGVQYWNlZCA6IENhbGNNb2RlTGluZWFy
OwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxMzE5ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4ICs4Nyw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgYm9v
bCBpc0FjY3VtdWxhdGVkKCkgY29uc3Q7Ci0gICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2Rl
KCkgY29uc3Q7Ci0gICAgQ2FsY01vZGUgY2FsY01vZGUoKSBjb25zdDsKKyAgICBBbmltYXRpb25N
b2RlIGFuaW1hdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbk1vZGU7IH0KKyAg
ICBDYWxjTW9kZSBjYWxjTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY01vZGU7IH0KIAogICAg
IGVudW0gU2hvdWxkQXBwbHlBbmltYXRpb24gewogICAgICAgICBEb250QXBwbHlBbmltYXRpb24s
CkBAIC0yMDEsNiArMjAxLDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0
RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCog
b2xkVGFyZ2V0KSBPVkVSUklERTsKICAgICBib29sIGhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZTsgfQogCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKKyAgICBBbmltYXRpb25Nb2RlIG1f
YW5pbWF0aW9uTW9kZTsKKyAgICBDYWxjTW9kZSBtX2NhbGNNb2RlOworCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIE9WRVJS
SURFOwpAQCAtMjEzLDcgKzIxNyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhbGN1
bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnlTdHJpbmcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1
ZShmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHU01JTEVsZW1lbnQqIHJl
c3VsdEVsZW1lbnQpID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNv
bnN0IFN0cmluZyYgLypmcm9tU3RyaW5nKi8sIGNvbnN0IFN0cmluZyYgLyp0b1N0cmluZyovKSB7
IHJldHVybiAtMS5mOyB9Ci0gICAgdmlydHVhbCBQYXRoIGFuaW1hdGlvblBhdGgoKSBjb25zdCB7
IHJldHVybiBQYXRoKCk7IH0KIAogICAgIHZvaWQgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1h
dGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5nJiBmcm9t
LCBTdHJpbmcmIHRvKTsKICAgICB2b2lkIGNhbGN1bGF0ZUtleVRpbWVzRm9yQ2FsY01vZGVQYWNl
ZCgpOwpAQCAtMjM1LDYgKzIzOCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNo
cm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJl
ZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1M
YW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0K
IAorICAgIHZvaWQgc2V0Q2FsY01vZGUoY29uc3QgQXRvbWljU3RyaW5nJik7CisKICAgICBib29s
IG1fYW5pbWF0aW9uVmFsaWQ7CiAKICAgICBBdHRyaWJ1dGVUeXBlIG1fYXR0cmlidXRlVHlwZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShy
ZXZpc2lvbiAxMzE5ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZXBvcnRFcnJvcigKICAgICByZXBvcnRNZXNzYWdlKG1fZG9jdW1lbnQs
IEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3I6ICIgKyBtZXNzYWdlKTsKIH0KIAotdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkLCBTVkdTdHlsZWRFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVtZW50
KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKIApAQCAtMjM3LDcgKzIzNyw3IEBA
IGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpoYXNQZW5kaW5nUmUKICAgICByZXR1cm4gbV9w
ZW5kaW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKTsKIH0KIAotYm9vbCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVz
b3VyY2VzKFNWR0VsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBhbGdvcml0
aG0gdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlc291
cmNlcyBhbmQgbmVlZCBub3QuCiAgICAgLy8gSWYgcGVyZm9ybWFuY2UgYmVjb21lcyBhbiBpc3N1
ZSB3ZSBjYW4ga2VlcCBhIGNvdW50ZWQgc2V0IG9mIGVsZW1lbnRzIGFuZCBhbnN3ZXIgdGhlIHF1
ZXN0aW9uIGVmZmljaWVudGx5LgpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UoU1ZHU3R5bGVkRWxl
bWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UoU1ZHRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVu
dCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNF
bGVtZW50UGVuCiAgICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5jb250YWlu
cyhlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KiBlbGVtZW50KQordm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhT
VkdFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKIApAQCAtMzM2LDcg
KzMzNiw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjptYXJrUGVuZGluZ1IKICAgICAg
ICAgbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5hZGQoaWQsIGV4aXN0aW5nKTsKIH0KIAot
U1ZHU3R5bGVkRWxlbWVudCogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCitTVkdF
bGVtZW50KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jl
c291cmNlc0ZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKIHsKICAgICBpZiAoaWQu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM0Niw3ICszNDYsNyBAQCBTVkdTdHls
ZWRFbGVtZW50KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgU1ZHUGVuZGluZ0VsZW1lbnRzOjppdGVyYXRvciBmaXJzdEVsZW1lbnQgPSByZXNvdXJjZVNl
dC0+YmVnaW4oKTsKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gKmZpcnN0RWxlbWVu
dDsKKyAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gKmZpcnN0RWxlbWVudDsKIAogICAgIHJlc291
cmNlU2V0LT5yZW1vdmUoZmlyc3RFbGVtZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwx
MiArNDAsMTIgQEAgY2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50OwogY2xhc3MgU1ZHUmVzb3VyY2Vz
Q2FjaGU7CiBjbGFzcyBTVkdTTUlMRWxlbWVudDsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7Ci1jbGFz
cyBTVkdTdHlsZWRFbGVtZW50OworY2xhc3MgU1ZHRWxlbWVudDsKIAogY2xhc3MgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdEb2N1bWVudEV4dGVu
c2lvbnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhh
c2hTZXQ8U1ZHU3R5bGVkRWxlbWVudCo+IFNWR1BlbmRpbmdFbGVtZW50czsKKyAgICB0eXBlZGVm
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+IFNWR1BlbmRpbmdFbGVtZW50czsKICAgICBTVkdEb2N1bWVu
dEV4dGVuc2lvbnMoRG9jdW1lbnQqKTsKICAgICB+U1ZHRG9jdW1lbnRFeHRlbnNpb25zKCk7CiAg
ICAgCkBAIC05OCwxNiArOTgsMTYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgSGFzaE1hcCBjb250
YWlucyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJjZXMuIFBlbmRpbmcgcmVzb3VyY2VzLCBhcmUg
c3VjaAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IGFueSBvYmplY3QgaW4gdGhlIFNW
RyBkb2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5ZXQuCiAgICAgLy8gRm9yIGluc3RhbmNlLCBk
eW5hbWljYWxseSBidWlsZCBncmFkaWVudHMgLyBwYXR0ZXJucyAvIGNsaXBwZXJzLi4uCi0gICAg
dm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHU3R5bGVk
RWxlbWVudCopOworICAgIHZvaWQgYWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQsIFNWR0VsZW1lbnQqKTsKICAgICBib29sIGhhc1BlbmRpbmdSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdDsKLSAgICBib29sIGlzRWxlbWVudFBlbmRpbmdSZXNvdXJj
ZXMoU1ZHU3R5bGVkRWxlbWVudCopIGNvbnN0OwotICAgIGJvb2wgaXNFbGVtZW50UGVuZGluZ1Jl
c291cmNlKFNWR1N0eWxlZEVsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsK
LSAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVt
ZW50Kik7CisgICAgYm9vbCBpc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKFNWR0VsZW1lbnQqKSBj
b25zdDsKKyAgICBib29sIGlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZShTVkdFbGVtZW50KiwgY29u
c3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBl
bmRpbmdSZXNvdXJjZXMoU1ZHRWxlbWVudCopOwogICAgIFBhc3NPd25QdHI8U1ZHUGVuZGluZ0Vs
ZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7CiAK
ICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHNjaGVkdWxp
bmcgYSBwZW5kaW5nIHJlc291cmNlIHRvIGJlIHJlbW92ZWQuCiAgICAgdm9pZCBtYXJrUGVuZGlu
Z1Jlc291cmNlc0ZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgU1ZHU3R5bGVk
RWxlbWVudCogcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbChjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICBTVkdFbGVtZW50KiByZW1vdmVFbGVtZW50RnJvbVBlbmRp
bmdSZXNvdXJjZXNGb3JSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiBwcml2YXRlOgog
ICAgIFBhc3NPd25QdHI8U1ZHUGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2VG
b3JSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBTVkdFbGVtZW50Ojp+U1ZH
RWxlbWVudCgpCiAgICAgaWYgKCFoYXNTVkdSYXJlRGF0YSgpKQogICAgICAgICBBU1NFUlQoIVNW
R0VsZW1lbnRSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CiAgICAgZWxz
ZSB7CisgICAgICAgIEFTU0VSVChkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGhhc1BlbmRpbmdS
ZXNvdXJjZXMoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOworICAgICAgICBBU1NF
UlQoIWhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CisKICAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRh
OjpTVkdFbGVtZW50UmFyZURhdGFNYXAmIHJhcmVEYXRhTWFwID0gU1ZHRWxlbWVudFJhcmVEYXRh
OjpyYXJlRGF0YU1hcCgpOwogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6OlNWR0VsZW1lbnRS
YXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRoaXMpOwogICAgICAg
ICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwpAQCAtNzgsNiArODMsOCBAQCBTVkdF
bGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIGRlbGV0ZSByYXJlRGF0YTsKICAgICAgICAg
cmFyZURhdGFNYXAucmVtb3ZlKGl0KTsKICAgICB9CisKKyAgICBBU1NFUlQoZG9jdW1lbnQoKSk7
CiAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRp
b25FbGVtZW50c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKIH0K
QEAgLTE3MSw2ICsxNzgsMTMgQEAgdm9pZCBTVkdFbGVtZW50OjpzZXRYbWxiYXNlKGNvbnN0IFN0
cmluZwogICAgIHNldEF0dHJpYnV0ZShYTUxOYW1lczo6YmFzZUF0dHIsIHZhbHVlKTsKIH0KIAor
Tm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSogcm9vdFBhcmVudCkKK3sKKyAgICBTdHlsZWRFbGVtZW50OjppbnNl
cnRlZEludG8ocm9vdFBhcmVudCk7CisgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQo
KTsKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwogdm9pZCBTVkdFbGVtZW50OjpyZW1v
dmVkRnJvbShDb250YWluZXJOb2RlKiByb290UGFyZW50KQogewogICAgIGJvb2wgd2FzSW5Eb2N1
bWVudCA9IHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKTsKQEAgLTE4MCw2ICsxOTQsNyBAQCB2b2lk
IFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vCiAgICAgaWYgKHdhc0luRG9jdW1l
bnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVB
bGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJn
ZXQodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVt
b3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwogICAgIH0KIH0KIApAQCAtMzMz
LDYgKzM0OCwxMiBAQCB2b2lkIFNWR0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0CiAg
ICAgICAgIFN0eWxlZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAKK3Zv
aWQgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikK
K3sKKyAgICAvLyBBbGwgdGFyZ2V0cyBmb3IgcGVuZGluZyByZXNvdXJjZXMgYXJlIFNWR1N0eWxl
ZEVsZW1lbnRzIHNvIHdlIG9ubHkgdHJhY2sgYW5kIGludmFsaWRhdGUgcGVuZGluZyByZXNvdXJj
ZXMgb24KKyAgICAvLyBpZCBjaGFuZ2VzIGluIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQuCit9CisKIHZvaWQgU1ZHRWxlbWVudDo6YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgVmVjdG9yPEFuaW1h
dGVkUHJvcGVydHlUeXBlPiYgcHJvcGVydHlUeXBlcykKIHsKICAgICBsb2NhbEF0dHJpYnV0ZVRv
UHJvcGVydHlNYXAoKS5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShhdHRyaWJ1dGVO
YW1lLCBwcm9wZXJ0eVR5cGVzKTsKQEAgLTQ5Myw2ICs1MTQsNDYgQEAgVGltZXI8U1ZHRWxlbWVu
dD4qIFNWR0VsZW1lbnQ6OnN2Z0xvYWRFdgogICAgIHJldHVybiAwOwogfQogCitib29sIFNWR0Vs
ZW1lbnQ6Omhhc1BlbmRpbmdSZXNvdXJjZXMoKSBjb25zdAoreworICAgIHJldHVybiBoYXNTVkdS
YXJlRGF0YSgpICYmIHN2Z1JhcmVEYXRhKCktPmhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKK30KKwor
dm9pZCBTVkdFbGVtZW50OjpzZXRIYXNQZW5kaW5nUmVzb3VyY2VzKCkKK3sKKyAgICBlbnN1cmVT
VkdSYXJlRGF0YSgpLT5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKHRydWUpOworfQorCit2b2lkIFNW
R0VsZW1lbnQ6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVz
b3VyY2VzKHRoaXMpKQorICAgICAgICBlbnN1cmVTVkdSYXJlRGF0YSgpLT5zZXRIYXNQZW5kaW5n
UmVzb3VyY2VzKGZhbHNlKTsKK30KKwordm9pZCBTVkdFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
dXJjZXNJZk5lZWRlZCgpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1l
bnQoKTsKKyAgICBpZiAoIW5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSB8fCAhZG9jdW1l
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5z
aW9ucyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgU3RyaW5nIHJlc291
cmNlSWQgPSBnZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghZXh0ZW5zaW9ucy0+aGFzUGVuZGlu
Z1Jlc291cmNlKHJlc291cmNlSWQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIHBl
bmRpbmcgcmVzb3VyY2VzIGFzIHBlbmRpbmcgZm9yIHJlbW92YWwuCisgICAgZXh0ZW5zaW9ucy0+
bWFya1BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsKHJlc291cmNlSWQpOworCisgICAgLy8gUmVi
dWlsZCBwZW5kaW5nIHJlc291cmNlcyBmb3IgZWFjaCBjbGllbnQgb2YgYSBwZW5kaW5nIHJlc291
cmNlIHRoYXQgaXMgYmVpbmcgcmVtb3ZlZC4KKyAgICB3aGlsZSAoU1ZHRWxlbWVudCogY2xpZW50
RWxlbWVudCA9IGV4dGVuc2lvbnMtPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlc0Zv
clJlbW92YWwocmVzb3VyY2VJZCkpIHsKKyAgICAgICAgQVNTRVJUKGNsaWVudEVsZW1lbnQtPmhh
c1BlbmRpbmdSZXNvdXJjZXMoKSk7CisgICAgICAgIGlmIChjbGllbnRFbGVtZW50LT5oYXNQZW5k
aW5nUmVzb3VyY2VzKCkpIHsKKyAgICAgICAgICAgIGNsaWVudEVsZW1lbnQtPmJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCk7CisgICAgICAgICAgICBjbGllbnRFbGVtZW50LT5jbGVhckhhc1BlbmRpbmdS
ZXNvdXJjZXNJZlBvc3NpYmxlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgU1ZHRWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIHsKICAgICBTdHlsZWRFbGVtZW50OjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNp
b24gMTMxOTg5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgLy8gRm9yIFNWR1Rlc3RzCiAgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBWZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+Jik7CiAKQEAg
LTEyMCw2ICsxMjAsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+LCBib29sIHVzZUNhcHR1cmUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCByZW1vdmVF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVy
KiwgYm9vbCB1c2VDYXB0dXJlKSBPVkVSUklERTsKIAorICAgIGJvb2wgaGFzUGVuZGluZ1Jlc291
cmNlcygpIGNvbnN0OworICAgIHZvaWQgc2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOworICAgIHZv
aWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgpOworICAgIHZpcnR1YWwgYm9v
bCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KwogcHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0ZVNWR0VsZW1lbnQpOwogCkBAIC0xMjgsMTIg
KzEzMywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0dHJpYnV0
ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
KGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgCisKKyAg
ICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRh
aW5lck5vZGUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFp
bmVyTm9kZSopIE9WRVJSSURFOwogCiAgICAgU1ZHRWxlbWVudFJhcmVEYXRhKiBzdmdSYXJlRGF0
YSgpIGNvbnN0OwogICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogZW5zdXJlU1ZHUmFyZURhdGEoKTsK
IAorICAgIHZpcnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQorICAgIHZvaWQg
YnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKTsKKwogICAgIHZvaWQgcmVwb3J0QXR0cmli
dXRlUGFyc2luZ0Vycm9yKFNWR1BhcnNpbmdFcnJvciwgY29uc3QgQXR0cmlidXRlJik7CiAKICAg
ICAvLyBGSVhNRTogQXV0aG9yIHNoYWRvd3Mgc2hvdWxkIGJlIGFsbG93ZWQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzE5ODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIlNWR01QYXRoRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKIApAQCAtNDksNiArNTAs
NTMgQEAgUGFzc1JlZlB0cjxTVkdNUGF0aEVsZW1lbnQ+IFNWR01QYXRoRWxlbQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHTVBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K3ZvaWQgU1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCit7CisgICAgY2xl
YXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU3RyaW5nIGlkOworICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAm
aWQpOworICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2Vz
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGlu
Z1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3Vy
Y2VzKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0YXJnZXQtPmlzU1ZHRWxlbWVudCgp
KSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5k
ZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAorICAgICAgICAvLyB0aGF0IGxl
YWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFj
dCB0byBpdC4KKyAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRF
bGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRh
cmdldCkpOworICAgIH0KKworICAgIHRhcmdldFBhdGhDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCit7CisgICAgQVNTRVJUKGRv
Y3VtZW50KCkpOworICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7Cit9CisKK05vZGU6Okluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHTVBhdGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSogcm9vdFBhcmVudCkKK3sKKyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8ocm9v
dFBhcmVudCk7CisgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgYnVp
bGRQZW5kaW5nUmVzb3VyY2UoKTsKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwordm9p
ZCBTVkdNUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIHJvb3RQYXJlbnQp
Cit7CisgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgbm90aWZ5
UGFyZW50T2ZQYXRoQ2hhbmdlKHJvb3RQYXJlbnQpOworICAgIGlmIChyb290UGFyZW50LT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7Cit9CisKIGJvb2wg
U1ZHTVBhdGhFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKQEAgLTc0LDYgKzEyMiwyNiBAQCB2b2lk
IFNWR01QYXRoRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKworICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiBTVkdQYXRoRWxlbWVudCogU1ZHTVBhdGhFbGVtZW50OjpwYXRoRWxlbWVudCgpCiB7CiAgICAg
RWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1
bWVudCgpKTsKQEAgLTgyLDYgKzE1MCwxNyBAQCBTVkdQYXRoRWxlbWVudCogU1ZHTVBhdGhFbGVt
ZW50OjpwYXRoRWxlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50Ojp0
YXJnZXRQYXRoQ2hhbmdlZCgpCit7CisgICAgbm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKHBhcmVu
dE5vZGUoKSk7Cit9CisKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhD
aGFuZ2UoQ29udGFpbmVyTm9kZSogcGFyZW50KQoreworICAgIGlmIChwYXJlbnQgJiYgcGFyZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQqPihwYXJlbnQpLT51cGRhdGVBbmltYXRpb25Q
YXRoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShT
VkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxMzE5
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0FuaW1h
dGVkQm9vbGVhbi5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAi
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogCkBAIC0zNywxMyArMzgs
MjIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR01QYXRoRWxlbWVudD4gY3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgU1ZHUGF0aEVsZW1l
bnQqIHBhdGhFbGVtZW50KCk7Ci0gICAgCisgICAgdm9pZCB0YXJnZXRQYXRoQ2hhbmdlZCgpOwor
CiBwcml2YXRlOgogICAgIFNWR01QYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKIAotICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisg
ICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJl
ZmVyZW5jZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGlu
ZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIEluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklE
RTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKTsKKwogICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7
CisKKyAgICB2b2lkIG5vdGlmeVBhcmVudE9mUGF0aENoYW5nZShDb250YWluZXJOb2RlKik7CiAK
ICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHTVBhdGhFbGVtZW50KQog
ICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1NUUklORyhIcmVmLCBocmVmKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzE5ODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZH
TVBhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXRo
U2VnQXJjLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIgpAQCAtMjcwLDEwICsy
NzEsMzkgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogCiAgICAg
ICAgIGlmIChyZW5kZXJlcikKICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CisKKyAgICAgICAgaW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCk7CiAgICAgfQog
CiAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlv
bihyZW5kZXJlcik7ICAgIAorfQorCit2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBh
dGhEZXBlbmRlbmNpZXMoKQoreworICAgIC8vIDxtcGF0aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxw
YXRoPiBidXQgdGhpcyBkZXBlbmRlbmN5IGlzIG5vdCBoYW5kbGVkIGluCisgICAgLy8gbWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBh
dGggZGVwZW5kZW5jaWVzIG1hbnVhbGx5LgorICAgIEFTU0VSVChkb2N1bWVudCgpKTsKKyAgICBp
ZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRvY3VtZW50KCktPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMpKSB7
CisgICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBkZXBlbmRlbmNp
ZXMtPmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBp
dCA9IGRlcGVuZGVuY2llcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBpZiAoKCppdCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1wYXRoVGFnKSkKKyAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxTVkdNUGF0aEVsZW1lbnQqPigqaXQpLT50YXJnZXRQYXRoQ2hhbmdl
ZCgpOworICAgICAgICB9CisgICAgfQorfQorCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25S
ZXF1ZXN0IFNWR1BhdGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogcm9vdFBh
cmVudCkKK3sKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KHJvb3RQYXJlbnQpOworICAgIGludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcygpOworICAgIHJl
dHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIFNWR1BhdGhFbGVtZW50OjpyZW1vdmVkRnJv
bShDb250YWluZXJOb2RlKiByb290UGFyZW50KQoreworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKKyAgICBpbnZhbGlkYXRlTVBhdGhE
ZXBlbmRlbmNpZXMoKTsKIH0KIAogU1ZHUGF0aEJ5dGVTdHJlYW0qIFNWR1BhdGhFbGVtZW50Ojpw
YXRoQnl0ZVN0cmVhbSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
aAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsMTEgQEAgcHJpdmF0ZToKIAogICAgIFJl
bmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwog
CisgICAgdmlydHVhbCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVk
SW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKworICAgIHZvaWQgaW52YWxpZGF0ZU1QYXRo
RGVwZW5kZW5jaWVzKCk7CisKIHByaXZhdGU6CiAgICAgT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFt
PiBtX3BhdGhCeXRlU3RyZWFtOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFibGVBbmltYXRl
ZFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBA
QCBQYXNzUmVmUHRyPFNWR1NldEVsZW1lbnQ+IFNWR1NldEVsZW1lbnQ6CiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdTZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK3ZvaWQg
U1ZHU2V0RWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uTW9kZSgpCit7CisgICAgbV9hbmltYXRpb25N
b2RlID0gVG9BbmltYXRpb247Cit9CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NldEVsZW1lbnQuaAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uTW9kZSgpIE9W
RVJSSURFOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTMxOTg5KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNCAr
NzQsNiBAQCBTVkdTdHlsZWRFbGVtZW50OjpTVkdTdHlsZWRFbGVtZW50KGNvbnN0CiAgICAgcmVn
aXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JTVkdTdHlsZWRFbGVtZW50KCk7CiB9CiAKLVNWR1N0
eWxlZEVsZW1lbnQ6On5TVkdTdHlsZWRFbGVtZW50KCkKLXsKLSAgICBpZiAoaGFzUGVuZGluZ1Jl
c291cmNlcygpICYmIGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwotCi0g
ICAgQVNTRVJUKCFoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwotfQotCiBTdHJpbmcgU1ZHU3R5bGVk
RWxlbWVudDo6dGl0bGUoKSBjb25zdAogewogICAgIC8vIEFjY29yZGluZyB0byBzcGVjLCB3ZSBz
aG91bGQgbm90IHJldHVybiB0aXRsZXMgd2hlbiBob3ZlcmluZyBvdmVyIHJvb3QgPHN2Zz4gZWxl
bWVudHMgKHRob3NlCkBAIC0zNTAsNTEgKzM0MiwyMyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nCiAgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0
ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKwor
ICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCiBOb2Rl
OjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1N0eWxlZEVsZW1lbnQ6Omluc2VydGVk
SW50byhDb250YWluZXJOb2RlKiByb290UGFyZW50KQogewogICAgIFNWR0VsZW1lbnQ6Omluc2Vy
dGVkSW50byhyb290UGFyZW50KTsKICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlv
bigpOwotICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCk7CiAgICAgcmV0dXJuIElu
c2VydGlvbkRvbmU7CiB9CiAKLXZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVz
b3VyY2VzSWZOZWVkZWQoKQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgfHwgIWRvY3Vt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVu
c2lvbnMgPSBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpOwotICAgIFN0cmluZyByZXNv
dXJjZUlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICBpZiAoIWV4dGVuc2lvbnMtPmhhc1BlbmRp
bmdSZXNvdXJjZShyZXNvdXJjZUlkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayBw
ZW5kaW5nIHJlc291cmNlcyBhcyBwZW5kaW5nIGZvciByZW1vdmFsLgotICAgIGV4dGVuc2lvbnMt
Pm1hcmtQZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbChyZXNvdXJjZUlkKTsKLQotICAgIC8vIFJl
YnVpbGQgcGVuZGluZyByZXNvdXJjZXMgZm9yIGVhY2ggY2xpZW50IG9mIGEgcGVuZGluZyByZXNv
dXJjZSB0aGF0IGlzIGJlaW5nIHJlbW92ZWQuCi0gICAgd2hpbGUgKFNWR1N0eWxlZEVsZW1lbnQq
IGNsaWVudEVsZW1lbnQgPSBleHRlbnNpb25zLT5yZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNv
dXJjZXNGb3JSZW1vdmFsKHJlc291cmNlSWQpKSB7Ci0gICAgICAgIEFTU0VSVChjbGllbnRFbGVt
ZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwotICAgICAgICBpZiAoY2xpZW50RWxlbWVudC0+
aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7Ci0gICAgICAgICAgICBjbGllbnRFbGVtZW50LT5idWls
ZFBlbmRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgY2xpZW50RWxlbWVudC0+Y2xlYXJIYXNQ
ZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lk
IFNWR1N0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIHJvb3RQYXJlbnQp
CiB7CiAgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgdXBkYXRlUmVs
YXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oZmFsc2UsIHRoaXMpOwogICAgIFNWR0VsZW1lbnQ6OnJl
bW92ZWRGcm9tKHJvb3RQYXJlbnQpOwogICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0
ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlzKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzLT5kb2N1bWVudCgpOwotICAgIGlmICghcm9vdFBhcmVudC0+aW5Eb2N1bWVudCgpIHx8ICFk
b2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwogfQogCiB2
b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNl
ciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnRE
ZWx0YSkKQEAgLTQzNCwyMiArMzk4LDYgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpzZXRJbnN0
YW5jZVVwZGF0ZQogICAgICAgICBzdmdSYXJlRGF0YSgpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9j
a2VkKHZhbHVlKTsKIH0KIAotYm9vbCBTVkdTdHlsZWRFbGVtZW50OjpoYXNQZW5kaW5nUmVzb3Vy
Y2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzU1ZHUmFyZURhdGEoKSAmJiBzdmdSYXJlRGF0
YSgpLT5oYXNQZW5kaW5nUmVzb3VyY2VzKCk7Ci19Ci0KLXZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6
c2V0SGFzUGVuZGluZ1Jlc291cmNlcygpCi17Ci0gICAgZW5zdXJlU1ZHUmFyZURhdGEoKS0+c2V0
SGFzUGVuZGluZ1Jlc291cmNlcyh0cnVlKTsKLX0KLQotdm9pZCBTVkdTdHlsZWRFbGVtZW50Ojpj
bGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlcyh0aGlz
KSkKLSAgICAgICAgZW5zdXJlU1ZHUmFyZURhdGEoKS0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcyhm
YWxzZSk7Ci19Ci0KIEFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRFbGVtZW50Ojpsb2NhbENvb3Jk
aW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdAogewogICAg
IC8vIFRvIGJlIG92ZXJyaWRlbiBieSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50L1NWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50IChvciBhcyBzcGVjaWFsIGNhc2UgU1ZHVGV4dEVsZW1lbnQg
YW5kIFNWR1BhdHRlcm5FbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
ZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5oCShyZXZpc2lvbiAxMzE5ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBAIHZvaWQgbWFwQXR0cmli
dXRlVG9DU1NQcm9wZXJ0eShIYXNoTWFwPEEKIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQgOiBwdWJs
aWMgU1ZHRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHU3R5bGFi
bGUgewogcHVibGljOgotICAgIHZpcnR1YWwgflNWR1N0eWxlZEVsZW1lbnQoKTsKLQogICAgIHZp
cnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAKICAgICBib29sIGhhc1JlbGF0aXZlTGVuZ3Ro
cygpIGNvbnN0IHsgcmV0dXJuICFtX2VsZW1lbnRzV2l0aFJlbGF0aXZlTGVuZ3Rocy5pc0VtcHR5
KCk7IH0KQEAgLTUwLDE3ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbnN0YW5jZVVwZGF0
ZXNCbG9ja2VkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJv
b2wpOwogCi0gICAgYm9vbCBoYXNQZW5kaW5nUmVzb3VyY2VzKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRIYXNQZW5kaW5nUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXNJZlBvc3NpYmxlKCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZWRQcm9wZXJ0eVR5cGVG
b3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIFZlY3RvcjxBbmltYXRlZFByb3BlcnR5
VHlwZT4mKTsKICAgICBzdGF0aWMgYm9vbCBpc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3Jk
aW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBTdHlsZWRFbGVt
ZW50OjpzdHlsZSgpOyB9Ci0gICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFu
ZGxpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIG5lZWRzUGVu
ZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAK
IHByb3RlY3RlZDogCiAgICAgU1ZHU3R5bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlU1ZHRWxlbWVudCk7CkBAIC04MCw3
ICs3NCw2IEBAIHByb3RlY3RlZDogCiAgICAgdm9pZCB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZv
cm1hdGlvbihib29sIGhhc1JlbGF0aXZlTGVuZ3RocywgU1ZHU3R5bGVkRWxlbWVudCopOwogCiAg
ICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KQEAgLTg4LDggKzgxLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91
c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZO
ZWVkZWQoKTsKLQogICAgIEhhc2hTZXQ8U1ZHU3R5bGVkRWxlbWVudCo+IG1fZWxlbWVudHNXaXRo
UmVsYXRpdmVMZW5ndGhzOwogCiAgICAgQkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVT
KFNWR1N0eWxlZEVsZW1lbnQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzE5ODkpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0y
MCAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFNW
R0FuaW1hdGlvbkVsZW1lbnQncyBjYWxjTW9kZSgpIGFuZCBhbmltYXRpb25Nb2RlKCkgZm9yIHBl
cmZvcm1hbmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTk2OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisgICAgICAg
IHN2Zy9hbmltYXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1tcGF0aC10YXJnZXRDaGFuZ2Ut
MS5zdmcgZmFpbHMgYWZ0ZXIgdGhpcyBwYXRjaAorICAgICAgICBiZWNhdXNlIG91ciBlbGVtZW50
IGRlcGVuZGVuY3kgdHJhY2tpbmcgaGFzIGEgYnVnIHdpdGggZHVwbGljYXRlIGlkczsgc2VlIFdL
OTk4OTMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgor
CiAyMDEyLTEwLTIwICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29z
dGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEFkZCBtaXNzaW5nIGV4cGVjdGF0aW9ucyBm
b3Igc29tZSB0ZXN0cyBpbiBzdmcvY3VzdG9tLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxMzE5ODkpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjk4LDYgKzEyOTgsOCBAQCB3ZWJraXQub3JnL2IvODEyNDAgWyBTbm93TGVvcGFyZCBM
aW9uIF0gCiAKIHdlYmtpdC5vcmcvYi84MTI0MyBzdmcvcmVwYWludC9yZXBhaW50aW5nLWFmdGVy
LWFuaW1hdGlvbi1lbGVtZW50LXJlbW92YWwuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0K
IAord2Via2l0Lm9yZy9iLzk5ODkzIHN2Zy9hbmltYXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlv
bi1tcGF0aC10YXJnZXRDaGFuZ2UtMS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KKwogIyBGbGFr
eSBvbiBMaW51eCBhZnRlciBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTIwMjIK
IHdlYmtpdC5vcmcvYi84MjIxNyBbIEFuZHJvaWQgTGludXggXSBzdmcvem9vbS90ZXh0L3pvb20t
Zm9yZWlnbk9iamVjdC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXQogCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTMxOTg5KQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMDUsNiArMTMwNSw4IEBAIHdlYmtpdC5vcmcvYi85NTUwMSBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2kKICMgUGFpbnRzIGJsYWNrIGJlaGluZCB0aGUgdGVzdCBpbWFnZSBpbnN0ZWFkIG9m
IHRoZSBleHBlY3RlZCBncmVlbi4KIHdlYmtpdC5vcmcvYi85NTcwNyBodHRwL3Rlc3RzL2ltYWdl
cy9wbmctcGFydGlhbC1sb2FkLW5vLWFscGhhLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIAor
d2Via2l0Lm9yZy9iLzk5ODkzIHN2Zy9hbmltYXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1t
cGF0aC10YXJnZXRDaGFuZ2UtMS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KKwogIyBSZXF1aXJl
cyBUZXN0UnVubmVyIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbigpIHN1cHBvcnQuCiB3ZWJraXQu
b3JnL2IvOTg1MjMgZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIEZhaWx1
cmUgXQogCg==
</data>
<flag name="review"
          id="183185"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170307</attachid>
            <date>2012-10-23 21:08:01 -0700</date>
            <delta_ts>2012-10-28 16:32:42 -0700</delta_ts>
            <desc>Patch 1 - Cache calcMode()</desc>
            <filename>99694.2.patch</filename>
            <type>text/plain</type>
            <size>6331</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjI5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTEwLTIzICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgY2FsY01vZGUoKSB2YWx1
ZSBmb3IgU1ZHIGFuaW1hdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05OTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNh
bGNNb2RlKCkgdG8gcmV0dXJuIGEgY2FjaGVkIHZhbHVlIGluc3RlYWQKKyAgICAgICAgb2YgcmVj
YWxjdWxhdGluZyBpdHMgdmFsdWUgb24gZXZlcnkgY2FsbC4gT24gYSBzaW1wbGUgdGVzdCBvZiAx
MDAgcmVjdGFuZ2xlcyB3aXRoIDEwMAorICAgICAgICBhbmltYXRpb25zIGVhY2gsIGNhbGxzIHRv
IGNhbGNNb2RlKCkgYWNjb3VudCBmb3IgMyUgb2YgdGhlIHRvdGFsIGFuaW1hdGlvbi4gQWZ0ZXIg
dGhpcworICAgICAgICBwYXRjaCwgY2FsY01vZGUoKSBubyBsb25nZXIgYXBwZWFycyBpbiBhbmlt
YXRpb24gcHJvZmlsZXMgYXQgYWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGZ1
bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQpOgorCisgICAgICAgICAg
ICBUaGUgZGVmYXVsdCBjYWxjTW9kZSBmb3IgYWxsIGFuaW1hdGlvbiB0eXBlcyBpcyBsaW5lYXIg
ZXhjZXB0IEFuaW1hdGVNb3Rpb24sCisgICAgICAgICAgICB3aGljaCBkZWZhdWx0cyB0byBDYWxj
TW9kZVBhY2VkLgorICAgICAgICAgICAgU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvc2lu
Z2xlLXBhZ2UuaHRtbCNhbmltYXRlLUNhbGNNb2RlQXR0cmlidXRlCisKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpTVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnNldENhbGNNb2RlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2Fs
Y01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0Q2FsY01v
ZGUpOgorICAgICAgICAoU1ZHQW5pbWF0aW9uRWxlbWVudCk6CisKIDIwMTItMTAtMjMgIFBoaWxp
cCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBZGQgZXh0cmEgY2hlY2sgZm9y
IGRhdGEoKSBpbiBQYWdlU2VyaWFsaXplci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTMyMjU5KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBpbmxpbmUgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1h
CiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9o
YXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uKGZhbHNlKQogeworICAgIHNldENhbGNNb2RlKENhbGNN
b2RlUGFjZWQpOwogICAgIEFTU0VSVChoYXNUYWdOYW1lKGFuaW1hdGVNb3Rpb25UYWcpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gMTMyMjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OlNWR0FuaW1hdGlvbkVsZW1lbnQKICAgICAsIG1fYW5pbWF0aW9uVmFsaWQoZmFsc2UpCiAgICAg
LCBtX2F0dHJpYnV0ZVR5cGUoQXR0cmlidXRlVHlwZUF1dG8pCiAgICAgLCBtX2hhc0ludmFsaWRD
U1NBdHRyaWJ1dGVUeXBlKGZhbHNlKQorICAgICwgbV9jYWxjTW9kZShDYWxjTW9kZUxpbmVhcikK
IHsKICAgICByZWdpc3RlckFuaW1hdGVkUHJvcGVydGllc0ZvclNWR0FuaW1hdGlvbkVsZW1lbnQo
KTsKIH0KQEAgLTE0OCw2ICsxNDksNyBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjprZXlQ
b2ludHNBdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Omtl
eVNwbGluZXNBdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmF0dHJpYnV0ZVR5cGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmNhbGNNb2RlQXR0cik7CiAgICAgfQogICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmNvbnRhaW5zPFF1YWxpZmllZE5hbWUsIFNWR0F0dHJpYnV0ZUhhc2hUcmFuc2xhdG9yPihh
dHRyTmFtZSk7CiB9CkBAIC0xOTMsNiArMTk1LDExIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChhdHRy
aWJ1dGUubmFtZSgpID09IFNWR05hbWVzOjpjYWxjTW9kZUF0dHIpIHsKKyAgICAgICAgc2V0Q2Fs
Y01vZGUoYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0cmlidXRlKGF0
dHJpYnV0ZSkpCkBAIC0yNzEsMjIgKzI3OCwyMiBAQCBBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmFuaW1hCiAgICAgcmV0dXJuIE5vQW5pbWF0aW9uOwogfQogCi1DYWxjTW9kZSBT
VkdBbmltYXRpb25FbGVtZW50OjpjYWxjTW9kZSgpIGNvbnN0Ci17ICAgIAordm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpzZXRDYWxjTW9kZShjb25zdCBBdG9taWNTdHJpbmcmIGNhbGNNb2RlKQor
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkaXNjcmV0ZSwg
KCJkaXNjcmV0ZSIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
ZywgbGluZWFyLCAoImxpbmVhciIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgcGFjZWQsICgicGFjZWQiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHNwbGluZSwgKCJzcGxpbmUiKSk7Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNhbGNNb2RlQXR0cik7
Ci0gICAgaWYgKHZhbHVlID09IGRpc2NyZXRlKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVEaXNj
cmV0ZTsKLSAgICBpZiAodmFsdWUgPT0gbGluZWFyKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVM
aW5lYXI7Ci0gICAgaWYgKHZhbHVlID09IHBhY2VkKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVQ
YWNlZDsKLSAgICBpZiAodmFsdWUgPT0gc3BsaW5lKQotICAgICAgICByZXR1cm4gQ2FsY01vZGVT
cGxpbmU7Ci0gICAgcmV0dXJuIGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcp
ID8gQ2FsY01vZGVQYWNlZCA6IENhbGNNb2RlTGluZWFyOworICAgIGlmIChjYWxjTW9kZSA9PSBk
aXNjcmV0ZSkKKyAgICAgICAgc2V0Q2FsY01vZGUoQ2FsY01vZGVEaXNjcmV0ZSk7CisgICAgZWxz
ZSBpZiAoY2FsY01vZGUgPT0gbGluZWFyKQorICAgICAgICBzZXRDYWxjTW9kZShDYWxjTW9kZUxp
bmVhcik7CisgICAgZWxzZSBpZiAoY2FsY01vZGUgPT0gcGFjZWQpCisgICAgICAgIHNldENhbGNN
b2RlKENhbGNNb2RlUGFjZWQpOworICAgIGVsc2UgaWYgKGNhbGNNb2RlID09IHNwbGluZSkKKyAg
ICAgICAgc2V0Q2FsY01vZGUoQ2FsY01vZGVTcGxpbmUpOworICAgIGVsc2UKKyAgICAgICAgc2V0
Q2FsY01vZGUoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykgPyBDYWxjTW9k
ZVBhY2VkIDogQ2FsY01vZGVMaW5lYXIpOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVUeXBlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxMzIy
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBZGRp
dGl2ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBY2N1bXVsYXRlZCgpIGNvbnN0OwogICAgIEFuaW1h
dGlvbk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0OwotICAgIENhbGNNb2RlIGNhbGNNb2RlKCkg
Y29uc3Q7CisgICAgQ2FsY01vZGUgY2FsY01vZGUoKSBjb25zdCB7IHJldHVybiBtX2NhbGNNb2Rl
OyB9CiAKICAgICBlbnVtIFNob3VsZEFwcGx5QW5pbWF0aW9uIHsKICAgICAgICAgRG9udEFwcGx5
QW5pbWF0aW9uLApAQCAtMjAxLDYgKzIwMSw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZH
RWxlbWVudCogb2xkVGFyZ2V0KSBPVkVSUklERTsKICAgICBib29sIGhhc0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZTsg
fQogCisgICAgdm9pZCBzZXRDYWxjTW9kZShDYWxjTW9kZSBjYWxjTW9kZSkgeyBtX2NhbGNNb2Rl
ID0gY2FsY01vZGU7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQXR0
cmlidXRlQ2hhbmdlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRyaWJ1dGVO
YW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsKQEAgLTIzNSw2ICsyMzcsOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygp
IHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKKyAgICB2b2lkIHNldENhbGNNb2RlKGNv
bnN0IEF0b21pY1N0cmluZyYpOworCiAgICAgYm9vbCBtX2FuaW1hdGlvblZhbGlkOwogCiAgICAg
QXR0cmlidXRlVHlwZSBtX2F0dHJpYnV0ZVR5cGU7CkBAIC0yNDUsNiArMjQ5LDcgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgbV9sYXN0VmFsdWVzQW5pbWF0aW9uRnJvbTsKICAgICBTdHJpbmcgbV9s
YXN0VmFsdWVzQW5pbWF0aW9uVG87CiAgICAgYm9vbCBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVU
eXBlOworICAgIENhbGNNb2RlIG1fY2FsY01vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170327</attachid>
            <date>2012-10-23 23:39:19 -0700</date>
            <delta_ts>2012-10-29 14:08:04 -0700</delta_ts>
            <desc>Patch 2 - Let SVGElements have pending resources.</desc>
            <filename>99694.2.1.patch</filename>
            <type>text/plain</type>
            <size>14788</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjMxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEwLTIzICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgTGV0IFNWR0VsZW1lbnRzIGhhdmUg
cGVuZGluZyByZXNvdXJjZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05OTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE91ciBTVkcgcGVuZGluZyByZXNvdXJjZSB0cmFja2luZyBpcyB1c2VkIGZvciBo
YW5kbGluZyBkeW5hbWljIGlkIGNoYW5nZXMuIEZvciBleGFtcGxlLAorICAgICAgICBpZiBhbiBT
VkcgZWxlbWVudCByZWZlcmVuY2VzIGFuIGlkIHRoYXQgaXMgbm90IHlldCBpbiB0aGUgZG9jdW1l
bnQgKG9yIGhhcyBiZWVuIHJlbW92ZWQpLAorICAgICAgICB0aGUgU1ZHIGVsZW1lbnQgd2lsbCBi
ZSAncGVuZGluZycgYW4gaWQuIFdoZW4gc3R5bGVkIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbnRv
CisgICAgICAgIHRoZSBkb2N1bWVudCwgYnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKSBp
cyBjYWxsZWQgdG8gZm9yY2UgYW55IHBlbmRpbmcgZWxlbWVudHMKKyAgICAgICAgdG8gcmVzb2x2
ZSB0aGVpciBkZXBlbmRlbmNpZXMuIE9ubHkgU1ZHU3R5bGVkRWxlbWVudCB0YXJnZXRzIGNhbiBi
ZSByZWZlcmVuY2VkIHVzaW5nCisgICAgICAgIHRoaXMgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGF0
IGlzIG5vdCBjaGFuZ2VkIHdpdGggdGhpcyBwYXRjaC4KKworICAgICAgICBQcmV2aW91c2x5LCBv
bmx5IFNWR1N0eWxlZEVsZW1lbnRzIGNvdWxkIGhhdmUgcGVuZGluZyByZXNvdXJjZXMuIFNvbWUg
ZXhhbXBsZXMgb2Ygd2hlcmUKKyAgICAgICAgdGhpcyBpcyB2aW9sYXRlZCBhcmUgU1ZHQW5pbWF0
ZUVsZW1lbnQgYW5kIFNWR01QYXRoRWxlbWVudCB3aGljaCBhcmUgbm90IGEgc3R5bGVkIGVsZW1l
bnRzCisgICAgICAgIGJ1dCB3aGljaCBjYW4gaGF2ZSBwZW5kaW5nIHJlZmVyZW5jZXMgKHRoZXkg
Y2FuIHJlZmVyZW5jZSBzdHlsZWQgZWxlbWVudHMgYW5kCisgICAgICAgIHBhdGhzLCByZXNwZWN0
aXZlbHkpLiBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIHBlbmRpbmcgcmVzb3VyY2UgaGFuZGxpbmcg
dG8gYWxsb3cKKyAgICAgICAgYW55IFNWR0VsZW1lbnQgdG8gaGF2ZSBwZW5kaW5nIHJlc291cmNl
cy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIG9ubHkgYSByZWZhY3RvcmluZyBvZiBjb2RlIGlu
IHByZXBhcmF0aW9uIGZvciBXSzk5Njk0IGFuZCBkb2VzIG5vdAorICAgICAgICBhZmZlY3QgZXhp
c3RpbmcgZnVuY3Rpb25hbGl0eSBvciB0ZXN0cy4KKworICAgICAgICAqIHN2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbCk6CisgICAgICAgICogc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChT
VkdEb2N1bWVudEV4dGVuc2lvbnMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnQ6Omhhc1BlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdFbGVtZW50OjpzZXRIYXNQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsZW1lbnQ6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUpOgor
ICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgIChTVkdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAg
KiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoU1ZHU3R5bGVkRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKToKKwogMjAxMi0xMC0yMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVt
ZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24ocjEzMjMwMykgQnJva2UgZGVidWcg
YnVpbGQgd2hlbiBTSEFET1dfRE9NIGlzIGVuYWJsZWQgYnV0IFNUWUxFX1NDT1BFRCBpcyBkaXNh
YmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHAJKHJldmlzaW9uIDEzMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKAogICAgIHJlcG9ydE1lc3NhZ2UobV9kb2N1
bWVudCwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvcjogIiArIG1lc3NhZ2UpOwogfQogCi12b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR0Vs
ZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogCkBAIC0yMzcsNyArMjM3
LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6Omhhc1BlbmRpbmdSZQogICAgIHJldHVy
biBtX3BlbmRpbmdSZXNvdXJjZXMuY29udGFpbnMoaWQpOwogfQogCi1ib29sIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRp
bmdSZXNvdXJjZXMoU1ZHRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGFs
Z29yaXRobSB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBlbmRpbmcg
cmVzb3VyY2VzIGFuZCBuZWVkIG5vdC4KICAgICAvLyBJZiBwZXJmb3JtYW5jZSBiZWNvbWVzIGFu
IGlzc3VlIHdlIGNhbiBrZWVwIGEgY291bnRlZCBzZXQgb2YgZWxlbWVudHMgYW5kIGFuc3dlciB0
aGUgcXVlc3Rpb24gZWZmaWNpZW50bHkuCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZShTVkdTdHls
ZWRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAorYm9vbCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZShTVkdFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogewogICAgIEFTU0VSVChl
bGVtZW50KTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
Ojppc0VsZW1lbnRQZW4KICAgICByZXR1cm4gbV9wZW5kaW5nUmVzb3VyY2VzLmdldChpZCktPmNv
bnRhaW5zKGVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
RWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3Vy
Y2VzKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogCkBAIC0z
MzYsNyArMzM2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6Om1hcmtQZW5kaW5nUgog
ICAgICAgICBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmFkZChpZCwgZXhpc3RpbmcpOwog
fQogCi1TVkdTdHlsZWRFbGVtZW50KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkK
K1NWR0VsZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5k
aW5nUmVzb3VyY2VzRm9yUmVtb3ZhbChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQogewogICAgIGlm
IChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIFNW
R1N0eWxlZEVsZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5zaW9uczoKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBTVkdQZW5kaW5nRWxlbWVudHM6Oml0ZXJhdG9yIGZpcnN0RWxlbWVudCA9IHJlc291
cmNlU2V0LT5iZWdpbigpOwotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSAqZmlyc3RF
bGVtZW50OworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSAqZmlyc3RFbGVtZW50OwogCiAgICAg
cmVzb3VyY2VTZXQtPnJlbW92ZShmaXJzdEVsZW1lbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxMzIyNTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDEyICs0MCwxMSBAQCBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiBjbGFzcyBTVkdSZXNv
dXJjZXNDYWNoZTsKIGNsYXNzIFNWR1NNSUxFbGVtZW50OwogY2xhc3MgU1ZHU1ZHRWxlbWVudDsK
LWNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CiAKIGNsYXNzIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHRG9jdW1lbnRFeHRlbnNpb25zKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PFNWR1N0eWxl
ZEVsZW1lbnQqPiBTVkdQZW5kaW5nRWxlbWVudHM7CisgICAgdHlwZWRlZiBIYXNoU2V0PFNWR0Vs
ZW1lbnQqPiBTVkdQZW5kaW5nRWxlbWVudHM7CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKERv
Y3VtZW50Kik7CiAgICAgflNWR0RvY3VtZW50RXh0ZW5zaW9ucygpOwogICAgIApAQCAtOTcsMTcg
Kzk2LDE3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgLy8gVGhpcyBIYXNoTWFwIGNvbnRhaW5z
IGEgbGlzdCBvZiBwZW5kaW5nIHJlc291cmNlcy4gUGVuZGluZyByZXNvdXJjZXMsIGFyZSBzdWNo
CiAgICAgLy8gd2hpY2ggYXJlIHJlZmVyZW5jZWQgYnkgYW55IG9iamVjdCBpbiB0aGUgU1ZHIGRv
Y3VtZW50LCBidXQgZG8gTk9UIGV4aXN0IHlldC4KLSAgICAvLyBGb3IgaW5zdGFuY2UsIGR5bmFt
aWNhbGx5IGJ1aWxkIGdyYWRpZW50cyAvIHBhdHRlcm5zIC8gY2xpcHBlcnMuLi4KLSAgICB2b2lk
IGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWRFbGVt
ZW50Kik7CisgICAgLy8gRm9yIGluc3RhbmNlLCBkeW5hbWljYWxseSBidWlsdCBncmFkaWVudHMg
LyBwYXR0ZXJucyAvIGNsaXBwZXJzLi4uCisgICAgdm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHRWxlbWVudCopOwogICAgIGJvb2wgaGFzUGVuZGluZ1Jl
c291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwotICAgIGJvb2wgaXNFbGVtZW50
UGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KikgY29uc3Q7Ci0gICAgYm9vbCBpc0Vs
ZW1lbnRQZW5kaW5nUmVzb3VyY2UoU1ZHU3R5bGVkRWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KFNWR1N0eWxlZEVsZW1lbnQqKTsKKyAgICBib29sIGlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMo
U1ZHRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNFbGVtZW50UGVuZGluZ1Jlc291cmNlKFNW
R0VsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKKyAgICB2b2lkIHJlbW92
ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdFbGVtZW50Kik7CiAgICAgUGFzc093blB0
cjxTVkdQZW5kaW5nRWxlbWVudHM+IHJlbW92ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNT
dHJpbmcmIGlkKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNl
ZCBmb3Igc2NoZWR1bGluZyBhIHBlbmRpbmcgcmVzb3VyY2UgdG8gYmUgcmVtb3ZlZC4KICAgICB2
b2lkIG1hcmtQZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbChjb25zdCBBdG9taWNTdHJpbmcmKTsK
LSAgICBTVkdTdHlsZWRFbGVtZW50KiByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXNG
b3JSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIFNWR0VsZW1lbnQqIHJlbW92ZUVs
ZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJik7
CiAKIHByaXZhdGU6CiAgICAgUGFzc093blB0cjxTVkdQZW5kaW5nRWxlbWVudHM+IHJlbW92ZVBl
bmRpbmdSZXNvdXJjZUZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzIyNTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDEwIEBAIFNW
R0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICBpZiAoIWhhc1NWR1JhcmVEYXRhKCkpCiAgICAg
ICAgIEFTU0VSVCghU1ZHRWxlbWVudFJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRo
aXMpKTsKICAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KCkpOworICAgICAgICBp
ZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXModGhpcyk7
CisgICAgICAgIEFTU0VSVCghaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgU1ZHRWxl
bWVudFJhcmVEYXRhOjpTVkdFbGVtZW50UmFyZURhdGFNYXAmIHJhcmVEYXRhTWFwID0gU1ZHRWxl
bWVudFJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpOwogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6
OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRo
aXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwpAQCAtNzgsNiAr
ODIsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIGRlbGV0ZSByYXJlRGF0
YTsKICAgICAgICAgcmFyZURhdGFNYXAucmVtb3ZlKGl0KTsKICAgICB9CisgICAgQVNTRVJUKGRv
Y3VtZW50KCkpOwogICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3Zl
QWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOwogICAgIGRvY3VtZW50KCktPmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQo
dGhpcyk7CiB9CkBAIC0xODAsNiArMTg1LDcgQEAgdm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJv
bShDb250YWluZXJObwogICAgIGlmICh3YXNJbkRvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9t
VGFyZ2V0KHRoaXMpOwogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jl
c291cmNlcyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTU1MCw2ICs1NTYsMjIgQEAgdm9pZCBTVkdF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IAogICAgICAgICBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKG5hbWUpOwogfQogCitib29sIFNWR0VsZW1lbnQ6Omhhc1BlbmRpbmdSZXNvdXJjZXMoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNTVkdSYXJlRGF0YSgpICYmIHN2Z1JhcmVEYXRhKCktPmhh
c1BlbmRpbmdSZXNvdXJjZXMoKTsKK30KKwordm9pZCBTVkdFbGVtZW50OjpzZXRIYXNQZW5kaW5n
UmVzb3VyY2VzKCkKK3sKKyAgICBlbnN1cmVTVkdSYXJlRGF0YSgpLT5zZXRIYXNQZW5kaW5nUmVz
b3VyY2VzKHRydWUpOworfQorCit2b2lkIFNWR0VsZW1lbnQ6OmNsZWFySGFzUGVuZGluZ1Jlc291
cmNlc0lmUG9zc2libGUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKHRoaXMpKQorICAgICAgICBlbnN1cmVT
VkdSYXJlRGF0YSgpLT5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKGZhbHNlKTsKK30KKwogdm9pZCBT
VkdFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAogewogICAgIGlmIChpc1N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzKCkg
fHwgYXJlU1ZHQXR0cmlidXRlc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJ
KHJldmlzaW9uIDEzMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KIAorICAgIGJv
b2wgaGFzUGVuZGluZ1Jlc291cmNlcygpIGNvbnN0OworICAgIHZvaWQgc2V0SGFzUGVuZGluZ1Jl
c291cmNlcygpOworICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgp
OworICAgIHZpcnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQorCiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBWZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+Jik7CiAKICAgICB2b2lkIHNlbmRT
VkdMb2FkRXZlbnRJZlBvc3NpYmxlKGJvb2wgc2VuZFBhcmVudExvYWRFdmVudHMgPSBmYWxzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDE0ICs3NCw2IEBAIFNWR1N0eWxlZEVsZW1lbnQ6OlNWR1N0eWxlZEVs
ZW1lbnQoY29uc3QKICAgICByZWdpc3RlckFuaW1hdGVkUHJvcGVydGllc0ZvclNWR1N0eWxlZEVs
ZW1lbnQoKTsKIH0KIAotU1ZHU3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQoKQotewot
ICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkgJiYgZG9jdW1lbnQoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdS
ZXNvdXJjZXModGhpcyk7Ci0KLSAgICBBU1NFUlQoIWhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7Ci19
Ci0KIFN0cmluZyBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiB7CiAgICAgLy8gQWNj
b3JkaW5nIHRvIHNwZWMsIHdlIHNob3VsZCBub3QgcmV0dXJuIHRpdGxlcyB3aGVuIGhvdmVyaW5n
IG92ZXIgcm9vdCA8c3ZnPiBlbGVtZW50cyAodGhvc2UKQEAgLTM3NSw3ICszNjcsNyBAQCB2b2lk
IFNWR1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291CiAgICAgZXh0ZW5zaW9ucy0+bWFy
a1BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsKHJlc291cmNlSWQpOwogCiAgICAgLy8gUmVidWls
ZCBwZW5kaW5nIHJlc291cmNlcyBmb3IgZWFjaCBjbGllbnQgb2YgYSBwZW5kaW5nIHJlc291cmNl
IHRoYXQgaXMgYmVpbmcgcmVtb3ZlZC4KLSAgICB3aGlsZSAoU1ZHU3R5bGVkRWxlbWVudCogY2xp
ZW50RWxlbWVudCA9IGV4dGVuc2lvbnMtPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
c0ZvclJlbW92YWwocmVzb3VyY2VJZCkpIHsKKyAgICB3aGlsZSAoU1ZHRWxlbWVudCogY2xpZW50
RWxlbWVudCA9IGV4dGVuc2lvbnMtPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlc0Zv
clJlbW92YWwocmVzb3VyY2VJZCkpIHsKICAgICAgICAgQVNTRVJUKGNsaWVudEVsZW1lbnQtPmhh
c1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIGlmIChjbGllbnRFbGVtZW50LT5oYXNQZW5k
aW5nUmVzb3VyY2VzKCkpIHsKICAgICAgICAgICAgIGNsaWVudEVsZW1lbnQtPmJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCk7CkBAIC0zOTAsMTEgKzM4Miw2IEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6
cmVtb3ZlZEZyb20oQ29udGEKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRp
b24oZmFsc2UsIHRoaXMpOwogICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQp
OwogICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVu
dCh0aGlzKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwotICAg
IGlmICghcm9vdFBhcmVudC0+aW5Eb2N1bWVudCgpIHx8ICFkb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdl
LCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKQEAgLTQzNCwyMiArNDIx
LDYgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpzZXRJbnN0YW5jZVVwZGF0ZQogICAgICAgICBz
dmdSYXJlRGF0YSgpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKHZhbHVlKTsKIH0KIAotYm9v
bCBTVkdTdHlsZWRFbGVtZW50OjpoYXNQZW5kaW5nUmVzb3VyY2VzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaGFzU1ZHUmFyZURhdGEoKSAmJiBzdmdSYXJlRGF0YSgpLT5oYXNQZW5kaW5nUmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c2V0SGFzUGVuZGluZ1Jlc291cmNl
cygpCi17Ci0gICAgZW5zdXJlU1ZHUmFyZURhdGEoKS0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcyh0
cnVlKTsKLX0KLQotdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXNJZlBvc3NpYmxlKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlcyh0aGlzKSkKLSAgICAgICAgZW5zdXJlU1ZH
UmFyZURhdGEoKS0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcyhmYWxzZSk7Ci19Ci0KIEFmZmluZVRy
YW5zZm9ybSBTVkdTdHlsZWRFbGVtZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShT
VkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdAogewogICAgIC8vIFRvIGJlIG92ZXJyaWRlbiBi
eSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
IChvciBhcyBzcGVjaWFsIGNhc2UgU1ZHVGV4dEVsZW1lbnQgYW5kIFNWR1BhdHRlcm5FbGVtZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAxMzIy
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw4ICszNSw2IEBAIHZvaWQgbWFwQXR0cmlidXRlVG9DU1NQcm9wZXJ0eShIYXNo
TWFwPEEKIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHU3R5bGFibGUgewogcHVibGljOgotICAgIHZp
cnR1YWwgflNWR1N0eWxlZEVsZW1lbnQoKTsKLQogICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkg
Y29uc3Q7CiAKICAgICBib29sIGhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IHsgcmV0dXJuICFt
X2VsZW1lbnRzV2l0aFJlbGF0aXZlTGVuZ3Rocy5pc0VtcHR5KCk7IH0KQEAgLTUwLDEwICs0OCw2
IEBAIHB1YmxpYzoKICAgICBib29sIGluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdDsKICAg
ICB2b2lkIHNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoYm9vbCk7CiAKLSAgICBib29sIGhhc1Bl
bmRpbmdSZXNvdXJjZXMoKSBjb25zdDsKLSAgICB2b2lkIHNldEhhc1BlbmRpbmdSZXNvdXJjZXMo
KTsKLSAgICB2b2lkIGNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKTsKLQogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgVmVjdG9yPEFuaW1hdGVkUHJvcGVydHlUeXBlPiYpOwogICAgIHN0YXRpYyBi
b29sIGlzQW5pbWF0YWJsZUNTU1Byb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIApAQCAt
NjksNyArNjMsNyBAQCBwcm90ZWN0ZWQ6IAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0
ZShjb25zdCBBdHRyaWJ1dGUmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwg
U3R5bGVQcm9wZXJ0eVNldCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7CiAKICAgICB2aXJ0
dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSopIE9WRVJSSURFOwpAQCAtODAsNyArNzQsNiBAQCBwcm90ZWN0ZWQ6IAogICAgIHZvaWQgdXBk
YXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oYm9vbCBoYXNSZWxhdGl2ZUxlbmd0aHMsIFNW
R1N0eWxlZEVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5n
dGhzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRQZW5k
aW5nUmVzb3VyY2UoKSB7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171370</attachid>
            <date>2012-10-29 21:56:49 -0700</date>
            <delta_ts>2012-10-31 10:16:11 -0700</delta_ts>
            <desc>Patch 3 - Cache animationMode()</desc>
            <filename>99694.8.patch</filename>
            <type>text/plain</type>
            <size>26941</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjg3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0xMC0yOSAgUGhpbGlw
IFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIENhY2hlIGFuaW1hdGlvbk1vZGUo
KSBpbiBTVkcgYW5pbWF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5Njk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBjYWNoZXMgYW5pbWF0aW9uTW9kZSgpIHdoaWNoIGFjY291
bnRlZCBmb3IgMjUlIG9mIHRoZSBDUFUgdGltZSBvZiBhIHNpbXBsZQorICAgICAgICBhbmltYXRp
b24gYmVuY2htYXJrISBUaGlzIGlzIHRoZSAzcmQgcGF0Y2ggZm9yIFdLOTk2OTQuCisKKyAgICAg
ICAgQmFja2dyb3VuZDogU1ZHQW5pbWF0aW9uRWxlbWVudCBjb250YWlucyBtb3N0IG9mIHRoZSBz
aGFyZWQgYW5pbWF0aW9uIGxvZ2ljIGZvciA8YW5pbWF0ZT4sCisgICAgICAgIDxzZXQ+LCA8YW5p
bWF0ZUNvbG9yPiwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBhbmQgPGFuaW1hdGVNb3Rpb24+LiA8YW5p
bWF0ZU1vdGlvbj4gaXMgdGhlIG9ubHkKKyAgICAgICAgYW5pbWF0aW9uIGVsZW1lbnQgdGhhdCBj
YW4gZGVwZW5kIG9uIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLiBGb3IgZXhhbXBsZToKKyAg
ICAgICAgPHBhdGggaWQ9Im15cGF0aCIgZD0iTTAgMCBMIDEwMCAxMDBaIi8+IDwhLS0gbm90ZSwg
Y2FuIGJlIGFuaW1hdGVkISAtLT4KKyAgICAgICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIj4KKyAgICAgICAgICAgIDxhbmltYXRlTW90aW9u
IGR1cj0iNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj4KKyAgICAgICAgICAgICAgICA8bXBh
dGggeGxpbms6aHJlZj0iI215cGF0aCIvPgorICAgICAgICAgICAgPC9hbmltYXRlTW90aW9uPgor
ICAgICAgICA8L3JlY3Q+CisgICAgICAgIFNlZTogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3Np
bmdsZS1wYWdlLmh0bWwjYW5pbWF0ZS1BbmltYXRlTW90aW9uRWxlbWVudAorCisgICAgICAgIGFu
aW1hdGlvbk1vZGUgZGVwZW5kcyBvbiBzZXZlcmFsIHByb3BlcnRpZXMgb2YgYW4gYW5pbWF0aW9u
IGVsZW1lbnQ6IHRoZSBzZXQgdGFnLCB3aGV0aGVyCisgICAgICAgIHRoZSBhbmltYXRpb24gaGFz
IGEgcGF0aCwgYW5kIHRoZSAidmFsdWVzIiwgInRvIiwgYW5kICJieSIgYXR0cmlidXRlcy4gYW5p
bWF0aW9uTW9kZSgpIHdhcworICAgICAgICBhIGhvdCBmdW5jdGlvbiBmb3IgdHdvIHJlYXNvbnM6
CisgICAgICAgIDEpIGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikgaXMgZXhwZW5z
aXZlIGJlY2F1c2Ugd2UgYXJlIHVuYWJsZSB0byB1c2UKKyAgICAgICAgICAgZmFzdEhhc0F0dHJp
YnV0ZS4gVGhpcyBpcyBjYWNoZWFibGUgYnkgc2ltcGx5IGNhbGN1bGF0aW5nIHRoZSBhbmltYXRp
b25Nb2RlIHdoZW4gdGhlCisgICAgICAgICAgICJ2YWx1ZXMiIGF0dHJpYnV0ZSBjaGFuZ2VzLgor
ICAgICAgICAyKSBJbiB0aGUgPGFuaW1hdGVNb3Rpb24+IGNhc2UsIGRldGVybWluaW5nIGlmIGEg
cGF0aCBpcyBlbXB0eSBvciBjaGFuZ2VkIGlzIGV4cGVuc2l2ZS4KKyAgICAgICAgICAgQW5pbWF0
ZU1vdGlvbiBjYW4gaGF2ZSBhIHBhdGggYXR0cmlidXRlLCBvciBpdCBjYW4gaGF2ZSA8bXBhdGg+
IGNoaWxkcmVuIHRoYXQgcmVmZXJlbmNlCisgICAgICAgICAgIGEgKHBvc3NpYmx5IG5vbi1leGlz
dGVudCkgPHBhdGg+IGVsZW1lbnQgZWxzZXdoZXJlIGluIHRoZSBwYWdlLiBCZWZvcmUgdGhpcyBw
YXRjaCB3ZSBkaWQKKyAgICAgICAgICAgdGhpcyBwYXRoIGxvb2t1cCBvbiBldmVyeSBhbmltYXRp
b24gbG9vcCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkLiBBZnRlciB0aGlzIHBhdGNoIHdlCisg
ICAgICAgICAgIG9ubHkgdXBkYXRlIEFuaW1hdGVNb3Rpb24ncyBwYXRoIHdoZW4gaXQgY2hhbmdl
cy4KKworICAgICAgICBBIHByZXZpb3VzIHBhdGNoLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8xMzI4NDcsIGxhaWQgdGhlIGdyb3VuZHdvcmsgZm9yIHRyYWNraW5nCisgICAgICAg
IDxwYXRoPiBjaGFuZ2VzIGluIDxtcGF0aD4uIFRoaXMgcGF0Y2ggYWRkcyA8bXBhdGg+IHRvIG91
ciByZXNvdXJjZSB0cmFja2luZyBpbmZyYXN0cnVjdHVyZQorICAgICAgICB0byB0cmFjayB3aGVu
IHRhcmdldCA8cGF0aD5zIGNoYW5nZSwgaW5zdGVhZCBvZiBsb29raW5nIHRoaXMgdXAgZXZlcnkg
dGltZS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIGlzIGNvdmVyZWQgYnkgZXhpc3Rpbmcg
dGVzdHMuCisgICAgICAgIHN2Zy9hbmltYXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1tcGF0
aC10YXJnZXRDaGFuZ2UtMS5zdmcgZmFpbHMgYWZ0ZXIgdGhpcyBwYXRjaAorICAgICAgICBiZWNh
dXNlIG91ciBlbGVtZW50IGRlcGVuZGVuY3kgdHJhY2tpbmcgaGFzIGEgYnVnIHdpdGggZHVwbGlj
YXRlIGlkczsgc2VlIFdLOTk4OTMuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
Ojp1cGRhdGVBbmltYXRpb25QYXRoKToKKworICAgICAgICAgICAgYW5pbWF0aW9uUGF0aCgpIGhh
cyBiZWVuIGNoYW5nZWQgdG8gdXBkYXRlQW5pbWF0aW9uUGF0aCgpIGFuZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQKKyAgICAgICAgICAgIHdoZW4gdGhlIGFuaW1hdGlvbiBwYXRoIChwYXRoIGF0dHJp
YnV0ZSwgb3IgbXBhdGgncyByZWZlcmVuY2VkIHBhdGgpIGhhcyBjaGFuZ2VkLgorCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zvcm1Gb3JQcm9n
cmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRl
QW5pbWF0aW9uTW9kZSk6CisKKyAgICAgICAgICAgIElmIGFuIGFuaW1hdGlvblBhdGggZXhpc3Rz
LCB3ZSB1c2UgUGF0aEFuaW1hdGlvbiwgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayB0byB0aGUgbm9y
bWFsCisgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25Nb2RlKCkgY29kZXBhdGguCisKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oOgor
ICAgICAgICAoU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6
OlNWR0FuaW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorCisgICAgICAgICAgICBUaGUgZnJvbSwgYnks
IGFuZCB0byBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCBzbyB0aGF0IHdlIGNhbiB0cmFjayB3
aGVuIHRoZXkgY2hhbmdlCisgICAgICAgICAgICBhbmQgdXBkYXRlIHRoZSBhbmltYXRpb24gbW9k
ZS4gU2ltaWxhcmx5IGZvciB3aGVuIHRoZSB2YWx1ZXMgYXR0cmlidXRlIGNoYW5nZXMuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKToKKyAgICAgICAgKFNWR0FuaW1h
dGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0
QW5pbWF0aW9uTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToK
KworICAgICAgICAgICAgSXQgd291bGQgYmUgbmljZSB0byBtb3ZlIGFsbCB0aGUgZHVwbGljYXRl
ZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIGxvZ2ljIGludG8gYSBjZW50cmFsCisgICAgICAgICAg
ICBwbGFjZSAoU1ZHVVJJUmVmZXJlbmNlPykgYnV0IGZvciBub3cgaXQgaXMgY29waWVkLiBUaGlz
IGZ1bmN0aW9uIGlzIG5lYXJseSBpZGVudGljYWwgdG8KKyAgICAgICAgICAgIFNWR0ZFSW1hZ2VF
bGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZS4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTVBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01QYXRoRWxlbWVudDo6dGFyZ2V0UGF0aENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhDaGFuZ2UpOgorICAgICAg
ICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKFNWR01QYXRoRWxlbWVudCk6Cisg
ICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKworICAgICAgICAgICAgV2hlbiBhIDxw
YXRoPidzIHBhdGggY2hhbmdlcywgd2UgbmVlZCB0byBub3RpZnkgYW55IGRlcGVuZGVudCA8bXBh
dGg+IGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgICAgICB0eXBpY2FsbHkgaGFuZGxlZCB3aXRo
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24KKyAgICAgICAgICAgIGJ1dCBmb3IgdGhlIHNwZWNpYWwtY2FzZSBvZiA8bXBhdGg+IHdl
IG9ubHkgbmVlZCB0byB0cmFjayB3aGVuIHRoZSBwYXRoJ3MgImQiIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgY2hhbmdlcyBzbyBpbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKSBoYXMgYmVlbiBh
ZGRlZC4KKworICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0
aERlcGVuZGVuY2llcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAg
ICAgICAgKFNWR1BhdGhFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50OjpTVkdTZXRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogc3ZnL1NWR1NldEVsZW1lbnQuaDoKKyAgICAgICAgKFNW
R1NldEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKwogMjAxMi0xMC0yOSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IGEgdHlwbyB0aGF0IGNhdXNlZCBTVkcgZXh0ZXJuYWwgcmVzb3VyY2VzIHRvIGJlIGJs
b2NrZWQgb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAkocmV2aXNpb24gMTMyODQ5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmkKICAgICBpZiAoYXR0cmli
dXRlLm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0aEF0dHIpIHsKICAgICAgICAgbV9wYXRoID0gUGF0
aCgpOwogICAgICAgICBidWlsZFBhdGhGcm9tU3RyaW5nKGF0dHJpYnV0ZS52YWx1ZSgpLCBtX3Bh
dGgpOworICAgICAgICB1cGRhdGVBbmltYXRpb25QYXRoKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEzMCwyMSArMTMxLDI3IEBAIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpSb3Rh
dGVNb2RlIFNWR0EKICAgICByZXR1cm4gUm90YXRlQW5nbGU7CiB9CiAKLVBhdGggU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgoKSBjb25zdAordm9pZCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uUGF0aCgpCiB7CisgICAgbV9hbmltYXRpb25QYXRo
ID0gUGF0aCgpOworICAgIGJvb2wgZm91bmRNUGF0aCA9IGZhbHNlOworCiAgICAgZm9yIChOb2Rl
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjptcGF0aFRhZykp
IHsKICAgICAgICAgICAgIFNWR01QYXRoRWxlbWVudCogbVBhdGggPSBzdGF0aWNfY2FzdDxTVkdN
UGF0aEVsZW1lbnQqPihjaGlsZCk7CiAgICAgICAgICAgICBTVkdQYXRoRWxlbWVudCogcGF0aEVs
ZW1lbnQgPSBtUGF0aC0+cGF0aEVsZW1lbnQoKTsKLSAgICAgICAgICAgIFBhdGggcGF0aDsKLSAg
ICAgICAgICAgIGlmIChwYXRoRWxlbWVudCkKLSAgICAgICAgICAgICAgICB1cGRhdGVQYXRoRnJv
bUdyYXBoaWNzRWxlbWVudChwYXRoRWxlbWVudCwgcGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
cGF0aDsKKyAgICAgICAgICAgIGlmIChwYXRoRWxlbWVudCkgeworICAgICAgICAgICAgICAgIHVw
ZGF0ZVBhdGhGcm9tR3JhcGhpY3NFbGVtZW50KHBhdGhFbGVtZW50LCBtX2FuaW1hdGlvblBhdGgp
OworICAgICAgICAgICAgICAgIGZvdW5kTVBhdGggPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmIChmYXN0SGFzQXR0
cmlidXRlKFNWR05hbWVzOjpwYXRoQXR0cikpCi0gICAgICAgIHJldHVybiBtX3BhdGg7Ci0gICAg
cmV0dXJuIFBhdGgoKTsKKworICAgIGlmICghZm91bmRNUGF0aCAmJiBmYXN0SGFzQXR0cmlidXRl
KFNWR05hbWVzOjpwYXRoQXR0cikpCisgICAgICAgIG1fYW5pbWF0aW9uUGF0aCA9IG1fcGF0aDsK
KworICAgIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKIH0KIAogc3RhdGljIGJvb2wgcGFyc2VQb2lu
dChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBvaW50KQpAQCAtMjE5LDE5ICsyMjYsMTgg
QEAgYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRgogCiB2b2lkIFNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpidWlsZFRyYW5zZm9ybUZvclByb2dyZXNzKEFmZmluZVRyYW5z
Zm9ybSogdHJhbnNmb3JtLCBmbG9hdCBwZXJjZW50YWdlKQogewotICAgIFBhdGggcGF0aCA9IGFu
aW1hdGlvblBhdGgoKTsKLSAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
IW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpOwogCiAgICAgYm9vbCBvayA9IGZhbHNlOwotICAg
IGZsb2F0IHBvc2l0aW9uT25QYXRoID0gcGF0aC5sZW5ndGgoKSAqIHBlcmNlbnRhZ2U7Ci0gICAg
RmxvYXRQb2ludCBwb3NpdGlvbiA9IHBhdGgucG9pbnRBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwg
b2spOworICAgIGZsb2F0IHBvc2l0aW9uT25QYXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgp
ICogcGVyY2VudGFnZTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRo
LnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKICAgICBpZiAoIW9rKQogICAgICAg
ICByZXR1cm47CiAgICAgdHJhbnNmb3JtLT50cmFuc2xhdGUocG9zaXRpb24ueCgpLCBwb3NpdGlv
bi55KCkpOwogICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9IHRoaXMtPnJvdGF0ZU1vZGUoKTsK
ICAgICBpZiAocm90YXRlTW9kZSAhPSBSb3RhdGVBdXRvICYmIHJvdGF0ZU1vZGUgIT0gUm90YXRl
QXV0b1JldmVyc2UpCiAgICAgICAgIHJldHVybjsKLSAgICBmbG9hdCBhbmdsZSA9IHBhdGgubm9y
bWFsQW5nbGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOworICAgIGZsb2F0IGFuZ2xlID0g
bV9hbmltYXRpb25QYXRoLm5vcm1hbEFuZ2xlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsK
ICAgICBpZiAocm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvUmV2ZXJzZSkKICAgICAgICAgYW5nbGUg
Kz0gMTgwOwogICAgIHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKQEAgLTMxOSw1ICszMjUsMTMg
QEAgZmxvYXQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZQogICAgIHJldHVybiBz
cXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBkaWZmLmhlaWdodCgpICogZGlmZi5o
ZWlnaHQoKSk7CiB9CiAKK3ZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGlvbk1vZGUoKQoreworICAgIGlmICghbV9hbmltYXRpb25QYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgc2V0QW5pbWF0aW9uTW9kZShQYXRoQW5pbWF0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKK30KKwogfQogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTMyODQ5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQgOiBwdWJs
aWMgU1ZHQW5pbWF0aW9uRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblBhdGgoKTsKIAogcHJpdmF0ZToKICAg
ICBTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKQEAgLTQ4LDcgKzQ5LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRl
QW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZH
U01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseVJlc3Vs
dHNUb1RhcmdldCgpOwogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKLSAgICB2aXJ0dWFs
IFBhdGggYW5pbWF0aW9uUGF0aCgpIGNvbnN0OwogCiAgICAgZW51bSBSb3RhdGVNb2RlIHsKICAg
ICAgICAgUm90YXRlQW5nbGUsCkBAIC02MCwxMiArNjAsMTUgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uOwogCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFuaW1hdGlvbk1vZGUoKSBPVkVSUklERTsKKwogICAgIC8vIE5vdGU6IHdlIGRvIG5vdCBzdXBw
b3J0IHBlcmNlbnRhZ2UgdmFsdWVzIGZvciB0by9mcm9tIGNvb3JkcyBhcyB0aGUgc3BlYyBpbXBs
aWVzIHdlIHNob3VsZCAob3BlcmEgZG9lc24ndCBlaXRoZXIpCiAgICAgRmxvYXRQb2ludCBtX2Zy
b21Qb2ludDsKICAgICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKICAgICBGbG9hdFBvaW50IG1fdG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbjsKIAogICAgIFBhdGggbV9wYXRoOworICAgIFBhdGggbV9hbmlt
YXRpb25QYXRoOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMjg0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksNiArNTksNyBAQCBTVkdBbmltYXRpb25FbGVtZW50OjpTVkdBbmltYXRpb25F
bGVtZW50CiAgICAgLCBtX2F0dHJpYnV0ZVR5cGUoQXR0cmlidXRlVHlwZUF1dG8pCiAgICAgLCBt
X2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKGZhbHNlKQogICAgICwgbV9jYWxjTW9kZShDYWxj
TW9kZUxpbmVhcikKKyAgICAsIG1fYW5pbWF0aW9uTW9kZShOb0FuaW1hdGlvbikKIHsKICAgICBy
ZWdpc3RlckFuaW1hdGVkUHJvcGVydGllc0ZvclNWR0FuaW1hdGlvbkVsZW1lbnQoKTsKIH0KQEAg
LTE1MSw2ICsxNTIsOSBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjprZXlTcGxpbmVzQXR0
cik7CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphdHRyaWJ1dGVU
eXBlQXR0cik7CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjYWxj
TW9kZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZnJv
bUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dG9BdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmJ5QXR0cik7CiAg
ICAgfQogICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zPFF1YWxpZmllZE5h
bWUsIFNWR0F0dHJpYnV0ZUhhc2hUcmFuc2xhdG9yPihhdHRyTmFtZSk7CiB9CkBAIC0xNjksNiAr
MTczLDggQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZQogICAgICAg
ICBhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKS5zcGxpdCgnOycsIG1fdmFsdWVzKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgbV92YWx1ZXNbaV0gPSBtX3ZhbHVlc1tpXS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAg
ICAgICB1cGRhdGVBbmltYXRpb25Nb2RlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTIwMSw2ICsyMDcsMTEgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmZyb21BdHRyIHx8IGF0dHJpYnV0ZS5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRvQXR0
ciB8fCBhdHRyaWJ1dGUubmFtZSgpID09IFNWR05hbWVzOjpieUF0dHIpIHsKKyAgICAgICAgdXBk
YXRlQW5pbWF0aW9uTW9kZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0cmlidXRlKGF0dHJpYnV0
ZSkpCkBAIC0yNjcsMjAgKzI3OCwxNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVs
ZW1lbnRBdChmCiAgICAgYWRkRW5kVGltZShlbGFwc2VkLCBlbGFwc2VkICsgb2Zmc2V0LCBTTUlM
VGltZVdpdGhPcmlnaW46OlNjcmlwdE9yaWdpbik7CiB9CiAKLUFuaW1hdGlvbk1vZGUgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6YW5pbWF0aW9uTW9kZSgpIGNvbnN0Cit2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUoKQogewogICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDEvUkVDLXNtaWwtYW5pbWF0aW9uLTIwMDEwOTA0LyNBbmltRnVuY1ZhbHVlcwotICAg
IGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpKQotICAgICAgICByZXR1cm4gVG9Bbmlt
YXRpb247Ci0gICAgaWYgKCFhbmltYXRpb25QYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gUGF0aEFuaW1hdGlvbjsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKSkKLSAgICAgICAgcmV0dXJuIFZhbHVlc0FuaW1hdGlvbjsKLSAgICBpZiAoIXRvVmFsdWUo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmcm9tVmFsdWUoKS5pc0VtcHR5KCkgPyBUb0Fu
aW1hdGlvbiA6IEZyb21Ub0FuaW1hdGlvbjsKLSAgICBpZiAoIWJ5VmFsdWUoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmcm9tVmFsdWUoKS5pc0VtcHR5KCkgPyBCeUFuaW1hdGlvbiA6IEZy
b21CeUFuaW1hdGlvbjsKLSAgICByZXR1cm4gTm9BbmltYXRpb247CisgICAgICAgIHNldEFuaW1h
dGlvbk1vZGUoVmFsdWVzQW5pbWF0aW9uKTsKKyAgICBlbHNlIGlmICghdG9WYWx1ZSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgc2V0QW5pbWF0aW9uTW9kZShmcm9tVmFsdWUoKS5pc0VtcHR5KCkgPyBU
b0FuaW1hdGlvbiA6IEZyb21Ub0FuaW1hdGlvbik7CisgICAgZWxzZSBpZiAoIWJ5VmFsdWUoKS5p
c0VtcHR5KCkpCisgICAgICAgIHNldEFuaW1hdGlvbk1vZGUoZnJvbVZhbHVlKCkuaXNFbXB0eSgp
ID8gQnlBbmltYXRpb24gOiBGcm9tQnlBbmltYXRpb24pOworICAgIGVsc2UKKyAgICAgICAgc2V0
QW5pbWF0aW9uTW9kZShOb0FuaW1hdGlvbik7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6c2V0Q2FsY01vZGUoY29uc3QgQXRvbWljU3RyaW5nJiBjYWxjTW9kZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTMyODQ5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJFbGVtZW50VGlt
ZUNvbnRyb2wuaCIKLSNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiU01JTFRpbWUuaCIKICNp
bmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCkBAIC04Nyw3ICs4Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0FjY3VtdWxhdGVkKCkgY29uc3Q7
Ci0gICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlKCkgY29uc3Q7CisgICAgQW5pbWF0aW9u
TW9kZSBhbmltYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Nb2RlOyB9CiAg
ICAgQ2FsY01vZGUgY2FsY01vZGUoKSBjb25zdCB7IHJldHVybiBtX2NhbGNNb2RlOyB9CiAKICAg
ICBlbnVtIFNob3VsZEFwcGx5QW5pbWF0aW9uIHsKQEAgLTIwMSw2ICsyMDAsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQq
IGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CiAgICAgYm9v
bCBoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW52YWxp
ZENTU0F0dHJpYnV0ZVR5cGU7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb25N
b2RlKCk7CisgICAgdm9pZCBzZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9u
TW9kZSkgeyBtX2FuaW1hdGlvbk1vZGUgPSBhbmltYXRpb25Nb2RlOyB9CiAgICAgdm9pZCBzZXRD
YWxjTW9kZShDYWxjTW9kZSBjYWxjTW9kZSkgeyBtX2NhbGNNb2RlID0gY2FsY01vZGU7IH0KIAog
cHJpdmF0ZToKQEAgLTIxNSw3ICsyMTYsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBj
YWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJ5U3RyaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVk
VmFsdWUoZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50
KiByZXN1bHRFbGVtZW50KSA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5j
ZShjb25zdCBTdHJpbmcmIC8qZnJvbVN0cmluZyovLCBjb25zdCBTdHJpbmcmIC8qdG9TdHJpbmcq
LykgeyByZXR1cm4gLTEuZjsgfQotICAgIHZpcnR1YWwgUGF0aCBhbmltYXRpb25QYXRoKCkgY29u
c3QgeyByZXR1cm4gUGF0aCgpOyB9CiAKICAgICB2b2lkIGN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNB
bmltYXRpb24oZmxvYXQgcGVyY2VudCwgZmxvYXQmIGVmZmVjdGl2ZVBlcmNlbnQsIFN0cmluZyYg
ZnJvbSwgU3RyaW5nJiB0byk7CiAgICAgdm9pZCBjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2Rl
UGFjZWQoKTsKQEAgLTI1MCw2ICsyNTAsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2xhc3RW
YWx1ZXNBbmltYXRpb25UbzsKICAgICBib29sIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7
CiAgICAgQ2FsY01vZGUgbV9jYWxjTW9kZTsKKyAgICBBbmltYXRpb25Nb2RlIG1fYW5pbWF0aW9u
TW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzI4NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogI2luY2x1ZGUgIlNWR01QYXRoRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKIApAQCAtNDksNiArNTAsNTMgQEAgUGFz
c1JlZlB0cjxTVkdNUGF0aEVsZW1lbnQ+IFNWR01QYXRoRWxlbQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHTVBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK3ZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCit7CisgICAgY2xlYXJSZXNvdXJj
ZVJlZmVyZW5jZXMoKTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU3RyaW5nIGlkOworICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6
dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOworICAg
IGlmICghdGFyZ2V0KSB7CisgICAgICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291cmNl
KGlkLCB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0YXJnZXQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAg
ICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1h
cC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAorICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJl
bGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4K
KyAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRFbGVtZW50UmVm
ZXJlbmNpbmdUYXJnZXQodGhpcywgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdldCkpOwor
ICAgIH0KKworICAgIHRhcmdldFBhdGhDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU1ZHTVBhdGhFbGVt
ZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KCkp
OworICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsVGFyZ2V0
UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7Cit9CisKK05vZGU6Okluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgU1ZHTVBhdGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSog
cm9vdFBhcmVudCkKK3sKKyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7
CisgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgYnVpbGRQZW5kaW5n
UmVzb3VyY2UoKTsKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwordm9pZCBTVkdNUGF0
aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIHJvb3RQYXJlbnQpCit7CisgICAg
U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgbm90aWZ5UGFyZW50T2ZQ
YXRoQ2hhbmdlKHJvb3RQYXJlbnQpOworICAgIGlmIChyb290UGFyZW50LT5pbkRvY3VtZW50KCkp
CisgICAgICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7Cit9CisKIGJvb2wgU1ZHTVBhdGhF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1
cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKQEAgLTc0LDYgKzEyMiwyNiBAQCB2b2lkIFNWR01QYXRo
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKworICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIGJ1aWxk
UGVuZGluZ1Jlc291cmNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiBTVkdQYXRo
RWxlbWVudCogU1ZHTVBhdGhFbGVtZW50OjpwYXRoRWxlbWVudCgpCiB7CiAgICAgRWxlbWVudCog
dGFyZ2V0ID0gdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpKTsK
QEAgLTgyLDYgKzE1MCwxNyBAQCBTVkdQYXRoRWxlbWVudCogU1ZHTVBhdGhFbGVtZW50OjpwYXRo
RWxlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50Ojp0YXJnZXRQYXRo
Q2hhbmdlZCgpCit7CisgICAgbm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKHBhcmVudE5vZGUoKSk7
Cit9CisKK3ZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhDaGFuZ2UoQ29u
dGFpbmVyTm9kZSogcGFyZW50KQoreworICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQqPihwYXJlbnQpLT51cGRhdGVBbmltYXRpb25QYXRoKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxMzI4NDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVh
bi5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogCkBAIC0zNywxMyArMzgsMjIgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR01QYXRoRWxlbWVudD4gY3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgU1ZHUGF0aEVsZW1lbnQqIHBhdGhF
bGVtZW50KCk7Ci0gICAgCisKKyAgICB2b2lkIHRhcmdldFBhdGhDaGFuZ2VkKCk7CisKIHByaXZh
dGU6CiAgICAgU1ZHTVBhdGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCi0gICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNoYW5nZWQgbWlzc2luZy4KKyAgICB2b2lk
IGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNl
cygpOworICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFp
bmVyTm9kZSopOworCiAgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsKKworICAgIHZvaWQgbm90aWZ5UGFyZW50T2ZQYXRo
Q2hhbmdlKENvbnRhaW5lck5vZGUqKTsKIAogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJP
UEVSVElFUyhTVkdNUGF0aEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfU1RSSU5H
KEhyZWYsIGhyZWYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzMjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRo
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJTVkdNUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdBcmMuaCIKICNpbmNsdWRlICJTVkdQYXRoU2Vn
Q2xvc2VQYXRoLmgiCkBAIC0yNzAsMTIgKzI3MSw0MSBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkCiAKICAgICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKKworICAgICAgICBpbnZhbGlkYXRlTVBh
dGhEZXBlbmRlbmNpZXMoKTsKICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCiAgICAgICAgIFJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24ocmVuZGVyZXIpOwogfQogCit2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBhdGhE
ZXBlbmRlbmNpZXMoKQoreworICAgIC8vIDxtcGF0aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxwYXRo
PiBidXQgdGhpcyBkZXBlbmRlbmN5IGlzIG5vdCBoYW5kbGVkIGluCisgICAgLy8gbWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBhdGgg
ZGVwZW5kZW5jaWVzIG1hbnVhbGx5LgorICAgIEFTU0VSVChkb2N1bWVudCgpKTsKKyAgICBpZiAo
SGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMpKSB7Cisg
ICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBkZXBlbmRlbmNpZXMt
PmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBpdCA9
IGRlcGVuZGVuY2llcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBp
ZiAoKCppdCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1wYXRoVGFnKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxTVkdNUGF0aEVsZW1lbnQqPigqaXQpLT50YXJnZXRQYXRoQ2hhbmdlZCgp
OworICAgICAgICB9CisgICAgfQorfQorCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IFNWR1BhdGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogcm9vdFBhcmVu
dCkKK3sKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJv
b3RQYXJlbnQpOworICAgIGludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcygpOworICAgIHJldHVy
biBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIFNWR1BhdGhFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlKiByb290UGFyZW50KQoreworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKKyAgICBpbnZhbGlkYXRlTVBhdGhEZXBl
bmRlbmNpZXMoKTsKK30KKwogU1ZHUGF0aEJ5dGVTdHJlYW0qIFNWR1BhdGhFbGVtZW50OjpwYXRo
Qnl0ZVN0cmVhbSgpIGNvbnN0CiB7CiAgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSogcHJvcGVydHkg
PSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdB
bmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHJldmlzaW9uIDEzMjg0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNiArMTI4LDExIEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAorICAgIHZpcnR1YWwgTm9kZTo6
SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlKikg
T1ZFUlJJREU7CisKKyAgICB2b2lkIGludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcygpOworCiBw
cml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRoQnl0ZVN0cmVhbTsK
ICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdQYXRoU2Vn
TGlzdD4gbV9wYXRoU2VnTGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTZXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzMjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBpbmxpbmUgU1ZHU2V0RWxlbWVudDo6U1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRlRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKIHsKKyAgICBzZXRBbmltYXRpb25Nb2RlKFRvQW5pbWF0aW9uKTsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSk7CiB9CiAKQEAgLTM2LDYg
KzM3LDEyIEBAIFBhc3NSZWZQdHI8U1ZHU2V0RWxlbWVudD4gU1ZHU2V0RWxlbWVudDoKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NldEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAordm9pZCBTVkdTZXRFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25Nb2RlKCkKK3sKKyAgICAvLyBO
by1vcCwgYXMgPHNldD4gaGFzIGEgY29uc3RhbnQgYW5pbWF0aW9uIG1vZGUgb2YgVG9BbmltYXRp
b24uCisgICAgLy8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvc2luZ2xlLXBhZ2UuaHRt
bCNhbmltYXRlLVNldEVsZW1lbnQKK30KKwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9uIDEzMjg0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFNWR1NldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1vZGUo
KSBPVkVSUklERTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzI4NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIxLDkgKzQyMSw2IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXQKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Om1pbkF0dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6bWF4QXR0cik7CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjph
dHRyaWJ1dGVOYW1lQXR0cik7Ci0gICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjpmcm9tQXR0cik7Ci0gICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
Ojp0b0F0dHIpOwotICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6YnlB
dHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoWExpbmtOYW1lczo6aHJlZkF0
dHIpOwogICAgIH0KICAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWluczxRdWFs
aWZpZWROYW1lLCBTVkdBdHRyaWJ1dGVIYXNoVHJhbnNsYXRvcj4oYXR0ck5hbWUpOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTMyODcxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMjkgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29v
Z2xlLmNvbT4KKworICAgICAgICBDYWNoZSBhbmltYXRpb25Nb2RlKCkgaW4gU1ZHIGFuaW1hdGlv
bnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cmVmYWN0b3JpbmcgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKyAgICAgICAgc3ZnL2Fu
aW1hdGlvbnMvbW96aWxsYS9hbmltYXRlTW90aW9uLW1wYXRoLXRhcmdldENoYW5nZS0xLnN2ZyBm
YWlscyBhZnRlciB0aGlzIHBhdGNoCisgICAgICAgIGJlY2F1c2Ugb3VyIGVsZW1lbnQgZGVwZW5k
ZW5jeSB0cmFja2luZyBoYXMgYSBidWcgd2l0aCBkdXBsaWNhdGUgaWRzOyBzZWUgV0s5OTg5My4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTAtMjUgIFN0ZXBoZW4g
Q2hlbm5leSAgPHNjaGVubmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBmZUltYWdlIHNob3Vs
ZCBub3QgYmUgYWxsb3dlZCB0byBzZWxmIHJlZmVyZW5jZQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxMzI4NDkpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIxLDYgKzEzMjEsOCBAQCB3ZWJraXQub3JnL2IvODMwNTEgWyBBbmRyb2lk
IExpbnV4IExpb24gCiAKIHdlYmtpdC5vcmcvYi84MzE4MyBbIE1hYyBdIHN2Zy9hcy1pbWFnZS9h
bmltYXRlZC1zdmctYXMtaW1hZ2Utbm8tZml4ZWQtaW50cmluc2ljLXNpemUuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgUGFzcyBdCiAKK3dlYmtpdC5vcmcvYi85OTg5MyBzdmcvYW5pbWF0aW9ucy9t
b3ppbGxhL2FuaW1hdGVNb3Rpb24tbXBhdGgtdGFyZ2V0Q2hhbmdlLTEuc3ZnIFsgSW1hZ2VPbmx5
RmFpbHVyZSBdCisKICMgQXBwZWFycyB0byBiZSBmYWlsaW5nIG9uIFNraWEgcGxhdGZvcm1zCiB3
ZWJraXQub3JnL2IvODMxOTkgc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLWZpbHRlci5zdmcgWyBJbWFn
ZU9ubHlGYWlsdXJlIFBhc3MgXQogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTMyODQ5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTExNjcsNiArMTE2Nyw4IEBA
IHdlYmtpdC5vcmcvYi84NTQwNCBmYXN0L2xvYWRlci9qYXZhc2NyaXAKIAogd2Via2l0Lm9yZy9i
Lzg1NDA4IHN2Zy9iYXRpay90ZXh0L2xvbmdUZXh0T25QYXRoLnN2ZyBbIEZhaWx1cmUgUGFzcyBd
CiAKK3dlYmtpdC5vcmcvYi85OTg5MyBzdmcvYW5pbWF0aW9ucy9tb3ppbGxhL2FuaW1hdGVNb3Rp
b24tbXBhdGgtdGFyZ2V0Q2hhbmdlLTEuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKICMgTmVl
ZCByZWJhc2VsaW5lIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTExNgogd2Via2l0Lm9yZy9iLzg5MTE2IHN2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLXNwZWN1
bGFyLTAxLWYuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi84OTEx
NiBzdmcvZHluYW1pYy11cGRhdGVzL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQtZG9tLWlu
LWF0dHIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgUGFzcyBdCg==
</data>
<flag name="review"
          id="185246"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171681</attachid>
            <date>2012-10-31 10:16:11 -0700</date>
            <delta_ts>2012-10-31 13:54:48 -0700</delta_ts>
            <desc>Patch 3 - Cache animationMode()</desc>
            <filename>99694.9.patch</filename>
            <type>text/plain</type>
            <size>28289</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0xMC0zMSAgUGhpbGlw
IFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIENhY2hlIGFuaW1hdGlvbk1vZGUo
KSBpbiBTVkcgYW5pbWF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5Njk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBjYWNoZXMgYW5pbWF0aW9uTW9kZSgpIHdoaWNoIGFjY291bnRl
ZCBmb3IgMjUlIG9mIHRoZSBDUFUgdGltZSBvZiBhIHNpbXBsZQorICAgICAgICBhbmltYXRpb24g
YmVuY2htYXJrISBUaGlzIGlzIHRoZSAzcmQgcGF0Y2ggZm9yIFdLOTk2OTQuCisKKyAgICAgICAg
QmFja2dyb3VuZDogU1ZHQW5pbWF0aW9uRWxlbWVudCBjb250YWlucyBtb3N0IG9mIHRoZSBzaGFy
ZWQgYW5pbWF0aW9uIGxvZ2ljIGZvciA8YW5pbWF0ZT4sCisgICAgICAgIDxzZXQ+LCA8YW5pbWF0
ZUNvbG9yPiwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBhbmQgPGFuaW1hdGVNb3Rpb24+LiA8YW5pbWF0
ZU1vdGlvbj4gaXMgdGhlIG9ubHkKKyAgICAgICAgYW5pbWF0aW9uIGVsZW1lbnQgdGhhdCBjYW4g
ZGVwZW5kIG9uIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLiBGb3IgZXhhbXBsZToKKyAgICAg
ICAgPHBhdGggaWQ9Im15cGF0aCIgZD0iTTAgMCBMIDEwMCAxMDBaIi8+IDwhLS0gbm90ZSwgY2Fu
IGJlIGFuaW1hdGVkISAtLT4KKyAgICAgICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIg
aGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIj4KKyAgICAgICAgICAgIDxhbmltYXRlTW90aW9uIGR1
cj0iNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj4KKyAgICAgICAgICAgICAgICA8bXBhdGgg
eGxpbms6aHJlZj0iI215cGF0aCIvPgorICAgICAgICAgICAgPC9hbmltYXRlTW90aW9uPgorICAg
ICAgICA8L3JlY3Q+CisgICAgICAgIFNlZTogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3Npbmds
ZS1wYWdlLmh0bWwjYW5pbWF0ZS1BbmltYXRlTW90aW9uRWxlbWVudAorCisgICAgICAgIGFuaW1h
dGlvbk1vZGUgZGVwZW5kcyBvbiBzZXZlcmFsIHByb3BlcnRpZXMgb2YgYW4gYW5pbWF0aW9uIGVs
ZW1lbnQ6IHRoZSBzZXQgdGFnLCB3aGV0aGVyCisgICAgICAgIHRoZSBhbmltYXRpb24gaGFzIGEg
cGF0aCwgYW5kIHRoZSAidmFsdWVzIiwgInRvIiwgYW5kICJieSIgYXR0cmlidXRlcy4gYW5pbWF0
aW9uTW9kZSgpIHdhcworICAgICAgICBhIGhvdCBmdW5jdGlvbiBmb3IgdHdvIHJlYXNvbnM6Cisg
ICAgICAgIDEpIGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikgaXMgZXhwZW5zaXZl
IGJlY2F1c2Ugd2UgYXJlIHVuYWJsZSB0byB1c2UKKyAgICAgICAgICAgZmFzdEhhc0F0dHJpYnV0
ZS4gVGhpcyBpcyBjYWNoZWFibGUgYnkgc2ltcGx5IGNhbGN1bGF0aW5nIHRoZSBhbmltYXRpb25N
b2RlIHdoZW4gdGhlCisgICAgICAgICAgICJ2YWx1ZXMiIGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAg
ICAgICAyKSBJbiB0aGUgPGFuaW1hdGVNb3Rpb24+IGNhc2UsIGRldGVybWluaW5nIGlmIGEgcGF0
aCBpcyBlbXB0eSBvciBjaGFuZ2VkIGlzIGV4cGVuc2l2ZS4KKyAgICAgICAgICAgQW5pbWF0ZU1v
dGlvbiBjYW4gaGF2ZSBhIHBhdGggYXR0cmlidXRlLCBvciBpdCBjYW4gaGF2ZSA8bXBhdGg+IGNo
aWxkcmVuIHRoYXQgcmVmZXJlbmNlCisgICAgICAgICAgIGEgKHBvc3NpYmx5IG5vbi1leGlzdGVu
dCkgPHBhdGg+IGVsZW1lbnQgZWxzZXdoZXJlIGluIHRoZSBwYWdlLiBCZWZvcmUgdGhpcyBwYXRj
aCB3ZSBkaWQKKyAgICAgICAgICAgdGhpcyBwYXRoIGxvb2t1cCBvbiBldmVyeSBhbmltYXRpb24g
bG9vcCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkLiBBZnRlciB0aGlzIHBhdGNoIHdlCisgICAg
ICAgICAgIG9ubHkgdXBkYXRlIEFuaW1hdGVNb3Rpb24ncyBwYXRoIHdoZW4gaXQgY2hhbmdlcy4K
KworICAgICAgICBBIHByZXZpb3VzIHBhdGNoLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8xMzI4NDcsIGxhaWQgdGhlIGdyb3VuZHdvcmsgZm9yIHRyYWNraW5nCisgICAgICAgIDxw
YXRoPiBjaGFuZ2VzIGluIDxtcGF0aD4uIFRoaXMgcGF0Y2ggYWRkcyA8bXBhdGg+IHRvIG91ciBy
ZXNvdXJjZSB0cmFja2luZyBpbmZyYXN0cnVjdHVyZQorICAgICAgICB0byB0cmFjayB3aGVuIHRh
cmdldCA8cGF0aD5zIGNoYW5nZSwgaW5zdGVhZCBvZiBsb29raW5nIHRoaXMgdXAgZXZlcnkgdGlt
ZS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisgICAgICAgIHN2Zy9hbmltYXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1tcGF0aC10
YXJnZXRDaGFuZ2UtMS5zdmcgZmFpbHMgYWZ0ZXIgdGhpcyBwYXRjaAorICAgICAgICBiZWNhdXNl
IG91ciBlbGVtZW50IGRlcGVuZGVuY3kgdHJhY2tpbmcgaGFzIGEgYnVnIHdpdGggZHVwbGljYXRl
IGlkczsgc2VlIFdLOTk4OTMuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1
cGRhdGVBbmltYXRpb25QYXRoKToKKworICAgICAgICAgICAgYW5pbWF0aW9uUGF0aCgpIGhhcyBi
ZWVuIGNoYW5nZWQgdG8gdXBkYXRlQW5pbWF0aW9uUGF0aCgpIGFuZCBzaG91bGQgb25seSBiZSBj
YWxsZWQKKyAgICAgICAgICAgIHdoZW4gdGhlIGFuaW1hdGlvbiBwYXRoIChwYXRoIGF0dHJpYnV0
ZSwgb3IgbXBhdGgncyByZWZlcmVuY2VkIHBhdGgpIGhhcyBjaGFuZ2VkLgorCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zvcm1Gb3JQcm9ncmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5p
bWF0aW9uTW9kZSk6CisKKyAgICAgICAgICAgIElmIGFuIGFuaW1hdGlvblBhdGggZXhpc3RzLCB3
ZSB1c2UgUGF0aEFuaW1hdGlvbiwgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayB0byB0aGUgbm9ybWFs
CisgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25Nb2RlKCkgY29kZXBhdGguCisKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oOgorICAg
ICAgICAoU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OlNW
R0FuaW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9u
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorCisgICAgICAgICAgICBUaGUgZnJvbSwgYnksIGFu
ZCB0byBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCBzbyB0aGF0IHdlIGNhbiB0cmFjayB3aGVu
IHRoZXkgY2hhbmdlCisgICAgICAgICAgICBhbmQgdXBkYXRlIHRoZSBhbmltYXRpb24gbW9kZS4g
U2ltaWxhcmx5IGZvciB3aGVuIHRoZSB2YWx1ZXMgYXR0cmlidXRlIGNoYW5nZXMuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUpOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKToKKyAgICAgICAgKFNWR0FuaW1hdGlv
bkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QW5p
bWF0aW9uTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxj
dWxhdGVEaXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKwor
ICAgICAgICAgICAgSXQgd291bGQgYmUgbmljZSB0byBtb3ZlIGFsbCB0aGUgZHVwbGljYXRlZCBi
dWlsZFBlbmRpbmdSZXNvdXJjZSgpIGxvZ2ljIGludG8gYSBjZW50cmFsCisgICAgICAgICAgICBw
bGFjZSAoU1ZHVVJJUmVmZXJlbmNlPykgYnV0IGZvciBub3cgaXQgaXMgY29waWVkLiBUaGlzIGZ1
bmN0aW9uIGlzIG5lYXJseSBpZGVudGljYWwgdG8KKyAgICAgICAgICAgIFNWR0ZFSW1hZ2VFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZS4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTVBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR01QYXRoRWxlbWVudDo6dGFyZ2V0UGF0aENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTVBhdGhFbGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhDaGFuZ2UpOgorICAgICAgICAq
IHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKFNWR01QYXRoRWxlbWVudCk6CisgICAg
ICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKworICAgICAgICAgICAgV2hlbiBhIDxwYXRo
PidzIHBhdGggY2hhbmdlcywgd2UgbmVlZCB0byBub3RpZnkgYW55IGRlcGVuZGVudCA8bXBhdGg+
IGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgICAgICB0eXBpY2FsbHkgaGFuZGxlZCB3aXRoIFJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24KKyAgICAgICAgICAgIGJ1dCBmb3IgdGhlIHNwZWNpYWwtY2FzZSBvZiA8bXBhdGg+IHdlIG9u
bHkgbmVlZCB0byB0cmFjayB3aGVuIHRoZSBwYXRoJ3MgImQiIGF0dHJpYnV0ZQorICAgICAgICAg
ICAgY2hhbmdlcyBzbyBpbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKSBoYXMgYmVlbiBhZGRl
ZC4KKworICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERl
cGVuZGVuY2llcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1l
bnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKFNWR1BhdGhFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50OjpTVkdTZXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogc3ZnL1NWR1NldEVsZW1lbnQuaDoKKyAgICAgICAgKFNWR1Nl
dEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToK
KwogMjAxMi0xMC0zMSAgQWxleGVpIEZpbGlwcG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogQWRkIHRvdGFsIG5vZGUgdG8gbmF0aXZlIG1lbW9yeSBzbmFw
c2hvdCB0cmVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMzA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBA
QCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZUF0dHJpCiAgICAgaWYgKGF0dHJp
YnV0ZS5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0aCA9IFBh
dGgoKTsKICAgICAgICAgYnVpbGRQYXRoRnJvbVN0cmluZyhhdHRyaWJ1dGUudmFsdWUoKSwgbV9w
YXRoKTsKKyAgICAgICAgdXBkYXRlQW5pbWF0aW9uUGF0aCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMzAsMjEgKzEzMSwyNyBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Um90
YXRlTW9kZSBTVkdBCiAgICAgcmV0dXJuIFJvdGF0ZUFuZ2xlOwogfQogCi1QYXRoIFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QYXRoKCkgY29uc3QKK3ZvaWQgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvblBhdGgoKQogeworICAgIG1fYW5pbWF0aW9uUGF0
aCA9IFBhdGgoKTsKKyAgICBib29sIGZvdW5kTVBhdGggPSBmYWxzZTsKKwogICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bXBhdGhUYWcp
KSB7CiAgICAgICAgICAgICBTVkdNUGF0aEVsZW1lbnQqIG1QYXRoID0gc3RhdGljX2Nhc3Q8U1ZH
TVBhdGhFbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIHBhdGhF
bGVtZW50ID0gbVBhdGgtPnBhdGhFbGVtZW50KCk7Ci0gICAgICAgICAgICBQYXRoIHBhdGg7Ci0g
ICAgICAgICAgICBpZiAocGF0aEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgdXBkYXRlUGF0aEZy
b21HcmFwaGljc0VsZW1lbnQocGF0aEVsZW1lbnQsIHBhdGgpOwotICAgICAgICAgICAgcmV0dXJu
IHBhdGg7CisgICAgICAgICAgICBpZiAocGF0aEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB1
cGRhdGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVudChwYXRoRWxlbWVudCwgbV9hbmltYXRpb25QYXRo
KTsKKyAgICAgICAgICAgICAgICBmb3VuZE1QYXRoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoZmFzdEhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6cGF0aEF0dHIpKQotICAgICAgICByZXR1cm4gbV9wYXRoOwotICAg
IHJldHVybiBQYXRoKCk7CisKKyAgICBpZiAoIWZvdW5kTVBhdGggJiYgZmFzdEhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6cGF0aEF0dHIpKQorICAgICAgICBtX2FuaW1hdGlvblBhdGggPSBtX3BhdGg7
CisKKyAgICB1cGRhdGVBbmltYXRpb25Nb2RlKCk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUG9p
bnQoY29uc3QgU3RyaW5nJiBzLCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTIxOSwxOSArMjI2LDE4
IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIAogdm9pZCBTVkdB
bmltYXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyhBZmZpbmVUcmFu
c2Zvcm0qIHRyYW5zZm9ybSwgZmxvYXQgcGVyY2VudGFnZSkKIHsKLSAgICBQYXRoIHBhdGggPSBh
bmltYXRpb25QYXRoKCk7Ci0gICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
KCFtX2FuaW1hdGlvblBhdGguaXNFbXB0eSgpKTsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAg
ICBmbG9hdCBwb3NpdGlvbk9uUGF0aCA9IHBhdGgubGVuZ3RoKCkgKiBwZXJjZW50YWdlOwotICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSBwYXRoLnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgs
IG9rKTsKKyAgICBmbG9hdCBwb3NpdGlvbk9uUGF0aCA9IG1fYW5pbWF0aW9uUGF0aC5sZW5ndGgo
KSAqIHBlcmNlbnRhZ2U7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IG1fYW5pbWF0aW9uUGF0
aC5wb2ludEF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CiAgICAgaWYgKCFvaykKICAgICAg
ICAgcmV0dXJuOwogICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9zaXRp
b24ueSgpKTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUgPSB0aGlzLT5yb3RhdGVNb2RlKCk7
CiAgICAgaWYgKHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0byAmJiByb3RhdGVNb2RlICE9IFJvdGF0
ZUF1dG9SZXZlcnNlKQogICAgICAgICByZXR1cm47Ci0gICAgZmxvYXQgYW5nbGUgPSBwYXRoLm5v
cm1hbEFuZ2xlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKKyAgICBmbG9hdCBhbmdsZSA9
IG1fYW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7
CiAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIGFuZ2xl
ICs9IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShhbmdsZSk7CkBAIC0zMTksNSArMzI1LDEz
IEBAIGZsb2F0IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGUKICAgICByZXR1cm4g
c3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYu
aGVpZ2h0KCkpOwogfQogCit2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmlt
YXRpb25Nb2RlKCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHNldEFuaW1hdGlvbk1vZGUoUGF0aEFuaW1hdGlvbik7CisgICAgZWxzZQorICAgICAgICBT
VkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25Nb2RlKCk7Cit9CisKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDEzMzA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50IDogcHVi
bGljIFNWR0FuaW1hdGlvbkVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25QYXRoKCk7CiAKIHByaXZhdGU6CiAg
ICAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC00OCw3ICs0OSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0
ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNW
R1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSZXN1
bHRzVG9UYXJnZXQoKTsKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7Ci0gICAgdmlydHVh
bCBQYXRoIGFuaW1hdGlvblBhdGgoKSBjb25zdDsKIAogICAgIGVudW0gUm90YXRlTW9kZSB7CiAg
ICAgICAgIFJvdGF0ZUFuZ2xlLApAQCAtNjAsMTIgKzYwLDE1IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbjsKIAorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBbmltYXRpb25Nb2RlKCkgT1ZFUlJJREU7CisKICAgICAvLyBOb3RlOiB3ZSBkbyBub3Qgc3Vw
cG9ydCBwZXJjZW50YWdlIHZhbHVlcyBmb3IgdG8vZnJvbSBjb29yZHMgYXMgdGhlIHNwZWMgaW1w
bGllcyB3ZSBzaG91bGQgKG9wZXJhIGRvZXNuJ3QgZWl0aGVyKQogICAgIEZsb2F0UG9pbnQgbV9m
cm9tUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX3RvUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX3Rv
UG9pbnRBdEVuZE9mRHVyYXRpb247CiAKICAgICBQYXRoIG1fcGF0aDsKKyAgICBQYXRoIG1fYW5p
bWF0aW9uUGF0aDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzMwNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDcgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6U1ZHQW5pbWF0aW9u
RWxlbWVudAogICAgICwgbV9hdHRyaWJ1dGVUeXBlKEF0dHJpYnV0ZVR5cGVBdXRvKQogICAgICwg
bV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShmYWxzZSkKICAgICAsIG1fY2FsY01vZGUoQ2Fs
Y01vZGVMaW5lYXIpCisgICAgLCBtX2FuaW1hdGlvbk1vZGUoTm9BbmltYXRpb24pCiB7CiAgICAg
cmVnaXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JTVkdBbmltYXRpb25FbGVtZW50KCk7CiB9CkBA
IC0xNTEsNiArMTUyLDkgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0
dAogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2V5U3BsaW5lc0F0
dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6YXR0cmlidXRl
VHlwZUF0dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y2Fs
Y01vZGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmZy
b21BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRvQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpieUF0dHIpOwog
ICAgIH0KICAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWluczxRdWFsaWZpZWRO
YW1lLCBTVkdBdHRyaWJ1dGVIYXNoVHJhbnNsYXRvcj4oYXR0ck5hbWUpOwogfQpAQCAtMTY5LDYg
KzE3Myw4IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUKICAgICAg
ICAgYXR0cmlidXRlLnZhbHVlKCkuc3RyaW5nKCkuc3BsaXQoJzsnLCBtX3ZhbHVlcyk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKICAgICAg
ICAgICAgIG1fdmFsdWVzW2ldID0gbV92YWx1ZXNbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAg
ICAgICAgdXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yMDEsNiArMjA3LDExIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09
IFNWR05hbWVzOjpmcm9tQXR0ciB8fCBhdHRyaWJ1dGUubmFtZSgpID09IFNWR05hbWVzOjp0b0F0
dHIgfHwgYXR0cmlidXRlLm5hbWUoKSA9PSBTVkdOYW1lczo6YnlBdHRyKSB7CisgICAgICAgIHVw
ZGF0ZUFuaW1hdGlvbk1vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChT
VkdUZXN0czo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1
dGUpKQpAQCAtMjY3LDIwICsyNzgsMTcgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRF
bGVtZW50QXQoZgogICAgIGFkZEVuZFRpbWUoZWxhcHNlZCwgZWxhcHNlZCArIG9mZnNldCwgU01J
TFRpbWVXaXRoT3JpZ2luOjpTY3JpcHRPcmlnaW4pOwogfQogCi1BbmltYXRpb25Nb2RlIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmFuaW1hdGlvbk1vZGUoKSBjb25zdAordm9pZCBTVkdBbmltYXRpb25F
bGVtZW50Ojp1cGRhdGVBbmltYXRpb25Nb2RlKCkKIHsKICAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDAxL1JFQy1zbWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8jQW5pbUZ1bmNWYWx1ZXMKLSAg
ICBpZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKLSAgICAgICAgcmV0dXJuIFRvQW5p
bWF0aW9uOwotICAgIGlmICghYW5pbWF0aW9uUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIFBhdGhBbmltYXRpb247CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVz
QXR0cikpCi0gICAgICAgIHJldHVybiBWYWx1ZXNBbmltYXRpb247Ci0gICAgaWYgKCF0b1ZhbHVl
KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gVG9B
bmltYXRpb24gOiBGcm9tVG9BbmltYXRpb247Ci0gICAgaWYgKCFieVZhbHVlKCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gQnlBbmltYXRpb24gOiBG
cm9tQnlBbmltYXRpb247Ci0gICAgcmV0dXJuIE5vQW5pbWF0aW9uOworICAgICAgICBzZXRBbmlt
YXRpb25Nb2RlKFZhbHVlc0FuaW1hdGlvbik7CisgICAgZWxzZSBpZiAoIXRvVmFsdWUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHNldEFuaW1hdGlvbk1vZGUoZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8g
VG9BbmltYXRpb24gOiBGcm9tVG9BbmltYXRpb24pOworICAgIGVsc2UgaWYgKCFieVZhbHVlKCku
aXNFbXB0eSgpKQorICAgICAgICBzZXRBbmltYXRpb25Nb2RlKGZyb21WYWx1ZSgpLmlzRW1wdHko
KSA/IEJ5QW5pbWF0aW9uIDogRnJvbUJ5QW5pbWF0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIHNl
dEFuaW1hdGlvbk1vZGUoTm9BbmltYXRpb24pOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnNldENhbGNNb2RlKGNvbnN0IEF0b21pY1N0cmluZyYgY2FsY01vZGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDEzMzA0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiRWxlbWVudFRp
bWVDb250cm9sLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNNSUxUaW1lLmgiCiAj
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRCb29sZWFuLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgpAQCAtODcsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBY2N1bXVsYXRlZCgpIGNvbnN0
OwotICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0OworICAgIEFuaW1hdGlv
bk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uTW9kZTsgfQog
ICAgIENhbGNNb2RlIGNhbGNNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxjTW9kZTsgfQogCiAg
ICAgZW51bSBTaG91bGRBcHBseUFuaW1hdGlvbiB7CkBAIC0yMDEsNiArMjAwLDggQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50
KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBvbGRUYXJnZXQpIE9WRVJSSURFOwogICAgIGJv
b2wgaGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludmFs
aWRDU1NBdHRyaWJ1dGVUeXBlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9u
TW9kZSgpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb25Nb2RlIGFuaW1hdGlv
bk1vZGUpIHsgbV9hbmltYXRpb25Nb2RlID0gYW5pbWF0aW9uTW9kZTsgfQogICAgIHZvaWQgc2V0
Q2FsY01vZGUoQ2FsY01vZGUgY2FsY01vZGUpIHsgbV9jYWxjTW9kZSA9IGNhbGNNb2RlOyB9CiAK
IHByaXZhdGU6CkBAIC0yMTUsNyArMjE2LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiBieVN0cmluZykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdTTUlMRWxlbWVu
dCogcmVzdWx0RWxlbWVudCkgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFu
Y2UoY29uc3QgU3RyaW5nJiAvKmZyb21TdHJpbmcqLywgY29uc3QgU3RyaW5nJiAvKnRvU3RyaW5n
Ki8pIHsgcmV0dXJuIC0xLmY7IH0KLSAgICB2aXJ0dWFsIFBhdGggYW5pbWF0aW9uUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIFBhdGgoKTsgfQogCiAgICAgdm9pZCBjdXJyZW50VmFsdWVzRm9yVmFsdWVz
QW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZlY3RpdmVQZXJjZW50LCBTdHJpbmcm
IGZyb20sIFN0cmluZyYgdG8pOwogICAgIHZvaWQgY2FsY3VsYXRlS2V5VGltZXNGb3JDYWxjTW9k
ZVBhY2VkKCk7CkBAIC0yNTAsNiArMjUwLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9sYXN0
VmFsdWVzQW5pbWF0aW9uVG87CiAgICAgYm9vbCBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBl
OwogICAgIENhbGNNb2RlIG1fY2FsY01vZGU7CisgICAgQW5pbWF0aW9uTW9kZSBtX2FuaW1hdGlv
bk1vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTMzMDQxKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKICNpbmNsdWRlICJTVkdNUGF0aEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAKQEAgLTQ5LDYgKzUwLDUzIEBAIFBh
c3NSZWZQdHI8U1ZHTVBhdGhFbGVtZW50PiBTVkdNUGF0aEVsZW0KICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR01QYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCit2b2lkIFNW
R01QYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQoreworICAgIGNsZWFyUmVzb3Vy
Y2VSZWZlcmVuY2VzKCk7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBpZDsKKyAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6
OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKKyAg
ICBpZiAoIXRhcmdldCkgeworICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkgeworICAg
ICAgICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBt
YXAuIEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKKyAgICAgICAgLy8gdGhhdCBsZWFkcyB0byBy
ZWxheW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQu
CisgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkRWxlbWVudFJl
ZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpKTsK
KyAgICB9CisKKyAgICB0YXJnZXRQYXRoQ2hhbmdlZCgpOworfQorCit2b2lkIFNWR01QYXRoRWxl
bWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQoreworICAgIEFTU0VSVChkb2N1bWVudCgp
KTsKKyAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbFRhcmdl
dFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworfQorCitOb2RlOjpJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IFNWR01QYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUq
IHJvb3RQYXJlbnQpCit7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQp
OworICAgIGlmIChyb290UGFyZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIGJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCk7CisgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cit9CisKK3ZvaWQgU1ZHTVBh
dGhFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiByb290UGFyZW50KQoreworICAg
IFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOworICAgIG5vdGlmeVBhcmVudE9m
UGF0aENoYW5nZShyb290UGFyZW50KTsKKyAgICBpZiAocm9vdFBhcmVudC0+aW5Eb2N1bWVudCgp
KQorICAgICAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOworfQorCiBib29sIFNWR01QYXRo
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CkBAIC03NCw2ICsxMjIsMjYgQEAgdm9pZCBTVkdNUGF0
aEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCit2b2lkIFNWR01QYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisKKyAgICBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBidWls
ZFBlbmRpbmdSZXNvdXJjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogU1ZHUGF0
aEVsZW1lbnQqIFNWR01QYXRoRWxlbWVudDo6cGF0aEVsZW1lbnQoKQogewogICAgIEVsZW1lbnQq
IHRhcmdldCA9IHRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSk7
CkBAIC04Miw2ICsxNTAsMTcgQEAgU1ZHUGF0aEVsZW1lbnQqIFNWR01QYXRoRWxlbWVudDo6cGF0
aEVsZQogICAgIHJldHVybiAwOwogfQogCit2b2lkIFNWR01QYXRoRWxlbWVudDo6dGFyZ2V0UGF0
aENoYW5nZWQoKQoreworICAgIG5vdGlmeVBhcmVudE9mUGF0aENoYW5nZShwYXJlbnROb2RlKCkp
OworfQorCit2b2lkIFNWR01QYXRoRWxlbWVudDo6bm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKENv
bnRhaW5lck5vZGUqIHBhcmVudCkKK3sKKyAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpCisgICAgICAgIHN0YXRpY19jYXN0PFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Kj4ocGFyZW50KS0+dXBkYXRlQW5pbWF0aW9uUGF0aCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMTMzMDQxKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMyw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xl
YW4uaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIApAQCAtMzcsMTMgKzM4LDIyIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdNUGF0aEVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIFNWR1BhdGhFbGVtZW50KiBwYXRo
RWxlbWVudCgpOwotICAgIAorCisgICAgdm9pZCB0YXJnZXRQYXRoQ2hhbmdlZCgpOworCiBwcml2
YXRlOgogICAgIFNWR01QYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAotICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgdm9p
ZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5j
ZXMoKTsKKyAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRh
aW5lck5vZGUqKTsKKwogICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1
dGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7CisKKyAgICB2b2lkIG5vdGlmeVBhcmVudE9mUGF0
aENoYW5nZShDb250YWluZXJOb2RlKik7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BS
T1BFUlRJRVMoU1ZHTVBhdGhFbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1NUUklO
RyhIcmVmLCBocmVmKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzMwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0
aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dEluc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZHTVBhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNl
Z0Nsb3NlUGF0aC5oIgpAQCAtMjcwLDEyICsyNzEsNDEgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZAogCiAgICAgICAgIGlmIChyZW5kZXJlcikKICAgICAgICAgICAg
IHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CisKKyAgICAgICAgaW52YWxpZGF0ZU1Q
YXRoRGVwZW5kZW5jaWVzKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKIH0KIAordm9pZCBTVkdQYXRoRWxlbWVudDo6aW52YWxpZGF0ZU1QYXRo
RGVwZW5kZW5jaWVzKCkKK3sKKyAgICAvLyA8bXBhdGg+IGNhbiBvbmx5IHJlZmVyZW5jZSA8cGF0
aD4gYnV0IHRoaXMgZGVwZW5kZW5jeSBpcyBub3QgaGFuZGxlZCBpbgorICAgIC8vIG1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbiBzbyB3ZSB1cGRhdGUgYW55IG1wYXRo
IGRlcGVuZGVuY2llcyBtYW51YWxseS4KKyAgICBBU1NFUlQoZG9jdW1lbnQoKSk7CisgICAgaWYg
KEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldCh0aGlzKSkgewor
ICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gZGVwZW5kZW5jaWVz
LT5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3IgaXQg
PSBkZXBlbmRlbmNpZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
aWYgKCgqaXQpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjptcGF0aFRhZykpCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8U1ZHTVBhdGhFbGVtZW50Kj4oKml0KS0+dGFyZ2V0UGF0aENoYW5nZWQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVx
dWVzdCBTVkdQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIHJvb3RQYXJl
bnQpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6Omluc2VydGVkSW50byhy
b290UGFyZW50KTsKKyAgICBpbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKTsKKyAgICByZXR1
cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwordm9pZCBTVkdQYXRoRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSogcm9vdFBhcmVudCkKK3sKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgaW52YWxpZGF0ZU1QYXRoRGVw
ZW5kZW5jaWVzKCk7Cit9CisKIFNWR1BhdGhCeXRlU3RyZWFtKiBTVkdQYXRoRWxlbWVudDo6cGF0
aEJ5dGVTdHJlYW0oKSBjb25zdAogewogICAgIFNWR0FuaW1hdGVkUHJvcGVydHkqIHByb3BlcnR5
ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQYXRoRWxlbWVudCwgU1ZH
QW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4odGhpcywgZFByb3BlcnR5SW5mbygp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxMzMwNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDYgKzEyOCwxMSBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKKyAgICB2aXJ0dWFsIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSop
IE9WRVJSSURFOworCisgICAgdm9pZCBpbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKTsKKwog
cHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07
CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNl
Z0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMzMwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogaW5saW5lIFNWR1NldEVsZW1lbnQ6OlNWR1NldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogU1ZHQW5pbWF0ZUVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCiB7CisgICAgc2V0QW5pbWF0aW9uTW9kZShUb0FuaW1hdGlvbik7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpOwogfQogCkBAIC0zNiw2
ICszNywxMiBAQCBQYXNzUmVmUHRyPFNWR1NldEVsZW1lbnQ+IFNWR1NldEVsZW1lbnQ6CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKK3ZvaWQgU1ZHU2V0RWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uTW9kZSgpCit7CisgICAgLy8g
Tm8tb3AsIGFzIDxzZXQ+IGhhcyBhIGNvbnN0YW50IGFuaW1hdGlvbiBtb2RlIG9mIFRvQW5pbWF0
aW9uLgorICAgIC8vIFNlZTogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3NpbmdsZS1wYWdlLmh0
bWwjYW5pbWF0ZS1TZXRFbGVtZW50Cit9CisKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAxMzMwNDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTVkdTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb25Nb2Rl
KCkgT1ZFUlJJREU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24g
MTMzMDQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw5ICs0MjEsNiBAQCBib29sIFNWR1NNSUxFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjptaW5BdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6Om1heEF0dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
YXR0cmlidXRlTmFtZUF0dHIpOwotICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6ZnJvbUF0dHIpOwotICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6dG9BdHRyKTsKLSAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmJ5
QXR0cik7CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFhMaW5rTmFtZXM6OmhyZWZB
dHRyKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnM8UXVh
bGlmaWVkTmFtZSwgU1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I+KGF0dHJOYW1lKTsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEzMzA0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEwLTMxICBQaGlsaXAgUm9nZXJzICA8cGRyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYW5pbWF0aW9uTW9kZSgpIGluIFNWRyBhbmltYXRp
b25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk2
OTQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBUaGlzIHJl
ZmFjdG9yaW5nIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisgICAgICAgIHN2Zy9hbmlt
YXRpb25zL21vemlsbGEvYW5pbWF0ZU1vdGlvbi1tcGF0aC10YXJnZXRDaGFuZ2UtMS5zdmcgZmFp
bHMgYWZ0ZXIgdGhpcyBwYXRjaAorICAgICAgICBiZWNhdXNlIG91ciBlbGVtZW50IGRlcGVuZGVu
Y3kgdHJhY2tpbmcgaGFzIGEgYnVnIHdpdGggZHVwbGljYXRlIGlkczsgc2VlIFdLOTk4OTMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEyLTEwLTMxICBTdGVwaGVuIFdo
aXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTmV3
IGJhc2VsaW5lcyBmb3IKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTMzMDQxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTMyMSw2ICsx
MzIxLDggQEAgd2Via2l0Lm9yZy9iLzgzMDUxIFsgQW5kcm9pZCBMaW51eCBMaW9uIAogCiB3ZWJr
aXQub3JnL2IvODMxODMgWyBNYWMgXSBzdmcvYXMtaW1hZ2UvYW5pbWF0ZWQtc3ZnLWFzLWltYWdl
LW5vLWZpeGVkLWludHJpbnNpYy1zaXplLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXQog
Cit3ZWJraXQub3JnL2IvOTk4OTMgc3ZnL2FuaW1hdGlvbnMvbW96aWxsYS9hbmltYXRlTW90aW9u
LW1wYXRoLXRhcmdldENoYW5nZS0xLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQorCiAjIEFwcGVh
cnMgdG8gYmUgZmFpbGluZyBvbiBTa2lhIHBsYXRmb3Jtcwogd2Via2l0Lm9yZy9iLzgzMTk5IHN2
Zy9maWx0ZXJzL2JpZy1zaXplZC1maWx0ZXIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0K
IApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlz
aW9uIDEzMzA0MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25z
CSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNiArOTgwLDggQEAgd2Via2l0Lm9yZy9iLzk4NjQ0IHN2
Zy9XM0MtU1ZHLTEuMS9wc2Vydgogd2Via2l0Lm9yZy9iLzk4NjUxIHN2Zy90ZXh0L25vbi1ibXAt
cG9zaXRpb25pbmctbGlzdHMuc3ZnIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvOTg2NTMgc3ZnL3Rl
eHQvbGVuZ3RoQWRqdXN0LXRleHQtbWV0cmljcy5odG1sIFsgRmFpbHVyZSBdCiAKK3dlYmtpdC5v
cmcvYi85OTg5MyBzdmcvYW5pbWF0aW9ucy9tb3ppbGxhL2FuaW1hdGVNb3Rpb24tbXBhdGgtdGFy
Z2V0Q2hhbmdlLTEuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKIHdlYmtpdC5vcmcvYi85ODcx
OCBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWNzcy14bWwtYXR0cmlidXRlVHlwZS5odG1sIFsgRmFp
bHVyZSBQYXNzIF0KIAogIyBFRkwncyBUZXN0UnVubmVyIGRvZXMgbm90IGltcGxlbWVudCBlbmFi
bGVBdXRvUmVzaXplTW9kZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMJKHJldmlzaW9uIDEzMzA0MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcwLDYgKzExNzAsOCBAQCB3ZWJr
aXQub3JnL2IvODU0MDQgZmFzdC9sb2FkZXIvamF2YXNjcmlwCiAKIHdlYmtpdC5vcmcvYi84NTQw
OCBzdmcvYmF0aWsvdGV4dC9sb25nVGV4dE9uUGF0aC5zdmcgWyBGYWlsdXJlIFBhc3MgXQogCit3
ZWJraXQub3JnL2IvOTk4OTMgc3ZnL2FuaW1hdGlvbnMvbW96aWxsYS9hbmltYXRlTW90aW9uLW1w
YXRoLXRhcmdldENoYW5nZS0xLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQorCiAjIE5lZWQgcmVi
YXNlbGluZSBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkx
MTYKIHdlYmtpdC5vcmcvYi84OTExNiBzdmcvVzNDLVNWRy0xLjEvZmlsdGVycy1zcGVjdWxhci0w
MS1mLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgUGFzcyBdCiB3ZWJraXQub3JnL2IvODkxMTYgc3Zn
L2R5bmFtaWMtdXBkYXRlcy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LWRvbS1pbi1hdHRy
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxMzMwNDEpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC0yNDg2LDYgKzI0
ODYsOCBAQCB3ZWJraXQub3JnL2IvOTg1MjUgcGx1Z2lucy9uZXRzY2FwZS1kb20tCiB3ZWJraXQu
b3JnL2IvOTg1MjUgcGx1Z2lucy9yZXNpemUtZnJvbS1wbHVnaW4uaHRtbAogd2Via2l0Lm9yZy9i
Lzk4NjQwIHBsdWdpbnMvcmVmY291bnQtbGVha3MuaHRtbAogCit3ZWJraXQub3JnL2IvOTk4OTMg
c3ZnL2FuaW1hdGlvbnMvbW96aWxsYS9hbmltYXRlTW90aW9uLW1wYXRoLXRhcmdldENoYW5nZS0x
LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQorCiAjIE5ldyBpbnNwZWN0b3IvcHJvZmlsZXIvbWVt
b3J5LWluc3RydW1lbnRhdGlvbi1jYW52YXMuaHRtbCBmYWlscyBvbiBKU0MgcGxhdGZvcm1zCiB3
ZWJraXQub3JnL2IvOTkwMDEgaW5zcGVjdG9yL3Byb2ZpbGVyL21lbW9yeS1pbnN0cnVtZW50YXRp
b24tY2FudmFzLmh0bWwKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>