<?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>32533</bug_id>
          
          <creation_ts>2009-12-14 16:47:01 -0800</creation_ts>
          <short_desc>Add support to set input element&apos;s suggestion value from auto-complete menu</short_desc>
          <delta_ts>2010-01-22 23:12:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>32261</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Zelidrag Hornung">zelidrag</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>beng</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>glen</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171629</commentid>
    <comment_count>0</comment_count>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-14 16:47:01 -0800</bug_when>
    <thetext>AutoComplete pop-up menu needs to be able to set suggested value of HTTPInputElement. This will allow displaying proposed autocomplete value in Chromium as user will a) type value prefix and b) scroll through other autocomplete suggestions in the menu. 

This bug is Chromium-specific part of the issue originally described in https://bugs.webkit.org/show_bug.cgi?id=32261.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172415</commentid>
    <comment_count>1</comment_count>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-16 11:06:07 -0800</bug_when>
    <thetext>Little correction to the original description of this bug:

This bug includes PopupMenu and Chromium-specific part of the issue originally describedin https://bugs.webkit.org/show_bug.cgi?id=32261.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172472</commentid>
    <comment_count>2</comment_count>
      <attachid>45006</attachid>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-16 12:39:44 -0800</bug_when>
    <thetext>Created attachment 45006
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements

Added ability for PopupMenuClient to signal when menu selection changed and weather selected value should be accepted when popup menu closes. The CL also includes Chromium implementation of autocomplete that now also show matching suggestion in input elements without having their value exposed to JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172477</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 12:43:27 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45006 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174939</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-26 03:23:17 -0800</bug_when>
    <thetext>Attachment 45006 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/145685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175622</commentid>
    <comment_count>5</comment_count>
      <attachid>45613</attachid>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-29 10:22:05 -0800</bug_when>
    <thetext>Created attachment 45613
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

This patch includes changes for PopupMenuClient and Chromium-specific implementation of autocomplete suggestion mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175624</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 10:26:08 -0800</bug_when>
    <thetext>Attachment 45613 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/AutocompletePopupMenuClient.cpp:64:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/AutocompletePopupMenuClient.cpp:190:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175626</commentid>
    <comment_count>7</comment_count>
      <attachid>45614</attachid>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-29 10:37:16 -0800</bug_when>
    <thetext>Created attachment 45614
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

Fixed minor style issues from the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175627</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 10:42:09 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45614 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176000</commentid>
    <comment_count>9</comment_count>
      <attachid>45614</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-12-30 12:17:44 -0800</bug_when>
    <thetext>Comment on attachment 45614
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

Looks fine, except for nits below:

It looks like setInitialAutocompleteValue is only used in one place. Do we need it as a separate method?

&gt; +void AutocompletePopupMenuClient::setInitialAutocompleteValue()
&gt; +{
&gt; +    if (!m_suggestions.size() || !m_textField-&gt;name().length())
&gt; +        return;
&gt; +    int newIndex = m_selectedIndex &gt;= 0 ? m_selectedIndex : 0;
&gt; +    WebCore::String suggestion = m_suggestions[newIndex];

No need for namespace prefix here.

&gt; +    bool hasPreviousValue = m_lastFieldValues-&gt;contains(m_textField-&gt;name());
&gt; +    WebCore::String prevValue;

Ditto.

&gt; +          if (suggestion.length() &gt; m_typedFieldValue.length()) {
&gt; +              newSuggestion.append(suggestion.characters() + m_typedFieldValue.length(),
&gt; +                  suggestion.length() - m_typedFieldValue.length());

Since we&apos;re dealing w/UTF16 here, is this still valid for weird characters? I am a UTF ignoramus, btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176057</commentid>
    <comment_count>10</comment_count>
      <attachid>45687</attachid>
    <who name="Zelidrag Hornung">zelidrag</who>
    <bug_when>2009-12-30 14:51:06 -0800</bug_when>
    <thetext>Created attachment 45687
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

Fixed minor issues from Dimitry&apos;s comments:
- minor namespace issues, and
- made string concatenation little bit safer from UTF16 perspective - now I check for prefix match explicitly even though that probably could not have been an issue with extended UTF16 glyphs since both sides of the comparison come from typed values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176059</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 14:55:38 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45687 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176060</commentid>
    <comment_count>12</comment_count>
      <attachid>45687</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-12-30 14:59:53 -0800</bug_when>
    <thetext>Comment on attachment 45687
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176062</commentid>
    <comment_count>13</comment_count>
      <attachid>45687</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-30 15:09:09 -0800</bug_when>
    <thetext>Comment on attachment 45687
PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.

Clearing flags on attachment: 45687

Committed r52673: &lt;http://trac.webkit.org/changeset/52673&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176063</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-30 15:09:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183782</commentid>
    <comment_count>15</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 13:43:19 -0800</bug_when>
    <thetext>Reopening; I&apos;m backing this out due to it causing a number of regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183784</commentid>
    <comment_count>16</comment_count>
      <attachid>47224</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 13:44:37 -0800</bug_when>
    <thetext>Created attachment 47224
Backout patch

Backout patch.  Posting so I can get the EWS bots to run it, since I want to make sure I didn&apos;t break Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183790</commentid>
    <comment_count>17</comment_count>
      <attachid>47225</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 13:54:09 -0800</bug_when>
    <thetext>Created attachment 47225
Backout patch, for real

Whoops, that other patch had other junk from my checkout in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183798</commentid>
    <comment_count>18</comment_count>
      <attachid>47225</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 14:06:28 -0800</bug_when>
    <thetext>Comment on attachment 47225
Backout patch, for real

Not sure the bots will try something without r?, so I went ahead and landed this as 53716, and will watch the builders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183963</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-22 23:12:44 -0800</bug_when>
    <thetext>&gt; Not sure the bots will try something without r?

The bots only try things that are up for review.  Also, they&apos;re not good at reviewing build fixes because they don&apos;t test patches when they can&apos;t build (otherwise, they&apos;d reject a lot of stuff).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45006</attachid>
            <date>2009-12-16 12:39:44 -0800</date>
            <delta_ts>2009-12-29 10:22:05 -0800</delta_ts>
            <desc>PopupMenuClient changes needed for autocomplete suggestions displaying in input elements</desc>
            <filename>wk_32533.patch</filename>
            <type>text/plain</type>
            <size>15389</size>
            <attacher name="Zelidrag Hornung">zelidrag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjIwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMTItMTYgIFplbGlkcmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgYWJpbGl0eSBmb3IgUG9wdXBNZW51Q2xpZW50IHRvIHNpZ25hbCB3aGVuCisg
ICAgICAgIGEpIHNlbGVjdGlvbiBjaGFuZ2VkLCBhbmQKKyAgICAgICAgYikgd2VhdGhlciBzdWdn
ZXN0ZWQgdmFsdWUgc2hvdWxkIGJlIGFjY2VwdGVkIHdoZW4gcG9wdXAgbWVudSBjbG9zZXMKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIHBsYXRmb3JtL1BvcHVw
TWVudUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpoaWRlUG9wdXApOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpoYW5kbGVLZXlFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmFiYW5kb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBMaXN0Qm94OjphY2NlcHRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6
OnNlbGVjdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6Y2xlYXJTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpoaWRlUG9wdXApOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZWxlY3Rpb25D
aGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9w
dXBEaWRIaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNl
bGVjdGlvbkNoYW5nZWQpOgorCiAyMDA5LTEyLTE2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9t
ZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDUyMjA2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFz
cyBQb3B1cE1lbnVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflBvcHVwTWVudUNsaWVu
dCgpIHt9CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgs
IGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpID0gMDsKLQorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rp
b25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSkgPSAw
OwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QgPSAwOwpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGxpc3RT
aXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dCA9IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNo
cm9taXVtLmNwcAkocmV2aXNpb24gNTIyMDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BvcHVwTWVudUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHB1YmxpYzoKICAgICAvLyBQb3B1cExpc3RCb3ggbWV0aG9kcwogCiAgICAgLy8gSGlkZXMgdGhl
IHBvcHVwLgotICAgIHZvaWQgaGlkZVBvcHVwKCk7CisgICAgdm9pZCBoaWRlUG9wdXAoYm9vbCBh
Y2NlcHRTdWdnZXN0aW9ucyk7CiAKICAgICAvLyBVcGRhdGVzIG91ciBpbnRlcm5hbCBsaXN0IHRv
IG1hdGNoIHRoZSBjbGllbnQuCiAgICAgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtMzgw
LDcgKzM4MCw3IEBAIHZvaWQgUG9wdXBDb250YWluZXI6OnNob3dFeHRlcm5hbChjb25zdCAKIAog
dm9pZCBQb3B1cENvbnRhaW5lcjo6aGlkZVBvcHVwKCkKIHsKLSAgICBsaXN0Qm94KCktPmhpZGVQ
b3B1cCgpOworICAgIGxpc3RCb3goKS0+aGlkZVBvcHVwKHRydWUpOwogfQogCiB2b2lkIFBvcHVw
Q29udGFpbmVyOjpsYXlvdXQoKQpAQCAtNjM3LDcgKzYzNyw3IEBAIGJvb2wgUG9wdXBMaXN0Qm94
OjpoYW5kbGVLZXlFdmVudChjb25zdCAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBW
S0VZX1JFVFVSTjoKICAgICAgICAgaWYgKG1fc2VsZWN0ZWRJbmRleCA9PSAtMSkgIHsKLSAgICAg
ICAgICAgIGhpZGVQb3B1cCgpOworICAgICAgICAgICAgaGlkZVBvcHVwKGZhbHNlKTsKICAgICAg
ICAgICAgIC8vIERvbid0IGVhdCB0aGUgZW50ZXIgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtODg1LDcgKzg4NSw3IEBAIHZv
aWQgUG9wdXBMaXN0Qm94OjphYmFuZG9uKCkKIAogICAgIG1fc2VsZWN0ZWRJbmRleCA9IG1fb3Jp
Z2luYWxJbmRleDsKIAotICAgIGhpZGVQb3B1cCgpOworICAgIGhpZGVQb3B1cChmYWxzZSk7CiAK
ICAgICBpZiAobV9hY2NlcHRlZEluZGV4T25BYmFuZG9uID49IDApIHsKICAgICAgICAgbV9wb3B1
cENsaWVudC0+dmFsdWVDaGFuZ2VkKG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRvbik7CkBAIC05MTgs
NyArOTE4LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmFjY2VwdEluZGV4KGludCBpbmRleAogICAg
IGlmIChpbmRleCA8IDApIHsKICAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQpIHsKICAgICAgICAg
ICAgIC8vIEVudGVyIHByZXNzZWQgd2l0aCBubyBzZWxlY3Rpb24sIGp1c3QgY2xvc2UgdGhlIHBv
cHVwLgotICAgICAgICAgICAgaGlkZVBvcHVwKCk7CisgICAgICAgICAgICBoaWRlUG9wdXAoZmFs
c2UpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MjcsNyArOTI3LDcg
QEAgdm9pZCBQb3B1cExpc3RCb3g6OmFjY2VwdEluZGV4KGludCBpbmRleAogICAgICAgICBSZWZQ
dHI8UG9wdXBMaXN0Qm94PiBrZWVwQWxpdmUodGhpcyk7CiAKICAgICAgICAgLy8gSGlkZSBvdXJz
ZWx2ZXMgZmlyc3Qgc2luY2UgdmFsdWVDaGFuZ2VkIG1heSBoYXZlIG51bWVyb3VzIHNpZGUtZWZm
ZWN0cy4KLSAgICAgICAgaGlkZVBvcHVwKCk7CisgICAgICAgIGhpZGVQb3B1cCh0cnVlKTsKIAog
ICAgICAgICAvLyBUZWxsIHRoZSA8c2VsZWN0PiBQb3B1cE1lbnVDbGllbnQgd2hhdCBpbmRleCB3
YXMgc2VsZWN0ZWQuCiAgICAgICAgIG1fcG9wdXBDbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7
CkBAIC05NDUsNiArOTQ1LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OnNlbGVjdEluZGV4KGludCBp
bmRleAogICAgICAgICBpbnZhbGlkYXRlUm93KG1fc2VsZWN0ZWRJbmRleCk7CiAKICAgICAgICAg
c2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9wb3B1cENsaWVudC0+c2VsZWN0
aW9uQ2hhbmdlZChtX3NlbGVjdGVkSW5kZXgpOwogICAgIH0KIH0KIApAQCAtMTAwNiw2ICsxMDA3
LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmNsZWFyU2VsZWN0aW9uKCkKICAgICBpZiAobV9zZWxl
Y3RlZEluZGV4ICE9IC0xKSB7CiAgICAgICAgIGludmFsaWRhdGVSb3cobV9zZWxlY3RlZEluZGV4
KTsKICAgICAgICAgbV9zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgIG1fcG9wdXBDbGllbnQt
PnNlbGVjdGlvbkNoYW5nZWQobV9zZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKQEAgLTEwNzMs
NyArMTA3NSw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjphZGp1c3RTZWxlY3RlZEluZGV4KGkKICAg
ICBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwogfQogCi12b2lkIFBvcHVwTGlzdEJveDo6aGlk
ZVBvcHVwKCkKK3ZvaWQgUG9wdXBMaXN0Qm94OjpoaWRlUG9wdXAoYm9vbCBhY2NlcHRTdWdnZXN0
aW9ucykKIHsKICAgICBpZiAocGFyZW50KCkpIHsKICAgICAgICAgUG9wdXBDb250YWluZXIqIGNv
bnRhaW5lciA9IHN0YXRpY19jYXN0PFBvcHVwQ29udGFpbmVyKj4ocGFyZW50KCkpOwpAQCAtMTA4
MSw3ICsxMDgzLDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmhpZGVQb3B1cCgpCiAgICAgICAgICAg
ICBjb250YWluZXItPmNsaWVudCgpLT5wb3B1cENsb3NlZChjb250YWluZXIpOwogICAgIH0KIAot
ICAgIG1fcG9wdXBDbGllbnQtPnBvcHVwRGlkSGlkZSgpOworICAgIG1fcG9wdXBDbGllbnQtPnBv
cHVwRGlkSGlkZShhY2NlcHRTdWdnZXN0aW9ucyk7CiB9CiAKIHZvaWQgUG9wdXBMaXN0Qm94Ojp1
cGRhdGVGcm9tRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CShyZXZpc2lvbiA1MjIwNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBAIGludCBSZW5kZXJNZW51TGlzdDo6
c2VsZWN0ZWRJbmRleCgpIGNvbnMKICAgICByZXR1cm4gc2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRl
eChzZWxlY3QtPnNlbGVjdGVkSW5kZXgoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTWVudUxpc3Q6OnBv
cHVwRGlkSGlkZSgpCit2b2lkIFJlbmRlck1lbnVMaXN0Ojpwb3B1cERpZEhpZGUoYm9vbCBhY2Nl
cHRTdWdnZXN0aW9uKQogewogICAgIG1fcG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNpb24gNTIyMDYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBzZWxl
Y3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpOworICAg
IHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9ucyk7CiAgICAg
dmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
OwpAQCAtOTAsNiArOTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZVNob3Vs
ZENoYW5nZU9uSG90VHJhY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFBvcE92ZXIoKSBjb25zdCB7IHJldHVybiAhUE9QVVBfTUVOVV9QVUxMU19ET1dO
OyB9CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJv
b2wgZmlyZU9uQ2hhbmdlID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5n
ZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVPbkNoYW5nZSA9IHRydWUpIHt9CiAgICAg
dmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA1MjIwNikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzZWxlY3RlCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9uKQogewogICAgIG1fc2Vh
cmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA1MjIwNikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw2ICs5OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBQb3B1cE1lbnVDbGllbnQg
bWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4
LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hh
bmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpIHt9CiAgICAg
dmlydHVhbCBTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2
aXJ0dWFsIFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0OwpAQCAtMTA5LDcgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgY2xp
ZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHBvcHVwRGlkSGlkZSgpOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBh
Y2NlcHRTdWdnZXN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMjA3
KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIyIEBACisyMDA5LTEyLTE2ICBaZWxpZHJhZyBIb3JudW5nICA8emVsaWRyYWdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF1
dG9jb21wbGV0ZSBub3cgb2ZmZXJzIHN1Z2dlc3Rpb25zIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVu
dCBhcyBhIHVzZXIKKyAgICAgICAgYSkgdHlwZXMgdGV4dCB0aGF0IHByb2R1Y2VzIHNvbWUgYXV0
b2NvbXBsZXRlIHN1Z2dlc3Rpb25zLCBhbmQKKyAgICAgICAgYikgc2Nyb2xscyB0aHJvdWdoIHN1
Z2dlc3RlZCB2YWx1ZXMgaW4gdGhlIG1lbnUKKyAgICAgICAgVGhlIHN1Z2dlc3RlZCB2YWx1ZSBp
cyByZW5kZXJlZCBidXQgbm90IGV4cG9zZWQgdGhyb3VnaCBKUyB1bnRpIHRoZQorICAgICAgICB1
c2VyIG1ha2VzIHRoZSBmaW5hbCBzZWxlY3Rpb24KKworICAgICAgICAqIHNyYy9BdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1
cE1lbnVDbGllbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQ6OnNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERp
ZEhpZGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNl
dFRleHRGcm9tSXRlbSk6CisgICAgICAgICogc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVu
dC5oOgorCiAyMDA5LTEyLTE1ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA1
MjIwNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDE1IEBAIHZvaWQgQXV0b2NvbXBsZXRl
UG9wdXBNZW51Q2xpZW50Ojppbml0aWEKICAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkK
IHsKICAgICBBU1NFUlQoZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCA8IHN0YXRpY19jYXN0PGludD4o
c3VnZ2VzdGlvbnMuc2l6ZSgpKSk7CisgICAgaWYgKG1fdGV4dEZpZWxkICYmIG1fdGV4dEZpZWxk
LT5uYW1lKCkgIT0gdGV4dEZpZWxkLT5uYW1lKCkpCisgICAgICAgIG1fbGFzdEF1dG9jb21wbGV0
ZVZhbHVlID0gV2ViQ29yZTo6U3RyaW5nKCk7CiAgICAgbV90ZXh0RmllbGQgPSB0ZXh0RmllbGQ7
CisgICAgbV90eXBlZEZpZWxkVmFsdWUgPSB0ZXh0RmllbGQtPnZhbHVlKCk7CiAgICAgbV9zZWxl
Y3RlZEluZGV4ID0gZGVmYXVsdFN1Z2dlc3Rpb25JbmRleDsKICAgICBzZXRTdWdnZXN0aW9ucyhz
dWdnZXN0aW9ucyk7CiAKKyAgICBzZXRJbml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKTsKKwogICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgbV93ZWJWaWV3LT50aGVtZSgp
LT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0Q29udHJvbCwgZm9udERlc2NyaXB0aW9uKTsKICAg
ICAvLyBVc2UgYSBzbWFsbGVyIGZvbnQgc2l6ZSB0byBtYXRjaCBJRS9GaXJlZm94LgpAQCAtNzks
OCArODQsMzIgQEAgdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmluaXRpYQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmRpcmVjdGlvbigpKSk7CiB9CiAKKwordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQ6OnNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSgpCit7CisgICAgaWYgKCFtX3N1Z2dl
c3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBuZXdJbmRleCA9IG1fc2Vs
ZWN0ZWRJbmRleCA+PSAwID8gbV9zZWxlY3RlZEluZGV4IDogMDsKKyAgICBXZWJDb3JlOjpTdHJp
bmcgc3VnZ2VzdGlvbiA9IG1fc3VnZ2VzdGlvbnNbbmV3SW5kZXhdOworICAgIGlmIChtX3R5cGVk
RmllbGRWYWx1ZS5sZW5ndGgoKSA+IG1fbGFzdEF1dG9jb21wbGV0ZVZhbHVlLmxlbmd0aCgpKSB7
CisgICAgICAgICAgU3RyaW5nIG5ld1N1Z2dlc3Rpb24gPSBtX3R5cGVkRmllbGRWYWx1ZTsKKyAg
ICAgICAgICBpZiAoc3VnZ2VzdGlvbi5sZW5ndGgoKSA+IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0
aCgpKSB7CisgICAgICAgICAgICAgIG5ld1N1Z2dlc3Rpb24uYXBwZW5kKHN1Z2dlc3Rpb24uY2hh
cmFjdGVycygpICsgbV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCksCisgICAgICAgICAgICAgICAg
ICBzdWdnZXN0aW9uLmxlbmd0aCgpIC0gbV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCkpOworICAg
ICAgICAgIH0KKyAgICAgICAgICBpbnQgc3RhcnQgPSBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgo
KTsKKyAgICAgICAgICBtX3RleHRGaWVsZC0+c2V0U3VnZ2VzdGVkVmFsdWUobmV3U3VnZ2VzdGlv
bik7CisgICAgICAgICAgbV90ZXh0RmllbGQtPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LAorICAg
ICAgICAgICAgICBuZXdTdWdnZXN0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICBtX3NlbGVjdGVk
SW5kZXggPSBuZXdJbmRleDsKKyAgICB9CisgICAgbV9sYXN0QXV0b2NvbXBsZXRlVmFsdWUgPSBt
X3R5cGVkRmllbGRWYWx1ZTsKK30KKworCiB2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVu
dDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewor
ICAgIG1fdGV4dEZpZWxkLT5zZXRTdWdnZXN0ZWRWYWx1ZShXZWJDb3JlOjpTdHJpbmcoKSk7CiAg
ICAgbV90ZXh0RmllbGQtPnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7CiAgICAg
RWRpdG9yQ2xpZW50SW1wbCogZWRpdG9yID0KICAgICAgICAgc3RhdGljX2Nhc3Q8RWRpdG9yQ2xp
ZW50SW1wbCo+KG1fd2ViVmlldy0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKSk7CkBAIC04OSw2ICsx
MTgsMTggQEAgdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQwogICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV90ZXh0RmllbGQuZ2V0KCkpKTsKIH0K
IAordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkNoYW5nZWQodW5z
aWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCit7CisgICAgaWYgKGxpc3RJbmRleCAh
PSAtMSkgeworICAgICAgICBtX3RleHRGaWVsZC0+c2V0U3VnZ2VzdGVkVmFsdWUobV9zdWdnZXN0
aW9uc1tsaXN0SW5kZXhdKTsKKyAgICAgICAgbV90ZXh0RmllbGQtPnNldFNlbGVjdGlvblJhbmdl
KG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdWdnZXN0aW9uc1tsaXN0SW5kZXhdLmxlbmd0aCgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3RlZFZhbHVlKFdlYkNvcmU6OlN0cmlu
ZygpKTsKKyAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmllbGRWYWx1ZSk7Cisg
ICAgfQorfQorCiBTdHJpbmcgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3VnZ2VzdGlvbnNbbGlz
dEluZGV4XTsKQEAgLTExOCwxMyArMTU5LDI0IEBAIGludCBBdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQ6OmNsaWVudFAKICAgICByZXR1cm4gc3R5bGUgPyBtX3dlYlZpZXctPnRoZW1lKCktPnBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoc3R5bGUpIDogMDsKIH0KIAotdm9pZCBBdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlkZSgpCit2b2lkIEF1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpCiB7CisgICAg
bV9sYXN0QXV0b2NvbXBsZXRlVmFsdWUgPSBTdHJpbmcoKTsKKworICAgIGlmIChhY2NlcHRTdWdn
ZXN0aW9ucykgeworICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkVmFsdWUgPSBtX3RleHRGaWVsZC0+
c3VnZ2VzdGVkVmFsdWUoKTsKKyAgICAgICAgaWYgKCFzdWdnZXN0ZWRWYWx1ZS5pc051bGwoKSkK
KyAgICAgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShzdWdnZXN0ZWRWYWx1ZSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmllbGRWYWx1ZSk7
CisgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3RlZFZhbHVlKFdlYkNvcmU6OlN0cmluZygpKTsK
KwogICAgIG1fd2ViVmlldy0+YXV0b0NvbXBsZXRlUG9wdXBEaWRIaWRlKCk7CiB9CiAKIHZvaWQg
QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlz
dEluZGV4KQogeworICAgIG1fdGV4dEZpZWxkLT5zZXRTdWdnZXN0ZWRWYWx1ZShXZWJDb3JlOjpT
dHJpbmcoKSk7CiAgICAgbV90ZXh0RmllbGQtPnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdElu
ZGV4XSk7CiB9CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBN
ZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNTIyMDYpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCBtZXRo
b2RzOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBi
b29sIGZpcmVFdmVudHMgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdl
ZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQgbGFzdEluZGV4
KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpA
QCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1Jp
Z2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCB7IHJldHVybiBt
X3N1Z2dlc3Rpb25zLnNpemUoKTsgfQogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBE
aWRIaWRlKCk7CisgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dl
c3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJl
bCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTg1LDEyICs4NiwxNSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgV2Vi
Q29yZTo6UmVuZGVyU3R5bGUqIHRleHRGaWVsZFN0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJ
bml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50PiBtX3RleHRGaWVsZDsKICAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX3N1
Z2dlc3Rpb25zOwogICAgIGludCBtX3NlbGVjdGVkSW5kZXg7CiAgICAgV2ViVmlld0ltcGwqIG1f
d2ViVmlldzsKKyAgICBXZWJDb3JlOjpTdHJpbmcgbV90eXBlZEZpZWxkVmFsdWU7CiAgICAgT3du
UHRyPFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlPiBtX3N0eWxlOworICAgIFdlYkNvcmU6OlN0cmlu
ZyBtX2xhc3RBdXRvY29tcGxldGVWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45613</attachid>
            <date>2009-12-29 10:22:05 -0800</date>
            <delta_ts>2009-12-29 10:37:16 -0800</delta_ts>
            <desc>PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.</desc>
            <filename>wk_32533_b.patch</filename>
            <type>text/plain</type>
            <size>19616</size>
            <attacher name="Zelidrag Hornung">zelidrag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMTItMjkgIFplbGlkcmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXV0b2NvbXBsZXRlIG5vdyBvZmZlcnMgc3VnZ2VzdGlvbnMgd2l0aGluIHRoZSBpbnB1
dCBlbGVtZW50IGFzIGEgdXNlcgorICAgICAgICBhKSB0eXBlcyB0ZXh0IHRoYXQgcHJvZHVjZXMg
c29tZSBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMsIGFuZAorICAgICAgICBiKSBzY3JvbGxzIHRo
cm91Z2ggc3VnZ2VzdGVkIHZhbHVlcyBpbiB0aGUgbWVudQorICAgICAgICBUaGUgc3VnZ2VzdGVk
IHZhbHVlIGlzIHJlbmRlcmVkIGJ1dCBub3QgZXhwb3NlZCB0aHJvdWdoIEpTIHVudGkgdGhlCisg
ICAgICAgIHVzZXIgbWFrZXMgdGhlIGZpbmFsIHNlbGVjdGlvbgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBzaW5jZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IChhdXRvY29tcGxldGUgc3VnZ2VzdGlv
bnMpCisgICAgICAgIGlzIGludGVudGlvbmFsbHkgaGlkZGVuIGZyb20gZXZlcnl0aGluZyBlbHNl
IHRoYW4gcmVuZGVyZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTGlzdEJveDo6aGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBMaXN0Qm94OjphYmFuZG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6YWNj
ZXB0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpzZWxlY3RJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6aGlkZVBvcHVwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUG9wdXBNZW51R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6bWVu
dVVubWFwcGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9R
dEZhbGxiYWNrV2ViUG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxsYmFja1dlYlBv
cHVwOjpoaWRlUG9wdXApOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpoaWRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93eC9Qb3B1cE1lbnVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6Ok9uTWVu
dUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpwb3B1cERpZEhpZGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVudUxpc3Q6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2VsZWN0aW9uQ2hhbmdlZCk6CisKIDIwMDktMTItMjkgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkocmV2aXNp
b24gNTI2MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFBvcHVwTWVudUNsaWVudCB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+UG9wdXBNZW51Q2xpZW50KCkge30KICAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSkgPSAw
OwotCisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4
LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRlbVRl
eHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRl
bVRvb2xUaXAodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CkBAIC00OSw3ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBE
aWRIaWRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRT
dWdnZXN0aW9ucykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxl
Y3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA1MjYyNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIFBvcHVwTGlzdEJv
eCBtZXRob2RzCiAKICAgICAvLyBIaWRlcyB0aGUgcG9wdXAuCi0gICAgdm9pZCBoaWRlUG9wdXAo
KTsKKyAgICB2b2lkIGhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dlc3Rpb25zKTsKIAogICAgIC8v
IFVwZGF0ZXMgb3VyIGludGVybmFsIGxpc3QgdG8gbWF0Y2ggdGhlIGNsaWVudC4KICAgICB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBQb3B1cENvbnRh
aW5lcjo6c2hvd0V4dGVybmFsKGNvbnN0IAogCiB2b2lkIFBvcHVwQ29udGFpbmVyOjpoaWRlUG9w
dXAoKQogewotICAgIGxpc3RCb3goKS0+aGlkZVBvcHVwKCk7CisgICAgbGlzdEJveCgpLT5oaWRl
UG9wdXAodHJ1ZSk7CiB9CiAKIHZvaWQgUG9wdXBDb250YWluZXI6OmxheW91dCgpCkBAIC02MzEs
NyArNjMxLDcgQEAgYm9vbCBQb3B1cExpc3RCb3g6OmhhbmRsZUtleUV2ZW50KGNvbnN0IAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZLRVlfUkVUVVJOOgogICAgICAgICBpZiAobV9z
ZWxlY3RlZEluZGV4ID09IC0xKSAgewotICAgICAgICAgICAgaGlkZVBvcHVwKCk7CisgICAgICAg
ICAgICBoaWRlUG9wdXAoZmFsc2UpOwogICAgICAgICAgICAgLy8gRG9uJ3QgZWF0IHRoZSBlbnRl
ciBpZiBub3RoaW5nIGlzIHNlbGVjdGVkLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC04ODQsNyArODg0LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmFiYW5kb24oKQog
CiAgICAgbV9zZWxlY3RlZEluZGV4ID0gbV9vcmlnaW5hbEluZGV4OwogCi0gICAgaGlkZVBvcHVw
KCk7CisgICAgaGlkZVBvcHVwKGZhbHNlKTsKIAogICAgIGlmIChtX2FjY2VwdGVkSW5kZXhPbkFi
YW5kb24gPj0gMCkgewogICAgICAgICBtX3BvcHVwQ2xpZW50LT52YWx1ZUNoYW5nZWQobV9hY2Nl
cHRlZEluZGV4T25BYmFuZG9uKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCB2b2lkIFBvcHVwTGlzdEJv
eDo6YWNjZXB0SW5kZXgoaW50IGluZGV4CiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICBp
ZiAobV9wb3B1cENsaWVudCkgewogICAgICAgICAgICAgLy8gRW50ZXIgcHJlc3NlZCB3aXRoIG5v
IHNlbGVjdGlvbiwganVzdCBjbG9zZSB0aGUgcG9wdXAuCi0gICAgICAgICAgICBoaWRlUG9wdXAo
KTsKKyAgICAgICAgICAgIGhpZGVQb3B1cChmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTkyNiw3ICs5MjYsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6YWNjZXB0
SW5kZXgoaW50IGluZGV4CiAgICAgICAgIFJlZlB0cjxQb3B1cExpc3RCb3g+IGtlZXBBbGl2ZSh0
aGlzKTsKIAogICAgICAgICAvLyBIaWRlIG91cnNlbHZlcyBmaXJzdCBzaW5jZSB2YWx1ZUNoYW5n
ZWQgbWF5IGhhdmUgbnVtZXJvdXMgc2lkZS1lZmZlY3RzLgotICAgICAgICBoaWRlUG9wdXAoKTsK
KyAgICAgICAgaGlkZVBvcHVwKHRydWUpOwogCiAgICAgICAgIC8vIFRlbGwgdGhlIDxzZWxlY3Q+
IFBvcHVwTWVudUNsaWVudCB3aGF0IGluZGV4IHdhcyBzZWxlY3RlZC4KICAgICAgICAgbV9wb3B1
cENsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKQEAgLTk0NCw2ICs5NDQsNyBAQCB2b2lkIFBv
cHVwTGlzdEJveDo6c2VsZWN0SW5kZXgoaW50IGluZGV4CiAgICAgICAgIGludmFsaWRhdGVSb3co
bV9zZWxlY3RlZEluZGV4KTsKIAogICAgICAgICBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwor
ICAgICAgICBtX3BvcHVwQ2xpZW50LT5zZWxlY3Rpb25DaGFuZ2VkKG1fc2VsZWN0ZWRJbmRleCk7
CiAgICAgfQogfQogCkBAIC0xMDA1LDYgKzEwMDYsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6Y2xl
YXJTZWxlY3Rpb24oKQogICAgIGlmIChtX3NlbGVjdGVkSW5kZXggIT0gLTEpIHsKICAgICAgICAg
aW52YWxpZGF0ZVJvdyhtX3NlbGVjdGVkSW5kZXgpOwogICAgICAgICBtX3NlbGVjdGVkSW5kZXgg
PSAtMTsKKyAgICAgICAgbV9wb3B1cENsaWVudC0+c2VsZWN0aW9uQ2hhbmdlZChtX3NlbGVjdGVk
SW5kZXgpOwogICAgIH0KIH0KIApAQCAtMTA3Miw3ICsxMDc0LDcgQEAgdm9pZCBQb3B1cExpc3RC
b3g6OmFkanVzdFNlbGVjdGVkSW5kZXgoaQogICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7
CiB9CiAKLXZvaWQgUG9wdXBMaXN0Qm94OjpoaWRlUG9wdXAoKQordm9pZCBQb3B1cExpc3RCb3g6
OmhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dlc3Rpb25zKQogewogICAgIGlmIChwYXJlbnQoKSkg
ewogICAgICAgICBQb3B1cENvbnRhaW5lciogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UG9wdXBD
b250YWluZXIqPihwYXJlbnQoKSk7CkBAIC0xMDgwLDcgKzEwODIsNyBAQCB2b2lkIFBvcHVwTGlz
dEJveDo6aGlkZVBvcHVwKCkKICAgICAgICAgICAgIGNvbnRhaW5lci0+Y2xpZW50KCktPnBvcHVw
Q2xvc2VkKGNvbnRhaW5lcik7CiAgICAgfQogCi0gICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRI
aWRlKCk7CisgICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRIaWRlKGFjY2VwdFN1Z2dlc3Rpb25z
KTsKIH0KIAogdm9pZCBQb3B1cExpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgdm9pZCBQb3B1cE1lbnU6Om1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbgogdm9p
ZCBQb3B1cE1lbnU6Om1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUqIHRoYXQpCiB7
CiAgICAgQVNTRVJUKHRoYXQtPmNsaWVudCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+cG9wdXBE
aWRIaWRlKCk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIH0KIAog
dm9pZCBQb3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBn
aW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBQb3B1cE1lbnUqIHRoYXQpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEYKICAgICBpbnQgbnVt
SXRlbXMgPSBbbV9wb3B1cC5nZXQoKSBudW1iZXJPZkl0ZW1zXTsKICAgICBpZiAobnVtSXRlbXMg
PD0gMCkgewogICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+cG9w
dXBEaWRIaWRlKCk7CisgICAgICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChudW1JdGVtcyA+IGluZGV4KTsKQEAg
LTE2NSw3ICsxNjUsNyBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBG
CiAKICAgICBpZiAoY2xpZW50KCkpIHsKICAgICAgICAgaW50IG5ld0luZGV4ID0gW21fcG9wdXAu
Z2V0KCkgaW5kZXhPZlNlbGVjdGVkSXRlbV07Ci0gICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIAogICAgICAgICAv
LyBBZGp1c3QgbmV3SW5kZXggZm9yIGhpZGRlbiBmaXJzdCBpdGVtLgogICAgICAgICBpZiAoIWNs
aWVudCgpLT5zaG91bGRQb3BPdmVyKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1F0RmFs
bGJhY2tXZWJQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdEZh
bGxiYWNrV2ViUG9wdXAuY3BwCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3
IEBAIHZvaWQgUXRGYWxsYmFja1dlYlBvcHVwOjpoaWRlUG9wdXAoKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3BvcHVwVmlzaWJsZSA9IGZhbHNlOwotICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwogfQogCiB2b2lkIFF0RmFs
bGJhY2tXZWJQb3B1cDo6YWN0aXZlQ2hhbmdlZChpbnQgaW5kZXgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDcgKzI3NCw3
IEBAIHZvaWQgUG9wdXBNZW51OjpoaWRlKCkKICAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1df
SElERSk7CiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIAogICAgIC8vIFBv
c3QgYSBXTV9OVUxMIG1lc3NhZ2UgdG8gd2FrZSB1cCB0aGUgbWVzc2FnZSBwdW1wIGlmIG5lY2Vz
c2FyeS4KICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX05VTEwsIDAsIDApOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4
LDcgQEAgdm9pZCBQb3B1cE1lbnU6Ok9uTWVudUl0ZW1TZWxlY3RlZCh3eENvbQogewogICAgIGlm
IChjbGllbnQoKSkgewogICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKGV2ZW50LkdldElk
KCkgLSBzX21lbnVTdGFydElkKTsKLSAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOwor
ICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwogICAgIH0KICAgICAvLyBUT0RP
OiBEbyB3ZSBuZWVkIHRvIGNhbGwgRGlzY29ubmVjdCBoZXJlPyBEbyB3ZSBoYXZlIGEgcmVmIHRv
IHRoZSBuYXRpdmUgd2luZG93IHN0aWxsPwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmNwcAkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBpbnQgUmVuZGVy
TWVudUxpc3Q6OnNlbGVjdGVkSW5kZXgoKSBjb25zCiAgICAgcmV0dXJuIHNlbGVjdC0+b3B0aW9u
VG9MaXN0SW5kZXgoc2VsZWN0LT5zZWxlY3RlZEluZGV4KCkpOwogfQogCi12b2lkIFJlbmRlck1l
bnVMaXN0Ojpwb3B1cERpZEhpZGUoKQordm9pZCBSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRl
KGJvb2wpCiB7CiAgICAgbV9wb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5k
ZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CisgICAgdmlydHVh
bCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CkBAIC05
MCw2ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdl
T25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuICFQT1BVUF9NRU5VX1BVTExTX0RPV047IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJl
T25DaGFuZ2UgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNp
Z25lZCwgYm9vbCkge30KICAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNs
aWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw3IEBAIGludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGUKICAgICByZXR1cm4gLTE7CiB9CiAK
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQordm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlkSGlkZShib29sKQogewogICAgIG1f
c2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA1MjYyNSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBQb3B1cE1lbnVDbGll
bnQgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdElu
ZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkge30KICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlw
KHVuc2lnbmVkKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CkBAIC0xMDksNyArMTEwLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVj
dGVkSW5kZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CisgICAg
dmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb24pOwogICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjkgIFplbGlk
cmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFu
ZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6
OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6OnNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnJlc2V0TGFzdEZp
ZWxkVmFsdWUpOgorICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaDoK
KworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSAoYXV0
b2NvbXBsZXRlIHN1Z2dlc3Rpb25zKQorICAgICAgICBpcyBpbnRlbnRpb25hbGx5IGhpZGRlbiBm
cm9tIGV2ZXJ5dGhpbmcgZWxzZSB0aGFuIHJlbmRlcmVyLgorCiAyMDA5LTEyLTI4ICBLaW51a28g
WWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNp
ZWogU3RhY2hvd2lhay4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMSArNTksMTcgQEAgdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Omlu
aXRpYQogICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdnZXN0aW9ucywKICAgICBp
bnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkKIHsKKyAgICBpZiAoIW1fbGFzdEZpZWxkVmFsdWVz
KSB7CisgICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLnNldChuZXcgRmllbGRWYWx1ZXNNYXApOwor
ICAgIH0KICAgICBBU1NFUlQoZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCA8IHN0YXRpY19jYXN0PGlu
dD4oc3VnZ2VzdGlvbnMuc2l6ZSgpKSk7CiAgICAgbV90ZXh0RmllbGQgPSB0ZXh0RmllbGQ7Cisg
ICAgbV90eXBlZEZpZWxkVmFsdWUgPSB0ZXh0RmllbGQtPnZhbHVlKCk7CiAgICAgbV9zZWxlY3Rl
ZEluZGV4ID0gZGVmYXVsdFN1Z2dlc3Rpb25JbmRleDsKICAgICBzZXRTdWdnZXN0aW9ucyhzdWdn
ZXN0aW9ucyk7CiAKKyAgICBzZXRJbml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKTsKKwogICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgbV93ZWJWaWV3LT50aGVtZSgpLT5z
eXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0Q29udHJvbCwgZm9udERlc2NyaXB0aW9uKTsKICAgICAv
LyBVc2UgYSBzbWFsbGVyIGZvbnQgc2l6ZSB0byBtYXRjaCBJRS9GaXJlZm94LgpAQCAtNzksNiAr
ODUsMzUgQEAgdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmluaXRpYQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0eWxl
KCktPmRpcmVjdGlvbigpKSk7CiB9CiAKKwordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6OnNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSgpCit7CisgICAgaWYgKCFtX3N1Z2dlc3Rp
b25zLnNpemUoKSB8fCAhbV90ZXh0RmllbGQtPm5hbWUoKS5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGludCBuZXdJbmRleCA9IG1fc2VsZWN0ZWRJbmRleCA+PSAwID8gbV9zZWxlY3Rl
ZEluZGV4IDogMDsKKyAgICBXZWJDb3JlOjpTdHJpbmcgc3VnZ2VzdGlvbiA9IG1fc3VnZ2VzdGlv
bnNbbmV3SW5kZXhdOworICAgIGJvb2wgaGFzUHJldmlvdXNWYWx1ZSA9IG1fbGFzdEZpZWxkVmFs
dWVzLT5jb250YWlucyhtX3RleHRGaWVsZC0+bmFtZSgpKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcg
cHJldlZhbHVlOworICAgIGlmIChoYXNQcmV2aW91c1ZhbHVlKQorICAgICAgICBwcmV2VmFsdWUg
PSBtX2xhc3RGaWVsZFZhbHVlcy0+Z2V0KG1fdGV4dEZpZWxkLT5uYW1lKCkpOworICAgIGlmICgh
aGFzUHJldmlvdXNWYWx1ZSB8fCBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSA+IG1fbGFzdEZp
ZWxkVmFsdWVzLT5nZXQobV90ZXh0RmllbGQtPm5hbWUoKSkubGVuZ3RoKCkpIHsKKyAgICAgICAg
ICBTdHJpbmcgbmV3U3VnZ2VzdGlvbiA9IG1fdHlwZWRGaWVsZFZhbHVlOworICAgICAgICAgIGlm
IChzdWdnZXN0aW9uLmxlbmd0aCgpID4gbV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgICAgbmV3U3VnZ2VzdGlvbi5hcHBlbmQoc3VnZ2VzdGlvbi5jaGFyYWN0ZXJzKCkg
KyBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rp
b24ubGVuZ3RoKCkgLSBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSk7CisgICAgICAgICAgfQor
ICAgICAgICAgIGludCBzdGFydCA9IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpOworICAgICAg
ICAgIG1fdGV4dEZpZWxkLT5zZXRTdWdnZXN0ZWRWYWx1ZShuZXdTdWdnZXN0aW9uKTsKKyAgICAg
ICAgICBtX3RleHRGaWVsZC0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG5ld1N1Z2dlc3Rpb24u
bGVuZ3RoKCkpOworICAgICAgICAgIG1fc2VsZWN0ZWRJbmRleCA9IG5ld0luZGV4OworICAgIH0K
KyAgICBpZiAoaGFzUHJldmlvdXNWYWx1ZSkKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPnNl
dChtX3RleHRGaWVsZC0+bmFtZSgpLCBtX3R5cGVkRmllbGRWYWx1ZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdHlwZWRG
aWVsZFZhbHVlKTsKK30KKworCiB2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewogICAgIG1f
dGV4dEZpZWxkLT5zZXRWYWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0pOwpAQCAtODksNiAr
MTI0LDIxIEBAIHZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUMKICAgICAg
ICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7CiB9
CiAKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DaGFuZ2VkKHVu
c2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIGlmIChsaXN0SW5kZXgg
IT0gLTEpIHsKKyAgICAgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3RlZFZhbHVlKG1fc3VnZ2Vz
dGlvbnNbbGlzdEluZGV4XSk7CisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRTZWxlY3Rpb25SYW5n
ZShtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XS5sZW5ndGgoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmllbGRWYWx1ZSk7Cisg
ICAgICBpZiAobV9sYXN0RmllbGRWYWx1ZXMtPmNvbnRhaW5zKG1fdGV4dEZpZWxkLT5uYW1lKCkp
KQorICAgICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5zZXQobV90ZXh0RmllbGQtPm5hbWUoKSwg
bV90eXBlZEZpZWxkVmFsdWUpOworICAgICAgZWxzZQorICAgICAgICAgIG1fbGFzdEZpZWxkVmFs
dWVzLT5hZGQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUpOworICAgIH0K
K30KKwogU3RyaW5nIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aXRlbVRleHQodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgIHJldHVybiBtX3N1Z2dlc3Rpb25zW2xpc3RJbmRl
eF07CkBAIC0xMTgsMTQgKzE2OCwzMCBAQCBpbnQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
OjpjbGllbnRQCiAgICAgcmV0dXJuIHN0eWxlID8gbV93ZWJWaWV3LT50aGVtZSgpLT5wb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKSA6IDA7CiB9CiAKLXZvaWQgQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUoKQordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQ6OnBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKQogeworICAgIGlmIChh
Y2NlcHRTdWdnZXN0aW9ucykgeworICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkVmFsdWUgPSBtX3Rl
eHRGaWVsZC0+c3VnZ2VzdGVkVmFsdWUoKTsKKyAgICAgICAgaWYgKCFzdWdnZXN0ZWRWYWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShzdWdnZXN0ZWRWYWx1
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmll
bGRWYWx1ZSk7CisKKyAgICByZXNldExhc3RGaWVsZFZhbHVlKCk7CiAgICAgbV93ZWJWaWV3LT5h
dXRvQ29tcGxldGVQb3B1cERpZEhpZGUoKTsKIH0KIAogdm9pZCBBdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7CiAgICAgbV90
ZXh0RmllbGQtPnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7CisgICAgcmVzZXRM
YXN0RmllbGRWYWx1ZSgpOworfQorCit2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6
cmVzZXRMYXN0RmllbGRWYWx1ZSgpIHsKKyAgICBpZiAobV9sYXN0RmllbGRWYWx1ZXMtPmNvbnRh
aW5zKG1fdGV4dEZpZWxkLT5uYW1lKCkpKQorICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+c2V0
KG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdGV4dEZpZWxkLT52YWx1ZSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5hZGQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90ZXh0
RmllbGQtPnZhbHVlKCkpOwogfQogCiBGb250U2VsZWN0b3IqIEF1dG9jb21wbGV0ZVBvcHVwTWVu
dUNsaWVudDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNTI2MjUpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlYkNvcmU6OlBv
cHVwTWVudUNsaWVudCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5z
aWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9
IHRydWUpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRvb2xUaXAo
dW5zaWduZWQgbGFzdEluZGV4KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUo
KSBjb25zdCB7IHJldHVybiBtX3N1Z2dlc3Rpb25zLnNpemUoKTsgfQogICAgIHZpcnR1YWwgaW50
IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CisgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlk
ZShib29sIGFjY2VwdFN1Z2dlc3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0
b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTg1LDEyICs4NiwxNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6UmVuZGVyU3R5bGUqIHRleHRGaWVsZFN0eWxlKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRJbml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKTsKKyAgICB2b2lkIHJl
c2V0TGFzdEZpZWxkVmFsdWUoKTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50PiBtX3RleHRGaWVsZDsKICAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX3N1Z2dlc3Rp
b25zOwogICAgIGludCBtX3NlbGVjdGVkSW5kZXg7CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmll
dzsKKyAgICBXZWJDb3JlOjpTdHJpbmcgbV90eXBlZEZpZWxkVmFsdWU7CiAgICAgT3duUHRyPFdl
YkNvcmU6OlBvcHVwTWVudVN0eWxlPiBtX3N0eWxlOworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJD
b3JlOjpTdHJpbmcsIFdlYkNvcmU6OlN0cmluZz4gRmllbGRWYWx1ZXNNYXA7CisgICAgT3duUHRy
PEZpZWxkVmFsdWVzTWFwPiBtX2xhc3RGaWVsZFZhbHVlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45614</attachid>
            <date>2009-12-29 10:37:16 -0800</date>
            <delta_ts>2009-12-30 14:51:06 -0800</delta_ts>
            <desc>PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.</desc>
            <filename>wk_32533_c.patch</filename>
            <type>text/plain</type>
            <size>19608</size>
            <attacher name="Zelidrag Hornung">zelidrag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMTItMjkgIFplbGlkcmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXV0b2NvbXBsZXRlIG5vdyBvZmZlcnMgc3VnZ2VzdGlvbnMgd2l0aGluIHRoZSBpbnB1
dCBlbGVtZW50IGFzIGEgdXNlcgorICAgICAgICBhKSB0eXBlcyB0ZXh0IHRoYXQgcHJvZHVjZXMg
c29tZSBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMsIGFuZAorICAgICAgICBiKSBzY3JvbGxzIHRo
cm91Z2ggc3VnZ2VzdGVkIHZhbHVlcyBpbiB0aGUgbWVudQorICAgICAgICBUaGUgc3VnZ2VzdGVk
IHZhbHVlIGlzIHJlbmRlcmVkIGJ1dCBub3QgZXhwb3NlZCB0aHJvdWdoIEpTIHVudGkgdGhlCisg
ICAgICAgIHVzZXIgbWFrZXMgdGhlIGZpbmFsIHNlbGVjdGlvbgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBzaW5jZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IChhdXRvY29tcGxldGUgc3VnZ2VzdGlv
bnMpCisgICAgICAgIGlzIGludGVudGlvbmFsbHkgaGlkZGVuIGZyb20gZXZlcnl0aGluZyBlbHNl
IHRoYW4gcmVuZGVyZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTGlzdEJveDo6aGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBMaXN0Qm94OjphYmFuZG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6YWNj
ZXB0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpzZWxlY3RJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6aGlkZVBvcHVwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUG9wdXBNZW51R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6bWVu
dVVubWFwcGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9R
dEZhbGxiYWNrV2ViUG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxsYmFja1dlYlBv
cHVwOjpoaWRlUG9wdXApOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpoaWRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93eC9Qb3B1cE1lbnVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6Ok9uTWVu
dUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpwb3B1cERpZEhpZGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVudUxpc3Q6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2VsZWN0aW9uQ2hhbmdlZCk6CisKIDIwMDktMTItMjkgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkocmV2aXNp
b24gNTI2MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFBvcHVwTWVudUNsaWVudCB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+UG9wdXBNZW51Q2xpZW50KCkge30KICAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSkgPSAw
OwotCisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4
LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRlbVRl
eHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRl
bVRvb2xUaXAodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CkBAIC00OSw3ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBE
aWRIaWRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRT
dWdnZXN0aW9ucykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxl
Y3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA1MjYyNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIFBvcHVwTGlzdEJv
eCBtZXRob2RzCiAKICAgICAvLyBIaWRlcyB0aGUgcG9wdXAuCi0gICAgdm9pZCBoaWRlUG9wdXAo
KTsKKyAgICB2b2lkIGhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dlc3Rpb25zKTsKIAogICAgIC8v
IFVwZGF0ZXMgb3VyIGludGVybmFsIGxpc3QgdG8gbWF0Y2ggdGhlIGNsaWVudC4KICAgICB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBQb3B1cENvbnRh
aW5lcjo6c2hvd0V4dGVybmFsKGNvbnN0IAogCiB2b2lkIFBvcHVwQ29udGFpbmVyOjpoaWRlUG9w
dXAoKQogewotICAgIGxpc3RCb3goKS0+aGlkZVBvcHVwKCk7CisgICAgbGlzdEJveCgpLT5oaWRl
UG9wdXAodHJ1ZSk7CiB9CiAKIHZvaWQgUG9wdXBDb250YWluZXI6OmxheW91dCgpCkBAIC02MzEs
NyArNjMxLDcgQEAgYm9vbCBQb3B1cExpc3RCb3g6OmhhbmRsZUtleUV2ZW50KGNvbnN0IAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZLRVlfUkVUVVJOOgogICAgICAgICBpZiAobV9z
ZWxlY3RlZEluZGV4ID09IC0xKSAgewotICAgICAgICAgICAgaGlkZVBvcHVwKCk7CisgICAgICAg
ICAgICBoaWRlUG9wdXAoZmFsc2UpOwogICAgICAgICAgICAgLy8gRG9uJ3QgZWF0IHRoZSBlbnRl
ciBpZiBub3RoaW5nIGlzIHNlbGVjdGVkLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC04ODQsNyArODg0LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmFiYW5kb24oKQog
CiAgICAgbV9zZWxlY3RlZEluZGV4ID0gbV9vcmlnaW5hbEluZGV4OwogCi0gICAgaGlkZVBvcHVw
KCk7CisgICAgaGlkZVBvcHVwKGZhbHNlKTsKIAogICAgIGlmIChtX2FjY2VwdGVkSW5kZXhPbkFi
YW5kb24gPj0gMCkgewogICAgICAgICBtX3BvcHVwQ2xpZW50LT52YWx1ZUNoYW5nZWQobV9hY2Nl
cHRlZEluZGV4T25BYmFuZG9uKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCB2b2lkIFBvcHVwTGlzdEJv
eDo6YWNjZXB0SW5kZXgoaW50IGluZGV4CiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICBp
ZiAobV9wb3B1cENsaWVudCkgewogICAgICAgICAgICAgLy8gRW50ZXIgcHJlc3NlZCB3aXRoIG5v
IHNlbGVjdGlvbiwganVzdCBjbG9zZSB0aGUgcG9wdXAuCi0gICAgICAgICAgICBoaWRlUG9wdXAo
KTsKKyAgICAgICAgICAgIGhpZGVQb3B1cChmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTkyNiw3ICs5MjYsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6YWNjZXB0
SW5kZXgoaW50IGluZGV4CiAgICAgICAgIFJlZlB0cjxQb3B1cExpc3RCb3g+IGtlZXBBbGl2ZSh0
aGlzKTsKIAogICAgICAgICAvLyBIaWRlIG91cnNlbHZlcyBmaXJzdCBzaW5jZSB2YWx1ZUNoYW5n
ZWQgbWF5IGhhdmUgbnVtZXJvdXMgc2lkZS1lZmZlY3RzLgotICAgICAgICBoaWRlUG9wdXAoKTsK
KyAgICAgICAgaGlkZVBvcHVwKHRydWUpOwogCiAgICAgICAgIC8vIFRlbGwgdGhlIDxzZWxlY3Q+
IFBvcHVwTWVudUNsaWVudCB3aGF0IGluZGV4IHdhcyBzZWxlY3RlZC4KICAgICAgICAgbV9wb3B1
cENsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKQEAgLTk0NCw2ICs5NDQsNyBAQCB2b2lkIFBv
cHVwTGlzdEJveDo6c2VsZWN0SW5kZXgoaW50IGluZGV4CiAgICAgICAgIGludmFsaWRhdGVSb3co
bV9zZWxlY3RlZEluZGV4KTsKIAogICAgICAgICBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwor
ICAgICAgICBtX3BvcHVwQ2xpZW50LT5zZWxlY3Rpb25DaGFuZ2VkKG1fc2VsZWN0ZWRJbmRleCk7
CiAgICAgfQogfQogCkBAIC0xMDA1LDYgKzEwMDYsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6Y2xl
YXJTZWxlY3Rpb24oKQogICAgIGlmIChtX3NlbGVjdGVkSW5kZXggIT0gLTEpIHsKICAgICAgICAg
aW52YWxpZGF0ZVJvdyhtX3NlbGVjdGVkSW5kZXgpOwogICAgICAgICBtX3NlbGVjdGVkSW5kZXgg
PSAtMTsKKyAgICAgICAgbV9wb3B1cENsaWVudC0+c2VsZWN0aW9uQ2hhbmdlZChtX3NlbGVjdGVk
SW5kZXgpOwogICAgIH0KIH0KIApAQCAtMTA3Miw3ICsxMDc0LDcgQEAgdm9pZCBQb3B1cExpc3RC
b3g6OmFkanVzdFNlbGVjdGVkSW5kZXgoaQogICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7
CiB9CiAKLXZvaWQgUG9wdXBMaXN0Qm94OjpoaWRlUG9wdXAoKQordm9pZCBQb3B1cExpc3RCb3g6
OmhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dlc3Rpb25zKQogewogICAgIGlmIChwYXJlbnQoKSkg
ewogICAgICAgICBQb3B1cENvbnRhaW5lciogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UG9wdXBD
b250YWluZXIqPihwYXJlbnQoKSk7CkBAIC0xMDgwLDcgKzEwODIsNyBAQCB2b2lkIFBvcHVwTGlz
dEJveDo6aGlkZVBvcHVwKCkKICAgICAgICAgICAgIGNvbnRhaW5lci0+Y2xpZW50KCktPnBvcHVw
Q2xvc2VkKGNvbnRhaW5lcik7CiAgICAgfQogCi0gICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRI
aWRlKCk7CisgICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRIaWRlKGFjY2VwdFN1Z2dlc3Rpb25z
KTsKIH0KIAogdm9pZCBQb3B1cExpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgdm9pZCBQb3B1cE1lbnU6Om1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbgogdm9p
ZCBQb3B1cE1lbnU6Om1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUqIHRoYXQpCiB7
CiAgICAgQVNTRVJUKHRoYXQtPmNsaWVudCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+cG9wdXBE
aWRIaWRlKCk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIH0KIAog
dm9pZCBQb3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBn
aW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBQb3B1cE1lbnUqIHRoYXQpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEYKICAgICBpbnQgbnVt
SXRlbXMgPSBbbV9wb3B1cC5nZXQoKSBudW1iZXJPZkl0ZW1zXTsKICAgICBpZiAobnVtSXRlbXMg
PD0gMCkgewogICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+cG9w
dXBEaWRIaWRlKCk7CisgICAgICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChudW1JdGVtcyA+IGluZGV4KTsKQEAg
LTE2NSw3ICsxNjUsNyBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBG
CiAKICAgICBpZiAoY2xpZW50KCkpIHsKICAgICAgICAgaW50IG5ld0luZGV4ID0gW21fcG9wdXAu
Z2V0KCkgaW5kZXhPZlNlbGVjdGVkSXRlbV07Ci0gICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIAogICAgICAgICAv
LyBBZGp1c3QgbmV3SW5kZXggZm9yIGhpZGRlbiBmaXJzdCBpdGVtLgogICAgICAgICBpZiAoIWNs
aWVudCgpLT5zaG91bGRQb3BPdmVyKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1F0RmFs
bGJhY2tXZWJQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdEZh
bGxiYWNrV2ViUG9wdXAuY3BwCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3
IEBAIHZvaWQgUXRGYWxsYmFja1dlYlBvcHVwOjpoaWRlUG9wdXAoKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3BvcHVwVmlzaWJsZSA9IGZhbHNlOwotICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwogfQogCiB2b2lkIFF0RmFs
bGJhY2tXZWJQb3B1cDo6YWN0aXZlQ2hhbmdlZChpbnQgaW5kZXgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDcgKzI3NCw3
IEBAIHZvaWQgUG9wdXBNZW51OjpoaWRlKCkKICAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1df
SElERSk7CiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKIAogICAgIC8vIFBv
c3QgYSBXTV9OVUxMIG1lc3NhZ2UgdG8gd2FrZSB1cCB0aGUgbWVzc2FnZSBwdW1wIGlmIG5lY2Vz
c2FyeS4KICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX05VTEwsIDAsIDApOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4
LDcgQEAgdm9pZCBQb3B1cE1lbnU6Ok9uTWVudUl0ZW1TZWxlY3RlZCh3eENvbQogewogICAgIGlm
IChjbGllbnQoKSkgewogICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKGV2ZW50LkdldElk
KCkgLSBzX21lbnVTdGFydElkKTsKLSAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOwor
ICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOwogICAgIH0KICAgICAvLyBUT0RP
OiBEbyB3ZSBuZWVkIHRvIGNhbGwgRGlzY29ubmVjdCBoZXJlPyBEbyB3ZSBoYXZlIGEgcmVmIHRv
IHRoZSBuYXRpdmUgd2luZG93IHN0aWxsPwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmNwcAkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBpbnQgUmVuZGVy
TWVudUxpc3Q6OnNlbGVjdGVkSW5kZXgoKSBjb25zCiAgICAgcmV0dXJuIHNlbGVjdC0+b3B0aW9u
VG9MaXN0SW5kZXgoc2VsZWN0LT5zZWxlY3RlZEluZGV4KCkpOwogfQogCi12b2lkIFJlbmRlck1l
bnVMaXN0Ojpwb3B1cERpZEhpZGUoKQordm9pZCBSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRl
KGJvb2wpCiB7CiAgICAgbV9wb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA1MjYyNSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5k
ZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CisgICAgdmlydHVh
bCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CkBAIC05
MCw2ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdl
T25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuICFQT1BVUF9NRU5VX1BVTExTX0RPV047IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJl
T25DaGFuZ2UgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNp
Z25lZCwgYm9vbCkge30KICAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNs
aWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw3IEBAIGludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGUKICAgICByZXR1cm4gLTE7CiB9CiAK
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQordm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlkSGlkZShib29sKQogewogICAgIG1f
c2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA1MjYyNSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBQb3B1cE1lbnVDbGll
bnQgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdElu
ZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkge30KICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlw
KHVuc2lnbmVkKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CkBAIC0xMDksNyArMTEwLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVj
dGVkSW5kZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CisgICAg
dmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb24pOwogICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTI2MjUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjkgIFplbGlk
cmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFu
ZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6
OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6OnNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnJlc2V0TGFzdEZp
ZWxkVmFsdWUpOgorICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaDoK
KworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSAoYXV0
b2NvbXBsZXRlIHN1Z2dlc3Rpb25zKQorICAgICAgICBpcyBpbnRlbnRpb25hbGx5IGhpZGRlbiBm
cm9tIGV2ZXJ5dGhpbmcgZWxzZSB0aGFuIHJlbmRlcmVyLgorCiAyMDA5LTEyLTI4ICBLaW51a28g
WWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNp
ZWogU3RhY2hvd2lhay4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMSArNTksMTYgQEAgdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Omlu
aXRpYQogICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdnZXN0aW9ucywKICAgICBp
bnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkKIHsKKyAgICBpZiAoIW1fbGFzdEZpZWxkVmFsdWVz
KQorICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy5zZXQobmV3IEZpZWxkVmFsdWVzTWFwKTsKICAg
ICBBU1NFUlQoZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCA8IHN0YXRpY19jYXN0PGludD4oc3VnZ2Vz
dGlvbnMuc2l6ZSgpKSk7CiAgICAgbV90ZXh0RmllbGQgPSB0ZXh0RmllbGQ7CisgICAgbV90eXBl
ZEZpZWxkVmFsdWUgPSB0ZXh0RmllbGQtPnZhbHVlKCk7CiAgICAgbV9zZWxlY3RlZEluZGV4ID0g
ZGVmYXVsdFN1Z2dlc3Rpb25JbmRleDsKICAgICBzZXRTdWdnZXN0aW9ucyhzdWdnZXN0aW9ucyk7
CiAKKyAgICBzZXRJbml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKTsKKwogICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgbV93ZWJWaWV3LT50aGVtZSgpLT5zeXN0ZW1Gb250
KENTU1ZhbHVlV2Via2l0Q29udHJvbCwgZm9udERlc2NyaXB0aW9uKTsKICAgICAvLyBVc2UgYSBz
bWFsbGVyIGZvbnQgc2l6ZSB0byBtYXRjaCBJRS9GaXJlZm94LgpAQCAtNzksNiArODQsMzUgQEAg
dm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmluaXRpYQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7CiB9CiAKKwordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNldElu
aXRpYWxBdXRvY29tcGxldGVWYWx1ZSgpCit7CisgICAgaWYgKCFtX3N1Z2dlc3Rpb25zLnNpemUo
KSB8fCAhbV90ZXh0RmllbGQtPm5hbWUoKS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGludCBuZXdJbmRleCA9IG1fc2VsZWN0ZWRJbmRleCA+PSAwID8gbV9zZWxlY3RlZEluZGV4IDog
MDsKKyAgICBXZWJDb3JlOjpTdHJpbmcgc3VnZ2VzdGlvbiA9IG1fc3VnZ2VzdGlvbnNbbmV3SW5k
ZXhdOworICAgIGJvb2wgaGFzUHJldmlvdXNWYWx1ZSA9IG1fbGFzdEZpZWxkVmFsdWVzLT5jb250
YWlucyhtX3RleHRGaWVsZC0+bmFtZSgpKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgcHJldlZhbHVl
OworICAgIGlmIChoYXNQcmV2aW91c1ZhbHVlKQorICAgICAgICBwcmV2VmFsdWUgPSBtX2xhc3RG
aWVsZFZhbHVlcy0+Z2V0KG1fdGV4dEZpZWxkLT5uYW1lKCkpOworICAgIGlmICghaGFzUHJldmlv
dXNWYWx1ZSB8fCBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSA+IG1fbGFzdEZpZWxkVmFsdWVz
LT5nZXQobV90ZXh0RmllbGQtPm5hbWUoKSkubGVuZ3RoKCkpIHsKKyAgICAgICAgICBTdHJpbmcg
bmV3U3VnZ2VzdGlvbiA9IG1fdHlwZWRGaWVsZFZhbHVlOworICAgICAgICAgIGlmIChzdWdnZXN0
aW9uLmxlbmd0aCgpID4gbV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgbmV3U3VnZ2VzdGlvbi5hcHBlbmQoc3VnZ2VzdGlvbi5jaGFyYWN0ZXJzKCkgKyBtX3R5cGVk
RmllbGRWYWx1ZS5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGVuZ3Ro
KCkgLSBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSk7CisgICAgICAgICAgfQorICAgICAgICAg
IGludCBzdGFydCA9IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpOworICAgICAgICAgIG1fdGV4
dEZpZWxkLT5zZXRTdWdnZXN0ZWRWYWx1ZShuZXdTdWdnZXN0aW9uKTsKKyAgICAgICAgICBtX3Rl
eHRGaWVsZC0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG5ld1N1Z2dlc3Rpb24ubGVuZ3RoKCkp
OworICAgICAgICAgIG1fc2VsZWN0ZWRJbmRleCA9IG5ld0luZGV4OworICAgIH0KKyAgICBpZiAo
aGFzUHJldmlvdXNWYWx1ZSkKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPnNldChtX3RleHRG
aWVsZC0+bmFtZSgpLCBtX3R5cGVkRmllbGRWYWx1ZSk7CisgICAgZWxzZQorICAgICAgICBtX2xh
c3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZhbHVl
KTsKK30KKworCiB2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2Vk
KHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewogICAgIG1fdGV4dEZpZWxk
LT5zZXRWYWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0pOwpAQCAtODksNiArMTIzLDIxIEBA
IHZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUMKICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7CiB9CiAKK3ZvaWQg
QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxp
c3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIGlmIChsaXN0SW5kZXggIT0gLTEpIHsK
KyAgICAgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3RlZFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlz
dEluZGV4XSk7CisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRTZWxlY3Rpb25SYW5nZShtX3R5cGVk
RmllbGRWYWx1ZS5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XS5sZW5ndGgoKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmllbGRWYWx1ZSk7CisgICAgICBpZiAo
bV9sYXN0RmllbGRWYWx1ZXMtPmNvbnRhaW5zKG1fdGV4dEZpZWxkLT5uYW1lKCkpKQorICAgICAg
ICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5zZXQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZp
ZWxkVmFsdWUpOworICAgICAgZWxzZQorICAgICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5hZGQo
bV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUpOworICAgIH0KK30KKwogU3Ry
aW5nIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aXRlbVRleHQodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdAogewogICAgIHJldHVybiBtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF07CkBAIC0x
MTgsMTQgKzE2NywzMSBAQCBpbnQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpjbGllbnRQ
CiAgICAgcmV0dXJuIHN0eWxlID8gbV93ZWJWaWV3LT50aGVtZSgpLT5wb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KHN0eWxlKSA6IDA7CiB9CiAKLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xp
ZW50Ojpwb3B1cERpZEhpZGUoKQordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnBv
cHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKQogeworICAgIGlmIChhY2NlcHRTdWdn
ZXN0aW9ucykgeworICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkVmFsdWUgPSBtX3RleHRGaWVsZC0+
c3VnZ2VzdGVkVmFsdWUoKTsKKyAgICAgICAgaWYgKCFzdWdnZXN0ZWRWYWx1ZS5pc051bGwoKSkK
KyAgICAgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShzdWdnZXN0ZWRWYWx1ZSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmllbGRWYWx1ZSk7
CisKKyAgICByZXNldExhc3RGaWVsZFZhbHVlKCk7CiAgICAgbV93ZWJWaWV3LT5hdXRvQ29tcGxl
dGVQb3B1cERpZEhpZGUoKTsKIH0KIAogdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6
OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7CiAgICAgbV90ZXh0RmllbGQt
PnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7CisgICAgcmVzZXRMYXN0RmllbGRW
YWx1ZSgpOworfQorCit2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cmVzZXRMYXN0
RmllbGRWYWx1ZSgpCit7CisgICAgaWYgKG1fbGFzdEZpZWxkVmFsdWVzLT5jb250YWlucyhtX3Rl
eHRGaWVsZC0+bmFtZSgpKSkKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPnNldChtX3RleHRG
aWVsZC0+bmFtZSgpLCBtX3RleHRGaWVsZC0+dmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBt
X2xhc3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdGV4dEZpZWxkLT52
YWx1ZSgpKTsKIH0KIAogRm9udFNlbGVjdG9yKiBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6
OmZvbnRTZWxlY3RvcigpIGNvbnN0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21w
bGV0ZVBvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDUyNjI1KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJDb3JlOjpQb3B1cE1lbnVD
bGllbnQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxp
c3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVj
dGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsK
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVk
IGxhc3RJbmRleCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGNsaWVu
dFBhZGRpbmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWdnZXN0aW9ucy5zaXplKCk7IH0KICAgICB2aXJ0dWFsIGludCBzZWxlY3Rl
ZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0gICAgdmlydHVhbCB2
b2lkIHBvcHVwRGlkSGlkZSgpOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBh
Y2NlcHRTdWdnZXN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC04NSwxMiArODYsMTcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0RmllbGRTdHlsZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0SW5pdGlhbEF1dG9jb21wbGV0ZVZhbHVlKCk7CisgICAgdm9pZCByZXNldExhc3RG
aWVsZFZhbHVlKCk7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4gbV90
ZXh0RmllbGQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4gbV9zdWdnZXN0aW9uczsKICAg
ICBpbnQgbV9zZWxlY3RlZEluZGV4OwogICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXc7CisgICAg
V2ViQ29yZTo6U3RyaW5nIG1fdHlwZWRGaWVsZFZhbHVlOwogICAgIE93blB0cjxXZWJDb3JlOjpQ
b3B1cE1lbnVTdHlsZT4gbV9zdHlsZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6U3Ry
aW5nLCBXZWJDb3JlOjpTdHJpbmc+IEZpZWxkVmFsdWVzTWFwOworICAgIE93blB0cjxGaWVsZFZh
bHVlc01hcD4gbV9sYXN0RmllbGRWYWx1ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="27690"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="27691"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45687</attachid>
            <date>2009-12-30 14:51:06 -0800</date>
            <delta_ts>2010-01-22 13:44:37 -0800</delta_ts>
            <desc>PopupMenuClient changes needed for autocomplete suggestions displaying in input elements.</desc>
            <filename>wk_32533_c.patch</filename>
            <type>text/plain</type>
            <size>19972</size>
            <attacher name="Zelidrag Hornung">zelidrag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjY3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMTItMjkgIFplbGlkcmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgYWJpbGl0eSBmb3IgUG9wdXBNZW51Q2xpZW50IHRvIHNpZ25hbCB3aGVuCisg
ICAgICAgIGEpIHNlbGVjdGlvbiBjaGFuZ2VkLCBhbmQKKyAgICAgICAgYikgd2VhdGhlciBzdWdn
ZXN0ZWQgdmFsdWUgc2hvdWxkIGJlIGFjY2VwdGVkIHdoZW4gcG9wdXAgbWVudSBjbG9zZXMKKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSAoYXV0b2Nv
bXBsZXRlIHN1Z2dlc3Rpb25zKQorICAgICAgICBpcyBpbnRlbnRpb25hbGx5IGhpZGRlbiBmcm9t
IGV2ZXJ5dGhpbmcgZWxzZSB0aGFuIHJlbmRlcmVyLgorCisgICAgICAgICogcGxhdGZvcm0vUG9w
dXBNZW51Q2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6OmhpZGVQb3B1cCk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmhhbmRsZUtleUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6YWJhbmRvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cExpc3RCb3g6OmFjY2VwdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJv
eDo6c2VsZWN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpjbGVhclNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmhpZGVQb3B1cCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnU6Om1lbnVVbm1hcHBlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlF0RmFsbGJhY2tXZWJQb3B1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6aGlkZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vd3gvUG9wdXBNZW51V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBNZW51OjpPbk1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6cG9wdXBE
aWRIaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZWxlY3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGlvbkNoYW5nZWQpOgorCiAy
MDA5LTEyLTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNs
aWVudC5oCShyZXZpc2lvbiA1MjY3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgUG9wdXBNZW51Q2xp
ZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Qb3B1cE1lbnVDbGllbnQoKSB7fQogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVu
dHMgPSB0cnVlKSA9IDA7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNp
Z25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpID0gMDsKICAgICB2aXJ0dWFs
IFN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0g
MDsKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRp
bmdSaWdodCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBwb3B1cERpZEhpZGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlk
ZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1Nl
cGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDUyNjcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gUG9wdXBMaXN0Qm94IG1ldGhvZHMKIAogICAgIC8vIEhpZGVzIHRoZSBwb3B1cC4KLSAgICB2
b2lkIGhpZGVQb3B1cCgpOworICAgIHZvaWQgaGlkZVBvcHVwKGJvb2wgYWNjZXB0U3VnZ2VzdGlv
bnMpOwogCiAgICAgLy8gVXBkYXRlcyBvdXIgaW50ZXJuYWwgbGlzdCB0byBtYXRjaCB0aGUgY2xp
ZW50LgogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTM4MSw3ICszODEsNyBAQCB2
b2lkIFBvcHVwQ29udGFpbmVyOjpzaG93RXh0ZXJuYWwoY29uc3QgCiAKIHZvaWQgUG9wdXBDb250
YWluZXI6OmhpZGVQb3B1cCgpCiB7Ci0gICAgbGlzdEJveCgpLT5oaWRlUG9wdXAoKTsKKyAgICBs
aXN0Qm94KCktPmhpZGVQb3B1cCh0cnVlKTsKIH0KIAogdm9pZCBQb3B1cENvbnRhaW5lcjo6bGF5
b3V0KCkKQEAgLTYzMSw3ICs2MzEsNyBAQCBib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlS2V5RXZl
bnQoY29uc3QgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgVktFWV9SRVRVUk46CiAg
ICAgICAgIGlmIChtX3NlbGVjdGVkSW5kZXggPT0gLTEpICB7Ci0gICAgICAgICAgICBoaWRlUG9w
dXAoKTsKKyAgICAgICAgICAgIGhpZGVQb3B1cChmYWxzZSk7CiAgICAgICAgICAgICAvLyBEb24n
dCBlYXQgdGhlIGVudGVyIGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIFBvcHVwTGlzdEJv
eDo6YWJhbmRvbigpCiAKICAgICBtX3NlbGVjdGVkSW5kZXggPSBtX29yaWdpbmFsSW5kZXg7CiAK
LSAgICBoaWRlUG9wdXAoKTsKKyAgICBoaWRlUG9wdXAoZmFsc2UpOwogCiAgICAgaWYgKG1fYWNj
ZXB0ZWRJbmRleE9uQWJhbmRvbiA+PSAwKSB7CiAgICAgICAgIG1fcG9wdXBDbGllbnQtPnZhbHVl
Q2hhbmdlZChtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24pOwpAQCAtOTE3LDcgKzkxNyw3IEBAIHZv
aWQgUG9wdXBMaXN0Qm94OjphY2NlcHRJbmRleChpbnQgaW5kZXgKICAgICBpZiAoaW5kZXggPCAw
KSB7CiAgICAgICAgIGlmIChtX3BvcHVwQ2xpZW50KSB7CiAgICAgICAgICAgICAvLyBFbnRlciBw
cmVzc2VkIHdpdGggbm8gc2VsZWN0aW9uLCBqdXN0IGNsb3NlIHRoZSBwb3B1cC4KLSAgICAgICAg
ICAgIGhpZGVQb3B1cCgpOworICAgICAgICAgICAgaGlkZVBvcHVwKGZhbHNlKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgUG9wdXBM
aXN0Qm94OjphY2NlcHRJbmRleChpbnQgaW5kZXgKICAgICAgICAgUmVmUHRyPFBvcHVwTGlzdEJv
eD4ga2VlcEFsaXZlKHRoaXMpOwogCiAgICAgICAgIC8vIEhpZGUgb3Vyc2VsdmVzIGZpcnN0IHNp
bmNlIHZhbHVlQ2hhbmdlZCBtYXkgaGF2ZSBudW1lcm91cyBzaWRlLWVmZmVjdHMuCi0gICAgICAg
IGhpZGVQb3B1cCgpOworICAgICAgICBoaWRlUG9wdXAodHJ1ZSk7CiAKICAgICAgICAgLy8gVGVs
bCB0aGUgPHNlbGVjdD4gUG9wdXBNZW51Q2xpZW50IHdoYXQgaW5kZXggd2FzIHNlbGVjdGVkLgog
ICAgICAgICBtX3BvcHVwQ2xpZW50LT52YWx1ZUNoYW5nZWQoaW5kZXgpOwpAQCAtOTQ0LDYgKzk0
NCw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjpzZWxlY3RJbmRleChpbnQgaW5kZXgKICAgICAgICAg
aW52YWxpZGF0ZVJvdyhtX3NlbGVjdGVkSW5kZXgpOwogCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFs
U2VsZWN0aW9uKCk7CisgICAgICAgIG1fcG9wdXBDbGllbnQtPnNlbGVjdGlvbkNoYW5nZWQobV9z
ZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKQEAgLTEwMDUsNiArMTAwNiw3IEBAIHZvaWQgUG9w
dXBMaXN0Qm94OjpjbGVhclNlbGVjdGlvbigpCiAgICAgaWYgKG1fc2VsZWN0ZWRJbmRleCAhPSAt
MSkgewogICAgICAgICBpbnZhbGlkYXRlUm93KG1fc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIG1f
c2VsZWN0ZWRJbmRleCA9IC0xOworICAgICAgICBtX3BvcHVwQ2xpZW50LT5zZWxlY3Rpb25DaGFu
Z2VkKG1fc2VsZWN0ZWRJbmRleCk7CiAgICAgfQogfQogCkBAIC0xMDcyLDcgKzEwNzQsNyBAQCB2
b2lkIFBvcHVwTGlzdEJveDo6YWRqdXN0U2VsZWN0ZWRJbmRleChpCiAgICAgc2Nyb2xsVG9SZXZl
YWxTZWxlY3Rpb24oKTsKIH0KIAotdm9pZCBQb3B1cExpc3RCb3g6OmhpZGVQb3B1cCgpCit2b2lk
IFBvcHVwTGlzdEJveDo6aGlkZVBvcHVwKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpCiB7CiAgICAg
aWYgKHBhcmVudCgpKSB7CiAgICAgICAgIFBvcHVwQ29udGFpbmVyKiBjb250YWluZXIgPSBzdGF0
aWNfY2FzdDxQb3B1cENvbnRhaW5lcio+KHBhcmVudCgpKTsKQEAgLTEwODAsNyArMTA4Miw3IEBA
IHZvaWQgUG9wdXBMaXN0Qm94OjpoaWRlUG9wdXAoKQogICAgICAgICAgICAgY29udGFpbmVyLT5j
bGllbnQoKS0+cG9wdXBDbG9zZWQoY29udGFpbmVyKTsKICAgICB9CiAKLSAgICBtX3BvcHVwQ2xp
ZW50LT5wb3B1cERpZEhpZGUoKTsKKyAgICBtX3BvcHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoYWNj
ZXB0U3VnZ2VzdGlvbnMpOwogfQogCiB2b2lkIFBvcHVwTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1l
bnQoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCShyZXZpc2lvbiA1
MjY3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFBvcHVwTWVudTo6bWVudUl0ZW1BY3RpdmF0
ZWQoR3RrTWVuCiB2b2lkIFBvcHVwTWVudTo6bWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVw
TWVudSogdGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIHRoYXQtPmNs
aWVudCgpLT5wb3B1cERpZEhpZGUoKTsKKyAgICB0aGF0LT5jbGllbnQoKS0+cG9wdXBEaWRIaWRl
KHRydWUpOwogfQogCiB2b2lkIFBvcHVwTWVudTo6bWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVu
dSosIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIFBvcHVwTWVudSogdGhhdCkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDUyNjcxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNyArMTA4LDcgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgciwg
RgogICAgIGludCBudW1JdGVtcyA9IFttX3BvcHVwLmdldCgpIG51bWJlck9mSXRlbXNdOwogICAg
IGlmIChudW1JdGVtcyA8PSAwKSB7CiAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAg
IGNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5wb3B1cERp
ZEhpZGUodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKG51bUl0ZW1z
ID4gaW5kZXgpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0
IEludFJlY3QmIHIsIEYKIAogICAgIGlmIChjbGllbnQoKSkgewogICAgICAgICBpbnQgbmV3SW5k
ZXggPSBbbV9wb3B1cC5nZXQoKSBpbmRleE9mU2VsZWN0ZWRJdGVtXTsKLSAgICAgICAgY2xpZW50
KCktPnBvcHVwRGlkSGlkZSgpOworICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUp
OwogCiAgICAgICAgIC8vIEFkanVzdCBuZXdJbmRleCBmb3IgaGlkZGVuIGZpcnN0IGl0ZW0uCiAg
ICAgICAgIGlmICghY2xpZW50KCktPnNob3VsZFBvcE92ZXIoKSkKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vcXQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAJKHJldmlzaW9uIDUyNjcxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsNyArMTAzLDcgQEAgdm9pZCBRdEZhbGxiYWNrV2ViUG9wdXA6OmhpZGVQb3B1cCgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fcG9wdXBWaXNpYmxlID0gZmFsc2U7Ci0gICAgY2xpZW50
KCktPnBvcHVwRGlkSGlkZSgpOworICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUodHJ1ZSk7CiB9
CiAKIHZvaWQgUXRGYWxsYmFja1dlYlBvcHVwOjphY3RpdmVDaGFuZ2VkKGludCBpbmRleCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNTI2NzEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzQsNyArMjc0LDcgQEAgdm9pZCBQb3B1cE1lbnU6OmhpZGUoKQogICAgIDo6U2hvd1dpbmRv
dyhtX3BvcHVwLCBTV19ISURFKTsKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50
KCktPnBvcHVwRGlkSGlkZSgpOworICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUp
OwogCiAgICAgLy8gUG9zdCBhIFdNX05VTEwgbWVzc2FnZSB0byB3YWtlIHVwIHRoZSBtZXNzYWdl
IHB1bXAgaWYgbmVjZXNzYXJ5LgogICAgIDo6UG9zdE1lc3NhZ2UobV9wb3B1cCwgV01fTlVMTCwg
MCwgMCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkocmV2aXNpb24gNTI2
NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIFBvcHVwTWVudTo6T25NZW51SXRlbVNlbGVjdGVkKHd4
Q29tCiB7CiAgICAgaWYgKGNsaWVudCgpKSB7CiAgICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5n
ZWQoZXZlbnQuR2V0SWQoKSAtIHNfbWVudVN0YXJ0SWQpOwotICAgICAgICBjbGllbnQoKS0+cG9w
dXBEaWRIaWRlKCk7CisgICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUodHJ1ZSk7CiAgICAg
fQogICAgIC8vIFRPRE86IERvIHdlIG5lZWQgdG8gY2FsbCBEaXNjb25uZWN0IGhlcmU/IERvIHdl
IGhhdmUgYSByZWYgdG8gdGhlIG5hdGl2ZSB3aW5kb3cgc3RpbGw/CiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA1MjY3MSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3
IEBAIGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnMKICAgICByZXR1cm4g
c2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRleChzZWxlY3QtPnNlbGVjdGVkSW5kZXgoKSk7CiB9CiAK
LXZvaWQgUmVuZGVyTWVudUxpc3Q6OnBvcHVwRGlkSGlkZSgpCit2b2lkIFJlbmRlck1lbnVMaXN0
Ojpwb3B1cERpZEhpZGUoYm9vbCkKIHsKICAgICBtX3BvcHVwSXNWaXNpYmxlID0gZmFsc2U7CiB9
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDUyNjcxKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdSaWdodCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBp
bnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMp
OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdDsKQEAgLTkwLDYgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgdmFs
dWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgeyByZXR1cm4gIVBPUFVQX01FTlVfUFVM
TFNfRE9XTjsgfQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdElu
ZGV4LCBib29sIGZpcmVPbkNoYW5nZSA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rp
b25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7fQogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBm
b250U2VsZWN0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3co
KSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxi
YXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNTI2NzEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsNyAr
NzI4LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VsZWN0ZQogICAgIHJl
dHVybiAtMTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlk
SGlkZSgpCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKGJv
b2wpCiB7CiAgICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlz
aW9uIDUyNjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8v
IFBvcHVwTWVudUNsaWVudCBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1
bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOworICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7fQogICAgIHZpcnR1YWwgU3Ry
aW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJp
bmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAg
dmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKQEAg
LTEwOSw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdS
aWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERp
ZEhpZGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2Vz
dGlvbik7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjY3MSkKKysrIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAw
OS0xMi0zMCAgWmVsaWRyYWcgSG9ybnVuZyAgPHplbGlkcmFnQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdXRvY29tcGxldGUg
aW4gQ2hyb21pdW0gbm93IG9mZmVycyBzdWdnZXN0aW9ucyB3aXRoaW4gdGhlIGlucHV0IGVsZW1l
bnQgYXMgYSB1c2VyCisgICAgICAgIGEpIHR5cGVzIHRleHQgdGhhdCBwcm9kdWNlcyBzb21lIGF1
dG9jb21wbGV0ZSBzdWdnZXN0aW9ucywgYW5kCisgICAgICAgIGIpIHNjcm9sbHMgdGhyb3VnaCBz
dWdnZXN0ZWQgdmFsdWVzIGluIHRoZSBtZW51CisgICAgICAgIFRoZSBzdWdnZXN0ZWQgdmFsdWUg
aXMgcmVuZGVyZWQgYnV0IG5vdCBleHBvc2VkIHRocm91Z2ggSlMgdW50aSB0aGUKKyAgICAgICAg
dXNlciBtYWtlcyB0aGUgZmluYWwgc2VsZWN0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBz
aW5jZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IChhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMpCisg
ICAgICAgIGlzIGludGVudGlvbmFsbHkgaGlkZGVuIGZyb20gZXZlcnl0aGluZyBlbHNlIHRoYW4g
cmVuZGVyZXIuCisKKyAgICAgICAgKiBzcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRJ
bml0aWFsQXV0b2NvbXBsZXRlVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRv
Y29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpyZXNldExhc3RGaWVsZFZhbHVl
KToKKyAgICAgICAgKiBzcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Lmg6CisKKwogMjAw
OS0xMi0yOCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA1MjY3
MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDE2IEBAIHZvaWQgQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50Ojppbml0aWEKICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3Vn
Z2VzdGlvbnMsCiAgICAgaW50IGRlZmF1bHRTdWdnZXN0aW9uSW5kZXgpCiB7CisgICAgaWYgKCFt
X2xhc3RGaWVsZFZhbHVlcykKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMuc2V0KG5ldyBGaWVs
ZFZhbHVlc01hcCk7CiAgICAgQVNTRVJUKGRlZmF1bHRTdWdnZXN0aW9uSW5kZXggPCBzdGF0aWNf
Y2FzdDxpbnQ+KHN1Z2dlc3Rpb25zLnNpemUoKSkpOwogICAgIG1fdGV4dEZpZWxkID0gdGV4dEZp
ZWxkOworICAgIG1fdHlwZWRGaWVsZFZhbHVlID0gdGV4dEZpZWxkLT52YWx1ZSgpOwogICAgIG1f
c2VsZWN0ZWRJbmRleCA9IGRlZmF1bHRTdWdnZXN0aW9uSW5kZXg7CiAgICAgc2V0U3VnZ2VzdGlv
bnMoc3VnZ2VzdGlvbnMpOwogCisgICAgc2V0SW5pdGlhbEF1dG9jb21wbGV0ZVZhbHVlKCk7CisK
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIG1fd2ViVmlldy0+dGhl
bWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdlYmtpdENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7
CiAgICAgLy8gVXNlIGEgc21hbGxlciBmb250IHNpemUgdG8gbWF0Y2ggSUUvRmlyZWZveC4KQEAg
LTc5LDYgKzg0LDQwIEBAIHZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0aWEK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogfQogCisKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBN
ZW51Q2xpZW50OjpzZXRJbml0aWFsQXV0b2NvbXBsZXRlVmFsdWUoKQoreworICAgIGlmICghbV9z
dWdnZXN0aW9ucy5zaXplKCkgfHwgIW1fdGV4dEZpZWxkLT5uYW1lKCkubGVuZ3RoKCkgfHwgIW1f
dHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgaW50IG5ld0lu
ZGV4ID0gbV9zZWxlY3RlZEluZGV4ID49IDAgPyBtX3NlbGVjdGVkSW5kZXggOiAwOworICAgIFN0
cmluZyBzdWdnZXN0aW9uID0gbV9zdWdnZXN0aW9uc1tuZXdJbmRleF07CisgICAgYm9vbCBoYXNQ
cmV2aW91c1ZhbHVlID0gbV9sYXN0RmllbGRWYWx1ZXMtPmNvbnRhaW5zKG1fdGV4dEZpZWxkLT5u
YW1lKCkpOworICAgIFN0cmluZyBwcmV2VmFsdWU7CisgICAgaWYgKGhhc1ByZXZpb3VzVmFsdWUp
CisgICAgICAgIHByZXZWYWx1ZSA9IG1fbGFzdEZpZWxkVmFsdWVzLT5nZXQobV90ZXh0RmllbGQt
Pm5hbWUoKSk7CisgICAgaWYgKCFoYXNQcmV2aW91c1ZhbHVlIHx8IG1fdHlwZWRGaWVsZFZhbHVl
Lmxlbmd0aCgpID4gbV9sYXN0RmllbGRWYWx1ZXMtPmdldChtX3RleHRGaWVsZC0+bmFtZSgpKS5s
ZW5ndGgoKSkgeworICAgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgICAgU3RyaW5nIG5l
d1N1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uOworICAgICAgICAgIGlmIChzdWdnZXN0aW9uLnN0YXJ0
c1dpdGgobV90eXBlZEZpZWxkVmFsdWUpKQorICAgICAgICAgICAgICBtX3NlbGVjdGVkSW5kZXgg
PSBuZXdJbmRleDsKKyAgICAgICAgICBpZiAoc3VnZ2VzdGlvbi5zdGFydHNXaXRoKG1fdHlwZWRG
aWVsZFZhbHVlLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgbmV3U3VnZ2VzdGlvbiA9IG1fdHlw
ZWRGaWVsZFZhbHVlOworICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbi5sZW5ndGgoKSA+IG1f
dHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICBuZXdTdWdnZXN0
aW9uLmFwcGVuZChzdWdnZXN0aW9uLnN1YnN0cmluZyhtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxlbmd0aCgpIC0gbV90eXBlZEZp
ZWxkVmFsdWUubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzdGFy
dCA9IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBt
X3RleHRGaWVsZC0+c2V0U3VnZ2VzdGVkVmFsdWUobmV3U3VnZ2VzdGlvbik7CisgICAgICAgICAg
bV90ZXh0RmllbGQtPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBuZXdTdWdnZXN0aW9uLmxlbmd0
aCgpKTsKKyAgICB9CisgICAgaWYgKGhhc1ByZXZpb3VzVmFsdWUpCisgICAgICAgIG1fbGFzdEZp
ZWxkVmFsdWVzLT5zZXQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPmFkZChtX3RleHRGaWVsZC0+bmFt
ZSgpLCBtX3R5cGVkRmllbGRWYWx1ZSk7Cit9CisKKwogdm9pZCBBdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50
cykKIHsKICAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUobV9zdWdnZXN0aW9uc1tsaXN0SW5kZXhd
KTsKQEAgLTg5LDYgKzEyOCwyMSBAQCB2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6
dmFsdWVDCiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3RleHRGaWVs
ZC5nZXQoKSkpOwogfQogCit2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2VsZWN0
aW9uQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKK3sKKyAgICBp
ZiAobGlzdEluZGV4ICE9IC0xKSB7CisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRTdWdnZXN0ZWRW
YWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0pOworICAgICAgICBtX3RleHRGaWVsZC0+c2V0
U2VsZWN0aW9uUmFuZ2UobV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0ubGVuZ3Ro
KCkpOworICAgIH0gZWxzZSB7CisgICAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUobV90eXBlZEZp
ZWxkVmFsdWUpOworICAgICAgaWYgKG1fbGFzdEZpZWxkVmFsdWVzLT5jb250YWlucyhtX3RleHRG
aWVsZC0+bmFtZSgpKSkKKyAgICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+c2V0KG1fdGV4dEZp
ZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZhbHVlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgICBt
X2xhc3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZh
bHVlKTsKKyAgICB9Cit9CisKIFN0cmluZyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Oml0
ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdWdnZXN0
aW9uc1tsaXN0SW5kZXhdOwpAQCAtMTE4LDE0ICsxNzIsMzEgQEAgaW50IEF1dG9jb21wbGV0ZVBv
cHVwTWVudUNsaWVudDo6Y2xpZW50UAogICAgIHJldHVybiBzdHlsZSA/IG1fd2ViVmlldy0+dGhl
bWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChzdHlsZSkgOiAwOwogfQogCi12b2lkIEF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkKK3ZvaWQgQXV0b2NvbXBs
ZXRlUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9ucykK
IHsKKyAgICBpZiAoYWNjZXB0U3VnZ2VzdGlvbnMpIHsKKyAgICAgICAgU3RyaW5nIHN1Z2dlc3Rl
ZFZhbHVlID0gbV90ZXh0RmllbGQtPnN1Z2dlc3RlZFZhbHVlKCk7CisgICAgICAgIGlmICghc3Vn
Z2VzdGVkVmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUo
c3VnZ2VzdGVkVmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBtX3RleHRGaWVsZC0+c2V0VmFs
dWUobV90eXBlZEZpZWxkVmFsdWUpOworCisgICAgcmVzZXRMYXN0RmllbGRWYWx1ZSgpOwogICAg
IG1fd2ViVmlldy0+YXV0b0NvbXBsZXRlUG9wdXBEaWRIaWRlKCk7CiB9CiAKIHZvaWQgQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4
KQogewogICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0p
OworICAgIHJlc2V0TGFzdEZpZWxkVmFsdWUoKTsKK30KKwordm9pZCBBdXRvY29tcGxldGVQb3B1
cE1lbnVDbGllbnQ6OnJlc2V0TGFzdEZpZWxkVmFsdWUoKQoreworICAgIGlmIChtX2xhc3RGaWVs
ZFZhbHVlcy0+Y29udGFpbnMobV90ZXh0RmllbGQtPm5hbWUoKSkpCisgICAgICAgIG1fbGFzdEZp
ZWxkVmFsdWVzLT5zZXQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90ZXh0RmllbGQtPnZhbHVlKCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPmFkZChtX3RleHRGaWVsZC0+
bmFtZSgpLCBtX3RleHRGaWVsZC0+dmFsdWUoKSk7CiB9CiAKIEZvbnRTZWxlY3RvciogQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25zdApJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCShyZXZp
c2lvbiA1MjY3MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9v
bCBmaXJlRXZlbnRzID0gdHJ1ZSk7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRl
eHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmlu
ZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6
OlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBsaXN0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGlvbnMuc2l6ZSgpOyB9CiAg
ICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRJ
bmRleDsgfQotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbik7CiAgICAgdmlydHVhbCBib29s
IGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtODUsMTIgKzg2LDE3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpSZW5kZXJTdHlsZSogdGV4dEZp
ZWxkU3R5bGUoKSBjb25zdDsKKyAgICB2b2lkIHNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSgp
OworICAgIHZvaWQgcmVzZXRMYXN0RmllbGRWYWx1ZSgpOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ+IG1fdGV4dEZpZWxkOwogICAgIFZlY3RvcjxXZWJDb3JlOjpTdHJp
bmc+IG1fc3VnZ2VzdGlvbnM7CiAgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKICAgICBXZWJWaWV3
SW1wbCogbV93ZWJWaWV3OworICAgIFdlYkNvcmU6OlN0cmluZyBtX3R5cGVkRmllbGRWYWx1ZTsK
ICAgICBPd25QdHI8V2ViQ29yZTo6UG9wdXBNZW51U3R5bGU+IG1fc3R5bGU7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiBGaWVsZFZhbHVlc01h
cDsKKyAgICBPd25QdHI8RmllbGRWYWx1ZXNNYXA+IG1fbGFzdEZpZWxkVmFsdWVzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47224</attachid>
            <date>2010-01-22 13:44:37 -0800</date>
            <delta_ts>2010-01-22 13:54:09 -0800</delta_ts>
            <desc>Backout patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>153290</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY4IEBACisyMDEwLTAxLTIyICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQsIGJhY2tvdXQuCisKKyAgICAgICAgQmFj
ayBvdXQgcjUyNjczLCB3aGljaCBjYXVzZWQgc2V2ZXJhbCByZWdyZXNzaW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTMzCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5l
cjo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6aGFuZGxlS2V5
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjphYmFuZG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6YWNjZXB0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBMaXN0Qm94OjpzZWxlY3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExp
c3RCb3g6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6
aGlkZVBvcHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXJRdDo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXJRdDo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
clF0Ojpmb3JjZUxvYWRFdmVyeXRoaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUG9wdXBN
ZW51R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6bWVudVVubWFwcGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JB
MzJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmYWlsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpCTVBJbWFnZURlY29kZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
RGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6ZGVjb2RlSGVscGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vzc0ZpbGVIZWFkZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6cmVhZFVpbnQzMik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpCTVBJbWFnZVJlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6
OkJNUEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJN
UEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFn
ZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VS
ZWFkZXI6OnByb2Nlc3NCaXRtYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6cHJvY2Vzc0NvbG9yVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6
OnByb2Nlc3NSTEVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9j
ZXNzTm9uUkxFRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZFVp
bnQzMik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwYXN0RW5kT2ZJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCTVBJbWFnZVJlYWRlcjo6cmVhZEN1cnJlbnRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZVJlYWRlcjo6Z2V0Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
UmVhZGVyOjpnZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6c2V0
SSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNl
dEZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjopOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpkb19s
encpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnJlYWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGSW1hZ2VS
ZWFkZXI6On5HSUZJbWFnZVJlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURl
Y29kZXI6OklDT0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29k
ZXI6On5JQ09JbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVy
OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZh
aWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnNldFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6Y29tcGFyZUVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1h
Z2VEZWNvZGVyOjpzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VE
ZWNvZGVyOjpkZWNvZGVEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNv
ZGVyOjpkZWNvZGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6
cHJvY2Vzc0RpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnBy
b2Nlc3NEaXJlY3RvcnlFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rl
cjo6cmVhZERpcmVjdG9yeUVudHJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29k
ZXI6OnJlYWRVaW50MTYpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpyZWFk
VWludDMyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpQ
RUdJbWFnZVJlYWRlcjo6c2tpcEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJl
YWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVjb2RpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RpbmdXYXJuaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OmhlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpy
b3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6cG5nQ29tcGxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OlBOR0ltYWdlUmVhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlUmVhZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJl
YWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpjcmVhdGVJ
bnRlcmxhY2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpQTkdJ
bWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1h
Z2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6
ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpp
c0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJC
dWZmZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXREZWNvZGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6OnNldFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1F0QWJzdHJhY3RXZWJQb3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdEFic3RyYWN0
V2ViUG9wdXA6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUXRBYnN0cmFj
dFdlYlBvcHVwLmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3d4
L1BvcHVwTWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6T25NZW51SXRl
bVNlbGVjdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oOgorCiAyMDEwLTAxLTIyICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiA1MzcxMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgY2xhc3MgUG9wdXBNZW51Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Q
b3B1cE1lbnVDbGllbnQoKSB7fQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWdu
ZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMg
PSB0cnVlKSA9IDA7CisKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzZWxlY3RlZElu
ZGV4KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2Nl
cHRTdWdnZXN0aW9ucykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gUG9wdXBMaXN0Qm94IG1ldGhvZHMKIAogICAg
IC8vIEhpZGVzIHRoZSBwb3B1cC4KLSAgICB2b2lkIGhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dl
c3Rpb25zKTsKKyAgICB2b2lkIGhpZGVQb3B1cCgpOwogCiAgICAgLy8gVXBkYXRlcyBvdXIgaW50
ZXJuYWwgbGlzdCB0byBtYXRjaCB0aGUgY2xpZW50LgogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnQoKTsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIFBvcHVwQ29udGFpbmVyOjpzaG93RXh0ZXJu
YWwoY29uc3QgCiAKIHZvaWQgUG9wdXBDb250YWluZXI6OmhpZGVQb3B1cCgpCiB7Ci0gICAgbGlz
dEJveCgpLT5oaWRlUG9wdXAodHJ1ZSk7CisgICAgbGlzdEJveCgpLT5oaWRlUG9wdXAoKTsKIH0K
IAogdm9pZCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0KCkKQEAgLTYzMSw3ICs2MzEsNyBAQCBib29s
IFBvcHVwTGlzdEJveDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgVktFWV9SRVRVUk46CiAgICAgICAgIGlmIChtX3NlbGVjdGVkSW5kZXggPT0g
LTEpICB7Ci0gICAgICAgICAgICBoaWRlUG9wdXAoZmFsc2UpOworICAgICAgICAgICAgaGlkZVBv
cHVwKCk7CiAgICAgICAgICAgICAvLyBEb24ndCBlYXQgdGhlIGVudGVyIGlmIG5vdGhpbmcgaXMg
c2VsZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTg4NCw3
ICs4ODQsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6YWJhbmRvbigpCiAKICAgICBtX3NlbGVjdGVk
SW5kZXggPSBtX29yaWdpbmFsSW5kZXg7CiAKLSAgICBoaWRlUG9wdXAoZmFsc2UpOworICAgIGhp
ZGVQb3B1cCgpOwogCiAgICAgaWYgKG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRvbiA+PSAwKSB7CiAg
ICAgICAgIG1fcG9wdXBDbGllbnQtPnZhbHVlQ2hhbmdlZChtX2FjY2VwdGVkSW5kZXhPbkFiYW5k
b24pOwpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjphY2NlcHRJbmRleChp
bnQgaW5kZXgKICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIGlmIChtX3BvcHVwQ2xpZW50
KSB7CiAgICAgICAgICAgICAvLyBFbnRlciBwcmVzc2VkIHdpdGggbm8gc2VsZWN0aW9uLCBqdXN0
IGNsb3NlIHRoZSBwb3B1cC4KLSAgICAgICAgICAgIGhpZGVQb3B1cChmYWxzZSk7CisgICAgICAg
ICAgICBoaWRlUG9wdXAoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
OTMwLDcgKzkzMCw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjphY2NlcHRJbmRleChpbnQgaW5kZXgK
ICAgICAgICAgUmVmUHRyPFBvcHVwTGlzdEJveD4ga2VlcEFsaXZlKHRoaXMpOwogCiAgICAgICAg
IC8vIEhpZGUgb3Vyc2VsdmVzIGZpcnN0IHNpbmNlIHZhbHVlQ2hhbmdlZCBtYXkgaGF2ZSBudW1l
cm91cyBzaWRlLWVmZmVjdHMuCi0gICAgICAgIGhpZGVQb3B1cCh0cnVlKTsKKyAgICAgICAgaGlk
ZVBvcHVwKCk7CiAKICAgICAgICAgLy8gVGVsbCB0aGUgPHNlbGVjdD4gUG9wdXBNZW51Q2xpZW50
IHdoYXQgaW5kZXggd2FzIHNlbGVjdGVkLgogICAgICAgICBtX3BvcHVwQ2xpZW50LT52YWx1ZUNo
YW5nZWQoaW5kZXgpOwpAQCAtOTQ4LDcgKzk0OCw2IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjpzZWxl
Y3RJbmRleChpbnQgaW5kZXgKICAgICAgICAgaW52YWxpZGF0ZVJvdyhtX3NlbGVjdGVkSW5kZXgp
OwogCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7Ci0gICAgICAgIG1fcG9wdXBD
bGllbnQtPnNlbGVjdGlvbkNoYW5nZWQobV9zZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKQEAg
LTEwMTAsNyArMTAwOSw2IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjpjbGVhclNlbGVjdGlvbigpCiAg
ICAgaWYgKG1fc2VsZWN0ZWRJbmRleCAhPSAtMSkgewogICAgICAgICBpbnZhbGlkYXRlUm93KG1f
c2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIG1fc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgICAgICBt
X3BvcHVwQ2xpZW50LT5zZWxlY3Rpb25DaGFuZ2VkKG1fc2VsZWN0ZWRJbmRleCk7CiAgICAgfQog
fQogCkBAIC0xMDc4LDcgKzEwNzYsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6YWRqdXN0U2VsZWN0
ZWRJbmRleChpCiAgICAgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKIH0KIAotdm9pZCBQb3B1
cExpc3RCb3g6OmhpZGVQb3B1cChib29sIGFjY2VwdFN1Z2dlc3Rpb25zKQordm9pZCBQb3B1cExp
c3RCb3g6OmhpZGVQb3B1cCgpCiB7CiAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgIFBvcHVw
Q29udGFpbmVyKiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxQb3B1cENvbnRhaW5lcio+KHBhcmVu
dCgpKTsKQEAgLTEwODYsNyArMTA4NCw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94OjpoaWRlUG9wdXAo
Ym9vbCBhY2NlcHQKICAgICAgICAgICAgIGNvbnRhaW5lci0+Y2xpZW50KCktPnBvcHVwQ2xvc2Vk
KGNvbnRhaW5lcik7CiAgICAgfQogCi0gICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRIaWRlKGFj
Y2VwdFN1Z2dlc3Rpb25zKTsKKyAgICBtX3BvcHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoKTsKIH0K
IAogdm9pZCBQb3B1cExpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNyArMTI4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1l
QQogCiAgICAgLy8gWmVyby1oZWlnaHQgaW1hZ2VzIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3Igc29t
ZSBwb3J0cy4gIElmIHdlIGhhdmUgYW4KICAgICAvLyBlbXB0eSBpbWFnZSBkaW1lbnNpb24sIGp1
c3QgYmFpbC4KLSAgICBpZiAoIWlzU2l6ZUF2YWlsYWJsZSgpIHx8IHNpemUoKS5pc0VtcHR5KCkp
CisgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
UmV0dXJuIHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Igc29tZSBw
b3J0cywgdGhlIGRhdGEKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VE
ZWNvZGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VEZWNvZGVyUXQuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIEltYWdlRGVjb2RlclF0Ojp+SW1hZ2VEZWNvZGVyUXQoKQogCiB2b2lkIEltYWdlRGVj
b2RlclF0OjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
CiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gTm8gcHJvZ3Jlc3NpdmUgbG9hZGluZyBwb3NzaWJsZQpAQCAtMTAyLDcgKzEw
Miw3IEBAIHNpemVfdCBJbWFnZURlY29kZXJRdDo6ZnJhbWVDb3VudCgpCiAgICAgICAgICAgICAv
LyBGaXh1cCBmb3IgUXQgZGVjb2RlcnMuLi4gaW1hZ2VDb3VudCgpIGlzIHdyb25nCiAgICAgICAg
ICAgICAvLyBhbmQganVtcFRvTmV4dEltYWdlIGRvZXMgbm90IHdvcmsgZWl0aGVyLi4uIHNvCiAg
ICAgICAgICAgICAvLyB3ZSB3aWxsIGhhdmUgdG8gcGFyc2UgZXZlcnl0aGluZy4uLgotICAgICAg
ICAgICAgaWYgKGltYWdlQ291bnQgPT0gMCkKKyAgICAgICAgICAgIGlmICghaW1hZ2VDb3VudCkK
ICAgICAgICAgICAgICAgICBmb3JjZUxvYWRFdmVyeXRoaW5nKCk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShpbWFnZUNvdW50KTsK
QEAgLTEzMiwxOSArMTMyLDE5IEBAIFJHQkEzMkJ1ZmZlciogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1l
QnVmZmUKICAgICAvLyBJbiBjYXNlIHRoZSBJbWFnZURlY29kZXJRdCBnb3QgcmVjcmVhdGVkIHdl
IGRvbid0IGtub3cKICAgICAvLyB5ZXQgaG93IG1hbnkgaW1hZ2VzIHdlIGFyZSBnb2luZyB0byBo
YXZlIGFuZCBuZWVkIHRvCiAgICAgLy8gZmluZCB0aGF0IG91dCBub3cuCi0gICAgaW50IGNvdW50
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKLSAgICBpZiAoIW1fZmFpbGVkICYmIGNvdW50
ID09IDApIHsKKyAgICBzaXplX3QgY291bnQgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwor
ICAgIGlmICghZmFpbGVkKCkgJiYgIWNvdW50KSB7CiAgICAgICAgIGludGVybmFsRGVjb2RlU2l6
ZSgpOwogICAgICAgICBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICB9CiAKLSAgICBpZiAoaW5k
ZXggPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCkpCisgICAgaWYgKGluZGV4ID49IGNvdW50
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAgIGludGVy
bmFsUmVhZEltYWdlKGluZGV4KTsKLSAgICByZXR1cm4gJmZyYW1lOworICAgIHJldHVybiBidWZm
ZXI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QgLyppbmRleCovKQpAQCAtMjE1LDE0ICsyMTUsMTUgQEAgdm9pZCBJbWFnZURlY29kZXJRdDo6
Zm9yY2VMb2FkRXZlcnl0aGluZwogICAgIGRvIHsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
LnJlc2l6ZSgrK2ltYWdlQ291bnQpOwogICAgICAgICBpbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFn
ZShpbWFnZUNvdW50IC0gMSk7Ci0gICAgfSB3aGlsZSghbV9mYWlsZWQpOworICAgIH0gd2hpbGUg
KCFmYWlsZWQoKSk7CiAKICAgICAvLyBJZiB3ZSBmYWlsZWQgZGVjb2RpbmcgdGhlIGZpcnN0IGlt
YWdlIHdlIGFjdHVhbGx5CiAgICAgLy8gaGF2ZSBubyBpbWFnZXMgYW5kIG5lZWQgdG8ga2VlcCBt
X2ZhaWxlZCBzZXQgdG8KICAgICAvLyB0cnVlIG90aGVyd2lzZSB3ZSB3YW50IHRvIHJlc2V0IGl0
IGFuZCBmb3JnZXQgYWJvdXQKICAgICAvLyB0aGUgbGFzdCBhdHRlbXB0IHRvIGRlY29kZSBhIGlt
YWdlLgogICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoaW1hZ2VDb3VudCAtIDEpOwotICAg
IG1fZmFpbGVkID0gaW1hZ2VDb3VudCA9PSAxOworICAgIGlmIChpbWFnZUNvdW50ID09IDEpCisg
ICAgICBzZXRGYWlsZWQoKTsKIH0KIAogdm9pZCBJbWFnZURlY29kZXJRdDo6ZmFpbFJlYWQoKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCShyZXZpc2lvbiA1MzcxMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFBvcHVwTWVudTo6bWVudUl0ZW1BY3RpdmF0ZWQoR3Rr
TWVuCiB2b2lkIFBvcHVwTWVudTo6bWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVudSog
dGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIHRoYXQtPmNsaWVudCgp
LT5wb3B1cERpZEhpZGUodHJ1ZSk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlkSGlkZSgp
OwogfQogCiB2b2lkIFBvcHVwTWVudTo6bWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdp
bnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIFBvcHVwTWVudSogdGhhdCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJ
KHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNiArNjgsMTEgQEAgSW1hZ2VEZWNv
ZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdAogICAgICAgICByZXR1cm4gbmV3IEdJRklt
YWdlRGVjb2RlcigpOwogCiAgICAgLy8gVGVzdCBmb3IgUE5HLgotICAgIGlmICh1Q29udGVudHNb
MF09PTB4ODkgJiYKLSAgICAgICAgdUNvbnRlbnRzWzFdPT0weDUwICYmCi0gICAgICAgIHVDb250
ZW50c1syXT09MHg0RSAmJgotICAgICAgICB1Q29udGVudHNbM109PTB4NDcpCisgICAgaWYgKCFt
ZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCkpCiAgICAgICAgIHJldHVybiBu
ZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAvLyBKUEVHCi0gICAgaWYgKHVDb250ZW50c1sw
XT09MHhGRiAmJgotICAgICAgICB1Q29udGVudHNbMV09PTB4RDggJiYKLSAgICAgICAgdUNvbnRl
bnRzWzJdPT0weEZGKQorICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwg
MykpCiAgICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOwogCiAgICAgLy8gQk1Q
CkBAIC04Niw4ICs4MSw3IEBAIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29u
c3QKIAogICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBi
eSBhIDItYnl0ZSAxLgogICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBi
eSAyLWJ5dGUgMi4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAi
LCA0KSB8fAotICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQp
KQorICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgwMCIsIDQpIHx8ICFt
ZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCkpCiAgICAgICAgIHJldHVybiBu
ZXcgSUNPSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93IHdo
YXQgdGhlIGhlY2sgdGhpcyBpcy4KQEAgLTEwNCw2ICs5OCwxOSBAQCBSR0JBMzJCdWZmZXI6OlJH
QkEzMkJ1ZmZlcigpCiB7CiB9IAogCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0
b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVy
KQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Cisg
ICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7
CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CisgICAgc2V0RGlzcG9zYWxNZXRo
b2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lk
IFJHQkEzMkJ1ZmZlcjo6Y2xlYXIoKQogewogICAgIG1fYnl0ZXMuY2xlYXIoKTsKQEAgLTE1OCwx
OSArMTY1LDYgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyhGcmFtZVN0YXR1cwogICAg
IG1fc3RhdHVzID0gc3RhdHVzOwogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3Bl
cmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90
aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOwotICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMo
KSk7Ci0gICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7Ci0gICAgc2V0RGlzcG9zYWxN
ZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBp
bnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2l6ZS53aWR0
aCgpOwpAQCAtMTk1LDEzICsxODksMTEgQEAgaW5saW5lIHZvaWQgZmlsbFNjYWxlZFZhbHVlcyhW
ZWN0b3I8aW50PgogewogICAgIGRvdWJsZSBpbmZsYXRlUmF0ZSA9IDEuIC8gc2NhbGVSYXRlOwog
ICAgIHNjYWxlZFZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgg
KiBzY2FsZVJhdGUgKyAwLjUpKTsKLSAgICBmb3IgKGludCBzY2FsZWRJbmRleCA9IDA7Oykgewor
ICAgIGZvciAoaW50IHNjYWxlZEluZGV4ID0gMDsgOyArK3NjYWxlZEluZGV4KSB7CiAgICAgICAg
IGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oc2NhbGVkSW5kZXggKiBpbmZsYXRlUmF0ZSAr
IDAuNSk7Ci0gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgc2NhbGVk
VmFsdWVzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgICAgICArK3NjYWxlZEluZGV4OwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBzY2FsZWRWYWx1ZXMuYXBwZW5kKGluZGV4KTsKICAgICB9CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gNTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNiArNjUsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2VuZGlmCiAKICAgICAgICAgUkdCQTMyQnVmZmVyKCk7CisgICAgICAgIFJHQkEzMkJ1
ZmZlcihjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KIAot
ICAgICAgICAvLyBGb3IgYmFja2VuZHMgd2hpY2ggcmVmY291bnQgdGhlaXIgZGF0YSwgdGhpcyBj
b25zdHJ1Y3RvciBkb2Vzbid0IG5lZWQKLSAgICAgICAgLy8gdG8gY3JlYXRlIGEgbmV3IGNvcHkg
b2YgdGhlIGltYWdlIGRhdGEsIG9ubHkgaW5jcmVhc2UgdGhlIHJlZiBjb3VudC4KLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gVGhpcyBleGlzdHMgYmVjYXVzZSBJbWFnZURlY29kZXIga2VlcHMgYSBW
ZWN0b3I8UkdCQTMyQnVmZmVyPiwgYW5kCi0gICAgICAgIC8vIFZlY3RvciByZXF1aXJlcyB0aGlz
IGNvbnN0cnVjdG9yLgotICAgICAgICBSR0JBMzJCdWZmZXIoY29uc3QgUkdCQTMyQnVmZmVyJiBv
dGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgb3BlcmF0b3I9KG90aGVyKTsKLSAgICAgICAg
fQorICAgICAgICAvLyBGb3IgYmFja2VuZHMgd2hpY2ggcmVmY291bnQgdGhlaXIgZGF0YSwgdGhp
cyBvcGVyYXRvciBkb2Vzbid0IG5lZWQgdG8KKyAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGNvcHkg
b2YgdGhlIGltYWdlIGRhdGEsIG9ubHkgaW5jcmVhc2UgdGhlIHJlZiBjb3VudC4KKyAgICAgICAg
UkdCQTMyQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcik7CiAKICAg
ICAgICAgLy8gRGVsZXRlcyB0aGUgcGl4ZWwgZGF0YSBlbnRpcmVseTsgdXNlZCBieSBJbWFnZURl
Y29kZXIgdG8gc2F2ZSBtZW1vcnkKICAgICAgICAgLy8gd2hlbiB3ZSBubyBsb25nZXIgbmVlZCB0
byBkaXNwbGF5IGEgZnJhbWUgYW5kIG9ubHkgbmVlZCBpdHMgbWV0YWRhdGEuCkBAIC0xMzYsOCAr
MTMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAg
ICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKTsK
LQogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0
OwogCkBAIC0xOTIsMTggKzE4NSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gVGhl
IEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMg
aW1hZ2UgZm9ybWF0IGRlY29kZXJzCiAgICAgLy8gKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElDTykg
dG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVjb2RlIGludG8gUkdCQTMyIGZvcm1hdAog
ICAgIC8vIGFuZCB0aGUgYmFzZSBjbGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUgY2FjaGUu
CisgICAgLy8KKyAgICAvLyBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxv
d3MgaW1hZ2UgZGVjb2RlcnMgdG8gd3JpdGUgZGlyZWN0bHkgdG8KKyAgICAvLyBzY2FsZWQgb3V0
cHV0IGJ1ZmZlcnMgYnkgZG93biBzYW1wbGluZy4gQ2FsbCBzZXRNYXhOdW1QaXhlbHMoKSB0byBz
cGVjaWZ5IHRoZQorICAgIC8vIGJpZ2dlc3Qgc2l6ZSB0aGF0IGRlY29kZWQgaW1hZ2VzIGNhbiBo
YXZlLiBJbWFnZSBkZWNvZGVycyB3aWxsIGRlZmxhdGUgdGhvc2UKKyAgICAvLyBpbWFnZXMgdGhh
dCBhcmUgYmlnZ2VyIHRoYW4gbV9tYXhOdW1QaXhlbHMuIChOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBp
bWFnZSBkZWNvZGVycyB5ZXQpCiAgICAgY2xhc3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpIGFsbG93cyBpbWFnZSBkZWNvZGVycyB0byB3cml0ZSBkaXJlY3RseSB0bwot
ICAgICAgICAvLyBzY2FsZWQgb3V0cHV0IGJ1ZmZlcnMgYnkgZG93biBzYW1wbGluZy4gQ2FsbCBz
ZXRNYXhOdW1QaXhlbHMoKSB0byBzcGVjaWZ5IHRoZQotICAgICAgICAvLyBiaWdnZXN0IHNpemUg
dGhhdCBkZWNvZGVkIGltYWdlcyBjYW4gaGF2ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkZWZsYXRl
IHRob3NlCi0gICAgICAgIC8vIGltYWdlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiBtX21heE51bVBp
eGVscy4gKE5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltYWdlIGRlY29kZXJzIHlldCkKICAgICAgICAg
SW1hZ2VEZWNvZGVyKCkKICAgICAgICAgICAgIDogbV9zY2FsZWQoZmFsc2UpCi0gICAgICAgICAg
ICAsIG1fZmFpbGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1faXNBbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCiAgICAgICAgICAgICAs
IG1fbWF4TnVtUGl4ZWxzKC0xKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZh
bHNlKQorICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTIxNywxMCArMjExLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
VGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1YWxseSBhc3NvY2lhdGVkIHdpdGggYW4gdW5k
ZWNvZGVkIGltYWdlIG9mIHRoaXMgdHlwZS4KICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdCA9IDA7CiAKLSAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29k
ZXIgcGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVu
LgogICAgICAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Fs
bERhdGFSZWNlaXZlZDsgfQorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtX2ZhaWxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBtX2Rh
dGEgPSBkYXRhOwogICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNl
aXZlZDsKICAgICAgICAgfQpAQCAtMjM3LDggKzIzMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCiAgICAgICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgLy8gUmVxdWVz
dGluZyB0aGUgc2l6ZSBvZiBhbiBpbnZhbGlkIGJpdG1hcCBpcyBtZWFuaW5nbGVzcy4KLSAgICAg
ICAgICAgIEFTU0VSVCghbV9mYWlsZWQpOwogICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKICAg
ICAgICAgfQogCkBAIC0yNTgsMTYgKzI1MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICByZXR1cm4gc2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBpbWFnZSBkZWNvZGVycyB0byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28g
Y2hlY2sKKyAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVycyB0byBzZXQgdGhl
aXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28gY2hlY2tzCiAgICAgICAgIC8vIHRoZSBzaXplIGZv
ciB2YWxpZGl0eS4gSXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3YXMgc2V0LCBvciBm
YWxzZQogICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvci4gT24gZXJyb3IsIHRoZSBtX2Zh
aWxlZCBmbGFnIHdpbGwgYmUgc2V0IGFuZCB0aGUKICAgICAgICAgLy8gY2FsbGVyIHNob3VsZCBp
bW1lZGlhdGVseSBzdG9wIGRlY29kaW5nLgogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgICAgIG1fZmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwogICAgICAgICAgICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMjg5LDggKzI4MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5aW5nIGltYWdlIGZvcm1hdCBl
dmVuIHN1cHBvcnRzIGFscGhhIHRyYW5zcGFyZW5jeS4KICAgICAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICAgICAgLy8gU2V0cyB0
aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLiAgRm9yIGNhbGxlciBjb252ZW5pZW5jZSAoc2luY2Ug
c28KKyAgICAgICAgLy8gbWFueSBjYWxsZXJzIHdhbnQgdG8gcmV0dXJuIGZhbHNlIGFmdGVyIGNh
bGxpbmcgdGhpcyksIHJldHVybnMgZmFsc2UKKyAgICAgICAgLy8gdG8gZW5hYmxlIGVhc3kgdGFp
bGNhbGxpbmcuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIHRvIGFsc28KKyAgICAgICAg
Ly8gY2xlYW4gdXAgYW55IGxvY2FsIGRhdGEuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRGYWls
ZWQoKSB7CisgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmFpbGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7
IH0KIAogICAgICAgICAvLyBXaXBlIG91dCBmcmFtZXMgaW4gdGhlIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBiZWZvcmUgfGNsZWFyQmVmb3JlRnJhbWV8LAogICAgICAgICAvLyBhc3N1bWluZyB0aGlzIGNh
biBiZSBkb25lIHdpdGhvdXQgYnJlYWtpbmcgZGVjb2RpbmcuICBEaWZmZXJlbnQgZGVjb2RlcnMK
QEAgLTMxMywxMSArMzEzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHNj
YWxlZFkoaW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKIAogICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisgICAgICAgIFZlY3Rv
cjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgYm9vbCBtX3NjYWxl
ZDsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1bW5zOwogICAgICAgICBWZWN0b3I8
aW50PiBtX3NjYWxlZFJvd3M7Ci0gICAgICAgIGJvb2wgbV9zY2FsZWQ7Ci0gICAgICAgIFZlY3Rv
cjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICAgICAgYm9vbCBtX2ZhaWxl
ZDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFNvbWUgY29kZSBwYXRocyBjb21wdXRlIHRo
ZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBoZWlnaHQgKiA0IgpAQCAtMzMzLDggKzMz
Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAg
ICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGU7Ci0gICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNl
aXZlZDsKICAgICAgICAgaW50IG1fbWF4TnVtUGl4ZWxzOworICAgICAgICBib29sIG1faXNBbGxE
YXRhUmVjZWl2ZWQ7CisgICAgICAgIGJvb2wgbV9mYWlsZWQ7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGlj
IGNvbnN0IHNpemVfdCBzaXplT2ZGaWxlSGVhZGVyID0gMTQ7CiAKIEJNUEltYWdlRGVjb2Rlcjo6
Qk1QSW1hZ2VEZWNvZGVyKCkKLSAgICA6IEltYWdlRGVjb2RlcigpCi0gICAgLCBtX2FsbERhdGFS
ZWNlaXZlZChmYWxzZSkKLSAgICAsIG1fZGVjb2RlZE9mZnNldCgwKQorICAgIDogbV9kZWNvZGVk
T2Zmc2V0KDApCiB7CiB9CiAKQEAgLTUzLDE1ICs1MSwxNCBAQCB2b2lkIEJNUEltYWdlRGVjb2Rl
cjo6c2V0RGF0YShTaGFyZWRCdWZmCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVjb2Rl
cjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIG1fYWxsRGF0YVJlY2VpdmVk
ID0gYWxsRGF0YVJlY2VpdmVkOwogICAgIGlmIChtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIt
PnNldERhdGEoZGF0YSk7CiB9CiAKIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFp
bGVkKCkpCi0gICAgICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZCh0cnVlKTsKKyAgICBp
ZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCisgICAgICAgIGRlY29kZSh0cnVl
KTsKIAogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQpAQCAt
NzUsMzIgKzcyLDQwIEBAIFJHQkEzMkJ1ZmZlciogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYK
ICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIAogICAgIFJHQkEzMkJ1ZmZl
ciogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOwotICAgIGlmIChidWZmZXIt
PnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiAhZmFpbGVkKCkpCi0g
ICAgICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChmYWxzZSk7CisgICAgaWYgKGJ1ZmZl
ci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICBkZWNv
ZGUoZmFsc2UpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXZvaWQgQk1QSW1hZ2VEZWNvZGVy
OjpkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5kZWQoYm9vbCBvbmx5U2l6ZSkKK2Jvb2wgQk1QSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQoKQoreworICAgIG1fcmVhZGVyLmNsZWFyKCk7CisgICAgcmV0
dXJuIEltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCk7Cit9CisKK3ZvaWQgQk1QSW1hZ2VEZWNvZGVy
OjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKIHsKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3Zl
IHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKICAgICAvLyBoYXMgZmFpbGVkLgotICAg
IGlmICghZGVjb2RlKG9ubHlTaXplKSAmJiBtX2FsbERhdGFSZWNlaXZlZCkKKyAgICBpZiAoIWRl
Y29kZUhlbHBlcihvbmx5U2l6ZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0
RmFpbGVkKCk7CisgICAgLy8gSWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRv
bid0IG5lZWQgdGhlIEJNUEltYWdlUmVhZGVyCisgICAgLy8gYW55bW9yZS4gIChJZiB3ZSBmYWls
ZWQsIHxtX3JlYWRlcnwgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLikKKyAgICBlbHNlIGlmICgh
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0
KCkuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICAgICAgbV9y
ZWFkZXIuY2xlYXIoKTsKIH0KIAotYm9vbCBCTVBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9u
bHlTaXplKQorYm9vbCBCTVBJbWFnZURlY29kZXI6OmRlY29kZUhlbHBlcihib29sIG9ubHlTaXpl
KQogewogICAgIHNpemVfdCBpbWdEYXRhT2Zmc2V0ID0gMDsKLSAgICBpZiAoKG1fZGVjb2RlZE9m
ZnNldCA8IHNpemVPZkZpbGVIZWFkZXIpCi0gICAgICAgICYmICFwcm9jZXNzRmlsZUhlYWRlcigm
aW1nRGF0YU9mZnNldCkpCisgICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPCBzaXplT2ZGaWxlSGVh
ZGVyKSAmJiAhcHJvY2Vzc0ZpbGVIZWFkZXIoJmltZ0RhdGFPZmZzZXQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fcmVhZGVyKSB7Ci0gICAgICAgIG1fcmVhZGVyLnNldChu
ZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgbV9kZWNvZGVkT2Zmc2V0LCBpbWdEYXRhT2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7CisgICAgICAg
IG1fcmVhZGVyLnNldChuZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgbV9kZWNvZGVkT2Zmc2V0LCBp
bWdEYXRhT2Zmc2V0LCBmYWxzZSkpOwogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShtX2RhdGEu
Z2V0KCkpOwogICAgIH0KIApAQCAtMTE4LDggKzEyMyw3IEBAIGJvb2wgQk1QSW1hZ2VEZWNvZGVy
Ojpwcm9jZXNzRmlsZUhlYWRlcigKICAgICBBU1NFUlQoIW1fZGVjb2RlZE9mZnNldCk7CiAgICAg
aWYgKG1fZGF0YS0+c2l6ZSgpIDwgc2l6ZU9mRmlsZUhlYWRlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGNvbnN0IHVpbnQxNl90IGZpbGVUeXBlID0KLSAgICAgICAgKG1fZGF0YS0+ZGF0
YSgpWzBdIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dWludDhfdD4obV9kYXRhLT5kYXRhKClbMV0pOwor
ICAgIGNvbnN0IHVpbnQxNl90IGZpbGVUeXBlID0gKG1fZGF0YS0+ZGF0YSgpWzBdIDw8IDgpIHwg
c3RhdGljX2Nhc3Q8dWludDhfdD4obV9kYXRhLT5kYXRhKClbMV0pOwogICAgICppbWdEYXRhT2Zm
c2V0ID0gcmVhZFVpbnQzMigxMCk7CiAgICAgbV9kZWNvZGVkT2Zmc2V0ID0gc2l6ZU9mRmlsZUhl
YWRlcjsKIApAQCAtMTM3LDEyICsxNDEsNyBAQCBib29sIEJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vz
c0ZpbGVIZWFkZXIoCiAgICAgICAgIEJJVE1BUEFSUkFZID0gMHg0MjQxLCAgLy8gIkJBIgogICAg
ICAgICAqLwogICAgIH07Ci0gICAgaWYgKGZpbGVUeXBlICE9IEJNQVApIHsKLSAgICAgICAgc2V0
RmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gKGZpbGVUeXBlID09IEJNQVApIHx8IHNldEZhaWxlZCgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTM3MTEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMzMgKzQ2LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgICAg
IHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
KyAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUg
Y2FyZWZ1bCB0byBhdm9pZAorICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVz
cGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKKyAgICAgICAgLy8gQk1QSW1h
Z2VSZWFkZXIhCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRGYWlsZWQoKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIGlubGluZSB1aW50MzJfdCByZWFkVWludDMyKGludCBvZmZzZXQpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBCTVBJbWFnZVJlYWRlcjo6cmVhZFVpbnQz
MihtX2RhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kZWNvZGVkT2Zmc2V0ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBCTVBJ
bWFnZVJlYWRlcjo6cmVhZFVpbnQzMihtX2RhdGEuZ2V0KCksIG1fZGVjb2RlZE9mZnNldCArIG9m
ZnNldCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxv
bmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0ZXIKICAgICAgICAgLy8gY2FsY3Vs
YXRpbmcgdGhlIGltYWdlIHNpemUuICBJZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUgaXMgbm8g
bW9yZQogICAgICAgICAvLyBkYXRhIGNvbWluZywgc2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBm
bGFnLgotICAgICAgICB2b2lkIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChib29sIG9ubHlT
aXplKTsKKyAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBvbmx5U2l6ZSk7CiAKICAgICAgICAgLy8g
RGVjb2RlcyB0aGUgaW1hZ2UuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5n
IGFmdGVyCiAgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLiAgUmV0dXJucyB3
aGV0aGVyIGRlY29kaW5nIHN1Y2NlZWRlZC4KLSAgICAgICAgLy8gTk9URTogVXNlZCBpbnRlcm5h
bGx5IGJ5IGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZCgpLiAgT3RoZXIgcGVvcGxlCi0gICAg
ICAgIC8vIHNob3VsZCBub3QgY2FsbCB0aGlzLgotICAgICAgICBib29sIGRlY29kZShib29sIG9u
bHlTaXplKTsKKyAgICAgICAgYm9vbCBkZWNvZGVIZWxwZXIoYm9vbCBvbmx5U2l6ZSk7CiAKICAg
ICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBmaWxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBkYXRhLiAgU2V0cwogICAgICAgICAvLyB8KmltZ0RhdGFPZmZzZXR8IGJhc2VkIG9uIHRoZSBo
ZWFkZXIgY29udGVudHMuICBSZXR1cm5zIHRydWUgaWYgdGhlCiAgICAgICAgIC8vIGZpbGUgaGVh
ZGVyIGNvdWxkIGJlIGRlY29kZWQuCiAgICAgICAgIGJvb2wgcHJvY2Vzc0ZpbGVIZWFkZXIoc2l6
ZV90KiBpbWdEYXRhT2Zmc2V0KTsKIAotICAgICAgICAvLyBUcnVlIGlmIHdlJ3ZlIHNlZW4gYWxs
IHRoZSBkYXRhLgotICAgICAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOwotCiAgICAgICAgIC8v
IEFuIGluZGV4IGludG8gfG1fZGF0YXwgcmVwcmVzZW50aW5nIGhvdyBtdWNoIHdlJ3ZlIGFscmVh
ZHkgZGVjb2RlZC4KICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSB0cmFja3MgZGF0YSBf
dGhpc18gY2xhc3MgZGVjb2Rlczsgb25jZSB0aGUKICAgICAgICAgLy8gQk1QSW1hZ2VSZWFkZXIg
dGFrZXMgb3ZlciB0aGlzIHdpbGwgbm90IGJlIHVwZGF0ZWQgZnVydGhlci4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHAJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUJNUEltYWdlUmVhZGVyOjpCTVBJbWFnZVJlYWRl
cihJbWFnZURlY29kZXIqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW1nRGF0YU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHVzZXNBbmRNYXNrKQorQk1QSW1hZ2VSZWFkZXI6OkJNUEltYWdlUmVhZGVyKEltYWdl
RGVjb2RlciogcGFyZW50LCBzaXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwgc2l6ZV90IGlt
Z0RhdGFPZmZzZXQsIGJvb2wgdXNlc0FuZE1hc2spCiAgICAgOiBtX3BhcmVudChwYXJlbnQpCiAg
ICAgLCBtX2J1ZmZlcigwKQogICAgICwgbV9kZWNvZGVkT2Zmc2V0KGRlY29kZWRBbmRIZWFkZXJP
ZmZzZXQpCkBAIC02Myw4ICs2MCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChi
b29sIG9ubHkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmVhZCBhbmQgcHJvY2Vz
cyBpbmZvIGhlYWRlci4KLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA8IChtX2hlYWRlck9mZnNl
dCArIG1faW5mb0hlYWRlci5iaVNpemUpKQotICAgICAgICAmJiAhcHJvY2Vzc0luZm9IZWFkZXIo
KSkKKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hl
YWRlci5iaVNpemUpKSAmJiAhcHJvY2Vzc0luZm9IZWFkZXIoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gcHJvY2Vzc0luZm9IZWFkZXIoKSBzZXQgdGhlIHNpemUsIHNvIGlmIHRo
YXQncyBhbGwgd2UgbmVlZGVkLCB3ZSdyZSBkb25lLgpAQCAtODIsOSArNzgsOCBAQCBib29sIEJN
UEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
ZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1ZmZlcik7ICAvLyBQYXJlbnQg
c2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVjb2RlIQogICAgIGlmIChtX2J1
ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlm
ICghbV9idWZmZXItPnNldFNpemUobV9wYXJlbnQtPnNpemUoKS53aWR0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQotICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOyAgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgorICAgICAg
ICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkud2lkdGgoKSwgbV9wYXJl
bnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZh
aWxlZCgpOyAgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3Rh
dHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgpIGNh
bGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZvcmNl
CiAgICAgICAgIC8vIGl0IGJhY2sgdG8gZmFsc2UgaGVyZS4gIFdlJ2xsIHNldCBpdCB0cnVlIGJl
bG93IGluIGFsbCBjYXNlcyB3aGVyZQpAQCAtMTAwLDEyICs5NSwxMSBAQCBib29sIEJNUEltYWdl
UmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAKICAgICAvLyBEZWNvZGUgdGhlIGRhdGEuCiAg
ICAgaWYgKChtX2FuZE1hc2tTdGF0ZSAhPSBEZWNvZGluZykgJiYgIXBhc3RFbmRPZkltYWdlKDAp
KSB7Ci0gICAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFNCkKLSAg
ICAgICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEU4KQotICAgICAg
ICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTI0KSkgewotICAgICAg
ICAgICAgaWYgKCFwcm9jZXNzUkxFRGF0YSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfSBlbHNlIGlmICghcHJvY2Vzc05vblJMRURhdGEoZmFsc2UsIDApKQorICAg
ICAgICBpZiAoKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IFJMRTQpICYmIChtX2luZm9I
ZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBSTEU4KSAmJiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Np
b24gIT0gUkxFMjQpKSB7CisgICAgICAgICAgICBjb25zdCBQcm9jZXNzaW5nUmVzdWx0IHJlc3Vs
dCA9IHByb2Nlc3NOb25STEVEYXRhKGZhbHNlLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gU3VjY2VzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA9PSBGYWlsdXJlKSA/
IG1fcGFyZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKCFwcm9j
ZXNzUkxFRGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTIx
LDggKzExNSwxMSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAK
ICAgICAgICAgbV9hbmRNYXNrU3RhdGUgPSBEZWNvZGluZzsKICAgICB9Ci0gICAgaWYgKChtX2Fu
ZE1hc2tTdGF0ZSA9PSBEZWNvZGluZykgJiYgIXByb2Nlc3NOb25STEVEYXRhKGZhbHNlLCAwKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2FuZE1hc2tTdGF0ZSA9PSBEZWNvZGlu
ZykgeworICAgICAgICBjb25zdCBQcm9jZXNzaW5nUmVzdWx0IHJlc3VsdCA9IHByb2Nlc3NOb25S
TEVEYXRhKGZhbHNlLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTdWNjZXNzKQorICAgICAg
ICAgICAgcmV0dXJuIChyZXN1bHQgPT0gRmFpbHVyZSkgPyBtX3BhcmVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBEb25lIQogICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMo
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKQEAgLTEzMyw4ICsxMzAsNyBAQCBib29sIEJN
UEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlclNpemUoCiB7CiAgICAgLy8gR2V0IHNpemUgb2Yg
aW5mbyBoZWFkZXIuCiAgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBtX2hlYWRlck9mZnNl
dCk7Ci0gICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPiBtX2RhdGEtPnNpemUoKSkKLSAgICAgICAg
fHwgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCA0KSkKKyAgICBpZiAoKG1f
ZGVjb2RlZE9mZnNldCA+IG1fZGF0YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9k
ZWNvZGVkT2Zmc2V0KSA8IDQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9pbmZvSGVh
ZGVyLmJpU2l6ZSA9IHJlYWRVaW50MzIoMCk7CiAgICAgLy8gRG9uJ3QgaW5jcmVtZW50IG1fZGVj
b2RlZE9mZnNldCBoZXJlLCBpdCBqdXN0IG1ha2VzIHRoZSBjb2RlIGluCkBAIC0xNDMsMTAgKzEz
OSw4IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnJlYWRJbmZvSGVhZGVyU2l6ZSgKICAgICAvLyBE
b24ndCBhbGxvdyB0aGUgaGVhZGVyIHRvIG92ZXJmbG93ICh3aGljaCB3b3VsZCBiZSBoYXJtbGVz
cyBoZXJlLCBidXQKICAgICAvLyBwcm9ibGVtYXRpYyBvciBhdCBsZWFzdCBjb25mdXNpbmcgaW4g
b3RoZXIgcGxhY2VzKSwgb3IgdG8gb3ZlcnJ1biB0aGUKICAgICAvLyBpbWFnZSBkYXRhLgotICAg
IGlmICgoKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkgPCBtX2hlYWRlck9m
ZnNldCkKLSAgICAgICAgfHwgKG1faW1nRGF0YU9mZnNldAotICAgICAgICAgICAgJiYgKG1faW1n
RGF0YU9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKSkpCi0g
ICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICBpZiAoKChtX2hlYWRlck9mZnNldCArIG1f
aW5mb0hlYWRlci5iaVNpemUpIDwgbV9oZWFkZXJPZmZzZXQpIHx8IChtX2ltZ0RhdGFPZmZzZXQg
JiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNp
emUpKSkpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAKICAgICAvLyBT
ZWUgaWYgdGhpcyBpcyBhIGhlYWRlciBzaXplIHdlIHVuZGVyc3RhbmQ6CiAgICAgLy8gT1MvMiAx
Lng6IDEyCkBAIC0xNTYsMTIgKzE1MCwxMCBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpyZWFkSW5m
b0hlYWRlclNpemUoCiAgICAgZWxzZSBpZiAoKG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDApIHx8
IGlzV2luZG93c1Y0UGx1cygpKQogICAgICAgICA7CiAgICAgLy8gT1MvMiAyLng6IGFueSBtdWx0
aXBsZSBvZiA0IGJldHdlZW4gMTYgYW5kIDY0LCBpbmNsdXNpdmUsIG9yIDQyIG9yIDQ2Ci0gICAg
ZWxzZSBpZiAoKG1faW5mb0hlYWRlci5iaVNpemUgPj0gMTYpICYmIChtX2luZm9IZWFkZXIuYmlT
aXplIDw9IDY0KQotICAgICAgICAgICAgICYmICgoKG1faW5mb0hlYWRlci5iaVNpemUgJiAzKSA9
PSAwKSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSA0MikKLSAgICAgICAgICAgICAgICAgfHwg
KG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDYpKSkKKyAgICBlbHNlIGlmICgobV9pbmZvSGVhZGVy
LmJpU2l6ZSA+PSAxNikgJiYgKG1faW5mb0hlYWRlci5iaVNpemUgPD0gNjQpICYmICghKG1faW5m
b0hlYWRlci5iaVNpemUgJiAzKSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSA0MikgfHwgKG1f
aW5mb0hlYWRlci5iaVNpemUgPT0gNDYpKSkKICAgICAgICAgbV9pc09TMjJ4ID0gdHJ1ZTsKICAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIG1fcGFy
ZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTcwLDI5ICsxNjIs
MjUgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoKQogewogICAgIC8v
IFJlYWQgaW5mbyBoZWFkZXIuCiAgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBtX2hlYWRl
ck9mZnNldCk7Ci0gICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPiBtX2RhdGEtPnNpemUoKSkKLSAg
ICAgICAgfHwgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCBtX2luZm9IZWFk
ZXIuYmlTaXplKQotICAgICAgICB8fCAhcmVhZEluZm9IZWFkZXIoKSkKKyAgICBpZiAoKG1fZGVj
b2RlZE9mZnNldCA+IG1fZGF0YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNv
ZGVkT2Zmc2V0KSA8IG1faW5mb0hlYWRlci5iaVNpemUpIHx8ICFyZWFkSW5mb0hlYWRlcigpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IG1faW5mb0hlYWRl
ci5iaVNpemU7CiAKICAgICAvLyBTYW5pdHktY2hlY2sgaGVhZGVyIHZhbHVlcy4KICAgICBpZiAo
IWlzSW5mb0hlYWRlclZhbGlkKCkpCi0gICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4K
ICAgICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9I
ZWFkZXIuYmlIZWlnaHQpKQotICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIHJl
dHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAKICAgICAvLyBGb3IgcGFsZXR0ZWQgaW1hZ2Vz
LCBiaXRtYXBzIGNhbiBzZXQgYmlDbHJVc2VkIHRvIDAgdG8gbWVhbiAiYWxsCiAgICAgLy8gY29s
b3JzIiwgc28gc2V0IGl0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgZm9yIHRoaXMg
Yml0IGRlcHRoLgogICAgIC8vIEFsc28gZG8gdGhpcyBmb3IgYml0bWFwcyB0aGF0IHB1dCB0b28g
bGFyZ2UgYSB2YWx1ZSBoZXJlLgogICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDE2
KSB7Ci0gICAgICBjb25zdCB1aW50MzJfdCBtYXhDb2xvcnMgPQotICAgICAgICAgIHN0YXRpY19j
YXN0PHVpbnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudDsKLSAgICAgIGlmICgo
bV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9PSAwKQotICAgICAgICAgIHx8IChtX2luZm9IZWFkZXIu
YmlDbHJVc2VkID4gbWF4Q29sb3JzKSkKLSAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9
IG1heENvbG9yczsKKyAgICAgIGNvbnN0IHVpbnQzMl90IG1heENvbG9ycyA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudDsKKyAgICAgIGlmICghbV9p
bmZvSGVhZGVyLmJpQ2xyVXNlZCB8fCAobV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA+IG1heENvbG9y
cykpCisgICAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IG1heENvbG9yczsKICAgICB9
CiAKICAgICAvLyBGb3IgYW55IGJpdG1hcHMgdGhhdCBzZXQgdGhlaXIgQml0Q291bnQgdG8gdGhl
IHdyb25nIHZhbHVlLCByZXNldCB0aGUKQEAgLTIwNiw3ICsxOTQsNyBAQCBib29sIEJNUEltYWdl
UmVhZGVyOjpwcm9jZXNzSW5mb0hlYWRlcigpCiAgICAgLy8gVGVsbCBjYWxsZXIgd2hhdCBzdGls
bCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuCiAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50
ID49IDE2KQogICAgICAgICBtX25lZWRUb1Byb2Nlc3NCaXRtYXNrcyA9IHRydWU7Ci0gICAgZWxz
ZSBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiAwKQorICAgIGVsc2UgaWYgKG1faW5mb0hl
YWRlci5iaUJpdENvdW50KQogICAgICAgICBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlID0gdHJ1
ZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjQ0LDEwICsyMzIsOSBAQCBib29sIEJNUEltYWdl
UmVhZGVyOjpyZWFkSW5mb0hlYWRlcigpCiAgICAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDb21w
cmVzc2lvbiA9IFJMRTI0OwogICAgICAgICAgICAgbV9pc09TMjJ4ID0gdHJ1ZTsKICAgICAgICAg
fSBlbHNlIGlmIChiaUNvbXByZXNzaW9uID4gNSkKLSAgICAgICAgICAgIHJldHVybiBzZXRGYWls
ZWQoKTsgIC8vIFNvbWUgdHlwZSB3ZSBkb24ndCB1bmRlcnN0YW5kLgorICAgICAgICAgICAgcmV0
dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsgIC8vIFNvbWUgdHlwZSB3ZSBkb24ndCB1bmRlcnN0
YW5kLgogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lv
biA9Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q29tcHJlc3Npb25UeXBlPihiaUNvbXBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0gc3RhdGlj
X2Nhc3Q8Q29tcHJlc3Npb25UeXBlPihiaUNvbXByZXNzaW9uKTsKICAgICB9CiAKICAgICAvLyBS
ZWFkIGNvbG9ycyB1c2VkLCBpZiBwcmVzZW50LgpAQCAtMjg4LDcgKzI3NSw3IEBAIGJvb2wgQk1Q
SW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKIHsKICAgICAvLyBOb24tcG9zaXRpdmUg
d2lkdGhzL2hlaWdodHMgYXJlIGludmFsaWQuICAoV2UndmUgYWxyZWFkeSBmbGlwcGVkIHRoZQog
ICAgIC8vIHNpZ24gb2YgdGhlIGhlaWdodCBmb3IgdG9wLWRvd24gYml0bWFwcy4pCi0gICAgaWYg
KChtX2luZm9IZWFkZXIuYmlXaWR0aCA8PSAwKSB8fCAobV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID09
IDApKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGggPD0gMCkgfHwgIW1faW5mb0hlYWRl
ci5iaUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT25seSBXaW5kb3dz
IFYzKyBoYXMgdG9wLWRvd24gYml0bWFwcy4KQEAgLTI5NiwxNiArMjgzLDEwIEBAIGJvb2wgQk1Q
SW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gT25seSBiaXQgZGVwdGhzIG9mIDEsIDQsIDgsIG9yIDI0IGFyZSB1bml2ZXJzYWxs
eSBzdXBwb3J0ZWQuCi0gICAgaWYgKChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxKSAmJiAo
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gNCkKLSAgICAgICAgJiYgKG1faW5mb0hlYWRlci5i
aUJpdENvdW50ICE9IDgpCi0gICAgICAgICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAy
NCkpIHsKKyAgICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDEpICYmIChtX2luZm9I
ZWFkZXIuYmlCaXRDb3VudCAhPSA0KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gOCkg
JiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDI0KSkgewogICAgICAgICAvLyBXaW5kb3dz
IFYzKyBhZGRpdGlvbmFsbHkgc3VwcG9ydHMgYml0IGRlcHRocyBvZiAwIChmb3IgZW1iZWRkZWQK
ICAgICAgICAgLy8gSlBFRy9QTkcgaW1hZ2VzKSwgMTYsIGFuZCAzMi4KLSAgICAgICAgaWYgKG1f
aXNPUzIxeCB8fCBtX2lzT1MyMngpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICgobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMCkKLSAgICAgICAgICAgICYmIChtX2lu
Zm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxNikKLSAgICAgICAgICAgICYmIChtX2luZm9IZWFkZXIu
YmlCaXRDb3VudCAhPSAzMikpCisgICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4IHx8
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0g
MTYpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAzMikpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzE0LDcgKzI5NSw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFk
ZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAvLyBzb21lIGNvbXByZXNzaW9uIHR5cGVzLgog
ICAgIHN3aXRjaCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24pIHsKICAgICBjYXNlIFJHQjoK
LSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDApCisgICAgICAgIGlmICgh
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogCkBAIC0zMjMsNDYgKzMwNCwzOCBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpp
c0luZm9IZWFkZXJWYWxpZCgpCiAgICAgICAgIC8vIENvbXByZXNzaW9uID0gUkxFNCIgKHdoaWNo
IG1lYW5zICI0IGJpdCwgYnV0IHdpdGggYSAyLWNvbG9yIHRhYmxlIiksCiAgICAgICAgIC8vIHNv
IGFsc28gYWxsb3cgdGhlIHBhbGV0dGVkIFJMRSBjb21wcmVzc2lvbiB0eXBlcyB0byBoYXZlIHRv
byBsb3cgYQogICAgICAgICAvLyBiaXQgY291bnQ7IHdlJ2xsIGNvcnJlY3QgdGhpcyBsYXRlci4K
LSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDAgfHwgbV9pbmZvSGVhZGVy
LmJpQml0Q291bnQgPiA4KQorICAgICAgICBpZiAoIW1faW5mb0hlYWRlci5iaUJpdENvdW50IHx8
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUkxFNDoKICAgICAgICAgLy8gU2VlIGNvbW1l
bnRzIGluIFJMRTguCi0gICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9PSAwIHx8
IG1faW5mb0hlYWRlci5iaUJpdENvdW50ID4gNCkKKyAgICAgICAgaWYgKCFtX2luZm9IZWFkZXIu
YmlCaXRDb3VudCB8fCAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiA0KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJJVEZJRUxEUzoKICAg
ICAgICAgLy8gT25seSB2YWxpZCBmb3IgV2luZG93cyBWMysuCi0gICAgICAgIGlmIChtX2lzT1My
MXggfHwgbV9pc09TMjJ4KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
KG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291
bnQgIT0gMzIpKQorICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCB8fCAoKG1faW5m
b0hlYWRlci5iaUJpdENvdW50ICE9IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0g
MzIpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEpQRUc6CiAgICAgY2FzZSBQTkc6CiAgICAgICAgIC8vIE9ubHkgdmFsaWQgZm9yIFdpbmRv
d3MgVjMrLgotICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDAp
CisgICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4IHx8IG1faW5mb0hlYWRlci5iaUJp
dENvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgSFVGRk1BTjFEOgogICAgICAgICAvLyBPbmx5IHZhbGlkIGZvciBPUy8yIDIueC4KLSAg
ICAgICAgaWYgKCFtX2lzT1MyMngpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxKQorICAgICAgICBpZiAoIW1faXNPUzIy
eCB8fCAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSTEUyNDoKICAgICAgICAgLy8gT25s
eSB2YWxpZCBmb3IgT1MvMiAyLnguCi0gICAgICAgIGlmICghbV9pc09TMjJ4KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0g
MjQpCisgICAgICAgIGlmICghbV9pc09TMjJ4IHx8IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAh
PSAyNCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIApA
QCAtMzc0LDggKzM0Nyw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlk
KCkKICAgICB9CiAKICAgICAvLyBUb3AtZG93biBiaXRtYXBzIGNhbm5vdCBiZSBjb21wcmVzc2Vk
OyB0aGV5IG11c3QgYmUgUkdCIG9yIEJJVEZJRUxEUy4KLSAgICBpZiAobV9pc1RvcERvd24gJiYg
KG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IFJHQikKLSAgICAgICAgJiYgKG1faW5mb0hl
YWRlci5iaUNvbXByZXNzaW9uICE9IEJJVEZJRUxEUykpCisgICAgaWYgKG1faXNUb3BEb3duICYm
IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBSR0IpICYmIChtX2luZm9IZWFkZXIuYmlD
b21wcmVzc2lvbiAhPSBCSVRGSUVMRFMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBSZWplY3QgdGhlIGZvbGxvd2luZyB2YWxpZCBiaXRtYXAgdHlwZXMgdGhhdCB3ZSBkb24ndCBj
dXJyZW50bHkgYm90aGVyCkBAIC0zODUsMTMgKzM1NywxMSBAQCBib29sIEJNUEltYWdlUmVhZGVy
Ojppc0luZm9IZWFkZXJWYWxpZCgpCiAgICAgLy8gICAqIEJpdG1hcHMgbGFyZ2VyIHRoYW4gMl4x
NiBwaXhlbHMgaW4gZWl0aGVyIGRpbWVuc2lvbiAoV2luZG93cwogICAgIC8vICAgICBwcm9iYWJs
eSBkb2Vzbid0IGRyYXcgdGhlc2Ugd2VsbCBhbnl3YXksIGFuZCB0aGUgZGVjb2RlZCBkYXRhIHdv
dWxkCiAgICAgLy8gICAgIHRha2UgYSBsb3Qgb2YgbWVtb3J5KS4KLSAgICBpZiAoKG1faW5mb0hl
YWRlci5iaVdpZHRoID49ICgxIDw8IDE2KSkKLSAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUhl
aWdodCA+PSAoMSA8PCAxNikpKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGggPj0gKDEg
PDwgMTYpKSB8fCAobV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID49ICgxIDw8IDE2KSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAvLyAgICogV2luZG93cyBWMysgSlBFRy1pbi1CTVAgYW5kIFBO
Ry1pbi1CTVAgYml0bWFwcyAoc3VwcG9zZWRseSBub3QgZm91bmQKICAgICAvLyAgICAgaW4gdGhl
IHdpbGQsIG9ubHkgdXNlZCB0byBzZW5kIGRhdGEgdG8gcHJpbnRlcnM/KS4KLSAgICBpZiAoKG1f
aW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IEpQRUcpCi0gICAgICAgIHx8IChtX2luZm9IZWFk
ZXIuYmlDb21wcmVzc2lvbiA9PSBQTkcpKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJl
c3Npb24gPT0gSlBFRykgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFBORykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyAgICogT1MvMiAyLnggSHVmZm1hbi1lbmNvZGVk
IG1vbm9jaHJvbWUgYml0bWFwcyAoc2VlCiAgICAgLy8gICAgICBodHRwOi8vd3d3LmZpbGVmb3Jt
YXQuaW5mby9taXJyb3IvZWdmZi9jaDA5XzA1Lmh0bSAsIHJlOiAiRzMxRCIKQEAgLTQxMywxMSAr
MzgzLDggQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0JpdG1hc2tzKCkKICAgICAgICAg
Ly8gMTYgYml0czogICAgTVNCIDwtICAgICAgICAgICAgICAgICAgICAgeFJSUlJSR0cgR0dHQkJC
QkIgLT4gTFNCCiAgICAgICAgIC8vIDI0LzMyIGJpdHM6IE1TQiA8LSBbQUFBQUFBQUFdIFJSUlJS
UlJSIEdHR0dHR0dHIEJCQkJCQkJCIC0+IExTQgogICAgICAgICBjb25zdCBpbnQgbnVtQml0cyA9
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9PSAxNikgPyA1IDogODsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gMjsgKytpKSB7Ci0gICAgICAgICAgICBtX2JpdE1hc2tzW2ldID0KLSAg
ICAgICAgICAgICAgICAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCAobnVtQml0cyAqICgz
IC0gaSkpKSAtIDEpIF4KLSAgICAgICAgICAgICAgICAoKHN0YXRpY19jYXN0PHVpbnQzMl90Pigx
KSA8PCAobnVtQml0cyAqICgyIC0gaSkpKSAtIDEpOwotICAgICAgICB9CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IDI7ICsraSkKKyAgICAgICAgICAgIG1fYml0TWFza3NbaV0gPSAoKHN0
YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCAobnVtQml0cyAqICgzIC0gaSkpKSAtIDEpIF4gKChz
dGF0aWNfY2FzdDx1aW50MzJfdD4oMSkgPDwgKG51bUJpdHMgKiAoMiAtIGkpKSkgLSAxKTsKIAog
ICAgICAgICAvLyBGb3IgV2luZG93cyBWNCsgMzItYml0IFJHQiwgZG9uJ3Qgb3ZlcndyaXRlIHRo
ZSBhbHBoYSBtYXNrIGZyb20gdGhlCiAgICAgICAgIC8vIGhlYWRlciAoc2VlIG5vdGUgaW4gcmVh
ZEluZm9IZWFkZXIoKSkuCkBAIC00MzEsMTEgKzM5OCw4IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6
OnByb2Nlc3NCaXRtYXNrcygpCiAKICAgICAgICAgLy8gRmFpbCBpZiB3ZSBkb24ndCBoYXZlIGVu
b3VnaCBmaWxlIHNwYWNlIGZvciB0aGUgYml0bWFza3MuCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgU0laRU9GX0JJVE1BU0tTID0gMTI7Ci0gICAgICAgIGlmICgoKG1faGVhZGVyT2Zmc2V0
ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIFNJWkVPRl9CSVRNQVNLUykgPAotICAgICAgICAgICAg
ICAgIChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKQotICAgICAgICAgICAg
fHwgKG1faW1nRGF0YU9mZnNldCAmJiAobV9pbWdEYXRhT2Zmc2V0IDwKLSAgICAgICAgICAgICAg
ICAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgU0laRU9GX0JJVE1BU0tT
KSkpKQotICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICBpZiAoKChtX2hl
YWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpIDwgKG1f
aGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkpIHx8IChtX2ltZ0RhdGFPZmZzZXQg
JiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNp
emUgKyBTSVpFT0ZfQklUTUFTS1MpKSkpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNl
dEZhaWxlZCgpOwogCiAgICAgICAgIC8vIFJlYWQgYml0bWFza3MuCiAgICAgICAgIGlmICgobV9k
YXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgU0laRU9GX0JJVE1BU0tTKQpAQCAtNDYx
LDggKzQyNSw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NCaXRtYXNrcygpCiAgICAg
ICAgIC8vIHNwZWNpZnkgYSBib2d1cyBhbHBoYSBjaGFubmVsIGluIGJpdHMgdGhhdCBkb24ndCBl
eGlzdCBpbiB0aGUgcGl4ZWwKICAgICAgICAgLy8gZGF0YSAoZm9yIGV4YW1wbGUsIGJpdHMgMjUt
MzEgaW4gYSAyNC1iaXQgUkdCIGZvcm1hdCkuCiAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlC
aXRDb3VudCA8IDMyKQotICAgICAgICAgICAgbV9iaXRNYXNrc1tpXSAmPQotICAgICAgICAgICAg
ICAgICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IG1faW5mb0hlYWRlci5iaUJpdENvdW50
KSAtIDEpOworICAgICAgICAgICAgbV9iaXRNYXNrc1tpXSAmPSAoKHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCkgLSAxKTsKIAogICAgICAgICAvLyBG
b3IgZW1wdHkgbWFza3MgKGNvbW1vbiBvbiB0aGUgYWxwaGEgY2hhbm5lbCwgZXNwZWNpYWxseSBh
ZnRlciB0aGUKICAgICAgICAgLy8gdHJpbW1pbmcgYWJvdmUpLCBxdWlja2x5IGNsZWFyIHRoZSBz
aGlmdHMgYW5kIGNvbnRpbnVlLCB0byBhdm9pZCBhbgpAQCAtNDc2LDcgKzQzOSw3IEBAIGJvb2wg
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NCaXRtYXNrcygpCiAgICAgICAgIC8vIE1ha2Ugc3VyZSBi
aXRtYXNrIGRvZXMgbm90IG92ZXJsYXAgYW55IG90aGVyIGJpdG1hc2tzLgogICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGk7ICsraikgewogICAgICAgICAgICAgaWYgKHRlbXBNYXNrICYgbV9i
aXRNYXNrc1tqXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIENvdW50IG9mZnNldCBpbnRvIHBpeGVsIGRhdGEuCkBAIC00ODksNyArNDUyLDcgQEAg
Ym9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0JpdG1hc2tzKCkKIAogICAgICAgICAvLyBNYWtl
IHN1cmUgYml0bWFzayBpcyBjb250aWd1b3VzLgogICAgICAgICBpZiAodGVtcE1hc2spCi0gICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PnNldEZhaWxlZCgpOwogCiAgICAgICAgIC8vIFNpbmNlIFJHQkFCdWZmZXIgdG9wcyBvdXQgYXQg
OCBiaXRzIHBlciBjaGFubmVsLCBhZGp1c3QgdGhlIHNoaWZ0CiAgICAgICAgIC8vIGFtb3VudHMg
dG8gdXNlIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyBvZiB0aGUgY2hhbm5lbC4KQEAgLTUw
NywxNSArNDcwLDExIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NDb2xvclRhYmxlKCkK
ICAgICBtX3RhYmxlU2l6ZUluQnl0ZXMgPSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkICogKG1faXNP
UzIxeCA/IDMgOiA0KTsKIAogICAgIC8vIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZmls
ZSBzcGFjZSBmb3IgdGhlIGNvbG9yIHRhYmxlLgotICAgIGlmICgoKG1faGVhZGVyT2Zmc2V0ICsg
bV9pbmZvSGVhZGVyLmJpU2l6ZSArIG1fdGFibGVTaXplSW5CeXRlcykgPAotICAgICAgICAgICAg
KG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkpCi0gICAgICAgIHx8IChtX2lt
Z0RhdGFPZmZzZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8Ci0gICAgICAgICAgICAobV9oZWFkZXJP
ZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSkpKQotICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBtX2lu
Zm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSA8IChtX2hlYWRlck9mZnNldCAr
IG1faW5mb0hlYWRlci5iaVNpemUpKSB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmIChtX2ltZ0RhdGFP
ZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNp
emVJbkJ5dGVzKSkpKQorICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOwogCiAg
ICAgLy8gUmVhZCBjb2xvciB0YWJsZS4KLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0
YS0+c2l6ZSgpKQotICAgICAgICB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0
KSA8IG1fdGFibGVTaXplSW5CeXRlcykpCisgICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPiBtX2Rh
dGEtPnNpemUoKSkgfHwgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCBtX3Rh
YmxlU2l6ZUluQnl0ZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9jb2xvclRhYmxl
LnJlc2l6ZShtX2luZm9IZWFkZXIuYmlDbHJVc2VkKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faW5mb0hlYWRlci5iaUNsclVzZWQ7ICsraSkgewpAQCAtNTczLDExICs1MzIsMTEgQEAg
Ym9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEoKQogICAgICAgICAvLyB0aGUgaW1h
Z2UuCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgY291bnQgPSBtX2RhdGEtPmRhdGEoKVttX2RlY29k
ZWRPZmZzZXRdOwogICAgICAgICBjb25zdCB1aW50OF90IGNvZGUgPSBtX2RhdGEtPmRhdGEoKVtt
X2RlY29kZWRPZmZzZXQgKyAxXTsKLSAgICAgICAgaWYgKCgoY291bnQgIT0gMCkgfHwgKGNvZGUg
IT0gMSkpICYmIHBhc3RFbmRPZkltYWdlKDApKQotICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOworICAgICAgICBpZiAoKGNvdW50IHx8IChjb2RlICE9IDEpKSAmJiBwYXN0RW5kT2ZJbWFn
ZSgwKSkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAKICAgICAg
ICAgLy8gRGVjb2RlLgotICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICBpZiAoIWNv
dW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgMDog
IC8vIE1hZ2ljIHRva2VuOiBFT0wKICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSByZW1haW5p
bmcgcGl4ZWxzIGluIHRoaXMgcm93LgpAQCAtNTkwLDEwICs1NDksNyBAQCBib29sIEJNUEltYWdl
UmVhZGVyOjpwcm9jZXNzUkxFRGF0YSgpCiAKICAgICAgICAgICAgIGNhc2UgMTogIC8vIE1hZ2lj
IHRva2VuOiBFT0YKICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSByZW1haW5pbmcgcGl4ZWxz
IGluIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAoKG1fY29vcmQueCgpIDwgbV9wYXJl
bnQtPnNpemUoKS53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICB8fCAobV9pc1RvcERvd24K
LSAgICAgICAgICAgICAgICAgICAgICAgID8gKG1fY29vcmQueSgpIDwgKG1fcGFyZW50LT5zaXpl
KCkuaGVpZ2h0KCkgLSAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogKG1fY29vcmQueSgp
ID4gMCkpKQorICAgICAgICAgICAgICAgIGlmICgobV9jb29yZC54KCkgPCBtX3BhcmVudC0+c2l6
ZSgpLndpZHRoKCkpIHx8IChtX2lzVG9wRG93biA/IChtX2Nvb3JkLnkoKSA8IChtX3BhcmVudC0+
c2l6ZSgpLmhlaWdodCgpIC0gMSkpIDogKG1fY29vcmQueSgpID4gMCkpKQogICAgICAgICAgICAg
ICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKQEAgLTYwNywxMSArNTYzLDEwIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnBy
b2Nlc3NSTEVEYXRhKCkKICAgICAgICAgICAgICAgICAvLyBwYXN0IHRoZSBlbmQgb2YgdGhlIGlt
YWdlLgogICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgZHggPSBtX2RhdGEtPmRhdGEoKVtt
X2RlY29kZWRPZmZzZXQgKyAyXTsKICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGR5ID0g
bV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgM107Ci0gICAgICAgICAgICAgICAgaWYg
KChkeCAhPSAwKSB8fCAoZHkgIT0gMCkpCisgICAgICAgICAgICAgICAgaWYgKGR4IHx8IGR5KQog
ICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCgobV9jb29yZC54KCkgKyBkeCkgPiBtX3BhcmVudC0+c2l6ZSgpLndpZHRo
KCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHBhc3RFbmRPZkltYWdlKGR5KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICAgICAgICAgIGlmICgoKG1f
Y29vcmQueCgpICsgZHgpID4gbV9wYXJlbnQtPnNpemUoKS53aWR0aCgpKSB8fCBwYXN0RW5kT2ZJ
bWFnZShkeSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVk
KCk7CiAKICAgICAgICAgICAgICAgICAvLyBTa2lwIGludGVydmVuaW5nIHBpeGVscy4KICAgICAg
ICAgICAgICAgICBtX2Nvb3JkLm1vdmUoZHgsIG1faXNUb3BEb3duID8gZHkgOiAtZHkpOwpAQCAt
NjIwLDI1ICs1NzUsMjggQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEoKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBkZWZh
dWx0OiAgLy8gQWJzb2x1dGUgbW9kZQorICAgICAgICAgICAgZGVmYXVsdDogeyAgLy8gQWJzb2x1
dGUgbW9kZQogICAgICAgICAgICAgICAgIC8vIHxjb2RlfCBwaXhlbHMgc3BlY2lmaWVkIGFzIGlu
IEJJX1JHQiwgemVyby1wYWRkZWQgYXQgdGhlIGVuZAogICAgICAgICAgICAgICAgIC8vIHRvIGEg
bXVsdGlwbGUgb2YgMTYgYml0cy4KICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHByb2Nlc3NO
b25STEVEYXRhKCkgZXhwZWN0cyBtX2RlY29kZWRPZmZzZXQgdG8KICAgICAgICAgICAgICAgICAv
LyBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwaXhlbCBkYXRhLCBidW1wIGl0IHBhc3QK
ICAgICAgICAgICAgICAgICAvLyB0aGUgZXNjYXBlIGJ5dGVzIGFuZCB0aGVuIHJlc2V0IGlmIGRl
Y29kaW5nIGZhaWxlZC4KICAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgKz0gMjsKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NOb25STEVEYXRhKHRydWUsIGNvZGUpKSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgUHJvY2Vzc2luZ1Jlc3VsdCByZXN1bHQgPSBwcm9jZXNzTm9uUkxF
RGF0YSh0cnVlLCBjb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEZhaWx1cmUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJbnN1ZmZpY2llbnREYXRhKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCAtPSAyOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgeyAgLy8gRW5jb2RlZCBt
b2RlCiAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvbG9yIGRhdGEgaXMgcmVwZWF0ZWQg
Zm9yIHxjb3VudHwgdG90YWwgcGl4ZWxzLgogICAgICAgICAgICAgLy8gU3RyYW5nZWx5LCBzb21l
IEJNUHMgc2VlbSB0byBzcGVjaWZ5IGV4Y2Vzc2l2ZWx5IGxhcmdlIGNvdW50cwogICAgICAgICAg
ICAgLy8gaGVyZTsgaWdub3JlIHBpeGVscyBwYXN0IHRoZSBlbmQgb2YgdGhlIHJvdy4KLSAgICAg
ICAgICAgIGNvbnN0IGludCBlbmRYID0KLSAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX2Nvb3Jk
LngoKSArIGNvdW50LCBtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCkpOworICAgICAgICAgICAgY29u
c3QgaW50IGVuZFggPSBzdGQ6Om1pbihtX2Nvb3JkLngoKSArIGNvdW50LCBtX3BhcmVudC0+c2l6
ZSgpLndpZHRoKCkpOwogCiAgICAgICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Np
b24gPT0gUkxFMjQpIHsKICAgICAgICAgICAgICAgICAvLyBCYWlsIGlmIHRoZXJlIGlzbid0IGVu
b3VnaCBkYXRhLgpAQCAtNjQ2LDggKzYwNCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nl
c3NSTEVEYXRhKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICAgICAgLy8gT25lIEJHUiB0cmlwbGUgdGhhdCB3ZSBjb3B5IHxjb3VudHwgdGltZXMuCi0g
ICAgICAgICAgICAgICAgZmlsbFJHQkEoZW5kWCwgbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zm
c2V0ICsgM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5kYXRhKClbbV9kZWNv
ZGVkT2Zmc2V0ICsgMl0sIGNvZGUsIDB4ZmYpOworICAgICAgICAgICAgICAgIGZpbGxSR0JBKGVu
ZFgsIG1fZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDNdLCBtX2RhdGEtPmRhdGEoKVtt
X2RlY29kZWRPZmZzZXQgKyAyXSwgY29kZSwgMHhmZik7CiAgICAgICAgICAgICAgICAgbV9kZWNv
ZGVkT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IFJMRTggaGFzIG9uZSBjb2xvciBpbmRleCB0aGF0IGdldHMgcmVwZWF0ZWQ7IFJMRTQgaGFzIHR3
bwpAQCAtNjU4LDkgKzYxNSw4IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRh
KCkKICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleGVzWzBdID0gKGNvbG9ySW5kZXhlc1sw
XSA+PiA0KSAmIDB4ZjsKICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleGVzWzFdICY9IDB4
ZjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjb2xvckluZGV4ZXNb
MF0gPj0gbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkKLSAgICAgICAgICAgICAgICAgICAgfHwgKGNv
bG9ySW5kZXhlc1sxXSA+PSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICAgICAgICAgIGlmICgoY29sb3JJbmRl
eGVzWzBdID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQpIHx8IChjb2xvckluZGV4ZXNbMV0gPj0g
bV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3Bh
cmVudC0+c2V0RmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgd2hpY2ggPSAwOyBt
X2Nvb3JkLngoKSA8IGVuZFg7ICkgewogICAgICAgICAgICAgICAgICAgICBzZXRJKGNvbG9ySW5k
ZXhlc1t3aGljaF0pOwogICAgICAgICAgICAgICAgICAgICB3aGljaCA9ICF3aGljaDsKQEAgLTY3
MiwxMCArNjI4LDEwIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKCkKICAg
ICB9CiB9CiAKLWJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKGJvb2wgaW5S
TEUsIGludCBudW1QaXhlbHMpCitCTVBJbWFnZVJlYWRlcjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJ
bWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9vbCBpblJMRSwgaW50IG51bVBpeGVscykK
IHsKICAgICBpZiAobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEluc3VmZmljaWVudERhdGE7CiAKICAgICBpZiAo
IWluUkxFKQogICAgICAgICBudW1QaXhlbHMgPSBtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCk7CkBA
IC02ODMsMTUgKzYzOSwxMyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0
YShiCiAgICAgLy8gRmFpbCBpZiB3ZSdyZSBiZWluZyBhc2tlZCB0byBkZWNvZGUgbW9yZSBwaXhl
bHMgdGhhbiByZW1haW4gaW4gdGhlIHJvdy4KICAgICBjb25zdCBpbnQgZW5kWCA9IG1fY29vcmQu
eCgpICsgbnVtUGl4ZWxzOwogICAgIGlmIChlbmRYID4gbV9wYXJlbnQtPnNpemUoKS53aWR0aCgp
KQotICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiBGYWlsdXJlOwog
CiAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIG9mIGRhdGEgdGhlIHJlcXVlc3RlZCBu
dW1iZXIgb2YgcGl4ZWxzCiAgICAgLy8gcmVxdWlyZXMuCiAgICAgY29uc3Qgc2l6ZV90IHBpeGVs
c1BlckJ5dGUgPSA4IC8gbV9pbmZvSGVhZGVyLmJpQml0Q291bnQ7CiAgICAgY29uc3Qgc2l6ZV90
IGJ5dGVzUGVyUGl4ZWwgPSBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAvIDg7Ci0gICAgY29uc3Qg
c2l6ZV90IHVucGFkZGVkTnVtQnl0ZXMgPSAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPCAxNikK
LSAgICAgICAgPyAoKG51bVBpeGVscyArIHBpeGVsc1BlckJ5dGUgLSAxKSAvIHBpeGVsc1BlckJ5
dGUpCi0gICAgICAgIDogKG51bVBpeGVscyAqIGJ5dGVzUGVyUGl4ZWwpOworICAgIGNvbnN0IHNp
emVfdCB1bnBhZGRlZE51bUJ5dGVzID0gKG1faW5mb0hlYWRlci5iaUJpdENvdW50IDwgMTYpID8g
KChudW1QaXhlbHMgKyBwaXhlbHNQZXJCeXRlIC0gMSkgLyBwaXhlbHNQZXJCeXRlKSA6IChudW1Q
aXhlbHMgKiBieXRlc1BlclBpeGVsKTsKICAgICAvLyBSTEUgcnVucyBhcmUgemVyby1wYWRkZWQg
YXQgdGhlIGVuZCB0byBhIG11bHRpcGxlIG9mIDE2IGJpdHMuICBOb24tUkxFCiAgICAgLy8gZGF0
YSBpcyBpbiByb3dzIGFuZCBpcyB6ZXJvLXBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDMyIGJpdHMu
CiAgICAgY29uc3Qgc2l6ZV90IGFsaWduQml0cyA9IGluUkxFID8gMSA6IDM7CkBAIC03MDIsNyAr
NjU2LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgogICAgIHdo
aWxlICghcGFzdEVuZE9mSW1hZ2UoMCkpIHsKICAgICAgICAgLy8gQmFpbCBpZiB3ZSBkb24ndCBo
YXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZGVzaXJlZCBudW1iZXIgb2YgcGl4ZWxzLgogICAgICAg
ICBpZiAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IHBhZGRlZE51bUJ5dGVz
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEluc3VmZmlj
aWVudERhdGE7CiAKICAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50IDwgMTYpIHsK
ICAgICAgICAgICAgIC8vIFBhbGV0dGVkIGRhdGEuICBQaXhlbHMgYXJlIHN0b3JlZCBsaXR0bGUt
ZW5kaWFuIHdpdGhpbiBieXRlcy4KQEAgLTcxMSwxMCArNjY1LDggQEAgYm9vbCBCTVBJbWFnZVJl
YWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgogICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXNr
ID0gKDEgPDwgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQpIC0gMTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGJ5dGUgPSAwOyBieXRlIDwgdW5wYWRkZWROdW1CeXRlczsgKytieXRlKSB7CiAgICAg
ICAgICAgICAgICAgdWludDhfdCBwaXhlbERhdGEgPSBtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRP
ZmZzZXQgKyBieXRlXTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBwaXhlbCA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAocGl4ZWwgPCBwaXhlbHNQZXJCeXRlKSAmJiAobV9jb29yZC54
KCkgPCBlbmRYKTsgKytwaXhlbCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
Y29sb3JJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAocGl4ZWxEYXRhID4+ICg4IC0g
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQpKSAmIG1hc2s7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgcGl4ZWwgPSAwOyAocGl4ZWwgPCBwaXhlbHNQZXJCeXRlKSAmJiAobV9jb29yZC54KCkg
PCBlbmRYKTsgKytwaXhlbCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29s
b3JJbmRleCA9IChwaXhlbERhdGEgPj4gKDggLSBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCkpICYg
bWFzazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYW5kTWFza1N0YXRlID09IERlY29kaW5n
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSB0byBhY2N1cmF0
ZWx5IHJlcHJlc2VudCBhbiBBTkQgKyBYT1IKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9w
ZXJhdGlvbiBhcyBhbiBSR0JBIGltYWdlLCBzbyB3aGVyZSB0aGUgQU5EIHZhbHVlcwpAQCAtNzI4
LDcgKzY4MCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKGIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nvb3JkLm1vdmUoMSwgMCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3JJbmRl
eCA+PSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RmFpbHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldEkoY29sb3JJbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcGl4ZWxEYXRhIDw8PSBtX2lu
Zm9IZWFkZXIuYmlCaXRDb3VudDsKQEAgLTc0OSw3ICs3MDEsNyBAQCBib29sIEJNUEltYWdlUmVh
ZGVyOjpwcm9jZXNzTm9uUkxFRGF0YShiCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHdoZXJl
IGFsbCBhbHBoYSB2YWx1ZXMgYXJlIDI1NTsgb3BhcXVlIGltYWdlcyBhcmUKICAgICAgICAgICAg
ICAgICAvLyBmYXN0ZXIgdG8gZHJhdy4KICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSBnZXRB
bHBoYShwaXhlbCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3NlZW5Ob25aZXJvQWxwaGFQaXhl
bCAmJiAoYWxwaGEgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fc2Vlbk5vblplcm9B
bHBoYVBpeGVsICYmICFhbHBoYSkgewogICAgICAgICAgICAgICAgICAgICBtX3NlZW5aZXJvQWxw
aGFQaXhlbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGFscGhhID0gMjU1OwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC03NjksMTIgKzcyMSwxMiBAQCBib29sIEJNUEltYWdlUmVh
ZGVyOjpwcm9jZXNzTm9uUkxFRGF0YShiCiAgICAgICAgIC8vIFN1Y2Nlc3MsIGtlZXAgZ29pbmcu
CiAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSBwYWRkZWROdW1CeXRlczsKICAgICAgICAgaWYg
KGluUkxFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3Vj
Y2VzczsKICAgICAgICAgbW92ZUJ1ZmZlclRvTmV4dFJvdygpOwogICAgIH0KIAogICAgIC8vIEZp
bmlzaGVkIGRlY29kaW5nIHdob2xlIGltYWdlLgotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBTdWNjZXNzOwogfQogCiB2b2lkIEJNUEltYWdlUmVhZGVyOjptb3ZlQnVmZmVyVG9OZXh0Um93
KCkKQEAgLTc4MiwxMSArNzM0LDQgQEAgdm9pZCBCTVBJbWFnZVJlYWRlcjo6bW92ZUJ1ZmZlclRv
TmV4dFJvdwogICAgIG1fY29vcmQubW92ZSgtbV9jb29yZC54KCksIG1faXNUb3BEb3duID8gMSA6
IC0xKTsKIH0KIAotYm9vbCBCTVBJbWFnZVJlYWRlcjo6c2V0RmFpbGVkKCkKLXsKLSAgICBtX3Bh
cmVudC0+c2V0RmFpbGVkKCk7Ci0gICAgbV9jb2xvclRhYmxlLmNsZWFyKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgJKHJldmlz
aW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICB1aW50MzJfdCByZXN1bHQ7CiAgICAgICAgICAgICBtZW1jcHko
JnJlc3VsdCwgJmRhdGEtPmRhdGEoKVtvZmZzZXRdLCA0KTsKICAgICAgICAgI2lmIENQVShCSUdf
RU5ESUFOKQotICAgICAgICAgICAgcmVzdWx0ID0gKChyZXN1bHQgJiAweGZmKSA8PCAyNCkgfCAo
KHJlc3VsdCAmIDB4ZmYwMCkgPDwgOCkgfAotICAgICAgICAgICAgICAgICgocmVzdWx0ICYgMHhm
ZjAwMDApID4+IDgpIHwgKChyZXN1bHQgJiAweGZmMDAwMDAwKSA+PiAyNCk7CisgICAgICAgICAg
ICByZXN1bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0KSB8ICgocmVzdWx0ICYgMHhmZjAwKSA8
PCA4KSB8ICgocmVzdWx0ICYgMHhmZjAwMDApID4+IDgpIHwgKChyZXN1bHQgJiAweGZmMDAwMDAw
KSA+PiAyNCk7CiAgICAgICAgICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgfQpAQCAtNjcsMTAgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAv
LyB8c3RhcnRPZmZzZXR8IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIEJNUCB3aXRoaW4gdGhl
IGZpbGUuCiAgICAgICAgIC8vIHxidWZmZXJ8IHBvaW50cyBhdCBhbiBlbXB0eSBSR0JBMzJCdWZm
ZXIgdGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAogICAgICAgICAvLyBmaWxsIHdpdGggZGVjb2Rl
ZCBkYXRhLgotICAgICAgICBCTVBJbWFnZVJlYWRlcihJbWFnZURlY29kZXIqIHBhcmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29kZWRBbmRIZWFkZXJPZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbWdEYXRhT2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHVzZXNBbmRNYXNrKTsKKyAgICAgICAgQk1QSW1hZ2VSZWFkZXIoSW1hZ2VE
ZWNvZGVyKiBwYXJlbnQsIHNpemVfdCBkZWNvZGVkQW5kSGVhZGVyT2Zmc2V0LCBzaXplX3QgaW1n
RGF0YU9mZnNldCwgYm9vbCB1c2VzQW5kTWFzayk7CiAKICAgICAgICAgdm9pZCBzZXRCdWZmZXIo
UkdCQTMyQnVmZmVyKiBidWZmZXIpIHsgbV9idWZmZXIgPSBidWZmZXI7IH0KICAgICAgICAgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CkBAIC0xMDEs
NiArOTcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgTm90WWV0RGVjb2Rl
ZCwKICAgICAgICAgICAgIERlY29kaW5nLAogICAgICAgICB9OworICAgICAgICBlbnVtIFByb2Nl
c3NpbmdSZXN1bHQgeworICAgICAgICAgICAgU3VjY2VzcywKKyAgICAgICAgICAgIEZhaWx1cmUs
CisgICAgICAgICAgICBJbnN1ZmZpY2llbnREYXRhLAorICAgICAgICB9OwogCiAgICAgICAgIC8v
IFRoZXNlIGFyZSBiYXNlZCBvbiB0aGUgV2luZG93cyBCSVRNQVBJTkZPSEVBREVSIGFuZCBSR0JU
UklQTEUKICAgICAgICAgLy8gc3RydWN0cywgYnV0IHdpdGggdW5uZWNlc3NhcnkgZW50cmllcyBy
ZW1vdmVkLgpAQCAtMTY1LDIzICsxNjYsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIC8vIFByb2Nlc3NlcyBhIHNldCBvZiBub24tUkxFLWNvbXByZXNzZWQgcGl4ZWxzLiAgVHdv
IGNhc2VzOgogICAgICAgICAvLyAgICogaW5STEUgPSB0cnVlOiB0aGUgZGF0YSBpcyBpbnNpZGUg
YW4gUkxFLWVuY29kZWQgYml0bWFwLiAgVHJpZXMgdG8KLSAgICAgICAgLy8gICAgIHByb2Nlc3Mg
fG51bVBpeGVsc3wgcGl4ZWxzIG9uIHRoZSBjdXJyZW50IHJvdzsgcmV0dXJucyB0cnVlIG9uCi0g
ICAgICAgIC8vICAgICBzdWNjZXNzLgorICAgICAgICAvLyAgICAgcHJvY2VzcyB8bnVtUGl4ZWxz
fCBwaXhlbHMgb24gdGhlIGN1cnJlbnQgcm93LgogICAgICAgICAvLyAgICogaW5STEUgPSBmYWxz
ZTogdGhlIGRhdGEgaXMgaW5zaWRlIGEgbm9uLVJMRS1lbmNvZGVkIGJpdG1hcC4KICAgICAgICAg
Ly8gICAgIHxudW1QaXhlbHN8IGlzIGlnbm9yZWQuICBFeHBlY3RzIHxtX2Nvb3JkfCB0byBwb2lu
dCBhdCB0aGUKICAgICAgICAgLy8gICAgIGJlZ2lubmluZyBvZiB0aGUgbmV4dCByb3cgdG8gYmUg
ZGVjb2RlZC4gIFRyaWVzIHRvIHByb2Nlc3MgYXMKLSAgICAgICAgLy8gICAgIG1hbnkgY29tcGxl
dGUgcm93cyBhcyBwb3NzaWJsZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2hvbGUgaW1hZ2UKLSAg
ICAgICAgLy8gICAgIHdhcyBkZWNvZGVkLgotICAgICAgICBib29sIHByb2Nlc3NOb25STEVEYXRh
KGJvb2wgaW5STEUsIGludCBudW1QaXhlbHMpOworICAgICAgICAvLyAgICAgbWFueSBjb21wbGV0
ZSByb3dzIGFzIHBvc3NpYmxlLiAgUmV0dXJucyBJbnN1ZmZpY2llbnREYXRhIGlmCisgICAgICAg
IC8vICAgICB0aGVyZSB3YXNuJ3QgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIHRoZSB3aG9sZSBpbWFn
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgUHJvY2Vz
c2luZ1Jlc3VsdCBpbnN0ZWFkIG9mIGEgYm9vbCBzbyB0aGF0IGl0CisgICAgICAgIC8vIGNhbiBh
dm9pZCBjYWxsaW5nIG1fcGFyZW50LT5zZXRGYWlsZWQoKSwgd2hpY2ggY291bGQgbGVhZCB0byBt
ZW1vcnkKKyAgICAgICAgLy8gY29ycnVwdGlvbiBzaW5jZSB0aGF0IHdpbGwgZGVsZXRlIHx0aGlz
fCBidXQgc29tZSBjYWxsZXJzIHN0aWxsIHdhbnQKKyAgICAgICAgLy8gdG8gYWNjZXNzIG1lbWJl
ciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyByZXR1cm5zLgorICAgICAgICBQcm9jZXNzaW5nUmVzdWx0
IHByb2Nlc3NOb25STEVEYXRhKGJvb2wgaW5STEUsIGludCBudW1QaXhlbHMpOwogCiAgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCB5LWNvb3JkaW5hdGUgcGx1cyB8bnVtUm93
c3wgd291bGQgYmUgcGFzdAogICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gIEhlcmUg
InBsdXMiIG1lYW5zICJ0b3dhcmQgdGhlIGVuZCBvZiB0aGUKICAgICAgICAgLy8gaW1hZ2UiLCBz
byBkb3dud2FyZHMgZm9yIG1faXNUb3BEb3duIGltYWdlcyBhbmQgdXB3YXJkcyBvdGhlcndpc2Uu
CiAgICAgICAgIGlubGluZSBib29sIHBhc3RFbmRPZkltYWdlKGludCBudW1Sb3dzKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9pc1RvcERvd24KLSAgICAgICAgICAgICAgICA/ICgo
bV9jb29yZC55KCkgKyBudW1Sb3dzKSA+PSBtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpKQotICAg
ICAgICAgICAgICAgIDogKChtX2Nvb3JkLnkoKSAtIG51bVJvd3MpIDwgMCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9pc1RvcERvd24gPyAoKG1fY29vcmQueSgpICsgbnVtUm93cykgPj0gbV9wYXJl
bnQtPnNpemUoKS5oZWlnaHQoKSkgOiAoKG1fY29vcmQueSgpIC0gbnVtUm93cykgPCAwKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHBpeGVsIGRhdGEgZm9yIHRoZSBjdXJy
ZW50IFggY29vcmRpbmF0ZSBpbiBhIHVpbnQzMl90LgpAQCAtMjAzLDggKzIwNiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbDsKICAgICAgICAg
ICAgICAgICBtZW1jcHkoJnBpeGVsLCAmbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsg
b2Zmc2V0XSwgMyk7CiAgICAgICAgICNpZiBDUFUoQklHX0VORElBTikKLSAgICAgICAgICAgICAg
ICBwaXhlbCA9ICgocGl4ZWwgJiAweGZmMDApIDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+
PiA4KSB8Ci0gICAgICAgICAgICAgICAgICAgICgocGl4ZWwgJiAweGZmMDAwMDAwKSA+PiAyNCk7
CisgICAgICAgICAgICAgICAgcGl4ZWwgPSAoKHBpeGVsICYgMHhmZjAwKSA8PCA4KSB8ICgocGl4
ZWwgJiAweGZmMDAwMCkgPj4gOCkgfCAoKHBpeGVsICYgMHhmZjAwMDAwMCkgPj4gMjQpOwogICAg
ICAgICAjZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gcGl4ZWw7CiAgICAgICAgICAgICB9
CkBAIC0yMjIsMTcgKzIyNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGlu
IHRoZSBnaXZlbiBwaXhlbCBkYXRhLgogICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0Q29tcG9u
ZW50KHVpbnQzMl90IHBpeGVsLCBpbnQgY29tcG9uZW50KSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKChwaXhlbCAmIG1fYml0TWFza3NbY29tcG9uZW50XSkgPj4KLSAgICAg
ICAgICAgICAgICBtX2JpdFNoaWZ0c1JpZ2h0W2NvbXBvbmVudF0pIDw8IG1fYml0U2hpZnRzTGVm
dFtjb21wb25lbnRdOworICAgICAgICAgICAgcmV0dXJuICgocGl4ZWwgJiBtX2JpdE1hc2tzW2Nv
bXBvbmVudF0pID4+IG1fYml0U2hpZnRzUmlnaHRbY29tcG9uZW50XSkgPDwgbV9iaXRTaGlmdHNM
ZWZ0W2NvbXBvbmVudF07CiAgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0
QWxwaGEodWludDMyX3QgcGl4ZWwpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZv
ciBpbWFnZXMgd2l0aG91dCBhbHBoYSwgcmV0dXJuIGFscGhhIG9mIDB4ZmYuCi0gICAgICAgICAg
ICBpZiAobV9iaXRNYXNrc1szXSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAweGZmOwot
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2JpdE1hc2tzWzNdID8gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKSA6IDB4ZmY7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHBpeGVsIHRvIHRoZSBjb2xv
ciBnaXZlbiBieSB8Y29sb3JJbmRleHwuICBUaGlzIGFsc28KQEAgLTI0MCw5ICsyMzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHJpZ2h0IGJ5IG9uZS4KICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0SShzaXplX3QgY29sb3JJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAg
c2V0UkdCQShtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiUmVkLAotICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiR3JlZW4sCi0gICAgICAgICAgICAgICAg
ICAgIG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5yZ2JCbHVlLCAweGZmKTsKKyAgICAgICAgICAg
IHNldFJHQkEobV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYlJlZCwgbV9jb2xvclRhYmxlW2Nv
bG9ySW5kZXhdLnJnYkdyZWVuLCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiQmx1ZSwgMHhm
Zik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0IHdpdGggdGhlIGlu
ZGl2aWR1YWwgY29tcG9uZW50IHZhbHVlcyBzcGVjaWZpZWQuCkBAIC0yNTEsOCArMjQ3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3Jk
LnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
cGhhKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3Jk
LnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICAgICAgbV9jb29yZC5tb3Zl
KDEsIDApOwogICAgICAgICB9CiAKQEAgLTI3NSwxMSArMjcwLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHxtX2lzVG9wRG93bnwu
CiAgICAgICAgIHZvaWQgbW92ZUJ1ZmZlclRvTmV4dFJvdygpOwogCi0gICAgICAgIC8vIFNldHMg
dGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZyBhbmQgY2xlYXJzIGFueSBsb2NhbCBzdG9yYWdlLiAg
Rm9yCi0gICAgICAgIC8vIGNhbGxlciBjb252ZW5pZW5jZSAoc2luY2Ugc28gbWFueSBjYWxsZXJz
IHdhbnQgdG8gcmV0dXJuIGZhbHNlIGFmdGVyCi0gICAgICAgIC8vIGNhbGxpbmcgdGhpcyksIHJl
dHVybnMgZmFsc2UgdG8gZW5hYmxlIGVhc3kgdGFpbGNhbGxpbmcuCi0gICAgICAgIGJvb2wgc2V0
RmFpbGVkKCk7Ci0KICAgICAgICAgLy8gVGhlIGRlY29kZXIgdGhhdCBvd25zIHVzLgogICAgICAg
ICBJbWFnZURlY29kZXIqIG1fcGFyZW50OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNDYgKzQwLDQ1IEBAIEdJRkltYWdlRGVj
b2Rlcjo6fkdJRkltYWdlRGVjb2RlcigpCiB7CiB9CiAKLS8vIFRha2UgdGhlIGRhdGEgYW5kIHN0
b3JlIGl0Lgogdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZh
aWxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDYWNoZSBvdXIgbmV3IGRhdGEuCiAg
ICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAKICAgICAv
LyBPdXIgZnJhbWUgY291bnQgaXMgbm93IHVua25vd24uCiAgICAgbV9mcmFtZUNvdW50VmFsaWQg
PSBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSB0aGUgR0lGIHJlYWRlci4KLSAgICBpZiAoIW1fcmVh
ZGVyICYmICFtX2ZhaWxlZCkKLSAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBHSUZJbWFnZVJlYWRl
cih0aGlzKSk7CiB9CiAKLS8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhh
cyBiZWVuIGRlY29kZWQgeWV0LgogYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWls
ZWQoKSAmJiBtX3JlYWRlcikKLSAgICAgICAgIGRlY29kZShHSUZTaXplUXVlcnksIDApOworICAg
IGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSkKKyAgICAgICAgIGRlY29kZSgw
LCBHSUZTaXplUXVlcnkpOwogCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCk7CiB9CiAKLS8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2Uu
ICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIKLS8vICh3aXRob3V0IG5l
Y2Vzc2FyaWx5IGRlY29kaW5nIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgorYm9vbCBH
SUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkK
K3sKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQo
KQogewotICAgIC8vIElmIHRoZSBkZWNvZGVyIGhhZCBhbiBlYXJsaWVyIGVycm9yLCB3ZSB3aWxs
IGp1c3QgcmV0dXJuIHdoYXQgd2UgaGFkIGRlY29kZWQKLSAgICAvLyBzbyBmYXIuCiAgICAgaWYg
KCFtX2ZyYW1lQ291bnRWYWxpZCkgewotICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRo
ZSBkYXRhIGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0byBjb21lIGluIHJl
YWxseQotICAgICAgICAvLyBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8g
Y2xvbmUgb3VyIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZQotICAgICAgICAvLyBz
dGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQg
dGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQKLSAgICAgICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1h
YyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCisgICAgICAg
IC8vIEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlvciBpZiB0
aGUgZGF0YSB3ZXJlIHRvCisgICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4gIE1pZ2h0
IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKKyAgICAgICAgLy8gZXhpc3Rpbmcg
cmVhZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXds
CisgICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRo
YW4gd2hhdCBJbWFnZUlPIGRvZXMgb24KKyAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxz
byBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KICAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVh
ZGVyKDApOwogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBmYWlsLCBidXQgd2Ugd2FudCB0
byBrZWVwIGFueSBwYXJ0aWFsIGRhdGEgaXQgbWF5Ci0gICAgICAgIC8vIGhhdmUgZGVjb2RlZCwg
c28gZG9uJ3QgbWFyayBpdCBpcyBpbnZhbGlkLiBJZiB0aGVyZSBpcyBhbiBvdmVyZmxvdworICAg
ICAgICAvLyBoYXZlIGRlY29kZWQsIHNvIGRvbid0IG1hcmsgaXQgYXMgaW52YWxpZC4gSWYgdGhl
cmUgaXMgYW4gb3ZlcmZsb3cKICAgICAgICAgLy8gb3Igc29tZSBzZXJpb3VzIGVycm9yLCBtX2Zh
aWxlZCB3aWxsIGhhdmUgZ290dGVuIHNldCBmb3IgdXMuCiAgICAgICAgIHJlYWRlci5yZWFkKChj
b25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZy
YW1lQ291bnRRdWVyeSwgLTEpOwogICAgICAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IHRydWU7CkBA
IC04OSw3ICs4OCw2IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAg
IHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQogCi0vLyBUaGUgbnVtYmVyIG9m
IHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogaW50IEdJRklt
YWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKIHsKICAgICAvLyBUaGlzIHZhbHVl
IGNhbiBhcnJpdmUgYXQgYW55IHBvaW50IGluIHRoZSBpbWFnZSBkYXRhIHN0cmVhbS4gIE1vc3Qg
R0lGcwpAQCAtMTE4LDEwICsxMTYsMTYgQEAgUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQnVmZgogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRl
eF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSAmJiBtX3JlYWRlcikKLSAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwgaW5kZXggKyAxKTsg
Ly8gRGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgcmV0dXJuICZmcmFtZTsKKyAgICBSR0JBMzJCdWZm
ZXIqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGlmIChidWZmZXIt
PnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVjb2Rl
KGluZGV4ICsgMSwgR0lGRnVsbFF1ZXJ5KTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitib29s
IEdJRkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKK3sKKyAgICBtX3JlYWRlci5jbGVhcigpOwor
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxlZCgpOwogfQogCiB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQpA
QCAtMTc0LDEyMCArMTc4LDEyIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVm
ZmVyQ2EKICAgICB9CiB9CiAKLS8vIEZlZWQgZGF0YSB0byB0aGUgR0lGIHJlYWRlci4KLXZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKQotewotICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mYWls
ZWQgPSAhbV9yZWFkZXItPnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgp
ICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEtPnNpemUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhh
bHRBdEZyYW1lKTsKLSAgICAKLSAgICBpZiAobV9mYWlsZWQpCi0gICAgICAgIG1fcmVhZGVyLmNs
ZWFyKCk7Ci19Ci0KLS8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgotYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKLXsKLSAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2lnbmVk
IGJ5dGVzTGVmdCkKIHsKICAgICBtX3JlYWRPZmZzZXQgPSBtX2RhdGEtPnNpemUoKSAtIGJ5dGVz
TGVmdDsKIH0KIAotYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZUluZGV4KQotewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3Vy
IGJ1ZmZlci4KLSAgICBjb25zdCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRl
ci0+ZnJhbWVfcmVhZGVyOwotICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lUmVhZGVyLT54X29m
ZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0LCBmcmFtZVJlYWRlci0+d2lkdGgsIGZyYW1lUmVh
ZGVyLT5oZWlnaHQpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBl
eHRlbmQgcGFzdCB0aGUgYm90dG9tLXJpZ2h0IG9mIHRoZSBidWZmZXIuCi0gICAgaWYgKGZyYW1l
UmVjdC5yaWdodCgpID4gc2l6ZSgpLndpZHRoKCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0
aChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCk7Ci0gICAgaWYgKGZyYW1l
UmVjdC5ib3R0b20oKSA+IHNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNldEhl
aWdodChzaXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOwotCi0gICAgUkdC
QTMyQnVmZmVyKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhd
OwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAg
aW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LnJpZ2h0KCksIGxlZnQpOwot
ICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICBpbnQg
Ym90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LmJvdHRvbSgpLCB0b3ApOwotICAg
IGJ1ZmZlci0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20g
LSB0b3ApKTsKLQotICAgIGlmIChmcmFtZUluZGV4ID09IDApIHsKLSAgICAgICAgLy8gVGhpcyBp
cyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBk
YXRhLgotICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwg
c2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgewotICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHBy
ZXZpb3VzIGZyYW1lJ3MKLSAgICAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgotICAgICAgICAvLwot
ICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyBt
ZXRob2QgYXJlIGVmZmVjdGl2ZWx5Ci0gICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFu
Z2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJlZCB0bwotICAgICAgICAv
LyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIg
dGhlbS4gIChJZiB0aGUKLSAgICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0
aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVkIGxpa2UKLSAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0
ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCi0g
ICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0
aG9kIHByZXZNZXRob2QgPQotICAgICAgICAgICAgcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KTsKLSAgICAgICAgd2hpbGUgKChmcmFtZUluZGV4ID4gMCkKLSAgICAgICAgICAgICAgICYmIChw
cmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkgewot
ICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4
XTsKLSAgICAgICAgICAgIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgp
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwotCi0gICAgICAgIGlmICgocHJldk1ldGhvZCA9PSBS
R0JBMzJCdWZmZXI6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpIHx8Ci0gICAgICAgICAgICAgICAgKHBy
ZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlS2VlcCkpIHsKLSAgICAgICAgICAgIC8v
IFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBm
cmFtZS4KLSAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJl
dmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKLSAgICAgICAgICAgIC8vIGFmZmVj
dGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5yZWN0KCk7Ci0gICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2NhbGVkU2l6ZSgpOwotICAgICAgICAg
ICAgaWYgKChmcmFtZUluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgfHwgcHJldlJlY3QuY29u
dGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXJTaXplKSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhl
IHdob2xlCi0gICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5
IGVtcHR5IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZl
clNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8g
Q29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1l
LgotICAgICAgICAgICAgICBidWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKLSAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsgeSA8IHByZXZSZWN0LmJvdHRv
bSgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7
IHggPCBwcmV2UmVjdC5yaWdodCgpOyArK3gpCi0gICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
LT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2UmVjdC5oZWlnaHQoKSA+IDAp
KQotICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJl
IHBhcnRpYWxseSBjb21wbGV0ZS4KLSAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lUGFydGlhbCk7Ci0KLSAgICAvLyBSZXNldCB0aGUgYWxwaGEgcGl4ZWwgdHJhY2tlciBm
b3IgdGhpcyBmcmFtZS4KLSAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3co
dW5zaWduZWQgZnJhbWVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogcm93RW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJvd051bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpCitib29sIEdJRklt
YWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQg
Y2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051bWJl
ciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscykKIHsK
ICAgICBjb25zdCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRlci0+ZnJhbWVf
cmVhZGVyOwogICAgIC8vIFRoZSBwaXhlbCBkYXRhIGFuZCBjb29yZGluYXRlcyBzdXBwbGllZCB0
byB1cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGZyYW1lJ3MKQEAgLTM0OCwxMyArMjQ0LDEzIEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVm
ZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQogewogICAgIC8vIEluaXRp
YWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGlu
ZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2Rl
ZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgaWYgKChidWZmZXIuc3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5k
ZXgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0
RHVyYXRpb24oZnJhbWVEdXJhdGlvbik7CkBAIC0zNjUsNyArMjYxLDcgQEAgdm9pZCBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAvLyByZXN1bHRpbmcgYnVmZmVy
IHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFsc2UpLgogICAg
ICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxl
ZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICAg
ICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKKyAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRl
eCkgewogICAgICAgICAgICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhh
dmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCiAgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyBy
ZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4gIFRvIGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAg
ICAgICAvLyB0cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlm
IGl0IGRvZXNuJ3QgaGF2ZQpAQCAtMzc1LDggKzI3MSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvbXBsZXRlKHVuc2kKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3Rh
cnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAg
ICAvLyBpbml0RnJhbWVCdWZmZXIoKS4KICAgICAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciog
cHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAg
ICAgIHdoaWxlICgoZnJhbWVJbmRleCA+IDApCi0gICAgICAgICAgICAgICAgICAgJiYgKHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMpKQorICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXIt
PmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXMpKQogICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0t
ZnJhbWVJbmRleF07CiAKICAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3Nl
Tm90U3BlY2lmaWVkIG9yIERpc3Bvc2VLZWVwIGZyYW1lLCB0aGVuCkBAIC0zODcsMTEgKzI4Miwx
MiBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAg
ICAvLyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9y
IGZyYW1lLiAgSWYKICAgICAgICAgICAgIC8vIGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0
IGlzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0
LCB3ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1lIGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlm
ICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VP
dmVyd3JpdGVCZ2NvbG9yKQotICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBo
YSgpICYmIGJ1ZmZlci5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cmVjdCgpKSkKKyAgICAg
ICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6
OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBi
dWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCiAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQpAQCAt
NDAxLDQgKzI5Nyw5MiBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogICAg
IG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKK3ZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5z
aWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQoreworICAgIGlmIChmYWlsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3JlYWRlcikKKyAgICAgICAgbV9yZWFkZXIu
c2V0KG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CisKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBk
ZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5n
CisgICAgLy8gaGFzIGZhaWxlZC4KKyAgICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNp
Z25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkg
LSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQo
KSkKKyAgICAgICAgc2V0RmFpbGVkKCk7Cit9CisKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0
RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHRo
ZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCisgICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZy
YW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKKyAgICBJbnRSZWN0IGZyYW1lUmVj
dChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVSZWFk
ZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJ1ZmZlci4KKyAgICBpZiAoZnJh
bWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldFdp
ZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICBpZiAoZnJh
bWVSZWN0LmJvdHRvbSgpID4gc2l6ZSgpLmhlaWdodCgpKQorICAgICAgICBmcmFtZVJlY3Quc2V0
SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lUmVhZGVyLT55X29mZnNldCk7CisKKyAgICBS
R0JBMzJCdWZmZXIqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRl
eF07CisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAg
ICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7
CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGlu
dCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QuYm90dG9tKCksIHRvcCk7Cisg
ICAgYnVmZmVyLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRv
bSAtIHRvcCkpOworICAgIAorICAgIGlmICghZnJhbWVJbmRleCkgeworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3Vz
IGRhdGEuCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgp
LCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBm
cmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAgICAgIC8vIGRpc3Bvc2Fs
IG1ldGhvZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBu
by1vcHMgaW4gdGVybXMgb2YgY2hhbmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUg
Y29tcGFyZWQgdG8KKyAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2aW91
cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCisgICAgICAgIC8vIGZpcnN0IGZy
YW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCisgICAg
ICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBs
ZXRlbHkgZW1wdHkgaW1hZ2UuKQorICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAgICAgIFJHQkEzMkJ1
ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKTsKKyAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRob2QgPT0g
UkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgICAgICAgICBw
cmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgICAgICAg
ICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSk7CisKKyAgICAgICAgaWYgKChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6
RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwgKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNw
b3NlS2VlcCkpIHsKKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRo
ZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KKyAgICAgICAgICAgIGJ1ZmZlci0+Y29w
eUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdp
dGhvdXQKKyAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNp
ZGUgb2YgdGhlIGZyYW1lLgorICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBw
cmV2QnVmZmVyLT5yZWN0KCk7CisgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXpl
ID0gc2NhbGVkU2l6ZSgpOworICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUg
b2YgdGhlIHdob2xlCisgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21w
bGV0ZWx5IGVtcHR5IGltYWdlLgorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXpl
KGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0
IGl0cyBmcmFtZS4KKyAgICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1
ZmZlcik7CisgICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2
UmVjdC5ib3R0b20oKTsgKyt5KSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gcHJl
dlJlY3QueCgpOyB4IDwgcHJldlJlY3QucmlnaHQoKTsgKyt4KQorICAgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJlY3QuaGVp
Z2h0KCkgPiAwKSkKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVcGRhdGUgb3VyIHN0
YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCisgICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdC
QTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworCisgICAgLy8gUmVzZXQgdGhlIGFscGhhIHBpeGVs
IHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUuCisgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmgJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDQ1ICsz
Nyw0MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR0lGSW1hZ2VEZWNvZGVyIDog
cHVibGljIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgogICAgICAgICBHSUZJbWFnZURlY29k
ZXIoKTsKLSAgICAgICAgfkdJRkltYWdlRGVjb2RlcigpOworICAgICAgICB2aXJ0dWFsIH5HSUZJ
bWFnZURlY29kZXIoKTsKIAotICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuICJnaWYiOyB9CisgICAgICAgIGVudW0gR0lGUXVlcnkgeyBHSUZG
dWxsUXVlcnksIEdJRlNpemVRdWVyeSwgR0lGRnJhbWVDb3VudFF1ZXJ5IH07CiAKLSAgICAgICAg
Ly8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCisgICAgICAgIC8vIEltYWdlRGVjb2Rlcgor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJu
ICJnaWYiOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRo
ZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgLy8gVGhlIHRvdGFsIG51bWJlciBv
ZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhl
IGFuc3dlcgotICAgICAgICAvLyAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2Yg
dGhlIGluZGl2aWR1YWwgZnJhbWVzKS4KKyAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAgICAgIHZpcnR1YWwgc2l6ZV90IGZy
YW1lQ291bnQoKTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBl
cmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0
aW9uQ291bnQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KKyAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFp
bGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAorICAgICAgICAv
LyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMg
ZnJvbSBpbnNpZGUKKyAgICAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBzZXRGYWlsZWQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJD
YWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKLSAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIDA7IH0KLQotICAg
ICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1l
Q291bnRRdWVyeSB9OwotCi0gICAgICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSk7Ci0KICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIu
Ci0gICAgICAgIGJvb2wgc2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0KTsKICAgICAgICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQp
OwotICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2ln
bmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dO
dW1iZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50
LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwotICAgICAgICB2b2lkIGZyYW1lQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVm
ZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgYm9vbCBo
YXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKKyAgICAgICAgYm9vbCBm
cmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24s
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CiAgICAg
ICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIENhbGxl
ZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJh
c2VkIG9uIHRoZQotICAgICAgICAvLyBwcmV2aW91cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4g
UmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsCi0gICAgICAgIC8vIHRoaXMgd2ls
bCBtYXJrIHRoZSBpbWFnZSBhcyBmYWlsZWQuCisgICAgICAgIC8vIElmIHRoZSBxdWVyeSBpcyBH
SUZGdWxsUXVlcnksIGRlY29kZXMgdGhlIGltYWdlIHVwIHRvIChidXQgbm90CisgICAgICAgIC8v
IGluY2x1ZGluZykgfGhhbHRBdEZyYW1lfC4gIE90aGVyd2lzZSwgZGVjb2RlcyBhcyBtdWNoIGFz
IGlzIG5lZWRlZCB0bworICAgICAgICAvLyBhbnN3ZXIgdGhlIHF1ZXJ5LCBpZ25vcmluZyBiaXRt
YXAgZGF0YS4gIElmIGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZQorICAgICAgICAvLyBpcyBubyBt
b3JlIGRhdGEgY29taW5nLCBzZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuCisgICAgICAg
IHZvaWQgZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSk7CisKKyAgICAgICAg
Ly8gQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBp
bmRleCwgYmFzZWQgb24KKyAgICAgICAgLy8gdGhlIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwg
bWV0aG9kLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24KKyAgICAgICAgLy8gZmFpbHVyZSwg
dGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJh
bWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7CiAKICAgICAgICAgYm9vbCBtX2ZyYW1lQ291
bnRWYWxpZDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTAsNyArMjkwLDkgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0
IHVuc2lnbgogICAgICAgLyogQ2hlY2sgZm9yIGV4cGxpY2l0IGVuZC1vZi1zdHJlYW0gY29kZSAq
LwogICAgICAgaWYgKGNvZGUgPT0gKGNsZWFyX2NvZGUgKyAxKSkgewogICAgICAgICAvKiBlbmQt
b2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0YSAqLwotICAg
ICAgICByZXR1cm4gcm93c19yZW1haW5pbmcgPT0gMDsKKyAgICAgICAgaWYgKHJvd3NfcmVtYWlu
aW5nID09IDApCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjbGllbnRw
dHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAKICAgICAgIGlm
IChvbGRjb2RlID09IC0xKSB7CkBAIC0zMDgsMTMgKzMxMCwxMyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpkb19sencoY29uc3QgdW5zaWduCiAgICAgICAgIGNvZGUgPSBvbGRjb2RlOwogCiAgICAg
ICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJfY29kZSkKICAg
ICAgIHsKICAgICAgICAgaWYgKGNvZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29k
ZV0pCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBjbGllbnRwdHIg
PyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAKICAgICAgICAgLy8gRXZlbiB0aG91
Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0g
MV0sCiAgICAgICAgIC8vIGFsbG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1v
cmUgdG9sZXJhbnQgb2YgbWFsZm9ybWVkCkBAIC0zMjQsNyArMzI2LDcgQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbgogICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVd
OwogCiAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgKnN0YWNrcCsrID0gZmlyc3RjaGFy
ID0gc3VmZml4W2NvZGVdOwpAQCAtNDE1LDcgKzQxNyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKICAgICAg
IGlmIChjbGllbnRwdHIpCiAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVz
ZXQgaG9sZCBidWZmZXIgY291bnQKICAgICBieXRlc19pbl9ob2xkID0gMDsKQEAgLTQ0MCwxMCAr
NDQyLDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgIHN3
aXRjaCAoc3RhdGUpCiAgICAgewogICAgIGNhc2UgZ2lmX2x6dzoKLSAgICAgIGlmICghZG9fbHp3
KHEpKSB7Ci0gICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KKyAgICAgIGlmICghZG9fbHp3KHEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICBH
RVROKDEsIGdpZl9zdWJfYmxvY2spOwogICAgICAgYnJlYWs7CiAKQEAgLTQ1NCwxNSArNDU0LDEx
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIC8vIFNp
bmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVl
ZCB0byBlbnN1cmUKICAgICAgIC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3Mg
dGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCiAgICAgICAvLyBUaGlzIHNldHMgdGhl
IGxhcmdlc3QgcG9zc2libGUgY29kZW1hc2sgY29ycmVjdGx5IGF0IDQwOTUuCi0gICAgICBpZiAo
ZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKSB7Ci0gICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJ
VFMpCisgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDog
ZmFsc2U7CiAgICAgICBpbnQgY2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7Ci0gICAgICBpZiAo
Y2xlYXJfY29kZSA+PSBNQVhfQklUUykgewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgICBpZiAoY2xlYXJfY29kZSA+PSBNQVhfQklUUykK
KyAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKIAogICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewogICAgICAgICBmcmFtZV9yZWFkZXItPmRh
dGFzaXplID0gZGF0YXNpemU7CkBAIC00OTQsMTQgKzQ5MCwxMiBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgLyogQWxsIEdJRiBmaWxlcyBiZWdpbiB3aXRo
ICJHSUY4N2EiIG9yICJHSUY4OWEiICovCiAgICAgY2FzZSBnaWZfdHlwZToKICAgICB7Ci0gICAg
ICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkgeworICAgICAgaWYgKCFzdHJu
Y21wKChjaGFyKilxLCAiR0lGODlhIiwgNikpCiAgICAgICAgIHZlcnNpb24gPSA4OTsKLSAgICAg
IH0gZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkgeworICAgICAgZWxz
ZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkKICAgICAgICAgdmVyc2lvbiA9
IDg3OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gY2xpZW50cHRyID8g
Y2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgR0VUTig3LCBnaWZfZ2xvYmFs
X2hlYWRlcik7CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNTE5LDcgKzUxMyw3IEBAIGJvb2wgR0lG
SW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIHNjcmVlbl9oZWlnaHQgPSBH
RVRJTlQxNihxICsgMik7CiAKICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJw
bHVnaW4gb2Ygb3VyIHNpemUuCi0gICAgICBpZiAoY2xpZW50cHRyICYmICFjbGllbnRwdHItPnNp
emVOb3dBdmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKKyAgICAgIGlmIChj
bGllbnRwdHIgJiYgIWNsaWVudHB0ci0+c2V0U2l6ZShzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWln
aHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAKICAgICAgIHNjcmVlbl9iZ2NvbG9y
ID0gcVs1XTsKQEAgLTU4Niw3ICs1ODAsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNv
bnN0IHVuc2lnbmVkCiAgICAgICAgICAgc3RhdGUgPSBnaWZfZG9uZTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAvKiBObyBpbWFnZXMgZGVjb2RlZCwgdGhlcmUgaXMgbm90aGluZyB0byBk
aXNwbGF5LiAqLwotICAgICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOworICAgICAgICAgIHJldHVy
biBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgICB9IGVsc2UKQEAgLTcxMiw5ICs3MDYsMTAgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICAvLyBhbmQgZG9lc24n
dCBkbyBhbnl0aGluZywgYXMgb3VyIHN0cmVhbWluZy9idWZmZXJpbmcgdGFrZXMgY2FyZSBvZiBp
dCBhbGwuLi4KICAgICAgICAgLy8gU2VlOiBodHRwOi8vc2VtbWl4LnBsL2NvbG9yL2V4Z3JhZi9l
ZWcyNC5odG0KICAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsK
LSAgICAgIH0gZWxzZQotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsgLy8gMCwzLTcgYXJlIHll
dCB0byBiZSBkZWZpbmVkIG5ldHNjYXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZXh0ZW5zaW9uIGNvZGVzCisgICAgICB9IGVsc2UgeworICAgICAgICAvLyAwLDMtNyBhcmUg
eWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVzCisgICAgICAgIHJldHVy
biBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICB9CiAK
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc0NSw3ICs3NDAsNyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIHlfb2Zmc2V0ID0gMDsKIAogICAgICAg
ICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAg
ICAgICBpZiAoY2xpZW50cHRyICYmICFjbGllbnRwdHItPnNpemVOb3dBdmFpbGFibGUoc2NyZWVu
X3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKKyAgICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50
cHRyLT5zZXRTaXplKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCiAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgfQogCkBAIC03NTQsMTAgKzc0OSw4IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkg
ewogICAgICAgICBoZWlnaHQgPSBzY3JlZW5faGVpZ2h0OwogICAgICAgICB3aWR0aCA9IHNjcmVl
bl93aWR0aDsKLSAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKSB7Ci0gICAgICAgICAgc3Rh
dGUgPSBnaWZfZXJyb3I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KCFoZWlnaHQgfHwgIXdpZHRoKQorICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRw
dHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAKICAgICAgIGlmIChxdWVyeSA9PSBH
SUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBpbWFnZXNfZGVj
b2RlZCkgewpAQCAtNzkzLDEwICs3ODYsOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNv
bnN0IHVuc2lnbmVkCiAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5zaWdu
ZWQgY2hhcltzY3JlZW5fd2lkdGhdOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFtZV9y
ZWFkZXItPnJvd2J1ZikgewotICAgICAgICAgIHN0YXRlID0gZ2lmX29vbTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKQorICAg
ICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7
CiAgICAgICAgIGlmIChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KQogICAgICAgICAgIHNjcmVlbl9o
ZWlnaHQgPSBoZWlnaHQ7CiAKQEAgLTgzNywxMCArODI4LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYmICghbWFw
IHx8IChudW1fY29sb3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplKSkpIHsK
ICAgICAgICAgICBkZWxldGUgW11tYXA7CiAgICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNo
YXJbc2l6ZV07Ci0gICAgICAgICAgaWYgKCFtYXApIHsKLSAgICAgICAgICAgIHN0YXRlID0gZ2lm
X29vbTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIW1h
cCkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgp
IDogZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBTd2l0Y2ggdG8gdGhlIG5ldyBsb2Nh
bCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzICovCkBAIC04OTIsOSArODgxLDEwIEBAIGJvb2wgR0lG
SW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgICAgaW1hZ2VzX2RlY29kZWQr
KzsKIAogICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAg
ICAgICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgY2xpZW50cHRy
LT5mcmFtZUNvbXBsZXRlKGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5kZWxheV90
aW1lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5k
aXNwb3NhbF9tZXRob2QpOworICAgICAgICBpZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAm
JgorICAgICAgICAgICAgIWNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAt
IDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kKSkKKyAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlICov
CiAgICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKQEAgLTkxMywxNSArOTAzLDYgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICBjbGllbnRwdHItPmdp
ZkNvbXBsZXRlKCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIEhhbmRsZSBvdXQgb2Yg
bWVtb3J5IGVycm9ycwotICAgIGNhc2UgZ2lmX29vbToKLSAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEhhbmRsZSBnZW5lcmFsIGVycm9ycwotICAgIGNhc2UgZ2lmX2Vycm9yOgotICAgICAg
Ly8gbnNHSUZEZWNvZGVyMjo6RW5kR0lGKGdzLT5jbGllbnRwdHIsIGdzLT5sb29wX2NvdW50KTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJl
LgogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTk0Niw1ICs5MjcsNSBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAKICAgaWYgKGNsaWVudHB0cikKICAg
ICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwotICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJu
IGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDggKzY5LDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBnaWZfY29uc3VtZV9ibG9jaywK
ICAgICBnaWZfc2tpcF9ibG9jaywKICAgICBnaWZfZG9uZSwKLSAgICBnaWZfb29tLAotICAgIGdp
Zl9lcnJvciwKKy8vICAgIGdpZl9vb20sCisvLyAgICBnaWZfZXJyb3IsCiAgICAgZ2lmX2NvbW1l
bnRfZXh0ZW5zaW9uLAogICAgIGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24sCiAgICAgZ2lmX25l
dHNjYXBlX2V4dGVuc2lvbl9ibG9jaywKQEAgLTE5NCwxMCArMTk0LDYgQEAgc3RydWN0IEdJRklt
YWdlUmVhZGVyIHsKICAgICB9CiAKICAgICB+R0lGSW1hZ2VSZWFkZXIoKSB7Ci0gICAgICAgIGNs
b3NlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbG9zZSgpIHsKICAgICAgICAgZGVsZXRlIFtdZ2xv
YmFsX2NvbG9ybWFwOwogICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSAwOwogICAgICAgICBkZWxl
dGUgZnJhbWVfcmVhZGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9p
Y28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDExIEBAIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6
ZU9mRGlyZWN0b3J5ID0gNjsKIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRGlyRW50cnkgPSAx
NjsKIAogSUNPSW1hZ2VEZWNvZGVyOjpJQ09JbWFnZURlY29kZXIoKQotICAgIDogSW1hZ2VEZWNv
ZGVyKCkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQotICAgICwgbV9kZWNvZGVkT2Zm
c2V0KDApCisgICAgOiBtX2RlY29kZWRPZmZzZXQoMCkKK3sKK30KKworSUNPSW1hZ2VEZWNvZGVy
Ojp+SUNPSW1hZ2VEZWNvZGVyKCkKIHsKIH0KIApAQCAtNTcsMTAgKzU5LDggQEAgdm9pZCBJQ09J
bWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogICAgICAgICByZXR1cm47CiAKICAgICBJ
bWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICBtX2FsbERh
dGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKIAotICAgIGZvciAoQk1QUmVhZGVyczo6aXRl
cmF0b3IgaShtX2JtcFJlYWRlcnMuYmVnaW4oKSk7Ci0gICAgICAgICBpICE9IG1fYm1wUmVhZGVy
cy5lbmQoKTsgKytpKSB7CisgICAgZm9yIChCTVBSZWFkZXJzOjppdGVyYXRvciBpKG1fYm1wUmVh
ZGVycy5iZWdpbigpKTsgaSAhPSBtX2JtcFJlYWRlcnMuZW5kKCk7ICsraSkgewogICAgICAgICBp
ZiAoKmkpCiAgICAgICAgICAgICAoKmkpLT5zZXREYXRhKGRhdGEpOwogICAgIH0KQEAgLTcxLDcg
KzcxLDcgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogYm9vbCBJ
Q09JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7CiAgICAgaWYgKCFJbWFnZURlY29k
ZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQotICAgICAgICBkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5k
ZWQoMCwgdHJ1ZSk7CisgICAgICAgIGRlY29kZSgwLCB0cnVlKTsKIAogICAgIHJldHVybiBJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQpAQCAtODMsMjUgKzgzLDE5IEBAIEludFNp
emUgSUNPSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKIAogSW50U2l6ZSBJQ09JbWFnZURlY29k
ZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogewotICAgIHJldHVybiAo
aW5kZXggJiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8KLSAgICAgICAgbV9kaXJF
bnRyaWVzW2luZGV4XS5tX3NpemUgOiBzaXplKCk7CisgICAgcmV0dXJuIChpbmRleCAmJiAoaW5k
ZXggPCBtX2RpckVudHJpZXMuc2l6ZSgpKSkgPyBtX2RpckVudHJpZXNbaW5kZXhdLm1fc2l6ZSA6
IHNpemUoKTsKIH0KIAogYm9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBpZiAobV9mcmFtZVNpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotCiAg
ICAgLy8gVGhlIHNpemUgY2FsY3VsYXRlZCBpbnNpZGUgdGhlIEJNUEltYWdlUmVhZGVyIGhhZCBi
ZXR0ZXIgbWF0Y2ggdGhlIG9uZSBpbgogICAgIC8vIHRoZSBpY29uIGRpcmVjdG9yeS4KLSAgICBp
ZiAoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSAhPSBtX2ZyYW1lU2l6ZSkKLSAgICAgICAgc2V0RmFp
bGVkKCk7Ci0gICAgcmV0dXJuICFmYWlsZWQoKTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNF
bXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpIDogKChJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpID09IG1fZnJhbWVTaXplKSB8fCBzZXRGYWlsZWQoKSk7CiB9CiAKIHNp
emVfdCBJQ09JbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewotICAgIGRlY29kZVdpdGhDaGVj
a0ZvckRhdGFFbmRlZCgwLCB0cnVlKTsKKyAgICBkZWNvZGUoMCwgdHJ1ZSk7CiAgICAgaWYgKG1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5y
ZXNpemUobV9kaXJFbnRyaWVzLnNpemUoKSk7CiAgICAgLy8gQ0FVVElPTjogV2UgbXVzdCBub3Qg
cmVzaXplIG1fZnJhbWVCdWZmZXJDYWNoZSBhZ2FpbiBhZnRlciB0aGlzLCBhcwpAQCAtMTE2LDQw
ICsxMTAsMjYgQEAgUkdCQTMyQnVmZmVyKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAg
IGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8g
RGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBhbmQgaWYgdGhpcyBpcyBhIEJNUCwgZGVjb2RlLgot
ICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChpbmRleCwgZmFsc2UpOwotCi0gICAgLy8g
UE5HcyBkZWNvZGUgaW50byB0aGVpciBvd24gZnJhbWVidWZmZXJzLCBzbyBvbmx5IHVzZSBvdXIg
aW50ZXJuYWwgY2FjaGUKLSAgICAvLyBmb3Igbm9uLVBOR3MgKEJNUCBvciB1bmtub3duKS4KLSAg
ICBpZiAoIW1fcG5nRGVjb2RlcnNbaW5kZXhdKQotICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZm
ZXJDYWNoZVtpbmRleF07Ci0KLSAgICAvLyBGYWlsIGlmIHRoZSBzaXplIHRoZSBQTkdJbWFnZURl
Y29kZXIgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2l6ZQotICAgIC8vIGluIHRoZSBk
aXJlY3RvcnkuCi0gICAgaWYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5pc1NpemVBdmFpbGFibGUo
KSkgewotICAgICAgICBjb25zdCBJbnRTaXplIHBuZ1NpemUobV9wbmdEZWNvZGVyc1tpbmRleF0t
PnNpemUoKSk7Ci0gICAgICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGlyRW50cnkgPSBt
X2RpckVudHJpZXNbaW5kZXhdOwotICAgICAgICBpZiAocG5nU2l6ZSAhPSBkaXJFbnRyeS5tX3Np
emUpIHsKLSAgICAgICAgICAgIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgbV9wbmdEZWNvZGVy
c1tpbmRleF0tPnNldEZhaWxlZCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIFJHQkEzMkJ1ZmZl
ciogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CisgICAgaWYgKGJ1ZmZlci0+
c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICBkZWNvZGUo
aW5kZXgsIGZhbHNlKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQogCi0gICAgcmV0dXJuIG1fcG5n
RGVjb2RlcnNbaW5kZXhdLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Citib29sIElDT0ltYWdlRGVj
b2Rlcjo6c2V0RmFpbGVkKCkKK3sKKyAgICBtX2JtcFJlYWRlcnMuY2xlYXIoKTsKKyAgICBtX3Bu
Z0RlY29kZXJzLmNsZWFyKCk7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCk7
CiB9CiAKIC8vIHN0YXRpYwotYm9vbCBJQ09JbWFnZURlY29kZXI6OmNvbXBhcmVFbnRyaWVzKGNv
bnN0IEljb25EaXJlY3RvcnlFbnRyeSYgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGIpCitib29sIElDT0ltYWdlRGVjb2Rl
cjo6Y29tcGFyZUVudHJpZXMoY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBhLCBjb25zdCBJY29u
RGlyZWN0b3J5RW50cnkmIGIpCiB7Ci0gICAgLy8gTGFyZ2VyIGljb25zIGFyZSBiZXR0ZXIuCisg
ICAgLy8gTGFyZ2VyIGljb25zIGFyZSBiZXR0ZXIuICBBZnRlciB0aGF0LCBoaWdoZXIgYml0LWRl
cHRoIGljb25zIGFyZSBiZXR0ZXIuCiAgICAgY29uc3QgaW50IGFFbnRyeUFyZWEgPSBhLm1fc2l6
ZS53aWR0aCgpICogYS5tX3NpemUuaGVpZ2h0KCk7CiAgICAgY29uc3QgaW50IGJFbnRyeUFyZWEg
PSBiLm1fc2l6ZS53aWR0aCgpICogYi5tX3NpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKGFFbnRyeUFy
ZWEgIT0gYkVudHJ5QXJlYSkKLSAgICAgICAgcmV0dXJuIChhRW50cnlBcmVhID4gYkVudHJ5QXJl
YSk7Ci0KLSAgICAvLyBIaWdoZXIgYml0LWRlcHRoIGljb25zIGFyZSBiZXR0ZXIuCi0gICAgcmV0
dXJuIChhLm1fYml0Q291bnQgPiBiLm1fYml0Q291bnQpOworICAgIHJldHVybiAoYUVudHJ5QXJl
YSA9PSBiRW50cnlBcmVhKSA/IChhLm1fYml0Q291bnQgPiBiLm1fYml0Q291bnQpIDogKGFFbnRy
eUFyZWEgPiBiRW50cnlBcmVhKTsKIH0KIAogdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGFG
b3JQTkdEZWNvZGVyQXRJbmRleChzaXplX3QgaW5kZXgpCkBAIC0xNjEsMjIgKzE0MSwyNiBAQCB2
b2lkIElDT0ltYWdlRGVjb2Rlcjo6c2V0RGF0YUZvclBOR0RlY29kCiAgICAgLy8gQ29weSBvdXQg
UE5HIGRhdGEgdG8gYSBzZXBhcmF0ZSB2ZWN0b3IgYW5kIHNlbmQgdG8gdGhlIFBORyBkZWNvZGVy
LgogICAgIC8vIEZJWE1FOiBTYXZlIHRoaXMgY29weSBieSBtYWtpbmcgdGhlIFBORyBkZWNvZGVy
IGFibGUgdG8gdGFrZSBhbgogICAgIC8vIG9wdGlvbmFsIG9mZnNldC4KLSAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBwbmdEYXRhKAotICAgICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgmbV9kYXRh
LT5kYXRhKClbZGlyRW50cnkubV9pbWFnZU9mZnNldF0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YS0+c2l6ZSgpIC0gZGlyRW50cnkubV9pbWFnZU9mZnNldCkpOwotICAgIG1f
cG5nRGVjb2RlcnNbaW5kZXhdLT5zZXREYXRhKHBuZ0RhdGEuZ2V0KCksIG1fYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBwbmdEYXRhKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCZtX2RhdGEtPmRhdGEoKVtkaXJFbnRyeS5tX2ltYWdlT2Zmc2V0XSwgbV9kYXRhLT5zaXpl
KCkgLSBkaXJFbnRyeS5tX2ltYWdlT2Zmc2V0KSk7CisgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0t
PnNldERhdGEocG5nRGF0YS5nZXQoKSwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7CiB9CiAKLXZvaWQg
SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5kZWQoc2l6ZV90IGluZGV4
LCBib29sIG9ubHlTaXplKQordm9pZCBJQ09JbWFnZURlY29kZXI6OmRlY29kZShzaXplX3QgaW5k
ZXgsIGJvb2wgb25seVNpemUpCiB7CiAgICAgaWYgKGZhaWxlZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNl
aXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCiAgICAgLy8gaGFzIGZhaWxlZC4KLSAgICBpZiAo
KCFkZWNvZGVEaXJlY3RvcnkoKSB8fCAoIW9ubHlTaXplICYmICFkZWNvZGVBdEluZGV4KGluZGV4
KSkpCi0gICAgICAgICYmIG1fYWxsRGF0YVJlY2VpdmVkKQorICAgIGlmICgoIWRlY29kZURpcmVj
dG9yeSgpIHx8ICghb25seVNpemUgJiYgIWRlY29kZUF0SW5kZXgoaW5kZXgpKSkgJiYgaXNBbGxE
YXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgLy8gSWYgd2UncmUgZG9u
ZSBkZWNvZGluZyB0aGlzIGZyYW1lLCB3ZSBkb24ndCBuZWVkIHRoZSBCTVBJbWFnZVJlYWRlciBv
cgorICAgIC8vIFBOR0ltYWdlRGVjb2RlciBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgdGhlc2Ug
aGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAvLyBjbGVhcmVkLikKKyAgICBlbHNlIGlmICgobV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4
XS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CisgICAgICAgIG1f
Ym1wUmVhZGVyc1tpbmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0u
Y2xlYXIoKTsKKyAgICB9CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVEaXJlY3Rv
cnkoKQpAQCAtMTg2LDQ1ICsxNzAsNDIgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZURp
cmVjdG9yeSgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJlYWQgYW5kIHByb2Nl
c3MgZGlyZWN0b3J5IGVudHJpZXMuCi0gICAgcmV0dXJuIChtX2RlY29kZWRPZmZzZXQgPj0KLSAg
ICAgICAgICAgIChzaXplT2ZEaXJlY3RvcnkgKyAobV9kaXJFbnRyaWVzLnNpemUoKSAqIHNpemVP
ZkRpckVudHJ5KSkpCi0gICAgICAgIHx8IHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKCk7CisgICAg
cmV0dXJuIChtX2RlY29kZWRPZmZzZXQgPj0gKHNpemVPZkRpcmVjdG9yeSArIChtX2RpckVudHJp
ZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkgfHwgcHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMo
KTsKIH0KIAogYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewogICAgIEFTU0VSVChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkpOwogICAgIGNvbnN0
IEljb25EaXJlY3RvcnlFbnRyeSYgZGlyRW50cnkgPSBtX2RpckVudHJpZXNbaW5kZXhdOwotICAg
IGlmICghbV9ibXBSZWFkZXJzW2luZGV4XSAmJiAhbV9wbmdEZWNvZGVyc1tpbmRleF0pIHsKLSAg
ICAgICAgLy8gSW1hZ2UgdHlwZSB1bmtub3duLgotICAgICAgICBjb25zdCBJbWFnZVR5cGUgaW1h
Z2VUeXBlID0gaW1hZ2VUeXBlQXRJbmRleChpbmRleCk7Ci0gICAgICAgIGlmIChpbWFnZVR5cGUg
PT0gQk1QKSB7CisgICAgY29uc3QgSW1hZ2VUeXBlIGltYWdlVHlwZSA9IGltYWdlVHlwZUF0SW5k
ZXgoaW5kZXgpOworICAgIGlmIChpbWFnZVR5cGUgPT0gVW5rbm93bikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBOb3QgZW5vdWdoIGRhdGEgdG8gZGV0ZXJtaW5lIGltYWdlIHR5cGUgeWV0Lgor
CisgICAgaWYgKGltYWdlVHlwZSA9PSBCTVApIHsKKyAgICAgICAgaWYgKCFtX2JtcFJlYWRlcnNb
aW5kZXhdKSB7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYWxyZWFkeSBzaXplZCBt
X2ZyYW1lQnVmZmVyQ2FjaGUgYmVmb3JlIHRoaXMsIGFuZAogICAgICAgICAgICAgLy8gd2UgbXVz
dCBub3QgcmVzaXplIGl0IGFnYWluIGxhdGVyIChzZWUgY2F1dGlvbiBpbiBmcmFtZUNvdW50KCkp
LgogICAgICAgICAgICAgQVNTRVJUKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPT0gbV9kaXJF
bnRyaWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBtX2JtcFJlYWRlcnNbaW5kZXhdLnNldCgKLSAg
ICAgICAgICAgICAgICBuZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgZGlyRW50cnkubV9pbWFnZU9m
ZnNldCwgMCwgdHJ1ZSkpOworICAgICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XS5zZXQobmV3
IEJNUEltYWdlUmVhZGVyKHRoaXMsIGRpckVudHJ5Lm1faW1hZ2VPZmZzZXQsIDAsIHRydWUpKTsK
ICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRleF0tPnNldERhdGEobV9kYXRhLmdldCgpKTsK
ICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRleF0tPnNldEJ1ZmZlcigmbV9mcmFtZUJ1ZmZl
ckNhY2hlW2luZGV4XSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VUeXBlID09IFBORykgewot
ICAgICAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0uc2V0KG5ldyBQTkdJbWFnZURlY29kZXIo
KSk7Ci0gICAgICAgICAgICBzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5kZXgoaW5kZXgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCBkYXRhIHRvIGRldGVybWlu
ZSBpbWFnZSB0eXBlIHlldC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChtX2JtcFJlYWRlcnNbaW5kZXhdKSB7CiAgICAgICAgIG1fZnJhbWVT
aXplID0gZGlyRW50cnkubV9zaXplOwogICAgICAgICBib29sIHJlc3VsdCA9IG1fYm1wUmVhZGVy
c1tpbmRleF0tPmRlY29kZUJNUChmYWxzZSk7CiAgICAgICAgIG1fZnJhbWVTaXplID0gSW50U2l6
ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIC8vIEZvciBQTkdzLCB3
ZSdyZSBub3cgZG9uZTsgZnVydGhlciBkZWNvZGluZyB3aWxsIGhhcHBlbiB3aGVuIGNhbGxpbmcK
LSAgICAvLyBmcmFtZUJ1ZmZlckF0SW5kZXgoKSBvbiB0aGUgUE5HIGRlY29kZXIuCi0gICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKCFtX3BuZ0RlY29kZXJzW2luZGV4XSkgeworICAgICAgICBtX3Bu
Z0RlY29kZXJzW2luZGV4XS5zZXQobmV3IFBOR0ltYWdlRGVjb2RlcigpKTsKKyAgICAgICAgc2V0
RGF0YUZvclBOR0RlY29kZXJBdEluZGV4KGluZGV4KTsKKyAgICB9CisgICAgLy8gRmFpbCBpZiB0
aGUgc2l6ZSB0aGUgUE5HSW1hZ2VEZWNvZGVyIGNhbGN1bGF0ZWQgZG9lcyBub3QgbWF0Y2ggdGhl
IHNpemUKKyAgICAvLyBpbiB0aGUgZGlyZWN0b3J5LgorICAgIGlmIChtX3BuZ0RlY29kZXJzW2lu
ZGV4XS0+aXNTaXplQXZhaWxhYmxlKCkgJiYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5zaXplKCkg
IT0gZGlyRW50cnkubV9zaXplKSkKKyAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0gPSAqbV9wbmdEZWNvZGVyc1tpbmRleF0tPmZyYW1lQnVm
ZmVyQXRJbmRleCgwKTsKKyAgICByZXR1cm4gbV9wbmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgp
ID8gc2V0RmFpbGVkKCkgOiB0cnVlOwogfQogCiBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vz
c0RpcmVjdG9yeSgpCkBAIC0yNDMsMTAgKzIyNCw4IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpw
cm9jZXNzRGlyZWN0b3J5KCkKICAgICAgICAgSUNPTiA9IDEsCiAgICAgICAgIENVUlNPUiA9IDIs
CiAgICAgfTsKLSAgICBpZiAoKChmaWxlVHlwZSAhPSBJQ09OKSAmJiAoZmlsZVR5cGUgIT0gQ1VS
U09SKSkgfHwgKCFpZENvdW50KSkgewotICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoKChmaWxlVHlwZSAhPSBJQ09OKSAmJiAoZmlsZVR5
cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkKKyAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgp
OwogCiAgICAgLy8gRW5sYXJnZSBtZW1iZXIgdmVjdG9ycyB0byBob2xkIGFsbCB0aGUgZW50cmll
cy4KICAgICBtX2RpckVudHJpZXMucmVzaXplKGlkQ291bnQpOwpAQCAtMjU5LDIyICsyMzgsMTYg
QEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogewogICAgIC8vIFJl
YWQgZGlyZWN0b3J5IGVudHJpZXMuCiAgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBzaXpl
T2ZEaXJlY3RvcnkpOwotICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkp
Ci0gICAgICAgIHx8ICgobV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwKLSAgICAg
ICAgICAgIChtX2RpckVudHJpZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkKKyAgICBpZiAo
KG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0g
bV9kZWNvZGVkT2Zmc2V0KSA8IChtX2RpckVudHJpZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6
Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOwotICAgICAgICAgaSAhPSBtX2RpckVu
dHJpZXMuZW5kKCk7ICsraSkKKyAgICBmb3IgKEljb25EaXJlY3RvcnlFbnRyaWVzOjppdGVyYXRv
ciBpKG1fZGlyRW50cmllcy5iZWdpbigpKTsgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkK
ICAgICAgICAgKmkgPSByZWFkRGlyZWN0b3J5RW50cnkoKTsgIC8vIFVwZGF0ZXMgbV9kZWNvZGVk
T2Zmc2V0LgogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zmc2V0cyBh
cmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkKICAgICAvLyBlbnRyaWVzLgotICAgIGZv
ciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkp
OwotICAgICAgICAgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAo
aS0+bV9pbWFnZU9mZnNldCA8IG1fZGVjb2RlZE9mZnNldCkgewotICAgICAgICAgICAgc2V0RmFp
bGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBmb3IgKElj
b25EaXJlY3RvcnlFbnRyaWVzOjppdGVyYXRvciBpKG1fZGlyRW50cmllcy5iZWdpbigpKTsgaSAh
PSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+bV9pbWFnZU9mZnNl
dCA8IG1fZGVjb2RlZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAg
ICB9CiAKICAgICAvLyBBcnJhbmdlIGZyYW1lcyBpbiBkZWNyZWFzaW5nIHF1YWxpdHkgb3JkZXIu
CkBAIC0zMDksOCArMjgyLDcgQEAgSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkg
SUNPSQogICAgIC8vIHRoaXMgaXNuJ3QgcXVpdGUgd2hhdCB0aGUgYml0bWFwIGluZm8gaGVhZGVy
IHNheXMgbGF0ZXIsIGFzIHdlIG9ubHkgdXNlCiAgICAgLy8gdGhpcyB2YWx1ZSB0byBkZXRlcm1p
bmUgd2hpY2ggaWNvbiBlbnRyeSBpcyBiZXN0LgogICAgIGlmICghZW50cnkubV9iaXRDb3VudCkg
ewotICAgICAgICBpbnQgY29sb3JDb3VudCA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50
OF90PihtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAyXSk7CisgICAgICAgIGludCBj
b2xvckNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obV9kYXRhLT5kYXRhKClbbV9kZWNvZGVk
T2Zmc2V0ICsgMl0pOwogICAgICAgICBpZiAoIWNvbG9yQ291bnQpCiAgICAgICAgICAgICBjb2xv
ckNvdW50ID0gMjU2OyAgLy8gVmFndWUgaW4gdGhlIHNwZWMsIG5lZWRlZCBieSByZWFsLXdvcmxk
IGljb25zLgogICAgICAgICBmb3IgKC0tY29sb3JDb3VudDsgY29sb3JDb3VudDsgY29sb3JDb3Vu
dCA+Pj0gMSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0lt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJQ09JbWFn
ZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIElD
T0ltYWdlRGVjb2RlcigpOworICAgICAgICB2aXJ0dWFsIH5JQ09JbWFnZURlY29kZXIoKTsKIAog
ICAgICAgICAvLyBJbWFnZURlY29kZXIKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQpAQCAtNTEsNiArNTIsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3Vu
dCgpOwogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCk7CisgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRl
cnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bworICAgICAgICAvLyBhdm9pZCBhY2Nlc3Np
bmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbQorICAg
ICAgICAvLyBpbnNpZGUgQk1QSW1hZ2VSZWFkZXIhCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRG
YWlsZWQoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gSW1hZ2VUeXBlIHsKQEAgLTY3
LDE5ICs3MiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHxhfCBpcyBhIHByZWZlcmFibGUgaWNvbiBlbnRyeSB0byB8YnwuCiAgICAgICAgIC8v
IExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBiaXRkZXB0aHMgYXQgdGhlIHNhbWUgc2l6ZSwgYXJl
IHByZWZlcmFibGUuCi0gICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmVFbnRyaWVzKGNvbnN0IElj
b25EaXJlY3RvcnlFbnRyeSYgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBiKTsKKyAgICAgICAgc3RhdGljIGJvb2wgY29tcGFy
ZUVudHJpZXMoY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBhLCBjb25zdCBJY29uRGlyZWN0b3J5
RW50cnkmIGIpOwogCiAgICAgICAgIGlubGluZSB1aW50MTZfdCByZWFkVWludDE2KGludCBvZmZz
ZXQpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBCTVBJbWFnZVJlYWRlcjo6
cmVhZFVpbnQxNihtX2RhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBCTVBJbWFnZVJlYWRlcjo6cmVhZFVpbnQxNihtX2RhdGEuZ2V0KCksIG1fZGVjb2RlZE9m
ZnNldCArIG9mZnNldCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgdWludDMyX3QgcmVh
ZFVpbnQzMihpbnQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Qk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MzIobV9kYXRhLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArIG9mZnNldCk7
CisgICAgICAgICAgICByZXR1cm4gQk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MzIobV9kYXRhLmdl
dCgpLCBtX2RlY29kZWRPZmZzZXQgKyBvZmZzZXQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
SWYgdGhlIGRlc2lyZWQgUE5HSW1hZ2VEZWNvZGVyIGV4aXN0cywgZ2l2ZXMgaXQgdGhlIGFwcHJv
cHJpYXRlIGRhdGEuCkBAIC04OCwxMiArOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIERlY29kZXMgdGhlIGVudHJ5IGF0IHxpbmRleHwuICBJZiB8b25seVNpemV8IGlzIHRy
dWUsIHN0b3BzIGRlY29kaW5nCiAgICAgICAgIC8vIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBpbWFn
ZSBzaXplLiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlIGlzIG5vCiAgICAgICAgIC8vIG1v
cmUgZGF0YSBjb21pbmcsIHNldHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZy4KLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gTk9URTogSWYgdGhlIGRlc2lyZWQgZW50cnkgaXMgYSBQTkcsIHRoaXMg
ZG9lc24ndCBhY3R1YWxseSB0cmlnZ2VyCi0gICAgICAgIC8vIGRlY29kaW5nLCBpdCBtZXJlbHkg
ZW5zdXJlcyB0aGUgZGVjb2RlciBpcyBjcmVhdGVkIGFuZCByZWFkeSB0bwotICAgICAgICAvLyBk
ZWNvZGUuICBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsIGEgZnVuY3Rpb24gb24gdGhlIFBOR0lt
YWdlRGVjb2RlcgotICAgICAgICAvLyB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGRlY29kaW5nLgot
ICAgICAgICB2b2lkIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChzaXplX3QgaW5kZXgsIGJv
b2wgb25seVNpemUpOworICAgICAgICB2b2lkIGRlY29kZShzaXplX3QgaW5kZXgsIGJvb2wgb25s
eVNpemUpOwogCiAgICAgICAgIC8vIERlY29kZXMgdGhlIGRpcmVjdG9yeSBhbmQgZGlyZWN0b3J5
IGVudHJpZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgICAgICAgLy8gZGF0YSwgYW5kIGlu
aXRpYWxpemVzIG1lbWJlcnMuICBSZXR1cm5zIHRydWUgaWYgYWxsIGRlY29kaW5nCkBAIC0xMjAs
OSArMTE3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpZiB0aGUgdHlwZSBj
b3VsZCBiZSBkZXRlcm1pbmVkLgogICAgICAgICBJbWFnZVR5cGUgaW1hZ2VUeXBlQXRJbmRleChz
aXplX3QpOwogCi0gICAgICAgIC8vIFRydWUgaWYgd2UndmUgc2VlbiBhbGwgdGhlIGRhdGEuCi0g
ICAgICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0KICAgICAgICAgLy8gQW4gaW5kZXggaW50
byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxyZWFkeSBkZWNvZGVkLgog
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHRyYWNrcyBkYXRhIF90aGlzXyBjbGFzcyBk
ZWNvZGVzOyBvbmNlIHRoZQogICAgICAgICAvLyBCTVBJbWFnZVJlYWRlciB0YWtlcyBvdmVyIHRo
aXMgd2lsbCBub3QgYmUgdXBkYXRlZCBmdXJ0aGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgZW51
bSBqc3RhdGUgewogICAgIEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSwgICAgICAgICAgLyog
T3V0cHV0IHByb2dyZXNzaXZlIHBpeGVscyAqLwogICAgIEpQRUdfREVDT01QUkVTU19TRVFVRU5U
SUFMLCAgICAgICAgICAgLyogT3V0cHV0IHNlcXVlbnRpYWwgcGl4ZWxzICovCiAgICAgSlBFR19E
T05FLAotICAgIEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSLCAgICAgICAgICAvKiBTb21lIGlt
YWdlIGZpbGVzIGhhdmUgYSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBub24tSlBFRyB0cmFpbGVyICovCiAgICAgSlBFR19FUlJPUiAgICAKIH07CiAKQEAg
LTE0OCwyMiArMTQ2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbG9uZyBieXRlc1RvU2tpcCA9IHN0
ZDo6bWluKG51bV9ieXRlcywgKGxvbmcpc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyKTsKICAgICAg
ICAgc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyIC09IChzaXplX3QpYnl0ZXNUb1NraXA7CiAgICAg
ICAgIHNyYy0+cHViLm5leHRfaW5wdXRfYnl0ZSArPSBieXRlc1RvU2tpcDsKLSAgICAKLSAgICAg
ICAgaWYgKG51bV9ieXRlcyA+IGJ5dGVzVG9Ta2lwKQotICAgICAgICAgICAgbV9ieXRlc1RvU2tp
cCA9IChzaXplX3QpKG51bV9ieXRlcyAtIGJ5dGVzVG9Ta2lwKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7CisKKyAgICAgICAgbV9ieXRlc1RvU2tpcCA9IHN0
ZDo6bWF4KG51bV9ieXRlcyAtIGJ5dGVzVG9Ta2lwLCBzdGF0aWNfY2FzdDxsb25nPigwKSk7CiAg
ICAgfQogCi0gICAgYm9vbCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNp
emVPbmx5KSB7Ci0gICAgICAgIG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5OwotICAgICAg
ICAKKyAgICBib29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgb25seVNp
emUpIHsKKyAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gb25seVNpemU7CisKICAgICAgICAg
dW5zaWduZWQgbmV3Qnl0ZUNvdW50ID0gZGF0YS5zaXplKCkgLSBtX2J1ZmZlckxlbmd0aDsKICAg
ICAgICAgdW5zaWduZWQgcmVhZE9mZnNldCA9IG1fYnVmZmVyTGVuZ3RoIC0gbV9pbmZvLnNyYy0+
Ynl0ZXNfaW5fYnVmZmVyOwogCiAgICAgICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlciAr
PSBuZXdCeXRlQ291bnQ7CiAgICAgICAgIG1faW5mby5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IChK
T0NURVQqKShkYXRhLmRhdGEoKSkgKyByZWFkT2Zmc2V0OwotICAgICAgICAKKwogICAgICAgICAv
LyBJZiB3ZSBzdGlsbCBoYXZlIGJ5dGVzIHRvIHNraXAsIHRyeSB0byBza2lwIHRob3NlIG5vdy4K
ICAgICAgICAgaWYgKG1fYnl0ZXNUb1NraXApCiAgICAgICAgICAgICBza2lwQnl0ZXMobV9ieXRl
c1RvU2tpcCk7CkBAIC0xNzEsMTggKzE2NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYnVmZmVy
TGVuZ3RoID0gZGF0YS5zaXplKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGRv
IHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KLSAgICAg
ICAgaWYgKHNldGptcChtX2Vyci5zZXRqbXBfYnVmZmVyKSkgewotICAgICAgICAgICAgbV9zdGF0
ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOwotICAgICAgICAgICAgY2xvc2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoc2V0am1wKG1f
ZXJyLnNldGptcF9idWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFp
bGVkKCk7CiAKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgICAgICBjYXNlIEpQ
RUdfSEVBREVSOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8qIFJlYWQgZmlsZSBw
YXJhbWV0ZXJzIHdpdGgganBlZ19yZWFkX2hlYWRlcigpICovCiAgICAgICAgICAgICAgICAgaWYg
KGpwZWdfcmVhZF9oZWFkZXIoJm1faW5mbywgdHJ1ZSkgPT0gSlBFR19TVVNQRU5ERUQpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8qIEkvTyBzdXNwZW5zaW9uICovCiAKICAgICAg
ICAgICAgICAgICAvKiBsZXQgbGlianBlZyB0YWtlIGNhcmUgb2YgZ3JheS0+UkdCIGFuZCBZQ2JD
ci0+UkdCIGNvbnZlcnNpb25zICovCiAgICAgICAgICAgICAgICAgc3dpdGNoIChtX2luZm8uanBl
Z19jb2xvcl9zcGFjZSkgewpAQCAtMTk4LDggKzE5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9kZWNvZGVyLT5zZXRGYWlsZWQoKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAvKgpAQCAtMjIxLDE3ICsyMTIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlu
dCByb3dfc3RyaWRlID0gbV9pbmZvLm91dHB1dF93aWR0aCAqIDQ7IC8vIFJHQkEgYnVmZmVyCiAK
IAotICAgICAgICAgICAgICAgIG1fc2FtcGxlcyA9ICgqbV9pbmZvLm1lbS0+YWxsb2Nfc2FycmF5
KSgoal9jb21tb25fcHRyKSAmbV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpQT09MX0lNQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvd19zdHJpZGUsIDEpOworICAgICAgICAgICAgICAgIG1fc2FtcGxlcyA9
ICgqbV9pbmZvLm1lbS0+YWxsb2Nfc2FycmF5KSgoal9jb21tb25fcHRyKSAmbV9pbmZvLCBKUE9P
TF9JTUFHRSwgcm93X3N0cmlkZSwgMSk7CiAKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBF
R19TVEFSVF9ERUNPTVBSRVNTOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwgaW4g
dGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1h
Z2VfaGVpZ2h0KSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgs
IG1faW5mby5pbWFnZV9oZWlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9kZWNv
ZGVyLT5zZXRGYWlsZWQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChtX2RlY29kaW5nU2l6ZU9u
bHkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHN0b3AgaGVyZS4KQEAgLTI0MCw3
ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5mby5zcmMtPmJ5dGVz
X2luX2J1ZmZlciA9IDA7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gRkFMTCBUSFJPVUdI
CiAKICAgICAgICAgICAgIGNhc2UgSlBFR19TVEFSVF9ERUNPTVBSRVNTOgogICAgICAgICAgICAg
ewpAQCAtMjU2LDI0ICsyNDMsMjQgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgLyogU3Rh
cnQgZGVjb21wcmVzc29yICovCiAgICAgICAgICAgICAgICAgaWYgKCFqcGVnX3N0YXJ0X2RlY29t
cHJlc3MoJm1faW5mbykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08g
c3VzcGVuc2lvbiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8qIEkvTyBz
dXNwZW5zaW9uICovCiAKICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgcHJvZ3Jlc3Np
dmUgSlBFRyAuLi4gKi8KICAgICAgICAgICAgICAgICBtX3N0YXRlID0gKG1faW5mby5idWZmZXJl
ZF9pbWFnZSkgPyBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkUgOiBKUEVHX0RFQ09NUFJFU1Nf
U0VRVUVOVElBTDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gRkFMTCBUSFJPVUdI
CiAgICAgCiAgICAgICAgICAgICBjYXNlIEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOgogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVDT01QUkVT
U19TRVFVRU5USUFMKSB7CiAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RlY29k
ZXItPm91dHB1dFNjYW5saW5lcygpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8qIEkvTyBzdXNwZW5zaW9uICovCiAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
LyogSWYgd2UndmUgY29tcGxldGVkIGltYWdlIG91dHB1dCAuLi4gKi8KICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWln
aHQpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gRkFMTCBUSFJPVUdICiAK
ICAgICAgICAgICAgIGNhc2UgSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFOgogICAgICAgICAg
ICAgewpAQCAtMjg1LDM4ICsyNzIsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RhdHVzICE9IEpQRUdfUkVBQ0hFRF9FT0kpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1
dF9zY2FubGluZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1faW5mby5v
dXRwdXRfc2NhbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbiA9
IG1faW5mby5pbnB1dF9zY2FuX251bWJlcjsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIGlmIHdlIGhhdmVuJ3QgZGlzcGxheWVkIGFueXRoaW5nIHlldCAob3V0cHV0X3NjYW5fbnVt
YmVyPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3ZSBoYXZlIGVub3VnaCBk
YXRhIGZvciBhIGNvbXBsZXRlIHNjYW4sIGZvcmNlIG91dHB1dAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mIHRoZSBsYXN0IGZ1bGwgc2NhbiAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgobV9pbmZvLm91dHB1dF9zY2FuX251bWJlciA9PSAwKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgoIW1faW5mby5vdXRwdXRfc2Nhbl9udW1iZXIpICYmCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY2FuID4gMSkgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cyAhPSBKUEVHX1JFQUNIRURfRU9JKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbi0tOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFqcGVnX3N0YXJ0X291dHB1dCgmbV9pbmZvLCBzY2FuKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLyogSS9PIHN1
c3BlbnNpb24gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gMHhmZmZmZmYpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dHB1dF9zY2FubGluZSA9IDA7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5vdXRwdXRTY2FubGluZXMoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09
IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2luZm8ub3V0cHV0X3NjYW5s
aW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWFuYWdlIHRv
IHJlYWQgYW55IGxpbmVzIC0gZmxhZyBzbyB3ZSBkb24ndCBjYWxsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpwZWdfc3RhcnRfb3V0cHV0KCkgbXVsdGlwbGUgdGltZXMgZm9yIHRo
ZSBzYW1lIHNjYW4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91
dHB1dF9zY2FubGluZSA9IDB4ZmZmZmZmOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2Nh
bmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWpwZWdfZmluaXNoX291dHB1dCgmbV9pbmZvKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLyogSS9PIHN1c3BlbnNpb24g
Ki8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRl
KCZtX2luZm8pICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZm8uaW5w
dXRfc2Nhbl9udW1iZXIgPT0gbV9pbmZvLm91dHB1dF9zY2FuX251bWJlcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGpwZWdfaW5wdXRfY29tcGxldGUoJm1faW5mbykgJiYgKG1f
aW5mby5pbnB1dF9zY2FuX251bWJlciA9PSBtX2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luZm8ub3V0cHV0X3NjYW5saW5lID0gMDsKQEAgLTMyNSwyOCArMzExLDIy
IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gRkFMTCBU
SFJPVUdICiAKICAgICAgICAgICAgIGNhc2UgSlBFR19ET05FOgogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIC8qIEZpbmlzaCBkZWNvbXByZXNzaW9uICovCi0gICAgICAgICAgICAgICAg
aWYgKCFqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZtX2luZm8pKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KLQotICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUjsKLQotICAgICAgICAgICAgICAgIC8q
IHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4ganBlZ19maW5pc2hfZGVjb21wcmVzcygmbV9pbmZvKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUjoK
LSAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuIGdldCBoZXJlIGlmIHRoZSBjb25zdHJ1Y3RvciBmYWlsZWQuCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBtX2RlY29kZXItPnNldEZhaWxlZCgpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbygpIHsgcmV0dXJu
ICZtX2luZm87IH0KQEAgLTQwNywyNCArMzg3LDkgQEAgSlBFR0ltYWdlRGVjb2Rlcjo6fkpQRUdJ
bWFnZURlY29kZXIoKQogewogfQogCi0vLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLXZv
aWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQotewotICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQ2FjaGUgb3VyIG5ldyBkYXRhLgotICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBKUEVHIHJlYWRlci4KLSAg
ICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkKLSAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBK
UEVHSW1hZ2VSZWFkZXIodGhpcykpOwotfQotCi0vLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBp
bmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCkgJiYgIWZhaWxlZCgpICYmIG1fcmVhZGVyKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSkKICAgICAgICAgIGRlY29kZSh0cnVlKTsKIAogICAgIHJldHVybiBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtNDM0LDYgKzM5OSw3IEBAIGJvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCAKIHsKICAgICBpZiAoIUltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC00NDYsMjMgKzQxMiwxNiBAQCBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1l
QnVmCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CiAKLSAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCi0gICAgICAgIC8vIERlY29kZSB0aGlzIGZy
YW1lLgotICAgICAgICBkZWNvZGUoKTsKLSAgICByZXR1cm4gJmZyYW1lOworICAgIFJHQkEzMkJ1
ZmZlciogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOworICAgIGlmIChidWZm
ZXItPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVj
b2RlKGZhbHNlKTsKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCi0vLyBGZWVkIGRhdGEgdG8gdGhl
IEpQRUcgcmVhZGVyLgotdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25s
eSkKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKIHsKLSAgICBpZiAobV9mYWls
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUo
bV9kYXRhLT5idWZmZXIoKSwgc2l6ZU9ubHkpOwotCi0gICAgaWYgKG1fZmFpbGVkIHx8ICghbV9m
cmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKLSAgICAgICAgbV9yZWFkZXIuY2xl
YXIoKTsKKyAgICBtX3JlYWRlci5jbGVhcigpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNl
dEZhaWxlZCgpOwogfQogCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygp
CkBAIC00NzMsMTAgKzQzMiw4IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nhbmxp
bmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAg
UkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1
ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYg
KCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdo
dCgpKSkgewotICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6
ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZVBhcnRpYWwpOwogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogCkBAIC01MTcs
OCArNDc0LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIGRlc3RZLCBqc2FtcGxlWzBdICogayAvIDI1
NSwganNhbXBsZVsxXSAqIGsgLyAyNTUsIGpzYW1wbGVbMl0gKiBrIC8gMjU1LCAweEZGKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01MzIsOCArNDg4LDI1IEBAIHZvaWQgSlBFR0ltYWdl
RGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSGFuZCBi
YWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYnVmZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRl
ZCB1cCBiZWluZyBlbXB0eS4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKLSAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSk7CisgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUpOworfQorCit2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29s
IG9ubHlTaXplKQoreworICAgIGlmIChmYWlsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3JlYWRlcikKKyAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBKUEVHSW1hZ2VSZWFkZXIo
dGhpcykpOworCisgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2Un
dmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZworICAgIC8vIGhhcyBmYWlsZWQuCisg
ICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKSAmJiBp
c0FsbERhdGFSZWNlaXZlZCgpKQorICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAvLyBJZiB3ZSdy
ZSBkb25lIGRlY29kaW5nIHRoZSBpbWFnZSwgd2UgZG9uJ3QgbmVlZCB0aGUgSlBFR0ltYWdlUmVh
ZGVyCisgICAgLy8gYW55bW9yZS4gIChJZiB3ZSBmYWlsZWQsIHxtX3JlYWRlcnwgaGFzIGFscmVh
ZHkgYmVlbiBjbGVhcmVkLikKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1w
dHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc3RhdHVzKCkgPT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDI4ICszOCwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlBFR0ltYWdl
RGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgSlBF
R0ltYWdlRGVjb2RlcigpOwotICAgICAgICB+SlBFR0ltYWdlRGVjb2RlcigpOworICAgICAgICB2
aXJ0dWFsIH5KUEVHSW1hZ2VEZWNvZGVyKCk7CiAKKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4g
ImpwZyI7IH0KLQotICAgICAgICAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCk7Ci0KLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRp
b24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFp
bGFibGUoKTsKLQogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KTsKIAogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdm9p
ZCBkZWNvZGUoYm9vbCBzaXplT25seSA9IGZhbHNlKTsKKyAgICAgICAgLy8gQ0FVVElPTjogc2V0
RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAorICAgICAg
ICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRo
aXMgZnJvbSBpbnNpZGUKKyAgICAgICAgLy8gSlBFR0ltYWdlUmVhZGVyIQorICAgICAgICB2aXJ0
dWFsIGJvb2wgc2V0RmFpbGVkKCk7CiAKICAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoKTsK
ICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8v
IERlY29kZXMgdGhlIGltYWdlLiAgSWYgfG9ubHlTaXplfCBpcyB0cnVlLCBzdG9wcyBkZWNvZGlu
ZyBhZnRlcgorICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgaW1hZ2Ugc2l6ZS4gIElmIGRlY29k
aW5nIGZhaWxzIGJ1dCB0aGVyZSBpcyBubyBtb3JlCisgICAgICAgIC8vIGRhdGEgY29taW5nLCBz
ZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuCisgICAgICAgIHZvaWQgZGVjb2RlKGJvb2wg
b25seVNpemUpOworCiAgICAgICAgIE93blB0cjxKUEVHSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwog
ICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTM3MTEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MiwyMSArNTIsMzggQEAgY29uc3QgZG91YmxlIGNJbnZlcnNlR2FtbWEgPSAw
LjQ1NDU1OwogY29uc3QgdW5zaWduZWQgbG9uZyBjTWF4UE5HU2l6ZSA9IDEwMDAwMDBVTDsKIAog
Ly8gQ2FsbGVkIGlmIHRoZSBkZWNvZGluZyBvZiB0aGUgaW1hZ2UgZmFpbHMuCi1zdGF0aWMgdm9p
ZCBQTkdBUEkgZGVjb2RpbmdGYWlsZWQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2No
YXJwIGVycm9yX21zZyk7CitzdGF0aWMgdm9pZCBQTkdBUEkgZGVjb2RpbmdGYWlsZWQocG5nX3N0
cnVjdHAgcG5nLCBwbmdfY29uc3RfY2hhcnApCit7CisgICAgbG9uZ2ptcChwbmctPmptcGJ1Ziwg
MSk7Cit9CiAKIC8vIENhbGxiYWNrcyBnaXZlbiB0byB0aGUgcmVhZCBzdHJ1Y3QuICBUaGUgZmly
c3QgaXMgZm9yIHdhcm5pbmdzICh3ZSB3YW50IHRvIHRyZWF0IGEgcGFydGljdWxhciB3YXJuaW5n
CiAvLyBhcyBhbiBlcnJvciwgd2hpY2ggaXMgd2h5IHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhpcyBj
YWxsYmFjay4KLXN0YXRpYyB2b2lkIFBOR0FQSSBkZWNvZGluZ1dhcm5pbmcocG5nX3N0cnVjdHAg
cG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIHdhcm5pbmdfbXNnKTsKK3N0YXRpYyB2b2lkIFBOR0FQ
SSBkZWNvZGluZ1dhcm5pbmcocG5nX3N0cnVjdHAgcG5nLCBwbmdfY29uc3RfY2hhcnAgd2Fybmlu
Z01zZykKK3sKKyAgLy8gTW96aWxsYSBkaWQgdGhpcywgc28gd2Ugd2lsbCB0b28uCisgIC8vIENv
bnZlcnQgYSB0Uk5TIHdhcm5pbmcgdG8gYmUgYW4gZXJyb3IgKGRvY3VtZW50ZWQgaW4gYnVnemls
bGEubW96aWxsYS5vcmcgYnVnICMyNTEzODEpCisgIGlmICghc3RybmNtcCh3YXJuaW5nTXNnLCAi
TWlzc2luZyBQTFRFIGJlZm9yZSB0Uk5TIiwgMjQpKQorICAgICAgcG5nX2Vycm9yKHBuZywgd2Fy
bmluZ01zZyk7Cit9CiAKIC8vIENhbGxlZCB3aGVuIHdlIGhhdmUgb2J0YWluZWQgdGhlIGhlYWRl
ciBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHRoZSBzaXplKS4KLXN0YXRpYyB2b2lkIFBOR0FQSSBo
ZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyKTsK
K3N0YXRpYyB2b2lkIFBOR0FQSSBoZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBwbmdf
aW5mb3ApCit7CisgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9n
cmVzc2l2ZV9wdHIocG5nKSktPmhlYWRlckF2YWlsYWJsZSgpOworfQogCiAvLyBDYWxsZWQgd2hl
biBhIHJvdyBpcyByZWFkeS4KLXN0YXRpYyB2b2lkIFBOR0FQSSByb3dBdmFpbGFibGUocG5nX3N0
cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIG5ld19yb3csCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBuZ191aW50XzMyIHJvd19udW0sIGludCBwYXNzKTsKK3N0YXRpYyB2b2lkIFBO
R0FQSSByb3dBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfYnl0ZXAgcm93QnVmZmVyLCBw
bmdfdWludF8zMiByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3MpCit7CisgICAgc3RhdGljX2Nh
c3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPnJvd0F2
YWlsYWJsZShyb3dCdWZmZXIsIHJvd0luZGV4LCBpbnRlcmxhY2VQYXNzKTsKK30KIAogLy8gQ2Fs
bGVkIHdoZW4gd2UgaGF2ZSBjb21wbGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nIHRoZSBpbWFnZS4K
LXN0YXRpYyB2b2lkIFBOR0FQSSBwbmdDb21wbGV0ZShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdf
aW5mb3AgaW5mb19wdHIpOworc3RhdGljIHZvaWQgUE5HQVBJIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1
Y3RwIHBuZywgcG5nX2luZm9wKQoreworICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+
KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5wbmdDb21wbGV0ZSgpOworfQogCiBjbGFz
cyBQTkdJbWFnZVJlYWRlcgogewpAQCAtNzUsOCArOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDog
bV9yZWFkT2Zmc2V0KDApCiAgICAgICAgICwgbV9kZWNvZGluZ1NpemVPbmx5KGZhbHNlKQogICAg
ICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCi0gICAgICAgICwgbV9oYXNBbHBoYSgwKQotICAg
ICAgICAsIG1faGFzRmluaXNoZWREZWNvZGluZyhmYWxzZSkKKyAgICAgICAgLCBtX2hhc0FscGhh
KGZhbHNlKQogICAgICAgICAsIG1fY3VycmVudEJ1ZmZlclNpemUoMCkKICAgICB7CiAgICAgICAg
IG1fcG5nID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAs
IGRlY29kaW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcpOwpAQCAtODksNDAgKzEwNSwzNSBAQCBw
dWJsaWM6CiAgICAgICAgIGNsb3NlKCk7CiAgICAgfQogCi0gICAgdm9pZCBjbG9zZSgpIHsKKyAg
ICB2b2lkIGNsb3NlKCkKKyAgICB7CiAgICAgICAgIGlmIChtX3BuZyAmJiBtX2luZm8pCiAgICAg
ICAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmbV9wbmcsICZtX2luZm8sIDApOyAgLy8g
V2lsbCB6ZXJvIHRoZSBwb2ludGVycy4KLSAgICAgICAgZGVsZXRlIFtdbV9pbnRlcmxhY2VCdWZm
ZXI7CisgICAgICAgIGRlbGV0ZVtdIG1faW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2ludGVy
bGFjZUJ1ZmZlciA9IDA7CiAgICAgICAgIG1fcmVhZE9mZnNldCA9IDA7Ci0gICAgICAgIG1faGFz
RmluaXNoZWREZWNvZGluZyA9IGZhbHNlOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRC
dWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50QnVmZmVyU2l6ZTsgfQogCi0gICAg
dm9pZCBzZXRDb21wbGV0ZSgpIHsgbV9oYXNGaW5pc2hlZERlY29kaW5nID0gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBkZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQor
ICAgIGJvb2wgZGVjb2RlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgYm9vbCBzaXplT25seSkK
ICAgICB7CiAgICAgICAgIG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5OworICAgICAgICBQ
TkdJbWFnZURlY29kZXIqIGRlY29kZXIgPSBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihw
bmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3BuZykpOwogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gdGhlIHNldGptcCBoZXJlLiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbgotICAg
ICAgICBpZiAoc2V0am1wKG1fcG5nLT5qbXBidWYpKSB7Ci0gICAgICAgICAgICBjbG9zZSgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChzZXRqbXAobV9wbmct
PmptcGJ1ZikpCisgICAgICAgICAgICByZXR1cm4gZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAKLSAg
ICAgICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNv
ZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcpKTsKICAgICAgICAgY29uc3QgY2hh
ciogc2VnbWVudDsKICAgICAgICAgd2hpbGUgKHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSBkYXRh
LmdldFNvbWVEYXRhKHNlZ21lbnQsIG1fcmVhZE9mZnNldCkpIHsKICAgICAgICAgICAgIG1fcmVh
ZE9mZnNldCArPSBzZWdtZW50TGVuZ3RoOwogICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2l6
ZSA9IG1fcmVhZE9mZnNldDsKICAgICAgICAgICAgIHBuZ19wcm9jZXNzX2RhdGEobV9wbmcsIG1f
aW5mbywgcmVpbnRlcnByZXRfY2FzdDxwbmdfYnl0ZXA+KGNvbnN0X2Nhc3Q8Y2hhcio+KHNlZ21l
bnQpKSwgc2VnbWVudExlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoKHNpemVPbmx5ICYmIGRlY29k
ZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB8fCBtX2hhc0ZpbmlzaGVkRGVjb2RpbmcpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHNpemVPbmx5ID8gZGVjb2Rlci0+aXNT
aXplQXZhaWxhYmxlKCkgOiBkZWNvZGVyLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2hhc0ZpbmlzaGVkRGVjb2Rp
bmcgJiYgZGVjb2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSkKLSAgICAgICAgICAgIGRlY29kZXIt
PnBuZ0NvbXBsZXRlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29s
IGRlY29kaW5nU2l6ZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU2l6ZU9ubHk7IH0K
QEAgLTEzNCw5ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWFkT2Zmc2V0KHVuc2ln
bmVkIG9mZnNldCkgeyBtX3JlYWRPZmZzZXQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgYikgeyBtX2hhc0FscGhhID0gYjsgfQogCi0gICAgdm9pZCBjcmVhdGVJbnRlcmxh
Y2VCdWZmZXIoaW50IHNpemUpIHsKLSAgICAgICAgbV9pbnRlcmxhY2VCdWZmZXIgPSBuZXcgcG5n
X2J5dGVbc2l6ZV07Ci0gICAgfQorICAgIHZvaWQgY3JlYXRlSW50ZXJsYWNlQnVmZmVyKGludCBz
aXplKSB7IG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRlW3NpemVdOyB9CiAKIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwpAQCAtMTQ1LDExICsxNTQsMTEgQEAgcHJp
dmF0ZToKICAgICBwbmdfaW5mb3AgbV9pbmZvOwogICAgIHBuZ19ieXRlcCBtX2ludGVybGFjZUJ1
ZmZlcjsKICAgICBib29sIG1faGFzQWxwaGE7Ci0gICAgYm9vbCBtX2hhc0ZpbmlzaGVkRGVjb2Rp
bmc7CiAgICAgdW5zaWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKIH07CiAKIFBOR0ltYWdlRGVj
b2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKKyAgICA6IG1fZG9Ob3RoaW5nT25GYWlsdXJlKGZhbHNl
KQogewogfQogCkBAIC0xNTcsMjcgKzE2NiwyMSBAQCBQTkdJbWFnZURlY29kZXI6On5QTkdJbWFn
ZURlY29kZXIoKQogewogfQogCi0vLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLXZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKIHsKLSAg
ICBpZiAobV9mYWlsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENhY2hlIG91ciBuZXcg
ZGF0YS4KLSAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
KyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCisgICAgICAgICBkZWNv
ZGUodHJ1ZSk7CiAKLSAgICAvLyBDcmVhdGUgdGhlIFBORyByZWFkZXIuCi0gICAgaWYgKCFtX3Jl
YWRlciAmJiAhbV9mYWlsZWQpCi0gICAgICAgIG1fcmVhZGVyLnNldChuZXcgUE5HSW1hZ2VSZWFk
ZXIodGhpcykpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwog
fQogCi0vLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNv
ZGVkIHlldC4KLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQorYm9vbCBQ
TkdJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkK
IHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgIWZhaWxlZCgp
ICYmIG1fcmVhZGVyKQotICAgICAgICAgZGVjb2RlKHRydWUpOworICAgIGlmICghSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKKyAgICBwcmVwYXJlU2Nh
bGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUkdCQTMyQnVmZmVy
KiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCkBAIC0x
ODgsNDcgKzE5MSwxOCBAQCBSR0JBMzJCdWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5yZXNpemUoMSk7CiAKLSAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCi0gICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1l
LgotICAgICAgICBkZWNvZGUoKTsKLSAgICByZXR1cm4gJmZyYW1lOwotfQotCi0vLyBGZWVkIGRh
dGEgdG8gdGhlIFBORyByZWFkZXIuCi12b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wg
c2l6ZU9ubHkpCi17Ci0gICAgaWYgKG1fZmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKLSAgICAKLSAgICBpZiAobV9mYWls
ZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNo
ZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQotICAgICAgICBt
X3JlYWRlci5jbGVhcigpOwotfQotCi12b2lkIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBu
ZywgcG5nX2NvbnN0X2NoYXJwIGVycm9yTXNnKQotewotICAgIHN0YXRpY19jYXN0PFBOR0ltYWdl
RGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5kZWNvZGluZ0ZhaWxlZCgp
OwotICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOworICAgIGlmIChidWZmZXItPnN0YXR1cygp
ICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVjb2RlKGZhbHNlKTsK
KyAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIGRlY29kaW5nV2FybmluZyhwbmdfc3RydWN0
cCBwbmcsIHBuZ19jb25zdF9jaGFycCB3YXJuaW5nTXNnKQotewotICAvLyBNb3ppbGxhIGRpZCB0
aGlzLCBzbyB3ZSB3aWxsIHRvby4KLSAgLy8gQ29udmVydCBhIHRSTlMgd2FybmluZyB0byBiZSBh
biBlcnJvciAoZG9jdW1lbnRlZCBpbiBidWd6aWxsYS5tb3ppbGxhLm9yZyBidWcgIzI1MTM4MSkK
LSAgaWYgKCFzdHJuY21wKHdhcm5pbmdNc2csICJNaXNzaW5nIFBMVEUgYmVmb3JlIHRSTlMiLCAy
NCkpCi0gICAgICBwbmdfZXJyb3IocG5nLCB3YXJuaW5nTXNnKTsKLX0KLQotdm9pZCBoZWFkZXJB
dmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKLXsKLSAgICBzdGF0aWNf
Y2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVh
ZGVyQXZhaWxhYmxlKCk7Ci19Ci0KLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxl
ZCgpCi17Ci0gICAgbV9mYWlsZWQgPSB0cnVlOworYm9vbCBQTkdJbWFnZURlY29kZXI6OnNldEZh
aWxlZCgpCit7CisgICAgaWYgKG1fZG9Ob3RoaW5nT25GYWlsdXJlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV9yZWFkZXIuY2xlYXIoKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpz
ZXRGYWlsZWQoKTsKIH0KIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgp
CkBAIC0yNDAsMzAgKzIxNCwzMCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICAKICAgICAvLyBQcm90ZWN0IGFnYWluc3QgbGFyZ2UgaW1hZ2VzLgogICAgIGlm
IChwbmctPndpZHRoID4gY01heFBOR1NpemUgfHwgcG5nLT5oZWlnaHQgPiBjTWF4UE5HU2l6ZSkg
ewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYs
IDEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIFdlIGNhbiBmaWxsIGlu
IHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgIGlmICghSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAoIXNldFNpemUod2lk
dGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIC8vIFNpemUgdW5yZWFzb25hYmxlLCBiYWlsIG91
dC4KLSAgICAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwor
ICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZh
aWxhYmxlLiAgQXZvaWQgbWVtb3J5CisgICAgLy8gY29ycnVwdGlvbiBpc3N1ZXMgYnkgbmV1dGVy
aW5nIHNldEZhaWxlZCgpIGR1cmluZyB0aGlzIGNhbGw7IGlmIHdlIGRvbid0CisgICAgLy8gZG8g
dGhpcywgZmFpbHVyZXMgd2lsbCBjYXVzZSB8bV9yZWFkZXJ8IHRvIGJlIGRlbGV0ZWQsIGFuZCBv
dXIgam1wYnVmCisgICAgLy8gd2lsbCBjZWFzZSB0byBleGlzdC4gIE5vdGUgdGhhdCB3ZSdsbCBz
dGlsbCBwcm9wZXJseSBzZXQgdGhlIGZhaWx1cmUgZmxhZworICAgIC8vIGluIHRoaXMgY2FzZSBh
cyBzb29uIGFzIHdlIGxvbmdqbXAoKS4KKyAgICBtX2RvTm90aGluZ09uRmFpbHVyZSA9IHRydWU7
CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fZG9Ob3Ro
aW5nT25GYWlsdXJlID0gZmFsc2U7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgbG9uZ2pt
cChwbmctPmptcGJ1ZiwgMSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQgYml0
RGVwdGgsIGNvbG9yVHlwZSwgaW50ZXJsYWNlVHlwZSwgY29tcHJlc3Npb25UeXBlLCBmaWx0ZXJU
eXBlLCBjaGFubmVsczsKLSAgICBwbmdfZ2V0X0lIRFIocG5nLCBpbmZvLCAmd2lkdGgsICZoZWln
aHQsICZiaXREZXB0aCwgJmNvbG9yVHlwZSwKLSAgICAgICAgICAgICAgICAgJmludGVybGFjZVR5
cGUsICZjb21wcmVzc2lvblR5cGUsICZmaWx0ZXJUeXBlKTsKKyAgICBwbmdfZ2V0X0lIRFIocG5n
LCBpbmZvLCAmd2lkdGgsICZoZWlnaHQsICZiaXREZXB0aCwgJmNvbG9yVHlwZSwgJmludGVybGFj
ZVR5cGUsICZjb21wcmVzc2lvblR5cGUsICZmaWx0ZXJUeXBlKTsKIAogICAgIC8vIFRoZSBvcHRp
b25zIHdlIHNldCBoZXJlIG1hdGNoIHdoYXQgTW96aWxsYSBkb2VzLgogCiAgICAgLy8gRXhwYW5k
IHRvIGVuc3VyZSB3ZSB1c2UgMjQtYml0IGZvciBSR0IgYW5kIDMyLWJpdCBmb3IgUkdCQS4KLSAg
ICBpZiAoY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUgfHwKLSAgICAgICAgKGNv
bG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZICYmIGJpdERlcHRoIDwgOCkpCisgICAgaWYg
KGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFIHx8IChjb2xvclR5cGUgPT0gUE5H
X0NPTE9SX1RZUEVfR1JBWSAmJiBiaXREZXB0aCA8IDgpKQogICAgICAgICBwbmdfc2V0X2V4cGFu
ZChwbmcpOwogICAgIAogICAgIHBuZ19ieXRlcCB0cm5zID0gMDsKQEAgLTI3Niw4ICsyNTAsNyBA
QCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICBpZiAoYml0RGVw
dGggPT0gMTYpCiAgICAgICAgIHBuZ19zZXRfc3RyaXBfMTYocG5nKTsKIAotICAgIGlmIChjb2xv
clR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fAotICAgICAgICBjb2xvclR5cGUgPT0gUE5H
X0NPTE9SX1RZUEVfR1JBWV9BTFBIQSkKKyAgICBpZiAoY29sb3JUeXBlID09IFBOR19DT0xPUl9U
WVBFX0dSQVkgfHwgY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpCiAgICAg
ICAgIHBuZ19zZXRfZ3JheV90b19yZ2IocG5nKTsKIAogICAgIC8vIERlYWwgd2l0aCBnYW1tYSBh
bmQga2VlcCBpdCB1bmRlciBvdXIgY29udHJvbC4KQEAgLTI4OCw4ICsyNjEsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAgICAgICAgIHBuZ19zZXRfZ0FN
QShwbmcsIGluZm8sIGdhbW1hKTsKICAgICAgICAgfQogICAgICAgICBwbmdfc2V0X2dhbW1hKHBu
ZywgY0RlZmF1bHRHYW1tYSwgZ2FtbWEpOwotICAgIH0KLSAgICBlbHNlCisgICAgfSBlbHNlCiAg
ICAgICAgIHBuZ19zZXRfZ2FtbWEocG5nLCBjRGVmYXVsdEdhbW1hLCBjSW52ZXJzZUdhbW1hKTsK
IAogICAgIC8vIFRlbGwgbGlicG5nIHRvIHNlbmQgdXMgcm93cyBmb3IgaW50ZXJsYWNlZCBwbmdz
LgpAQCAtMzEwLDEyICsyODIsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgcm93QXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5n
X2J5dGVwIHJvd0J1ZmZlciwKLSAgICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIHJvd0luZGV4
LCBpbnQgaW50ZXJsYWNlUGFzcykKLXsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIq
PihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJvd0J1ZmZlciwg
cm93SW5kZXgsIGludGVybGFjZVBhc3MpOwotfQotCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsIGlu
dCBpbnRlcmxhY2VQYXNzKQogewogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
KQpAQCAtMzI1LDcgKzI5MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsK
ICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewog
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRT
aXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29k
ZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3JlYWRlci0+cG5nUHRyKCkpKS0+ZGVjb2Rp
bmdGYWlsZWQoKTsKICAgICAgICAgICAgIGxvbmdqbXAobV9yZWFkZXItPnBuZ1B0cigpLT5qbXBi
dWYsIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMzksNyArMzA0LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICAgICAg
bV9yZWFkZXItPmNyZWF0ZUludGVybGFjZUJ1ZmZlcigobV9yZWFkZXItPmhhc0FscGhhKCkgPyA0
IDogMykgKiBzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAg
aWYgKHJvd0J1ZmZlciA9PSAwKQorICAgIGlmICghcm93QnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKICAgIC8qIGxpYnBuZyBjb21tZW50cyAocGFzdGVkIGluIGhlcmUgdG8gZXhwbGFpbiB3aGF0
IGZvbGxvd3MpCkBAIC0zODgsNyArMzUzLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2
YWlsYWJsZSh1bnNpZwogICAgIGlmIChkZXN0WSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBi
b29sIHNhd0FscGhhID0gYnVmZmVyLmhhc0FscGhhKCk7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAg
ICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1u
c1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNB
bHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwg
cGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwpAQCAtMzk5LDIxICszNjQsMjgg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIH0KIH0KIAot
dm9pZCBwbmdDb21wbGV0ZShwbmdfc3RydWN0cCBwbmcsIHBuZ19pbmZvcCBpbmZvKQordm9pZCBQ
TkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cG5nQ29tcGxldGUoKTsK
KyAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5maXJzdCgpLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
OwogfQogCi12b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQordm9pZCBQTkdJbWFn
ZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogewotICAgIG1fcmVhZGVyLT5zZXRDb21w
bGV0ZSgpOwotCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgaWYg
KGZhaWxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9w
cmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nIGVt
cHR5LgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwot
ICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBp
ZiAoIW1fcmVhZGVyKQorICAgICAgICBtX3JlYWRlci5zZXQobmV3IFBOR0ltYWdlUmVhZGVyKHRo
aXMpKTsKKworICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3Zl
IHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKKyAgICAvLyBoYXMgZmFpbGVkLgorICAg
IGlmICghbV9yZWFkZXItPmRlY29kZSgqbV9kYXRhLCBvbmx5U2l6ZSkgJiYgaXNBbGxEYXRhUmVj
ZWl2ZWQoKSkKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgLy8gSWYgd2UncmUgZG9uZSBkZWNv
ZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5lZWQgdGhlIFBOR0ltYWdlUmVhZGVyCisgICAgLy8g
YW55bW9yZS4gIChJZiB3ZSBmYWlsZWQsIHxtX3JlYWRlcnwgaGFzIGFscmVhZHkgYmVlbiBjbGVh
cmVkLikKKyAgICBlbHNlIGlmIChpc0NvbXBsZXRlKCkpCisgICAgICAgIG1fcmVhZGVyLmNsZWFy
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lv
biA1MzcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyOCArMzcsMzYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFBOR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIg
ewogICAgIHB1YmxpYzoKICAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKCk7Ci0gICAgICAgIH5QTkdJ
bWFnZURlY29kZXIoKTsKKyAgICAgICAgdmlydHVhbCB+UE5HSW1hZ2VEZWNvZGVyKCk7CiAKKyAg
ICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInBuZyI7IH0KLQotICAgICAgICAvLyBUYWtlIHRoZSBk
YXRhIGFuZCBzdG9yZSBpdC4KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICAgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKLQorICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVh
bCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwotCi0gICAg
ICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSk7CisgICAgICAgIC8vIENBVVRJ
T046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQK
KyAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2Fs
bGluZyB0aGlzIGZyb20gaW5zaWRlCisgICAgICAgIC8vIFBOR0ltYWdlUmVhZGVyIQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2V0RmFpbGVkKCk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20g
bGlicG5nCi0gICAgICAgIHZvaWQgZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgdm9pZCBoZWFk
ZXJBdmFpbGFibGUoKTsKICAgICAgICAgdm9pZCByb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciog
cm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3MpOwogICAgICAg
ICB2b2lkIHBuZ0NvbXBsZXRlKCk7CiAKKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0
eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgorICAgICAgICAv
LyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2Rp
bmcgYWZ0ZXIKKyAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBJZiBkZWNv
ZGluZyBmYWlscyBidXQgdGhlcmUgaXMgbm8gbW9yZQorICAgICAgICAvLyBkYXRhIGNvbWluZywg
c2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgorICAgICAgICB2b2lkIGRlY29kZShib29s
IG9ubHlTaXplKTsKKwogICAgICAgICBPd25QdHI8UE5HSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwor
ICAgICAgICBib29sIG1fZG9Ob3RoaW5nT25GYWlsdXJlOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdC
QTMyQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMiArNDIsMTcgQEAgUkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIoKQogewog
fQogCi0vLyBUaGUgaW1hZ2UgbXVzdCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGll
ZC4uLgotdm9pZCBSR0JBMzJCdWZmZXI6OnNldERlY29kZWRJbWFnZShjb25zdCBRSW1hZ2UmIGlt
YWdlKQorUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBSR0JBMzJC
dWZmZXImIG90aGVyKQogewotICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBtX3NpemUgPSBpbWFn
ZS5zaXplKCk7Ci0gICAgbV9oYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOworICAg
IGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgY29weUJp
dG1hcERhdGEob3RoZXIpOworICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICBzZXRTdGF0
dXMob3RoZXIuc3RhdHVzKCkpOworICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwor
ICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgIHJldHVy
biAqdGhpczsKIH0KIAogdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKQEAgLTgzLDExICs4OCw4
IEBAIGJvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwKIAogICAgIG1fc2l6
ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgbV9pbWFnZSA9IFFJbWFnZShu
ZXdXaWR0aCwgbmV3SGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7
Ci0gICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gQWxsb2NhdGlvbiBmYWls
dXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgotICAgICAgICBzZXRTdGF0dXMoRnJh
bWVDb21wbGV0ZSk7CisgICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CiAKICAgICAvLyBaZXJvIHRoZSBpbWFnZS4KICAgICB6ZXJvRmlsbCgpOwpA
QCAtMTE4LDE3ICsxMjAsMTIgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyhGcmFtZVN0
YXR1cwogICAgIG1fc3RhdHVzID0gc3RhdHVzOwogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1
ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCisvLyBUaGUgaW1hZ2Ug
bXVzdCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGllZC4uLgordm9pZCBSR0JBMzJC
dWZmZXI6OnNldERlY29kZWRJbWFnZShjb25zdCBRSW1hZ2UmIGltYWdlKQogewotICAgIGlmICh0
aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgY29weUJpdG1hcERh
dGEob3RoZXIpOwotICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKLSAgICBzZXRTdGF0dXMob3Ro
ZXIuc3RhdHVzKCkpOwotICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgIHNl
dERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwotICAgIHJldHVybiAqdGhp
czsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9zaXplID0gaW1hZ2Uuc2l6ZSgpOworICAg
IG1faGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKTsKIH0KIAogaW50IFJHQkEzMkJ1
ZmZlcjo6d2lkdGgoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAkocmV2aXNpb24gNTM3
MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVy
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDIyIEBAIFJHQkEzMkJ1ZmZlcjo6
UkdCQTMyQnVmZmVyKCkKIHsKIH0KIAorUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJh
dG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9iaXRtYXAgPSBvdGhlci5tX2JpdG1h
cDsKKyAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGlu
ZyBkaXJlY3RseSBpbnRvIHRoZQorICAgIC8vIGJpdG1hcCB0aHJvdWdob3V0IHRoaXMgb2JqZWN0
J3MgbGlmZXRpbWUuCisgICAgbV9iaXRtYXAubG9ja1BpeGVscygpOworICAgIHNldFJlY3Qob3Ro
ZXIucmVjdCgpKTsKKyAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOworICAgIHNldER1cmF0
aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bv
c2FsTWV0aG9kKCkpOworICAgIHJldHVybiAqdGhpczsKK30KKwogdm9pZCBSR0JBMzJCdWZmZXI6
OmNsZWFyKCkKIHsKICAgICBtX2JpdG1hcC5yZXNldCgpOwpAQCAtNjcsMTEgKzgzLDggQEAgYm9v
bCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLAogICAgIC8vIG90aGVyd2lzZS4K
ICAgICBBU1NFUlQod2lkdGgoKSA9PSAwICYmIGhlaWdodCgpID09IDApOwogICAgIG1fYml0bWFw
LnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG5ld1dpZHRoLCBuZXdIZWln
aHQpOwotICAgIGlmICghbV9iaXRtYXAuYWxsb2NQaXhlbHMoKSkgewotICAgICAgICAvLyBBbGxv
Y2F0aW9uIGZhaWx1cmUsIG1heWJlIHRoZSBiaXRtYXAgd2FzIHRvbyBiaWcuCi0gICAgICAgIHNl
dFN0YXR1cyhGcmFtZUNvbXBsZXRlKTsKKyAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKICAgICAvLyBaZXJvIHRoZSBpbWFnZS4K
ICAgICB6ZXJvRmlsbCgpOwpAQCAtMTAxLDIyICsxMTQsNiBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6
c2V0U3RhdHVzKEZyYW1lU3RhdHVzCiAgICAgICAgIG1fYml0bWFwLnNldERhdGFDb21wbGV0ZSgp
OyAgLy8gVGVsbCB0aGUgYml0bWFwIGl0J3MgZG9uZS4KIH0KIAotUkdCQTMyQnVmZmVyJiBSR0JB
MzJCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQotewotICAgIGlm
ICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgbV9iaXRtYXAg
PSBvdGhlci5tX2JpdG1hcDsKLSAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdl
IHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQotICAgIC8vIGJpdG1hcCB0aHJvdWdo
b3V0IHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCi0gICAgbV9iaXRtYXAubG9ja1BpeGVscygpOwot
ICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKLSAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkp
OwotICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgIHNldERpc3Bvc2FsTWV0
aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQogaW50
IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2JpdG1hcC53aWR0
aCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gNTM3
MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0
JiByLCBGCiAgICAgaW50IG51bUl0ZW1zID0gW21fcG9wdXAuZ2V0KCkgbnVtYmVyT2ZJdGVtc107
CiAgICAgaWYgKG51bUl0ZW1zIDw9IDApIHsKICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKKyAgICAgICAgICAgIGNsaWVudCgp
LT5wb3B1cERpZEhpZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQobnVt
SXRlbXMgPiBpbmRleCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3co
Y29uc3QgSW50UmVjdCYgciwgRgogCiAgICAgaWYgKGNsaWVudCgpKSB7CiAgICAgICAgIGludCBu
ZXdJbmRleCA9IFttX3BvcHVwLmdldCgpIGluZGV4T2ZTZWxlY3RlZEl0ZW1dOwotICAgICAgICBj
bGllbnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOworICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRI
aWRlKCk7CiAKICAgICAgICAgLy8gQWRqdXN0IG5ld0luZGV4IGZvciBoaWRkZW4gZmlyc3QgaXRl
bS4KICAgICAgICAgaWYgKCFjbGllbnQoKS0+c2hvdWxkUG9wT3ZlcigpKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RdEFic3RyYWN0V2ViUG9wdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvUXRBYnN0cmFjdFdlYlBvcHVwLmNwcAkocmV2aXNpb24gNTM3MTEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L1F0QWJzdHJhY3RXZWJQb3B1cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEwICszNiwxMCBAQCBRdEFic3RyYWN0V2ViUG9wdXA6On5RdEFic3RyYWN0V2Vi
UG9wdXAoCiB7CiB9CiAKLXZvaWQgUXRBYnN0cmFjdFdlYlBvcHVwOjpwb3B1cERpZEhpZGUoYm9v
bCBhY2NlcHRTdWdnZXN0aW9ucykKK3ZvaWQgUXRBYnN0cmFjdFdlYlBvcHVwOjpwb3B1cERpZEhp
ZGUoKQogewogICAgIFFfQVNTRVJUKG1fcG9wdXBDbGllbnQpOwotICAgIG1fcG9wdXBDbGllbnQt
PnBvcHVwRGlkSGlkZShhY2NlcHRTdWdnZXN0aW9ucyk7CisgICAgbV9wb3B1cENsaWVudC0+cG9w
dXBEaWRIaWRlKCk7CiB9CiAKIHZvaWQgUXRBYnN0cmFjdFdlYlBvcHVwOjp2YWx1ZUNoYW5nZWQo
aW50IGluZGV4KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdEFic3RyYWN0V2ViUG9wdXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1F0QWJzdHJhY3RXZWJQb3B1cC5o
CShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUXRBYnN0cmFjdFdlYlBv
cHVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzaG93KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkgPSAwOwogCi0gICAg
dm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9ucyk7CisgICAgdm9pZCBwb3B1
cERpZEhpZGUoKTsKICAgICB2b2lkIHZhbHVlQ2hhbmdlZChpbnQgaW5kZXgpOwogCiAgICAgUUZv
bnQgZm9udCgpIHsgcmV0dXJuIG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5mb250
KCk7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24g
NTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgdm9pZCBQb3B1cE1lbnU6OmhpZGUoKQogICAgIDo6
U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19ISURFKTsKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAg
ICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVw
RGlkSGlkZSgpOwogCiAgICAgLy8gUG9zdCBhIFdNX05VTEwgbWVzc2FnZSB0byB3YWtlIHVwIHRo
ZSBtZXNzYWdlIHB1bXAgaWYgbmVjZXNzYXJ5LgogICAgIDo6UG9zdE1lc3NhZ2UobV9wb3B1cCwg
V01fTlVMTCwgMCwgMCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkocmV2
aXNpb24gNTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIFBvcHVwTWVudTo6T25NZW51SXRlbVNl
bGVjdGVkKHd4Q29tCiB7CiAgICAgaWYgKGNsaWVudCgpKSB7CiAgICAgICAgIGNsaWVudCgpLT52
YWx1ZUNoYW5nZWQoZXZlbnQuR2V0SWQoKSAtIHNfbWVudVN0YXJ0SWQpOwotICAgICAgICBjbGll
bnQoKS0+cG9wdXBEaWRIaWRlKHRydWUpOworICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRl
KCk7CiAgICAgfQogICAgIC8vIFRPRE86IERvIHdlIG5lZWQgdG8gY2FsbCBEaXNjb25uZWN0IGhl
cmU/IERvIHdlIGhhdmUgYSByZWYgdG8gdGhlIG5hdGl2ZSB3aW5kb3cgc3RpbGw/CiB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUx
LDcgKzQ1MSw3IEBAIGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnMKICAg
ICByZXR1cm4gc2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRleChzZWxlY3QtPnNlbGVjdGVkSW5kZXgo
KSk7CiB9CiAKLXZvaWQgUmVuZGVyTWVudUxpc3Q6OnBvcHVwRGlkSGlkZShib29sKQordm9pZCBS
ZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRlKCkKIHsKICAgICBtX3BvcHVwSXNWaXNpYmxlID0g
ZmFsc2U7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDUz
NzExKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRp
bmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwb3B1
cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9ucyk7CisgICAgdmlydHVhbCB2b2lkIHBvcHVw
RGlkSGlkZSgpOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQg
bGlzdEluZGV4KSBjb25zdDsKQEAgLTkyLDcgKzkyLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgeyByZXR1cm4gIVBPUFVQ
X01FTlVfUFVMTFNfRE9XTjsgfQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWdu
ZWQgbGlzdEluZGV4LCBib29sIGZpcmVPbkNoYW5nZSA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7fQogICAgIHZpcnR1YWwgRm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3coKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNTM3MTEpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MjgsNyArNzI4LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VsZWN0
ZQogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnBvcHVwRGlkSGlkZShib29sKQordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBv
cHVwRGlkSGlkZSgpCiB7CiAgICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmgJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDYgQEAgcHJpdmF0ZToK
IAogICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwotICAg
IHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7fQogICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CiAgICAgdmly
dHVhbCBTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygp
OyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKQEAgLTExMCw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGNsaWVu
dFBhZGRpbmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9wdXBEaWRIaWRlKCk7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1MzcxMikK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMC0wMS0yMiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisK
KyAgICAgICAgTm90IHJldmlld2VkLCBiYWNrb3V0LgorCisgICAgICAgIEJhY2sgb3V0IHI1MjY3
Mywgd2hpY2ggY2F1c2VkIHNldmVyYWwgcmVncmVzc2lvbnMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUzMworCisgICAgICAgICogc3JjL0F1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21w
bGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0pOgorICAgICAgICAqIHNy
Yy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaDoKKwogMjAxMC0wMS0yMSAgSmVyZW15IE9y
bG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBG
aXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
MTYgKzU5LDExIEBAIHZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0aWEKICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlvbnMsCiAgICAgaW50IGRlZmF1
bHRTdWdnZXN0aW9uSW5kZXgpCiB7Ci0gICAgaWYgKCFtX2xhc3RGaWVsZFZhbHVlcykKLSAgICAg
ICAgbV9sYXN0RmllbGRWYWx1ZXMuc2V0KG5ldyBGaWVsZFZhbHVlc01hcCk7CiAgICAgQVNTRVJU
KGRlZmF1bHRTdWdnZXN0aW9uSW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KHN1Z2dlc3Rpb25zLnNp
emUoKSkpOwogICAgIG1fdGV4dEZpZWxkID0gdGV4dEZpZWxkOwotICAgIG1fdHlwZWRGaWVsZFZh
bHVlID0gdGV4dEZpZWxkLT52YWx1ZSgpOwogICAgIG1fc2VsZWN0ZWRJbmRleCA9IGRlZmF1bHRT
dWdnZXN0aW9uSW5kZXg7CiAgICAgc2V0U3VnZ2VzdGlvbnMoc3VnZ2VzdGlvbnMpOwogCi0gICAg
c2V0SW5pdGlhbEF1dG9jb21wbGV0ZVZhbHVlKCk7Ci0KICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uOwogICAgIG1fd2ViVmlldy0+dGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1
ZVdlYmtpdENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgLy8gVXNlIGEgc21hbGxlciBm
b250IHNpemUgdG8gbWF0Y2ggSUUvRmlyZWZveC4KQEAgLTg0LDQwICs3OSw2IEBAIHZvaWQgQXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0aWEKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dEZpZWxkLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OwogfQogCi0KLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRJbml0aWFsQXV0
b2NvbXBsZXRlVmFsdWUoKQotewotICAgIGlmICghbV9zdWdnZXN0aW9ucy5zaXplKCkgfHwgIW1f
dGV4dEZpZWxkLT5uYW1lKCkubGVuZ3RoKCkgfHwgIW1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgaW50IG5ld0luZGV4ID0gbV9zZWxlY3RlZEluZGV4ID49
IDAgPyBtX3NlbGVjdGVkSW5kZXggOiAwOwotICAgIFN0cmluZyBzdWdnZXN0aW9uID0gbV9zdWdn
ZXN0aW9uc1tuZXdJbmRleF07Ci0gICAgYm9vbCBoYXNQcmV2aW91c1ZhbHVlID0gbV9sYXN0Rmll
bGRWYWx1ZXMtPmNvbnRhaW5zKG1fdGV4dEZpZWxkLT5uYW1lKCkpOwotICAgIFN0cmluZyBwcmV2
VmFsdWU7Ci0gICAgaWYgKGhhc1ByZXZpb3VzVmFsdWUpCi0gICAgICAgIHByZXZWYWx1ZSA9IG1f
bGFzdEZpZWxkVmFsdWVzLT5nZXQobV90ZXh0RmllbGQtPm5hbWUoKSk7Ci0gICAgaWYgKCFoYXNQ
cmV2aW91c1ZhbHVlIHx8IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpID4gbV9sYXN0RmllbGRW
YWx1ZXMtPmdldChtX3RleHRGaWVsZC0+bmFtZSgpKS5sZW5ndGgoKSkgewotICAgICAgICAgIGlu
dCBzdGFydCA9IDA7Ci0gICAgICAgICAgU3RyaW5nIG5ld1N1Z2dlc3Rpb24gPSBzdWdnZXN0aW9u
OwotICAgICAgICAgIGlmIChzdWdnZXN0aW9uLnN0YXJ0c1dpdGgobV90eXBlZEZpZWxkVmFsdWUp
KQotICAgICAgICAgICAgICBtX3NlbGVjdGVkSW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgICBp
ZiAoc3VnZ2VzdGlvbi5zdGFydHNXaXRoKG1fdHlwZWRGaWVsZFZhbHVlLCBmYWxzZSkpIHsKLSAg
ICAgICAgICAgICAgbmV3U3VnZ2VzdGlvbiA9IG1fdHlwZWRGaWVsZFZhbHVlOwotICAgICAgICAg
ICAgICBpZiAoc3VnZ2VzdGlvbi5sZW5ndGgoKSA+IG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICAgICAgICBuZXdTdWdnZXN0aW9uLmFwcGVuZChzdWdnZXN0aW9uLnN1
YnN0cmluZyhtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICBzdWdnZXN0aW9uLmxlbmd0aCgpIC0gbV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCkpKTsKLSAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzdGFydCA9IG1fdHlwZWRGaWVsZFZhbHVlLmxl
bmd0aCgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBtX3RleHRGaWVsZC0+c2V0U3VnZ2VzdGVk
VmFsdWUobmV3U3VnZ2VzdGlvbik7Ci0gICAgICAgICAgbV90ZXh0RmllbGQtPnNldFNlbGVjdGlv
blJhbmdlKHN0YXJ0LCBuZXdTdWdnZXN0aW9uLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgaWYgKGhh
c1ByZXZpb3VzVmFsdWUpCi0gICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5zZXQobV90ZXh0Rmll
bGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgbV9sYXN0
RmllbGRWYWx1ZXMtPmFkZChtX3RleHRGaWVsZC0+bmFtZSgpLCBtX3R5cGVkRmllbGRWYWx1ZSk7
Ci19Ci0KLQogdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCh1
bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKICAgICBtX3RleHRGaWVsZC0+
c2V0VmFsdWUobV9zdWdnZXN0aW9uc1tsaXN0SW5kZXhdKTsKQEAgLTEyOCwyMSArODksNiBAQCB2
b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVDCiAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3RleHRGaWVsZC5nZXQoKSkpOwogfQogCi12b2lkIEF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCBsaXN0
SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAgICBpZiAobGlzdEluZGV4ICE9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtMSkpIHsKLSAgICAgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3RlZFZh
bHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7Ci0gICAgICAgIG1fdGV4dEZpZWxkLT5zZXRT
ZWxlY3Rpb25SYW5nZShtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XS5sZW5ndGgo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3R5cGVkRmll
bGRWYWx1ZSk7Ci0gICAgICBpZiAobV9sYXN0RmllbGRWYWx1ZXMtPmNvbnRhaW5zKG1fdGV4dEZp
ZWxkLT5uYW1lKCkpKQotICAgICAgICAgIG1fbGFzdEZpZWxkVmFsdWVzLT5zZXQobV90ZXh0Rmll
bGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUpOwotICAgICAgZWxzZQotICAgICAgICAgIG1f
bGFzdEZpZWxkVmFsdWVzLT5hZGQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFs
dWUpOwotICAgIH0KLX0KLQogU3RyaW5nIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aXRl
bVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgIHJldHVybiBtX3N1Z2dlc3Rp
b25zW2xpc3RJbmRleF07CkBAIC0xNzIsMzEgKzExOCwxNCBAQCBpbnQgQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50OjpjbGllbnRQCiAgICAgcmV0dXJuIHN0eWxlID8gbV93ZWJWaWV3LT50aGVt
ZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKSA6IDA7CiB9CiAKLXZvaWQgQXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0
aW9ucykKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUoKQog
ewotICAgIGlmIChhY2NlcHRTdWdnZXN0aW9ucykgewotICAgICAgICBTdHJpbmcgc3VnZ2VzdGVk
VmFsdWUgPSBtX3RleHRGaWVsZC0+c3VnZ2VzdGVkVmFsdWUoKTsKLSAgICAgICAgaWYgKCFzdWdn
ZXN0ZWRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShz
dWdnZXN0ZWRWYWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1
ZShtX3R5cGVkRmllbGRWYWx1ZSk7Ci0KLSAgICByZXNldExhc3RGaWVsZFZhbHVlKCk7CiAgICAg
bV93ZWJWaWV3LT5hdXRvQ29tcGxldGVQb3B1cERpZEhpZGUoKTsKIH0KIAogdm9pZCBBdXRvY29t
cGxldGVQb3B1cE1lbnVDbGllbnQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgp
CiB7CiAgICAgbV90ZXh0RmllbGQtPnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7
Ci0gICAgcmVzZXRMYXN0RmllbGRWYWx1ZSgpOwotfQotCi12b2lkIEF1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudDo6cmVzZXRMYXN0RmllbGRWYWx1ZSgpCi17Ci0gICAgaWYgKG1fbGFzdEZpZWxk
VmFsdWVzLT5jb250YWlucyhtX3RleHRGaWVsZC0+bmFtZSgpKSkKLSAgICAgICAgbV9sYXN0Rmll
bGRWYWx1ZXMtPnNldChtX3RleHRGaWVsZC0+bmFtZSgpLCBtX3RleHRGaWVsZC0+dmFsdWUoKSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5u
YW1lKCksIG1fdGV4dEZpZWxkLT52YWx1ZSgpKTsKIH0KIAogRm9udFNlbGVjdG9yKiBBdXRvY29t
cGxldGVQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgJKHJldmlz
aW9uIDUzNzExKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBwdWJsaWM6CiAKICAgICAv
LyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMgPSB0cnVlKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVGV4
dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5n
IGl0ZW1Ub29sVGlwKHVuc2lnbmVkIGxhc3RJbmRleCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6
U3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTcwLDcgKzY5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGxpc3RTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0aW9ucy5zaXplKCk7IH0KICAg
ICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZElu
ZGV4OyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rp
b24pOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC04NiwxNyArODUsMTIg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0Rmll
bGRTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0SW5pdGlhbEF1dG9jb21wbGV0ZVZhbHVlKCk7
Ci0gICAgdm9pZCByZXNldExhc3RGaWVsZFZhbHVlKCk7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudD4gbV90ZXh0RmllbGQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmlu
Zz4gbV9zdWdnZXN0aW9uczsKICAgICBpbnQgbV9zZWxlY3RlZEluZGV4OwogICAgIFdlYlZpZXdJ
bXBsKiBtX3dlYlZpZXc7Ci0gICAgV2ViQ29yZTo6U3RyaW5nIG1fdHlwZWRGaWVsZFZhbHVlOwog
ICAgIE93blB0cjxXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZT4gbV9zdHlsZTsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBXZWJDb3JlOjpTdHJpbmc+IEZpZWxkVmFsdWVzTWFw
OwotICAgIE93blB0cjxGaWVsZFZhbHVlc01hcD4gbV9sYXN0RmllbGRWYWx1ZXM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNTM3MTIpCisrKyBXZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDEtMjIgIFBl
dGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdl
ZCwgYmFja291dC4KKworICAgICAgICBCYWNrIG91dCByNTI2NzMsIHdoaWNoIGNhdXNlZCBzZXZl
cmFsIHJlZ3Jlc3Npb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI1MzMKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQ
b3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxiYWNrV2ViUG9wdXBDb21ibzo6aGlk
ZVBvcHVwKToKKwogMjAxMC0wMS0yMiAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdpcmlzaEBmb3J3
YXJkYmlhcy5pbj4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCShy
ZXZpc2lvbiA1MzcxMikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2Vi
UG9wdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgUXRGYWxsYmFj
a1dlYlBvcHVwQ29tYm86OmhpZGVQb3B1cCgKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9vd25l
clBvcHVwLm1fcG9wdXBWaXNpYmxlID0gZmFsc2U7Ci0gICAgbV9vd25lclBvcHVwLnBvcHVwRGlk
SGlkZSh0cnVlKTsKKyAgICBtX293bmVyUG9wdXAucG9wdXBEaWRIaWRlKCk7CiB9CiAKIC8vIFF0
RmFsbGJhY2tXZWJQb3B1cAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47225</attachid>
            <date>2010-01-22 13:54:09 -0800</date>
            <delta_ts>2010-01-22 14:06:28 -0800</delta_ts>
            <desc>Backout patch, for real</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20823</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDEtMjIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZCwgYmFja291dC4KKworICAgICAgICBCYWNr
IG91dCByNTI2NzMsIHdoaWNoIGNhdXNlZCBzZXZlcmFsIHJlZ3Jlc3Npb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzMKKworICAgICAgICAq
IHBsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1BvcHVwTWVudUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVy
OjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpoYW5kbGVLZXlF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmFiYW5kb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjphY2NlcHRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cExpc3RCb3g6OnNlbGVjdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlz
dEJveDo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94Ojpo
aWRlUG9wdXApOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjptZW51VW5tYXBwZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9Qb3B1cE1lbnVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNo
b3cpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1F0QWJzdHJhY3RXZWJQb3B1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpRdEFic3RyYWN0V2ViUG9wdXA6OnBvcHVwRGlkSGlkZSk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUXRBYnN0cmFjdFdlYlBvcHVwLmg6CisgICAgICAgICogcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTWVudTo6T25NZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnBv
cHVwRGlkSGlkZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlkSGlkZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorCiAyMDEw
LTAxLTIyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVu
dUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50
LmgJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBQb3B1cE1lbnVDbGllbnQg
ewogcHVibGljOgogICAgIHZpcnR1YWwgflBvcHVwTWVudUNsaWVudCgpIHt9CiAgICAgdmlydHVh
bCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9
IHRydWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCBs
aXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpID0gMDsKKwogICAgIHZpcnR1YWwgU3Ry
aW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
U3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwpA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1Jp
Z2h0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHBvcHVwRGlkSGlkZShib29sIGFjY2VwdFN1Z2dlc3Rpb25zKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBvcHVwRGlkSGlkZSgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJh
dG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpdGVt
SXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCA9IDA7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcAkocmV2aXNp
b24gNTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAvLyBQ
b3B1cExpc3RCb3ggbWV0aG9kcwogCiAgICAgLy8gSGlkZXMgdGhlIHBvcHVwLgotICAgIHZvaWQg
aGlkZVBvcHVwKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpOworICAgIHZvaWQgaGlkZVBvcHVwKCk7
CiAKICAgICAvLyBVcGRhdGVzIG91ciBpbnRlcm5hbCBsaXN0IHRvIG1hdGNoIHRoZSBjbGllbnQu
CiAgICAgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQg
UG9wdXBDb250YWluZXI6OnNob3dFeHRlcm5hbChjb25zdCAKIAogdm9pZCBQb3B1cENvbnRhaW5l
cjo6aGlkZVBvcHVwKCkKIHsKLSAgICBsaXN0Qm94KCktPmhpZGVQb3B1cCh0cnVlKTsKKyAgICBs
aXN0Qm94KCktPmhpZGVQb3B1cCgpOwogfQogCiB2b2lkIFBvcHVwQ29udGFpbmVyOjpsYXlvdXQo
KQpAQCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgUG9wdXBMaXN0Qm94OjpoYW5kbGVLZXlFdmVudChj
b25zdCAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBWS0VZX1JFVFVSTjoKICAgICAg
ICAgaWYgKG1fc2VsZWN0ZWRJbmRleCA9PSAtMSkgIHsKLSAgICAgICAgICAgIGhpZGVQb3B1cChm
YWxzZSk7CisgICAgICAgICAgICBoaWRlUG9wdXAoKTsKICAgICAgICAgICAgIC8vIERvbid0IGVh
dCB0aGUgZW50ZXIgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgUG9wdXBMaXN0Qm94Ojph
YmFuZG9uKCkKIAogICAgIG1fc2VsZWN0ZWRJbmRleCA9IG1fb3JpZ2luYWxJbmRleDsKIAotICAg
IGhpZGVQb3B1cChmYWxzZSk7CisgICAgaGlkZVBvcHVwKCk7CiAKICAgICBpZiAobV9hY2NlcHRl
ZEluZGV4T25BYmFuZG9uID49IDApIHsKICAgICAgICAgbV9wb3B1cENsaWVudC0+dmFsdWVDaGFu
Z2VkKG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRvbik7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBQ
b3B1cExpc3RCb3g6OmFjY2VwdEluZGV4KGludCBpbmRleAogICAgIGlmIChpbmRleCA8IDApIHsK
ICAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQpIHsKICAgICAgICAgICAgIC8vIEVudGVyIHByZXNz
ZWQgd2l0aCBubyBzZWxlY3Rpb24sIGp1c3QgY2xvc2UgdGhlIHBvcHVwLgotICAgICAgICAgICAg
aGlkZVBvcHVwKGZhbHNlKTsKKyAgICAgICAgICAgIGhpZGVQb3B1cCgpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MzAsNyArOTMwLDcgQEAgdm9pZCBQb3B1cExpc3RC
b3g6OmFjY2VwdEluZGV4KGludCBpbmRleAogICAgICAgICBSZWZQdHI8UG9wdXBMaXN0Qm94PiBr
ZWVwQWxpdmUodGhpcyk7CiAKICAgICAgICAgLy8gSGlkZSBvdXJzZWx2ZXMgZmlyc3Qgc2luY2Ug
dmFsdWVDaGFuZ2VkIG1heSBoYXZlIG51bWVyb3VzIHNpZGUtZWZmZWN0cy4KLSAgICAgICAgaGlk
ZVBvcHVwKHRydWUpOworICAgICAgICBoaWRlUG9wdXAoKTsKIAogICAgICAgICAvLyBUZWxsIHRo
ZSA8c2VsZWN0PiBQb3B1cE1lbnVDbGllbnQgd2hhdCBpbmRleCB3YXMgc2VsZWN0ZWQuCiAgICAg
ICAgIG1fcG9wdXBDbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7CkBAIC05NDgsNyArOTQ4LDYg
QEAgdm9pZCBQb3B1cExpc3RCb3g6OnNlbGVjdEluZGV4KGludCBpbmRleAogICAgICAgICBpbnZh
bGlkYXRlUm93KG1fc2VsZWN0ZWRJbmRleCk7CiAKICAgICAgICAgc2Nyb2xsVG9SZXZlYWxTZWxl
Y3Rpb24oKTsKLSAgICAgICAgbV9wb3B1cENsaWVudC0+c2VsZWN0aW9uQ2hhbmdlZChtX3NlbGVj
dGVkSW5kZXgpOwogICAgIH0KIH0KIApAQCAtMTAxMCw3ICsxMDA5LDYgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmNsZWFyU2VsZWN0aW9uKCkKICAgICBpZiAobV9zZWxlY3RlZEluZGV4ICE9IC0xKSB7
CiAgICAgICAgIGludmFsaWRhdGVSb3cobV9zZWxlY3RlZEluZGV4KTsKICAgICAgICAgbV9zZWxl
Y3RlZEluZGV4ID0gLTE7Ci0gICAgICAgIG1fcG9wdXBDbGllbnQtPnNlbGVjdGlvbkNoYW5nZWQo
bV9zZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKQEAgLTEwNzgsNyArMTA3Niw3IEBAIHZvaWQg
UG9wdXBMaXN0Qm94OjphZGp1c3RTZWxlY3RlZEluZGV4KGkKICAgICBzY3JvbGxUb1JldmVhbFNl
bGVjdGlvbigpOwogfQogCi12b2lkIFBvcHVwTGlzdEJveDo6aGlkZVBvcHVwKGJvb2wgYWNjZXB0
U3VnZ2VzdGlvbnMpCit2b2lkIFBvcHVwTGlzdEJveDo6aGlkZVBvcHVwKCkKIHsKICAgICBpZiAo
cGFyZW50KCkpIHsKICAgICAgICAgUG9wdXBDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19j
YXN0PFBvcHVwQ29udGFpbmVyKj4ocGFyZW50KCkpOwpAQCAtMTA4Niw3ICsxMDg0LDcgQEAgdm9p
ZCBQb3B1cExpc3RCb3g6OmhpZGVQb3B1cChib29sIGFjY2VwdAogICAgICAgICAgICAgY29udGFp
bmVyLT5jbGllbnQoKS0+cG9wdXBDbG9zZWQoY29udGFpbmVyKTsKICAgICB9CiAKLSAgICBtX3Bv
cHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoYWNjZXB0U3VnZ2VzdGlvbnMpOworICAgIG1fcG9wdXBD
bGllbnQtPnBvcHVwRGlkSGlkZSgpOwogfQogCiB2b2lkIFBvcHVwTGlzdEJveDo6dXBkYXRlRnJv
bUVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCShyZXZp
c2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFBvcHVwTWVudTo6bWVudUl0ZW1B
Y3RpdmF0ZWQoR3RrTWVuCiB2b2lkIFBvcHVwTWVudTo6bWVudVVubWFwcGVkKEd0a1dpZGdldCos
IFBvcHVwTWVudSogdGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIHRo
YXQtPmNsaWVudCgpLT5wb3B1cERpZEhpZGUodHJ1ZSk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBv
cHVwRGlkSGlkZSgpOwogfQogCiB2b2lkIFBvcHVwTWVudTo6bWVudVBvc2l0aW9uRnVuY3Rpb24o
R3RrTWVudSosIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIFBvcHVwTWVudSog
dGhhdCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDUz
NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVj
dCYgciwgRgogICAgIGludCBudW1JdGVtcyA9IFttX3BvcHVwLmdldCgpIG51bWJlck9mSXRlbXNd
OwogICAgIGlmIChudW1JdGVtcyA8PSAwKSB7CiAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAg
ICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUodHJ1ZSk7CisgICAgICAgICAgICBjbGllbnQo
KS0+cG9wdXBEaWRIaWRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKG51
bUl0ZW1zID4gaW5kZXgpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93
KGNvbnN0IEludFJlY3QmIHIsIEYKIAogICAgIGlmIChjbGllbnQoKSkgewogICAgICAgICBpbnQg
bmV3SW5kZXggPSBbbV9wb3B1cC5nZXQoKSBpbmRleE9mU2VsZWN0ZWRJdGVtXTsKLSAgICAgICAg
Y2xpZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlk
SGlkZSgpOwogCiAgICAgICAgIC8vIEFkanVzdCBuZXdJbmRleCBmb3IgaGlkZGVuIGZpcnN0IGl0
ZW0uCiAgICAgICAgIGlmICghY2xpZW50KCktPnNob3VsZFBvcE92ZXIoKSkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUXRBYnN0cmFjdFdlYlBvcHVwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1F0QWJzdHJhY3RXZWJQb3B1cC5jcHAJKHJldmlzaW9uIDUzNzExKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdEFic3RyYWN0V2ViUG9wdXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgUXRBYnN0cmFjdFdlYlBvcHVwOjp+UXRBYnN0cmFjdFdl
YlBvcHVwKAogewogfQogCi12b2lkIFF0QWJzdHJhY3RXZWJQb3B1cDo6cG9wdXBEaWRIaWRlKGJv
b2wgYWNjZXB0U3VnZ2VzdGlvbnMpCit2b2lkIFF0QWJzdHJhY3RXZWJQb3B1cDo6cG9wdXBEaWRI
aWRlKCkKIHsKICAgICBRX0FTU0VSVChtX3BvcHVwQ2xpZW50KTsKLSAgICBtX3BvcHVwQ2xpZW50
LT5wb3B1cERpZEhpZGUoYWNjZXB0U3VnZ2VzdGlvbnMpOworICAgIG1fcG9wdXBDbGllbnQtPnBv
cHVwRGlkSGlkZSgpOwogfQogCiB2b2lkIFF0QWJzdHJhY3RXZWJQb3B1cDo6dmFsdWVDaGFuZ2Vk
KGludCBpbmRleCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUXRBYnN0cmFjdFdlYlBvcHVw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdEFic3RyYWN0V2ViUG9wdXAu
aAkocmV2aXNpb24gNTM3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1F0QWJzdHJhY3RXZWJQ
b3B1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2hvdygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpID0gMDsKIAotICAg
IHZvaWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpOworICAgIHZvaWQgcG9w
dXBEaWRIaWRlKCk7CiAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoaW50IGluZGV4KTsKIAogICAgIFFG
b250IGZvbnQoKSB7IHJldHVybiBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkuZm9u
dCgpOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9u
IDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUG9wdXBNZW51OjpoaWRlKCkKICAgICA6
OlNob3dXaW5kb3cobV9wb3B1cCwgU1dfSElERSk7CiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAg
ICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUodHJ1ZSk7CisgICAgICAgIGNsaWVudCgpLT5wb3B1
cERpZEhpZGUoKTsKIAogICAgIC8vIFBvc3QgYSBXTV9OVUxMIG1lc3NhZ2UgdG8gd2FrZSB1cCB0
aGUgbWVzc2FnZSBwdW1wIGlmIG5lY2Vzc2FyeS4KICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAs
IFdNX05VTEwsIDAsIDApOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHJl
dmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBQb3B1cE1lbnU6Ok9uTWVudUl0ZW1T
ZWxlY3RlZCh3eENvbQogewogICAgIGlmIChjbGllbnQoKSkgewogICAgICAgICBjbGllbnQoKS0+
dmFsdWVDaGFuZ2VkKGV2ZW50LkdldElkKCkgLSBzX21lbnVTdGFydElkKTsKLSAgICAgICAgY2xp
ZW50KCktPnBvcHVwRGlkSGlkZSh0cnVlKTsKKyAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlk
ZSgpOwogICAgIH0KICAgICAvLyBUT0RPOiBEbyB3ZSBuZWVkIHRvIGNhbGwgRGlzY29ubmVjdCBo
ZXJlPyBEbyB3ZSBoYXZlIGEgcmVmIHRvIHRoZSBuYXRpdmUgd2luZG93IHN0aWxsPwogfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gNTM3MTEpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
MSw3ICs0NTEsNyBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OnNlbGVjdGVkSW5kZXgoKSBjb25zCiAg
ICAgcmV0dXJuIHNlbGVjdC0+b3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0LT5zZWxlY3RlZEluZGV4
KCkpOwogfQogCi12b2lkIFJlbmRlck1lbnVMaXN0Ojpwb3B1cERpZEhpZGUoYm9vbCkKK3ZvaWQg
UmVuZGVyTWVudUxpc3Q6OnBvcHVwRGlkSGlkZSgpCiB7CiAgICAgbV9wb3B1cElzVmlzaWJsZSA9
IGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA1
MzcxMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRk
aW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9w
dXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbnMpOworICAgIHZpcnR1YWwgdm9pZCBwb3B1
cERpZEhpZGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3Q7CkBAIC05Miw3ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuICFQT1BV
UF9NRU5VX1BVTExTX0RPV047IH0KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2ln
bmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlT25DaGFuZ2UgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkge30KICAgICB2aXJ0dWFsIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBo
b3N0V2luZG93KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDUzNzExKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzI4LDcgKzcyOCw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVj
dGUKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojpwb3B1cERpZEhpZGUoYm9vbCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
b3B1cERpZEhpZGUoKQogewogICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oCShyZXZpc2lvbiA1MzcxMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw2IEBAIHByaXZhdGU6
CiAKICAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkge30KICAgICB2
aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwogICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3Q7CkBAIC0xMTAsNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBjbGll
bnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2VzdGlvbik7CisgICAgdmlydHVhbCB2b2lk
IHBvcHVwRGlkSGlkZSgpOwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTM3MTIp
CisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTAtMDEtMjIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgor
CisgICAgICAgIE5vdCByZXZpZXdlZCwgYmFja291dC4KKworICAgICAgICBCYWNrIG91dCByNTI2
NzMsIHdoaWNoIGNhdXNlZCBzZXZlcmFsIHJlZ3Jlc3Npb25zLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzMKKworICAgICAgICAqIHNyYy9BdXRv
Y29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29t
cGxldGVQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKiBz
cmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Lmg6CisKIDIwMTAtMDEtMjEgIEplcmVteSBP
cmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
RmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRl
UG9wdXBNZW51Q2xpZW50LmNwcAkocmV2aXNpb24gNTM3MTEpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDE2ICs1OSwxMSBAQCB2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aW5pdGlhCiAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1Z2dlc3Rpb25zLAogICAgIGludCBkZWZh
dWx0U3VnZ2VzdGlvbkluZGV4KQogewotICAgIGlmICghbV9sYXN0RmllbGRWYWx1ZXMpCi0gICAg
ICAgIG1fbGFzdEZpZWxkVmFsdWVzLnNldChuZXcgRmllbGRWYWx1ZXNNYXApOwogICAgIEFTU0VS
VChkZWZhdWx0U3VnZ2VzdGlvbkluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihzdWdnZXN0aW9ucy5z
aXplKCkpKTsKICAgICBtX3RleHRGaWVsZCA9IHRleHRGaWVsZDsKLSAgICBtX3R5cGVkRmllbGRW
YWx1ZSA9IHRleHRGaWVsZC0+dmFsdWUoKTsKICAgICBtX3NlbGVjdGVkSW5kZXggPSBkZWZhdWx0
U3VnZ2VzdGlvbkluZGV4OwogICAgIHNldFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zKTsKIAotICAg
IHNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSgpOwotCiAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKICAgICBtX3dlYlZpZXctPnRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFs
dWVXZWJraXRDb250cm9sLCBmb250RGVzY3JpcHRpb24pOwogICAgIC8vIFVzZSBhIHNtYWxsZXIg
Zm9udCBzaXplIHRvIG1hdGNoIElFL0ZpcmVmb3guCkBAIC04NCw0MCArNzksNiBAQCB2b2lkIEF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aW5pdGlhCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRGaWVsZC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
KTsKIH0KIAotCi12b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2V0SW5pdGlhbEF1
dG9jb21wbGV0ZVZhbHVlKCkKLXsKLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnMuc2l6ZSgpIHx8ICFt
X3RleHRGaWVsZC0+bmFtZSgpLmxlbmd0aCgpIHx8ICFtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBuZXdJbmRleCA9IG1fc2VsZWN0ZWRJbmRleCA+
PSAwID8gbV9zZWxlY3RlZEluZGV4IDogMDsKLSAgICBTdHJpbmcgc3VnZ2VzdGlvbiA9IG1fc3Vn
Z2VzdGlvbnNbbmV3SW5kZXhdOwotICAgIGJvb2wgaGFzUHJldmlvdXNWYWx1ZSA9IG1fbGFzdEZp
ZWxkVmFsdWVzLT5jb250YWlucyhtX3RleHRGaWVsZC0+bmFtZSgpKTsKLSAgICBTdHJpbmcgcHJl
dlZhbHVlOwotICAgIGlmIChoYXNQcmV2aW91c1ZhbHVlKQotICAgICAgICBwcmV2VmFsdWUgPSBt
X2xhc3RGaWVsZFZhbHVlcy0+Z2V0KG1fdGV4dEZpZWxkLT5uYW1lKCkpOwotICAgIGlmICghaGFz
UHJldmlvdXNWYWx1ZSB8fCBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgoKSA+IG1fbGFzdEZpZWxk
VmFsdWVzLT5nZXQobV90ZXh0RmllbGQtPm5hbWUoKSkubGVuZ3RoKCkpIHsKLSAgICAgICAgICBp
bnQgc3RhcnQgPSAwOwotICAgICAgICAgIFN0cmluZyBuZXdTdWdnZXN0aW9uID0gc3VnZ2VzdGlv
bjsKLSAgICAgICAgICBpZiAoc3VnZ2VzdGlvbi5zdGFydHNXaXRoKG1fdHlwZWRGaWVsZFZhbHVl
KSkKLSAgICAgICAgICAgICAgbV9zZWxlY3RlZEluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICAgICAg
aWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChtX3R5cGVkRmllbGRWYWx1ZSwgZmFsc2UpKSB7Ci0g
ICAgICAgICAgICAgIG5ld1N1Z2dlc3Rpb24gPSBtX3R5cGVkRmllbGRWYWx1ZTsKLSAgICAgICAg
ICAgICAgaWYgKHN1Z2dlc3Rpb24ubGVuZ3RoKCkgPiBtX3R5cGVkRmllbGRWYWx1ZS5sZW5ndGgo
KSkgewotICAgICAgICAgICAgICAgICAgbmV3U3VnZ2VzdGlvbi5hcHBlbmQoc3VnZ2VzdGlvbi5z
dWJzdHJpbmcobV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgc3VnZ2VzdGlvbi5sZW5ndGgoKSAtIG1fdHlwZWRGaWVsZFZhbHVlLmxlbmd0aCgpKSk7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgc3RhcnQgPSBtX3R5cGVkRmllbGRWYWx1ZS5s
ZW5ndGgoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbV90ZXh0RmllbGQtPnNldFN1Z2dlc3Rl
ZFZhbHVlKG5ld1N1Z2dlc3Rpb24pOwotICAgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRTZWxlY3Rp
b25SYW5nZShzdGFydCwgbmV3U3VnZ2VzdGlvbi5sZW5ndGgoKSk7Ci0gICAgfQotICAgIGlmICho
YXNQcmV2aW91c1ZhbHVlKQotICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+c2V0KG1fdGV4dEZp
ZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbGFz
dEZpZWxkVmFsdWVzLT5hZGQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90eXBlZEZpZWxkVmFsdWUp
OwotfQotCi0KIHZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUNoYW5nZWQo
dW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCiB7CiAgICAgbV90ZXh0RmllbGQt
PnNldFZhbHVlKG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XSk7CkBAIC0xMjgsMjEgKzg5LDYgQEAg
dm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQwogICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV90ZXh0RmllbGQuZ2V0KCkpKTsKIH0KIAotdm9pZCBB
dXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlz
dEluZGV4LCBib29sIGZpcmVFdmVudHMpCi17Ci0gICAgaWYgKGxpc3RJbmRleCAhPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oLTEpKSB7Ci0gICAgICAgIG1fdGV4dEZpZWxkLT5zZXRTdWdnZXN0ZWRW
YWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0pOwotICAgICAgICBtX3RleHRGaWVsZC0+c2V0
U2VsZWN0aW9uUmFuZ2UobV90eXBlZEZpZWxkVmFsdWUubGVuZ3RoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0ubGVuZ3Ro
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUobV90eXBlZEZp
ZWxkVmFsdWUpOwotICAgICAgaWYgKG1fbGFzdEZpZWxkVmFsdWVzLT5jb250YWlucyhtX3RleHRG
aWVsZC0+bmFtZSgpKSkKLSAgICAgICAgICBtX2xhc3RGaWVsZFZhbHVlcy0+c2V0KG1fdGV4dEZp
ZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZhbHVlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgICBt
X2xhc3RGaWVsZFZhbHVlcy0+YWRkKG1fdGV4dEZpZWxkLT5uYW1lKCksIG1fdHlwZWRGaWVsZFZh
bHVlKTsKLSAgICB9Ci19Ci0KIFN0cmluZyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Oml0
ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdWdnZXN0
aW9uc1tsaXN0SW5kZXhdOwpAQCAtMTcyLDMxICsxMTgsMTQgQEAgaW50IEF1dG9jb21wbGV0ZVBv
cHVwTWVudUNsaWVudDo6Y2xpZW50UAogICAgIHJldHVybiBzdHlsZSA/IG1fd2ViVmlldy0+dGhl
bWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChzdHlsZSkgOiAwOwogfQogCi12b2lkIEF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKGJvb2wgYWNjZXB0U3VnZ2Vz
dGlvbnMpCit2b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkK
IHsKLSAgICBpZiAoYWNjZXB0U3VnZ2VzdGlvbnMpIHsKLSAgICAgICAgU3RyaW5nIHN1Z2dlc3Rl
ZFZhbHVlID0gbV90ZXh0RmllbGQtPnN1Z2dlc3RlZFZhbHVlKCk7Ci0gICAgICAgIGlmICghc3Vn
Z2VzdGVkVmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUo
c3VnZ2VzdGVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBtX3RleHRGaWVsZC0+c2V0VmFs
dWUobV90eXBlZEZpZWxkVmFsdWUpOwotCi0gICAgcmVzZXRMYXN0RmllbGRWYWx1ZSgpOwogICAg
IG1fd2ViVmlldy0+YXV0b0NvbXBsZXRlUG9wdXBEaWRIaWRlKCk7CiB9CiAKIHZvaWQgQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4
KQogewogICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0p
OwotICAgIHJlc2V0TGFzdEZpZWxkVmFsdWUoKTsKLX0KLQotdm9pZCBBdXRvY29tcGxldGVQb3B1
cE1lbnVDbGllbnQ6OnJlc2V0TGFzdEZpZWxkVmFsdWUoKQotewotICAgIGlmIChtX2xhc3RGaWVs
ZFZhbHVlcy0+Y29udGFpbnMobV90ZXh0RmllbGQtPm5hbWUoKSkpCi0gICAgICAgIG1fbGFzdEZp
ZWxkVmFsdWVzLT5zZXQobV90ZXh0RmllbGQtPm5hbWUoKSwgbV90ZXh0RmllbGQtPnZhbHVlKCkp
OwotICAgIGVsc2UKLSAgICAgICAgbV9sYXN0RmllbGRWYWx1ZXMtPmFkZChtX3RleHRGaWVsZC0+
bmFtZSgpLCBtX3RleHRGaWVsZC0+dmFsdWUoKSk7CiB9CiAKIEZvbnRTZWxlY3RvciogQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25zdApJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCShyZXZp
c2lvbiA1MzcxMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgcHVibGljOgogCiAgICAg
Ly8gV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9v
bCBmaXJlRXZlbnRzID0gdHJ1ZSk7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRl
eHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmlu
ZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6
OlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC03MCw3ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBsaXN0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGlvbnMuc2l6ZSgpOyB9CiAg
ICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRJ
bmRleDsgfQotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoYm9vbCBhY2NlcHRTdWdnZXN0
aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CiAgICAgdmlydHVhbCBib29s
IGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtODYsMTcgKzg1LDEy
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpSZW5kZXJTdHlsZSogdGV4dEZp
ZWxkU3R5bGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEluaXRpYWxBdXRvY29tcGxldGVWYWx1ZSgp
OwotICAgIHZvaWQgcmVzZXRMYXN0RmllbGRWYWx1ZSgpOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ+IG1fdGV4dEZpZWxkOwogICAgIFZlY3RvcjxXZWJDb3JlOjpTdHJp
bmc+IG1fc3VnZ2VzdGlvbnM7CiAgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKICAgICBXZWJWaWV3
SW1wbCogbV93ZWJWaWV3OwotICAgIFdlYkNvcmU6OlN0cmluZyBtX3R5cGVkRmllbGRWYWx1ZTsK
ICAgICBPd25QdHI8V2ViQ29yZTo6UG9wdXBNZW51U3R5bGU+IG1fc3R5bGU7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiBGaWVsZFZhbHVlc01h
cDsKLSAgICBPd25QdHI8RmllbGRWYWx1ZXNNYXA+IG1fbGFzdEZpZWxkVmFsdWVzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzNzEyKQorKysgV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAxLTIyICBQ
ZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3
ZWQsIGJhY2tvdXQuCisKKyAgICAgICAgQmFjayBvdXQgcjUyNjczLCB3aGljaCBjYXVzZWQgc2V2
ZXJhbCByZWdyZXNzaW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyNTMzCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2Vi
UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxsYmFja1dlYlBvcHVwQ29tYm86Omhp
ZGVQb3B1cCk6CisKIDIwMTAtMDEtMjIgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9y
d2FyZGJpYXMuaW4+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4
OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAko
cmV2aXNpb24gNTM3MTIpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dl
YlBvcHVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIFF0RmFsbGJh
Y2tXZWJQb3B1cENvbWJvOjpoaWRlUG9wdXAoCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fb3du
ZXJQb3B1cC5tX3BvcHVwVmlzaWJsZSA9IGZhbHNlOwotICAgIG1fb3duZXJQb3B1cC5wb3B1cERp
ZEhpZGUodHJ1ZSk7CisgICAgbV9vd25lclBvcHVwLnBvcHVwRGlkSGlkZSgpOwogfQogCiAvLyBR
dEZhbGxiYWNrV2ViUG9wdXAK
</data>

          </attachment>
      

    </bug>

</bugzilla>