<?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>98700</bug_id>
          
          <creation_ts>2012-10-08 16:00:42 -0700</creation_ts>
          <short_desc>ScrollingCoordinator is a hot mess of if-defs</short_desc>
          <delta_ts>2012-10-11 21:24:02 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>737152</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 16:00:42 -0700</bug_when>
    <thetext>ScrollingCoordinator is a really confusing class because of all of the if-defs and because of ScrollingCoordinatorNone and because of platform implementations. It is very difficult to add or change API to this class as a result.

I propose that we make ScrollingCoordinator just be a typedef that defines ScrollingCoordinatorMac to be ScrollingCoordinator, and same for Chromium and other platforms. Any shared functionality can be in something called ScrollingCoordinatorBase which all of the platform implementations will inherit from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738547</commentid>
    <comment_count>1</comment_count>
      <attachid>167919</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-09 22:12:06 -0700</bug_when>
    <thetext>Created attachment 167919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738549</commentid>
    <comment_count>2</comment_count>
      <attachid>167921</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-09 22:14:13 -0700</bug_when>
    <thetext>Created attachment 167921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738572</commentid>
    <comment_count>3</comment_count>
      <attachid>167921</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 22:37:24 -0700</bug_when>
    <thetext>Comment on attachment 167921
Patch

Attachment 167921 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14229880</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738611</commentid>
    <comment_count>4</comment_count>
      <attachid>167921</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-09 23:24:32 -0700</bug_when>
    <thetext>Comment on attachment 167921
Patch

Attachment 167921 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14221994</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738638</commentid>
    <comment_count>5</comment_count>
      <attachid>167921</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-09 23:50:48 -0700</bug_when>
    <thetext>Comment on attachment 167921
Patch

Attachment 167921 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14254051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739167</commentid>
    <comment_count>6</comment_count>
      <attachid>168047</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-10 11:33:35 -0700</bug_when>
    <thetext>Created attachment 168047
Patch

Not sure why Chromium isn&apos;t building…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739193</commentid>
    <comment_count>7</comment_count>
      <attachid>168047</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-10 12:02:48 -0700</bug_when>
    <thetext>Comment on attachment 168047
Patch

Attachment 168047 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14253324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739226</commentid>
    <comment_count>8</comment_count>
      <attachid>168047</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 12:41:48 -0700</bug_when>
    <thetext>Comment on attachment 168047
Patch

Attachment 168047 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14244700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739613</commentid>
    <comment_count>9</comment_count>
      <attachid>168142</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-10 22:09:59 -0700</bug_when>
    <thetext>Created attachment 168142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739622</commentid>
    <comment_count>10</comment_count>
      <attachid>168142</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 22:37:22 -0700</bug_when>
    <thetext>Comment on attachment 168142
Patch

Attachment 168142 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14252458</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739628</commentid>
    <comment_count>11</comment_count>
      <attachid>168142</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-10 22:53:51 -0700</bug_when>
    <thetext>Comment on attachment 168142
Patch

Attachment 168142 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14252459</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740094</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-11 10:16:34 -0700</bug_when>
    <thetext>Sorry you&apos;re having trouble with the chromium build.  I&apos;ll patch this in locally and see if I can get it up and running.  The cleanup looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740099</commentid>
    <comment_count>13</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-11 10:21:07 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Sorry you&apos;re having trouble with the chromium build.  I&apos;ll patch this in locally and see if I can get it up and running.  The cleanup looks great!

Thanks, James! I knew I would be doing this dance with the ews bots since I wrote so much code without compiling it locally. I have a possible fix for the latest build errors. WIll post now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740100</commentid>
    <comment_count>14</comment_count>
      <attachid>168248</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-11 10:21:38 -0700</bug_when>
    <thetext>Created attachment 168248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740112</commentid>
    <comment_count>15</comment_count>
      <attachid>168251</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-11 10:29:37 -0700</bug_when>
    <thetext>Created attachment 168251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740113</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-11 10:30:12 -0700</bug_when>
    <thetext>Attached a patch that compiles on chromium, but I had some merge conflicts in the WebCore project.pbxproj so it&apos;s not complete.  Hope it helps!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740146</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-11 11:21:23 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Attached a patch that compiles on chromium, but I had some merge conflicts in the WebCore project.pbxproj so it&apos;s not complete.  Hope it helps!

Sweet, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740155</commentid>
    <comment_count>18</comment_count>
      <attachid>168258</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-11 11:35:19 -0700</bug_when>
    <thetext>Created attachment 168258
Patch

Okay, I *think* I merged everything properly. Here&apos;s another go for the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740589</commentid>
    <comment_count>19</comment_count>
      <attachid>168258</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-11 21:17:12 -0700</bug_when>
    <thetext>Comment on attachment 168258
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:110
&gt; +    // These virtual functions are currently unique to the threaded scrolling architecture, and they are
&gt; +    // their meaningful implementations are in ScrollingCoordinatorMac.

Parse error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740596</commentid>
    <comment_count>20</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-11 21:24:02 -0700</bug_when>
    <thetext>Thanks Anders! http://trac.webkit.org/changeset/131137</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167919</attachid>
            <date>2012-10-09 22:12:06 -0700</date>
            <delta_ts>2012-10-09 22:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>75617</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDg0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTA5ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIHJldmVydCBmbGluZyBkZWFjY2VsZXJhdGlvbiBwYXJhbWV0
ZXIgY2hhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwNzc3KQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3NTgsNyAr
MTc1OCw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAotICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMwNzc3KQor
KysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAt
NDA2OSw3ICs0MDY5LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTA1LDcgKzkwNSw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWlu
dHMuY3BwIFwKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAot
ICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogICAgIHBh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwIFwKICAgICBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBcCiAg
ICAgcGFnZS9TZXR0aW5ncy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9u
IDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMwLDEwICsyNTMwLDggQEAgX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlMjJ1cGRh
dGVCYWNrRgogX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlRDFFdgogX19aTjdXZWJDb3JlMTVT
Y3JvbGxpbmdUaHJlYWQxNWRpc3BhdGNoQmFycmllckVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQog
X19aTjdXZWJDb3JlMTVTY3JvbGxpbmdUaHJlYWQ4ZGlzcGF0Y2hFUktOM1dURjhGdW5jdGlvbklG
dnZFRUUKLV9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3IyM2NvbW1pdFRyZWVTdGF0
ZUlmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3I0NHNldEZvcmNl
TWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzRWIKIF9fWk43V2ViQ29yZTRQYWdl
MjBzY3JvbGxpbmdDb29yZGluYXRvckV2Ci1fX1pOSzdXZWJDb3JlMjBTY3JvbGxpbmdDb29yZGlu
YXRvcjEzc2Nyb2xsaW5nVHJlZUV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAyMSw3ICsxMDIxLDYgQEAKIAkJMzdG
ODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3Jl
VVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICov
OyB9OwogCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3MTE4MzY4
NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovOyB9OwotCQkzODY2QUYzODE0RjFDMTcx
MDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAv
KiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwICovOyB9OwogCQkzQUIwMkQyQTEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJh
Y2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OwogCQkzQUMzNjgwMDEyRUY3QTA5MDA2
QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdl
VHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zMzAyLDYgKzMzMDEsNyBAQAogCQk5M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIg
LyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAg
Ki87IH07CiAJCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCMkQ4MTUw
Rjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IH07CiAJCTkzQjJEODE4
MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAv
KiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLzsgfTsKKwkJOTNCNTAyNEMxNjI0RTQ0MDAwNTcwNjAy
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I1MDI0QjE2MjRFNDQwMDA1NzA2MDIgLyogU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMuaCAqLzsgfTsKIAkJOTNCNkEwRTYwQjBCQ0E1QzAwRjUwMjdBIC8qIENv
bnRleHRNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I2QTBFQTBCMEJDQTg0MDBG
NTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVN
YWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBE
NDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87IH07CkBAIC04MTQwLDcg
KzgxNDAsNiBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVS
TFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRF
RDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJl
ZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZURlcHRo
TGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzg2NkFGMzcxNEYxQzE3MTAw
MjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFn
ZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJC
Njk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQ5OCw2ICsxMDQ5Nyw3IEBACiAJCTkzQTM4QjRB
MEQwRTU4MDgwMDY4NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRvckNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VkZGVuVGVybWluYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8q
IFN1ZGRlblRlcm1pbmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gU3VkZGVuVGVybWluYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzQjUwMjRCMTYyNEU0NDAwMDU3MDYwMiAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjZBMEU5MEIwQkNBODQw
MEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDb250ZXh0TWVudU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01CaW5kaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTcwLDcgKzE0NTcwLDYgQEAKIAkJCQkwRjYwNUFF
QjE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLywKIAkJCQkxQUY2
MkVFNDE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwICovLAogCQkJ
CTFBRjYyRUU1MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oICovLAot
CQkJCTM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUu
Y3BwICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5v
ZGUuY3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NTkwLDYgKzE0NTg5LDcgQEAKIAkJMUFGNjJF
RTIxNERBMjJBNzAwNDE1NTZDIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJOTNCNTAyNEIxNjI0RTQ0MDAwNTcwNjAyIC8qIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjLmggKi8sCiAJCQkJMUFGNjJFRTMxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovLAogCQkJCTkzMUNCRDEyMTYxQTQ0RjgwMEU0Qzg3NCAv
KiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFGNjJGMjMxNERBRkU5MTAwNDE1
NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKQEAgLTI1NTU4LDYgKzI1NTU4LDcgQEAK
IAkJCQk5MzFDQkQxMTE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9s
eWdvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJl
bmRlclNuYXBzaG90dGVkUGx1Z0luLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0I1MDI0QzE2MjRF
NDQwMDA1NzA2MDIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjgwOTgsNyArMjgwOTksNiBAQAogCQkJCTBGNjA1QUVDMTVGOTQ4NDgwMDRERjBDMCAvKiBT
Y3JvbGxpbmdDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkVFNzE0REEy
MkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFGNjJFRTYxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJMzg2NkFGMzgxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkYyNTE0REFGRTlF
MDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYy
RjI0MTREQUZFOTEwMDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxQUFBRERBMzE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEzMDc4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJl
ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC00NSw0NiArNDMsNDQgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLSNpbmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKLSNpbmNsdWRl
ICJTY3JvbGxpbmdUcmVlLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgi
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW0uaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bh
c3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGUoUGFnZSogcGFnZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxp
bmdDb29yZGluYXRvck1hYyhwYWdlKSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShw
YWdlKSk7CisjZW5kaWYKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRp
bmF0b3IocGFnZSkpOworfQorCiBTY3JvbGxpbmdDb29yZGluYXRvcjo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3IoUGFnZSogcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9mb3JjZU1haW5U
aHJlYWRTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhmYWxzZSkKLSNpZiBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQotICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xsaW5nU3RhdGVU
cmVlOjpjcmVhdGUoKSkKLSAgICAsIG1fc2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlOjpjcmVh
dGUodGhpcykpCi0gICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKHRoaXMs
ICZTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJG
aXJlZCkKLSNlbmRpZgotICAgICwgbV9wcml2YXRlKDApCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3Jv
bGxpbmdDb29yZGluYXRvcigpCiB7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgbV9wYWdlID0g
MDsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Ci0KLSAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNj
cm9sbGluZyB0cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBT
Y3JvbGxpbmdDb29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3RzLgotICAgIFNjcm9s
bGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6aW52YWxpZGF0ZSwgbV9z
Y3JvbGxpbmdUcmVlLnJlbGVhc2UoKSkpOwotI2VuZGlmCisgICAgQVNTRVJUKCFtX3BhZ2UpOwog
fQogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLVNjcm9sbGluZ1RyZWUqIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdUcmVlKCkgY29uc3QKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKQogewotICAgIEFTU0VSVChtX3Njcm9sbGluZ1RyZWUp
OwotICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUuZ2V0KCk7CisgICAgQVNTRVJUKG1fcGFnZSk7
CisgICAgbV9wYWdlID0gMDsKIH0KLSNlbmRpZgogCiBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Ojpjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykg
Y29uc3QKIHsKQEAgLTEwNiw3ICsxMDIsNyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b29yZGluYXRlc1NjCiAjZW5kaWYKIH0KIAotc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNj
cm9sbGFibGVSZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlv
bikKK1JlZ2lvbiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIGZyYW1lTG9jYXRpb24pCiB7CiAg
ICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZnJhbWUtPnZpZXcoKTsKQEAgLTE0OCw0OCArMTQ0LDE2IEBAIHN0YXRpYyBSZWdpb24g
Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmUKICAgICByZXR1cm4gbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb247CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVw
ZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit1bnNpZ25lZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAgLy8gQ29tcHV0ZSB0
aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2FuJ3QgZG8gZmFzdCBzY3JvbGxpbmcgZm9y
LiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcwotICAgIC8vIGFsbCBzY3JvbGxhYmxlIGFyZWFzLCBz
dWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4gV2UgbmVlZCB0
byBkbyB0aGlzIGV2ZW4gaWYgdGhlCi0gICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2Fz
IHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgotICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5G
cmFtZSgpLCBJbnRQb2ludCgpKTsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0g
ICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBz
ZXQgbm9uLWZhc3Qgc2Nyb2xsaW5nIHJlZ2lvbnMgZm9yIG1vcmUgdGhhbgotICAgIC8vIGp1c3Qg
dGhlIHJvb3Qgbm9kZS4gQnV0IHJpZ2h0IG5vdywgdGhpcyBjb25jZXB0IG9ubHkgYXBwbGllcyB0
byB0aGUgcm9vdC4KLSAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUobm9uRmFz
dFNjcm9sbGFibGVSZWdpb24sIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkp
OwotI2Vsc2UKLSAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbik7Ci0jZW5kaWYKLQotICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFt
ZVZpZXcoZnJhbWVWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nyb2xsUGFyYW1ldGVy
cyBzY3JvbGxQYXJhbWV0ZXJzOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0g
ICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXct
PnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5h
YmxlZEhvcml6b250YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOwotICAgIHNj
cm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmIGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+ZW5h
YmxlZCgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBm
cmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVy
cy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSgpOwotCi0gICAgc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4gPSBmcmFtZVZpZXctPnNj
cm9sbE9yaWdpbigpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSk7Ci0g
ICAgc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUgPSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6
ZSgpOworICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwogCi0jaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
IG5vZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICB3aGVl
bEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxl
ckNvdW50KCk7CisgICAgfQogCi0gICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xs
UGFyYW1ldGVycywgbm9kZSk7Ci0jZWxzZQotICAgIHNldFNjcm9sbFBhcmFtZXRlcnMoc2Nyb2xs
UGFyYW1ldGVycyk7Ci0jZW5kaWYKKyAgICByZXR1cm4gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsK
IH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxFdmVudEhhbmRs
ZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMjIsNyArMTg2LDcgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0ZVNob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAotc3RhdGljIEdy
YXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3
KQorR3JhcGhpY3NMYXllciogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbExheWVyRm9yRnJh
bWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXctPmZyYW1lKCk7CkBAIC0yNDcs
NjYgKzIxMSw5IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3QKICAg
ICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAg
ICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgLy8gSWYg
dGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3
ZSBzaG91bGQgY3JlYXRlIG9uZS4KLSAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3
KGZyYW1lVmlldyk7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCkpOwotI2VuZGlmCi0KICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7
CiAgICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpOwogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoKTsKLSAgICAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIHNldFNjcm9s
bExheWVyRm9yTm9kZShzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5v
ZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSkpOwotI2Vsc2UKLSAgICBzZXRTY3Jv
bGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKLSNlbmRpZgotfQot
Ci1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
RnJhbWVWaWV3KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAg
aWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlm
IChmcmFtZVZpZXctPmZyYW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAg
ICAgLy8gSWYgdGhpcyBmcmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGludG8gdGhl
IHBhZ2UgY2FjaGUsIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgotICAgICAgICAvLyBtYWlu
IGZyYW1lIHNjcm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0
IHdlIGRpZC4KLSAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9z
aXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVO
b2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlm
ICghc3RhdGVOb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0ZU5vZGUtPnNl
dFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJv
Z3JhbW1hdGljU2Nyb2xsKCkpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxQb3NpdGlvbik7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1f
cGFnZSk7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlmIChtX3Njcm9s
bGluZ1RyZWUtPndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmlu
ZCgmU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudCwgbV9zY3JvbGxpbmdUcmVlLmdldCgp
LCB3aGVlbEV2ZW50KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKLSNl
bmRpZgotICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1
cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24sIGJvb2wgcHJvZ3JhbW1hdGljU2Nyb2xsKQpAQCAtMzMwLDQ4ICsyMzcsNiBAQCB2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgZnJhbWVWaWV3LT5zZXRJblBy
b2dyYW1tYXRpY1Njcm9sbChvbGRQcm9ncmFtbWF0aWNTY3JvbGwpOwogfQogCi0jaWYgRU5BQkxF
KFRIUkVBREVEX1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1h
aW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX3BhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZy
YW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZy
YW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9s
bExheWVyUG9zaXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IG1fc2Ny
b2xsaW5nVHJlZS0+bWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZyYW1lVmlldy0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgIGZyYW1lVmll
dy0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHNjcm9sbFBvc2l0aW9uKTsKLSAgICBmcmFt
ZVZpZXctPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwotCi0gICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSkKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXct
PnNjcm9sbFBvc2l0aW9uKCkpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShNQUMpIHx8IChQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkK
IHsKQEAgLTM4OCwyNSArMjUzLDYgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxl
V2hlZWxFdgogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
Ci17Ci0gICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkp
Ci0gICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgp
LT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0
ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47Ci0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hl
ZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7Ci0jZWxzZQotICAgIHNldFdoZWVsRXZlbnRIYW5k
bGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1l
Vmlldyk7Ci0jZW5kaWYKLX0KLQogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzTm9uTGF5
ZXJGaXhlZE9iamVjdHMoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgY29uc3QgRnJhbWVW
aWV3OjpWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0U2V0KiB2aWV3cG9ydENvbnN0cmFpbmVkT2Jq
ZWN0cyA9IGZyYW1lVmlldy0+dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKTsKQEAgLTQ2Mywx
NTkgKzMwOSw0IEBAIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dW4KICAg
ICByZXR1cm4gdW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLVNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnN0YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewot
ICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIYXNoTWFw
PFNjcm9sbGluZ05vZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKLSAgICBpZiAoaXQgPT0gbV9z
dGF0ZU5vZGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBub2RlID0gaXQtPnZhbHVlOwotICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZShub2RlKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjphdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsK
LSAgICBBU1NFUlQoc2Nyb2xsTGF5ZXJJRCk7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIGV4aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOwotICAg
IGlmIChleGlzdGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOwotCi0gICAg
Y2xlYXJTdGF0ZVRyZWUoKTsKLQotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1
bmN0aW9uIHdpbGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCi0gICAg
Ly8gYXBwZW5kIHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0
cmVlLiBGb3Igbm93IHdlIGFsd2F5cyBhc3N1bWUKLSAgICAvLyB0aGlzIGlzIHRoZSByb290IG5v
ZGUuCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsK
LSAgICBtX3N0YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKSk7Ci0gICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEIHNjcm9sbExheWVySUQpCi17Ci0gICAgaWYgKCFzY3JvbGxMYXllcklEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50
YWtlKHNjcm9sbExheWVySUQpOwotCi0gICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRl
c3Ryb3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUg
SGFzaE1hcC4KLSAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFy
ZSBhY3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cmVtb3ZlTm9kZShub2RlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xl
YXJTdGF0ZVRyZWUoKQotewotICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgaWYgKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpCi0gICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2Rl
KG5vZGUpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVO
b2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIGF0dGFjaFRvU3Rh
dGVUcmVlKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExh
eWVyLCBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0U2Nyb2xsTGF5
ZXIoc2Nyb2xsTGF5ZXIpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9k
ZShjb25zdCBSZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2Rl
KQotewotICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7Ci0gICAg
c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Ny
b2xsUGFyYW1ldGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAg
IG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAg
bm9kZS0+c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5o
YXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZl
cnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyKTsKLSAgICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0
ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlKTsKLSAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9s
bGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAg
bm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAg
ICBub2RlLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOwot
ICAgIG5vZGUtPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7
Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVl
bEV2ZW50SGFuZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17
Ci0gICAgbm9kZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNv
dW50KTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhy
ZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgLy8gVGhlIEZy
YW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRo
IHRoZSBQbGF0Zm9ybUxheWVyCi0gICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRl
IGl0IGJlZm9yZSB3ZSBzd2l0Y2ggYmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKLSAgICAv
LyBpbiBvcmRlciB0byBhdm9pZCBsYXllciBwb3NpdGlvbmluZyBidWdzLgotICAgIGlmIChyZWFz
b25zKQotICAgICAgICB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7Ci0gICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChyZWFzb25zKTsKLSAgICBzY2hlZHVsZVRyZWVT
dGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVRy
ZWVTdGF0ZUNvbW1pdCgpCi17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVy
VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRl
clRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+KikKLXsKLSAgICBjb21taXRU
cmVlU3RhdGUoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0
YXRlSWZOZWVkZWQoKQotewotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5n
ZWRQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdFRyZWVTdGF0ZSgp
OwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGUoKQotewotICAgIEFTU0VS
VChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7Ci0KLSAgICBP
d25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+Y29tbWl0KCk7Ci0gICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxp
bmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0
YXRlLnJlbGVhc2UoKSkpOwotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0
c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCEKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9D
b250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IQotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNj
cm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lv
biAxMzA3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogdHlwZWRlZiB1bnNpZ25lZCBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uczsKIHR5
cGVkZWYgdWludDY0X3QgU2Nyb2xsaW5nTm9kZUlEOwogCitjbGFzcyBGcmFtZTsKIGNsYXNzIEZy
YW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9u
OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7Ci1jbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZh
dGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZU5vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CkBAIC02NSwyMCArNjUsMjEgQEAg
Y2xhc3MgU2Nyb2xsaW5nVHJlZTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShQYWdlKik7
Ci0gICAgflNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKIAotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWdlRGVzdHJveWVkKCk7CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAg
IFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKLSAgICB2b2lkIGNvbW1pdFRy
ZWVTdGF0ZUlmTmVlZGVkKCk7CisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdU
cmVlKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0VHJlZVN0YXRlSWZOZWVkZWQoKSB7IH0KKwogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMg
c2Nyb2xsaW5nIGNvb3JkaW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJh
bWUgdmlldy4KICAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1l
VmlldyopIGNvbnN0OwogCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2
ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2b2lkIGZyYW1lVmlld0xheW91
dFVwZGF0ZWQoRnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVw
ZGF0ZWQoRnJhbWVWaWV3KikgeyB9CiAKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVy
IGEgd2hlZWwgZXZlbnQgaGFuZGxlciBpcyBhZGRlZCBvciByZW1vdmVkIGluIHRoZSAKICAgICAv
LyBmcmFtZSB2aWV3J3MgdW5kZXJseWluZyBkb2N1bWVudC4KQEAgLTkxLDI5ICs5MiwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3
Kik7CiAKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZv
ciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3Um9vdExh
eWVyRGlkQ2hhbmdlKEZyYW1lVmlldyopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVu
ZXZlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2
aWV3IGNoYW5nZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHZlcnRpY2FsIHNj
cm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2b2lk
IGZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3Jh
cGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcik7Ci0KLSAgICAvLyBTaG91bGQgYmUg
Y2FsbGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xs
IGFyZWEgY2hhbmdlcy4KLSAgICB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFu
Z2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0
aGF0IHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9u
IG9mIHRoZSBnaXZlbiBmcmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwg
aXQgbWVhbnMgdGhhdCB0aGUKLSAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYXN5bmNo
cm9ub3VzbHkuIElmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0
aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIGl0c2VsZi4KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gSGFuZGxl
IHRoZSB3aGVlbCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVy
IHRoZSBldmVudCB3YXMgaGFuZGxlZCBvciBub3QuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50
KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKLSAgICAvLyBEaXNw
YXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3Jv
bGwgcG9zaXRpb24gY2hhbmdlcy4KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgLy8g
RGlzcGF0Y2hlZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4gZnJhbWUg
c2Nyb2xsIHBvc2l0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gbmVl
ZHMgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsLgotICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgLy8gUmV0dXJuIHdoZXRoZXIg
dGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJz
IGZpeGVkIHRvIHRoZWlyCisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKSkKICAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSBkdXJp
bmcgaGFuZGxlV2hlZWxFdmVudC4gVGhpcyBpcyByZXF1aXJlZCBhcyBsb25nIGFzIHNjcm9sbGJh
cnMgYXJlIHBhaW50ZWQgb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTIzLDE1ICsxMDYsMjAgQEAg
cHVibGljOgogICAgIC8vIEZvcmNlIGFsbCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gdXBkYXRlcyB0
byBoYXBwZW4gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgc2V0Rm9yY2VNYWluVGhyZWFk
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoYm9vbCk7CiAKLSAgICAvLyBSZXR1cm4gd2hldGhl
ciB0aGlzIHNjcm9sbGluZyBjb29yZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXll
cnMgZml4ZWQgdG8gdGhlaXIKLSAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KLSAg
ICBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0OworICAgIC8vIFRoZXNl
IHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIHRoZSB0aHJlYWRlZCBz
Y3JvbGxpbmcgYXJjaGl0ZWN0dXJlLCBhbmQgdGhleSBhcmUKKyAgICAvLyB0aGVpciBtZWFuaW5n
ZnVsIGltcGxlbWVudGF0aW9ucyBhcmUgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuCisgICAg
dmlydHVhbCBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25z
dCBJbnRQb2ludCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFu
ZFNjcm9sbExheWVyUG9zaXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBh
dHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKSB7IHJldHVybiBub2RlSUQ7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQogCi0gICAgLy8gTWFy
ay91bm1hcmsgYSBsYXllciBhcyBhIGNvbnRhaW5lciBmb3IgZml4ZWQgcG9zaXRpb24gbGF5ZXJz
LgotICAgIHZvaWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3Jh
cGhpY3NMYXllciosIGJvb2wpOworICAgIC8vIEdlbmVyYXRlZCBhIHVuaXF1ZSBpZCBmb3Igc2Ny
b2xsIGxheWVycy4KKyAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOwog
Ci0gICAgLy8gQXR0YWNoL2RldGFjaCBsYXllciBwb3NpdGlvbiB0byBhbmNlc3RvciBmaXhlZCBw
b3NpdGlvbiBjb250YWluZXIuCi0gICAgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxh
eWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3Jv
bGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdl
cy4KKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwpOwogCiAgICAgZW51bSBNYWluVGhyZWFkU2Nyb2xs
aW5nUmVhc29uRmxhZ3MgewogICAgICAgICBGb3JjZWRPbk1haW5UaHJlYWQgPSAxIDw8IDAsCkBA
IC0xNDEsODQgKzEyOSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEg
PDwgNAogICAgIH07CiAKLSAgICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUgaWQgdG8gYXNzb2NpYXRl
IHdpdGggYSBsYXllciB0aGF0IHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZSBz
Y3JvbGxpbmcgdHJlZS4KLSAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgp
OworICAgIC8vIFRoZXNlIHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRv
IENocm9taXVtJ3MgV2ViTGF5ZXIgYXBwcm9hY2guIFRoZWlyIG1lYW5pbmdmdWwKKyAgICAvLyBp
bXBsZW1lbnRhdGlvbnMgYXJlIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmll
d1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXll
ciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hh
bmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVy
KiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVy
TGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25z
IGFyZSB1c2VkIHRvIGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBu
b3QgbG9uZ2VyIGJlKSByZXByZXNlbnRlZCBieSBhIG5vZGUKLSAgICAvLyBpbiB0aGUgc2Nyb2xs
aW5nIHRyZWUuCi0gICAgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGlu
Z05vZGVJRCk7Ci0gICAgdm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7
Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOwog
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KLSAgICB2
b2lkIGNsZWFyU3RhdGVUcmVlKCk7CisgICAgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbihGcmFtZSosIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKTsKKyAgICB1bnNp
Z25lZCBjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKIAotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CisgICAgUGFnZSogbV9w
YWdlOwogCi0gICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmll
dyopOwotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlRm9ySUQoU2Ny
b2xsaW5nTm9kZUlEKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFp
blRocmVhZFNjcm9sbGluZ1JlYXNvbnMpIHsgfQogCi0gICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIGJvb2wgaGFzTm9u
TGF5ZXJGaXhlZE9iamVjdHMoRnJhbWVWaWV3Kik7CiAgICAgdm9pZCB1cGRhdGVTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKLSAgICBzdHJ1Y3QgU2Nyb2xs
UGFyYW1ldGVycyB7Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHk7Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5OwotCi0gICAgICAgIGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAg
ICAgIGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgICAgIFNjcm9sbGJh
ck1vZGUgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgICAgIFNjcm9sbGJhck1vZGUgdmVy
dGljYWxTY3JvbGxiYXJNb2RlOwotCi0gICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKLQot
ICAgICAgICBJbnRSZWN0IHZpZXdwb3J0UmVjdDsKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1Np
emU7Ci0gICAgfTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25s
eSBieSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgot
ICAgIC8vIG5vdyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUo
KSwgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKSwgZXRjLgotICAgIC8vIFRvIHJl
c29sdmUgdGhpcyBhbmQgYWxsIG9mIHRoZSBpZi1kZWZzIGluIHRoaXMgY2xhc3MsIHdlIHNob3Vs
ZCBtYWtlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yCi0gICAgLy8ganVzdCBiZSBhIHR5cGVkZWYgdGhh
dCBkZWZpbmVzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIHRvIGJlIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yLCBhbmQgc2FtZQotICAgIC8vIGZvciBDaHJvbWl1bSBhbmQgb3RoZXIgcGxhdGZvcm1zLiBB
bnkgc2hhcmVkIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGluIHNvbWV0aGluZyBjYWxsZWQgCi0gICAg
Ly8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JCYXNlIHdoaWNoIGFsbCBvZiB0aGUgcGxhdGZvcm0gaW1w
bGVtZW50YXRpb25zIHdpbGwgaW5oZXJpdCBmcm9tLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODcwMAotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVy
cyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJik7Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNv
bnN0IFJlZ2lvbiYpOwotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwot
Ci0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNldFNjcm9sbExheWVy
Rm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7Ci0gICAgdm9pZCBz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9k
ZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7
Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0U2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5n
UmVhc29ucyk7Ci0KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24o
KTsKLQotICAgIFBhZ2UqIG1fcGFnZTsKLQogICAgIGJvb2wgbV9mb3JjZU1haW5UaHJlYWRTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlczsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
Ci0gICAgdm9pZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotCi0gICAgdm9pZCBzY3JvbGxp
bmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9y
PiopOwotICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7Ci0KLSAgICBPd25QdHI8U2Nyb2xsaW5n
U3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKLSAgICBSZWZQdHI8U2Nyb2xsaW5nVHJl
ZT4gbV9zY3JvbGxpbmdUcmVlOwotICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Nj
cm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOwotCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdO
b2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOwotI2VuZGlmCi0KLSAg
ICBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMwNzgz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JO
b25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0
ZSB7Ci19OwotCi0jaWYgIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi1QYXNzUmVmUHRyPFNj
cm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdl
KSk7Ci19Ci0KLVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQot
ewotICAgIEFTU0VSVCghbV9wYWdlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdy
YXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZp
ZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihH
cmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJikKLXsKLX0KLQotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucykKLXsKLX0KLQotYm9vbCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKQotewot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5l
ckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVh
KiwgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQotewotICAgIHJl
dHVybiBpZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRl
VHJlZShTY3JvbGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmNsZWFyU3RhdGVUcmVlKCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQotewotfQotCi12b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFt
ZXRlcnMmKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KHVuc2lnbmVkKQotewotfQotCi0jZW5kaWYgLy8gIUVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzA3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsMzMgKzk1LDMyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYlNjcm9s
bGJhckxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7CiB9OwogCi1QYXNzUmVmUHRyPFNj
cm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCitTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtKFBhZ2UqIHBhZ2UpCisgICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAg
ICwgbV9wcml2YXRlKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUpCiB7Ci0gICAgUmVm
UHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBjb29yZGluYXRvcihhZG9wdFJlZihuZXcgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IocGFnZSkpKTsKLSAgICBjb29yZGluYXRvci0+bV9wcml2YXRlID0gbmV3
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKLSAgICByZXR1cm4gY29vcmRpbmF0b3IucmVs
ZWFzZSgpOwogfQogCi1TY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06On5TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtKCkKIHsKLSAgICBBU1NFUlQoIW1fcGFnZSk7CiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsK
IH0KIAotc3RhdGljIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1l
VmlldyogZnJhbWVWaWV3KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFt
ZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyopCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJWaWV3KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT5zY3Jv
bGxMYXllcigpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgorICAgIEFTU0VSVChtX3Bh
Z2UpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2Fu
J3QgZG8gZmFzdCBzY3JvbGxpbmcgZm9yLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcworICAgIC8v
IGFsbCBzY3JvbGxhYmxlIGFyZWFzLCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBh
bmQgbGlzdCBib3hlcy4gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCisgICAgLy8gZnJh
bWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgor
ICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKKyAgICBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoZnJhbWVWaWV3KTsKKyAgICBzZXRTY3JvbGxMYXllcihz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKIH0KIAogc3RhdGljIFdlYkxheWVy
KiBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpA
QCAtMTc0LDcgKzE3Myw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFdlYlNjcm9sbGJhckxheWVyPiBj
cmUKICAgICByZXR1cm4gc2Nyb2xsYmFyTGF5ZXIucmVsZWFzZSgpOwogfQogCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxi
YXJMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3SG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFw
aGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpCiB7CiAgICAgaWYgKCFob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIgfHwgIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZy
YW1lVmlldykpCiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODIsNyBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3JpCiAgICAgbV9wcml2YXRlLT5zZXRIb3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIoY3JlYXRlU2Nyb2xsYmFyTGF5ZXIoZnJhbWVWaWV3LT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCksIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSwgaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyLCBmcmFtZVZpZXcpKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1l
VmlldywgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3Jv
bGxiYXJMYXllcikKIHsKICAgICBpZiAoIXZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgfHwgIWNvb3Jk
aW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsK
QEAgLTE5MiwxMiArMTkxLDEyIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d1ZlcnQKICAgICBtX3ByaXZhdGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoY3JlYXRlU2Ny
b2xsYmFyTGF5ZXIoZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBtX3ByaXZhdGUtPnNj
cm9sbExheWVyKCksIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIsIGZyYW1lVmlldykpOwogfQogCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBz
Y3JvbGxMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0U2Nyb2xs
TGF5ZXIoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCiB7CiAgICAgbV9wcml2YXRlLT5zZXRT
Y3JvbGxMYXllcihzY3JvbGxMYXllciA/IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIo
c2Nyb2xsTGF5ZXIpIDogMCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBS
ZWdpb24mIHJlZ2lvbikKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRT
Y3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNl
bHZlcy4KICAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCkpKTsKQEAgLTIxMCwxMiArMjA5LDcgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcgogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJikK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVy
Q291bnQpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBX
ZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRo
aXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KICAgICBzZXRTY3JvbGxMYXllcihz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKQEAg
LTIyMyw3ICsyMTcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50
CiAgICAgICAgIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKS0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyh3aGVlbEV2ZW50SGFuZGxlckNvdW50ID4gMCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
TWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgcmVhc29ucykKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JDaHJvbWl1bTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQogewogICAgIC8vIFdlIHdv
bid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBv
bmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9s
bExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjMx
LDI0ICsyMjUsMTkgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYQog
ICAgICAgICBtX3ByaXZhdGUtPnNjcm9sbExheWVyKCktPnNldFNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZChyZWFzb25zKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9ydHNG
aXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRp
b25MYXllcnMoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlv
bkxheWVycyhHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKFdl
YkxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVy
KGxheWVyKSkKICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRJc0NvbnRhaW5lckZvckZpeGVk
UG9zaXRpb25MYXllcnMoZW5hYmxlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgYm9v
bCBlbmFibGUpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldExheWVySXNG
aXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQog
ewogICAgIGlmIChXZWJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gc2Nyb2xsYWJsZUxheWVyRm9y
R3JhcGhpY3NMYXllcihsYXllcikpCiAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bTo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQog
ewogICAgIGlmICghc2Nyb2xsTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MiwxOSArMjUx
LDEwIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmUKICAgICB9CiB9
CiAKLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlc2Ugc3R1YnMgd2hl
biB3ZSByZXNvbHZlIHRoZSBpZi1kZWYgc291cCBpbiBTY3JvbGxpbmdDb29yZGluYXRvci4KLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODcwMAotU2Nyb2xsaW5n
Tm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdO
b2RlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCkKLXsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUoKQordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpyZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogeworICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcp
OworICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoY29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRp
bmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtX2gKKyNkZWZpbmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCisK
KyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKKworY2xhc3MgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bSA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShQYWdlKik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSgpOworCisgICAgLy8gU2hv
dWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlk
IG91dC4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcq
KTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9y
IHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmll
d1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxs
ZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4g
ZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopOworCisg
ICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxh
eWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBm
cmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBo
aWNzTGF5ZXIqKTsKKworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNvb3Jk
aW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgorICAg
IC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBN
YXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXll
cnMuCisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIEF0dGFjaC9kZXRhY2ggbGF5
ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIq
LCBib29sKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNjcm9sbGFi
bGUgbGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgorICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwg
R3JhcGhpY3NMYXllciopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1h
aW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3Jh
cGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3Qg
UmVnaW9uJik7CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsK
KworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWNfaAorI2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCisK
KyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMoUGFnZSopOworICAgIHZpcnR1YWwgflNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3ll
ZCgpOworCisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCk7CisKKyAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxh
aWQgb3V0LgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmll
dyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBm
b3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVW
aWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZl
biBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiBob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIpOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZl
ciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBj
aGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXIpOworCisgICAgLy8gUmVxdWVzdHMgdGhhdCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIHVw
ZGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4gSWYgdGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGl0IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gcG9zaXRp
b24gd2lsbCBiZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5LiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0
aGUgY2FsbGVyIHNob3VsZCB1cGRhdGUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpdHNlbGYuCisg
ICAgdmlydHVhbCBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBj
b25zdCBJbnRQb2ludCYpOworCisgICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVudCBvbiB0aGUg
c2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBv
ciBub3QuCisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3Jv
bGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdl
cyBhbmQgdGhlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdl
bGwuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Ny
b2xsTGF5ZXJQb3NpdGlvbigpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRv
IGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2VyIGJl
KSByZXByZXNlbnRlZCBieSBhIG5vZGUKKyAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCisg
ICAgdmlydHVhbCBTY3JvbGxpbmdOb2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2Rl
SUQpOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4K
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFt
ZVZpZXcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisKKyAgICB2b2lk
IGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOwor
CisgICAgc3RydWN0IFNjcm9sbFBhcmFtZXRlcnMgeworICAgICAgICBTY3JvbGxFbGFzdGljaXR5
IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IHZl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKKworICAgICAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyOworICAgICAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsK
KworICAgICAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgICAg
ICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKKworICAgICAgICBJbnRQb2lu
dCBzY3JvbGxPcmlnaW47CisKKyAgICAgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Q7CisgICAgICAg
IEludFNpemUgY29udGVudHNTaXplOworICAgIH07CisKKyAgICB2b2lkIHNldFNjcm9sbFBhcmFt
ZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVy
KiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7
CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNj
cm9sbExheWVyUG9zaXRpb24oKTsKKworICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQo
KTsKKworICAgIHZvaWQgc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1l
cjxTY3JvbGxpbmdDb29yZGluYXRvck1hYz4qKTsKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgp
OworCisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7
CisgICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKKyAgICBUaW1lcjxT
Y3JvbGxpbmdDb29yZGluYXRvck1hYz4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
cjsKKworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBt
X3N0YXRlTm9kZU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGlu
YXRvck1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAxMzA3Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDM3ICsyNywxMzMgQEAKIAogI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCiAKLSNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CisjaW1wb3J0ICJTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIgorCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXdCYXNlLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCisj
aW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFk
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9y
dCAiU2Nyb2xsaW5nVGhyZWFkLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdUcmVlLmgiCi0jaW1wb3J0
ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgotI2ltcG9ydCA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlIHsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyhQYWdlKiBwYWdl
KQorICAgIDogU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKKyAgICAsIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRlKCkpCisgICAgLCBtX3Njcm9sbGluZ1Ry
ZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7CiB9CiAKLVNjcm9sbGluZ0Nvb3JkaW5hdG9y
Ojp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6On5TY3Jv
bGxpbmdDb29yZGluYXRvck1hYygpCiB7Ci0gICAgQVNTRVJUKCFtX3BhZ2UpOwogICAgIEFTU0VS
VCghbV9zY3JvbGxpbmdUcmVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJh
bWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBHcmFwaGljc0xheWVyKikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnBhZ2VE
ZXN0cm95ZWQoKQoreworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkKCk7
CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKKworICAg
IC8vIEludmFsaWRhdGluZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUgcmVmZXJl
bmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3JvbGxpbmdU
cmVlIG9iamVjdHMuCisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxp
bmdUcmVlOjppbnZhbGlkYXRlLCBtX3Njcm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7Cit9CisKK1Nj
cm9sbGluZ1RyZWUqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdUcmVlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdUcmVlKTsKKyAgICByZXR1cm4gbV9zY3JvbGxp
bmdUcmVlLmdldCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRU
cmVlU3RhdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFz
Q2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tbWl0VHJlZVN0
YXRlKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQo
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBvZiB0aGUgcGFn
ZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJyZW50bHkgaW5j
bHVkZXMKKyAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92
ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRo
ZQorICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUg
bWFpbiBmcmFtZS4KKyAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRl
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7
CisKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5
IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCisgICAgLy8g
anVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBs
aWVzIHRvIHRoZSByb290LgorICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1l
VmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Ny
b2xsUGFyYW1ldGVyczsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOworICAgIHNj
cm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYg
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKKyAgICBzY3JvbGxQ
YXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGlj
YWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJsZWQo
KTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVW
aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMudmVy
dGljYWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsK
KworICAgIHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luID0gZnJhbWVWaWV3LT5zY3JvbGxP
cmlnaW4oKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50
UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOworICAgIHNj
cm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsK
KworICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVXaGVlbEV2ZW50
SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmll
dy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZShjb21wdXRlQ3VycmVudFdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAg
aWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Ny
b2xsaW5nU3RhdGVOb2RlLCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJv
b3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQobV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisKKyAgICBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKGZyYW1lVmlldyk7CisKKyAgICBzZXRTY3Jv
bGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVO
b2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpKTsKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKikKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwpAQCAtNjgsNyArMTY0LDcgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaQogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNz
TGF5ZXIqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXll
ciopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsK
QEAgLTc5LDYgKzE3NSwyMDIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
VmVydAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmll
dywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Ny
b2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChmcmFtZVZpZXctPmZyYW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsK
KyAgICAgICAgLy8gSWYgdGhpcyBmcmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGlu
dG8gdGhlIHBhZ2UgY2FjaGUsIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgorICAgICAgICAv
LyBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGlu
ayB0aGF0IHdlIGRpZC4KKyAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSog
c3RhdGVOb2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwor
ICAgIGlmICghc3RhdGVOb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZU5v
ZGUtPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXct
PmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6Omhh
bmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVl
bEV2ZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFn
ZSk7CisKKyAgICBpZiAobV9zY3JvbGxpbmdUcmVlLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVH
ZXN0dXJlKHdoZWVsRXZlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQs
IG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgd2hlZWxFdmVudCkpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9s
bFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAo
IWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRp
b24gPSBtX3Njcm9sbGluZ1RyZWUtPm1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBm
cmFtZVZpZXctPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAg
ICBmcmFtZVZpZXctPm5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChzY3JvbGxQb3NpdGlvbik7
CisgICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVl
KTsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9y
RnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigt
ZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOjphdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Ny
b2xsTGF5ZXJJRCkKK3sKKyAgICBBU1NFUlQoc2Nyb2xsTGF5ZXJJRCk7CisKKyAgICBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqIGV4aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9s
bExheWVySUQpOworICAgIGlmIChleGlzdGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxM
YXllcklEOworCisgICAgY2xlYXJTdGF0ZVRyZWUoKTsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRo
YXQgaXQgY2FuCisgICAgLy8gYXBwZW5kIHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90
IGluIHRoZSBzdGF0ZSB0cmVlLiBGb3Igbm93IHdlIGFsd2F5cyBhc3N1bWUKKyAgICAvLyB0aGlz
IGlzIHRoZSByb290IG5vZGUuCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0
ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0
ZVRyZWUuZ2V0KCkpKTsKKyAgICBtX3N0YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisgICAgcmV0dXJuIHNjcm9sbExh
eWVySUQ7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0
ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxM
YXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUg
PSBtX3N0YXRlTm9kZU1hcC50YWtlKHNjcm9sbExheWVySUQpOworCisgICAgLy8gRklYTUU6IHJl
bW92ZU5vZGUoKSB3aWxsIGRlc3Ryb3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdo
dCBzdGlsbCBiZSBpbiB0aGUgSGFzaE1hcC4KKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJv
YmxlbSBvbmNlIHRoZXJlIGFyZSBhY3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6Y2xlYXJTdGF0ZVRyZWUoKQoreworICAgIG1fc3RhdGVOb2RlTWFw
LmNsZWFyKCk7CisgICAgaWYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworfQorCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRl
Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVOb2RlTWFwLmZpbmQoc2Nyb2xsTGF5
ZXJJRCk7CisgICAgaWYgKGl0ID09IG1fc3RhdGVOb2RlTWFwLmVuZCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICBy
ZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgYXR0YWNoVG9TdGF0ZVRyZWUoZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRT
Y3JvbGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0
YXRlTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7
CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYzo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lv
biYgcmVnaW9uLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9k
ZS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKKyAgICBzY2hlZHVsZVRyZWVT
dGF0ZUNvbW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3Jv
bGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0
ZXJzLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0
SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNj
cm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRI
YXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3Jv
bGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOworICAg
IG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUpOworICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShz
Y3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CisKKyAgICBub2RlLT5zZXRT
Y3JvbGxPcmlnaW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOworICAgIG5vZGUtPnNl
dFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7CisgICAgbm9kZS0+
c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKKyAgICBzY2hl
ZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFu
ZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9k
ZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKKyAg
ICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1h
aW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCit7CisgICAgLy8gVGhlIEZyYW1lVmll
dydzIEdyYXBoaWNzTGF5ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQ
bGF0Zm9ybUxheWVyCisgICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJl
Zm9yZSB3ZSBzd2l0Y2ggYmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKKyAgICAvLyBpbiBv
cmRlciB0byBhdm9pZCBsYXllciBwb3NpdGlvbmluZyBidWdzLgorICAgIGlmIChyZWFzb25zKQor
ICAgICAgICB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChyZWFzb25zKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJh
bWVTY3JvbGxMYXllclBvc2l0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIg
PSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXll
ci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKK3sKKyAg
ICBpZiAobV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2Vk
UHJvcGVydGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZUNvbW1pdHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYzo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxT
Y3JvbGxpbmdDb29yZGluYXRvck1hYz4qKQoreworICAgIGNvbW1pdFRyZWVTdGF0ZSgpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUoKQoreworICAg
IEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7CisK
KyAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+Y29tbWl0KCk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZT
Y3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwg
dHJlZVN0YXRlLnJlbGVhc2UoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167921</attachid>
            <date>2012-10-09 22:14:13 -0700</date>
            <delta_ts>2012-10-10 11:33:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>76219</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDg0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTA5ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIHJldmVydCBmbGluZyBkZWFjY2VsZXJhdGlvbiBwYXJhbWV0
ZXIgY2hhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwNzc3KQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3NTgsNyAr
MTc1OCw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAotICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMwNzc3KQor
KysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAt
NDA2OSw3ICs0MDY5LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTA1LDcgKzkwNSw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWlu
dHMuY3BwIFwKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAot
ICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogICAgIHBh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwIFwKICAgICBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBcCiAg
ICAgcGFnZS9TZXR0aW5ncy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9u
IDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMwLDEwICsyNTMwLDggQEAgX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlMjJ1cGRh
dGVCYWNrRgogX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlRDFFdgogX19aTjdXZWJDb3JlMTVT
Y3JvbGxpbmdUaHJlYWQxNWRpc3BhdGNoQmFycmllckVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQog
X19aTjdXZWJDb3JlMTVTY3JvbGxpbmdUaHJlYWQ4ZGlzcGF0Y2hFUktOM1dURjhGdW5jdGlvbklG
dnZFRUUKLV9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3IyM2NvbW1pdFRyZWVTdGF0
ZUlmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3I0NHNldEZvcmNl
TWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzRWIKIF9fWk43V2ViQ29yZTRQYWdl
MjBzY3JvbGxpbmdDb29yZGluYXRvckV2Ci1fX1pOSzdXZWJDb3JlMjBTY3JvbGxpbmdDb29yZGlu
YXRvcjEzc2Nyb2xsaW5nVHJlZUV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzIyNyw2ICszMjI3LDcgQEAKICAgICAgICAgICAg
ICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAnLAogICAgICAgICAgICAgJ3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgnLAogICAgICAgICAgICAgJ3BhZ2Uvc2Ny
b2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwJywKKyAgICAg
ICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmgnLAogICAgICAgICAgICAgJ3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcCcsCiAg
ICAgICAgICAgICAncGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS93aW4vRnJhbWVDR1dpbi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwNzc3KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIxLDcgKzEwMjEsNiBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdG
ODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYw
MDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExp
bWl0LmggKi87IH07Ci0JCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29y
ZGluYXRvck5vbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzg2NkFGMzcxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9u
ZS5jcHAgKi87IH07CiAJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJE
MjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0
IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5j
cHAgKi87IH07CiAJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FD
MzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzMDIsNiArMzMwMSw3
IEBACiAJCTkzQTM4QjRCMEQwRTU4MDgwMDY4NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTM4QjRBMEQwRTU4
MDgwMDY4NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCAqLzsgfTsKIAkJOTNCMkQ4MTYwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3VkZGVu
VGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRl
blRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1tICov
OyB9OworCQk5M0I1MDI0QzE2MjRFNDQwMDA1NzA2MDIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjUw
MjRCMTYyNEU0NDAwMDU3MDYwMiAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICovOyB9Owog
CQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU5
MEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAqLzsgfTsKIAkJOTNCNzBENjMw
OUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0NzA5RUIwQzdDMDA5RDg0NjggLyogSlNE
T01CaW5kaW5nLmNwcCAqLzsgfTsKQEAgLTgxNDAsNyArODE0MCw2IEBACiAJCTM3RjgxOEZDMEQ2
NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zs
b2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
aWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVwdGhMaW1pdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzODY2QUYzNzE0RjFDMTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRp
bmF0b3JOb25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNB
QjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYg
LyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwNDk4LDYgKzEwNDk3LDcgQEAKIAkJOTNBMzhCNEEwRDBFNTgwODAwNjg3MkMyIC8qIEVkaXRv
ckNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdG9y
Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjJEODE1MEY5OTIw
RDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNCNTAyNEIxNjI0RTQ0MDAwNTcwNjAy
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGV4dE1lbnUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNZW51
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0NzA5RUIwQzdDMDA5
RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RPTUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTQ1NzAsNyArMTQ1NzAsNiBAQAogCQkJCTBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3Jv
bGxpbmdDb25zdHJhaW50cy5oICovLAogCQkJCTFBRjYyRUU0MTREQTIyQTcwMDQxNTU2QyAvKiBT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAgKi8sCiAJCQkJMUFGNjJFRTUxNERBMjJBNzAwNDE1NTZD
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCi0JCQkJMzg2NkFGMzcxNEYxQzE3MTAwMjgz
RDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi8sCiAJCQkJOTMxQ0JEMDYxNjFB
NDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5jcHAgKi8sCiAJCQkJOTMxQ0JEMDcx
NjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5oICovLAogCQkJCTkzMUNCRDA4
MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwICovLApA
QCAtMTQ1OTAsNiArMTQ1ODksNyBAQAogCQkxQUY2MkVFMjE0REEyMkE3MDA0MTU1NkMgLyogbWFj
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5M0I1MDI0
QjE2MjRFNDQwMDA1NzA2MDIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCAqLywKIAkJCQkx
QUY2MkVFMzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gKi8s
CiAJCQkJOTMxQ0JEMTIxNjFBNDRGODAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5t
bSAqLywKIAkJCQkxQUY2MkYyMzE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tICovLApAQCAtMjU1NTgsNiArMjU1NTgsNyBAQAogCQkJCTkzMUNCRDExMTYxQTQ0RTkwMEU0
Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQUYzNDEw
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgwMjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBp
biBIZWFkZXJzICovLAorCQkJCTkzQjUwMjRDMTYyNEU0NDAwMDU3MDYwMiAvKiBTY3JvbGxpbmdD
b29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODA5OCw3ICsyODA5OSw2IEBACiAJ
CQkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU3MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkVFNjE0REEyMkE3MDA0MTU1
NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkzODY2
QUYzODE0RjFDMTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRjYyRjI1MTREQUZFOUUwMDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJGMjQxNERBRkU5MTAwNDE1NTZDIC8qIFNj
cm9sbGluZ1RocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREEzMTREQjQwOUYw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAkocmV2aXNpb24gMTMwNzgzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw2IEBA
CiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ1LDQ2ICs0
Myw0NCBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotI2luY2x1
ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKLSNpbmNs
dWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oIgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGlu
YXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQoreworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKHBhZ2UpKTsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKHBhZ2UpKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7Cit9CisKIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlKQogICAgIDog
bV9wYWdlKHBhZ2UpCiAgICAgLCBtX2ZvcmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25V
cGRhdGVzKGZhbHNlKQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgLCBtX3Nj
cm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSgpKQotICAgICwgbV9z
Y3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWU6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIodGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKQotI2VuZGlmCi0gICAgLCBtX3By
aXZhdGUoMCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3ll
ZCgpCitTY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKIHsKLSAg
ICBBU1NFUlQobV9wYWdlKTsKLSAgICBtX3BhZ2UgPSAwOwotCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3Ao
KTsKLQotICAgIC8vIEludmFsaWRhdGluZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2lsbCBicmVhayB0
aGUgcmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBT
Y3JvbGxpbmdUcmVlIG9iamVjdHMuCi0gICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5k
KCZTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBtX3Njcm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7
Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fcGFnZSk7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQotU2Nyb2xsaW5nVHJlZSogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGlu
Z1RyZWUoKSBjb25zdAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgp
CiB7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZSk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsaW5n
VHJlZS5nZXQoKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBtX3BhZ2UgPSAwOwogfQotI2Vu
ZGlmCiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9y
RnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSBjb25zdAogewpAQCAtMTA2LDcgKzEwMiw3
IEBAIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2MKICNlbmRpZgogfQog
Ci1zdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSogZnJh
bWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKQorUmVnaW9uIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24oRnJhbWUqIGZyYW1lLCBjb25z
dCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikKIHsKICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb247CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwpAQCAt
MTQ4LDQ4ICsxNDQsMTYgQEAgc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVS
ZQogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmll
dykKK3Vuc2lnbmVkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlQ3VycmVudFdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKG1fcGFnZSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhh
dCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVz
Ci0gICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxv
dyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKLSAg
ICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4g
ZnJhbWUuCi0gICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOwotCi0j
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBt
YXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcgcmVn
aW9ucyBmb3IgbW9yZSB0aGFuCi0gICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQg
bm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgotICAgIHNldE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7Ci0jZWxzZQotICAgIHNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKLSNlbmRpZgotCi0gICAg
aWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTY3JvbGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRlcnM7Ci0gICAg
c2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9
IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIGZyYW1lVmlldy0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpLT5lbmFibGVkKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVk
VmVydGljYWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJh
bWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7Ci0gICAgc2Nyb2xsUGFyYW1l
dGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9s
bGJhck1vZGUoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9
IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7Ci0KLSAgICBzY3JvbGxQYXJhbWV0
ZXJzLnNjcm9sbE9yaWdpbiA9IGZyYW1lVmlldy0+c2Nyb2xsT3JpZ2luKCk7Ci0gICAgc2Nyb2xs
UGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRl
bnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CisgICAgdW5zaWduZWQgd2hlZWxF
dmVudEhhbmRsZXJDb3VudCA9IDA7CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQot
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZy
YW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgKz0gZnJh
bWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICB9CiAKLSAgICBz
ZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShzY3JvbGxQYXJhbWV0ZXJzLCBub2RlKTsKLSNlbHNl
Ci0gICAgc2V0U2Nyb2xsUGFyYW1ldGVycyhzY3JvbGxQYXJhbWV0ZXJzKTsKLSNlbmRpZgorICAg
IHJldHVybiB3aGVlbEV2ZW50SGFuZGxlckNvdW50OwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZChGcmFtZVZpZXcq
IGZyYW1lVmlldykKQEAgLTIyMiw3ICsxODYsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdGaXhlCiAgICAgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCgpOwogfQogCi1zdGF0aWMgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCitHcmFwaGljc0xheWVyKiBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIEZyYW1lKiBmcmFt
ZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKQEAgLTI0Nyw2NiArMjExLDkgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdAogICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxp
bmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxF
KFRIUkVBREVEX1NDUk9MTElORykKLSAgICAvLyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBo
YXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2RlLCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgotICAg
IGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKLSAgICBBU1NFUlQo
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7Ci0jZW5kaWYKLQogICAgIGZy
YW1lVmlld0xheW91dFVwZGF0ZWQoZnJhbWVWaWV3KTsKICAgICByZWNvbXB1dGVXaGVlbEV2ZW50
SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CiAgICAgdXBkYXRlU2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwotICAgIAotI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCi0gICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKHNjcm9sbExheWVy
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xs
TGF5ZXJJRCgpKSk7Ci0jZWxzZQotICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJh
bWVWaWV3KGZyYW1lVmlldykpOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29u
c3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5n
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkgewotICAgICAgICAvLyBJZiB0aGlzIGZyYW1lIHZpZXcn
cyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNoZSwgd2UgZG9uJ3Qgd2Fu
dCB0byB1cGRhdGUgb3VyCi0gICAgICAgIC8vIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0aW9uLiBK
dXN0IGxldCB0aGUgRnJhbWVWaWV3IHRoaW5rIHRoYXQgd2UgZGlkLgotICAgICAgICB1cGRhdGVN
YWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dy
YW1tYXRpY1Njcm9sbCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFt
ZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFzdGF0ZU5vZGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7Ci0gICAg
c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHNjcm9sbFBvc2l0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZp
ZXcqLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotI2lmIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fc2Nyb2xsaW5nVHJlZS0+d2lsbFdoZWVsRXZlbnRT
dGFydFN3aXBlR2VzdHVyZSh3aGVlbEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpoYW5kbGVX
aGVlbEV2ZW50LCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHdoZWVsRXZlbnQpKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHdoZWVsRXZlbnQpOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBwcm9ncmFtbWF0aWNTY3Jv
bGwpCkBAIC0zMzAsNDggKzIzNyw2IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0
ZU1haW5GcmEKICAgICBmcmFtZVZpZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9sZFByb2dy
YW1tYXRpY1Njcm9sbCk7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlv
bigpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAg
aWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVy
KiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAg
ICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigp
KTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0
ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCi17Ci0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxpbmdUcmVlLT5tYWluRnJhbWVTY3Jv
bGxQb3NpdGlvbigpOwotCi0gICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZShmYWxzZSk7Ci0gICAgZnJhbWVWaWV3LT5ub3RpZnlTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoc2Nyb2xsUG9zaXRpb24pOwotICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xs
TGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAgICBzY3Jv
bGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0jZW5k
aWYKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhE
QVJXSU4pKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNl
KFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQogewpAQCAtMzg4LDI1ICsyNTMsNiBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2CiB9CiAjZW5kaWYKIAotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICB1bnNpZ25lZCB3aGVlbEV2
ZW50SGFuZGxlckNvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHdoZWVsRXZlbnRI
YW5kbGVyQ291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQo
KTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Ny
b2xsTGF5ZXJJRCgpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh3aGVlbEV2ZW50SGFuZGxlckNvdW50LCBub2Rl
KTsKLSNlbHNlCi0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxl
ckNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKLSNlbmRpZgotfQotCiBib29s
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZpZXcq
IGZyYW1lVmlldykKIHsKICAgICBjb25zdCBGcmFtZVZpZXc6OlZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RTZXQqIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzID0gZnJhbWVWaWV3LT52aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cygpOwpAQCAtNDYzLDE1OSArMzA5LDQgQEAgU2Nyb2xsaW5nTm9k
ZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1bgogICAgIHJldHVybiB1bmlxdWVTY3JvbGxMYXll
cklEKys7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9ySUQoU2Ny
b2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCi17Ci0gICAgaWYgKCFzY3JvbGxMYXllcklEKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxp
bmdTdGF0ZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlTm9kZU1hcC5maW5kKHNj
cm9sbExheWVySUQpOwotICAgIGlmIChpdCA9PSBtX3N0YXRlTm9kZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBpdC0+dmFsdWU7
Ci0gICAgcmV0dXJuIHRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOwotfQotCi1T
Y3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKFNj
cm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewotICAgIEFTU0VSVChzY3JvbGxMYXllcklE
KTsKLQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogZXhpc3RpbmdOb2RlID0gc3Rh
dGVOb2RlRm9ySUQoc2Nyb2xsTGF5ZXJJRCk7Ci0gICAgaWYgKGV4aXN0aW5nTm9kZSAmJiBleGlz
dGluZ05vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci0KLSAgICBjbGVhclN0YXRlVHJlZSgpOwotCi0gICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIHRvIHRha2Ug
YSBwYXJlbnQgSUQgc28gdGhhdCBpdCBjYW4KLSAgICAvLyBhcHBlbmQgdGhlIG5vZGUgaW4gdGhl
IGFwcHJvcHJpYXRlIHNwb3QgaW4gdGhlIHN0YXRlIHRyZWUuIEZvciBub3cgd2UgYWx3YXlzIGFz
c3VtZQotICAgIC8vIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZS4KLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0
ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOwotICAgIG1fc3RhdGVOb2RlTWFwLnNldChz
Y3JvbGxMYXllcklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLSAg
ICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsKLSAg
ICBpZiAoIXNjcm9sbExheWVySUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjcm9sbGluZ1N0
YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7Ci0KLSAg
ICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5kIHRob3Nl
IGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgotICAgIC8vIFRoaXMgd2ls
bCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVuIGluIHRo
ZSB0cmVlLgotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOwotfQot
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCi17Ci0gICAgbV9z
dGF0ZU5vZGVNYXAuY2xlYXIoKTsKLSAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKLSAgICAgICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3
KiBmcmFtZVZpZXcpCi17Ci0gICAgYXR0YWNoVG9TdGF0ZVRyZWUoZnJhbWVWaWV3LT5zY3JvbGxM
YXllcklEKCkpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXll
ckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSog
bm9kZSkKLXsKLSAgICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7Ci0gICAgc2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgp
OwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9y
Tm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzLCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7
Ci0gICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMu
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKLSAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpv
bnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xs
YmFyKTsKLSAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFy
YW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOwotICAgIG5vZGUtPnNldEhvcml6
b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Ny
b2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOwotICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChz
Y3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7Ci0gICAgbm9kZS0+c2V0Q29udGVudHNTaXpl
KHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOwotfQotCi0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5zZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIHNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMgcmVhc29ucykKLXsKLSAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciBp
cyBsaWtlbHkgdG8gYmUgb3V0LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3JtTGF5ZXIKLSAgICAv
LyBhdCB0aGlzIHBvaW50LiBTbyB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdlIHN3aXRjaCBiYWNr
IHRvIG1haW4gdGhyZWFkIHNjcm9sbGluZwotICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGxheWVy
IHBvc2l0aW9uaW5nIGJ1Z3MuCi0gICAgaWYgKHJlYXNvbnMpCi0gICAgICAgIHVwZGF0ZU1haW5G
cmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhy
ZWFkKHJlYXNvbnMpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKLXsKLSAgICBp
ZiAobV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJv
cGVydGllcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNv
bW1pdHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxp
bmdDb29yZGluYXRvcj4qKQotewotICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwotfQotCi12b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29tbWl0VHJlZVN0YXRlKCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmNvbW1pdFRyZWVTdGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5o
YXNDaGFuZ2VkUHJvcGVydGllcygpKTsKLQotICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+
IHRyZWVTdGF0ZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5jb21taXQoKTsKLSAgICBTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1RyZWVTdGF0
ZSwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB0cmVlU3RhdGUucmVsZWFzZSgpKSk7Ci19Ci0KLWJv
b2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVy
KiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5
ZXIqLCBib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xs
YWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgot
fQotI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzMDc4MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEyICs0OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIHVuc2lnbmVk
IE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zOwogdHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdO
b2RlSUQ7CiAKK2NsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NM
YXllcjsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsK
LWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRl
Tm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGlu
Z1N0YXRlVHJlZTsKQEAgLTY1LDIwICs2NSwyMSBAQCBjbGFzcyBTY3JvbGxpbmdUcmVlOwogY2xh
c3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2Ny
b2xsaW5nQ29vcmRpbmF0b3I+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3Jv
bGxpbmdDb29yZGluYXRvcj4gY3JlYXRlKFBhZ2UqKTsKLSAgICB+U2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvcigpOwogCi0gICAgdm9pZCBw
YWdlRGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKIAogI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5n
VHJlZSgpIGNvbnN0OwotICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKTsKKyAgICB2
aXJ0dWFsIFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpIHsg
fQorCiAgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgaGFu
ZGxlcyBzY3JvbGxpbmcgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3LgogICAgIGJvb2wgY29vcmRp
bmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgY29uc3Q7CiAKICAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxh
aWQgb3V0LgotICAgIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKSB7IH0KIAog
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSB3aGVlbCBldmVudCBoYW5kbGVyIGlz
IGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlIAogICAgIC8vIGZyYW1lIHZpZXcncyB1bmRlcmx5aW5n
IGRvY3VtZW50LgpAQCAtOTEsMjkgKzkyLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lVmll
d0ZpeGVkT2JqZWN0c0RpZENoYW5nZShGcmFtZVZpZXcqKTsKIAogICAgIC8vIFNob3VsZCBiZSBj
YWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNo
YW5nZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7
Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBob3Jpem9udGFsIHNjcm9s
bGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2b2lkIGZy
YW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFw
aGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpOwotCi0gICAgLy8gU2hvdWxkIGJl
IGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2
ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3VmVydGljYWxTY3JvbGxi
YXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9s
bGJhckxheWVyKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNjcm9s
bGFibGUgbGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgotICAgIHZvaWQg
c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBo
aWNzTGF5ZXIqKTsKLQotICAgIC8vIFJlcXVlc3RzIHRoYXQgdGhlIHNjcm9sbGluZyBjb29yZGlu
YXRvciB1cGRhdGVzIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIGdpdmVuIGZyYW1lIHZpZXcu
IElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBpdCBtZWFucyB0aGF0IHRoZQotICAgIC8v
IHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCBhc3luY2hyb25vdXNseS4gSWYgaXQgcmV0dXJucyBm
YWxzZSwgdGhlIGNhbGxlciBzaG91bGQgdXBkYXRlIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24gaXRz
ZWxmLgotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNv
bnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9y
IG5vdC4KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENo
YW5nZShGcmFtZVZpZXcqKTsKIAotICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0
cmVlIHdoZW5ldmVyIHRoZSBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzLgotICAg
IHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmLCBib29s
IHByb2dyYW1tYXRpY1Njcm9sbCk7Ci0KLSAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxp
bmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcyBh
bmQgdGhlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdlbGwu
Ci0gICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24oKTsKKyAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNjcm9sbGluZyBjb29yZGluYXRv
ciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXllcnMgZml4ZWQgdG8gdGhlaXIKKyAgICAvLyBj
b250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGaXhl
ZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBMQVRGT1JN
KE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogICAgIC8vIERpc3Bh
dGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIGR1cmluZyBoYW5kbGVXaGVlbEV2ZW50LiBUaGlz
IGlzIHJlcXVpcmVkIGFzIGxvbmcgYXMgc2Nyb2xsYmFycyBhcmUgcGFpbnRlZCBvbiB0aGUgbWFp
biB0aHJlYWQuCkBAIC0xMjMsMTUgKzEwNiwyMCBAQCBwdWJsaWM6CiAgICAgLy8gRm9yY2UgYWxs
IHNjcm9sbCBsYXllciBwb3NpdGlvbiB1cGRhdGVzIHRvIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJl
YWQuCiAgICAgdm9pZCBzZXRGb3JjZU1haW5UaHJlYWRTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cyhib29sKTsKIAotICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNvb3JkaW5h
dG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgotICAgIC8v
IGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgotICAgIGJvb2wgc3VwcG9ydHNGaXhlZFBvc2l0
aW9uTGF5ZXJzKCkgY29uc3Q7CisgICAgLy8gVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGN1
cnJlbnRseSB1bmlxdWUgdG8gdGhlIHRocmVhZGVkIHNjcm9sbGluZyBhcmNoaXRlY3R1cmUsIGFu
ZCB0aGV5IGFyZQorICAgIC8vIHRoZWlyIG1lYW5pbmdmdWwgaW1wbGVtZW50YXRpb25zIGFyZSBp
biBTY3JvbGxpbmdDb29yZGluYXRvck1hYy4KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50JikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcqLCBjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpIHsg
fQorICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGlu
Z05vZGVJRCBub2RlSUQpIHsgcmV0dXJuIG5vZGVJRDsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyU3RhdGVUcmVlKCkgeyB9CiAKLSAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29u
dGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMuCi0gICAgdm9pZCBzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCk7CisgICAg
Ly8gR2VuZXJhdGVkIGEgdW5pcXVlIGlkIGZvciBzY3JvbGwgbGF5ZXJzLgorICAgIFNjcm9sbGlu
Z05vZGVJRCB1bmlxdWVTY3JvbGxMYXllcklEKCk7CiAKLSAgICAvLyBBdHRhY2gvZGV0YWNoIGxh
eWVyIHBvc2l0aW9uIHRvIGFuY2VzdG9yIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lci4KLSAgICB2
b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wp
OworICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIHdoZW5ldmVyIHRoZSBt
YWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgIHZvaWQgdXBkYXRlTWFpbkZy
YW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmLCBib29sIHByb2dyYW1tYXRpY1Njcm9s
bCk7CiAKICAgICBlbnVtIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25GbGFncyB7CiAgICAgICAg
IEZvcmNlZE9uTWFpblRocmVhZCA9IDEgPDwgMCwKQEAgLTE0MSw4NCArMTI5LDMxIEBAIHB1Ymxp
YzoKICAgICAgICAgSXNJbWFnZURvY3VtZW50ID0gMSA8PCA0CiAgICAgfTsKIAotICAgIC8vIEdl
bmVyYXRlcyBhIHVuaXF1ZSBpZCB0byBhc3NvY2lhdGUgd2l0aCBhIGxheWVyIHRoYXQgd2lsbCBi
ZSByZXByZXNlbnRlZCBieSBhIG5vZGUgaW4gdGhlIHNjcm9sbGluZyB0cmVlLgotICAgIFNjcm9s
bGluZ05vZGVJRCB1bmlxdWVTY3JvbGxMYXllcklEKCk7CisgICAgLy8gVGhlc2UgdmlydHVhbCBm
dW5jdGlvbnMgYXJlIGN1cnJlbnRseSB1bmlxdWUgdG8gQ2hyb21pdW0ncyBXZWJMYXllciBhcHBy
b2FjaC4gVGhlaXIgbWVhbmluZ2Z1bAorICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUgaW4gU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3SG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIq
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFw
aGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9v
bCkgeyB9CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW5kaWN0YWUgdGhh
dCBhIGxheWVyIHNob3VsZCBiZSAob3Igc2hvdWxkIG5vdCBsb25nZXIgYmUpIHJlcHJlc2VudGVk
IGJ5IGEgbm9kZQotICAgIC8vIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KLSAgICBTY3JvbGxpbmdO
b2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKLSAgICB2b2lkIGRldGFj
aEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNp
dCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp
cGVzIG91dCB0aGUgY3VycmVudCB0cmVlLgotICAgIHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsKKyAg
ICBSZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEZyYW1lKiwgY29uc3QgSW50
UG9pbnQmIGZyYW1lTG9jYXRpb24pOworICAgIHVuc2lnbmVkIGNvbXB1dGVDdXJyZW50V2hlZWxF
dmVudEhhbmRsZXJDb3VudCgpOworICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJh
bWVWaWV3KEZyYW1lVmlldyopOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKFBhZ2UqKTsKKyAgICBQYWdlKiBtX3BhZ2U7CiAKLSAgICB2b2lkIGVuc3VyZVJv
b3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7Ci0gICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1l
VmlldyhGcmFtZVZpZXcqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucykg
eyB9CiAKLSAgICB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZp
ZXcoRnJhbWVWaWV3Kik7CiAgICAgYm9vbCBoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZp
ZXcqKTsKICAgICB2b2lkIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQoKTsKIAotICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKLSAgICAgICAgU2Ny
b2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKLSAgICAgICAgU2Nyb2xs
RWxhc3RpY2l0eSB2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHk7Ci0KLSAgICAgICAgYm9vbCBoYXNF
bmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICAgICAgYm9vbCBoYXNFbmFibGVkVmVydGlj
YWxTY3JvbGxiYXI7Ci0KLSAgICAgICAgU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsU2Nyb2xsYmFy
TW9kZTsKLSAgICAgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Ci0KLSAg
ICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOwotCi0gICAgICAgIEludFJlY3Qgdmlld3BvcnRS
ZWN0OwotICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKLSAgICB9OwotCi0gICAgLy8gRklY
TUU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGJ5IFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW0uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yCi0gICAgLy8gbm93IHVzZXMgbmV3IHZlcnNp
b25zOiBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSgpLCBzZXRXaGVlbEV2ZW50SGFuZGxlckNv
dW50Rm9yTm9kZSgpLCBldGMuCi0gICAgLy8gVG8gcmVzb2x2ZSB0aGlzIGFuZCBhbGwgb2YgdGhl
IGlmLWRlZnMgaW4gdGhpcyBjbGFzcywgd2Ugc2hvdWxkIG1ha2UgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IKLSAgICAvLyBqdXN0IGJlIGEgdHlwZWRlZiB0aGF0IGRlZmluZXMgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMgdG8gYmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IsIGFuZCBzYW1lCi0gICAgLy8gZm9y
IENocm9taXVtIGFuZCBvdGhlciBwbGF0Zm9ybXMuIEFueSBzaGFyZWQgZnVuY3Rpb25hbGl0eSBj
YW4gYmUgaW4gc29tZXRoaW5nIGNhbGxlZCAKLSAgICAvLyBTY3JvbGxpbmdDb29yZGluYXRvckJh
c2Ugd2hpY2ggYWxsIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBpbmhlcml0
IGZyb20uCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4
NzAwCi0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMm
KTsKLSAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOwotICAgIHZv
aWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7Ci0gICAgdm9pZCBz
ZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBT
Y3JvbGxpbmdTdGF0ZU5vZGUqKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
Rm9yTm9kZShjb25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKLSAg
ICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMm
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKLSAgICB2b2lkIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
KTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKLQotICAgIHZvaWQgdXBk
YXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwotCi0gICAgUGFnZSogbV9wYWdlOwot
CiAgICAgYm9vbCBtX2ZvcmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzOwot
Ci0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KCk7Ci0KLSAgICB2b2lkIHNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVy
RmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+Kik7Ci0gICAgdm9pZCBjb21taXRUcmVl
U3RhdGUoKTsKLQotICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlOwotICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7Ci0gICAg
VGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVy
VGltZXI7Ci0KLSAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2Rl
Kj4gbV9zdGF0ZU5vZGVNYXA7Ci0jZW5kaWYKLQotICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJp
dmF0ZSogbV9wcml2YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxMzA3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlIHsKLX07Ci0KLSNpZiAhRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKTsKLX0KLQotU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigpCi17Ci0gICAgQVNTRVJUKCFtX3BhZ2UpOwot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25z
dCBSZWdpb24mKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRV
cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdS
ZWFzb25zKQotewotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVk
UG9zaXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25M
YXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJv
b2wpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikKLXsKLX0K
LQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0YXRlVHJl
ZShTY3JvbGxpbmdOb2RlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkOwotfQotCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCkKLXsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUoKQotewotfQot
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyopCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17Ci19Ci0KLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpCi17
Ci19Ci0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEz
MDc4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwzMyArOTUsMzIg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IG1fdmVydGljYWxTY3Jv
bGxiYXJMYXllcjsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oUGFnZSogcGFnZSkKKyAgICA6
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3ByaXZhdGUobmV3IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJpdmF0ZSkKIHsKLSAgICBSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+
IGNvb3JkaW5hdG9yKGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSkpOwot
ICAgIGNvb3JkaW5hdG9yLT5tX3ByaXZhdGUgPSBuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2
YXRlOwotICAgIHJldHVybiBjb29yZGluYXRvci5yZWxlYXNlKCk7CiB9CiAKLVNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
aHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oKQogewotICAgIEFTU0VSVCgh
bV9wYWdlKTsKICAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCi1zdGF0aWMgR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVW
aWV3KikKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgRnJhbWUqIGZy
YW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXJlbmRlclZpZXcpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCktPnNjcm9sbExheWVyKCk7Ci0jZWxzZQotICAgIHJl
dHVybiAwOwotI2VuZGlmCisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICAvLyBDb21wdXRlIHRo
ZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3Iu
IFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCisgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1
Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRv
IGRvIHRoaXMgZXZlbiBpZiB0aGUKKyAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMg
dXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCisgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZy
YW1lKCksIEludFBvaW50KCkpOworICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7
CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShm
cmFtZVZpZXcpOworICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZy
YW1lVmlldykpOwogfQogCiBzdGF0aWMgV2ViTGF5ZXIqIHNjcm9sbGFibGVMYXllckZvckdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0xNzQsNyArMTczLDcgQEAgc3RhdGlj
IFBhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZQogICAgIHJldHVybiBzY3JvbGxiYXJM
YXllci5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywg
R3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQordm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3Jv
bGxiYXJMYXllcikKIHsKICAgICBpZiAoIWhvcml6b250YWxTY3JvbGxiYXJMYXllciB8fCAhY29v
cmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgzLDcgKzE4Miw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0hvcmkKICAgICBtX3ByaXZhdGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJMYXllcihjcmVhdGVT
Y3JvbGxiYXJMYXllcihmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9wcml2YXRl
LT5zY3JvbGxMYXllcigpLCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIsIGZyYW1lVmlldykpOwog
fQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpm
cmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQogewogICAgIGlmICgh
dmVydGljYWxTY3JvbGxiYXJMYXllciB8fCAhY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkyLDEyICsxOTEsMTIgQEAgdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydAogICAgIG1fcHJpdmF0ZS0+c2V0
VmVydGljYWxTY3JvbGxiYXJMYXllcihjcmVhdGVTY3JvbGxiYXJMYXllcihmcmFtZVZpZXctPnZl
cnRpY2FsU2Nyb2xsYmFyKCksIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSwgdmVydGljYWxTY3Jv
bGxiYXJMYXllciwgZnJhbWVWaWV3KSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3Jv
bGxMYXllcikKIHsKICAgICBtX3ByaXZhdGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyID8g
c2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihzY3JvbGxMYXllcikgOiAwKTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29u
c3QgUmVnaW9uJiByZWdpb24pCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNl
dE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIC8v
IFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUg
dGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVy
KHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpA
QCAtMjEwLDEyICsyMDksNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0
U2NyCiAgICAgfQogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJh
bWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQhCi19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVy
Q291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVl
bEV2ZW50SGFuZGxlckNvdW50KQogewogICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBh
IHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qg
b3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjIzLDcgKzIxNyw3IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnQKICAgICAgICAgbV9wcml2YXRlLT5zY3Jv
bGxMYXllcigpLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQgPiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29u
cyByZWFzb25zKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRTaG91bGRV
cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdS
ZWFzb25zIHJlYXNvbnMpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0
U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJz
ZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0yMzEsMjQgKzIyNSwxOSBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhCiAgICAgICAgIG1fcHJpdmF0ZS0+c2Nyb2xs
TGF5ZXIoKS0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHJlYXNvbnMpOwogfQogCi1ib29s
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25z
dAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
ZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiBs
YXllciwgYm9vbCBlbmFibGUpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNl
dExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBib29sIGVuYWJsZSkKIHsKICAgICBpZiAoV2ViTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9
IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIobGF5ZXIpKQogICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhlbmFibGUpOwog
fQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5l
ckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFw
aGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKFdlYkxheWVyKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVyKGxheWVyKSkKICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXIoZW5hYmxlKTsK
IH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXll
ckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEdyYXBoaWNzTGF5ZXIq
IHNjcm9sbExheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzY3JvbGxh
YmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSwgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCiB7CiAgICAgaWYgKCFzY3JvbGxMYXllcikK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjYyLDE5ICsyNTEsMTAgQEAgdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2Nyb2xsYWJsZUFyZQogICAgIH0KIH0KIAotLy8gRklYTUU6IFdlIHNob3VsZCBj
b25zaWRlciByZW1vdmluZyB0aGVzZSBzdHVicyB3aGVuIHdlIHJlc29sdmUgdGhlIGlmLWRlZiBz
b3VwIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4NzAwCi1TY3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBpZCkKLXsKLSAgICByZXR1cm4g
aWQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUo
U2Nyb2xsaW5nTm9kZUlEKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVh
clN0YXRlVHJlZSgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CiB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7CisgICAgc2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudChjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1faAorI2RlZmluZSBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKKworI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcml2YXRlOworCitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIDogcHVi
bGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtKCk7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRo
ZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgorICAgIHZpcnR1YWwgdm9pZCBm
cmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hh
bmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9yaXpvbnRh
bCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKik7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2
aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopOworCisgICAgLy8gUmV0
dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9z
aXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWlyCisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3Jv
bGxpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIE1hcmsvdW5tYXJrIGEgbGF5ZXIgYXMgYSBj
b250YWluZXIgZm9yIGZpeGVkIHBvc2l0aW9uIGxheWVycy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJv
b2wpOworCisgICAgLy8gQXR0YWNoL2RldGFjaCBsYXllciBwb3NpdGlvbiB0byBhbmNlc3RvciBm
aXhlZCBwb3NpdGlvbiBjb250YWluZXIuCisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhl
ZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpOworCisgICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYWJsZSBsYXllciBmb3IgdGhlIGdpdmVuIHNj
cm9sbCBhcmVhIGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xs
TGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKik7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JG
cmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMp
OworCisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAgICB2b2lkIHNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOworCisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCisjZGVm
aW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjX2gKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIDogcHVibGljIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYyhQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CisKKyAgICB2aXJ0dWFsIFNjcm9s
bGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
VHJlZVN0YXRlSWZOZWVkZWQoKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dGhlIGdpdmVuIGZyYW1lIHZpZXcgaGFzIGJlZW4gbGFpZCBvdXQuCisgICAgdmlydHVhbCB2b2lk
IGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3Kik7CisKKyAgICAvLyBTaG91bGQgYmUg
Y2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBj
aGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3Kik7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBob3Jpem9u
dGFsIHNjcm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcik7CisK
KyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIg
bGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lk
IGZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3Jh
cGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcik7CisKKyAgICAvLyBSZXF1ZXN0cyB0
aGF0IHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9u
IG9mIHRoZSBnaXZlbiBmcmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwg
aXQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYXN5bmNo
cm9ub3VzbHkuIElmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0
aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIGl0c2VsZi4KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50Jik7CisKKyAgICAv
LyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5z
IHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcqLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
KworICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIHdoZW5ldmVyIHRoZSBt
YWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2Nyb2xsIGxheWVyIHBv
c2l0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0aW9uKCk7CisKKyAg
ICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW5kaWN0YWUgdGhhdCBhIGxheWVyIHNo
b3VsZCBiZSAob3Igc2hvdWxkIG5vdCBsb25nZXIgYmUpIHJlcHJlc2VudGVkIGJ5IGEgbm9kZQor
ICAgIC8vIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJ
RCBhdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIHdpcGVzIG91dCB0aGUgY3VycmVudCB0cmVlLgorICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0
YXRlVHJlZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZy
YW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0
YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICBzdHJ1Y3QgU2Nyb2xsUGFyYW1l
dGVycyB7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5Owor
CisgICAgICAgIGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgICAgIGJv
b2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgICAgIFNjcm9sbGJhck1vZGUg
aG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7CisgICAgICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxT
Y3JvbGxiYXJNb2RlOworCisgICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKKworICAgICAg
ICBJbnRSZWN0IHZpZXdwb3J0UmVjdDsKKyAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7Cisg
ICAgfTsKKworICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xs
UGFyYW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0
U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZU5vZGUqKTsK
KyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24m
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
KTsKKworICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOworCisg
ICAgdm9pZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworCisgICAgdm9pZCBzY3JvbGxpbmdT
dGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
PiopOworICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisKKyAgICBPd25QdHI8U2Nyb2xsaW5n
U3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKKyAgICBSZWZQdHI8U2Nyb2xsaW5nVHJl
ZT4gbV9zY3JvbGxpbmdUcmVlOworICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjPiBt
X3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOworCisgICAgSGFzaE1hcDxTY3JvbGxp
bmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKKworI2VuZGlmIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMubW0JKHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsMzcgKzI3LDEzMyBAQAogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIAot
I2ltcG9ydCAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbXBvcnQgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKKyNpbmNsdWRl
ICJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlLmgiCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotI2ltcG9ydCAiRnJhbWVW
aWV3LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdUaHJlYWQuaCIKLSNp
bXBvcnQgIlNjcm9sbGluZ1RyZWUuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgot
I2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYvRnVuY3Rpb25h
bC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZh
dGUgewogfTsKIAotUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjKFBhZ2UqIHBhZ2UpCisgICAgOiBTY3JvbGxpbmdDb29yZGlu
YXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xsaW5nU3RhdGVUcmVl
OjpjcmVhdGUoKSkKKyAgICAsIG1fc2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlOjpjcmVhdGUo
dGhpcykpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKHRoaXMsICZT
Y3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJG
aXJlZCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBh
Z2UpKTsKIH0KIAotU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigp
CitTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKCkKIHsK
LSAgICBBU1NFUlQoIW1fcGFnZSk7CiAgICAgQVNTRVJUKCFtX3Njcm9sbGluZ1RyZWUpOwogfQog
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cGFnZURlc3Ryb3llZCgpCit7CisgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0aW5nIHRoZSBzY3Jv
bGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Ny
b2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KKyAgICBTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmludmFsaWRhdGUsIG1fc2Ny
b2xsaW5nVHJlZS5yZWxlYXNlKCkpKTsKK30KKworU2Nyb2xsaW5nVHJlZSogU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3Njcm9s
bGluZ1RyZWUpOworICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUuZ2V0KCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkKK3sKKyAg
ICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb21taXRUcmVlU3RhdGUoKTsKKyAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAg
Ly8gQ29tcHV0ZSB0aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2FuJ3QgZG8gZmFzdCBz
Y3JvbGxpbmcgZm9yLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcworICAgIC8vIGFsbCBzY3JvbGxh
YmxlIGFyZWFzLCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hl
cy4gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCisgICAgLy8gZnJhbWUgdmlldyB3aG9z
ZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgorICAgIFJlZ2lvbiBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiht
X3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKKworICAgIC8vIEluIHRoZSBmdXR1cmUs
IHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IG5vbi1mYXN0IHNjcm9sbGlu
ZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAvLyBqdXN0IHRoZSByb290IG5vZGUuIEJ1dCBy
aWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8gdGhlIHJvb3QuCisgICAgc2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKKworICAgIGlmICghY29vcmRp
bmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9ySUQo
ZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU2Nyb2xsUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJzOworICAgIHNjcm9s
bFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPmhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpOwor
ICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIgPSBmcmFt
ZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZpZXctPmhvcml6b250YWxTY3Jv
bGxiYXIoKS0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRp
Y2FsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmIGZyYW1lVmll
dy0+dmVydGljYWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMu
aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXJN
b2RlKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBmcmFt
ZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpOworCisgICAgc2Nyb2xsUGFyYW1ldGVycy5z
Y3JvbGxPcmlnaW4gPSBmcmFtZVZpZXctPnNjcm9sbE9yaWdpbigpOworICAgIHNjcm9sbFBhcmFt
ZXRlcnMudmlld3BvcnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPnZpc2li
bGVDb250ZW50UmVjdCgpLnNpemUoKSk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1Np
emUgPSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOworCisgICAgc2V0U2Nyb2xsUGFyYW1ldGVy
c0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywgbm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWM6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXco
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JOb2RlKGNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpLCBub2RlKTsK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5n
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRo
ZSByb290IGxheWVyIGRvZXMgbm90IGhhdmUgYSBTY3JvbGxpbmdTdGF0ZU5vZGUsIHRoZW4gd2Ug
c2hvdWxkIGNyZWF0ZSBvbmUuCisgICAgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhm
cmFtZVZpZXcpOworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpKTsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRD
aGFuZ2UoZnJhbWVWaWV3KTsKKworICAgIHNldFNjcm9sbExheWVyRm9yTm9kZShzY3JvbGxMYXll
ckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9s
bExheWVySUQoKSkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZp
ZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcs
IEdyYXBoaWNzTGF5ZXIqKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKG1fcGFnZSk7CkBAIC02OCw3ICsxNjQsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdIb3JpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZy
YW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwpAQCAtNzksNiArMTc1LDIwMiBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KIH0KIAorYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9zaXRpb24pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9w
YWdlKTsKKworICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVW
aWV3KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkgeworICAgICAgICAvLyBJZiB0aGlzIGZyYW1l
IHZpZXcncyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNoZSwgd2UgZG9u
J3Qgd2FudCB0byB1cGRhdGUgb3VyCisgICAgICAgIC8vIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0
aW9uLiBKdXN0IGxldCB0aGUgRnJhbWVWaWV3IHRoaW5rIHRoYXQgd2UgZGlkLgorICAgICAgICB1
cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5p
blByb2dyYW1tYXRpY1Njcm9sbCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7CisgICAgaWYgKCFzdGF0ZU5vZGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7
CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcq
LCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChtX3Njcm9sbGlu
Z1RyZWUtPndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgm
U2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudCwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB3
aGVlbEV2ZW50KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYzo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBv
c2l0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3Bh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsaW5nVHJlZS0+bWFp
bkZyYW1lU2Nyb2xsUG9zaXRpb24oKTsKKworICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOworICAgIGZyYW1lVmlldy0+bm90aWZ5U2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKHNjcm9sbFBvc2l0aW9uKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAg
ICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9u
KCkpOworfQorCitTY3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIEFTU0VS
VChzY3JvbGxMYXllcklEKTsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogZXhp
c3RpbmdOb2RlID0gc3RhdGVOb2RlRm9ySUQoc2Nyb2xsTGF5ZXJJRCk7CisgICAgaWYgKGV4aXN0
aW5nTm9kZSAmJiBleGlzdGluZ05vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0
ZU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbExheWVySUQ7CisKKyAgICBjbGVhclN0YXRl
VHJlZSgpOworCisgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24gd2ls
bCBoYXZlIHRvIHRha2UgYSBwYXJlbnQgSUQgc28gdGhhdCBpdCBjYW4KKyAgICAvLyBhcHBlbmQg
dGhlIG5vZGUgaW4gdGhlIGFwcHJvcHJpYXRlIHNwb3QgaW4gdGhlIHN0YXRlIHRyZWUuIEZvciBu
b3cgd2UgYWx3YXlzIGFzc3VtZQorICAgIC8vIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZS4KKyAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOworICAgIG1fc3Rh
dGVOb2RlTWFwLnNldChzY3JvbGxMYXllcklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0
YXRlTm9kZSgpKTsKKyAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Ny
b2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybjsK
KworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Ny
b2xsTGF5ZXJJRCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBj
aGlsZHJlbiwgYW5kIHRob3NlIGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFw
LgorICAgIC8vIFRoaXMgd2lsbCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVh
bGx5IGNoaWxkcmVuIGluIHRoZSB0cmVlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1v
dmVOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjbGVhclN0
YXRlVHJlZSgpCit7CisgICAgbV9zdGF0ZU5vZGVNYXAuY2xlYXIoKTsKKyAgICBpZiAoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9k
ZSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWM6OnN0YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQorewor
ICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIYXNoTWFw
PFNjcm9sbGluZ05vZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9z
dGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBub2RlID0gaXQtPnZhbHVlOworICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAg
ICBhdHRhY2hUb1N0YXRlVHJlZShmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciwgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIG5v
ZGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXROb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiByZWdpb24sIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihyZWdpb24pOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0
IFNjcm9sbFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2Rl
LT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkpOworICAgIG5vZGUtPnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xs
YmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
IG5vZGUtPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9s
bGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7CisgICAg
bm9kZS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxT
Y3JvbGxiYXJNb2RlKTsKKworICAgIG5vZGUtPnNldFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0
ZXJzLnNjcm9sbE9yaWdpbik7CisgICAgbm9kZS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFt
ZXRlcnMudmlld3BvcnRSZWN0KTsKKyAgICBub2RlLT5zZXRDb250ZW50c1NpemUoc2Nyb2xsUGFy
YW1ldGVycy5jb250ZW50c1NpemUpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRXaGVlbEV2ZW50SGFuZGxlckNv
dW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMg
cmVhc29ucykKK3sKKyAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciBpcyBsaWtl
bHkgdG8gYmUgb3V0LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3JtTGF5ZXIKKyAgICAvLyBhdCB0
aGlzIHBvaW50LiBTbyB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdlIHN3aXRjaCBiYWNrIHRvIG1h
aW4gdGhyZWFkIHNjcm9sbGluZworICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGxheWVyIHBvc2l0
aW9uaW5nIGJ1Z3MuCisgICAgaWYgKHJlYXNvbnMpCisgICAgICAgIHVwZGF0ZU1haW5GcmFtZVNj
cm9sbExheWVyUG9zaXRpb24oKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRl
Tm9kZSgpLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKHJl
YXNvbnMpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3
KGZyYW1lVmlldykpCisgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3
LT5zY3JvbGxQb3NpdGlvbigpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQoreworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJl
ZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjPiop
Cit7CisgICAgY29tbWl0VHJlZVN0YXRlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKTsKKworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0
ZVRyZWU+IHRyZWVTdGF0ZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5jb21taXQoKTsKKyAgICBT
Y3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1Ry
ZWVTdGF0ZSwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB0cmVlU3RhdGUucmVsZWFzZSgpKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9T
Q1JPTExJTkcpCg==
</data>
<flag name="commit-queue"
          id="180743"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168047</attachid>
            <date>2012-10-10 11:33:35 -0700</date>
            <delta_ts>2012-10-10 22:09:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>77192</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDg0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTA5ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIHJldmVydCBmbGluZyBkZWFjY2VsZXJhdGlvbiBwYXJhbWV0
ZXIgY2hhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwNzc3KQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3NTgsNyAr
MTc1OCw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAotICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMwNzc3KQor
KysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAt
NDA2OSw3ICs0MDY5LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTA1LDcgKzkwNSw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWlu
dHMuY3BwIFwKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgXAot
ICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAogICAgIHBh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwIFwKICAgICBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBcCiAg
ICAgcGFnZS9TZXR0aW5ncy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9u
IDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMwLDEwICsyNTMwLDggQEAgX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlMjJ1cGRh
dGVCYWNrRgogX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlRDFFdgogX19aTjdXZWJDb3JlMTVT
Y3JvbGxpbmdUaHJlYWQxNWRpc3BhdGNoQmFycmllckVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQog
X19aTjdXZWJDb3JlMTVTY3JvbGxpbmdUaHJlYWQ4ZGlzcGF0Y2hFUktOM1dURjhGdW5jdGlvbklG
dnZFRUUKLV9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3IyM2NvbW1pdFRyZWVTdGF0
ZUlmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3I0NHNldEZvcmNl
TWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzRWIKIF9fWk43V2ViQ29yZTRQYWdl
MjBzY3JvbGxpbmdDb29yZGluYXRvckV2Ci1fX1pOSzdXZWJDb3JlMjBTY3JvbGxpbmdDb29yZGlu
YXRvcjEzc2Nyb2xsaW5nVHJlZUV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzIyMiwxMSArMzIyMiwxMiBAQAogICAgICAgICAg
ICAgJ3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgnLAogICAgICAgICAgICAg
J3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCcsCisgICAgICAgICAgICAncGFn
ZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAnLAor
ICAgICAgICAgICAgJ3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFk
LmNwcCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgnLAog
ICAgICAgICAgICAgJ3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcCcsCiAgICAg
ICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaCcsCi0gICAgICAgICAg
ICAncGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5j
cHAnLAogICAgICAgICAgICAgJ3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcCcsCiAgICAg
ICAgICAgICAncGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcCcsCiAgICAgICAgICAgICAncGFn
ZS93aW4vRnJhbWVDR1dpbi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzI1OSwx
MCArMjcyNTksNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXHNjcm9sbGluZ1xTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFNlY3Vy
aXR5T3JpZ2luLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzA3Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwMjEsNyArMTAyMSw2IEBACiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJM
UmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKIAkJMzdGRDQyOTgx
MTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJl
ZURlcHRoTGltaXQuaCAqLzsgfTsKLQkJMzg2NkFGMzgxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzODY2QUYzNzE0RjFDMTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRp
bmF0b3JOb25lLmNwcCAqLzsgfTsKIAkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3Jh
Z2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzQUIwMkQyQjEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCAqLzsgfTsKIAkJM0FDMzY4MDAxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VU
cmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzMwMiw2
ICszMzAxLDcgQEAKIAkJOTNBMzhCNEIwRDBFNTgwODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMzhC
NEEwRDBFNTgwODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwICovOyB9OwogCQk5M0IyRDgx
NjBGOTkyMEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAv
KiBTdWRkZW5UZXJtaW5hdGlvbi5oICovOyB9OwogCQk5M0IyRDgxODBGOTkyMEVFMDA2QUU2QjIg
LyogU3VkZGVuVGVybWluYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRp
b24ubW0gKi87IH07CisJCTkzQjUwMjRDMTYyNEU0NDAwMDU3MDYwMiAvKiBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNTAyNEIxNjI0RTQ0MDAwNTcwNjAyIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgg
Ki87IH07CiAJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTUwQjBCQ0E1
QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRN
ZW51TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovOyB9OwogCQk5
M0I3MEQ2MzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2
OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovOyB9OwpAQCAtODE0MCw3ICs4MTQwLDYgQEAKIAkJMzdG
ODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRy
YWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVEZXB0aExpbWl0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxp
bmdDb29yZGluYXRvck5vbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJh
Y2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVHJh
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQzM2N0ZFMTJFRjdBMDkw
MDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA0OTgsNiArMTA0OTcsNyBAQAogCQk5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIg
LyogRWRpdG9yQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFZGl0b3JDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCMkQ4
MTUwRjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1p
bmF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0I1MDI0QjE2MjRFNDQw
MDA1NzA2MDIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4
dE1lbnVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29u
dGV4dE1lbnVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlF
QjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRE9NQmluZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDU3MCw3ICsxNDU3MCw2IEBACiAJCQkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMw
IC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFGNjJFRTQxNERBMjJBNzAwNDE1
NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkxQUY2MkVFNTE0REEyMkE3
MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKLQkJCQkzODY2QUYzNzE0RjFD
MTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCAqLywKIAkJCQk5MzFD
QkQwNjE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLywKIAkJCQk5
MzFDQkQwNzE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggKi8sCiAJCQkJ
OTMxQ0JEMDgxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAgKi8sCkBAIC0xNDU5MCw2ICsxNDU4OSw3IEBACiAJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTkzQjUwMjRCMTYyNEU0NDAwMDU3MDYwMiAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICov
LAogCQkJCTFBRjYyRUUzMTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5tbSAqLywKIAkJCQk5MzFDQkQxMjE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVO
b2RlTWFjLm1tICovLAogCQkJCTFBRjYyRjIzMTREQUZFOTEwMDQxNTU2QyAvKiBTY3JvbGxpbmdU
aHJlYWRNYWMubW0gKi8sCkBAIC0yNTU1OCw2ICsyNTU1OCw3IEBACiAJCQkJOTMxQ0JEMTExNjFB
NDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxOTU1QTg4MTYwRDE5OTIwMDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNCNTAyNEMxNjI0RTQ0MDAwNTcwNjAyIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MDk4LDcgKzI4MDk5
LDYgQEAKIAkJCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWlu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTcxNERBMjJBNzAwNDE1NTZDIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2MTREQTIy
QTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJGMjUxNERBRkU5RTAwNDE1NTZDIC8qIFNjcm9s
bGluZ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkYyNDE0REFGRTkxMDA0MTU1
NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQUREQTMx
NERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMzA3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDgg
KzM2LDYgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAt
NDUsNDYgKzQzLDQ0IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
Ci0jaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5o
IgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMo
cGFnZSkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0ocGFnZSkpOworI2VuZGlmCisK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKTsKK30K
KwogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2Up
CiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fZm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5ZXJQ
b3NpdGlvblVwZGF0ZXMoZmFsc2UpCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAg
ICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRlKCkpCi0g
ICAgLCBtX3Njcm9sbGluZ1RyZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQotICAgICwg
bV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQpCi0jZW5kaWYKLSAg
ICAsIG1fcHJpdmF0ZSgwKQogewogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdl
RGVzdHJveWVkKCkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KQogewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIG1fcGFnZSA9IDA7Ci0KLSNpZiBFTkFCTEUo
VEhSRUFERURfU0NST0xMSU5HKQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGlt
ZXIuc3RvcCgpOwotCi0gICAgLy8gSW52YWxpZGF0aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxs
IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KLSAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3Bh
dGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmludmFsaWRhdGUsIG1fc2Nyb2xsaW5nVHJlZS5yZWxl
YXNlKCkpKTsKLSNlbmRpZgorICAgIEFTU0VSVCghbV9wYWdlKTsKIH0KIAotI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCi1TY3JvbGxpbmdUcmVlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2Nyb2xsaW5nVHJlZSgpIGNvbnN0Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVz
dHJveWVkKCkKIHsKLSAgICBBU1NFUlQobV9zY3JvbGxpbmdUcmVlKTsKLSAgICByZXR1cm4gbV9z
Y3JvbGxpbmdUcmVlLmdldCgpOworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIG1fcGFnZSA9IDA7
CiB9Ci0jZW5kaWYKIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3Jv
bGxpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpIGNvbnN0CiB7CkBAIC0xMDYs
NyArMTAyLDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTYwogI2Vu
ZGlmCiB9CiAKLXN0YXRpYyBSZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEZy
YW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIGZyYW1lTG9jYXRpb24pCitSZWdpb24gU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSogZnJh
bWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKQogewogICAgIFJlZ2lvbiBub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbjsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CkBAIC0xNDgsNDggKzE0NCwxNiBAQCBzdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Ny
b2xsYWJsZVJlCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogfQogCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyog
ZnJhbWVWaWV3KQordW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50
V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBvZiB0aGUg
cGFnZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJyZW50bHkg
aW5jbHVkZXMKLSAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMs
IG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlm
IHRoZQotICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0
aGUgbWFpbiBmcmFtZS4KLSAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQo
KSk7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIC8vIEluIHRoZSBmdXR1
cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IG5vbi1mYXN0IHNjcm9s
bGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KLSAgICAvLyBqdXN0IHRoZSByb290IG5vZGUuIEJ1
dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8gdGhlIHJvb3QuCi0gICAg
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
LCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLSNlbHNlCi0gICAgc2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOwotI2VuZGlm
Ci0KLSAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Nyb2xsUGFyYW1ldGVy
czsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0gZnJh
bWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOwotICAgIHNjcm9sbFBhcmFtZXRl
cnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Ny
b2xsYmFyID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIo
KSAmJiBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKLSAgICBzY3Jv
bGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT5ob3Jpem9u
dGFsU2Nyb2xsYmFyTW9kZSgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKLQotICAgIHNjcm9s
bFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luID0gZnJhbWVWaWV3LT5zY3JvbGxPcmlnaW4oKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJh
bWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOwotICAgIHNjcm9sbFBhcmFtZXRl
cnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsKKyAgICB1bnNpZ25l
ZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gMDsKIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCi0gICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIH0K
IAotICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUp
OwotI2Vsc2UKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzKHNjcm9sbFBhcmFtZXRlcnMpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7CiB9CiAKIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZy
YW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjIyLDcgKzE4Niw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0ZpeGUKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0xheWVyKiBzY3Jv
bGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK0dyYXBoaWNzTGF5ZXIq
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcq
IGZyYW1lVmlldykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOwpAQCAtMjQ3LDY2ICsyMTEsOSBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290CiAgICAgaWYgKCFjb29yZGluYXRl
c1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47CiAKLSNp
ZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIC8vIElmIHRoZSByb290IGxheWVyIGRv
ZXMgbm90IGhhdmUgYSBTY3JvbGxpbmdTdGF0ZU5vZGUsIHRoZW4gd2Ugc2hvdWxkIGNyZWF0ZSBv
bmUuCi0gICAgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwotICAg
IEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLSNlbmRpZgot
CiAgICAgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChmcmFtZVZpZXcpOwogICAgIHJlY29tcHV0ZVdo
ZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRhdGVT
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgCi0jaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Ny
b2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3
LT5zY3JvbGxMYXllcklEKCkpKTsKLSNlbHNlCi0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5
ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIGlmICghY29vcmRpbmF0ZXNT
Y3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBpZiAoZnJhbWVWaWV3LT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAgIC8vIElmIHRoaXMgZnJh
bWUgdmlldydzIGRvY3VtZW50IGlzIGJlaW5nIHB1dCBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3ZSBk
b24ndCB3YW50IHRvIHVwZGF0ZSBvdXIKLSAgICAgICAgLy8gbWFpbiBmcmFtZSBzY3JvbGwgcG9z
aXRpb24uIEp1c3QgbGV0IHRoZSBGcmFtZVZpZXcgdGhpbmsgdGhhdCB3ZSBkaWQuCi0gICAgICAg
IHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXct
PmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZSA9IHN0YXRlTm9kZUZv
cklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBpZiAoIXN0YXRlTm9kZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGVOb2RlLT5zZXRSZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRpY1Njcm9sbCgp
KTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotICAgIHJldHVybiB0cnVlOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsUG9zaXRpb24pOwotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50
KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0jaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBpZiAobV9zY3JvbGxpbmdUcmVlLT53aWxsV2hl
ZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6
OmhhbmRsZVdoZWVsRXZlbnQsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgd2hlZWxFdmVudCkpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHByb2dyYW1t
YXRpY1Njcm9sbCkKQEAgLTMzMCw0OCArMjM3LDYgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6dXBkYXRlTWFpbkZyYQogICAgIGZyYW1lVmlldy0+c2V0SW5Qcm9ncmFtbWF0aWNTY3JvbGwo
b2xkUHJvZ3JhbW1hdGljU2Nyb2xsKTsKIH0KIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXll
clBvc2l0aW9uKCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBv
c2l0aW9uKCkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0aW9uKCkK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShUSFJFQURFRF9T
Q1JPTExJTkcpCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbGluZ1RyZWUtPm1haW5G
cmFtZVNjcm9sbFBvc2l0aW9uKCk7Ci0KLSAgICBmcmFtZVZpZXctPnNldENvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAgICBmcmFtZVZpZXctPm5vdGlmeVNjcm9sbFBv
c2l0aW9uQ2hhbmdlZChzY3JvbGxQb3NpdGlvbik7Ci0gICAgZnJhbWVWaWV3LT5zZXRDb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKLQotICAgIGlmIChHcmFwaGljc0xheWVy
KiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAg
ICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigp
KTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0p
ICYmIE9TKERBUldJTikpCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2
ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiB7CkBAIC0zODgsMjUgKzI1
Myw2IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmhhbmRsZVdoZWVsRXYKIH0KICNlbmRp
ZgogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIHVuc2lnbmVk
IHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgd2hl
ZWxFdmVudEhhbmRsZXJDb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+d2hlZWxFdmVudEhhbmRs
ZXJDb3VudCgpOwotICAgIH0KLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVW
aWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQsIG5vZGUpOwotI2Vsc2UKLSAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQpOwotICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcpOwotI2VuZGlmCi19
Ci0KIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZy
YW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIGNvbnN0IEZyYW1lVmlldzo6Vmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdFNldCogdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgPSBmcmFtZVZpZXct
PnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCk7CkBAIC00NjMsMTU5ICszMDksNCBAQCBTY3Jv
bGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVuCiAgICAgcmV0dXJuIHVuaXF1ZVNj
cm9sbExheWVySUQrKzsKIH0KIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi1TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdGF0ZU5vZGVG
b3JJRChTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsKLSAgICBpZiAoIXNjcm9sbExh
eWVySUQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQs
IFNjcm9sbGluZ1N0YXRlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVOb2RlTWFw
LmZpbmQoc2Nyb2xsTGF5ZXJJRCk7Ci0gICAgaWYgKGl0ID09IG1fc3RhdGVOb2RlTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IGl0
LT52YWx1ZTsKLSAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7
Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0
ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCi17Ci0gICAgQVNTRVJUKHNjcm9s
bExheWVySUQpOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05v
ZGUgPSBzdGF0ZU5vZGVGb3JJRChzY3JvbGxMYXllcklEKTsKLSAgICBpZiAoZXhpc3RpbmdOb2Rl
ICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
KQotICAgICAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsKLQotICAgIGNsZWFyU3RhdGVUcmVlKCk7
Ci0KLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUg
dG8gdGFrZSBhIHBhcmVudCBJRCBzbyB0aGF0IGl0IGNhbgotICAgIC8vIGFwcGVuZCB0aGUgbm9k
ZSBpbiB0aGUgYXBwcm9wcmlhdGUgc3BvdCBpbiB0aGUgc3RhdGUgdHJlZS4gRm9yIG5vdyB3ZSBh
bHdheXMgYXNzdW1lCi0gICAgLy8gdGhpcyBpcyB0aGUgcm9vdCBub2RlLgotICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5zZXRSb290U3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6Y3JlYXRlKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLmdldCgpKSk7Ci0gICAgbV9zdGF0ZU5vZGVN
YXAuc2V0KHNjcm9sbExheWVySUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2Rl
KCkpOwotICAgIHJldHVybiBzY3JvbGxMYXllcklEOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklE
KQotewotICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Ny
b2xsaW5nU3RhdGVOb2RlKiBub2RlID0gbV9zdGF0ZU5vZGVNYXAudGFrZShzY3JvbGxMYXllcklE
KTsKLQotICAgIC8vIEZJWE1FOiByZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBh
bmQgdGhvc2UgY2hpbGRyZW4gbWlnaHQgc3RpbGwgYmUgaW4gdGhlIEhhc2hNYXAuCi0gICAgLy8g
VGhpcyB3aWxsIGJlIGEgYmlnIHByb2JsZW0gb25jZSB0aGVyZSBhcmUgYWN0dWFsbHkgY2hpbGRy
ZW4gaW4gdGhlIHRyZWUuCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9k
ZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKLXsK
LSAgICBtX3N0YXRlTm9kZU1hcC5jbGVhcigpOwotICAgIGlmIChTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqIG5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQot
ICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKLX0KLQotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhG
cmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICBhdHRhY2hUb1N0YXRlVHJlZShmcmFtZVZpZXct
PnNjcm9sbExheWVySUQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciwgU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsK
LSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiBy
ZWdpb24sIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5z
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOwotICAgIHNjaGVkdWxlVHJlZVN0YXRl
Q29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFt
ZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5zZXRIb3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5KTsKLSAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG5vZGUtPnNldEhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIpOwotICAgIG5vZGUtPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihz
Y3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgbm9kZS0+
c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZSk7Ci0gICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBh
cmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlKTsKLQotICAgIG5vZGUtPnNldFNjcm9sbE9y
aWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbik7Ci0gICAgbm9kZS0+c2V0Vmlld3Bv
cnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKLSAgICBub2RlLT5zZXRDb250
ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUpOwotICAgIHNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Ny
b2xsaW5nUmVhc29ucyByZWFzb25zKQotewotICAgIC8vIFRoZSBGcmFtZVZpZXcncyBHcmFwaGlj
c0xheWVyIGlzIGxpa2VseSB0byBiZSBvdXQtb2Ytc3luY2ggd2l0aCB0aGUgUGxhdGZvcm1MYXll
cgotICAgIC8vIGF0IHRoaXMgcG9pbnQuIFNvIHdlJ2xsIHVwZGF0ZSBpdCBiZWZvcmUgd2Ugc3dp
dGNoIGJhY2sgdG8gbWFpbiB0aHJlYWQgc2Nyb2xsaW5nCi0gICAgLy8gaW4gb3JkZXIgdG8gYXZv
aWQgbGF5ZXIgcG9zaXRpb25pbmcgYnVncy4KLSAgICBpZiAocmVhc29ucykKLSAgICAgICAgdXBk
YXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQocmVhc29ucyk7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0K
LQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQot
ewotICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0No
YW5nZWRQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlQ29tbWl0dGVyVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVy
PFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiopCi17Ci0gICAgY29tbWl0VHJlZVN0YXRlKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkKLXsK
LSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjb21taXRUcmVlU3RhdGUoKTsKLSAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpOwotCi0gICAgT3duUHRyPFNjcm9sbGluZ1N0
YXRlVHJlZT4gdHJlZVN0YXRlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNvbW1pdCgpOwotICAg
IFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3
VHJlZVN0YXRlLCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNlKCkpKTsK
LX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5
ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBo
aWNzTGF5ZXIqLCBib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3Jh
cGhpY3NMYXllciosIGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5n
ZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCi19Ci0jZW5kaWYgLy8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTMwNzgzKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYg
dW5zaWduZWQgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnM7CiB0eXBlZGVmIHVpbnQ2NF90IFNj
cm9sbGluZ05vZGVJRDsKIAorY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBH
cmFwaGljc0xheWVyOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlZ2lvbjsKIGNsYXNzIFNjcm9sbGFi
bGVBcmVhOwotY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOwogY2xhc3MgU2Nyb2xs
aW5nU3RhdGVOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3Mg
U2Nyb2xsaW5nU3RhdGVUcmVlOwpAQCAtNjUsMjAgKzY1LDIxIEBAIGNsYXNzIFNjcm9sbGluZ1Ry
ZWU7CiBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTY3JvbGxpbmdDb29yZGluYXRvcj4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSopOwotICAgIH5TY3JvbGxpbmdD
b29yZGluYXRvcigpOworICAgIHZpcnR1YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAKLSAg
ICB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgp
OwogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBTY3JvbGxpbmdUcmVlKiBz
Y3JvbGxpbmdUcmVlKCkgY29uc3Q7Ci0gICAgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgp
OworICAgIHZpcnR1YWwgU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlmTmVl
ZGVkKCkgeyB9CisKICAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNjcm9sbGluZyBjb29yZGlu
YXRvciBoYW5kbGVzIHNjcm9sbGluZyBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcuCiAgICAgYm9v
bCBjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhGcmFtZVZpZXcqKSBjb25zdDsKIAog
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGdpdmVuIGZyYW1lIHZpZXcgaGFz
IGJlZW4gbGFpZCBvdXQuCi0gICAgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmll
dyopOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyop
IHsgfQogCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBhIHdoZWVsIGV2ZW50IGhh
bmRsZXIgaXMgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGUgCiAgICAgLy8gZnJhbWUgdmlldydzIHVu
ZGVybHlpbmcgZG9jdW1lbnQuCkBAIC05MSwyOSArOTIsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
ZnJhbWVWaWV3Rml4ZWRPYmplY3RzRGlkQ2hhbmdlKEZyYW1lVmlldyopOwogCiAgICAgLy8gU2hv
dWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1l
IHZpZXcgY2hhbmdlcy4KLSAgICB2b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFt
ZVZpZXcqKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250
YWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAg
IHZvaWQgZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmll
dyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcik7Ci0KLSAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgbGF5ZXIgZm9y
IHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdWZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIpOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0
aGUgc2Nyb2xsYWJsZSBsYXllciBmb3IgdGhlIGdpdmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCi0g
ICAgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVh
KiwgR3JhcGhpY3NMYXllciopOwotCi0gICAgLy8gUmVxdWVzdHMgdGhhdCB0aGUgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIHVwZGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZnJh
bWUgdmlldy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGl0IG1lYW5zIHRoYXQgdGhl
Ci0gICAgLy8gcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5LiBJZiBpdCBy
ZXR1cm5zIGZhbHNlLCB0aGUgY2FsbGVyIHNob3VsZCB1cGRhdGUgdGhlIHNjcm9sbGluZyBwb3Np
dGlvbiBpdHNlbGYuCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVW
aWV3KiwgY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIEhhbmRsZSB0aGUgd2hlZWwgZXZlbnQg
b24gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFJldHVybnMgd2hldGhlciB0aGUgZXZlbnQgd2FzIGhh
bmRsZWQgb3Igbm90LgotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcqLCBjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExh
eWVyRGlkQ2hhbmdlKEZyYW1lVmlldyopOwogCi0gICAgLy8gRGlzcGF0Y2hlZCBieSB0aGUgc2Ny
b2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5n
ZXMuCi0gICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYsIGJvb2wgcHJvZ3JhbW1hdGljU2Nyb2xsKTsKLQotICAgIC8vIERpc3BhdGNoZWQgYnkgdGhl
IHNjcm9sbGluZyB0cmVlIHdoZW5ldmVyIHRoZSBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBj
aGFuZ2VzIGFuZCB0aGUgc2Nyb2xsIGxheWVyIHBvc2l0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQg
YXMgd2VsbC4KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xs
TGF5ZXJQb3NpdGlvbigpOworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNv
b3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgor
ICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYg
UExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiAgICAg
Ly8gRGlzcGF0Y2hlZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgZHVyaW5nIGhhbmRsZVdoZWVsRXZl
bnQuIFRoaXMgaXMgcmVxdWlyZWQgYXMgbG9uZyBhcyBzY3JvbGxiYXJzIGFyZSBwYWludGVkIG9u
IHRoZSBtYWluIHRocmVhZC4KQEAgLTEyMywxNSArMTA2LDIwIEBAIHB1YmxpYzoKICAgICAvLyBG
b3JjZSBhbGwgc2Nyb2xsIGxheWVyIHBvc2l0aW9uIHVwZGF0ZXMgdG8gaGFwcGVuIG9uIHRoZSBt
YWluIHRocmVhZC4KICAgICB2b2lkIHNldEZvcmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRp
b25VcGRhdGVzKGJvb2wpOwogCi0gICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcg
Y29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWly
Ci0gICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCi0gICAgYm9vbCBzdXBwb3J0c0Zp
eGVkUG9zaXRpb25MYXllcnMoKSBjb25zdDsKKyAgICAvLyBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9u
cyBhcmUgY3VycmVudGx5IHVuaXF1ZSB0byB0aGUgdGhyZWFkZWQgc2Nyb2xsaW5nIGFyY2hpdGVj
dHVyZSwgYW5kIHRoZXkgYXJlCisgICAgLy8gdGhlaXIgbWVhbmluZ2Z1bCBpbXBsZW1lbnRhdGlv
bnMgYXJlIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLgorICAgIHZpcnR1YWwgYm9vbCByZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3KiwgY29uc3QgSW50UG9pbnQmKSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmll
dyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0
aW9uKCkgeyB9CisgICAgdmlydHVhbCBTY3JvbGxpbmdOb2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUo
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgeyByZXR1cm4gbm9kZUlEOyB9CisgICAgdmlydHVhbCB2
b2lkIGRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJTdGF0ZVRyZWUoKSB7IH0KIAotICAgIC8vIE1hcmsvdW5tYXJrIGEgbGF5ZXIg
YXMgYSBjb250YWluZXIgZm9yIGZpeGVkIHBvc2l0aW9uIGxheWVycy4KLSAgICB2b2lkIHNldExh
eWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29s
KTsKKyAgICAvLyBHZW5lcmF0ZWQgYSB1bmlxdWUgaWQgZm9yIHNjcm9sbCBsYXllcnMuCisgICAg
U2Nyb2xsaW5nTm9kZUlEIHVuaXF1ZVNjcm9sbExheWVySUQoKTsKIAotICAgIC8vIEF0dGFjaC9k
ZXRhY2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVy
LgotICAgIHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVy
KiwgYm9vbCk7CisgICAgLy8gRGlzcGF0Y2hlZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2
ZXIgdGhlIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5nZXMuCisgICAgdm9pZCB1cGRh
dGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYsIGJvb2wgcHJvZ3JhbW1h
dGljU2Nyb2xsKTsKIAogICAgIGVudW0gTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbkZsYWdzIHsK
ICAgICAgICAgRm9yY2VkT25NYWluVGhyZWFkID0gMSA8PCAwLApAQCAtMTQxLDg0ICsxMjksMzEg
QEAgcHVibGljOgogICAgICAgICBJc0ltYWdlRG9jdW1lbnQgPSAxIDw8IDQKICAgICB9OwogCi0g
ICAgLy8gR2VuZXJhdGVzIGEgdW5pcXVlIGlkIHRvIGFzc29jaWF0ZSB3aXRoIGEgbGF5ZXIgdGhh
dCB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IGEgbm9kZSBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCi0g
ICAgU2Nyb2xsaW5nTm9kZUlEIHVuaXF1ZVNjcm9sbExheWVySUQoKTsKKyAgICAvLyBUaGVzZSB2
aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgY3VycmVudGx5IHVuaXF1ZSB0byBDaHJvbWl1bSdzIFdlYkxh
eWVyIGFwcHJvYWNoLiBUaGVpciBtZWFuaW5nZnVsCisgICAgLy8gaW1wbGVtZW50YXRpb25zIGFy
ZSBpbiBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLgorICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhp
Y3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJl
YSosIEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5
ZXIqLCBib29sKSB7IH0KIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBpbmRp
Y3RhZSB0aGF0IGEgbGF5ZXIgc2hvdWxkIGJlIChvciBzaG91bGQgbm90IGxvbmdlciBiZSkgcmVw
cmVzZW50ZWQgYnkgYSBub2RlCi0gICAgLy8gaW4gdGhlIHNjcm9sbGluZyB0cmVlLgotICAgIFNj
cm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOwotICAgIHZv
aWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOworcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIAotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gd2lwZXMgb3V0IHRoZSBjdXJyZW50IHRyZWUuCi0gICAgdm9pZCBjbGVhclN0YXRlVHJl
ZSgpOworICAgIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24oRnJhbWUqLCBj
b25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbik7CisgICAgdW5zaWduZWQgY29tcHV0ZUN1cnJl
bnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5
ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAKLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOworICAgIFBhZ2UqIG1fcGFnZTsKIAotICAgIHZvaWQg
ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKLSAgICBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCk7Citw
cml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50
Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRV
cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdS
ZWFzb25zKSB7IH0KIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxheWVyRml4ZWRPYmplY3Rz
KEZyYW1lVmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgpOwogCi0gICAgc3RydWN0IFNjcm9sbFBhcmFtZXRlcnMgewotICAg
ICAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OwotICAgICAg
ICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKLQotICAgICAgICBi
b29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgICAgICBib29sIGhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgICAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxT
Y3JvbGxiYXJNb2RlOwotICAgICAgICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZTsKLQotICAgICAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW47Ci0KLSAgICAgICAgSW50UmVjdCB2
aWV3cG9ydFJlY3Q7Ci0gICAgICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIH07Ci0KLSAg
ICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIG9ubHkgYnkgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IKLSAgICAvLyBub3cgdXNlcyBu
ZXcgdmVyc2lvbnM6IHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKCksIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRGb3JOb2RlKCksIGV0Yy4KLSAgICAvLyBUbyByZXNvbHZlIHRoaXMgYW5kIGFs
bCBvZiB0aGUgaWYtZGVmcyBpbiB0aGlzIGNsYXNzLCB3ZSBzaG91bGQgbWFrZSBTY3JvbGxpbmdD
b29yZGluYXRvcgotICAgIC8vIGp1c3QgYmUgYSB0eXBlZGVmIHRoYXQgZGVmaW5lcyBTY3JvbGxp
bmdDb29yZGluYXRvck1hYyB0byBiZSBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIHNhbWUKLSAg
ICAvLyBmb3IgQ2hyb21pdW0gYW5kIG90aGVyIHBsYXRmb3Jtcy4gQW55IHNoYXJlZCBmdW5jdGlv
bmFsaXR5IGNhbiBiZSBpbiBzb21ldGhpbmcgY2FsbGVkIAotICAgIC8vIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQmFzZSB3aGljaCBhbGwgb2YgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyB3aWxs
IGluaGVyaXQgZnJvbS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTg3MDAKLSAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFy
YW1ldGVycyYpOwotICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7
Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKLSAg
ICB2b2lkIHNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKLQotI2lmIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCi0gICAgdm9pZCBzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhpY3NM
YXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOwotICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSopOwotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFy
YW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwotICAgIHZvaWQgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSopOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVy
UG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwotCi0gICAg
dm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7Ci0KLSAgICBQYWdlKiBt
X3BhZ2U7Ci0KICAgICBib29sIG1fZm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5ZXJQb3NpdGlvblVw
ZGF0ZXM7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIHZvaWQgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKLQotICAgIHZvaWQgc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0
dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvcj4qKTsKLSAgICB2b2lkIGNv
bW1pdFRyZWVTdGF0ZSgpOwotCi0gICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3Jv
bGxpbmdTdGF0ZVRyZWU7Ci0gICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJl
ZTsKLSAgICBUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVD
b21taXR0ZXJUaW1lcjsKLQotICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdT
dGF0ZU5vZGUqPiBtX3N0YXRlTm9kZU1hcDsKLSNlbmRpZgotCi0gICAgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcml2YXRlKiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5v
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAJKHJldmlzaW9uIDEzMDc4MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUgewotfTsKLQotI2lmICFF
TkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkpOwotfQotCi1TY3JvbGxp
bmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKLXsKLSAgICBBU1NFUlQoIW1f
cGFnZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKikKLXsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxi
YXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopCi17
Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKGNvbnN0IFJlZ2lvbiYpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpCi17Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBv
cnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQ
b3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkKLXsKLX0KLQotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xh
eWVyKiwgYm9vbCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJs
ZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIq
KQotewotfQotCi1TY3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRv
U3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgp
Ci17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3KikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJikKLXsKLX0KLQot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNp
Z25lZCkKLXsKLX0KLQotI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkocmV2
aXNpb24gMTMwNzgzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0v
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgiCiAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtOTUsMzMgKzk1
LDMyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYlNjcm9sbGJhckxheWVyPiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXI7CiB9OwogCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCitTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKFBhZ2UqIHBhZ2UpCisg
ICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9wcml2YXRlKG5ldyBTY3Jv
bGxpbmdDb29yZGluYXRvclByaXZhdGUpCiB7Ci0gICAgUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5h
dG9yPiBjb29yZGluYXRvcihhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkp
KTsKLSAgICBjb29yZGluYXRvci0+bV9wcml2YXRlID0gbmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJpdmF0ZTsKLSAgICByZXR1cm4gY29vcmRpbmF0b3IucmVsZWFzZSgpOwogfQogCi1TY3JvbGxp
bmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKK1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06On5TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKCkKIHsKLSAgICBBU1NF
UlQoIW1fcGFnZSk7CiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotc3RhdGljIEdyYXBoaWNz
TGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZy
YW1lVmlldyopCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJWaWV3KQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT5zY3JvbGxMYXllcigpOwotI2Vsc2UKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZgorICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2FuJ3QgZG8gZmFzdCBzY3JvbGxpbmcg
Zm9yLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcworICAgIC8vIGFsbCBzY3JvbGxhYmxlIGFyZWFz
LCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4gV2UgbmVl
ZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCisgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQg
d2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgorICAgIFJlZ2lvbiBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1h
aW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKKyAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
aHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3
KQoreworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFu
Z2UoZnJhbWVWaWV3KTsKKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKTsKIH0KIAogc3RhdGljIFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5ZXJGb3JH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMTc0LDcgKzE3Myw3IEBAIHN0
YXRpYyBQYXNzT3duUHRyPFdlYlNjcm9sbGJhckxheWVyPiBjcmUKICAgICByZXR1cm4gc2Nyb2xs
YmFyTGF5ZXIucmVsZWFzZSgpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIpCiB7CiAgICAgaWYgKCFob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgfHwg
IWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE4Myw3ICsxODIsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdIb3JpCiAgICAgbV9wcml2YXRlLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoY3Jl
YXRlU2Nyb2xsYmFyTGF5ZXIoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIG1fcHJp
dmF0ZS0+c2Nyb2xsTGF5ZXIoKSwgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLCBmcmFtZVZpZXcp
KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciog
dmVydGljYWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bTo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZy
YW1lVmlldywgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcikKIHsKICAgICBp
ZiAoIXZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgfHwgIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJh
bWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MiwxMiArMTkxLDEyIEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnQKICAgICBtX3ByaXZhdGUt
PnNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoY3JlYXRlU2Nyb2xsYmFyTGF5ZXIoZnJhbWVWaWV3
LT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBtX3ByaXZhdGUtPnNjcm9sbExheWVyKCksIHZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXIsIGZyYW1lVmlldykpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciog
c2Nyb2xsTGF5ZXIpCiB7CiAgICAgbV9wcml2YXRlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXll
ciA/IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIoc2Nyb2xsTGF5ZXIpIDogMCk7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAg
ICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVm
b3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KICAgICBzZXRTY3JvbGxM
YXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkp
KTsKQEAgLTIxMCwxMiArMjA5LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9u
RmFzdFNjcgogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xs
UGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJikKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IQotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFu
ZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQg
d2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBn
ZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSBy
b290IG91cnNlbHZlcy4KICAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmll
dyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKQEAgLTIyMyw3ICsyMTcsNyBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50CiAgICAgICAgIG1fcHJpdmF0ZS0+
c2Nyb2xsTGF5ZXIoKS0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyh3aGVlbEV2ZW50SGFuZGxl
ckNvdW50ID4gMCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMgcmVhc29ucykKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0U2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xs
aW5nUmVhc29ucyByZWFzb25zKQogewogICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBh
IHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qg
b3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjMxLDI0ICsyMjUsMTkgQEAgdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYQogICAgICAgICBtX3ByaXZhdGUtPnNj
cm9sbExheWVyKCktPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChyZWFzb25zKTsKIH0KIAot
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXll
ciogbGF5ZXIsIGJvb2wgZW5hYmxlKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVy
KiBsYXllciwgYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5
ZXIgPSBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVyKGxheWVyKSkKICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoZW5hYmxl
KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250
YWluZXJMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewogICAgIGlmIChXZWJMYXllciog
c2Nyb2xsYWJsZUxheWVyID0gc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihsYXllcikp
CiAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyKGVuYWJs
ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xs
TGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBHcmFwaGljc0xh
eWVyKiBzY3JvbGxMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2Ny
b2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWEsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQogewogICAgIGlmICghc2Nyb2xsTGF5
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MiwxOSArMjUxLDEwIEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmUKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91
bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlc2Ugc3R1YnMgd2hlbiB3ZSByZXNvbHZlIHRoZSBpZi1k
ZWYgc291cCBpbiBTY3JvbGxpbmdDb29yZGluYXRvci4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05ODcwMAotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjphdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgaWQpCi17Ci0gICAgcmV0
dXJuIGlkOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVU
cmVlKFNjcm9sbGluZ05vZGVJRCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
Y2xlYXJTdGF0ZVRyZWUoKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpyZWNv
bXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVW
aWV3KQogeworICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcpOworICAgIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQoY29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCkpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKKyNkZWZp
bmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCisKKyNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJpdmF0ZTsKKworY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSA6
IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bSgpOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZl
ciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91dC4KKyAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBi
ZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3
IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6
b250YWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgor
ICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxl
ZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJh
bWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqKTsKKworICAgIC8v
IFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVk
IHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgorICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUg
c2Nyb2xsaW5nLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFz
IGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMuCisgICAgdmlydHVhbCB2b2lk
IHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIq
LCBib29sKTsKKworICAgIC8vIEF0dGFjaC9kZXRhY2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0
b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklz
Rml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIFNo
b3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNjcm9sbGFibGUgbGF5ZXIgZm9yIHRoZSBnaXZl
biBzY3JvbGwgYXJlYSBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNj
cm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopOworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50
Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFz
b25zKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZv
aWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgdm9pZCBz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsKKworICAgIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWNfaAor
I2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCisKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvck1hYyA6IHB1YmxpYyBT
Y3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMoUGFnZSopOworICAgIHZpcnR1YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOworCisgICAgdmlydHVhbCBT
Y3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCk7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5l
dmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgorICAgIHZpcnR1YWwg
dm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZp
ZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9y
aXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMu
CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENo
YW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
OworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xs
YmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwg
dm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyos
IEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpOworCisgICAgLy8gUmVxdWVz
dHMgdGhhdCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIHVwZGF0ZXMgdGhlIHNjcm9sbCBwb3Np
dGlvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy
dWUsIGl0IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIGFz
eW5jaHJvbm91c2x5LiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgY2FsbGVyIHNob3VsZCB1cGRh
dGUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpdHNlbGYuCisgICAgdmlydHVhbCBib29sIHJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOworCisg
ICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0
dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBvciBub3QuCisgICAgdmlydHVhbCBi
b29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7CisKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0
aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcyBhbmQgdGhlIHNjcm9sbCBsYXll
ciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwor
CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGluZGljdGFlIHRoYXQgYSBsYXll
ciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2VyIGJlKSByZXByZXNlbnRlZCBieSBhIG5v
ZGUKKyAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCisgICAgdmlydHVhbCBTY3JvbGxpbmdO
b2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOworCisgICAgLy8gVGhpcyBm
dW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJTdGF0ZVRyZWUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisKKyAgICB2b2lkIGVuc3VyZVJvb3RTdGF0ZU5vZGVG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOworCisgICAgc3RydWN0IFNjcm9sbFBh
cmFtZXRlcnMgeworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5OworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eTsKKworICAgICAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAg
ICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKKworICAgICAgICBTY3JvbGxiYXJN
b2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgICAgICBTY3JvbGxiYXJNb2RlIHZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZTsKKworICAgICAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW47CisKKyAg
ICAgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Q7CisgICAgICAgIEludFNpemUgY29udGVudHNTaXpl
OworICAgIH07CisKKyAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNj
cm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lk
IHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2Rl
Kik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVn
aW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CisKKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsK
KworICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKKworICAgIHZvaWQgc2Nyb2xs
aW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRv
ck1hYz4qKTsKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgpOworCisgICAgT3duUHRyPFNjcm9s
bGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CisgICAgUmVmUHRyPFNjcm9sbGlu
Z1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKKyAgICBUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvck1h
Yz4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKKworICAgIEhhc2hNYXA8U2Ny
b2xsaW5nTm9kZUlELCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBtX3N0YXRlTm9kZU1hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAxMzA3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDM3ICsyNywxMzMgQEAKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
CiAKLSNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdD
b29yZGluYXRvck1hYy5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCisjaW5j
bHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3Rh
dGVUcmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nVHJlZS5oIgorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLSNpbXBvcnQgIkZy
YW1lVmlldy5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiU2Nyb2xsaW5nVGhyZWFkLmgi
Ci0jaW1wb3J0ICJTY3JvbGxpbmdUcmVlLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdTdGF0ZVRyZWUu
aCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8d3RmL0Z1bmN0
aW9uYWwuaD4KLSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cml2YXRlIHsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyhQYWdlKiBwYWdlKQorICAgIDogU2Nyb2xsaW5nQ29v
cmRpbmF0b3IocGFnZSkKKyAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRl
VHJlZTo6Y3JlYXRlKCkpCisgICAgLCBtX3Njcm9sbGluZ1RyZWUoU2Nyb2xsaW5nVHJlZTo6Y3Jl
YXRlKHRoaXMpKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcih0aGlz
LCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRp
bWVyRmlyZWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRv
cihwYWdlKSk7CiB9CiAKLVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6On5TY3JvbGxpbmdDb29yZGluYXRvck1hYygp
CiB7Ci0gICAgQVNTRVJUKCFtX3BhZ2UpOwogICAgIEFTU0VSVCghbV9zY3JvbGxpbmdUcmVlKTsK
IH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKikK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnBhZ2VEZXN0cm95ZWQoKQoreworICAgIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkKCk7CisKKyAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKKworICAgIC8vIEludmFsaWRhdGluZyB0aGUg
c2Nyb2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhl
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3JvbGxpbmdUcmVlIG9iamVjdHMuCisgICAgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBt
X3Njcm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7Cit9CisKK1Njcm9sbGluZ1RyZWUqIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdUcmVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9z
Y3JvbGxpbmdUcmVlKTsKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLmdldCgpOworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCit7
CisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWM6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKwor
ICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBvZiB0aGUgcGFnZSB0aGF0IHdlIGNhbid0IGRvIGZh
c3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJyZW50bHkgaW5jbHVkZXMKKyAgICAvLyBhbGwgc2Ny
b2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3Qg
Ym94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRoZQorICAgIC8vIGZyYW1lIHZpZXcg
d2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KKyAgICBSZWdp
b24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdp
b24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7CisKKyAgICAvLyBJbiB0aGUgZnV0
dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3Jv
bGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCisgICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBC
dXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgorICAg
IHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
biwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisKKyAgICBpZiAoIWNv
b3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZv
cklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybjsKKworICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Nyb2xsUGFyYW1ldGVyczsKKyAgICBz
Y3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT5o
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHko
KTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0g
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRW
ZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiBmcmFt
ZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKKyAgICBzY3JvbGxQYXJhbWV0
ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlID0g
ZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKKworICAgIHNjcm9sbFBhcmFtZXRl
cnMuc2Nyb2xsT3JpZ2luID0gZnJhbWVWaWV3LT5zY3JvbGxPcmlnaW4oKTsKKyAgICBzY3JvbGxQ
YXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT52
aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuY29udGVu
dHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsKKworICAgIHNldFNjcm9sbFBhcmFt
ZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUpOworfQorCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yTm9kZShjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSwgbm9k
ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAgaWYgKCFjb29yZGluYXRlc1Njcm9s
bGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2RlLCB0aGVu
IHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0
ZU5vZGUoKSk7CisKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVy
RGlkQ2hhbmdlKGZyYW1lVmlldyk7CisKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCkpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJh
bWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBHcmFwaGljc0xheWVyKikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVChtX3BhZ2UpOwpAQCAtNjgsNyArMTY0LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZnJhbWVWaWV3SG9yaQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKQEAgLTc5LDYgKzE3NSwyMDIgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydAogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZy
YW1lVmlldykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmcmFtZVZpZXctPmZy
YW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBm
cmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGludG8gdGhlIHBhZ2UgY2FjaGUsIHdl
IGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgorICAgICAgICAvLyBtYWluIGZyYW1lIHNjcm9sbCBw
b3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4KKyAgICAg
ICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmll
dy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICghc3RhdGVOb2RlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZU5vZGUtPnNldFJlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xs
KCkpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVW
aWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAobV9zY3Jv
bGxpbmdUcmVlLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJp
bmQoJlNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQsIG1fc2Nyb2xsaW5nVHJlZS5nZXQo
KSwgd2hlZWxFdmVudCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5
ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICgh
bV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbGluZ1RyZWUt
Pm1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBmcmFtZVZpZXctPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBmcmFtZVZpZXctPm5vdGlmeVNj
cm9sbFBvc2l0aW9uQ2hhbmdlZChzY3JvbGxQb3NpdGlvbik7CisgICAgZnJhbWVWaWV3LT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKworICAgIGlmIChHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
CisgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjph
dHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBB
U1NFUlQoc2Nyb2xsTGF5ZXJJRCk7CisKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
IGV4aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOworICAgIGlmIChl
eGlzdGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOworCisgICAgY2xlYXJT
dGF0ZVRyZWUoKTsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCisgICAgLy8gYXBw
ZW5kIHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0cmVlLiBG
b3Igbm93IHdlIGFsd2F5cyBhc3N1bWUKKyAgICAvLyB0aGlzIGlzIHRoZSByb290IG5vZGUuCisg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsKKyAgICBt
X3N0YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKSk7CisgICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlE
IHNjcm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtl
KHNjcm9sbExheWVySUQpOworCisgICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ry
b3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFz
aE1hcC4KKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBh
Y3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y2xl
YXJTdGF0ZVRyZWUoKQoreworICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7CisgICAgaWYgKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2Rl
KG5vZGUpOworfQorCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkK
K3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFz
aE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9kZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3RhdGVOb2RlTWFwLmZpbmQoc2Nyb2xsTGF5ZXJJRCk7CisgICAgaWYgKGl0ID09
IG1fc3RhdGVOb2RlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFNjcm9sbGlu
Z1N0YXRlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7
CisgICAgYXR0YWNoVG9TdGF0ZVRyZWUoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAg
ICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgc2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24ocmVnaW9uKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShj
b25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAg
bm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVy
cy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhvcml6b250YWxT
Y3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOwor
ICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSk7CisKKyAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFy
YW1ldGVycy5zY3JvbGxPcmlnaW4pOworICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQ
YXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNTaXplKHNjcm9s
bFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50LCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFz
b25zIHJlYXNvbnMpCit7CisgICAgLy8gVGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgaXMg
bGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0Zm9ybUxheWVyCisgICAgLy8g
YXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9yZSB3ZSBzd2l0Y2ggYmFjayB0
byBtYWluIHRocmVhZCBzY3JvbGxpbmcKKyAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBsYXllciBw
b3NpdGlvbmluZyBidWdzLgorICAgIGlmIChyZWFzb25zKQorICAgICAgICB1cGRhdGVNYWluRnJh
bWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChyZWFzb25zKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9u
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1l
VmlldyhmcmFtZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1l
Vmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKK3sKKyAgICBpZiAobV9zY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsaW5n
U3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvck1h
Yz4qKQoreworICAgIGNvbW1pdFRyZWVTdGF0ZSgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUoKQoreworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7CisKKyAgICBPd25QdHI8U2Nyb2xsaW5n
U3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y29tbWl0KCk7Cisg
ICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpjb21taXRO
ZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0YXRlLnJlbGVhc2UoKSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQo=
</data>
<flag name="commit-queue"
          id="180932"
          type_id="3"
          status="-"
          setter="peter+ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168142</attachid>
            <date>2012-10-10 22:09:59 -0700</date>
            <delta_ts>2012-10-11 10:21:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-5.txt</filename>
            <type>text/plain</type>
            <size>77819</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0xMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTEwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5ODQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc2MCw3ICsxNzYwLDYgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
CiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAogCiAgICAgcGxhdGZvcm0vQXJl
bmEuY3BwCiAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MDczLDcgKzQwNzMsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC05MDcsNyArOTA3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TY3JlZW4uY3BwIFwK
ICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgXAogICAgIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBcCi0gICAgcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAgICAgcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAgXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNw
cCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1MzQsMTAgKzI1MzQs
OCBAQCBfX1pON1dlYkNvcmUxM1Njcm9sbGluZ1RyZWUyMnVwZGF0ZUJhY2tGCiBfX1pON1dlYkNv
cmUxM1Njcm9sbGluZ1RyZWVEMUV2CiBfX1pON1dlYkNvcmUxNVNjcm9sbGluZ1RocmVhZDE1ZGlz
cGF0Y2hCYXJyaWVyRVJLTjNXVEY4RnVuY3Rpb25JRnZ2RUVFCiBfX1pON1dlYkNvcmUxNVNjcm9s
bGluZ1RocmVhZDhkaXNwYXRjaEVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQotX19aTjdXZWJDb3Jl
MjBTY3JvbGxpbmdDb29yZGluYXRvcjIzY29tbWl0VHJlZVN0YXRlSWZOZWVkZWRFdgogX19aTjdX
ZWJDb3JlMjBTY3JvbGxpbmdDb29yZGluYXRvcjQ0c2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXNFYgogX19aTjdXZWJDb3JlNFBhZ2UyMHNjcm9sbGluZ0Nvb3JkaW5h
dG9yRXYKLV9fWk5LN1dlYkNvcmUyMFNjcm9sbGluZ0Nvb3JkaW5hdG9yMTNzY3JvbGxpbmdUcmVl
RXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gMTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjI1LDExICszMjI1LDEyIEBACiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oJywKKyAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1
bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oJywKICAgICAg
ICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwJywKICAgICAgICAgICAg
ICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oJywKLSAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9GcmFtZUNHV2luLmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24g
MTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgJy4uL3BhZ2UvYW5pbWF0aW9uJywK
ICAgICAgICcuLi9wYWdlL2Nocm9taXVtJywKICAgICAgICcuLi9wYWdlL3Njcm9sbGluZycsCisg
ICAgICAnLi4vcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtJywK
ICAgICAgICcuLi9wbGF0Zm9ybS9hbmltYXRpb24nLAogICAgICAgJy4uL3BsYXRmb3JtL2F1ZGlv
JywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyNTksMTAgKzI3MjU5LDYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxzY3JvbGxp
bmdcU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxTZWN1cml0eU9yaWdpbi5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIx
LDcgKzEwMjEsNiBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJD
b3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBU
cmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07
Ci0JCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzg2NkFG
MzcxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi87IH07
CiAJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAw
RkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87IH07CiAJ
CTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0Ew
OTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzMTcsNiArMzMxNiw3IEBACiAJCTkzQjcw
RDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0Njgg
LyogU2NyaXB0Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzQjc3QTM4MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3
N0EzNzBBREQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzQkE1OUIyMEYyQUE1RkUwMDhF
OEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JBNTlCMTBGMkFBNUZFMDA4RThFOTkgLyogSlNDREFU
QVNlY3Rpb25DdXN0b20uY3BwICovOyB9OworCQk5M0JGMzNERjE2MjY4NDIzMDA4MDhFQTAgLyog
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQkYzM0RFMTYyNjg0MjMwMDgwOEVBMCAvKiBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5oICovOyB9OwogCQk5M0MwOUE1MzBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRI
YW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0MwOUE1MjBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNDMDlBN0YwQjA2NEVFRjAwNUFC
RDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQzA5QTdFMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJN
YWMubW0gKi87IH07CiAJCTkzQzA5QTgxMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDMDlB
ODAwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5jcHAgKi87IH07CkBAIC04MTQ2LDcg
KzgxNDYsNiBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVS
TFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRF
RDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJl
ZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZURlcHRo
TGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzg2NkFGMzcxNEYxQzE3MTAw
MjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFn
ZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJC
Njk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUxOSw2ICsxMDUxOCw3IEBACiAJCTkzQjcwRDU0
MDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQjc3QTM3MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyVHlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCQTU5QjEwRjJBQTVGRTAwOEU4RTk5IC8qIEpT
Q0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNCRjMzREUxNjI2ODQyMzAwODA4RUEwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzA5QTUyMEIwNjREQjMwMDVBQkQ0
RCAvKiBFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZl
bnRIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzA5QTdFMEIwNjRF
RUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBFdmVudEhhbmRsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQzA5QTgwMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRIYW5kbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTgyLDcgKzE0NTgyLDYgQEAKIAkJCQkwRjYw
NUFFQjE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLywKIAkJCQkx
QUY2MkVFNDE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwICovLAog
CQkJCTFBRjYyRUU1MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oICov
LAotCQkJCTM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5v
bmUuY3BwICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdT
dGF0ZU5vZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NjAyLDYgKzE0NjAxLDcgQEAKIAkJMUFG
NjJFRTIxNERBMjJBNzAwNDE1NTZDIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJOTNCRjMzREUxNjI2ODQyMzAwODA4RUEwIC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLmggKi8sCiAJCQkJMUFGNjJFRTMxNERBMjJBNzAwNDE1NTZDIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovLAogCQkJCTkzMUNCRDEyMTYxQTQ0RjgwMEU0Qzg3
NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFGNjJGMjMxNERBRkU5MTAw
NDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKQEAgLTI1NTc5LDYgKzI1NTc5LDcg
QEAKIAkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCQzg0MzE2MUNGMDVDMDA0RDUy
RjQgLyogUmVzb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQkYzM0RGMTYyNjg0
MjMwMDgwOEVBMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yODEyMCw3ICsyODEyMSw2IEBACiAJCQkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNj
cm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU3MTREQTIy
QTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUY2MkVFNjE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0g
aW4gU291cmNlcyAqLywKLQkJCQkzODY2QUYzODE0RjFDMTcxMDAyODNENjggLyogU2Nyb2xsaW5n
Q29vcmRpbmF0b3JOb25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRjI1MTREQUZFOUUw
MDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJG
MjQxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTQ1LDQ2ICs0Myw0NCBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQotI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgotI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWUuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCIK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFz
c1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZShQYWdlKiBwYWdlKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjKHBhZ2UpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKHBh
Z2UpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGlu
YXRvcihwYWdlKSk7Cit9CisKIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGlu
YXRvcihQYWdlKiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2ZvcmNlTWFpblRo
cmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZhbHNlKQotI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCi0gICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRy
ZWU6OmNyZWF0ZSgpKQotICAgICwgbV9zY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWU6OmNyZWF0
ZSh0aGlzKSkKLSAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIodGhpcywg
JlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZp
cmVkKQotI2VuZGlmCi0gICAgLCBtX3ByaXZhdGUoMCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCitTY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkKIHsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBtX3BhZ2UgPSAw
OwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKLQotICAgIC8vIEludmFsaWRhdGluZyB0aGUgc2Ny
b2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3JvbGxpbmdUcmVlIG9iamVjdHMuCi0gICAgU2Nyb2xs
aW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBtX3Nj
cm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fcGFnZSk7CiB9
CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotU2Nyb2xsaW5nVHJlZSogU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1RyZWUoKSBjb25zdAordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCiB7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZSk7
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKTsKKyAgICBBU1NFUlQobV9wYWdlKTsK
KyAgICBtX3BhZ2UgPSAwOwogfQotI2VuZGlmCiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSBj
b25zdAogewpAQCAtMTA2LDcgKzEwMiw3IEBAIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNv
b3JkaW5hdGVzU2MKICNlbmRpZgogfQogCi1zdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9u
KQorUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikKIHsKICAg
ICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBmcmFtZS0+dmlldygpOwpAQCAtMTQ4LDQ4ICsxNDQsMTYgQEAgc3RhdGljIFJlZ2lvbiBj
b21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZQogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbjsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBk
YXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKK3Vuc2lnbmVkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Ojpjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3Iu
IFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCi0gICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1
Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRv
IGRvIHRoaXMgZXZlbiBpZiB0aGUKLSAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMg
dXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCi0gICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZy
YW1lKCksIEludFBvaW50KCkpOwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAg
ICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNl
dCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCi0gICAgLy8ganVzdCB0
aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRv
IHRoZSByb290LgotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7
Ci0jZWxzZQotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKTsKLSNlbmRpZgotCi0gICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1l
VmlldyhmcmFtZVZpZXcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JvbGxQYXJhbWV0ZXJz
IHNjcm9sbFBhcmFtZXRlcnM7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
ICYmIGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7Ci0gICAgc2Ny
b2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFi
bGVkKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGZy
YW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXJNb2Rl
KCk7Ci0KLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbiA9IGZyYW1lVmlldy0+c2Ny
b2xsT3JpZ2luKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0
KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXpl
KCk7CisgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAKLSNpZiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSog
bm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHdoZWVs
RXZlbnRIYW5kbGVyQ291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVy
Q291bnQoKTsKKyAgICB9CiAKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShzY3JvbGxQ
YXJhbWV0ZXJzLCBub2RlKTsKLSNlbHNlCi0gICAgc2V0U2Nyb2xsUGFyYW1ldGVycyhzY3JvbGxQ
YXJhbWV0ZXJzKTsKLSNlbmRpZgorICAgIHJldHVybiB3aGVlbEV2ZW50SGFuZGxlckNvdW50Owog
fQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Q2hhbmdlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIyMiw3ICsxODYsNyBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdGaXhlCiAgICAgdXBkYXRlU2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogfQogCi1zdGF0aWMgR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CitHcmFwaGljc0xheWVyKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKQEAgLTI0Nyw2
NyArMjExLDkgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdAogICAg
IGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAg
ICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICAvLyBJZiB0
aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2RlLCB0aGVuIHdl
IHNob3VsZCBjcmVhdGUgb25lLgotICAgIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KTsKLSAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RMYXllckRpZENoYW5nZSgpOwot
I2VuZGlmCi0KICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7CiAgICAgcmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogICAg
IHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAg
ICAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIHNldFNjcm9sbExheWVyRm9y
Tm9kZShzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JJRChm
cmFtZVZpZXctPnNjcm9sbExheWVySUQoKSkpOwotI2Vsc2UKLSAgICBzZXRTY3JvbGxMYXllcihz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKLSNlbmRpZgotfQotCi1ib29sIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3
KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAgaWYgKCFjb29y
ZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlmIChmcmFtZVZp
ZXctPmZyYW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgLy8gSWYg
dGhpcyBmcmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgotICAgICAgICAvLyBtYWluIGZyYW1lIHNj
cm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4K
LSAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZy
YW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3Rh
dGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlmICghc3RhdGVO
b2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0ZU5vZGUtPnNldFJlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGlj
U2Nyb2xsKCkpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxQb3NpdGlvbik7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0K
LSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlmIChtX3Njcm9sbGluZ1RyZWUt
PndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xs
aW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudCwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB3aGVlbEV2
ZW50KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKLSNlbmRpZgotICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWlu
RnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wg
cHJvZ3JhbW1hdGljU2Nyb2xsKQpAQCAtMzMxLDQ4ICsyMzcsNiBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgZnJhbWVWaWV3LT5zZXRJblByb2dyYW1tYXRp
Y1Njcm9sbChvbGRQcm9ncmFtbWF0aWNTY3JvbGwpOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNj
cm9sbExheWVyUG9zaXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhm
cmFtZVZpZXcpKQotICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+
c2Nyb2xsUG9zaXRpb24oKSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsaW5nVHJl
ZS0+bWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZyYW1lVmlldy0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgIGZyYW1lVmlldy0+bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHNjcm9sbFBvc2l0aW9uKTsKLSAgICBmcmFtZVZpZXctPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwotCi0gICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBv
c2l0aW9uKCkpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmhhbmRs
ZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKIHsKQEAgLTM4
OSwyNSArMjUzLDYgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgog
fQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZl
bnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAg
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2
ZW50SGFuZGxlckNvdW50KCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hlZWxFdmVudEhh
bmRsZXJDb3VudCwgbm9kZSk7Ci0jZWxzZQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
d2hlZWxFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7Ci0j
ZW5kaWYKLX0KLQogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzTm9uTGF5ZXJGaXhlZE9i
amVjdHMoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgY29uc3QgRnJhbWVWaWV3OjpWaWV3
cG9ydENvbnN0cmFpbmVkT2JqZWN0U2V0KiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyA9IGZy
YW1lVmlldy0+dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKTsKQEAgLTQ2NCwxNTkgKzMwOSw0
IEBAIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dW4KICAgICByZXR1cm4g
dW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLVNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN0
YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewotICAgIGlmICgh
c2Nyb2xsTGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIYXNoTWFwPFNjcm9sbGlu
Z05vZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0
ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKLSAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlID0gaXQtPnZhbHVlOwotICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZShub2RlKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRh
Y2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsKLSAgICBBU1NF
UlQoc2Nyb2xsTGF5ZXJJRCk7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIGV4
aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOwotICAgIGlmIChleGlz
dGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOwotCi0gICAgY2xlYXJTdGF0
ZVRyZWUoKTsKLQotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIHdp
bGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCi0gICAgLy8gYXBwZW5k
IHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0cmVlLiBGb3Ig
bm93IHdlIGFsd2F5cyBhc3N1bWUKLSAgICAvLyB0aGlzIGlzIHRoZSByb290IG5vZGUuCi0gICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsKLSAgICBtX3N0
YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSk7Ci0gICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9s
bExheWVySUQpCi17Ci0gICAgaWYgKCFzY3JvbGxMYXllcklEKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtlKHNjcm9s
bExheWVySUQpOwotCi0gICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ryb3kgY2hp
bGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFzaE1hcC4K
LSAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBhY3R1YWxs
eSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3Zl
Tm9kZShub2RlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRy
ZWUoKQotewotICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgaWYgKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCkpCi0gICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOwot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIGF0dGFjaFRvU3RhdGVUcmVlKGZy
YW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xs
TGF5ZXIpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBS
ZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAg
IG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7Ci0gICAgc2NoZWR1bGVU
cmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Ny
b2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1l
dGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNl
dEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShz
Y3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbm9kZS0+c2V0
SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAg
ICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6
b250YWxTY3JvbGxiYXJNb2RlKTsKLSAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUo
c2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAgbm9kZS0+c2V0
U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBub2RlLT5z
ZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG5vZGUt
PnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7Ci0gICAgc2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFu
ZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9k
ZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKLSAg
ICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5U
aHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgLy8gVGhlIEZyYW1lVmlldydz
IEdyYXBoaWNzTGF5ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0
Zm9ybUxheWVyCi0gICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9y
ZSB3ZSBzd2l0Y2ggYmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKLSAgICAvLyBpbiBvcmRl
ciB0byBhdm9pZCBsYXllciBwb3NpdGlvbmluZyBidWdzLgotICAgIGlmIChyZWFzb25zKQotICAg
ICAgICB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7Ci0gICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZChyZWFzb25zKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1p
dCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpCi17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+KikKLXsKLSAgICBjb21taXRUcmVlU3RhdGUo
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0
aWVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwotICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGUoKQotewotICAgIEFTU0VSVChtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7Ci0KLSAgICBPd25QdHI8U2Ny
b2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y29tbWl0
KCk7Ci0gICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpj
b21taXROZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0YXRlLnJlbGVh
c2UoKSkpOwotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9z
aXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXll
cnMoR3JhcGhpY3NMYXllciosIGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0K
LQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVy
RGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudC4KLX0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzEwMTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dHlwZWRlZiB1bnNpZ25lZCBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uczsKIHR5cGVkZWYgdWlu
dDY0X3QgU2Nyb2xsaW5nTm9kZUlEOwogCitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsK
IGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7Ci1jbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGU7CiBjbGFz
cyBTY3JvbGxpbmdTdGF0ZU5vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7
CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CkBAIC02NSwyMCArNjUsMjEgQEAgY2xhc3MgU2Ny
b2xsaW5nVHJlZTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShQYWdlKik7Ci0gICAgflNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKIAotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVz
dHJveWVkKCk7CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGlu
Z1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKLSAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlm
TmVlZGVkKCk7CisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0
YXRlSWZOZWVkZWQoKSB7IH0KKwogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4K
ICAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopIGNv
bnN0OwogCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUg
dmlldyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQo
RnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJh
bWVWaWV3KikgeyB9CiAKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGEgd2hlZWwg
ZXZlbnQgaGFuZGxlciBpcyBhZGRlZCBvciByZW1vdmVkIGluIHRoZSAKICAgICAvLyBmcmFtZSB2
aWV3J3MgdW5kZXJseWluZyBkb2N1bWVudC4KQEAgLTkxLDI5ICs5MiwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2
ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUg
aG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5n
ZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
RnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKLQot
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBs
YXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2b2lkIGZyYW1lVmll
d1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXll
ciogdmVydGljYWxTY3JvbGxiYXJMYXllcik7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hh
bmdlcy4KLSAgICB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xs
YWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0aGF0IHRoZSBz
Y3JvbGxpbmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBn
aXZlbiBmcmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgbWVhbnMg
dGhhdCB0aGUKLSAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHku
IElmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0aGUgc2Nyb2xs
aW5nIHBvc2l0aW9uIGl0c2VsZi4KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gSGFuZGxlIHRoZSB3aGVl
bCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVu
dCB3YXMgaGFuZGxlZCBvciBub3QuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmll
dyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZp
ZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKLSAgICAvLyBEaXNwYXRjaGVkIGJ5
IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRp
b24gY2hhbmdlcy4KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgLy8gRGlzcGF0Y2hl
ZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4gZnJhbWUgc2Nyb2xsIHBv
c2l0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gbmVlZHMgdG8gYmUg
dXBkYXRlZCBhcyB3ZWxsLgotICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25B
bmRTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3Jv
bGxpbmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRv
IHRoZWlyCisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KSkKICAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSBkdXJpbmcgaGFuZGxl
V2hlZWxFdmVudC4gVGhpcyBpcyByZXF1aXJlZCBhcyBsb25nIGFzIHNjcm9sbGJhcnMgYXJlIHBh
aW50ZWQgb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTIzLDE1ICsxMDYsMjAgQEAgcHVibGljOgog
ICAgIC8vIEZvcmNlIGFsbCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gdXBkYXRlcyB0byBoYXBwZW4g
b24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgc2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXMoYm9vbCk7CiAKLSAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNj
cm9sbGluZyBjb29yZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXllcnMgZml4ZWQg
dG8gdGhlaXIKLSAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KLSAgICBib29sIHN1
cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0OworICAgIC8vIFRoZXNlIHZpcnR1YWwg
ZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIHRoZSB0aHJlYWRlZCBzY3JvbGxpbmcg
YXJjaGl0ZWN0dXJlLCBhbmQgdGhleSBhcmUKKyAgICAvLyB0aGVpciBtZWFuaW5nZnVsIGltcGxl
bWVudGF0aW9ucyBhcmUgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuCisgICAgdmlydHVhbCBi
b29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2lu
dCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQo
RnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExh
eWVyUG9zaXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0
YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKSB7IHJldHVybiBub2RlSUQ7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQogCi0gICAgLy8gTWFyay91bm1hcmsg
YSBsYXllciBhcyBhIGNvbnRhaW5lciBmb3IgZml4ZWQgcG9zaXRpb24gbGF5ZXJzLgotICAgIHZv
aWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXll
ciosIGJvb2wpOworICAgIC8vIEdlbmVyYXRlZCBhIHVuaXF1ZSBpZCBmb3Igc2Nyb2xsIGxheWVy
cy4KKyAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOwogCi0gICAgLy8g
QXR0YWNoL2RldGFjaCBsYXllciBwb3NpdGlvbiB0byBhbmNlc3RvciBmaXhlZCBwb3NpdGlvbiBj
b250YWluZXIuCi0gICAgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBo
aWNzTGF5ZXIqLCBib29sKTsKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJl
ZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy4KKyAgICB2
b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiwgYm9vbCBw
cm9ncmFtbWF0aWNTY3JvbGwpOwogCiAgICAgZW51bSBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29u
RmxhZ3MgewogICAgICAgICBGb3JjZWRPbk1haW5UaHJlYWQgPSAxIDw8IDAsCkBAIC0xNDEsODQg
KzEyOSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAg
IH07CiAKLSAgICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUgaWQgdG8gYXNzb2NpYXRlIHdpdGggYSBs
YXllciB0aGF0IHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZSBzY3JvbGxpbmcg
dHJlZS4KLSAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOworICAgIC8v
IFRoZXNlIHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIENocm9taXVt
J3MgV2ViTGF5ZXIgYXBwcm9hY2guIFRoZWlyIG1lYW5pbmdmdWwKKyAgICAvLyBpbXBsZW1lbnRh
dGlvbnMgYXJlIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uCisgICAgdmlydHVhbCB2
b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
LCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9s
bGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXll
cklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3Jh
cGhpY3NMYXllciosIGJvb2wpIHsgfQogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2Vk
IHRvIGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2Vy
IGJlKSByZXByZXNlbnRlZCBieSBhIG5vZGUKLSAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUu
Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7
Ci0gICAgdm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7Citwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOwogCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KLSAgICB2b2lkIGNsZWFy
U3RhdGVUcmVlKCk7CisgICAgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihG
cmFtZSosIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKTsKKyAgICB1bnNpZ25lZCBjb21w
dXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBHcmFwaGljc0xheWVyKiBz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKIAotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CisgICAgUGFnZSogbV9wYWdlOwogCi0g
ICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwotICAg
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlRm9ySUQoU2Nyb2xsaW5nTm9k
ZUlEKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpIHsgfQogCi0gICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIGJvb2wgaGFzTm9uTGF5ZXJGaXhl
ZE9iamVjdHMoRnJhbWVWaWV3Kik7CiAgICAgdm9pZCB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKLSAgICBzdHJ1Y3QgU2Nyb2xsUGFyYW1ldGVy
cyB7Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7
Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotCi0g
ICAgICAgIGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIGJvb2wg
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgICAgIFNjcm9sbGJhck1vZGUgaG9y
aXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxTY3Jv
bGxiYXJNb2RlOwotCi0gICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKLQotICAgICAgICBJ
bnRSZWN0IHZpZXdwb3J0UmVjdDsKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7Ci0gICAg
fTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgotICAgIC8vIG5v
dyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSwgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKSwgZXRjLgotICAgIC8vIFRvIHJlc29sdmUgdGhp
cyBhbmQgYWxsIG9mIHRoZSBpZi1kZWZzIGluIHRoaXMgY2xhc3MsIHdlIHNob3VsZCBtYWtlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yCi0gICAgLy8ganVzdCBiZSBhIHR5cGVkZWYgdGhhdCBkZWZpbmVz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIHRvIGJlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBhbmQg
c2FtZQotICAgIC8vIGZvciBDaHJvbWl1bSBhbmQgb3RoZXIgcGxhdGZvcm1zLiBBbnkgc2hhcmVk
IGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGluIHNvbWV0aGluZyBjYWxsZWQgCi0gICAgLy8gU2Nyb2xs
aW5nQ29vcmRpbmF0b3JCYXNlIHdoaWNoIGFsbCBvZiB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRp
b25zIHdpbGwgaW5oZXJpdCBmcm9tLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODcwMAotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBT
Y3JvbGxQYXJhbWV0ZXJzJik7Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVu
c2lnbmVkKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lv
biYpOwotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwotCi0jaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShH
cmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7Ci0gICAgdm9pZCBzZXROb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBT
Y3JvbGxQYXJhbWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdm9p
ZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7
Ci0KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLQotICAg
IFBhZ2UqIG1fcGFnZTsKLQogICAgIGJvb2wgbV9mb3JjZU1haW5UaHJlYWRTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlczsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgdm9p
ZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotCi0gICAgdm9pZCBzY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiopOwotICAg
IHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7Ci0KLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVl
PiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKLSAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3Jv
bGxpbmdUcmVlOwotICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyOwotCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNj
cm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOwotI2VuZGlmCi0KLSAgICBTY3JvbGxp
bmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMxMDE0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSB7Ci19Owot
Ci0jaWYgIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nv
b3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7Ci19Ci0K
LVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQotewotICAgIEFT
U0VSVCghbV9wYWdlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqKQotewot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xh
eWVyKikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oY29uc3QgUmVnaW9uJikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucykKLXsKLX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJG
b3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdy
YXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhp
Y3NMYXllciopCi17Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQotewotICAgIHJldHVybiBpZDsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3Jv
bGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3Rh
dGVUcmVlKCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0
YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQot
ewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNv
dW50KHVuc2lnbmVkKQotewotfQotCi0jZW5kaWYgLy8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC05
NSwzMyArOTUsMzIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IG1f
dmVydGljYWxTY3JvbGxiYXJMYXllcjsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRp
bmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oUGFnZSog
cGFnZSkKKyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3ByaXZhdGUo
bmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSkKIHsKLSAgICBSZWZQdHI8U2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IGNvb3JkaW5hdG9yKGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRv
cihwYWdlKSkpOwotICAgIGNvb3JkaW5hdG9yLT5tX3ByaXZhdGUgPSBuZXcgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcml2YXRlOwotICAgIHJldHVybiBjb29yZGluYXRvci5yZWxlYXNlKCk7CiB9CiAK
LVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQorU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oKQogewot
ICAgIEFTU0VSVCghbV9wYWdlKTsKICAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCi1zdGF0aWMg
R3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVw
ZGF0ZWQoRnJhbWVWaWV3KikKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgRnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlclZpZXcpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCktPnNjcm9sbExheWVyKCk7Ci0j
ZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICAv
LyBDb21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNj
cm9sbGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCisgICAgLy8gYWxsIHNjcm9sbGFi
bGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVz
LiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKKyAgICAvLyBmcmFtZSB2aWV3IHdob3Nl
IGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCisgICAgUmVnaW9uIG5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1f
cGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIHNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBm
cmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShmcmFtZVZpZXcpOworICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9y
RnJhbWVWaWV3KGZyYW1lVmlldykpOwogfQogCiBzdGF0aWMgV2ViTGF5ZXIqIHNjcm9sbGFibGVM
YXllckZvckdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0xNzQsNyArMTcz
LDcgQEAgc3RhdGljIFBhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZQogICAgIHJldHVy
biBzY3JvbGxiYXJMYXllci5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhv
cml6b250YWxTY3JvbGxiYXJMYXllcikKIHsKICAgICBpZiAoIWhvcml6b250YWxTY3JvbGxiYXJM
YXllciB8fCAhY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTgzLDcgKzE4Miw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld0hvcmkKICAgICBtX3ByaXZhdGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJM
YXllcihjcmVhdGVTY3JvbGxiYXJMYXllcihmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIo
KSwgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIsIGZy
YW1lVmlldykpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0
aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGlj
c0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQog
ewogICAgIGlmICghdmVydGljYWxTY3JvbGxiYXJMYXllciB8fCAhY29vcmRpbmF0ZXNTY3JvbGxp
bmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkyLDEyICsx
OTEsMTIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydAogICAgIG1f
cHJpdmF0ZS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXllcihjcmVhdGVTY3JvbGxiYXJMYXllcihm
cmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCksIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSwg
dmVydGljYWxTY3JvbGxiYXJMYXllciwgZnJhbWVWaWV3KSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQor
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcihHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllcikKIHsKICAgICBtX3ByaXZhdGUtPnNldFNjcm9sbExheWVyKHNj
cm9sbExheWVyID8gc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihzY3JvbGxMYXllcikg
OiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9u
KQogewogICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkg
Y2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNl
dFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKSkpOwpAQCAtMjEwLDEyICsyMDksNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXROb25GYXN0U2NyCiAgICAgfQogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
ZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVs
RXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1
bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQogewogICAgIC8vIFdlIHdvbid0IG5lY2Vz
c2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdy
YWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9y
RnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjIzLDcgKzIxNyw3
IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnQKICAgICAgICAgbV9w
cml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQgPiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Ny
b2xsaW5nUmVhc29ucyByZWFzb25zKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJp
bHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0
aGUgcm9vdCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0yMzEsMjQgKzIyNSwxOSBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhCiAgICAgICAgIG1fcHJp
dmF0ZS0+c2Nyb2xsTGF5ZXIoKS0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHJlYXNvbnMp
OwogfQogCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9zaXRpb25M
YXllcnMoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFw
aGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKIHsKICAgICBpZiAoV2ViTGF5ZXIqIHNjcm9s
bGFibGVMYXllciA9IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIobGF5ZXIpKQogICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVy
cyhlbmFibGUpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4
ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWlu
ZXJMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKFdl
YkxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVy
KGxheWVyKSkKICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXIoZW5hYmxlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEdy
YXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSwgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCiB7CiAgICAgaWYgKCFz
Y3JvbGxMYXllcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjYyLDE5ICsyNTEsMTAgQEAgdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZQogICAgIH0KIH0KIAotLy8gRklYTUU6
IFdlIHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGVzZSBzdHVicyB3aGVuIHdlIHJlc29sdmUg
dGhlIGlmLWRlZiBzb3VwIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgotLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCi1TY3JvbGxpbmdOb2RlSUQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBpZCkKLXsK
LSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZy
b21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3
KiBmcmFtZVZpZXcpCiB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7CisgICAgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudChjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1
bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1f
aAorI2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKKworI2luY2x1ZGUgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOworCitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtIDogcHVibGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5T
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKCk7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVk
IHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyopOworCisgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZy
YW1lIHZpZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0
aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNo
YW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKik7CisKKyAgICAvLyBTaG91bGQg
YmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBn
aXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopOwor
CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2FuIGtl
ZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWlyCisgICAgLy8gY29udGFpbmVy
cyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIE1hcmsvdW5tYXJrIGEg
bGF5ZXIgYXMgYSBjb250YWluZXIgZm9yIGZpeGVkIHBvc2l0aW9uIGxheWVycy4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhp
Y3NMYXllciosIGJvb2wpOworCisgICAgLy8gQXR0YWNoL2RldGFjaCBsYXllciBwb3NpdGlvbiB0
byBhbmNlc3RvciBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIuCisgICAgdmlydHVhbCB2b2lkIHNl
dExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpOworCisg
ICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYWJsZSBsYXllciBmb3Ig
dGhlIGdpdmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFi
bGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVy
Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9s
bGluZ1JlYXNvbnMpOworCisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7
CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAg
ICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOworCisgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29yZGluYXRv
ck1hY19oCisjZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjX2gKKworI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIDog
cHVibGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYyhQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CisKKyAgICB2
aXJ0dWFsIFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxs
ZWQgd2hlbmV2ZXIgdGhlIGdpdmVuIGZyYW1lIHZpZXcgaGFzIGJlZW4gbGFpZCBvdXQuCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3Kik7CisKKyAgICAv
LyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2ZW4g
ZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdSb290TGF5ZXJE
aWRDaGFuZ2UoRnJhbWVWaWV3Kik7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVy
IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcg
Y2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxi
YXJMYXllcik7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB2ZXJ0aWNh
bCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KiwgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcik7CisKKyAgICAv
LyBSZXF1ZXN0cyB0aGF0IHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Ny
b2xsIHBvc2l0aW9uIG9mIHRoZSBnaXZlbiBmcmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJl
dHVybnMgdHJ1ZSwgaXQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVw
ZGF0ZWQgYXN5bmNocm9ub3VzbHkuIElmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hv
dWxkIHVwZGF0ZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIGl0c2VsZi4KKyAgICB2aXJ0dWFsIGJv
b2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50
Jik7CisKKyAgICAvLyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhy
ZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcqLCBjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKTsKKworICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIHdo
ZW5ldmVyIHRoZSBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2Ny
b2xsIGxheWVyIHBvc2l0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0
aW9uKCk7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW5kaWN0YWUgdGhh
dCBhIGxheWVyIHNob3VsZCBiZSAob3Igc2hvdWxkIG5vdCBsb25nZXIgYmUpIHJlcHJlc2VudGVk
IGJ5IGEgbm9kZQorICAgIC8vIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KKyAgICB2aXJ0dWFsIFNj
cm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOworICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHdpcGVzIG91dCB0aGUgY3VycmVudCB0cmVlLgorICAgIHZpcnR1YWwg
dm9pZCBjbGVhclN0YXRlVHJlZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNv
bXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhy
ZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIHZvaWQgZW5zdXJlUm9vdFN0
YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqIHN0YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICBzdHJ1Y3Qg
U2Nyb2xsUGFyYW1ldGVycyB7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxF
bGFzdGljaXR5OworCisgICAgICAgIGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7
CisgICAgICAgIGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgICAgIFNj
cm9sbGJhck1vZGUgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7CisgICAgICAgIFNjcm9sbGJhck1v
ZGUgdmVydGljYWxTY3JvbGxiYXJNb2RlOworCisgICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdp
bjsKKworICAgICAgICBJbnRSZWN0IHZpZXdwb3J0UmVjdDsKKyAgICAgICAgSW50U2l6ZSBjb250
ZW50c1NpemU7CisgICAgfTsKKworICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUo
Y29uc3QgU2Nyb2xsUGFyYW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwor
ICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKKyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShj
b25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNl
dFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqKTsKKworICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3Np
dGlvbigpOworCisgICAgdm9pZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworCisgICAgdm9p
ZCBzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjPiopOworICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisKKyAgICBPd25Q
dHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKKyAgICBSZWZQdHI8
U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVlOworICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjPiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOworCisgICAgSGFz
aE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9uIDEzMTAxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcsMzcgKzI3LDEzNCBAQAogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKIAotI2ltcG9ydCAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbXBvcnQgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2Uu
aCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdUcmVlLmgiCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdU
aHJlYWQuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1RyZWUuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1N0
YXRlVHJlZS5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3
dGYvRnVuY3Rpb25hbC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdDb29y
ZGluYXRvclByaXZhdGUgewogfTsKIAotUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4g
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQorU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKFBhZ2UqIHBhZ2UpCisgICAgOiBTY3Jv
bGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xs
aW5nU3RhdGVUcmVlOjpjcmVhdGUoKSkKKyAgICAsIG1fc2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdU
cmVlOjpjcmVhdGUodGhpcykpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRp
bWVyKHRoaXMsICZTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29t
bWl0dGVyVGltZXJGaXJlZCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKHBhZ2UpKTsKIH0KIAotU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3JvbGxpbmdD
b29yZGluYXRvcigpCitTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKCkKIHsKLSAgICBBU1NFUlQoIW1fcGFnZSk7CiAgICAgQVNTRVJUKCFtX3Njcm9sbGlu
Z1RyZWUpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNz
TGF5ZXIqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cGFnZURlc3Ryb3llZCgpCit7
CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0
aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0
d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4K
KyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmludmFs
aWRhdGUsIG1fc2Nyb2xsaW5nVHJlZS5yZWxlYXNlKCkpKTsKK30KKworU2Nyb2xsaW5nVHJlZSog
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUoKSBjb25zdAoreworICAgIEFT
U0VSVChtX3Njcm9sbGluZ1RyZWUpOworICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUuZ2V0KCk7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVl
ZGVkKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVy
dGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb21taXRUcmVlU3RhdGUoKTsKKyAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZy
YW1lVmlldykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2Fu
J3QgZG8gZmFzdCBzY3JvbGxpbmcgZm9yLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcworICAgIC8v
IGFsbCBzY3JvbGxhYmxlIGFyZWFzLCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBh
bmQgbGlzdCBib3hlcy4gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCisgICAgLy8gZnJh
bWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgor
ICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKKworICAgIC8vIElu
IHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IG5vbi1m
YXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAvLyBqdXN0IHRoZSByb290
IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8gdGhlIHJv
b3QuCisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKKworICAg
IGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3Rh
dGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJz
OworICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFt
ZVZpZXctPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7CisgICAgc2Nyb2xsUGFyYW1ldGVy
cy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eSgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3Jv
bGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZpZXctPmhv
cml6b250YWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFz
RW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigp
ICYmIGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOworICAgIHNjcm9s
bFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPmhvcml6b250
YWxTY3JvbGxiYXJNb2RlKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpOworCisgICAgc2Nyb2xs
UGFyYW1ldGVycy5zY3JvbGxPcmlnaW4gPSBmcmFtZVZpZXctPnNjcm9sbE9yaWdpbigpOworICAg
IHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBmcmFt
ZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSk7CisgICAgc2Nyb2xsUGFyYW1ldGVy
cy5jb250ZW50c1NpemUgPSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOworCisgICAgc2V0U2Ny
b2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywgbm9kZSk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXll
cklEKCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIHNldFdoZWVsRXZl
bnRIYW5kbGVyQ291bnRGb3JOb2RlKGNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCgpLCBub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5h
dGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIElmIHRoZSByb290IGxheWVyIGRvZXMgbm90IGhhdmUgYSBTY3JvbGxpbmdTdGF0ZU5v
ZGUsIHRoZW4gd2Ugc2hvdWxkIGNyZWF0ZSBvbmUuCisgICAgZW5zdXJlUm9vdFN0YXRlTm9kZUZv
ckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
cm9vdFN0YXRlTm9kZSgpKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdExheWVyRGlk
Q2hhbmdlKCk7CisKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVy
RGlkQ2hhbmdlKGZyYW1lVmlldyk7CisKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCkpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJh
bWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBHcmFwaGljc0xheWVyKikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVChtX3BhZ2UpOwpAQCAtNjgsNyArMTY1LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZnJhbWVWaWV3SG9yaQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKQEAgLTc5LDYgKzE3NiwyMDIgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydAogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZy
YW1lVmlldykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmcmFtZVZpZXctPmZy
YW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBm
cmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGludG8gdGhlIHBhZ2UgY2FjaGUsIHdl
IGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgorICAgICAgICAvLyBtYWluIGZyYW1lIHNjcm9sbCBw
b3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4KKyAgICAg
ICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmll
dy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICghc3RhdGVOb2RlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZU5vZGUtPnNldFJlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xs
KCkpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVW
aWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAobV9zY3Jv
bGxpbmdUcmVlLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJp
bmQoJlNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQsIG1fc2Nyb2xsaW5nVHJlZS5nZXQo
KSwgd2hlZWxFdmVudCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5
ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICgh
bV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbGluZ1RyZWUt
Pm1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBmcmFtZVZpZXctPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBmcmFtZVZpZXctPm5vdGlmeVNj
cm9sbFBvc2l0aW9uQ2hhbmdlZChzY3JvbGxQb3NpdGlvbik7CisgICAgZnJhbWVWaWV3LT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKworICAgIGlmIChHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
CisgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjph
dHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBB
U1NFUlQoc2Nyb2xsTGF5ZXJJRCk7CisKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
IGV4aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOworICAgIGlmIChl
eGlzdGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOworCisgICAgY2xlYXJT
dGF0ZVRyZWUoKTsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCisgICAgLy8gYXBw
ZW5kIHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0cmVlLiBG
b3Igbm93IHdlIGFsd2F5cyBhc3N1bWUKKyAgICAvLyB0aGlzIGlzIHRoZSByb290IG5vZGUuCisg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsKKyAgICBt
X3N0YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKSk7CisgICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlE
IHNjcm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtl
KHNjcm9sbExheWVySUQpOworCisgICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ry
b3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFz
aE1hcC4KKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBh
Y3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y2xl
YXJTdGF0ZVRyZWUoKQoreworICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7CisgICAgaWYgKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2Rl
KG5vZGUpOworfQorCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkK
K3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFz
aE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9kZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3RhdGVOb2RlTWFwLmZpbmQoc2Nyb2xsTGF5ZXJJRCk7CisgICAgaWYgKGl0ID09
IG1fc3RhdGVOb2RlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFNjcm9sbGlu
Z1N0YXRlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7
CisgICAgYXR0YWNoVG9TdGF0ZVRyZWUoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAg
ICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgc2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24ocmVnaW9uKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShj
b25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAg
bm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVy
cy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhvcml6b250YWxT
Y3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOwor
ICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSk7CisKKyAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFy
YW1ldGVycy5zY3JvbGxPcmlnaW4pOworICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQ
YXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNTaXplKHNjcm9s
bFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50LCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFz
b25zIHJlYXNvbnMpCit7CisgICAgLy8gVGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgaXMg
bGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0Zm9ybUxheWVyCisgICAgLy8g
YXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9yZSB3ZSBzd2l0Y2ggYmFjayB0
byBtYWluIHRocmVhZCBzY3JvbGxpbmcKKyAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBsYXllciBw
b3NpdGlvbmluZyBidWdzLgorICAgIGlmIChyZWFzb25zKQorICAgICAgICB1cGRhdGVNYWluRnJh
bWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChyZWFzb25zKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9u
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1l
VmlldyhmcmFtZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1l
Vmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKK3sKKyAgICBpZiAobV9zY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsaW5n
U3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvck1h
Yz4qKQoreworICAgIGNvbW1pdFRyZWVTdGF0ZSgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUoKQoreworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7CisKKyAgICBPd25QdHI8U2Nyb2xsaW5n
U3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y29tbWl0KCk7Cisg
ICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpjb21taXRO
ZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0YXRlLnJlbGVhc2UoKSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQo=
</data>
<flag name="commit-queue"
          id="181053"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168248</attachid>
            <date>2012-10-11 10:21:38 -0700</date>
            <delta_ts>2012-10-11 11:35:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-6.txt</filename>
            <type>text/plain</type>
            <size>78544</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0xMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTEwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5ODQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc2MCw3ICsxNzYwLDYgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
CiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAogCiAgICAgcGxhdGZvcm0vQXJl
bmEuY3BwCiAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MDczLDcgKzQwNzMsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC05MDcsNyArOTA3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TY3JlZW4uY3BwIFwK
ICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgXAogICAgIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBcCi0gICAgcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAgICAgcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAgXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNw
cCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1MzQsMTAgKzI1MzQs
OCBAQCBfX1pON1dlYkNvcmUxM1Njcm9sbGluZ1RyZWUyMnVwZGF0ZUJhY2tGCiBfX1pON1dlYkNv
cmUxM1Njcm9sbGluZ1RyZWVEMUV2CiBfX1pON1dlYkNvcmUxNVNjcm9sbGluZ1RocmVhZDE1ZGlz
cGF0Y2hCYXJyaWVyRVJLTjNXVEY4RnVuY3Rpb25JRnZ2RUVFCiBfX1pON1dlYkNvcmUxNVNjcm9s
bGluZ1RocmVhZDhkaXNwYXRjaEVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQotX19aTjdXZWJDb3Jl
MjBTY3JvbGxpbmdDb29yZGluYXRvcjIzY29tbWl0VHJlZVN0YXRlSWZOZWVkZWRFdgogX19aTjdX
ZWJDb3JlMjBTY3JvbGxpbmdDb29yZGluYXRvcjQ0c2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXNFYgogX19aTjdXZWJDb3JlNFBhZ2UyMHNjcm9sbGluZ0Nvb3JkaW5h
dG9yRXYKLV9fWk5LN1dlYkNvcmUyMFNjcm9sbGluZ0Nvb3JkaW5hdG9yMTNzY3JvbGxpbmdUcmVl
RXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gMTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjI1LDExICszMjI1LDEyIEBACiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oJywKKyAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1
bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oJywKICAgICAg
ICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwJywKICAgICAgICAgICAg
ICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oJywKLSAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9GcmFtZUNHV2luLmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24g
MTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgJy4uL3BhZ2UvYW5pbWF0aW9uJywK
ICAgICAgICcuLi9wYWdlL2Nocm9taXVtJywKICAgICAgICcuLi9wYWdlL3Njcm9sbGluZycsCisg
ICAgICAnLi4vcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtJywK
ICAgICAgICcuLi9wbGF0Zm9ybS9hbmltYXRpb24nLAogICAgICAgJy4uL3BsYXRmb3JtL2F1ZGlv
JywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyNTksMTAgKzI3MjU5LDYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxzY3JvbGxp
bmdcU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxTZWN1cml0eU9yaWdpbi5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIx
LDcgKzEwMjEsNiBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJD
b3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBU
cmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07
Ci0JCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzg2NkFG
MzcxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi87IH07
CiAJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAw
RkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87IH07CiAJ
CTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0Ew
OTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzMTcsNiArMzMxNiw3IEBACiAJCTkzQjcw
RDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0Njgg
LyogU2NyaXB0Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzQjc3QTM4MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3
N0EzNzBBREQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzQkE1OUIyMEYyQUE1RkUwMDhF
OEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JBNTlCMTBGMkFBNUZFMDA4RThFOTkgLyogSlNDREFU
QVNlY3Rpb25DdXN0b20uY3BwICovOyB9OworCQk5M0JGMzNERjE2MjY4NDIzMDA4MDhFQTAgLyog
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQkYzM0RFMTYyNjg0MjMwMDgwOEVBMCAvKiBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5oICovOyB9OwogCQk5M0MwOUE1MzBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRI
YW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0MwOUE1MjBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNDMDlBN0YwQjA2NEVFRjAwNUFC
RDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQzA5QTdFMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJN
YWMubW0gKi87IH07CiAJCTkzQzA5QTgxMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDMDlB
ODAwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5jcHAgKi87IH07CkBAIC04MTQ2LDcg
KzgxNDYsNiBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVS
TFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRF
RDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJl
ZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZURlcHRo
TGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzg2NkFGMzcxNEYxQzE3MTAw
MjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFn
ZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJC
Njk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUxOSw2ICsxMDUxOCw3IEBACiAJCTkzQjcwRDU0
MDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQjc3QTM3MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyVHlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCQTU5QjEwRjJBQTVGRTAwOEU4RTk5IC8qIEpT
Q0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNCRjMzREUxNjI2ODQyMzAwODA4RUEwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzA5QTUyMEIwNjREQjMwMDVBQkQ0
RCAvKiBFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZl
bnRIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzA5QTdFMEIwNjRF
RUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBFdmVudEhhbmRsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQzA5QTgwMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRIYW5kbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTgyLDcgKzE0NTgyLDYgQEAKIAkJCQkwRjYw
NUFFQjE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLywKIAkJCQkx
QUY2MkVFNDE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwICovLAog
CQkJCTFBRjYyRUU1MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oICov
LAotCQkJCTM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5v
bmUuY3BwICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdT
dGF0ZU5vZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NjAyLDYgKzE0NjAxLDcgQEAKIAkJMUFG
NjJFRTIxNERBMjJBNzAwNDE1NTZDIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJOTNCRjMzREUxNjI2ODQyMzAwODA4RUEwIC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLmggKi8sCiAJCQkJMUFGNjJFRTMxNERBMjJBNzAwNDE1NTZDIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovLAogCQkJCTkzMUNCRDEyMTYxQTQ0RjgwMEU0Qzg3
NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFGNjJGMjMxNERBRkU5MTAw
NDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKQEAgLTI1NTc5LDYgKzI1NTc5LDcg
QEAKIAkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCQzg0MzE2MUNGMDVDMDA0RDUy
RjQgLyogUmVzb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQkYzM0RGMTYyNjg0
MjMwMDgwOEVBMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yODEyMCw3ICsyODEyMSw2IEBACiAJCQkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNj
cm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU3MTREQTIy
QTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUY2MkVFNjE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0g
aW4gU291cmNlcyAqLywKLQkJCQkzODY2QUYzODE0RjFDMTcxMDAyODNENjggLyogU2Nyb2xsaW5n
Q29vcmRpbmF0b3JOb25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRjI1MTREQUZFOUUw
MDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJG
MjQxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTQ1LDQ2ICs0Myw0NCBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQotI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgotI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWUuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCIK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFz
c1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZShQYWdlKiBwYWdlKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjKHBhZ2UpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKHBh
Z2UpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGlu
YXRvcihwYWdlKSk7Cit9CisKIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGlu
YXRvcihQYWdlKiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2ZvcmNlTWFpblRo
cmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZhbHNlKQotI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCi0gICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRy
ZWU6OmNyZWF0ZSgpKQotICAgICwgbV9zY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWU6OmNyZWF0
ZSh0aGlzKSkKLSAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIodGhpcywg
JlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZp
cmVkKQotI2VuZGlmCi0gICAgLCBtX3ByaXZhdGUoMCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCitTY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkKIHsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBtX3BhZ2UgPSAw
OwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKLQotICAgIC8vIEludmFsaWRhdGluZyB0aGUgc2Ny
b2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3JvbGxpbmdUcmVlIG9iamVjdHMuCi0gICAgU2Nyb2xs
aW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBtX3Nj
cm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fcGFnZSk7CiB9
CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotU2Nyb2xsaW5nVHJlZSogU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1RyZWUoKSBjb25zdAordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCiB7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZSk7
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKTsKKyAgICBBU1NFUlQobV9wYWdlKTsK
KyAgICBtX3BhZ2UgPSAwOwogfQotI2VuZGlmCiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSBj
b25zdAogewpAQCAtMTA2LDcgKzEwMiw3IEBAIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNv
b3JkaW5hdGVzU2MKICNlbmRpZgogfQogCi1zdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9u
KQorUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikKIHsKICAg
ICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBmcmFtZS0+dmlldygpOwpAQCAtMTQ4LDQ4ICsxNDQsMTYgQEAgc3RhdGljIFJlZ2lvbiBj
b21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZQogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbjsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBk
YXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKK3Vuc2lnbmVkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Ojpjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3Iu
IFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCi0gICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1
Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRv
IGRvIHRoaXMgZXZlbiBpZiB0aGUKLSAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMg
dXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCi0gICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZy
YW1lKCksIEludFBvaW50KCkpOwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAg
ICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNl
dCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCi0gICAgLy8ganVzdCB0
aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRv
IHRoZSByb290LgotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7
Ci0jZWxzZQotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKTsKLSNlbmRpZgotCi0gICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1l
VmlldyhmcmFtZVZpZXcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JvbGxQYXJhbWV0ZXJz
IHNjcm9sbFBhcmFtZXRlcnM7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
ICYmIGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7Ci0gICAgc2Ny
b2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFi
bGVkKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGZy
YW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXJNb2Rl
KCk7Ci0KLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbiA9IGZyYW1lVmlldy0+c2Ny
b2xsT3JpZ2luKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0
KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXpl
KCk7CisgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAKLSNpZiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSog
bm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHdoZWVs
RXZlbnRIYW5kbGVyQ291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVy
Q291bnQoKTsKKyAgICB9CiAKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShzY3JvbGxQ
YXJhbWV0ZXJzLCBub2RlKTsKLSNlbHNlCi0gICAgc2V0U2Nyb2xsUGFyYW1ldGVycyhzY3JvbGxQ
YXJhbWV0ZXJzKTsKLSNlbmRpZgorICAgIHJldHVybiB3aGVlbEV2ZW50SGFuZGxlckNvdW50Owog
fQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Q2hhbmdlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIyMiw3ICsxODYsNyBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdGaXhlCiAgICAgdXBkYXRlU2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogfQogCi1zdGF0aWMgR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CitHcmFwaGljc0xheWVyKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKQEAgLTI0Nyw2
NyArMjExLDkgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdAogICAg
IGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAg
ICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICAvLyBJZiB0
aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2RlLCB0aGVuIHdl
IHNob3VsZCBjcmVhdGUgb25lLgotICAgIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KTsKLSAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RMYXllckRpZENoYW5nZSgpOwot
I2VuZGlmCi0KICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7CiAgICAgcmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogICAg
IHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAg
ICAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIHNldFNjcm9sbExheWVyRm9y
Tm9kZShzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JJRChm
cmFtZVZpZXctPnNjcm9sbExheWVySUQoKSkpOwotI2Vsc2UKLSAgICBzZXRTY3JvbGxMYXllcihz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKLSNlbmRpZgotfQotCi1ib29sIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3
KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAgaWYgKCFjb29y
ZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlmIChmcmFtZVZp
ZXctPmZyYW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgLy8gSWYg
dGhpcyBmcmFtZSB2aWV3J3MgZG9jdW1lbnQgaXMgYmVpbmcgcHV0IGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIG91cgotICAgICAgICAvLyBtYWluIGZyYW1lIHNj
cm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4K
LSAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZy
YW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3Rh
dGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlmICghc3RhdGVO
b2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0ZU5vZGUtPnNldFJlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGlj
U2Nyb2xsKCkpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxQb3NpdGlvbik7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0K
LSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIGlmIChtX3Njcm9sbGluZ1RyZWUt
PndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xs
aW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudCwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB3aGVlbEV2
ZW50KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKLSNlbmRpZgotICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWlu
RnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wg
cHJvZ3JhbW1hdGljU2Nyb2xsKQpAQCAtMzMxLDQ4ICsyMzcsNiBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgZnJhbWVWaWV3LT5zZXRJblByb2dyYW1tYXRp
Y1Njcm9sbChvbGRQcm9ncmFtbWF0aWNTY3JvbGwpOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNj
cm9sbExheWVyUG9zaXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhm
cmFtZVZpZXcpKQotICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+
c2Nyb2xsUG9zaXRpb24oKSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24oKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsaW5nVHJl
ZS0+bWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZyYW1lVmlldy0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgIGZyYW1lVmlldy0+bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHNjcm9sbFBvc2l0aW9uKTsKLSAgICBmcmFtZVZpZXctPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwotCi0gICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBv
c2l0aW9uKCkpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmhhbmRs
ZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKIHsKQEAgLTM4
OSwyNSArMjUzLDYgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgog
fQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZl
bnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAg
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2
ZW50SGFuZGxlckNvdW50KCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hlZWxFdmVudEhh
bmRsZXJDb3VudCwgbm9kZSk7Ci0jZWxzZQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
d2hlZWxFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7Ci0j
ZW5kaWYKLX0KLQogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzTm9uTGF5ZXJGaXhlZE9i
amVjdHMoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgY29uc3QgRnJhbWVWaWV3OjpWaWV3
cG9ydENvbnN0cmFpbmVkT2JqZWN0U2V0KiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyA9IGZy
YW1lVmlldy0+dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKTsKQEAgLTQ2NCwxNTkgKzMwOSw0
IEBAIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dW4KICAgICByZXR1cm4g
dW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLVNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN0
YXRlTm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewotICAgIGlmICgh
c2Nyb2xsTGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIYXNoTWFwPFNjcm9sbGlu
Z05vZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0
ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKLSAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlID0gaXQtPnZhbHVlOwotICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZShub2RlKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRh
Y2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsKLSAgICBBU1NF
UlQoc2Nyb2xsTGF5ZXJJRCk7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIGV4
aXN0aW5nTm9kZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOwotICAgIGlmIChleGlz
dGluZ05vZGUgJiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOwotCi0gICAgY2xlYXJTdGF0
ZVRyZWUoKTsKLQotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIHdp
bGwgaGF2ZSB0byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCi0gICAgLy8gYXBwZW5k
IHRoZSBub2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0cmVlLiBGb3Ig
bm93IHdlIGFsd2F5cyBhc3N1bWUKLSAgICAvLyB0aGlzIGlzIHRoZSByb290IG5vZGUuCi0gICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsKLSAgICBtX3N0
YXRlTm9kZU1hcC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSk7Ci0gICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9s
bExheWVySUQpCi17Ci0gICAgaWYgKCFzY3JvbGxMYXllcklEKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtlKHNjcm9s
bExheWVySUQpOwotCi0gICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ryb3kgY2hp
bGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFzaE1hcC4K
LSAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBhY3R1YWxs
eSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3Zl
Tm9kZShub2RlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRy
ZWUoKQotewotICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgaWYgKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCkpCi0gICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOwot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIGF0dGFjaFRvU3RhdGVUcmVlKGZy
YW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xs
TGF5ZXIpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBS
ZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAg
IG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7Ci0gICAgc2NoZWR1bGVU
cmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Ny
b2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1l
dGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNl
dEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShz
Y3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbm9kZS0+c2V0
SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAg
ICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6
b250YWxTY3JvbGxiYXJNb2RlKTsKLSAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUo
c2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAgbm9kZS0+c2V0
U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBub2RlLT5z
ZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG5vZGUt
PnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7Ci0gICAgc2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFu
ZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9k
ZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKLSAg
ICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5U
aHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgLy8gVGhlIEZyYW1lVmlldydz
IEdyYXBoaWNzTGF5ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0
Zm9ybUxheWVyCi0gICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9y
ZSB3ZSBzd2l0Y2ggYmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKLSAgICAvLyBpbiBvcmRl
ciB0byBhdm9pZCBsYXllciBwb3NpdGlvbmluZyBidWdzLgotICAgIGlmIChyZWFzb25zKQotICAg
ICAgICB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7Ci0gICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZChyZWFzb25zKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1p
dCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpCi17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+KikKLXsKLSAgICBjb21taXRUcmVlU3RhdGUo
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0
aWVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwotICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGUoKQotewotICAgIEFTU0VSVChtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7Ci0KLSAgICBPd25QdHI8U2Ny
b2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y29tbWl0
KCk7Ci0gICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpj
b21taXROZXdUcmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0YXRlLnJlbGVh
c2UoKSkpOwotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9z
aXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXll
cnMoR3JhcGhpY3NMYXllciosIGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0K
LQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVy
RGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudC4KLX0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzEwMTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dHlwZWRlZiB1bnNpZ25lZCBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uczsKIHR5cGVkZWYgdWlu
dDY0X3QgU2Nyb2xsaW5nTm9kZUlEOwogCitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsK
IGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7Ci1jbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGU7CiBjbGFz
cyBTY3JvbGxpbmdTdGF0ZU5vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7
CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CkBAIC02NSwyMCArNjUsMjEgQEAgY2xhc3MgU2Ny
b2xsaW5nVHJlZTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShQYWdlKik7Ci0gICAgflNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKIAotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVz
dHJveWVkKCk7CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGlu
Z1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKLSAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlm
TmVlZGVkKCk7CisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0
YXRlSWZOZWVkZWQoKSB7IH0KKwogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4K
ICAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopIGNv
bnN0OwogCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUg
dmlldyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQo
RnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJh
bWVWaWV3KikgeyB9CiAKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGEgd2hlZWwg
ZXZlbnQgaGFuZGxlciBpcyBhZGRlZCBvciByZW1vdmVkIGluIHRoZSAKICAgICAvLyBmcmFtZSB2
aWV3J3MgdW5kZXJseWluZyBkb2N1bWVudC4KQEAgLTkxLDI5ICs5MiwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2
ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUg
aG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5n
ZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
RnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKLQot
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBs
YXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2b2lkIGZyYW1lVmll
d1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXll
ciogdmVydGljYWxTY3JvbGxiYXJMYXllcik7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hh
bmdlcy4KLSAgICB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xs
YWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0aGF0IHRoZSBz
Y3JvbGxpbmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBn
aXZlbiBmcmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgbWVhbnMg
dGhhdCB0aGUKLSAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHku
IElmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0aGUgc2Nyb2xs
aW5nIHBvc2l0aW9uIGl0c2VsZi4KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gSGFuZGxlIHRoZSB3aGVl
bCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVu
dCB3YXMgaGFuZGxlZCBvciBub3QuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmll
dyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZp
ZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKLSAgICAvLyBEaXNwYXRjaGVkIGJ5
IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRp
b24gY2hhbmdlcy4KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgLy8gRGlzcGF0Y2hl
ZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4gZnJhbWUgc2Nyb2xsIHBv
c2l0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gbmVlZHMgdG8gYmUg
dXBkYXRlZCBhcyB3ZWxsLgotICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25B
bmRTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3Jv
bGxpbmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRv
IHRoZWlyCisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KSkKICAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSBkdXJpbmcgaGFuZGxl
V2hlZWxFdmVudC4gVGhpcyBpcyByZXF1aXJlZCBhcyBsb25nIGFzIHNjcm9sbGJhcnMgYXJlIHBh
aW50ZWQgb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTIzLDE1ICsxMDYsMjAgQEAgcHVibGljOgog
ICAgIC8vIEZvcmNlIGFsbCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gdXBkYXRlcyB0byBoYXBwZW4g
b24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgc2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXMoYm9vbCk7CiAKLSAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNj
cm9sbGluZyBjb29yZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXllcnMgZml4ZWQg
dG8gdGhlaXIKLSAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KLSAgICBib29sIHN1
cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0OworICAgIC8vIFRoZXNlIHZpcnR1YWwg
ZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIHRoZSB0aHJlYWRlZCBzY3JvbGxpbmcg
YXJjaGl0ZWN0dXJlLCBhbmQgdGhleSBhcmUKKyAgICAvLyB0aGVpciBtZWFuaW5nZnVsIGltcGxl
bWVudGF0aW9ucyBhcmUgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuCisgICAgdmlydHVhbCBi
b29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2lu
dCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQo
RnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExh
eWVyUG9zaXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0
YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKSB7IHJldHVybiBub2RlSUQ7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQogCi0gICAgLy8gTWFyay91bm1hcmsg
YSBsYXllciBhcyBhIGNvbnRhaW5lciBmb3IgZml4ZWQgcG9zaXRpb24gbGF5ZXJzLgotICAgIHZv
aWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXll
ciosIGJvb2wpOworICAgIC8vIEdlbmVyYXRlZCBhIHVuaXF1ZSBpZCBmb3Igc2Nyb2xsIGxheWVy
cy4KKyAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOwogCi0gICAgLy8g
QXR0YWNoL2RldGFjaCBsYXllciBwb3NpdGlvbiB0byBhbmNlc3RvciBmaXhlZCBwb3NpdGlvbiBj
b250YWluZXIuCi0gICAgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBo
aWNzTGF5ZXIqLCBib29sKTsKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJl
ZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy4KKyAgICB2
b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiwgYm9vbCBw
cm9ncmFtbWF0aWNTY3JvbGwpOwogCiAgICAgZW51bSBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29u
RmxhZ3MgewogICAgICAgICBGb3JjZWRPbk1haW5UaHJlYWQgPSAxIDw8IDAsCkBAIC0xNDEsODQg
KzEyOSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAg
IH07CiAKLSAgICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUgaWQgdG8gYXNzb2NpYXRlIHdpdGggYSBs
YXllciB0aGF0IHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZSBzY3JvbGxpbmcg
dHJlZS4KLSAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOworICAgIC8v
IFRoZXNlIHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIENocm9taXVt
J3MgV2ViTGF5ZXIgYXBwcm9hY2guIFRoZWlyIG1lYW5pbmdmdWwKKyAgICAvLyBpbXBsZW1lbnRh
dGlvbnMgYXJlIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uCisgICAgdmlydHVhbCB2
b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
LCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9s
bGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXll
cklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3Jh
cGhpY3NMYXllciosIGJvb2wpIHsgfQogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2Vk
IHRvIGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2Vy
IGJlKSByZXByZXNlbnRlZCBieSBhIG5vZGUKLSAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUu
Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7
Ci0gICAgdm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7Citwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOwogCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KLSAgICB2b2lkIGNsZWFy
U3RhdGVUcmVlKCk7CisgICAgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihG
cmFtZSosIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKTsKKyAgICB1bnNpZ25lZCBjb21w
dXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBHcmFwaGljc0xheWVyKiBz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKIAotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CisgICAgUGFnZSogbV9wYWdlOwogCi0g
ICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwotICAg
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlRm9ySUQoU2Nyb2xsaW5nTm9k
ZUlEKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpIHsgfQogCi0gICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIGJvb2wgaGFzTm9uTGF5ZXJGaXhl
ZE9iamVjdHMoRnJhbWVWaWV3Kik7CiAgICAgdm9pZCB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKLSAgICBzdHJ1Y3QgU2Nyb2xsUGFyYW1ldGVy
cyB7Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7
Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotCi0g
ICAgICAgIGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIGJvb2wg
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgICAgIFNjcm9sbGJhck1vZGUgaG9y
aXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxTY3Jv
bGxiYXJNb2RlOwotCi0gICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKLQotICAgICAgICBJ
bnRSZWN0IHZpZXdwb3J0UmVjdDsKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7Ci0gICAg
fTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgotICAgIC8vIG5v
dyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSwgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKSwgZXRjLgotICAgIC8vIFRvIHJlc29sdmUgdGhp
cyBhbmQgYWxsIG9mIHRoZSBpZi1kZWZzIGluIHRoaXMgY2xhc3MsIHdlIHNob3VsZCBtYWtlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yCi0gICAgLy8ganVzdCBiZSBhIHR5cGVkZWYgdGhhdCBkZWZpbmVz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIHRvIGJlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBhbmQg
c2FtZQotICAgIC8vIGZvciBDaHJvbWl1bSBhbmQgb3RoZXIgcGxhdGZvcm1zLiBBbnkgc2hhcmVk
IGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGluIHNvbWV0aGluZyBjYWxsZWQgCi0gICAgLy8gU2Nyb2xs
aW5nQ29vcmRpbmF0b3JCYXNlIHdoaWNoIGFsbCBvZiB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRp
b25zIHdpbGwgaW5oZXJpdCBmcm9tLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODcwMAotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBT
Y3JvbGxQYXJhbWV0ZXJzJik7Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVu
c2lnbmVkKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lv
biYpOwotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwotCi0jaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShH
cmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7Ci0gICAgdm9pZCBzZXROb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBT
Y3JvbGxQYXJhbWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdm9p
ZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7
Ci0KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLQotICAg
IFBhZ2UqIG1fcGFnZTsKLQogICAgIGJvb2wgbV9mb3JjZU1haW5UaHJlYWRTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlczsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgdm9p
ZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotCi0gICAgdm9pZCBzY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiopOwotICAg
IHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7Ci0KLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVl
PiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKLSAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3Jv
bGxpbmdUcmVlOwotICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyOwotCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNj
cm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOwotI2VuZGlmCi0KLSAgICBTY3JvbGxp
bmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMxMDE0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSB7Ci19Owot
Ci0jaWYgIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nv
b3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7Ci19Ci0K
LVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQotewotICAgIEFT
U0VSVCghbV9wYWdlKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqKQotewot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xh
eWVyKikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oY29uc3QgUmVnaW9uJikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucykKLXsKLX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJG
b3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdy
YXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhp
Y3NMYXllciopCi17Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQotewotICAgIHJldHVybiBpZDsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3Jv
bGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3Rh
dGVUcmVlKCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0
YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQot
ewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNv
dW50KHVuc2lnbmVkKQotewotfQotCi0jZW5kaWYgLy8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiAxMzEwMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC05
NSwzMyArOTUsMzIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IG1f
dmVydGljYWxTY3JvbGxiYXJMYXllcjsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRp
bmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oUGFnZSog
cGFnZSkKKyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3ByaXZhdGUo
bmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSkKIHsKLSAgICBSZWZQdHI8U2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IGNvb3JkaW5hdG9yKGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRv
cihwYWdlKSkpOwotICAgIGNvb3JkaW5hdG9yLT5tX3ByaXZhdGUgPSBuZXcgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcml2YXRlOwotICAgIHJldHVybiBjb29yZGluYXRvci5yZWxlYXNlKCk7CiB9CiAK
LVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQorU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oKQogewot
ICAgIEFTU0VSVCghbV9wYWdlKTsKICAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCi1zdGF0aWMg
R3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVw
ZGF0ZWQoRnJhbWVWaWV3KikKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgRnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlclZpZXcpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCktPnNjcm9sbExheWVyKCk7Ci0j
ZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICAv
LyBDb21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNj
cm9sbGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCisgICAgLy8gYWxsIHNjcm9sbGFi
bGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVz
LiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKKyAgICAvLyBmcmFtZSB2aWV3IHdob3Nl
IGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCisgICAgUmVnaW9uIG5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1f
cGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIHNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBm
cmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShmcmFtZVZpZXcpOworICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9y
RnJhbWVWaWV3KGZyYW1lVmlldykpOwogfQogCiBzdGF0aWMgV2ViTGF5ZXIqIHNjcm9sbGFibGVM
YXllckZvckdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0xMjksNyArMTI4
LDcgQEAgc3RhdGljIFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaAogICAgIHJldHVy
biBsYXllci0+cGxhdGZvcm1MYXllcigpOwogfQogCi1zdGF0aWMgUGFzc093blB0cjxXZWJTY3Jv
bGxiYXJMYXllcj4gY3JlYXRlU2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFdl
YkxheWVyKiBzY3JvbGxMYXllciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXll
ciwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCitQYXNzT3duUHRyPFdlYlNjcm9sbGJhckxheWVyPiBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxi
YXIqIHNjcm9sbGJhciwgV2ViTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3Jv
bGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKICAgICBBU1NFUlQo
c2Nyb2xsYmFyKTsKICAgICBBU1NFUlQoc2Nyb2xsYmFyR3JhcGhpY3NMYXllcik7CkBAIC0xNzQs
NyArMTczLDcgQEAgc3RhdGljIFBhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZQogICAg
IHJldHVybiBzY3JvbGxiYXJMYXllci5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFt
ZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdIb3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5
ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcikKIHsKICAgICBpZiAoIWhvcml6b250YWxTY3Jv
bGxiYXJMYXllciB8fCAhY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgzLDcgKzE4Miw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0hvcmkKICAgICBtX3ByaXZhdGUtPnNldEhvcml6b250YWxTY3Jv
bGxiYXJMYXllcihjcmVhdGVTY3JvbGxiYXJMYXllcihmcmFtZVZpZXctPmhvcml6b250YWxTY3Jv
bGxiYXIoKSwgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIsIGZyYW1lVmlldykpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZp
ZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBH
cmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyKQogewogICAgIGlmICghdmVydGljYWxTY3JvbGxiYXJMYXllciB8fCAhY29vcmRpbmF0ZXNT
Y3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTky
LDEyICsxOTEsMTIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydAog
ICAgIG1fcHJpdmF0ZS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXllcihjcmVhdGVTY3JvbGxiYXJM
YXllcihmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCksIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5
ZXIoKSwgdmVydGljYWxTY3JvbGxiYXJMYXllciwgZnJhbWVWaWV3KSk7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExh
eWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcihH
cmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKIHsKICAgICBtX3ByaXZhdGUtPnNldFNjcm9sbExh
eWVyKHNjcm9sbExheWVyID8gc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihzY3JvbGxM
YXllcikgOiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNj
cm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYg
cmVnaW9uKQogewogICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExh
eWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgog
ICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZy
YW1lKCktPnZpZXcoKSkpOwpAQCAtMjEwLDEyICsyMDksNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXROb25GYXN0U2NyCiAgICAgfQogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0V2hlZWxFdmVudEhhbmRsZXJD
b3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQogewogICAgIC8vIFdlIHdvbid0
IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUs
IHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExh
eWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjIzLDcg
KzIxNyw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnQKICAgICAg
ICAgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQgPiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhy
ZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1h
aW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVj
ZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28g
Z3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJG
b3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0yMzEsMjQgKzIy
NSwxOSBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhCiAgICAgICAg
IG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKS0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHJl
YXNvbnMpOwogfQogCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9z
aXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVy
cyhHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJz
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKIHsKICAgICBpZiAoV2ViTGF5ZXIq
IHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIobGF5ZXIp
KQogICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlv
bkxheWVycyhlbmFibGUpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXll
cklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJs
ZSkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9D
b250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7CiAgICAg
aWYgKFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGlj
c0xheWVyKGxheWVyKSkKICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXIoZW5hYmxlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xs
YWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSwgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCiB7CiAgICAg
aWYgKCFzY3JvbGxMYXllcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjYyLDE5ICsyNTEsMTAgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZQogICAgIH0KIH0KIAotLy8g
RklYTUU6IFdlIHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGVzZSBzdHVicyB3aGVuIHdlIHJl
c29sdmUgdGhlIGlmLWRlZiBzb3VwIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgotLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCi1TY3JvbGxpbmdOb2RlSUQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBp
ZCkKLXsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRl
dGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKQotewotfQotCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3KiBmcmFtZVZpZXcpCiB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7CisgICAg
c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudChjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVy
Q291bnQoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW1faAorI2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKKworI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU2Nyb2xsYmFyOworY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOworY2xhc3Mg
V2ViTGF5ZXI7CitjbGFzcyBXZWJTY3JvbGxiYXJMYXllcjsKKworY2xhc3MgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bSA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShQYWdlKik7CisgICAg
dmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSgpOworCisgICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91
dC4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKTsK
KworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRo
ZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQg
d2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJh
bWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopOworCisgICAg
Ly8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVy
IGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNz
TGF5ZXIqKTsKKworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNvb3JkaW5h
dG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgorICAgIC8v
IGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zp
eGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBNYXJr
L3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMu
CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5
ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIEF0dGFjaC9kZXRhY2ggbGF5ZXIg
cG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyLgorICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBi
b29sKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNjcm9sbGFibGUg
bGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3Jh
cGhpY3NMYXllciopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVl
bEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5U
aHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIFBhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5
ZXI+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYkxheWVyKiBzY3JvbGxMYXll
ciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CisK
KyAgICB2b2lkIHNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpOworICAgIHZvaWQgc2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CisKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvclBy
aXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1faApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjX2gKKyNkZWZpbmUg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWNfaAorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKKworI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgOiBwdWJsaWMgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvck1hYygpOworCisg
ICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKKworICAgIHZpcnR1YWwgU2Nyb2xsaW5n
VHJlZSogc2Nyb2xsaW5nVHJlZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmVl
U3RhdGVJZk5lZWRlZCgpOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUg
Z2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91dC4KKyAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxs
ZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5n
ZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZp
ZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwg
c2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KiwgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKKworICAg
IC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBsYXll
ciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGlj
c0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQg
dGhlIHNjcm9sbGluZyBjb29yZGluYXRvciB1cGRhdGVzIHRoZSBzY3JvbGwgcG9zaXRpb24gb2Yg
dGhlIGdpdmVuIGZyYW1lIHZpZXcuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBpdCBt
ZWFucyB0aGF0IHRoZQorICAgIC8vIHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCBhc3luY2hyb25v
dXNseS4gSWYgaXQgcmV0dXJucyBmYWxzZSwgdGhlIGNhbGxlciBzaG91bGQgdXBkYXRlIHRoZSBz
Y3JvbGxpbmcgcG9zaXRpb24gaXRzZWxmLgorICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3KiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIEhh
bmRsZSB0aGUgd2hlZWwgZXZlbnQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFJldHVybnMgd2hl
dGhlciB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgb3Igbm90LgorICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworCisg
ICAgLy8gRGlzcGF0Y2hlZCBieSB0aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4g
ZnJhbWUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY3JvbGwgbGF5ZXIgcG9zaXRp
b24gbmVlZHMgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVN
YWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24oKTsKKworICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBpbmRpY3RhZSB0aGF0IGEgbGF5ZXIgc2hvdWxk
IGJlIChvciBzaG91bGQgbm90IGxvbmdlciBiZSkgcmVwcmVzZW50ZWQgYnkgYSBub2RlCisgICAg
Ly8gaW4gdGhlIHNjcm9sbGluZyB0cmVlLgorICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIGF0
dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFj
aEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24g
d2lwZXMgb3V0IHRoZSBjdXJyZW50IHRyZWUuCisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3RhdGVU
cmVlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRI
YW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpOworCisgICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyopOworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVO
b2RlRm9ySUQoU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJz
IHsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsK
KyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHk7CisKKyAg
ICAgICAgYm9vbCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgYm9vbCBo
YXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7CisKKyAgICAgICAgU2Nyb2xsYmFyTW9kZSBob3Jp
em9udGFsU2Nyb2xsYmFyTW9kZTsKKyAgICAgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9s
bGJhck1vZGU7CisKKyAgICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOworCisgICAgICAgIElu
dFJlY3Qgdmlld3BvcnRSZWN0OworICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKKyAgICB9
OworCisgICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJh
bWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRTY3Jv
bGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAg
IHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwor
CisgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CisKKyAgICB2
b2lkIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CisKKyAgICB2b2lkIHNjcm9sbGluZ1N0YXRl
VHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+Kik7
CisgICAgdm9pZCBjb21taXRUcmVlU3RhdGUoKTsKKworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0
ZVRyZWU+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlOworICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBt
X3Njcm9sbGluZ1RyZWU7CisgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXI7CisKKyAgICBIYXNoTWFwPFNjcm9sbGluZ05v
ZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj4gbV9zdGF0ZU5vZGVNYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQor
CisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWNfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbQkocmV2aXNpb24gMTMxMDE0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywzNyArMjcsMTM0IEBACiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCi0jaW1w
b3J0ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2ltcG9ydCAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgorI2luY2x1ZGUgIlJl
Z2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUu
aCIKKworI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi0jaW1wb3J0ICJGcmFtZVZpZXcu
aCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1RocmVhZC5oIgotI2ltcG9y
dCAiU2Nyb2xsaW5nVHJlZS5oIgotI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCi0jaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPHd0Zi9GdW5jdGlvbmFsLmg+
Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgot
I2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSB7
CiB9OwogCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCitTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWMoUGFnZSogcGFnZSkKKyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9y
KHBhZ2UpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRyZWU6OmNy
ZWF0ZSgpKQorICAgICwgbV9zY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWU6OmNyZWF0ZSh0aGlz
KSkKKyAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIodGhpcywgJlNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVk
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkp
OwogfQogCi1TY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKK1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMoKQogewotICAg
IEFTU0VSVCghbV9wYWdlKTsKICAgICBBU1NFUlQoIW1fc2Nyb2xsaW5nVHJlZSk7CiB9CiAKLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdlRGVzdHJveWVkKCkKK3sKKyAgICBTY3JvbGxpbmdD
b29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVD
b21taXR0ZXJUaW1lci5zdG9wKCk7CisKKyAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNjcm9sbGlu
ZyB0cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBTY3JvbGxp
bmdDb29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3RzLgorICAgIFNjcm9sbGluZ1Ro
cmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6aW52YWxpZGF0ZSwgbV9zY3JvbGxp
bmdUcmVlLnJlbGVhc2UoKSkpOworfQorCitTY3JvbGxpbmdUcmVlKiBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYzo6c2Nyb2xsaW5nVHJlZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5n
VHJlZSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYzo6Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKQoreworICAgIGlm
ICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbW1pdFRyZWVTdGF0ZSgpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICAvLyBD
b21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9s
bGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCisgICAgLy8gYWxsIHNjcm9sbGFibGUg
YXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBX
ZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKKyAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxh
eW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCisgICAgUmVnaW9uIG5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFn
ZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2Ug
bWF5IHdhbnQgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBzZXQgbm9uLWZhc3Qgc2Nyb2xsaW5nIHJl
Z2lvbnMgZm9yIG1vcmUgdGhhbgorICAgIC8vIGp1c3QgdGhlIHJvb3Qgbm9kZS4gQnV0IHJpZ2h0
IG5vdywgdGhpcyBjb25jZXB0IG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdC4KKyAgICBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUobm9uRmFzdFNjcm9sbGFibGVSZWdpb24sIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworCisgICAgaWYgKCFjb29yZGluYXRl
c1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFt
ZVZpZXctPnNjcm9sbExheWVySUQoKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47
CisKKyAgICBTY3JvbGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRlcnM7CisgICAgc2Nyb2xsUGFy
YW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7CisgICAg
c2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmll
dy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpLT5lbmFibGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT52
ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jp
em9udGFsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUo
KTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmll
dy0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7CisKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnNjcm9s
bE9yaWdpbiA9IGZyYW1lVmlldy0+c2Nyb2xsT3JpZ2luKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVy
cy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9
IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CisKKyAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9y
Tm9kZShzY3JvbGxQYXJhbWV0ZXJzLCBub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYzo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFt
ZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5v
ZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm47CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ck5vZGUoY29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCksIG5vZGUpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFu
Z2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHJv
b3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91
bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1l
Vmlldyk7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkp
OworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290TGF5ZXJEaWRDaGFuZ2UoKTsKKworICAg
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoZnJhbWVW
aWV3KTsKKworICAgIHNldFNjcm9sbExheWVyRm9yTm9kZShzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSkp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdIb3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5
ZXIqKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7
CkBAIC02OCw3ICsxNjUsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdI
b3JpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJh
bWVWaWV3LCBHcmFwaGljc0xheWVyKikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIEFTU0VSVChtX3BhZ2UpOwpAQCAtNzksNiArMTc2LDIwMiBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAor
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAg
IGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+aW5QYWdlQ2FjaGUoKSkgeworICAgICAgICAvLyBJZiB0aGlzIGZyYW1lIHZpZXcncyBkb2N1
bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNoZSwgd2UgZG9uJ3Qgd2FudCB0byB1
cGRhdGUgb3VyCisgICAgICAgIC8vIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0aW9uLiBKdXN0IGxl
dCB0aGUgRnJhbWVWaWV3IHRoaW5rIHRoYXQgd2UgZGlkLgorICAgICAgICB1cGRhdGVNYWluRnJh
bWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRp
Y1Njcm9sbCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXct
PnNjcm9sbExheWVySUQoKSk7CisgICAgaWYgKCFzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CisgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcqLCBjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChtX3Njcm9sbGluZ1RyZWUtPndpbGxX
aGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJl
ZTo6aGFuZGxlV2hlZWxFdmVudCwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB3aGVlbEV2ZW50KSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3JvbGxMYXllclBvc2l0aW9uKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsaW5nVHJlZS0+bWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oKTsKKworICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2UoZmFsc2UpOworICAgIGZyYW1lVmlldy0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFu
Z2VkKHNjcm9sbFBvc2l0aW9uKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnN0cmFpbnNTY3JvbGxp
bmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExh
eWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgc2Nyb2xs
TGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOworfQorCitT
Y3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFjaFRvU3RhdGVUcmVl
KFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIEFTU0VSVChzY3JvbGxMYXll
cklEKTsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogZXhpc3RpbmdOb2RlID0g
c3RhdGVOb2RlRm9ySUQoc2Nyb2xsTGF5ZXJJRCk7CisgICAgaWYgKGV4aXN0aW5nTm9kZSAmJiBl
eGlzdGluZ05vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbExheWVySUQ7CisKKyAgICBjbGVhclN0YXRlVHJlZSgpOworCisg
ICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIHRvIHRh
a2UgYSBwYXJlbnQgSUQgc28gdGhhdCBpdCBjYW4KKyAgICAvLyBhcHBlbmQgdGhlIG5vZGUgaW4g
dGhlIGFwcHJvcHJpYXRlIHNwb3QgaW4gdGhlIHN0YXRlIHRyZWUuIEZvciBub3cgd2UgYWx3YXlz
IGFzc3VtZQorICAgIC8vIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZS4KKyAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNy
ZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOworICAgIG1fc3RhdGVOb2RlTWFwLnNl
dChzY3JvbGxMYXllcklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsK
KyAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ck1hYzo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkK
K3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9s
bGluZ1N0YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7
CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5k
IHRob3NlIGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgorICAgIC8vIFRo
aXMgd2lsbCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVu
IGluIHRoZSB0cmVlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSgpCit7
CisgICAgbV9zdGF0ZU5vZGVNYXAuY2xlYXIoKTsKKyAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkK
KyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIGlmICghc2Ny
b2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIYXNoTWFwPFNjcm9sbGluZ05v
ZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5v
ZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2Rl
ID0gaXQtPnZhbHVlOworICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShu
b2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZW5zdXJlUm9vdFN0YXRl
Tm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICBhdHRhY2hUb1N0
YXRlVHJlZShmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiBzY3Jv
bGxMYXllciwgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIG5vZGUtPnNldFNjcm9s
bExheWVyKHNjcm9sbExheWVyKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bkZvck5vZGUoY29uc3QgUmVnaW9uJiByZWdpb24sIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24p
OworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWM6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFt
ZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9k
ZSkKK3sKKyAgICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJh
bWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNp
dHkpOworICAgIG5vZGUtPnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBh
cmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0
aWNhbFNjcm9sbGJhcik7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Ny
b2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7CisgICAgbm9kZS0+c2V0VmVy
dGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2Rl
KTsKKworICAgIG5vZGUtPnNldFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9y
aWdpbik7CisgICAgbm9kZS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3Bv
cnRSZWN0KTsKKyAgICBub2RlLT5zZXRDb250ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVycy5jb250
ZW50c1NpemUpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVu
c2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgcmVhc29ucykKK3sK
KyAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciBpcyBsaWtlbHkgdG8gYmUgb3V0
LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3JtTGF5ZXIKKyAgICAvLyBhdCB0aGlzIHBvaW50LiBT
byB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdlIHN3aXRjaCBiYWNrIHRvIG1haW4gdGhyZWFkIHNj
cm9sbGluZworICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGxheWVyIHBvc2l0aW9uaW5nIGJ1Z3Mu
CisgICAgaWYgKHJlYXNvbnMpCisgICAgICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9z
aXRpb24oKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRT
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKHJlYXNvbnMpOworICAg
IHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7
CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
CisgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2NoZWR1bGVUcmVl
U3RhdGVDb21taXQoKQoreworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RhcnRPbmVTaG90KDApOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0
ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjPiopCit7CisgICAgY29t
bWl0VHJlZVN0YXRlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1p
dFRyZWVTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFu
Z2VkUHJvcGVydGllcygpKTsKKworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IHRyZWVT
dGF0ZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5jb21taXQoKTsKKyAgICBTY3JvbGxpbmdUaHJl
YWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1RyZWVTdGF0ZSwgbV9z
Y3JvbGxpbmdUcmVlLmdldCgpLCB0cmVlU3RhdGUucmVsZWFzZSgpKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168251</attachid>
            <date>2012-10-11 10:29:37 -0700</date>
            <delta_ts>2012-10-11 11:35:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98700-20121011102834.patch</filename>
            <type>text/plain</type>
            <size>79671</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1NWY0ZmRkNTg4Y2Nm
MGI5MjBiYTMxZjNiYjhkMGY0NjEzYWFkMC4uMDNhNzU0NzY3MTkyYjAyZDc2ODFkYzVkYTY3ZTY5
Nzg0NDJlNmUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0xMSAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
IGlzIGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBz
Y3JvbGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5l
dyBjbGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGlu
aGVyaXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRk
cyBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdv
cmsuIAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQg
aXMgY3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRj
aCBhbHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Ny
b2xsaW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJl
bGllZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1l
Vmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQ
b3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpm
cmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklz
Q29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bTo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGlj
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0
TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWlu
ZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVy
Q291bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5
ZXJzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpw
YWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1
dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6
b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVy
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0
dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVy
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJD
b3VudEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9s
bExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3Rh
dGUpOgorCiAyMDEyLTEwLTExICBBcm5hdWQgUmVuZXZpZXIgIDxhLnJlbmV2aWVyQHNpc2Euc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZG9lcyBub3Qgd29y
ayB3aXRoIGF0aSBkcml2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWUwMzMzZTQ4ZWRkNjQ0
ODZjNDMwNWEwMmMyZGY1NWI0ZWVkYzcyNC4uOTYyMzMxODZlMzcyOGYyOWY0ZWJiODNmMTlmOWQ1
NDg4NmIzMzQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE3NTksNyArMTc1OSw2IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFp
bnRzLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAotICAg
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAKIAogICAgIHBsYXRm
b3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ1YWYzNmMzNGQzZjRhZTc5YWI2NmFmMDE2NTJmNDE5
ZWFmN2JkZTYuLmYwZWI3N2U5M2ZkY2QxYzAwOThkOGY2NTRkZWRhZjUwOTJhZDc3NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDA3Miw3ICs0MDcyLDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25z
dHJhaW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yTm9uZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDQyM2M2MTliNWNiMTJm
NGQ4MjQ5YzhmMDcwOWQwMzYxOTlmNzRlODUuLjhmYWViODBjNGNhNzYxNGU0MjY2MzcwNDZhMWIw
OTA5MDZiMjRlNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtOTA2LDcgKzkwNiw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29u
c3RyYWludHMuY3BwIFwKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5j
cHAgXAotICAgIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgXAog
ICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwIFwKICAgICBwYWdlL1NlY3VyaXR5UG9saWN5LmNw
cCBcCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA0YWIx
ODdhMTdkNDBiODgwYTU4YjY3Y2U5NDJkYTMzOTEyOTI3ZjQ1Li40M2VkMjAwMDY5NmY3NzMyMmM3
MWMxYmQ1Mzg2OTgzMzM1NjgxNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMjUzNCwxMCAr
MjUzNCw4IEBAIF9fWk43V2ViQ29yZTEzU2Nyb2xsaW5nVHJlZTIydXBkYXRlQmFja0ZvcndhcmRT
dGF0ZUViYgogX19aTjdXZWJDb3JlMTNTY3JvbGxpbmdUcmVlRDFFdgogX19aTjdXZWJDb3JlMTVT
Y3JvbGxpbmdUaHJlYWQxNWRpc3BhdGNoQmFycmllckVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQog
X19aTjdXZWJDb3JlMTVTY3JvbGxpbmdUaHJlYWQ4ZGlzcGF0Y2hFUktOM1dURjhGdW5jdGlvbklG
dnZFRUUKLV9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3IyM2NvbW1pdFRyZWVTdGF0
ZUlmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTIwU2Nyb2xsaW5nQ29vcmRpbmF0b3I0NHNldEZvcmNl
TWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzRWIKIF9fWk43V2ViQ29yZTRQYWdl
MjBzY3JvbGxpbmdDb29yZGluYXRvckV2Ci1fX1pOSzdXZWJDb3JlMjBTY3JvbGxpbmdDb29yZGlu
YXRvcjEzc2Nyb2xsaW5nVHJlZUV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYWZiYjMxZWMzYTdiOGVjYmY3M2Q0
NTQ1ZjNjNGRlNDE4NDVkYWQxZi4uOWUwODc1ZDJiMDdhMGU0ZDYwYjk4MWQ0NWZhNTQ2MjAyOGQy
NDY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTEwMyw2ICsx
MDMsNyBAQAogICAgICAgJy4uL3BhZ2UvYW5pbWF0aW9uJywKICAgICAgICcuLi9wYWdlL2Nocm9t
aXVtJywKICAgICAgICcuLi9wYWdlL3Njcm9sbGluZycsCisgICAgICAnLi4vcGFnZS9zY3JvbGxp
bmcvY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtJywKICAgICAgICcuLi9wbGF0Zm9ybS9h
bmltYXRpb24nLAogICAgICAgJy4uL3BsYXRmb3JtL2F1ZGlvJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBkZjE5Mjg1MWI2MzAzYTAxNDhiNmYxNThmYmVjZGM5YTVlMjkwMzA4Li4yMTRhYzI3ZTgzMDlm
Y2Q2YmE3MWIwMmQ2MjQzZmZlYjI4NGNkOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjI1LDEx
ICszMjI1LDEyIEBACiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3Ry
YWludHMuaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oJywKKyAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZU5vZGUuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlTm9kZS5oJywKLSAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGFnZS93aW4vRHJhZ0Nv
bnRyb2xsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4u
Y3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9GcmFtZUNHV2luLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDc0MWU4NzE2MDU5ZWUx
NjRkY2FiNDFhMzMxZDBmYzA0ZmMwOTI1YWEuLmIxYzgzMGM3ZGI0YzRkNTJjYTcyNWRhYjg5MWYw
NzQ4MjA3NTVkMTAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0yNzI1OSwxMCArMjcyNTksNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXHNjcm9sbGluZ1xTY3JvbGxpbmdDb29yZGlu
YXRvck5vbmUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXFNlY3VyaXR5T3JpZ2luLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NmE4YTk3NjJjNjA1ZjIxMzY0OTA4NThjMzQyZDA0YzI5YTNjNjNjMS4uZGQxOTc1ZTAzNTYxNjg2
NTM1OGY1ZDM5NjU4NGM4NWViMWQwOWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAyMSw3ICsxMDIxLDYgQEAKIAkJMzdG
ODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3Jl
VVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICov
OyB9OwogCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3MTE4MzY4
NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovOyB9OwotCQkzODY2QUYzODE0RjFDMTcx
MDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAv
KiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwICovOyB9OwogCQkzQUIwMkQyQTEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJh
Y2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OwogCQkzQUMzNjgwMDEyRUY3QTA5MDA2
QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdl
VHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zMzE4LDYgKzMzMTcsNyBAQAogCQk5M0I3MEQ3MDA5RUIwQzdDMDA5RDg0Njgg
LyogU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I3
N0EzODBBREQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzdBMzcwQURENzkyNTAwRUE0Qjgx
IC8qIEZyYW1lTG9hZGVyVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5M0JBNTlCMjBGMkFBNUZFMDA4RThFOTkgLyogSlNDREFUQVNlY3Rp
b25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCQTU5QjEwRjJBQTVGRTAwOEU4RTk5IC8qIEpTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCAq
LzsgfTsKKwkJOTNCRjMzREYxNjI2ODQyMzAwODA4RUEwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JG
MzNERTE2MjY4NDIzMDA4MDhFQTAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCAqLzsgfTsK
IAkJOTNDMDlBNTMwQjA2NERCMzAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDMDlBNTIwQjA2NERCMzAwNUFC
RDREIC8qIEV2ZW50SGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzQzA5QTdGMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Mw
OUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICovOyB9OwogCQk5M0Mw
OUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5QTgwMEIwNjRGMDAwMDVBQkQ0RCAv
KiBFdmVudEhhbmRsZXIuY3BwICovOyB9OwpAQCAtODE0NSw3ICs4MTQ1LDYgQEAKIAkJMzdGODE4
RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWls
aW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVEZXB0aExpbWl0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTM4NjZBRjM3MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVHJhY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQzM2N0ZFMTJFRjdBMDkwMDZB
M0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA1MTksNiArMTA1MTgsNyBAQAogCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyog
U2NyaXB0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3N0EzNzBB
REQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGcmFtZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQkE1OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NEQVRBU2VjdGlvbkN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQkYzM0RFMTYyNjg0MjMw
MDgwOEVBMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0MwOUE1MjBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50SGFuZGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRI
YW5kbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZl
bnRIYW5kbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUE4MDBC
MDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV2ZW50SGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDU4MCw3ICsxNDU4MCw2IEBACiAJCQkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMw
IC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFGNjJFRTQxNERBMjJBNzAwNDE1
NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkxQUY2MkVFNTE0REEyMkE3
MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKLQkJCQkzODY2QUYzNzE0RjFD
MTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCAqLywKIAkJCQk5MzFD
QkQwNjE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLywKIAkJCQk5
MzFDQkQwNzE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggKi8sCiAJCQkJ
OTMxQ0JEMDgxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAgKi8sCkBAIC0xNDYwMCw2ICsxNDU5OSw3IEBACiAJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTkzQkYzM0RFMTYyNjg0MjMwMDgwOEVBMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICov
LAogCQkJCTFBRjYyRUUzMTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5tbSAqLywKIAkJCQk5MzFDQkQxMjE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVO
b2RlTWFjLm1tICovLAogCQkJCTFBRjYyRjIzMTREQUZFOTEwMDQxNTU2QyAvKiBTY3JvbGxpbmdU
aHJlYWRNYWMubW0gKi8sCkBAIC0yODExNiw3ICsyODExNiw2IEBACiAJCQkJMEY2MDVBRUMxNUY5
NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBRjYyRUU3MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkVFNjE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkzODY2QUYzODE0RjFDMTcxMDAy
ODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBRjYyRjI1MTREQUZFOUUwMDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFGNjJGMjQxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3Jv
bGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IGQ1MWI4ZDA0YzVh
OGRmZDk2NTAwZjE1Y2JlNWYyZWNkOGU5ZjQ5MTUuLmIxOWJiMTNkOTkzOTA4ODU3ZTZhNGRiNjNl
OWEwNDI2ZjRhYTkzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRl
ICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKLSNpbmNs
dWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNDUsNDYgKzQzLDQ0IEBACiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0jaW5jbHVkZSAiU2Nyb2xs
aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgotI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkK
KyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgiCiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMocGFnZSkpOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0ocGFnZSkpOworI2VuZGlmCisKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKTsKK30KKwogU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFn
ZSkKICAgICAsIG1fZm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZmFs
c2UpCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICAsIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRlKCkpCi0gICAgLCBtX3Njcm9sbGluZ1Ry
ZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQpCi0jZW5kaWYKLSAgICAsIG1fcHJpdmF0ZSgwKQog
ewogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkKCkKK1Njcm9s
bGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQogewotICAgIEFTU0VSVCht
X3BhZ2UpOwotICAgIG1fcGFnZSA9IDA7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwotCi0gICAg
Ly8gSW52YWxpZGF0aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVu
Y2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1Ry
ZWUgb2JqZWN0cy4KLSAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGlu
Z1RyZWU6OmludmFsaWRhdGUsIG1fc2Nyb2xsaW5nVHJlZS5yZWxlYXNlKCkpKTsKLSNlbmRpZgor
ICAgIEFTU0VSVCghbV9wYWdlKTsKIH0KIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
Ci1TY3JvbGxpbmdUcmVlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSgpIGNv
bnN0Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkKCkKIHsKLSAgICBB
U1NFUlQobV9zY3JvbGxpbmdUcmVlKTsKLSAgICByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLmdldCgp
OworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIG1fcGFnZSA9IDA7CiB9Ci0jZW5kaWYKIAogYm9v
bCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXco
RnJhbWVWaWV3KiBmcmFtZVZpZXcpIGNvbnN0CiB7CkBAIC0xMDYsNyArMTAyLDcgQEAgYm9vbCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3KiBmcmFtZVZpZXcKICNlbmRpZgogfQogCi1zdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxv
Y2F0aW9uKQorUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikK
IHsKICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiAgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwpAQCAtMTQ4LDQ4ICsxNDQsMTYgQEAgc3RhdGljIFJl
Z2lvbiBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJ
bnRQb2ludCYgZnJhbWUKICAgICByZXR1cm4gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiB9CiAK
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVW
aWV3KiBmcmFtZVZpZXcpCit1bnNpZ25lZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUN1
cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIG9m
IHRoZSBwYWdlIHRoYXQgd2UgY2FuJ3QgZG8gZmFzdCBzY3JvbGxpbmcgZm9yLiBUaGlzIGN1cnJl
bnRseSBpbmNsdWRlcwotICAgIC8vIGFsbCBzY3JvbGxhYmxlIGFyZWFzLCBzdWNoIGFzIHN1YmZy
YW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4gV2UgbmVlZCB0byBkbyB0aGlzIGV2
ZW4gaWYgdGhlCi0gICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMg
bm90IHRoZSBtYWluIGZyYW1lLgotICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9
IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQ
b2ludCgpKTsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgLy8gSW4gdGhl
IGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBzZXQgbm9uLWZhc3Qg
c2Nyb2xsaW5nIHJlZ2lvbnMgZm9yIG1vcmUgdGhhbgotICAgIC8vIGp1c3QgdGhlIHJvb3Qgbm9k
ZS4gQnV0IHJpZ2h0IG5vdywgdGhpcyBjb25jZXB0IG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdC4K
LSAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUobm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24sIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOwotI2Vsc2UKLSAg
ICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7Ci0j
ZW5kaWYKLQotICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVW
aWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nyb2xsUGFyYW1ldGVycyBzY3JvbGxQYXJh
bWV0ZXJzOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkg
PSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0gICAgc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZp
ZXctPmhvcml6b250YWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOwotICAgIHNjcm9sbFBhcmFtZXRl
cnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpICYmIGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+ZW5hYmxlZCgpOwotICAg
IHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPmhv
cml6b250YWxTY3JvbGxiYXJNb2RlKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpOwotCi0gICAg
c2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4gPSBmcmFtZVZpZXctPnNjcm9sbE9yaWdpbigp
OwotICAgIHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgp
LCBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSk7Ci0gICAgc2Nyb2xsUGFy
YW1ldGVycy5jb250ZW50c1NpemUgPSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOworICAgIHVu
c2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwogCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0
ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxl
ckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7Cisg
ICAgfQogCi0gICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywg
bm9kZSk7Ci0jZWxzZQotICAgIHNldFNjcm9sbFBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1ldGVycyk7
Ci0jZW5kaWYKKyAgICByZXR1cm4gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKIH0KIAogdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5n
ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMjIsNyArMTg2LDcgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZWRPYmplY3RzRGlkQ2hhbmdlKEZyYW1lVmlldyog
ZnJhbWVWaWV3KQogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQoKTsKIH0KIAotc3RhdGljIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJh
bWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQorR3JhcGhpY3NMYXllciogU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQog
ewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBGcmFtZSogZnJhbWUgPSBm
cmFtZVZpZXctPmZyYW1lKCk7CkBAIC0yNDcsNjcgKzIxMSw5IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmll
dykKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
CiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAg
Ly8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwg
dGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KLSAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KGZyYW1lVmlldyk7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCkpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290TGF5ZXJEaWRDaGFu
Z2UoKTsKLSNlbmRpZgotCiAgICAgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChmcmFtZVZpZXcpOwog
ICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KCk7Ci0gICAgCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBzZXRTY3JvbGxM
YXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpKTsKLSNlbHNlCi0gICAgc2V0U2Nyb2xs
TGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZy
YW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIGlm
ICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBpZiAo
ZnJhbWVWaWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAg
IC8vIElmIHRoaXMgZnJhbWUgdmlldydzIGRvY3VtZW50IGlzIGJlaW5nIHB1dCBpbnRvIHRoZSBw
YWdlIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBvdXIKLSAgICAgICAgLy8gbWFpbiBm
cmFtZSBzY3JvbGwgcG9zaXRpb24uIEp1c3QgbGV0IHRoZSBGcmFtZVZpZXcgdGhpbmsgdGhhdCB3
ZSBkaWQuCi0gICAgICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9k
ZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBpZiAo
IXN0YXRlTm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGVOb2RlLT5zZXRS
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dy
YW1tYXRpY1Njcm9sbCgpKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotICAgIHJl
dHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsUG9zaXRpb24pOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpo
YW5kbGVXaGVlbEV2ZW50KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3Bh
Z2UpOwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBpZiAobV9zY3JvbGxp
bmdUcmVlLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQo
JlNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwg
d2hlZWxFdmVudCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBk
YXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBib29sIHByb2dyYW1tYXRpY1Njcm9sbCkKQEAgLTMzMSw0OCArMjM3LDYgQEAgdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50
UG9pbnQmIHNjcm9sbFAKICAgICBmcmFtZVZpZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9s
ZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQ
b3NpdGlvbigpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7
Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
Ci0gICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCi17
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxpbmdUcmVlLT5tYWluRnJh
bWVTY3JvbGxQb3NpdGlvbigpOwotCi0gICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZShmYWxzZSk7Ci0gICAgZnJhbWVWaWV3LT5ub3RpZnlTY3JvbGxQb3Np
dGlvbkNoYW5nZWQoc2Nyb2xsUG9zaXRpb24pOwotICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWlu
c1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciog
c2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAg
ICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7
Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBPUyhEQVJXSU4pKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQogewpAQCAtMzg5LDI1ICsyNTMs
NiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiB9CiAjZW5kaWYKIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhG
cmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNv
dW50ID0gMDsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQg
Kz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgp
KTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRXaGVlbEV2ZW50SGFu
ZGxlckNvdW50Rm9yTm9kZSh3aGVlbEV2ZW50SGFuZGxlckNvdW50LCBub2RlKTsKLSNlbHNlCi0g
ICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKLSAg
ICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKLSNlbmRpZgotfQotCiBib29sIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZpZXcqIGZyYW1lVmlldykK
IHsKICAgICBjb25zdCBGcmFtZVZpZXc6OlZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RTZXQqIHZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzID0gZnJhbWVWaWV3LT52aWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0cygpOwpAQCAtNDY0LDE1OSArMzA5LDQgQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjp1bmlxdWVTY3JvbGxMYXllcklEKCkKICAgICByZXR1cm4gdW5pcXVlU2Ny
b2xsTGF5ZXJJRCsrOwogfQogCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLVNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN0YXRlTm9kZUZv
cklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewotICAgIGlmICghc2Nyb2xsTGF5
ZXJJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwg
U2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAu
ZmluZChzY3JvbGxMYXllcklEKTsKLSAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQt
PnZhbHVlOwotICAgIHJldHVybiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShub2RlKTsK
LX0KLQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0YXRl
VHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKLXsKLSAgICBBU1NFUlQoc2Nyb2xs
TGF5ZXJJRCk7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIGV4aXN0aW5nTm9k
ZSA9IHN0YXRlTm9kZUZvcklEKHNjcm9sbExheWVySUQpOwotICAgIGlmIChleGlzdGluZ05vZGUg
JiYgZXhpc3RpbmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxMYXllcklEOwotCi0gICAgY2xlYXJTdGF0ZVRyZWUoKTsK
LQotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSB0
byB0YWtlIGEgcGFyZW50IElEIHNvIHRoYXQgaXQgY2FuCi0gICAgLy8gYXBwZW5kIHRoZSBub2Rl
IGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluIHRoZSBzdGF0ZSB0cmVlLiBGb3Igbm93IHdlIGFs
d2F5cyBhc3N1bWUKLSAgICAvLyB0aGlzIGlzIHRoZSByb290IG5vZGUuCi0gICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnNldFJvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkpKTsKLSAgICBtX3N0YXRlTm9kZU1h
cC5zZXQoc2Nyb2xsTGF5ZXJJRCwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUo
KSk7Ci0gICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQp
Ci17Ci0gICAgaWYgKCFzY3JvbGxMYXllcklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtlKHNjcm9sbExheWVySUQp
OwotCi0gICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ryb3kgY2hpbGRyZW4sIGFu
ZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFzaE1hcC4KLSAgICAvLyBU
aGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBhY3R1YWxseSBjaGlsZHJl
biBpbiB0aGUgdHJlZS4KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2Rl
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUoKQotewot
ICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgaWYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCi0g
ICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOwotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZy
YW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIGF0dGFjaFRvU3RhdGVUcmVlKGZyYW1lVmlldy0+
c2Nyb2xsTGF5ZXJJRCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Ny
b2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBTY3JvbGxpbmdTdGF0
ZU5vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOwot
ICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mIHJl
Z2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNl
dE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1l
dGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycywgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldEhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJh
bWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbm9kZS0+c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhcik7Ci0gICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNj
cm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICBub2RlLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKTsKLSAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAgbm9kZS0+c2V0U2Nyb2xsT3Jp
Z2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBub2RlLT5zZXRWaWV3cG9y
dFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG5vZGUtPnNldENvbnRl
bnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7Ci0gICAgc2NoZWR1bGVUcmVl
U3RhdGVDb21taXQoKTsKLX0KLQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKLSAgICBzY2hlZHVs
ZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRT
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgLy8gVGhlIEZyYW1lVmlldydzIEdyYXBoaWNz
TGF5ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0Zm9ybUxheWVy
Ci0gICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9yZSB3ZSBzd2l0
Y2ggYmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKLSAgICAvLyBpbiBvcmRlciB0byBhdm9p
ZCBsYXllciBwb3NpdGlvbmluZyBidWdzLgotICAgIGlmIChyZWFzb25zKQotICAgICAgICB1cGRh
dGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZChyZWFzb25zKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQot
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCi17
Ci0gICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hh
bmdlZFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8
U2Nyb2xsaW5nQ29vcmRpbmF0b3I+KikKLXsKLSAgICBjb21taXRUcmVlU3RhdGUoKTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKQotewot
ICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwotICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21taXRUcmVlU3RhdGUoKQotewotICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7Ci0KLSAgICBPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVUcmVlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y29tbWl0KCk7Ci0gICAg
U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpjb21taXROZXdU
cmVlU3RhdGUsIG1fc2Nyb2xsaW5nVHJlZS5nZXQoKSwgdHJlZVN0YXRlLnJlbGVhc2UoKSkpOwot
fQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXll
cnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhp
Y3NMYXllciosIGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFw
aGljc0xheWVyKiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudC4KLX0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXggMTQ3ODU5N2U1NDY2MGIwMzkxYmNlYTRjNzE5
YzZlMzlkZDg5YTkzYS4uODc0MWVjNmUwMTliNWFiNzk2OTA4ZDI0NmEzMWYzZDM0ZTUxMDc1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5oCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRl
ZiB1bnNpZ25lZCBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uczsKIHR5cGVkZWYgdWludDY0X3Qg
U2Nyb2xsaW5nTm9kZUlEOwogCitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3MgU2Nyb2xs
YWJsZUFyZWE7Ci1jbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGU7CiBjbGFzcyBTY3Jv
bGxpbmdTdGF0ZU5vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CiBjbGFz
cyBTY3JvbGxpbmdTdGF0ZVRyZWU7CkBAIC02NSwyMCArNjUsMjEgQEAgY2xhc3MgU2Nyb2xsaW5n
VHJlZTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShQYWdlKik7Ci0gICAgflNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKIAot
ICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVk
KCk7CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNjcm9sbGluZ1RyZWUq
IHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKLSAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVk
KCk7CisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQoKSB7IH0KKwogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNvb3Jk
aW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4KICAgICBi
b29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopIGNvbnN0Owog
CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBo
YXMgYmVlbiBsYWlkIG91dC4KLSAgICB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVW
aWV3Kik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3
KikgeyB9CiAKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGEgd2hlZWwgZXZlbnQg
aGFuZGxlciBpcyBhZGRlZCBvciByZW1vdmVkIGluIHRoZSAKICAgICAvLyBmcmFtZSB2aWV3J3Mg
dW5kZXJseWluZyBkb2N1bWVudC4KQEAgLTkxLDI5ICs5MiwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKICAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJh
bWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZy
YW1lVmlldyopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9yaXpv
bnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0g
ICAgdm9pZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVW
aWV3KiwgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKLQotICAgIC8v
IFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBsYXllciBm
b3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2b2lkIGZyYW1lVmlld1ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciogdmVy
dGljYWxTY3JvbGxiYXJMYXllcik7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVy
IHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4K
LSAgICB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFy
ZWEqLCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0aGF0IHRoZSBzY3JvbGxp
bmcgY29vcmRpbmF0b3IgdXBkYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBnaXZlbiBm
cmFtZSB2aWV3LiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgbWVhbnMgdGhhdCB0
aGUKLSAgICAvLyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkuIElmIGl0
IHJldHVybnMgZmFsc2UsIHRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0aGUgc2Nyb2xsaW5nIHBv
c2l0aW9uIGl0c2VsZi4KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFt
ZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVu
dCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMg
aGFuZGxlZCBvciBub3QuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmlldyosIGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdSb290
TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKLSAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBz
Y3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hh
bmdlcy4KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgLy8gRGlzcGF0Y2hlZCBieSB0
aGUgc2Nyb2xsaW5nIHRyZWUgd2hlbmV2ZXIgdGhlIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0aW9u
IGNoYW5nZXMgYW5kIHRoZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gbmVlZHMgdG8gYmUgdXBkYXRl
ZCBhcyB3ZWxsLgotICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb25BbmRTY3Jv
bGxMYXllclBvc2l0aW9uKCk7CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcg
Y29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWly
CisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNp
ZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKICAg
ICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSBkdXJpbmcgaGFuZGxlV2hlZWxF
dmVudC4gVGhpcyBpcyByZXF1aXJlZCBhcyBsb25nIGFzIHNjcm9sbGJhcnMgYXJlIHBhaW50ZWQg
b24gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTIzLDE1ICsxMDYsMjAgQEAgcHVibGljOgogICAgIC8v
IEZvcmNlIGFsbCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gdXBkYXRlcyB0byBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgogICAgIHZvaWQgc2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMoYm9vbCk7CiAKLSAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNjcm9sbGlu
ZyBjb29yZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXllcnMgZml4ZWQgdG8gdGhl
aXIKLSAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KLSAgICBib29sIHN1cHBvcnRz
Rml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0OworICAgIC8vIFRoZXNlIHZpcnR1YWwgZnVuY3Rp
b25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIHRoZSB0aHJlYWRlZCBzY3JvbGxpbmcgYXJjaGl0
ZWN0dXJlLCBhbmQgdGhleSBhcmUKKyAgICAvLyB0aGVpciBtZWFuaW5nZnVsIGltcGxlbWVudGF0
aW9ucyBhcmUgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuCisgICAgdmlydHVhbCBib29sIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVW
aWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJl
ZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKSB7IHJldHVybiBub2RlSUQ7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQogCi0gICAgLy8gTWFyay91bm1hcmsgYSBsYXll
ciBhcyBhIGNvbnRhaW5lciBmb3IgZml4ZWQgcG9zaXRpb24gbGF5ZXJzLgotICAgIHZvaWQgc2V0
TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJv
b2wpOworICAgIC8vIEdlbmVyYXRlZCBhIHVuaXF1ZSBpZCBmb3Igc2Nyb2xsIGxheWVycy4KKyAg
ICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOwogCi0gICAgLy8gQXR0YWNo
L2RldGFjaCBsYXllciBwb3NpdGlvbiB0byBhbmNlc3RvciBmaXhlZCBwb3NpdGlvbiBjb250YWlu
ZXIuCi0gICAgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5
ZXIqLCBib29sKTsKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVu
ZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy4KKyAgICB2b2lkIHVw
ZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiwgYm9vbCBwcm9ncmFt
bWF0aWNTY3JvbGwpOwogCiAgICAgZW51bSBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uRmxhZ3Mg
ewogICAgICAgICBGb3JjZWRPbk1haW5UaHJlYWQgPSAxIDw8IDAsCkBAIC0xNDEsODQgKzEyOSwz
MSBAQCBwdWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAgIH07CiAK
LSAgICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUgaWQgdG8gYXNzb2NpYXRlIHdpdGggYSBsYXllciB0
aGF0IHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4K
LSAgICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOworICAgIC8vIFRoZXNl
IHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgdW5pcXVlIHRvIENocm9taXVtJ3MgV2Vi
TGF5ZXIgYXBwcm9hY2guIFRoZWlyIG1lYW5pbmdmdWwKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
YXJlIGluIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uCisgICAgdmlydHVhbCB2b2lkIGZy
YW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFw
aGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVB
cmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NM
YXllciosIGJvb2wpIHsgfQogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGlu
ZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2VyIGJlKSBy
ZXByZXNlbnRlZCBieSBhIG5vZGUKLSAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCi0gICAg
U2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7Ci0gICAg
dm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCk7Citwcm90ZWN0ZWQ6Cisg
ICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOwogCi0gICAgLy8gVGhpcyBm
dW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KLSAgICB2b2lkIGNsZWFyU3RhdGVU
cmVlKCk7CisgICAgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSos
IGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKTsKKyAgICB1bnNpZ25lZCBjb21wdXRlQ3Vy
cmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxM
YXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKIAotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBT
Y3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CisgICAgUGFnZSogbV9wYWdlOwogCi0gICAgdm9p
ZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwotICAgIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlRm9ySUQoU2Nyb2xsaW5nTm9kZUlEKTsK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGlu
Z1JlYXNvbnMpIHsgfQogCi0gICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50
Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIGJvb2wgaGFzTm9uTGF5ZXJGaXhlZE9iamVj
dHMoRnJhbWVWaWV3Kik7CiAgICAgdm9pZCB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKCk7CiAKLSAgICBzdHJ1Y3QgU2Nyb2xsUGFyYW1ldGVycyB7Ci0g
ICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7Ci0gICAg
ICAgIFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotCi0gICAgICAg
IGJvb2wgaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIGJvb2wgaGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgICAgIFNjcm9sbGJhck1vZGUgaG9yaXpvbnRh
bFNjcm9sbGJhck1vZGU7Ci0gICAgICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxTY3JvbGxiYXJN
b2RlOwotCi0gICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKLQotICAgICAgICBJbnRSZWN0
IHZpZXdwb3J0UmVjdDsKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7Ci0gICAgfTsKLQot
ICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgotICAgIC8vIG5vdyB1c2Vz
IG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSwgc2V0V2hlZWxFdmVu
dEhhbmRsZXJDb3VudEZvck5vZGUoKSwgZXRjLgotICAgIC8vIFRvIHJlc29sdmUgdGhpcyBhbmQg
YWxsIG9mIHRoZSBpZi1kZWZzIGluIHRoaXMgY2xhc3MsIHdlIHNob3VsZCBtYWtlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yCi0gICAgLy8ganVzdCBiZSBhIHR5cGVkZWYgdGhhdCBkZWZpbmVzIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjIHRvIGJlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBhbmQgc2FtZQot
ICAgIC8vIGZvciBDaHJvbWl1bSBhbmQgb3RoZXIgcGxhdGZvcm1zLiBBbnkgc2hhcmVkIGZ1bmN0
aW9uYWxpdHkgY2FuIGJlIGluIHNvbWV0aGluZyBjYWxsZWQgCi0gICAgLy8gU2Nyb2xsaW5nQ29v
cmRpbmF0b3JCYXNlIHdoaWNoIGFsbCBvZiB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zIHdp
bGwgaW5oZXJpdCBmcm9tLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05ODcwMAotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQ
YXJhbWV0ZXJzJik7Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVk
KTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpOwot
ICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwotCi0jaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGlj
c0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQ
YXJhbWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdm9pZCBzZXRX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7Ci0KLSAg
ICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLQotICAgIFBhZ2Uq
IG1fcGFnZTsKLQogICAgIGJvb2wgbV9mb3JjZU1haW5UaHJlYWRTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlczsKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgdm9pZCBzY2hl
ZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotCi0gICAgdm9pZCBzY3JvbGxpbmdTdGF0ZVRyZWVDb21t
aXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiopOwotICAgIHZvaWQg
Y29tbWl0VHJlZVN0YXRlKCk7Ci0KLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Nj
cm9sbGluZ1N0YXRlVHJlZTsKLSAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdU
cmVlOwotICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ1N0YXRlVHJl
ZUNvbW1pdHRlclRpbWVyOwotCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGlu
Z1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOwotI2VuZGlmCi0KLSAgICBTY3JvbGxpbmdDb29y
ZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGNlMjdm
NzU2ZmNlYzJjNGE1MmE0ZGMzNjQxMWIxNzViODU4ZjcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxp
bmdDb29yZGluYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJpdmF0ZSB7Ci19OwotCi0jaWYgIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxp
bmdDb29yZGluYXRvcihwYWdlKSk7Ci19Ci0KLVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKQotewotICAgIEFTU0VSVCghbV9wYWdlKTsKLX0KLQotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyosIEdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJikKLXsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucykKLXsKLX0K
LQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNz
TGF5ZXIqLCBib29sKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXll
cklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKQotewotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hh
bmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLVNjcm9sbGluZ05v
ZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEIGlkKQotewotICAgIHJldHVybiBpZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKLXsKLX0KLQotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcq
KQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJz
KGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQotewotfQotCi0jZW5kaWYg
Ly8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKaW5kZXggMzhhMTUyMTA4MjBjOWQ4NTY1OWUwNjQ2YTc4
NjhhZGNlYzFiODEyZS4uOTc0MzI4OWMxZjExZGUzOTZjODEwMjIwYmFiODEyMDRiZmZkMjY4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgiCiAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtOTUsMzMgKzk1
LDMyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYlNjcm9sbGJhckxheWVyPiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXI7CiB9OwogCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCitTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKFBhZ2UqIHBhZ2UpCisg
ICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9wcml2YXRlKG5ldyBTY3Jv
bGxpbmdDb29yZGluYXRvclByaXZhdGUpCiB7Ci0gICAgUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5h
dG9yPiBjb29yZGluYXRvcihhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkp
KTsKLSAgICBjb29yZGluYXRvci0+bV9wcml2YXRlID0gbmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJpdmF0ZTsKLSAgICByZXR1cm4gY29vcmRpbmF0b3IucmVsZWFzZSgpOwogfQogCi1TY3JvbGxp
bmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKK1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06On5TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKCkKIHsKLSAgICBBU1NF
UlQoIW1fcGFnZSk7CiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotc3RhdGljIEdyYXBoaWNz
TGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZy
YW1lVmlldyopCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJWaWV3KQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT5zY3JvbGxMYXllcigpOwotI2Vsc2UKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZgorICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIG9mIHRoZSBwYWdlIHRoYXQgd2UgY2FuJ3QgZG8gZmFzdCBzY3JvbGxpbmcg
Zm9yLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcworICAgIC8vIGFsbCBzY3JvbGxhYmxlIGFyZWFz
LCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4gV2UgbmVl
ZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCisgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQg
d2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgorICAgIFJlZ2lvbiBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1h
aW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKKyAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
aHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3
KQoreworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFu
Z2UoZnJhbWVWaWV3KTsKKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKTsKIH0KIAogc3RhdGljIFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5ZXJGb3JH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMTI5LDcgKzEyOCw3IEBAIHN0
YXRpYyBXZWJMYXllciogc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKICAgICByZXR1cm4gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKIH0KIAotc3Rh
dGljIFBhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBXZWJMYXllciogc2Nyb2xsTGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNjcm9sbGJhckdyYXBoaWNzTGF5ZXIsIEZyYW1lVmlldyogZnJhbWVWaWV3KQorUGFzc093blB0
cjxXZWJTY3JvbGxiYXJMYXllcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6Y3JlYXRl
U2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFdlYkxheWVyKiBzY3JvbGxMYXll
ciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcpCiB7CiAgICAgQVNTRVJUKHNjcm9sbGJhcik7CiAgICAgQVNTRVJUKHNjcm9sbGJhckdy
YXBoaWNzTGF5ZXIpOwpAQCAtMTc0LDcgKzE3Myw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFdlYlNj
cm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqIHNjcm9sbGJhciwK
ICAgICByZXR1cm4gc2Nyb2xsYmFyTGF5ZXIucmVsZWFzZSgpOwogfQogCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
RnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJM
YXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3SG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGlj
c0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpCiB7CiAgICAgaWYgKCFob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIgfHwgIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1l
VmlldykpCiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODIsNyBAQCB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
RnJhbWVWaWV3KgogICAgIG1fcHJpdmF0ZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKGNy
ZWF0ZVNjcm9sbGJhckxheWVyKGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3By
aXZhdGUtPnNjcm9sbExheWVyKCksIGhvcml6b250YWxTY3JvbGxiYXJMYXllciwgZnJhbWVWaWV3
KSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIq
IHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW06OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBm
cmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCiB7CiAgICAg
aWYgKCF2ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZy
YW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47CkBAIC0xOTIsMTIgKzE5MSwxMiBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZgogICAgIG1fcHJpdmF0ZS0+c2V0VmVydGljYWxTY3Jv
bGxiYXJMYXllcihjcmVhdGVTY3JvbGxiYXJMYXllcihmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xs
YmFyKCksIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSwgdmVydGljYWxTY3JvbGxiYXJMYXllciwg
ZnJhbWVWaWV3KSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExh
eWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKIHsK
ICAgICBtX3ByaXZhdGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyID8gc2Nyb2xsYWJsZUxh
eWVyRm9yR3JhcGhpY3NMYXllcihzY3JvbGxMYXllcikgOiAwKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiBy
ZWdpb24pCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIC8vIFdlIHdvbid0IG5l
Y2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNv
IGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgogICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVy
Rm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOwpAQCAtMjEwLDEyICsy
MDksNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNv
dW50KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2ZW50SGFu
ZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAgICAgLy8gV2Ug
d29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlz
IG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Ny
b2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0y
MjMsNyArMjE3LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckMKICAgICAgICAgbV9wcml2YXRl
LT5zY3JvbGxMYXllcigpLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHdoZWVsRXZlbnRIYW5k
bGVyQ291bnQgPiAwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5n
UmVhc29ucyByZWFzb25zKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRT
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zIHJlYXNvbnMpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0
IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9v
dCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXco
bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0yMzEsMjQgKzIyNSwxOSBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKE1haW5UaAogICAgICAgICBtX3ByaXZhdGUtPnNjcm9sbExheWVyKCktPnNl
dFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChyZWFzb25zKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wg
ZW5hYmxlKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiBsYXllciwgYm9vbCBl
bmFibGUpCiB7CiAgICAgaWYgKFdlYkxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxhYmxl
TGF5ZXJGb3JHcmFwaGljc0xheWVyKGxheWVyKSkKICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoZW5hYmxlKTsKIH0KIAotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFw
aGljc0xheWVyKiBsYXllciwgYm9vbCBlbmFibGUpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGJvb2wgZW5hYmxlKQogewogICAgIGlmIChXZWJMYXllciogc2Nyb2xsYWJsZUxheWVy
ID0gc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihsYXllcikpCiAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2Uo
U2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXll
cikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEdyYXBoaWNz
TGF5ZXIqIHNjcm9sbExheWVyKQogewogICAgIGlmICghc2Nyb2xsTGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2MiwxOSArMjUxLDEwIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNj
cm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjCiAgICAg
fQogfQogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZXNlIHN0dWJz
IHdoZW4gd2UgcmVzb2x2ZSB0aGUgaWYtZGVmIHNvdXAgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg3MDAKLVNjcm9s
bGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xs
aW5nTm9kZUlEIGlkKQotewotICAgIHJldHVybiBpZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZy
YW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVW
aWV3KTsKKyAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KGNvbXB1dGVDdXJyZW50V2hlZWxF
dmVudEhhbmRsZXJDb3VudCgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2OTQ4ZTI0MGE5YmMzZjc3MjFkYTg5OTViMTNjNWI2
MGI3YjJjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCisj
ZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1faAorCisjaW5jbHVkZSAiU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTY3JvbGxi
YXJMYXllcjsKK2NsYXNzIFdlYkxheWVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKKworY2xh
c3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGlu
YXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bShQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSgpOwor
CisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBo
YXMgYmVlbiBsYWlkIG91dC4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZChGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJv
b3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2
b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqKTsKKworICAgIC8vIFNo
b3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZv
ciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZp
ZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NM
YXllciopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwg
c2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyosIEdyYXBoaWNzTGF5ZXIqKTsKKworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Ny
b2xsaW5nIGNvb3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0
byB0aGVpcgorICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBw
b3NpdGlvbiBsYXllcnMuCisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIEF0dGFj
aC9kZXRhY2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFp
bmVyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdy
YXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dGhlIHNjcm9sbGFibGUgbGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9s
bGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyop
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIHZvaWQgc2V0U2Ny
b2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKKyAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
KworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyOTc1YTEzNWQ4MjJiYzZk
OTk3ZmQyMzUyNThjOTM4NTlhZjg0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaApAQCAtMCwwICsx
LDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWNfaAor
I2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCisKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvck1hYyA6IHB1YmxpYyBT
Y3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMoUGFnZSopOworICAgIHZpcnR1YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOworCisgICAgdmlydHVhbCBT
Y3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCk7CisKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5l
dmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgorICAgIHZpcnR1YWwg
dm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZp
ZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9y
aXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMu
CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENo
YW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
OworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xs
YmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwg
dm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyos
IEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpOworCisgICAgLy8gUmVxdWVz
dHMgdGhhdCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIHVwZGF0ZXMgdGhlIHNjcm9sbCBwb3Np
dGlvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy
dWUsIGl0IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIGFz
eW5jaHJvbm91c2x5LiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgY2FsbGVyIHNob3VsZCB1cGRh
dGUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpdHNlbGYuCisgICAgdmlydHVhbCBib29sIHJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2ludCYpOworCisg
ICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0
dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBvciBub3QuCisgICAgdmlydHVhbCBi
b29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7CisKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0
aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcyBhbmQgdGhlIHNjcm9sbCBsYXll
ciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwor
CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGluZGljdGFlIHRoYXQgYSBsYXll
ciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2VyIGJlKSByZXByZXNlbnRlZCBieSBhIG5v
ZGUKKyAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCisgICAgdmlydHVhbCBTY3JvbGxpbmdO
b2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOworCisgICAgLy8gVGhpcyBm
dW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJTdGF0ZVRyZWUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisKKyAgICB2b2lkIGVuc3VyZVJvb3RTdGF0ZU5vZGVG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOworCisgICAgc3RydWN0IFNjcm9sbFBh
cmFtZXRlcnMgeworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5OworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eTsKKworICAgICAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAg
ICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKKworICAgICAgICBTY3JvbGxiYXJN
b2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgICAgICBTY3JvbGxiYXJNb2RlIHZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZTsKKworICAgICAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW47CisKKyAg
ICAgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Q7CisgICAgICAgIEludFNpemUgY29udGVudHNTaXpl
OworICAgIH07CisKKyAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNj
cm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lk
IHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2Rl
Kik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVn
aW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CisKKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsK
KworICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKKworICAgIHZvaWQgc2Nyb2xs
aW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRv
ck1hYz4qKTsKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgpOworCisgICAgT3duUHRyPFNjcm9s
bGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CisgICAgUmVmUHRyPFNjcm9sbGlu
Z1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKKyAgICBUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvck1h
Yz4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKKworICAgIEhhc2hNYXA8U2Ny
b2xsaW5nTm9kZUlELCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBtX3N0YXRlTm9kZU1hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMubW0KaW5kZXggODAxZmQ5M2NhYWE0YzI4NjY5ZTc2ZTQ5MTQ4N2U1ZmRiYzI2ZGQ1
Ni4uZjcxYmQzODVjYTcxYjI1MTZlOWM3OGI2MTU5ZGJlZjczMjdhYzkxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5tbQpAQCAtMjcsMzcgKzI3LDEzNCBAQAogCiAjaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKIAotI2ltcG9ydCAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLQotI2ltcG9y
dCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdUaHJl
YWQuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1RyZWUuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1N0YXRl
VHJlZS5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYv
RnVuY3Rpb25hbC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KKyNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgiCisKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUaHJlYWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisKKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJpdmF0ZSB7CiB9OwogCi1QYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5h
dG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCitTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMoUGFnZSogcGFnZSkKKyAgICA6
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShT
Y3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSgpKQorICAgICwgbV9zY3JvbGxpbmdUcmVlKFNjcm9s
bGluZ1RyZWU6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0
dGVyVGltZXIodGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lckZpcmVkKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IocGFnZSkpOwogfQogCi1TY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp+U2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMoKQogewotICAgIEFTU0VSVCghbV9wYWdlKTsKICAgICBBU1NFUlQoIW1fc2Ny
b2xsaW5nVHJlZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hv
cml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3Jh
cGhpY3NMYXllciopCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdlRGVzdHJveWVk
KCkKK3sKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworCisgICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7CisKKyAgICAvLyBJbnZh
bGlkYXRpbmcgdGhlIHNjcm9sbGluZyB0cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNs
ZSBiZXR3ZWVuIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmpl
Y3RzLgorICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6
aW52YWxpZGF0ZSwgbV9zY3JvbGxpbmdUcmVlLnJlbGVhc2UoKSkpOworfQorCitTY3JvbGxpbmdU
cmVlKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsaW5nVHJlZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS5n
ZXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y29tbWl0VHJlZVN0YXRl
SWZOZWVkZWQoKQoreworICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQ
cm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwor
ICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworfQorCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmll
dyogZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fcGFnZSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2UgdGhhdCB3
ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzCisg
ICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBk
aXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKKyAgICAv
LyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJh
bWUuCisgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworCisgICAg
Ly8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBzZXQg
bm9uLWZhc3Qgc2Nyb2xsaW5nIHJlZ2lvbnMgZm9yIG1vcmUgdGhhbgorICAgIC8vIGp1c3QgdGhl
IHJvb3Qgbm9kZS4gQnV0IHJpZ2h0IG5vdywgdGhpcyBjb25jZXB0IG9ubHkgYXBwbGllcyB0byB0
aGUgcm9vdC4KKyAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUobm9uRmFzdFNj
cm9sbGFibGVSZWdpb24sIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOwor
CisgICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUg
PSBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFt
ZXRlcnM7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9
IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKyAgICBzY3JvbGxQYXJh
bWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIGZyYW1lVmll
dy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVy
cy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7CisgICAg
c2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+aG9y
aXpvbnRhbFNjcm9sbGJhck1vZGUoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Ny
b2xsYmFyTW9kZSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7CisKKyAgICBz
Y3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbiA9IGZyYW1lVmlldy0+c2Nyb2xsT3JpZ2luKCk7
CisgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCks
IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBzY3JvbGxQYXJh
bWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CisKKyAgICBz
ZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShzY3JvbGxQYXJhbWV0ZXJzLCBub2RlKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJD
b3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXctPnNjcm9s
bExheWVySUQoKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisgICAgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoY29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KCksIG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFt
ZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmICghY29v
cmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0
YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVO
b2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5yb290U3RhdGVOb2RlKCkpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290TGF5
ZXJEaWRDaGFuZ2UoKTsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290
TGF5ZXJEaWRDaGFuZ2UoZnJhbWVWaWV3KTsKKworICAgIHNldFNjcm9sbExheWVyRm9yTm9kZShz
Y3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JJRChmcmFtZVZp
ZXctPnNjcm9sbExheWVySUQoKSkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBm
cmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKG1fcGFnZSk7CkBAIC02OCw3ICsxNjUsNyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVW
aWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBBU1NFUlQobV9wYWdlKTsKQEAgLTc5LDYgKzE3NiwyMDIgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqIGYKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCitib29sIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3KiBm
cmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAgaWYgKCFjb29yZGlu
YXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZnJhbWVWaWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNo
ZSgpKSB7CisgICAgICAgIC8vIElmIHRoaXMgZnJhbWUgdmlldydzIGRvY3VtZW50IGlzIGJlaW5n
IHB1dCBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBvdXIKKyAg
ICAgICAgLy8gbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24uIEp1c3QgbGV0IHRoZSBGcmFtZVZp
ZXcgdGhpbmsgdGhhdCB3ZSBkaWQuCisgICAgICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIHN0YXRlTm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJ
RCgpKTsKKyAgICBpZiAoIXN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3RhdGVOb2RlLT5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJh
bWVWaWV3LT5pblByb2dyYW1tYXRpY1Njcm9sbCgpKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChtX3BhZ2UpOworCisgICAgaWYgKG1fc2Nyb2xsaW5nVHJlZS0+d2lsbFdoZWVsRXZlbnRTdGFy
dFN3aXBlR2VzdHVyZSh3aGVlbEV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVl
bEV2ZW50LCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHdoZWVsRXZlbnQpKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJh
bWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24oKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7Cisg
ICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHNjcm9s
bFBvc2l0aW9uID0gbV9zY3JvbGxpbmdUcmVlLT5tYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpOwor
CisgICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxz
ZSk7CisgICAgZnJhbWVWaWV3LT5ub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoc2Nyb2xsUG9z
aXRpb24pOworICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UodHJ1ZSk7CisKKyAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxM
YXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9z
aXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK1Njcm9sbGluZ05vZGVJ
RCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEIHNjcm9sbExheWVySUQpCit7CisgICAgQVNTRVJUKHNjcm9sbExheWVySUQpOworCisgICAg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9
PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsTGF5ZXJJRDsKKworICAgIGNsZWFyU3RhdGVUcmVlKCk7CisKKyAgICAvLyBGSVhNRTog
SW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gdGFrZSBhIHBhcmVudCBJ
RCBzbyB0aGF0IGl0IGNhbgorICAgIC8vIGFwcGVuZCB0aGUgbm9kZSBpbiB0aGUgYXBwcm9wcmlh
dGUgc3BvdCBpbiB0aGUgc3RhdGUgdHJlZS4gRm9yIG5vdyB3ZSBhbHdheXMgYXNzdW1lCisgICAg
Ly8gdGhpcyBpcyB0aGUgcm9vdCBub2RlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRS
b290U3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLmdldCgpKSk7CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHNjcm9sbExheWVy
SUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworICAgIHJldHVybiBz
Y3JvbGxMYXllcklEOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hG
cm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIGlmICgh
c2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2Rl
KiBub2RlID0gbV9zdGF0ZU5vZGVNYXAudGFrZShzY3JvbGxMYXllcklEKTsKKworICAgIC8vIEZJ
WE1FOiByZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBhbmQgdGhvc2UgY2hpbGRy
ZW4gbWlnaHQgc3RpbGwgYmUgaW4gdGhlIEhhc2hNYXAuCisgICAgLy8gVGhpcyB3aWxsIGJlIGEg
YmlnIHByb2JsZW0gb25jZSB0aGVyZSBhcmUgYWN0dWFsbHkgY2hpbGRyZW4gaW4gdGhlIHRyZWUu
CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNsZWFyU3RhdGVUcmVlKCkKK3sKKyAgICBtX3N0YXRl
Tm9kZU1hcC5jbGVhcigpOworICAgIGlmIChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5v
ZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICBtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKworU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQoU2Ny
b2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxp
bmdTdGF0ZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlTm9kZU1hcC5maW5kKHNj
cm9sbExheWVySUQpOworICAgIGlmIChpdCA9PSBtX3N0YXRlTm9kZU1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBpdC0+dmFsdWU7
CisgICAgcmV0dXJuIHRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIGF0dGFjaFRvU3RhdGVUcmVlKGZyYW1l
Vmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yzo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xs
TGF5ZXIpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25z
dCBSZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQorewor
ICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CisgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xs
UGFyYW1ldGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIG5v
ZGUtPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9k
ZS0+c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNF
bmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRp
Y2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKyAgICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJz
Lmhvcml6b250YWxTY3JvbGxiYXJNb2RlKTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOworCisgICAgbm9k
ZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBu
b2RlLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOworICAg
IG5vZGUtPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7Cisg
ICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQgd2hlZWxF
dmVudEhhbmRsZXJDb3VudCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQorewor
ICAgIG5vZGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCk7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQoreworICAgIC8vIFRoZSBG
cmFtZVZpZXcncyBHcmFwaGljc0xheWVyIGlzIGxpa2VseSB0byBiZSBvdXQtb2Ytc3luY2ggd2l0
aCB0aGUgUGxhdGZvcm1MYXllcgorICAgIC8vIGF0IHRoaXMgcG9pbnQuIFNvIHdlJ2xsIHVwZGF0
ZSBpdCBiZWZvcmUgd2Ugc3dpdGNoIGJhY2sgdG8gbWFpbiB0aHJlYWQgc2Nyb2xsaW5nCisgICAg
Ly8gaW4gb3JkZXIgdG8gYXZvaWQgbGF5ZXIgcG9zaXRpb25pbmcgYnVncy4KKyAgICBpZiAocmVh
c29ucykKKyAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOworICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQocmVhc29ucyk7CisgICAgc2NoZWR1bGVUcmVl
U3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6dXBkYXRl
TWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZy
YW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9s
bExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgc2Ny
b2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgp
Cit7CisgICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFz
Q2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQo
VGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+KikKK3sKKyAgICBjb21taXRUcmVlU3RhdGUo
KTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y29tbWl0VHJlZVN0YXRlKCkK
K3sKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVz
KCkpOworCisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRlID0gbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPmNvbW1pdCgpOworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2go
YmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlLCBtX3Njcm9sbGluZ1RyZWUu
Z2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNlKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168258</attachid>
            <date>2012-10-11 11:35:19 -0700</date>
            <delta_ts>2012-10-11 21:17:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-7.txt</filename>
            <type>text/plain</type>
            <size>78573</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTA4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMC0xMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NzAwCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGlz
IGEgaG90IG1lc3Mgb2YgaWYtZGVmcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIG9mIHRoZSB0aHJlYWRlZCBzY3Jv
bGxpbmcgY29kZSBpbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgaW50byBhIG5ldyBj
bGFzcyBjYWxsZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgCisgICAgICAgIHdoaWNoIGluaGVy
aXRzIGZyb20gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorCisgICAgICAgIEl0IGFsc28gYWRkcyBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtIHRvIGRvIENocm9taXVtLXNwZWNpZmljIHdvcmsu
IAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciBpdHNlbGYgZG9lcyB3b3JrIHRoYXQgaXMg
Y3Jvc3MtcGxhdGZvcm0uIAorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBh
bHNvIGVsaW1pbmF0ZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLiAKKyAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgaXMgbm93IHN1ZmZpY2llbnQgZm9yIHBsYXRmb3JtcyB0aGF0IHJlbGll
ZCBvbiAKKyAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lIHRvIGJ1aWxkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudEZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmF0dGFj
aFRvU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjbGVhclN0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbExheWVyRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUp
OgorCiAyMDEyLTEwLTEwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5ODQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc1OSw3ICsxNzU5LDYgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
CiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAogCiAgICAgcGxhdGZvcm0vQXJl
bmEuY3BwCiAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MDcyLDcgKzQwNzIsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0NvbnN0cmFpbnRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC05MDYsNyArOTA2LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TY3JlZW4uY3BwIFwK
ICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgXAogICAgIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBcCi0gICAgcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCBcCiAgICAgcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAgXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNw
cCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMxMDgzKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1MzQsMTAgKzI1MzQs
OCBAQCBfX1pON1dlYkNvcmUxM1Njcm9sbGluZ1RyZWUyMnVwZGF0ZUJhY2tGCiBfX1pON1dlYkNv
cmUxM1Njcm9sbGluZ1RyZWVEMUV2CiBfX1pON1dlYkNvcmUxNVNjcm9sbGluZ1RocmVhZDE1ZGlz
cGF0Y2hCYXJyaWVyRVJLTjNXVEY4RnVuY3Rpb25JRnZ2RUVFCiBfX1pON1dlYkNvcmUxNVNjcm9s
bGluZ1RocmVhZDhkaXNwYXRjaEVSS04zV1RGOEZ1bmN0aW9uSUZ2dkVFRQotX19aTjdXZWJDb3Jl
MjBTY3JvbGxpbmdDb29yZGluYXRvcjIzY29tbWl0VHJlZVN0YXRlSWZOZWVkZWRFdgogX19aTjdX
ZWJDb3JlMjBTY3JvbGxpbmdDb29yZGluYXRvcjQ0c2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXNFYgogX19aTjdXZWJDb3JlNFBhZ2UyMHNjcm9sbGluZ0Nvb3JkaW5h
dG9yRXYKLV9fWk5LN1dlYkNvcmUyMFNjcm9sbGluZ0Nvb3JkaW5hdG9yMTNzY3JvbGxpbmdUcmVl
RXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gMTMxMDgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjI1LDExICszMjI1LDEyIEBACiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCcsCiAgICAgICAgICAgICAncGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oJywKKyAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9jaHJvbWl1
bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oJywKICAgICAg
ICAgICAgICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwJywKICAgICAgICAgICAg
ICdwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwJywKICAgICAgICAgICAgICdwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oJywKLSAgICAgICAgICAgICdwYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwJywKICAgICAgICAgICAgICdwYWdlL3dpbi9GcmFtZUNHV2luLmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24g
MTMxMDgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgJy4uL3BhZ2UvYW5pbWF0aW9uJywK
ICAgICAgICcuLi9wYWdlL2Nocm9taXVtJywKICAgICAgICcuLi9wYWdlL3Njcm9sbGluZycsCisg
ICAgICAnLi4vcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtJywK
ICAgICAgICcuLi9wbGF0Zm9ybS9hbmltYXRpb24nLAogICAgICAgJy4uL3BsYXRmb3JtL2F1ZGlv
JywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyNTksMTAgKzI3MjU5LDYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxzY3JvbGxp
bmdcU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxTZWN1cml0eU9yaWdpbi5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMxMDgzKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIx
LDcgKzEwMjEsNiBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJD
b3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBU
cmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07
Ci0JCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck5vbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzg2NkFG
MzcxNEYxQzE3MTAwMjgzRDY4IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAgKi87IH07
CiAJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAw
RkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87IH07CiAJ
CTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0Ew
OTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMyODksNiArMzI4OCw3IEBACiAJCTkzOEU2
NUY3MDlGMDk4NUQwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4RTY1RjYwOUYw
OTg1RDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgKi87IH07CiAJ
CTkzOEU2NjYwMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjVGMDlGMDlC
ODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCAqLzsgfTsKIAkJOTM4RTY2NjIw
OUYwOUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjYxMDlGMDlCODcwMDhBNDhFQyAv
KiBKU0hUTUxDYW52YXNFbGVtZW50LmggKi87IH07CisJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5NzMz
MCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUE5OTAxNjI3NDZDQjAwMjk3MzMwIC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLmggKi87IH07CiAJCTkzOTIyNjJEMTAzMjEwN0IwMDZFN0Q1RCAvKiBK
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTIyNjJDMTAzMjEwN0IwMDZFN0Q1RCAvKiBKU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJOTM5MjI2MkYxMDMyMTA4NDAwNkU3RDVEIC8q
IEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM5MjI2MkUxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RD
dXN0b20uY3BwICovOyB9OwogCQk5MzkyRjE0MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291
bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5
MkYxNDEwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCAqLzsgfTsKQEAgLTgxNDUs
NyArODE0NSw2IEBACiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVz
cG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3Jl
VVJMUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEw
NEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBU
cmVlRGVwdGhMaW1pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVw
dGhMaW1pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzODY2QUYzNzE0RjFDMTcx
MDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9y
YWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzQUIwMkQyOTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDg4LDYgKzEwNDg3LDcgQEAKIAkJOTM4RTY2
MjUwOUYwOTk1NjAwOEE0OEVDIC8qIEhUTUxDYW52YXNFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzOEU2NjVGMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTENhbnZhc0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzhFNjY2MTA5RjA5Qjg3MDA4
QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0hUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzOTFBOTkwMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzkyMjYyQzEwMzIxMDdCMDA2RTdE
NUQgLyogSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MjI2MkUxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVs
ZUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
U1NSdWxlTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTJG
MTQxMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDU4MCw3ICsxNDU4MCw2IEBACiAJCQkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMw
IC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFGNjJFRTQxNERBMjJBNzAwNDE1
NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkxQUY2MkVFNTE0REEyMkE3
MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKLQkJCQkzODY2QUYzNzE0RjFD
MTcxMDAyODNENjggLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcCAqLywKIAkJCQk5MzFD
QkQwNjE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLywKIAkJCQk5
MzFDQkQwNzE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggKi8sCiAJCQkJ
OTMxQ0JEMDgxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAgKi8sCkBAIC0xNDYwMCw2ICsxNDU5OSw3IEBACiAJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTkzOTFBOTkwMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICov
LAogCQkJCTFBRjYyRUUzMTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5tbSAqLywKIAkJCQk5MzFDQkQxMjE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVO
b2RlTWFjLm1tICovLAogCQkJCTFBRjYyRjIzMTREQUZFOTEwMDQxNTU2QyAvKiBTY3JvbGxpbmdU
aHJlYWRNYWMubW0gKi8sCkBAIC0yNTU3Niw2ICsyNTU3Niw3IEBACiAJCQkJMzE5NTVBODgxNjBE
MTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTRCQzg0MzE2MUNGMDVDMDA0RDUyRjQgLyogUmVzb3VyY2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MjhCRDlFMTYyNTM2OTYwMEM0MEI1NiAvKiBTaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM5MUE5OTExNjI3NDZDQjAwMjk3MzMw
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MTE2LDcg
KzI4MTE3LDYgQEAKIAkJCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29u
c3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTcxNERBMjJBNzAwNDE1NTZD
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2
MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTM4NjZBRjM4MTRGMUMxNzEwMDI4M0Q2OCAvKiBTY3JvbGxpbmdDb29yZGluYXRv
ck5vbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJGMjUxNERBRkU5RTAwNDE1NTZDIC8q
IFNjcm9sbGluZ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkYyNDE0REFGRTkx
MDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFB
QUREQTMxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpAQCAtNDUsNDYgKzQzLDQ0IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5n
VHJlZS5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIgorI2VuZGlmCisK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPFNj
cm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMocGFnZSkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0ocGFnZSkpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2Up
KTsKK30KKwogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2Uq
IHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fZm9yY2VNYWluVGhyZWFkU2Nyb2xs
TGF5ZXJQb3NpdGlvblVwZGF0ZXMoZmFsc2UpCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLSAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRl
KCkpCi0gICAgLCBtX3Njcm9sbGluZ1RyZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQot
ICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQpCi0jZW5k
aWYKLSAgICAsIG1fcHJpdmF0ZSgwKQogewogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpwYWdlRGVzdHJveWVkKCkKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKQogewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIG1fcGFnZSA9IDA7Ci0KLSNpZiBF
TkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0
dGVyVGltZXIuc3RvcCgpOwotCi0gICAgLy8gSW52YWxpZGF0aW5nIHRoZSBzY3JvbGxpbmcgdHJl
ZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Nyb2xsaW5nQ29v
cmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KLSAgICBTY3JvbGxpbmdUaHJlYWQ6
OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmludmFsaWRhdGUsIG1fc2Nyb2xsaW5nVHJl
ZS5yZWxlYXNlKCkpKTsKLSNlbmRpZgorICAgIEFTU0VSVCghbV9wYWdlKTsKIH0KIAotI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi1TY3JvbGxpbmdUcmVlKiBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2Nyb2xsaW5nVHJlZSgpIGNvbnN0Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpw
YWdlRGVzdHJveWVkKCkKIHsKLSAgICBBU1NFUlQobV9zY3JvbGxpbmdUcmVlKTsKLSAgICByZXR1
cm4gbV9zY3JvbGxpbmdUcmVlLmdldCgpOworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIG1fcGFn
ZSA9IDA7CiB9Ci0jZW5kaWYKIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpIGNvbnN0CiB7CkBA
IC0xMDYsNyArMTAyLDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNT
YwogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIGZyYW1lTG9jYXRpb24pCitSZWdpb24g
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFt
ZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKQogewogICAgIFJlZ2lvbiBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1l
LT52aWV3KCk7CkBAIC0xNDgsNDggKzE0NCwxNiBAQCBzdGF0aWMgUmVnaW9uIGNvbXB1dGVOb25G
YXN0U2Nyb2xsYWJsZVJlCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogfQog
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1l
VmlldyogZnJhbWVWaWV3KQordW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVD
dXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBv
ZiB0aGUgcGFnZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJy
ZW50bHkgaW5jbHVkZXMKLSAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJm
cmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBl
dmVuIGlmIHRoZQotICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlz
IG5vdCB0aGUgbWFpbiBmcmFtZS4KLSAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24g
PSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50
UG9pbnQoKSk7Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIC8vIEluIHRo
ZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IG5vbi1mYXN0
IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KLSAgICAvLyBqdXN0IHRoZSByb290IG5v
ZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8gdGhlIHJvb3Qu
Ci0gICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLSNlbHNlCi0g
ICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOwot
I2VuZGlmCi0KLSAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1l
VmlldykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Nyb2xsUGFy
YW1ldGVyczsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOwotICAgIHNjcm9sbFBh
cmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgZnJhbWVW
aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKLSAgICBzY3JvbGxQYXJhbWV0
ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxiYXIoKSAmJiBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKLSAg
ICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT5o
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxT
Y3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKLQotICAg
IHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luID0gZnJhbWVWaWV3LT5zY3JvbGxPcmlnaW4o
KTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOwotICAgIHNjcm9sbFBh
cmFtZXRlcnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsKKyAgICB1
bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gMDsKIAotI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCi0gICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3Rh
dGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOwor
ICAgIH0KIAotICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMs
IG5vZGUpOwotI2Vsc2UKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzKHNjcm9sbFBhcmFtZXRlcnMp
OwotI2VuZGlmCisgICAgcmV0dXJuIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7CiB9CiAKIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFu
Z2VkKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjIyLDcgKzE4Niw3IEBAIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0ZpeGUKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0xheWVy
KiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK0dyYXBoaWNz
TGF5ZXIqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFt
ZVZpZXcqIGZyYW1lVmlldykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgRnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOwpAQCAtMjQ3LDY3ICsyMTEsOSBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290CiAgICAgaWYgKCFjb29y
ZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47
CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIC8vIElmIHRoZSByb290IGxh
eWVyIGRvZXMgbm90IGhhdmUgYSBTY3JvbGxpbmdTdGF0ZU5vZGUsIHRoZW4gd2Ugc2hvdWxkIGNy
ZWF0ZSBvbmUuCi0gICAgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcp
OwotICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLSAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdExheWVyRGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLQog
ICAgIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoZnJhbWVWaWV3KTsKICAgICByZWNvbXB1dGVXaGVl
bEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CiAgICAgdXBkYXRlU2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwotICAgIAotI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKHNjcm9s
bExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+
c2Nyb2xsTGF5ZXJJRCgpKSk7Ci0jZWxzZQotICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVy
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldykpOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmll
dywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBpZiAoIWNvb3JkaW5hdGVzU2Ny
b2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
I2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkgewotICAgICAgICAvLyBJZiB0aGlzIGZyYW1l
IHZpZXcncyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNoZSwgd2UgZG9u
J3Qgd2FudCB0byB1cGRhdGUgb3VyCi0gICAgICAgIC8vIG1haW4gZnJhbWUgc2Nyb2xsIHBvc2l0
aW9uLiBKdXN0IGxldCB0aGUgRnJhbWVWaWV3IHRoaW5rIHRoYXQgd2UgZGlkLgotICAgICAgICB1
cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5p
blByb2dyYW1tYXRpY1Njcm9sbCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgaWYgKCFzdGF0ZU5vZGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7
Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbFBvc2l0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdmVudChG
cmFtZVZpZXcqLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fc2Nyb2xsaW5nVHJlZS0+d2lsbFdoZWVs
RXZlbnRTdGFydFN3aXBlR2VzdHVyZSh3aGVlbEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpo
YW5kbGVXaGVlbEV2ZW50LCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHdoZWVsRXZlbnQpKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHdoZWVsRXZlbnQpOwotI2VuZGlmCi0gICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9s
bFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBwcm9ncmFtbWF0
aWNTY3JvbGwpCkBAIC0zMzEsNDggKzIzNyw2IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZU1haW5GcmEKICAgICBmcmFtZVZpZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9s
ZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQ
b3NpdGlvbigpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7
Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
Ci0gICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCi17
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxpbmdUcmVlLT5tYWluRnJh
bWVTY3JvbGxQb3NpdGlvbigpOwotCi0gICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZShmYWxzZSk7Ci0gICAgZnJhbWVWaWV3LT5ub3RpZnlTY3JvbGxQb3Np
dGlvbkNoYW5nZWQoc2Nyb2xsUG9zaXRpb24pOwotICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWlu
c1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciog
c2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAg
ICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7
Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBPUyhEQVJXSU4pKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQogewpAQCAtMzg5LDI1ICsyNTMs
NiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2CiB9CiAjZW5kaWYK
IAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJD
b3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICB1bnNpZ25lZCB3
aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHdoZWVs
RXZlbnRIYW5kbGVyQ291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVy
Q291bnQoKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotICAgIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmll
dy0+c2Nyb2xsTGF5ZXJJRCgpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh3aGVlbEV2ZW50SGFuZGxlckNvdW50
LCBub2RlKTsKLSNlbHNlCi0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50
SGFuZGxlckNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKLSNlbmRpZgotfQot
CiBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFt
ZVZpZXcqIGZyYW1lVmlldykKIHsKICAgICBjb25zdCBGcmFtZVZpZXc6OlZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RTZXQqIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzID0gZnJhbWVWaWV3LT52
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpOwpAQCAtNDY0LDE1OSArMzA5LDQgQEAgU2Nyb2xs
aW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1bgogICAgIHJldHVybiB1bmlxdWVTY3Jv
bGxMYXllcklEKys7CiB9CiAKLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9y
SUQoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCi17Ci0gICAgaWYgKCFzY3JvbGxMYXll
cklEKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBT
Y3JvbGxpbmdTdGF0ZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlTm9kZU1hcC5m
aW5kKHNjcm9sbExheWVySUQpOwotICAgIGlmIChpdCA9PSBtX3N0YXRlTm9kZU1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBpdC0+
dmFsdWU7Ci0gICAgcmV0dXJuIHRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOwot
fQotCi1TY3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVU
cmVlKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQotewotICAgIEFTU0VSVChzY3JvbGxM
YXllcklEKTsKLQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogZXhpc3RpbmdOb2Rl
ID0gc3RhdGVOb2RlRm9ySUQoc2Nyb2xsTGF5ZXJJRCk7Ci0gICAgaWYgKGV4aXN0aW5nTm9kZSAm
JiBleGlzdGluZ05vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbExheWVySUQ7Ci0KLSAgICBjbGVhclN0YXRlVHJlZSgpOwot
Ci0gICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIHRv
IHRha2UgYSBwYXJlbnQgSUQgc28gdGhhdCBpdCBjYW4KLSAgICAvLyBhcHBlbmQgdGhlIG5vZGUg
aW4gdGhlIGFwcHJvcHJpYXRlIHNwb3QgaW4gdGhlIHN0YXRlIHRyZWUuIEZvciBub3cgd2UgYWx3
YXlzIGFzc3VtZQotICAgIC8vIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZS4KLSAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOwotICAgIG1fc3RhdGVOb2RlTWFw
LnNldChzY3JvbGxMYXllcklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
KTsKLSAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkK
LXsKLSAgICBpZiAoIXNjcm9sbExheWVySUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjcm9s
bGluZ1N0YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7
Ci0KLSAgICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5k
IHRob3NlIGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgotICAgIC8vIFRo
aXMgd2lsbCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVu
IGluIHRoZSB0cmVlLgotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUp
OwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCi17Ci0g
ICAgbV9zdGF0ZU5vZGVNYXAuY2xlYXIoKTsKLSAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKLSAg
ICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAgYXR0YWNoVG9TdGF0ZVRyZWUoZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCkpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3Jv
bGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRl
Tm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7Ci0g
ICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVn
aW9uLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0
ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzLCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eSk7Ci0gICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFt
ZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKLSAgICBub2RlLT5zZXRIYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKLSAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Ny
b2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOwotICAgIG5vZGUtPnNl
dEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9s
bGJhck1vZGUpOwotICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJh
bWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBub2RlLT5zZXRTY3JvbGxPcmln
aW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOwotICAgIG5vZGUtPnNldFZpZXdwb3J0
UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7Ci0gICAgbm9kZS0+c2V0Q29udGVu
dHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKLSAgICBzY2hlZHVsZVRyZWVT
dGF0ZUNvbW1pdCgpOwotfQotCi0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQs
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5zZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIHNjaGVkdWxl
VHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9s
bGluZ1JlYXNvbnMgcmVhc29ucykKLXsKLSAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NM
YXllciBpcyBsaWtlbHkgdG8gYmUgb3V0LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3JtTGF5ZXIK
LSAgICAvLyBhdCB0aGlzIHBvaW50LiBTbyB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdlIHN3aXRj
aCBiYWNrIHRvIG1haW4gdGhyZWFkIHNjcm9sbGluZwotICAgIC8vIGluIG9yZGVyIHRvIGF2b2lk
IGxheWVyIHBvc2l0aW9uaW5nIGJ1Z3MuCi0gICAgaWYgKHJlYXNvbnMpCi0gICAgICAgIHVwZGF0
ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKHJlYXNvbnMpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKLXsK
LSAgICBpZiAobV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFu
Z2VkUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZUNvbW1pdHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxT
Y3JvbGxpbmdDb29yZGluYXRvcj4qKQotewotICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29tbWl0VHJlZVN0YXRlKCk7Ci0gICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmNvbW1pdFRyZWVTdGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKTsKLQotICAgIE93blB0cjxTY3JvbGxpbmdTdGF0
ZVRyZWU+IHRyZWVTdGF0ZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5jb21taXQoKTsKLSAgICBT
Y3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1Ry
ZWVTdGF0ZSwgbV9zY3JvbGxpbmdUcmVlLmdldCgpLCB0cmVlU3RhdGUucmVsZWFzZSgpKSk7Ci19
Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVy
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGlj
c0xheWVyKiwgYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotfQotCi12b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBo
aWNzTGF5ZXIqLCBib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2Uo
U2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgotfQotI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzMTA4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIHVu
c2lnbmVkIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zOwogdHlwZWRlZiB1aW50NjRfdCBTY3Jv
bGxpbmdOb2RlSUQ7CiAKK2NsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxl
QXJlYTsKLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKIGNsYXNzIFNjcm9sbGlu
Z1N0YXRlTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNj
cm9sbGluZ1N0YXRlVHJlZTsKQEAgLTY1LDIwICs2NSwyMSBAQCBjbGFzcyBTY3JvbGxpbmdUcmVl
OwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRlKFBhZ2UqKTsKLSAgICB+U2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvcigpOwogCi0gICAg
dm9pZCBwYWdlRGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsK
IAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgU2Nyb2xsaW5nVHJlZSogc2Ny
b2xsaW5nVHJlZSgpIGNvbnN0OwotICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKTsK
KyAgICB2aXJ0dWFsIFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRl
ZCgpIHsgfQorCiAgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0
b3IgaGFuZGxlcyBzY3JvbGxpbmcgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3LgogICAgIGJvb2wg
Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgY29uc3Q7CiAKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBi
ZWVuIGxhaWQgb3V0LgotICAgIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKSB7
IH0KIAogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSB3aGVlbCBldmVudCBoYW5k
bGVyIGlzIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlIAogICAgIC8vIGZyYW1lIHZpZXcncyB1bmRl
cmx5aW5nIGRvY3VtZW50LgpAQCAtOTEsMjkgKzkyLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGZy
YW1lVmlld0ZpeGVkT2JqZWN0c0RpZENoYW5nZShGcmFtZVZpZXcqKTsKIAogICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2
aWV3IGNoYW5nZXMuCi0gICAgdm9pZCBmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVW
aWV3Kik7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBob3Jpem9udGFs
IHNjcm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KLSAgICB2
b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
LCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpOwotCi0gICAgLy8gU2hv
dWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0
aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgotICAgIHZvaWQgZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhl
IHNjcm9sbGFibGUgbGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgotICAg
IHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSos
IEdyYXBoaWNzTGF5ZXIqKTsKLQotICAgIC8vIFJlcXVlc3RzIHRoYXQgdGhlIHNjcm9sbGluZyBj
b29yZGluYXRvciB1cGRhdGVzIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIGdpdmVuIGZyYW1l
IHZpZXcuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBpdCBtZWFucyB0aGF0IHRoZQot
ICAgIC8vIHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCBhc3luY2hyb25vdXNseS4gSWYgaXQgcmV0
dXJucyBmYWxzZSwgdGhlIGNhbGxlciBzaG91bGQgdXBkYXRlIHRoZSBzY3JvbGxpbmcgcG9zaXRp
b24gaXRzZWxmLgotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmll
dyosIGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5k
bGVkIG9yIG5vdC4KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqKTsKIAotICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9s
bGluZyB0cmVlIHdoZW5ldmVyIHRoZSBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2Vz
LgotICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
LCBib29sIHByb2dyYW1tYXRpY1Njcm9sbCk7Ci0KLSAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBz
Y3JvbGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hh
bmdlcyBhbmQgdGhlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFz
IHdlbGwuCi0gICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExh
eWVyUG9zaXRpb24oKTsKKyAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNjcm9sbGluZyBjb29y
ZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBsYXllcnMgZml4ZWQgdG8gdGhlaXIKKyAg
ICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBM
QVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogICAgIC8v
IERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIGR1cmluZyBoYW5kbGVXaGVlbEV2ZW50
LiBUaGlzIGlzIHJlcXVpcmVkIGFzIGxvbmcgYXMgc2Nyb2xsYmFycyBhcmUgcGFpbnRlZCBvbiB0
aGUgbWFpbiB0aHJlYWQuCkBAIC0xMjMsMTUgKzEwNiwyMCBAQCBwdWJsaWM6CiAgICAgLy8gRm9y
Y2UgYWxsIHNjcm9sbCBsYXllciBwb3NpdGlvbiB1cGRhdGVzIHRvIGhhcHBlbiBvbiB0aGUgbWFp
biB0aHJlYWQuCiAgICAgdm9pZCBzZXRGb3JjZU1haW5UaHJlYWRTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcyhib29sKTsKIAotICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5nIGNv
b3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVpcgot
ICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgotICAgIGJvb2wgc3VwcG9ydHNGaXhl
ZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3Q7CisgICAgLy8gVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMg
YXJlIGN1cnJlbnRseSB1bmlxdWUgdG8gdGhlIHRocmVhZGVkIHNjcm9sbGluZyBhcmNoaXRlY3R1
cmUsIGFuZCB0aGV5IGFyZQorICAgIC8vIHRoZWlyIG1lYW5pbmdmdWwgaW1wbGVtZW50YXRpb25z
IGFyZSBpbiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy4KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50JikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcq
LCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlv
bigpIHsgfQorICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNj
cm9sbGluZ05vZGVJRCBub2RlSUQpIHsgcmV0dXJuIG5vZGVJRDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyU3RhdGVUcmVlKCkgeyB9CiAKLSAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFz
IGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMuCi0gICAgdm9pZCBzZXRMYXll
cklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCk7
CisgICAgLy8gR2VuZXJhdGVkIGEgdW5pcXVlIGlkIGZvciBzY3JvbGwgbGF5ZXJzLgorICAgIFNj
cm9sbGluZ05vZGVJRCB1bmlxdWVTY3JvbGxMYXllcklEKCk7CiAKLSAgICAvLyBBdHRhY2gvZGV0
YWNoIGxheWVyIHBvc2l0aW9uIHRvIGFuY2VzdG9yIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lci4K
LSAgICB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllcios
IGJvb2wpOworICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIHdoZW5ldmVy
IHRoZSBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgIHZvaWQgdXBkYXRl
TWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmLCBib29sIHByb2dyYW1tYXRp
Y1Njcm9sbCk7CiAKICAgICBlbnVtIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25GbGFncyB7CiAg
ICAgICAgIEZvcmNlZE9uTWFpblRocmVhZCA9IDEgPDwgMCwKQEAgLTE0MSw4NCArMTI5LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgSXNJbWFnZURvY3VtZW50ID0gMSA8PCA0CiAgICAgfTsKIAotICAg
IC8vIEdlbmVyYXRlcyBhIHVuaXF1ZSBpZCB0byBhc3NvY2lhdGUgd2l0aCBhIGxheWVyIHRoYXQg
d2lsbCBiZSByZXByZXNlbnRlZCBieSBhIG5vZGUgaW4gdGhlIHNjcm9sbGluZyB0cmVlLgotICAg
IFNjcm9sbGluZ05vZGVJRCB1bmlxdWVTY3JvbGxMYXllcklEKCk7CisgICAgLy8gVGhlc2Ugdmly
dHVhbCBmdW5jdGlvbnMgYXJlIGN1cnJlbnRseSB1bmlxdWUgdG8gQ2hyb21pdW0ncyBXZWJMYXll
ciBhcHByb2FjaC4gVGhlaXIgbWVhbmluZ2Z1bAorICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUg
aW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVW
aWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNz
TGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEq
LCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWlu
ZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVy
KiwgYm9vbCkgeyB9CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW5kaWN0
YWUgdGhhdCBhIGxheWVyIHNob3VsZCBiZSAob3Igc2hvdWxkIG5vdCBsb25nZXIgYmUpIHJlcHJl
c2VudGVkIGJ5IGEgbm9kZQotICAgIC8vIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KLSAgICBTY3Jv
bGxpbmdOb2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKLSAgICB2b2lk
IGRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKTsKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIHdpcGVzIG91dCB0aGUgY3VycmVudCB0cmVlLgotICAgIHZvaWQgY2xlYXJTdGF0ZVRyZWUo
KTsKKyAgICBSZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEZyYW1lKiwgY29u
c3QgSW50UG9pbnQmIGZyYW1lTG9jYXRpb24pOworICAgIHVuc2lnbmVkIGNvbXB1dGVDdXJyZW50
V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVy
Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKKyAgICBQYWdlKiBtX3BhZ2U7CiAKLSAgICB2b2lkIGVu
c3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7Ci0gICAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ckZyYW1lVmlldyhGcmFtZVZpZXcqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVh
c29ucykgeyB9CiAKLSAgICB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JG
cmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgYm9vbCBoYXNOb25MYXllckZpeGVkT2JqZWN0cyhG
cmFtZVZpZXcqKTsKICAgICB2b2lkIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQoKTsKIAotICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKLSAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKLSAgICAgICAg
U2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHk7Ci0KLSAgICAgICAgYm9v
bCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICAgICAgYm9vbCBoYXNFbmFibGVk
VmVydGljYWxTY3JvbGxiYXI7Ci0KLSAgICAgICAgU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZTsKLSAgICAgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGU7
Ci0KLSAgICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOwotCi0gICAgICAgIEludFJlY3Qgdmll
d3BvcnRSZWN0OwotICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKLSAgICB9OwotCi0gICAg
Ly8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGJ5IFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW0uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yCi0gICAgLy8gbm93IHVzZXMgbmV3
IHZlcnNpb25zOiBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSgpLCBzZXRXaGVlbEV2ZW50SGFu
ZGxlckNvdW50Rm9yTm9kZSgpLCBldGMuCi0gICAgLy8gVG8gcmVzb2x2ZSB0aGlzIGFuZCBhbGwg
b2YgdGhlIGlmLWRlZnMgaW4gdGhpcyBjbGFzcywgd2Ugc2hvdWxkIG1ha2UgU2Nyb2xsaW5nQ29v
cmRpbmF0b3IKLSAgICAvLyBqdXN0IGJlIGEgdHlwZWRlZiB0aGF0IGRlZmluZXMgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMgdG8gYmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IsIGFuZCBzYW1lCi0gICAg
Ly8gZm9yIENocm9taXVtIGFuZCBvdGhlciBwbGF0Zm9ybXMuIEFueSBzaGFyZWQgZnVuY3Rpb25h
bGl0eSBjYW4gYmUgaW4gc29tZXRoaW5nIGNhbGxlZCAKLSAgICAvLyBTY3JvbGxpbmdDb29yZGlu
YXRvckJhc2Ugd2hpY2ggYWxsIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBp
bmhlcml0IGZyb20uCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk4NzAwCi0gICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFt
ZXRlcnMmKTsKLSAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOwot
ICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7Ci0gICAg
dm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7Ci0KLSNpZiBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5
ZXIqLCBTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
KTsKLSAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFt
ZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKLSAgICB2b2lkIHNldFdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKLQotICAgIHZv
aWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwotCi0gICAgUGFnZSogbV9w
YWdlOwotCiAgICAgYm9vbCBtX2ZvcmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzOwotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICB2b2lkIHNjaGVkdWxl
VHJlZVN0YXRlQ29tbWl0KCk7Ci0KLSAgICB2b2lkIHNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRl
clRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+Kik7Ci0gICAgdm9pZCBjb21t
aXRUcmVlU3RhdGUoKTsKLQotICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Nyb2xs
aW5nU3RhdGVUcmVlOwotICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7
Ci0gICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29t
bWl0dGVyVGltZXI7Ci0KLSAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwgU2Nyb2xsaW5nU3Rh
dGVOb2RlKj4gbV9zdGF0ZU5vZGVNYXA7Ci0jZW5kaWYKLQotICAgIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJpdmF0ZSogbV9wcml2YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxMzEwODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlIHsKLX07Ci0KLSNpZiAhRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLVBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKTsKLX0KLQotU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigpCi17Ci0gICAgQVNTRVJUKCFtX3Bh
Z2UpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopCi17Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKQotewot
fQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRT
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zKQotewotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0
c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXll
ciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVB
cmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikK
LXsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0
YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkOwotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJ
RCkKLXsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUoKQot
ewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9y
RnJhbWVWaWV3KEZyYW1lVmlldyopCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWdu
ZWQpCi17Ci19Ci0KLSNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDEzMTA4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oIgogCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTk1LDMzICs5NSwz
MiBAQCBwcml2YXRlOgogICAgIE93blB0cjxXZWJTY3JvbGxiYXJMYXllcj4gbV92ZXJ0aWNhbFNj
cm9sbGJhckxheWVyOwogfTsKIAotUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQorU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShQYWdlKiBwYWdlKQorICAg
IDogU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKKyAgICAsIG1fcHJpdmF0ZShuZXcgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcml2YXRlKQogewotICAgIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gY29vcmRpbmF0b3IoYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKSk7
Ci0gICAgY29vcmRpbmF0b3ItPm1fcHJpdmF0ZSA9IG5ldyBTY3JvbGxpbmdDb29yZGluYXRvclBy
aXZhdGU7Ci0gICAgcmV0dXJuIGNvb3JkaW5hdG9yLnJlbGVhc2UoKTsKIH0KIAotU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigpCitTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSgpCiB7Ci0gICAgQVNTRVJU
KCFtX3BhZ2UpOwogICAgIGRlbGV0ZSBtX3ByaXZhdGU7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0xh
eWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFt
ZVZpZXcqKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBGcmFtZSog
ZnJhbWUgPSBmcmFtZVZpZXctPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpOwotICAgIGlmICghcmVuZGVyVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS0+c2Nyb2xsTGF5ZXIoKTsKLSNlbHNlCi0gICAg
cmV0dXJuIDA7Ci0jZW5kaWYKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIC8vIENvbXB1dGUg
dGhlIHJlZ2lvbiBvZiB0aGUgcGFnZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZv
ci4gVGhpcyBjdXJyZW50bHkgaW5jbHVkZXMKKyAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywg
c3VjaCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQg
dG8gZG8gdGhpcyBldmVuIGlmIHRoZQorICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdh
cyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KKyAgICBSZWdpb24gbm9uRmFzdFNjcm9s
bGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWlu
RnJhbWUoKSwgSW50UG9pbnQoKSk7CisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9u
RmFzdFNjcm9sbGFibGVSZWdpb24pOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykK
K3sKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdl
KGZyYW1lVmlldyk7CisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSk7CiB9CiAKIHN0YXRpYyBXZWJMYXllciogc2Nyb2xsYWJsZUxheWVyRm9yR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTEyOSw3ICsxMjgsNyBAQCBzdGF0
aWMgV2ViTGF5ZXIqIHNjcm9sbGFibGVMYXllckZvckdyYXBoCiAgICAgcmV0dXJuIGxheWVyLT5w
bGF0Zm9ybUxheWVyKCk7CiB9CiAKLXN0YXRpYyBQYXNzT3duUHRyPFdlYlNjcm9sbGJhckxheWVy
PiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgV2ViTGF5ZXIqIHNj
cm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZp
ZXcqIGZyYW1lVmlldykKK1Bhc3NPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IFNjcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW06OmNyZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBXZWJMYXllciogc2Nyb2xsTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGJhckdyYXBo
aWNzTGF5ZXIsIEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VSVChzY3JvbGxiYXIp
OwogICAgIEFTU0VSVChzY3JvbGxiYXJHcmFwaGljc0xheWVyKTsKQEAgLTE3NCw3ICsxNzMsNyBA
QCBzdGF0aWMgUGFzc093blB0cjxXZWJTY3JvbGxiYXJMYXllcj4gY3JlCiAgICAgcmV0dXJuIHNj
cm9sbGJhckxheWVyLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJh
bWVWaWV3LCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciogaG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyKQogewogICAgIGlmICghaG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
IHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODMsNyArMTgyLDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3SG9yaQogICAgIG1fcHJpdmF0ZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
KGNyZWF0ZVNjcm9sbGJhckxheWVyKGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBt
X3ByaXZhdGUtPnNjcm9sbExheWVyKCksIGhvcml6b250YWxTY3JvbGxiYXJMYXllciwgZnJhbWVW
aWV3KSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5
ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW06OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3
KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCiB7CiAg
ICAgaWYgKCF2ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0Zv
ckZyYW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47CkBAIC0xOTIsMTIgKzE5MSwx
MiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0CiAgICAgbV9wcml2
YXRlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhckxheWVyKGNyZWF0ZVNjcm9sbGJhckxheWVyKGZyYW1l
Vmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSwgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLCB2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyLCBmcmFtZVZpZXcpKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5
ZXIqIHNjcm9sbExheWVyKQogewogICAgIG1fcHJpdmF0ZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xs
TGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXJGb3JHcmFwaGljc0xheWVyKHNjcm9sbExheWVyKSA6IDAp
OwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCiB7
CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxs
IGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Ny
b2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmll
dygpKSk7CkBAIC0yMTAsMTIgKzIwOSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dE5vbkZhc3RTY3IKICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCEKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVu
dEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2ln
bmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJp
bHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0
aGUgcm9vdCBvdXJzZWx2ZXMuCiAgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CkBAIC0yMjMsNyArMjE3LDcgQEAg
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudAogICAgICAgICBtX3ByaXZh
dGUtPnNjcm9sbExheWVyKCktPnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMod2hlZWxFdmVudEhh
bmRsZXJDb3VudCA+IDApOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91
bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxp
bmdSZWFzb25zIHJlYXNvbnMpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMgcmVhc29ucykKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBn
ZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSBy
b290IG91cnNlbHZlcy4KICAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmll
dyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKQEAgLTIzMSwyNCArMjI1LDE5IEBAIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGEKICAgICAgICAgbV9wcml2YXRl
LT5zY3JvbGxMYXllcigpLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQocmVhc29ucyk7CiB9
CiAKLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVy
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bTo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NM
YXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewogICAgIGlmIChXZWJMYXllciogc2Nyb2xsYWJs
ZUxheWVyID0gc2Nyb2xsYWJsZUxheWVyRm9yR3JhcGhpY3NMYXllcihsYXllcikpCiAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGVu
YWJsZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRv
Q29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKIHsKICAgICBpZiAoV2ViTGF5
ZXIqIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGFibGVMYXllckZvckdyYXBoaWNzTGF5ZXIobGF5
ZXIpKQogICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllcihl
bmFibGUpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNj
cm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgR3JhcGhp
Y3NMYXllciogc2Nyb2xsTGF5ZXIpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKIHsKICAgICBpZiAoIXNjcm9s
bExheWVyKQogICAgICAgICByZXR1cm47CkBAIC0yNjIsMTkgKzI1MSwxMCBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlCiAgICAgfQogfQogCi0vLyBGSVhNRTogV2Ug
c2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZXNlIHN0dWJzIHdoZW4gd2UgcmVzb2x2ZSB0aGUg
aWYtZGVmIHNvdXAgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCi0vLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg3MDAKLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQotewotICAg
IHJldHVybiBpZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0
YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZy
YW1lVmlldykKIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKKyAgICBzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KGNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCisj
ZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1faAorCisjaW5jbHVkZSAiU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTY3JvbGxi
YXJMYXllcjsKK2NsYXNzIFdlYkxheWVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKKworY2xh
c3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGlu
YXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bShQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bSgpOwor
CisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBo
YXMgYmVlbiBsYWlkIG91dC4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZChGcmFtZVZpZXcqKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJv
b3QgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2
b2lkIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqKTsKKworICAgIC8vIFNo
b3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZv
ciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZp
ZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NM
YXllciopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdmVydGljYWwg
c2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyosIEdyYXBoaWNzTGF5ZXIqKTsKKworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Ny
b2xsaW5nIGNvb3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0
byB0aGVpcgorICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBw
b3NpdGlvbiBsYXllcnMuCisgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIEF0dGFj
aC9kZXRhY2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFp
bmVyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdy
YXBoaWNzTGF5ZXIqLCBib29sKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dGhlIHNjcm9sbGFibGUgbGF5ZXIgZm9yIHRoZSBnaXZlbiBzY3JvbGwgYXJlYSBjaGFuZ2VzLgor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9s
bGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyop
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKworICAgIHZvaWQgc2V0U2Ny
b2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKKyAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
KworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWNfaAorI2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvck1hY19oCisK
KyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMoUGFnZSopOworICAgIHZpcnR1YWwgflNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3ll
ZCgpOworCisgICAgdmlydHVhbCBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCk7CisKKyAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxh
aWQgb3V0LgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmll
dyopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgcm9vdCBsYXllciBm
b3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVW
aWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZl
biBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0hvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiBob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIpOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZl
ciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBj
aGFuZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXIpOworCisgICAgLy8gUmVxdWVzdHMgdGhhdCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIHVw
ZGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4gSWYgdGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGl0IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gcG9zaXRp
b24gd2lsbCBiZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5LiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0
aGUgY2FsbGVyIHNob3VsZCB1cGRhdGUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpdHNlbGYuCisg
ICAgdmlydHVhbCBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBj
b25zdCBJbnRQb2ludCYpOworCisgICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVudCBvbiB0aGUg
c2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBv
ciBub3QuCisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKKyAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBzY3Jv
bGxpbmcgdHJlZSB3aGVuZXZlciB0aGUgbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdl
cyBhbmQgdGhlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdl
bGwuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Ny
b2xsTGF5ZXJQb3NpdGlvbigpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRv
IGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNob3VsZCBub3QgbG9uZ2VyIGJl
KSByZXByZXNlbnRlZCBieSBhIG5vZGUKKyAgICAvLyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUuCisg
ICAgdmlydHVhbCBTY3JvbGxpbmdOb2RlSUQgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2Rl
SUQpOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4K
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFt
ZVZpZXcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisKKyAgICB2b2lk
IGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOwor
CisgICAgc3RydWN0IFNjcm9sbFBhcmFtZXRlcnMgeworICAgICAgICBTY3JvbGxFbGFzdGljaXR5
IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IHZl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKKworICAgICAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyOworICAgICAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsK
KworICAgICAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgICAg
ICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKKworICAgICAgICBJbnRQb2lu
dCBzY3JvbGxPcmlnaW47CisKKyAgICAgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Q7CisgICAgICAg
IEludFNpemUgY29udGVudHNTaXplOworICAgIH07CisKKyAgICB2b2lkIHNldFNjcm9sbFBhcmFt
ZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVy
KiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7
CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNj
cm9sbExheWVyUG9zaXRpb24oKTsKKworICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQo
KTsKKworICAgIHZvaWQgc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1l
cjxTY3JvbGxpbmdDb29yZGluYXRvck1hYz4qKTsKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgp
OworCisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7
CisgICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKKyAgICBUaW1lcjxT
Y3JvbGxpbmdDb29yZGluYXRvck1hYz4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
cjsKKworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBt
X3N0YXRlTm9kZU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGlu
YXRvck1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAxMzEwODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDM3ICsyNywxMzQgQEAKIAogI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCiAKLSNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CisjaW1wb3J0ICJTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIgorCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXdCYXNlLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCisj
aW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFk
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9y
dCAiU2Nyb2xsaW5nVGhyZWFkLmgiCi0jaW1wb3J0ICJTY3JvbGxpbmdUcmVlLmgiCi0jaW1wb3J0
ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgotI2ltcG9ydCA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlIHsKIH07CiAKLVBhc3NSZWZQdHI8U2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKK1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYyhQYWdlKiBwYWdl
KQorICAgIDogU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKKyAgICAsIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRlKCkpCisgICAgLCBtX3Njcm9sbGluZ1Ry
ZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7CiB9CiAKLVNjcm9sbGluZ0Nvb3JkaW5hdG9y
Ojp+U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQorU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6On5TY3Jv
bGxpbmdDb29yZGluYXRvck1hYygpCiB7Ci0gICAgQVNTRVJUKCFtX3BhZ2UpOwogICAgIEFTU0VS
VCghbV9zY3JvbGxpbmdUcmVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJh
bWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3LCBHcmFwaGljc0xheWVyKikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnBhZ2VE
ZXN0cm95ZWQoKQoreworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkKCk7
CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKKworICAg
IC8vIEludmFsaWRhdGluZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUgcmVmZXJl
bmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3JvbGxpbmdU
cmVlIG9iamVjdHMuCisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZTY3JvbGxp
bmdUcmVlOjppbnZhbGlkYXRlLCBtX3Njcm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7Cit9CisKK1Nj
cm9sbGluZ1RyZWUqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxpbmdUcmVlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdUcmVlKTsKKyAgICByZXR1cm4gbV9zY3JvbGxp
bmdUcmVlLmdldCgpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpjb21taXRU
cmVlU3RhdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFz
Q2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tbWl0VHJlZVN0
YXRlKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQo
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBvZiB0aGUgcGFn
ZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJyZW50bHkgaW5j
bHVkZXMKKyAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92
ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRo
ZQorICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUg
bWFpbiBmcmFtZS4KKyAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRl
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7
CisKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5
IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCisgICAgLy8g
anVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBs
aWVzIHRvIHRoZSByb290LgorICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1l
VmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Ny
b2xsUGFyYW1ldGVyczsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOworICAgIHNj
cm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYg
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKKyAgICBzY3JvbGxQ
YXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGlj
YWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJsZWQo
KTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVW
aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMudmVy
dGljYWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsK
KworICAgIHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luID0gZnJhbWVWaWV3LT5zY3JvbGxP
cmlnaW4oKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50
UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOworICAgIHNj
cm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsK
KworICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUp
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZWNvbXB1dGVXaGVlbEV2ZW50
SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmll
dy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZShjb21wdXRlQ3VycmVudFdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAg
aWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Ny
b2xsaW5nU3RhdGVOb2RlLCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJv
b3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQobV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnJvb3RMYXllckRpZENoYW5nZSgpOworCisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1l
Vmlld1Jvb3RMYXllckRpZENoYW5nZShmcmFtZVZpZXcpOworCisgICAgc2V0U2Nyb2xsTGF5ZXJG
b3JOb2RlKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIHN0YXRlTm9kZUZvcklE
KGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFt
ZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKQEAgLTY4LDcgKzE2NSw3IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcmkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKikK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CkBAIC03OSw2
ICsxNzYsMjAyIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnQKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCitib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX3BhZ2UpOworCisgICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0Zv
ckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
ZnJhbWVWaWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSB7CisgICAgICAg
IC8vIElmIHRoaXMgZnJhbWUgdmlldydzIGRvY3VtZW50IGlzIGJlaW5nIHB1dCBpbnRvIHRoZSBw
YWdlIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBvdXIKKyAgICAgICAgLy8gbWFpbiBm
cmFtZSBzY3JvbGwgcG9zaXRpb24uIEp1c3QgbGV0IHRoZSBGcmFtZVZpZXcgdGhpbmsgdGhhdCB3
ZSBkaWQuCisgICAgICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9k
ZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAgICBpZiAo
IXN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVOb2RlLT5zZXRS
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dy
YW1tYXRpY1Njcm9sbCgpKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KEZyYW1lVmlldyosIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisg
ICAgaWYgKG1fc2Nyb2xsaW5nVHJlZS0+d2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZSh3
aGVlbEV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2Nyb2xsaW5nVGhyZWFk
OjpkaXNwYXRjaChiaW5kKCZTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50LCBtX3Njcm9s
bGluZ1RyZWUuZ2V0KCksIHdoZWVsRXZlbnQpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlv
bkFuZFNjcm9sbExheWVyUG9zaXRpb24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbV9z
Y3JvbGxpbmdUcmVlLT5tYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpOworCisgICAgZnJhbWVWaWV3
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgZnJhbWVW
aWV3LT5ub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoc2Nyb2xsUG9zaXRpb24pOworICAgIGZy
YW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmll
dy0+c2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK1Njcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYzo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVy
SUQpCit7CisgICAgQVNTRVJUKHNjcm9sbExheWVySUQpOworCisgICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JJRChzY3JvbGxMYXllcklE
KTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJRDsK
KworICAgIGNsZWFyU3RhdGVUcmVlKCk7CisKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwg
dGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gdGFrZSBhIHBhcmVudCBJRCBzbyB0aGF0IGl0IGNh
bgorICAgIC8vIGFwcGVuZCB0aGUgbm9kZSBpbiB0aGUgYXBwcm9wcmlhdGUgc3BvdCBpbiB0aGUg
c3RhdGUgdHJlZS4gRm9yIG5vdyB3ZSBhbHdheXMgYXNzdW1lCisgICAgLy8gdGhpcyBpcyB0aGUg
cm9vdCBub2RlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRSb290U3RhdGVOb2RlKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLmdl
dCgpKSk7CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHNjcm9sbExheWVySUQsIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworICAgIHJldHVybiBzY3JvbGxMYXllcklEOwor
fQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFNj
cm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gbV9zdGF0
ZU5vZGVNYXAudGFrZShzY3JvbGxMYXllcklEKTsKKworICAgIC8vIEZJWE1FOiByZW1vdmVOb2Rl
KCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBhbmQgdGhvc2UgY2hpbGRyZW4gbWlnaHQgc3RpbGwg
YmUgaW4gdGhlIEhhc2hNYXAuCisgICAgLy8gVGhpcyB3aWxsIGJlIGEgYmlnIHByb2JsZW0gb25j
ZSB0aGVyZSBhcmUgYWN0dWFsbHkgY2hpbGRyZW4gaW4gdGhlIHRyZWUuCisgICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OmNsZWFyU3RhdGVUcmVlKCkKK3sKKyAgICBtX3N0YXRlTm9kZU1hcC5jbGVhcigp
OworICAgIGlmIChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKworU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQoU2Nyb2xsaW5nTm9kZUlEIHNj
cm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdTdGF0ZU5vZGUqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlTm9kZU1hcC5maW5kKHNjcm9sbExheWVySUQpOwor
ICAgIGlmIChpdCA9PSBtX3N0YXRlTm9kZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBpdC0+dmFsdWU7CisgICAgcmV0dXJuIHRv
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyog
ZnJhbWVWaWV3KQoreworICAgIGF0dGFjaFRvU3RhdGVUcmVlKGZyYW1lVmlldy0+c2Nyb2xsTGF5
ZXJJRCgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsTGF5
ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBTY3JvbGxpbmdTdGF0ZU5vZGUq
IG5vZGUpCit7CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOworICAgIHNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mIHJlZ2lv
biwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIG5vZGUtPnNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21t
aXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsUGFyYW1l
dGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycywgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIG5vZGUtPnNldEhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkpOworICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJh
bWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNj
cm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOworCisgICAgbm9kZS0+c2V0U2Nyb2xsT3Jp
Z2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBub2RlLT5zZXRWaWV3cG9y
dFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOworICAgIG5vZGUtPnNldENvbnRl
bnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CisgICAgc2NoZWR1bGVUcmVl
U3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIG5vZGUtPnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFk
U2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQoreworICAgIC8vIFRoZSBGcmFtZVZpZXcncyBHcmFw
aGljc0xheWVyIGlzIGxpa2VseSB0byBiZSBvdXQtb2Ytc3luY2ggd2l0aCB0aGUgUGxhdGZvcm1M
YXllcgorICAgIC8vIGF0IHRoaXMgcG9pbnQuIFNvIHdlJ2xsIHVwZGF0ZSBpdCBiZWZvcmUgd2Ug
c3dpdGNoIGJhY2sgdG8gbWFpbiB0aHJlYWQgc2Nyb2xsaW5nCisgICAgLy8gaW4gb3JkZXIgdG8g
YXZvaWQgbGF5ZXIgcG9zaXRpb25pbmcgYnVncy4KKyAgICBpZiAocmVhc29ucykKKyAgICAgICAg
dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQocmVhc29ucyk7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xs
TGF5ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBv
c2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOworfQorCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCit7CisgICAgaWYgKG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRp
ZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0
ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM+KikKK3sKKyAgICBjb21taXRUcmVlU3RhdGUoKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y29tbWl0VHJlZVN0YXRlKCkKK3sKKyAgICBBU1NFUlQo
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpOworCisgICAgT3du
UHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PmNvbW1pdCgpOworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5n
VHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlLCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHRyZWVTdGF0
ZS5yZWxlYXNlKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
</data>
<flag name="review"
          id="181187"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>