<?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>26246</bug_id>
          
          <creation_ts>2009-06-07 17:18:56 -0700</creation_ts>
          <short_desc>Implement WML specific features for &lt;select&gt;</short_desc>
          <delta_ts>2009-06-29 12:11:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>manyoso</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.arunp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>124713</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-07 17:18:56 -0700</bug_when>
    <thetext>Implement WML specific features for &lt;select&gt;, related to variable handling.
Process the &apos;iname&apos; / &apos;ivalue&apos; attributes, and process them according to the WML specification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124716</commentid>
    <comment_count>1</comment_count>
      <attachid>31037</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-07 17:46:39 -0700</bug_when>
    <thetext>Created attachment 31037
Initial patch

Doesn&apos;t contain any layout tests yet. Need to write some tomorrow. Uploading patch so George can have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125274</commentid>
    <comment_count>2</comment_count>
    <who name="Arun Patole">webkit.arunp</who>
    <bug_when>2009-06-10 23:46:29 -0700</bug_when>
    <thetext>Hi Nikolas,

Just thought of having a quick look at the patch and here are some comments that might help if I am right saying it:

1. in void WMLSelectElement::calculateDefaultOptionIndices()
// Spec: iF the default option index is empty and the select is a multi-choice, then the
// default option index is set to zero. If the select is single-choice, then the default
// option index is set to one.
if (m_defaultOptionIndices.isEmpty())
m_defaultOptionIndices.append((unsigned) m_data.multiple()); 

[Arun]: I think you will have to negate multiples() return value:
 m_defaultOptionIndices.append((unsigned) !m_data.multiple()); 


2. at String WMLSelectElement::optionIndicesToValueString() const

[Arun] I think this function will fail at assert if m_defaultOptionIndices contains &quot;0&quot;.

m_defaultOptionIndices will contain &quot;0&quot; for the following case i think:
// Spec: iF the default option index is empty and the select is a multi-choice, then the
// default option index is set to zero. If the select is single-choice, then the default
// option index is set to one.
 if (m_defaultOptionIndices.isEmpty())
 m_defaultOptionIndices.append((unsigned) m_data.multiple());


Thanks,
Arun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127611</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-23 02:17:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hi Nikolas,
&gt; 
&gt; Just thought of having a quick look at the patch and here are some comments
&gt; that might help if I am right saying it:
&gt; 
&gt; 1. in void WMLSelectElement::calculateDefaultOptionIndices()
&gt; // Spec: iF the default option index is empty and the select is a multi-choice,
&gt; then the
&gt; // default option index is set to zero. If the select is single-choice, then
&gt; the default
&gt; // option index is set to one.
&gt; if (m_defaultOptionIndices.isEmpty())
&gt; m_defaultOptionIndices.append((unsigned) m_data.multiple()); 
&gt; 
&gt; [Arun]: I think you will have to negate multiples() return value:
&gt;  m_defaultOptionIndices.append((unsigned) !m_data.multiple()); 
&gt; 
&gt; 
&gt; 2. at String WMLSelectElement::optionIndicesToValueString() const
&gt; 
&gt; [Arun] I think this function will fail at assert if m_defaultOptionIndices
&gt; contains &quot;0&quot;.
&gt; 
&gt; m_defaultOptionIndices will contain &quot;0&quot; for the following case i think:
&gt; // Spec: iF the default option index is empty and the select is a multi-choice,
&gt; then the
&gt; // default option index is set to zero. If the select is single-choice, then
&gt; the default
&gt; // option index is set to one.
&gt;  if (m_defaultOptionIndices.isEmpty())
&gt;  m_defaultOptionIndices.append((unsigned) m_data.multiple());

Hi Arun,

thanks for your comments, that&apos;s appreciated! You may have noticed this patch doesn&apos;t contain any layout tests so far, thus I couldn&apos;t specifically test it so far, that&apos;s why it wasn&apos;t up for review so far :-)

Going to write layout tests that cover these situations.

Cheers,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127970</commentid>
    <comment_count>4</comment_count>
      <attachid>31802</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-24 12:18:29 -0700</bug_when>
    <thetext>Created attachment 31802
Updated patch

Updated patch, including layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127978</commentid>
    <comment_count>5</comment_count>
      <attachid>31802</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-24 13:36:53 -0700</bug_when>
    <thetext>Comment on attachment 31802
Updated patch

&gt; +        * dom/SelectElement.cpp:
&gt; +        (WebCore::SelectElement::optionCount):
&gt; +        (WebCore::SelectElementData::name):
&gt; +        * dom/SelectElement.h:
&gt; +        (WebCore::SelectElementData::setName):
&gt; +        * html/HTMLSelectElement.cpp:
&gt; +        (WebCore::HTMLSelectElement::formControlName):
&gt; +        (WebCore::HTMLSelectElement::length):
&gt; +        (WebCore::HTMLSelectElement::parseMappedAttribute):
&gt; +        * html/HTMLSelectElement.h:
&gt; +        * wml/WMLCardElement.cpp:
&gt; +        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
&gt; +        * wml/WMLSelectElement.cpp:
&gt; +        (WebCore::WMLSelectElement::title):
&gt; +        (WebCore::WMLSelectElement::formControlName):
&gt; +        (WebCore::WMLSelectElement::parseMappedAttribute):
&gt; +        (WebCore::WMLSelectElement::defaultEventHandler):
&gt; +        (WebCore::WMLSelectElement::selectInitialOptions):
&gt; +        (WebCore::WMLSelectElement::calculateDefaultOptionIndices):
&gt; +        (WebCore::WMLSelectElement::selectDefaultOptions):
&gt; +        (WebCore::WMLSelectElement::initializeVariables):
&gt; +        (WebCore::WMLSelectElement::updateVariables):
&gt; +        (WebCore::WMLSelectElement::parseIndexValueString):
&gt; +        (WebCore::WMLSelectElement::valueStringToOptionIndices):
&gt; +        (WebCore::WMLSelectElement::optionIndicesToValueString):
&gt; +        (WebCore::WMLSelectElement::optionIndicesToString):
&gt; +        * wml/WMLSelectElement.h:

This is a big change to review.  I&apos;d appreciate it if you could go through the ChangeLog&apos;s and document specifically what you change to each method and why.  And also why you add methods in a couple of cases.  From looking, it seems that you add &apos;optionCount&apos; to SelectElement so that both HTMLSelectElement and WMLSelectElement can use it whereas before it was implemented in HTMLSelectElement.  You&apos;ve also changed it so that it uses &apos;isOptionElement&apos; as the test rather than &apos;hasLocalName(optionTag).&apos;  In general, it&apos;d be great to have these changes and the reasoning behind them documented in the ChangeLog so I know specifically what you were thinking without guessing.

This is best practices anyway...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128178</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-25 06:28:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This is a big change to review.  I&apos;d appreciate it if you could go through the
&gt; ChangeLog&apos;s and document specifically what you change to each method and why. 
&gt; And also why you add methods in a couple of cases.  From looking, it seems that
&gt; you add &apos;optionCount&apos; to SelectElement so that both HTMLSelectElement and
&gt; WMLSelectElement can use it whereas before it was implemented in
&gt; HTMLSelectElement.  You&apos;ve also changed it so that it uses &apos;isOptionElement&apos; as
&gt; the test rather than &apos;hasLocalName(optionTag).&apos;  In general, it&apos;d be great to
&gt; have these changes and the reasoning behind them documented in the ChangeLog so
&gt; I know specifically what you were thinking without guessing.
&gt; 
&gt; This is best practices anyway...

Right, I should update it. This happens if women distract you to finish your work ;-)
Coming up with a detailed ChangeLog tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128851</commentid>
    <comment_count>7</comment_count>
      <attachid>31932</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-29 11:49:05 -0700</bug_when>
    <thetext>Comment on attachment 31932
Updated patch v2

There are some weird symbols showing up in the formatted diff:

//Spec: Step 2 – initialise variables

Otherwise, looks good! r+ with those removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128855</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-06-29 12:11:38 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 31932 [review])
&gt; There are some weird symbols showing up in the formatted diff:
&gt; 
&gt; //Spec: Step 2 – initialise variables
&gt; 
&gt; Otherwise, looks good! r+ with those removed.

Landed in r45342.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31037</attachid>
            <date>2009-06-07 17:46:39 -0700</date>
            <delta_ts>2009-06-24 12:18:29 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>WMLSelectElement.diff</filename>
            <type>text/plain</type>
            <size>20650</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDYtMDcgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMu
emltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUGFydGx5IGZpeGVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjYyNDYKKworICAgICAgICBOT1RFOiBMYXlvdXQgdGVzdHMgc3Rp
bGwgbWlzc2luZy4gVGhpcyBpcyBub3QgcmVhZHkgeWV0LgorCisgICAgICAgIEltcGxlbWVudCBt
b3N0IFdNTCBzcGVjaWZpYyA8c2VsZWN0PiBlbGVtZW50IGZlYXR1cmVzLgorICAgICAgICBBZGQg
J2luYW1lJyAvICdpdmFsdWUnIHN1cHBvcnQgYW5kIHN1cHBvcnQgdmFyaWFibGUgcmVmZXJlbmNl
cy4KKworICAgICAgICAqIGRvbS9TZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdEVsZW1lbnQ6Om9wdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdEVs
ZW1lbnREYXRhOjpuYW1lKToKKyAgICAgICAgKiBkb20vU2VsZWN0RWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0RWxlbWVudERhdGE6OnNldE5hbWUpOgorICAgICAgICAqIGh0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OmZvcm1Db250cm9sTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAg
ICAgICAqIHdtbC9XTUxDYXJkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxDYXJk
RWxlbWVudDo6aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCk6CisgICAgICAgICogd21sL1dN
TFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6
dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6c2VsZWN0SW5p
dGlhbE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6Y2FsY3Vs
YXRlRGVmYXVsdE9wdGlvbkluZGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxl
bWVudDo6c2VsZWN0RGVmYXVsdE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0
RWxlbWVudDo6aW5pdGlhbGl6ZVZhcmlhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxl
Y3RFbGVtZW50Ojp1cGRhdGVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0
RWxlbWVudDo6cGFyc2VJbmRleFZhbHVlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldNTFNl
bGVjdEVsZW1lbnQ6OnZhbHVlU3RyaW5nVG9PcHRpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OldNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkluZGljZXNUb1ZhbHVlU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkluZGljZXNUb1N0cmluZyk6Cisg
ICAgICAgICogd21sL1dNTFNlbGVjdEVsZW1lbnQuaDoKKwogMjAwOS0wNi0wNyAgR3VzdGF2byBO
b3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gNDQ0OTApCisrKyBXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYzLDYgKzg2MywxOSBAQCB2b2lkIFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tl
eVNldFNlbGVjdGVkCiAgICAgc2Nyb2xsVG9TZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7CiB9CiAK
K3Vuc2lnbmVkIFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkNvdW50KGNvbnN0IFNlbGVjdEVsZW1lbnRE
YXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIHVuc2lnbmVkIG9wdGlv
bnMgPSAwOworCisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBkYXRhLmxpc3RJ
dGVtcyhlbGVtZW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGlzT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAgICAg
ICAgICArK29wdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKIC8vIFNl
bGVjdEVsZW1lbnREYXRhCiBTZWxlY3RFbGVtZW50RGF0YTo6U2VsZWN0RWxlbWVudERhdGEoKQog
ICAgIDogbV9tdWx0aXBsZShmYWxzZSkgCkBAIC04NzcsNiArODkwLDExIEBAIFNlbGVjdEVsZW1l
bnREYXRhOjpTZWxlY3RFbGVtZW50RGF0YSgpCiB7CiB9CiAKK2NvbnN0IEF0b21pY1N0cmluZyYg
U2VsZWN0RWxlbWVudERhdGE6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWUuaXNO
dWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7Cit9CisKIHZvaWQgU2VsZWN0RWxlbWVudERhdGE6
OmNoZWNrTGlzdEl0ZW1zKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAjaWZuZGVm
IE5ERUJVRwpJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gNDQ0OTApCisrKyBXZWJDb3Jl
L2RvbS9TZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDggQEAgcHJv
dGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHR5cGVBaGVhZEZpbmQoU2VsZWN0RWxlbWVudERhdGEm
LCBFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopOwogICAgIHN0YXRpYyB2b2lkIGluc2VydGVkSW50
b1RyZWUoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgYWNj
ZXNzS2V5U2V0U2VsZWN0ZWRJbmRleChTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBpbnQg
aW5kZXgpOwotCisgICAgc3RhdGljIHVuc2lnbmVkIG9wdGlvbkNvdW50KGNvbnN0IFNlbGVjdEVs
ZW1lbnREYXRhJiwgY29uc3QgRWxlbWVudCopOworIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBtZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50
KiwgRXZlbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBsaXN0Qm94RGVm
YXVsdEV2ZW50SGFuZGxlcihTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBFdmVudCosIEhU
TUxGb3JtRWxlbWVudCopOwpAQCAtMTA5LDYgKzExMCw5IEBAIHB1YmxpYzoKICAgICBib29sIG11
bHRpcGxlKCkgY29uc3QgeyByZXR1cm4gbV9tdWx0aXBsZTsgfQogICAgIHZvaWQgc2V0TXVsdGlw
bGUoYm9vbCB2YWx1ZSkgeyBtX211bHRpcGxlID0gdmFsdWU7IH0KIAorICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKSB7IG1fbmFtZSA9IHZhbHVlOyB9CisKICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6ZShpbnQgdmFsdWUpIHsgbV9zaXplID0g
dmFsdWU7IH0KIApAQCAtMTUwLDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja0xp
c3RJdGVtcyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAKICAgICBib29sIG1fbXVsdGlwbGU7Cisg
ICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKICAgICBpbnQgbV9zaXplOwogCiAgICAgaW50IG1fbGFz
dE9uQ2hhbmdlSW5kZXg7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDQ0NDkwKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxj
U3R5bGUoU3R5bAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnJlY2FsY1N0
eWxlKGNoYW5nZSk7CiB9CiAKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFNlbGVjdEVsZW1lbnQ6
OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5uYW1lKCk7Cit9
CisKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFNlbGVjdEVsZW1lbnQ6OmZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IHNlbGVjdE11bHRpcGxlLCAoInNlbGVjdC1tdWx0aXBsZSIpKTsKQEAgLTEwMSwxMyArMTA2LDcg
QEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjphY3RpdmVTZWxlY3Rpb25FbgogCiB1bnNpZ25lZCBI
VE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBsZW4gPSAw
OwotICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCi0gICAgICAgICAgICArK2xlbjsK
LSAgICB9Ci0gICAgcmV0dXJuIGxlbjsKKyAgICByZXR1cm4gU2VsZWN0RWxlbWVudDo6b3B0aW9u
Q291bnQobV9kYXRhLCB0aGlzKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWRkKEhU
TUxFbGVtZW50ICplbGVtZW50LCBIVE1MRWxlbWVudCAqYmVmb3JlLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTE3NCw2ICsxNzMsOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9y
bUNvbnRyCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpIAogewogICAgIGJvb2wgb2xkVXNlc01lbnVMaXN0ID0gbV9kYXRh
LnVzZXNNZW51TGlzdCgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpCisgICAg
ICAgIG1fZGF0YS5zZXROYW1lKGF0dHItPnZhbHVlKCkpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gc2l6ZUF0dHIpIHsKICAgICAgICAgaW50IG9sZFNpemUgPSBtX2RhdGEuc2l6ZSgpOwogICAg
ICAgICAvLyBTZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBhIG51bWJlci4KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0NDQ5MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw5IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2OyB9CiAgICAg
dmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKIAorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7Ci0gICAgCisK
ICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgY2FuU2VsZWN0QWxsKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxDYXJk
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0NDQ5MCkKKysrIFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIldNTE5h
bWVzLmgiCisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIldNTFRlbXBs
YXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgogI2luY2x1ZGUgIldN
TFZhcmlhYmxlcy5oIgpAQCAtMTY1LDE3ICsxNjYsMTQgQEAgdm9pZCBXTUxDYXJkRWxlbWVudDo6
aGFuZGxlSW50cmluc2ljRXZlbgogICAgIGlmIChtX2V2ZW50VGltZXIpCiAgICAgICAgIG1fZXZl
bnRUaW1lci0+c3RhcnQoKTsKIAotICAgIC8vIEZJWE1FOiBJbml0aWFsaXplIHNlbGVjdCBlbGVt
ZW50cyBpbiB0aGlzIGNhcmQKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0cmF2ZXJzZU5leHROb2Rl
KCk7IG5vZGUgIT0gMDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdNTElucHV0RWxlbWVudCo+KG5vZGUpLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIC8q
CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9w
dGlvbnMoKTsKLSAgICAgICAgKi8KICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNl
bGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA0NDQ5MCkKKysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTggQEAKIAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVu
dUxpc3QuaCIKLQorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMu
aCIKKyNpbmNsdWRlICJXTUxWYXJpYWJsZXMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwor
CiBXTUxTZWxlY3RFbGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IFdNTEZvcm1Db250cm9sRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKQEAgLTQxLDYgKzQ2LDE2IEBAIFdNTFNlbGVjdEVsZW1l
bnQ6On5XTUxTZWxlY3RFbGVtZW50KCkKIHsKIH0KIAorU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6
OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Vic3RpdHV0ZVZhcmlhYmxlUmVmZXJlbmNl
cyhnZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLCBkb2N1bWVudCgpKTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBXTUxTZWxlY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEubmFtZSgpOworfQorCiBjb25zdCBBdG9taWNTdHJp
bmcmIFdNTFNlbGVjdEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNlbGVjdE11bHRpcGxlLCAoInNl
bGVjdC1tdWx0aXBsZSIpKTsKQEAgLTExNyw2ICsxMzIsMTQgQEAgdm9pZCBXTUxTZWxlY3RFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5h
bWVzOjptdWx0aXBsZUF0dHIpCiAgICAgICAgIFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVB
dHRyaWJ1dGUobV9kYXRhLCB0aGlzLCBhdHRyKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gSFRNTE5hbWVzOjpuYW1lQXR0cikKKyAgICAgICAgbV9kYXRhLnNldE5hbWUocGFyc2VWYWx1
ZUZvcmJpZGRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSkpOworICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OnZhbHVlQXR0cikKKyAgICAgICAgbV92YWx1
ZSA9IHBhcnNlVmFsdWVTdWJzdGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUo
KSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGluYW1lQXR0cikKKyAgICAgICAgbV9p
bmFtZSA9IHBhcnNlVmFsdWVGb3JiaWRkaW5nVmFyaWFibGVSZWZlcmVuY2VzKGF0dHItPnZhbHVl
KCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpdmFsdWVBdHRyKQorICAgICAgICBt
X2l2YWx1ZSA9IHBhcnNlVmFsdWVTdWJzdGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+
dmFsdWUoKSk7CiAgICAgZWxzZQogICAgICAgICBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTUxLDYgKzE3NCw3IEBAIHZvaWQgV01MU2Vs
ZWN0RWxlbWVudDo6cmVzZXQoKQogdm9pZCBXTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKG1fZGF0YSwgdGhpcywgZXZlbnQpOworICAgIHVwZGF0ZVZhcmlhYmxlcygpOwogfQog
CiB2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVs
ZW1lbnQpCkBAIC0yMTMsMTIgKzIzNywyNzggQEAgdm9pZCBXTUxTZWxlY3RFbGVtZW50OjpzY3Jv
bGxUb1NlbGVjdGlvbgogICAgIFNlbGVjdEVsZW1lbnQ6OnNjcm9sbFRvU2VsZWN0aW9uKG1fZGF0
YSwgdGhpcyk7CiB9CiAKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6c2VsZWN0SW5pdGlhbE9wdGlv
bnMoKQoreworICAgIC8vIFNwZWM6IFN0ZXAgMSAtIHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRleCBp
cyBkZXRlcm1pbmVkIHVzaW5nIGluYW1lIGFuZCBpdmFsdWUKKyAgICBjYWxjdWxhdGVEZWZhdWx0
T3B0aW9uSW5kaWNlcygpOworCisgICAgaWYgKG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTcGVjOiBTdGVwIDIg4oCTIGluaXRpYWxp
c2UgdmFyaWFibGVzCisgICAgaW5pdGlhbGl6ZVZhcmlhYmxlcygpOworCisgICAgLy8gU3BlYzog
U3RlcCAzIOKAkyBwcmUtc2VsZWN0IG9wdGlvbihzKSBzcGVjaWZpZWQgYnkgdGhlIGRlZmF1bHQg
b3B0aW9uIGluZGV4IAorICAgIHNlbGVjdERlZmF1bHRPcHRpb25zKCk7Cit9CisKIHZvaWQgV01M
U2VsZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiB7CiAgICAgU2VsZWN0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShtX2RhdGEsIHRoaXMpOwogICAgIFdNTEZvcm1Db250
cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKIH0KIAordm9pZCBXTUxTZWxlY3RF
bGVtZW50OjpjYWxjdWxhdGVEZWZhdWx0T3B0aW9uSW5kaWNlcygpCit7CisgICAgV01MUGFnZVN0
YXRlKiBwYWdlU3RhdGUgPSB3bWxQYWdlU3RhdGVGb3JEb2N1bWVudChkb2N1bWVudCgpKTsKKyAg
ICBpZiAoIXBhZ2VTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHZhcmlhYmxl
OworCisgICAgLy8gU3BlYzogSWYgdGhlICdpbmFtZScgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBh
bmQgbmFtZXMgYSB2YXJpYWJsZSB0aGF0IGlzIHNldCwKKyAgICAvLyB0aGVuIHRoZSBkZWZhdWx0
IG9wdGlvbiBpbmRleCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIG9mIHRoYXQgdmFyaWFibGUuIAor
ICAgIGlmICghbV9pbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyaWFibGUgPSBwYWdlU3Rh
dGUtPmdldFZhcmlhYmxlKG1faW5hbWUpOworICAgICAgICBpZiAoIXZhcmlhYmxlLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1fZGVmYXVsdE9wdGlvbkluZGljZXMgPSBwYXJzZUluZGV4VmFsdWVT
dHJpbmcodmFyaWFibGUpOworICAgIH0KKworICAgIC8vIFNwZWM6IElmIHRoZSBkZWZhdWx0IG9w
dGlvbiBpbmRleCBpcyBlbXB0eSBhbmQgdGhlICdpdmFsdWUnIGF0dHJpYnV0ZSBpcyBzcGVjaWZp
ZWQsCisgICAgLy8gdGhlbiB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgdGhlIHZhbGlkYXRl
ZCBhdHRyaWJ1dGUgdmFsdWUuCisgICAgaWYgKG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0
eSgpICYmICFtX2l2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZGVmYXVsdE9wdGlvbkluZGlj
ZXMgPSBwYXJzZUluZGV4VmFsdWVTdHJpbmcobV9pdmFsdWUpOworCisgICAgLy8gU3BlYzogSWYg
dGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4IGlzIGVtcHR5LCBhbmQgdGhlICduYW1lJyBhdHRyaWJ1
dGUgaXMgc3BlY2lmaWVkCisgICAgLy8gYW5kIHRoZSAnbmFtZScgdHRyaWJ1dGUgbmFtZXMgYSB2
YXJpYWJsZSB0aGF0IGlzIHNldCwgdGhlbiBmb3IgZWFjaCB2YWx1ZSBpbiB0aGUgJ25hbWUnCisg
ICAgLy8gdmFyaWFibGUgdGhhdCBpcyBwcmVzZW50IGFzIGEgdmFsdWUgaW4gdGhlIHNlbGVjdCdz
IG9wdGlvbiBlbGVtZW50cywgdGhlIGluZGV4IG9mIHRoZQorICAgIC8vIGZpcnN0IG9wdGlvbiBl
bGVtZW50IGNvbnRhaW5pbmcgdGhhdCB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgZGVmYXVsdCBpbmRl
eCBpZiB0aGF0CisgICAgLy8gaW5kZXggaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYWRkZWQuIAor
ICAgIGlmIChtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmlzRW1wdHkoKSAmJiAhbV9kYXRhLm5hbWUo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyaWFibGUgPSBwYWdlU3RhdGUtPmdldFZhcmlhYmxl
KG1fZGF0YS5uYW1lKCkpOworICAgICAgICBpZiAoIXZhcmlhYmxlLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fZGVmYXVsdE9wdGlvbkluZGljZXMgPSB2YWx1ZVN0cmluZ1RvT3B0aW9uSW5kaWNl
cyh2YXJpYWJsZSk7CisgICAgfQorCisgICAgLy8gU3BlYzogSWYgdGhlIGRlZmF1bHQgb3B0aW9u
IGluZGV4IGlzIGVtcHR5IGFuZCB0aGUgJ3ZhbHVlJyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRo
ZW4KKyAgICAvLyBmb3IgZWFjaCAgdmFsdWUgaW4gdGhlICd2YWx1ZScgYXR0cmlidXRlIHRoYXQg
aXMgcHJlc2VudCBhcyBhIHZhbHVlIGluIHRoZSBzZWxlY3QncworICAgIC8vIG9wdGlvbiBlbGVt
ZW50cywgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvcHRpb24gZWxlbWVudCBjb250YWluaW5nIHRo
YXQgdmFsdWUgaXMgYWRkZWQKKyAgICAvLyB0byB0aGUgZGVmYXVsdCBpbmRleCBpZiB0aGF0IGlu
ZGV4IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVkLiAKKyAgICBpZiAobV9kZWZhdWx0T3B0
aW9uSW5kaWNlcy5pc0VtcHR5KCkgJiYgIW1fdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBtX2Rl
ZmF1bHRPcHRpb25JbmRpY2VzID0gdmFsdWVTdHJpbmdUb09wdGlvbkluZGljZXMobV92YWx1ZSk7
CisKKyAgICAvLyBTcGVjOiBpRiB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgZW1wdHkgYW5k
IHRoZSBzZWxlY3QgaXMgYSBtdWx0aS1jaG9pY2UsIHRoZW4gdGhlCisgICAgLy8gZGVmYXVsdCBv
cHRpb24gaW5kZXggaXMgc2V0IHRvIHplcm8uIElmIHRoZSBzZWxlY3QgaXMgc2luZ2xlLWNob2lj
ZSwgdGhlbiB0aGUgZGVmYXVsdAorICAgIC8vIG9wdGlvbiBpbmRleCBpcyBzZXQgdG8gb25lLgor
ICAgIGlmIChtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9kZWZh
dWx0T3B0aW9uSW5kaWNlcy5hcHBlbmQoKHVuc2lnbmVkKSBtX2RhdGEubXVsdGlwbGUoKSk7Cit9
CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6c2VsZWN0RGVmYXVsdE9wdGlvbnMoKQoreworICAg
IEFTU0VSVCghbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkpOworCisgICAgaWYgKCFt
X2RhdGEubXVsdGlwbGUoKSkgeworICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG1fZGVmYXVsdE9w
dGlvbkluZGljZXMuZmlyc3QoKSAtIDEsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFZlY3Rvcjx1bnNpZ25lZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZGVmYXVsdE9w
dGlvbkluZGljZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8dW5zaWduZWQ+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGVmYXVsdE9wdGlvbkluZGljZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBzZXRTZWxlY3RlZEluZGV4KCgqaXQpIC0gMSwgZmFsc2UpOworfQorCit2b2lk
IFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpemVWYXJpYWJsZXMoKQoreworICAgIEFTU0VSVCgh
bV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkpOworCisgICAgV01MUGFnZVN0YXRlKiBw
YWdlU3RhdGUgPSB3bWxQYWdlU3RhdGVGb3JEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBpZiAo
IXBhZ2VTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOworICAgIGlmIChpdGVtcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNwZWM6IElmIHRoZSAnaW5hbWUnIGF0dHJp
YnV0ZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIG5hbWVkIHZhcmlhYmxlIGlzIHNldCB3aXRoIHRo
ZSBkZWZhdWx0IG9wdGlvbiBpbmRleC4gCisgICAgaWYgKCFtX2luYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlKG1faW5hbWUsIG9wdGlvbkluZGljZXNUb1N0
cmluZygpKTsKKworICAgIFN0cmluZyBuYW1lID0gbV9kYXRhLm5hbWUoKTsKKyAgICBpZiAoIW5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2RhdGEubXVsdGlwbGUoKSkgeworICAgICAg
ICAgICAgLy8gU3BlYzogSWYgdGhlICduYW1lJyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIGFuZCB0
aGUgc2VsZWN0IGlzIGEgbXVsdGlwbGUtY2hvaWNlIGVsZW1lbnQsCisgICAgICAgICAgICAvLyB0
aGVuIGZvciBlYWNoIGluZGV4IGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgdmFsdWUgb2YgdGhlICd2
YWx1ZScgYXR0cmlidXRlIG9uIHRoZSBvcHRpb24KKyAgICAgICAgICAgIC8vIGVsZW1lbnQgYXQg
dGhlIGluZGV4IGlzIGFkZGVkIHRvIHRoZSBuYW1lIHZhcmlhYmxlLiAKKyAgICAgICAgICAgIHBh
Z2VTdGF0ZS0+c3RvcmVWYXJpYWJsZShuYW1lLCBvcHRpb25JbmRpY2VzVG9WYWx1ZVN0cmluZygp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNwZWM6IElmIHRoZSAnbmFtZScg
YXR0cmlidXRlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNlbGVjdCBpcyBhIHNpbmdsZS1jaG9pY2Ug
ZWxlbWVudCwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIG5hbWVkIHZhcmlhYmxlIGlzIHNldCB3
aXRoIHRoZSB2YWx1ZSBvZiB0aGUgJ3ZhbHVlJyBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbgorICAg
ICAgICAgICAgLy8gZWxlbWVudCBhdCB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXguIAorICAgICAg
ICAgICAgdW5zaWduZWQgb3B0aW9uSW5kZXggPSBtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmZpcnN0
KCk7CisgICAgICAgICAgICBBU1NFUlQob3B0aW9uSW5kZXggPj0gMSk7CisKKyAgICAgICAgICAg
IGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCAtIDEpOworICAg
ICAgICAgICAgQVNTRVJUKGxpc3RJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXN0
SW5kZXggPCAoaW50KSBpdGVtcy5zaXplKCkpOworCisgICAgICAgICAgICBpZiAoT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSkK
KyAgICAgICAgICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobmFtZSwgb3B0aW9uRWxl
bWVudC0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxl
bWVudDo6dXBkYXRlVmFyaWFibGVzKCkKK3sKKyAgICBXTUxQYWdlU3RhdGUqIHBhZ2VTdGF0ZSA9
IHdtbFBhZ2VTdGF0ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGlmICghcGFnZVN0YXRl
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbmFtZSA9IG1fZGF0YS5uYW1lKCk7Cisg
ICAgaWYgKG1faW5hbWUuaXNFbXB0eSgpICYmIG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBTdHJpbmcgbmFtZVN0cmluZzsKKyAgICBTdHJpbmcgaW5hbWVTdHJpbmc7CisK
KyAgICB1bnNpZ25lZCBvcHRpb25JbmRleCA9IDA7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBpZiAoIW9w
dGlvbkVsZW1lbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICArK29wdGlvbklu
ZGV4OworICAgICAgICBpZiAoIW9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoIW5hbWVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgbmFtZVN0cmluZyArPSAiOyI7CisKKyAgICAgICAgaWYgKCFpbmFtZVN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBpbmFtZVN0cmluZyArPSAiOyI7CisKKyAgICAgICAgbmFtZVN0
cmluZyArPSBvcHRpb25FbGVtZW50LT52YWx1ZSgpOworICAgICAgICBpbmFtZVN0cmluZyArPSBT
dHJpbmc6Om51bWJlcihvcHRpb25JbmRleCk7CisgICAgfQorCisgICAgaWYgKCFuYW1lLmlzRW1w
dHkoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlKG5hbWUsIG5hbWVTdHJpbmcp
OworCisgICAgaWYgKCFtX2luYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5zdG9y
ZVZhcmlhYmxlKG1faW5hbWUsIGluYW1lU3RyaW5nKTsKK30KKworVmVjdG9yPHVuc2lnbmVkPiBX
TUxTZWxlY3RFbGVtZW50OjpwYXJzZUluZGV4VmFsdWVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbmRl
eFZhbHVlKSBjb25zdAoreworICAgIFZlY3Rvcjx1bnNpZ25lZD4gaW5kaWNlczsKKyAgICBpZiAo
aW5kZXhWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpbmRpY2VzOworCisgICAgVmVj
dG9yPFN0cmluZz4gaW5kZXhTdHJpbmdzOworICAgIGluZGV4VmFsdWUuc3BsaXQoJzsnLCBpbmRl
eFN0cmluZ3MpOworCisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIHVuc2lnbmVkIG9wdGlvbkNv
dW50ID0gU2VsZWN0RWxlbWVudDo6b3B0aW9uQ291bnQobV9kYXRhLCB0aGlzKTsKKworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbmRleFN0cmluZ3MuZW5kKCk7Cisg
ICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleFN0cmluZ3Mu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIHVuc2lnbmVkIHBhcnNlZFZhbHVl
ID0gKCppdCkudG9VSW50U3RyaWN0KCZvayk7CisgICAgICAgIC8vIFNwZWM6IFJlbW92ZSBhbGwg
bm9uLWludGVnZXIgaW5kaWNlcyBmcm9tIHRoZSB2YWx1ZS4gUmVtb3ZlIGFsbCBvdXQtb2YtcmFu
Z2UgaW5kaWNlcworICAgICAgICAvLyBmcm9tIHRoZSB2YWx1ZSwgd2hlcmUgb3V0LW9mLXJhbmdl
IGlzIGRlZmluZWQgYXMgYW55IGluZGV4IHdpdGggYSB2YWx1ZSBncmVhdGVyIHRoYW4KKyAgICAg
ICAgLy8gdGhlIG51bWJlciBvZiBvcHRpb25zIGluIHRoZSBzZWxlY3Qgb3Igd2l0aCBhIHZhbHVl
IGxlc3MgdGhhbiBvbmUuIAorICAgICAgICBpZiAoIW9rIHx8IHBhcnNlZFZhbHVlIDwgMSB8fCBw
YXJzZWRWYWx1ZSA+IG9wdGlvbkNvdW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgLy8gU3BlYzogUmVtb3ZlIGR1cGxpY2F0ZSBpbmRpY2VzLgorICAgICAgICBpZiAoaW5kaWNl
cy5maW5kKHBhcnNlZFZhbHVlKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIGluZGljZXMuYXBw
ZW5kKHBhcnNlZFZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5kaWNlczsKK30KKworVmVj
dG9yPHVuc2lnbmVkPiBXTUxTZWxlY3RFbGVtZW50Ojp2YWx1ZVN0cmluZ1RvT3B0aW9uSW5kaWNl
cyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIFZlY3Rvcjx1bnNpZ25lZD4gaW5k
aWNlczsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaW5kaWNlczsK
KworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0
aGlzKTsKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaW5kaWNlczsK
KworICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4U3RyaW5nczsKKyAgICB2YWx1ZS5zcGxpdCgnOycs
IGluZGV4U3RyaW5ncyk7CisKKyAgICB1bnNpZ25lZCBvcHRpb25JbmRleCA9IDA7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5kZXhTdHJpbmdzLmVuZCgpOwor
ICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5kZXhTdHJpbmdz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSAqaXQ7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIWlzT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICsrb3B0aW9uSW5kZXg7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVt
c1tpXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+dmFsdWUoKSA9PSB2
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLmFwcGVuZChvcHRpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmRpY2VzOworfQorCitTdHJp
bmcgV01MU2VsZWN0RWxlbWVudDo6b3B0aW9uSW5kaWNlc1RvVmFsdWVTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKKyAgICBpZiAobV9kZWZhdWx0T3B0aW9uSW5kaWNl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZVN0cmluZzsKKworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKKyAgICBpZiAo
aXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFsdWVTdHJpbmc7CisKKyAgICBWZWN0
b3I8dW5zaWduZWQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2RlZmF1bHRPcHRpb25JbmRpY2Vz
LmVuZCgpOworICAgIGZvciAoVmVjdG9yPHVuc2lnbmVkPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2RlZmF1bHRPcHRpb25JbmRpY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoKCppdCkgLSAxKTsKKyAgICAgICAg
QVNTRVJUKGxpc3RJbmRleCA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGxpc3RJbmRleCA8IChpbnQp
IGl0ZW1zLnNpemUoKSk7CisKKyAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkpIHsKKyAgICAgICAgICAgIGlm
ICghdmFsdWVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nICs9
ICI7IjsKKworICAgICAgICAgICAgdmFsdWVTdHJpbmcgKz0gb3B0aW9uRWxlbWVudC0+dmFsdWUo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2YWx1ZVN0cmluZzsKK30KKworU3Ry
aW5nIFdNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkluZGljZXNUb1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nIHZhbHVlU3RyaW5nOworICAgIGlmIChtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlU3RyaW5nOworCisgICAgVmVjdG9yPHVuc2ln
bmVkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5lbmQoKTsK
KyAgICBmb3IgKFZlY3Rvcjx1bnNpZ25lZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kZWZhdWx0
T3B0aW9uSW5kaWNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICB2YWx1ZVN0cmluZyArPSAiOyI7CisK
KyAgICAgICAgdmFsdWVTdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoKml0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdmFsdWVTdHJpbmc7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MU2VsZWN0
RWxlbWVudC5oCShyZXZpc2lvbiA0NDQ5MCkKKysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBAQCBwdWJsaWM6CiAgICAgV01MU2Vs
ZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFs
IH5XTUxTZWxlY3RFbGVtZW50KCk7CiAKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKICAKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2
ZW50KikgY29uc3Q7CkBAIC04MSwxMSArODQsMjYgQEAgcHVibGljOgogICAgIHZvaWQgYWNjZXNz
S2V5U2V0U2VsZWN0ZWRJbmRleChpbnQpOwogICAgIHZvaWQgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7
CiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOworICAgIHZvaWQgc2VsZWN0SW5pdGlhbE9w
dGlvbnMoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShi
b29sKTsKIAorICAgIHZvaWQgY2FsY3VsYXRlRGVmYXVsdE9wdGlvbkluZGljZXMoKTsKKyAgICB2
b2lkIHNlbGVjdERlZmF1bHRPcHRpb25zKCk7CisgICAgdm9pZCBpbml0aWFsaXplVmFyaWFibGVz
KCk7CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
cGFyc2VJbmRleFZhbHVlU3RyaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIFZlY3Rvcjx1
bnNpZ25lZD4gdmFsdWVTdHJpbmdUb09wdGlvbkluZGljZXMoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisgICAgU3RyaW5nIG9wdGlvbkluZGljZXNUb1ZhbHVlU3RyaW5nKCkgY29uc3Q7CisgICAgU3Ry
aW5nIG9wdGlvbkluZGljZXNUb1N0cmluZygpIGNvbnN0OworCiAgICAgU2VsZWN0RWxlbWVudERh
dGEgbV9kYXRhOworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFN0cmluZyBtX2luYW1lOworICAg
IFN0cmluZyBtX2l2YWx1ZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZGVmYXVsdE9wdGlvbklu
ZGljZXM7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31802</attachid>
            <date>2009-06-24 12:18:29 -0700</date>
            <delta_ts>2009-06-26 07:15:54 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>NewSelectElementFeatures.diff</filename>
            <type>text/plain</type>
            <size>35224</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTA4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDYtMjQgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMu
emltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNjI0NgorCisgICAgICAgIEltcGxlbWVudCBtb3N0IFdNTCBzcGVjaWZpYyA8
c2VsZWN0PiBlbGVtZW50IGZlYXR1cmVzLgorICAgICAgICBBZGQgJ2luYW1lJyAvICdpdmFsdWUn
IHN1cHBvcnQgYW5kIHN1cHBvcnQgdmFyaWFibGUgcmVmZXJlbmNlcy4KKworICAgICAgICBBZGQg
dHdvIHRlc3RzIGNvdmVyaW5nIG1vc3Qgc2VsZWN0L3ZhcmlhYmxlIHJlbGF0ZWQgZnVuY3Rpb25h
bGl0eS4KKyAgICAgICAgTmVlZHMgbW9yZSB0ZXN0cyB3aGVuIGFkZGluZyBmdWxsICdpbmFtZScg
LyAnaXZhbHVlJyBzdXBwb3J0ICh1c2VkIGluIGNvbmp1Y3Rpb24gd2l0aCBvbnBpY2spLgorCisg
ICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLmh0bWwKKyAg
ICAgICAgICAgICAgIHdtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuaHRtbAorCisgICAgICAg
ICogZG9tL1NlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0RWxlbWVu
dDo6b3B0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0RWxlbWVudERhdGE6Om5h
bWUpOgorICAgICAgICAqIGRvbS9TZWxlY3RFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RFbGVtZW50RGF0YTo6c2V0TmFtZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRy
b2xOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICogd21sL1dN
TENhcmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTENhcmRFbGVtZW50OjpoYW5k
bGVJbnRyaW5zaWNFdmVudElmTmVlZGVkKToKKyAgICAgICAgKiB3bWwvV01MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50Ojp0aXRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RJbml0aWFsT3B0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpjYWxjdWxhdGVEZWZhdWx0T3B0
aW9uSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RE
ZWZhdWx0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50Ojppbml0
aWFsaXplVmFyaWFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OnVw
ZGF0ZVZhcmlhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpwYXJz
ZUluZGV4VmFsdWVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6
dmFsdWVTdHJpbmdUb09wdGlvbkluZGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0
RWxlbWVudDo6b3B0aW9uSW5kaWNlc1RvVmFsdWVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
V01MU2VsZWN0RWxlbWVudDo6b3B0aW9uSW5kaWNlc1RvU3RyaW5nKToKKyAgICAgICAgKiB3bWwv
V01MU2VsZWN0RWxlbWVudC5oOgorCiAyMDA5LTA2LTI0ICBKZXNzaWUgQmVybGluICA8amJlcmxp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdl
YkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Nl
bGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NTA4NykKKysrIFdlYkNvcmUvZG9tL1NlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsNiArODYzLDE5IEBAIHZvaWQgU2VsZWN0
RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWQKICAgICBzY3JvbGxUb1NlbGVjdGlvbihkYXRh
LCBlbGVtZW50KTsKIH0KIAordW5zaWduZWQgU2VsZWN0RWxlbWVudDo6b3B0aW9uQ291bnQoY29u
c3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgdW5zaWduZWQgb3B0aW9ucyA9IDA7CisKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBp
dGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50KGl0
ZW1zW2ldKSkKKyAgICAgICAgICAgICsrb3B0aW9uczsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0
aW9uczsKK30KKwogLy8gU2VsZWN0RWxlbWVudERhdGEKIFNlbGVjdEVsZW1lbnREYXRhOjpTZWxl
Y3RFbGVtZW50RGF0YSgpCiAgICAgOiBtX211bHRpcGxlKGZhbHNlKSAKQEAgLTg3Nyw2ICs4OTAs
MTEgQEAgU2VsZWN0RWxlbWVudERhdGE6OlNlbGVjdEVsZW1lbnREYXRhKCkKIHsKIH0KIAorY29u
c3QgQXRvbWljU3RyaW5nJiBTZWxlY3RFbGVtZW50RGF0YTo6bmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKK30KKwogdm9pZCBT
ZWxlY3RFbGVtZW50RGF0YTo6Y2hlY2tMaXN0SXRlbXMoY29uc3QgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0
NTA4NykKKysrIFdlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdHlwZUFoZWFkRmluZChT
ZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgc3RhdGlj
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqKTsKICAg
ICBzdGF0aWMgdm9pZCBhY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KFNlbGVjdEVsZW1lbnREYXRh
JiwgRWxlbWVudCosIGludCBpbmRleCk7Ci0KKyAgICBzdGF0aWMgdW5zaWduZWQgb3B0aW9uQ291
bnQoY29uc3QgU2VsZWN0RWxlbWVudERhdGEmLCBjb25zdCBFbGVtZW50Kik7CisgCiBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihTZWxlY3RFbGVt
ZW50RGF0YSYsIEVsZW1lbnQqLCBFdmVudCosIEhUTUxGb3JtRWxlbWVudCopOwogICAgIHN0YXRp
YyB2b2lkIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxl
bWVudCosIEV2ZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CkBAIC0xMDksNiArMTEwLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdCB7IHJldHVybiBtX211bHRpcGxlOyB9CiAg
ICAgdm9pZCBzZXRNdWx0aXBsZShib29sIHZhbHVlKSB7IG1fbXVsdGlwbGUgPSB2YWx1ZTsgfQog
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9uYW1lID0gdmFsdWU7IH0KKwogICAgIGlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGludCB2
YWx1ZSkgeyBtX3NpemUgPSB2YWx1ZTsgfQogCkBAIC0xNTAsNiArMTU0LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNoZWNrTGlzdEl0ZW1zKGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKIAogICAgIGJv
b2wgbV9tdWx0aXBsZTsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogICAgIGludCBtX3NpemU7
CiAKICAgICBpbnQgbV9sYXN0T25DaGFuZ2VJbmRleDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcAkocmV2aXNpb24gNDUwODcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6cmVjYWxjU3R5bGUoY2hhbmdlKTsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MU2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kYXRhLm5hbWUoKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MU2VsZWN0RWxlbWVu
dDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgc2VsZWN0TXVsdGlwbGUsICgic2VsZWN0LW11bHRpcGxlIikpOwpA
QCAtMTAxLDEzICsxMDYsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFjdGl2ZVNlbGVjdGlv
bkVuCiAKIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgoKSBjb25zdAogewotICAg
IHVuc2lnbmVkIGxlbiA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBs
aXN0SXRlbXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKLSAg
ICAgICAgICAgICsrbGVuOwotICAgIH0KLSAgICByZXR1cm4gbGVuOworICAgIHJldHVybiBTZWxl
Y3RFbGVtZW50OjpvcHRpb25Db3VudChtX2RhdGEsIHRoaXMpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjphZGQoSFRNTEVsZW1lbnQgKmVsZW1lbnQsIEhUTUxFbGVtZW50ICpiZWZvcmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTc0LDYgKzE3Myw4IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHIKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikgCiB7CiAgICAgYm9vbCBvbGRVc2Vz
TWVudUxpc3QgPSBtX2RhdGEudXNlc01lbnVMaXN0KCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBuYW1lQXR0cikKKyAgICAgICAgbV9kYXRhLnNldE5hbWUoYXR0ci0+dmFsdWUoKSk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikgewogICAgICAgICBpbnQgb2xkU2l6ZSA9IG1f
ZGF0YS5zaXplKCk7CiAgICAgICAgIC8vIFNldCB0aGUgYXR0cmlidXRlIHZhbHVlIHRvIGEgbnVt
YmVyLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDQ1MDg3KQorKysg
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDgg
KzgxLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDY7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hp
bGQpOwogCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdDsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZWxlY3RBbGwoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9X
TUxDYXJkRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ1MDg3KQorKysgV2ViQ29yZS93bWwvV01MQ2Fy
ZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
V01MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiV01MVmFyaWFibGVzLmgiCkBAIC0xNjUsMTcgKzE2NiwxNCBAQCB2b2lk
IFdNTENhcmRFbGVtZW50OjpoYW5kbGVJbnRyaW5zaWNFdmVuCiAgICAgaWYgKG1fZXZlbnRUaW1l
cikKICAgICAgICAgbV9ldmVudFRpbWVyLT5zdGFydCgpOwogCi0gICAgLy8gRklYTUU6IEluaXRp
YWxpemUgc2VsZWN0IGVsZW1lbnRzIGluIHRoaXMgY2FyZAogICAgIGZvciAoTm9kZSogbm9kZSA9
IHRyYXZlcnNlTmV4dE5vZGUoKTsgbm9kZSAhPSAwOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW5wdXRFbGVtZW50Kj4obm9kZSktPmluaXRpYWxp
emUoKTsKLSAgICAgICAgLyoKICAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MU2VsZWN0RWxlbWVudCo+KG5vZGUp
LT5zZWxlY3RJbml0aWFsT3B0aW9ucygpOwotICAgICAgICAqLwogICAgIH0KIH0KIApJbmRleDog
V2ViQ29yZS93bWwvV01MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
bWwvV01MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ1MDg3KQorKysgV2ViQ29yZS93bWwv
V01MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE2ICsyMiwyMSBAQAog
CiAjaWYgRU5BQkxFKFdNTCkKICNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCi0KKyNpbmNs
dWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWFwcGVk
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgotCisjaW5jbHVkZSAiV01M
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFZhcmlhYmxl
cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKIFdNTFNlbGVjdEVsZW1lbnQ6OldNTFNl
bGVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogICAgIDogV01MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewpA
QCAtNDEsNiArNDYsMTYgQEAgV01MU2VsZWN0RWxlbWVudDo6fldNTFNlbGVjdEVsZW1lbnQoKQog
ewogfQogCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6dGl0bGUoKSBjb25zdAoreworICAgIHJl
dHVybiBzdWJzdGl0dXRlVmFyaWFibGVSZWZlcmVuY2VzKGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OnRpdGxlQXR0ciksIGRvY3VtZW50KCkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFdNTFNl
bGVjdEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0
YS5uYW1lKCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgV01MU2VsZWN0RWxlbWVudDo6Zm9y
bUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgc2VsZWN0TXVsdGlwbGUsICgic2VsZWN0LW11bHRpcGxlIikpOwpAQCAtMTE3
LDYgKzEzMiwxNCBAQCB2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiB7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikKICAgICAg
ICAgU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0aXBsZUF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIGF0
dHIpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKQor
ICAgICAgICBtX2RhdGEuc2V0TmFtZShwYXJzZVZhbHVlRm9yYmlkZGluZ1ZhcmlhYmxlUmVmZXJl
bmNlcyhhdHRyLT52YWx1ZSgpKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxO
YW1lczo6dmFsdWVBdHRyKQorICAgICAgICBtX3ZhbHVlID0gcGFyc2VWYWx1ZVN1YnN0aXR1dGlu
Z1ZhcmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gaW5hbWVBdHRyKQorICAgICAgICBtX2luYW1lID0gcGFyc2VWYWx1ZUZvcmJpZGRp
bmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGl2YWx1ZUF0dHIpCisgICAgICAgIG1faXZhbHVlID0gcGFyc2VWYWx1ZVN1YnN0
aXR1dGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIFdNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CkBAIC0xNTEsNiArMTc0LDE0IEBAIHZvaWQgV01MU2VsZWN0RWxlbWVudDo6cmVzZXQoKQogdm9p
ZCBXTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
ICAgICBTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKG1fZGF0YSwgdGhpcywgZXZl
bnQpOworCisgICAgLy8gRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgcGxhY2UgdG8gdXBk
YXRlIHRoZSBwYWdlIHZhcmlhYmxlIHN0YXRlLiBJbnZlc3RpZ2F0ZS4KKyAgICB1cGRhdGVWYXJp
YWJsZXMoKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV01MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKIH0KIAogdm9pZCBXTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBz
ZW5kVG9BbnlFbGVtZW50KQpAQCAtMjEzLDEyICsyNDQsMjgyIEBAIHZvaWQgV01MU2VsZWN0RWxl
bWVudDo6c2Nyb2xsVG9TZWxlY3Rpb24KICAgICBTZWxlY3RFbGVtZW50OjpzY3JvbGxUb1NlbGVj
dGlvbihtX2RhdGEsIHRoaXMpOwogfQogCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdElu
aXRpYWxPcHRpb25zKCkKK3sKKyAgICAvLyBTcGVjOiBTdGVwIDEgLSB0aGUgZGVmYXVsdCBvcHRp
b24gaW5kZXggaXMgZGV0ZXJtaW5lZCB1c2luZyBpbmFtZSBhbmQgaXZhbHVlCisgICAgY2FsY3Vs
YXRlRGVmYXVsdE9wdGlvbkluZGljZXMoKTsKKworICAgIGlmIChtX2RlZmF1bHRPcHRpb25JbmRp
Y2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3BlYzogU3RlcCAyIOKA
kyBpbml0aWFsaXNlIHZhcmlhYmxlcworICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTsKKworICAg
IC8vIFNwZWM6IFN0ZXAgMyDigJMgcHJlLXNlbGVjdCBvcHRpb24ocykgc3BlY2lmaWVkIGJ5IHRo
ZSBkZWZhdWx0IG9wdGlvbiBpbmRleCAKKyAgICBzZWxlY3REZWZhdWx0T3B0aW9ucygpOworfQor
CiB2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewog
ICAgIFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUobV9kYXRhLCB0aGlzKTsKICAgICBX
TUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKK3ZvaWQg
V01MU2VsZWN0RWxlbWVudDo6Y2FsY3VsYXRlRGVmYXVsdE9wdGlvbkluZGljZXMoKQoreworICAg
IFdNTFBhZ2VTdGF0ZSogcGFnZVN0YXRlID0gd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jdW1l
bnQoKSk7CisgICAgaWYgKCFwYWdlU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyB2YXJpYWJsZTsKKworICAgIC8vIFNwZWM6IElmIHRoZSAnaW5hbWUnIGF0dHJpYnV0ZSBpcyBz
cGVjaWZpZWQgYW5kIG5hbWVzIGEgdmFyaWFibGUgdGhhdCBpcyBzZXQsCisgICAgLy8gdGhlbiB0
aGUgZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSBvZiB0aGF0IHZh
cmlhYmxlLiAKKyAgICBpZiAoIW1faW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHZhcmlhYmxl
ID0gcGFnZVN0YXRlLT5nZXRWYXJpYWJsZShtX2luYW1lKTsKKyAgICAgICAgaWYgKCF2YXJpYWJs
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RlZmF1bHRPcHRpb25JbmRpY2VzID0gcGFyc2VJ
bmRleFZhbHVlU3RyaW5nKHZhcmlhYmxlKTsKKyAgICB9CisKKyAgICAvLyBTcGVjOiBJZiB0aGUg
ZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgZW1wdHkgYW5kIHRoZSAnaXZhbHVlJyBhdHRyaWJ1dGUg
aXMgc3BlY2lmaWVkLAorICAgIC8vIHRoZW4gdGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4IGlzIHRo
ZSB2YWxpZGF0ZWQgYXR0cmlidXRlIHZhbHVlLgorICAgIGlmIChtX2RlZmF1bHRPcHRpb25JbmRp
Y2VzLmlzRW1wdHkoKSAmJiAhbV9pdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBtX2RlZmF1bHRP
cHRpb25JbmRpY2VzID0gcGFyc2VJbmRleFZhbHVlU3RyaW5nKG1faXZhbHVlKTsKKworICAgIC8v
IFNwZWM6IElmIHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRleCBpcyBlbXB0eSwgYW5kIHRoZSAnbmFt
ZScgYXR0cmlidXRlIGlzIHNwZWNpZmllZAorICAgIC8vIGFuZCB0aGUgJ25hbWUnIHR0cmlidXRl
IG5hbWVzIGEgdmFyaWFibGUgdGhhdCBpcyBzZXQsIHRoZW4gZm9yIGVhY2ggdmFsdWUgaW4gdGhl
ICduYW1lJworICAgIC8vIHZhcmlhYmxlIHRoYXQgaXMgcHJlc2VudCBhcyBhIHZhbHVlIGluIHRo
ZSBzZWxlY3QncyBvcHRpb24gZWxlbWVudHMsIHRoZSBpbmRleCBvZiB0aGUKKyAgICAvLyBmaXJz
dCBvcHRpb24gZWxlbWVudCBjb250YWluaW5nIHRoYXQgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGRl
ZmF1bHQgaW5kZXggaWYgdGhhdAorICAgIC8vIGluZGV4IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5
IGFkZGVkLiAKKyAgICBpZiAobV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkgJiYgIW1f
ZGF0YS5uYW1lKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHZhcmlhYmxlID0gcGFnZVN0YXRlLT5n
ZXRWYXJpYWJsZShtX2RhdGEubmFtZSgpKTsKKyAgICAgICAgaWYgKCF2YXJpYWJsZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2RlZmF1bHRPcHRpb25JbmRpY2VzID0gdmFsdWVTdHJpbmdUb09w
dGlvbkluZGljZXModmFyaWFibGUpOworICAgIH0KKworICAgIC8vIFNwZWM6IElmIHRoZSBkZWZh
dWx0IG9wdGlvbiBpbmRleCBpcyBlbXB0eSBhbmQgdGhlICd2YWx1ZScgYXR0cmlidXRlIGlzIHNw
ZWNpZmllZCB0aGVuCisgICAgLy8gZm9yIGVhY2ggIHZhbHVlIGluIHRoZSAndmFsdWUnIGF0dHJp
YnV0ZSB0aGF0IGlzIHByZXNlbnQgYXMgYSB2YWx1ZSBpbiB0aGUgc2VsZWN0J3MKKyAgICAvLyBv
cHRpb24gZWxlbWVudHMsIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb3B0aW9uIGVsZW1lbnQgY29u
dGFpbmluZyB0aGF0IHZhbHVlIGlzIGFkZGVkCisgICAgLy8gdG8gdGhlIGRlZmF1bHQgaW5kZXgg
aWYgdGhhdCBpbmRleCBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBhZGRlZC4gCisgICAgaWYgKG1f
ZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0eSgpICYmICFtX3ZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9kZWZhdWx0T3B0aW9uSW5kaWNlcyA9IHZhbHVlU3RyaW5nVG9PcHRpb25JbmRpY2Vz
KG1fdmFsdWUpOworCisgICAgLy8gU3BlYzogSWYgdGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4IGlz
IGVtcHR5IGFuZCB0aGUgc2VsZWN0IGlzIGEgbXVsdGktY2hvaWNlLCB0aGVuIHRoZQorICAgIC8v
IGRlZmF1bHQgb3B0aW9uIGluZGV4IGlzIHNldCB0byB6ZXJvLiBJZiB0aGUgc2VsZWN0IGlzIHNp
bmdsZS1jaG9pY2UsIHRoZW4gdGhlIGRlZmF1bHQKKyAgICAvLyBvcHRpb24gaW5kZXggaXMgc2V0
IHRvIG9uZS4KKyAgICBpZiAobV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fZGVmYXVsdE9wdGlvbkluZGljZXMuYXBwZW5kKCh1bnNpZ25lZCkgIW1fZGF0YS5tdWx0
aXBsZSgpKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpzZWxlY3REZWZhdWx0T3B0aW9u
cygpCit7CisgICAgQVNTRVJUKCFtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmlzRW1wdHkoKSk7CisK
KyAgICBpZiAoIW1fZGF0YS5tdWx0aXBsZSgpKSB7CisgICAgICAgIHNldFNlbGVjdGVkSW5kZXgo
bV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5maXJzdCgpIC0gMSwgZmFsc2UpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3Rvcjx1bnNpZ25lZD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoKCppdCkgLSAxLCBmYWxzZSk7
Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6aW5pdGlhbGl6ZVZhcmlhYmxlcygpCit7Cisg
ICAgQVNTRVJUKCFtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmlzRW1wdHkoKSk7CisKKyAgICBXTUxQ
YWdlU3RhdGUqIHBhZ2VTdGF0ZSA9IHdtbFBhZ2VTdGF0ZUZvckRvY3VtZW50KGRvY3VtZW50KCkp
OworICAgIGlmICghcGFnZVN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CisgICAgaWYgKGl0
ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3BlYzogSWYgdGhlICdp
bmFtZScgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgbmFtZWQgdmFyaWFibGUgaXMg
c2V0IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4LiAKKyAgICBpZiAoIW1faW5hbWUuaXNF
bXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9pbmFtZSwgb3B0aW9u
SW5kaWNlc1RvU3RyaW5nKCkpOworCisgICAgU3RyaW5nIG5hbWUgPSBtX2RhdGEubmFtZSgpOwor
ICAgIGlmICghbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fZGF0YS5tdWx0aXBsZSgp
KSB7CisgICAgICAgICAgICAvLyBTcGVjOiBJZiB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBpcyBzcGVj
aWZpZWQgYW5kIHRoZSBzZWxlY3QgaXMgYSBtdWx0aXBsZS1jaG9pY2UgZWxlbWVudCwKKyAgICAg
ICAgICAgIC8vIHRoZW4gZm9yIGVhY2ggaW5kZXggZ3JlYXRlciB0aGFuIHplcm8sIHRoZSB2YWx1
ZSBvZiB0aGUgJ3ZhbHVlJyBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbgorICAgICAgICAgICAgLy8g
ZWxlbWVudCBhdCB0aGUgaW5kZXggaXMgYWRkZWQgdG8gdGhlIG5hbWUgdmFyaWFibGUuIAorICAg
ICAgICAgICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlKG5hbWUsIG9wdGlvbkluZGljZXNUb1Zh
bHVlU3RyaW5nKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU3BlYzogSWYg
dGhlICduYW1lJyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2VsZWN0IGlzIGEgc2lu
Z2xlLWNob2ljZSBlbGVtZW50LAorICAgICAgICAgICAgLy8gdGhlbiB0aGUgbmFtZWQgdmFyaWFi
bGUgaXMgc2V0IHdpdGggdGhlIHZhbHVlIG9mIHRoZSAndmFsdWUnIGF0dHJpYnV0ZSBvbiB0aGUg
b3B0aW9uCisgICAgICAgICAgICAvLyBlbGVtZW50IGF0IHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRl
eC4gCisgICAgICAgICAgICB1bnNpZ25lZCBvcHRpb25JbmRleCA9IG1fZGVmYXVsdE9wdGlvbklu
ZGljZXMuZmlyc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChvcHRpb25JbmRleCA+PSAxKTsKKwor
ICAgICAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4
IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQobGlzdEluZGV4ID49IDApOworICAgICAgICAgICAg
QVNTRVJUKGxpc3RJbmRleCA8IChpbnQpIGl0ZW1zLnNpemUoKSk7CisKKyAgICAgICAgICAgIGlm
IChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2xp
c3RJbmRleF0pKQorICAgICAgICAgICAgICAgIHBhZ2VTdGF0ZS0+c3RvcmVWYXJpYWJsZShuYW1l
LCBvcHRpb25FbGVtZW50LT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBX
TUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVWYXJpYWJsZXMoKQoreworICAgIFdNTFBhZ2VTdGF0ZSog
cGFnZVN0YXRlID0gd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgaWYg
KCFwYWdlU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBuYW1lID0gbV9kYXRh
Lm5hbWUoKTsKKyAgICBpZiAobV9pbmFtZS5pc0VtcHR5KCkgJiYgbmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBuYW1lU3RyaW5nOworICAgIFN0cmluZyBpbmFt
ZVN0cmluZzsKKworICAgIHVuc2lnbmVkIG9wdGlvbkluZGV4ID0gMDsKKyAgICBjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgT3B0aW9u
RWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAg
ICAgIGlmICghb3B0aW9uRWxlbWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICsrb3B0aW9uSW5kZXg7CisgICAgICAgIGlmICghb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghbmFtZVN0cmluZy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBuYW1lU3RyaW5nICs9ICI7IjsKKworICAgICAgICBpZiAoIWluYW1l
U3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGluYW1lU3RyaW5nICs9ICI7IjsKKworICAg
ICAgICBuYW1lU3RyaW5nICs9IG9wdGlvbkVsZW1lbnQtPnZhbHVlKCk7CisgICAgICAgIGluYW1l
U3RyaW5nICs9IFN0cmluZzo6bnVtYmVyKG9wdGlvbkluZGV4KTsKKyAgICB9CisKKyAgICBpZiAo
IW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobmFtZSwg
bmFtZVN0cmluZyk7CisKKyAgICBpZiAoIW1faW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBwYWdl
U3RhdGUtPnN0b3JlVmFyaWFibGUobV9pbmFtZSwgaW5hbWVTdHJpbmcpOworfQorCitWZWN0b3I8
dW5zaWduZWQ+IFdNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlSW5kZXhWYWx1ZVN0cmluZyhjb25zdCBT
dHJpbmcmIGluZGV4VmFsdWUpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBpbmRpY2Vz
OworICAgIGlmIChpbmRleFZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGluZGljZXM7
CisKKyAgICBWZWN0b3I8U3RyaW5nPiBpbmRleFN0cmluZ3M7CisgICAgaW5kZXhWYWx1ZS5zcGxp
dCgnOycsIGluZGV4U3RyaW5ncyk7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgdW5zaWdu
ZWQgb3B0aW9uQ291bnQgPSBTZWxlY3RFbGVtZW50OjpvcHRpb25Db3VudChtX2RhdGEsIHRoaXMp
OworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluZGV4U3RyaW5n
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGlu
ZGV4U3RyaW5ncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgdW5zaWduZWQg
cGFyc2VkVmFsdWUgPSAoKml0KS50b1VJbnRTdHJpY3QoJm9rKTsKKyAgICAgICAgLy8gU3BlYzog
UmVtb3ZlIGFsbCBub24taW50ZWdlciBpbmRpY2VzIGZyb20gdGhlIHZhbHVlLiBSZW1vdmUgYWxs
IG91dC1vZi1yYW5nZSBpbmRpY2VzCisgICAgICAgIC8vIGZyb20gdGhlIHZhbHVlLCB3aGVyZSBv
dXQtb2YtcmFuZ2UgaXMgZGVmaW5lZCBhcyBhbnkgaW5kZXggd2l0aCBhIHZhbHVlIGdyZWF0ZXIg
dGhhbgorICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIG9wdGlvbnMgaW4gdGhlIHNlbGVjdCBvciB3
aXRoIGEgdmFsdWUgbGVzcyB0aGFuIG9uZS4gCisgICAgICAgIGlmICghb2sgfHwgcGFyc2VkVmFs
dWUgPCAxIHx8IHBhcnNlZFZhbHVlID4gb3B0aW9uQ291bnQpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBTcGVjOiBSZW1vdmUgZHVwbGljYXRlIGluZGljZXMuCisgICAgICAg
IGlmIChpbmRpY2VzLmZpbmQocGFyc2VkVmFsdWUpID09IG5vdEZvdW5kKQorICAgICAgICAgICAg
aW5kaWNlcy5hcHBlbmQocGFyc2VkVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBpbmRpY2Vz
OworfQorCitWZWN0b3I8dW5zaWduZWQ+IFdNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlU3RyaW5nVG9P
cHRpb25JbmRpY2VzKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVu
c2lnbmVkPiBpbmRpY2VzOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpbmRpY2VzOworCisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEu
bGlzdEl0ZW1zKHRoaXMpOworICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpbmRpY2VzOworCisgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhTdHJpbmdzOworICAgIHZhbHVl
LnNwbGl0KCc7JywgaW5kZXhTdHJpbmdzKTsKKworICAgIHVuc2lnbmVkIG9wdGlvbkluZGV4ID0g
MDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbmRleFN0cmlu
Z3MuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBp
bmRleFN0cmluZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyB2
YWx1ZSA9ICppdDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghaXNPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgKytvcHRpb25JbmRleDsK
KyAgICAgICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25F
bGVtZW50KGl0ZW1zW2ldKSkgeworICAgICAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT52
YWx1ZSgpID09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGljZXMuYXBwZW5kKG9w
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGluZGljZXM7
Cit9CisKK1N0cmluZyBXTUxTZWxlY3RFbGVtZW50OjpvcHRpb25JbmRpY2VzVG9WYWx1ZVN0cmlu
ZygpIGNvbnN0Cit7CisgICAgU3RyaW5nIHZhbHVlU3RyaW5nOworICAgIGlmIChtX2RlZmF1bHRP
cHRpb25JbmRpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlU3RyaW5nOworCisg
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMp
OworICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZVN0cmluZzsK
KworICAgIFZlY3Rvcjx1bnNpZ25lZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZGVmYXVsdE9w
dGlvbkluZGljZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8dW5zaWduZWQ+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGVmYXVsdE9wdGlvbkluZGljZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIHVuc2lnbmVkIG9wdGlvbkluZGV4ID0gKCppdCk7CisgICAgICAgIGlmIChv
cHRpb25JbmRleCA8IDEgfHwgb3B0aW9uSW5kZXggPiBpdGVtcy5zaXplKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgo
KCppdCkgLSAxKTsKKyAgICAgICAgQVNTRVJUKGxpc3RJbmRleCA+PSAwKTsKKyAgICAgICAgQVNT
RVJUKGxpc3RJbmRleCA8IChpbnQpIGl0ZW1zLnNpemUoKSk7CisKKyAgICAgICAgaWYgKE9wdGlv
bkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4
XSkpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHZhbHVlU3RyaW5nICs9ICI7IjsKKworICAgICAgICAgICAgdmFsdWVTdHJpbmcgKz0g
b3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2
YWx1ZVN0cmluZzsKK30KKworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkluZGljZXNU
b1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nIHZhbHVlU3RyaW5nOworICAgIGlmIChtX2Rl
ZmF1bHRPcHRpb25JbmRpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlU3RyaW5n
OworCisgICAgVmVjdG9yPHVuc2lnbmVkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9kZWZhdWx0
T3B0aW9uSW5kaWNlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3Rvcjx1bnNpZ25lZD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICB2
YWx1ZVN0cmluZyArPSAiOyI7CisKKyAgICAgICAgdmFsdWVTdHJpbmcgKz0gU3RyaW5nOjpudW1i
ZXIoKml0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVTdHJpbmc7Cit9CisKIH0KIAogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0NTA4NykKKysrIFdlYkNv
cmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBA
QCBwdWJsaWM6CiAgICAgV01MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKICAgICB2aXJ0dWFsIH5XTUxTZWxlY3RFbGVtZW50KCk7CiAKKyAgICB2aXJ0dWFs
IFN0cmluZyB0aXRsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CkBAIC04MSwxMSArODQsMjYgQEAgcHVi
bGljOgogICAgIHZvaWQgYWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleChpbnQpOwogICAgIHZvaWQg
c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOworICAg
IHZvaWQgc2VsZWN0SW5pdGlhbE9wdGlvbnMoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKIAorICAgIHZvaWQgY2FsY3VsYXRlRGVmYXVsdE9w
dGlvbkluZGljZXMoKTsKKyAgICB2b2lkIHNlbGVjdERlZmF1bHRPcHRpb25zKCk7CisgICAgdm9p
ZCBpbml0aWFsaXplVmFyaWFibGVzKCk7CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKwor
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFyc2VJbmRleFZhbHVlU3RyaW5nKGNvbnN0IFN0cmluZyYp
IGNvbnN0OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVTdHJpbmdUb09wdGlvbkluZGljZXMo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgU3RyaW5nIG9wdGlvbkluZGljZXNUb1ZhbHVlU3Ry
aW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIG9wdGlvbkluZGljZXNUb1N0cmluZygpIGNvbnN0Owor
CiAgICAgU2VsZWN0RWxlbWVudERhdGEgbV9kYXRhOworICAgIFN0cmluZyBtX3ZhbHVlOworICAg
IFN0cmluZyBtX2luYW1lOworICAgIFN0cmluZyBtX2l2YWx1ZTsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQ+IG1fZGVmYXVsdE9wdGlvbkluZGljZXM7CiB9OwogCiB9CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
NTA4NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMxIEBACisyMDA5LTA2LTI0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1h
bm5AdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjYyNDYKKworICAgICAgICBJbXBsZW1lbnQgbW9zdCBXTUwgc3BlY2lmaWMgPHNlbGVjdD4g
ZWxlbWVudCBmZWF0dXJlcy4KKyAgICAgICAgQWRkIHR3byB0ZXN0cyBjb3ZlcmluZyBtb3N0IHNl
bGVjdC92YXJpYWJsZSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy93bWwvcG9zdC1kYXRhLXRvLXNlcnZlci5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dtbC9yZXNvdXJjZXMvZHVtcFZhcmlhYmxlcy5jZ2k6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9wb3N0LWRhdGEtdG8tc2VydmVyLmpz
OiBBZGRlZC4KKyAgICAgICAgKHNldHVwVGVzdERvY3VtZW50KToKKyAgICAgICAgKHNlbmRUZXh0
VG9Db250cm9sKToKKyAgICAgICAgKHByZXBhcmVUZXN0KToKKyAgICAgICAgKGV4ZWN1dGVUZXN0
KToKKyAgICAgICAgKiB3bWwvcmVzb3VyY2VzL1dNTFRlc3RDYXNlLmpzOgorICAgICAgICAoY3Jl
YXRlV01MVGVzdENhc2UuaWZyYW1lRWxlbWVudC5vbmxvYWQpOgorICAgICAgICAoY3JlYXRlV01M
VGVzdENhc2UpOgorICAgICAgICAoZGVsYXlFeGVjdXRlVGVzdCk6CisgICAgICAgICogd21sL3Jl
c291cmNlcy9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuanM6IEFkZGVkLgorICAgICAgICAoc2V0
dXBUZXN0RG9jdW1lbnQpOgorICAgICAgICAocHJlcGFyZVRlc3QpOgorICAgICAgICAoZXhlY3V0
ZVRlc3QpOgorICAgICAgICAqIHdtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiB3bWwvc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLmh0bWw6
IEFkZGVkLgorCiAyMDA5LTA2LTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChEaXNhYmxpbmcgZmFpbGluZyB0ZXN0ISkuCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dtbC9wb3N0LWRh
dGEtdG8tc2VydmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvd21sL3Bvc3QtZGF0YS10by1zZXJ2ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI0IEBACitXTUwgaHR0cCBuYXZpZ2F0aW9uIGxheW91dCB0ZXN0cyAtIHVz
aW5nIFhIVE1MIHNjcmlwdGluZworCisKK0NvbXBsZXggZGF0YSBwb3N0aW5nIGV4YW1wbGUKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBh
dGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK1RoaXMgcGFnZSB3YXMgcmVxdWVzdGVk
IHdpdGggYW4gSFRUUCBQT1NUCisKK1RoZSBxdWVyeSBwYXJhbWV0ZXJzIGFyZTogY2F0ZWdvcnk9
d2FwO3RpdGxlPSU1QnRpdGxlJTVEJTIwVEVTVCUyMFBBU1NFRDt1cmw9JTVCdXJsJTVEJTIwVEVT
VCUyMFBBU1NFRDtkZXNjPSU1QmRlc2MlNUQlMjBURVNUJTIwUEFTU0VECitGb3JtIGNvbnRlbnQg
Y2F0ZWdvcnk6ICd3YXAnCitGb3JtIGNvbnRlbnQgdGl0bGUgOiAnW3RpdGxlXSBURVNUIFBBU1NF
RCcKK0Zvcm0gY29udGVudCB1cmwgOiAnW3VybF0gVEVTVCBQQVNTRUQnCitGb3JtIGNvbnRlbnQg
ZGVzYyA6ICdbZGVzY10gVEVTVCBQQVNTRUQnCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd21sL3Bvc3QtZGF0YS10by1zZXJ2ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQ+dmFyIHJlbGF0aXZlUGF0aFRvTGF5b3V0VGVzdHMgPSAiLi4vLi4vLi4iOzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3dtbC9yZXNvdXJjZXMvV01MVGVzdENhc2UuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPldNTCBodHRwIG5hdmlnYXRp
b24gbGF5b3V0IHRlc3RzIC0gdXNpbmcgWEhUTUwgc2NyaXB0aW5nPC9oMT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3Bvc3QtZGF0YS10by1zZXJ2ZXIuanMiIGNoYXJzZXQ9InV0ZjgiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcmVzb3Vy
Y2VzL2R1bXBWYXJpYWJsZXMuY2dpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd21sL3Jlc291cmNlcy9kdW1wVmFyaWFibGVzLmNnaQkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9kdW1wVmFyaWFibGVzLmNnaQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyOCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBDR0k7CisK
KyRxdWVyeSA9IG5ldyBDR0k7CiskbWV0aG9kID0gJHF1ZXJ5LT5yZXF1ZXN0X21ldGhvZCgpOwor
JHF1ZXJ5U3RyaW5nID0gJHF1ZXJ5LT5xdWVyeV9zdHJpbmc7CiskY2F0ID0gJHF1ZXJ5LT5wYXJh
bSgiY2F0ZWdvcnkiKTsKKyR0aXRsZSA9ICRxdWVyeS0+cGFyYW0oInRpdGxlIik7CiskdXJsID0g
JHF1ZXJ5LT5wYXJhbSgidXJsIik7CiskZGVzYyA9ICRxdWVyeS0+cGFyYW0oImRlc2MiKTsKKwor
cHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXHJcbiI7CitwcmludCAiQ2FjaGUtQ29udHJv
bDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGVcclxuIjsKK3ByaW50ICJcclxu
IjsKKworcHJpbnQgPDxIRVJFX0RPQ19FTkQ7Cis8aHRtbD4KKzxib2R5PgorVGhpcyBwYWdlIHdh
cyByZXF1ZXN0ZWQgd2l0aCBhbiBIVFRQICRtZXRob2Q8YnIvPjxici8+CitUaGUgcXVlcnkgcGFy
YW1ldGVycyBhcmU6ICRxdWVyeVN0cmluZzxici8+CitGb3JtIGNvbnRlbnQgY2F0ZWdvcnk6ICck
Y2F0Jzxici8+CitGb3JtIGNvbnRlbnQgdGl0bGUgICA6ICckdGl0bGUnPGJyLz4KK0Zvcm0gY29u
dGVudCB1cmwgICAgIDogJyR1cmwnPGJyLz4KK0Zvcm0gY29udGVudCBkZXNjICAgIDogJyRkZXNj
Jzxici8+Cis8L2JvZHk+Cis8L2h0bWw+CitIRVJFX0RPQ19FTkQKClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9kdW1wVmFyaWFibGVzLmNn
aQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9wb3N0LWRhdGEtdG8tc2VydmVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9wb3N0LWRhdGEt
dG8tc2VydmVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwv
cmVzb3VyY2VzL3Bvc3QtZGF0YS10by1zZXJ2ZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI2IEBACisvLyBbTmFtZV0gcG9zdC1kYXRhLXRvLXNlcnZlci5qcworCitjcmVhdGVXTUxUZXN0
Q2FzZSgiQ29tcGxleCBkYXRhIHBvc3RpbmcgZXhhbXBsZSIsIGZhbHNlKTsKKyAgICAKK3ZhciB0
aXRsZUlucHV0OwordmFyIHVybElucHV0OwordmFyIGRlc2NJbnB1dDsKKworZnVuY3Rpb24gc2V0
dXBUZXN0RG9jdW1lbnQoKSB7CisgICAgdmFyIGNhcmRFbGVtZW50ID0gdGVzdERvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5maXJzdENoaWxkOworCisgICAgdmFyIGFuY2hvckVsZW1lbnQgPSBjcmVh
dGVXTUxFbGVtZW50KCJhbmNob3IiKTsKKyAgICBhbmNob3JFbGVtZW50LnNldEF0dHJpYnV0ZSgi
aWQiLCAidG9wIik7CisgICAgYW5jaG9yRWxlbWVudC5hcHBlbmRDaGlsZCh0ZXN0RG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIlN0YXJ0IHRlc3QiKSk7CisgICAgY2FyZEVsZW1lbnQuYXBwZW5kQ2hp
bGQoYW5jaG9yRWxlbWVudCk7CisKKyAgICAvLyBQdXJlIFdNTCBiYXNlZCBmb3JtIGRhdGEgcG9z
dGluZyB1c2luZyB2YXJpYWJsZSBzdWJzdGl0dXRpb24KKyAgICB2YXIgZ29FbGVtZW50ID0gY3Jl
YXRlV01MRWxlbWVudCgiZ28iKTsKKyAgICBnb0VsZW1lbnQuc2V0QXR0cmlidXRlKCJtZXRob2Qi
LCAiUE9TVCIpOworICAgIGdvRWxlbWVudC5zZXRBdHRyaWJ1dGUoImhyZWYiLCAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3dtbC9yZXNvdXJjZXMvZHVtcFZhcmlhYmxlcy5jZ2kiKTsKKworICAgIHZh
ciBwb3N0ZmllbGRFbGVtZW50MSA9IGNyZWF0ZVdNTEVsZW1lbnQoInBvc3RmaWVsZCIpOworICAg
IHBvc3RmaWVsZEVsZW1lbnQxLnNldEF0dHJpYnV0ZSgibmFtZSIsICJjYXRlZ29yeSIpOworICAg
IHBvc3RmaWVsZEVsZW1lbnQxLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiJGNhdGVnb3J5Iik7Cisg
ICAgZ29FbGVtZW50LmFwcGVuZENoaWxkKHBvc3RmaWVsZEVsZW1lbnQxKTsKKworICAgIHZhciBw
b3N0ZmllbGRFbGVtZW50MiA9IGNyZWF0ZVdNTEVsZW1lbnQoInBvc3RmaWVsZCIpOworICAgIHBv
c3RmaWVsZEVsZW1lbnQyLnNldEF0dHJpYnV0ZSgibmFtZSIsICJ0aXRsZSIpOworICAgIHBvc3Rm
aWVsZEVsZW1lbnQyLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiJHRpdGxlIik7CisgICAgZ29FbGVt
ZW50LmFwcGVuZENoaWxkKHBvc3RmaWVsZEVsZW1lbnQyKTsKKworICAgIHZhciBwb3N0ZmllbGRF
bGVtZW50MyA9IGNyZWF0ZVdNTEVsZW1lbnQoInBvc3RmaWVsZCIpOworICAgIHBvc3RmaWVsZEVs
ZW1lbnQzLnNldEF0dHJpYnV0ZSgibmFtZSIsICJ1cmwiKTsKKyAgICBwb3N0ZmllbGRFbGVtZW50
My5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgIiR1cmwiKTsKKyAgICBnb0VsZW1lbnQuYXBwZW5kQ2hp
bGQocG9zdGZpZWxkRWxlbWVudDMpOworCisgICAgdmFyIHBvc3RmaWVsZEVsZW1lbnQ0ID0gY3Jl
YXRlV01MRWxlbWVudCgicG9zdGZpZWxkIik7CisgICAgcG9zdGZpZWxkRWxlbWVudDQuc2V0QXR0
cmlidXRlKCJuYW1lIiwgImRlc2MiKTsKKyAgICBwb3N0ZmllbGRFbGVtZW50NC5zZXRBdHRyaWJ1
dGUoInZhbHVlIiwgIiRkZXNjIik7CisgICAgZ29FbGVtZW50LmFwcGVuZENoaWxkKHBvc3RmaWVs
ZEVsZW1lbnQ0KTsKKworICAgIGFuY2hvckVsZW1lbnQuYXBwZW5kQ2hpbGQoZ29FbGVtZW50KTsK
KworICAgIC8vIENhdGVnb3J5CisgICAgdmFyIGZpZWxkc2V0RWxlbWVudDEgPSBjcmVhdGVXTUxF
bGVtZW50KCJmaWVsZHNldCIpOworICAgIGZpZWxkc2V0RWxlbWVudDEudGV4dENvbnRlbnQgPSAi
Q2F0ZWdvcnk6IjsKKworICAgIHZhciBzZWxlY3RFbGVtZW50ID0gY3JlYXRlV01MRWxlbWVudCgi
c2VsZWN0Iik7CisgICAgc2VsZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiY2F0ZWdv
cnkiKTsKKyAgICBzZWxlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgidmFsdWUiLCAid2FwIik7Cisg
ICAgc2VsZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgIlNlY3Rpb24/Iik7CisKKyAg
ICB2YXIgb3B0aW9uRWxlbWVudDEgPSBjcmVhdGVXTUxFbGVtZW50KCJvcHRpb24iKTsKKyAgICBv
cHRpb25FbGVtZW50MS50ZXh0Q29udGVudCA9ICJDb21wdXRlcnMiOworICAgIG9wdGlvbkVsZW1l
bnQxLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiY29tcHV0ZXJzIik7CisgICAgc2VsZWN0RWxlbWVu
dC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50MSk7CisKKyAgICB2YXIgb3B0aW9uRWxlbWVudDIg
PSBjcmVhdGVXTUxFbGVtZW50KCJvcHRpb24iKTsKKyAgICBvcHRpb25FbGVtZW50Mi50ZXh0Q29u
dGVudCA9ICJXQVAiOworICAgIG9wdGlvbkVsZW1lbnQyLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAi
d2FwIik7CisgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50Mik7CisK
KyAgICB2YXIgb3B0aW9uRWxlbWVudDMgPSBjcmVhdGVXTUxFbGVtZW50KCJvcHRpb24iKTsKKyAg
ICBvcHRpb25FbGVtZW50My50ZXh0Q29udGVudCA9ICJHYXRld2F5cyI7CisgICAgb3B0aW9uRWxl
bWVudDMuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsICJnYXRld2F5cyIpOworICAgIHNlbGVjdEVsZW1l
bnQuYXBwZW5kQ2hpbGQob3B0aW9uRWxlbWVudDMpOworCisgICAgZmllbGRzZXRFbGVtZW50MS5h
cHBlbmRDaGlsZChzZWxlY3RFbGVtZW50KTsKKyAgICBjYXJkRWxlbWVudC5hcHBlbmRDaGlsZChm
aWVsZHNldEVsZW1lbnQxKTsKKworICAgIC8vIFRpdGxlCisgICAgdmFyIGZpZWxkc2V0RWxlbWVu
dDIgPSBjcmVhdGVXTUxFbGVtZW50KCJmaWVsZHNldCIpOworICAgIGZpZWxkc2V0RWxlbWVudDIu
dGV4dENvbnRlbnQgPSAiVGl0bGU6IjsKKworICAgIHRpdGxlSW5wdXQgPSBjcmVhdGVXTUxFbGVt
ZW50KCJpbnB1dCIpOworICAgIHRpdGxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQi
KTsKKyAgICB0aXRsZUlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ0aXRsZSIpOworICAgIHRp
dGxlSW5wdXQuc2V0QXR0cmlidXRlKCJzaXplIiwgIjIwIik7CisgICAgdGl0bGVJbnB1dC5zZXRB
dHRyaWJ1dGUoImVtcHR5b2siLCAiZmFsc2UiKTsKKyAgICBmaWVsZHNldEVsZW1lbnQyLmFwcGVu
ZENoaWxkKHRpdGxlSW5wdXQpOworICAgIGNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGZpZWxkc2V0
RWxlbWVudDIpOworCisgICAgLy8gVVJMCisgICAgdmFyIGZpZWxkc2V0RWxlbWVudDMgPSBjcmVh
dGVXTUxFbGVtZW50KCJmaWVsZHNldCIpOworICAgIGZpZWxkc2V0RWxlbWVudDMudGV4dENvbnRl
bnQgPSAiVVJMOiI7CisKKyAgICB1cmxJbnB1dCA9IGNyZWF0ZVdNTEVsZW1lbnQoImlucHV0Iik7
CisgICAgdXJsSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsKKyAgICB1cmxJbnB1
dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAidXJsIik7CisgICAgdXJsSW5wdXQuc2V0QXR0cmlidXRl
KCJzaXplIiwgIjEwMCIpOworICAgIHVybElucHV0LnNldEF0dHJpYnV0ZSgiZW1wdHlvayIsICJm
YWxzZSIpOworICAgIGZpZWxkc2V0RWxlbWVudDMuYXBwZW5kQ2hpbGQodXJsSW5wdXQpOworICAg
IGNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudDMpOworCisgICAgLy8gRGVz
Y3JpcHRpb24KKyAgICB2YXIgZmllbGRzZXRFbGVtZW50NCA9IGNyZWF0ZVdNTEVsZW1lbnQoImZp
ZWxkc2V0Iik7CisgICAgZmllbGRzZXRFbGVtZW50NC50ZXh0Q29udGVudCA9ICJEZXNjcmlwdGlv
bjoiOworCisgICAgZGVzY0lucHV0ID0gY3JlYXRlV01MRWxlbWVudCgiaW5wdXQiKTsKKyAgICBk
ZXNjSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsKKyAgICBkZXNjSW5wdXQuc2V0
QXR0cmlidXRlKCJuYW1lIiwgImRlc2MiKTsKKyAgICBkZXNjSW5wdXQuc2V0QXR0cmlidXRlKCJz
aXplIiwgIjgwMCIpOworICAgIGRlc2NJbnB1dC5zZXRBdHRyaWJ1dGUoImVtcHR5b2siLCAidHJ1
ZSIpOworICAgIGZpZWxkc2V0RWxlbWVudDQuYXBwZW5kQ2hpbGQoZGVzY0lucHV0KTsKKyAgICBj
YXJkRWxlbWVudC5hcHBlbmRDaGlsZChmaWVsZHNldEVsZW1lbnQ0KTsKK30KKworZnVuY3Rpb24g
c2VuZFRleHRUb0NvbnRyb2woZWxlbWVudCwgdGV4dCkgeworICAgIGVsZW1lbnQuZm9jdXMoKTsK
KyAgICB0ZXN0RG9jdW1lbnQuZXhlY0NvbW1hbmQoIkluc2VydFRleHQiLCBmYWxzZSwgdGV4dCk7
Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVUZXN0KCkgeworICAgIHNlbmRUZXh0VG9Db250cm9sKHRp
dGxlSW5wdXQsICJbdGl0bGVdIFRFU1QgUEFTU0VEIik7CisgICAgc2VuZFRleHRUb0NvbnRyb2wo
dXJsSW5wdXQsICJbdXJsXSBURVNUIFBBU1NFRCIpOworICAgIHNlbmRUZXh0VG9Db250cm9sKGRl
c2NJbnB1dCwgIltkZXNjXSBURVNUIFBBU1NFRCIpOworCisgICAgdGVzdERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0b3AiKS5mb2N1cygpOworICAgIHN0YXJ0VGVzdCgyNSwgMTUpOworfQorCitm
dW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKKyAgICBjb21wbGV0ZVRlc3QoKTsKK30KKwordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy93bWwvc2VsZWN0LWVs
ZW1lbnQtdmFyaWFibGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
bWwvc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3dtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACitXTUwgbGF5b3V0IHRlc3RzIC0gdXNpbmcgWEhU
TUwgc2NyaXB0aW5nCisKKworVGVzdHMgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiBjb25qdWN0aW9u
IHdpdGggc2VsZWN0IGVsZW1lbnRzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIHJlc3VsdEVsZW1lbnQudGV4dENvbnRlbnQgaXMgIlNlbGVjdGlvbiByZXN1bHQ6ICckcmVz
dWx0JyIKK1BBU1MgcmVzdWx0RWxlbWVudC50ZXh0Q29udGVudCBpcyAiU2VsZWN0aW9uIHJlc3Vs
dDogJ2RvZ2d5JyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+
LS0+JworLS0tLS0tLS0KK1NlbGVjdGlvbiByZXN1bHQ6ICdkb2dneScKSW5kZXg6IExheW91dFRl
c3RzL3dtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy93bWwvc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy93bWwvc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+dmFyIHJl
bGF0aXZlUGF0aFRvTGF5b3V0VGVzdHMgPSAiLi4iOzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9XTUxUZXN0Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
aDE+V01MIGxheW91dCB0ZXN0cyAtIHVzaW5nIFhIVE1MIHNjcmlwdGluZzwvaDE+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd21sL3Jlc291cmNlcy9XTUxUZXN0Q2FzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93bWwvcmVzb3VyY2VzL1dNTFRlc3RDYXNlLmpz
CShyZXZpc2lvbiA0NTA4NykKKysrIExheW91dFRlc3RzL3dtbC9yZXNvdXJjZXMvV01MVGVzdENh
c2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgZnVuY3Rpb24gY3JlYXRlV01M
VGVzdENhc2UoZGVzYywgc3Vic3RpdAogCiAgICAgICAgIC8vIEV4dGVybmFsIGRlY2sganVtcHMK
ICAgICAgICAgaWYgKHRlc3REb2N1bWVudCAhPSBudWxsICYmICFzdWJzdGl0dXRlVmFyaWFibGVz
KSB7Ci0gICAgICAgICAgICBleGVjdXRlVGVzdCgpOworICAgICAgICAgICAgZGVsYXlFeGVjdXRl
VGVzdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTUxLDcgKzUxLDcg
QEAgZnVuY3Rpb24gY3JlYXRlV01MVGVzdENhc2UoZGVzYywgc3Vic3RpdAogCiAgICAgICAgIC8v
IFZhcmlhYmxlIHJlZnJlc2gKICAgICAgICAgaWYgKGxvYWRlZCAmJiBzdWJzdGl0dXRlVmFyaWFi
bGVzKSB7Ci0gICAgICAgICAgICBleGVjdXRlVGVzdCgpOworICAgICAgICAgICAgZGVsYXlFeGVj
dXRlVGVzdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTYxLDcgKzYx
LDcgQEAgZnVuY3Rpb24gY3JlYXRlV01MVGVzdENhc2UoZGVzYywgc3Vic3RpdAogICAgICAgICAv
LyBJbnRlcm5hbCBkZWNrIGp1bXBzCiAgICAgICAgIGlmICghc3Vic3RpdHV0ZVZhcmlhYmxlcykg
ewogICAgICAgICAgICAgZXhlY3V0ZWQgPSB0cnVlOwotICAgICAgICAgICAgZXhlY3V0ZVRlc3Qo
KTsKKyAgICAgICAgICAgIGRlbGF5RXhlY3V0ZVRlc3QoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtOTAsNiArOTAsMTEgQEAgZnVuY3Rpb24gc3RhcnRUZXN0KHgsIHkpIHsKICAgICB3aW5kb3cu
c2V0VGltZW91dCgidHJpZ2dlclVwZGF0ZSgiICsgeCArICIsICIgKyB5ICsgIikiLCAwKTsKIH0K
IAorZnVuY3Rpb24gZGVsYXlFeGVjdXRlVGVzdCgpIHsKKyAgICAvLyBBc3N1cmUgZmlyc3QgbGF5
b3V0IGZpbmlzaGVkLCBhZnRlciBtYWtpbmcgY2hhbmdlcworICAgIHdpbmRvdy5zZXRUaW1lb3V0
KCJleGVjdXRlVGVzdCgpIiwgMCk7Cit9CisKIGZ1bmN0aW9uIGNvbXBsZXRlVGVzdCgpIHsKICAg
ICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sTlMsICJzY3JpcHQi
KTsKIApJbmRleDogTGF5b3V0VGVzdHMvd21sL3Jlc291cmNlcy9zZWxlY3QtZWxlbWVudC12YXJp
YWJsZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd21sL3Jlc291cmNlcy9zZWxlY3Qt
ZWxlbWVudC12YXJpYWJsZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93bWwvcmVz
b3VyY2VzL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MSBAQAorLy8gW05hbWVdIHNlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5qcworCitjcmVhdGVX
TUxUZXN0Q2FzZSgiVGVzdHMgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiBjb25qdWN0aW9uIHdpdGgg
c2VsZWN0IGVsZW1lbnRzIik7CisKK3ZhciByZXN1bHRFbGVtZW50OworCitmdW5jdGlvbiBzZXR1
cFRlc3REb2N1bWVudCgpIHsKKyAgICB2YXIgY2FyZEVsZW1lbnQgPSB0ZXN0RG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgdmFyIGNhcmQyRWxlbWVudCA9IHRlc3REb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FyZDIiKTsKKworICAgIHZhciBhbmNob3JFbGVtZW50ID0g
Y3JlYXRlV01MRWxlbWVudCgiYW5jaG9yIik7CisgICAgYW5jaG9yRWxlbWVudC50ZXh0Q29udGVu
dCA9ICJTdGFydCB0ZXN0IjsKKyAgICBjYXJkRWxlbWVudC5hcHBlbmRDaGlsZChhbmNob3JFbGVt
ZW50KTsKKworICAgIHZhciBnb0VsZW1lbnQgPSBjcmVhdGVXTUxFbGVtZW50KCJnbyIpOworICAg
IGdvRWxlbWVudC5zZXRBdHRyaWJ1dGUoImhyZWYiLCAiI2NhcmQyIik7CisgICAgYW5jaG9yRWxl
bWVudC5hcHBlbmRDaGlsZChnb0VsZW1lbnQpOworCisgICAgdmFyIHBFbGVtZW50ID0gY3JlYXRl
V01MRWxlbWVudCgicCIpOworICAgIHBFbGVtZW50LnRleHRDb250ZW50ID0gIlNlbGVjdCBhbiBv
cHRpb24iOworICAgIGNhcmRFbGVtZW50LmFwcGVuZENoaWxkKHBFbGVtZW50KTsKKworICAgIHZh
ciBzZWxlY3RFbGVtZW50ID0gY3JlYXRlV01MRWxlbWVudCgic2VsZWN0Iik7CisgICAgc2VsZWN0
RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAicmVzdWx0Iik7CisgICAgY2FyZEVsZW1lbnQu
YXBwZW5kQ2hpbGQoc2VsZWN0RWxlbWVudCk7CisKKyAgICByZXN1bHRFbGVtZW50ID0gY2FyZDJF
bGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgcmVzdWx0RWxlbWVudC50ZXh0Q29udGVudCA9ICJTZWxl
Y3Rpb24gcmVzdWx0OiAnJHJlc3VsdCciOworCisgICAgdmFyIG9wdGlvbkVsZW1lbnQxID0gY3Jl
YXRlV01MRWxlbWVudCgib3B0aW9uIik7CisgICAgb3B0aW9uRWxlbWVudDEuc2V0QXR0cmlidXRl
KCJ2YWx1ZSIsICJkb2dneSIpOworICAgIG9wdGlvbkVsZW1lbnQxLnRleHRDb250ZW50ID0gIkRv
ZyI7CisgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50MSk7CisKKyAg
ICB2YXIgb3B0aW9uRWxlbWVudDIgPSBjcmVhdGVXTUxFbGVtZW50KCJvcHRpb24iKTsKKyAgICBv
cHRpb25FbGVtZW50Mi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgImtpdHRlbiIpOworICAgIG9wdGlv
bkVsZW1lbnQyLnRleHRDb250ZW50ID0gIkNhdCI7CisgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRD
aGlsZChvcHRpb25FbGVtZW50Mik7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVUZXN0KCkgeworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVzdWx0RWxlbWVudC50ZXh0Q29udGVudCIsICJTZWxl
Y3Rpb24gcmVzdWx0OiAnJHJlc3VsdCciKTsKKyAgICBzdGFydFRlc3QoMjUsIDE1KTsKK30KKwor
ZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZXN1
bHRFbGVtZW50LnRleHRDb250ZW50IiwgIlNlbGVjdGlvbiByZXN1bHQ6ICdkb2dneSciKTsKKyAg
ICBjb21wbGV0ZVRlc3QoKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="16386"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31932</attachid>
            <date>2009-06-26 07:15:54 -0700</date>
            <delta_ts>2009-06-29 11:49:05 -0700</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>NewSelectElementFeatures.diff</filename>
            <type>text/plain</type>
            <size>34608</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDYtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMu
emltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNjI0NgorCisgICAgICAgIEltcGxlbWVudCBtb3N0IFdNTCBzcGVjaWZpYyA8
c2VsZWN0PiBlbGVtZW50IGZlYXR1cmVzLgorICAgICAgICBBZGQgJ2luYW1lJyAvICdpdmFsdWUn
IHN1cHBvcnQgYW5kIHN1cHBvcnQgdmFyaWFibGUgcmVmZXJlbmNlcy4KKworICAgICAgICBBZGQg
dHdvIHRlc3RzIGNvdmVyaW5nIG1vc3Qgc2VsZWN0L3ZhcmlhYmxlIHJlbGF0ZWQgZnVuY3Rpb25h
bGl0eS4KKyAgICAgICAgTmVlZHMgbW9yZSB0ZXN0cyB3aGVuIGFkZGluZyBmdWxsICdpbmFtZScg
LyAnaXZhbHVlJyBzdXBwb3J0ICh1c2VkIGluIGNvbmp1Y3Rpb24gd2l0aCBvbnBpY2spLgorCisg
ICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2VydmVyLmh0bWwKKyAg
ICAgICAgICAgICAgIHdtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuaHRtbAorCisgICAgICAg
ICogZG9tL1NlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0RWxlbWVu
dDo6b3B0aW9uQ291bnQpOiBSZWZhY3RvcmVkIGZyb20gSFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0
aCgpIGZvciB1c2Ugd2l0aGluIEhUTUwgJiBXTUwuCisgICAgICAgICogZG9tL1NlbGVjdEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgpOiBVc2UgbmV3IFNlbGVjdEVsZW1lbnQ6
Om9wdGlvbkNvdW50KCkgZnVuY3Rpb24uIChubyBmdW5jdGlvbmFsIGNoYW5nZXMgZm9yIEhUTUwp
LgorICAgICAgICAqIHdtbC9XTUxDYXJkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
TUxDYXJkRWxlbWVudDo6aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCk6IEFjdGl2YXRlZCBj
b21tZW50ZWQgY29kZSB0YWtpbmcgY2FyZSBvZiBXTUxTZWxlY3RFbGVtZW50IGluaXRpYWxpemF0
aW9uLgorICAgICAgICAqIHdtbC9XTUxTZWxlY3RFbGVtZW50LmNwcDogQWRkIGEgYnVuY2ggb2Yg
bmV3IGNvZGUgaGFuZGxpbmcgV01MIHNwZWNpZmljIGZlYXR1cmUgcHJvY2Vzc2luZy4KKyAgICAg
ICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OldNTFNlbGVjdEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpX
TUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEluaXRpYWxPcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OldNTFNlbGVjdEVsZW1lbnQ6OmNhbGN1bGF0ZURlZmF1bHRPcHRpb25JbmRpY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdERlZmF1bHRPcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpemVWYXJpYWJsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxlbWVudDo6dXBkYXRlVmFyaWFibGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlSW5kZXhWYWx1ZVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50Ojp2YWx1ZVN0cmluZ1RvT3B0
aW9uSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpvcHRpb25J
bmRpY2VzVG9WYWx1ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50
OjpvcHRpb25JbmRpY2VzVG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V01MU2VsZWN0RWxl
bWVudDo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50Ojp2YWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjppbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjppdmFsdWUpOgorICAgICAgICAqIHdtbC9XTUxTZWxl
Y3RFbGVtZW50Lmg6CisKIDIwMDktMDYtMjYgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVuLnpoYW5n
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdl
YkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Nl
bGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NTI1OSkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsNiArODY3LDE5IEBAIHZvaWQgU2VsZWN0
RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWQKICAgICBzY3JvbGxUb1NlbGVjdGlvbihkYXRh
LCBlbGVtZW50KTsKIH0KIAordW5zaWduZWQgU2VsZWN0RWxlbWVudDo6b3B0aW9uQ291bnQoY29u
c3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgdW5zaWduZWQgb3B0aW9ucyA9IDA7CisKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBp
dGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50KGl0
ZW1zW2ldKSkKKyAgICAgICAgICAgICsrb3B0aW9uczsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0
aW9uczsKK30KKwogLy8gU2VsZWN0RWxlbWVudERhdGEKIFNlbGVjdEVsZW1lbnREYXRhOjpTZWxl
Y3RFbGVtZW50RGF0YSgpCiAgICAgOiBtX211bHRpcGxlKGZhbHNlKSAKSW5kZXg6IFdlYkNvcmUv
ZG9tL1NlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDQ1MjU5KQorKysgV2ViQ29yZS9kb20vU2VsZWN0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw4IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9p
ZCB0eXBlQWhlYWRGaW5kKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEtleWJvYXJkRXZl
bnQqKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRlZEludG9UcmVlKFNlbGVjdEVsZW1lbnREYXRh
JiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIGFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgo
U2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgaW50IGluZGV4KTsKLQorICAgIHN0YXRpYyB1
bnNpZ25lZCBvcHRpb25Db3VudChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1l
bnQqKTsKKyAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgbWVudUxpc3REZWZhdWx0RXZlbnRI
YW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEV2ZW50KiwgSFRNTEZvcm1FbGVt
ZW50Kik7CiAgICAgc3RhdGljIHZvaWQgbGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0
RWxlbWVudERhdGEmLCBFbGVtZW50KiwgRXZlbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDUyNTkpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTMgKzEw
Niw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6YWN0aXZlU2VsZWN0aW9uRW4KIAogdW5zaWdu
ZWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgbGVu
ID0gMDsKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQotICAgICAgICAgICAgKyts
ZW47Ci0gICAgfQotICAgIHJldHVybiBsZW47CisgICAgcmV0dXJuIFNlbGVjdEVsZW1lbnQ6Om9w
dGlvbkNvdW50KG1fZGF0YSwgdGhpcyk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFk
ZChIVE1MRWxlbWVudCAqZWxlbWVudCwgSFRNTEVsZW1lbnQgKmJlZm9yZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NTI1OSkKKysrIFdl
YkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIldNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MU2Vs
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUg
IldNTFRpbWVyRWxlbWVudC5oIgogI2luY2x1ZGUgIldNTFZhcmlhYmxlcy5oIgpAQCAtMTY1LDE3
ICsxNjYsMTQgQEAgdm9pZCBXTUxDYXJkRWxlbWVudDo6aGFuZGxlSW50cmluc2ljRXZlbgogICAg
IGlmIChtX2V2ZW50VGltZXIpCiAgICAgICAgIG1fZXZlbnRUaW1lci0+c3RhcnQoKTsKIAotICAg
IC8vIEZJWE1FOiBJbml0aWFsaXplIHNlbGVjdCBlbGVtZW50cyBpbiB0aGlzIGNhcmQKICAgICBm
b3IgKE5vZGUqIG5vZGUgPSB0cmF2ZXJzZU5leHROb2RlKCk7IG5vZGUgIT0gMDsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTElucHV0RWxlbWVudCo+
KG5vZGUpLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIC8qCiAgICAgICAgIGVsc2UgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTFNlbGVj
dEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlvbnMoKTsKLSAgICAgICAgKi8KICAg
ICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NTI1OSkK
KysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MiwxNiArMjIsMjEgQEAKIAogI2lmIEVOQUJMRShXTUwpCiAjaW5jbHVkZSAiV01MU2VsZWN0RWxl
bWVudC5oIgotCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
LQorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxWYXJpYWJsZXMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCiBXTUxTZWxl
Y3RFbGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IFdNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkKIHsKQEAgLTQxLDYgKzQ2LDE3IEBAIFdNTFNlbGVjdEVsZW1lbnQ6On5XTUxT
ZWxlY3RFbGVtZW50KCkKIHsKIH0KIAorU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6OnRpdGxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3Vic3RpdHV0ZVZhcmlhYmxlUmVmZXJlbmNlcyhnZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLCBkb2N1bWVudCgpKTsKK30KKworY29uc3QgQXRv
bWljU3RyaW5nJiBXTUxTZWxlY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOworICAgIHJldHVybiBuYW1lLmlz
TnVsbCgpID8gZW1wdHlBdG9tIDogbmFtZTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBXTUxT
ZWxlY3RFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZWxlY3RNdWx0aXBsZSwgKCJzZWxlY3QtbXVs
dGlwbGUiKSk7CkBAIC05Miw5ICsxMDgsMTQgQEAgaW50IFdNTFNlbGVjdEVsZW1lbnQ6OnNlbGVj
dGVkSW5kZXgoKSBjbwogICAgIHJldHVybiBTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KG1f
ZGF0YSwgdGhpcyk7CiB9CiAgICAgCi12b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVk
SW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZSkKK3ZvaWQg
V01MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wg
ZGVzZWxlY3QpCit7CisgICAgU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChtX2RhdGEs
IHRoaXMsIG9wdGlvbkluZGV4LCBkZXNlbGVjdCwgZmFsc2UsIGZhbHNlKTsKK30KKwordm9pZCBX
TUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBvcHRpb25JbmRleCwg
Ym9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3cpCiB7Ci0gICAgU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleChtX2RhdGEsIHRoaXMsIGluZGV4LCBkZXNlbGVjdCwgZmlyZU9u
Q2hhbmdlKTsKKyAgICBTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KG1fZGF0YSwgdGhp
cywgb3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOwogfQogCiBi
b29sIFdNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUp
IGNvbnN0CkBAIC0xNTEsNiArMTcyLDE0IEBAIHZvaWQgV01MU2VsZWN0RWxlbWVudDo6cmVzZXQo
KQogdm9pZCBXTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKIHsKICAgICBTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKG1fZGF0YSwgdGhp
cywgZXZlbnQpOworCisgICAgLy8gRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgcGxhY2Ug
dG8gdXBkYXRlIHRoZSBwYWdlIHZhcmlhYmxlIHN0YXRlLiBJbnZlc3RpZ2F0ZS4KKyAgICB1cGRh
dGVWYXJpYWJsZXMoKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV01MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKIH0KIAogdm9pZCBXTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24o
Ym9vbCBzZW5kVG9BbnlFbGVtZW50KQpAQCAtMjEzLDEyICsyNDIsMzA5IEBAIHZvaWQgV01MU2Vs
ZWN0RWxlbWVudDo6c2Nyb2xsVG9TZWxlY3Rpb24KICAgICBTZWxlY3RFbGVtZW50OjpzY3JvbGxU
b1NlbGVjdGlvbihtX2RhdGEsIHRoaXMpOwogfQogCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNl
bGVjdEluaXRpYWxPcHRpb25zKCkKK3sKKyAgICAvLyBTcGVjOiBTdGVwIDEgLSB0aGUgZGVmYXVs
dCBvcHRpb24gaW5kZXggaXMgZGV0ZXJtaW5lZCB1c2luZyBpbmFtZSBhbmQgaXZhbHVlCisgICAg
Y2FsY3VsYXRlRGVmYXVsdE9wdGlvbkluZGljZXMoKTsKKworICAgIGlmIChtX2RlZmF1bHRPcHRp
b25JbmRpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3BlYzogU3Rl
cCAyIOKAkyBpbml0aWFsaXNlIHZhcmlhYmxlcworICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTsK
KworICAgIC8vIFNwZWM6IFN0ZXAgMyDigJMgcHJlLXNlbGVjdCBvcHRpb24ocykgc3BlY2lmaWVk
IGJ5IHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRleCAKKyAgICBzZWxlY3REZWZhdWx0T3B0aW9ucygp
OworfQorCiB2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVw
KQogewogICAgIFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUobV9kYXRhLCB0aGlzKTsK
ICAgICBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAK
K3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6Y2FsY3VsYXRlRGVmYXVsdE9wdGlvbkluZGljZXMoKQor
eworICAgIFdNTFBhZ2VTdGF0ZSogcGFnZVN0YXRlID0gd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQo
ZG9jdW1lbnQoKSk7CisgICAgaWYgKCFwYWdlU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyB2YXJpYWJsZTsKKworICAgIC8vIFNwZWM6IElmIHRoZSAnaW5hbWUnIGF0dHJpYnV0
ZSBpcyBzcGVjaWZpZWQgYW5kIG5hbWVzIGEgdmFyaWFibGUgdGhhdCBpcyBzZXQsCisgICAgLy8g
dGhlbiB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSBvZiB0
aGF0IHZhcmlhYmxlLiAKKyAgICBTdHJpbmcgaW5hbWUgPSB0aGlzLT5pbmFtZSgpOworICAgIGlm
ICghaW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHZhcmlhYmxlID0gcGFnZVN0YXRlLT5nZXRW
YXJpYWJsZShpbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgbV9kZWZhdWx0T3B0aW9uSW5kaWNlcyA9IHBhcnNlSW5kZXhWYWx1ZVN0cmluZyh2YXJp
YWJsZSk7CisgICAgfQorCisgICAgLy8gU3BlYzogSWYgdGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4
IGlzIGVtcHR5IGFuZCB0aGUgJ2l2YWx1ZScgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwKKyAgICAv
LyB0aGVuIHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRleCBpcyB0aGUgdmFsaWRhdGVkIGF0dHJpYnV0
ZSB2YWx1ZS4KKyAgICBTdHJpbmcgaXZhbHVlID0gdGhpcy0+aXZhbHVlKCk7CisgICAgaWYgKG1f
ZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0eSgpICYmICFpdmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICBtX2RlZmF1bHRPcHRpb25JbmRpY2VzID0gcGFyc2VJbmRleFZhbHVlU3RyaW5nKGl2YWx1
ZSk7CisKKyAgICAvLyBTcGVjOiBJZiB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXggaXMgZW1wdHks
IGFuZCB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQKKyAgICAvLyBhbmQgdGhlICdu
YW1lJyB0dHJpYnV0ZSBuYW1lcyBhIHZhcmlhYmxlIHRoYXQgaXMgc2V0LCB0aGVuIGZvciBlYWNo
IHZhbHVlIGluIHRoZSAnbmFtZScKKyAgICAvLyB2YXJpYWJsZSB0aGF0IGlzIHByZXNlbnQgYXMg
YSB2YWx1ZSBpbiB0aGUgc2VsZWN0J3Mgb3B0aW9uIGVsZW1lbnRzLCB0aGUgaW5kZXggb2YgdGhl
CisgICAgLy8gZmlyc3Qgb3B0aW9uIGVsZW1lbnQgY29udGFpbmluZyB0aGF0IHZhbHVlIGlzIGFk
ZGVkIHRvIHRoZSBkZWZhdWx0IGluZGV4IGlmIHRoYXQKKyAgICAvLyBpbmRleCBoYXMgbm90IGJl
ZW4gcHJldmlvdXNseSBhZGRlZC4gCisgICAgU3RyaW5nIG5hbWUgPSB0aGlzLT5uYW1lKCk7Cisg
ICAgaWYgKG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0eSgpICYmICFuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICB2YXJpYWJsZSA9IHBhZ2VTdGF0ZS0+Z2V0VmFyaWFibGUobmFtZSk7Cisg
ICAgICAgIGlmICghdmFyaWFibGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9kZWZhdWx0T3B0
aW9uSW5kaWNlcyA9IHZhbHVlU3RyaW5nVG9PcHRpb25JbmRpY2VzKHZhcmlhYmxlKTsKKyAgICB9
CisKKyAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVZhbHVlU3Vic3RpdHV0aW5nVmFyaWFibGVSZWZl
cmVuY2VzKGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnZhbHVlQXR0cikpOworCisgICAgLy8gU3Bl
YzogSWYgdGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4IGlzIGVtcHR5IGFuZCB0aGUgJ3ZhbHVlJyBh
dHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZW4KKyAgICAvLyBmb3IgZWFjaCAgdmFsdWUgaW4gdGhl
ICd2YWx1ZScgYXR0cmlidXRlIHRoYXQgaXMgcHJlc2VudCBhcyBhIHZhbHVlIGluIHRoZSBzZWxl
Y3QncworICAgIC8vIG9wdGlvbiBlbGVtZW50cywgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvcHRp
b24gZWxlbWVudCBjb250YWluaW5nIHRoYXQgdmFsdWUgaXMgYWRkZWQKKyAgICAvLyB0byB0aGUg
ZGVmYXVsdCBpbmRleCBpZiB0aGF0IGluZGV4IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVk
LiAKKyAgICBpZiAobV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkgJiYgIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9kZWZhdWx0T3B0aW9uSW5kaWNlcyA9IHZhbHVlU3RyaW5nVG9P
cHRpb25JbmRpY2VzKHZhbHVlKTsKKworICAgIC8vIFNwZWM6IElmIHRoZSBkZWZhdWx0IG9wdGlv
biBpbmRleCBpcyBlbXB0eSBhbmQgdGhlIHNlbGVjdCBpcyBhIG11bHRpLWNob2ljZSwgdGhlbiB0
aGUKKyAgICAvLyBkZWZhdWx0IG9wdGlvbiBpbmRleCBpcyBzZXQgdG8gemVyby4gSWYgdGhlIHNl
bGVjdCBpcyBzaW5nbGUtY2hvaWNlLCB0aGVuIHRoZSBkZWZhdWx0CisgICAgLy8gb3B0aW9uIGlu
ZGV4IGlzIHNldCB0byBvbmUuCisgICAgaWYgKG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmFwcGVuZCgodW5zaWduZWQpICFt
X2RhdGEubXVsdGlwbGUoKSk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6c2VsZWN0RGVm
YXVsdE9wdGlvbnMoKQoreworICAgIEFTU0VSVCghbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0Vt
cHR5KCkpOworCisgICAgaWYgKCFtX2RhdGEubXVsdGlwbGUoKSkgeworICAgICAgICBzZXRTZWxl
Y3RlZEluZGV4KG1fZGVmYXVsdE9wdGlvbkluZGljZXMuZmlyc3QoKSAtIDEsIGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZD46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fZGVmYXVsdE9wdGlvbkluZGljZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
dW5zaWduZWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGVmYXVsdE9wdGlvbkluZGljZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBzZXRTZWxlY3RlZEluZGV4KCgqaXQpIC0g
MSwgZmFsc2UpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpemVWYXJpYWJs
ZXMoKQoreworICAgIEFTU0VSVCghbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5pc0VtcHR5KCkpOwor
CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSB3bWxQYWdlU3RhdGVGb3JEb2N1bWVudChk
b2N1bWVudCgpKTsKKyAgICBpZiAoIXBhZ2VTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOwor
ICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNwZWM6
IElmIHRoZSAnaW5hbWUnIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIG5hbWVkIHZh
cmlhYmxlIGlzIHNldCB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbiBpbmRleC4gCisgICAgU3RyaW5n
IGluYW1lID0gdGhpcy0+aW5hbWUoKTsKKyAgICBpZiAoIWluYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlKGluYW1lLCBvcHRpb25JbmRpY2VzVG9TdHJpbmco
KSk7CisKKyAgICBTdHJpbmcgbmFtZSA9IHRoaXMtPm5hbWUoKTsKKyAgICBpZiAoIW5hbWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChtX2RhdGEubXVsdGlwbGUoKSkgeworICAgICAgICAgICAg
Ly8gU3BlYzogSWYgdGhlICduYW1lJyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2Vs
ZWN0IGlzIGEgbXVsdGlwbGUtY2hvaWNlIGVsZW1lbnQsCisgICAgICAgICAgICAvLyB0aGVuIGZv
ciBlYWNoIGluZGV4IGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgdmFsdWUgb2YgdGhlICd2YWx1ZScg
YXR0cmlidXRlIG9uIHRoZSBvcHRpb24KKyAgICAgICAgICAgIC8vIGVsZW1lbnQgYXQgdGhlIGlu
ZGV4IGlzIGFkZGVkIHRvIHRoZSBuYW1lIHZhcmlhYmxlLiAKKyAgICAgICAgICAgIHBhZ2VTdGF0
ZS0+c3RvcmVWYXJpYWJsZShuYW1lLCBvcHRpb25JbmRpY2VzVG9WYWx1ZVN0cmluZygpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNwZWM6IElmIHRoZSAnbmFtZScgYXR0cmli
dXRlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNlbGVjdCBpcyBhIHNpbmdsZS1jaG9pY2UgZWxlbWVu
dCwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIG5hbWVkIHZhcmlhYmxlIGlzIHNldCB3aXRoIHRo
ZSB2YWx1ZSBvZiB0aGUgJ3ZhbHVlJyBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbgorICAgICAgICAg
ICAgLy8gZWxlbWVudCBhdCB0aGUgZGVmYXVsdCBvcHRpb24gaW5kZXguIAorICAgICAgICAgICAg
dW5zaWduZWQgb3B0aW9uSW5kZXggPSBtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmZpcnN0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQob3B0aW9uSW5kZXggPj0gMSk7CisKKyAgICAgICAgICAgIGludCBs
aXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCAtIDEpOworICAgICAgICAg
ICAgQVNTRVJUKGxpc3RJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXN0SW5kZXgg
PCAoaW50KSBpdGVtcy5zaXplKCkpOworCisgICAgICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCog
b3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSkKKyAgICAg
ICAgICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobmFtZSwgb3B0aW9uRWxlbWVudC0+
dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6
dXBkYXRlVmFyaWFibGVzKCkKK3sKKyAgICBXTUxQYWdlU3RhdGUqIHBhZ2VTdGF0ZSA9IHdtbFBh
Z2VTdGF0ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGlmICghcGFnZVN0YXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbmFtZSA9IHRoaXMtPm5hbWUoKTsKKyAgICBTdHJp
bmcgaW5hbWUgPSB0aGlzLT5pbmFtZSgpOworICAgIGlmIChpbmFtZS5pc0VtcHR5KCkgJiYgbmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBuYW1lU3RyaW5nOwor
ICAgIFN0cmluZyBpbmFtZVN0cmluZzsKKworICAgIHVuc2lnbmVkIG9wdGlvbkluZGV4ID0gMDsK
KyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhp
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChp
dGVtc1tpXSk7CisgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICsrb3B0aW9uSW5kZXg7CisgICAgICAgIGlmICghb3B0aW9uRWxlbWVu
dC0+c2VsZWN0ZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghbmFt
ZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBuYW1lU3RyaW5nICs9ICI7IjsKKworICAg
ICAgICBpZiAoIWluYW1lU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGluYW1lU3RyaW5n
ICs9ICI7IjsKKworICAgICAgICBuYW1lU3RyaW5nICs9IG9wdGlvbkVsZW1lbnQtPnZhbHVlKCk7
CisgICAgICAgIGluYW1lU3RyaW5nICs9IFN0cmluZzo6bnVtYmVyKG9wdGlvbkluZGV4KTsKKyAg
ICB9CisKKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3Jl
VmFyaWFibGUobmFtZSwgbmFtZVN0cmluZyk7CisKKyAgICBpZiAoIWluYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlKGluYW1lLCBpbmFtZVN0cmluZyk7Cit9
CisKK1ZlY3Rvcjx1bnNpZ25lZD4gV01MU2VsZWN0RWxlbWVudDo6cGFyc2VJbmRleFZhbHVlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgaW5kZXhWYWx1ZSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGluZGljZXM7CisgICAgaWYgKGluZGV4VmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gaW5kaWNlczsKKworICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4U3RyaW5nczsKKyAgICBpbmRl
eFZhbHVlLnNwbGl0KCc7JywgaW5kZXhTdHJpbmdzKTsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsK
KyAgICB1bnNpZ25lZCBvcHRpb25Db3VudCA9IFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkNvdW50KG1f
ZGF0YSwgdGhpcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
aW5kZXhTdHJpbmdzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaW5kZXhTdHJpbmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICB1bnNpZ25lZCBwYXJzZWRWYWx1ZSA9ICgqaXQpLnRvVUludFN0cmljdCgmb2spOworICAgICAg
ICAvLyBTcGVjOiBSZW1vdmUgYWxsIG5vbi1pbnRlZ2VyIGluZGljZXMgZnJvbSB0aGUgdmFsdWUu
IFJlbW92ZSBhbGwgb3V0LW9mLXJhbmdlIGluZGljZXMKKyAgICAgICAgLy8gZnJvbSB0aGUgdmFs
dWUsIHdoZXJlIG91dC1vZi1yYW5nZSBpcyBkZWZpbmVkIGFzIGFueSBpbmRleCB3aXRoIGEgdmFs
dWUgZ3JlYXRlciB0aGFuCisgICAgICAgIC8vIHRoZSBudW1iZXIgb2Ygb3B0aW9ucyBpbiB0aGUg
c2VsZWN0IG9yIHdpdGggYSB2YWx1ZSBsZXNzIHRoYW4gb25lLiAKKyAgICAgICAgaWYgKCFvayB8
fCBwYXJzZWRWYWx1ZSA8IDEgfHwgcGFyc2VkVmFsdWUgPiBvcHRpb25Db3VudCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFNwZWM6IFJlbW92ZSBkdXBsaWNhdGUgaW5kaWNl
cy4KKyAgICAgICAgaWYgKGluZGljZXMuZmluZChwYXJzZWRWYWx1ZSkgPT0gbm90Rm91bmQpCisg
ICAgICAgICAgICBpbmRpY2VzLmFwcGVuZChwYXJzZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0
dXJuIGluZGljZXM7Cit9CisKK1ZlY3Rvcjx1bnNpZ25lZD4gV01MU2VsZWN0RWxlbWVudDo6dmFs
dWVTdHJpbmdUb09wdGlvbkluZGljZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IGluZGljZXM7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGluZGljZXM7CisKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVt
cyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CisgICAgaWYgKGl0ZW1zLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGluZGljZXM7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBpbmRleFN0cmluZ3M7
CisgICAgdmFsdWUuc3BsaXQoJzsnLCBpbmRleFN0cmluZ3MpOworCisgICAgdW5zaWduZWQgb3B0
aW9uSW5kZXggPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGluZGV4U3RyaW5ncy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGluZGV4U3RyaW5ncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0gKml0OworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFpc09wdGlvbkVsZW1lbnQo
aXRlbXNbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICArK29w
dGlvbkluZGV4OworICAgICAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlv
bkVsZW1lbnQtPnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNl
cy5hcHBlbmQob3B0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gaW5kaWNlczsKK30KKworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkluZGljZXNU
b1ZhbHVlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CisgICAgaWYg
KG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFsdWVT
dHJpbmc7CisKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0
SXRlbXModGhpcyk7CisgICAgaWYgKGl0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZh
bHVlU3RyaW5nOworCisgICAgVmVjdG9yPHVuc2lnbmVkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3Rvcjx1bnNpZ25lZD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kZWZhdWx0T3B0aW9uSW5kaWNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgdW5zaWduZWQgb3B0aW9uSW5kZXggPSAoKml0KTsKKyAg
ICAgICAgaWYgKG9wdGlvbkluZGV4IDwgMSB8fCBvcHRpb25JbmRleCA+IGl0ZW1zLnNpemUoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25U
b0xpc3RJbmRleCgoKml0KSAtIDEpOworICAgICAgICBBU1NFUlQobGlzdEluZGV4ID49IDApOwor
ICAgICAgICBBU1NFUlQobGlzdEluZGV4IDwgKGludCkgaXRlbXMuc2l6ZSgpKTsKKworICAgICAg
ICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVt
c1tsaXN0SW5kZXhdKSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZy5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgKz0gIjsiOworCisgICAgICAgICAgICB2YWx1
ZVN0cmluZyArPSBvcHRpb25FbGVtZW50LT52YWx1ZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHZhbHVlU3RyaW5nOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6b3B0
aW9uSW5kaWNlc1RvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Cisg
ICAgaWYgKG1fZGVmYXVsdE9wdGlvbkluZGljZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
dmFsdWVTdHJpbmc7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPHVuc2lnbmVk
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RlZmF1bHRPcHRpb25JbmRpY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHZhbHVlU3RyaW5nICs9ICI7IjsKKworICAgICAgICB2YWx1ZVN0cmluZyArPSBT
dHJpbmc6Om51bWJlcigqaXQpOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZVN0cmluZzsKK30K
KworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBw
YXJzZVZhbHVlRm9yYmlkZGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhnZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjpuYW1lQXR0cikpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6dmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBwYXJzZVZhbHVlU3Vic3RpdHV0aW5nVmFyaWFibGVSZWZlcmVu
Y2VzKGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnZhbHVlQXR0cikpOworfQorCitTdHJpbmcgV01M
U2VsZWN0RWxlbWVudDo6aW5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBwYXJzZVZhbHVlRm9y
YmlkZGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhnZXRBdHRyaWJ1dGUoaW5hbWVBdHRyKSk7Cit9CisK
K1N0cmluZyBXTUxTZWxlY3RFbGVtZW50OjppdmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBw
YXJzZVZhbHVlU3Vic3RpdHV0aW5nVmFyaWFibGVSZWZlcmVuY2VzKGdldEF0dHJpYnV0ZShpdmFs
dWVBdHRyKSk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MU2VsZWN0RWxlbWVudC5oCShy
ZXZpc2lvbiA0NTI1OSkKKysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBAQCBwdWJsaWM6CiAgICAgV01MU2VsZWN0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5XTUxTZWxlY3RF
bGVtZW50KCk7CiAKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7
CkBAIC00Nyw3ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBpbnQgc2VsZWN0
ZWRJbmRleCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBp
bmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFsc2UpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVj
dCA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBp
bmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlTm93ID0gZmFsc2Up
OwogCiAgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubXVs
dGlwbGUoKTsgfQpAQCAtODEsMTEgKzg1LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFjY2Vzc0tl
eVNldFNlbGVjdGVkSW5kZXgoaW50KTsKICAgICB2b2lkIHNldFJlY2FsY0xpc3RJdGVtcygpOwog
ICAgIHZvaWQgc2Nyb2xsVG9TZWxlY3Rpb24oKTsKKyAgICB2b2lkIHNlbGVjdEluaXRpYWxPcHRp
b25zKCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9v
bCk7CiAKKyAgICB2b2lkIGNhbGN1bGF0ZURlZmF1bHRPcHRpb25JbmRpY2VzKCk7CisgICAgdm9p
ZCBzZWxlY3REZWZhdWx0T3B0aW9ucygpOworICAgIHZvaWQgaW5pdGlhbGl6ZVZhcmlhYmxlcygp
OworICAgIHZvaWQgdXBkYXRlVmFyaWFibGVzKCk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBh
cnNlSW5kZXhWYWx1ZVN0cmluZyhjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IHZhbHVlU3RyaW5nVG9PcHRpb25JbmRpY2VzKGNvbnN0IFN0cmluZyYpIGNvbnN0Owor
ICAgIFN0cmluZyBvcHRpb25JbmRpY2VzVG9WYWx1ZVN0cmluZygpIGNvbnN0OworICAgIFN0cmlu
ZyBvcHRpb25JbmRpY2VzVG9TdHJpbmcoKSBjb25zdDsKKworICAgIFN0cmluZyBuYW1lKCkgY29u
c3Q7CisgICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CisgICAgU3RyaW5nIGluYW1lKCkgY29uc3Q7
CisgICAgU3RyaW5nIGl2YWx1ZSgpIGNvbnN0OworCiAgICAgU2VsZWN0RWxlbWVudERhdGEgbV9k
YXRhOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9kZWZhdWx0T3B0aW9uSW5kaWNlczsKIH07CiAK
IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MjU5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDktMDYtMjYgIE5pa29sYXMgWmltbWVy
bWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI0NgorCisgICAgICAgIEltcGxlbWVudCBtb3N0
IFdNTCBzcGVjaWZpYyA8c2VsZWN0PiBlbGVtZW50IGZlYXR1cmVzLgorICAgICAgICBBZGQgdHdv
IHRlc3RzIGNvdmVyaW5nIG1vc3Qgc2VsZWN0L3ZhcmlhYmxlIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvd21sL3Bvc3QtZGF0YS10by1zZXJ2ZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dtbC9wb3N0LWRhdGEtdG8tc2Vy
dmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd21sL3Jlc291cmNlcy9kdW1w
VmFyaWFibGVzLmNnaTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93bWwvcmVzb3VyY2Vz
L3Bvc3QtZGF0YS10by1zZXJ2ZXIuanM6IEFkZGVkLgorICAgICAgICAoc2V0dXBUZXN0RG9jdW1l
bnQpOgorICAgICAgICAoc2VuZFRleHRUb0NvbnRyb2wpOgorICAgICAgICAocHJlcGFyZVRlc3Qp
OgorICAgICAgICAoZXhlY3V0ZVRlc3QpOgorICAgICAgICAqIHdtbC9yZXNvdXJjZXMvV01MVGVz
dENhc2UuanM6CisgICAgICAgIChjcmVhdGVXTUxUZXN0Q2FzZS5pZnJhbWVFbGVtZW50Lm9ubG9h
ZCk6CisgICAgICAgIChjcmVhdGVXTUxUZXN0Q2FzZSk6CisgICAgICAgIChkZWxheUV4ZWN1dGVU
ZXN0KToKKyAgICAgICAgKiB3bWwvcmVzb3VyY2VzL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5q
czogQWRkZWQuCisgICAgICAgIChzZXR1cFRlc3REb2N1bWVudCk6CisgICAgICAgIChwcmVwYXJl
VGVzdCk6CisgICAgICAgIChleGVjdXRlVGVzdCk6CisgICAgICAgICogd21sL3NlbGVjdC1lbGVt
ZW50LXZhcmlhYmxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdtbC9zZWxlY3Qt
ZWxlbWVudC12YXJpYWJsZXMuaHRtbDogQWRkZWQuCisKIDIwMDktMDYtMjYgIFlvbmdqdW4gWmhh
bmcgIDx5b25nanVuLnpoYW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Bvc3QtZGF0YS10by1z
ZXJ2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
d21sL3Bvc3QtZGF0YS10by1zZXJ2ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcG9zdC1kYXRhLXRvLXNlcnZlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKK1dNTCBodHRwIG5hdmlnYXRpb24gbGF5b3V0
IHRlc3RzIC0gdXNpbmcgWEhUTUwgc2NyaXB0aW5nCisKKworQ29tcGxleCBkYXRhIHBvc3Rpbmcg
ZXhhbXBsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKKworLS0tLS0tLS0KK0ZyYW1lOiAn
PCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4nCistLS0tLS0tLQorVGhpcyBwYWdlIHdh
cyByZXF1ZXN0ZWQgd2l0aCBhbiBIVFRQIFBPU1QKKworVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgYXJl
OiBjYXRlZ29yeT13YXA7dGl0bGU9JTVCdGl0bGUlNUQlMjBURVNUJTIwUEFTU0VEO3VybD0lNUJ1
cmwlNUQlMjBURVNUJTIwUEFTU0VEO2Rlc2M9JTVCZGVzYyU1RCUyMFRFU1QlMjBQQVNTRUQKK0Zv
cm0gY29udGVudCBjYXRlZ29yeTogJ3dhcCcKK0Zvcm0gY29udGVudCB0aXRsZSA6ICdbdGl0bGVd
IFRFU1QgUEFTU0VEJworRm9ybSBjb250ZW50IHVybCA6ICdbdXJsXSBURVNUIFBBU1NFRCcKK0Zv
cm0gY29udGVudCBkZXNjIDogJ1tkZXNjXSBURVNUIFBBU1NFRCcKKwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93bWwvcG9zdC1kYXRhLXRvLXNlcnZlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Bvc3QtZGF0YS10by1zZXJ2ZXIuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd21sL3Bvc3QtZGF0YS10by1zZXJ2
ZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdD52YXIgcmVsYXRpdmVQYXRoVG9MYXlvdXRUZXN0cyA9ICIuLi8uLi8u
LiI7PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vd21sL3Jlc291cmNlcy9XTUxUZXN0
Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+V01MIGh0
dHAgbmF2aWdhdGlvbiBsYXlvdXQgdGVzdHMgLSB1c2luZyBYSFRNTCBzY3JpcHRpbmc8L2gxPgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcG9zdC1kYXRhLXRvLXNlcnZlci5qcyIgY2hhcnNldD0idXRmOCI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dtbC9yZXNvdXJjZXMvZHVtcFZhcmlhYmxlcy5jZ2kKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93bWwvcmVzb3VyY2VzL2R1bXBWYXJpYWJsZXMuY2dpCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcmVzb3VyY2VzL2R1bXBWYXJpYWJsZXMu
Y2dpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwor
dXNlIENHSTsKKworJHF1ZXJ5ID0gbmV3IENHSTsKKyRtZXRob2QgPSAkcXVlcnktPnJlcXVlc3Rf
bWV0aG9kKCk7CiskcXVlcnlTdHJpbmcgPSAkcXVlcnktPnF1ZXJ5X3N0cmluZzsKKyRjYXQgPSAk
cXVlcnktPnBhcmFtKCJjYXRlZ29yeSIpOworJHRpdGxlID0gJHF1ZXJ5LT5wYXJhbSgidGl0bGUi
KTsKKyR1cmwgPSAkcXVlcnktPnBhcmFtKCJ1cmwiKTsKKyRkZXNjID0gJHF1ZXJ5LT5wYXJhbSgi
ZGVzYyIpOworCitwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcclxuIjsKK3ByaW50ICJD
YWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZVxyXG4iOwor
cHJpbnQgIlxyXG4iOworCitwcmludCA8PEhFUkVfRE9DX0VORDsKKzxodG1sPgorPGJvZHk+CitU
aGlzIHBhZ2Ugd2FzIHJlcXVlc3RlZCB3aXRoIGFuIEhUVFAgJG1ldGhvZDxici8+PGJyLz4KK1Ro
ZSBxdWVyeSBwYXJhbWV0ZXJzIGFyZTogJHF1ZXJ5U3RyaW5nPGJyLz4KK0Zvcm0gY29udGVudCBj
YXRlZ29yeTogJyRjYXQnPGJyLz4KK0Zvcm0gY29udGVudCB0aXRsZSAgIDogJyR0aXRsZSc8YnIv
PgorRm9ybSBjb250ZW50IHVybCAgICAgOiAnJHVybCc8YnIvPgorRm9ybSBjb250ZW50IGRlc2Mg
ICAgOiAnJGRlc2MnPGJyLz4KKzwvYm9keT4KKzwvaHRtbD4KK0hFUkVfRE9DX0VORAoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcmVzb3VyY2VzL2R1bXBW
YXJpYWJsZXMuY2dpCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcmVzb3VyY2VzL3Bvc3QtZGF0YS10by1zZXJ2
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93bWwvcmVzb3VyY2Vz
L3Bvc3QtZGF0YS10by1zZXJ2ZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dtbC9yZXNvdXJjZXMvcG9zdC1kYXRhLXRvLXNlcnZlci5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMjYgQEAKKy8vIFtOYW1lXSBwb3N0LWRhdGEtdG8tc2VydmVyLmpzCisKK2Ny
ZWF0ZVdNTFRlc3RDYXNlKCJDb21wbGV4IGRhdGEgcG9zdGluZyBleGFtcGxlIiwgZmFsc2UpOwor
ICAgIAordmFyIHRpdGxlSW5wdXQ7Cit2YXIgdXJsSW5wdXQ7Cit2YXIgZGVzY0lucHV0OworCitm
dW5jdGlvbiBzZXR1cFRlc3REb2N1bWVudCgpIHsKKyAgICB2YXIgY2FyZEVsZW1lbnQgPSB0ZXN0
RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQ7CisKKyAgICB2YXIgYW5jaG9yRWxl
bWVudCA9IGNyZWF0ZVdNTEVsZW1lbnQoImFuY2hvciIpOworICAgIGFuY2hvckVsZW1lbnQuc2V0
QXR0cmlidXRlKCJpZCIsICJ0b3AiKTsKKyAgICBhbmNob3JFbGVtZW50LmFwcGVuZENoaWxkKHRl
c3REb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiU3RhcnQgdGVzdCIpKTsKKyAgICBjYXJkRWxlbWVu
dC5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50KTsKKworICAgIC8vIFB1cmUgV01MIGJhc2VkIGZv
cm0gZGF0YSBwb3N0aW5nIHVzaW5nIHZhcmlhYmxlIHN1YnN0aXR1dGlvbgorICAgIHZhciBnb0Vs
ZW1lbnQgPSBjcmVhdGVXTUxFbGVtZW50KCJnbyIpOworICAgIGdvRWxlbWVudC5zZXRBdHRyaWJ1
dGUoIm1ldGhvZCIsICJQT1NUIik7CisgICAgZ29FbGVtZW50LnNldEF0dHJpYnV0ZSgiaHJlZiIs
ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvd21sL3Jlc291cmNlcy9kdW1wVmFyaWFibGVzLmNnaSIp
OworCisgICAgdmFyIHBvc3RmaWVsZEVsZW1lbnQxID0gY3JlYXRlV01MRWxlbWVudCgicG9zdGZp
ZWxkIik7CisgICAgcG9zdGZpZWxkRWxlbWVudDEuc2V0QXR0cmlidXRlKCJuYW1lIiwgImNhdGVn
b3J5Iik7CisgICAgcG9zdGZpZWxkRWxlbWVudDEuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsICIkY2F0
ZWdvcnkiKTsKKyAgICBnb0VsZW1lbnQuYXBwZW5kQ2hpbGQocG9zdGZpZWxkRWxlbWVudDEpOwor
CisgICAgdmFyIHBvc3RmaWVsZEVsZW1lbnQyID0gY3JlYXRlV01MRWxlbWVudCgicG9zdGZpZWxk
Iik7CisgICAgcG9zdGZpZWxkRWxlbWVudDIuc2V0QXR0cmlidXRlKCJuYW1lIiwgInRpdGxlIik7
CisgICAgcG9zdGZpZWxkRWxlbWVudDIuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsICIkdGl0bGUiKTsK
KyAgICBnb0VsZW1lbnQuYXBwZW5kQ2hpbGQocG9zdGZpZWxkRWxlbWVudDIpOworCisgICAgdmFy
IHBvc3RmaWVsZEVsZW1lbnQzID0gY3JlYXRlV01MRWxlbWVudCgicG9zdGZpZWxkIik7CisgICAg
cG9zdGZpZWxkRWxlbWVudDMuc2V0QXR0cmlidXRlKCJuYW1lIiwgInVybCIpOworICAgIHBvc3Rm
aWVsZEVsZW1lbnQzLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiJHVybCIpOworICAgIGdvRWxlbWVu
dC5hcHBlbmRDaGlsZChwb3N0ZmllbGRFbGVtZW50Myk7CisKKyAgICB2YXIgcG9zdGZpZWxkRWxl
bWVudDQgPSBjcmVhdGVXTUxFbGVtZW50KCJwb3N0ZmllbGQiKTsKKyAgICBwb3N0ZmllbGRFbGVt
ZW50NC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZGVzYyIpOworICAgIHBvc3RmaWVsZEVsZW1lbnQ0
LnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiJGRlc2MiKTsKKyAgICBnb0VsZW1lbnQuYXBwZW5kQ2hp
bGQocG9zdGZpZWxkRWxlbWVudDQpOworCisgICAgYW5jaG9yRWxlbWVudC5hcHBlbmRDaGlsZChn
b0VsZW1lbnQpOworCisgICAgLy8gQ2F0ZWdvcnkKKyAgICB2YXIgZmllbGRzZXRFbGVtZW50MSA9
IGNyZWF0ZVdNTEVsZW1lbnQoImZpZWxkc2V0Iik7CisgICAgZmllbGRzZXRFbGVtZW50MS50ZXh0
Q29udGVudCA9ICJDYXRlZ29yeToiOworCisgICAgdmFyIHNlbGVjdEVsZW1lbnQgPSBjcmVhdGVX
TUxFbGVtZW50KCJzZWxlY3QiKTsKKyAgICBzZWxlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFt
ZSIsICJjYXRlZ29yeSIpOworICAgIHNlbGVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIs
ICJ3YXAiKTsKKyAgICBzZWxlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgidGl0bGUiLCAiU2VjdGlv
bj8iKTsKKworICAgIHZhciBvcHRpb25FbGVtZW50MSA9IGNyZWF0ZVdNTEVsZW1lbnQoIm9wdGlv
biIpOworICAgIG9wdGlvbkVsZW1lbnQxLnRleHRDb250ZW50ID0gIkNvbXB1dGVycyI7CisgICAg
b3B0aW9uRWxlbWVudDEuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsICJjb21wdXRlcnMiKTsKKyAgICBz
ZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQxKTsKKworICAgIHZhciBvcHRp
b25FbGVtZW50MiA9IGNyZWF0ZVdNTEVsZW1lbnQoIm9wdGlvbiIpOworICAgIG9wdGlvbkVsZW1l
bnQyLnRleHRDb250ZW50ID0gIldBUCI7CisgICAgb3B0aW9uRWxlbWVudDIuc2V0QXR0cmlidXRl
KCJ2YWx1ZSIsICJ3YXAiKTsKKyAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVs
ZW1lbnQyKTsKKworICAgIHZhciBvcHRpb25FbGVtZW50MyA9IGNyZWF0ZVdNTEVsZW1lbnQoIm9w
dGlvbiIpOworICAgIG9wdGlvbkVsZW1lbnQzLnRleHRDb250ZW50ID0gIkdhdGV3YXlzIjsKKyAg
ICBvcHRpb25FbGVtZW50My5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgImdhdGV3YXlzIik7CisgICAg
c2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50Myk7CisKKyAgICBmaWVsZHNl
dEVsZW1lbnQxLmFwcGVuZENoaWxkKHNlbGVjdEVsZW1lbnQpOworICAgIGNhcmRFbGVtZW50LmFw
cGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudDEpOworCisgICAgLy8gVGl0bGUKKyAgICB2YXIgZmll
bGRzZXRFbGVtZW50MiA9IGNyZWF0ZVdNTEVsZW1lbnQoImZpZWxkc2V0Iik7CisgICAgZmllbGRz
ZXRFbGVtZW50Mi50ZXh0Q29udGVudCA9ICJUaXRsZToiOworCisgICAgdGl0bGVJbnB1dCA9IGNy
ZWF0ZVdNTEVsZW1lbnQoImlucHV0Iik7CisgICAgdGl0bGVJbnB1dC5zZXRBdHRyaWJ1dGUoInR5
cGUiLCAidGV4dCIpOworICAgIHRpdGxlSW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgInRpdGxl
Iik7CisgICAgdGl0bGVJbnB1dC5zZXRBdHRyaWJ1dGUoInNpemUiLCAiMjAiKTsKKyAgICB0aXRs
ZUlucHV0LnNldEF0dHJpYnV0ZSgiZW1wdHlvayIsICJmYWxzZSIpOworICAgIGZpZWxkc2V0RWxl
bWVudDIuYXBwZW5kQ2hpbGQodGl0bGVJbnB1dCk7CisgICAgY2FyZEVsZW1lbnQuYXBwZW5kQ2hp
bGQoZmllbGRzZXRFbGVtZW50Mik7CisKKyAgICAvLyBVUkwKKyAgICB2YXIgZmllbGRzZXRFbGVt
ZW50MyA9IGNyZWF0ZVdNTEVsZW1lbnQoImZpZWxkc2V0Iik7CisgICAgZmllbGRzZXRFbGVtZW50
My50ZXh0Q29udGVudCA9ICJVUkw6IjsKKworICAgIHVybElucHV0ID0gY3JlYXRlV01MRWxlbWVu
dCgiaW5wdXQiKTsKKyAgICB1cmxJbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOwor
ICAgIHVybElucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ1cmwiKTsKKyAgICB1cmxJbnB1dC5z
ZXRBdHRyaWJ1dGUoInNpemUiLCAiMTAwIik7CisgICAgdXJsSW5wdXQuc2V0QXR0cmlidXRlKCJl
bXB0eW9rIiwgImZhbHNlIik7CisgICAgZmllbGRzZXRFbGVtZW50My5hcHBlbmRDaGlsZCh1cmxJ
bnB1dCk7CisgICAgY2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQoZmllbGRzZXRFbGVtZW50Myk7CisK
KyAgICAvLyBEZXNjcmlwdGlvbgorICAgIHZhciBmaWVsZHNldEVsZW1lbnQ0ID0gY3JlYXRlV01M
RWxlbWVudCgiZmllbGRzZXQiKTsKKyAgICBmaWVsZHNldEVsZW1lbnQ0LnRleHRDb250ZW50ID0g
IkRlc2NyaXB0aW9uOiI7CisKKyAgICBkZXNjSW5wdXQgPSBjcmVhdGVXTUxFbGVtZW50KCJpbnB1
dCIpOworICAgIGRlc2NJbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOworICAgIGRl
c2NJbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZGVzYyIpOworICAgIGRlc2NJbnB1dC5zZXRB
dHRyaWJ1dGUoInNpemUiLCAiODAwIik7CisgICAgZGVzY0lucHV0LnNldEF0dHJpYnV0ZSgiZW1w
dHlvayIsICJ0cnVlIik7CisgICAgZmllbGRzZXRFbGVtZW50NC5hcHBlbmRDaGlsZChkZXNjSW5w
dXQpOworICAgIGNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudDQpOworfQor
CitmdW5jdGlvbiBzZW5kVGV4dFRvQ29udHJvbChlbGVtZW50LCB0ZXh0KSB7CisgICAgZWxlbWVu
dC5mb2N1cygpOworICAgIHRlc3REb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0VGV4dCIsIGZh
bHNlLCB0ZXh0KTsKK30KKworZnVuY3Rpb24gcHJlcGFyZVRlc3QoKSB7CisgICAgc2VuZFRleHRU
b0NvbnRyb2wodGl0bGVJbnB1dCwgIlt0aXRsZV0gVEVTVCBQQVNTRUQiKTsKKyAgICBzZW5kVGV4
dFRvQ29udHJvbCh1cmxJbnB1dCwgIlt1cmxdIFRFU1QgUEFTU0VEIik7CisgICAgc2VuZFRleHRU
b0NvbnRyb2woZGVzY0lucHV0LCAiW2Rlc2NdIFRFU1QgUEFTU0VEIik7CisKKyAgICB0ZXN0RG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvcCIpLmZvY3VzKCk7CisgICAgc3RhcnRUZXN0KDI1LCAx
NSk7Cit9CisKK2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbXBsZXRlVGVzdCgpOwor
fQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL3dt
bC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvd21sL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKK1dNTCBsYXlvdXQgdGVzdHMg
LSB1c2luZyBYSFRNTCBzY3JpcHRpbmcKKworCitUZXN0cyB2YXJpYWJsZSByZWZlcmVuY2VzIGlu
IGNvbmp1Y3Rpb24gd2l0aCBzZWxlY3QgZWxlbWVudHMKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgcmVzdWx0RWxlbWVudC50ZXh0Q29udGVudCBpcyAiU2VsZWN0aW9uIHJl
c3VsdDogJyRyZXN1bHQnIgorUEFTUyByZXN1bHRFbGVtZW50LnRleHRDb250ZW50IGlzICJTZWxl
Y3Rpb24gcmVzdWx0OiAnZG9nZ3knIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwh
LS1mcmFtZTAtLT4tLT4nCistLS0tLS0tLQorU2VsZWN0aW9uIHJlc3VsdDogJ2RvZ2d5JwpJbmRl
eDogTGF5b3V0VGVzdHMvd21sL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3dtbC9zZWxlY3QtZWxlbWVudC12YXJpYWJsZXMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdD52YXIgcmVsYXRpdmVQYXRoVG9MYXlvdXRUZXN0cyA9ICIuLiI7PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL1dNTFRlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxoMT5XTUwgbGF5b3V0IHRlc3RzIC0gdXNpbmcgWEhUTUwgc2NyaXB0aW5nPC9o
MT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93bWwvcmVzb3VyY2VzL1dN
TFRlc3RDYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dtbC9yZXNvdXJjZXMvV01M
VGVzdENhc2UuanMJKHJldmlzaW9uIDQ1MjU5KQorKysgTGF5b3V0VGVzdHMvd21sL3Jlc291cmNl
cy9XTUxUZXN0Q2FzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBmdW5jdGlv
biBjcmVhdGVXTUxUZXN0Q2FzZShkZXNjLCBzdWJzdGl0CiAKICAgICAgICAgLy8gRXh0ZXJuYWwg
ZGVjayBqdW1wcwogICAgICAgICBpZiAodGVzdERvY3VtZW50ICE9IG51bGwgJiYgIXN1YnN0aXR1
dGVWYXJpYWJsZXMpIHsKLSAgICAgICAgICAgIGV4ZWN1dGVUZXN0KCk7CisgICAgICAgICAgICBk
ZWxheUV4ZWN1dGVUZXN0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
NTEsNyArNTEsNyBAQCBmdW5jdGlvbiBjcmVhdGVXTUxUZXN0Q2FzZShkZXNjLCBzdWJzdGl0CiAK
ICAgICAgICAgLy8gVmFyaWFibGUgcmVmcmVzaAogICAgICAgICBpZiAobG9hZGVkICYmIHN1YnN0
aXR1dGVWYXJpYWJsZXMpIHsKLSAgICAgICAgICAgIGV4ZWN1dGVUZXN0KCk7CisgICAgICAgICAg
ICBkZWxheUV4ZWN1dGVUZXN0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtNjEsNyArNjEsNyBAQCBmdW5jdGlvbiBjcmVhdGVXTUxUZXN0Q2FzZShkZXNjLCBzdWJzdGl0
CiAgICAgICAgIC8vIEludGVybmFsIGRlY2sganVtcHMKICAgICAgICAgaWYgKCFzdWJzdGl0dXRl
VmFyaWFibGVzKSB7CiAgICAgICAgICAgICBleGVjdXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBl
eGVjdXRlVGVzdCgpOworICAgICAgICAgICAgZGVsYXlFeGVjdXRlVGVzdCgpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC05MCw2ICs5MCwxMSBAQCBmdW5jdGlvbiBzdGFydFRlc3QoeCwgeSkgewog
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KCJ0cmlnZ2VyVXBkYXRlKCIgKyB4ICsgIiwgIiArIHkgKyAi
KSIsIDApOwogfQogCitmdW5jdGlvbiBkZWxheUV4ZWN1dGVUZXN0KCkgeworICAgIC8vIEFzc3Vy
ZSBmaXJzdCBsYXlvdXQgZmluaXNoZWQsIGFmdGVyIG1ha2luZyBjaGFuZ2VzCisgICAgd2luZG93
LnNldFRpbWVvdXQoImV4ZWN1dGVUZXN0KCkiLCAwKTsKK30KKwogZnVuY3Rpb24gY29tcGxldGVU
ZXN0KCkgewogICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxO
UywgInNjcmlwdCIpOwogCkluZGV4OiBMYXlvdXRUZXN0cy93bWwvcmVzb3VyY2VzL3NlbGVjdC1l
bGVtZW50LXZhcmlhYmxlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93bWwvcmVzb3Vy
Y2VzL3NlbGVjdC1lbGVtZW50LXZhcmlhYmxlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3dtbC9yZXNvdXJjZXMvc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUxIEBACisvLyBbTmFtZV0gc2VsZWN0LWVsZW1lbnQtdmFyaWFibGVzLmpz
CisKK2NyZWF0ZVdNTFRlc3RDYXNlKCJUZXN0cyB2YXJpYWJsZSByZWZlcmVuY2VzIGluIGNvbmp1
Y3Rpb24gd2l0aCBzZWxlY3QgZWxlbWVudHMiKTsKKwordmFyIHJlc3VsdEVsZW1lbnQ7CisKK2Z1
bmN0aW9uIHNldHVwVGVzdERvY3VtZW50KCkgeworICAgIHZhciBjYXJkRWxlbWVudCA9IHRlc3RE
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGlsZDsKKyAgICB2YXIgY2FyZDJFbGVtZW50
ID0gdGVzdERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYXJkMiIpOworCisgICAgdmFyIGFuY2hv
ckVsZW1lbnQgPSBjcmVhdGVXTUxFbGVtZW50KCJhbmNob3IiKTsKKyAgICBhbmNob3JFbGVtZW50
LnRleHRDb250ZW50ID0gIlN0YXJ0IHRlc3QiOworICAgIGNhcmRFbGVtZW50LmFwcGVuZENoaWxk
KGFuY2hvckVsZW1lbnQpOworCisgICAgdmFyIGdvRWxlbWVudCA9IGNyZWF0ZVdNTEVsZW1lbnQo
ImdvIik7CisgICAgZ29FbGVtZW50LnNldEF0dHJpYnV0ZSgiaHJlZiIsICIjY2FyZDIiKTsKKyAg
ICBhbmNob3JFbGVtZW50LmFwcGVuZENoaWxkKGdvRWxlbWVudCk7CisKKyAgICB2YXIgcEVsZW1l
bnQgPSBjcmVhdGVXTUxFbGVtZW50KCJwIik7CisgICAgcEVsZW1lbnQudGV4dENvbnRlbnQgPSAi
U2VsZWN0IGFuIG9wdGlvbiI7CisgICAgY2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQocEVsZW1lbnQp
OworCisgICAgdmFyIHNlbGVjdEVsZW1lbnQgPSBjcmVhdGVXTUxFbGVtZW50KCJzZWxlY3QiKTsK
KyAgICBzZWxlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsICJyZXN1bHQiKTsKKyAgICBj
YXJkRWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RFbGVtZW50KTsKKworICAgIHJlc3VsdEVsZW1l
bnQgPSBjYXJkMkVsZW1lbnQuZmlyc3RDaGlsZDsKKyAgICByZXN1bHRFbGVtZW50LnRleHRDb250
ZW50ID0gIlNlbGVjdGlvbiByZXN1bHQ6ICckcmVzdWx0JyI7CisKKyAgICB2YXIgb3B0aW9uRWxl
bWVudDEgPSBjcmVhdGVXTUxFbGVtZW50KCJvcHRpb24iKTsKKyAgICBvcHRpb25FbGVtZW50MS5z
ZXRBdHRyaWJ1dGUoInZhbHVlIiwgImRvZ2d5Iik7CisgICAgb3B0aW9uRWxlbWVudDEudGV4dENv
bnRlbnQgPSAiRG9nIjsKKyAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1l
bnQxKTsKKworICAgIHZhciBvcHRpb25FbGVtZW50MiA9IGNyZWF0ZVdNTEVsZW1lbnQoIm9wdGlv
biIpOworICAgIG9wdGlvbkVsZW1lbnQyLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAia2l0dGVuIik7
CisgICAgb3B0aW9uRWxlbWVudDIudGV4dENvbnRlbnQgPSAiQ2F0IjsKKyAgICBzZWxlY3RFbGVt
ZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQyKTsKK30KKworZnVuY3Rpb24gcHJlcGFyZVRl
c3QoKSB7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZXN1bHRFbGVtZW50LnRleHRDb250
ZW50IiwgIlNlbGVjdGlvbiByZXN1bHQ6ICckcmVzdWx0JyIpOworICAgIHN0YXJ0VGVzdCgyNSwg
MTUpOworfQorCitmdW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoInJlc3VsdEVsZW1lbnQudGV4dENvbnRlbnQiLCAiU2VsZWN0aW9uIHJlc3VsdDogJ2Rv
Z2d5JyIpOworICAgIGNvbXBsZXRlVGVzdCgpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="16480"
          type_id="1"
          status="+"
          setter="manyoso"
    />
          </attachment>
      

    </bug>

</bugzilla>