<?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>43778</bug_id>
          
          <creation_ts>2010-08-10 02:20:55 -0700</creation_ts>
          <short_desc>Dropping should fire textInput event</short_desc>
          <delta_ts>2010-11-01 15:39:23 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          <dependson>43893</dependson>
          <blocked>42957</blocked>
    
    <blocked>48791</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262567</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-10 02:20:55 -0700</bug_when>
    <thetext>Drag-and-drop should result document change, so it should fire textInput event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263000</commentid>
    <comment_count>1</comment_count>
      <attachid>64070</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-10 22:17:50 -0700</bug_when>
    <thetext>Created attachment 64070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263331</commentid>
    <comment_count>2</comment_count>
      <attachid>64070</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-11 10:37:06 -0700</bug_when>
    <thetext>Comment on attachment 64070
Patch

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        This chagne:

Nit: typo &quot;change&quot;

&gt; +PassRefPtr&lt;TextEvent&gt; TextEvent::createForDrop(PassRefPtr&lt;AbstractView&gt; view, const String&amp; data)
&gt; +{
&gt; +    return adoptRef(new TextEvent(view, data, 0, false, false, false, true));
&gt; +}

There are too many bools here.  Can you first write a patch to convert these to enums to make it more readable?

&gt; diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
&gt; @@ -376,6 +386,9 @@ bool DragController::concludeEditDrag(DragData* dragData)
&gt;      Frame* innerFrame = element-&gt;ownerDocument()-&gt;frame();
&gt;      ASSERT(innerFrame);
&gt;  
&gt; +    if (!dispatchTextInputEventFor(innerFrame, dragData))
&gt; +        return true;

I think it&apos;s possible for element to be null here (e.g., if the event handler removed the node from the DOM).  Can you add a test case for this?  We should do the same for the paste event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263335</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-11 10:40:58 -0700</bug_when>
    <thetext>&gt; @@ -376,6 +386,9 @@ bool DragController::concludeEditDrag(DragData* dragData)
&gt;      Frame* innerFrame = element-&gt;ownerDocument()-&gt;frame();
&gt;      ASSERT(innerFrame);
&gt;  
&gt; +    if (!dispatchTextInputEventFor(innerFrame, dragData))
&gt; +        return true;

Oh, Ojan mentions that it might be possible for innerFrame to be null too.  E.g., if you are dropping in an iframe, the event handler might go up to the parent frame and remove the iframe node.  I think this is ok because innerFrame is ref counted, but we should have a test to verify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263582</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-11 20:23:31 -0700</bug_when>
    <thetext>Hi Tony, thank you for reviewing!

(In reply to comment #2)
&gt; 
&gt; There are too many bools here.  Can you first write a patch to convert these to enums to make it more readable?
I submitted a patch on Bug 43893. Could you review that?
Other fixes will come after that refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264222</commentid>
    <comment_count>5</comment_count>
      <attachid>64309</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-13 00:36:28 -0700</bug_when>
    <thetext>Created attachment 64309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264223</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-13 00:39:54 -0700</bug_when>
    <thetext>Hi, I updated the patch.

(In reply to comment #2)
&gt; (From update of attachment 64070 [details])
&gt; &gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; &gt; +        This chagne:
&gt; 
&gt; Nit: typo &quot;change&quot;
Done.

&gt; 
&gt; &gt; diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
&gt; &gt; @@ -376,6 +386,9 @@ bool DragController::concludeEditDrag(DragData* dragData)
&gt; &gt;      Frame* innerFrame = element-&gt;ownerDocument()-&gt;frame();
&gt; &gt;      ASSERT(innerFrame);
&gt; &gt;  
&gt; &gt; +    if (!dispatchTextInputEventFor(innerFrame, dragData))
&gt; &gt; +        return true;
&gt; 
&gt; I think it&apos;s possible for element to be null here (e.g., if the event handler removed the node from the DOM).  Can you add a test case for this?  We should do the same for the paste event.
I couldn&apos;t figure out make |element| null before dispatchTextInputEventFor().
Added a test that remove an element on the event handler instead.

&gt; Oh, Ojan mentions that it might be possible for innerFrame to be null too.  E.g., if you are dropping in an iframe, the event handler might go up to the parent frame and remove the iframe node.  I think this is ok because innerFrame is ref counted, but we should have a test to verify.
An added test also does against iframe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264726</commentid>
    <comment_count>7</comment_count>
      <attachid>64309</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-14 12:40:32 -0700</bug_when>
    <thetext>Comment on attachment 64309
Patch

&gt; diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
&gt; @@ -374,7 +384,9 @@ bool DragController::concludeEditDrag(DragData* dragData)
&gt; -    ASSERT(innerFrame);
&gt; +
&gt; +    if (innerFrame &amp;&amp; !dispatchTextInputEventFor(innerFrame, dragData))
&gt; +        return true;

I don&apos;t understand this.  How can innerFrame now be null?  If it can be null, it looks like you need to add an innerFrame null check further down.  E.g., if (dragIsMove(innerFrame... needs to check innerFrame.

Other than that, this patch looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264919</commentid>
    <comment_count>8</comment_count>
      <attachid>64462</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-15 19:26:48 -0700</bug_when>
    <thetext>Created attachment 64462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264920</commentid>
    <comment_count>9</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-15 19:28:28 -0700</bug_when>
    <thetext>Hi Tony, thank you for reviewing again!

&gt; &gt; -    ASSERT(innerFrame);
&gt; &gt; +
&gt; &gt; +    if (innerFrame &amp;&amp; !dispatchTextInputEventFor(innerFrame, dragData))
&gt; &gt; +        return true;
&gt; 
&gt; I don&apos;t understand this.  How can innerFrame now be null?  If it can be null, it looks like you need to add an innerFrame null check further down.  E.g., if (dragIsMove(innerFrame... needs to check innerFrame.
Agreed. The code in the function looks inconsistent about null checking innerFrame
so I fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264948</commentid>
    <comment_count>10</comment_count>
      <attachid>64462</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-15 23:32:34 -0700</bug_when>
    <thetext>Comment on attachment 64462
Patch

&gt; diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
&gt;          if (!color.isValid())
&gt;              return false;
&gt; -        if (!innerFrame)
&gt; -            return false;

I think it&apos;s correct to remove this since it&apos;s confusing with the ASSERT above.  I wonder if there&apos;s some risk that it was needed to avoid a crash (ASSERT doesn&apos;t trigger in release builds), but without a test case, I think it&apos;s fine to remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264967</commentid>
    <comment_count>11</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-16 00:30:21 -0700</bug_when>
    <thetext>Committed r65395: &lt;http://trac.webkit.org/changeset/65395&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264974</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 01:04:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65395 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64070</attachid>
            <date>2010-08-10 22:17:50 -0700</date>
            <delta_ts>2010-08-13 00:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43778-20100811141748.patch</filename>
            <type>text/plain</type>
            <size>18154</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5NTY2MmNjN2Q1ZGE2OTNlYWJiYmExNTdhOWNhNDcyNGFiN2MzZGVhLi5iMmZhNWFi
YmZhZTBiOTMyNGE1ZTNmOWE5MGE5NmVjZTExZDE4ZDJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTAtMDgtMTAgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzc4CisgICAgICAgIERyb3BwaW5nIHNob3VsZCBm
aXJlIHRleHRJbnB1dCBldmVudAorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3At
dGV4dC1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Bhc3Rl
Ym9hcmQvZHJvcC10ZXh0LWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Bh
c3RlYm9hcmQvc2NyaXB0LXRlc3RzL2Ryb3AtdGV4dC1ldmVudHMuanM6IEFkZGVkLgorICAgICAg
ICAodG9TdHJpbmdMaXRlcmFsKToKKyAgICAgICAgKCk6CisgICAgICAgIChjbGVhclRhcmdldHMp
OgorICAgICAgICAoZHJvcFRvKToKKyAgICAgICAgKGRyYWdQbGFpblRleHQpOgorICAgICAgICAo
ZHJhZ1JpY2hUZXh0KToKKyAgICAgICAgKGRyb3BUb1RhcmdldEVkaXRhYmxlKToKKyAgICAgICAg
KHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSk6CisgICAgICAgICh0YXJnZXRFZGl0YWJsZVNob3Vs
ZFN0YXlBc0lzKToKKyAgICAgICAgKGRyb3BUb1RhcmdldElucHV0KToKKyAgICAgICAgKHRhcmdl
dElucHV0U2hvdWxkSGF2ZSk6CisgICAgICAgIChkcm9wVG9UYXJnZXRUZXh0YXJlYSk6CisgICAg
ICAgICh0YXJnZXRUZXh0YXJlYVNob3VsZEhhdmUpOgorICAgICAgICAocnVuU2luZ2xlVGVzdCk6
CisKIDIwMTAtMDgtMTAgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jZGRkYjc1MGQ3Y2ViMTIyYzQzZTRhZWM0NTExZjZhMTE0NWEzZWU3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1l
dmVudHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK1RoaXMgdGVzdHMgdGhhdCBEcmFn
IGRyb3AgZmlyZXMgdGV4dElucHV0IGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldFRl
eHRhcmVhLnZhbHVlIGlzICdQbGFpbkhlbGxvJworUEFTUyBldmVudC5kYXRhIGlzICdQbGFpbkhl
bGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJ1BsYWluSGVsbG8nCitQQVNTIGV2
ZW50LmRhdGEgaXMgJycKK1BBU1MgMCA8PSB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MLmlu
ZGV4T2YoJ1BsYWluSGVsbG8nKSBpcyB0cnVlCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1JpY2hIZWxs
bycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVlIGlzICdSaWNoSGVsbG8nCitQQVNTIGV2
ZW50LmRhdGEgaXMgJ1JpY2hIZWxsbycKK1BBU1MgdGVzdFRhcmdldElucHV0LnZhbHVlIGlzICdS
aWNoSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEgaXMgJycKK1BBU1MgMCA8PSB0ZXN0VGFyZ2V0RWRp
dGFibGUuaW5uZXJIVE1MLmluZGV4T2YoJzxiPlJpY2g8L2I+SGVsbG8nKSBpcyB0cnVlCitQQVNT
IHRleHRJbnB1dENvdW50IGlzIHByb2NlZWRpbmdUZXN0Q2FzZXMubGVuZ3RoCitQQVNTIGV2ZW50
LmRhdGEgaXMgJ1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1ZSBpcyAn
JworUEFTUyBldmVudC5kYXRhIGlzICdQbGFpbkhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQu
dmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFi
bGUuaW5uZXJIVE1MIGlzICdwbGFjZWhvbGRlcicKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhl
bGxvJworUEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0
YSBpcyAnUmljaEhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJycKK1BBU1Mg
ZXZlbnQuZGF0YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIGlzICdw
bGFjZWhvbGRlcicKK1BBU1MgdGV4dElucHV0Q291bnQgaXMgY2FuY2VsaW5nVGVzdENhc2VzLmxl
bmd0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZl
bnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE2NzhkMDFjNWViNjlhZjZiOTViOTExOGQwNDM3ZDgwYWNkODY5
ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJv
cC10ZXh0LWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Ryb3AtdGV4
dC1ldmVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL2Ryb3AtdGV4
dC1ldmVudHMuanMgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3Rz
L2Ryb3AtdGV4dC1ldmVudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWViNTQ4ODg4Mzc0Mzk4MDhlMWZiNjJj
MmFhNjZlYjZiZGIyOWZhYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5qcwpAQCAtMCwwICsxLDE3
MyBAQAorZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgdGhhdCBEcmFnIGRyb3AgZmlyZXMgdGV4dElu
cHV0IGV2ZW50cy4nKTsKKworZnVuY3Rpb24gdG9TdHJpbmdMaXRlcmFsKHN0cikKK3sKKyAgIHJl
dHVybiAiJyIgKyBzdHIgKyAiJyI7Cit9CisKK3ZhciB3aWxsQ2FuY2VsVGV4dElucHV0ID0gZmFs
c2U7Cit2YXIgdGV4dElucHV0Q291bnQgPSAwOwordmFyIGV4cGVjdGVkVGV4dEV2ZW50RGF0YSA9
ICIiOworCitmdW5jdGlvbiBkcm9wcGluZ1RleHRJbnB1dEhhbmRsZXIoZXZ0KQoreworICAgIHNo
b3VsZEJlKCJldmVudC5kYXRhIiwgdG9TdHJpbmdMaXRlcmFsKGV4cGVjdGVkVGV4dEV2ZW50RGF0
YSkpOworICAgIHRleHRJbnB1dENvdW50Kys7CisgICAgaWYgKHdpbGxDYW5jZWxUZXh0SW5wdXQp
CisgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworfQorCit2YXIgdGVzdFNvdXJjZVJvb3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQodGVzdFNvdXJjZVJvb3QpOworCit2YXIgdGVzdFRhcmdldFJvb3QgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKK3Rlc3RUYXJnZXRSb290LmlubmVySFRNTCArPSAiPGlucHV0IHR5
cGU9J3RleHQnIGlkPSd0YXJnZXRJbnB1dCcgdmFsdWU9Jyc+IjsKK3Rlc3RUYXJnZXRSb290Lmlu
bmVySFRNTCArPSAiPGRpdj48c3BhbiBpZD0ndGFyZ2V0RWRpdGFibGUnIGNvbnRlbnRFZGl0YWJs
ZT48L3NwYW4+PC9kaXY+IjsKK3Rlc3RUYXJnZXRSb290LmlubmVySFRNTCArPSAiPHRleHRhcmVh
IGlkPSd0YXJnZXRUZXh0YXJlYScgPjwvdGV4dGFyZWE+IjsKK2RvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQodGVzdFRhcmdldFJvb3QpOworCit0ZXN0VGFyZ2V0RWRpdGFibGUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGFyZ2V0RWRpdGFibGUiKTsKK3Rlc3RUYXJnZXRFZGl0YWJsZS5hZGRF
dmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLCBkcm9wcGluZ1RleHRJbnB1dEhhbmRsZXIpOwordGVz
dFRhcmdldElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldElucHV0Iik7Cit0
ZXN0VGFyZ2V0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgZHJvcHBpbmdUZXh0
SW5wdXRIYW5kbGVyKTsKK3Rlc3RUYXJnZXRUZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0YXJnZXRUZXh0YXJlYSIpOwordGVzdFRhcmdldFRleHRhcmVhLmFkZEV2ZW50TGlzdGVu
ZXIoInRleHRJbnB1dCIsIGRyb3BwaW5nVGV4dElucHV0SGFuZGxlcik7CisKK3ZhciBzZWxlY3Rp
b24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisKK2Z1bmN0aW9uIGNsZWFyVGFyZ2V0cygpCit7
CisgICAgdGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCA9ICJwbGFjZWhvbGRlciI7IC8vIGdp
dmUgc29tZSB0ZXh0IHRvIGhhdmUgYW4gYXJlYSB0byBkcm9wCisgICAgdGVzdFRhcmdldElucHV0
LnZhbHVlID0gIiI7CisgICAgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVlID0gIiI7Cit9CisKK2Z1
bmN0aW9uIGRyYWdGcm9tKGVsZW1lbnQpCit7CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExl
ZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgeSA9IGVsZW1lbnQub2Zmc2V0
VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92
ZVRvKHgsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworCisgICAgLy8gTWFrZXMg
ZHJhZyBoYXBwZW4KKyAgICB2YXIgbWVhbmluZ2xlc3NEZWx0YSA9IDEwOyAKKyAgICBldmVudFNl
bmRlci5sZWFwRm9yd2FyZCg1MDApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHggKyBt
ZWFuaW5nbGVzc0RlbHRhICwgeSArIG1lYW5pbmdsZXNzRGVsdGEpOworfQorCitmdW5jdGlvbiBk
cm9wVG8oZWxlbWVudCkKK3sKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1l
bnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7
CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCitmdW5jdGlvbiBkcmFnUGxhaW5UZXh0
KCkKK3sKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J3RleHQn
IHZhbHVlPSdQbGFpbkhlbGxvJyBpZD0nc3JjJyAvPiI7CisgICAgdmFyIGlucHV0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIGlucHV0LmZvY3VzKCk7CisgICAgc2VsZWN0
aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGluZSIpOworICAgIGRyYWdGcm9tKGlu
cHV0KTsKK30KKworZnVuY3Rpb24gZHJhZ1JpY2hUZXh0KCkKK3sKKyAgICB0ZXN0U291cmNlUm9v
dC5pbm5lckhUTUwgPSAiPGRpdiBpZD0nc3JjJyBjb250ZW50RWRpdGFibGU+PGI+UmljaDwvYj5I
ZWxsbzwvZGl2PiI7CisgICAgdmFyIGVkaXRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InNyYyIpOworICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVkaXRhYmxlLCAwLCBlZGl0
YWJsZSwgMCk7CisgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGlu
ZSIpOworICAgIGRyYWdGcm9tKGVkaXRhYmxlKTsKK30KKworZnVuY3Rpb24gZHJvcFRvVGFyZ2V0
RWRpdGFibGUoKQoreworICAgIHZhciBlZGl0YWJsZSA9IHRlc3RUYXJnZXRFZGl0YWJsZTsKKyAg
ICBkcm9wVG8oZWRpdGFibGUpOworfQorCitmdW5jdGlvbiB0YXJnZXRFZGl0YWJsZVNob3VsZEhh
dmUodmFsdWUpCit7CisgICAgc2hvdWxkQmVUcnVlKCIwIDw9IHRlc3RUYXJnZXRFZGl0YWJsZS5p
bm5lckhUTUwuaW5kZXhPZigiICsgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSArICIpIik7Cit9CisK
K2Z1bmN0aW9uIHRhcmdldEVkaXRhYmxlU2hvdWxkU3RheUFzSXMoKQoreworICAgIHNob3VsZEJl
KCJ0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIiwgdG9TdHJpbmdMaXRlcmFsKCJwbGFjZWhv
bGRlciIpKTsKK30KKworZnVuY3Rpb24gZHJvcFRvVGFyZ2V0SW5wdXQoKQoreworICAgIHZhciBp
bnB1dCA9IHRlc3RUYXJnZXRJbnB1dDsKKyAgICBkcm9wVG8oaW5wdXQpOworfQorCitmdW5jdGlv
biB0YXJnZXRJbnB1dFNob3VsZEhhdmUodmFsdWUpCit7CisgICAgc2hvdWxkQmUoInRlc3RUYXJn
ZXRJbnB1dC52YWx1ZSIsIHRvU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpOworfQorCitmdW5jdGlvbiBk
cm9wVG9UYXJnZXRUZXh0YXJlYSgpCit7CisgICAgdmFyIHRleHRhcmVhID0gdGVzdFRhcmdldFRl
eHRhcmVhOworICAgIGRyb3BUbyh0ZXh0YXJlYSk7Cit9CisKK2Z1bmN0aW9uIHRhcmdldFRleHRh
cmVhU2hvdWxkSGF2ZSh2YWx1ZSkKK3sKKyAgICBzaG91bGRCZSgidGVzdFRhcmdldFRleHRhcmVh
LnZhbHVlIiwgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSk7Cit9CisKK3ZhciBwcm9jZWVkaW5nVGVz
dENhc2VzID0gWworICAgIFtkcmFnUGxhaW5UZXh0LCBkcm9wVG9UYXJnZXRUZXh0YXJlYSwgdGFy
Z2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiUGxhaW5IZWxsbyIsICJQbGFpbkhlbGxvIl0sCisgICAg
W2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUs
ICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbZHJhZ1BsYWluVGV4dCwgZHJvcFRv
VGFyZ2V0RWRpdGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwgIlBsYWluSGVsbG8iLCAi
Il0sCisgICAgW2RyYWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRleHRh
cmVhU2hvdWxkSGF2ZSwgIlJpY2hIZWxsbyIsICJSaWNoSGVsbG8iXSwKKyAgICBbZHJhZ1JpY2hU
ZXh0LCBkcm9wVG9UYXJnZXRJbnB1dCwgdGFyZ2V0SW5wdXRTaG91bGRIYXZlLCAiUmljaEhlbGxv
IiwgIlJpY2hIZWxsbyJdLAorICAgIFtkcmFnUmljaFRleHQsIGRyb3BUb1RhcmdldEVkaXRhYmxl
LCB0YXJnZXRFZGl0YWJsZVNob3VsZEhhdmUsICI8Yj5SaWNoPC9iPkhlbGxvIiwgIiJdLAorXTsK
KwordmFyIGNhbmNlbGluZ1Rlc3RDYXNlcyA9IFsKKyAgICBbZHJhZ1BsYWluVGV4dCwgZHJvcFRv
VGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSwgIiIsICJQbGFpbkhlbGxv
Il0sCisgICAgW2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNo
b3VsZEhhdmUsICIiLCAiUGxhaW5IZWxsbyJdLAorICAgIFtkcmFnUGxhaW5UZXh0LCBkcm9wVG9U
YXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRTdGF5QXNJcywgIiIsICIiXSwKKyAg
ICBbZHJhZ1JpY2hUZXh0LCBkcm9wVG9UYXJnZXRUZXh0YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91
bGRIYXZlLCAiIiwgIlJpY2hIZWxsbyJdLAorICAgIFtkcmFnUmljaFRleHQsIGRyb3BUb1Rhcmdl
dElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICIiLCAiUmljaEhlbGxvIl0sCisgICAgW2Ry
YWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkU3Rh
eUFzSXMsICIiLCAiIl0sCitdOworCitmdW5jdGlvbiBydW5TaW5nbGVUZXN0KGNhc2VEYXRhKQor
eworICAgIHZhciBkcmFnID0gY2FzZURhdGFbMF07CisgICAgdmFyIGRyb3AgPSBjYXNlRGF0YVsx
XTsKKyAgICB2YXIgdmVyaWZ5RnVuY3Rpb24gPSBjYXNlRGF0YVsyXTsKKyAgICB2YXIgdmVyaWZ5
UGFyYW1ldGVyID0gY2FzZURhdGFbM107CisKKyAgICBleHBlY3RlZFRleHRFdmVudERhdGEgPSBj
YXNlRGF0YVs0XTsKKworICAgIGNsZWFyVGFyZ2V0cygpOworICAgIGRyYWcoKTsKKyAgICBkcm9w
KCk7CisgICAgdmVyaWZ5RnVuY3Rpb24odmVyaWZ5UGFyYW1ldGVyKTsKK30KKworZXZlbnRTZW5k
ZXIuZHJhZ01vZGUgPSBmYWxzZTsKKwordGV4dElucHV0Q291bnQgPSAwOword2lsbENhbmNlbFRl
eHRJbnB1dCA9IGZhbHNlOworZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9jZWVkaW5nVGVzdENhc2Vz
Lmxlbmd0aDsgKytpKQorICAgIHJ1blNpbmdsZVRlc3QocHJvY2VlZGluZ1Rlc3RDYXNlc1tpXSk7
CitzaG91bGRCZSgidGV4dElucHV0Q291bnQiLCAicHJvY2VlZGluZ1Rlc3RDYXNlcy5sZW5ndGgi
KTsKKwordGV4dElucHV0Q291bnQgPSAwOword2lsbENhbmNlbFRleHRJbnB1dCA9IHRydWU7Citm
b3IgKHZhciBpID0gMDsgaSA8IGNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5ndGg7ICsraSkKKyAgICBy
dW5TaW5nbGVUZXN0KGNhbmNlbGluZ1Rlc3RDYXNlc1tpXSk7CitzaG91bGRCZSgidGV4dElucHV0
Q291bnQiLCAiY2FuY2VsaW5nVGVzdENhc2VzLmxlbmd0aCIpOworCisvLyBIaWRlcyBkYXRhc2V0
IHRvIG1ha2UgZHVtcCBjbGVhbi4KK3Rlc3RUYXJnZXRSb290LnN0eWxlLmRpc3BsYXkgPSAibm9u
ZSI7Cit0ZXN0U291cmNlUm9vdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggOTEwMTI3OTEwOTE4Y2Q1MGQyMTBjYTlkYWY4YzE4NDgxMDdi
YmY0My4uODZmY2NlOTMzOTUxN2Y0NDA0NjMyZTlkMzRhNmZiZmIyNTcyOTg2YiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MiBAQAorMjAxMC0wOC0xMCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NzgKKyAgICAgICAgRHJvcHBpbmcgc2hv
dWxkIGZpcmUgdGV4dElucHV0IGV2ZW50CisKKyAgICAgICAgVGhpcyBjaGFnbmU6CisgICAgICAg
IC0gYWRkZWQgVGV4dEV2ZW50OjptX2lzRHJvcCB0byBkaXN0aW5ndWlzaCBkcm9wLWluaXRpYXRl
ZCBldmVudHMuCisgICAgICAgIC0gYWRkZWQgdG8gZGlzcGF0Y2ggVGV4dEV2ZW50IGZyb20gRHJh
Z0NvbnRyb2xsZXIgYmVmb3JlIG1ha2luZyBhIHNpZGUgZWZmZWN0CisgICAgICAgICAgYW5kIGNh
bmNlbCB0aGUgc2lkZSBlZmZlY3QgaWYgdGhlIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQKKworICAg
ICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy5odG1sCisKKyAg
ICAgICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6
Y3JlYXRlRm9yRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRleHRFdmVudCk6
CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50
Ojppc0Ryb3ApOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
ZmluZEV2ZW50VGFyZ2V0RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29u
dHJvbGxlcjo6ZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcik6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6CisgICAgICAgICogcGFnZS9EcmFnQ29u
dHJvbGxlci5oOgorCiAyMDEwLTA4LTEwICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwIGIvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAppbmRl
eCA1ZGMzOWUzNGYwMTVmMjEyYjRiNGY5YTc3MzkyMjYwZjMxZDQwMTM1Li41OGIzNDZkZTA1Mjli
ZmE1MDM5NjkzOTM5OTJkZmMyY2FiMmY3NDY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0
RXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAKQEAgLTUxLDE3ICs1MSwy
MyBAQCBQYXNzUmVmUHRyPFRleHRFdmVudD4gVGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFnbWVudFBh
c3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dEV2ZW50KHZpZXcsICIiLCBkYXRhLCB0cnVlLCBzaG91bGRTbWFydFJlcGxhY2UsIHNob3VsZE1h
dGNoU3R5bGUpKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRl
Rm9yRHJvcChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRh
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIDAsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpKTsKK30KKwogVGV4dEV2ZW50OjpUZXh0RXZlbnQoKQog
ICAgIDogbV9pc0xpbmVCcmVhayhmYWxzZSkKICAgICAsIG1faXNCYWNrVGFiKGZhbHNlKQogICAg
ICwgbV9pc1Bhc3RlKGZhbHNlKQogICAgICwgbV9zaG91bGRTbWFydFJlcGxhY2UoZmFsc2UpCiAg
ICAgLCBtX3Nob3VsZE1hdGNoU3R5bGUoZmFsc2UpCisgICAgLCBtX2lzRHJvcChmYWxzZSkKIHsK
IH0KIAogVGV4dEV2ZW50OjpUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcs
IGNvbnN0IFN0cmluZyYgZGF0YSwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5n
RnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGlzUGFzdGUsIGJvb2wgc2hvdWxk
U21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpCisgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzUGFzdGUsIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNo
U3R5bGUsIGJvb2wgaXNEcm9wKQogICAgIDogVUlFdmVudChldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQsIHRydWUsIHRydWUsIHZpZXcsIDApCiAgICAgLCBtX2RhdGEoZGF0YSkKICAgICAsIG1f
aXNMaW5lQnJlYWsoZmFsc2UpCkBAIC03MCw2ICs3Niw3IEBAIFRleHRFdmVudDo6VGV4dEV2ZW50
KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIFBhc3NS
ZWZQCiAgICAgLCBtX2lzUGFzdGUoaXNQYXN0ZSkKICAgICAsIG1fc2hvdWxkU21hcnRSZXBsYWNl
KHNob3VsZFNtYXJ0UmVwbGFjZSkKICAgICAsIG1fc2hvdWxkTWF0Y2hTdHlsZShzaG91bGRNYXRj
aFN0eWxlKQorICAgICwgbV9pc0Ryb3AoaXNEcm9wKQogewogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9UZXh0RXZlbnQuaCBiL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCmluZGV4IDJlMmVi
OTVhMzY2MzE1NmVlMjlmZGM0NjRlNzBjNDdiMzNhMWYzOWYuLjlmNmQ5NDJjYWJkMzFiNGVlMGVj
NDBiMmRiODg1Yzg0ZjIyZWZhYTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RleHRFdmVudC5o
CisrKyBiL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGUo
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUo
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSwgYm9vbCBz
aG91bGRTbWFydFJlcGxhY2UpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+
IGNyZWF0ZUZvckZyYWdtZW50UGFzdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGF0YSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2Us
IGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRF
dmVudD4gY3JlYXRlRm9yRHJvcChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3Qg
U3RyaW5nJiBkYXRhKTsKIAogICAgICAgICB2aXJ0dWFsIH5UZXh0RXZlbnQoKTsKICAgICAKQEAg
LTYwLDEwICs2MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2hvdWxk
TWF0Y2hTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWF0Y2hTdHlsZTsgfQogICAgICAg
ICBEb2N1bWVudEZyYWdtZW50KiBwYXN0aW5nRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
c3RpbmdGcmFnbWVudC5nZXQoKTsgfQogCisgICAgICAgIGJvb2wgaXNEcm9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0Ryb3A7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFRleHRFdmVudCgpOwog
ICAgICAgICBUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcm
IGRhdGEsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gPSAwLAotICAgICAgICAgICAgICAg
ICAgYm9vbCBpc1Bhc3RlID0gZmFsc2UsIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlID0gZmFsc2Us
IGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSA9IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIGJvb2wg
aXNQYXN0ZSA9IGZhbHNlLCBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSA9IGZhbHNlLCBib29sIHNo
b3VsZE1hdGNoU3R5bGUgPSBmYWxzZSwgYm9vbCBpc0Ryb3AgPSBmYWxzZSk7CiAKICAgICAgICAg
U3RyaW5nIG1fZGF0YTsKICAgICAgICAgYm9vbCBtX2lzTGluZUJyZWFrOwpAQCAtNzMsNiArNzYs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9pc1Bhc3RlOyAvLyBGSVhN
RTogU2hvdWxkIHVzZSBpbnB1dE1vZGUgYWZ0ZXIgaXQgYmUgYXZhaWxhYmxlOiBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQyODA1CiAgICAgICAgIGJvb2wgbV9zaG91bGRTbWFydFJlcGxhY2U7CiAgICAg
ICAgIGJvb2wgbV9zaG91bGRNYXRjaFN0eWxlOworCisgICAgICAgIGJvb2wgbV9pc0Ryb3A7IC8v
IEZJWE1FOiBTaG91bGQgdXNlIGlucHV0TW9kZSBhZnRlciBpdCBiZSBhdmFpbGFibGU6IGh0dHA6
Ly93ZWJraXQub3JnL2IvNDI4MDUKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IDdhMWFkNGQ4MGY1MWFlZGI0NWMyOGRiMjBhOWI2Y2M5YWI1MWRhYjAu
LmYwZDgzNWM4NzQ4NzViNTFmNTkzMzgwZjlkODNmMjdhYzczODRhZWYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CkBAIC0xMzAsNiArMTMwLDExIEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVJbnB1dE1ldGhvZEtleWRv
d24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKIGJvb2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQo
VGV4dEV2ZW50KiBldmVudCkKIHsKKyAgICAvLyBEZWZhdWx0IGV2ZW50IGhhbmRsaW5nIGZvciBE
cmFnIGFuZCBEcm9wIHdpbGwgYmUgaGFuZGxlZCBieSBEcmFnQ29udHJvbGxlcgorICAgIC8vIHNv
IHdlIGxlYXZlIHRoZSBldmVudCBmb3IgaXQuCisgICAgaWYgKGV2ZW50LT5pc0Ryb3AoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKGV2ZW50LT5pc1Bhc3RlKCkpIHsKICAgICAg
ICAgaWYgKGV2ZW50LT5wYXN0aW5nRnJhZ21lbnQoKSkKICAgICAgICAgICAgIHJlcGxhY2VTZWxl
Y3Rpb25XaXRoRnJhZ21lbnQoZXZlbnQtPnBhc3RpbmdGcmFnbWVudCgpLCBmYWxzZSwgZXZlbnQt
PnNob3VsZFNtYXJ0UmVwbGFjZSgpLCBldmVudC0+c2hvdWxkTWF0Y2hTdHlsZSgpKTsKQEAgLTc2
MiwxNCArNzY3LDIwIEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpCiAgICAgcmV0dXJuICFub0Rl
ZmF1bHRQcm9jZXNzaW5nOwogfQogCi1Ob2RlKiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21T
ZWxlY3Rpb24oKSBjb25zdAorTm9kZSogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsKLSAgICBOb2RlKiB0YXJnZXQg
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50KCk7CisgICAgTm9kZSogdGFy
Z2V0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0KQogICAg
ICAgICB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAgaWYgKCF0YXJn
ZXQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0YXJnZXQtPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpOworCit9CisKK05vZGUqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aAppbmRleCAxM2U2ZGY1NDgyYTI1ZGRhZWYyZWYxMDQ3YTM2MzMwYzliYzJjYzQyLi4wNmU3NTEz
ZjdhMDgxYjg3ZmM0YTA0ODI2YjY1YTYyZTVkZTQzMTUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOTksNiAr
Mjk5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwogICAg
IHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNtYXJ0UmVwbGFjZSk7
CiAKKyAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikgY29uc3Q7CiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93
blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVyPiBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBkOTNhMjU2ZTk2ZTUwYjQ5NGE4NDVjZTJjMjljZDRi
NDI5YWQ1OWRiLi40MzJkZTNhNTBjNWIxMzFlNDJlMjc3YjkwMGJkMTQ4OGNmMTRmYTFlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTM2Myw2ICsz
NjQsMTUgQEAgc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1l
LCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIFIKICAgICByZXR1cm4gIWZyYW1lLT5zZWxl
Y3Rpb24oKS0+aXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpOwogfQogCitib29sIERyYWdDb250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9y
KEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSogZHJhZ0RhdGEpCit7CisgICAgVmlzaWJsZVNl
bGVjdGlvbiBkcmFnQ2FyZXQobV9wYWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCktPnNlbGVjdGlv
bigpKTsKKyAgICBTdHJpbmcgdGV4dCA9IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpID8gIiIgOiBkcmFnRGF0YS0+YXNQbGFpblRleHQoKTsKKyAgICBOb2RlKiB0YXJnZXQgPSBp
bm5lckZyYW1lLT5lZGl0b3IoKS0+ZmluZEV2ZW50VGFyZ2V0RnJvbShkcmFnQ2FyZXQpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiB0YXJnZXQtPmRpc3BhdGNoRXZlbnQo
VGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0KSwg
ZWMpOworfQorCiBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRh
KiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQoZHJhZ0RhdGEpOwpAQCAtMzc2LDYgKzM4Niw5IEBA
IGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRh
KQogICAgIEZyYW1lKiBpbm5lckZyYW1lID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5mcmFt
ZSgpOwogICAgIEFTU0VSVChpbm5lckZyYW1lKTsKIAorICAgIGlmICghZGlzcGF0Y2hUZXh0SW5w
dXRFdmVudEZvcihpbm5lckZyYW1lLCBkcmFnRGF0YSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CiAgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0NvbG9yKCkpIHsKICAgICAgICAgQ29sb3IgY29s
b3IgPSBkcmFnRGF0YS0+YXNDb2xvcigpOwogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oIGIvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmgKaW5kZXggNzEyZjlhYjNhMzM5YzY5YjUzYTQyYjFjN2M2ZTQ5ODJl
ODBmZGEwMy4uMGU5MGE1MjlhZTUyNDEzMzkxMmRlYzQ0Y2MxOWUxNTJkMmE4ZTA3YiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICBib29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFnRGF0YSop
OwogICAgICAgICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7CiAgICAgICAgIGJvb2wg
Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSopOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdF
bnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64309</attachid>
            <date>2010-08-13 00:36:28 -0700</date>
            <delta_ts>2010-08-15 19:26:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43778-20100813163626.patch</filename>
            <type>text/plain</type>
            <size>22492</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MTVhNjJmNjA5YzI4OWUzZjI1ZTMzN2YxNThkZTVkYjAxMzljZjgwLi42ZmE3NmFm
NDg0MzMwMWMyZWFkODE2ZDY5ZTllOTY5MjEwODk3ZGUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTMgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzc4CisgICAgICAgIERyb3BwaW5nIHNob3VsZCBm
aXJlIHRleHRJbnB1dCBldmVudC4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kcm9w
LXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3Qu
aHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVu
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10ZXN0
cy9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuanM6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5qczogQWRkZWQuCisK
IDIwMTAtMDgtMTIgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCBsYW5kaW5nIGdvb2dsZS1jaHJvbWUgbGludXggNjQgdGVzdCByZXN1bHRzLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVu
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4
dC1ldmVudHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZGRiNzUwZDdjZWIxMjJjNDNlNGFl
YzQ1MTFmNmExMTQ1YTNlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNSBA
QAorVGhpcyB0ZXN0cyB0aGF0IERyYWcgZHJvcCBmaXJlcyB0ZXh0SW5wdXQgZXZlbnRzLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBldmVudC5kYXRhIGlzICdQbGFpbkhl
bGxvJworUEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJ1BsYWluSGVsbG8nCitQQVNT
IGV2ZW50LmRhdGEgaXMgJ1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRJbnB1dC52YWx1ZSBp
cyAnUGxhaW5IZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJworUEFTUyAwIDw9IHRlc3RUYXJn
ZXRFZGl0YWJsZS5pbm5lckhUTUwuaW5kZXhPZignUGxhaW5IZWxsbycpIGlzIHRydWUKK1BBU1Mg
ZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUg
aXMgJ1JpY2hIZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJworUEFTUyB0ZXN0
VGFyZ2V0SW5wdXQudmFsdWUgaXMgJ1JpY2hIZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJwor
UEFTUyAwIDw9IHRlc3RUYXJnZXRFZGl0YWJsZS5pbm5lckhUTUwuaW5kZXhPZignPGI+UmljaDwv
Yj5IZWxsbycpIGlzIHRydWUKK1BBU1MgdGV4dElucHV0Q291bnQgaXMgcHJvY2VlZGluZ1Rlc3RD
YXNlcy5sZW5ndGgKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRh
cmdldFRleHRhcmVhLnZhbHVlIGlzICcnCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1BsYWluSGVsbG8n
CitQQVNTIHRlc3RUYXJnZXRJbnB1dC52YWx1ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICcn
CitQQVNTIHRlc3RUYXJnZXRFZGl0YWJsZS5pbm5lckhUTUwgaXMgJ3BsYWNlaG9sZGVyJworUEFT
UyBldmVudC5kYXRhIGlzICdSaWNoSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1
ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICdSaWNoSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRJ
bnB1dC52YWx1ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICcnCitQQVNTIHRlc3RUYXJnZXRF
ZGl0YWJsZS5pbm5lckhUTUwgaXMgJ3BsYWNlaG9sZGVyJworUEFTUyB0ZXh0SW5wdXRDb3VudCBp
cyBjYW5jZWxpbmdUZXN0Q2FzZXMubGVuZ3RoCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9w
YXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0LWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjUwOTYyZDdkZDU4NmFkODJiMDc3OWVmYjhlOTg4Mzk5
M2JjM2NkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L2Ryb3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBA
QAorRW5zdXJlIHNhZmV0eSBvbiBzaWRlLWVmZmVjdCBvbiBkcm9wLWluaXRpYXRlZCBUZXh0RXZl
bnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRlc3RUYXJnZXRFZGl0
YWJsZS5pbm5lckhUTUwgaXMgJ2luaXRpYWxWYWx1ZScKK1BBU1MgdGVzdFRhcmdldElGcmFtZURv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MIGlzICdpbml0aWFsQm9keScKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjUyOTUwYWJmM2U3OWEwNjkxNDk3NzRlNGEyMjI3NzYzZTI1YTRk
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9w
LXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZHJvcC10ZXh0LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ry
b3AtdGV4dC1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjc4ZDAxYzVlYjY5YWY2Yjk1YjkxMThk
MDQzN2Q4MGFjZDg2OWYzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9w
YXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9kcm9wLXRleHQtZXZlbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10
ZXN0cy9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuanMgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL2Ryb3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kNDVjN2VmNDEwYjEzNTM3NTA3YmZlMDg1MzU1OGI0MDBhYmM5MWQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10ZXN0
cy9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuanMKQEAgLTAsMCArMSw5MSBAQAorZGVzY3Jp
cHRpb24oJ0Vuc3VyZSBzYWZldHkgb24gc2lkZS1lZmZlY3Qgb24gZHJvcC1pbml0aWF0ZWQgVGV4
dEV2ZW50LicpOworCitmdW5jdGlvbiB0b1N0cmluZ0xpdGVyYWwoc3RyKQoreworICAgcmV0dXJu
ICInIiArIHN0ciArICInIjsKK30KKwordmFyIHRlc3RTb3VyY2VSb290ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RTb3VyY2VS
b290KTsKKwordmFyIHRlc3RUYXJnZXRSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Cit0ZXN0VGFyZ2V0Um9vdC5pbm5lckhUTUwgKz0gIjxkaXY+PHNwYW4gaWQ9J3RhcmdldEVk
aXRhYmxlJyBjb250ZW50RWRpdGFibGU+aW5pdGlhbFZhbHVlPC9zcGFuPjwvZGl2PiI7Cit0ZXN0
VGFyZ2V0Um9vdC5pbm5lckhUTUwgKz0gIjxpZnJhbWUgaWQ9J3RhcmdldElGcmFtZScgc3JjPSdk
YXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUkkoIjxodG1sPjwvaHRtbD4i
KSArICInPjwvaWZyYW1lPiI7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RUYXJnZXRS
b290KTsKKwordGVzdFRhcmdldEVkaXRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
cmdldEVkaXRhYmxlIik7Cit0ZXN0VGFyZ2V0SUZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldElGcmFtZSIpOwordGVzdFRhcmdldElGcmFtZURvY3VtZW50ID0gdGVzdFRhcmdl
dElGcmFtZS5jb250ZW50RG9jdW1lbnQ7Cit0ZXN0VGFyZ2V0SUZyYW1lRG9jdW1lbnQuYm9keS5p
bm5lckhUTUwgPSAiaW5pdGlhbEJvZHkiOwordGVzdFRhcmdldElGcmFtZURvY3VtZW50LmRlc2ln
bk1vZGUgPSAib24iOworCitmdW5jdGlvbiBoYW5kbGVyUmVtb3ZpbmdUYXJnZXQoZXZlbnQpCit7
CisgICAgZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXZlbnQudGFyZ2V0KTsK
K30KKworZnVuY3Rpb24gaGFuZGxlclJlbW92aW5nSUZyYW1lKGV2ZW50KQoreworICAgIHRlc3RU
YXJnZXRJRnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0VGFyZ2V0SUZyYW1lKTsKK30K
KworZnVuY3Rpb24gZHJhZ0Zyb20oZWxlbWVudCkKK3sKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zm
c2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5ID0gZWxlbWVudC5v
ZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisKKyAgICAvLyBN
YWtlcyBkcmFnIGhhcHBlbgorICAgIHZhciBtZWFuaW5nbGVzc0RlbHRhID0gMTA7IAorICAgIGV2
ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDUwMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
eCArIG1lYW5pbmdsZXNzRGVsdGEgLCB5ICsgbWVhbmluZ2xlc3NEZWx0YSk7Cit9CisKK2Z1bmN0
aW9uIGRyb3BUbyhlbGVtZW50KQoreworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsg
ZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICAKKyAgICBldmVudFNlbmRlci5tb3VzZU1v
dmVUbyh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGRy
YWdQbGFpblRleHQoKQoreworICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCk7CisKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J3RleHQn
IHZhbHVlPSdQbGFpbkhlbGxvJyBpZD0nc3JjJyAvPiI7CisgICAgdmFyIGlucHV0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIGlucHV0LmZvY3VzKCk7CisgICAgc2VsZWN0
aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGluZSIpOworICAgIGRyYWdGcm9tKGlu
cHV0KTsKK30KKworZnVuY3Rpb24gZHJvcFRvVGFyZ2V0RWRpdGFibGUoKQoreworICAgIGRyb3BU
byh0ZXN0VGFyZ2V0RWRpdGFibGUpOworfQorCitmdW5jdGlvbiBkcm9wVG9UYXJnZXRJRnJhbWUo
KQoreworICAgIGRyb3BUbyh0ZXN0VGFyZ2V0SUZyYW1lKTsKK30KKwordGVzdFRhcmdldEVkaXRh
YmxlLmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1dCIsIGhhbmRsZXJSZW1vdmluZ1RhcmdldCk7
CitkcmFnUGxhaW5UZXh0KCk7Citkcm9wVG9UYXJnZXRFZGl0YWJsZSgpOworLy8gZGV0YWNoZWQg
bm9kZSBzaG91bGRuJ3QgZ2V0IGRyb3BwZWQgdmFsdWUKK3Nob3VsZEJlKCJ0ZXN0VGFyZ2V0RWRp
dGFibGUuaW5uZXJIVE1MIiwgdG9TdHJpbmdMaXRlcmFsKCJpbml0aWFsVmFsdWUiKSk7CisKK3Rl
c3RUYXJnZXRJRnJhbWVEb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1dCIs
IGhhbmRsZXJSZW1vdmluZ0lGcmFtZSk7CitkcmFnUGxhaW5UZXh0KCk7Citkcm9wVG9UYXJnZXRJ
RnJhbWUoKTsKKy8vIGRldGFjaGVkIGZyYW1lIHNob3VsZG4ndCBnZXQgZHJvcHBlZCB2YWx1ZQor
c2hvdWxkQmUoInRlc3RUYXJnZXRJRnJhbWVEb2N1bWVudC5ib2R5LmlubmVySFRNTCIsIHRvU3Ry
aW5nTGl0ZXJhbCgiaW5pdGlhbEJvZHkiKSk7CisKKy8vIEhpZGVzIGRhdGFzZXQgdG8gbWFrZSBk
dW1wIGNsZWFuLgordGVzdFRhcmdldFJvb3Quc3R5bGUuZGlzcGxheSA9ICJub25lIjsKK3Rlc3RT
b3VyY2VSb290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5q
cyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0
LWV2ZW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWI1NDg4ODgzNzQzOTgwOGUxZmI2MmMyYWE2NmViNmJk
YjI5ZmFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L3NjcmlwdC10ZXN0cy9kcm9wLXRleHQtZXZlbnRzLmpzCkBAIC0wLDAgKzEsMTczIEBACitkZXNj
cmlwdGlvbignVGhpcyB0ZXN0cyB0aGF0IERyYWcgZHJvcCBmaXJlcyB0ZXh0SW5wdXQgZXZlbnRz
LicpOworCitmdW5jdGlvbiB0b1N0cmluZ0xpdGVyYWwoc3RyKQoreworICAgcmV0dXJuICInIiAr
IHN0ciArICInIjsKK30KKwordmFyIHdpbGxDYW5jZWxUZXh0SW5wdXQgPSBmYWxzZTsKK3ZhciB0
ZXh0SW5wdXRDb3VudCA9IDA7Cit2YXIgZXhwZWN0ZWRUZXh0RXZlbnREYXRhID0gIiI7CisKK2Z1
bmN0aW9uIGRyb3BwaW5nVGV4dElucHV0SGFuZGxlcihldnQpCit7CisgICAgc2hvdWxkQmUoImV2
ZW50LmRhdGEiLCB0b1N0cmluZ0xpdGVyYWwoZXhwZWN0ZWRUZXh0RXZlbnREYXRhKSk7CisgICAg
dGV4dElucHV0Q291bnQrKzsKKyAgICBpZiAod2lsbENhbmNlbFRleHRJbnB1dCkKKyAgICAgICAg
ZXZ0LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK3ZhciB0ZXN0U291cmNlUm9vdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0U291
cmNlUm9vdCk7CisKK3ZhciB0ZXN0VGFyZ2V0Um9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9ICI8aW5wdXQgdHlwZT0ndGV4dCcg
aWQ9J3RhcmdldElucHV0JyB2YWx1ZT0nJz4iOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9
ICI8ZGl2PjxzcGFuIGlkPSd0YXJnZXRFZGl0YWJsZScgY29udGVudEVkaXRhYmxlPjwvc3Bhbj48
L2Rpdj4iOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9ICI8dGV4dGFyZWEgaWQ9J3Rhcmdl
dFRleHRhcmVhJyA+PC90ZXh0YXJlYT4iOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0
VGFyZ2V0Um9vdCk7CisKK3Rlc3RUYXJnZXRFZGl0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0YXJnZXRFZGl0YWJsZSIpOwordGVzdFRhcmdldEVkaXRhYmxlLmFkZEV2ZW50TGlzdGVu
ZXIoInRleHRJbnB1dCIsIGRyb3BwaW5nVGV4dElucHV0SGFuZGxlcik7Cit0ZXN0VGFyZ2V0SW5w
dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0SW5wdXQiKTsKK3Rlc3RUYXJnZXRJ
bnB1dC5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLCBkcm9wcGluZ1RleHRJbnB1dEhhbmRs
ZXIpOwordGVzdFRhcmdldFRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdl
dFRleHRhcmVhIik7Cit0ZXN0VGFyZ2V0VGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElu
cHV0IiwgZHJvcHBpbmdUZXh0SW5wdXRIYW5kbGVyKTsKKwordmFyIHNlbGVjdGlvbiA9IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKTsKKworZnVuY3Rpb24gY2xlYXJUYXJnZXRzKCkKK3sKKyAgICB0ZXN0
VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MID0gInBsYWNlaG9sZGVyIjsgLy8gZ2l2ZSBzb21lIHRl
eHQgdG8gaGF2ZSBhbiBhcmVhIHRvIGRyb3AKKyAgICB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgPSAi
IjsKKyAgICB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgPSAiIjsKK30KKworZnVuY3Rpb24gZHJh
Z0Zyb20oZWxlbWVudCkKK3sKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1l
bnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7
CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisKKyAgICAvLyBNYWtlcyBkcmFnIGhhcHBl
bgorICAgIHZhciBtZWFuaW5nbGVzc0RlbHRhID0gMTA7IAorICAgIGV2ZW50U2VuZGVyLmxlYXBG
b3J3YXJkKDUwMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCArIG1lYW5pbmdsZXNz
RGVsdGEgLCB5ICsgbWVhbmluZ2xlc3NEZWx0YSk7Cit9CisKK2Z1bmN0aW9uIGRyb3BUbyhlbGVt
ZW50KQoreworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRX
aWR0aCAvIDI7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0
SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdQbGFpblRleHQoKQoreworICAg
IHRlc3RTb3VyY2VSb290LmlubmVySFRNTCA9ICI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J1Bs
YWluSGVsbG8nIGlkPSdzcmMnIC8+IjsKKyAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgic3JjIik7CisgICAgaW5wdXQuZm9jdXMoKTsKKyAgICBzZWxlY3Rpb24ubW9kaWZ5
KCJleHRlbmQiLCAiZm9yd2FyZCIsICJsaW5lIik7CisgICAgZHJhZ0Zyb20oaW5wdXQpOworfQor
CitmdW5jdGlvbiBkcmFnUmljaFRleHQoKQoreworICAgIHRlc3RTb3VyY2VSb290LmlubmVySFRN
TCA9ICI8ZGl2IGlkPSdzcmMnIGNvbnRlbnRFZGl0YWJsZT48Yj5SaWNoPC9iPkhlbGxvPC9kaXY+
IjsKKyAgICB2YXIgZWRpdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3JjIik7Cisg
ICAgc2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoZWRpdGFibGUsIDAsIGVkaXRhYmxlLCAwKTsK
KyAgICBzZWxlY3Rpb24ubW9kaWZ5KCJleHRlbmQiLCAiZm9yd2FyZCIsICJsaW5lIik7CisgICAg
ZHJhZ0Zyb20oZWRpdGFibGUpOworfQorCitmdW5jdGlvbiBkcm9wVG9UYXJnZXRFZGl0YWJsZSgp
Cit7CisgICAgdmFyIGVkaXRhYmxlID0gdGVzdFRhcmdldEVkaXRhYmxlOworICAgIGRyb3BUbyhl
ZGl0YWJsZSk7Cit9CisKK2Z1bmN0aW9uIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSh2YWx1ZSkK
K3sKKyAgICBzaG91bGRCZVRydWUoIjAgPD0gdGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTC5p
bmRleE9mKCIgKyB0b1N0cmluZ0xpdGVyYWwodmFsdWUpICsgIikiKTsKK30KKworZnVuY3Rpb24g
dGFyZ2V0RWRpdGFibGVTaG91bGRTdGF5QXNJcygpCit7CisgICAgc2hvdWxkQmUoInRlc3RUYXJn
ZXRFZGl0YWJsZS5pbm5lckhUTUwiLCB0b1N0cmluZ0xpdGVyYWwoInBsYWNlaG9sZGVyIikpOwor
fQorCitmdW5jdGlvbiBkcm9wVG9UYXJnZXRJbnB1dCgpCit7CisgICAgdmFyIGlucHV0ID0gdGVz
dFRhcmdldElucHV0OworICAgIGRyb3BUbyhpbnB1dCk7Cit9CisKK2Z1bmN0aW9uIHRhcmdldElu
cHV0U2hvdWxkSGF2ZSh2YWx1ZSkKK3sKKyAgICBzaG91bGRCZSgidGVzdFRhcmdldElucHV0LnZh
bHVlIiwgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIGRyb3BUb1Rhcmdl
dFRleHRhcmVhKCkKK3sKKyAgICB2YXIgdGV4dGFyZWEgPSB0ZXN0VGFyZ2V0VGV4dGFyZWE7Cisg
ICAgZHJvcFRvKHRleHRhcmVhKTsKK30KKworZnVuY3Rpb24gdGFyZ2V0VGV4dGFyZWFTaG91bGRI
YXZlKHZhbHVlKQoreworICAgIHNob3VsZEJlKCJ0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUiLCB0
b1N0cmluZ0xpdGVyYWwodmFsdWUpKTsKK30KKwordmFyIHByb2NlZWRpbmdUZXN0Q2FzZXMgPSBb
CisgICAgW2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldFRleHRhcmVhLCB0YXJnZXRUZXh0YXJl
YVNob3VsZEhhdmUsICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbZHJhZ1BsYWlu
VGV4dCwgZHJvcFRvVGFyZ2V0SW5wdXQsIHRhcmdldElucHV0U2hvdWxkSGF2ZSwgIlBsYWluSGVs
bG8iLCAiUGxhaW5IZWxsbyJdLAorICAgIFtkcmFnUGxhaW5UZXh0LCBkcm9wVG9UYXJnZXRFZGl0
YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRIYXZlLCAiUGxhaW5IZWxsbyIsICIiXSwKKyAgICBb
ZHJhZ1JpY2hUZXh0LCBkcm9wVG9UYXJnZXRUZXh0YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRI
YXZlLCAiUmljaEhlbGxvIiwgIlJpY2hIZWxsbyJdLAorICAgIFtkcmFnUmljaFRleHQsIGRyb3BU
b1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICJSaWNoSGVsbG8iLCAiUmljaEhl
bGxvIl0sCisgICAgW2RyYWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVk
aXRhYmxlU2hvdWxkSGF2ZSwgIjxiPlJpY2g8L2I+SGVsbG8iLCAiIl0sCitdOworCit2YXIgY2Fu
Y2VsaW5nVGVzdENhc2VzID0gWworICAgIFtkcmFnUGxhaW5UZXh0LCBkcm9wVG9UYXJnZXRUZXh0
YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiIiwgIlBsYWluSGVsbG8iXSwKKyAgICBb
ZHJhZ1BsYWluVGV4dCwgZHJvcFRvVGFyZ2V0SW5wdXQsIHRhcmdldElucHV0U2hvdWxkSGF2ZSwg
IiIsICJQbGFpbkhlbGxvIl0sCisgICAgW2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldEVkaXRh
YmxlLCB0YXJnZXRFZGl0YWJsZVNob3VsZFN0YXlBc0lzLCAiIiwgIiJdLAorICAgIFtkcmFnUmlj
aFRleHQsIGRyb3BUb1RhcmdldFRleHRhcmVhLCB0YXJnZXRUZXh0YXJlYVNob3VsZEhhdmUsICIi
LCAiUmljaEhlbGxvIl0sCisgICAgW2RyYWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0SW5wdXQsIHRh
cmdldElucHV0U2hvdWxkSGF2ZSwgIiIsICJSaWNoSGVsbG8iXSwKKyAgICBbZHJhZ1JpY2hUZXh0
LCBkcm9wVG9UYXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRTdGF5QXNJcywgIiIs
ICIiXSwKK107CisKK2Z1bmN0aW9uIHJ1blNpbmdsZVRlc3QoY2FzZURhdGEpCit7CisgICAgdmFy
IGRyYWcgPSBjYXNlRGF0YVswXTsKKyAgICB2YXIgZHJvcCA9IGNhc2VEYXRhWzFdOworICAgIHZh
ciB2ZXJpZnlGdW5jdGlvbiA9IGNhc2VEYXRhWzJdOworICAgIHZhciB2ZXJpZnlQYXJhbWV0ZXIg
PSBjYXNlRGF0YVszXTsKKworICAgIGV4cGVjdGVkVGV4dEV2ZW50RGF0YSA9IGNhc2VEYXRhWzRd
OworCisgICAgY2xlYXJUYXJnZXRzKCk7CisgICAgZHJhZygpOworICAgIGRyb3AoKTsKKyAgICB2
ZXJpZnlGdW5jdGlvbih2ZXJpZnlQYXJhbWV0ZXIpOworfQorCitldmVudFNlbmRlci5kcmFnTW9k
ZSA9IGZhbHNlOworCit0ZXh0SW5wdXRDb3VudCA9IDA7Cit3aWxsQ2FuY2VsVGV4dElucHV0ID0g
ZmFsc2U7Citmb3IgKHZhciBpID0gMDsgaSA8IHByb2NlZWRpbmdUZXN0Q2FzZXMubGVuZ3RoOyAr
K2kpCisgICAgcnVuU2luZ2xlVGVzdChwcm9jZWVkaW5nVGVzdENhc2VzW2ldKTsKK3Nob3VsZEJl
KCJ0ZXh0SW5wdXRDb3VudCIsICJwcm9jZWVkaW5nVGVzdENhc2VzLmxlbmd0aCIpOworCit0ZXh0
SW5wdXRDb3VudCA9IDA7Cit3aWxsQ2FuY2VsVGV4dElucHV0ID0gdHJ1ZTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgY2FuY2VsaW5nVGVzdENhc2VzLmxlbmd0aDsgKytpKQorICAgIHJ1blNpbmdsZVRl
c3QoY2FuY2VsaW5nVGVzdENhc2VzW2ldKTsKK3Nob3VsZEJlKCJ0ZXh0SW5wdXRDb3VudCIsICJj
YW5jZWxpbmdUZXN0Q2FzZXMubGVuZ3RoIik7CisKKy8vIEhpZGVzIGRhdGFzZXQgdG8gbWFrZSBk
dW1wIGNsZWFuLgordGVzdFRhcmdldFJvb3Quc3R5bGUuZGlzcGxheSA9ICJub25lIjsKK3Rlc3RT
b3VyY2VSb290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAyMDc2MDhlOGVlZmUwZjYzY2I4MWRkOTVkMGI4OTllZThiY2M1MDg3Li5hNWI1
OGM0NzNkM2MyYjI4OTg4NjEwODdiYmNiZjE2ZGYzN2FjZGI1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEw
LTA4LTEzICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mzc3OAorICAgICAgICBEcm9wcGluZyBzaG91bGQgZmlyZSB0
ZXh0SW5wdXQgZXZlbnQKKworICAgICAgICBUaGlzIGNoYW5nZToKKyAgICAgICAgLSBhZGRlZCBU
ZXh0RXZlbnQ6Om1faXNEcm9wIHRvIGRpc3Rpbmd1aXNoIGRyb3AtaW5pdGlhdGVkIGV2ZW50cy4K
KyAgICAgICAgLSBhZGRlZCB0byBkaXNwYXRjaCBUZXh0RXZlbnQgZnJvbSBEcmFnQ29udHJvbGxl
ciBiZWZvcmUgbWFraW5nIGEgc2lkZSBlZmZlY3QKKyAgICAgICAgICBhbmQgY2FuY2VsIHRoZSBz
aWRlIGVmZmVjdCBpZiB0aGUgZXZlbnQgcHJldmVudHMgZGVmYXVsdAorCisgICAgICAgIFRlc3Rz
OiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0Lmh0bWwKKyAg
ICAgICAgICAgICAgIGVkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLmh0bWwKKwor
ICAgICAgICAqIGRvbS9UZXh0RXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50
OjpjcmVhdGVGb3JEcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6VGV4dEV2ZW50
KToKKyAgICAgICAgKiBkb20vVGV4dEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZl
bnQ6OmlzRHJvcCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpmaW5kRXZlbnRUYXJnZXRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2
ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAg
ICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmg6CisKIDIwMTAtMDgtMTIgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1RleHRFdmVudC5jcHAgYi9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCmluZGV4
IGU0OWUyYWJkODU5NjkxYzY2NTEyNGFlOTI2ZTVmNmIwMzY2Yzg0YjUuLjY4ZWQ0YjI3MzNhMmJl
MWRhNGQ5NjAyMDg1YjA4YWM1NGUzYjliYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RleHRF
dmVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcApAQCAtNjAsNiArNjAsMTEg
QEAgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0
ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRF
dmVudCh2aWV3LCAiIiwgZGF0YSwgc2hvdWxkU21hcnRSZXBsYWNlLCBzaG91bGRNYXRjaFN0eWxl
KSk7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dEV2ZW50PiBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3Ao
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2aWV3LCBkYXRhLCBUZXh0RXZlbnQ6Oklu
cHV0VHlwZURyb3ApKTsKK30KKwogVGV4dEV2ZW50OjpUZXh0RXZlbnQoKQogICAgIDogbV9pbnB1
dFR5cGUoVGV4dEV2ZW50OjpJbnB1dFR5cGVLZXlib2FyZCkKICAgICAsIG1fc2hvdWxkU21hcnRS
ZXBsYWNlKGZhbHNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmggYi9XZWJD
b3JlL2RvbS9UZXh0RXZlbnQuaAppbmRleCBhNDUwYmMwZjM1NTE3YTU1ZDY3ZmRhODY2NWE4YzVi
YmNjODYwNGY0Li5mMWQyNGU5YzY4MTBmNTVhNDM2Y2VlNmQwNGFlM2RkNDEyYjc5NjI0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAorKysgYi9XZWJDb3JlL2RvbS9UZXh0RXZl
bnQuaApAQCAtMzgsNyArMzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBJ
bnB1dFR5cGVLZXlib2FyZCwgLy8gYW55IG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBh
cmUgbGluZSBicmVha3Mgb25seSwgbm90IHBhcmFncmFwaCBzZXBhcmF0b3JzLgogICAgICAgICAg
ICAgSW5wdXRUeXBlTGluZUJyZWFrLCAvLyBhbnkgdGFiIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQg
YXJlIGJhY2t0YWJzLgogICAgICAgICAgICAgSW5wdXRUeXBlQmFja1RhYiwKLSAgICAgICAgICAg
IElucHV0VHlwZVBhc3RlCisgICAgICAgICAgICBJbnB1dFR5cGVQYXN0ZSwKKyAgICAgICAgICAg
IElucHV0VHlwZURyb3AsCiAgICAgICAgIH07CiAKICAgICAgICAgc3RhdGljIElucHV0VHlwZSBz
ZWxlY3RJbnB1dFR5cGUoYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0JhY2tUYWIpOwpAQCAtNDYs
NiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHRFdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBT
dHJpbmcmIGRhdGEsIElucHV0VHlwZSA9IElucHV0VHlwZUtleWJvYXJkKTsKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBib29sIHNob3VsZFNt
YXJ0UmVwbGFjZSk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRl
Rm9yRnJhZ21lbnRQYXN0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkYXRhLCBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSwgYm9vbCBz
aG91bGRNYXRjaFN0eWxlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBj
cmVhdGVGb3JEcm9wKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcm
IGRhdGEpOwogCiAgICAgICAgIHZpcnR1YWwgflRleHRFdmVudCgpOwogICAgIApAQCAtNTgsNiAr
NjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBJbnB1dFR5cGVMaW5lQnJlYWs7IH0KICAgICAg
ICAgYm9vbCBpc0JhY2tUYWIoKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBJbnB1dFR5
cGVCYWNrVGFiOyB9CiAgICAgICAgIGJvb2wgaXNQYXN0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRUeXBlID09IElucHV0VHlwZVBhc3RlOyB9CisgICAgICAgIGJvb2wgaXNEcm9wKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gSW5wdXRUeXBlRHJvcDsgfQogCiAgICAgICAgIGJvb2wg
c2hvdWxkU21hcnRSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTbWFydFJlcGxhY2U7
IH0KICAgICAgICAgYm9vbCBzaG91bGRNYXRjaFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRNYXRjaFN0eWxlOyB9CkBAIC02NSw5ICs2OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBUZXh0RXZlbnQoKTsKKwogICAgICAgICBUZXh0RXZlbnQo
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIElucHV0VHlwZSA9
IElucHV0VHlwZUtleWJvYXJkKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJh
Y3RWaWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
LAogICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxk
TWF0Y2hTdHlsZSk7CisKICAgICAgICAgSW5wdXRUeXBlIG1faW5wdXRUeXBlOwogICAgICAgICBT
dHJpbmcgbV9kYXRhOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDM0ZDk3ZjE5MTRhMmZiZTNkNDRjZWJi
MmMxMjE1Mzg1YTE0Zjg2MTQuLjE5NjM4NGE0MjA0MmY5YzFhOGY2M2ExMzFiODY2ZmZiZDY1NTlj
YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xMzAsNiArMTMwLDExIEBAIHZvaWQgRWRpdG9yOjpoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKIGJvb2wgRWRpdG9y
OjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiBldmVudCkKIHsKKyAgICAvLyBEZWZhdWx0IGV2
ZW50IGhhbmRsaW5nIGZvciBEcmFnIGFuZCBEcm9wIHdpbGwgYmUgaGFuZGxlZCBieSBEcmFnQ29u
dHJvbGxlcgorICAgIC8vIHNvIHdlIGxlYXZlIHRoZSBldmVudCBmb3IgaXQuCisgICAgaWYgKGV2
ZW50LT5pc0Ryb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKGV2ZW50LT5p
c1Bhc3RlKCkpIHsKICAgICAgICAgaWYgKGV2ZW50LT5wYXN0aW5nRnJhZ21lbnQoKSkKICAgICAg
ICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoZXZlbnQtPnBhc3RpbmdGcmFnbWVu
dCgpLCBmYWxzZSwgZXZlbnQtPnNob3VsZFNtYXJ0UmVwbGFjZSgpLCBldmVudC0+c2hvdWxkTWF0
Y2hTdHlsZSgpKTsKQEAgLTc2MiwxNCArNzY3LDIwIEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQ
UEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xp
CiAgICAgcmV0dXJuICFub0RlZmF1bHRQcm9jZXNzaW5nOwogfQogCi1Ob2RlKiBFZGl0b3I6OmZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAorTm9kZSogRWRpdG9yOjpmaW5kRXZl
bnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsK
LSAgICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50
KCk7CisgICAgTm9kZSogdGFyZ2V0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAg
IGlmICghdGFyZ2V0KQogICAgICAgICB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5ib2R5
KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0YXJn
ZXQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworCit9CisKK05vZGUqIEVkaXRvcjo6ZmluZEV2ZW50
VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdl
dEZyb20obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKIH0KIAogdm9pZCBFZGl0
b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAxM2U2ZGY1NDgyYTI1ZGRhZWYyZWYxMDQ3YTM2MzMw
YzliYzJjYzQyLi4wNmU3NTEzZjdhMDgxYjg3ZmM0YTA0ODI2YjY1YTYyZTVkZTQzMTUzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCkBAIC0yOTksNiArMjk5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFzdGVBc0ZyYWdt
ZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29s
IG1hdGNoU3R5bGUpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmLCBi
b29sIHNtYXJ0UmVwbGFjZSk7CiAKKyAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3Q7CiBwcml2YXRlOgogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIE93blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVyPiBtX2RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBkOTNhMjU2ZTk2ZTUw
YjQ5NGE4NDVjZTJjMjljZDRiNDI5YWQ1OWRiLi4yZjQ4YzdlYTJlZTE1NmIzNGE3Y2NhZjAwNzQz
ODIzNmNkNjdmYWFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTYzLDYgKzYzLDcgQEAK
ICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KQEAgLTM2Myw2ICszNjQsMTUgQEAgc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFn
Q2FyZXQoRnJhbWUqIGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIFIKICAgICBy
ZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCitib29sIERyYWdDb250cm9sbGVyOjpkaXNwYXRj
aFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSogZHJhZ0RhdGEp
Cit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBkcmFnQ2FyZXQobV9wYWdlLT5kcmFnQ2FyZXRDb250
cm9sbGVyKCktPnNlbGVjdGlvbigpKTsKKyAgICBTdHJpbmcgdGV4dCA9IGRyYWdDYXJldC5pc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZSgpID8gIiIgOiBkcmFnRGF0YS0+YXNQbGFpblRleHQoKTsKKyAg
ICBOb2RlKiB0YXJnZXQgPSBpbm5lckZyYW1lLT5lZGl0b3IoKS0+ZmluZEV2ZW50VGFyZ2V0RnJv
bShkcmFnQ2FyZXQpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRv
bVdpbmRvdygpLCB0ZXh0KSwgZWMpOworfQorCiBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVk
ZUVkaXREcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQoZHJhZ0RhdGEpOwpA
QCAtMzc0LDcgKzM4NCw5IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHJhZ0RhdGEqIGRyYWdEYXRhKQogICAgIEludFBvaW50IHBvaW50ID0gbV9kb2N1bWVudFVuZGVy
TW91c2UtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24o
KSk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRVbmRlck1vdXNlKG1fZG9jdW1lbnRV
bmRlck1vdXNlLmdldCgpLCBwb2ludCk7CiAgICAgRnJhbWUqIGlubmVyRnJhbWUgPSBlbGVtZW50
LT5vd25lckRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgQVNTRVJUKGlubmVyRnJhbWUpOworCisg
ICAgaWYgKGlubmVyRnJhbWUgJiYgIWRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoaW5uZXJGcmFt
ZSwgZHJhZ0RhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChkcmFnRGF0YS0+
Y29udGFpbnNDb2xvcigpKSB7CiAgICAgICAgIENvbG9yIGNvbG9yID0gZHJhZ0RhdGEtPmFzQ29s
b3IoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oIGIvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggNzEyZjlhYjNhMzM5YzY5YjUzYTQyYjFjN2M2
ZTQ5ODJlODBmZGEwMy4uMGU5MGE1MjlhZTUyNDEzMzkxMmRlYzQ0Y2MxOWUxNTJkMmE4ZTA3YiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBwcml2
YXRlOgorICAgICAgICBib29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFn
RGF0YSopOwogICAgICAgICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7CiAgICAgICAg
IGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSopOwogICAgICAgICBEcmFnT3BlcmF0aW9u
IGRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64462</attachid>
            <date>2010-08-15 19:26:48 -0700</date>
            <delta_ts>2010-08-15 23:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43778-20100816112646.patch</filename>
            <type>text/plain</type>
            <size>22705</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNWM0ODBiYmM2N2U1M2VmM2EwY2NmMjIwOTg4MTY1ZjRhODk5N2NiLi5lOTU0ZjI4
Y2I1Njk3Yjk0OTgyYzVjMzIzOThiM2RiOGE1MDRhNjBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTMgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzc4CisgICAgICAgIERyb3BwaW5nIHNob3VsZCBm
aXJlIHRleHRJbnB1dCBldmVudC4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kcm9w
LXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3Qu
aHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVu
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10ZXN0
cy9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QuanM6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5qczogQWRkZWQuCisK
IDIwMTAtMDgtMTUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZGRkYjc1MGQ3Y2ViMTIyYzQzZTRhZWM0NTExZjZhMTE0NWEzZWU3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK1RoaXMgdGVzdHMgdGhhdCBEcmFnIGRyb3AgZmly
ZXMgdGV4dElucHV0IGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZh
bHVlIGlzICdQbGFpbkhlbGxvJworUEFTUyBldmVudC5kYXRhIGlzICdQbGFpbkhlbGxvJworUEFT
UyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJ1BsYWluSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEg
aXMgJycKK1BBU1MgMCA8PSB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MLmluZGV4T2YoJ1Bs
YWluSGVsbG8nKSBpcyB0cnVlCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1JpY2hIZWxsbycKK1BBU1Mg
dGVzdFRhcmdldFRleHRhcmVhLnZhbHVlIGlzICdSaWNoSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEg
aXMgJ1JpY2hIZWxsbycKK1BBU1MgdGVzdFRhcmdldElucHV0LnZhbHVlIGlzICdSaWNoSGVsbG8n
CitQQVNTIGV2ZW50LmRhdGEgaXMgJycKK1BBU1MgMCA8PSB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5u
ZXJIVE1MLmluZGV4T2YoJzxiPlJpY2g8L2I+SGVsbG8nKSBpcyB0cnVlCitQQVNTIHRleHRJbnB1
dENvdW50IGlzIHByb2NlZWRpbmdUZXN0Q2FzZXMubGVuZ3RoCitQQVNTIGV2ZW50LmRhdGEgaXMg
J1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1ZSBpcyAnJworUEFTUyBl
dmVudC5kYXRhIGlzICdQbGFpbkhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMg
JycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJI
VE1MIGlzICdwbGFjZWhvbGRlcicKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJworUEFT
UyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmlj
aEhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0
YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIGlzICdwbGFjZWhvbGRl
cicKK1BBU1MgdGV4dElucHV0Q291bnQgaXMgY2FuY2VsaW5nVGVzdENhc2VzLmxlbmd0aAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLXNpZGVl
ZmZlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3At
dGV4dC1ldmVudHMtc2lkZWVmZmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY1MDk2MmQ3
ZGQ1ODZhZDgyYjA3NzllZmI4ZTk4ODM5OTNiYzNjZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLXNpZGVlZmZlY3QtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0Vuc3VyZSBzYWZldHkgb24gc2lkZS1lZmZlY3Qg
b24gZHJvcC1pbml0aWF0ZWQgVGV4dEV2ZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIGlzICdpbml0aWFsVmFsdWUn
CitQQVNTIHRlc3RUYXJnZXRJRnJhbWVEb2N1bWVudC5ib2R5LmlubmVySFRNTCBpcyAnaW5pdGlh
bEJvZHknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1l
dmVudHMtc2lkZWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ry
b3AtdGV4dC1ldmVudHMtc2lkZWVmZmVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1Mjk1MGFiZjNlNzlh
MDY5MTQ5Nzc0ZTRhMjIyNzc2M2UyNWE0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0Lmh0bWwKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1ldmVudHMuaHRtbCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTY3OGQwMWM1ZWI2OWFmNmI5NWI5MTE4ZDA0MzdkODBhY2Q4NjlmMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtZXZlbnRzLmh0bWwK
QEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0
LmpzIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10ZXN0cy9kcm9wLXRl
eHQtZXZlbnRzLXNpZGVlZmZlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ1YzdlZjQxMGIxMzUzNzUwN2Jm
ZTA4NTM1NThiNDAwYWJjOTFkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRp
bmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy1zaWRlZWZmZWN0Lmpz
CkBAIC0wLDAgKzEsOTEgQEAKK2Rlc2NyaXB0aW9uKCdFbnN1cmUgc2FmZXR5IG9uIHNpZGUtZWZm
ZWN0IG9uIGRyb3AtaW5pdGlhdGVkIFRleHRFdmVudC4nKTsKKworZnVuY3Rpb24gdG9TdHJpbmdM
aXRlcmFsKHN0cikKK3sKKyAgIHJldHVybiAiJyIgKyBzdHIgKyAiJyI7Cit9CisKK3ZhciB0ZXN0
U291cmNlUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZCh0ZXN0U291cmNlUm9vdCk7CisKK3ZhciB0ZXN0VGFyZ2V0Um9vdCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9
ICI8ZGl2PjxzcGFuIGlkPSd0YXJnZXRFZGl0YWJsZScgY29udGVudEVkaXRhYmxlPmluaXRpYWxW
YWx1ZTwvc3Bhbj48L2Rpdj4iOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9ICI8aWZyYW1l
IGlkPSd0YXJnZXRJRnJhbWUnIHNyYz0nZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwiICsg
ZW5jb2RlVVJJKCI8aHRtbD48L2h0bWw+IikgKyAiJz48L2lmcmFtZT4iOworZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZCh0ZXN0VGFyZ2V0Um9vdCk7CisKK3Rlc3RUYXJnZXRFZGl0YWJsZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXRFZGl0YWJsZSIpOwordGVzdFRhcmdldElGcmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXRJRnJhbWUiKTsKK3Rlc3RUYXJnZXRJ
RnJhbWVEb2N1bWVudCA9IHRlc3RUYXJnZXRJRnJhbWUuY29udGVudERvY3VtZW50OwordGVzdFRh
cmdldElGcmFtZURvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gImluaXRpYWxCb2R5IjsKK3Rlc3RU
YXJnZXRJRnJhbWVEb2N1bWVudC5kZXNpZ25Nb2RlID0gIm9uIjsKKworZnVuY3Rpb24gaGFuZGxl
clJlbW92aW5nVGFyZ2V0KGV2ZW50KQoreworICAgIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGV2ZW50LnRhcmdldCk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZXJSZW1vdmluZ0lG
cmFtZShldmVudCkKK3sKKyAgICB0ZXN0VGFyZ2V0SUZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodGVzdFRhcmdldElGcmFtZSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdGcm9tKGVsZW1lbnQpCit7
CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8g
MjsKKyAgICB2YXIgeSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQg
LyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworICAgIGV2ZW50U2VuZGVy
Lm1vdXNlRG93bigpOworCisgICAgLy8gTWFrZXMgZHJhZyBoYXBwZW4KKyAgICB2YXIgbWVhbmlu
Z2xlc3NEZWx0YSA9IDEwOyAKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2FyZCg1MDApOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHggKyBtZWFuaW5nbGVzc0RlbHRhICwgeSArIG1lYW5p
bmdsZXNzRGVsdGEpOworfQorCitmdW5jdGlvbiBkcm9wVG8oZWxlbWVudCkKK3sKKyAgICB2YXIg
eCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZh
ciB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAg
CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91
c2VVcCgpOworfQorCitmdW5jdGlvbiBkcmFnUGxhaW5UZXh0KCkKK3sKKyAgICB2YXIgc2VsZWN0
aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCisgICAgdGVzdFNvdXJjZVJvb3QuaW5uZXJI
VE1MID0gIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nUGxhaW5IZWxsbycgaWQ9J3NyYycgLz4i
OworICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcmMiKTsKKyAgICBp
bnB1dC5mb2N1cygpOworICAgIHNlbGVjdGlvbi5tb2RpZnkoImV4dGVuZCIsICJmb3J3YXJkIiwg
ImxpbmUiKTsKKyAgICBkcmFnRnJvbShpbnB1dCk7Cit9CisKK2Z1bmN0aW9uIGRyb3BUb1Rhcmdl
dEVkaXRhYmxlKCkKK3sKKyAgICBkcm9wVG8odGVzdFRhcmdldEVkaXRhYmxlKTsKK30KKworZnVu
Y3Rpb24gZHJvcFRvVGFyZ2V0SUZyYW1lKCkKK3sKKyAgICBkcm9wVG8odGVzdFRhcmdldElGcmFt
ZSk7Cit9CisKK3Rlc3RUYXJnZXRFZGl0YWJsZS5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQi
LCBoYW5kbGVyUmVtb3ZpbmdUYXJnZXQpOworZHJhZ1BsYWluVGV4dCgpOworZHJvcFRvVGFyZ2V0
RWRpdGFibGUoKTsKKy8vIGRldGFjaGVkIG5vZGUgc2hvdWxkbid0IGdldCBkcm9wcGVkIHZhbHVl
CitzaG91bGRCZSgidGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCIsIHRvU3RyaW5nTGl0ZXJh
bCgiaW5pdGlhbFZhbHVlIikpOworCit0ZXN0VGFyZ2V0SUZyYW1lRG9jdW1lbnQuYm9keS5hZGRF
dmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLCBoYW5kbGVyUmVtb3ZpbmdJRnJhbWUpOworZHJhZ1Bs
YWluVGV4dCgpOworZHJvcFRvVGFyZ2V0SUZyYW1lKCk7CisvLyBkZXRhY2hlZCBmcmFtZSBzaG91
bGRuJ3QgZ2V0IGRyb3BwZWQgdmFsdWUKK3Nob3VsZEJlKCJ0ZXN0VGFyZ2V0SUZyYW1lRG9jdW1l
bnQuYm9keS5pbm5lckhUTUwiLCB0b1N0cmluZ0xpdGVyYWwoImluaXRpYWxCb2R5IikpOworCisv
LyBIaWRlcyBkYXRhc2V0IHRvIG1ha2UgZHVtcCBjbGVhbi4KK3Rlc3RUYXJnZXRSb290LnN0eWxl
LmRpc3BsYXkgPSAibm9uZSI7Cit0ZXN0U291cmNlUm9vdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0
LXRlc3RzL2Ryb3AtdGV4dC1ldmVudHMuanMgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9h
cmQvc2NyaXB0LXRlc3RzL2Ryb3AtdGV4dC1ldmVudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWViNTQ4ODg4
Mzc0Mzk4MDhlMWZiNjJjMmFhNjZlYjZiZGIyOWZhYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZHJvcC10ZXh0LWV2ZW50cy5q
cwpAQCAtMCwwICsxLDE3MyBAQAorZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgdGhhdCBEcmFnIGRy
b3AgZmlyZXMgdGV4dElucHV0IGV2ZW50cy4nKTsKKworZnVuY3Rpb24gdG9TdHJpbmdMaXRlcmFs
KHN0cikKK3sKKyAgIHJldHVybiAiJyIgKyBzdHIgKyAiJyI7Cit9CisKK3ZhciB3aWxsQ2FuY2Vs
VGV4dElucHV0ID0gZmFsc2U7Cit2YXIgdGV4dElucHV0Q291bnQgPSAwOwordmFyIGV4cGVjdGVk
VGV4dEV2ZW50RGF0YSA9ICIiOworCitmdW5jdGlvbiBkcm9wcGluZ1RleHRJbnB1dEhhbmRsZXIo
ZXZ0KQoreworICAgIHNob3VsZEJlKCJldmVudC5kYXRhIiwgdG9TdHJpbmdMaXRlcmFsKGV4cGVj
dGVkVGV4dEV2ZW50RGF0YSkpOworICAgIHRleHRJbnB1dENvdW50Kys7CisgICAgaWYgKHdpbGxD
YW5jZWxUZXh0SW5wdXQpCisgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworfQorCit2YXIg
dGVzdFNvdXJjZVJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQodGVzdFNvdXJjZVJvb3QpOworCit2YXIgdGVzdFRhcmdldFJvb3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK3Rlc3RUYXJnZXRSb290LmlubmVySFRN
TCArPSAiPGlucHV0IHR5cGU9J3RleHQnIGlkPSd0YXJnZXRJbnB1dCcgdmFsdWU9Jyc+IjsKK3Rl
c3RUYXJnZXRSb290LmlubmVySFRNTCArPSAiPGRpdj48c3BhbiBpZD0ndGFyZ2V0RWRpdGFibGUn
IGNvbnRlbnRFZGl0YWJsZT48L3NwYW4+PC9kaXY+IjsKK3Rlc3RUYXJnZXRSb290LmlubmVySFRN
TCArPSAiPHRleHRhcmVhIGlkPSd0YXJnZXRUZXh0YXJlYScgPjwvdGV4dGFyZWE+IjsKK2RvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdFRhcmdldFJvb3QpOworCit0ZXN0VGFyZ2V0RWRpdGFi
bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0RWRpdGFibGUiKTsKK3Rlc3RUYXJn
ZXRFZGl0YWJsZS5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLCBkcm9wcGluZ1RleHRJbnB1
dEhhbmRsZXIpOwordGVzdFRhcmdldElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
cmdldElucHV0Iik7Cit0ZXN0VGFyZ2V0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0
IiwgZHJvcHBpbmdUZXh0SW5wdXRIYW5kbGVyKTsKK3Rlc3RUYXJnZXRUZXh0YXJlYSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXRUZXh0YXJlYSIpOwordGVzdFRhcmdldFRleHRhcmVh
LmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1dCIsIGRyb3BwaW5nVGV4dElucHV0SGFuZGxlcik7
CisKK3ZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisKK2Z1bmN0aW9uIGNs
ZWFyVGFyZ2V0cygpCit7CisgICAgdGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCA9ICJwbGFj
ZWhvbGRlciI7IC8vIGdpdmUgc29tZSB0ZXh0IHRvIGhhdmUgYW4gYXJlYSB0byBkcm9wCisgICAg
dGVzdFRhcmdldElucHV0LnZhbHVlID0gIiI7CisgICAgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVl
ID0gIiI7Cit9CisKK2Z1bmN0aW9uIGRyYWdGcm9tKGVsZW1lbnQpCit7CisgICAgdmFyIHggPSBl
bGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgeSA9
IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwor
CisgICAgLy8gTWFrZXMgZHJhZyBoYXBwZW4KKyAgICB2YXIgbWVhbmluZ2xlc3NEZWx0YSA9IDEw
OyAKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2FyZCg1MDApOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKHggKyBtZWFuaW5nbGVzc0RlbHRhICwgeSArIG1lYW5pbmdsZXNzRGVsdGEpOwor
fQorCitmdW5jdGlvbiBkcm9wVG8oZWxlbWVudCkKK3sKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zm
c2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5ID0gZWxlbWVudC5v
ZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCitmdW5jdGlv
biBkcmFnUGxhaW5UZXh0KCkKK3sKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGlu
cHV0IHR5cGU9J3RleHQnIHZhbHVlPSdQbGFpbkhlbGxvJyBpZD0nc3JjJyAvPiI7CisgICAgdmFy
IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIGlucHV0LmZvY3Vz
KCk7CisgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGluZSIpOwor
ICAgIGRyYWdGcm9tKGlucHV0KTsKK30KKworZnVuY3Rpb24gZHJhZ1JpY2hUZXh0KCkKK3sKKyAg
ICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGRpdiBpZD0nc3JjJyBjb250ZW50RWRpdGFi
bGU+PGI+UmljaDwvYj5IZWxsbzwvZGl2PiI7CisgICAgdmFyIGVkaXRhYmxlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVk
aXRhYmxlLCAwLCBlZGl0YWJsZSwgMCk7CisgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwg
ImZvcndhcmQiLCAibGluZSIpOworICAgIGRyYWdGcm9tKGVkaXRhYmxlKTsKK30KKworZnVuY3Rp
b24gZHJvcFRvVGFyZ2V0RWRpdGFibGUoKQoreworICAgIHZhciBlZGl0YWJsZSA9IHRlc3RUYXJn
ZXRFZGl0YWJsZTsKKyAgICBkcm9wVG8oZWRpdGFibGUpOworfQorCitmdW5jdGlvbiB0YXJnZXRF
ZGl0YWJsZVNob3VsZEhhdmUodmFsdWUpCit7CisgICAgc2hvdWxkQmVUcnVlKCIwIDw9IHRlc3RU
YXJnZXRFZGl0YWJsZS5pbm5lckhUTUwuaW5kZXhPZigiICsgdG9TdHJpbmdMaXRlcmFsKHZhbHVl
KSArICIpIik7Cit9CisKK2Z1bmN0aW9uIHRhcmdldEVkaXRhYmxlU2hvdWxkU3RheUFzSXMoKQor
eworICAgIHNob3VsZEJlKCJ0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIiwgdG9TdHJpbmdM
aXRlcmFsKCJwbGFjZWhvbGRlciIpKTsKK30KKworZnVuY3Rpb24gZHJvcFRvVGFyZ2V0SW5wdXQo
KQoreworICAgIHZhciBpbnB1dCA9IHRlc3RUYXJnZXRJbnB1dDsKKyAgICBkcm9wVG8oaW5wdXQp
OworfQorCitmdW5jdGlvbiB0YXJnZXRJbnB1dFNob3VsZEhhdmUodmFsdWUpCit7CisgICAgc2hv
dWxkQmUoInRlc3RUYXJnZXRJbnB1dC52YWx1ZSIsIHRvU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpOwor
fQorCitmdW5jdGlvbiBkcm9wVG9UYXJnZXRUZXh0YXJlYSgpCit7CisgICAgdmFyIHRleHRhcmVh
ID0gdGVzdFRhcmdldFRleHRhcmVhOworICAgIGRyb3BUbyh0ZXh0YXJlYSk7Cit9CisKK2Z1bmN0
aW9uIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSh2YWx1ZSkKK3sKKyAgICBzaG91bGRCZSgidGVz
dFRhcmdldFRleHRhcmVhLnZhbHVlIiwgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSk7Cit9CisKK3Zh
ciBwcm9jZWVkaW5nVGVzdENhc2VzID0gWworICAgIFtkcmFnUGxhaW5UZXh0LCBkcm9wVG9UYXJn
ZXRUZXh0YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiUGxhaW5IZWxsbyIsICJQbGFp
bkhlbGxvIl0sCisgICAgW2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldElucHV0LCB0YXJnZXRJ
bnB1dFNob3VsZEhhdmUsICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbZHJhZ1Bs
YWluVGV4dCwgZHJvcFRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwg
IlBsYWluSGVsbG8iLCAiIl0sCisgICAgW2RyYWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0VGV4dGFy
ZWEsIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSwgIlJpY2hIZWxsbyIsICJSaWNoSGVsbG8iXSwK
KyAgICBbZHJhZ1JpY2hUZXh0LCBkcm9wVG9UYXJnZXRJbnB1dCwgdGFyZ2V0SW5wdXRTaG91bGRI
YXZlLCAiUmljaEhlbGxvIiwgIlJpY2hIZWxsbyJdLAorICAgIFtkcmFnUmljaFRleHQsIGRyb3BU
b1RhcmdldEVkaXRhYmxlLCB0YXJnZXRFZGl0YWJsZVNob3VsZEhhdmUsICI8Yj5SaWNoPC9iPkhl
bGxvIiwgIiJdLAorXTsKKwordmFyIGNhbmNlbGluZ1Rlc3RDYXNlcyA9IFsKKyAgICBbZHJhZ1Bs
YWluVGV4dCwgZHJvcFRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSwg
IiIsICJQbGFpbkhlbGxvIl0sCisgICAgW2RyYWdQbGFpblRleHQsIGRyb3BUb1RhcmdldElucHV0
LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICIiLCAiUGxhaW5IZWxsbyJdLAorICAgIFtkcmFnUGxh
aW5UZXh0LCBkcm9wVG9UYXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRTdGF5QXNJ
cywgIiIsICIiXSwKKyAgICBbZHJhZ1JpY2hUZXh0LCBkcm9wVG9UYXJnZXRUZXh0YXJlYSwgdGFy
Z2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiIiwgIlJpY2hIZWxsbyJdLAorICAgIFtkcmFnUmljaFRl
eHQsIGRyb3BUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICIiLCAiUmljaEhl
bGxvIl0sCisgICAgW2RyYWdSaWNoVGV4dCwgZHJvcFRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVk
aXRhYmxlU2hvdWxkU3RheUFzSXMsICIiLCAiIl0sCitdOworCitmdW5jdGlvbiBydW5TaW5nbGVU
ZXN0KGNhc2VEYXRhKQoreworICAgIHZhciBkcmFnID0gY2FzZURhdGFbMF07CisgICAgdmFyIGRy
b3AgPSBjYXNlRGF0YVsxXTsKKyAgICB2YXIgdmVyaWZ5RnVuY3Rpb24gPSBjYXNlRGF0YVsyXTsK
KyAgICB2YXIgdmVyaWZ5UGFyYW1ldGVyID0gY2FzZURhdGFbM107CisKKyAgICBleHBlY3RlZFRl
eHRFdmVudERhdGEgPSBjYXNlRGF0YVs0XTsKKworICAgIGNsZWFyVGFyZ2V0cygpOworICAgIGRy
YWcoKTsKKyAgICBkcm9wKCk7CisgICAgdmVyaWZ5RnVuY3Rpb24odmVyaWZ5UGFyYW1ldGVyKTsK
K30KKworZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKwordGV4dElucHV0Q291bnQgPSAw
Oword2lsbENhbmNlbFRleHRJbnB1dCA9IGZhbHNlOworZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9j
ZWVkaW5nVGVzdENhc2VzLmxlbmd0aDsgKytpKQorICAgIHJ1blNpbmdsZVRlc3QocHJvY2VlZGlu
Z1Rlc3RDYXNlc1tpXSk7CitzaG91bGRCZSgidGV4dElucHV0Q291bnQiLCAicHJvY2VlZGluZ1Rl
c3RDYXNlcy5sZW5ndGgiKTsKKwordGV4dElucHV0Q291bnQgPSAwOword2lsbENhbmNlbFRleHRJ
bnB1dCA9IHRydWU7Citmb3IgKHZhciBpID0gMDsgaSA8IGNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5n
dGg7ICsraSkKKyAgICBydW5TaW5nbGVUZXN0KGNhbmNlbGluZ1Rlc3RDYXNlc1tpXSk7CitzaG91
bGRCZSgidGV4dElucHV0Q291bnQiLCAiY2FuY2VsaW5nVGVzdENhc2VzLmxlbmd0aCIpOworCisv
LyBIaWRlcyBkYXRhc2V0IHRvIG1ha2UgZHVtcCBjbGVhbi4KK3Rlc3RUYXJnZXRSb290LnN0eWxl
LmRpc3BsYXkgPSAibm9uZSI7Cit0ZXN0U291cmNlUm9vdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM4M2U2MjQwODUwZDgwYjA1NTQ2
YTVkNWMzZDU0Yzc3ZDhjZWQ3OS4uZDBkMzY0MjczZTRiNmVkZTAwZGJkMDFkZDI0YzFiMjI5Y2Q1
ZjZlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wOC0xMyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NzgKKyAgICAg
ICAgRHJvcHBpbmcgc2hvdWxkIGZpcmUgdGV4dElucHV0IGV2ZW50CisKKyAgICAgICAgVGhpcyBj
aGFuZ2U6CisgICAgICAgIC0gYWRkZWQgVGV4dEV2ZW50OjptX2lzRHJvcCB0byBkaXN0aW5ndWlz
aCBkcm9wLWluaXRpYXRlZCBldmVudHMuCisgICAgICAgIC0gYWRkZWQgdG8gZGlzcGF0Y2ggVGV4
dEV2ZW50IGZyb20gRHJhZ0NvbnRyb2xsZXIgYmVmb3JlIG1ha2luZyBhIHNpZGUgZWZmZWN0Cisg
ICAgICAgICAgYW5kIGNhbmNlbCB0aGUgc2lkZSBlZmZlY3QgaWYgdGhlIGV2ZW50IHByZXZlbnRz
IGRlZmF1bHQKKworICAgICAgICBUZXN0czogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC1l
dmVudHMtc2lkZWVmZmVjdC5odG1sCisgICAgICAgICAgICAgICBlZGl0aW5nL3Bhc3RlYm9hcmQv
ZHJvcC10ZXh0LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpUZXh0RXZlbnQpOgorICAgICAgICAqIGRvbS9UZXh0RXZl
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNEcm9wKTogQWRkZWQuCisgICAg
ICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5k
bGVUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRG
cm9tKTogRXh0cmFjdGVkIGZyb20gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKTogCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1
dEV2ZW50Rm9yKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyk6IEFkZGVkIGFuIGV2ZW50IGRpc3BhdGNoIHBhdGguCisgICAgICAgICog
cGFnZS9EcmFnQ29udHJvbGxlci5oOgorCiAyMDEwLTA4LTE1ICBLZXZpbiBPbGxpdmllciAgPGtl
dmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQgZml4LCBhZGQgbWlz
c2luZyBoZWFkZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwIGIvV2Vi
Q29yZS9kb20vVGV4dEV2ZW50LmNwcAppbmRleCBlNDllMmFiZDg1OTY5MWM2NjUxMjRhZTkyNmU1
ZjZiMDM2NmM4NGI1Li42OGVkNGIyNzMzYTJiZTFkYTRkOTYwMjA4NWIwOGFjNTRlM2I5YmIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Rl
eHRFdmVudC5jcHAKQEAgLTYwLDYgKzYwLDExIEBAIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBUZXh0
RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgIiIsIGRhdGEsIHNob3VsZFNt
YXJ0UmVwbGFjZSwgc2hvdWxkTWF0Y2hTdHlsZSkpOwogfQogCitQYXNzUmVmUHRyPFRleHRFdmVu
dD4gVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZl
bnQodmlldywgZGF0YSwgVGV4dEV2ZW50OjpJbnB1dFR5cGVEcm9wKSk7Cit9CisKIFRleHRFdmVu
dDo6VGV4dEV2ZW50KCkKICAgICA6IG1faW5wdXRUeXBlKFRleHRFdmVudDo6SW5wdXRUeXBlS2V5
Ym9hcmQpCiAgICAgLCBtX3Nob3VsZFNtYXJ0UmVwbGFjZShmYWxzZSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1RleHRFdmVudC5oIGIvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKaW5kZXggYTQ1
MGJjMGYzNTUxN2E1NWQ2N2ZkYTg2NjVhOGM1YmJjYzg2MDRmNC4uZjFkMjRlOWM2ODEwZjU1YTQz
NmNlZTZkMDRhZTNkZDQxMmI3OTYyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dEV2ZW50
LmgKKysrIGIvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKQEAgLTM4LDcgKzM4LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgSW5wdXRUeXBlS2V5Ym9hcmQsIC8vIGFueSBuZXds
aW5lIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQgYXJlIGxpbmUgYnJlYWtzIG9ubHksIG5vdCBwYXJh
Z3JhcGggc2VwYXJhdG9ycy4KICAgICAgICAgICAgIElucHV0VHlwZUxpbmVCcmVhaywgLy8gYW55
IHRhYiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IGFyZSBiYWNrdGFicy4KICAgICAgICAgICAgIElu
cHV0VHlwZUJhY2tUYWIsCi0gICAgICAgICAgICBJbnB1dFR5cGVQYXN0ZQorICAgICAgICAgICAg
SW5wdXRUeXBlUGFzdGUsCisgICAgICAgICAgICBJbnB1dFR5cGVEcm9wLAogICAgICAgICB9Owog
CiAgICAgICAgIHN0YXRpYyBJbnB1dFR5cGUgc2VsZWN0SW5wdXRUeXBlKGJvb2wgaXNMaW5lQnJl
YWssIGJvb2wgaXNCYWNrVGFiKTsKQEAgLTQ2LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRy
PEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBJbnB1dFR5cGUgPSBJbnB1
dFR5cGVLZXlib2FyZCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3Jl
YXRlRm9yUGxhaW5UZXh0UGFzdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0
IFN0cmluZyYgZGF0YSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UpOwogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckZyYWdtZW50UGFzdGUoUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGF0YSwgYm9v
bCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlRm9yRHJvcChQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgICAgICB2aXJ0dWFsIH5U
ZXh0RXZlbnQoKTsKICAgICAKQEAgLTU4LDYgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0g
SW5wdXRUeXBlTGluZUJyZWFrOyB9CiAgICAgICAgIGJvb2wgaXNCYWNrVGFiKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnB1dFR5cGUgPT0gSW5wdXRUeXBlQmFja1RhYjsgfQogICAgICAgICBib29sIGlz
UGFzdGUoKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBJbnB1dFR5cGVQYXN0ZTsgfQor
ICAgICAgICBib29sIGlzRHJvcCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IElucHV0
VHlwZURyb3A7IH0KIAogICAgICAgICBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkU21hcnRSZXBsYWNlOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkTWF0Y2hT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWF0Y2hTdHlsZTsgfQpAQCAtNjUsOSArNjgs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgVGV4dEV2
ZW50KCk7CisKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29u
c3QgU3RyaW5nJiBkYXRhLCBJbnB1dFR5cGUgPSBJbnB1dFR5cGVLZXlib2FyZCk7CiAgICAgICAg
IFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwKICAgICAgICAgICAgICAgICAgIGJvb2wgc2hv
dWxkU21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOworCiAgICAgICAgIElucHV0
VHlwZSBtX2lucHV0VHlwZTsKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApp
bmRleCAzNGQ5N2YxOTE0YTJmYmUzZDQ0Y2ViYjJjMTIxNTM4NWExNGY4NjE0Li4xOTYzODRhNDIw
NDJmOWMxYThmNjNhMTMxYjg2NmZmYmQ2NTU5Y2M0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTMwLDYg
KzEzMCwxMSBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogCiBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KFRleHRFdmVudCog
ZXZlbnQpCiB7CisgICAgLy8gRGVmYXVsdCBldmVudCBoYW5kbGluZyBmb3IgRHJhZyBhbmQgRHJv
cCB3aWxsIGJlIGhhbmRsZWQgYnkgRHJhZ0NvbnRyb2xsZXIKKyAgICAvLyBzbyB3ZSBsZWF2ZSB0
aGUgZXZlbnQgZm9yIGl0LgorICAgIGlmIChldmVudC0+aXNEcm9wKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIGlmIChldmVudC0+aXNQYXN0ZSgpKSB7CiAgICAgICAgIGlmIChldmVu
dC0+cGFzdGluZ0ZyYWdtZW50KCkpCiAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50KGV2ZW50LT5wYXN0aW5nRnJhZ21lbnQoKSwgZmFsc2UsIGV2ZW50LT5zaG91bGRTbWFy
dFJlcGxhY2UoKSwgZXZlbnQtPnNob3VsZE1hdGNoU3R5bGUoKSk7CkBAIC03NjIsMTQgKzc2Nywy
MCBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saQogICAgIHJldHVybiAhbm9EZWZhdWx0UHJvY2Vz
c2luZzsKIH0KIAotTm9kZSogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkg
Y29uc3QKK05vZGUqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7Ci0gICAgTm9kZSogdGFyZ2V0ID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnN0YXJ0KCkuZWxlbWVudCgpOworICAgIE5vZGUqIHRhcmdldCA9IHNlbGVj
dGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgdGFyZ2V0
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gdGFyZ2V0LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKwor
fQorCitOb2RlKiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9tKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmggYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMTNl
NmRmNTQ4MmEyNWRkYWVmMmVmMTA0N2EzNjMzMGM5YmMyY2M0Mi4uMDZlNzUxM2Y3YTA4MWI4N2Zj
NGEwNDgyNmI2NWE2MmU1ZGU0MzE1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMjk5LDYgKzI5OSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKICAgICB2b2lkIHBhc3Rl
QXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzbWFydFJlcGxhY2UpOwogCisgICAgTm9k
ZSogZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
IGNvbnN0OwogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBPd25QdHI8RGVsZXRl
QnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAKaW5kZXggZDkzYTI1NmU5NmU1MGI0OTRhODQ1Y2UyYzI5Y2Q0YjQyOWFkNTlkYi4u
YmJmNGZlZDYxYzQ5NzM5MjUxNzkwNDM4YzViZWJjNWJkYzZkOTQzYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUg
IlRleHRFdmVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAibWFya3Vw
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0zNjMsNiArMzY0LDE1IEBAIHN0
YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlzaWJsZVNl
bGVjdGlvbiYgZHJhZ0NhcmV0LCBSCiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCktPmlz
Tm9uZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6ZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5u
ZXJGcmFtZSwgRHJhZ0RhdGEqIGRyYWdEYXRhKQoreworICAgIFZpc2libGVTZWxlY3Rpb24gZHJh
Z0NhcmV0KG1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5zZWxlY3Rpb24oKSk7CisgICAg
U3RyaW5nIHRleHQgPSBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/ICIiIDog
ZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KCk7CisgICAgTm9kZSogdGFyZ2V0ID0gaW5uZXJGcmFtZS0+
ZWRpdG9yKCktPmZpbmRFdmVudFRhcmdldEZyb20oZHJhZ0NhcmV0KTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6
Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1lLT5kb21XaW5kb3coKSwgdGV4dCksIGVjKTsKK30KKwog
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEp
CiB7CiAgICAgQVNTRVJUKGRyYWdEYXRhKTsKQEAgLTM3NiwxMiArMzg2LDEzIEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQogICAgIEZy
YW1lKiBpbm5lckZyYW1lID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpOwogICAg
IEFTU0VSVChpbm5lckZyYW1lKTsKIAorICAgIGlmICghZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZv
cihpbm5lckZyYW1lLCBkcmFnRGF0YSkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYg
KGRyYWdEYXRhLT5jb250YWluc0NvbG9yKCkpIHsKICAgICAgICAgQ29sb3IgY29sb3IgPSBkcmFn
RGF0YS0+YXNDb2xvcigpOwogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGlubmVyUmFuZ2UgPSBpbm5lckZy
YW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbV9kb2N1bWVudFVuZGVyTW91c2UtPmNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmgKaW5kZXggNzEyZjlhYjNhMzM5YzY5YjUzYTQyYjFjN2M2ZTQ5ODJlODBmZGEwMy4u
MGU5MGE1MjlhZTUyNDEzMzkxMmRlYzQ0Y2MxOWUxNTJkMmE4ZTA3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBwcml2YXRlOgorICAgICAgICBi
b29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFnRGF0YSopOwogICAgICAg
ICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7CiAgICAgICAgIGJvb2wgY29uY2x1ZGVF
ZGl0RHJhZyhEcmFnRGF0YSopOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdFbnRlcmVkT3JV
cGRhdGVkKERyYWdEYXRhKik7Cg==
</data>
<flag name="review"
          id="53037"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>