<?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>39420</bug_id>
          
          <creation_ts>2010-05-20 04:55:05 -0700</creation_ts>
          <short_desc>REGRESSION: :visited pseudo class doesn&apos;t work for links with custom background</short_desc>
          <delta_ts>2010-05-21 14:17:37 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://iamsteve.me</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve">stemckinney</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>228324</commentid>
    <comment_count>0</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-20 04:55:05 -0700</bug_when>
    <thetext>as the title suggests, and my website is using the pseudo class to show which page you are on. it works fine within the latest version of safari it just doesn&apos;t seem to be in the latest webkit nightly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228577</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-20 14:38:33 -0700</bug_when>
    <thetext>Could you please clarify what exactly doesn&apos;t work? I don&apos;t see any difference in look or behavior (other than different text antialiasing in top left box).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228585</commentid>
    <comment_count>2</comment_count>
      <attachid>56636</attachid>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-20 14:55:49 -0700</bug_when>
    <thetext>Created attachment 56636
a visited link</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228589</commentid>
    <comment_count>3</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-20 14:57:58 -0700</bug_when>
    <thetext>i&apos;ve amended the title i put the wrong pseudo class, i meant the visited one, sorry for the confusion.

i&apos;ve uploaded a picture to show, on each page of my website it has a unique body id and for that body id each page has a visited state for the navigation to show the user which page they are on. it doesn&apos;t show up webkit, maybe it&apos;s my coding but it works fine in safari

sorry again for the confusion hope this clears it up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228625</commentid>
    <comment_count>4</comment_count>
      <attachid>56646</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-20 16:38:30 -0700</bug_when>
    <thetext>Created attachment 56646
reduced test case (only works from a local file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228626</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-20 16:38:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/8011575&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228649</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-20 17:28:32 -0700</bug_when>
    <thetext>We no longer honor background images on visited links.  Firefox is also removing support for this capability.  Honoring background images on visited links allows for timing attacks that let your set of visited sites be snooped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228651</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-20 17:29:06 -0700</bug_when>
    <thetext>http://dbaron.org/mozilla/visited-privacy has the details of the new algorithm used by both Firefox nightlies and WebKit nightlies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228653</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-20 17:31:00 -0700</bug_when>
    <thetext>Specifically see the Risks section in that document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228659</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-20 17:44:43 -0700</bug_when>
    <thetext>The fact that normal colors don&apos;t work is a bug though.  Let me look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228748</commentid>
    <comment_count>10</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-20 22:31:35 -0700</bug_when>
    <thetext>thanks for clearing this up, so i guess i&apos;m better off removing the visited class. will there be something safer/similar implemented it&apos;s just on the side of usability for the user, not a huge issue, but it&apos;s a little helper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228749</commentid>
    <comment_count>11</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-20 22:36:12 -0700</bug_when>
    <thetext>read the article you suggested, so ignore my question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228779</commentid>
    <comment_count>12</comment_count>
      <attachid>56679</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 00:32:47 -0700</bug_when>
    <thetext>Created attachment 56679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228780</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 00:34:24 -0700</bug_when>
    <thetext>Attachment 56679 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228781</commentid>
    <comment_count>14</comment_count>
      <attachid>56679</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 00:35:09 -0700</bug_when>
    <thetext>Comment on attachment 56679
Patch

Nvm, I see a few typos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228782</commentid>
    <comment_count>15</comment_count>
      <attachid>56680</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 00:57:45 -0700</bug_when>
    <thetext>Created attachment 56680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228785</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 01:06:58 -0700</bug_when>
    <thetext>Attachment 56679 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2294417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228790</commentid>
    <comment_count>17</comment_count>
      <attachid>56681</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 01:22:27 -0700</bug_when>
    <thetext>Created attachment 56681
New patch that should build on Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228793</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 01:46:22 -0700</bug_when>
    <thetext>Attachment 56680 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2279412</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228802</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 02:10:46 -0700</bug_when>
    <thetext>Attachment 56681 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2314379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228808</commentid>
    <comment_count>20</comment_count>
      <attachid>56685</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 02:20:21 -0700</bug_when>
    <thetext>Created attachment 56685
Address Dan&apos;s comments from IRC and make more Chromium build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228959</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-21 09:50:08 -0700</bug_when>
    <thetext>&gt; We no longer honor background images on visited links.

I&apos;m curious whether the site should work anyway - it uses the same image for every state, but with offset and clipping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228985</commentid>
    <comment_count>22</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-21 10:23:03 -0700</bug_when>
    <thetext>it&apos;s css sprites, it works in all browsers - it saves for having to use javascript and such things and allows for better page load times and less requests made, it&apos;s a widely used technique from what i know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229025</commentid>
    <comment_count>23</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 11:46:53 -0700</bug_when>
    <thetext>Pretty sure you&apos;re still vulnerable to timing attacks if you are willing to render different portions of the same image.  If the image can be repositioned, you can affect the rendering time by keeping it from painting using clips.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229041</commentid>
    <comment_count>24</comment_count>
    <who name="Steve">stemckinney</who>
    <bug_when>2010-05-21 12:27:08 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Pretty sure you&apos;re still vulnerable to timing attacks if you are willing to render different portions of the same image.  If the image can be repositioned, you can affect the rendering time by keeping it from painting using clips.

i never knew this existed so i&apos;m glad i reported it and i&apos;ll be making some changes so i don&apos;t get caught out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229083</commentid>
    <comment_count>25</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-21 13:57:54 -0700</bug_when>
    <thetext>Fix landed in r59956.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229093</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 14:17:37 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/59956 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/59955
http://trac.webkit.org/changeset/59956</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56636</attachid>
            <date>2010-05-20 14:55:49 -0700</date>
            <delta_ts>2010-05-21 00:32:47 -0700</delta_ts>
            <desc>a visited link</desc>
            <filename>Screen shot 2010-05-20 at 22.54.48.png</filename>
            <type>image/png</type>
            <size>36641</size>
            <attacher name="Steve">stemckinney</attacher>
            
              <data encoding="base64">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
xqnmolaqNqfOpU5UL1d/p8Gj4a5RrbGkKaTpq3ld85OWpFaoVqvWd21l7VPaXTpIHX2ddJ3nujS6
1rpFum/0uPW89Br01vXl9GP1uwzQBsYGlwxeGrIZuhnWGa4bKRidMuo1JjO2NC4yfndU+Gjo0Q4T
hImRSY7JzDG+Y4HH2kyBqaFpjumsmYBZiNk9c4y5mXmx+QcLKYs4i35LWktny3rLLSstqyyraWtB
6wjrHhtKG0ebOpvvtjq22bZzdhJ2p+ye2jPb+9i3O2AdbByqHTaP6x7PO77oKOeY4jh5QuDEyROD
TsxO/k4PnCmdic4tLmgXW5d6l12iKbGcuOlq6Friuu6m7XbZbdVdwz3XfcVD1SPbY8lT1TPbc9lL
1SvHa8Vb3Tvfe81H26fI54uvge813+9+pn41fgf+tv43AnABLgF3A2kC/QJ7g9iDTgaNBosEpwTP
hSiH5IWshxqHVodBYSfC2sPp4MPhswjBiLMR85FqkcWR21E2US0nqU8GnnwWLRydFr0UoxdTFYuK
dYvtieOKS4ybP6V5qiweineN70ngSUhOWDytf7o2kSTRL3EoSTIpO+nbGdszHclsyaeTF87qn21I
oUgJTXmZqpJ67RzqnM+552kyaYVp++nu6U8yJDPyM3Yz3TKfnJc6X3D+4ILnhedZ8llXL2IuBl6c
vKR+qTabOjsmeyHHJOdOLmdueu63POe8wXzZ/GuXSS5HXJ4rOFrQXshbeLFwt8i7aKJYq/hGCWtJ
Wsn3K+5XXlzVuNp0je1axrWfpT6lr8r0y+6U85fnV2AqIis+VNpU9lcpVtVVM1dnVO/VBNbM1VrU
9tYp1NXVs9ZnNSAaIhpWrjteH2nUaWxvEmsqu0G4kXET3Iy4+fGWy63JZuPmnhbFlqbbfLdLWmlb
0+9Ad6LvrLd5t82127eP3jW629Oh0tF6T/xezX2u+8UP6B9kPSR5mPzwoDOmc7MruGut26t7oce5
Z/qR3aPxXvPe533GfQOP9R4/6tfs7xxQHbg/qDx494nik7an8k/vPJN71jokN9T6XP75nWGF4fYR
pZGO0SOjD1+ov+ge0xl7PG44/nTi2MTopPXkq5eOL+deub9afu3/+stU5NTO9OkZ9Ez6LNVs/hvW
N+Vvhd7emJOfezCvM//sneW76QW3hdX3Ye93F5M/kH/IX+JYqluWXr6/orcy8vH4x8XV4NWdtZS/
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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56646</attachid>
            <date>2010-05-20 16:38:30 -0700</date>
            <delta_ts>2010-05-21 00:32:47 -0700</delta_ts>
            <desc>reduced test case (only works from a local file)</desc>
            <filename>main.html</filename>
            <type>text/html</type>
            <size>1032</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8aGVhZD4NCjxzdHlsZT4NCiAgICBhICAgICAgICAge2JhY2tncm91bmQ6IHJlZDsg
ICB3aWR0aDogOTNweDsgaGVpZ2h0OiA1OXB4OyBkaXNwbGF5OiBibG9jazt9DQogICAgYTp2aXNp
dGVkIHtiYWNrZ3JvdW5kOiBncmVlbjsgd2lkdGg6IDkzcHg7IGhlaWdodDogNTlweDsgZGlzcGxh
eTogYmxvY2s7fQ0KDQo8IS0tDQpGcm9tIHRoZSBhY3R1YWwgc3R5bGVzaGVldDoNCg0KI2hvbWUg
e2JhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvaG9tZS5wbmcpOyB3aWR0aDogOTNweDsgaGVpZ2h0
OiA1OXB4OyB6LWluZGV4OiAyMDA7IGRpc3BsYXk6IGJsb2NrOyBmbG9hdDogbGVmdDsgb3ZlcmZs
b3c6IGhpZGRlbjt9DQojaG9tZSBhOmhvdmVyIHtiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL2hv
bWUucG5nKSBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU5cHg7CXdpZHRoOiA5
M3B4OyBoZWlnaHQ6IDU5cHg7IGRpc3BsYXk6IGJsb2NrOyB6LWluZGV4OiAyMDA7IGZsb2F0OiBs
ZWZ0O30NCiNob21lIGE6YWN0aXZlIHtiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL2hvbWUucG5n
KSBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExOHB4OyB3aWR0aDogOTNweDsg
aGVpZ2h0OiA1OXB4OyBkaXNwbGF5OiBibG9jazsgei1pbmRleDogMjAwOyBmbG9hdDogbGVmdDt9
DQpib2R5I2RlZmF1bHRfcGFnZSAjaG9tZSBhOnZpc2l0ZWQge2JhY2tncm91bmQ6IHVybCguLi9p
bWFnZXMvaG9tZS5wbmcpIG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTE4cHg7
IHdpZHRoOiA5M3B4OyBoZWlnaHQ6IDU5cHg7IGRpc3BsYXk6IGJsb2NrOyB6LWluZGV4OiAyMDA7
IGZsb2F0OiBsZWZ0O30NCi0tPg0KPC9zdHlsZT4NCjwvaGVhZD4NCg0KPGJvZHk+DQogICAgPHA+
VGhpcyB0ZXN0IE9OTFkgd29ya3MgZnJvbSBhIGxvY2FsIGZpbGVzIG5hbWVkIG1haW4uaHRtbDwv
cD4NCiAgICA8ZGl2PjxhIGhyZWY9Im1haW4uaHRtbCI+PC9hPjwvZGl2Pg0KPC9ib2R5Pg0KPC9o
dG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56679</attachid>
            <date>2010-05-21 00:32:47 -0700</date>
            <delta_ts>2010-05-21 00:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>73276</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ1IEBACisyMDEwLTA1LTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MjAsIDp2aXNpdGVkIG5vdCB3
b3JraW5nIHdpdGggYmFja2dyb3VuZC1jb2xvci4KKworICAgICAgICBNYWtlIHRoZSBSZW5kZXJT
dHlsZSBjb2xvciBhY2Nlc3NvcnMgcHJpdmF0ZS4gIFRoaXMgZm9yY2VzIGNhbGxlcnMgdG8gdXNl
IHZpc2l0ZWREZXBlbmRlbnRDb2xvcgorICAgICAgICBpbnN0ZWFkIChvciB0byBtYWtlIHRoZSBk
ZWNpc2lvbiB0byBiZWNvbWVzIGZyaWVuZHMgb2YgdGhlIFJlbmRlclN0eWxlIGNsYXNzIGluIG9y
ZGVyIHRvIGdldCBhY2Nlc3MKKyAgICAgICAgdG8gdGhlIHJlYWwgc3R5bGUgaW5mb3JtYXRpb24p
LgorCQorICAgICAgICBNb2RpZmllZCBoaXN0b3J5L3NlbGYtaXMtdmlzaXRlZC5odG1sIHRvIGFs
c28gdGVzdCBiYWNrZ3JvdW5kIGNvbG9ycy4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFj
Y2Vzc2liaWxpdHkpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6Cisg
ICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmN1cnJlbnRDb2xvck9yVmFsaWRD
b2xvcik6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oOgorICAg
ICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUVkaXRpbmdTdHlsZVRv
QXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q29sb3JDaGFuZ2VzQ29tcHV0ZWRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRlZCk6Cisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0p
OgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppc0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNhbGN1bGF0ZVN0eWxlQmVmb3JlSW5zZXJ0aW9uKToK
KyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVTdHls
ZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6cGFp
bnRDYXJldCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlTWFya3VwKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmVuc3VyZVByb3BlcnR5TWFw
KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICog
cGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Zm9udEF0dHJp
YnV0ZXNGb3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50Qm94RGVjb3JhdGlvbnNXaXRoU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpZWxk
c2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJl
cGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVuZGVyZXJCYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZW51TGlzdDo6bWVudVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2U6OmFkanVzdENvbG9yRm9yUHNldWRv
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQ
YWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGU6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmJnQ29sb3Ip
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om1lbnVTdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpp
c0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJT
VkdUZXh0Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNvbG9ySW5jbHVkaW5nRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjopOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6Omhhc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckxlZnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyUmlnaHRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyVG9wU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckJvdHRvbVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjp0ZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVy
aXRlZEZsYWdzOjp0ZXh0U3Ryb2tlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVk
RmxhZ3M6Omhhc05vcm1hbENvbHVtbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6Ym9yZGVyTGVmdENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdz
Ojpib3JkZXJSaWdodENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpi
b3JkZXJUb3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVy
Qm90dG9tQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Y29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmNvbHVtblJ1bGVDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6b3V0bGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjp0ZXh0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
aGVyaXRlZEZsYWdzOjp0ZXh0U3Ryb2tlQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZvckN1cnJlbnRDb2xvcik6
CisKIDIwMTAtMDUtMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBA
IC05ODcsNiArOTg3LDcgQEAgX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyMGlzU29mdHdhcmVSZW5k
ZQogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyOGlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXJF
dgogX19aTks3V2ViQ29yZTlQYWdlQ2FjaGUxMGZyYW1lQ291bnRFdgogX19aTks3V2ViQ29yZTlQ
YWdlQ2FjaGUyMWF1dG9yZWxlYXNlZFBhZ2VDb3VudEV2CitfX1pOSzdXZWJDb3JlMTFSZW5kZXJT
dHlsZTIxdmlzaXRlZERlcGVuZGVudENvbG9yRWkKIF9fWlRWTjdXZWJDb3JlMTJDaHJvbWVDbGll
bnRFCiBfX1pUVk43V2ViQ29yZTEyUGx1Z2luV2lkZ2V0RQogX19aVFZON1dlYkNvcmUxN0ZpbGVD
aG9vc2VyQ2xpZW50RQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsCiAgICAgUmVuZGVyU3R5bGUq
IHRhYmxlU3R5bGUgPSB0YWJsZS0+c3R5bGUoKTsKICAgICBpZiAoIXRhYmxlU3R5bGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBDb2xvciB0YWJsZUJHQ29sb3IgPSB0YWJsZVN0eWxlLT5i
YWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciB0YWJsZUJHQ29sb3IgPSB0YWJsZVN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIAog
ICAgIC8vIGNoZWNrIGVub3VnaCBvZiB0aGUgY2VsbHMgdG8gZmluZCBpZiB0aGUgdGFibGUgbWF0
Y2hlcyBvdXIgY3JpdGVyaWEKICAgICAvLyBDcml0ZXJpYTogCkBAIC0xNjksNyArMTY5LDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBpZiB0aGUgY2VsbCBoYXMgYSBkaWZmZXJlbnQgY29sb3IgZnJvbSB0aGUg
dGFibGUgYW5kIHRoZXJlIGlzIGNlbGwgc3BhY2luZywKICAgICAgICAgICAgIC8vIHRoZW4gaXQg
aXMgcHJvYmFibHkgYSBkYXRhIHRhYmxlIGNlbGwgKHNwYWNpbmcgYW5kIGNvbG9ycyB0YWtlIHRo
ZSBwbGFjZSBvZiBib3JkZXJzKQotICAgICAgICAgICAgQ29sb3IgY2VsbENvbG9yID0gcmVuZGVy
U3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICAgICAgQ29sb3IgY2VsbENvbG9yID0g
cmVuZGVyU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgICAgICAgICBpZiAodGFibGUtPmhCb3JkZXJTcGFjaW5nKCkgPiAwICYmIHRh
YmxlLT52Qm9yZGVyU3BhY2luZygpID4gMAogICAgICAgICAgICAgICAgICYmIHRhYmxlQkdDb2xv
ciAhPSBjZWxsQ29sb3IgJiYgY2VsbENvbG9yLmFscGhhKCkgIT0gMSkKICAgICAgICAgICAgICAg
ICBiYWNrZ3JvdW5kRGlmZmVyZW5jZUNlbGxDb3VudCsrOwpJbmRleDogV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShy
ZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNSw4ICszMTUsOCBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBz
dHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpLCByYW5nZSk7CiAKICAgICAv
LyBzZXQgYmFzaWMgY29sb3JzCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3Ry
aW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9y
KHN0eWxlLT5jb2xvcigpKSwgcmFuZ2UpOwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3Io
YXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5QmFja2dyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwg
bnNDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3JvdW5kQ29s
b3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5n
U2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5QmFja2dyb3VuZENvbG9yVGV4dEF0
dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSksIHJhbmdlKTsKIAogICAgIC8vIHNldCBzdXBlci9zdWIgc2NyaXB0
aW5nCiAgICAgRVZlcnRpY2FsQWxpZ24gYWxpZ25tZW50ID0gc3R5bGUtPnZlcnRpY2FsQWxpZ24o
KTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAko
cmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsOCArMzc0LDkgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldFBvc2l0aW9uTwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUF1dG8pOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQgaW5mb3JtYXRpb24sIHNvIHRoYXQg
Y29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4KICAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihzdHls
ZS0+Y29sb3IoKS5yZ2IoKSk7CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVD
b2xvcihjb2xvci5yZ2IoKSk7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb247CitjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIFNoYWRvd0RhdGE7CiAK
IGVudW0gRVVwZGF0ZUxheW91dCB7IERvTm90VXBkYXRlTGF5b3V0ID0gZmFsc2UsIFVwZGF0ZUxh
eW91dCA9IHRydWUgfTsKQEAgLTY5LDcgKzcxLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZUZvclNoYWRvdyhjb25zdCBTaGFkb3dEYXRhKiwgaW50KSBjb25zdDsKLQorICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJT
dHlsZSosIGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAgCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZTsKICAgICBQc2V1ZG9JZCBtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXI7CiAgICAgYm9vbCBtX2Fs
bG93VmlzaXRlZFN0eWxlOwpJbmRleDogV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJl
dmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUoQwogICAgIFNWR0NvbG9yKiBjID0gc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2
YWx1ZSk7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgaWYgKGMtPmNvbG9yVHlwZSgpID09IFNWR0Nv
bG9yOjpTVkdfQ09MT1JUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgY29sb3IgPSBzdHlsZS0+
Y29sb3IoKTsKKyAgICAgICAgY29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpOwogICAgIGVsc2UKICAgICAgICAgY29sb3IgPSBjLT5jb2xvcigpOwog
ICAgIHJldHVybiBjb2xvcjsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgc3RhdGljIGNvbnN0IGludCBl
ZGl0aW5nU3R5bGVQcm9wZXJ0aWVzWwogfTsKIHNpemVfdCBudW1FZGl0aW5nU3R5bGVQcm9wZXJ0
aWVzID0gc2l6ZW9mKGVkaXRpbmdTdHlsZVByb3BlcnRpZXMpL3NpemVvZihlZGl0aW5nU3R5bGVQ
cm9wZXJ0aWVzWzBdKTsKIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdT
dHlsZSBzaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUpCitQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQ
b3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNsdWRlVHlwaW5n
U3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0
ZWRTdHlsZUF0UG9zaXRpb24gPSBwb3MuY29tcHV0ZWRTdHlsZSgpOwogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGU7CkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBw
cmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KENTU011dAogICAgIC8vIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9u
IG9ubHkgcmVtb3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9u
IHdhcyBtb2RpZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3Bl
cnRpZXMsIHRoZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQogICAgIC8vIHdoaWNo
IG9uZSBvZiBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVk
LgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0aW5n
U3R5bGVBdFBvc2l0aW9uKHBvcyk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBv
cyk7CiAgICAgc3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxlKTsKIAogICAgIC8vIGlmIGFscGhhIHZh
bHVlIGlzIHplcm8sIHdlIGRvbid0IGFkZCB0aGUgYmFja2dyb3VuZCBjb2xvci4KQEAgLTQ3Miw4
ICs0NzIsOCBAQCB2b2lkIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKENTU011dGFibGVTCiB7CiAg
ICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5
bGVBdFBvc2l0aW9uKFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOwotICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0
aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHBhcmVudFN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9z
aXRpb24oUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCAwKSk7CisgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5n
U3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKICAgICBwYXJlbnRTdHlsZS0+ZGlm
ZihzdHlsZS5nZXQoKSk7CiAgICAgc3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxlKTsKIH0KQEAgLTE3
NTcsMTAgKzE3NTcsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShj
bwogICAgIHNldE5vZGVBdHRyaWJ1dGUoYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CiAK
LXN0YXRpYyBib29sIGZvbnRDb2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKFJlbmRlclN0eWxlKiBj
b21wdXRlZFN0eWxlLCBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZSkKK3N0YXRpYyBib29sIGZvbnRD
b2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKGNvbnN0IENvbG9yJiBjb21wdXRlZFN0eWxlQ29sb3Is
IFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdlKQogewogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZv
bnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChDb2xvcihzdHlsZUNoYW5nZS5mb250Q29sb3IoKSkg
IT0gY29tcHV0ZWRTdHlsZS0+Y29sb3IoKSkKKyAgICAgICAgaWYgKENvbG9yKHN0eWxlQ2hhbmdl
LmZvbnRDb2xvcigpKSAhPSBjb21wdXRlZFN0eWxlQ29sb3IpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTgwMSw3ICsxODAxLDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogICAgICAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gaW5zZXJ0IGEgZm9udCBlbGVtZW50IGlmIGl0IHdpbGwgZW5kIHVwIGNoYW5naW5n
IHRoZSBzdHlsZSBvZiB0aGUKICAgICAgICAgLy8gdGV4dCBzb21laG93LiBPdGhlcndpc2UgaXQg
d2lsbCBiZSBhIGdhcmJhZ2Ugbm9kZSB0aGF0IHdpbGwgY3JlYXRlIHByb2JsZW1zIGZvciB1cwog
ICAgICAgICAvLyBtb3N0IG5vdGFibHkgd2hlbiB3ZSBhcHBseSBhIGJsb2NrcXVvdGUgc3R5bGUg
Zm9yIGEgbWVzc2FnZSByZXBseS4KLSAgICAgICAgaWYgKGZvbnRDb2xvckNoYW5nZXNDb21wdXRl
ZFN0eWxlKGNvbXB1dGVkU3R5bGUsIHN0eWxlQ2hhbmdlKQorICAgICAgICBpZiAoZm9udENvbG9y
Q2hhbmdlc0NvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZUNoYW5nZSkKICAgICAgICAgICAgICAgICB8fCBmb250
RmFjZUNoYW5nZXNDb21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUsIHN0eWxlQ2hhbmdlKQogICAg
ICAgICAgICAgICAgIHx8IGZvbnRTaXplQ2hhbmdlc0NvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHls
ZSwgc3R5bGVDaGFuZ2UpKSB7CiAgICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250
Q29sb3IoKSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA1
OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCwxMSBAQCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIEhU
TUxFbGVtZW50OwogY2xhc3MgU3R5bGVDaGFuZ2U7CiAKK2VudW0gU2hvdWxkSW5jbHVkZVR5cGlu
Z1N0eWxlIHsKKyAgICBJbmNsdWRlVHlwaW5nU3R5bGUsCisgICAgSWdub3JlVHlwaW5nU3R5bGUK
K307CisKIGNsYXNzIEFwcGx5U3R5bGVDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kIHsKIHB1YmxpYzoKICAgICBlbnVtIEVQcm9wZXJ0eUxldmVsIHsgUHJvcGVydHlEZWZhdWx0
LCBGb3JjZUJsb2NrUHJvcGVydGllcyB9OwpAQCAtNTAsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVDb21tYW5kKGVsZW1lbnQs
IHJlbW92ZU9ubHksIGFjdGlvbikpOwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3Np
dGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNsdWRlVHlwaW5nU3R5
bGUgPSBJZ25vcmVUeXBpbmdTdHlsZSk7CiAKIHByaXZhdGU6CiAgICAgQXBwbHlTdHlsZUNvbW1h
bmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiwgRVByb3BlcnR5
TGV2ZWwpOwpAQCAtMTE3LDEyICsxMjQsNiBAQCBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGUq
KTsKIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1l
bnQqKTsKIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05v
dEluQ29tcHV0ZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKTsKIAotZW51bSBTaG91bGRJbmNsdWRlVHlw
aW5nU3R5bGUgewotICAgIEluY2x1ZGVUeXBpbmdTdHlsZSwKLSAgICBJZ25vcmVUeXBpbmdTdHls
ZQotfTsKLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihQb3NpdGlvbiwgU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlID0gSWdub3Jl
VHlwaW5nU3R5bGUpOwogdm9pZCBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgUG9zaXRpb24pOwogdm9pZCByZW1vdmVTdHlsZXNBZGRlZEJ5
Tm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKIApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0MCw3ICs5NDAsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBo
CiAgICAgLy8gdG9vLCA8ZGl2PjxiPjxicj48L2I+PC9kaXY+IGZvciBleGFtcGxlLiAgU2F2ZSBp
dCBzbyB0aGF0IHdlIGNhbiBwcmVzZXJ2ZSBpdCBsYXRlci4KICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlSW5FbXB0eVBhcmFncmFwaDsKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92ZSAmJiBwcmVzZXJ2ZVN0eWxl
KSB7Ci0gICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IGVkaXRpbmdTdHlsZUF0UG9zaXRp
b24oc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLCBJbmNsdWRlVHlwaW5n
U3R5bGUpOworICAgICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGggPSBBcHBseVN0eWxlQ29tbWFu
ZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVp
dmFsZW50KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CiAgICAgICAgIC8vIFRoZSBtb3ZlZCBwYXJh
Z3JhcGggc2hvdWxkIGFzc3VtZSB0aGUgYmxvY2sgc3R5bGUgb2YgdGhlIGRlc3RpbmF0aW9uLgog
ICAgICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGgtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwog
ICAgIH0KQEAgLTEwMDMsNyArMTAwMyw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJy
ZWFrT3V0T2ZFbXAKICAgICBpZiAoIWVtcHR5TGlzdEl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0
aW5nU3R5bGVBdFBvc2l0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIEluY2x1ZGVUeXBp
bmdTdHlsZSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9
IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CiAKICAgICBOb2RlKiBsaXN0Tm9kZSA9
IGVtcHR5TGlzdEl0ZW0tPnBhcmVudE5vZGUoKTsKICAgICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8g
c29tZXRoaW5nIGJldHRlciB3aGVuIHRoZSBpbW1lZGlhdGUgcGFyZW50IHdhc24ndCBhIGxpc3Qg
bm9kZT8KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIGJvb2wgaXNE
ZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZAogICAgICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChzdHlsZS0+aGFzQmFja2dyb3Vu
ZCgpICYmICghcGFyZW50U3R5bGUtPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZS0+YmFja2dyb3Vu
ZENvbG9yKCkgIT0gcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKSkKKyAgICAgICAgaWYg
KHN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgJiYgKCFwYXJlbnRTdHlsZS0+aGFzQmFja2dyb3VuZCgp
IHx8IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpICE9IHBhcmVudFN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5NCwxNCArMjk0LDE0IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6c2F2ZVR5cGluZ1MKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRmlndXJlIG91dCB0aGUg
dHlwaW5nIHN0eWxlIGluIGVmZmVjdCBiZWZvcmUgdGhlIGRlbGV0ZSBpcyBkb25lLgotICAgIG1f
dHlwaW5nU3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlVGFiU3Bh
bihtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsKKyAgICBtX3R5cGluZ1N0eWxlID0gQXBw
bHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zaXRpb25CZWZvcmVUYWJT
cGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkpOwogCiAgICAgcmVtb3ZlRW5jbG9zaW5n
QW5jaG9yU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFy
dCgpKTsKIAogICAgIC8vIElmIHdlJ3JlIGRlbGV0aW5nIGludG8gYSBNYWlsIGJsb2NrcXVvdGUs
IHNhdmUgdGhlIHN0eWxlIGF0IGVuZCgpIGluc3RlYWQgb2Ygc3RhcnQoKQogICAgIC8vIFdlJ2xs
IHVzZSB0aGlzIGxhdGVyIGluIGNvbXB1dGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlIGlmIHdlIGVu
ZCB1cCBvdXRzaWRlIG9mIGEgTWFpbCBibG9ja3F1b3RlCiAgICAgaWYgKG5lYXJlc3RNYWlsQmxv
Y2txdW90ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkubm9kZSgpKSkKLSAgICAgICAgbV9k
ZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihtX3NlbGVj
dGlvblRvRGVsZXRlLmVuZCgpKTsKKyAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxl
ID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24obV9zZWxlY3Rpb25U
b0RlbGV0ZS5lbmQoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGUgPSAwOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpj
YQogICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpICYmICFpc0VuZE9mUGFy
YWdyYXBoKHZpc2libGVQb3MpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zdHlsZSA9
IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zLCBJbmNsdWRlVHlwaW5nU3R5bGUpOworICAgIG1f
c3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3MsIElu
Y2x1ZGVUeXBpbmdTdHlsZSk7CiB9CiAKIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6YXBwbHlTdHlsZUFmdGVySW5zZXJ0aW9uKE5vZGUqIG9yaWdpbmFsRW5jbG9zaW5nQmxv
Y2spCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCShyZXZpc2lv
biA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFJlbW92ZUZvcm1hdENvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSBy
b290LCBpdCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0
aGF0IHdlJ3JlIG9wZXJhdGluZyBvbi4KICAgICBOb2RlKiByb290ID0gZnJhbWUtPnNlbGVjdGlv
bigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9u
KHJvb3QsIDApKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1
bHRTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0
aW9uKHJvb3QsIDApKTsKIAogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0ZWQgY29udGVudC4KICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gbGVhdmUgdGhpcyB0byBpbnNlcnRUZXh0
LCBidXQgaXRzIGRlbGV0ZSBvcGVyYXRpb24KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzcsNyAr
NTc3LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydAogICAgIE5v
ZGUqIHNvdXJjZURvY3VtZW50U3R5bGVTcGFuID0gdG9wTm9kZTsKICAgICBSZWZQdHI8Tm9kZT4g
Y29waWVkUmFuZ2VTdHlsZVNwYW4gPSBzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbi0+Zmlyc3RDaGls
ZCgpOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUF0SW5z
ZXJ0aW9uUG9zID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihyYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQoaW5zZXJ0aW9uUG9zKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBzdHlsZUF0SW5zZXJ0aW9uUG9zID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0
UG9zaXRpb24ocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGluc2VydGlvblBvcykpOwogCiAgICAg
U3RyaW5nIHN0eWxlVGV4dCA9IHN0eWxlQXRJbnNlcnRpb25Qb3MtPmNzc1RleHQoKTsKICAgICAK
QEAgLTYzNCw4ICs2MzQsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVT
dHlsCiAgICAgLy8gc3R5bGVzIGZyb20gYmxvY2txdW90ZU5vZGUgYXJlIGFsbG93ZWQgdG8gb3Zl
cnJpZGUgdGhvc2UgZnJvbSB0aGUgc291cmNlIGRvY3VtZW50LCBzZWUgPHJkYXI6Ly9wcm9ibGVt
LzQ5MzA5ODY+IGFuZCA8cmRhcjovL3Byb2JsZW0vNTA4OTMyNz4uCiAgICAgTm9kZSogYmxvY2tx
dW90ZU5vZGUgPSBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb250ZXh0KSA/IGNvbnRleHQg
OiBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29udGV4dCk7CiAgICAgaWYgKGJsb2NrcXVvdGVOb2Rl
KSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYmxvY2txdW90
ZVN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihibG9ja3F1b3RlTm9kZSwg
MCkpOwotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0
eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihibG9ja3F1b3RlTm9kZS0+cGFy
ZW50Tm9kZSgpLCAwKSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gYmxvY2txdW90ZVN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9z
aXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUsIDApKTsKKyAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjpl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKGJsb2NrcXVvdGVOb2RlLT5wYXJlbnROb2Rl
KCksIDApKTsKICAgICAgICAgcGFyZW50U3R5bGUtPmRpZmYoYmxvY2txdW90ZVN0eWxlLmdldCgp
KTsKIAogICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gYmxvY2txdW90ZVN0eWxlLT5lbmQoKTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChtX21hdGNoU3R5bGUpCi0gICAgICAgIG1faW5zZXJ0aW9uU3R5bGUgPSBlZGl0aW5n
U3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwor
ICAgICAgICBtX2luc2VydGlvblN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHls
ZUF0UG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CiAgICAg
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpwYWludENhcmV0KEdyYQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IERldmljZUNv
bG9yU3BhY2U7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
ICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGNhcmV0
Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvcigpOworICAgICAgICBj
YXJldENvbG9yID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBjb2xvclNwYWNlID0gZWxlbWVudC0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpOwogICAgIH0KIApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29u
c3QgUmFuZ2UqIHJhbmdlLCAKICAgICAvLyBBZGQgYSB3cmFwcGVyIHNwYW4gd2l0aCB0aGUgc3R5
bGVzIHRoYXQgYWxsIG9mIHRoZSBub2RlcyBpbiB0aGUgbWFya3VwIGluaGVyaXQuCiAgICAgTm9k
ZSogcGFyZW50T2ZMYXN0Q2xvc2VkID0gbGFzdENsb3NlZCA/IGxhc3RDbG9zZWQtPnBhcmVudE5v
ZGUoKSA6IDA7CiAgICAgaWYgKHBhcmVudE9mTGFzdENsb3NlZCAmJiBwYXJlbnRPZkxhc3RDbG9z
ZWQtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24ocGFyZW50T2ZMYXN0
Q2xvc2VkLCAwKSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
c3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihwYXJlbnRPZkxhc3RDbG9zZWQsIDApKTsKIAogICAgICAgICAvLyBTdHlsZXMgdGhhdCBNYWls
IGJsb2NrcXVvdGVzIGNvbnRyaWJ1dGUgc2hvdWxkIG9ubHkgYmUgcGxhY2VkIG9uIHRoZSBNYWls
IGJsb2NrcXVvdGUsIHRvIGhlbHAKICAgICAgICAgLy8gdXMgZGlmZmVyZW50aWF0ZSB0aG9zZSBz
dHlsZXMgZnJvbSBvbmVzIHRoYXQgdGhlIHVzZXIgaGFzIGFwcGxpZWQuICBUaGlzIGhlbHBzIHVz
CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiBy
YW5nZSwgCiAgICAgICAgIC8vIEFkZCBhIHN0eWxlIHNwYW4gd2l0aCB0aGUgZG9jdW1lbnQncyBk
ZWZhdWx0IHN0eWxlcy4gIFdlIGFkZCB0aGVzZSBpbiBhIHNlcGFyYXRlCiAgICAgICAgIC8vIHNw
YW4gc28gdGhhdCBhdCBwYXN0ZSB0aW1lIHdlIGNhbiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZG9j
dW1lbnQgZGVmYXVsdHMgYW5kIHVzZXIKICAgICAgICAgLy8gYXBwbGllZCBzdHlsZXMuCi0gICAg
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gZWRp
dGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCks
IDApKTsKKyAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0
U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDApKTsKIAogICAgICAgICBpZiAoZGVmYXVs
dFN0eWxlLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICBhZGRTdHlsZU1hcmt1cChwcmVNYXJr
dXBzLCBtYXJrdXBzLCBkZWZhdWx0U3R5bGUuZ2V0KCksIGRvY3VtZW50KTsKSW5kZXg6IFdlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBX
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NjIsNyArNTYyLDcgQEAgc3RhdGljIGludCBnUHJvcGVydHlXcmFwcGVyTWFwW251bUNTU1By
bwogc3RhdGljIGNvbnN0IGludCBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4ID0gLTE7CiAK
IAotc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKQordm9pZCBBbmltYXRpb25CYXNlOjpl
bnN1cmVQcm9wZXJ0eU1hcCgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBk
ZXN0cm95ZWQuIE1heWJlIHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0
aGUgbGFzdCBBbmltYXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KICAgICBpZiAoZ1Byb3Bl
cnR5V3JhcHBlcnMgPT0gMCkgewpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmgJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQoaW50IHByb3ApOwog
I2VuZGlmCiAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKTsK
KwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKSB7IH0KSW5kZXg6
IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0Zy
YW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMTQgKzQwNywxNCBAQCBOU0RpY3Rpb25h
cnkqIEZyYW1lOjpmb250QXR0cmlidXRlc0ZvclNlCiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5
KiByZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKIAotICAgIGlmIChz
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29s
b3IoKS5hbHBoYSgpICE9IDApCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKKyAgICAgICAgW3Jlc3Vs
dCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07CiAKICAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkK
ICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5n
ZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKLSAgICBpZiAoc3R5bGUt
PmNvbG9yKCkuaXNWYWxpZCgpICYmIHN0eWxlLT5jb2xvcigpICE9IENvbG9yOjpibGFjaykKLSAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkgZm9yS2V5Ok5T
Rm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQorICAgICAg
ICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwogCiAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3R5bGUtPnRleHRTaGFkb3coKTsK
ICAgICBpZiAoc2hhZG93KSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZp
c2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChSZW5kZXJP
YmplY3Q6OlBhCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQ7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJz
dExpbmUpOwotICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT5jb2xvcigpOworICAgIENvbG9y
IHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cik7CiAgICAgaWYgKHRleHRDb2xvciAhPSBjb250ZXh0LT5maWxsQ29sb3IoKSkKICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAg
ICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKQEAgLTc4LDcgKzc4LDcgQEAgSW50UmVjdCBFbGxp
cHNpc0JveDo6c2VsZWN0aW9uUmVjdChpbnQgdAogCiB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNl
bGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgQ29sb3IgdGV4dENvbG9yID0g
c3R5bGUtPmNvbG9yKCk7CisgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gbV9yZW5kZXJlci0+
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYgKCFjLmlzVmFsaWQoKSB8fCAhYy5h
bHBoYSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDkgKzQ1NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdHJva2VX
aWR0aCA9IHN0cm9rZVdpZHRoOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBz
dHJva2UgPSBwYWludEluZm8uZm9yY2VCbGFja1RleHQgPyBDb2xvcjo6YmxhY2sgOiBwc2V1ZG9T
dHlsZS0+dGV4dFN0cm9rZUNvbG9yKCk7Ci0gICAgICAgICAgICBpZiAoIXN0cm9rZS5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgc3Ryb2tlID0gcHNldWRvU3R5bGUtPmNvbG9yKCk7CisgICAg
ICAgICAgICBDb2xvciBzdHJva2UgPSBwYWludEluZm8uZm9yY2VCbGFja1RleHQgPyBDb2xvcjo6
YmxhY2sgOiBwc2V1ZG9TdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yKTsKICAgICAgICAgICAgIGlmIChzdHJva2UgIT0gc2VsZWN0aW9u
U3Ryb2tlQ29sb3IpIHsKICAgICAgICAgICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25s
eSkKICAgICAgICAgICAgICAgICAgICAgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gdHJ1
ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogCiAgICAgLy8g
U2V0IHRoZSB0ZXh0IGNvbG9yIGlmIHdlJ3JlIHRoZSBib2R5LgogICAgIGlmIChpc0JvZHkoKSkK
LSAgICAgICAgZG9jdW1lbnQoKS0+c2V0VGV4dENvbG9yKHN0eWxlKCktPmNvbG9yKCkpOworICAg
ICAgICBkb2N1bWVudCgpLT5zZXRUZXh0Q29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUJveE1v
ZGVsSW5mb0Zyb21TdHlsZSgpCkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbgogdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29y
YXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBjb25z
dCBGaWxsTGF5ZXIqIGJnTGF5ZXIgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAg
Q29sb3IgYmdDb2xvciA9IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOworICAgIENvbG9yIGJn
Q29sb3IgPSBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpOwogICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IDA7CiAgICAgaWYgKCFz
dHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkgJiYgbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omh0bWxUYWcpKSB7CiAgICAgICAgIC8vIExvY2F0ZSB0aGUgPGJvZHk+IGVsZW1l
bnQgdXNpbmcgdGhlIERPTS4gIFRoaXMgaXMgZWFzaWVyIHRoYW4gdHJ5aW5nCkBAIC01ODgsNyAr
NTg4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgICAg
ICBib2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aGFzTG9jYWxOYW1lKGJvZHlUYWcpKSA/IGJv
ZHktPnJlbmRlcmVyKCkgOiAwOwogICAgICAgICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAg
ICAgYmdMYXllciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKLSAg
ICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKKyAgICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC02NTAsNyArNjUwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlv
bnNXaXRoUwogICAgICAgICAvLyBpbmRlcGVuZGVudCBvZiB0aGUgYm9keS4gIEdvIHRocm91Z2gg
dGhlIERPTSB0byBnZXQgdG8gdGhlIHJvb3QgZWxlbWVudCdzIHJlbmRlciBvYmplY3QsCiAgICAg
ICAgIC8vIHNpbmNlIHRoZSByb290IGNvdWxkIGJlIGlubGluZSBhbmQgd3JhcHBlZCBpbiBhbiBh
bm9ueW1vdXMgYmxvY2suCiAgICAgICAgIGlmICghaXNCb2R5KCkgfHwgZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0JhY2tncm91bmQoKSkKLSAg
ICAgICAgICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIHN0eWxlKCktPmJhY2tncm91bmRD
b2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIHR4LCB0eSwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgICAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBzdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5i
YWNrZ3JvdW5kTGF5ZXJzKCksIHR4LCB0eSwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGlmIChz
dHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICB0aGVtZSgpLT5wYWludERlY29y
YXRpb25zKHRoaXMsIHBhaW50SW5mbywgSW50UmVjdCh0eCwgdHksIHdpZHRoLCBoZWlnaHQpKTsK
ICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyMSw3ICsxMzIxLDcgQEAgdm9pZCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICByZWN0LnNldEhlaWdodChyZWN0
LmhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBoYXNPcGFxdWVCYWNrZ3JvdW5kID0gcy0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgp
ICYmIHMtPmJhY2tncm91bmRDb2xvcigpLmFscGhhKCkgPT0gMjU1OworICAgIGJvb2wgaGFzT3Bh
cXVlQmFja2dyb3VuZCA9IHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSA9PSAyNTU7CiAgICAgZm9yIChjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3cgPSBzLT5ib3hTaGFkb3coKTsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ct
Pm5leHQoKSkgewogICAgICAgICBpZiAoc2hhZG93LT5zdHlsZSgpICE9IHNoYWRvd1N0eWxlKQog
ICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQu
Y3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVyRmllbGRz
ZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKIAogICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mby5j
b250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIE5vcm1hbCk7CiAKLSAgICBwYWludEZpbGxM
YXllcnMocGFpbnRJbmZvLCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+YmFj
a2dyb3VuZExheWVycygpLCB0eCwgdHksIHcsIGgpOworICAgIHBhaW50RmlsbExheWVycyhwYWlu
dEluZm8sIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKICAg
ICBwYWludEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgp
LCBJbnNldCk7CiAKICAgICBpZiAoIXN0eWxlKCktPmhhc0JvcmRlcigpKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICArIGJ1dHRvblJlbmRlcmVyLT5tYXJnaW5Ub3Ao
KSArIGJ1dHRvblJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGJ1dHRvblJlbmRlcmVyLT5wYWRkaW5n
VG9wKCkKICAgICAgICAgICAgICsgYnV0dG9uUmVuZGVyZXItPmJhc2VsaW5lUG9zaXRpb24odHJ1
ZSwgZmFsc2UpOwogCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5
bGUoKS0+Y29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBEcmF3IHRoZSBmaWxlbmFtZQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA1OTg3NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihj
CiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWlu
dEluZm8uY29udGV4dDsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSgpLT5jb2xv
clNwYWNlKCk7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+
aGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmls
bENvbG9yKCksIGNvbG9yU3BhY2UpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3Qs
IGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCksIGNv
bG9yU3BhY2UpOwogICAgIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlm
IHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAg
ICAgLy8gYml0IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgLy8g
RmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29u
dGV4dDsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSgpLT5jb2xvclNwYWNlKCk7
Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+aGFzQm9yZGVy
Q29sb3IoKSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmlsbENvbG9yKCks
IGNvbG9yU3BhY2UpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0
KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCksIGNvbG9yU3BhY2Up
OwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91
Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2Yg
dGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0Lmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS0+ZGlz
cGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhtX2FsdFRleHQpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT5jb2xvcigpLCBzdHlsZSgpLT5jb2xvclNw
YWNlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7CiAgICAgICAgICAgICAgICAgaW50IGF4ID0gdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBh
ZDsKICAgICAgICAgICAgICAgICBpbnQgYXkgPSB0eSArIHRvcEJvcmRlciArIHRvcFBhZDsKICAg
ICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA1OTg3NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2NiwyMSArNTY2LDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJl
ckhhc0JhY2sKICAgICByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQmFja2dyb3VuZCgp
OwogfQogCi1jb25zdCBDb2xvciYgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tncm91
bmRDb2xvcigpIGNvbnN0Citjb25zdCBDb2xvciBSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRlcmVy
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogc2hhcmUgbW9yZSBjb2Rl
IGhlcmUKICAgICBpZiAocmVuZGVyZXIoKS0+bm9kZSgpICYmIHJlbmRlcmVyKCktPm5vZGUoKS0+
aXNEb2N1bWVudE5vZGUoKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGh0bWxPYmplY3QgPSBy
ZW5kZXJlcigpLT5maXJzdENoaWxkKCk7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGh0
bWxPYmplY3QtPnN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZS0+aGFzQmFja2dyb3VuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgICAg
IHJldHVybiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKIAogICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSBodG1sT2JqZWN0
LT5maXJzdENoaWxkKCk7CiAgICAgICAgIHN0eWxlID0gYm9keU9iamVjdC0+c3R5bGUoKTsKLSAg
ICAgICAgcmV0dXJuIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwog
ICAgIH0KIAotICAgIHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIH0KIAogLy8gQSAic2ltcGxlIGNvbnRhaW5l
ciBsYXllciIgaXMgYSBSZW5kZXJMYXllciB3aGljaCBoYXMgbm8gdmlzaWJsZSBjb250ZW50IHRv
IHJlbmRlci4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCShyZXZp
c2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZUltYWdlQ29udGVudHMoKTsKIAogICAgIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kKCkgY29u
c3Q7Ci0gICAgY29uc3QgQ29sb3ImIHJlbmRlcmVyQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgY29uc3QgQ29sb3IgcmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAogICAgIGJv
b2wgaGFzTm9uQ29tcG9zaXRpbmdDb250ZW50KCkgY29uc3Q7CiAgICAgCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBpZiAoIWl0ZW1T
dHlsZSkKICAgICAgICAgaXRlbVN0eWxlID0gc3R5bGUoKTsKICAgICAKLSAgICBDb2xvciB0ZXh0
Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+
Y29sb3IoKSA6IHN0eWxlKCktPmNvbG9yKCk7CisgICAgQ29sb3IgdGV4dENvbG9yID0gZWxlbWVu
dC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSA6IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVt
ZW50LT5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUo
KSA9PSBub2RlKCkpCiAgICAgICAgICAgICB0ZXh0Q29sb3IgPSB0aGVtZSgpLT5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBiYWNrQ29sb3IgPSB0aGVtZSgpLT5pbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFja0NvbG9yID0gZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpIDog
c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGJhY2tDb2xvciA9IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIDogc3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgIC8vIERyYXcgdGhl
IGJhY2tncm91bmQgZm9yIHRoaXMgbGlzdCBib3ggaXRlbQogICAgIGlmICghZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKSB8fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gSElE
REVOKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIAogICAgICAgICBjb250ZXh0LT5maWxsUmVjdChzZWxSZWN0LCBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICB9CiAK
LSAgICBjb25zdCBDb2xvciBjb2xvcihzdHlsZSgpLT5jb2xvcigpKTsKKyAgICBjb25zdCBDb2xv
ciBjb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikp
OwogICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICBjb250
ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3IEBAIFBvcHVwTWVu
dVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUKICAgICBFbGVtZW50KiBlbGVtZW50ID0g
bGlzdEl0ZW1zW2xpc3RJbmRleF07CiAgICAgCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxl
bWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5j
b21wdXRlZFN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUt
PmNvbG9yKCksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdEluZGV4KSwgc3R5bGUtPmZvbnQoKSwg
c3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZS0+dGV4dEluZGVudCgpLCBzdHls
ZS0+ZGlyZWN0aW9uKCkpIDogbWVudVN0eWxlKCk7CisgICAgcmV0dXJuIHN0eWxlID8gUG9wdXBN
ZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
aXRlbUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgpLCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlLT50ZXh0SW5kZW50KCksIHN0eWxlLT5kaXJlY3Rp
b24oKSkgOiBtZW51U3R5bGUoKTsKIH0KIAogQ29sb3IgUmVuZGVyTWVudUxpc3Q6Oml0ZW1CYWNr
Z3JvdW5kQ29sb3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdApAQCAtNDE3LDE4ICs0MTcsMTgg
QEAgQ29sb3IgUmVuZGVyTWVudUxpc3Q6Oml0ZW1CYWNrZ3JvdW5kQ29sbwogICAgIFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSgpKSk7CiAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5s
aXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQotICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5iYWNrZ3JvdW5k
Q29sb3IoKTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gZWxlbWVudC0+cmVuZGVyU3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAg
ICAvLyBJZiB0aGUgaXRlbSBoYXMgYW4gb3BhcXVlIGJhY2tncm91bmQgY29sb3IsIHJldHVybiB0
aGF0LgogICAgIGlmICghYmFja2dyb3VuZENvbG9yLmhhc0FscGhhKCkpCiAgICAgICAgIHJldHVy
biBiYWNrZ3JvdW5kQ29sb3I7CiAKICAgICAvLyBPdGhlcndpc2UsIHRoZSBpdGVtJ3MgYmFja2dy
b3VuZCBpcyBvdmVybGF5ZWQgb24gdG9wIG9mIHRoZSBtZW51IGJhY2tncm91bmQuCi0gICAgYmFj
a2dyb3VuZENvbG9yID0gc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkuYmxlbmQoYmFja2dyb3Vu
ZENvbG9yKTsKKyAgICBiYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmJsZW5kKGJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IuaGFzQWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJh
Y2tncm91bmRDb2xvcjsKIApAQCAtNDM5LDcgKzQzOSw3IEBAIENvbG9yIFJlbmRlck1lbnVMaXN0
OjppdGVtQmFja2dyb3VuZENvbG8KIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjptZW51
U3R5bGUoKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzID0gbV9pbm5lckJsb2NrID8gbV9p
bm5lckJsb2NrLT5zdHlsZSgpIDogc3R5bGUoKTsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUo
cy0+Y29sb3IoKSwgcy0+YmFja2dyb3VuZENvbG9yKCksIHMtPmZvbnQoKSwgcy0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUsIHMtPnRleHRJbmRlbnQoKSwgcy0+ZGlyZWN0aW9uKCkpOworICAgIHJl
dHVybiBQb3B1cE1lbnVTdHlsZShzLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvciksIHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciksIHMtPmZvbnQoKSwgcy0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHMtPnRleHRJbmRlbnQo
KSwgcy0+ZGlyZWN0aW9uKCkpOwogfQogCiBIb3N0V2luZG93KiBSZW5kZXJNZW51TGlzdDo6aG9z
dFdpbmRvdygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4Miw5ICsxMzgyLDkgQEAgQ29sb3IgUmVuZGVyT2JqZWN0OjpzZWxlY3Rp
b25CYWNrZ3JvdW5kQwogewogICAgIENvbG9yIGNvbG9yOwogICAgIGlmIChzdHlsZSgpLT51c2Vy
U2VsZWN0KCkgIT0gU0VMRUNUX05PTkUpIHsKLSAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cHNldWRvU3R5bGUgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTik7Ci0gICAgICAg
IGlmIChwc2V1ZG9TdHlsZSAmJiBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCku
YmxlbmRXaXRoV2hpdGUoKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHls
ZSA9IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKTsKKyAgICAgICAgaWYgKHBzZXVk
b1N0eWxlICYmIHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYmxl
bmRXaXRoV2hpdGUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29sb3IgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkgPwogICAgICAg
ICAgICAgICAgICAgICB0aGVtZSgpLT5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSA6
CkBAIC0xNDAxLDkgKzE0MDEsOSBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVn
cm91bmRDCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIGlmIChSZWZQdHI8UmVuZGVyU3R5
bGU+IHBzZXVkb1N0eWxlID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7Ci0g
ICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnRleHRGaWxsQ29sb3IoKTsKKyAgICAgICAgY29s
b3IgPSBwc2V1ZG9TdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvcik7CiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGNvbG9yID0gcHNl
dWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICB9
IGVsc2UKICAgICAgICAgY29sb3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+
aXNGb2N1c2VkQW5kQWN0aXZlKCkgPwogICAgICAgICAgICAgICAgIHRoZW1lKCktPmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIDoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXIKICAgICBvYmplY3QtPmRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291cmNlKGlkLCBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRqdXN0Q29sb3JGb3JQc2V1ZG9SdWxlcyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYgY29sb3IpCitpbmxpbmUgdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZTo6YWRqdXN0Q29sb3JGb3JQc2V1ZG9SdWxlcyhjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKHN0eWxlLT5p
bnNpZGVMaW5rKCkgIT0gSW5zaWRlVmlzaXRlZExpbmspCiAgICAgICAgIHJldHVybjsKQEAgLTk1
LDcgKzk1LDcgQEAgUmVuZGVyU1ZHUmVzb3VyY2UqIFJlbmRlclNWR1Jlc291cmNlOjpmaQogCiAg
ICAgICAgIENvbG9yIGZpbGxDb2xvcjsKICAgICAgICAgaWYgKGZpbGxQYWludC0+cGFpbnRUeXBl
KCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKQotICAgICAgICAgICAg
ZmlsbENvbG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBmaWxsQ29sb3IgPSBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBmaWxsQ29sb3IgPSBmaWxsUGFpbnQtPmNvbG9yKCk7CiAKQEAgLTE0OSw3
ICsxNDksNyBAQCBSZW5kZXJTVkdSZXNvdXJjZSogUmVuZGVyU1ZHUmVzb3VyY2U6OnN0CiAKICAg
ICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CiAgICAgICAgIGlmIChzdHJva2VQYWludC0+cGFpbnRU
eXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKQotICAgICAgICAg
ICAgc3Ryb2tlQ29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgIHN0cm9rZUNvbG9y
ID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdHJva2VQYWludC0+Y29sb3IoKTsK
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDcgQEAgZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewogICAgIEFw
cGx5VG9UZXh0TW9kZSAgICA9IDEgPDwgMyAvLyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggQXBw
bHlUb3tGaWxsfFN0cm9rZX1Nb2RlCiB9OwogCitjbGFzcyBDb2xvcjsKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTc4LDYg
Kzc5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSopOwog
ICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIHNoYXJlZFNvbGlkUGFpbnRp
bmdSZXNvdXJjZSgpOwogCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGFkanVzdENvbG9yRm9y
UHNldWRvUnVsZXMoY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIHVzZUZpbGxQYWludCwgQ29sb3Im
KTsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2b2lkIG1hcmtGb3JMYXlvdXRBbmRSZXNvdXJjZUlu
dmFsaWRhdGlvbihSZW5kZXJPYmplY3QqKTsKIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGEKIAogICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mby5j
b250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIE5vcm1hbCk7CiAgICAgCi0gICAgcGFpbnRG
aWxsTGF5ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCkt
PmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKKyAgICBwYWludEZpbGxMYXllcnMo
cGFpbnRJbmZvLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIHR4LCB0eSwgdywgaCk7
CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywgaCwgc3R5
bGUoKSwgSW5zZXQpOwogCiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpICYmICFjb2xsYXBz
ZUJvcmRlcnMoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gNTk4NzYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAjaWZuZGVmIFJlbmRlclRhYmxlX2gKICNkZWZpbmUgUmVuZGVyVGFibGVf
aAogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICBpbnQgYm9yZGVyVG9wKCkgY29uc3Q7CiAgICAgaW50IGJvcmRlckJvdHRvbSgpIGNvbnN0
OwogICAgIAotICAgIGNvbnN0IENvbG9yJiBiZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+YmFja2dyb3VuZENvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciBiZ0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKTsgfQogCiAgICAgaW50IG91dGVyQm9yZGVyVG9wKCkgY29uc3Q7CiAgICAgaW50
IG91dGVyQm9yZGVyQm90dG9tKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ5LDcgKzg0OSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmUKICAgICBpbnQgdyA9IHdpZHRoKCk7CiAg
ICAgaW50IGggPSBoZWlnaHQoKTsKIAotICAgIENvbG9yIGMgPSBiYWNrZ3JvdW5kT2JqZWN0LT5z
dHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBjID0gYmFja2dyb3VuZE9iamVj
dC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICBjb25zdCBGaWxsTGF5ZXIqIGJnTGF5ZXIgPSBiYWNrZ3JvdW5kT2JqZWN0LT5z
dHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAKICAgICBpZiAoYmdMYXllci0+aGFzSW1hZ2Uo
KSB8fCBjLmlzVmFsaWQoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTCiAKICAgICBib29sIGRpc2FibGVkID0gdXBk
YXRlVXNlck1vZGlmeVByb3BlcnR5KG5vZGUoKSwgdGV4dEJsb2NrU3R5bGUpOwogICAgIGlmIChk
aXNhYmxlZCkKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldENvbG9yKGRpc2FibGVkVGV4dENv
bG9yKHRleHRCbG9ja1N0eWxlLT5jb2xvcigpLCBzdGFydFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KSkpOworICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29sb3IoZGlzYWJsZWRUZXh0Q29sb3Io
dGV4dEJsb2NrU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
c3RhcnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOZWVk
ZWQoVGV4dENvbnRyb2xJbm5lckVsZW1lbnQqIGlubmVyQmxvY2spCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9u
IDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg4LDcgKzc4OCw3IEBAIFBvcHVwTWVudVN0eWxlIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGkKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBQb3B1cE1lbnVT
dHlsZShzdHlsZSgpLT5jb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUo
KS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGUoKS0+dGV4
dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIFBvcHVwTWVudVN0
eWxlKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwg
c3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGUo
KS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSk7CiB9CiAKIGludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIGJv
b2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCAKICAgICAgICAgICAgIC8vIFRl
c3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIG1hdGNo
LgogICAgICAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyIHx8CiAgICAg
ICAgICAgICAgICAgICAgICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpICE9IGJhY2tncm91bmQg
fHwKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpICE9IGJhY2tn
cm91bmRDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5NCw3ICs5
OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgCiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+Y29sb3IoKSwgby0+c3R5bGUoKS0+Y29sb3JTcGFjZSgp
KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgby0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwog
CiAgICAgRmxvYXRQb2ludCBhcnJvdzFbM107CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIFN0cmlu
ZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29uc3QKICAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZVJlbmRlck9iamVjdChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhh
dmlvcikKK3ZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZp
b3IpCiB7CiAgICAgdHMgPDwgby5yZW5kZXJOYW1lKCk7CiAKQEAgLTQyOSw3ICs0MjksNyBAQCB2
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPCiAKICAgICB3cml0ZUluZGVu
dCh0cywgaW5kZW50KTsKIAotICAgIHdyaXRlUmVuZGVyT2JqZWN0KHRzLCBvLCBiZWhhdmlvcik7
CisgICAgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QodHMsIG8sIGJlaGF2aW9y
KTsKICAgICB0cyA8PCAiXG4iOwogCiAgICAgaWYgKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSB7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiA1OTg3NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMTQgQEAgU3RyaW5nIGV4dGVybmFsUmVwcmVzZW50YXRpb24oRnJhbWUqLCBS
ZQogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVu
dCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwp
Owogdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAKK2NsYXNzIFJl
bmRlclRyZWVBc1RleHQgeworLy8gRklYTUU6IFRoaXMgaXMgYSBjaGVlc3kgaGFjayB0byBhbGxv
dyBlYXN5IGFjY2VzcyB0byBSZW5kZXJTdHlsZSBjb2xvcnMuICBJdCB3b24ndCBiZSBuZWVkZWQg
aWYgd2UgY29udmVydAorLy8gaXQgdG8gdXNlIHZpc2l0ZWREZXBlbmRlbnRDb2xvciBpbnN0ZWFk
LiAoVGhpcyBqdXN0IGludm9sdmVzIHJlYmFzZWxpbmluZyBtYW55IHJlc3VsdHMgdGhvdWdoLCBz
byBmb3Igbm93IGl0J3MKKy8vIG5vdCBiZWluZyBkb25lKS4KK3B1YmxpYzoKK3N0YXRpYyB2b2lk
IHdyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8s
IFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKTsKK307CisKIC8vIEhlbHBlciBmdW5jdGlv
biBzaGFyZWQgd2l0aCBTVkdSZW5kZXJUcmVlQXNUZXh0CiBTdHJpbmcgcXVvdGVBbmRFc2NhcGVO
b25QcmludGFibGVzKGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oaW4KICAgICBpZiAoc3RhcnRQb3Mg
Pj0gZW5kUG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHls
ZS0+Y29sb3IoKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXIoKS0+
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgfHwg
IWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsOCAr
NDMzLDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdAogICAgIFZl
Y3RvcjxTVkdUZXh0Q2h1bms+JiBjaHVua3MgPSBjb25zdF9jYXN0PFZlY3RvcjxTVkdUZXh0Q2h1
bms+JiA+KGJveC0+c3ZnVGV4dENodW5rcygpKTsKICAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQu
eCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIgPDwgYm94LT53aWR0aCgpIDw8ICJ4
IiA8PCBib3gtPmhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8PCBjaHVua3Muc2l6ZSgpIDw8ICIg
Y2h1bmsocykiOwogCi0gICAgaWYgKHRleHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0
eWxlKCktPmNvbG9yKCkgIT0gdGV4dC5zdHlsZSgpLT5jb2xvcigpKSkKLSAgICAgICAgd3JpdGVO
YW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxlKCktPmNvbG9yKCkubmFtZSgpKTsK
KyAgICBpZiAodGV4dC5wYXJlbnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IHRleHQuc3R5bGUoKS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSkKKyAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKS5uYW1lKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFp
bnNJbmxpbmVUZXh0Qm94KFNWR1RleHRDaHVuayYgY2h1bmssIFNWR0lubGluZVRleHRCb3gqIGJv
eCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9u
IDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OTUsNDIgKzk5NSw0MiBAQCBzdGF0aWMgRUJvcmRlclN0eWxlIGJvcmRl
clN0eWxlRm9yQ29sb3JQCiAgICAgcmV0dXJuIGJvcmRlclN0eWxlOwogfQogCi1zdGF0aWMgQ29s
b3IgY29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGludCBj
b2xvclByb3BlcnR5LCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUpCitjb25zdCBDb2xvciBSZW5k
ZXJTdHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjayhpbnQgY29sb3JQcm9wZXJ0eSwgRUJvcmRl
clN0eWxlIGJvcmRlclN0eWxlKSBjb25zdAogewogICAgIENvbG9yIHJlc3VsdDsKICAgICBzd2l0
Y2ggKGNvbG9yUHJvcGVydHkpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
OgotICAgICAgICByZXR1cm4gc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOyAvLyBCYWNrZ3JvdW5k
IGNvbG9yIGRvZXNuJ3QgZmFsbCBiYWNrLgorICAgICAgICByZXR1cm4gYmFja2dyb3VuZENvbG9y
KCk7IC8vIEJhY2tncm91bmQgY29sb3IgZG9lc24ndCBmYWxsIGJhY2suCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmJvcmRlckxl
ZnRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUo
KTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyTGVmdENvbG9yKCk7CisgICAgICAgIGJvcmRlclN0
eWxlID0gYm9yZGVyTGVmdFN0eWxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHlsZS0+Ym9yZGVyUmln
aHRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0eWxlLT5ib3JkZXJSaWdodFN0eWxl
KCk7CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclJpZ2h0Q29sb3IoKTsKKyAgICAgICAgYm9yZGVy
U3R5bGUgPSBib3JkZXJSaWdodFN0eWxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmJvcmRlclRv
cENvbG9yKCk7Ci0gICAgICAgIGJvcmRlclN0eWxlID0gc3R5bGUtPmJvcmRlclRvcFN0eWxlKCk7
CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclRvcENvbG9yKCk7CisgICAgICAgIGJvcmRlclN0eWxl
ID0gYm9yZGVyVG9wU3R5bGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHlsZS0+Ym9yZGVyQm90dG9t
Q29sb3IoKTsKLSAgICAgICAgYm9yZGVyU3R5bGUgPSBzdHlsZS0+Ym9yZGVyQm90dG9tU3R5bGUo
KTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyQm90dG9tQ29sb3IoKTsKKyAgICAgICAgYm9yZGVy
U3R5bGUgPSBib3JkZXJCb3R0b21TdHlsZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENT
U1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IHN0eWxlLT5jb2xvcigpOworICAgICAg
ICByZXN1bHQgPSBjb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5
T3V0bGluZUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHlsZS0+b3V0bGluZUNvbG9yKCk7Cisg
ICAgICAgIHJlc3VsdCA9IG91dGxpbmVDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHls
ZS0+Y29sdW1uUnVsZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IGNvbHVtblJ1bGVDb2xvcigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xv
cjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPnRleHRGaWxsQ29sb3IoKTsKKyAgICAgICAgcmVz
dWx0ID0gdGV4dEZpbGxDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHlsZS0+dGV4dFN0
cm9rZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHRleHRTdHJva2VDb2xvcigpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTEwNDMsMjMgKzEwNDMsMjMgQEAgc3RhdGljIENvbG9yIGNvbG9ySW5jbHVkaW5nRmFsbGJhY2so
Y29ucwogICAgICAgICAgICAgJiYgKGJvcmRlclN0eWxlID09IElOU0VUIHx8IGJvcmRlclN0eWxl
ID09IE9VVFNFVCB8fCBib3JkZXJTdHlsZSA9PSBSSURHRSB8fCBib3JkZXJTdHlsZSA9PSBHUk9P
VkUpKQogICAgICAgICAgICAgcmVzdWx0LnNldFJHQigyMzgsIDIzOCwgMjM4KTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBjb2xvcigpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbG9y
IFJlbmRlclN0eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IoaW50IGNvbG9yUHJvcGVydHkpIGNv
bnN0Citjb25zdCBDb2xvciBSZW5kZXJTdHlsZTo6dmlzaXRlZERlcGVuZGVudENvbG9yKGludCBj
b2xvclByb3BlcnR5KSBjb25zdAogewogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSA9IGJv
cmRlclN0eWxlRm9yQ29sb3JQcm9wZXJ0eSh0aGlzLCBjb2xvclByb3BlcnR5KTsKLSAgICBDb2xv
ciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVkaW5nRmFsbGJhY2sodGhpcywgY29sb3JQcm9w
ZXJ0eSwgYm9yZGVyU3R5bGUpOworICAgIENvbG9yIHVudmlzaXRlZENvbG9yID0gY29sb3JJbmNs
dWRpbmdGYWxsYmFjayhjb2xvclByb3BlcnR5LCBib3JkZXJTdHlsZSk7CiAgICAgaWYgKGluc2lk
ZUxpbmsoKSAhPSBJbnNpZGVWaXNpdGVkTGluaykKICAgICAgICAgcmV0dXJuIHVudmlzaXRlZENv
bG9yOwogCiAgICAgUmVuZGVyU3R5bGUqIHZpc2l0ZWRTdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0
eWxlKFZJU0lURURfTElOSyk7CiAgICAgaWYgKCF2aXNpdGVkU3R5bGUpCiAgICAgICAgIHJldHVy
biB1bnZpc2l0ZWRDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkQ29sb3IgPSBjb2xvckluY2x1ZGlu
Z0ZhbGxiYWNrKHZpc2l0ZWRTdHlsZSwgY29sb3JQcm9wZXJ0eSwgYm9yZGVyU3R5bGUpOworICAg
IENvbG9yIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRTdHlsZS0+Y29sb3JJbmNsdWRpbmdGYWxsYmFj
ayhjb2xvclByb3BlcnR5LCBib3JkZXJTdHlsZSk7CiAKICAgICAvLyBUYWtlIHRoZSBhbHBoYSBm
cm9tIHRoZSB1bnZpc2l0ZWQgY29sb3IsIGJ1dCBnZXQgdGhlIFJHQiB2YWx1ZXMgZnJvbSB0aGUg
dmlzaXRlZCBjb2xvci4KICAgICByZXR1cm4gQ29sb3IodmlzaXRlZENvbG9yLnJlZCgpLCB2aXNp
dGVkQ29sb3IuZ3JlZW4oKSwgdmlzaXRlZENvbG9yLmJsdWUoKSwgdW52aXNpdGVkQ29sb3IuYWxw
aGEoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9u
IDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1
ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0
aW9uRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKQEAgLTExMyw3ICsxMTQsMTMgQEAgY2xhc3MgU3R5bGVJbWFnZTsKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFBzZXVkb1N0eWxlQ2FjaGU7CiAKIGNs
YXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewotICAgIGZy
aWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOworICAgIGZyaWVuZCBjbGFzcyBBbmltYXRpb25C
YXNlOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFu
aW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgorICAgIGZyaWVuZCBjbGFzcyBBcHBseVN0
eWxlQ29tbWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGluZm8u
CisgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7IC8vIFNldHMgbWVtYmVycyBkaXJl
Y3RseS4KKyAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOyAvLyBJ
Z25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBiZSBhYmxlIHRvIHNlZSB1bnZpc2l0
ZWQgaW5mby4KKyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29s
b3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNhbid0IGFsbG93IHRoZW0gdG8gYW5p
bWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCisgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNW
R1Jlc291cmNlOyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIgdGhlIHZpc2l0ZWQgc3RhdGUgYnkg
aGFuZC4gU2hvdWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBhbmQgbW92ZSBpdCBpbnRvIFJlbmRl
clN0eWxlIHBlcmhhcHMuCisgICAgZnJpZW5kIGNsYXNzIFJlbmRlclRyZWVBc1RleHQ7IC8vIEZJ
WE1FOiBPbmx5IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUgY2FuIGtlZXAgbHlpbmcgYW5kIGR1
bXAgdGhlIHdyb25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3b3VsZCBhbGxvdyB0aGlzIHRvIGJl
IHlhbmtlZC4KIHByb3RlY3RlZDoKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYml0ZmllbGQgaXMg
MzItYml0cyBsb25nLCB3aGljaCBvcHRpbWl6ZXMgcGFkZGluZyB3aXRoIHRoZQpAQCAtMzQzLDcg
KzM1MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQmFja2dyb3VuZCgpIGNvbnN0CiAgICAg
ewotICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpICYmIGJhY2tncm91bmRD
b2xvcigpLmFscGhhKCkgPiAwKQorICAgICAgICBDb2xvciBjb2xvciA9IHZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgICAgIGlmIChjb2xvci5p
c1ZhbGlkKCkgJiYgY29sb3IuYWxwaGEoKSA+IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIG1fYmFja2dyb3VuZC0+YmFja2dyb3VuZCgpLmhhc0ltYWdlKCk7CiAg
ICAgfQpAQCAtNDAxLDE5ICs0MDksMTUgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgc2hvcnQg
Ym9yZGVyTGVmdFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3JkZXJM
ZWZ0V2lkdGgoKTsgfQogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJMZWZ0U3R5bGUoKSBjb25zdCB7
IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQoKS5zdHlsZSgpOyB9Ci0gICAgY29uc3QgQ29s
b3ImIGJvcmRlckxlZnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIubGVm
dCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkgY29uc3Qg
eyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAg
dW5zaWduZWQgc2hvcnQgYm9yZGVyUmlnaHRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5k
LT5ib3JkZXIuYm9yZGVyUmlnaHRXaWR0aCgpOyB9CiAgICAgRUJvcmRlclN0eWxlIGJvcmRlclJp
Z2h0U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnJpZ2h0KCkuc3R5bGUo
KTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlclJpZ2h0
SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmlnaHQoKS5p
c1RyYW5zcGFyZW50KCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBib3JkZXJUb3BXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyVG9wV2lkdGgoKTsgfQogICAgIEVC
b3JkZXJTdHlsZSBib3JkZXJUb3BTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3Jk
ZXIudG9wKCkuc3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJUb3BDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wKCkuY29sb3IoKTsgfQogICAgIGJvb2wg
Ym9yZGVyVG9wSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIu
dG9wKCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyQm90dG9t
V2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlckJvdHRvbVdpZHRo
KCk7IH0KICAgICBFQm9yZGVyU3R5bGUgYm9yZGVyQm90dG9tU3R5bGUoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLnN0eWxlKCk7IH0KLSAgICBjb25zdCBDb2xvciYg
Ym9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRv
bSgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckJvdHRvbUlzVHJhbnNwYXJlbnQoKSBjb25z
dCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmlzVHJhbnNwYXJlbnQoKTsgfQog
CiAgICAgdW5zaWduZWQgc2hvcnQgb3V0bGluZVNpemUoKSBjb25zdCB7IHJldHVybiBtYXgoMCwg
b3V0bGluZVdpZHRoKCkgKyBvdXRsaW5lT2Zmc2V0KCkpOyB9CkBAIC00MjYsOCArNDMwLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzT3V0bGluZSgpIGNvbnN0IHsgcmV0dXJuIG91dGxpbmVXaWR0
aCgpID4gMCAmJiBvdXRsaW5lU3R5bGUoKSA+IEJISURERU47IH0KICAgICBFQm9yZGVyU3R5bGUg
b3V0bGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuc3R5
bGUoKTsgfQogICAgIGJvb2wgb3V0bGluZVN0eWxlSXNBdXRvKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kLT5vdXRsaW5lKCkuaXNBdXRvKCk7IH0KLSAgICBjb25zdCBDb2xvciYgb3V0bGlu
ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuY29sb3IoKTsg
fQotCisgICAgCiAgICAgRU92ZXJmbG93IG92ZXJmbG93WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEVPdmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1gpOyB9CiAgICAg
RU92ZXJmbG93IG92ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVPdmVyZmxv
dz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1kpOyB9CiAKQEAgLTQ1MSw3ICs0NTQsNiBA
QCBwdWJsaWM6CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBj
b25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBp
bnQgZm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQucGl4ZWxTaXplKCk7
IH0KIAotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+
Y29sb3I7IH0KICAgICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhl
cml0ZWREYXRhLT5pbmRlbnQ7IH0KICAgICBFVGV4dEFsaWduIHRleHRBbGlnbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0QWxpZ24+KGluaGVyaXRlZF9mbGFncy5fdGV4dF9hbGln
bik7IH0KICAgICBFVGV4dFRyYW5zZm9ybSB0ZXh0VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RVRleHRUcmFuc2Zvcm0+KGluaGVyaXRlZF9mbGFncy5fdGV4dF90cmFuc2Zv
cm0pOyB9CkBAIC01MzUsNyArNTM3LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gd29yZEJy
ZWFrKCkgPT0gQnJlYWtXb3JkQnJlYWsgfHwgd29yZFdyYXAoKSA9PSBCcmVha1dvcmRXcmFwOwog
ICAgIH0KIAotICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmQtPmNvbG9yKCk7IH0KICAgICBTdHlsZUltYWdlKiBiYWNrZ3JvdW5kSW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5pbWFnZSgpOyB9
CiAgICAgRUZpbGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdFgoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxFRmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkucmVwZWF0WCgp
KTsgfQogICAgIEVGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRZKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RUZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZC0+YmFja2dyb3VuZCgpLnJlcGVh
dFkoKSk7IH0KQEAgLTYxNiw5ICs2MTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3Qg
U2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRh
LT50ZXh0U2hhZG93OyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRTdHJva2VDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KICAgICBmbG9h
dCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4
dFN0cm9rZVdpZHRoOyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7
IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQogICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yU3BhY2U+KHJh
cmVJbmhlcml0ZWREYXRhLT5jb2xvclNwYWNlKTsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eTsgfQogICAgIENvbnRyb2xQ
YXJ0IGFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250cm9sUGFydD4o
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYXBwZWFyYW5jZSk7IH0KQEAgLTY2NCw3ICs2NjMsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzcGVjaWZpZXNDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gIWhh
c0F1dG9Db2x1bW5Db3VudCgpIHx8ICFoYXNBdXRvQ29sdW1uV2lkdGgoKTsgfQogICAgIGZsb2F0
IGNvbHVtbkdhcCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRp
Q29sLT5tX2dhcDsgfQogICAgIGJvb2wgaGFzTm9ybWFsQ29sdW1uR2FwKCkgY29uc3QgeyByZXR1
cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fbm9ybWFsR2FwOyB9Ci0gICAg
Y29uc3QgQ29sb3ImIGNvbHVtblJ1bGVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX211bHRpQ29sLT5tX3J1bGUuY29sb3IoKTsgfQogICAgIEVCb3JkZXJTdHls
ZSBjb2x1bW5SdWxlU3R5bGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9tdWx0aUNvbC0+bV9ydWxlLnN0eWxlKCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBjb2x1bW5S
dWxlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNv
bC0+cnVsZVdpZHRoKCk7IH0KICAgICBib29sIGNvbHVtblJ1bGVJc1RyYW5zcGFyZW50KCkgY29u
c3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fcnVsZS5pc1Ry
YW5zcGFyZW50KCk7IH0KQEAgLTExMTIsNyArMTExMCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBjaGlsZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZEluZGV4OyB9CiAgICAgdm9pZCBz
ZXRDaGlsZEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY2hpbGRJbmRleCA9IGluZGV4OyB9CiAK
LSAgICBDb2xvciB2aXNpdGVkRGVwZW5kZW50Q29sb3IoaW50IGNvbG9yUHJvcGVydHkpIGNvbnN0
OworICAgIGNvbnN0IENvbG9yIHZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29sb3JQcm9wZXJ0
eSkgY29uc3Q7CiAKICAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgYWxsIHRoZSBwcm9wZXJ0aWVz
CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbEJvcmRlckNvbGxhcHNlKCkgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTEyMTIsNiArMTIxMCwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFZlY3Rv
cjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIGluaXRpYWxEYXNoYm9hcmRSZWdpb25zKCk7CiAgICAg
c3RhdGljIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIG5vbmVEYXNoYm9hcmRS
ZWdpb25zKCk7CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBDb2xvciBhY2Nlc3NvcnMgYXJl
IGFsbCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBjYWxsZXJzIHVzZSB2aXNpdGVkRGVwZW5kZW50Q29s
b3IgaW5zdGVhZCB0byBhY2Nlc3MgdGhlbS4KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyTGVmdENv
bG9yKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuY29sb3IoKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Vycm91
bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyVG9w
Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpLmNvbG9yKCk7IH0K
KyAgICBjb25zdCBDb2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJy
b3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5jb2xvcigpOyB9CisgICAg
Y29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5jb2xvcjsgfQor
ICAgIGNvbnN0IENvbG9yJiBjb2x1bW5SdWxlQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLmNvbG9yKCk7IH0KKyAgICBjb25zdCBD
b2xvciYgb3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5l
KCkuY29sb3IoKTsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KKyAgICBjb25zdCBDb2xv
ciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRl
eHRTdHJva2VDb2xvcjsgfQorICAgIAorICAgIGNvbnN0IENvbG9yIGNvbG9ySW5jbHVkaW5nRmFs
bGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkgY29uc3Q7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3IKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXQtPnJlbmRlcmVyKCkpCi0gICAg
ICAgIHZhbHVlID0gdGFyZ2V0UmVuZGVyZXItPnN0eWxlKCktPmNvbG9yKCkubmFtZSgpOworICAg
ICAgICB2YWx1ZSA9IHRhcmdldFJlbmRlcmVyLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpOwogfQogICAgIAogdm9pZCBTVkdBbmltYXRpb25F
bGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5OTE2KQor
KysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAxMC0wNS0yMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDIwCisKKyAgICAgICAgTWFrZSBzdXJlIGV2ZXJ5b25lIHdo
byBuZWVkcyB0byBpcyB1c2luZyB2aXNpdGVkRGVwZW5kZW50Q29sb3IgcmF0aGVyIHRoYW4gYWNj
ZXNzaW5nIHN0eWxlcworICAgICAgICBkaXJlY3RseS4KKworICAgICAgICAqIE1pc2MvV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoK1tOU0F0dHJpYnV0ZWRTdHJpbmcg
X3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9ib2R5QmFja2dyb3VuZENvbG9yXSk6CisK
IDIwMTAtMDUtMjAgIE1pa2UgVGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViS2l0L21hYy9N
aXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDEyICsxNTQsMTIgQEAgKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX3dlYl9hdHRyaWJ1dGVkUwog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAgICAg
TlNGb250ICpmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKTsK
ICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkgZm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHJlbW92ZU9i
amVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAo
c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIFthdHRycy5n
ZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpIGZvcktleTpO
U0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW2F0
dHJzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzNyw3ICsx
MDM3LDcgQEAgLSAoTlNDb2xvciAqKV9ib2R5QmFja2dyb3VuZENvbG9yCiAgICAgUmVuZGVyT2Jq
ZWN0KiBib2R5UmVuZGVyZXIgPSBib2R5LT5yZW5kZXJlcigpOwogICAgIGlmICghYm9keVJlbmRl
cmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIENvbG9yIGNvbG9yID0gYm9keVJlbmRlcmVy
LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBjb2xvciA9IGJvZHlSZW5k
ZXJlci0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICByZXR1cm4gbnNDb2xvcihjb2xvcik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpc3Rv
cnkvc2VsZi1pcy12aXNpdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3NlbGYtaXMtdmlzaXRlZC5odG1sCShyZXZpc2lvbiA1OTg3NikKKysrIExheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9zZWxmLWlzLXZpc2l0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNyArMTEsNyBAQCBmdW5jdGlvbiBjb21wYXJlU3R5bGVzKCkKICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIHZhciBmaXJzdFN0eWxlID0gd2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnb25lJykpOwogICAgICAgICB2YXIgc2Vjb25kU3R5bGUgPSB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJ
bmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKSk7Ci0gICAgICAgIGlmIChmaXJzdFN0
eWxlLmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yKSB7CisgICAgICAgIGlmIChmaXJzdFN0eWxl
LmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yIHx8IGZpcnN0U3R5bGUuYmFja2dyb3VuZENvbG9y
ID09IHNlY29uZFN0eWxlLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9ICdGQUlMJzsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTksMTUgKzE5LDE1IEBAIGZ1bmN0aW9uIGNvbXBhcmVT
dHlsZXMoKQogICAgIAogICAgIHZhciBmaXJzdFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uZScpLCAiIik7CiAgICAgdmFyIHNlY29uZFN0
eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R3
bycpLCAiIik7Ci0gICAgaWYgKGZpcnN0U3R5bGUuY29sb3IgIT0gc2Vjb25kU3R5bGUuY29sb3Ip
IHsKKyAgICBpZiAoZmlyc3RTdHlsZS5jb2xvciAhPSBzZWNvbmRTdHlsZS5jb2xvciB8fCBmaXJz
dFN0eWxlLmJhY2tncm91bmRDb2xvciAhPSBzZWNvbmRTdHlsZS5iYWNrZ3JvdW5kQ29sb3IpIHsK
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9ICdG
QUlMJzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIDwvc2NyaXB0PgogPHN0eWxlPgotOmxp
bmsgeyBjb2xvcjogZ3JlZW4gfQotOnZpc2l0ZWQgeyBjb2xvcjogb3JhbmdlIH0KKzpsaW5rIHsg
Y29sb3I6IGdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSB9Cis6dmlzaXRlZCB7IGNvbG9y
OiBvcmFuZ2U7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrIH0KIDwvc3R5bGU+CiA8L2hlYWQ+CiA8
Ym9keSBvbmxvYWQ9ImNvbXBhcmVTdHlsZXMoKSI+Cg==
</data>
<flag name="review"
          id="41138"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56680</attachid>
            <date>2010-05-21 00:57:45 -0700</date>
            <delta_ts>2010-05-21 01:22:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>80318</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ1IEBACisyMDEwLTA1LTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MjAsIDp2aXNpdGVkIG5vdCB3
b3JraW5nIHdpdGggYmFja2dyb3VuZC1jb2xvci4KKworICAgICAgICBNYWtlIHRoZSBSZW5kZXJT
dHlsZSBjb2xvciBhY2Nlc3NvcnMgcHJpdmF0ZS4gIFRoaXMgZm9yY2VzIGNhbGxlcnMgdG8gdXNl
IHZpc2l0ZWREZXBlbmRlbnRDb2xvcgorICAgICAgICBpbnN0ZWFkIChvciB0byBtYWtlIHRoZSBk
ZWNpc2lvbiB0byBiZWNvbWVzIGZyaWVuZHMgb2YgdGhlIFJlbmRlclN0eWxlIGNsYXNzIGluIG9y
ZGVyIHRvIGdldCBhY2Nlc3MKKyAgICAgICAgdG8gdGhlIHJlYWwgc3R5bGUgaW5mb3JtYXRpb24p
LgorCisgICAgICAgIE1vZGlmaWVkIGhpc3Rvcnkvc2VsZi1pcy12aXNpdGVkLmh0bWwgdG8gYWxz
byB0ZXN0IGJhY2tncm91bmQgY29sb3JzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNj
ZXNzaWJpbGl0eSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW06CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAg
ICAgICogY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRWRpdGluZ1N0eWxlVG9B
cHBseUF0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRDb2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzRGVsZXRhYmxlRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2FsY3VsYXRlU3R5bGVCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxl
U3BhbnNCZWZvcmVJbnNlcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpwYWlu
dENhcmV0KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVNYXJrdXApOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6ZW5zdXJlUHJvcGVydHlNYXAp
OgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKiBw
YWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3Jh
dGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tncm91bmRDb2xv
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lbnVMaXN0OjppdGVtQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lbnVMaXN0OjptZW51U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6YWRqdXN0Q29sb3JGb3JQc2V1ZG9S
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5n
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YmdDb2xvcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVudVN0eWxlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6Omlz
Q29udHJvbFN0eWxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclNW
R1RleHRCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dmlzaXRlZERlcGVuZGVudENvbG9yKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6aGFzQmFja2dyb3VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyTGVmdFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJSaWdodFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJUb3BTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyQm90dG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJp
dGVkRmxhZ3M6OnRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6aGFzTm9ybWFsQ29sdW1uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZs
YWdzOjpib3JkZXJMZWZ0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6
OmJvcmRlclJpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJv
cmRlclRvcENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJC
b3R0b21Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6YmFja2dyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpjb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Y29sdW1uUnVsZUNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvdXRsaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnRleHRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5o
ZXJpdGVkRmxhZ3M6OnRleHRTdHJva2VDb2xvcik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yQ3VycmVudENvbG9yKToK
KwogMjAxMC0wNS0xOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4Nyw2ICs5ODcsNyBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIwaXNTb2Z0d2FyZVJlbmRl
CiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzI4aXNFbmNsb3NlZEluQ29tcG9zaXRpbmdMYXllckV2
CiBfX1pOSzdXZWJDb3JlOVBhZ2VDYWNoZTEwZnJhbWVDb3VudEV2CiBfX1pOSzdXZWJDb3JlOVBh
Z2VDYWNoZTIxYXV0b3JlbGVhc2VkUGFnZUNvdW50RXYKK19fWk5LN1dlYkNvcmUxMVJlbmRlclN0
eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQogX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVu
dEUKIF9fWlRWTjdXZWJDb3JlMTJQbHVnaW5XaWRnZXRFCiBfX1pUVk43V2ViQ29yZTE3RmlsZUNo
b29zZXJDbGllbnRFCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmwKICAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlLT5zdHlsZSgpOwogICAgIGlmICghdGFibGVTdHlsZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIENvbG9yIHRhYmxlQkdDb2xvciA9IHRhYmxlU3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpOworICAgIENvbG9yIHRhYmxlQkdDb2xvciA9IHRhYmxlU3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgCiAg
ICAgLy8gY2hlY2sgZW5vdWdoIG9mIHRoZSBjZWxscyB0byBmaW5kIGlmIHRoZSB0YWJsZSBtYXRj
aGVzIG91ciBjcml0ZXJpYQogICAgIC8vIENyaXRlcmlhOiAKQEAgLTE2OSw3ICsxNjksNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIGlmIHRoZSBjZWxsIGhhcyBhIGRpZmZlcmVudCBjb2xvciBmcm9tIHRoZSB0
YWJsZSBhbmQgdGhlcmUgaXMgY2VsbCBzcGFjaW5nLAogICAgICAgICAgICAgLy8gdGhlbiBpdCBp
cyBwcm9iYWJseSBhIGRhdGEgdGFibGUgY2VsbCAoc3BhY2luZyBhbmQgY29sb3JzIHRha2UgdGhl
IHBsYWNlIG9mIGJvcmRlcnMpCi0gICAgICAgICAgICBDb2xvciBjZWxsQ29sb3IgPSByZW5kZXJT
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBDb2xvciBjZWxsQ29sb3IgPSBy
ZW5kZXJTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgICAgIGlmICh0YWJsZS0+aEJvcmRlclNwYWNpbmcoKSA+IDAgJiYgdGFi
bGUtPnZCb3JkZXJTcGFjaW5nKCkgPiAwCiAgICAgICAgICAgICAgICAgJiYgdGFibGVCR0NvbG9y
ICE9IGNlbGxDb2xvciAmJiBjZWxsQ29sb3IuYWxwaGEoKSAhPSAxKQogICAgICAgICAgICAgICAg
IGJhY2tncm91bmREaWZmZXJlbmNlQ2VsbENvdW50Kys7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJl
dmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDggKzMxNSw4IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCksIHJhbmdlKTsKIAogICAgIC8v
IHNldCBiYXNpYyBjb2xvcnMKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJp
bmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Io
c3R5bGUtPmNvbG9yKCkpLCByYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihh
dHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlCYWNrZ3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBu
c0NvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0
ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xv
clRleHRBdHRyaWJ1dGUsIG5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0
dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5z
Q29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikpLCByYW5nZSk7CiAKICAgICAvLyBzZXQgc3VwZXIvc3ViIHNjcmlwdGluZwogICAgIEVW
ZXJ0aWNhbEFsaWduIGFsaWdubWVudCA9IHN0eWxlLT52ZXJ0aWNhbEFsaWduKCk7CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDU5
ODc2KQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzc0LDggKzM3NCw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBnZXRQb3NpdGlvbk8KICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoQ1NTVmFsdWVBdXRvKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IENvbG9yJiBjb2xvcikKK1Bhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogeworICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9uLCBzbyB0aGF0IGNvbXB1dGVkIHN0
eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3Ioc3R5bGUtPmNvbG9yKCku
cmdiKCkpOwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IoY29sb3Iu
cmdiKCkpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDb2xvcjsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwor
Y2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBTaGFkb3dEYXRhOwogCiBlbnVtIEVVcGRh
dGVMYXlvdXQgeyBEb05vdFVwZGF0ZUxheW91dCA9IGZhbHNlLCBVcGRhdGVMYXlvdXQgPSB0cnVl
IH07CkBAIC02OSw3ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFk
b3coY29uc3QgU2hhZG93RGF0YSosIGludCkgY29uc3Q7Ci0KKyAgICBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBjb25z
dCBDb2xvciYpIGNvbnN0OworICAgIAogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUHNl
dWRvSWQgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyOwogICAgIGJvb2wgbV9hbGxvd1Zpc2l0ZWRT
dHlsZTsKSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCwxMyArOTAsMTMgQEAgc3RhdGljIGludCBhbmdsZVRvR2x5cGhPcmllbnRhdGlvbihm
bG9hdAogICAgIHJldHVybiAtMTsKIH0KIAotc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgQ29s
b3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENvbG9y
JiBmZ0NvbG9yKQogewogICAgIEFTU0VSVCh2YWx1ZS0+aXNTVkdDb2xvcigpKTsKICAgICBTVkdD
b2xvciogYyA9IHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpOwogICAgIENvbG9yIGNvbG9y
OwogICAgIGlmIChjLT5jb2xvclR5cGUoKSA9PSBTVkdDb2xvcjo6U1ZHX0NPTE9SVFlQRV9DVVJS
RU5UQ09MT1IpCi0gICAgICAgIGNvbG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIGNvbG9y
ID0gZmdDb2xvcjsKICAgICBlbHNlCiAgICAgICAgIGNvbG9yID0gYy0+Y29sb3IoKTsKICAgICBy
ZXR1cm4gY29sb3I7CkBAIC00NTQsMTMgKzQ1NCwxMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5U1ZHUHJvcGVydHkoCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdG9wQ29sb3I6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xv
ciwgU3RvcENvbG9yKTsKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JG
cm9tU1ZHQ29sb3JDU1NWYWx1ZSh2YWx1ZSwgbV9zdHlsZS5nZXQoKSkpOworICAgICAgICAgICAg
c3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHZhbHVlLCBt
X3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsK
LSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUodmFsdWUsIG1fc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUodmFsdWUsIG1fc3R5bGUt
PmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGbG9vZENvbG9yKFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmxvb2RDb2xvcigpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdmdzdHlsZS0+
c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHZhbHVlLCBtX3N0eWxlLmdl
dCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHZhbHVlLCBtX3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhv
cml6b250YWw6CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyBjb25zdCBpbnQgZWRpdGluZ1N0
eWxlUHJvcGVydGllc1sKIH07CiBzaXplX3QgbnVtRWRpdGluZ1N0eWxlUHJvcGVydGllcyA9IHNp
emVvZihlZGl0aW5nU3R5bGVQcm9wZXJ0aWVzKS9zaXplb2YoZWRpdGluZ1N0eWxlUHJvcGVydGll
c1swXSk7CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdT
dHlsZUF0UG9zaXRpb24oUG9zaXRpb24gcG9zLCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hv
dWxkSW5jbHVkZVR5cGluZ1N0eWxlKQorUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24g
cG9zLCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlKQog
ewogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVB
dFBvc2l0aW9uID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgcHJlcGFyZUVk
aXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXQKICAgICAvLyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6aGFuZGxlU3R5bGVTcGFucygpIHJlcXVpcmVzIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IHJl
bW92ZXMgdGhlIGVkaXRpbmcgc3R5bGUuCiAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiB3YXMgbW9k
aWZpZWQgaW4gdGhlIGZ1dHVyZSB0byBkZWxldGUgYWxsIHJlZHVuZGFudCBwcm9wZXJ0aWVzLCB0
aGVuIGFkZCBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUKICAgICAvLyB3aGljaCBvbmUgb2Yg
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiBvciBjb21wdXRlZFN0eWxlIGlzIGNhbGxlZC4KLSAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihwb3MpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3MpOwogICAg
IHN0eWxlLT5kaWZmKGVkaXRpbmdTdHlsZSk7CiAKICAgICAvLyBpZiBhbHBoYSB2YWx1ZSBpcyB6
ZXJvLCB3ZSBkb24ndCBhZGQgdGhlIGJhY2tncm91bmQgY29sb3IuCkBAIC00NzIsOCArNDcyLDgg
QEAgdm9pZCByZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlUwogewogICAgIEFTU0VS
VChub2RlKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKLSAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3Np
dGlvbihQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIDApKTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3Np
dGlvbihub2RlLCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBw
YXJlbnRTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBv
c2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihQb3NpdGlvbihub2RlLCAwKSk7CiAgICAgcGFyZW50U3R5bGUtPmRpZmYoc3R5bGUu
Z2V0KCkpOwogICAgIHN0eWxlLT5kaWZmKGVkaXRpbmdTdHlsZSk7CiB9CkBAIC0xNzU3LDEwICsx
NzU3LDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY28KICAgICBz
ZXROb2RlQXR0cmlidXRlKGJsb2NrLCBzdHlsZUF0dHIsIGNzc1RleHQpOwogfQogCi1zdGF0aWMg
Ym9vbCBmb250Q29sb3JDaGFuZ2VzQ29tcHV0ZWRTdHlsZShSZW5kZXJTdHlsZSogY29tcHV0ZWRT
dHlsZSwgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2UpCitzdGF0aWMgYm9vbCBmb250Q29sb3JDaGFu
Z2VzQ29tcHV0ZWRTdHlsZShjb25zdCBDb2xvciYgY29tcHV0ZWRTdHlsZUNvbG9yLCBTdHlsZUNo
YW5nZSBzdHlsZUNoYW5nZSkKIHsKICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29sb3Io
KSkgewotICAgICAgICBpZiAoQ29sb3Ioc3R5bGVDaGFuZ2UuZm9udENvbG9yKCkpICE9IGNvbXB1
dGVkU3R5bGUtPmNvbG9yKCkpCisgICAgICAgIGlmIChDb2xvcihzdHlsZUNoYW5nZS5mb250Q29s
b3IoKSkgIT0gY29tcHV0ZWRTdHlsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MDEsNyArMTgwMSw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWYKICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRv
IGluc2VydCBhIGZvbnQgZWxlbWVudCBpZiBpdCB3aWxsIGVuZCB1cCBjaGFuZ2luZyB0aGUgc3R5
bGUgb2YgdGhlCiAgICAgICAgIC8vIHRleHQgc29tZWhvdy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUg
YSBnYXJiYWdlIG5vZGUgdGhhdCB3aWxsIGNyZWF0ZSBwcm9ibGVtcyBmb3IgdXMKICAgICAgICAg
Ly8gbW9zdCBub3RhYmx5IHdoZW4gd2UgYXBwbHkgYSBibG9ja3F1b3RlIHN0eWxlIGZvciBhIG1l
c3NhZ2UgcmVwbHkuCi0gICAgICAgIGlmIChmb250Q29sb3JDaGFuZ2VzQ29tcHV0ZWRTdHlsZShj
b21wdXRlZFN0eWxlLCBzdHlsZUNoYW5nZSkKKyAgICAgICAgaWYgKGZvbnRDb2xvckNoYW5nZXND
b21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgc3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAgICAgfHwgZm9udEZhY2VDaGFu
Z2VzQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlLCBzdHlsZUNoYW5nZSkKICAgICAgICAgICAg
ICAgICB8fCBmb250U2l6ZUNoYW5nZXNDb21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUsIHN0eWxl
Q2hhbmdlKSkgewogICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkp
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsMTEgQEAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBIVE1MRWxlbWVu
dDsKIGNsYXNzIFN0eWxlQ2hhbmdlOwogCitlbnVtIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSB7
CisgICAgSW5jbHVkZVR5cGluZ1N0eWxlLAorICAgIElnbm9yZVR5cGluZ1N0eWxlCit9OworCiBj
bGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBw
dWJsaWM6CiAgICAgZW51bSBFUHJvcGVydHlMZXZlbCB7IFByb3BlcnR5RGVmYXVsdCwgRm9yY2VC
bG9ja1Byb3BlcnRpZXMgfTsKQEAgLTUwLDYgKzU1LDggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxlQ29tbWFuZChlbGVtZW50LCByZW1vdmVP
bmx5LCBhY3Rpb24pKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24gcG9z
LCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlID0gSWdu
b3JlVHlwaW5nU3R5bGUpOwogCiBwcml2YXRlOgogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsK
QEAgLTExNywxMiArMTI0LDYgQEAgYm9vbCBpc1N0eWxlU3Bhbihjb25zdCBOb2RlKik7CiBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50Kik7CiBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1
dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbiogY29tcHV0ZWRTdHlsZSk7CiAKLWVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxl
IHsKLSAgICBJbmNsdWRlVHlwaW5nU3R5bGUsCi0gICAgSWdub3JlVHlwaW5nU3R5bGUKLX07Ci0K
LVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUF0UG9z
aXRpb24oUG9zaXRpb24sIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSA9IElnbm9yZVR5cGluZ1N0
eWxlKTsKIHZvaWQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIFBvc2l0aW9uKTsKIHZvaWQgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDAsNyAr
OTQwLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8v
IHRvbywgPGRpdj48Yj48YnI+PC9iPjwvZGl2PiBmb3IgZXhhbXBsZS4gIFNhdmUgaXQgc28gdGhh
dCB3ZSBjYW4gcHJlc2VydmUgaXQgbGF0ZXIuCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZUluRW1wdHlQYXJhZ3JhcGg7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUgPT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUgJiYgcHJlc2VydmVTdHlsZSkgewotICAg
ICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGggPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsK
KyAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRp
bmdTdHlsZUF0UG9zaXRpb24oc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogICAgICAgICAvLyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNo
b3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBkZXN0aW5hdGlvbi4KICAgICAgICAg
c3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB9CkBA
IC0xMDAzLDcgKzEwMDMsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9m
RW1wCiAgICAgaWYgKCFlbXB0eUxpc3RJdGVtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxl
QXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUp
OworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0
eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogCiAgICAgTm9kZSogbGlzdE5vZGUgPSBlbXB0eUxp
c3RJdGVtLT5wYXJlbnROb2RlKCk7CiAgICAgLy8gRklYTUU6IENhbid0IHdlIGRvIHNvbWV0aGlu
ZyBiZXR0ZXIgd2hlbiB0aGUgaW1tZWRpYXRlIHBhcmVudCB3YXNuJ3QgYSBsaXN0IG5vZGU/Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxl
RWxlbWVudChjb25zdCBOb2QKICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoc3R5bGUtPmhhc0JhY2tncm91bmQoKSAmJiAo
IXBhcmVudFN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgfHwgc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
ICE9IHBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSkpCisgICAgICAgIGlmIChyZW5kZXJl
ci0+aGFzQmFja2dyb3VuZCgpICYmICghcGFyZW50UmVuZGVyZXItPmhhc0JhY2tncm91bmQoKSB8
fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSAhPSBwYXJlbnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2
KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5
cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUgaXMgZG9uZS4KLSAgICBtX3R5
cGluZ1N0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZVRhYlNwYW4o
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CisgICAgbV90eXBpbmdTdHlsZSA9IEFwcGx5
U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlVGFiU3Bh
bihtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsKIAogICAgIHJlbW92ZUVuY2xvc2luZ0Fu
Y2hvclN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAKICAgICAvLyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBz
YXZlIHRoZSBzdHlsZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1
c2UgdGhpcyBsYXRlciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQg
dXAgb3V0c2lkZSBvZiBhIE1haWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2Nr
cXVvdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgIG1fZGVs
ZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24obV9zZWxlY3Rp
b25Ub0RlbGV0ZS5lbmQoKSk7CisgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9
IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKG1fc2VsZWN0aW9uVG9E
ZWxldGUuZW5kKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0
eWxlID0gMDsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2EK
ICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAmJiAhaXNFbmRPZlBhcmFn
cmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fc3R5bGUgPSBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvcywgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICBtX3N0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zLCBJbmNs
dWRlVHlwaW5nU3R5bGUpOwogfQogCiB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQ6OmFwcGx5U3R5bGVBZnRlckluc2VydGlvbihOb2RlKiBvcmlnaW5hbEVuY2xvc2luZ0Jsb2Nr
KQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24g
NTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIHRoaXMgZWRpdGFibGUgcm9v
dCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSdsbCBnaXZlIHRoZQogICAgIC8vIGNvbnRlbnQgdGhh
dCB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAgTm9kZSogcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihy
b290LCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0
U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihyb290LCAwKSk7CiAKICAgICAvLyBEZWxldGUgdGhlIHNlbGVjdGVkIGNvbnRlbnQuCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGxlYXZlIHRoaXMgdG8gaW5zZXJ0VGV4dCwg
YnV0IGl0cyBkZWxldGUgb3BlcmF0aW9uCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDcgKzU3
Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnQKICAgICBOb2Rl
KiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiA9IHRvcE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IGNv
cGllZFJhbmdlU3R5bGVTcGFuID0gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4tPmZpcnN0Q2hpbGQo
KTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVBdEluc2Vy
dGlvblBvcyA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KGluc2VydGlvblBvcykpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
c3R5bGVBdEluc2VydGlvblBvcyA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBv
c2l0aW9uKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChpbnNlcnRpb25Qb3MpKTsKIAogICAgIFN0
cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5jc3NUZXh0KCk7CiAgICAgCkBA
IC02MzQsOCArNjM0LDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5
bAogICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJy
aWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80
OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgogICAgIE5vZGUqIGJsb2NrcXVv
dGVOb2RlID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDog
bmVhcmVzdE1haWxCbG9ja3F1b3RlKGNvbnRleHQpOwogICAgIGlmIChibG9ja3F1b3RlTm9kZSkg
ewotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrcXVvdGVT
dHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUsIDAp
KTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHls
ZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUtPnBhcmVu
dE5vZGUoKSwgMCkpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGJsb2NrcXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0
aW9uKFBvc2l0aW9uKGJsb2NrcXVvdGVOb2RlLCAwKSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRp
dGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihibG9ja3F1b3RlTm9kZS0+cGFyZW50Tm9kZSgp
LCAwKSk7CiAgICAgICAgIHBhcmVudFN0eWxlLT5kaWZmKGJsb2NrcXVvdGVTdHlsZS5nZXQoKSk7
CiAKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGJsb2NrcXVvdGVTdHlsZS0+ZW5kKCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAobV9tYXRjaFN0eWxlKQotICAgICAgICBtX2luc2VydGlvblN0eWxlID0gZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAg
ICAgICAgbV9pbnNlcnRpb25TdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVB
dFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogICAgIAog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwODIsNyArMTA4Miw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6cGFpbnRDYXJldChHcmEKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBEZXZpY2VDb2xv
clNwYWNlOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByb290RWRpdGFibGVFbGVtZW50KCk7CiAg
ICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBjYXJldENv
bG9yID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgY2Fy
ZXRDb2xvciA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmdlKiByYW5nZSwgCiAgICAgLy8gQWRkIGEgd3JhcHBlciBzcGFuIHdpdGggdGhlIHN0eWxl
cyB0aGF0IGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIG1hcmt1cCBpbmhlcml0LgogICAgIE5vZGUq
IHBhcmVudE9mTGFzdENsb3NlZCA9IGxhc3RDbG9zZWQgPyBsYXN0Q2xvc2VkLT5wYXJlbnROb2Rl
KCkgOiAwOwogICAgIGlmIChwYXJlbnRPZkxhc3RDbG9zZWQgJiYgcGFyZW50T2ZMYXN0Q2xvc2Vk
LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKHBhcmVudE9mTGFzdENs
b3NlZCwgMCkpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24o
cGFyZW50T2ZMYXN0Q2xvc2VkLCAwKSk7CiAKICAgICAgICAgLy8gU3R5bGVzIHRoYXQgTWFpbCBi
bG9ja3F1b3RlcyBjb250cmlidXRlIHNob3VsZCBvbmx5IGJlIHBsYWNlZCBvbiB0aGUgTWFpbCBi
bG9ja3F1b3RlLCB0byBoZWxwCiAgICAgICAgIC8vIHVzIGRpZmZlcmVudGlhdGUgdGhvc2Ugc3R5
bGVzIGZyb20gb25lcyB0aGF0IHRoZSB1c2VyIGhhcyBhcHBsaWVkLiAgVGhpcyBoZWxwcyB1cwpA
QCAtMTA0Miw3ICsxMDQyLDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFu
Z2UsIAogICAgICAgICAvLyBBZGQgYSBzdHlsZSBzcGFuIHdpdGggdGhlIGRvY3VtZW50J3MgZGVm
YXVsdCBzdHlsZXMuICBXZSBhZGQgdGhlc2UgaW4gYSBzZXBhcmF0ZQogICAgICAgICAvLyBzcGFu
IHNvIHRoYXQgYXQgcGFzdGUgdGltZSB3ZSBjYW4gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGRvY3Vt
ZW50IGRlZmF1bHRzIGFuZCB1c2VyCiAgICAgICAgIC8vIGFwcGxpZWQgc3R5bGVzLgotICAgICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRTdHlsZSA9IGVkaXRp
bmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAw
KSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24o
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRT
dHlsZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgYWRkU3R5bGVNYXJrdXAocHJlTWFya3Vw
cywgbWFya3VwcywgZGVmYXVsdFN0eWxlLmdldCgpLCBkb2N1bWVudCk7CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgZ1Byb3BlcnR5V3JhcHBlck1hcFtudW1DU1NQcm8K
IHN0YXRpYyBjb25zdCBpbnQgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IC0xOwogCiAK
LXN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6ZW5z
dXJlUHJvcGVydHlNYXAoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVz
dHJveWVkLiBNYXliZSB3ZSBzaG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhl
IGxhc3QgQW5pbWF0aW9uQ29udHJvbGxlciBpcyBkZXN0cm95ZWQ/CiAgICAgaWYgKGdQcm9wZXJ0
eVdyYXBwZXJzID09IDApIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKGludCBwcm9wKTsKICNl
bmRpZgogCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCk7CisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9t
YWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFt
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDA3LDE0ICs0MDcsMTQgQEAgTlNEaWN0aW9uYXJ5
KiBGcmFtZTo6Zm9udEF0dHJpYnV0ZXNGb3JTZQogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSog
cmVzdWx0ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CiAKLSAgICBpZiAoc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9y
KCkuYWxwaGEoKSAhPSAwKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxl
LT5iYWNrZ3JvdW5kQ29sb3IoKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07CisgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9IDApCisgICAgICAgIFtyZXN1bHQg
c2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwogCiAgICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCkpCiAg
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0
TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5j
b2xvcigpLmlzVmFsaWQoKSAmJiBzdHlsZS0+Y29sb3IoKSAhPSBDb2xvcjo6YmxhY2spCi0gICAg
ICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmNvbG9yKCkpIGZvcktleTpOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IENvbG9yOjpibGFjaykKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
IAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAg
ICAgaWYgKHNoYWRvdykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUmVuZGVyT2Jq
ZWN0OjpQYQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0OwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RM
aW5lKTsKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICBDb2xvciB0
ZXh0Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCiAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogICAg
IGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CkBAIC03OCw3ICs3OCw3IEBAIEludFJlY3QgRWxsaXBz
aXNCb3g6OnNlbGVjdGlvblJlY3QoaW50IHQKIAogdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxl
Y3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewotICAgIENvbG9yIHRleHRDb2xvciA9IHN0
eWxlLT5jb2xvcigpOworICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9IG1fcmVuZGVyZXItPnNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogICAgIGlmICghYy5pc1ZhbGlkKCkgfHwgIWMuYWxw
aGEoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw5ICs0NTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3Ryb2tlV2lk
dGggPSBzdHJva2VXaWR0aDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ29sb3Igc3Ry
b2tlID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJsYWNrIDogcHNldWRvU3R5
bGUtPnRleHRTdHJva2VDb2xvcigpOwotICAgICAgICAgICAgaWYgKCFzdHJva2UuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHN0cm9rZSA9IHBzZXVkb1N0eWxlLT5jb2xvcigpOworICAgICAg
ICAgICAgQ29sb3Igc3Ryb2tlID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJs
YWNrIDogcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTdHJva2VDb2xvcik7CiAgICAgICAgICAgICBpZiAoc3Ryb2tlICE9IHNlbGVjdGlvblN0
cm9rZUNvbG9yKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkp
CiAgICAgICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRydWU7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3
IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKIAogICAgIC8vIFNl
dCB0aGUgdGV4dCBjb2xvciBpZiB3ZSdyZSB0aGUgYm9keS4KICAgICBpZiAoaXNCb2R5KCkpCi0g
ICAgICAgIGRvY3VtZW50KCktPnNldFRleHRDb2xvcihzdHlsZSgpLT5jb2xvcigpKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0VGV4dENvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVCb3hNb2Rl
bEluZm9Gcm9tU3R5bGUoKQpAQCAtNTc3LDkgKzU3Nyw5IEBAIHZvaWQgUmVuZGVyQm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW4KIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgY29uc3Qg
RmlsbExheWVyKiBiZ0xheWVyID0gc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpOwotICAgIENv
bG9yIGJnQ29sb3IgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAwOwotICAgIGlmICghc3R5
bGUoKS0+aGFzQmFja2dyb3VuZCgpICYmIG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sVGFnKSkgeworICAgIGlmICghaGFzQmFja2dyb3VuZCgpICYmIG5vZGUoKSAm
JiBub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkgewogICAgICAgICAvLyBM
b2NhdGUgdGhlIDxib2R5PiBlbGVtZW50IHVzaW5nIHRoZSBET00uICBUaGlzIGlzIGVhc2llciB0
aGFuIHRyeWluZwogICAgICAgICAvLyB0byBjcmF3bCBhcm91bmQgYSByZW5kZXIgdHJlZSB3aXRo
IHBvdGVudGlhbCA6YmVmb3JlLzphZnRlciBjb250ZW50IGFuZAogICAgICAgICAvLyBhbm9ueW1v
dXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdlIGNhbiBsb2Nh
dGUgdGhlIDxib2R5PgpAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJv
b3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmhh
c0xvY2FsTmFtZShib2R5VGFnKSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKICAgICAgICAgaWYg
KGJvZHlPYmplY3QpIHsKICAgICAgICAgICAgIGJnTGF5ZXIgPSBib2R5T2JqZWN0LT5zdHlsZSgp
LT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9iamVjdC0+
c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9i
amVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjQ5LDggKzY0OSw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpwYWludEJveERlY29yYXRpb25zV2l0aFMKICAgICAgICAgLy8gVGhlIDxib2R5PiBv
bmx5IHBhaW50cyBpdHMgYmFja2dyb3VuZCBpZiB0aGUgcm9vdCBlbGVtZW50IGhhcyBkZWZpbmVk
IGEgYmFja2dyb3VuZAogICAgICAgICAvLyBpbmRlcGVuZGVudCBvZiB0aGUgYm9keS4gIEdvIHRo
cm91Z2ggdGhlIERPTSB0byBnZXQgdG8gdGhlIHJvb3QgZWxlbWVudCdzIHJlbmRlciBvYmplY3Qs
CiAgICAgICAgIC8vIHNpbmNlIHRoZSByb290IGNvdWxkIGJlIGlubGluZSBhbmQgd3JhcHBlZCBp
biBhbiBhbm9ueW1vdXMgYmxvY2suCi0gICAgICAgIGlmICghaXNCb2R5KCkgfHwgZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0JhY2tncm91bmQo
KSkKLSAgICAgICAgICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIHN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIHR4LCB0eSwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGlmICghaXNCb2R5KCkgfHwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCktPnJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHBhaW50
RmlsbExheWVycyhwYWludEluZm8sIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgs
IHR5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkKICAgICAgICAgICAgIHRoZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZv
LCBJbnRSZWN0KHR4LCB0eSwgd2lkdGgsIGhlaWdodCkpOwogICAgIH0KQEAgLTc5Niw3ICs3OTYs
NyBAQCBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgICAgICAg
ICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgaW1hZ2UgaXMgYmVpbmcgdXNlZCwgY29tcHV0ZSB0
aGUgcmVuZGVyZXIgYW5kIHRoZSByZWN0CiAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGFs
cmVhZHkKICAgICAgICAgICAgIGlmICghbGF5ZXJSZW5kZXJlcikgewotICAgICAgICAgICAgICAg
IGJvb2wgZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kID0gZHJhd2luZ0JhY2tncm91bmQgJiYgKGlzUm9v
dCgpIHx8IChpc0JvZHkoKSAmJiAhZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmhhc0JhY2tncm91bmQoKSkpOworICAgICAgICAgICAgICAgIGJvb2wg
ZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kID0gZHJhd2luZ0JhY2tncm91bmQgJiYgKGlzUm9vdCgpIHx8
IChpc0JvZHkoKSAmJiAhZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkt
Pmhhc0JhY2tncm91bmQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tn
cm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IHZpZXcoKTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojp1cGRhdGVCb3hNb2RlCiB7CiAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBiaXRzIGZv
ciBhIGJveCBtb2RlbCBvYmplY3QuICBTaW5jZSBhbGwgYml0cyBhcmUgY2xlYXJlZCBpbiBzdHls
ZVdpbGxDaGFuZ2UsCiAgICAgLy8gd2Ugb25seSBjaGVjayBmb3IgYml0cyB0aGF0IGNvdWxkIHBv
c3NpYmx5IGJlIHNldCB0byB0cnVlLgotICAgIHNldEhhc0JveERlY29yYXRpb25zKHN0eWxlKCkt
Pmhhc0JvcmRlcigpIHx8IHN0eWxlKCktPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZSgpLT5oYXNB
cHBlYXJhbmNlKCkgfHwgc3R5bGUoKS0+Ym94U2hhZG93KCkpOworICAgIHNldEhhc0JveERlY29y
YXRpb25zKGhhc0JhY2tncm91bmQoKSB8fCBzdHlsZSgpLT5oYXNCb3JkZXIoKSB8fCBzdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkgfHwgc3R5bGUoKS0+Ym94U2hhZG93KCkpOwogICAgIHNldElubGlu
ZShzdHlsZSgpLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkpOwogICAgIHNldFJlbFBvc2l0aW9uZWQo
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKTsKIH0KQEAgLTEzMjEsNyAr
MTMyMSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAg
ICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90
dG9tKCkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzT3BhcXVlQmFja2dyb3VuZCA9IHMtPmJhY2tn
cm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBzLT5iYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpID09
IDI1NTsKKyAgICBib29sIGhhc09wYXF1ZUJhY2tncm91bmQgPSBzLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgPT0gMjU1
OwogICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcy0+Ym94U2hhZG93KCk7IHNo
YWRvdzsgc2hhZG93ID0gc2hhZG93LT5uZXh0KCkpIHsKICAgICAgICAgaWYgKHNoYWRvdy0+c3R5
bGUoKSAhPSBzaGFkb3dTdHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYs
NyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zCiAKICAgICBwYWlu
dEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBOb3Jt
YWwpOwogCi0gICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+YmFja2dyb3Vu
ZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKKyAg
ICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJz
KCksIHR4LCB0eSwgdywgaCk7CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgdywgaCwgc3R5bGUoKSwgSW5zZXQpOwogCiAgICAgaWYgKCFzdHlsZSgpLT5oYXNC
b3JkZXIoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAgICAgKyBidXR0
b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBi
dXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpCiAgICAgICAgICAgICArIGJ1dHRvblJlbmRlcmVy
LT5iYXNlbGluZVBvc2l0aW9uKHRydWUsIGZhbHNlKTsKIAotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCktPmNvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgICAgICAKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmRyYXdCaWRpVGV4dChzdHlsZSgpLT5mb250KCksIHRleHRSdW4sIElu
dFBvaW50KHRleHRYLCB0ZXh0WSkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNl
dDo6cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgQ29sb3JTcGFjZSBjb2xv
clNwYWNlID0gc3R5bGUoKS0+Y29sb3JTcGFjZSgpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJv
cmRlclJlY3QsIGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJM
ZWZ0Q29sb3IoKSA6IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICBjb250ZXh0
LT5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigpID8gc3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6
IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICAKICAgICAvLyBOb3cgc3Ryb2tl
IHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGgg
ZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5n
IHRocm91Z2guCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRS
b3dCb3JkZXIoY29ucwogICAgIC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0g
c3R5bGUoKS0+Y29sb3JTcGFjZSgpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3Qs
IGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3Io
KSA6IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICBjb250ZXh0LT5maWxsUmVj
dChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZp
bGxDb2xvcigpLCBjb2xvclNwYWNlKTsKIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1
dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEg
bGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3
LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAgICAgICAg
ICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcg
dGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRU
ZXh0KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29s
b3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgICAgIGludCBheCA9IHR4
ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7CiAgICAgICAgICAgICAgICAgaW50IGF5ID0gdHkgKyB0
b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBib29sIGhhc0JvcmRl
ck91dGxpbmVPclNoYWRvdyhjb25zdCBSZW5kZXJTdHlsZSopOwotc3RhdGljIGJvb2wgaGFzQm94
RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyU3R5bGUqKTsKK3N0YXRpYyBib29s
IGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVjdCopOwogc3Rh
dGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5kZXJT
dHlsZSopOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXMzRENhbnZhcyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQpAQCAtNTMzLDkgKzUzMyw5IEBAIHN0YXRpYyBib29sIGhhc0JvcmRlck91dGxpbmVP
clNoYWRvdyhjb24KICAgICByZXR1cm4gc3R5bGUtPmhhc0JvcmRlcigpIHx8IHN0eWxlLT5oYXNC
b3JkZXJSYWRpdXMoKSB8fCBzdHlsZS0+aGFzT3V0bGluZSgpIHx8IHN0eWxlLT5oYXNBcHBlYXJh
bmNlKCkgfHwgc3R5bGUtPmJveFNoYWRvdygpOwogfQogCi1zdGF0aWMgYm9vbCBoYXNCb3hEZWNv
cmF0aW9uc09yQmFja2dyb3VuZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgYm9v
bCBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIHJldHVybiBoYXNCb3JkZXJPdXRsaW5lT3JTaGFkb3coc3R5bGUpIHx8IHN0
eWxlLT5oYXNCYWNrZ3JvdW5kKCk7CisgICAgcmV0dXJuIGhhc0JvcmRlck91dGxpbmVPclNoYWRv
dyhyZW5kZXJlci0+c3R5bGUoKSkgfHwgcmVuZGVyZXItPmhhc0JhY2tncm91bmQoKTsKIH0KIAog
c3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpCkBAIC01NTEsMzYgKzU1MSwzMiBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6cmVuZGVyZXJIYXNCYWNrCiAgICAgICAgIGlmICghaHRtbE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IGh0bWxPYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZS0+aGFzQmFja2dyb3VuZCgp
KQorICAgICAgICBpZiAoaHRtbE9iamVjdC0+aGFzQmFja2dyb3VuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3Qg
PSBodG1sT2JqZWN0LT5maXJzdENoaWxkKCk7CiAgICAgICAgIGlmICghYm9keU9iamVjdCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIHN0eWxlID0gYm9keU9i
amVjdC0+c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5oYXNCYWNrZ3JvdW5kKCk7Cisg
ICAgICAgIHJldHVybiBib2R5T2JqZWN0LT5oYXNCYWNrZ3JvdW5kKCk7CiAgICAgfQogICAgIAot
ICAgIHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCk7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKTsKIH0KIAotY29uc3QgQ29sb3ImIFJlbmRl
ckxheWVyQmFja2luZzo6cmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorY29uc3QgQ29s
b3IgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IHNoYXJlIG1vcmUgY29kZSBoZXJlCiAgICAgaWYgKHJlbmRlcmVyKCkt
Pm5vZGUoKSAmJiByZW5kZXJlcigpLT5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBodG1sT2JqZWN0ID0gcmVuZGVyZXIoKS0+Zmlyc3RDaGlsZCgpOwot
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBodG1sT2JqZWN0LT5zdHlsZSgpOwotICAgICAg
ICBpZiAoc3R5bGUtPmhhc0JhY2tncm91bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZS0+
YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGlmIChodG1sT2JqZWN0LT5oYXNCYWNrZ3JvdW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gaHRtbE9iamVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgICAgICBSZW5kZXJP
YmplY3QqIGJvZHlPYmplY3QgPSBodG1sT2JqZWN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHN0
eWxlID0gYm9keU9iamVjdC0+c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5iYWNrZ3Jv
dW5kQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIGJvZHlPYmplY3QtPnN0eWxlKCktPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOworICAgIHJldHVy
biByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpOwogfQogCiAvLyBBICJzaW1wbGUgY29udGFpbmVyIGxheWVyIiBpcyBh
IFJlbmRlckxheWVyIHdoaWNoIGhhcyBubyB2aXNpYmxlIGNvbnRlbnQgdG8gcmVuZGVyLgpAQCAt
NTk4LDcgKzU5NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRhaW4K
ICAgICAvLyBSZWplY3QgYW55dGhpbmcgdGhhdCBoYXMgYSBib3JkZXIsIGEgYm9yZGVyLXJhZGl1
cyBvciBvdXRsaW5lLAogICAgIC8vIG9yIGFueSBiYWNrZ3JvdW5kIChjb2xvciBvciBpbWFnZSku
CiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIG9wdGltaXplIGxheWVycyBmb3Igc2ltcGxlIGJhY2tn
cm91bmRzLgotICAgIGlmIChoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChzdHlsZSkpCisg
ICAgaWYgKGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlck9iamVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIGhhdmUgZ290IHRoaXMgZmFyIGFuZCB0
aGUgcmVuZGVyZXIgaGFzIG5vIGNoaWxkcmVuLCB0aGVuIHdlJ3JlIG9rLgpAQCAtNzA4LDcgKzcw
NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWQKICAgICAvLyBG
SVhNRTogd2UgY291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgdGhlIGltYWdlLCB2aWRlbyBvciBj
YW52YXMgaXMga25vd24gdG8gZmlsbCB0aGUgYm9yZGVyIGJveCBlbnRpcmVseSwKICAgICAvLyBh
bmQgc2V0IGJhY2tncm91bmQgY29sb3Igb24gdGhlIGxheWVyIGluIHRoYXQgY2FzZSwgaW5zdGVh
ZCBvZiBhbGxvY2F0aW5nIGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nLgogICAgIGlmIChyZW5k
ZXJlcigpLT5pc1ZpZGVvKCkgfHwgaXMzRENhbnZhcyhyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0
dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCktPnN0eWxlKCkpOwor
ICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxOCw3ICs3MTQsNyBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QgPSByZW5kZXJlcigpOwotICAgIHJldHVybiByZW5kZXJPYmplY3QtPmlzSW1hZ2Uo
KSAmJiAhaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyT2JqZWN0LT5zdHlsZSgp
KTsKKyAgICByZXR1cm4gcmVuZGVyT2JqZWN0LT5pc0ltYWdlKCkgJiYgIWhhc0JveERlY29yYXRp
b25zT3JCYWNrZ3JvdW5kKHJlbmRlck9iamVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHVwZGF0ZUltYWdlQ29udGVudHMoKTsKIAogICAgIGJvb2wgcmVuZGVy
ZXJIYXNCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgY29uc3QgQ29sb3ImIHJlbmRlcmVyQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgY29uc3QgQ29sb3IgcmVuZGVyZXJCYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzTm9uQ29tcG9zaXRpbmdDb250ZW50KCkgY29uc3Q7
CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZCgKICAgICBpZiAoIWl0ZW1TdHlsZSkKICAgICAgICAgaXRlbVN0eWxlID0gc3R5bGUoKTsK
ICAgICAKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxl
bWVudC0+cmVuZGVyU3R5bGUoKS0+Y29sb3IoKSA6IHN0eWxlKCktPmNvbG9yKCk7CisgICAgQ29s
b3IgdGV4dENvbG9yID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSA6IHN0eWxlKCkt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAob3B0aW9u
RWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKCkpCiAgICAgICAgICAgICB0ZXh0Q29sb3Ig
PSB0aGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CkBAIC0z
NTUsNyArMzU1LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBiYWNrQ29sb3IgPSB0aGVtZSgpLT5pbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFj
a0NvbG9yID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkt
PmJhY2tncm91bmRDb2xvcigpIDogc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAg
IGJhY2tDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIDog
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKIAogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgZm9yIHRoaXMgbGlzdCBib3ggaXRlbQog
ICAgIGlmICghZWxlbWVudC0+cmVuZGVyU3R5bGUoKSB8fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gSElEREVOKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChzZWxSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBDb2xvciBjb2xvcihzdHlsZSgpLT5jb2xv
cigpKTsKKyAgICBjb25zdCBDb2xvciBjb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvcikpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9y
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNv
bGlkU3Ryb2tlKTsKICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5
LDcgKzQwOSw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUKICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07CiAgICAgCiAgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRl
clN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8g
UG9wdXBNZW51U3R5bGUoc3R5bGUtPmNvbG9yKCksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdElu
ZGV4KSwgc3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHls
ZS0+dGV4dEluZGVudCgpLCBzdHlsZS0+ZGlyZWN0aW9uKCkpIDogbWVudVN0eWxlKCk7CisgICAg
cmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgpLCBzdHls
ZS0+Zm9udCgpLCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlLT50ZXh0SW5k
ZW50KCksIHN0eWxlLT5kaXJlY3Rpb24oKSkgOiBtZW51U3R5bGUoKTsKIH0KIAogQ29sb3IgUmVu
ZGVyTWVudUxpc3Q6Oml0ZW1CYWNrZ3JvdW5kQ29sb3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dApAQCAtNDE3LDE4ICs0MTcsMTggQEAgQ29sb3IgUmVuZGVyTWVudUxpc3Q6Oml0ZW1CYWNrZ3Jv
dW5kQ29sbwogICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4ID49IGxp
c3RJdGVtcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1ts
aXN0SW5kZXhdOwogCiAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChlbGVtZW50
LT5yZW5kZXJTdHlsZSgpKQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBlbGVtZW50LT5yZW5k
ZXJTdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0g
ZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKTsKICAgICAvLyBJZiB0aGUgaXRlbSBoYXMgYW4gb3BhcXVlIGJhY2tn
cm91bmQgY29sb3IsIHJldHVybiB0aGF0LgogICAgIGlmICghYmFja2dyb3VuZENvbG9yLmhhc0Fs
cGhhKCkpCiAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kQ29sb3I7CiAKICAgICAvLyBPdGhlcndp
c2UsIHRoZSBpdGVtJ3MgYmFja2dyb3VuZCBpcyBvdmVybGF5ZWQgb24gdG9wIG9mIHRoZSBtZW51
IGJhY2tncm91bmQuCi0gICAgYmFja2dyb3VuZENvbG9yID0gc3R5bGUoKS0+YmFja2dyb3VuZENv
bG9yKCkuYmxlbmQoYmFja2dyb3VuZENvbG9yKTsKKyAgICBiYWNrZ3JvdW5kQ29sb3IgPSBzdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmJs
ZW5kKGJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IuaGFzQWxwaGEo
KSkKICAgICAgICAgcmV0dXJuIGJhY2tncm91bmRDb2xvcjsKIApAQCAtNDM5LDcgKzQzOSw3IEBA
IENvbG9yIFJlbmRlck1lbnVMaXN0OjppdGVtQmFja2dyb3VuZENvbG8KIFBvcHVwTWVudVN0eWxl
IFJlbmRlck1lbnVMaXN0OjptZW51U3R5bGUoKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBz
ID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5zdHlsZSgpIDogc3R5bGUoKTsKLSAgICBy
ZXR1cm4gUG9wdXBNZW51U3R5bGUocy0+Y29sb3IoKSwgcy0+YmFja2dyb3VuZENvbG9yKCksIHMt
PmZvbnQoKSwgcy0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHMtPnRleHRJbmRlbnQoKSwgcy0+
ZGlyZWN0aW9uKCkpOworICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHMtPmZvbnQoKSwgcy0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUsIHMtPnRleHRJbmRlbnQoKSwgcy0+ZGlyZWN0aW9uKCkpOwogfQogCiBIb3N0V2luZG93
KiBSZW5kZXJNZW51TGlzdDo6aG9zdFdpbmRvdygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw5ICsxMzgyLDkgQEAgQ29sb3Ig
UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5kQwogewogICAgIENvbG9yIGNvbG9yOwog
ICAgIGlmIChzdHlsZSgpLT51c2VyU2VsZWN0KCkgIT0gU0VMRUNUX05PTkUpIHsKLSAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxl
KFNFTEVDVElPTik7Ci0gICAgICAgIGlmIChwc2V1ZG9TdHlsZSAmJiBwc2V1ZG9TdHlsZS0+YmFj
a2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHls
ZS0+YmFja2dyb3VuZENvbG9yKCkuYmxlbmRXaXRoV2hpdGUoKTsKKyAgICAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBwc2V1ZG9TdHlsZSA9IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9O
KTsKKyAgICAgICAgaWYgKHBzZXVkb1N0eWxlICYmIHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuYmxlbmRXaXRoV2hpdGUoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29sb3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2Vk
QW5kQWN0aXZlKCkgPwogICAgICAgICAgICAgICAgICAgICB0aGVtZSgpLT5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSA6CkBAIC0xNDAxLDkgKzE0MDEsOSBAQCBDb2xvciBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAogICAg
IGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0VW5jYWNoZWRQc2V1ZG9T
dHlsZShTRUxFQ1RJT04pKSB7Ci0gICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnRleHRGaWxs
Q29sb3IoKTsKKyAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcik7CiAgICAgICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+Y29sb3IoKTsKKyAg
ICAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKTsKICAgICB9IGVsc2UKICAgICAgICAgY29sb3IgPSBkb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkgPwogICAgICAgICAgICAg
ICAgIHRoZW1lKCktPmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIDoKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNiArNDAxLDEzIEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGhhc0JveERlY29yYXRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9wYWludEJhY2tncm91bmQ7IH0KICAgICBib29sIG11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9y
ZGVyKCkgY29uc3Q7CisgICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIENvbG9yIGNvbG9yID0gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSAmJiBjb2xv
ci5hbHBoYSgpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
c3R5bGUoKS0+aGFzQmFja2dyb3VuZEltYWdlKCk7CisgICAgfQogCiAgICAgYm9vbCBuZWVkc0xh
eW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQgfHwgbV9ub3JtYWxDaGlsZE5lZWRz
TGF5b3V0IHx8IG1fcG9zQ2hpbGROZWVkc0xheW91dCB8fCBtX25lZWRzUG9zaXRpb25lZE1vdmVt
ZW50TGF5b3V0OyB9CiAgICAgYm9vbCBzZWxmTmVlZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBt
X25lZWRzTGF5b3V0OyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyCiAgICAgb2JqZWN0LT5kb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVz
dENvbG9yRm9yUHNldWRvUnVsZXMoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIHVzZUZp
bGxQYWludCwgQ29sb3ImIGNvbG9yKQoraW5saW5lIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2U6OmFk
anVzdENvbG9yRm9yUHNldWRvUnVsZXMoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIHVz
ZUZpbGxQYWludCwgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChzdHlsZS0+aW5zaWRlTGluaygp
ICE9IEluc2lkZVZpc2l0ZWRMaW5rKQogICAgICAgICByZXR1cm47CkBAIC05NSw3ICs5NSw3IEBA
IFJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6ZmkKIAogICAgICAgICBDb2xv
ciBmaWxsQ29sb3I7CiAgICAgICAgIGlmIChmaWxsUGFpbnQtPnBhaW50VHlwZSgpID09IFNWR1Bh
aW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIGZpbGxDb2xvciA9
IHN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgZmlsbENvbG9yID0gc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZmlsbENvbG9yID0gZmlsbFBhaW50LT5jb2xvcigpOwogCkBAIC0xNDksNyArMTQ5LDcgQEAg
UmVuZGVyU1ZHUmVzb3VyY2UqIFJlbmRlclNWR1Jlc291cmNlOjpzdAogCiAgICAgICAgIENvbG9y
IHN0cm9rZUNvbG9yOwogICAgICAgICBpZiAoc3Ryb2tlUGFpbnQtPnBhaW50VHlwZSgpID09IFNW
R1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIHN0cm9rZUNv
bG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBzdHJva2VDb2xvciA9IHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHN0cm9rZUNvbG9yID0gc3Ryb2tlUGFpbnQtPmNvbG9yKCk7CiAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw3IEBAIGVudW0gUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHsKICAgICBBcHBseVRvVGV4dE1v
ZGUgICAgPSAxIDw8IDMgLy8gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIEFwcGx5VG97RmlsbHxT
dHJva2V9TW9kZQogfTsKIAorY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC03OCw2ICs3OSw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICBzdGF0aWMg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2Uo
KTsKIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBhZGp1c3RDb2xvckZvclBzZXVkb1J1bGVz
KGNvbnN0IFJlbmRlclN0eWxlKiwgYm9vbCB1c2VGaWxsUGFpbnQsIENvbG9yJik7CisgICAgCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXJrRm9yTGF5b3V0QW5kUmVzb3VyY2VJbnZhbGlkYXRpb24o
UmVuZGVyT2JqZWN0Kik7CiB9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2
aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwMSw3ICs1MDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERl
Y29yYXRpb25zKFBhCiAKICAgICBwYWludEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgs
IHR5LCB3LCBoLCBzdHlsZSgpLCBOb3JtYWwpOwogICAgIAotICAgIHBhaW50RmlsbExheWVycyhw
YWludEluZm8sIHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5k
TGF5ZXJzKCksIHR4LCB0eSwgdywgaCk7CisgICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywg
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSwgc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpLCB0eCwgdHksIHcsIGgpOwogICAgIHBhaW50
Qm94U2hhZG93KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIEluc2V0
KTsKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIoKSAmJiAhY29sbGFwc2VCb3JkZXJzKCkp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QAogI2lmbmRlZiBSZW5kZXJUYWJsZV9oCiAjZGVmaW5lIFJlbmRlclRhYmxlX2gKIAorI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgaW50IGJv
cmRlclRvcCgpIGNvbnN0OwogICAgIGludCBib3JkZXJCb3R0b20oKSBjb25zdDsKICAgICAKLSAg
ICBjb25zdCBDb2xvciYgYmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpOyB9CisgICAgY29uc3QgQ29sb3IgYmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
IH0KIAogICAgIGludCBvdXRlckJvcmRlclRvcCgpIGNvbnN0OwogICAgIGludCBvdXRlckJvcmRl
ckJvdHRvbSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0g
aGVpZ2h0KCk7CiAKLSAgICBDb2xvciBjID0gYmFja2dyb3VuZE9iamVjdC0+c3R5bGUoKS0+YmFj
a2dyb3VuZENvbG9yKCk7CisgICAgQ29sb3IgYyA9IGJhY2tncm91bmRPYmplY3QtPnN0eWxlKCkt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAg
Y29uc3QgRmlsbExheWVyKiBiZ0xheWVyID0gYmFja2dyb3VuZE9iamVjdC0+c3R5bGUoKS0+YmFj
a2dyb3VuZExheWVycygpOwogCiAgICAgaWYgKGJnTGF5ZXItPmhhc0ltYWdlKCkgfHwgYy5pc1Zh
bGlkKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJl
dmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bDo6YWRqdXN0SW5uZXJUZXh0UwogCiAgICAgYm9vbCBkaXNhYmxlZCA9IHVwZGF0ZVVzZXJNb2Rp
ZnlQcm9wZXJ0eShub2RlKCksIHRleHRCbG9ja1N0eWxlKTsKICAgICBpZiAoZGlzYWJsZWQpCi0g
ICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRDb2xvcihkaXNhYmxlZFRleHRDb2xvcih0ZXh0Qmxv
Y2tTdHlsZS0+Y29sb3IoKSwgc3RhcnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpKTsKKyAgICAg
ICAgdGV4dEJsb2NrU3R5bGUtPnNldENvbG9yKGRpc2FibGVkVGV4dENvbG9yKHRleHRCbG9ja1N0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0YXJ0U3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpKTsKIH0K
IAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlU3VidHJlZUlmTmVlZGVkKFRleHRDb250
cm9sSW5uZXJFbGVtZW50KiBpbm5lckJsb2NrKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4OCw3ICs3ODgsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpCiAKIFBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bWVudVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUo
KS0+Y29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmZvbnQoKSwg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlKCktPnRleHRJbmRlbnQoKSwg
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOworICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCktPmZv
bnQoKSwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlKCktPnRleHRJbmRl
bnQoKSwgc3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBib29sIFJlbmRlclRo
ZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgICAgICAgICAvLyBUZXN0IHRoZSBzdHls
ZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4KICAgICAgICAg
ICAgIHJldHVybiAoc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlciB8fAogICAgICAgICAgICAgICAg
ICAgICAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSAhPSBiYWNrZ3JvdW5kQ29sb3Ip
OworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OTQsNyArOTk0LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIAogICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9y
KG8tPnN0eWxlKCktPmNvbG9yKCksIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CisgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKIAogICAgIEZsb2F0
UG9pbnQgYXJyb3cxWzNdOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBTdHJpbmcgcXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgbywgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCit2b2lk
IFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogICAg
IHRzIDw8IG8ucmVuZGVyTmFtZSgpOwogCkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CiAKLSAgICB3cml0ZVJlbmRlck9iamVjdCh0cywgbywgYmVoYXZpb3IpOworICAgIFJlbmRl
clRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KHRzLCBvLCBiZWhhdmlvcik7CiAgICAgdHMg
PDwgIlxuIjsKIAogICAgIGlmIChvLmlzVGV4dCgpICYmICFvLmlzQlIoKSkgewpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDE0IEBAIFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKEZyYW1lKiwgUmUKIHZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGludCBpbmRlbnQgPSAwLCBSZW5k
ZXJBc1RleHRCZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9yTm9ybWFsKTsKIHZvaWQgd3Jp
dGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCitjbGFzcyBSZW5kZXJUcmVlQXNU
ZXh0IHsKKy8vIEZJWE1FOiBUaGlzIGlzIGEgY2hlZXN5IGhhY2sgdG8gYWxsb3cgZWFzeSBhY2Nl
c3MgdG8gUmVuZGVyU3R5bGUgY29sb3JzLiAgSXQgd29uJ3QgYmUgbmVlZGVkIGlmIHdlIGNvbnZl
cnQKKy8vIGl0IHRvIHVzZSB2aXNpdGVkRGVwZW5kZW50Q29sb3IgaW5zdGVhZC4gKFRoaXMganVz
dCBpbnZvbHZlcyByZWJhc2VsaW5pbmcgbWFueSByZXN1bHRzIHRob3VnaCwgc28gZm9yIG5vdyBp
dCdzCisvLyBub3QgYmVpbmcgZG9uZSkuCitwdWJsaWM6CitzdGF0aWMgdm9pZCB3cml0ZVJlbmRl
ck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1Rl
eHRCZWhhdmlvciBiZWhhdmlvcik7Cit9OworCiAvLyBIZWxwZXIgZnVuY3Rpb24gc2hhcmVkIHdp
dGggU1ZHUmVuZGVyVHJlZUFzVGV4dAogU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxl
cyhjb25zdCBTdHJpbmcmKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKGluCiAgICAgaWYgKHN0YXJ0UG9zID49IGVuZFBvcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPmNvbG9yKCk7
CisgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyKCktPnNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpOwogICAgIGlmICghY29sb3IuaXNWYWxpZCgpIHx8ICFjb2xvci5hbHBo
YSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDggKzQzMyw4IEBAIHN0
YXRpYyB2b2lkIHdyaXRlUmVuZGVyU1ZHVGV4dEJveChUZXh0U3QKICAgICBWZWN0b3I8U1ZHVGV4
dENodW5rPiYgY2h1bmtzID0gY29uc3RfY2FzdDxWZWN0b3I8U1ZHVGV4dENodW5rPiYgPihib3gt
PnN2Z1RleHRDaHVua3MoKSk7CiAgICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LngoKSA8PCAiLCIg
PDwgdGV4dC55KCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+d2lkdGgoKSA8PCAieCIgPDwgYm94LT5o
ZWlnaHQoKSA8PCAiIGNvbnRhaW5zICIgPDwgY2h1bmtzLnNpemUoKSA8PCAiIGNodW5rKHMpIjsK
IAotICAgIGlmICh0ZXh0LnBhcmVudCgpICYmICh0ZXh0LnBhcmVudCgpLT5zdHlsZSgpLT5jb2xv
cigpICE9IHRleHQuc3R5bGUoKS0+Y29sb3IoKSkpCi0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFp
cih0cywgImNvbG9yIiwgdGV4dC5zdHlsZSgpLT5jb2xvcigpLm5hbWUoKSk7CisgICAgaWYgKHRl
eHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkpCisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
ImNvbG9yIiwgdGV4dC5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikubmFtZSgpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zSW5saW5lVGV4
dEJveChTVkdUZXh0Q2h1bmsmIGNodW5rLCBTVkdJbmxpbmVUZXh0Qm94KiBib3gpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTk1LDQyICs5OTUsNDIgQEAgc3RhdGljIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZUZvckNv
bG9yUAogICAgIHJldHVybiBib3JkZXJTdHlsZTsKIH0KIAotc3RhdGljIENvbG9yIGNvbG9ySW5j
bHVkaW5nRmFsbGJhY2soY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgY29sb3JQcm9wZXJ0
eSwgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQorY29uc3QgQ29sb3IgUmVuZGVyU3R5bGU6OmNv
bG9ySW5jbHVkaW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJTdHlsZSBib3Jk
ZXJTdHlsZSkgY29uc3QKIHsKICAgICBDb2xvciByZXN1bHQ7CiAgICAgc3dpdGNoIChjb2xvclBy
b3BlcnR5KSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICAgICAg
cmV0dXJuIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsgLy8gQmFja2dyb3VuZCBjb2xvciBkb2Vz
bid0IGZhbGwgYmFjay4KKyAgICAgICAgcmV0dXJuIGJhY2tncm91bmRDb2xvcigpOyAvLyBCYWNr
Z3JvdW5kIGNvbG9yIGRvZXNuJ3QgZmFsbCBiYWNrLgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0Q29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKTsK
LSAgICAgICAgYm9yZGVyU3R5bGUgPSBzdHlsZS0+Ym9yZGVyTGVmdFN0eWxlKCk7CisgICAgICAg
IHJlc3VsdCA9IGJvcmRlckxlZnRDb2xvcigpOworICAgICAgICBib3JkZXJTdHlsZSA9IGJvcmRl
ckxlZnRTdHlsZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmJvcmRlclJpZ2h0Q29sb3IoKTsK
LSAgICAgICAgYm9yZGVyU3R5bGUgPSBzdHlsZS0+Ym9yZGVyUmlnaHRTdHlsZSgpOworICAgICAg
ICByZXN1bHQgPSBib3JkZXJSaWdodENvbG9yKCk7CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9y
ZGVyUmlnaHRTdHlsZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wQ29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IHN0eWxlLT5ib3JkZXJUb3BDb2xvcigpOwot
ICAgICAgICBib3JkZXJTdHlsZSA9IHN0eWxlLT5ib3JkZXJUb3BTdHlsZSgpOworICAgICAgICBy
ZXN1bHQgPSBib3JkZXJUb3BDb2xvcigpOworICAgICAgICBib3JkZXJTdHlsZSA9IGJvcmRlclRv
cFN0eWxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmJvcmRlckJvdHRvbUNvbG9yKCk7Ci0g
ICAgICAgIGJvcmRlclN0eWxlID0gc3R5bGUtPmJvcmRlckJvdHRvbVN0eWxlKCk7CisgICAgICAg
IHJlc3VsdCA9IGJvcmRlckJvdHRvbUNvbG9yKCk7CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9y
ZGVyQm90dG9tU3R5bGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNv
bG9yOgotICAgICAgICByZXN1bHQgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0g
Y29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xv
cjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPm91dGxpbmVDb2xvcigpOworICAgICAgICByZXN1
bHQgPSBvdXRsaW5lQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmNvbHVtblJ1
bGVDb2xvcigpOworICAgICAgICByZXN1bHQgPSBjb2x1bW5SdWxlQ29sb3IoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgICAg
IHJlc3VsdCA9IHN0eWxlLT50ZXh0RmlsbENvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHRleHRG
aWxsQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPnRleHRTdHJva2VDb2xvcigp
OworICAgICAgICByZXN1bHQgPSB0ZXh0U3Ryb2tlQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQzLDIzICsx
MDQzLDIzIEBAIHN0YXRpYyBDb2xvciBjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKGNvbnMKICAgICAg
ICAgICAgICYmIChib3JkZXJTdHlsZSA9PSBJTlNFVCB8fCBib3JkZXJTdHlsZSA9PSBPVVRTRVQg
fHwgYm9yZGVyU3R5bGUgPT0gUklER0UgfHwgYm9yZGVyU3R5bGUgPT0gR1JPT1ZFKSkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXRSR0IoMjM4LCAyMzgsIDIzOCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJlc3VsdCA9IHN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgcmVzdWx0ID0gY29s
b3IoKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xvciBSZW5kZXJTdHls
ZTo6dmlzaXRlZERlcGVuZGVudENvbG9yKGludCBjb2xvclByb3BlcnR5KSBjb25zdAorY29uc3Qg
Q29sb3IgUmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29sb3JQcm9wZXJ0
eSkgY29uc3QKIHsKICAgICBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUgPSBib3JkZXJTdHlsZUZv
ckNvbG9yUHJvcGVydHkodGhpcywgY29sb3JQcm9wZXJ0eSk7Ci0gICAgQ29sb3IgdW52aXNpdGVk
Q29sb3IgPSBjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKHRoaXMsIGNvbG9yUHJvcGVydHksIGJvcmRl
clN0eWxlKTsKKyAgICBDb2xvciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVkaW5nRmFsbGJh
Y2soY29sb3JQcm9wZXJ0eSwgYm9yZGVyU3R5bGUpOwogICAgIGlmIChpbnNpZGVMaW5rKCkgIT0g
SW5zaWRlVmlzaXRlZExpbmspCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKIAogICAg
IFJlbmRlclN0eWxlKiB2aXNpdGVkU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVE
X0xJTkspOwogICAgIGlmICghdmlzaXRlZFN0eWxlKQogICAgICAgICByZXR1cm4gdW52aXNpdGVk
Q29sb3I7Ci0gICAgQ29sb3IgdmlzaXRlZENvbG9yID0gY29sb3JJbmNsdWRpbmdGYWxsYmFjayh2
aXNpdGVkU3R5bGUsIGNvbG9yUHJvcGVydHksIGJvcmRlclN0eWxlKTsKKyAgICBDb2xvciB2aXNp
dGVkQ29sb3IgPSB2aXNpdGVkU3R5bGUtPmNvbG9ySW5jbHVkaW5nRmFsbGJhY2soY29sb3JQcm9w
ZXJ0eSwgYm9yZGVyU3R5bGUpOwogCiAgICAgLy8gVGFrZSB0aGUgYWxwaGEgZnJvbSB0aGUgdW52
aXNpdGVkIGNvbG9yLCBidXQgZ2V0IHRoZSBSR0IgdmFsdWVzIGZyb20gdGhlIHZpc2l0ZWQgY29s
b3IuCiAgICAgcmV0dXJuIENvbG9yKHZpc2l0ZWRDb2xvci5yZWQoKSwgdmlzaXRlZENvbG9yLmdy
ZWVuKCksIHZpc2l0ZWRDb2xvci5ibHVlKCksIHVudmlzaXRlZENvbG9yLmFscGhhKCkpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA1OTg3NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdGlvbkRpcmVjdGlv
bi5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CkBAIC0xMTMsNyArMTE0LDEzIEBAIGNsYXNzIFN0eWxlSW1hZ2U7CiB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8UmVuZGVyU3R5bGU+LCA0PiBQc2V1ZG9TdHlsZUNhY2hlOwogCiBjbGFzcyBSZW5kZXJT
dHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKLSAgICBmcmllbmQgY2xhc3Mg
Q1NTU3R5bGVTZWxlY3RvcjsKKyAgICBmcmllbmQgY2xhc3MgQW5pbWF0aW9uQmFzZTsgLy8gVXNl
ZCBieSBDU1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3QgYWxsb3cgdGhlbSB0byBhbmltYXRlIGJhc2Vk
IG9mZiB2aXNpdGVkIGNvbG9ycy4KKyAgICBmcmllbmQgY2xhc3MgQXBwbHlTdHlsZUNvbW1hbmQ7
IC8vIEVkaXRpbmcgaGFzIHRvIG9ubHkgcmV2ZWFsIHVudmlzaXRlZCBpbmZvLgorICAgIGZyaWVu
ZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCisgICAg
ZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsgLy8gSWdub3JlcyB2aXNp
dGVkIHN0eWxlcywgc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZWUgdW52aXNpdGVkIGluZm8uCisg
ICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yOyAvLyBVc2Vk
IGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQg
b2ZmIHZpc2l0ZWQgY29sb3JzLgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsg
Ly8gRklYTUU6IE5lZWRzIHRvIGFsdGVyIHRoZSB2aXNpdGVkIHN0YXRlIGJ5IGhhbmQuIFNob3Vs
ZCBjbGVhbiB0aGUgU1ZHIGNvZGUgdXAgYW5kIG1vdmUgaXQgaW50byBSZW5kZXJTdHlsZSBwZXJo
YXBzLgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJUcmVlQXNUZXh0OyAvLyBGSVhNRTogT25seSBu
ZWVkZWQgc28gdGhlIHJlbmRlciB0cmVlIGNhbiBrZWVwIGx5aW5nIGFuZCBkdW1wIHRoZSB3cm9u
ZyBjb2xvcnMuICBSZWJhc2VsaW5pbmcgd291bGQgYWxsb3cgdGhpcyB0byBiZSB5YW5rZWQuCiBw
cm90ZWN0ZWQ6CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGJpdGZpZWxkIGlzIDMyLWJpdHMgbG9u
Zywgd2hpY2ggb3B0aW1pemVzIHBhZGRpbmcgd2l0aCB0aGUKQEAgLTM0MSwxMiArMzQ4LDYgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5w
YWRkaW5nLm5vblplcm8oKTsgfQogICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPm9mZnNldC5ub25aZXJvKCk7IH0KIAotICAgIGJvb2wgaGFzQmFja2dyb3VuZCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpICYm
IGJhY2tncm91bmRDb2xvcigpLmFscGhhKCkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIHJldHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5oYXNJbWFnZSgpOwot
ICAgIH0KICAgICBib29sIGhhc0JhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2dyb3VuZC0+YmFja2dyb3VuZCgpLmhhc0ltYWdlKCk7IH0KICAgICBib29sIGhhc0ZpeGVkQmFj
a2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCku
aGFzRml4ZWRJbWFnZSgpOyB9CiAgICAgYm9vbCBoYXNBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gYXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQ7IH0KQEAgLTQwMSwxOSArNDAyLDE1IEBA
IHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHNob3J0IGJvcmRlckxlZnRXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyTGVmdFdpZHRoKCk7IH0KICAgICBFQm9yZGVy
U3R5bGUgYm9yZGVyTGVmdFN0eWxlKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5s
ZWZ0KCkuc3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJMZWZ0Q29sb3IoKSBjb25z
dCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQoKS5jb2xvcigpOyB9CiAgICAgYm9vbCBi
b3JkZXJMZWZ0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIu
bGVmdCgpLmlzVHJhbnNwYXJlbnQoKTsgfQogICAgIHVuc2lnbmVkIHNob3J0IGJvcmRlclJpZ2h0
V2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlclJpZ2h0V2lkdGgo
KTsgfQogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJSaWdodFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5yaWdodCgpLnN0eWxlKCk7IH0KLSAgICBjb25zdCBDb2xvciYgYm9y
ZGVyUmlnaHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmlnaHQoKS5j
b2xvcigpOyB9CiAgICAgYm9vbCBib3JkZXJSaWdodElzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBzdXJyb3VuZC0+Ym9yZGVyLnJpZ2h0KCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAgdW5z
aWduZWQgc2hvcnQgYm9yZGVyVG9wV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9y
ZGVyLmJvcmRlclRvcFdpZHRoKCk7IH0KICAgICBFQm9yZGVyU3R5bGUgYm9yZGVyVG9wU3R5bGUo
KSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpLnN0eWxlKCk7IH0KLSAgICBj
b25zdCBDb2xvciYgYm9yZGVyVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9y
ZGVyLnRvcCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlclRvcElzVHJhbnNwYXJlbnQoKSBj
b25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpLmlzVHJhbnNwYXJlbnQoKTsgfQog
ICAgIHVuc2lnbmVkIHNob3J0IGJvcmRlckJvdHRvbVdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vy
cm91bmQtPmJvcmRlci5ib3JkZXJCb3R0b21XaWR0aCgpOyB9CiAgICAgRUJvcmRlclN0eWxlIGJv
cmRlckJvdHRvbVN0eWxlKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b20o
KS5zdHlsZSgpOyB9Ci0gICAgY29uc3QgQ29sb3ImIGJvcmRlckJvdHRvbUNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b20oKS5jb2xvcigpOyB9CiAgICAgYm9vbCBi
b3JkZXJCb3R0b21Jc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRl
ci5ib3R0b20oKS5pc1RyYW5zcGFyZW50KCk7IH0KIAogICAgIHVuc2lnbmVkIHNob3J0IG91dGxp
bmVTaXplKCkgY29uc3QgeyByZXR1cm4gbWF4KDAsIG91dGxpbmVXaWR0aCgpICsgb3V0bGluZU9m
ZnNldCgpKTsgfQpAQCAtNDI2LDggKzQyMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc091dGxp
bmUoKSBjb25zdCB7IHJldHVybiBvdXRsaW5lV2lkdGgoKSA+IDAgJiYgb3V0bGluZVN0eWxlKCkg
PiBCSElEREVOOyB9CiAgICAgRUJvcmRlclN0eWxlIG91dGxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZC0+b3V0bGluZSgpLnN0eWxlKCk7IH0KICAgICBib29sIG91dGxpbmVT
dHlsZUlzQXV0bygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZC0+b3V0bGluZSgpLmlzQXV0
bygpOyB9Ci0gICAgY29uc3QgQ29sb3ImIG91dGxpbmVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2dyb3VuZC0+b3V0bGluZSgpLmNvbG9yKCk7IH0KLQorICAgIAogICAgIEVPdmVyZmxvdyBv
dmVyZmxvd1goKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFT3ZlcmZsb3c+KG5vbmluaGVy
aXRlZF9mbGFncy5fb3ZlcmZsb3dYKTsgfQogICAgIEVPdmVyZmxvdyBvdmVyZmxvd1koKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxFT3ZlcmZsb3c+KG5vbmluaGVyaXRlZF9mbGFncy5fb3Zl
cmZsb3dZKTsgfQogCkBAIC00NTEsNyArNDQ3LDYgQEAgcHVibGljOgogICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5m
b250LmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgaW50IGZvbnRTaXplKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250LnBpeGVsU2l6ZSgpOyB9CiAKLSAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmNvbG9yOyB9CiAgICAgTGVuZ3RoIHRleHRJ
bmRlbnQoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+aW5kZW50OyB9CiAgICAg
RVRleHRBbGlnbiB0ZXh0QWxpZ24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGV4dEFs
aWduPihpbmhlcml0ZWRfZmxhZ3MuX3RleHRfYWxpZ24pOyB9CiAgICAgRVRleHRUcmFuc2Zvcm0g
dGV4dFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0VHJhbnNmb3Jt
Pihpbmhlcml0ZWRfZmxhZ3MuX3RleHRfdHJhbnNmb3JtKTsgfQpAQCAtNTM1LDcgKzUzMCw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHdvcmRCcmVhaygpID09IEJyZWFrV29yZEJyZWFrIHx8
IHdvcmRXcmFwKCkgPT0gQnJlYWtXb3JkV3JhcDsKICAgICB9CiAKLSAgICBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5jb2xvcigpOyB9
CiAgICAgU3R5bGVJbWFnZSogYmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kLT5iYWNrZ3JvdW5kKCkuaW1hZ2UoKTsgfQogICAgIEVGaWxsUmVwZWF0IGJhY2tncm91
bmRSZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxSZXBlYXQ+KG1fYmFj
a2dyb3VuZC0+YmFja2dyb3VuZCgpLnJlcGVhdFgoKSk7IH0KICAgICBFRmlsbFJlcGVhdCBiYWNr
Z3JvdW5kUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVGaWxsUmVwZWF0Piht
X2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5yZXBlYXRZKCkpOyB9CkBAIC02MTYsOSArNjEwLDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3coKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNoYWRvdzsgfQotICAgIGNvbnN0
IENvbG9yJiB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0
YS0+dGV4dFN0cm9rZUNvbG9yOyB9CiAgICAgZmxvYXQgdGV4dFN0cm9rZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VXaWR0aDsgfQotICAgIGNvbnN0
IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEt
PnRleHRGaWxsQ29sb3I7IH0KICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxDb2xvclNwYWNlPihyYXJlSW5oZXJpdGVkRGF0YS0+Y29sb3JTcGFj
ZSk7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm9wYWNpdHk7IH0KICAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29udHJvbFBhcnQ+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Fw
cGVhcmFuY2UpOyB9CkBAIC02NjQsNyArNjU2LDYgQEAgcHVibGljOgogICAgIGJvb2wgc3BlY2lm
aWVzQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuICFoYXNBdXRvQ29sdW1uQ291bnQoKSB8fCAhaGFz
QXV0b0NvbHVtbldpZHRoKCk7IH0KICAgICBmbG9hdCBjb2x1bW5HYXAoKSBjb25zdCB7IHJldHVy
biByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9nYXA7IH0KICAgICBib29sIGhh
c05vcm1hbENvbHVtbkdhcCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X211bHRpQ29sLT5tX25vcm1hbEdhcDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2x1bW5SdWxlQ29s
b3IoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9y
dWxlLmNvbG9yKCk7IH0KICAgICBFQm9yZGVyU3R5bGUgY29sdW1uUnVsZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fcnVsZS5zdHlsZSgp
OyB9CiAgICAgdW5zaWduZWQgc2hvcnQgY29sdW1uUnVsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPnJ1bGVXaWR0aCgpOyB9CiAgICAgYm9v
bCBjb2x1bW5SdWxlSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX211bHRpQ29sLT5tX3J1bGUuaXNUcmFuc3BhcmVudCgpOyB9CkBAIC0xMTEyLDcg
KzExMDMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2hpbGRJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRJbmRleDsgfQogICAgIHZvaWQgc2V0Q2hpbGRJbmRleCh1bnNpZ25lZCBpbmRl
eCkgeyBtX2NoaWxkSW5kZXggPSBpbmRleDsgfQogCi0gICAgQ29sb3IgdmlzaXRlZERlcGVuZGVu
dENvbG9yKGludCBjb2xvclByb3BlcnR5KSBjb25zdDsKKyAgICBjb25zdCBDb2xvciB2aXNpdGVk
RGVwZW5kZW50Q29sb3IoaW50IGNvbG9yUHJvcGVydHkpIGNvbnN0OwogCiAgICAgLy8gSW5pdGlh
bCB2YWx1ZXMgZm9yIGFsbCB0aGUgcHJvcGVydGllcwogICAgIHN0YXRpYyBib29sIGluaXRpYWxC
b3JkZXJDb2xsYXBzZSgpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMjEyLDYgKzEyMDMsMjEgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiBp
bml0aWFsRGFzaGJvYXJkUmVnaW9ucygpOwogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8U3R5bGVE
YXNoYm9hcmRSZWdpb24+JiBub25lRGFzaGJvYXJkUmVnaW9ucygpOwogI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgLy8gQ29sb3IgYWNjZXNzb3JzIGFyZSBhbGwgcHJpdmF0ZSB0byBtYWtlIHN1cmUg
Y2FsbGVycyB1c2UgdmlzaXRlZERlcGVuZGVudENvbG9yIGluc3RlYWQgdG8gYWNjZXNzIHRoZW0u
CisgICAgY29uc3QgQ29sb3ImIGJvcmRlckxlZnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJv
dW5kLT5ib3JkZXIubGVmdCgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyUmln
aHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmlnaHQoKS5jb2xvcigp
OyB9CisgICAgY29uc3QgQ29sb3ImIGJvcmRlclRvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Vy
cm91bmQtPmJvcmRlci50b3AoKS5jb2xvcigpOyB9CisgICAgY29uc3QgQ29sb3ImIGJvcmRlckJv
dHRvbUNvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b20oKS5jb2xv
cigpOyB9CisgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2dyb3VuZC0+Y29sb3IoKTsgfQorICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+Y29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgY29sdW1uUnVs
ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wt
Pm1fcnVsZS5jb2xvcigpOyB9CisgICAgY29uc3QgQ29sb3ImIG91dGxpbmVDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZC0+b3V0bGluZSgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBD
b2xvciYgdGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50
ZXh0RmlsbENvbG9yOyB9CisgICAgY29uc3QgQ29sb3ImIHRleHRTdHJva2VDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KKyAgICAKKyAg
ICBjb25zdCBDb2xvciBjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKGludCBjb2xvclByb3BlcnR5LCBF
Qm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDU5ODc2
KQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwMiw3ICs1MDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0Rm9yQ3VycmVudENv
bG9yCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHRhcmdldFJlbmRl
cmVyID0gdGFyZ2V0LT5yZW5kZXJlcigpKQotICAgICAgICB2YWx1ZSA9IHRhcmdldFJlbmRlcmVy
LT5zdHlsZSgpLT5jb2xvcigpLm5hbWUoKTsKKyAgICAgICAgdmFsdWUgPSB0YXJnZXRSZW5kZXJl
ci0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLm5hbWUo
KTsKIH0KICAgICAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVy
dmFsKCkKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1OTkxNikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUtMjEgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQyMAor
CisgICAgICAgIE1ha2Ugc3VyZSBldmVyeW9uZSB3aG8gbmVlZHMgdG8gaXMgdXNpbmcgdmlzaXRl
ZERlcGVuZGVudENvbG9yIHJhdGhlciB0aGFuIGFjY2Vzc2luZyBzdHlsZXMKKyAgICAgICAgZGly
ZWN0bHkuCisKKyAgICAgICAgKiBNaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbToK
KyAgICAgICAgKCtbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJG
cmFtZSBfYm9keUJhY2tncm91bmRDb2xvcl0pOgorCiAyMDEwLTA1LTIwICBNaWtlIFRob2xlICA8
bXRob2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRl
eDogV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCShy
ZXZpc2lvbiA1OTg3NikKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDEyIEBAICsgKE5TQXR0cmli
dXRlZFN0cmluZyAqKV93ZWJfYXR0cmlidXRlZFMKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLT5mb250
KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CiAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChzdHls
ZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0
Om5zQ29sb3Ioc3R5bGUtPmNvbG9yKCkpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0
Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkg
Zm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIFthdHRycy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFthdHRycy5nZXQoKSByZW1vdmVPYmplY3RGb3JL
ZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKIApJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsNyArMTAzNyw3IEBAIC0gKE5TQ29sb3IgKilfYm9k
eUJhY2tncm91bmRDb2xvcgogICAgIFJlbmRlck9iamVjdCogYm9keVJlbmRlcmVyID0gYm9keS0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIWJvZHlSZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBDb2xvciBjb2xvciA9IGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9y
KCk7CisgICAgQ29sb3IgY29sb3IgPSBib2R5UmVuZGVyZXItPnN0eWxlKCktPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKCFjb2xvci5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIG5zQ29sb3IoY29sb3Ip
OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3NlbGYtaXMtdmlzaXRlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9zZWxmLWlzLXZpc2l0ZWQuaHRt
bAkocmV2aXNpb24gNTk4NzYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpc3Rvcnkvc2VsZi1pcy12
aXNpdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDcgQEAgZnVuY3Rpb24gY29t
cGFyZVN0eWxlcygpCiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAg
ICAgICB2YXIgZmlyc3RTdHlsZSA9IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5jb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uZScp
KTsKICAgICAgICAgdmFyIHNlY29uZFN0eWxlID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
LmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndHdvJykpOwotICAgICAgICBpZiAoZmlyc3RTdHlsZS5jb2xvciA9PSBzZWNvbmRTdHlsZS5j
b2xvcikgeworICAgICAgICBpZiAoZmlyc3RTdHlsZS5jb2xvciA9PSBzZWNvbmRTdHlsZS5jb2xv
ciB8fCBmaXJzdFN0eWxlLmJhY2tncm91bmRDb2xvciA9PSBzZWNvbmRTdHlsZS5iYWNrZ3JvdW5k
Q29sb3IpIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5p
bm5lckhUTUwgPSAnRkFJTCc7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE5
LDE1ICsxOSwxNSBAQCBmdW5jdGlvbiBjb21wYXJlU3R5bGVzKCkKICAgICAKICAgICB2YXIgZmly
c3RTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdvbmUnKSwgIiIpOwogICAgIHZhciBzZWNvbmRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKSwgIiIpOwotICAgIGlmIChmaXJzdFN0
eWxlLmNvbG9yICE9IHNlY29uZFN0eWxlLmNvbG9yKSB7CisgICAgaWYgKGZpcnN0U3R5bGUuY29s
b3IgIT0gc2Vjb25kU3R5bGUuY29sb3IgfHwgZmlyc3RTdHlsZS5iYWNrZ3JvdW5kQ29sb3IgIT0g
c2Vjb25kU3R5bGUuYmFja2dyb3VuZENvbG9yKSB7CiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUwgPSAnRkFJTCc7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiB9CiA8L3NjcmlwdD4KIDxzdHlsZT4KLTpsaW5rIHsgY29sb3I6IGdyZWVuIH0KLTp2aXNp
dGVkIHsgY29sb3I6IG9yYW5nZSB9Cis6bGluayB7IGNvbG9yOiBncmVlbjsgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGUgfQorOnZpc2l0ZWQgeyBjb2xvcjogb3JhbmdlOyBiYWNrZ3JvdW5kLWNvbG9y
OiBibGFjayB9CiA8L3N0eWxlPgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJjb21wYXJlU3R5bGVz
KCkiPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56681</attachid>
            <date>2010-05-21 01:22:27 -0700</date>
            <delta_ts>2010-05-21 02:20:21 -0700</delta_ts>
            <desc>New patch that should build on Chromium</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>82858</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ1IEBACisyMDEwLTA1LTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MjAsIDp2aXNpdGVkIG5vdCB3
b3JraW5nIHdpdGggYmFja2dyb3VuZC1jb2xvci4KKworICAgICAgICBNYWtlIHRoZSBSZW5kZXJT
dHlsZSBjb2xvciBhY2Nlc3NvcnMgcHJpdmF0ZS4gIFRoaXMgZm9yY2VzIGNhbGxlcnMgdG8gdXNl
IHZpc2l0ZWREZXBlbmRlbnRDb2xvcgorICAgICAgICBpbnN0ZWFkIChvciB0byBtYWtlIHRoZSBk
ZWNpc2lvbiB0byBiZWNvbWVzIGZyaWVuZHMgb2YgdGhlIFJlbmRlclN0eWxlIGNsYXNzIGluIG9y
ZGVyIHRvIGdldCBhY2Nlc3MKKyAgICAgICAgdG8gdGhlIHJlYWwgc3R5bGUgaW5mb3JtYXRpb24p
LgorCisgICAgICAgIE1vZGlmaWVkIGhpc3Rvcnkvc2VsZi1pcy12aXNpdGVkLmh0bWwgdG8gYWxz
byB0ZXN0IGJhY2tncm91bmQgY29sb3JzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNj
ZXNzaWJpbGl0eSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW06CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAg
ICAgICogY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRWRpdGluZ1N0eWxlVG9B
cHBseUF0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRDb2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzRGVsZXRhYmxlRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2FsY3VsYXRlU3R5bGVCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxl
U3BhbnNCZWZvcmVJbnNlcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpwYWlu
dENhcmV0KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVNYXJrdXApOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6ZW5zdXJlUHJvcGVydHlNYXAp
OgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKiBw
YWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3Jh
dGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tncm91bmRDb2xv
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lbnVMaXN0OjppdGVtQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lbnVMaXN0OjptZW51U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6YWRqdXN0Q29sb3JGb3JQc2V1ZG9S
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5n
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YmdDb2xvcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVudVN0eWxlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6Omlz
Q29udHJvbFN0eWxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclNW
R1RleHRCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dmlzaXRlZERlcGVuZGVudENvbG9yKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6aGFzQmFja2dyb3VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyTGVmdFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJSaWdodFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJUb3BTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyQm90dG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJp
dGVkRmxhZ3M6OnRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6aGFzTm9ybWFsQ29sdW1uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZs
YWdzOjpib3JkZXJMZWZ0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6
OmJvcmRlclJpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJv
cmRlclRvcENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJC
b3R0b21Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6YmFja2dyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpjb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Y29sdW1uUnVsZUNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvdXRsaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnRleHRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5o
ZXJpdGVkRmxhZ3M6OnRleHRTdHJva2VDb2xvcik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yQ3VycmVudENvbG9yKToK
KwogMjAxMC0wNS0xOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4Nyw2ICs5ODcsNyBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIwaXNTb2Z0d2FyZVJlbmRl
CiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzI4aXNFbmNsb3NlZEluQ29tcG9zaXRpbmdMYXllckV2
CiBfX1pOSzdXZWJDb3JlOVBhZ2VDYWNoZTEwZnJhbWVDb3VudEV2CiBfX1pOSzdXZWJDb3JlOVBh
Z2VDYWNoZTIxYXV0b3JlbGVhc2VkUGFnZUNvdW50RXYKK19fWk5LN1dlYkNvcmUxMVJlbmRlclN0
eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQogX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVu
dEUKIF9fWlRWTjdXZWJDb3JlMTJQbHVnaW5XaWRnZXRFCiBfX1pUVk43V2ViQ29yZTE3RmlsZUNo
b29zZXJDbGllbnRFCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmwKICAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlLT5zdHlsZSgpOwogICAgIGlmICghdGFibGVTdHlsZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIENvbG9yIHRhYmxlQkdDb2xvciA9IHRhYmxlU3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpOworICAgIENvbG9yIHRhYmxlQkdDb2xvciA9IHRhYmxlU3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgCiAg
ICAgLy8gY2hlY2sgZW5vdWdoIG9mIHRoZSBjZWxscyB0byBmaW5kIGlmIHRoZSB0YWJsZSBtYXRj
aGVzIG91ciBjcml0ZXJpYQogICAgIC8vIENyaXRlcmlhOiAKQEAgLTE2OSw3ICsxNjksNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIGlmIHRoZSBjZWxsIGhhcyBhIGRpZmZlcmVudCBjb2xvciBmcm9tIHRoZSB0
YWJsZSBhbmQgdGhlcmUgaXMgY2VsbCBzcGFjaW5nLAogICAgICAgICAgICAgLy8gdGhlbiBpdCBp
cyBwcm9iYWJseSBhIGRhdGEgdGFibGUgY2VsbCAoc3BhY2luZyBhbmQgY29sb3JzIHRha2UgdGhl
IHBsYWNlIG9mIGJvcmRlcnMpCi0gICAgICAgICAgICBDb2xvciBjZWxsQ29sb3IgPSByZW5kZXJT
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBDb2xvciBjZWxsQ29sb3IgPSBy
ZW5kZXJTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgICAgIGlmICh0YWJsZS0+aEJvcmRlclNwYWNpbmcoKSA+IDAgJiYgdGFi
bGUtPnZCb3JkZXJTcGFjaW5nKCkgPiAwCiAgICAgICAgICAgICAgICAgJiYgdGFibGVCR0NvbG9y
ICE9IGNlbGxDb2xvciAmJiBjZWxsQ29sb3IuYWxwaGEoKSAhPSAxKQogICAgICAgICAgICAgICAg
IGJhY2tncm91bmREaWZmZXJlbmNlQ2VsbENvdW50Kys7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJl
dmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDggKzMxNSw4IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCksIHJhbmdlKTsKIAogICAgIC8v
IHNldCBiYXNpYyBjb2xvcnMKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJp
bmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Io
c3R5bGUtPmNvbG9yKCkpLCByYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihh
dHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlCYWNrZ3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBu
c0NvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0
ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xv
clRleHRBdHRyaWJ1dGUsIG5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0
dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5z
Q29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikpLCByYW5nZSk7CiAKICAgICAvLyBzZXQgc3VwZXIvc3ViIHNjcmlwdGluZwogICAgIEVW
ZXJ0aWNhbEFsaWduIGFsaWdubWVudCA9IHN0eWxlLT52ZXJ0aWNhbEFsaWduKCk7CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDU5
ODc2KQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzc0LDggKzM3NCw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBnZXRQb3NpdGlvbk8KICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoQ1NTVmFsdWVBdXRvKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IENvbG9yJiBjb2xvcikKK1Bhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogeworICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9uLCBzbyB0aGF0IGNvbXB1dGVkIHN0
eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3Ioc3R5bGUtPmNvbG9yKCku
cmdiKCkpOwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IoY29sb3Iu
cmdiKCkpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDb2xvcjsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwor
Y2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBTaGFkb3dEYXRhOwogCiBlbnVtIEVVcGRh
dGVMYXlvdXQgeyBEb05vdFVwZGF0ZUxheW91dCA9IGZhbHNlLCBVcGRhdGVMYXlvdXQgPSB0cnVl
IH07CkBAIC02OSw3ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFk
b3coY29uc3QgU2hhZG93RGF0YSosIGludCkgY29uc3Q7Ci0KKyAgICBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBjb25z
dCBDb2xvciYpIGNvbnN0OworICAgIAogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUHNl
dWRvSWQgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyOwogICAgIGJvb2wgbV9hbGxvd1Zpc2l0ZWRT
dHlsZTsKSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCwxMyArOTAsMTMgQEAgc3RhdGljIGludCBhbmdsZVRvR2x5cGhPcmllbnRhdGlvbihm
bG9hdAogICAgIHJldHVybiAtMTsKIH0KIAotc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgQ29s
b3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENvbG9y
JiBmZ0NvbG9yKQogewogICAgIEFTU0VSVCh2YWx1ZS0+aXNTVkdDb2xvcigpKTsKICAgICBTVkdD
b2xvciogYyA9IHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpOwogICAgIENvbG9yIGNvbG9y
OwogICAgIGlmIChjLT5jb2xvclR5cGUoKSA9PSBTVkdDb2xvcjo6U1ZHX0NPTE9SVFlQRV9DVVJS
RU5UQ09MT1IpCi0gICAgICAgIGNvbG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIGNvbG9y
ID0gZmdDb2xvcjsKICAgICBlbHNlCiAgICAgICAgIGNvbG9yID0gYy0+Y29sb3IoKTsKICAgICBy
ZXR1cm4gY29sb3I7CkBAIC00NTQsMTMgKzQ1NCwxMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5U1ZHUHJvcGVydHkoCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdG9wQ29sb3I6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xv
ciwgU3RvcENvbG9yKTsKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JG
cm9tU1ZHQ29sb3JDU1NWYWx1ZSh2YWx1ZSwgbV9zdHlsZS5nZXQoKSkpOworICAgICAgICAgICAg
c3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHZhbHVlLCBt
X3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsK
LSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUodmFsdWUsIG1fc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUodmFsdWUsIG1fc3R5bGUt
PmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGbG9vZENvbG9yKFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmxvb2RDb2xvcigpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdmdzdHlsZS0+
c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHZhbHVlLCBtX3N0eWxlLmdl
dCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHZhbHVlLCBtX3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhv
cml6b250YWw6CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyBjb25zdCBpbnQgZWRpdGluZ1N0
eWxlUHJvcGVydGllc1sKIH07CiBzaXplX3QgbnVtRWRpdGluZ1N0eWxlUHJvcGVydGllcyA9IHNp
emVvZihlZGl0aW5nU3R5bGVQcm9wZXJ0aWVzKS9zaXplb2YoZWRpdGluZ1N0eWxlUHJvcGVydGll
c1swXSk7CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdT
dHlsZUF0UG9zaXRpb24oUG9zaXRpb24gcG9zLCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hv
dWxkSW5jbHVkZVR5cGluZ1N0eWxlKQorUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24g
cG9zLCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlKQog
ewogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVB
dFBvc2l0aW9uID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgcHJlcGFyZUVk
aXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXQKICAgICAvLyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6aGFuZGxlU3R5bGVTcGFucygpIHJlcXVpcmVzIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IHJl
bW92ZXMgdGhlIGVkaXRpbmcgc3R5bGUuCiAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiB3YXMgbW9k
aWZpZWQgaW4gdGhlIGZ1dHVyZSB0byBkZWxldGUgYWxsIHJlZHVuZGFudCBwcm9wZXJ0aWVzLCB0
aGVuIGFkZCBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUKICAgICAvLyB3aGljaCBvbmUgb2Yg
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiBvciBjb21wdXRlZFN0eWxlIGlzIGNhbGxlZC4KLSAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihwb3MpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3MpOwogICAg
IHN0eWxlLT5kaWZmKGVkaXRpbmdTdHlsZSk7CiAKICAgICAvLyBpZiBhbHBoYSB2YWx1ZSBpcyB6
ZXJvLCB3ZSBkb24ndCBhZGQgdGhlIGJhY2tncm91bmQgY29sb3IuCkBAIC00NzIsOCArNDcyLDgg
QEAgdm9pZCByZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlUwogewogICAgIEFTU0VS
VChub2RlKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKLSAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3Np
dGlvbihQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIDApKTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3Np
dGlvbihub2RlLCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBw
YXJlbnRTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBv
c2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihQb3NpdGlvbihub2RlLCAwKSk7CiAgICAgcGFyZW50U3R5bGUtPmRpZmYoc3R5bGUu
Z2V0KCkpOwogICAgIHN0eWxlLT5kaWZmKGVkaXRpbmdTdHlsZSk7CiB9CkBAIC0xNzU3LDEwICsx
NzU3LDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY28KICAgICBz
ZXROb2RlQXR0cmlidXRlKGJsb2NrLCBzdHlsZUF0dHIsIGNzc1RleHQpOwogfQogCi1zdGF0aWMg
Ym9vbCBmb250Q29sb3JDaGFuZ2VzQ29tcHV0ZWRTdHlsZShSZW5kZXJTdHlsZSogY29tcHV0ZWRT
dHlsZSwgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2UpCitzdGF0aWMgYm9vbCBmb250Q29sb3JDaGFu
Z2VzQ29tcHV0ZWRTdHlsZShjb25zdCBDb2xvciYgY29tcHV0ZWRTdHlsZUNvbG9yLCBTdHlsZUNo
YW5nZSBzdHlsZUNoYW5nZSkKIHsKICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29sb3Io
KSkgewotICAgICAgICBpZiAoQ29sb3Ioc3R5bGVDaGFuZ2UuZm9udENvbG9yKCkpICE9IGNvbXB1
dGVkU3R5bGUtPmNvbG9yKCkpCisgICAgICAgIGlmIChDb2xvcihzdHlsZUNoYW5nZS5mb250Q29s
b3IoKSkgIT0gY29tcHV0ZWRTdHlsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MDEsNyArMTgwMSw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWYKICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRv
IGluc2VydCBhIGZvbnQgZWxlbWVudCBpZiBpdCB3aWxsIGVuZCB1cCBjaGFuZ2luZyB0aGUgc3R5
bGUgb2YgdGhlCiAgICAgICAgIC8vIHRleHQgc29tZWhvdy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUg
YSBnYXJiYWdlIG5vZGUgdGhhdCB3aWxsIGNyZWF0ZSBwcm9ibGVtcyBmb3IgdXMKICAgICAgICAg
Ly8gbW9zdCBub3RhYmx5IHdoZW4gd2UgYXBwbHkgYSBibG9ja3F1b3RlIHN0eWxlIGZvciBhIG1l
c3NhZ2UgcmVwbHkuCi0gICAgICAgIGlmIChmb250Q29sb3JDaGFuZ2VzQ29tcHV0ZWRTdHlsZShj
b21wdXRlZFN0eWxlLCBzdHlsZUNoYW5nZSkKKyAgICAgICAgaWYgKGZvbnRDb2xvckNoYW5nZXND
b21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgc3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAgICAgfHwgZm9udEZhY2VDaGFu
Z2VzQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlLCBzdHlsZUNoYW5nZSkKICAgICAgICAgICAg
ICAgICB8fCBmb250U2l6ZUNoYW5nZXNDb21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUsIHN0eWxl
Q2hhbmdlKSkgewogICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkp
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsMTEgQEAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBIVE1MRWxlbWVu
dDsKIGNsYXNzIFN0eWxlQ2hhbmdlOwogCitlbnVtIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSB7
CisgICAgSW5jbHVkZVR5cGluZ1N0eWxlLAorICAgIElnbm9yZVR5cGluZ1N0eWxlCit9OworCiBj
bGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBw
dWJsaWM6CiAgICAgZW51bSBFUHJvcGVydHlMZXZlbCB7IFByb3BlcnR5RGVmYXVsdCwgRm9yY2VC
bG9ja1Byb3BlcnRpZXMgfTsKQEAgLTUwLDYgKzU1LDggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxlQ29tbWFuZChlbGVtZW50LCByZW1vdmVP
bmx5LCBhY3Rpb24pKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24gcG9z
LCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlID0gSWdu
b3JlVHlwaW5nU3R5bGUpOwogCiBwcml2YXRlOgogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsK
QEAgLTExNywxMiArMTI0LDYgQEAgYm9vbCBpc1N0eWxlU3Bhbihjb25zdCBOb2RlKik7CiBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50Kik7CiBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1
dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbiogY29tcHV0ZWRTdHlsZSk7CiAKLWVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxl
IHsKLSAgICBJbmNsdWRlVHlwaW5nU3R5bGUsCi0gICAgSWdub3JlVHlwaW5nU3R5bGUKLX07Ci0K
LVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUF0UG9z
aXRpb24oUG9zaXRpb24sIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSA9IElnbm9yZVR5cGluZ1N0
eWxlKTsKIHZvaWQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIFBvc2l0aW9uKTsKIHZvaWQgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDAsNyAr
OTQwLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8v
IHRvbywgPGRpdj48Yj48YnI+PC9iPjwvZGl2PiBmb3IgZXhhbXBsZS4gIFNhdmUgaXQgc28gdGhh
dCB3ZSBjYW4gcHJlc2VydmUgaXQgbGF0ZXIuCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZUluRW1wdHlQYXJhZ3JhcGg7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUgPT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUgJiYgcHJlc2VydmVTdHlsZSkgewotICAg
ICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGggPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsK
KyAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRp
bmdTdHlsZUF0UG9zaXRpb24oc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogICAgICAgICAvLyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNo
b3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBkZXN0aW5hdGlvbi4KICAgICAgICAg
c3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB9CkBA
IC0xMDAzLDcgKzEwMDMsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9m
RW1wCiAgICAgaWYgKCFlbXB0eUxpc3RJdGVtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZWRpdGluZ1N0eWxl
QXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUp
OworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0
eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogCiAgICAgTm9kZSogbGlzdE5vZGUgPSBlbXB0eUxp
c3RJdGVtLT5wYXJlbnROb2RlKCk7CiAgICAgLy8gRklYTUU6IENhbid0IHdlIGRvIHNvbWV0aGlu
ZyBiZXR0ZXIgd2hlbiB0aGUgaW1tZWRpYXRlIHBhcmVudCB3YXNuJ3QgYSBsaXN0IG5vZGU/Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxl
RWxlbWVudChjb25zdCBOb2QKICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoc3R5bGUtPmhhc0JhY2tncm91bmQoKSAmJiAo
IXBhcmVudFN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgfHwgc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
ICE9IHBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSkpCisgICAgICAgIGlmIChyZW5kZXJl
ci0+aGFzQmFja2dyb3VuZCgpICYmICghcGFyZW50UmVuZGVyZXItPmhhc0JhY2tncm91bmQoKSB8
fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSAhPSBwYXJlbnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2
KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5
cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUgaXMgZG9uZS4KLSAgICBtX3R5
cGluZ1N0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZVRhYlNwYW4o
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CisgICAgbV90eXBpbmdTdHlsZSA9IEFwcGx5
U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlVGFiU3Bh
bihtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsKIAogICAgIHJlbW92ZUVuY2xvc2luZ0Fu
Y2hvclN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAKICAgICAvLyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBz
YXZlIHRoZSBzdHlsZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1
c2UgdGhpcyBsYXRlciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQg
dXAgb3V0c2lkZSBvZiBhIE1haWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2Nr
cXVvdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgIG1fZGVs
ZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24obV9zZWxlY3Rp
b25Ub0RlbGV0ZS5lbmQoKSk7CisgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9
IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKG1fc2VsZWN0aW9uVG9E
ZWxldGUuZW5kKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0
eWxlID0gMDsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2EK
ICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAmJiAhaXNFbmRPZlBhcmFn
cmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fc3R5bGUgPSBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvcywgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICBtX3N0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zLCBJbmNs
dWRlVHlwaW5nU3R5bGUpOwogfQogCiB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQ6OmFwcGx5U3R5bGVBZnRlckluc2VydGlvbihOb2RlKiBvcmlnaW5hbEVuY2xvc2luZ0Jsb2Nr
KQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24g
NTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIHRoaXMgZWRpdGFibGUgcm9v
dCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSdsbCBnaXZlIHRoZQogICAgIC8vIGNvbnRlbnQgdGhh
dCB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAgTm9kZSogcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihy
b290LCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0
U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihyb290LCAwKSk7CiAKICAgICAvLyBEZWxldGUgdGhlIHNlbGVjdGVkIGNvbnRlbnQuCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGxlYXZlIHRoaXMgdG8gaW5zZXJ0VGV4dCwg
YnV0IGl0cyBkZWxldGUgb3BlcmF0aW9uCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDcgKzU3
Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnQKICAgICBOb2Rl
KiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiA9IHRvcE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IGNv
cGllZFJhbmdlU3R5bGVTcGFuID0gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4tPmZpcnN0Q2hpbGQo
KTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVBdEluc2Vy
dGlvblBvcyA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KGluc2VydGlvblBvcykpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
c3R5bGVBdEluc2VydGlvblBvcyA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBv
c2l0aW9uKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChpbnNlcnRpb25Qb3MpKTsKIAogICAgIFN0
cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5jc3NUZXh0KCk7CiAgICAgCkBA
IC02MzQsOCArNjM0LDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5
bAogICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJy
aWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80
OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgogICAgIE5vZGUqIGJsb2NrcXVv
dGVOb2RlID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDog
bmVhcmVzdE1haWxCbG9ja3F1b3RlKGNvbnRleHQpOwogICAgIGlmIChibG9ja3F1b3RlTm9kZSkg
ewotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrcXVvdGVT
dHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUsIDAp
KTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHls
ZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUtPnBhcmVu
dE5vZGUoKSwgMCkpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGJsb2NrcXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0
aW9uKFBvc2l0aW9uKGJsb2NrcXVvdGVOb2RlLCAwKSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRp
dGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihibG9ja3F1b3RlTm9kZS0+cGFyZW50Tm9kZSgp
LCAwKSk7CiAgICAgICAgIHBhcmVudFN0eWxlLT5kaWZmKGJsb2NrcXVvdGVTdHlsZS5nZXQoKSk7
CiAKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGJsb2NrcXVvdGVTdHlsZS0+ZW5kKCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAobV9tYXRjaFN0eWxlKQotICAgICAgICBtX2luc2VydGlvblN0eWxlID0gZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAg
ICAgICAgbV9pbnNlcnRpb25TdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVB
dFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogICAgIAog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwODIsNyArMTA4Miw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6cGFpbnRDYXJldChHcmEKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBEZXZpY2VDb2xv
clNwYWNlOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByb290RWRpdGFibGVFbGVtZW50KCk7CiAg
ICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBjYXJldENv
bG9yID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgY2Fy
ZXRDb2xvciA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmdlKiByYW5nZSwgCiAgICAgLy8gQWRkIGEgd3JhcHBlciBzcGFuIHdpdGggdGhlIHN0eWxl
cyB0aGF0IGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIG1hcmt1cCBpbmhlcml0LgogICAgIE5vZGUq
IHBhcmVudE9mTGFzdENsb3NlZCA9IGxhc3RDbG9zZWQgPyBsYXN0Q2xvc2VkLT5wYXJlbnROb2Rl
KCkgOiAwOwogICAgIGlmIChwYXJlbnRPZkxhc3RDbG9zZWQgJiYgcGFyZW50T2ZMYXN0Q2xvc2Vk
LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKHBhcmVudE9mTGFzdENs
b3NlZCwgMCkpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24o
cGFyZW50T2ZMYXN0Q2xvc2VkLCAwKSk7CiAKICAgICAgICAgLy8gU3R5bGVzIHRoYXQgTWFpbCBi
bG9ja3F1b3RlcyBjb250cmlidXRlIHNob3VsZCBvbmx5IGJlIHBsYWNlZCBvbiB0aGUgTWFpbCBi
bG9ja3F1b3RlLCB0byBoZWxwCiAgICAgICAgIC8vIHVzIGRpZmZlcmVudGlhdGUgdGhvc2Ugc3R5
bGVzIGZyb20gb25lcyB0aGF0IHRoZSB1c2VyIGhhcyBhcHBsaWVkLiAgVGhpcyBoZWxwcyB1cwpA
QCAtMTA0Miw3ICsxMDQyLDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFu
Z2UsIAogICAgICAgICAvLyBBZGQgYSBzdHlsZSBzcGFuIHdpdGggdGhlIGRvY3VtZW50J3MgZGVm
YXVsdCBzdHlsZXMuICBXZSBhZGQgdGhlc2UgaW4gYSBzZXBhcmF0ZQogICAgICAgICAvLyBzcGFu
IHNvIHRoYXQgYXQgcGFzdGUgdGltZSB3ZSBjYW4gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGRvY3Vt
ZW50IGRlZmF1bHRzIGFuZCB1c2VyCiAgICAgICAgIC8vIGFwcGxpZWQgc3R5bGVzLgotICAgICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRTdHlsZSA9IGVkaXRp
bmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAw
KSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24o
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRT
dHlsZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgYWRkU3R5bGVNYXJrdXAocHJlTWFya3Vw
cywgbWFya3VwcywgZGVmYXVsdFN0eWxlLmdldCgpLCBkb2N1bWVudCk7CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgZ1Byb3BlcnR5V3JhcHBlck1hcFtudW1DU1NQcm8K
IHN0YXRpYyBjb25zdCBpbnQgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IC0xOwogCiAK
LXN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6ZW5z
dXJlUHJvcGVydHlNYXAoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVz
dHJveWVkLiBNYXliZSB3ZSBzaG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhl
IGxhc3QgQW5pbWF0aW9uQ29udHJvbGxlciBpcyBkZXN0cm95ZWQ/CiAgICAgaWYgKGdQcm9wZXJ0
eVdyYXBwZXJzID09IDApIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKGludCBwcm9wKTsKICNl
bmRpZgogCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCk7CisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9t
YWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFt
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDA3LDE0ICs0MDcsMTQgQEAgTlNEaWN0aW9uYXJ5
KiBGcmFtZTo6Zm9udEF0dHJpYnV0ZXNGb3JTZQogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSog
cmVzdWx0ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CiAKLSAgICBpZiAoc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9y
KCkuYWxwaGEoKSAhPSAwKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxl
LT5iYWNrZ3JvdW5kQ29sb3IoKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07CisgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9IDApCisgICAgICAgIFtyZXN1bHQg
c2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwogCiAgICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCkpCiAg
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0
TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5j
b2xvcigpLmlzVmFsaWQoKSAmJiBzdHlsZS0+Y29sb3IoKSAhPSBDb2xvcjo6YmxhY2spCi0gICAg
ICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmNvbG9yKCkpIGZvcktleTpOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IENvbG9yOjpibGFjaykKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
IAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAg
ICAgaWYgKHNoYWRvdykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUmVuZGVyT2Jq
ZWN0OjpQYQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0OwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RM
aW5lKTsKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICBDb2xvciB0
ZXh0Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCiAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogICAg
IGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CkBAIC03OCw3ICs3OCw3IEBAIEludFJlY3QgRWxsaXBz
aXNCb3g6OnNlbGVjdGlvblJlY3QoaW50IHQKIAogdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxl
Y3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewotICAgIENvbG9yIHRleHRDb2xvciA9IHN0
eWxlLT5jb2xvcigpOworICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9IG1fcmVuZGVyZXItPnNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogICAgIGlmICghYy5pc1ZhbGlkKCkgfHwgIWMuYWxw
aGEoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw5ICs0NTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3Ryb2tlV2lk
dGggPSBzdHJva2VXaWR0aDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ29sb3Igc3Ry
b2tlID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJsYWNrIDogcHNldWRvU3R5
bGUtPnRleHRTdHJva2VDb2xvcigpOwotICAgICAgICAgICAgaWYgKCFzdHJva2UuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHN0cm9rZSA9IHBzZXVkb1N0eWxlLT5jb2xvcigpOworICAgICAg
ICAgICAgQ29sb3Igc3Ryb2tlID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJs
YWNrIDogcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTdHJva2VDb2xvcik7CiAgICAgICAgICAgICBpZiAoc3Ryb2tlICE9IHNlbGVjdGlvblN0
cm9rZUNvbG9yKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkp
CiAgICAgICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRydWU7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3
IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKIAogICAgIC8vIFNl
dCB0aGUgdGV4dCBjb2xvciBpZiB3ZSdyZSB0aGUgYm9keS4KICAgICBpZiAoaXNCb2R5KCkpCi0g
ICAgICAgIGRvY3VtZW50KCktPnNldFRleHRDb2xvcihzdHlsZSgpLT5jb2xvcigpKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0VGV4dENvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVCb3hNb2Rl
bEluZm9Gcm9tU3R5bGUoKQpAQCAtNTc3LDkgKzU3Nyw5IEBAIHZvaWQgUmVuZGVyQm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW4KIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgY29uc3Qg
RmlsbExheWVyKiBiZ0xheWVyID0gc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpOwotICAgIENv
bG9yIGJnQ29sb3IgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAwOwotICAgIGlmICghc3R5
bGUoKS0+aGFzQmFja2dyb3VuZCgpICYmIG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sVGFnKSkgeworICAgIGlmICghaGFzQmFja2dyb3VuZCgpICYmIG5vZGUoKSAm
JiBub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkgewogICAgICAgICAvLyBM
b2NhdGUgdGhlIDxib2R5PiBlbGVtZW50IHVzaW5nIHRoZSBET00uICBUaGlzIGlzIGVhc2llciB0
aGFuIHRyeWluZwogICAgICAgICAvLyB0byBjcmF3bCBhcm91bmQgYSByZW5kZXIgdHJlZSB3aXRo
IHBvdGVudGlhbCA6YmVmb3JlLzphZnRlciBjb250ZW50IGFuZAogICAgICAgICAvLyBhbm9ueW1v
dXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdlIGNhbiBsb2Nh
dGUgdGhlIDxib2R5PgpAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJv
b3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmhh
c0xvY2FsTmFtZShib2R5VGFnKSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKICAgICAgICAgaWYg
KGJvZHlPYmplY3QpIHsKICAgICAgICAgICAgIGJnTGF5ZXIgPSBib2R5T2JqZWN0LT5zdHlsZSgp
LT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9iamVjdC0+
c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9i
amVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjQ5LDggKzY0OSw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpwYWludEJveERlY29yYXRpb25zV2l0aFMKICAgICAgICAgLy8gVGhlIDxib2R5PiBv
bmx5IHBhaW50cyBpdHMgYmFja2dyb3VuZCBpZiB0aGUgcm9vdCBlbGVtZW50IGhhcyBkZWZpbmVk
IGEgYmFja2dyb3VuZAogICAgICAgICAvLyBpbmRlcGVuZGVudCBvZiB0aGUgYm9keS4gIEdvIHRo
cm91Z2ggdGhlIERPTSB0byBnZXQgdG8gdGhlIHJvb3QgZWxlbWVudCdzIHJlbmRlciBvYmplY3Qs
CiAgICAgICAgIC8vIHNpbmNlIHRoZSByb290IGNvdWxkIGJlIGlubGluZSBhbmQgd3JhcHBlZCBp
biBhbiBhbm9ueW1vdXMgYmxvY2suCi0gICAgICAgIGlmICghaXNCb2R5KCkgfHwgZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0JhY2tncm91bmQo
KSkKLSAgICAgICAgICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIHN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIHR4LCB0eSwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGlmICghaXNCb2R5KCkgfHwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCktPnJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHBhaW50
RmlsbExheWVycyhwYWludEluZm8sIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgs
IHR5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkKICAgICAgICAgICAgIHRoZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZv
LCBJbnRSZWN0KHR4LCB0eSwgd2lkdGgsIGhlaWdodCkpOwogICAgIH0KQEAgLTc5Niw3ICs3OTYs
NyBAQCBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgICAgICAg
ICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgaW1hZ2UgaXMgYmVpbmcgdXNlZCwgY29tcHV0ZSB0
aGUgcmVuZGVyZXIgYW5kIHRoZSByZWN0CiAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGFs
cmVhZHkKICAgICAgICAgICAgIGlmICghbGF5ZXJSZW5kZXJlcikgewotICAgICAgICAgICAgICAg
IGJvb2wgZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kID0gZHJhd2luZ0JhY2tncm91bmQgJiYgKGlzUm9v
dCgpIHx8IChpc0JvZHkoKSAmJiAhZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmhhc0JhY2tncm91bmQoKSkpOworICAgICAgICAgICAgICAgIGJvb2wg
ZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kID0gZHJhd2luZ0JhY2tncm91bmQgJiYgKGlzUm9vdCgpIHx8
IChpc0JvZHkoKSAmJiAhZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkt
Pmhhc0JhY2tncm91bmQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tn
cm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IHZpZXcoKTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojp1cGRhdGVCb3hNb2RlCiB7CiAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBiaXRzIGZv
ciBhIGJveCBtb2RlbCBvYmplY3QuICBTaW5jZSBhbGwgYml0cyBhcmUgY2xlYXJlZCBpbiBzdHls
ZVdpbGxDaGFuZ2UsCiAgICAgLy8gd2Ugb25seSBjaGVjayBmb3IgYml0cyB0aGF0IGNvdWxkIHBv
c3NpYmx5IGJlIHNldCB0byB0cnVlLgotICAgIHNldEhhc0JveERlY29yYXRpb25zKHN0eWxlKCkt
Pmhhc0JvcmRlcigpIHx8IHN0eWxlKCktPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZSgpLT5oYXNB
cHBlYXJhbmNlKCkgfHwgc3R5bGUoKS0+Ym94U2hhZG93KCkpOworICAgIHNldEhhc0JveERlY29y
YXRpb25zKGhhc0JhY2tncm91bmQoKSB8fCBzdHlsZSgpLT5oYXNCb3JkZXIoKSB8fCBzdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkgfHwgc3R5bGUoKS0+Ym94U2hhZG93KCkpOwogICAgIHNldElubGlu
ZShzdHlsZSgpLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkpOwogICAgIHNldFJlbFBvc2l0aW9uZWQo
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKTsKIH0KQEAgLTEzMjEsNyAr
MTMyMSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAg
ICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90
dG9tKCkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzT3BhcXVlQmFja2dyb3VuZCA9IHMtPmJhY2tn
cm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBzLT5iYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpID09
IDI1NTsKKyAgICBib29sIGhhc09wYXF1ZUJhY2tncm91bmQgPSBzLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgPT0gMjU1
OwogICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcy0+Ym94U2hhZG93KCk7IHNo
YWRvdzsgc2hhZG93ID0gc2hhZG93LT5uZXh0KCkpIHsKICAgICAgICAgaWYgKHNoYWRvdy0+c3R5
bGUoKSAhPSBzaGFkb3dTdHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYs
NyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zCiAKICAgICBwYWlu
dEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBOb3Jt
YWwpOwogCi0gICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+YmFja2dyb3Vu
ZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKKyAg
ICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJz
KCksIHR4LCB0eSwgdywgaCk7CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgdywgaCwgc3R5bGUoKSwgSW5zZXQpOwogCiAgICAgaWYgKCFzdHlsZSgpLT5oYXNC
b3JkZXIoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAgICAgKyBidXR0
b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBi
dXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpCiAgICAgICAgICAgICArIGJ1dHRvblJlbmRlcmVy
LT5iYXNlbGluZVBvc2l0aW9uKHRydWUsIGZhbHNlKTsKIAotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCktPmNvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgICAgICAKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmRyYXdCaWRpVGV4dChzdHlsZSgpLT5mb250KCksIHRleHRSdW4sIElu
dFBvaW50KHRleHRYLCB0ZXh0WSkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNl
dDo6cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgQ29sb3JTcGFjZSBjb2xv
clNwYWNlID0gc3R5bGUoKS0+Y29sb3JTcGFjZSgpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJv
cmRlclJlY3QsIGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJM
ZWZ0Q29sb3IoKSA6IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICBjb250ZXh0
LT5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigpID8gc3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6
IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICAKICAgICAvLyBOb3cgc3Ryb2tl
IHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGgg
ZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5n
IHRocm91Z2guCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRS
b3dCb3JkZXIoY29ucwogICAgIC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0g
c3R5bGUoKS0+Y29sb3JTcGFjZSgpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3Qs
IGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3Io
KSA6IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICBjb250ZXh0LT5maWxsUmVj
dChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZp
bGxDb2xvcigpLCBjb2xvclNwYWNlKTsKIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1
dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEg
bGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3
LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAgICAgICAg
ICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcg
dGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRU
ZXh0KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29s
b3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgICAgIGludCBheCA9IHR4
ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7CiAgICAgICAgICAgICAgICAgaW50IGF5ID0gdHkgKyB0
b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBib29sIGhhc0JvcmRl
ck91dGxpbmVPclNoYWRvdyhjb25zdCBSZW5kZXJTdHlsZSopOwotc3RhdGljIGJvb2wgaGFzQm94
RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyU3R5bGUqKTsKK3N0YXRpYyBib29s
IGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVjdCopOwogc3Rh
dGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5kZXJT
dHlsZSopOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXMzRENhbnZhcyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQpAQCAtNTMzLDkgKzUzMyw5IEBAIHN0YXRpYyBib29sIGhhc0JvcmRlck91dGxpbmVP
clNoYWRvdyhjb24KICAgICByZXR1cm4gc3R5bGUtPmhhc0JvcmRlcigpIHx8IHN0eWxlLT5oYXNC
b3JkZXJSYWRpdXMoKSB8fCBzdHlsZS0+aGFzT3V0bGluZSgpIHx8IHN0eWxlLT5oYXNBcHBlYXJh
bmNlKCkgfHwgc3R5bGUtPmJveFNoYWRvdygpOwogfQogCi1zdGF0aWMgYm9vbCBoYXNCb3hEZWNv
cmF0aW9uc09yQmFja2dyb3VuZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgYm9v
bCBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIHJldHVybiBoYXNCb3JkZXJPdXRsaW5lT3JTaGFkb3coc3R5bGUpIHx8IHN0
eWxlLT5oYXNCYWNrZ3JvdW5kKCk7CisgICAgcmV0dXJuIGhhc0JvcmRlck91dGxpbmVPclNoYWRv
dyhyZW5kZXJlci0+c3R5bGUoKSkgfHwgcmVuZGVyZXItPmhhc0JhY2tncm91bmQoKTsKIH0KIAog
c3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpCkBAIC01NTEsMzYgKzU1MSwzMiBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6cmVuZGVyZXJIYXNCYWNrCiAgICAgICAgIGlmICghaHRtbE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IGh0bWxPYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZS0+aGFzQmFja2dyb3VuZCgp
KQorICAgICAgICBpZiAoaHRtbE9iamVjdC0+aGFzQmFja2dyb3VuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3Qg
PSBodG1sT2JqZWN0LT5maXJzdENoaWxkKCk7CiAgICAgICAgIGlmICghYm9keU9iamVjdCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIHN0eWxlID0gYm9keU9i
amVjdC0+c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5oYXNCYWNrZ3JvdW5kKCk7Cisg
ICAgICAgIHJldHVybiBib2R5T2JqZWN0LT5oYXNCYWNrZ3JvdW5kKCk7CiAgICAgfQogICAgIAot
ICAgIHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCk7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKTsKIH0KIAotY29uc3QgQ29sb3ImIFJlbmRl
ckxheWVyQmFja2luZzo6cmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorY29uc3QgQ29s
b3IgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IHNoYXJlIG1vcmUgY29kZSBoZXJlCiAgICAgaWYgKHJlbmRlcmVyKCkt
Pm5vZGUoKSAmJiByZW5kZXJlcigpLT5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBodG1sT2JqZWN0ID0gcmVuZGVyZXIoKS0+Zmlyc3RDaGlsZCgpOwot
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBodG1sT2JqZWN0LT5zdHlsZSgpOwotICAgICAg
ICBpZiAoc3R5bGUtPmhhc0JhY2tncm91bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZS0+
YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGlmIChodG1sT2JqZWN0LT5oYXNCYWNrZ3JvdW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gaHRtbE9iamVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgICAgICBSZW5kZXJP
YmplY3QqIGJvZHlPYmplY3QgPSBodG1sT2JqZWN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHN0
eWxlID0gYm9keU9iamVjdC0+c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5iYWNrZ3Jv
dW5kQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIGJvZHlPYmplY3QtPnN0eWxlKCktPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOworICAgIHJldHVy
biByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpOwogfQogCiAvLyBBICJzaW1wbGUgY29udGFpbmVyIGxheWVyIiBpcyBh
IFJlbmRlckxheWVyIHdoaWNoIGhhcyBubyB2aXNpYmxlIGNvbnRlbnQgdG8gcmVuZGVyLgpAQCAt
NTk4LDcgKzU5NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRhaW4K
ICAgICAvLyBSZWplY3QgYW55dGhpbmcgdGhhdCBoYXMgYSBib3JkZXIsIGEgYm9yZGVyLXJhZGl1
cyBvciBvdXRsaW5lLAogICAgIC8vIG9yIGFueSBiYWNrZ3JvdW5kIChjb2xvciBvciBpbWFnZSku
CiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIG9wdGltaXplIGxheWVycyBmb3Igc2ltcGxlIGJhY2tn
cm91bmRzLgotICAgIGlmIChoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChzdHlsZSkpCisg
ICAgaWYgKGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlck9iamVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIGhhdmUgZ290IHRoaXMgZmFyIGFuZCB0
aGUgcmVuZGVyZXIgaGFzIG5vIGNoaWxkcmVuLCB0aGVuIHdlJ3JlIG9rLgpAQCAtNzA4LDcgKzcw
NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWQKICAgICAvLyBG
SVhNRTogd2UgY291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgdGhlIGltYWdlLCB2aWRlbyBvciBj
YW52YXMgaXMga25vd24gdG8gZmlsbCB0aGUgYm9yZGVyIGJveCBlbnRpcmVseSwKICAgICAvLyBh
bmQgc2V0IGJhY2tncm91bmQgY29sb3Igb24gdGhlIGxheWVyIGluIHRoYXQgY2FzZSwgaW5zdGVh
ZCBvZiBhbGxvY2F0aW5nIGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nLgogICAgIGlmIChyZW5k
ZXJlcigpLT5pc1ZpZGVvKCkgfHwgaXMzRENhbnZhcyhyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0
dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCktPnN0eWxlKCkpOwor
ICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxOCw3ICs3MTQsNyBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QgPSByZW5kZXJlcigpOwotICAgIHJldHVybiByZW5kZXJPYmplY3QtPmlzSW1hZ2Uo
KSAmJiAhaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyT2JqZWN0LT5zdHlsZSgp
KTsKKyAgICByZXR1cm4gcmVuZGVyT2JqZWN0LT5pc0ltYWdlKCkgJiYgIWhhc0JveERlY29yYXRp
b25zT3JCYWNrZ3JvdW5kKHJlbmRlck9iamVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHVwZGF0ZUltYWdlQ29udGVudHMoKTsKIAogICAgIGJvb2wgcmVuZGVy
ZXJIYXNCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgY29uc3QgQ29sb3ImIHJlbmRlcmVyQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgY29uc3QgQ29sb3IgcmVuZGVyZXJCYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzTm9uQ29tcG9zaXRpbmdDb250ZW50KCkgY29uc3Q7
CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZCgKICAgICBpZiAoIWl0ZW1TdHlsZSkKICAgICAgICAgaXRlbVN0eWxlID0gc3R5bGUoKTsK
ICAgICAKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxl
bWVudC0+cmVuZGVyU3R5bGUoKS0+Y29sb3IoKSA6IHN0eWxlKCktPmNvbG9yKCk7CisgICAgQ29s
b3IgdGV4dENvbG9yID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSA6IHN0eWxlKCkt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAob3B0aW9u
RWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKCkpCiAgICAgICAgICAgICB0ZXh0Q29sb3Ig
PSB0aGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CkBAIC0z
NTUsNyArMzU1LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBiYWNrQ29sb3IgPSB0aGVtZSgpLT5pbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFj
a0NvbG9yID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkt
PmJhY2tncm91bmRDb2xvcigpIDogc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAg
IGJhY2tDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIDog
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKIAogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgZm9yIHRoaXMgbGlzdCBib3ggaXRlbQog
ICAgIGlmICghZWxlbWVudC0+cmVuZGVyU3R5bGUoKSB8fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gSElEREVOKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChzZWxSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBDb2xvciBjb2xvcihzdHlsZSgpLT5jb2xv
cigpKTsKKyAgICBjb25zdCBDb2xvciBjb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvcikpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9y
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNv
bGlkU3Ryb2tlKTsKICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDkgKzExNCw5IEBAIHN0YXRp
YyBib29sIHBhaW50TWVkaWFTbGlkZXIoUmVuZGVyT2JqZWMKICAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwogICAgIGNvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihz
dHlsZS0+Ym9yZGVyTGVmdENvbG9yKCksIERldmljZUNvbG9yU3BhY2UpOworICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0Q29sb3IpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBjb250ZXh0LT5zZXRTdHJv
a2VUaGlja25lc3Moc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKLSAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciksIERldmljZUNvbG9yU3BhY2UpOwogICAgIGNvbnRleHQt
PmRyYXdSZWN0KHJlY3QpOwogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIApAQCAtMTMzLDcgKzEz
Myw3IEBAIHN0YXRpYyBib29sIHBhaW50TWVkaWFTbGlkZXIoUmVuZGVyT2JqZWMKICAgICAgICAg
c2xpZGVyVG9wUmlnaHQubW92ZSgwLCBidWZmZXJlZFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgICAg
IFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHNsaWRlclRvcExl
ZnQsIHNsaWRlclRvcFJpZ2h0KTsKLSAgICAgICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+
c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgc3RhcnRDb2xvcik7CiAgICAgICAgIGdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcihzdGFydENvbG9yLnJlZCgpIC8gMiwgc3RhcnRDb2xv
ci5ncmVlbigpIC8gMiwgc3RhcnRDb2xvci5ibHVlKCkgLyAyLCBzdGFydENvbG9yLmFscGhhKCkp
KTsKIApAQCAtMjA3LDEzICsyMDcsMTMgQEAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYVRpbWVsaW5l
Q29udGFpbmVyKAogCiAgICAgICAgIC8vIERyYXcgdGhlIGxlZnQgYm9yZGVyIHVzaW5nIENTUyBk
ZWZpbmVkIHdpZHRoIGFuZCBjb2xvci4KICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigp
LCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2Jq
ZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
Q29sb3IpLnJnYigpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dC0+ZHJhd0xp
bmUoSW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7
CiAKICAgICAgICAgLy8gRHJhdyB0aGUgcmlnaHQgYm9yZGVyIHVzaW5nIENTUyBkZWZpbmVkIHdp
ZHRoIGFuZCBjb2xvci4KICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9iamVj
dC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkucmdiKCksIERldmlj
ZUNvbG9yU3BhY2UpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3Ip
LnJnYigpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmUoSW50
UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVj
dC55KCkgKyByZWN0LmhlaWdodCgpKSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgUG9wdXBNZW51U3R5
bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZQogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbbGlzdEluZGV4XTsKICAgICAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50
LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGVsZW1lbnQtPmNvbXB1
dGVkU3R5bGUoKTsKLSAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+Y29s
b3IoKSwgaXRlbUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgpLCBzdHlsZS0+Zm9udCgpLCBzdHls
ZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlLT50ZXh0SW5kZW50KCksIHN0eWxlLT5k
aXJlY3Rpb24oKSkgOiBtZW51U3R5bGUoKTsKKyAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVT
dHlsZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVt
QmFja2dyb3VuZENvbG9yKGxpc3RJbmRleCksIHN0eWxlLT5mb250KCksIHN0eWxlLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigp
KSA6IG1lbnVTdHlsZSgpOwogfQogCiBDb2xvciBSZW5kZXJNZW51TGlzdDo6aXRlbUJhY2tncm91
bmRDb2xvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CkBAIC00MTcsMTggKzQxNywxOCBAQCBD
b2xvciBSZW5kZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvCiAgICAgU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkp
KTsKICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJ
dGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICByZXR1cm4gc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBi
YWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAg
IGJhY2tncm91bmRDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPmJhY2tncm91bmRDb2xv
cigpOworICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIC8v
IElmIHRoZSBpdGVtIGhhcyBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvciwgcmV0dXJuIHRoYXQu
CiAgICAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IuaGFzQWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJh
Y2tncm91bmRDb2xvcjsKIAogICAgIC8vIE90aGVyd2lzZSwgdGhlIGl0ZW0ncyBiYWNrZ3JvdW5k
IGlzIG92ZXJsYXllZCBvbiB0b3Agb2YgdGhlIG1lbnUgYmFja2dyb3VuZC4KLSAgICBiYWNrZ3Jv
dW5kQ29sb3IgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKS5ibGVuZChiYWNrZ3JvdW5kQ29s
b3IpOworICAgIGJhY2tncm91bmRDb2xvciA9IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYmxlbmQoYmFja2dyb3VuZENvbG9yKTsKICAg
ICBpZiAoIWJhY2tncm91bmRDb2xvci5oYXNBbHBoYSgpKQogICAgICAgICByZXR1cm4gYmFja2dy
b3VuZENvbG9yOwogCkBAIC00MzksNyArNDM5LDcgQEAgQ29sb3IgUmVuZGVyTWVudUxpc3Q6Oml0
ZW1CYWNrZ3JvdW5kQ29sbwogUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHls
ZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHMgPSBtX2lubmVyQmxvY2sgPyBtX2lubmVy
QmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzLT5j
b2xvcigpLCBzLT5iYWNrZ3JvdW5kQ29sb3IoKSwgcy0+Zm9udCgpLCBzLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSwgcy0+dGV4dEluZGVudCgpLCBzLT5kaXJlY3Rpb24oKSk7CisgICAgcmV0dXJu
IFBvcHVwTWVudVN0eWxlKHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSwgcy0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwg
cy0+Zm9udCgpLCBzLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgcy0+dGV4dEluZGVudCgpLCBz
LT5kaXJlY3Rpb24oKSk7CiB9CiAKIEhvc3RXaW5kb3cqIFJlbmRlck1lbnVMaXN0Ojpob3N0V2lu
ZG93KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
NTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgyLDkgKzEzODIsOSBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJh
Y2tncm91bmRDCiB7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgaWYgKHN0eWxlKCktPnVzZXJTZWxl
Y3QoKSAhPSBTRUxFQ1RfTk9ORSkgewotICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1
ZG9TdHlsZSA9IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKTsKLSAgICAgICAgaWYg
KHBzZXVkb1N0eWxlICYmIHBzZXVkb1N0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5ibGVu
ZFdpdGhXaGl0ZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0g
Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pOworICAgICAgICBpZiAocHNldWRvU3R5
bGUgJiYgcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcikuaXNWYWxpZCgpKQorICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5ibGVuZFdp
dGhXaGl0ZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xvciA9IGRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSA/CiAgICAgICAgICAg
ICAgICAgICAgIHRoZW1lKCktPmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIDoKQEAg
LTE0MDEsOSArMTQwMSw5IEBAIENvbG9yIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3Vu
ZEMKICAgICAgICAgcmV0dXJuIGNvbG9yOwogCiAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4g
cHNldWRvU3R5bGUgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTikpIHsKLSAgICAg
ICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+dGV4dEZpbGxDb2xvcigpOworICAgICAgICBjb2xvciA9
IHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RmlsbENvbG9yKTsKICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBj
b2xvciA9IHBzZXVkb1N0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9T
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIH0gZWxz
ZQogICAgICAgICBjb2xvciA9IGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0Zv
Y3VzZWRBbmRBY3RpdmUoKSA/CiAgICAgICAgICAgICAgICAgdGhlbWUoKS0+YWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJl
dmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwMSw2ICs0MDEsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFz
Qm94RGVjb3JhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3BhaW50QmFja2dyb3VuZDsgfQogICAg
IGJvb2wgbXVzdFJlcGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSBjb25zdDsKKyAgICBib29sIGhh
c0JhY2tncm91bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBzdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOworICAg
ICAgICBpZiAoY29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgPiAwKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdHlsZSgpLT5oYXNCYWNrZ3JvdW5kSW1h
Z2UoKTsKKyAgICB9CiAKICAgICBib29sIG5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZWVkc0xheW91dCB8fCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQgfHwgbV9wb3NDaGlsZE5lZWRz
TGF5b3V0IHx8IG1fbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQ7IH0KICAgICBib29sIHNl
bGZOZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXIK
ICAgICBvYmplY3QtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGlu
Z1Jlc291cmNlKGlkLCBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCkp
OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0Q29sb3JGb3JQc2V1ZG9SdWxlcyhjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYgY29sb3IpCitp
bmxpbmUgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZTo6YWRqdXN0Q29sb3JGb3JQc2V1ZG9SdWxlcyhj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgaWYgKHN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gSW5zaWRlVmlzaXRlZExpbmspCiAg
ICAgICAgIHJldHVybjsKQEAgLTk1LDcgKzk1LDcgQEAgUmVuZGVyU1ZHUmVzb3VyY2UqIFJlbmRl
clNWR1Jlc291cmNlOjpmaQogCiAgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKICAgICAgICAgaWYg
KGZpbGxQYWludC0+cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVO
VENPTE9SKQotICAgICAgICAgICAgZmlsbENvbG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgICAg
ICAgICBmaWxsQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaWxsQ29sb3IgPSBmaWxsUGFpbnQt
PmNvbG9yKCk7CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBSZW5kZXJTVkdSZXNvdXJjZSogUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0CiAKICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CiAgICAgICAgIGlm
IChzdHJva2VQYWludC0+cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VS
UkVOVENPTE9SKQotICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAg
ICAgICAgICAgIHN0cm9rZUNvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBz
dHJva2VQYWludC0+Y29sb3IoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZS5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgZW51bSBSZW5kZXJTVkdS
ZXNvdXJjZU1vZGUgewogICAgIEFwcGx5VG9UZXh0TW9kZSAgICA9IDEgPDwgMyAvLyB1c2VkIGlu
IGNvbWJpbmF0aW9uIHdpdGggQXBwbHlUb3tGaWxsfFN0cm9rZX1Nb2RlCiB9OwogCitjbGFzcyBD
b2xvcjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJl
bmRlck9iamVjdDsKQEAgLTc4LDYgKzc5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJT
VkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdCBSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJTdHlsZSopOwogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IqIHNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwogCitwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkIGFkanVzdENvbG9yRm9yUHNldWRvUnVsZXMoY29uc3QgUmVuZGVyU3R5bGUqLCBib29s
IHVzZUZpbGxQYWludCwgQ29sb3ImKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2b2lkIG1hcmtG
b3JMYXlvdXRBbmRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqKTsKIH07CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDcgKzUwMSw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGEKIAogICAgIHBhaW50
Qm94U2hhZG93KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIE5vcm1h
bCk7CiAgICAgCi0gICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+YmFja2dy
b3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsK
KyAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5
ZXJzKCksIHR4LCB0eSwgdywgaCk7CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRl
eHQsIHR4LCB0eSwgdywgaCwgc3R5bGUoKSwgSW5zZXQpOwogCiAgICAgaWYgKHN0eWxlKCktPmhh
c0JvcmRlcigpICYmICFjb2xsYXBzZUJvcmRlcnMoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIFJlbmRlclRhYmxlX2gK
ICNkZWZpbmUgUmVuZGVyVGFibGVfaAogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01
MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBpbnQgYm9yZGVyVG9wKCkgY29uc3Q7CiAgICAgaW50
IGJvcmRlckJvdHRvbSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbG9yJiBiZ0NvbG9yKCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7IH0KKyAgICBjb25zdCBD
b2xvciBiZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsgfQogCiAgICAgaW50IG91dGVyQm9yZGVy
VG9wKCkgY29uc3Q7CiAgICAgaW50IG91dGVyQm9yZGVyQm90dG9tKCkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ5
LDcgKzg0OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmUKICAg
ICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKTsKIAotICAgIENvbG9yIGMg
PSBiYWNrZ3JvdW5kT2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xv
ciBjID0gYmFja2dyb3VuZE9iamVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBjb25zdCBGaWxsTGF5ZXIqIGJnTGF5ZXIg
PSBiYWNrZ3JvdW5kT2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAKICAgICBp
ZiAoYmdMYXllci0+aGFzSW1hZ2UoKSB8fCBjLmlzVmFsaWQoKSkgewpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3
ICsxMzQsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTCiAKICAg
ICBib29sIGRpc2FibGVkID0gdXBkYXRlVXNlck1vZGlmeVByb3BlcnR5KG5vZGUoKSwgdGV4dEJs
b2NrU3R5bGUpOwogICAgIGlmIChkaXNhYmxlZCkKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNl
dENvbG9yKGRpc2FibGVkVGV4dENvbG9yKHRleHRCbG9ja1N0eWxlLT5jb2xvcigpLCBzdGFydFN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSkpOworICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29s
b3IoZGlzYWJsZWRUZXh0Q29sb3IodGV4dEJsb2NrU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSwgc3RhcnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9s
OjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoVGV4dENvbnRyb2xJbm5lckVsZW1lbnQqIGlubmVyQmxv
Y2spCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg4LDcgKzc4OCw3
IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGkKIAogUG9wdXBNZW51
U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAogewot
ICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLT5jb2xvcigpLCBzdHlsZSgpLT5iYWNr
Z3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSk7Cisg
ICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24o
KSk7CiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVm
dCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQyLDcgKzY0Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25z
dCAKICAgICAgICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVy
IGFuZCBiYWNrZ3JvdW5kIG1hdGNoLgogICAgICAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVy
KCkgIT0gYm9yZGVyIHx8CiAgICAgICAgICAgICAgICAgICAgICpzdHlsZS0+YmFja2dyb3VuZExh
eWVycygpICE9IGJhY2tncm91bmQgfHwKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJhY2tn
cm91bmRDb2xvcigpICE9IGJhY2tncm91bmRDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9
IGJhY2tncm91bmRDb2xvcik7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTk5NCw3ICs5OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uCiAgICAgCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+Y29sb3IoKSwgby0+
c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
by0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlU3R5bGUoTm9TdHJva2UpOwogCiAgICAgRmxvYXRQb2ludCBhcnJvdzFbM107CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgwLDcgKzE4MCw3IEBAIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29uc3QK
ICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQogCi1zdGF0aWMgdm9pZCB3cml0
ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5k
ZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKK3ZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVS
ZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgUmVuZGVy
QXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAgICAgdHMgPDwgby5yZW5kZXJOYW1lKCk7CiAK
QEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPCiAKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKIAotICAgIHdyaXRlUmVuZGVyT2Jq
ZWN0KHRzLCBvLCBiZWhhdmlvcik7CisgICAgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJP
YmplY3QodHMsIG8sIGJlaGF2aW9yKTsKICAgICB0cyA8PCAiXG4iOwogCiAgICAgaWYgKG8uaXNU
ZXh0KCkgJiYgIW8uaXNCUigpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTQgQEAgU3RyaW5nIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oRnJhbWUqLCBSZQogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyT2JqZWN0JiwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yID0gUmVuZGVy
QXNUZXh0QmVoYXZpb3JOb3JtYWwpOwogdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50
IGluZGVudCk7CiAKK2NsYXNzIFJlbmRlclRyZWVBc1RleHQgeworLy8gRklYTUU6IFRoaXMgaXMg
YSBjaGVlc3kgaGFjayB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBSZW5kZXJTdHlsZSBjb2xvcnMu
ICBJdCB3b24ndCBiZSBuZWVkZWQgaWYgd2UgY29udmVydAorLy8gaXQgdG8gdXNlIHZpc2l0ZWRE
ZXBlbmRlbnRDb2xvciBpbnN0ZWFkLiAoVGhpcyBqdXN0IGludm9sdmVzIHJlYmFzZWxpbmluZyBt
YW55IHJlc3VsdHMgdGhvdWdoLCBzbyBmb3Igbm93IGl0J3MKKy8vIG5vdCBiZWluZyBkb25lKS4K
K3B1YmxpYzoKK3N0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKTsKK307
CisKIC8vIEhlbHBlciBmdW5jdGlvbiBzaGFyZWQgd2l0aCBTVkdSZW5kZXJUcmVlQXNUZXh0CiBT
dHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYpOwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24o
aW4KICAgICBpZiAoc3RhcnRQb3MgPj0gZW5kUG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
b2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXIoKS0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA1
OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzMsOCArNDMzLDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdU
ZXh0Qm94KFRleHRTdAogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBjaHVua3MgPSBjb25zdF9j
YXN0PFZlY3RvcjxTVkdUZXh0Q2h1bms+JiA+KGJveC0+c3ZnVGV4dENodW5rcygpKTsKICAgICB0
cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIg
PDwgYm94LT53aWR0aCgpIDw8ICJ4IiA8PCBib3gtPmhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8
PCBjaHVua3Muc2l6ZSgpIDw8ICIgY2h1bmsocykiOwogCi0gICAgaWYgKHRleHQucGFyZW50KCkg
JiYgKHRleHQucGFyZW50KCktPnN0eWxlKCktPmNvbG9yKCkgIT0gdGV4dC5zdHlsZSgpLT5jb2xv
cigpKSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxl
KCktPmNvbG9yKCkubmFtZSgpKTsKKyAgICBpZiAodGV4dC5wYXJlbnQoKSAmJiAodGV4dC5wYXJl
bnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9
IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSkK
KyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5uYW1lKCkpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgY29udGFpbnNJbmxpbmVUZXh0Qm94KFNWR1RleHRDaHVuayYgY2h1bmss
IFNWR0lubGluZVRleHRCb3gqIGJveCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNDIgKzk5NSw0MiBAQCBzdGF0
aWMgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlRm9yQ29sb3JQCiAgICAgcmV0dXJuIGJvcmRlclN0
eWxlOwogfQogCi1zdGF0aWMgQ29sb3IgY29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCBjb2xvclByb3BlcnR5LCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUpCitjb25zdCBDb2xvciBSZW5kZXJTdHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjayhpbnQg
Y29sb3JQcm9wZXJ0eSwgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKSBjb25zdAogewogICAgIENv
bG9yIHJlc3VsdDsKICAgICBzd2l0Y2ggKGNvbG9yUHJvcGVydHkpIHsKICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpOyAvLyBCYWNrZ3JvdW5kIGNvbG9yIGRvZXNuJ3QgZmFsbCBiYWNrLgorICAgICAgICBy
ZXR1cm4gYmFja2dyb3VuZENvbG9yKCk7IC8vIEJhY2tncm91bmQgY29sb3IgZG9lc24ndCBmYWxs
IGJhY2suCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICAgICAgcmVz
dWx0ID0gc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0
eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyTGVmdENvbG9y
KCk7CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyTGVmdFN0eWxlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgICAgICByZXN1
bHQgPSBzdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0
eWxlLT5ib3JkZXJSaWdodFN0eWxlKCk7CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclJpZ2h0Q29s
b3IoKTsKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJSaWdodFN0eWxlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgcmVz
dWx0ID0gc3R5bGUtPmJvcmRlclRvcENvbG9yKCk7Ci0gICAgICAgIGJvcmRlclN0eWxlID0gc3R5
bGUtPmJvcmRlclRvcFN0eWxlKCk7CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclRvcENvbG9yKCk7
CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyVG9wU3R5bGUoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgotICAgICAgICByZXN1bHQg
PSBzdHlsZS0+Ym9yZGVyQm90dG9tQ29sb3IoKTsKLSAgICAgICAgYm9yZGVyU3R5bGUgPSBzdHls
ZS0+Ym9yZGVyQm90dG9tU3R5bGUoKTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyQm90dG9tQ29s
b3IoKTsKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJCb3R0b21TdHlsZSgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IHN0
eWxlLT5jb2xvcigpOworICAgICAgICByZXN1bHQgPSBjb2xvcigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHls
ZS0+b3V0bGluZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IG91dGxpbmVDb2xvcigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgot
ICAgICAgICByZXN1bHQgPSBzdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCk7CisgICAgICAgIHJlc3Vs
dCA9IGNvbHVtblJ1bGVDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPnRleHRGaWxs
Q29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0gdGV4dEZpbGxDb2xvcigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICBy
ZXN1bHQgPSBzdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHRleHRT
dHJva2VDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwNDMsMjMgKzEwNDMsMjMgQEAgc3RhdGljIENvbG9yIGNv
bG9ySW5jbHVkaW5nRmFsbGJhY2soY29ucwogICAgICAgICAgICAgJiYgKGJvcmRlclN0eWxlID09
IElOU0VUIHx8IGJvcmRlclN0eWxlID09IE9VVFNFVCB8fCBib3JkZXJTdHlsZSA9PSBSSURHRSB8
fCBib3JkZXJTdHlsZSA9PSBHUk9PVkUpKQogICAgICAgICAgICAgcmVzdWx0LnNldFJHQigyMzgs
IDIzOCwgMjM4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmNv
bG9yKCk7CisgICAgICAgICAgICByZXN1bHQgPSBjb2xvcigpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUNvbG9yIFJlbmRlclN0eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3Io
aW50IGNvbG9yUHJvcGVydHkpIGNvbnN0Citjb25zdCBDb2xvciBSZW5kZXJTdHlsZTo6dmlzaXRl
ZERlcGVuZGVudENvbG9yKGludCBjb2xvclByb3BlcnR5KSBjb25zdAogewogICAgIEVCb3JkZXJT
dHlsZSBib3JkZXJTdHlsZSA9IGJvcmRlclN0eWxlRm9yQ29sb3JQcm9wZXJ0eSh0aGlzLCBjb2xv
clByb3BlcnR5KTsKLSAgICBDb2xvciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVkaW5nRmFs
bGJhY2sodGhpcywgY29sb3JQcm9wZXJ0eSwgYm9yZGVyU3R5bGUpOworICAgIENvbG9yIHVudmlz
aXRlZENvbG9yID0gY29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb2xvclByb3BlcnR5LCBib3JkZXJT
dHlsZSk7CiAgICAgaWYgKGluc2lkZUxpbmsoKSAhPSBJbnNpZGVWaXNpdGVkTGluaykKICAgICAg
ICAgcmV0dXJuIHVudmlzaXRlZENvbG9yOwogCiAgICAgUmVuZGVyU3R5bGUqIHZpc2l0ZWRTdHls
ZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7CiAgICAgaWYgKCF2aXNpdGVk
U3R5bGUpCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVk
Q29sb3IgPSBjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKHZpc2l0ZWRTdHlsZSwgY29sb3JQcm9wZXJ0
eSwgYm9yZGVyU3R5bGUpOworICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRTdHlsZS0+
Y29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb2xvclByb3BlcnR5LCBib3JkZXJTdHlsZSk7CiAKICAg
ICAvLyBUYWtlIHRoZSBhbHBoYSBmcm9tIHRoZSB1bnZpc2l0ZWQgY29sb3IsIGJ1dCBnZXQgdGhl
IFJHQiB2YWx1ZXMgZnJvbSB0aGUgdmlzaXRlZCBjb2xvci4KICAgICByZXR1cm4gQ29sb3Iodmlz
aXRlZENvbG9yLnJlZCgpLCB2aXNpdGVkQ29sb3IuZ3JlZW4oKSwgdmlzaXRlZENvbG9yLmJsdWUo
KSwgdW52aXNpdGVkQ29sb3IuYWxwaGEoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAgLTExMyw3ICsxMTQsMTMgQEAgY2xh
c3MgU3R5bGVJbWFnZTsKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFBz
ZXVkb1N0eWxlQ2FjaGU7CiAKIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZW5kZXJTdHlsZT4gewotICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOworICAgIGZy
aWVuZCBjbGFzcyBBbmltYXRpb25CYXNlOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBj
YW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgorICAg
IGZyaWVuZCBjbGFzcyBBcHBseVN0eWxlQ29tbWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSBy
ZXZlYWwgdW52aXNpdGVkIGluZm8uCisgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7
IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KKyAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBi
ZSBhYmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KKyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNh
bid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIg
dGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBh
bmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMuCisgICAgZnJpZW5kIGNsYXNzIFJl
bmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUg
Y2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3
b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KIHByb3RlY3RlZDoKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgYml0ZmllbGQgaXMgMzItYml0cyBsb25nLCB3aGljaCBvcHRpbWl6ZXMgcGFkZGlu
ZyB3aXRoIHRoZQpAQCAtMzQxLDEyICszNDgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQYWRk
aW5nKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcubm9uWmVybygpOyB9CiAgICAg
Ym9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+b2Zmc2V0Lm5vblplcm8o
KTsgfQogCi0gICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChiYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkgJiYgYmFja2dyb3VuZENvbG9yKCkuYWxwaGEo
KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2dy
b3VuZC0+YmFja2dyb3VuZCgpLmhhc0ltYWdlKCk7Ci0gICAgfQogICAgIGJvb2wgaGFzQmFja2dy
b3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkuaGFz
SW1hZ2UoKTsgfQogICAgIGJvb2wgaGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5oYXNGaXhlZEltYWdlKCk7IH0KICAgICBi
b29sIGhhc0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBhcHBlYXJhbmNlKCkgIT0gTm9Db250
cm9sUGFydDsgfQpAQCAtNDAxLDE5ICs0MDIsMTUgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
c2hvcnQgYm9yZGVyTGVmdFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5i
b3JkZXJMZWZ0V2lkdGgoKTsgfQogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJMZWZ0U3R5bGUoKSBj
b25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQoKS5zdHlsZSgpOyB9Ci0gICAgY29u
c3QgQ29sb3ImIGJvcmRlckxlZnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3Jk
ZXIubGVmdCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkg
Y29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuaXNUcmFuc3BhcmVudCgpOyB9
CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyUmlnaHRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5ib3JkZXIuYm9yZGVyUmlnaHRXaWR0aCgpOyB9CiAgICAgRUJvcmRlclN0eWxlIGJv
cmRlclJpZ2h0U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnJpZ2h0KCku
c3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gc3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRl
clJpZ2h0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmln
aHQoKS5pc1RyYW5zcGFyZW50KCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBib3JkZXJUb3BXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyVG9wV2lkdGgoKTsgfQog
ICAgIEVCb3JkZXJTdHlsZSBib3JkZXJUb3BTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5k
LT5ib3JkZXIudG9wKCkuc3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJUb3BDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wKCkuY29sb3IoKTsgfQogICAg
IGJvb2wgYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5i
b3JkZXIudG9wKCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVy
Qm90dG9tV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlckJvdHRv
bVdpZHRoKCk7IH0KICAgICBFQm9yZGVyU3R5bGUgYm9yZGVyQm90dG9tU3R5bGUoKSBjb25zdCB7
IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLnN0eWxlKCk7IH0KLSAgICBjb25zdCBD
b2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LmJvdHRvbSgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckJvdHRvbUlzVHJhbnNwYXJlbnQo
KSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmlzVHJhbnNwYXJlbnQo
KTsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgb3V0bGluZVNpemUoKSBjb25zdCB7IHJldHVybiBt
YXgoMCwgb3V0bGluZVdpZHRoKCkgKyBvdXRsaW5lT2Zmc2V0KCkpOyB9CkBAIC00MjYsOCArNDIz
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzT3V0bGluZSgpIGNvbnN0IHsgcmV0dXJuIG91dGxp
bmVXaWR0aCgpID4gMCAmJiBvdXRsaW5lU3R5bGUoKSA+IEJISURERU47IH0KICAgICBFQm9yZGVy
U3R5bGUgb3V0bGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5l
KCkuc3R5bGUoKTsgfQogICAgIGJvb2wgb3V0bGluZVN0eWxlSXNBdXRvKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuaXNBdXRvKCk7IH0KLSAgICBjb25zdCBDb2xvciYg
b3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuY29s
b3IoKTsgfQotCisgICAgCiAgICAgRU92ZXJmbG93IG92ZXJmbG93WCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEVPdmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1gpOyB9
CiAgICAgRU92ZXJmbG93IG92ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVP
dmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1kpOyB9CiAKQEAgLTQ1MSw3ICs0
NDcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0K
ICAgICBpbnQgZm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQucGl4ZWxT
aXplKCk7IH0KIAotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIGluaGVy
aXRlZC0+Y29sb3I7IH0KICAgICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVJbmhlcml0ZWREYXRhLT5pbmRlbnQ7IH0KICAgICBFVGV4dEFsaWduIHRleHRBbGlnbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0QWxpZ24+KGluaGVyaXRlZF9mbGFncy5fdGV4
dF9hbGlnbik7IH0KICAgICBFVGV4dFRyYW5zZm9ybSB0ZXh0VHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRUcmFuc2Zvcm0+KGluaGVyaXRlZF9mbGFncy5fdGV4dF90
cmFuc2Zvcm0pOyB9CkBAIC01MzUsNyArNTMwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
d29yZEJyZWFrKCkgPT0gQnJlYWtXb3JkQnJlYWsgfHwgd29yZFdyYXAoKSA9PSBCcmVha1dvcmRX
cmFwOwogICAgIH0KIAotICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tncm91bmQtPmNvbG9yKCk7IH0KICAgICBTdHlsZUltYWdlKiBiYWNrZ3Jv
dW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5pbWFn
ZSgpOyB9CiAgICAgRUZpbGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdFgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFRmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkucmVw
ZWF0WCgpKTsgfQogICAgIEVGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRZKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZC0+YmFja2dyb3VuZCgp
LnJlcGVhdFkoKSk7IH0KQEAgLTYxNiw5ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Y29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U2hhZG93OyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRTdHJva2VDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KICAg
ICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0
YS0+dGV4dFN0cm9rZVdpZHRoOyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRGaWxsQ29sb3IoKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQogICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yU3Bh
Y2U+KHJhcmVJbmhlcml0ZWREYXRhLT5jb2xvclNwYWNlKTsgfQogICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eTsgfQogICAgIENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250cm9s
UGFydD4ocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYXBwZWFyYW5jZSk7IH0KQEAgLTY2NCw3ICs2
NTYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzcGVjaWZpZXNDb2x1bW5zKCkgY29uc3QgeyByZXR1
cm4gIWhhc0F1dG9Db2x1bW5Db3VudCgpIHx8ICFoYXNBdXRvQ29sdW1uV2lkdGgoKTsgfQogICAg
IGZsb2F0IGNvbHVtbkdhcCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X211bHRpQ29sLT5tX2dhcDsgfQogICAgIGJvb2wgaGFzTm9ybWFsQ29sdW1uR2FwKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fbm9ybWFsR2FwOyB9
Ci0gICAgY29uc3QgQ29sb3ImIGNvbHVtblJ1bGVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sLT5tX3J1bGUuY29sb3IoKTsgfQogICAgIEVCb3Jk
ZXJTdHlsZSBjb2x1bW5SdWxlU3R5bGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLnN0eWxlKCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBj
b2x1bW5SdWxlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9t
dWx0aUNvbC0+cnVsZVdpZHRoKCk7IH0KICAgICBib29sIGNvbHVtblJ1bGVJc1RyYW5zcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fcnVs
ZS5pc1RyYW5zcGFyZW50KCk7IH0KQEAgLTExMTIsNyArMTEwMyw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjaGlsZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZEluZGV4OyB9CiAgICAg
dm9pZCBzZXRDaGlsZEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY2hpbGRJbmRleCA9IGluZGV4
OyB9CiAKLSAgICBDb2xvciB2aXNpdGVkRGVwZW5kZW50Q29sb3IoaW50IGNvbG9yUHJvcGVydHkp
IGNvbnN0OworICAgIGNvbnN0IENvbG9yIHZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29sb3JQ
cm9wZXJ0eSkgY29uc3Q7CiAKICAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgYWxsIHRoZSBwcm9w
ZXJ0aWVzCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbEJvcmRlckNvbGxhcHNlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTEyMTIsNiArMTIwMywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIGluaXRpYWxEYXNoYm9hcmRSZWdpb25zKCk7
CiAgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIG5vbmVEYXNo
Ym9hcmRSZWdpb25zKCk7CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBDb2xvciBhY2Nlc3Nv
cnMgYXJlIGFsbCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBjYWxsZXJzIHVzZSB2aXNpdGVkRGVwZW5k
ZW50Q29sb3IgaW5zdGVhZCB0byBhY2Nlc3MgdGhlbS4KKyAgICBjb25zdCBDb2xvciYgYm9yZGVy
TGVmdENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuY29sb3Io
KTsgfQorICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9y
ZGVyVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpLmNvbG9y
KCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5jb2xvcigpOyB9
CisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5jb2xv
cjsgfQorICAgIGNvbnN0IENvbG9yJiBjb2x1bW5SdWxlQ29sb3IoKSBjb25zdCB7IHJldHVybiBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLmNvbG9yKCk7IH0KKyAgICBj
b25zdCBDb2xvciYgb3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5v
dXRsaW5lKCkuY29sb3IoKTsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KKyAgICBjb25z
dCBDb2xvciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERh
dGEtPnRleHRTdHJva2VDb2xvcjsgfQorICAgIAorICAgIGNvbnN0IENvbG9yIGNvbG9ySW5jbHVk
aW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkg
Y29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3IKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXQtPnJlbmRlcmVyKCkp
Ci0gICAgICAgIHZhbHVlID0gdGFyZ2V0UmVuZGVyZXItPnN0eWxlKCktPmNvbG9yKCkubmFtZSgp
OworICAgICAgICB2YWx1ZSA9IHRhcmdldFJlbmRlcmVyLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpOwogfQogICAgIAogdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5
OTE2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wNS0yMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDIwCisKKyAgICAgICAgTWFrZSBzdXJlIGV2ZXJ5
b25lIHdobyBuZWVkcyB0byBpcyB1c2luZyB2aXNpdGVkRGVwZW5kZW50Q29sb3IgcmF0aGVyIHRo
YW4gYWNjZXNzaW5nIHN0eWxlcworICAgICAgICBkaXJlY3RseS4KKworICAgICAgICAqIE1pc2Mv
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoK1tOU0F0dHJpYnV0ZWRT
dHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9ib2R5QmFja2dyb3VuZENvbG9y
XSk6CisKIDIwMTAtMDUtMjAgIE1pa2UgVGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9X
ZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViS2l0
L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTU0LDEyICsxNTQsMTIgQEAgKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX3dlYl9hdHRyaWJ1
dGVkUwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAg
ICAgICAgTlNGb250ICpmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0Zv
bnQoKTsKICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkg
Zm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHJl
bW92ZU9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAg
ICBpZiAoc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpIGZv
cktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgW2F0dHJzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA1OTg3NikK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAz
Nyw3ICsxMDM3LDcgQEAgLSAoTlNDb2xvciAqKV9ib2R5QmFja2dyb3VuZENvbG9yCiAgICAgUmVu
ZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBib2R5LT5yZW5kZXJlcigpOwogICAgIGlmICghYm9k
eVJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIENvbG9yIGNvbG9yID0gYm9keVJl
bmRlcmVyLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBjb2xvciA9IGJv
ZHlSZW5kZXJlci0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICByZXR1cm4gbnNDb2xvcihjb2xvcik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2hpc3Rvcnkvc2VsZi1pcy12aXNpdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3NlbGYtaXMtdmlzaXRlZC5odG1sCShyZXZpc2lvbiA1OTg3NikKKysrIExh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9zZWxmLWlzLXZpc2l0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTEsNyArMTEsNyBAQCBmdW5jdGlvbiBjb21wYXJlU3R5bGVzKCkKICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIHZhciBmaXJzdFN0eWxlID0gd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5m
byhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25lJykpOwogICAgICAgICB2YXIgc2Vjb25kU3R5
bGUgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKSk7Ci0gICAgICAgIGlmIChm
aXJzdFN0eWxlLmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yKSB7CisgICAgICAgIGlmIChmaXJz
dFN0eWxlLmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yIHx8IGZpcnN0U3R5bGUuYmFja2dyb3Vu
ZENvbG9yID09IHNlY29uZFN0eWxlLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9ICdGQUlMJzsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTksMTUgKzE5LDE1IEBAIGZ1bmN0aW9uIGNv
bXBhcmVTdHlsZXMoKQogICAgIAogICAgIHZhciBmaXJzdFN0eWxlID0gd2luZG93LmdldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uZScpLCAiIik7CiAgICAgdmFyIHNl
Y29uZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3R3bycpLCAiIik7Ci0gICAgaWYgKGZpcnN0U3R5bGUuY29sb3IgIT0gc2Vjb25kU3R5bGUu
Y29sb3IpIHsKKyAgICBpZiAoZmlyc3RTdHlsZS5jb2xvciAhPSBzZWNvbmRTdHlsZS5jb2xvciB8
fCBmaXJzdFN0eWxlLmJhY2tncm91bmRDb2xvciAhPSBzZWNvbmRTdHlsZS5iYWNrZ3JvdW5kQ29s
b3IpIHsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRN
TCA9ICdGQUlMJzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIDwvc2NyaXB0PgogPHN0eWxl
PgotOmxpbmsgeyBjb2xvcjogZ3JlZW4gfQotOnZpc2l0ZWQgeyBjb2xvcjogb3JhbmdlIH0KKzps
aW5rIHsgY29sb3I6IGdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSB9Cis6dmlzaXRlZCB7
IGNvbG9yOiBvcmFuZ2U7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrIH0KIDwvc3R5bGU+CiA8L2hl
YWQ+CiA8Ym9keSBvbmxvYWQ9ImNvbXBhcmVTdHlsZXMoKSI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56685</attachid>
            <date>2010-05-21 02:20:21 -0700</date>
            <delta_ts>2010-05-21 11:12:41 -0700</delta_ts>
            <desc>Address Dan&apos;s comments from IRC and make more Chromium build fixes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>83599</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ1IEBACisyMDEwLTA1LTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MjAsIDp2aXNpdGVkIG5vdCB3
b3JraW5nIHdpdGggYmFja2dyb3VuZC1jb2xvci4KKworICAgICAgICBNYWtlIHRoZSBSZW5kZXJT
dHlsZSBjb2xvciBhY2Nlc3NvcnMgcHJpdmF0ZS4gIFRoaXMgZm9yY2VzIGNhbGxlcnMgdG8gdXNl
IHZpc2l0ZWREZXBlbmRlbnRDb2xvcgorICAgICAgICBpbnN0ZWFkIChvciB0byBtYWtlIHRoZSBk
ZWNpc2lvbiB0byBiZWNvbWUgZnJpZW5kcyBvZiB0aGUgUmVuZGVyU3R5bGUgY2xhc3MgaW4gb3Jk
ZXIgdG8gZ2V0IGFjY2VzcworICAgICAgICB0byB0aGUgcmVhbCBzdHlsZSBpbmZvcm1hdGlvbiku
CisKKyAgICAgICAgTW9kaWZpZWQgaGlzdG9yeS9zZWxmLWlzLXZpc2l0ZWQuaHRtbCB0byBhbHNv
IHRlc3QgYmFja2dyb3VuZCBjb2xvcnMuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUpOgorICAg
ICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjdXJyZW50Q29sb3JPclZhbGlkQ29s
b3IpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAg
ICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5
bGVBdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBhcmVFZGl0aW5nU3R5bGVUb0Fw
cGx5QXQpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udENvbG9yQ2hhbmdlc0NvbXB1dGVkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWZOZWVkZWQpOgorICAg
ICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKToK
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNEZWxldGFibGVFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjYWxjdWxhdGVTdHlsZUJlZm9yZUluc2VydGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlU3R5bGVT
cGFuc0JlZm9yZUluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50
Q2FyZXQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZU1hcmt1cCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjplbnN1cmVQcm9wZXJ0eU1hcCk6
CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAqIHBh
Z2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmZvbnRBdHRyaWJ1
dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWlu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpwYWludEJveERlY29yYXRpb25zV2l0aFNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBs
YWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRlcmVyQmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVudUxpc3Q6Oml0ZW1CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVudUxpc3Q6Om1lbnVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjphZGp1c3RDb2xvckZvclBzZXVkb1J1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpiZ0NvbG9yKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbDo6YWRqdXN0SW5uZXJUZXh0U3R5bGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlUmVuZGVyU1ZH
VGV4dEJveCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpoYXNCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJMZWZ0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclJpZ2h0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclRvcFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJCb3R0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmhlcml0ZWRGbGFnczo6dGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0
ZWRGbGFnczo6dGV4dFN0cm9rZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZs
YWdzOjpoYXNOb3JtYWxDb2x1bW5HYXApOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxh
Z3M6OmJvcmRlckxlZnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6
Ym9yZGVyUmlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9y
ZGVyVG9wQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckJv
dHRvbUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpiYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpjb2x1bW5SdWxlQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6Om91dGxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmhlcml0ZWRGbGFnczo6dGV4dEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhl
cml0ZWRGbGFnczo6dGV4dFN0cm9rZUNvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RGb3JDdXJyZW50Q29sb3IpOgor
CiAyMDEwLTA1LTE4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
YmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lv
biA1OTg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAt
OTg3LDYgKzk4Nyw3IEBAIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MjBpc1NvZnR3YXJlUmVuZGUK
IF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3Mjhpc0VuY2xvc2VkSW5Db21wb3NpdGluZ0xheWVyRXYK
IF9fWk5LN1dlYkNvcmU5UGFnZUNhY2hlMTBmcmFtZUNvdW50RXYKIF9fWk5LN1dlYkNvcmU5UGFn
ZUNhY2hlMjFhdXRvcmVsZWFzZWRQYWdlQ291bnRFdgorX19aTks3V2ViQ29yZTExUmVuZGVyU3R5
bGUyMXZpc2l0ZWREZXBlbmRlbnRDb2xvckVpCiBfX1pUVk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50
RQogX19aVFZON1dlYkNvcmUxMlBsdWdpbldpZGdldEUKIF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hv
b3NlckNsaWVudEUKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGUuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibAogICAgIFJlbmRlclN0eWxlKiB0
YWJsZVN0eWxlID0gdGFibGUtPnN0eWxlKCk7CiAgICAgaWYgKCF0YWJsZVN0eWxlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgQ29sb3IgdGFibGVCR0NvbG9yID0gdGFibGVTdHlsZS0+YmFj
a2dyb3VuZENvbG9yKCk7CisgICAgQ29sb3IgdGFibGVCR0NvbG9yID0gdGFibGVTdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICAKICAg
ICAvLyBjaGVjayBlbm91Z2ggb2YgdGhlIGNlbGxzIHRvIGZpbmQgaWYgdGhlIHRhYmxlIG1hdGNo
ZXMgb3VyIGNyaXRlcmlhCiAgICAgLy8gQ3JpdGVyaWE6IApAQCAtMTY5LDcgKzE2OSw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmwKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gaWYgdGhlIGNlbGwgaGFzIGEgZGlmZmVyZW50IGNvbG9yIGZyb20gdGhlIHRh
YmxlIGFuZCB0aGVyZSBpcyBjZWxsIHNwYWNpbmcsCiAgICAgICAgICAgICAvLyB0aGVuIGl0IGlz
IHByb2JhYmx5IGEgZGF0YSB0YWJsZSBjZWxsIChzcGFjaW5nIGFuZCBjb2xvcnMgdGFrZSB0aGUg
cGxhY2Ugb2YgYm9yZGVycykKLSAgICAgICAgICAgIENvbG9yIGNlbGxDb2xvciA9IHJlbmRlclN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgICAgIENvbG9yIGNlbGxDb2xvciA9IHJl
bmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpOwogICAgICAgICAgICAgaWYgKHRhYmxlLT5oQm9yZGVyU3BhY2luZygpID4gMCAmJiB0YWJs
ZS0+dkJvcmRlclNwYWNpbmcoKSA+IDAKICAgICAgICAgICAgICAgICAmJiB0YWJsZUJHQ29sb3Ig
IT0gY2VsbENvbG9yICYmIGNlbGxDb2xvci5hbHBoYSgpICE9IDEpCiAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZERpZmZlcmVuY2VDZWxsQ291bnQrKzsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2
aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsOCArMzE1LDggQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIEFYQXR0cmlidXRlU3RyaW5n
U2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5
bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogCiAgICAgLy8g
c2V0IGJhc2ljIGNvbG9ycwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmlu
ZywgTlNBY2Nlc3NpYmlsaXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihz
dHlsZS0+Y29sb3IoKSksIHJhbmdlKTsKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0
dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5z
Q29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRl
U3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9yZWdyb3VuZENvbG9y
VGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0
clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5QmFja2dyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnND
b2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKSksIHJhbmdlKTsKIAogICAgIC8vIHNldCBzdXBlci9zdWIgc2NyaXB0aW5nCiAgICAgRVZl
cnRpY2FsQWxpZ24gYWxpZ25tZW50ID0gc3R5bGUtPnZlcnRpY2FsQWxpZ24oKTsKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzQsOCArMzc0LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdldFBvc2l0aW9uTwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRp
ZmllcihDU1NWYWx1ZUF1dG8pOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBk
b2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQgaW5mb3JtYXRpb24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5
bGUgZG9lc24ndCBleHBvc2UgdGhhdC4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihzdHlsZS0+Y29sb3IoKS5y
Z2IoKSk7CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihjb2xvci5y
Z2IoKSk7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAko
cmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Citj
bGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIFNoYWRvd0RhdGE7CiAKIGVudW0gRVVwZGF0
ZUxheW91dCB7IERvTm90VXBkYXRlTGF5b3V0ID0gZmFsc2UsIFVwZGF0ZUxheW91dCA9IHRydWUg
fTsKQEAgLTY5LDcgKzcxLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRv
dyhjb25zdCBTaGFkb3dEYXRhKiwgaW50KSBjb25zdDsKLQorICAgIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSosIGNvbnN0
IENvbG9yJikgY29uc3Q7CisgICAgCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBQc2V1
ZG9JZCBtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXI7CiAgICAgYm9vbCBtX2FsbG93VmlzaXRlZFN0
eWxlOwpJbmRleDogV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDU5ODc2
KQorKysgV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDEzICs5MCwxMyBAQCBzdGF0aWMgaW50IGFuZ2xlVG9HbHlwaE9yaWVudGF0aW9uKGZs
b2F0CiAgICAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JD
U1NWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xv
ciBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ29sb3Im
IGZnQ29sb3IpCiB7CiAgICAgQVNTRVJUKHZhbHVlLT5pc1NWR0NvbG9yKCkpOwogICAgIFNWR0Nv
bG9yKiBjID0gc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSk7CiAgICAgQ29sb3IgY29sb3I7
CiAgICAgaWYgKGMtPmNvbG9yVHlwZSgpID09IFNWR0NvbG9yOjpTVkdfQ09MT1JUWVBFX0NVUlJF
TlRDT0xPUikKLSAgICAgICAgY29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgY29sb3Ig
PSBmZ0NvbG9yOwogICAgIGVsc2UKICAgICAgICAgY29sb3IgPSBjLT5jb2xvcigpOwogICAgIHJl
dHVybiBjb2xvcjsKQEAgLTQ1NCwxMyArNDU0LDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlTVkdQcm9wZXJ0eSgKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BDb2xvcjoKICAg
ICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcENvbG9y
LCBTdG9wQ29sb3IpOwotICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZy
b21TVkdDb2xvckNTU1ZhbHVlKHZhbHVlLCBtX3N0eWxlLmdldCgpKSk7CisgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUodmFsdWUsIG1f
c3R5bGUtPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwot
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JD
U1NWYWx1ZSh2YWx1ZSwgbV9zdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh2YWx1ZSwgbV9zdHlsZS0+
Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoCiAgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZsb29kQ29sb3IoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGbG9vZENvbG9yKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUodmFsdWUsIG1fc3R5bGUuZ2V0
KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUodmFsdWUsIG1fc3R5bGUtPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9y
aXpvbnRhbDoKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgc3RhdGljIGNvbnN0IGludCBlZGl0aW5nU3R5
bGVQcm9wZXJ0aWVzWwogfTsKIHNpemVfdCBudW1FZGl0aW5nU3R5bGVQcm9wZXJ0aWVzID0gc2l6
ZW9mKGVkaXRpbmdTdHlsZVByb3BlcnRpZXMpL3NpemVvZihlZGl0aW5nU3R5bGVQcm9wZXJ0aWVz
WzBdKTsKIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91
bGRJbmNsdWRlVHlwaW5nU3R5bGUpCitQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbiBw
b3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUpCiB7
CiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUF0
UG9zaXRpb24gPSBwb3MuY29tcHV0ZWRTdHlsZSgpOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGU7CkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBwcmVwYXJlRWRp
dGluZ1N0eWxlVG9BcHBseUF0KENTU011dAogICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmVt
b3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdhcyBtb2Rp
ZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3BlcnRpZXMsIHRo
ZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQogICAgIC8vIHdoaWNoIG9uZSBvZiBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVkLgotICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBv
c2l0aW9uKHBvcyk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvcyk7CiAgICAg
c3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxlKTsKIAogICAgIC8vIGlmIGFscGhhIHZhbHVlIGlzIHpl
cm8sIHdlIGRvbid0IGFkZCB0aGUgYmFja2dyb3VuZCBjb2xvci4KQEAgLTQ3Miw4ICs0NzIsOCBA
QCB2b2lkIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKENTU011dGFibGVTCiB7CiAgICAgQVNTRVJU
KG5vZGUpOwogICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0
aW9uKFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOwotICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0
aW9uKG5vZGUsIDApKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBh
cmVudFN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9z
aXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBv
c2l0aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKICAgICBwYXJlbnRTdHlsZS0+ZGlmZihzdHlsZS5n
ZXQoKSk7CiAgICAgc3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxlKTsKIH0KQEAgLTE3NTcsMTAgKzE3
NTcsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAgIHNl
dE5vZGVBdHRyaWJ1dGUoYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CiAKLXN0YXRpYyBi
b29sIGZvbnRDb2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0
eWxlLCBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZSkKK3N0YXRpYyBib29sIGZvbnRDb2xvckNoYW5n
ZXNDb21wdXRlZFN0eWxlKGNvbnN0IENvbG9yJiBjb21wdXRlZFN0eWxlQ29sb3IsIFN0eWxlQ2hh
bmdlIHN0eWxlQ2hhbmdlKQogewogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZvbnRDb2xvcigp
KSB7Ci0gICAgICAgIGlmIChDb2xvcihzdHlsZUNoYW5nZS5mb250Q29sb3IoKSkgIT0gY29tcHV0
ZWRTdHlsZS0+Y29sb3IoKSkKKyAgICAgICAgaWYgKENvbG9yKHN0eWxlQ2hhbmdlLmZvbnRDb2xv
cigpKSAhPSBjb21wdXRlZFN0eWxlQ29sb3IpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTgwMSw3ICsxODAxLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8g
aW5zZXJ0IGEgZm9udCBlbGVtZW50IGlmIGl0IHdpbGwgZW5kIHVwIGNoYW5naW5nIHRoZSBzdHls
ZSBvZiB0aGUKICAgICAgICAgLy8gdGV4dCBzb21laG93LiBPdGhlcndpc2UgaXQgd2lsbCBiZSBh
IGdhcmJhZ2Ugbm9kZSB0aGF0IHdpbGwgY3JlYXRlIHByb2JsZW1zIGZvciB1cwogICAgICAgICAv
LyBtb3N0IG5vdGFibHkgd2hlbiB3ZSBhcHBseSBhIGJsb2NrcXVvdGUgc3R5bGUgZm9yIGEgbWVz
c2FnZSByZXBseS4KLSAgICAgICAgaWYgKGZvbnRDb2xvckNoYW5nZXNDb21wdXRlZFN0eWxlKGNv
bXB1dGVkU3R5bGUsIHN0eWxlQ2hhbmdlKQorICAgICAgICBpZiAoZm9udENvbG9yQ2hhbmdlc0Nv
bXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZS0+Y29sb3IoKSwgc3R5bGVDaGFuZ2UpCiAgICAgICAg
ICAgICAgICAgfHwgZm9udEZhY2VDaGFuZ2VzQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlLCBz
dHlsZUNoYW5nZSkKICAgICAgICAgICAgICAgICB8fCBmb250U2l6ZUNoYW5nZXNDb21wdXRlZFN0
eWxlKGNvbXB1dGVkU3R5bGUsIHN0eWxlQ2hhbmdlKSkgewogICAgICAgICAgICAgaWYgKHN0eWxl
Q2hhbmdlLmFwcGx5Rm9udENvbG9yKCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTEgQEAgY2xhc3MgQ1NTUHJpbWl0aXZl
VmFsdWU7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIFN0eWxlQ2hhbmdlOwogCitlbnVtIFNo
b3VsZEluY2x1ZGVUeXBpbmdTdHlsZSB7CisgICAgSW5jbHVkZVR5cGluZ1N0eWxlLAorICAgIEln
bm9yZVR5cGluZ1N0eWxlCit9OworCiBjbGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgZW51bSBFUHJvcGVydHlMZXZlbCB7
IFByb3BlcnR5RGVmYXVsdCwgRm9yY2VCbG9ja1Byb3BlcnRpZXMgfTsKQEAgLTUwLDYgKzU1LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxl
Q29tbWFuZChlbGVtZW50LCByZW1vdmVPbmx5LCBhY3Rpb24pKTsKICAgICB9CisgICAgCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHls
ZUF0UG9zaXRpb24oUG9zaXRpb24gcG9zLCBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgc2hvdWxk
SW5jbHVkZVR5cGluZ1N0eWxlID0gSWdub3JlVHlwaW5nU3R5bGUpOwogCiBwcml2YXRlOgogICAg
IEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRB
Y3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsKQEAgLTExNywxMiArMTI0LDYgQEAgYm9vbCBpc1N0eWxl
U3Bhbihjb25zdCBOb2RlKik7CiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNw
YW5FbGVtZW50KERvY3VtZW50Kik7CiBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiogY29tcHV0ZWRTdHlsZSk7CiAKLWVudW0g
U2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlIHsKLSAgICBJbmNsdWRlVHlwaW5nU3R5bGUsCi0gICAg
SWdub3JlVHlwaW5nU3R5bGUKLX07Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24sIFNob3VsZEluY2x1ZGVUeXBp
bmdTdHlsZSA9IElnbm9yZVR5cGluZ1N0eWxlKTsKIHZvaWQgcHJlcGFyZUVkaXRpbmdTdHlsZVRv
QXBwbHlBdChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIFBvc2l0aW9uKTsKIHZvaWQgcmVt
b3ZlU3R5bGVzQWRkZWRCeU5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7
CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6bW92ZVBhcmFncmFwaAogICAgIC8vIHRvbywgPGRpdj48Yj48YnI+PC9iPjwvZGl2PiBmb3Ig
ZXhhbXBsZS4gIFNhdmUgaXQgc28gdGhhdCB3ZSBjYW4gcHJlc2VydmUgaXQgbGF0ZXIuCiAgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUluRW1wdHlQYXJhZ3JhcGg7
CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUg
JiYgcHJlc2VydmVTdHlsZSkgewotICAgICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGggPSBlZGl0
aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoID0g
QXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oc3RhcnRPZlBhcmFncmFw
aFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogICAgICAgICAv
LyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNob3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRo
ZSBkZXN0aW5hdGlvbi4KICAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKTsKICAgICB9CkBAIC0xMDAzLDcgKzEwMDMsNyBAQCBib29sIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAgaWYgKCFlbXB0eUxpc3RJdGVtKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlv
bihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogCiAgICAg
Tm9kZSogbGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5wYXJlbnROb2RlKCk7CiAgICAgLy8gRklY
TUU6IENhbid0IHdlIGRvIHNvbWV0aGluZyBiZXR0ZXIgd2hlbiB0aGUgaW1tZWRpYXRlIHBhcmVu
dCB3YXNuJ3QgYSBsaXN0IG5vZGU/CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9u
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxl
dGVCdXR0b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBA
IHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25zdCBOb2QKICAgICAgICAgaWYgKCFw
YXJlbnRTdHlsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoc3R5
bGUtPmhhc0JhY2tncm91bmQoKSAmJiAoIXBhcmVudFN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgfHwg
c3R5bGUtPmJhY2tncm91bmRDb2xvcigpICE9IHBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KSkpCisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzQmFja2dyb3VuZCgpICYmICghcGFyZW50UmVu
ZGVyZXItPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBwYXJlbnRTdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBk
ZWxldGUgaXMgZG9uZS4KLSAgICBtX3R5cGluZ1N0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlv
bihwb3NpdGlvbkJlZm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7Cisg
ICAgbV90eXBpbmdTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0
aW9uKHBvc2l0aW9uQmVmb3JlVGFiU3BhbihtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsK
IAogICAgIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1f
c2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAKICAgICAvLyBJZiB3ZSdyZSBkZWxldGluZyBp
bnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRoZSBzdHlsZSBhdCBlbmQoKSBpbnN0ZWFkIG9m
IHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhpcyBsYXRlciBpbiBjb21wdXRlVHlwaW5nU3R5
bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0c2lkZSBvZiBhIE1haWwgYmxvY2txdW90ZQog
ICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgp
Lm5vZGUoKSkpCi0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IGVkaXRpbmdT
dHlsZUF0UG9zaXRpb24obV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKSk7CisgICAgICAgIG1fZGVs
ZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVB
dFBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkpOwogICAgIGVsc2UKICAgICAgICAg
bV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlID0gMDsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDU5ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2EKICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNp
YmxlUG9zKSAmJiAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIG1fc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvcywgSW5jbHVk
ZVR5cGluZ1N0eWxlKTsKKyAgICBtX3N0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24ocG9zLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwogfQogCiB2b2lkIEluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmFwcGx5U3R5bGVBZnRlckluc2VydGlvbihOb2Rl
KiBvcmlnaW5hbEVuY2xvc2luZ0Jsb2NrKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZv
cm1hdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3Jt
YXRDb21tYW5kLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3Zl
Rm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBS
ZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgc3R5
bGUgZm9yIHRoaXMgZWRpdGFibGUgcm9vdCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSdsbCBnaXZl
IHRoZQogICAgIC8vIGNvbnRlbnQgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAgTm9kZSog
cm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihQb3NpdGlvbihyb290LCAwKSk7CisgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGlu
Z1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihyb290LCAwKSk7CiAKICAgICAvLyBEZWxldGUgdGhl
IHNlbGVjdGVkIGNvbnRlbnQuCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGxl
YXZlIHRoaXMgdG8gaW5zZXJ0VGV4dCwgYnV0IGl0cyBkZWxldGUgb3BlcmF0aW9uCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDU5
ODc2KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3Bh
bnNCZWZvcmVJbnNlcnQKICAgICBOb2RlKiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiA9IHRvcE5v
ZGU7CiAgICAgUmVmUHRyPE5vZGU+IGNvcGllZFJhbmdlU3R5bGVTcGFuID0gc291cmNlRG9jdW1l
bnRTdHlsZVNwYW4tPmZpcnN0Q2hpbGQoKTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGVBdEluc2VydGlvblBvcyA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24o
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGluc2VydGlvblBvcykpOworICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVBdEluc2VydGlvblBvcyA9IEFwcGx5U3R5bGVD
b21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChp
bnNlcnRpb25Qb3MpKTsKIAogICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9u
UG9zLT5jc3NUZXh0KCk7CiAgICAgCkBAIC02MzQsOCArNjM0LDggQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAogICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVO
b2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVu
dCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkz
Mjc+LgogICAgIE5vZGUqIGJsb2NrcXVvdGVOb2RlID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5v
ZGUoY29udGV4dCkgPyBjb250ZXh0IDogbmVhcmVzdE1haWxCbG9ja3F1b3RlKGNvbnRleHQpOwog
ICAgIGlmIChibG9ja3F1b3RlTm9kZSkgewotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGJsb2NrcXVvdGVTdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9z
aXRpb24oYmxvY2txdW90ZU5vZGUsIDApKTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRp
b24oYmxvY2txdW90ZU5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOworICAgICAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrcXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21t
YW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKGJsb2NrcXVvdGVOb2RlLCAwKSk7
CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUg
PSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihibG9j
a3F1b3RlTm9kZS0+cGFyZW50Tm9kZSgpLCAwKSk7CiAgICAgICAgIHBhcmVudFN0eWxlLT5kaWZm
KGJsb2NrcXVvdGVTdHlsZS5nZXQoKSk7CiAKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGJsb2NrcXVvdGVTdHlsZS0+ZW5kKCk7CkBAIC03
OTQsNyArNzk0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobV9tYXRjaFN0eWxlKQotICAgICAgICBtX2lu
c2VydGlvblN0eWxlID0gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwg
SW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TdHlsZSA9IEFwcGx5U3R5
bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBJbmNs
dWRlVHlwaW5nU3R5bGUpOwogICAgIAogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQg
PSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVF
bmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODIsNyArMTA4Miw3IEBA
IHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmEKICAgICBDb2xvclNwYWNl
IGNvbG9yU3BhY2UgPSBEZXZpY2VDb2xvclNwYWNlOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBy
b290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVy
ZXIoKSkgewotICAgICAgICBjYXJldENvbG9yID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Y29sb3IoKTsKKyAgICAgICAgY2FyZXRDb2xvciA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAg
Y29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKTsK
ICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgLy8gQWRkIGEgd3Jh
cHBlciBzcGFuIHdpdGggdGhlIHN0eWxlcyB0aGF0IGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIG1h
cmt1cCBpbmhlcml0LgogICAgIE5vZGUqIHBhcmVudE9mTGFzdENsb3NlZCA9IGxhc3RDbG9zZWQg
PyBsYXN0Q2xvc2VkLT5wYXJlbnROb2RlKCkgOiAwOwogICAgIGlmIChwYXJlbnRPZkxhc3RDbG9z
ZWQgJiYgcGFyZW50T2ZMYXN0Q2xvc2VkLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9u
KFBvc2l0aW9uKHBhcmVudE9mTGFzdENsb3NlZCwgMCkpOworICAgICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24oUG9zaXRpb24ocGFyZW50T2ZMYXN0Q2xvc2VkLCAwKSk7CiAKICAgICAg
ICAgLy8gU3R5bGVzIHRoYXQgTWFpbCBibG9ja3F1b3RlcyBjb250cmlidXRlIHNob3VsZCBvbmx5
IGJlIHBsYWNlZCBvbiB0aGUgTWFpbCBibG9ja3F1b3RlLCB0byBoZWxwCiAgICAgICAgIC8vIHVz
IGRpZmZlcmVudGlhdGUgdGhvc2Ugc3R5bGVzIGZyb20gb25lcyB0aGF0IHRoZSB1c2VyIGhhcyBh
cHBsaWVkLiAgVGhpcyBoZWxwcyB1cwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAvLyBBZGQgYSBzdHlsZSBzcGFu
IHdpdGggdGhlIGRvY3VtZW50J3MgZGVmYXVsdCBzdHlsZXMuICBXZSBhZGQgdGhlc2UgaW4gYSBz
ZXBhcmF0ZQogICAgICAgICAvLyBzcGFuIHNvIHRoYXQgYXQgcGFzdGUgdGltZSB3ZSBjYW4gZGlm
ZmVyZW50aWF0ZSBiZXR3ZWVuIGRvY3VtZW50IGRlZmF1bHRzIGFuZCB1c2VyCiAgICAgICAgIC8v
IGFwcGxpZWQgc3R5bGVzLgotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGRlZmF1bHRTdHlsZSA9IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24oUG9zaXRpb24oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7
CiAKICAgICAgICAgaWYgKGRlZmF1bHRTdHlsZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAg
YWRkU3R5bGVNYXJrdXAocHJlTWFya3VwcywgbWFya3VwcywgZGVmYXVsdFN0eWxlLmdldCgpLCBk
b2N1bWVudCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJ
KHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgZ1Byb3Bl
cnR5V3JhcHBlck1hcFtudW1DU1NQcm8KIHN0YXRpYyBjb25zdCBpbnQgY0ludmFsaWRQcm9wZXJ0
eVdyYXBwZXJJbmRleCA9IC0xOwogCiAKLXN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkK
K3ZvaWQgQW5pbWF0aW9uQmFzZTo6ZW5zdXJlUHJvcGVydHlNYXAoKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBzaG91bGQgcmVmIGNvdW50
IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQW5pbWF0aW9uQ29udHJvbGxlciBpcyBkZXN0
cm95ZWQ/CiAgICAgaWYgKGdQcm9wZXJ0eVdyYXBwZXJzID09IDApIHsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDkgQEAgcHJvdGVjdGVkOgogICAgIGRvdWJsZSBtX3RvdGFsRHVyYXRpb24sIG1fbmV4dEl0
ZXJhdGlvbkR1cmF0aW9uOwogICAgIAogICAgIEFuaW1hdGlvbkJhc2UqIG1fbmV4dDsKKyAgICAK
K3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gNTk4
NzYpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MDcsMTQgKzQwNywxNCBAQCBOU0RpY3Rpb25hcnkqIEZyYW1lOjpmb250QXR0cmlidXRlc0ZvclNl
CiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFy
eSBkaWN0aW9uYXJ5XTsKIAotICAgIGlmIChzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxp
ZCgpICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpICE9IDApCi0gICAgICAgIFty
ZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpKSBmb3JLZXk6
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFs
cGhhKCkgIT0gMCkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5T
QmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPmZvbnQoKS5w
cmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5
bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpICYmIHN0eWxlLT5j
b2xvcigpICE9IENvbG9yOjpibGFjaykKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xv
cihzdHlsZS0+Y29sb3IoKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CisgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciku
aXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cikgIT0gQ29sb3I6OmJsYWNrKQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwogCiAgICAgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93ID0gc3R5bGUtPnRleHRTaGFkb3coKTsKICAgICBpZiAoc2hhZG93KSB7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB2b2lk
IEVsbGlwc2lzQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhCiB7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpOwotICAgIENvbG9yIHRleHRDb2xvciA9
IHN0eWxlLT5jb2xvcigpOworICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgaWYgKHRleHRDb2xvciAhPSBjb250
ZXh0LT5maWxsQ29sb3IoKSkKICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xv
ciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKQEAg
LTc4LDcgKzc4LDcgQEAgSW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdChpbnQgdAog
CiB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQp
CiB7Ci0gICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPmNvbG9yKCk7CisgICAgQ29sb3IgdGV4
dENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsK
ICAgICBDb2xvciBjID0gbV9yZW5kZXJlci0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAg
ICAgaWYgKCFjLmlzVmFsaWQoKSB8fCAhYy5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDkg
KzQ1NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25TdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBDb2xvciBzdHJva2UgPSBwYWludEluZm8uZm9yY2VCbGFja1Rl
eHQgPyBDb2xvcjo6YmxhY2sgOiBwc2V1ZG9TdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCk7Ci0gICAg
ICAgICAgICBpZiAoIXN0cm9rZS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgc3Ryb2tlID0g
cHNldWRvU3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBDb2xvciBzdHJva2UgPSBwYWludElu
Zm8uZm9yY2VCbGFja1RleHQgPyBDb2xvcjo6YmxhY2sgOiBwc2V1ZG9TdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKICAgICAgICAg
ICAgIGlmIChzdHJva2UgIT0gc2VsZWN0aW9uU3Ryb2tlQ29sb3IpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgICAgICAgICAgICAgcGFpbnRT
ZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZgogCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbG9yIGlmIHdlJ3JlIHRo
ZSBib2R5LgogICAgIGlmIChpc0JvZHkoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0VGV4dENv
bG9yKHN0eWxlKCktPmNvbG9yKCkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRUZXh0Q29sb3Io
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCkBAIC01NzcsOSAr
NTc3LDkgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbgogdm9pZCBS
ZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKICAgICBjb25zdCBGaWxsTGF5ZXIqIGJnTGF5ZXIgPSBzdHlsZSgp
LT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgQ29sb3IgYmdDb2xvciA9IHN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpOworICAgIENvbG9yIGJnQ29sb3IgPSBzdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIFJlbmRlck9iamVjdCog
Ym9keU9iamVjdCA9IDA7Ci0gICAgaWYgKCFzdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkgJiYgbm9k
ZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgaWYg
KCFoYXNCYWNrZ3JvdW5kKCkgJiYgbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omh0bWxUYWcpKSB7CiAgICAgICAgIC8vIExvY2F0ZSB0aGUgPGJvZHk+IGVsZW1lbnQgdXNp
bmcgdGhlIERPTS4gIFRoaXMgaXMgZWFzaWVyIHRoYW4gdHJ5aW5nCiAgICAgICAgIC8vIHRvIGNy
YXdsIGFyb3VuZCBhIHJlbmRlciB0cmVlIHdpdGggcG90ZW50aWFsIDpiZWZvcmUvOmFmdGVyIGNv
bnRlbnQgYW5kCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUg
PGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+CkBAIC01ODgsNyArNTg4
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgICAgICBi
b2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aGFzTG9jYWxOYW1lKGJvZHlUYWcpKSA/IGJvZHkt
PnJlbmRlcmVyKCkgOiAwOwogICAgICAgICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAgICAg
YmdMYXllciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKLSAgICAg
ICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsK
KyAgICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC02NDksOCArNjQ5LDggQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnNX
aXRoUwogICAgICAgICAvLyBUaGUgPGJvZHk+IG9ubHkgcGFpbnRzIGl0cyBiYWNrZ3JvdW5kIGlm
IHRoZSByb290IGVsZW1lbnQgaGFzIGRlZmluZWQgYSBiYWNrZ3JvdW5kCiAgICAgICAgIC8vIGlu
ZGVwZW5kZW50IG9mIHRoZSBib2R5LiAgR28gdGhyb3VnaCB0aGUgRE9NIHRvIGdldCB0byB0aGUg
cm9vdCBlbGVtZW50J3MgcmVuZGVyIG9iamVjdCwKICAgICAgICAgLy8gc2luY2UgdGhlIHJvb3Qg
Y291bGQgYmUgaW5saW5lIGFuZCB3cmFwcGVkIGluIGFuIGFub255bW91cyBibG9jay4KLSAgICAg
ICAgaWYgKCFpc0JvZHkoKSB8fCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aGFzQmFja2dyb3VuZCgpKQotICAgICAgICAgICAgcGFpbnRGaWxsTGF5
ZXJzKHBhaW50SW5mbywgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tn
cm91bmRMYXllcnMoKSwgdHgsIHR5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKCFpc0Jv
ZHkoKSB8fCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+aGFzQmFj
a2dyb3VuZCgpKQorICAgICAgICAgICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5
bGUoKS0+YmFja2dyb3VuZExheWVycygpLCB0eCwgdHksIHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgdGhlbWUoKS0+cGFp
bnREZWNvcmF0aW9ucyh0aGlzLCBwYWludEluZm8sIEludFJlY3QodHgsIHR5LCB3aWR0aCwgaGVp
Z2h0KSk7CiAgICAgfQpAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50
TGF5ZXJSZWN0c0ZvckltYWcKICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBp
bWFnZSBpcyBiZWluZyB1c2VkLCBjb21wdXRlIHRoZSByZW5kZXJlciBhbmQgdGhlIHJlY3QKICAg
ICAgICAgICAgIC8vIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeQogICAgICAgICAgICAgaWYgKCFsYXll
clJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkcmF3aW5nUm9vdEJhY2tncm91bmQg
PSBkcmF3aW5nQmFja2dyb3VuZCAmJiAoaXNSb290KCkgfHwgKGlzQm9keSgpICYmICFkb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQmFja2dyb3Vu
ZCgpKSk7CisgICAgICAgICAgICAgICAgYm9vbCBkcmF3aW5nUm9vdEJhY2tncm91bmQgPSBkcmF3
aW5nQmFja2dyb3VuZCAmJiAoaXNSb290KCkgfHwgKGlzQm9keSgpICYmICFkb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+aGFzQmFja2dyb3VuZCgpKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGRyYXdpbmdSb290QmFja2dyb3VuZCkgewogICAgICAgICAgICAgICAgICAg
ICBsYXllclJlbmRlcmVyID0gdmlldygpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcgKzMw
NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnVwZGF0ZUJveE1vZGUKIHsKICAgICAv
LyBTZXQgdGhlIGFwcHJvcHJpYXRlIGJpdHMgZm9yIGEgYm94IG1vZGVsIG9iamVjdC4gIFNpbmNl
IGFsbCBiaXRzIGFyZSBjbGVhcmVkIGluIHN0eWxlV2lsbENoYW5nZSwKICAgICAvLyB3ZSBvbmx5
IGNoZWNrIGZvciBiaXRzIHRoYXQgY291bGQgcG9zc2libHkgYmUgc2V0IHRvIHRydWUuCi0gICAg
c2V0SGFzQm94RGVjb3JhdGlvbnMoc3R5bGUoKS0+aGFzQm9yZGVyKCkgfHwgc3R5bGUoKS0+aGFz
QmFja2dyb3VuZCgpIHx8IHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZSgpLT5ib3hT
aGFkb3coKSk7CisgICAgc2V0SGFzQm94RGVjb3JhdGlvbnMoaGFzQmFja2dyb3VuZCgpIHx8IHN0
eWxlKCktPmhhc0JvcmRlcigpIHx8IHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZSgp
LT5ib3hTaGFkb3coKSk7CiAgICAgc2V0SW5saW5lKHN0eWxlKCktPmlzRGlzcGxheUlubGluZVR5
cGUoKSk7CiAgICAgc2V0UmVsUG9zaXRpb25lZChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0
aXZlUG9zaXRpb24pOwogfQpAQCAtMTMyMSw3ICsxMzIxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdo
dCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAgICAgfQogCi0gICAgYm9vbCBo
YXNPcGFxdWVCYWNrZ3JvdW5kID0gcy0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpICYmIHMt
PmJhY2tncm91bmRDb2xvcigpLmFscGhhKCkgPT0gMjU1OworICAgIGJvb2wgaGFzT3BhcXVlQmFj
a2dyb3VuZCA9IHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikuaXNWYWxpZCgpICYmIHMtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikuYWxwaGEoKSA9PSAyNTU7CiAgICAgZm9yIChjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3cgPSBzLT5ib3hTaGFkb3coKTsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQo
KSkgewogICAgICAgICBpZiAoc2hhZG93LT5zdHlsZSgpICE9IHNoYWRvd1N0eWxlKQogICAgICAg
ICAgICAgY29udGludWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShy
ZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBh
aW50Qm94RGVjb3JhdGlvbnMKIAogICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIE5vcm1hbCk7CiAKLSAgICBwYWludEZpbGxMYXllcnMo
cGFpbnRJbmZvLCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3Vu
ZExheWVycygpLCB0eCwgdHksIHcsIGgpOworICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8s
IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKICAgICBwYWlu
dEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBJbnNl
dCk7CiAKICAgICBpZiAoIXN0eWxlKCktPmhhc0JvcmRlcigpKQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpw
YWludE9iamVjCiAgICAgICAgICAgICArIGJ1dHRvblJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGJ1
dHRvblJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGJ1dHRvblJlbmRlcmVyLT5wYWRkaW5nVG9wKCkK
ICAgICAgICAgICAgICsgYnV0dG9uUmVuZGVyZXItPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgZmFs
c2UpOwogCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+
Y29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBE
cmF3IHRoZSBmaWxlbmFtZQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0JpZGlUZXh0
KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAgICAg
Ly8gRmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8u
Y29udGV4dDsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSgpLT5jb2xvclNwYWNl
KCk7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+aGFzQm9y
ZGVyQ29sb3IoKSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmlsbENvbG9y
KCksIGNvbG9yU3BhY2UpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1l
U2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCksIGNvbG9yU3Bh
Y2UpOwogICAgIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhh
dmUgZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8g
Yml0IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KQEAgLTEwNyw3ICsxMDcsNyBA
QCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgLy8gRmlsbCBm
aXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsK
ICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSgpLT5jb2xvclNwYWNlKCk7Ci0gICAg
Y29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+aGFzQm9yZGVyQ29sb3Io
KSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmlsbENvbG9yKCksIGNvbG9y
U3BhY2UpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0KCktPmhh
c0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCksIGNvbG9yU3BhY2UpOwogCiAg
ICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9v
bSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZp
bGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWlu
dFJlcGxhY2VkKFBhaW50SW5mCiAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0
cmluZ01vZGlmaWVkQnlFbmNvZGluZyhtX2FsdFRleHQpOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT5jb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7
CiAgICAgICAgICAgICAgICAgaW50IGF4ID0gdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZDsKICAg
ICAgICAgICAgICAgICBpbnQgYXkgPSB0eSArIHRvcEJvcmRlciArIHRvcFBhZDsKICAgICAgICAg
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogc3RhdGljIGJvb2wgaGFzQm9yZGVyT3V0bGluZU9yU2hhZG93KGNvbnN0IFJlbmRl
clN0eWxlKik7Ci1zdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChjb25z
dCBSZW5kZXJTdHlsZSopOworc3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91
bmQoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiBzdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9uc09y
QmFja2dyb3VuZEltYWdlKGNvbnN0IFJlbmRlclN0eWxlKik7CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpczNEQ2FudmFzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC01MzMsOSArNTMzLDkgQEAg
c3RhdGljIGJvb2wgaGFzQm9yZGVyT3V0bGluZU9yU2hhZG93KGNvbgogICAgIHJldHVybiBzdHls
ZS0+aGFzQm9yZGVyKCkgfHwgc3R5bGUtPmhhc0JvcmRlclJhZGl1cygpIHx8IHN0eWxlLT5oYXNP
dXRsaW5lKCkgfHwgc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZS0+Ym94U2hhZG93KCk7
CiB9CiAKLXN0YXRpYyBib29sIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBib29sIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3Jv
dW5kKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGhhc0JvcmRl
ck91dGxpbmVPclNoYWRvdyhzdHlsZSkgfHwgc3R5bGUtPmhhc0JhY2tncm91bmQoKTsKKyAgICBy
ZXR1cm4gaGFzQm9yZGVyT3V0bGluZU9yU2hhZG93KHJlbmRlcmVyLT5zdHlsZSgpKSB8fCByZW5k
ZXJlci0+aGFzQmFja2dyb3VuZCgpOwogfQogCiBzdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9u
c09yQmFja2dyb3VuZEltYWdlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTU1MSwzNiAr
NTUxLDMyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckhhc0JhY2sKICAgICAg
ICAgaWYgKCFodG1sT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
LSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gaHRtbE9iamVjdC0+c3R5bGUoKTsKLSAgICAg
ICAgaWYgKHN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkpCisgICAgICAgIGlmIChodG1sT2JqZWN0LT5o
YXNCYWNrZ3JvdW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAg
ICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IGh0bWxPYmplY3QtPmZpcnN0Q2hpbGQoKTsK
ICAgICAgICAgaWYgKCFib2R5T2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgc3R5bGUgPSBib2R5T2JqZWN0LT5zdHlsZSgpOwotICAgICAgICByZXR1
cm4gc3R5bGUtPmhhc0JhY2tncm91bmQoKTsKKyAgICAgICAgcmV0dXJuIGJvZHlPYmplY3QtPmhh
c0JhY2tncm91bmQoKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxl
KCktPmhhc0JhY2tncm91bmQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGFzQmFja2dyb3Vu
ZCgpOwogfQogCi1jb25zdCBDb2xvciYgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckJhY2tn
cm91bmRDb2xvcigpIGNvbnN0Citjb25zdCBDb2xvciBSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRl
cmVyQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogc2hhcmUgbW9yZSBj
b2RlIGhlcmUKICAgICBpZiAocmVuZGVyZXIoKS0+bm9kZSgpICYmIHJlbmRlcmVyKCktPm5vZGUo
KS0+aXNEb2N1bWVudE5vZGUoKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGh0bWxPYmplY3Qg
PSByZW5kZXJlcigpLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IGh0bWxPYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZS0+aGFzQmFja2dyb3VuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAg
aWYgKGh0bWxPYmplY3QtPmhhc0JhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBodG1s
T2JqZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpOwogCiAgICAgICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IGh0bWxPYmpl
Y3QtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgc3R5bGUgPSBib2R5T2JqZWN0LT5zdHlsZSgpOwot
ICAgICAgICByZXR1cm4gc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICByZXR1cm4g
Ym9keU9iamVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+
YmFja2dyb3VuZENvbG9yKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiB9CiAKIC8vIEEg
InNpbXBsZSBjb250YWluZXIgbGF5ZXIiIGlzIGEgUmVuZGVyTGF5ZXIgd2hpY2ggaGFzIG5vIHZp
c2libGUgY29udGVudCB0byByZW5kZXIuCkBAIC01OTgsNyArNTk0LDcgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OmlzU2ltcGxlQ29udGFpbgogICAgIC8vIFJlamVjdCBhbnl0aGluZyB0aGF0
IGhhcyBhIGJvcmRlciwgYSBib3JkZXItcmFkaXVzIG9yIG91dGxpbmUsCiAgICAgLy8gb3IgYW55
IGJhY2tncm91bmQgKGNvbG9yIG9yIGltYWdlKS4KICAgICAvLyBGSVhNRTogd2UgY291bGQgb3B0
aW1pemUgbGF5ZXJzIGZvciBzaW1wbGUgYmFja2dyb3VuZHMuCi0gICAgaWYgKGhhc0JveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKHN0eWxlKSkKKyAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnNPckJh
Y2tncm91bmQocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
SWYgd2UgaGF2ZSBnb3QgdGhpcyBmYXIgYW5kIHRoZSByZW5kZXJlciBoYXMgbm8gY2hpbGRyZW4s
IHRoZW4gd2UncmUgb2suCkBAIC03MDgsNyArNzA0LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OmNvbnRhaW5zUGFpbnRlZAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBvcHRpbWl6ZSBjYXNl
cyB3aGVyZSB0aGUgaW1hZ2UsIHZpZGVvIG9yIGNhbnZhcyBpcyBrbm93biB0byBmaWxsIHRoZSBi
b3JkZXIgYm94IGVudGlyZWx5LAogICAgIC8vIGFuZCBzZXQgYmFja2dyb3VuZCBjb2xvciBvbiB0
aGUgbGF5ZXIgaW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYmFja2luZyBzdG9y
ZSBhbmQgcGFpbnRpbmcuCiAgICAgaWYgKHJlbmRlcmVyKCktPmlzVmlkZW8oKSB8fCBpczNEQ2Fu
dmFzKHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tn
cm91bmQocmVuZGVyZXIoKS0+c3R5bGUoKSk7CisgICAgICAgIHJldHVybiBoYXNCb3hEZWNvcmF0
aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
NzE4LDcgKzcxNCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWQK
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKCkgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJlbmRlcmVyKCk7Ci0gICAg
cmV0dXJuIHJlbmRlck9iamVjdC0+aXNJbWFnZSgpICYmICFoYXNCb3hEZWNvcmF0aW9uc09yQmFj
a2dyb3VuZChyZW5kZXJPYmplY3QtPnN0eWxlKCkpOworICAgIHJldHVybiByZW5kZXJPYmplY3Qt
PmlzSW1hZ2UoKSAmJiAhaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyT2JqZWN0
KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRlcmVyQ29udGVudENoYW5nZWQo
KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDU5
ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlSW1hZ2VD
b250ZW50cygpOwogCiAgICAgYm9vbCByZW5kZXJlckhhc0JhY2tncm91bmQoKSBjb25zdDsKLSAg
ICBjb25zdCBDb2xvciYgcmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICBjb25z
dCBDb2xvciByZW5kZXJlckJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNO
b25Db21wb3NpdGluZ0NvbnRlbnQoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIGlmICghaXRlbVN0eWxlKQog
ICAgICAgICBpdGVtU3R5bGUgPSBzdHlsZSgpOwogICAgIAotICAgIENvbG9yIHRleHRDb2xvciA9
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5jb2xvcigp
IDogc3R5bGUoKS0+Y29sb3IoKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBlbGVtZW50LT5yZW5k
ZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpOwogICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNl
bGVjdGVkKCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
LT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IG5v
ZGUoKSkKICAgICAgICAgICAgIHRleHRDb2xvciA9IHRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnBhaW50SXRlbUJhY2tncm91bmQoCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJh
Y2tDb2xvciA9IHRoZW1lKCktPmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpOwogICAgIH0gZWxzZQotICAgICAgICBiYWNrQ29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkgOiBzdHlsZSgp
LT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgYmFja0NvbG9yID0gZWxlbWVudC0+cmVuZGVy
U3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgOiBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gRHJhdyB0aGUgYmFja2dy
b3VuZCBmb3IgdGhpcyBsaXN0IGJveCBpdGVtCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJTdHls
ZSgpIHx8IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBISURERU4pIHsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbFJlY3QsIHNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIH0KIAotICAgIGNv
bnN0IENvbG9yIGNvbG9yKHN0eWxlKCktPmNvbG9yKCkpOworICAgIGNvbnN0IENvbG9yIGNvbG9y
KHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGNvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsOSArMTE0LDkgQEAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlcihSZW5k
ZXJPYmplYwogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5zZXRTaG91bGRBbnRp
YWxpYXModHJ1ZSk7CiAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwot
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKSwgRGV2
aWNlQ29sb3JTcGFjZSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciksIERldmljZUNvbG9y
U3BhY2UpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHlsZS0+Ym9yZGVyTGVm
dFdpZHRoKCkpOwotICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZS0+YmFja2dyb3VuZENv
bG9yKCksIERldmljZUNvbG9yU3BhY2UpOworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgRGV2
aWNlQ29sb3JTcGFjZSk7CiAgICAgY29udGV4dC0+ZHJhd1JlY3QocmVjdCk7CiAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogCkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIGJvb2wgcGFpbnRNZWRp
YVNsaWRlcihSZW5kZXJPYmplYwogICAgICAgICBzbGlkZXJUb3BSaWdodC5tb3ZlKDAsIGJ1ZmZl
cmVkUmVjdC5oZWlnaHQoKSk7CiAKICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoc2xpZGVyVG9wTGVmdCwgc2xpZGVyVG9wUmlnaHQpOwotICAgICAg
ICBDb2xvciBzdGFydENvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT5jb2xvcigpOworICAgICAgICBD
b2xvciBzdGFydENvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBz
dGFydENvbG9yKTsKICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0
YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9yLmJs
dWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOwogCkBAIC0yMDcsMTMgKzIwNywxMyBAQCBz
dGF0aWMgYm9vbCBwYWludE1lZGlhVGltZWxpbmVDb250YWluZXIoCiAKICAgICAgICAgLy8gRHJh
dyB0aGUgbGVmdCBib3JkZXIgdXNpbmcgQ1NTIGRlZmluZWQgd2lkdGggYW5kIGNvbG9yLgogICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJM
ZWZ0V2lkdGgoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9iamVjdC0+c3R5
bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkucmdiKCksIERldmljZUNvbG9yU3BhY2UpOworICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikucmdiKCksIERldmljZUNvbG9yU3Bh
Y2UpOwogICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIDEsIHJl
Y3QueSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVjdC54KCkgKyAx
LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBEcmF3IHRoZSByaWdo
dCBib3JkZXIgdXNpbmcgQ1NTIGRlZmluZWQgd2lkdGggYW5kIGNvbG9yLgogICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRo
KCkpOwotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0eWxlKCktPmJv
cmRlclJpZ2h0Q29sb3IoKS5yZ2IoKSwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKG9iamVjdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcikucmdiKCksIERldmljZUNvbG9yU3BhY2UpOwog
ICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgo
KSAtIDEsIHJlY3QueSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVj
dC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwOSw3ICs0MDksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxl
CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogICAgIAogICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpIDogZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwotICAgIHJldHVybiBzdHls
ZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT5jb2xvcigpLCBpdGVtQmFja2dyb3VuZENvbG9yKGxp
c3RJbmRleCksIHN0eWxlLT5mb250KCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwg
c3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigpKSA6IG1lbnVTdHlsZSgpOwor
ICAgIHJldHVybiBzdHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdEluZGV4KSwg
c3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZS0+dGV4
dEluZGVudCgpLCBzdHlsZS0+ZGlyZWN0aW9uKCkpIDogbWVudVN0eWxlKCk7CiB9CiAKIENvbG9y
IFJlbmRlck1lbnVMaXN0OjppdGVtQmFja2dyb3VuZENvbG9yKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QKQEAgLTQxNywxOCArNDE3LDE4IEBAIENvbG9yIFJlbmRlck1lbnVMaXN0OjppdGVtQmFj
a2dyb3VuZENvbG8KICAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+
PSBsaXN0SXRlbXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gc3R5bGUoKS0+YmFja2dyb3VuZENv
bG9yKCk7CisgICAgICAgIHJldHVybiBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRl
bXNbbGlzdEluZGV4XTsKIAogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAoZWxl
bWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gZWxlbWVudC0+
cmVuZGVyU3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGJhY2tncm91bmRDb2xv
ciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgLy8gSWYgdGhlIGl0ZW0gaGFzIGFuIG9wYXF1ZSBi
YWNrZ3JvdW5kIGNvbG9yLCByZXR1cm4gdGhhdC4KICAgICBpZiAoIWJhY2tncm91bmRDb2xvci5o
YXNBbHBoYSgpKQogICAgICAgICByZXR1cm4gYmFja2dyb3VuZENvbG9yOwogCiAgICAgLy8gT3Ro
ZXJ3aXNlLCB0aGUgaXRlbSdzIGJhY2tncm91bmQgaXMgb3ZlcmxheWVkIG9uIHRvcCBvZiB0aGUg
bWVudSBiYWNrZ3JvdW5kLgotICAgIGJhY2tncm91bmRDb2xvciA9IHN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpLmJsZW5kKGJhY2tncm91bmRDb2xvcik7CisgICAgYmFja2dyb3VuZENvbG9yID0g
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KS5ibGVuZChiYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghYmFja2dyb3VuZENvbG9yLmhhc0Fs
cGhhKCkpCiAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kQ29sb3I7CiAKQEAgLTQzOSw3ICs0Mzks
NyBAQCBDb2xvciBSZW5kZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvCiBQb3B1cE1lbnVT
dHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0eWxlKCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHls
ZSogcyA9IG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay0+c3R5bGUoKSA6IHN0eWxlKCk7Ci0g
ICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHMtPmNvbG9yKCksIHMtPmJhY2tncm91bmRDb2xvcigp
LCBzLT5mb250KCksIHMtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzLT50ZXh0SW5kZW50KCks
IHMtPmRpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUocy0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzLT5mb250KCksIHMtPnZpc2liaWxpdHkoKSA9
PSBWSVNJQkxFLCBzLT50ZXh0SW5kZW50KCksIHMtPmRpcmVjdGlvbigpKTsKIH0KIAogSG9zdFdp
bmRvdyogUmVuZGVyTWVudUxpc3Q6Omhvc3RXaW5kb3coKSBjb25zdApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODIsOSArMTM4Miw5IEBAIENv
bG9yIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZEMKIHsKICAgICBDb2xvciBjb2xv
cjsKICAgICBpZiAoc3R5bGUoKS0+dXNlclNlbGVjdCgpICE9IFNFTEVDVF9OT05FKSB7Ci0gICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0VW5jYWNoZWRQc2V1ZG9T
dHlsZShTRUxFQ1RJT04pOwotICAgICAgICBpZiAocHNldWRvU3R5bGUgJiYgcHNldWRvU3R5bGUt
PmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGNvbG9yID0gcHNldWRv
U3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmJsZW5kV2l0aFdoaXRlKCk7CisgICAgICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFNFTEVD
VElPTik7CisgICAgICAgIGlmIChwc2V1ZG9TdHlsZSAmJiBwc2V1ZG9TdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmJsZW5kV2l0aFdoaXRlKCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNvbG9yID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9j
dXNlZEFuZEFjdGl2ZSgpID8KICAgICAgICAgICAgICAgICAgICAgdGhlbWUoKS0+YWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgOgpAQCAtMTQwMSw5ICsxNDAxLDkgQEAgQ29sb3IgUmVu
ZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQwogICAgICAgICByZXR1cm4gY29sb3I7CiAK
ICAgICBpZiAoUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZSA9IGdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoU0VMRUNUSU9OKSkgewotICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT50ZXh0
RmlsbENvbG9yKCk7CisgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwogICAgICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPmNvbG9yKCk7
CisgICAgICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcik7CiAgICAgfSBlbHNlCiAgICAgICAgIGNvbG9yID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpID8KICAgICAgICAg
ICAgICAgICB0aGVtZSgpLT5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSA6CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDYgKzQwMSwxMyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNCb3hEZWNvcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcGFpbnRCYWNrZ3JvdW5kOyB9CiAgICAgYm9vbCBtdXN0UmVwYWludEJhY2tncm91bmRP
ckJvcmRlcigpIGNvbnN0OworICAgIGJvb2wgaGFzQmFja2dyb3VuZCgpIGNvbnN0CisgICAgewor
ICAgICAgICBDb2xvciBjb2xvciA9IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkgJiYg
Y29sb3IuYWxwaGEoKSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHN0eWxlKCktPmhhc0JhY2tncm91bmRJbWFnZSgpOworICAgIH0KIAogICAgIGJvb2wgbmVl
ZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTGF5b3V0IHx8IG1fbm9ybWFsQ2hpbGRO
ZWVkc0xheW91dCB8fCBtX3Bvc0NoaWxkTmVlZHNMYXlvdXQgfHwgbV9uZWVkc1Bvc2l0aW9uZWRN
b3ZlbWVudExheW91dDsgfQogICAgIGJvb2wgc2VsZk5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1
cm4gbV9uZWVkc0xheW91dDsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlLmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHJlZ2lzdGVyUGVuZGluZ1Jlc291cgogICAgIG9iamVjdC0+ZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHN0YXRpY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGp1c3RDb2xvckZvclBzZXVkb1J1bGVzKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCB1
c2VGaWxsUGFpbnQsIENvbG9yJiBjb2xvcikKK2lubGluZSB2b2lkIFJlbmRlclNWR1Jlc291cmNl
OjphZGp1c3RDb2xvckZvclBzZXVkb1J1bGVzKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9v
bCB1c2VGaWxsUGFpbnQsIENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoc3R5bGUtPmluc2lkZUxp
bmsoKSAhPSBJbnNpZGVWaXNpdGVkTGluaykKICAgICAgICAgcmV0dXJuOwpAQCAtOTUsNyArOTUs
NyBAQCBSZW5kZXJTVkdSZXNvdXJjZSogUmVuZGVyU1ZHUmVzb3VyY2U6OmZpCiAKICAgICAgICAg
Q29sb3IgZmlsbENvbG9yOwogICAgICAgICBpZiAoZmlsbFBhaW50LT5wYWludFR5cGUoKSA9PSBT
VkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCi0gICAgICAgICAgICBmaWxsQ29s
b3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGZpbGxDb2xvciA9IHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGZpbGxDb2xvciA9IGZpbGxQYWludC0+Y29sb3IoKTsKIApAQCAtMTQ5LDcgKzE0OSw3
IEBAIFJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6c3QKIAogICAgICAgICBD
b2xvciBzdHJva2VDb2xvcjsKICAgICAgICAgaWYgKHN0cm9rZVBhaW50LT5wYWludFR5cGUoKSA9
PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCi0gICAgICAgICAgICBzdHJv
a2VDb2xvciA9IHN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzdHJva2VDb2xvciA9IHN0cm9rZVBhaW50LT5jb2xvcigpOwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHJldmlzaW9uIDU5ODc2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNiArNDQsNyBAQCBlbnVtIFJlbmRlclNWR1Jlc291cmNlTW9kZSB7CiAgICAgQXBwbHlUb1Rl
eHRNb2RlICAgID0gMSA8PCAzIC8vIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBBcHBseVRve0Zp
bGx8U3Ryb2tlfU1vZGUKIH07CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNzgsNiArNzksOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jl
c291cmNlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgc3Rh
dGljIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc2hhcmVkU29saWRQYWludGluZ1Jlc291
cmNlKCk7CiAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgYWRqdXN0Q29sb3JGb3JQc2V1ZG9S
dWxlcyhjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYpOworICAg
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgbWFya0ZvckxheW91dEFuZFJlc291cmNlSW52YWxpZGF0
aW9uKFJlbmRlck9iamVjdCopOwogfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJ
KHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRC
b3hEZWNvcmF0aW9ucyhQYQogCiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgdywgaCwgc3R5bGUoKSwgTm9ybWFsKTsKICAgICAKLSAgICBwYWludEZpbGxMYXll
cnMocGFpbnRJbmZvLCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+YmFja2dy
b3VuZExheWVycygpLCB0eCwgdHksIHcsIGgpOworICAgIHBhaW50RmlsbExheWVycyhwYWludElu
Zm8sIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvciksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgdHgsIHR5LCB3LCBoKTsKICAgICBw
YWludEJveFNoYWRvdyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBJ
bnNldCk7CiAKICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyKCkgJiYgIWNvbGxhcHNlQm9yZGVy
cygpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKICNpZm5kZWYgUmVuZGVyVGFibGVfaAogI2RlZmluZSBSZW5kZXJUYWJsZV9oCiAKKyNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGlu
dCBib3JkZXJUb3AoKSBjb25zdDsKICAgICBpbnQgYm9yZGVyQm90dG9tKCkgY29uc3Q7CiAgICAg
Ci0gICAgY29uc3QgQ29sb3ImIGJnQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5iYWNr
Z3JvdW5kQ29sb3IoKTsgfQorICAgIGNvbnN0IENvbG9yIGJnQ29sb3IoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpOyB9CiAKICAgICBpbnQgb3V0ZXJCb3JkZXJUb3AoKSBjb25zdDsKICAgICBpbnQgb3V0ZXJC
b3JkZXJCb3R0b20oKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDksNyArODQ5LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZQogICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQg
aCA9IGhlaWdodCgpOwogCi0gICAgQ29sb3IgYyA9IGJhY2tncm91bmRPYmplY3QtPnN0eWxlKCkt
PmJhY2tncm91bmRDb2xvcigpOworICAgIENvbG9yIGMgPSBiYWNrZ3JvdW5kT2JqZWN0LT5zdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwog
ICAgIGNvbnN0IEZpbGxMYXllciogYmdMYXllciA9IGJhY2tncm91bmRPYmplY3QtPnN0eWxlKCkt
PmJhY2tncm91bmRMYXllcnMoKTsKIAogICAgIGlmIChiZ0xheWVyLT5oYXNJbWFnZSgpIHx8IGMu
aXNWYWxpZCgpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OmFkanVzdElubmVyVGV4dFMKIAogICAgIGJvb2wgZGlzYWJsZWQgPSB1cGRhdGVVc2Vy
TW9kaWZ5UHJvcGVydHkobm9kZSgpLCB0ZXh0QmxvY2tTdHlsZSk7CiAgICAgaWYgKGRpc2FibGVk
KQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29sb3IoZGlzYWJsZWRUZXh0Q29sb3IodGV4
dEJsb2NrU3R5bGUtPmNvbG9yKCksIHN0YXJ0U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKSk7Cisg
ICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRDb2xvcihkaXNhYmxlZFRleHRDb2xvcih0ZXh0Qmxv
Y2tTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdGFydFN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk5lZWRlZChUZXh0
Q29udHJvbElubmVyRWxlbWVudCogaW5uZXJCbG9jaykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNTk4NzYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03ODgsNyArNzg4LDcgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaQogCiBQb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Om1lbnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0
eWxlKCktPmNvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5mb250
KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZSgpLT50ZXh0SW5kZW50
KCksIHN0eWxlKCktPmRpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgp
LT5mb250KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZSgpLT50ZXh0
SW5kZW50KCksIHN0eWxlKCktPmRpcmVjdGlvbigpKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRMZWZ0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IAogICAgICAgICAgICAgLy8gVGVzdCB0aGUg
c3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBib3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCiAgICAg
ICAgICAgICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIgfHwKICAgICAgICAgICAg
ICAgICAgICAgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZCB8fAotICAg
ICAgICAgICAgICAgICAgICBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkgIT0gYmFja2dyb3VuZENv
bG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiA1OTg3
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDggKzMwOCw4IEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlr
ZShSZW5kZXJUaGVtZSoKICAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJlY3Qud2lk
dGgoKTsKICAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOwog
ICAgIFNrQ29sb3IgYmFzZUNvbG9yID0gU2tDb2xvclNldEFSR0IoMHhmZiwgMHhkZCwgMHhkZCwg
MHhkZCk7Ci0gICAgaWYgKG8tPnN0eWxlKCktPmhhc0JhY2tncm91bmQoKSkKLSAgICAgICAgYmFz
ZUNvbG9yID0gby0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkucmdiKCk7CisgICAgaWYgKG8t
Pmhhc0JhY2tncm91bmQoKSkKKyAgICAgICAgYmFzZUNvbG9yID0gby0+c3R5bGUoKS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKTsKICAgICBk
b3VibGUgaCwgcywgbDsKICAgICBDb2xvcihiYXNlQ29sb3IpLmdldEhTTChoLCBzLCBsKTsKICAg
ICAvLyBPdXIgc3RhbmRhcmQgZ3JhZGllbnQgaXMgZnJvbSAweGRkIHRvIDB4ZjguIFRoaXMgaXMg
dGhlIGFtb3VudCBvZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlz
aW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTk5NCw3ICs5OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uCiAgICAgCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+Y29sb3IoKSwgby0+
c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
by0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlU3R5bGUoTm9TdHJva2UpOwogCiAgICAgRmxvYXRQb2ludCBhcnJvdzFbM107CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgwLDcgKzE4MCw3IEBAIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29uc3QK
ICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQogCi1zdGF0aWMgdm9pZCB3cml0
ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5k
ZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKK3ZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVS
ZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgUmVuZGVy
QXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAgICAgdHMgPDwgby5yZW5kZXJOYW1lKCk7CiAK
QEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPCiAKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKIAotICAgIHdyaXRlUmVuZGVyT2Jq
ZWN0KHRzLCBvLCBiZWhhdmlvcik7CisgICAgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJP
YmplY3QodHMsIG8sIGJlaGF2aW9yKTsKICAgICB0cyA8PCAiXG4iOwogCiAgICAgaWYgKG8uaXNU
ZXh0KCkgJiYgIW8uaXNCUigpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5oCShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTQgQEAgU3RyaW5nIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oRnJhbWUqLCBSZQogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyT2JqZWN0JiwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yID0gUmVuZGVy
QXNUZXh0QmVoYXZpb3JOb3JtYWwpOwogdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50
IGluZGVudCk7CiAKK2NsYXNzIFJlbmRlclRyZWVBc1RleHQgeworLy8gRklYTUU6IFRoaXMgaXMg
YSBjaGVlc3kgaGFjayB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBSZW5kZXJTdHlsZSBjb2xvcnMu
ICBJdCB3b24ndCBiZSBuZWVkZWQgaWYgd2UgY29udmVydAorLy8gaXQgdG8gdXNlIHZpc2l0ZWRE
ZXBlbmRlbnRDb2xvciBpbnN0ZWFkLiAoVGhpcyBqdXN0IGludm9sdmVzIHJlYmFzZWxpbmluZyBt
YW55IHJlc3VsdHMgdGhvdWdoLCBzbyBmb3Igbm93IGl0J3MKKy8vIG5vdCBiZWluZyBkb25lKS4K
K3B1YmxpYzoKK3N0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKTsKK307
CisKIC8vIEhlbHBlciBmdW5jdGlvbiBzaGFyZWQgd2l0aCBTVkdSZW5kZXJUcmVlQXNUZXh0CiBT
dHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYpOwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTk4NzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24o
aW4KICAgICBpZiAoc3RhcnRQb3MgPj0gZW5kUG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
b2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXIoKS0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA1
OTg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzMsOCArNDMzLDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdU
ZXh0Qm94KFRleHRTdAogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBjaHVua3MgPSBjb25zdF9j
YXN0PFZlY3RvcjxTVkdUZXh0Q2h1bms+JiA+KGJveC0+c3ZnVGV4dENodW5rcygpKTsKICAgICB0
cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIg
PDwgYm94LT53aWR0aCgpIDw8ICJ4IiA8PCBib3gtPmhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8
PCBjaHVua3Muc2l6ZSgpIDw8ICIgY2h1bmsocykiOwogCi0gICAgaWYgKHRleHQucGFyZW50KCkg
JiYgKHRleHQucGFyZW50KCktPnN0eWxlKCktPmNvbG9yKCkgIT0gdGV4dC5zdHlsZSgpLT5jb2xv
cigpKSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxl
KCktPmNvbG9yKCkubmFtZSgpKTsKKyAgICBpZiAodGV4dC5wYXJlbnQoKSAmJiAodGV4dC5wYXJl
bnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9
IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSkK
KyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5uYW1lKCkpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgY29udGFpbnNJbmxpbmVUZXh0Qm94KFNWR1RleHRDaHVuayYgY2h1bmss
IFNWR0lubGluZVRleHRCb3gqIGJveCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNDIgKzk5NSw0MiBAQCBzdGF0
aWMgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlRm9yQ29sb3JQCiAgICAgcmV0dXJuIGJvcmRlclN0
eWxlOwogfQogCi1zdGF0aWMgQ29sb3IgY29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCBjb2xvclByb3BlcnR5LCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUpCitjb25zdCBDb2xvciBSZW5kZXJTdHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjayhpbnQg
Y29sb3JQcm9wZXJ0eSwgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKSBjb25zdAogewogICAgIENv
bG9yIHJlc3VsdDsKICAgICBzd2l0Y2ggKGNvbG9yUHJvcGVydHkpIHsKICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpOyAvLyBCYWNrZ3JvdW5kIGNvbG9yIGRvZXNuJ3QgZmFsbCBiYWNrLgorICAgICAgICBy
ZXR1cm4gYmFja2dyb3VuZENvbG9yKCk7IC8vIEJhY2tncm91bmQgY29sb3IgZG9lc24ndCBmYWxs
IGJhY2suCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICAgICAgcmVz
dWx0ID0gc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0
eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyTGVmdENvbG9y
KCk7CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyTGVmdFN0eWxlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgICAgICByZXN1
bHQgPSBzdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpOwotICAgICAgICBib3JkZXJTdHlsZSA9IHN0
eWxlLT5ib3JkZXJSaWdodFN0eWxlKCk7CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclJpZ2h0Q29s
b3IoKTsKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJSaWdodFN0eWxlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgcmVz
dWx0ID0gc3R5bGUtPmJvcmRlclRvcENvbG9yKCk7Ci0gICAgICAgIGJvcmRlclN0eWxlID0gc3R5
bGUtPmJvcmRlclRvcFN0eWxlKCk7CisgICAgICAgIHJlc3VsdCA9IGJvcmRlclRvcENvbG9yKCk7
CisgICAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyVG9wU3R5bGUoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgotICAgICAgICByZXN1bHQg
PSBzdHlsZS0+Ym9yZGVyQm90dG9tQ29sb3IoKTsKLSAgICAgICAgYm9yZGVyU3R5bGUgPSBzdHls
ZS0+Ym9yZGVyQm90dG9tU3R5bGUoKTsKKyAgICAgICAgcmVzdWx0ID0gYm9yZGVyQm90dG9tQ29s
b3IoKTsKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJCb3R0b21TdHlsZSgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IHN0
eWxlLT5jb2xvcigpOworICAgICAgICByZXN1bHQgPSBjb2xvcigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgotICAgICAgICByZXN1bHQgPSBzdHls
ZS0+b3V0bGluZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IG91dGxpbmVDb2xvcigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgot
ICAgICAgICByZXN1bHQgPSBzdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCk7CisgICAgICAgIHJlc3Vs
dCA9IGNvbHVtblJ1bGVDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gc3R5bGUtPnRleHRGaWxs
Q29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0gdGV4dEZpbGxDb2xvcigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICBy
ZXN1bHQgPSBzdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHRleHRT
dHJva2VDb2xvcigpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwNDMsMjMgKzEwNDMsMjMgQEAgc3RhdGljIENvbG9yIGNv
bG9ySW5jbHVkaW5nRmFsbGJhY2soY29ucwogICAgICAgICAgICAgJiYgKGJvcmRlclN0eWxlID09
IElOU0VUIHx8IGJvcmRlclN0eWxlID09IE9VVFNFVCB8fCBib3JkZXJTdHlsZSA9PSBSSURHRSB8
fCBib3JkZXJTdHlsZSA9PSBHUk9PVkUpKQogICAgICAgICAgICAgcmVzdWx0LnNldFJHQigyMzgs
IDIzOCwgMjM4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmNv
bG9yKCk7CisgICAgICAgICAgICByZXN1bHQgPSBjb2xvcigpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUNvbG9yIFJlbmRlclN0eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3Io
aW50IGNvbG9yUHJvcGVydHkpIGNvbnN0Citjb25zdCBDb2xvciBSZW5kZXJTdHlsZTo6dmlzaXRl
ZERlcGVuZGVudENvbG9yKGludCBjb2xvclByb3BlcnR5KSBjb25zdAogewogICAgIEVCb3JkZXJT
dHlsZSBib3JkZXJTdHlsZSA9IGJvcmRlclN0eWxlRm9yQ29sb3JQcm9wZXJ0eSh0aGlzLCBjb2xv
clByb3BlcnR5KTsKLSAgICBDb2xvciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVkaW5nRmFs
bGJhY2sodGhpcywgY29sb3JQcm9wZXJ0eSwgYm9yZGVyU3R5bGUpOworICAgIENvbG9yIHVudmlz
aXRlZENvbG9yID0gY29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb2xvclByb3BlcnR5LCBib3JkZXJT
dHlsZSk7CiAgICAgaWYgKGluc2lkZUxpbmsoKSAhPSBJbnNpZGVWaXNpdGVkTGluaykKICAgICAg
ICAgcmV0dXJuIHVudmlzaXRlZENvbG9yOwogCiAgICAgUmVuZGVyU3R5bGUqIHZpc2l0ZWRTdHls
ZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7CiAgICAgaWYgKCF2aXNpdGVk
U3R5bGUpCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVk
Q29sb3IgPSBjb2xvckluY2x1ZGluZ0ZhbGxiYWNrKHZpc2l0ZWRTdHlsZSwgY29sb3JQcm9wZXJ0
eSwgYm9yZGVyU3R5bGUpOworICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRTdHlsZS0+
Y29sb3JJbmNsdWRpbmdGYWxsYmFjayhjb2xvclByb3BlcnR5LCBib3JkZXJTdHlsZSk7CiAKICAg
ICAvLyBUYWtlIHRoZSBhbHBoYSBmcm9tIHRoZSB1bnZpc2l0ZWQgY29sb3IsIGJ1dCBnZXQgdGhl
IFJHQiB2YWx1ZXMgZnJvbSB0aGUgdmlzaXRlZCBjb2xvci4KICAgICByZXR1cm4gQ29sb3Iodmlz
aXRlZENvbG9yLnJlZCgpLCB2aXNpdGVkQ29sb3IuZ3JlZW4oKSwgdmlzaXRlZENvbG9yLmJsdWUo
KSwgdW52aXNpdGVkQ29sb3IuYWxwaGEoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgJKHJldmlzaW9uIDU5ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAgLTExMyw3ICsxMTQsMTMgQEAgY2xh
c3MgU3R5bGVJbWFnZTsKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFBz
ZXVkb1N0eWxlQ2FjaGU7CiAKIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZW5kZXJTdHlsZT4gewotICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOworICAgIGZy
aWVuZCBjbGFzcyBBbmltYXRpb25CYXNlOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBj
YW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgorICAg
IGZyaWVuZCBjbGFzcyBBcHBseVN0eWxlQ29tbWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSBy
ZXZlYWwgdW52aXNpdGVkIGluZm8uCisgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7
IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KKyAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBi
ZSBhYmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KKyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNh
bid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIg
dGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBh
bmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMuCisgICAgZnJpZW5kIGNsYXNzIFJl
bmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUg
Y2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3
b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KIHByb3RlY3RlZDoKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgYml0ZmllbGQgaXMgMzItYml0cyBsb25nLCB3aGljaCBvcHRpbWl6ZXMgcGFkZGlu
ZyB3aXRoIHRoZQpAQCAtMzQxLDEyICszNDgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQYWRk
aW5nKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcubm9uWmVybygpOyB9CiAgICAg
Ym9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+b2Zmc2V0Lm5vblplcm8o
KTsgfQogCi0gICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChiYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkgJiYgYmFja2dyb3VuZENvbG9yKCkuYWxwaGEo
KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2dy
b3VuZC0+YmFja2dyb3VuZCgpLmhhc0ltYWdlKCk7Ci0gICAgfQogICAgIGJvb2wgaGFzQmFja2dy
b3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkuaGFz
SW1hZ2UoKTsgfQogICAgIGJvb2wgaGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5oYXNGaXhlZEltYWdlKCk7IH0KICAgICBi
b29sIGhhc0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBhcHBlYXJhbmNlKCkgIT0gTm9Db250
cm9sUGFydDsgfQpAQCAtNDAxLDE5ICs0MDIsMTUgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
c2hvcnQgYm9yZGVyTGVmdFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5i
b3JkZXJMZWZ0V2lkdGgoKTsgfQogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJMZWZ0U3R5bGUoKSBj
b25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQoKS5zdHlsZSgpOyB9Ci0gICAgY29u
c3QgQ29sb3ImIGJvcmRlckxlZnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3Jk
ZXIubGVmdCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkg
Y29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuaXNUcmFuc3BhcmVudCgpOyB9
CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyUmlnaHRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5ib3JkZXIuYm9yZGVyUmlnaHRXaWR0aCgpOyB9CiAgICAgRUJvcmRlclN0eWxlIGJv
cmRlclJpZ2h0U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnJpZ2h0KCku
c3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gc3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRl
clJpZ2h0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmln
aHQoKS5pc1RyYW5zcGFyZW50KCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBib3JkZXJUb3BXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyVG9wV2lkdGgoKTsgfQog
ICAgIEVCb3JkZXJTdHlsZSBib3JkZXJUb3BTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5k
LT5ib3JkZXIudG9wKCkuc3R5bGUoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJUb3BDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wKCkuY29sb3IoKTsgfQogICAg
IGJvb2wgYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5i
b3JkZXIudG9wKCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVy
Qm90dG9tV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlckJvdHRv
bVdpZHRoKCk7IH0KICAgICBFQm9yZGVyU3R5bGUgYm9yZGVyQm90dG9tU3R5bGUoKSBjb25zdCB7
IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLnN0eWxlKCk7IH0KLSAgICBjb25zdCBD
b2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LmJvdHRvbSgpLmNvbG9yKCk7IH0KICAgICBib29sIGJvcmRlckJvdHRvbUlzVHJhbnNwYXJlbnQo
KSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmlzVHJhbnNwYXJlbnQo
KTsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgb3V0bGluZVNpemUoKSBjb25zdCB7IHJldHVybiBt
YXgoMCwgb3V0bGluZVdpZHRoKCkgKyBvdXRsaW5lT2Zmc2V0KCkpOyB9CkBAIC00MjYsOCArNDIz
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzT3V0bGluZSgpIGNvbnN0IHsgcmV0dXJuIG91dGxp
bmVXaWR0aCgpID4gMCAmJiBvdXRsaW5lU3R5bGUoKSA+IEJISURERU47IH0KICAgICBFQm9yZGVy
U3R5bGUgb3V0bGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5l
KCkuc3R5bGUoKTsgfQogICAgIGJvb2wgb3V0bGluZVN0eWxlSXNBdXRvKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuaXNBdXRvKCk7IH0KLSAgICBjb25zdCBDb2xvciYg
b3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5vdXRsaW5lKCkuY29s
b3IoKTsgfQotCisgICAgCiAgICAgRU92ZXJmbG93IG92ZXJmbG93WCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEVPdmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1gpOyB9
CiAgICAgRU92ZXJmbG93IG92ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVP
dmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1kpOyB9CiAKQEAgLTQ1MSw3ICs0
NDcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0K
ICAgICBpbnQgZm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQucGl4ZWxT
aXplKCk7IH0KIAotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIGluaGVy
aXRlZC0+Y29sb3I7IH0KICAgICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVJbmhlcml0ZWREYXRhLT5pbmRlbnQ7IH0KICAgICBFVGV4dEFsaWduIHRleHRBbGlnbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0QWxpZ24+KGluaGVyaXRlZF9mbGFncy5fdGV4
dF9hbGlnbik7IH0KICAgICBFVGV4dFRyYW5zZm9ybSB0ZXh0VHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRUcmFuc2Zvcm0+KGluaGVyaXRlZF9mbGFncy5fdGV4dF90
cmFuc2Zvcm0pOyB9CkBAIC01MzUsNyArNTMwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
d29yZEJyZWFrKCkgPT0gQnJlYWtXb3JkQnJlYWsgfHwgd29yZFdyYXAoKSA9PSBCcmVha1dvcmRX
cmFwOwogICAgIH0KIAotICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tncm91bmQtPmNvbG9yKCk7IH0KICAgICBTdHlsZUltYWdlKiBiYWNrZ3Jv
dW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQoKS5pbWFn
ZSgpOyB9CiAgICAgRUZpbGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdFgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFRmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkucmVw
ZWF0WCgpKTsgfQogICAgIEVGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRZKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZC0+YmFja2dyb3VuZCgp
LnJlcGVhdFkoKSk7IH0KQEAgLTYxNiw5ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Y29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U2hhZG93OyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRTdHJva2VDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KICAg
ICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0
YS0+dGV4dFN0cm9rZVdpZHRoOyB9Ci0gICAgY29uc3QgQ29sb3ImIHRleHRGaWxsQ29sb3IoKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQogICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yU3Bh
Y2U+KHJhcmVJbmhlcml0ZWREYXRhLT5jb2xvclNwYWNlKTsgfQogICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eTsgfQogICAgIENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250cm9s
UGFydD4ocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYXBwZWFyYW5jZSk7IH0KQEAgLTY2NCw3ICs2
NTYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzcGVjaWZpZXNDb2x1bW5zKCkgY29uc3QgeyByZXR1
cm4gIWhhc0F1dG9Db2x1bW5Db3VudCgpIHx8ICFoYXNBdXRvQ29sdW1uV2lkdGgoKTsgfQogICAg
IGZsb2F0IGNvbHVtbkdhcCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X211bHRpQ29sLT5tX2dhcDsgfQogICAgIGJvb2wgaGFzTm9ybWFsQ29sdW1uR2FwKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fbm9ybWFsR2FwOyB9
Ci0gICAgY29uc3QgQ29sb3ImIGNvbHVtblJ1bGVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sLT5tX3J1bGUuY29sb3IoKTsgfQogICAgIEVCb3Jk
ZXJTdHlsZSBjb2x1bW5SdWxlU3R5bGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLnN0eWxlKCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBj
b2x1bW5SdWxlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9t
dWx0aUNvbC0+cnVsZVdpZHRoKCk7IH0KICAgICBib29sIGNvbHVtblJ1bGVJc1RyYW5zcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fcnVs
ZS5pc1RyYW5zcGFyZW50KCk7IH0KQEAgLTExMTIsNyArMTEwMyw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjaGlsZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZEluZGV4OyB9CiAgICAg
dm9pZCBzZXRDaGlsZEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY2hpbGRJbmRleCA9IGluZGV4
OyB9CiAKLSAgICBDb2xvciB2aXNpdGVkRGVwZW5kZW50Q29sb3IoaW50IGNvbG9yUHJvcGVydHkp
IGNvbnN0OworICAgIGNvbnN0IENvbG9yIHZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29sb3JQ
cm9wZXJ0eSkgY29uc3Q7CiAKICAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgYWxsIHRoZSBwcm9w
ZXJ0aWVzCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbEJvcmRlckNvbGxhcHNlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTEyMTIsNiArMTIwMywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIGluaXRpYWxEYXNoYm9hcmRSZWdpb25zKCk7
CiAgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIG5vbmVEYXNo
Ym9hcmRSZWdpb25zKCk7CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBDb2xvciBhY2Nlc3Nv
cnMgYXJlIGFsbCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBjYWxsZXJzIHVzZSB2aXNpdGVkRGVwZW5k
ZW50Q29sb3IgaW5zdGVhZCB0byBhY2Nlc3MgdGhlbS4KKyAgICBjb25zdCBDb2xvciYgYm9yZGVy
TGVmdENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0KCkuY29sb3Io
KTsgfQorICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9y
ZGVyVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpLmNvbG9y
KCk7IH0KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmNvbG9yKCk7IH0KKyAgICBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5jb2xvcigpOyB9
CisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5jb2xv
cjsgfQorICAgIGNvbnN0IENvbG9yJiBjb2x1bW5SdWxlQ29sb3IoKSBjb25zdCB7IHJldHVybiBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLmNvbG9yKCk7IH0KKyAgICBj
b25zdCBDb2xvciYgb3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kLT5v
dXRsaW5lKCkuY29sb3IoKTsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KKyAgICBjb25z
dCBDb2xvciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERh
dGEtPnRleHRTdHJva2VDb2xvcjsgfQorICAgIAorICAgIGNvbnN0IENvbG9yIGNvbG9ySW5jbHVk
aW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkg
Y29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNTk4NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3IKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXQtPnJlbmRlcmVyKCkp
Ci0gICAgICAgIHZhbHVlID0gdGFyZ2V0UmVuZGVyZXItPnN0eWxlKCktPmNvbG9yKCkubmFtZSgp
OworICAgICAgICB2YWx1ZSA9IHRhcmdldFJlbmRlcmVyLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpOwogfQogICAgIAogdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5
OTE2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wNS0yMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDIwCisKKyAgICAgICAgTWFrZSBzdXJlIGV2ZXJ5
b25lIHdobyBuZWVkcyB0byBpcyB1c2luZyB2aXNpdGVkRGVwZW5kZW50Q29sb3IgcmF0aGVyIHRo
YW4gYWNjZXNzaW5nIHN0eWxlcworICAgICAgICBkaXJlY3RseS4KKworICAgICAgICAqIE1pc2Mv
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoK1tOU0F0dHJpYnV0ZWRT
dHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9ib2R5QmFja2dyb3VuZENvbG9y
XSk6CisKIDIwMTAtMDUtMjAgIE1pa2UgVGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9X
ZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDU5ODc2KQorKysgV2ViS2l0
L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTU0LDEyICsxNTQsMTIgQEAgKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX3dlYl9hdHRyaWJ1
dGVkUwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAg
ICAgICAgTlNGb250ICpmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0Zv
bnQoKTsKICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkg
Zm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHJl
bW92ZU9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAg
ICBpZiAoc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpIGZv
cktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgW2F0dHJzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA1OTg3NikK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAz
Nyw3ICsxMDM3LDcgQEAgLSAoTlNDb2xvciAqKV9ib2R5QmFja2dyb3VuZENvbG9yCiAgICAgUmVu
ZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBib2R5LT5yZW5kZXJlcigpOwogICAgIGlmICghYm9k
eVJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIENvbG9yIGNvbG9yID0gYm9keVJl
bmRlcmVyLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBDb2xvciBjb2xvciA9IGJv
ZHlSZW5kZXJlci0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICByZXR1cm4gbnNDb2xvcihjb2xvcik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2hpc3Rvcnkvc2VsZi1pcy12aXNpdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3NlbGYtaXMtdmlzaXRlZC5odG1sCShyZXZpc2lvbiA1OTg3NikKKysrIExh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9zZWxmLWlzLXZpc2l0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTEsNyArMTEsNyBAQCBmdW5jdGlvbiBjb21wYXJlU3R5bGVzKCkKICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIHZhciBmaXJzdFN0eWxlID0gd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5m
byhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25lJykpOwogICAgICAgICB2YXIgc2Vjb25kU3R5
bGUgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKSk7Ci0gICAgICAgIGlmIChm
aXJzdFN0eWxlLmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yKSB7CisgICAgICAgIGlmIChmaXJz
dFN0eWxlLmNvbG9yID09IHNlY29uZFN0eWxlLmNvbG9yIHx8IGZpcnN0U3R5bGUuYmFja2dyb3Vu
ZENvbG9yID09IHNlY29uZFN0eWxlLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9ICdGQUlMJzsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTksMTUgKzE5LDE1IEBAIGZ1bmN0aW9uIGNv
bXBhcmVTdHlsZXMoKQogICAgIAogICAgIHZhciBmaXJzdFN0eWxlID0gd2luZG93LmdldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uZScpLCAiIik7CiAgICAgdmFyIHNl
Y29uZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3R3bycpLCAiIik7Ci0gICAgaWYgKGZpcnN0U3R5bGUuY29sb3IgIT0gc2Vjb25kU3R5bGUu
Y29sb3IpIHsKKyAgICBpZiAoZmlyc3RTdHlsZS5jb2xvciAhPSBzZWNvbmRTdHlsZS5jb2xvciB8
fCBmaXJzdFN0eWxlLmJhY2tncm91bmRDb2xvciAhPSBzZWNvbmRTdHlsZS5iYWNrZ3JvdW5kQ29s
b3IpIHsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRN
TCA9ICdGQUlMJzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIDwvc2NyaXB0PgogPHN0eWxl
PgotOmxpbmsgeyBjb2xvcjogZ3JlZW4gfQotOnZpc2l0ZWQgeyBjb2xvcjogb3JhbmdlIH0KKzps
aW5rIHsgY29sb3I6IGdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSB9Cis6dmlzaXRlZCB7
IGNvbG9yOiBvcmFuZ2U7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrIH0KIDwvc3R5bGU+CiA8L2hl
YWQ+CiA8Ym9keSBvbmxvYWQ9ImNvbXBhcmVTdHlsZXMoKSI+Cg==
</data>
<flag name="review"
          id="41144"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>