<?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>15277</bug_id>
          
          <creation_ts>2007-09-25 00:02:01 -0700</creation_ts>
          <short_desc>COL element in table has 0 for offsetWidth</short_desc>
          <delta_ts>2014-02-21 14:33:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tables</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug, HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bob Rose">bobbrose</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>frankmanno</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>korisu</cc>
    
    <cc>zcorpan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17</commentid>
    <comment_count>0</comment_count>
    <who name="Bob Rose">bobbrose</who>
    <bug_when>2007-09-25 00:02:01 -0700</bug_when>
    <thetext>The offsetWidth value doesn&apos;t seem to ever change from 0.
Code sample attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13</commentid>
    <comment_count>1</comment_count>
      <attachid>16383</attachid>
    <who name="Bob Rose">bobbrose</who>
    <bug_when>2007-09-25 00:05:46 -0700</bug_when>
    <thetext>Created attachment 16383
Stand alone test case shows COL element does not return offsetWidth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-09-25 00:41:09 -0700</bug_when>
    <thetext>Thanks for the test case!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90465</commentid>
    <comment_count>3</comment_count>
    <who name="Bob Rose">bobbrose</who>
    <bug_when>2008-09-07 22:35:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Thanks for the test case!
&gt; 

Hey folks, any update on this bug?  I filed it almost a year ago. It&apos;s somewhat important for doing dynamic table cell adjustments.

thanks!
Bob</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183310</commentid>
    <comment_count>4</comment_count>
    <who name="Frank Manno">frankmanno</who>
    <bug_when>2010-01-21 14:04:26 -0800</bug_when>
    <thetext>I&apos;ve just run into this bug myself.  Any attempts at querying a &lt;col&gt; element&apos;s offsetWidth returns zero.  Same goes for attempting to read the CSS style associated with the &lt;col&gt; element (using getComputedStyle).

Any word on this bug?  I would greatly appreciate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183320</commentid>
    <comment_count>5</comment_count>
    <who name="Frank Manno">frankmanno</who>
    <bug_when>2010-01-21 14:26:52 -0800</bug_when>
    <thetext>As an addendum... I&apos;m running Safari v4.0.4 (5531.21.10).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184169</commentid>
    <comment_count>6</comment_count>
      <attachid>47314</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-01-24 23:04:20 -0800</bug_when>
    <thetext>Created attachment 47314
Patch

Work in progress.

Passes the stand alone test case &lt;https://bugs.webkit.org/attachment.cgi?id=16383&amp;action=edit&gt;.

Currently, returns 0 if the width of the &lt;col&gt; is a percentage.

I am open to suggestions on how to resolve this as well as whether this patch represents the correct approach (that is, to override the method RenderTableCol::offsetWidth).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185944</commentid>
    <comment_count>7</comment_count>
    <who name="Frank Manno">frankmanno</who>
    <bug_when>2010-01-29 13:21:37 -0800</bug_when>
    <thetext>(In reply to comment #6)

Daniel,

Is it possible to return the pixel width, of a&lt;col&gt; with a percentage width, based on its parent container?  So if the parent container has a width of 500px and the &lt;col&gt; has its width set to 25%, we could simply return 500*.25 = 125px?

Just a thought.  Not sure if it makes sense in this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186291</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-01-31 20:31:20 -0800</bug_when>
    <thetext>Can you elaborate on what you mean by the parent container? Do you mean the table? the ambient container that contains the table?

Never mind my comment earlier about getting 0 when &lt;col&gt; is a percentage value.

(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; Daniel,
&gt; 
&gt; Is it possible to return the pixel width, of a&lt;col&gt; with a percentage width,
&gt; based on its parent container?  So if the parent container has a width of 500px
&gt; and the &lt;col&gt; has its width set to 25%, we could simply return 500*.25 = 125px?
&gt; 
&gt; Just a thought.  Not sure if it makes sense in this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197053</commentid>
    <comment_count>9</comment_count>
      <attachid>50183</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-03-07 17:59:44 -0800</bug_when>
    <thetext>Created attachment 50183
Patch

Work in progress.

Resolved issue with percentages. Confirmed offsetWidth is correct for test case as well as for the sample table in section 11.5 of the HTML 4 spec. &lt;http://www.w3.org/TR/html401/struct/tables.html#h-11.5&gt;.

Also implemented offsetLeft, offsetTop, and offsetHeight. But offsetLeft and offsetTop seem to be off by 1 pixel from the values reported for the top-most table cell in each column. From observation, offsetHeight looks reasonable, but will need to confirm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351921</commentid>
    <comment_count>10</comment_count>
      <attachid>82598</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-02-16 00:30:50 -0800</bug_when>
    <thetext>Created attachment 82598
Patch

Updated work-in-progress patch. Needs change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354856</commentid>
    <comment_count>11</comment_count>
      <attachid>83227</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-02-21 15:48:09 -0800</bug_when>
    <thetext>Created attachment 83227
Patch and layout test

This patch implements offset{Left, Top, Width, Height} for table columns and column groups and hence passes the test case &quot;Stand alone test case shows COL element does not return offsetWidth&quot;.

For some reason, offsetLeft and offsetTop for table columns and column groups always return 0 in IE 7 and greater (why?) (see remark (*)). Therefore, I chose to mimic IE&apos;s behavior and hardcode returning 0 for offsetLeft and offsetTop because these properties are IE extensions (i.e. not defined in a W3C spec.). Compare this behavior to Firefox.

(*) I was unsure of the best forum to report this issue. I couldn&apos;t find an IE bug tracker. So, I described this issue on the Microsoft Connect &quot;Internet Explorer Web Development&quot; forum: &lt;http://social.msdn.microsoft.com/Forums/en/iewebdevelopment/thread/08597d1f-7153-4ebe-b834-4ac2883c2447&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354867</commentid>
    <comment_count>12</comment_count>
      <attachid>83230</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-02-21 15:55:28 -0800</bug_when>
    <thetext>Created attachment 83230
Self-contained col-and-colgroup-offsets.html

For convenience, a self-contained version of the layout test included in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355118</commentid>
    <comment_count>13</comment_count>
      <attachid>83227</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-02-22 01:15:20 -0800</bug_when>
    <thetext>Comment on attachment 83227
Patch and layout test

Clearing review flag to think about this patch some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378021</commentid>
    <comment_count>14</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-01 13:15:16 -0700</bug_when>
    <thetext>On 03/14/2011, I proposed for consideration to www-style that we change in the CSSOM View spec offset{Left, Top, Width, Height} for &lt;col&gt; and &lt;colgroup&gt; so that we return non-zero values: &lt;http://lists.w3.org/Archives/Public/www-style/2011Mar/0322.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878091</commentid>
    <comment_count>15</comment_count>
    <who name="Scott Trenda">korisu</who>
    <bug_when>2013-04-18 14:49:56 -0700</bug_when>
    <thetext>Daniel, has this been sufficiently tested by now? It&apos;s still an issue in the latest versions of Safari and Chrome, and makes it extremely difficult to accurately analyze table structure and dimensions in WebKit-based browsers. Is there any particular reason there&apos;s been no advancement on this item in over two years, especially when [it looks like] a solution has already been fully developed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879262</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-04-22 11:08:09 -0700</bug_when>
    <thetext>As of CSSOM View Module draft 04/16/2013 the properties offset{Left, Top, Width, Height} are applicable to elements that have a computed &quot;display&quot; property of table-column or table-column-group; =&gt; these properties are applicable to &lt;col&gt; and &lt;colgroup&gt;elements.  At the time of writing (draft 04/22/2013), offset{Left, Top, Width, Height} should return a non-zero value for any &quot;CSS layout box&quot; and &lt;col&gt;s and &lt;colgroup&gt;s are considered to have a &quot;CSS layout box&quot;: 

[[
The term CSS layout box refers to the same term in CSS. For the purpose of the requirements in this specification, elements that have a computed value of the &apos;display&apos; property that is table-column or table-column-group must be considered to have an associated CSS layout box (the column or column group, respectively).
]]

For completeness, Simon Pieters responded to my proposal, &lt;http://lists.w3.org/Archives/Public/www-style/2011Mar/0322.html&gt;, in his email, &lt;http://lists.w3.org/Archives/Public/www-style/2013Apr/0359.html&gt; (sent 04/16/2013). The CSSOM View module draft was amended in &lt;https://dvcs.w3.org/hg/csswg/rev/f34dc20f58fb&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879264</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-04-22 11:09:32 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Daniel, has this been sufficiently tested by now?

The proposed patch had sufficient test coverage when it was written. I&apos;ll review the proposed test coverage following the amendment of the CSSOM View spec (see comment 16 above).

&gt; It&apos;s still an issue in the latest versions of Safari and Chrome, and makes it extremely difficult to accurately analyze table structure and dimensions in WebKit-based browsers. Is there any particular reason there&apos;s been no advancement on this item in over two years, especially when [it looks like] a solution has already been fully developed?

Progress on this bug was blocked pending proposed changes to the CSSOM View spec (remarked in comment 14). As of CSSOM View draft 04/16/2013, the spec was amended to support offset{Left, Top, Width, Height} for &lt;col&gt; and &lt;colgroup&gt; elements. I&apos;ll look to move forward with this patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879445</commentid>
    <comment_count>18</comment_count>
    <who name="Scott Trenda">korisu</who>
    <bug_when>2013-04-22 14:48:31 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Progress on this bug was blocked pending proposed changes to the CSSOM View spec (remarked in comment 14). As of CSSOM View draft 04/16/2013, the spec was amended to support offset{Left, Top, Width, Height} for &lt;col&gt; and &lt;colgroup&gt; elements. I&apos;ll look to move forward with this patch shortly.

Wow, crazy coincidental timing! I wasn&apos;t even aware of that. Thank you!

Out of curiosity, how long does it usually take for changes like this to make their way into an official Chrome/Safari release?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882458</commentid>
    <comment_count>19</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-04-28 21:30:35 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; [...]
&gt; 
&gt; Out of curiosity, how long does it usually take for changes like this to make their way into an official Chrome/Safari release?

I don&apos;t know. Each WebKit vender decides when a fix will be included in a release. I&apos;ll look to inform interested parties and provide support to help expedite the process if applicable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942586</commentid>
    <comment_count>20</comment_count>
      <attachid>214928</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-10-22 22:13:50 -0700</bug_when>
    <thetext>Created attachment 214928
Work-in-progress patch and layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982041</commentid>
    <comment_count>21</comment_count>
      <attachid>224533</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-02-18 12:08:55 -0800</bug_when>
    <thetext>Created attachment 224533
Patch and layout test

Updated patch.

We currently fail almost all of the offset{Height, Top} sub-tests in the included layout test because these values depend on the offset{Top, Height} of one or more table row groups (RenderTableSection) and we don&apos;t compute such offsets correctly for row groups in the separate border model. See &lt;https://bugs.webkit.org/show_bug.cgi?id=128988&gt; for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982042</commentid>
    <comment_count>22</comment_count>
      <attachid>224534</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-02-18 12:12:58 -0800</bug_when>
    <thetext>Created attachment 224534
Self-contained col-and-colgroup-offsets.html

Updated self-contained test to compute offsets for cols and colgroups under the separated and collapsed border models.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982901</commentid>
    <comment_count>23</comment_count>
      <attachid>224533</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-02-20 11:21:40 -0800</bug_when>
    <thetext>Comment on attachment 224533
Patch and layout test

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983369</commentid>
    <comment_count>24</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-02-21 14:33:03 -0800</bug_when>
    <thetext>Committed r164504: &lt;http://trac.webkit.org/changeset/164504&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16383</attachid>
            <date>2007-09-25 00:05:46 -0700</date>
            <delta_ts>2007-09-25 00:05:46 -0700</delta_ts>
            <desc>Stand alone test case shows COL element does not return offsetWidth</desc>
            <filename>SafariColExample.html</filename>
            <type>text/html</type>
            <size>1266</size>
            <attacher name="Bob Rose">bobbrose</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+CjxodG1sPgo8aGVhZD4KICA8dGl0bGU+U2FmYXJpIEhlYWRlciBFeGFt
cGxlPC90aXRsZT4KPC9oZWFkPgoKPHN0eWxlIGNsYXNzPSJ0ZXh0L2NzcyI+CgogIC5jb2wxIHsK
ICAgIHdpZHRoOiAxMDBweDsKICB9CgogIC5jb2wyIHsKICAgIHdpZHRoOiAzMDBweDsKICB9CiAg
Cjwvc3R5bGU+Cgo8Ym9keT4KICAgPHRhYmxlIGJvcmRlcj0xPgogICAgIDxjb2wgaWQ9J25hbWVD
b2wnIGNsYXNzPSdjb2wxJz4KICAgICA8Y29sIGlkPSdhZ2VDb2wnIGNsYXNzPSdjb2wyJz4KICAg
ICA8dGhlYWQ+CiAgICAgICA8dHI+CiAgICAgICAgIDx0ZCBpZD0nbmFtZUhlYWRlcicgY2xhc3M9
J2NvbDFBJz5OYW1lPC90ZD4KICAgICAgICAgPHRkIGlkPSdhZ2VIZWFkZXInIGNsYXNzPSdjb2wy
QSc+QWdlPC90ZD4KICAgICAgIDwvdHI+CiAgICAgPC90aGVhZD4KICAgICA8dGJvZHk+CiAgICAg
ICA8dHI+CiAgICAgICAgIDx0ZCBjbGFzcz0nbmFtZUNlbGwnPkpvZTwvdGQ+CiAgICAgICAgIDx0
ZCBjbGFzcz0nZGF0ZUNlbGwnPjE4PC90ZD4KICAgICAgIDwvdHI+CiAgICAgICA8dHI+CiAgICAg
ICAgIDx0ZCBjbGFzcz0nbmFtZUNlbGwnPlNhbGx5PC90ZD4KICAgICAgICAgPHRkIGNsYXNzPSdk
ZWF0ZUNlbGwnPjIyPC90ZD4KICAgICAgIDwvdHI+CiAgICAgPC90Ym9keT4KICAgPC90YWJsZT4K
CgogICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgogICAgIHZhciBleHBsb3JlRWxl
bWVudCA9IGZ1bmN0aW9uIChuYW1lLCBlbGVtKSB7CiAgICAgICB2YXIgb2Zmc2V0VyA9IGVsZW0u
b2Zmc2V0V2lkdGg7CiAgICAgICBhbGVydChuYW1lICsgIiBvZmZzZXRXaWR0aDogIiArIG9mZnNl
dFcpOwogICAgIH0KCiAgICAgdmFyIG5hbWVDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bmFtZUNvbCcpOwogICAgIGV4cGxvcmVFbGVtZW50KCdOYW1lIENPTCBlbGVtOiAnLCBuYW1lQ29s
KTsKCiAgICAgdmFyIG5hbWVIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmFtZUhl
YWRlcicpOwogICAgIGV4cGxvcmVFbGVtZW50KCdOYW1lIGhlYWRlciBlbGVtOiAnLCBuYW1lSGVh
ZGVyKTsKCiAgICAgbmFtZUNvbC5zdHlsZS53aWR0aCA9ICcyMDBweCc7CgogICAgIGV4cGxvcmVF
bGVtZW50KCdOYW1lIENPTCBlbGVtOiAnLCBuYW1lQ29sKTsKICAgICBleHBsb3JlRWxlbWVudCgn
TmFtZSBoZWFkZXIgZWxlbTogJywgbmFtZUhlYWRlcik7CiAgICAKCiAgIDwvc2NyaXB0PgoKPC9i
b2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47314</attachid>
            <date>2010-01-24 23:04:20 -0800</date>
            <delta_ts>2010-03-07 17:59:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Bug15277_WIP.diff</filename>
            <type>text/plain</type>
            <size>1054</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDUzNzUxKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw2ICs5NiwxMSBAQAogICAgICAgICBjaGlsZC0+c2V0UHJlZldpZHRoc0RpcnR5KGZhbHNl
KTsKIH0KIAoraW50IFJlbmRlclRhYmxlQ29sOjpvZmZzZXRXaWR0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChzdHlsZSgpICYmIHRhYmxlKCkpID8gc3R5bGUoKS0+d2lkdGgoKS5jYWxjVmFsdWUo
dGFibGUoKS0+Y29udGVudFdpZHRoKCkpIDogMDsKK30KKwogUmVuZGVyVGFibGUqIFJlbmRlclRh
YmxlQ29sOjp0YWJsZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiB0YWJsZSA9IHBhcmVu
dCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCShyZXZpc2lvbiA1Mzc1MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDggQEAKICAgICBpbnQgc3BhbigpIGNvbnN0IHsgcmV0dXJuIG1fc3BhbjsgfQog
ICAgIHZvaWQgc2V0U3BhbihpbnQgc3BhbikgeyBtX3NwYW4gPSBzcGFuOyB9CiAKKyAgICBpbnQg
b2Zmc2V0V2lkdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAg
IHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50183</attachid>
            <date>2010-03-07 17:59:44 -0800</date>
            <delta_ts>2011-02-16 00:30:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>colOffset_1.patch</filename>
            <type>text/plain</type>
            <size>5508</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDU1NjMwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiBSZW5kZXJUYWJsZUNvbDo6UmVuZGVyVGFibGVDb2woTm9kZSogbm9k
ZSkKICAgICA6IFJlbmRlckJveChub2RlKQogICAgICwgbV9zcGFuKDEpCisgICAgLCBtX2NvbHVt
bigtMSkKIHsKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5s
aW5lKHRydWUpOyAvLyBvdXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUKQEAgLTgyLDYgKzgzLDc2IEBA
CiAgICAgcmV0dXJuIHBhcmVudFRhYmxlLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyKTsKIH0KIAoraW50IFJlbmRlclRhYmxlQ29sOjpvZmZzZXRMZWZ0KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQodGFibGUoKSk7CisgICAgUmVuZGVyVGFibGUqIHRhYmxlRWxl
bWVudCA9IHRhYmxlKCk7CisKKyAgICBpbnQgdGFibGVCb3JkZXJBbmRQYWRkaW5nQW5kU3BhY2lu
ZyA9IHRhYmxlRWxlbWVudC0+Ym9yZGVyTGVmdCgpICsgdGFibGVFbGVtZW50LT5wYWRkaW5nTGVm
dCgpICsgdGFibGVFbGVtZW50LT5oQm9yZGVyU3BhY2luZygpOworICAgIGlmIChtX2NvbHVtbiA8
IDApIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIG5vIHRhYmxlIGNlbGxzIGluIHRoaXMgY29sdW1u
LgorICAgICAgICAvLyBXZSBjYWxjdWxhdGUgdGhlIG9mZnNldExlZnQgd2l0aCByZXNwZWN0IHRv
IHRoZSBvZmZzZXRMZWZ0IG9mIHRoZSB0YWJsZSBhbmQKKyAgICAgICAgLy8gdGhlIG9mZnNldFdp
ZHRoIG9mIGV2ZXJ5IDxjb2w+IGVsZW1lbnQgKGlmIGFueSkgdGhhdCBwcmVjZWVkcyB0aGlzIDxj
b2w+LgorICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gdGFibGVFbGVtZW50LT5maXJzdENo
aWxkKCk7CisgICAgICAgIGludCBvZmZzZXRMZWZ0ID0gdGFibGVFbGVtZW50LT5vZmZzZXRMZWZ0
KCk7CisgICAgICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZCAhPSB0aGlzKSB7CisgICAgICAgICAg
ICBpZiAoY2hpbGQtPmlzVGFibGVDb2woKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRMZWZ0ICs9
IHRvUmVuZGVyVGFibGVDb2woY2hpbGQpLT5vZmZzZXRXaWR0aCgpOworCisgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIG5leHQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgaWYg
KCFuZXh0KQorICAgICAgICAgICAgICAgIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghbmV4dCAmJiBjaGlsZC0+cGFyZW50KCktPmlzVGFibGVDb2woKSkKKyAg
ICAgICAgICAgICAgICBuZXh0ID0gY2hpbGQtPnBhcmVudCgpLT5uZXh0U2libGluZygpOworICAg
ICAgICAgICAgY2hpbGQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmZzZXRM
ZWZ0ICsgdGFibGVCb3JkZXJBbmRQYWRkaW5nQW5kU3BhY2luZzsKKyAgICB9CisgICAgcmV0dXJu
IHRhYmxlRWxlbWVudC0+Y29sdW1uUG9zaXRpb25zKClbbV9jb2x1bW5dICsgdGFibGVCb3JkZXJB
bmRQYWRkaW5nQW5kU3BhY2luZzsKK30KKworaW50IFJlbmRlclRhYmxlQ29sOjpvZmZzZXRUb3Ao
KSBjb25zdAoreworICAgIEFTU0VSVCh0YWJsZSgpKTsKKyAgICBSZW5kZXJUYWJsZSogdGFibGVF
bGVtZW50ID0gdGFibGUoKTsKKworICAgIGludCByZXN1bHQgPSB0YWJsZUVsZW1lbnQtPmNvbnRl
bnRCb3hSZWN0KCkueSgpICsgdGFibGVFbGVtZW50LT52Qm9yZGVyU3BhY2luZygpOworICAgIGlm
IChjb25zdCBSZW5kZXJCbG9jayogY2FwdGlvbkVsZW1lbnQgPSB0YWJsZUVsZW1lbnQtPmNhcHRp
b24oKSkKKyAgICAgICAgcmVzdWx0ICs9IGNhcHRpb25FbGVtZW50LT5jb250ZW50Qm94UmVjdCgp
LmhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBSZW5kZXJUYWJsZUNvbDo6
b2Zmc2V0V2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVCh0YWJsZSgpKTsKKyAgICBSZW5kZXJU
YWJsZSogdGFibGVFbGVtZW50ID0gdGFibGUoKTsKKworICAgIGlmIChtX2NvbHVtbiA8IDApIHsK
KyAgICAgICAgLy8gVGhlcmUgYXJlIG5vIHRhYmxlIGNlbGxzIGluIHRoaXMgY29sdW1uLgorICAg
ICAgICByZXR1cm4gKHRhYmxlRWxlbWVudCAmJiBzdHlsZSgpKSA/IHN0eWxlKCktPndpZHRoKCku
Y2FsY01pblZhbHVlKHRhYmxlRWxlbWVudC0+d2lkdGgoKSkgOiAwOworICAgIH0KKyAgICBWZWN0
b3I8aW50PiBjb2xQb3NpdGlvbnMgPSB0YWJsZUVsZW1lbnQtPmNvbHVtblBvc2l0aW9ucygpOwor
ICAgIGludCBudW1Db2xzID0gY29sUG9zaXRpb25zLnNpemUoKTsKKyAgICBpbnQgd2lkdGggPSAw
OworICAgIGludCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fc3BhbiAmJiAobV9jb2x1bW4gKyBp
ICsgMSkgPCBudW1Db2xzOyArK2kpCisgICAgICAgIHdpZHRoICs9IGNvbFBvc2l0aW9uc1ttX2Nv
bHVtbiArIGkgKyAxXSAtIGNvbFBvc2l0aW9uc1ttX2NvbHVtbiArIGldOworICAgIGlmIChpIDwg
bV9zcGFuKQorICAgICAgICB3aWR0aCArPSB0YWJsZUVsZW1lbnQtPm9mZnNldFdpZHRoKCkgLSBj
b2xQb3NpdGlvbnNbbV9jb2x1bW4gKyBpXTsgLy8gV2lkdGggb2YgbGFzdCBjb2x1bW4gaW4gdGFi
bGUuCisgICAgcmV0dXJuIHdpZHRoIC0gdGFibGVFbGVtZW50LT5oQm9yZGVyU3BhY2luZygpOwor
fQorCitpbnQgUmVuZGVyVGFibGVDb2w6Om9mZnNldEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHRhYmxlKCkpOworICAgIFJlbmRlclRhYmxlKiB0YWJsZUVsZW1lbnQgPSB0YWJsZSgpOwor
CisgICAgaW50IHJlc3VsdCA9IHRhYmxlRWxlbWVudC0+Y29udGVudEJveFJlY3QoKS5oZWlnaHQo
KSAtIDIgKiB0YWJsZUVsZW1lbnQtPnZCb3JkZXJTcGFjaW5nKCk7CisgICAgaWYgKGNvbnN0IFJl
bmRlckJsb2NrKiBjYXB0aW9uRWxlbWVudCA9IHRhYmxlRWxlbWVudC0+Y2FwdGlvbigpKQorICAg
ICAgICByZXN1bHQgLT0gY2FwdGlvbkVsZW1lbnQtPmNvbnRlbnRCb3hSZWN0KCkuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBSZW5kZXJUYWJsZUNvbDo6aW1hZ2VDaGFu
Z2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiB7CiAgICAgLy8gRklYTUU6IFJl
cGFpbnQgb25seSB0aGUgcmVjdCB0aGUgaW1hZ2UgcGFpbnRzIGluLgpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA1NTYzMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
OSw3ICsyNDksMTIgQEAKICAgICAgICAgY3VycmVudENlbGwuaW5Db2xTcGFuID0gdHJ1ZTsKICAg
ICB9CiAgICAgY2VsbC0+c2V0Um93KG1fY1Jvdyk7Ci0gICAgY2VsbC0+c2V0Q29sKHRhYmxlKCkt
PmVmZkNvbFRvQ29sKGNvbCkpOworICAgIGludCBlZmZlY3RpdmVDb2wgPSB0YWJsZSgpLT5lZmZD
b2xUb0NvbChjb2wpOworICAgIGNlbGwtPnNldENvbCh0YWJsZSgpLT5lZmZDb2xUb0NvbChlZmZl
Y3RpdmVDb2wpKTsKKyAgICBpZiAoUmVuZGVyVGFibGVDb2wqIGNvbEVsZW1lbnQgPSB0YWJsZSgp
LT5jb2xFbGVtZW50KGVmZmVjdGl2ZUNvbCkpIHsKKyAgICAgICAgaWYgKGNvbEVsZW1lbnQtPmNv
bCgpID09IC0xKSAvLyBlZmZlY3RpdmVDb2wgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1
bW4gc3Bhbm5lZCBieSB0aGlzIDxjb2w+LgorICAgICAgICAgICAgY29sRWxlbWVudC0+c2V0Q29s
KGVmZmVjdGl2ZUNvbCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0
Q2VsbFdpZHRocygpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDU1NjMw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogICAgIGludCBib3JkZXJCb3R0b20oKSBjb25zdDsKICAgICAKICAgICBj
b25zdCBDb2xvciYgYmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJhY2tncm91bmRD
b2xvcigpOyB9CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNhcHRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NhcHRpb247IH0KIAogICAgIGludCBvdXRlckJvcmRlclRvcCgpIGNvbnN0OwogICAgIGlu
dCBvdXRlckJvcmRlckJvdHRvbSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNvbC5oCShyZXZpc2lvbiA1NTYzMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDE3IEBACiAKICAgICB2aXJ0dWFsIHZv
aWQgY2FsY1ByZWZXaWR0aHMoKTsKIAorICAgIGludCBjb2woKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbjsgfQorICAgIHZvaWQgc2V0Q29sKGludCBjb2wpIHsgbV9jb2x1bW4gPSBjb2w7IH0KKwog
ICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9CiAgICAgdm9pZCBzZXRTcGFu
KGludCBzcGFuKSB7IG1fc3BhbiA9IHNwYW47IH0KIAorICAgIGludCBvZmZzZXRMZWZ0KCkgY29u
c3Q7CisgICAgaW50IG9mZnNldFRvcCgpIGNvbnN0OworICAgIGludCBvZmZzZXRXaWR0aCgpIGNv
bnN0OworICAgIGludCBvZmZzZXRIZWlnaHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hp
bGRyZW4oKTsgfQogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0
dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC02NCw2ICs3Miw3
IEBACiAKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBpbnQgbV9z
cGFuOworICAgIGludCBtX2NvbHVtbjsKIH07CiAKIGlubGluZSBSZW5kZXJUYWJsZUNvbCogdG9S
ZW5kZXJUYWJsZUNvbChSZW5kZXJPYmplY3QqIG9iamVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82598</attachid>
            <date>2011-02-16 00:30:50 -0800</date>
            <delta_ts>2011-02-21 15:48:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>TableCol_021611.patch</filename>
            <type>text/plain</type>
            <size>12832</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24g
Nzc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBu
eXBvcC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50
dWRhdGEuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDUsNiArMjQ2LDYyIEBAIHZvaWQg
UmVuZGVyVGFibGU6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogICAgIH0KIH0KIAorUmVuZGVyVGFi
bGVDb2wqIFJlbmRlclRhYmxlOjpmaXJzdENvbEdyb3VwKCkgY29uc3QKK3sKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDb2woY2hpbGQpOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbFBvc2l0
aW9uQW5kV2lkdGhVc2luZyhpbnQgdGFibGVMb2dpY2FsTGVmdFdpdGhCb3JkZXJBbmRQYWRkaW5n
LCBpbnQgdGFibGVMb2dpY2FsVG9wV2l0aEJvcmRlckFuZFBhZGRpbmcpCit7CisgICAgVmVjdG9y
PGludD4mIGNvbHVtblBvcyA9IGNvbHVtblBvc2l0aW9ucygpOworICAgIHVuc2lnbmVkIGNvbHVt
bkluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBudW1FZmZDb2x1bW5zID0gbnVtRWZmQ29scygpOwor
ICAgIGludCBjb2x1bW5Mb2dpY2FsTGVmdCA9IHRhYmxlTG9naWNhbExlZnRXaXRoQm9yZGVyQW5k
UGFkZGluZyArIGhCb3JkZXJTcGFjaW5nKCk7CisgICAgZm9yIChSZW5kZXJUYWJsZUNvbCogY3Vy
cmVudCA9IGZpcnN0Q29sR3JvdXAoKTsgY3VycmVudCAmJiBjb2x1bW5JbmRleCA8IG51bUVmZkNv
bHVtbnM7IGN1cnJlbnQgPSBuZXh0Q29sRWxlbWVudChjdXJyZW50KSkgeworICAgICAgICBpbnQg
bGVmdCA9IGNvbHVtblBvc1tjb2x1bW5JbmRleF0gKyBjb2x1bW5Mb2dpY2FsTGVmdDsKKyAgICAg
ICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgLy8gQ29sdW1uIGdy
b3VwCisgICAgICAgICAgICBjdXJyZW50LT5zZXRMb2dpY2FsTG9jYXRpb24obGVmdCwgdGFibGVM
b2dpY2FsVG9wV2l0aEJvcmRlckFuZFBhZGRpbmcpOworICAgICAgICAgICAgY3VycmVudC0+c2V0
TG9naWNhbFdpZHRoKDApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpbnQgd2lkdGggPSAwOworICAgICAgICBmb3IgKGludCBzcGFuID0gY3VycmVudC0+c3Bh
bigpOyBzcGFuID4gMCAmJiBjb2x1bW5JbmRleCA8IG51bUVmZkNvbHVtbnM7IC0tc3BhbiwgKytj
b2x1bW5JbmRleCkKKyAgICAgICAgICAgIHdpZHRoICs9IGNvbHVtblBvc1tjb2x1bW5JbmRleCAr
IDFdIC0gY29sdW1uUG9zW2NvbHVtbkluZGV4XTsKKyAgICAgICAgd2lkdGggLT0gaEJvcmRlclNw
YWNpbmcoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKKworICAg
ICAgICBSZW5kZXJUYWJsZUNvbCogcGFyZW50Q29sdW1uR3JvdXAgPSBjdXJyZW50LT5wYXJlbnQo
KS0+aXNUYWJsZUNvbCgpID8gdG9SZW5kZXJUYWJsZUNvbChjdXJyZW50LT5wYXJlbnQoKSkgOiAw
OworICAgICAgICBjdXJyZW50LT5zZXRMb2dpY2FsTG9jYXRpb24obGVmdCAtIChwYXJlbnRDb2x1
bW5Hcm91cCA/IHBhcmVudENvbHVtbkdyb3VwLT5sb2dpY2FsTGVmdCgpIDogMCksIHRhYmxlTG9n
aWNhbFRvcFdpdGhCb3JkZXJBbmRQYWRkaW5nIC0gKHBhcmVudENvbHVtbkdyb3VwID8gcGFyZW50
Q29sdW1uR3JvdXAtPmxvZ2ljYWxUb3AoKSA6IDApKTsKKyAgICAgICAgaWYgKHBhcmVudENvbHVt
bkdyb3VwKSB7CisgICAgICAgICAgICBpbnQgb2xkQ29sdW1uR3JvdXBXaWR0aCA9IHBhcmVudENv
bHVtbkdyb3VwLT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgIHBhcmVudENvbHVtbkdyb3Vw
LT5zZXRMb2dpY2FsV2lkdGgob2xkQ29sdW1uR3JvdXBXaWR0aCArIHdpZHRoICsgKG9sZENvbHVt
bkdyb3VwV2lkdGggPiAwID8gaEJvcmRlclNwYWNpbmcoKSA6IDApKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbEhlaWdo
dCgpCit7CisgICAgYm9vbCBjb2xsYXBzaW5nID0gY29sbGFwc2VCb3JkZXJzKCk7CisgICAgaW50
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8g
MCA6IHBhZGRpbmdCZWZvcmUoKSk7CisgICAgaW50IGJvcmRlckFuZFBhZGRpbmdBZnRlciA9IGJv
cmRlckFmdGVyKCkgKyAoY29sbGFwc2luZyA/IDAgOiBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgaW50
IGNhcHRpb25IZWlnaHRBbmRNYXJnaW4gPSBtX2NhcHRpb24gPyBtX2NhcHRpb24tPmxvZ2ljYWxI
ZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luQmVmb3JlKCkgKyBtX2NhcHRpb24tPm1hcmdpbkFm
dGVyKCkgOiAwOworICAgIGludCBoZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCkgLSBjYXB0aW9uSGVp
Z2h0QW5kTWFyZ2luIC0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSAtIGJvcmRlckFuZFBhZGRpbmdB
ZnRlcjsKKworICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBudW1F
ZmZDb2x1bW5zID0gbnVtRWZmQ29scygpOworICAgIGZvciAoUmVuZGVyVGFibGVDb2wqIGN1cnJl
bnQgPSBmaXJzdENvbEdyb3VwKCk7IGN1cnJlbnQgJiYgY29sdW1uSW5kZXggPCBudW1FZmZDb2x1
bW5zOyBjdXJyZW50ID0gbmV4dENvbEVsZW1lbnQoY3VycmVudCkpIHsKKyAgICAgICAgY3VycmVu
dC0+c2V0TG9naWNhbEhlaWdodChoZWlnaHQpOworICAgICAgICBpZiAoIWN1cnJlbnQtPmZpcnN0
Q2hpbGQoKSkgLy8gTm90IGEgY29sdW1uIGdyb3VwCisgICAgICAgICAgICBjb2x1bW5JbmRleCAr
PSBjdXJyZW50LT5zcGFuKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQo
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKQEAgLTMzMCw2ICszODcsMTIgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoIWlzUG9zaXRpb25lZCgpKQogICAgICAg
ICBjb21wdXRlTG9naWNhbEhlaWdodCgpOwogCisgICAgaW50IHNlY3Rpb25Mb2dpY2FsTGVmdCA9
IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJvcmRlclN0YXJ0KCkgOiBib3Jk
ZXJFbmQoKTsKKyAgICBpZiAoIWNvbGxhcHNpbmcpCisgICAgICAgIHNlY3Rpb25Mb2dpY2FsTGVm
dCArPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBwYWRkaW5nU3RhcnQoKSA6
IHBhZGRpbmdFbmQoKTsKKworICAgIGNvbXB1dGVDb2xFbGVtZW50c0xvZ2ljYWxQb3NpdGlvbkFu
ZFdpZHRoVXNpbmcoc2VjdGlvbkxvZ2ljYWxMZWZ0LCBsb2dpY2FsSGVpZ2h0KCkpOworCiAgICAg
TGVuZ3RoIGxvZ2ljYWxIZWlnaHRMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCk7CiAg
ICAgaW50IGNvbXB1dGVkTG9naWNhbEhlaWdodCA9IDA7CiAgICAgaWYgKGxvZ2ljYWxIZWlnaHRM
ZW5ndGguaXNGaXhlZCgpKSB7CkBAIC0zNTEsMTAgKzQxNCw2IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmxheW91dCgpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgY29t
cHV0ZWRMb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAKLSAgICBpbnQgc2VjdGlvbkxvZ2ljYWxMZWZ0
ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyU3RhcnQoKSA6IGJv
cmRlckVuZCgpOwotICAgIGlmICghY29sbGFwc2luZykKLSAgICAgICAgc2VjdGlvbkxvZ2ljYWxM
ZWZ0ICs9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHBhZGRpbmdTdGFydCgp
IDogcGFkZGluZ0VuZCgpOwotCiAgICAgLy8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCiAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmly
c3RCb2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7CkBA
IC0zODMsNiArNDQyLDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoaXNQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAKKyAgICBjb21w
dXRlQ29sRWxlbWVudHNMb2dpY2FsSGVpZ2h0KCk7CisKICAgICAvLyB0YWJsZSBjYW4gYmUgY29u
dGFpbmluZyBibG9jayBvZiBwb3NpdGlvbmVkIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBPbmx5
IHBhc3MgdHJ1ZSBpZiB3aWR0aCBvciBoZWlnaHQgY2hhbmdlZC4KICAgICBsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0cyh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5oCShyZXZpc2lvbiA3Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8gMCA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRp
bmdFbmQoKSArIChudW1FZmZDb2xzKCkgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCkpKTsKICAgICB9
CiAKKyAgICBSZW5kZXJUYWJsZUNvbCogZmlyc3RDb2xHcm91cCgpIGNvbnN0OwogICAgIFJlbmRl
clRhYmxlQ29sKiBjb2xFbGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJvb2wq
IGVuZEVkZ2UgPSAwKSBjb25zdDsKICAgICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbEVsZW1lbnQo
UmVuZGVyVGFibGVDb2wqIGN1cnJlbnQpIGNvbnN0OwogCkBAIC0yMzgsNiArMjM5LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHN1YnRyYWN0Q2FwdGlvblJlY3QoSW50UmVjdCYpIGNvbnN0OwogCiAg
ICAgdm9pZCByZWNhbGNTZWN0aW9ucygpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUNvbEVsZW1l
bnRzTG9naWNhbFBvc2l0aW9uQW5kV2lkdGhVc2luZyhpbnQgdGFibGVMb2dpY2FsTGVmdFdpdGhC
b3JkZXJBbmRQYWRkaW5nLCBpbnQgdGFibGVMb2dpY2FsVG9wV2l0aEJvcmRlckFuZFBhZGRpbmcp
OworICAgIHZvaWQgY29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbEhlaWdodCgpOwogCiAgICAgbXV0
YWJsZSBWZWN0b3I8aW50PiBtX2NvbHVtblBvczsKICAgICBtdXRhYmxlIFZlY3RvcjxDb2x1bW5T
dHJ1Y3Q+IG1fY29sdW1uczsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sZ3JvdXAt
b2Zmc2V0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sZ3Jv
dXAtb2Zmc2V0cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90YWJsZS9j
b2xncm91cC1vZmZzZXRzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+Cit0YWJsZSB7IGJvcmRlcjogMnB4IHNvbGlkIGJs
dWU7IGJvcmRlci1zcGFjaW5nOiA0cHggfQordGQsIHRoIHsgYm9yZGVyOiAycHggc29saWQgYmx1
ZSB9IC8qIFRvIG1ha2UgaXQgZWFzaWVyIHRvIHZpc3VhbGx5IGluc3BlY3QgdGhlIHRlc3QgY2Fz
ZS4gKi8KKzwvc3R5bGU+Cis8c2NyaXB0PgorLy8gV2Ugc3RvcmUgbW9zdCBvZiB0aGUgc3RhdGUg
aW4gZ2xvYmFsIHZhcmlhYmxlcyBzbyBhcyB0byBrZWVwIHRoZSBvdXRwdXQgcmVhZGFibGUgd2hl
biBjYWxsaW5nIHNob3VsZEJlKCkuCit2YXIgY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVyZWRP
ckhhdmVTaXplOwordmFyIGhhc01BbmRIYXNOQW5kSGFzTzsKK3ZhciBoYXNPOwordmFyIGhhc1A7
Cit2YXIgcHJvZHVjdE5hbWU7Cit2YXIgcHJvZHVjdE5vOwordmFyIHByb2R1Y3ROb0FuZFByb2R1
Y3ROYW1lOwordmFyIHRhYmxlSG9yem9udGFsQm9yZGVyU3BhY2luZzsKK3ZhciB0YWJsZUxlZnRC
b3JkZXI7Cit2YXIgdGFibGVUb3BCb3JkZXI7CisKK3dpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUi
KVswXTsKKyAgICB2YXIgdGFibGVTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhYmxl
LCBudWxsKTsKKworICAgIGNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkT3JIYXZlU2l6ZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZE9y
SGF2ZVNpemUiKTsKKyAgICBoYXNNQW5kSGFzTkFuZEhhc08gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGFzTUFuZEhhc05BbmRIYXNPIik7CisgICAgaGFzTyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJoYXNPIik7CisgICAgaGFzUCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQ
Iik7CisgICAgcHJvZHVjdE5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5h
bWUiKTsKKyAgICBwcm9kdWN0Tm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5v
Iik7CisgICAgcHJvZHVjdE5vQW5kUHJvZHVjdE5hbWUgPSBwcm9kdWN0Tm8ucGFyZW50Tm9kZTsK
KyAgICB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcgPSBwYXJzZUludCh0YWJsZVN0eWxlLmJv
cmRlclNwYWNpbmcpOworICAgIHRhYmxlTGVmdEJvcmRlciA9IHBhcnNlSW50KHRhYmxlU3R5bGUu
Ym9yZGVyTGVmdFdpZHRoKTsKKyAgICB0YWJsZVRvcEJvcmRlciA9IHBhcnNlSW50KHRhYmxlU3R5
bGUuYm9yZGVyVG9wV2lkdGgpOworICAgIHJ1blRlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpCit7CisgICAgZGVidWcoJzxiciAvPlRlc3RzIGZvciBvZmZzZXRXaWR0aCcpOworICAgIHNo
b3VsZEJlKCdwcm9kdWN0Tm8ub2Zmc2V0V2lkdGgnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJvdzFDZWxsMSIpLm9mZnNldFdpZHRoJyk7CisgICAgc2hvdWxkQmUoJ3Byb2R1Y3ROYW1lLm9m
ZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDIiKS5vZmZzZXRX
aWR0aCcpOworICAgIHNob3VsZEJlKCdwcm9kdWN0Tm9BbmRQcm9kdWN0TmFtZS5vZmZzZXRXaWR0
aCcsICdwcm9kdWN0Tm8ub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcg
KyBwcm9kdWN0TmFtZS5vZmZzZXRXaWR0aCcpOworICAgIHNob3VsZEJlKCdoYXNNQW5kSGFzTi5v
ZmZzZXRXaWR0aCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0
V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicm93MUNlbGw0Iikub2Zmc2V0V2lkdGgnKTsKKyAgICBzaG91bGRCZSgnaGFzTy5vZmZz
ZXRXaWR0aCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lk
dGgnKTsKKyAgICBzaG91bGRCZSgnaGFzTUFuZEhhc05BbmRIYXNPLm9mZnNldFdpZHRoJywgJ2hh
c01BbmRIYXNOLm9mZnNldFdpZHRoICsgdGFibGVIb3J6b250YWxCb3JkZXJTcGFjaW5nICsgaGFz
Ty5vZmZzZXRXaWR0aCcpOworICAgIHNob3VsZEJlKCdoYXNQLm9mZnNldFdpZHRoJywgJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRXaWR0aCcpOworICAgIHNob3Vs
ZEV2YWx1YXRlVG8oJ2NvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkT3JIYXZlU2l6ZS5vZmZz
ZXRXaWR0aCcsIDApOworCisgICAgZGVidWcoJzxiciAvPlRlc3RzIGZvciBvZmZzZXRIZWlnaHQn
KTsKKyAgICB2YXIgdGFibGVDb250ZW50SGVpZ2h0ID0gJ2RvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJ0Ym9keSIpWzBdLm9mZnNldEhlaWdodCArIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJ0aGVhZCIpWzBdLm9mZnNldEhlaWdodCc7CisgICAgaWYgKG5hdmlnYXRvci51c2Vy
QWdlbnQuaW5kZXhPZigiQXBwbGVXZWJLaXQiKSA9PT0gLTEpIHsKKyAgICAgICAgLy8gSW4gRmly
ZWZveCBhbmQgSW50ZXJuZXQgRXhwbG9yZXIsIHRoZSBoZWlnaHQgb2YgYSB0YWJsZSBzZWN0aW9u
IGRvZXMgbm90IGluY2x1ZGUgaG9yaXpvbnRhbCBib3JkZXIgc3BhY2luZy4KKyAgICAgICAgdGFi
bGVDb250ZW50SGVpZ2h0ICs9ICcgKyB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcnOworICAg
IH0KKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdwcm9kdWN0Tm8ub2Zmc2V0SGVpZ2h0JywgdGFibGVD
b250ZW50SGVpZ2h0KTsKKyAgICBzaG91bGRCZSgncHJvZHVjdE5hbWUub2Zmc2V0SGVpZ2h0Jywg
dGFibGVDb250ZW50SGVpZ2h0KTsKKyAgICBzaG91bGRCZSgnaGFzTUFuZEhhc05BbmRIYXNPLm9m
ZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hvdWxkQmUoJ2hhc01BbmRI
YXNOLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hvdWxkQmUoJ2hh
c08ub2Zmc2V0SGVpZ2h0JywgdGFibGVDb250ZW50SGVpZ2h0KTsKKyAgICBzaG91bGRFdmFsdWF0
ZVRvKCdjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZE9ySGF2ZVNpemUub2Zmc2V0SGVpZ2h0
JywgMCk7CisKKyAgICBkZWJ1ZygnPGJyIC8+VGVzdHMgZm9yIG9mZnNldExlZnQnKTsKKyAgICBz
aG91bGRCZSgncHJvZHVjdE5vLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJvdzFDZWxsMSIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgncHJvZHVjdE5hbWUub2Zm
c2V0TGVmdCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0TGVm
dCcpOworICAgIHNob3VsZEJlKCdwcm9kdWN0Tm9BbmRQcm9kdWN0TmFtZS5vZmZzZXRMZWZ0Jywg
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRMZWZ0Jyk7CisgICAg
c2hvdWxkQmUoJ2hhc01BbmRIYXNOLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInJvdzFDZWxsMyIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgnaGFzTy5vZmZzZXRM
ZWZ0JywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDUiKS5vZmZzZXRMZWZ0Jyk7
CisgICAgc2hvdWxkQmUoJ2hhc01BbmRIYXNOQW5kSGFzTy5vZmZzZXRMZWZ0JywgJ2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRMZWZ0Jyk7CisgICAgc2hvdWxkQmUo
J2hhc1Aub2Zmc2V0TGVmdCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw2Iiku
b2Zmc2V0TGVmdCcpOworCisgICAgLy8gQmVjYXVzZSBvZiA8aHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA/cmV2PTc4NDM3I0w0MzU+LgorICAgIHNob3VsZEV2YWx1YXRlVG8oJ2NvbHVtblRo
YXRTaG91bGROb3RCZVJlbmRlcmVkT3JIYXZlU2l6ZS5vZmZzZXRMZWZ0JywgLXRhYmxlTGVmdEJv
cmRlcik7CisKKyAgICBkZWJ1ZygnPGJyIC8+VGVzdHMgZm9yIG9mZnNldFRvcCcpOworICAgIHNo
b3VsZEJlKCdwcm9kdWN0Tm8ub2Zmc2V0VG9wJywgJ2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJ0aGVhZCIpWzBdLm9mZnNldFRvcCcpOworICAgIHNob3VsZEJlKCdwcm9kdWN0TmFtZS5v
ZmZzZXRUb3AnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRoZWFkIilbMF0ub2Zm
c2V0VG9wJyk7CisgICAgc2hvdWxkQmUoJ3Byb2R1Y3ROb0FuZFByb2R1Y3ROYW1lLm9mZnNldFRv
cCcsICdkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVswXS5vZmZzZXRUb3An
KTsKKyAgICBzaG91bGRCZSgnaGFzTUFuZEhhc04ub2Zmc2V0VG9wJywgJ2RvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpWzBdLm9mZnNldFRvcCcpOworICAgIHNob3VsZEJlKCdo
YXNPLm9mZnNldFRvcCcsICdkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVsw
XS5vZmZzZXRUb3AnKTsKKyAgICBzaG91bGRCZSgnaGFzTUFuZEhhc05BbmRIYXNPLm9mZnNldFRv
cCcsICdkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVswXS5vZmZzZXRUb3An
KTsKKyAgICBzaG91bGRCZSgnaGFzUC5vZmZzZXRUb3AnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoInRoZWFkIilbMF0ub2Zmc2V0VG9wJyk7CisKKyAgICAvLyBCZWNhdXNlIG9mIDxo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcD9yZXY9Nzg0MzcjTDQ2OT4uCisgICAgc2hvdWxk
RXZhbHVhdGVUbygnY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVyZWRPckhhdmVTaXplLm9mZnNl
dFRvcCcsIC10YWJsZVRvcEJvcmRlcik7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdKTsKKyAgICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xh
c3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8dGFibGU+CisgICAgPGNhcHRpb24+
UHJvZHVjdCBDb21wYXJpc29uPC9jYXB0aW9uPgorICAgIDxjb2wgaWQ9InByb2R1Y3RObyIgc3R5
bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+CisgICAgPGNvbCBpZD0icHJvZHVjdE5h
bWUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuIj4KKyAgICA8Y29sZ3JvdXAg
aWQ9Imhhc01BbmRIYXNOQW5kSGFzTyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3Jh
eSI+CisgICAgICAgIDxjb2wgaWQ9Imhhc01BbmRIYXNOIiBzcGFuPSIyIj4KKyAgICAgICAgPGNv
bCBpZD0iaGFzTyI+CisgICAgPC9jb2xncm91cD4KKyAgICA8Y29sZ3JvdXAgaWQ9Imhhc1AiIHN0
eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmF5Ij4KKyAgICA8Y29sZ3JvdXAgaWQ9ImNvbHVtblRo
YXRTaG91bGROb3RCZVJlbmRlcmVkT3JIYXZlU2l6ZSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
IHJlZCIgc3Bhbj0iMiI+CisgICAgPHRoZWFkPgorICAgICAgICA8dHI+PHRoPlByb2R1Y3QgTm8u
PC90aD48dGg+TmFtZTwvdGg+PHRoPkhhcyBNPC90aD48dGg+SGFzIE48L3RoPjx0aD5IYXMgTzwv
dGg+PHRoPkhhcyBQPC90aD48L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PgorICAgICAg
ICA8dHI+PHRkIGlkPSJyb3cxQ2VsbDEiPjE8L3RkPjx0ZCBpZD0icm93MUNlbGwyIj5HaXptbyBB
PC90ZD48dGQgaWQ9InJvdzFDZWxsMyI+JiN4MjcxMzs8L3RkPjx0ZCBpZD0icm93MUNlbGw0Ij48
L3RkPjx0ZCBpZD0icm93MUNlbGw1Ij4mI3gyNzEzOzwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDYiPiYj
eDI3MTM7PC90ZD48L3RyPgorICAgICAgICA8dHI+PHRkPjI8L3RkPjx0ZD5HaXptbyBBIFBybzwv
dGQ+PHRkPiYjeDI3MTM7PC90ZD48dGQ+JiN4MjcxMzs8L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PHRk
PiYjeDI3MTM7PC90ZD48L3RyPgorICAgICAgICA8dHI+PHRkPjM8L3RkPjx0ZD5HaXptbyBCPC90
ZD48dGQ+PHRkPjx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4mI3gy
NzEzOzwvdGQ+PC90cj4KKyAgICA8L3Rib2R5PgorPC90YWJsZT4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0
IGRvY3VtZW50Lm9mZnNldHtMZWZ0LCBUb3AsIFdpZHRoLCBIZWlnaHR9IHdvcmsgZm9yIGNvbHVt
biBncm91cHMsICZsdDtjb2wmZ3Q7IGFuZCAmbHQ7Y29sZ3JvdXAmZ3Q7IGVsZW1lbnRzLiIpOwor
ICAgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83227</attachid>
            <date>2011-02-21 15:48:09 -0800</date>
            <delta_ts>2013-10-22 22:13:42 -0700</delta_ts>
            <desc>Patch and layout test</desc>
            <filename>bug15277_msie.patch</filename>
            <type>text/plain</type>
            <size>20315</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MTkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDItMjAgIERhbmllbCBC
YXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENPTCBlbGVtZW50IGluIHRhYmxlIGhhcyAwIGZvciBvZmZzZXRX
aWR0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUy
NzcKKworICAgICAgICBJbXBsZW1lbnRzIElFLWNvbXBhdGlibGUgb2Zmc2V0e0xlZnQsIFRvcCwg
V2lkdGgsIEhlaWdodH0gZm9yIHRhYmxlIGNvbHVtbnMKKyAgICAgICAgYW5kIGNvbHVtbiBncm91
cHMuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgZGltZW5zaW9ucyBvZiBjb2x1bW5zIGFuZCBj
b2x1bW4gZ3JvdXBzIGFyZSBub3QgY29tcHV0ZWQuIEhlbmNlLAorICAgICAgICBvZmZzZXR7TGVm
dCwgVG9wLCBXaWR0aCwgSGVpZ2h0fSByZXR1cm4gaW5jb3JyZWN0IHJlc3VsdHMuIEluIElFLCBv
ZmZzZXRMZWZ0IGFuZAorICAgICAgICBvZmZzZXRUb3AgYWx3YXlzIHJldHVybiAwIGZvciBjb2x1
bW5zIGFuZCBjb2x1bW4gZ3JvdXBzICh3aHk/KS4gSSBjaG9zZSB0byBtaW1pYworICAgICAgICBJ
RSdzIGJlaGF2aW9yIGFuZCByZXR1cm4gMCBmb3IgdGhlc2UgcHJvcGVydGllcyBiZWNhdXNlIHRo
ZXNlIHByb3BlcnRpZXMgYXJlIElFCisgICAgICAgIGV4dGVuc2lvbnMgKGkuZS4gbm90IGRlZmlu
ZWQgaW4gYSBXM0Mgc3BlYy4pLiBDb21wYXJlIHRoaXMgYmVoYXZpb3IgdG8gRmlyZWZveC4gCisK
KyAgICAgICAgQXMgYSBzaWRlIGVmZmVjdCwgdGhlIFdlYiBJbnNwZWN0b3Igbm93IGhpZ2hsaWdo
dHMgYW5kIHByb3ZpZGVzIGNvcnJlY3Qgd2lkdGgKKyAgICAgICAgYW5kIGhlaWdodCBtZXRyaWNz
IGZvciBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvdGFi
bGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Zmlyc3RDb2xH
cm91cCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNDb2x1bW5Hcm91cCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbXB1dGVDb2xFbGVtZW50c0xvZ2ljYWxQ
b3NpdGlvbkFuZFdpZHRoVXNpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpjb21wdXRlQ29sRWxlbWVudHNMb2dpY2FsSGVpZ2h0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpvZmZzZXRMZWZ0KTogQWRkZWQ7IGhhcmRjb2RlZCB0
byByZXR1cm4gMCAodG8gbWF0Y2ggSUUpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
b2w6Om9mZnNldFRvcCk6IEFkZGVkOyBoYXJkY29kZWQgdG8gcmV0dXJuIDAgKHRvIG1hdGNoIElF
KS4KKwogMjAxMS0wMi0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgQnVpbGQgZml4IChyZW1vdmUgaW5jbHVkZXMpLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA3OTE0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYsNiArNiw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBEYW5pZWwgQmF0ZXMgKGRiYXRlc0BpbnR1ZGF0YS5jb20pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0NSw2ICsyNDYsNjIgQEAgdm9pZCBSZW5kZXJUYWJsZTo6
Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgfQogfQogCitSZW5kZXJUYWJsZUNvbCogUmVuZGVy
VGFibGU6OmZpcnN0Q29sR3JvdXAoKSBjb25zdAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkpCisgICAgICAgICAgICByZXR1cm4g
dG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNDb2x1bW5Hcm91cChSZW5kZXJUYWJsZUNvbCogY29sdW1uKQorewor
ICAgIHJldHVybiBjb2x1bW4tPmZpcnN0Q2hpbGQoKTsKK30KKwordm9pZCBSZW5kZXJUYWJsZTo6
Y29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbFBvc2l0aW9uQW5kV2lkdGhVc2luZyhpbnQgdGFibGVM
b2dpY2FsTGVmdFdpdGhCb3JkZXJBbmRQYWRkaW5nLCBpbnQgdGFibGVMb2dpY2FsVG9wV2l0aEJv
cmRlckFuZFBhZGRpbmcpCit7CisgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IGNvbHVtblBv
c2l0aW9ucygpOworICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBu
dW1FZmZDb2x1bW5zID0gbnVtRWZmQ29scygpOworICAgIGludCBjb2x1bW5Mb2dpY2FsTGVmdCA9
IHRhYmxlTG9naWNhbExlZnRXaXRoQm9yZGVyQW5kUGFkZGluZyArIGhCb3JkZXJTcGFjaW5nKCk7
CisgICAgZm9yIChSZW5kZXJUYWJsZUNvbCogY3VycmVudCA9IGZpcnN0Q29sR3JvdXAoKTsgY3Vy
cmVudCAmJiBjb2x1bW5JbmRleCA8IG51bUVmZkNvbHVtbnM7IGN1cnJlbnQgPSBuZXh0Q29sRWxl
bWVudChjdXJyZW50KSkgeworICAgICAgICBpbnQgbGVmdCA9IGNvbHVtblBvc1tjb2x1bW5JbmRl
eF0gKyBjb2x1bW5Mb2dpY2FsTGVmdDsKKyAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY3VycmVu
dCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnNldExvZ2ljYWxMb2NhdGlvbihsZWZ0LCB0YWJs
ZUxvZ2ljYWxUb3BXaXRoQm9yZGVyQW5kUGFkZGluZyk7CisgICAgICAgICAgICBjdXJyZW50LT5z
ZXRMb2dpY2FsV2lkdGgoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGludCB3aWR0aCA9IDA7CisgICAgICAgIGZvciAoaW50IHNwYW4gPSBjdXJyZW50LT5z
cGFuKCk7IHNwYW4gPiAwICYmIGNvbHVtbkluZGV4IDwgbnVtRWZmQ29sdW1uczsgLS1zcGFuLCAr
K2NvbHVtbkluZGV4KQorICAgICAgICAgICAgd2lkdGggKz0gY29sdW1uUG9zW2NvbHVtbkluZGV4
ICsgMV0gLSBjb2x1bW5Qb3NbY29sdW1uSW5kZXhdOworICAgICAgICB3aWR0aCAtPSBoQm9yZGVy
U3BhY2luZygpOworICAgICAgICBjdXJyZW50LT5zZXRMb2dpY2FsV2lkdGgod2lkdGgpOworCisg
ICAgICAgIFJlbmRlclRhYmxlQ29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cCA9IGN1cnJlbnQtPnBh
cmVudCgpLT5pc1RhYmxlQ29sKCkgPyB0b1JlbmRlclRhYmxlQ29sKGN1cnJlbnQtPnBhcmVudCgp
KSA6IDA7CisgICAgICAgIGN1cnJlbnQtPnNldExvZ2ljYWxMb2NhdGlvbihsZWZ0IC0gKGVuY2xv
c2luZ0NvbHVtbkdyb3VwID8gZW5jbG9zaW5nQ29sdW1uR3JvdXAtPmxvZ2ljYWxMZWZ0KCkgOiAw
KSwgdGFibGVMb2dpY2FsVG9wV2l0aEJvcmRlckFuZFBhZGRpbmcgLSAoZW5jbG9zaW5nQ29sdW1u
R3JvdXAgPyBlbmNsb3NpbmdDb2x1bW5Hcm91cC0+bG9naWNhbFRvcCgpIDogMCkpOworICAgICAg
ICBpZiAoZW5jbG9zaW5nQ29sdW1uR3JvdXApIHsKKyAgICAgICAgICAgIGludCBvbGRDb2x1bW5H
cm91cFdpZHRoID0gZW5jbG9zaW5nQ29sdW1uR3JvdXAtPmxvZ2ljYWxXaWR0aCgpOworICAgICAg
ICAgICAgYm9vbCBjb250YWluc01vcmVUaGFuT25lQ29sdW1uID0gb2xkQ29sdW1uR3JvdXBXaWR0
aCA+IDA7CisgICAgICAgICAgICBlbmNsb3NpbmdDb2x1bW5Hcm91cC0+c2V0TG9naWNhbFdpZHRo
KG9sZENvbHVtbkdyb3VwV2lkdGggKyB3aWR0aCArIChjb250YWluc01vcmVUaGFuT25lQ29sdW1u
ID8gaEJvcmRlclNwYWNpbmcoKSA6IDApKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBS
ZW5kZXJUYWJsZTo6Y29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbEhlaWdodCgpCit7CisgICAgYm9v
bCBjb2xsYXBzaW5nID0gY29sbGFwc2VCb3JkZXJzKCk7CisgICAgaW50IGJvcmRlckFuZFBhZGRp
bmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gMCA6IHBhZGRpbmdCZWZv
cmUoKSk7CisgICAgaW50IGJvcmRlckFuZFBhZGRpbmdBZnRlciA9IGJvcmRlckFmdGVyKCkgKyAo
Y29sbGFwc2luZyA/IDAgOiBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgaW50IGNhcHRpb25IZWlnaHRB
bmRNYXJnaW4gPSBtX2NhcHRpb24gPyBtX2NhcHRpb24tPmxvZ2ljYWxIZWlnaHQoKSArIG1fY2Fw
dGlvbi0+bWFyZ2luQmVmb3JlKCkgKyBtX2NhcHRpb24tPm1hcmdpbkFmdGVyKCkgOiAwOworICAg
IGludCBoZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCkgLSBjYXB0aW9uSGVpZ2h0QW5kTWFyZ2luIC0g
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSAtIGJvcmRlckFuZFBhZGRpbmdBZnRlcjsKKworICAgIGZv
ciAoUmVuZGVyVGFibGVDb2wqIGN1cnJlbnQgPSBmaXJzdENvbEdyb3VwKCk7IGN1cnJlbnQ7IGN1
cnJlbnQgPSBuZXh0Q29sRWxlbWVudChjdXJyZW50KSkKKyAgICAgICAgY3VycmVudC0+c2V0TG9n
aWNhbEhlaWdodChoZWlnaHQpOworfQorCiB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogewog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKQEAgLTMzMCw2ICszODcsMTIgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoIWlzUG9zaXRpb25lZCgpKQogICAgICAgICBjb21w
dXRlTG9naWNhbEhlaWdodCgpOwogCisgICAgaW50IHNlY3Rpb25Mb2dpY2FsTGVmdCA9IHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJvcmRlclN0YXJ0KCkgOiBib3JkZXJFbmQo
KTsKKyAgICBpZiAoIWNvbGxhcHNpbmcpCisgICAgICAgIHNlY3Rpb25Mb2dpY2FsTGVmdCArPSBz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBwYWRkaW5nU3RhcnQoKSA6IHBhZGRp
bmdFbmQoKTsKKworICAgIGNvbXB1dGVDb2xFbGVtZW50c0xvZ2ljYWxQb3NpdGlvbkFuZFdpZHRo
VXNpbmcoc2VjdGlvbkxvZ2ljYWxMZWZ0LCBsb2dpY2FsSGVpZ2h0KCkpOworCiAgICAgTGVuZ3Ro
IGxvZ2ljYWxIZWlnaHRMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgaW50
IGNvbXB1dGVkTG9naWNhbEhlaWdodCA9IDA7CiAgICAgaWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGgu
aXNGaXhlZCgpKSB7CkBAIC0zNTEsMTAgKzQxNCw2IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91
dCgpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgY29tcHV0ZWRM
b2dpY2FsSGVpZ2h0KTsKICAgICB9CiAKLSAgICBpbnQgc2VjdGlvbkxvZ2ljYWxMZWZ0ID0gc3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyU3RhcnQoKSA6IGJvcmRlckVu
ZCgpOwotICAgIGlmICghY29sbGFwc2luZykKLSAgICAgICAgc2VjdGlvbkxvZ2ljYWxMZWZ0ICs9
IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHBhZGRpbmdTdGFydCgpIDogcGFk
ZGluZ0VuZCgpOwotCiAgICAgLy8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCiAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5
ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7CkBAIC0zODMs
NiArNDQyLDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoaXNQb3NpdGlv
bmVkKCkpCiAgICAgICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAKKyAgICBjb21wdXRlQ29s
RWxlbWVudHNMb2dpY2FsSGVpZ2h0KCk7CisKICAgICAvLyB0YWJsZSBjYW4gYmUgY29udGFpbmlu
ZyBibG9jayBvZiBwb3NpdGlvbmVkIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBPbmx5IHBhc3Mg
dHJ1ZSBpZiB3aWR0aCBvciBoZWlnaHQgY2hhbmdlZC4KICAgICBsYXlvdXRQb3NpdGlvbmVkT2Jq
ZWN0cyh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShy
ZXZpc2lvbiA3OTE0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgKGNvbGxhcHNlQm9yZGVycygpID8gMCA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQo
KSArIChudW1FZmZDb2xzKCkgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCkpKTsKICAgICB9CiAKKyAg
ICBSZW5kZXJUYWJsZUNvbCogZmlyc3RDb2xHcm91cCgpIGNvbnN0OwogICAgIFJlbmRlclRhYmxl
Q29sKiBjb2xFbGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJvb2wqIGVuZEVk
Z2UgPSAwKSBjb25zdDsKICAgICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbEVsZW1lbnQoUmVuZGVy
VGFibGVDb2wqIGN1cnJlbnQpIGNvbnN0OwogCkBAIC0yMzgsNiArMjM5LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHN1YnRyYWN0Q2FwdGlvblJlY3QoSW50UmVjdCYpIGNvbnN0OwogCiAgICAgdm9p
ZCByZWNhbGNTZWN0aW9ucygpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUNvbEVsZW1lbnRzTG9n
aWNhbFBvc2l0aW9uQW5kV2lkdGhVc2luZyhpbnQgdGFibGVMb2dpY2FsTGVmdFdpdGhCb3JkZXJB
bmRQYWRkaW5nLCBpbnQgdGFibGVMb2dpY2FsVG9wV2l0aEJvcmRlckFuZFBhZGRpbmcpOworICAg
IHZvaWQgY29tcHV0ZUNvbEVsZW1lbnRzTG9naWNhbEhlaWdodCgpOwogCiAgICAgbXV0YWJsZSBW
ZWN0b3I8aW50PiBtX2NvbHVtblBvczsKICAgICBtdXRhYmxlIFZlY3RvcjxDb2x1bW5TdHJ1Y3Q+
IG1fY29sdW1uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNv
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNv
bC5oCShyZXZpc2lvbiA3OTE0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBwdWJsaWM6CiAgICAg
aW50IHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KICAgICB2b2lkIHNldFNwYW4oaW50
IHNwYW4pIHsgbV9zcGFuID0gc3BhbjsgfQogCisgICAgLy8gSW4gV2luSUUsIG9mZnNldExlZnQg
YW5kIG9mZnNldFRvcCBhbHdheXMgcmV0dXJuIDAgZm9yIGNvbHVtbnMgYW5kIGNvbHVtbiBncm91
cHMuIFdlIG1hdGNoIHRoaXMgYmVoYXZpb3IuCisgICAgLy8gPGh0dHA6Ly9zb2NpYWwubXNkbi5t
aWNyb3NvZnQuY29tL0ZvcnVtcy9lbi9pZXdlYmRldmVsb3BtZW50L3RocmVhZC8wODU5N2QxZi03
MTUzLTRlYmUtYjgzNC00YWMyODgzYzI0NDc+LgorICAgIGludCBvZmZzZXRMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIGludCBvZmZzZXRUb3AoKSBjb25zdCB7IHJldHVybiAwOyB9CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGls
ZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9i
amVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4o
KTsgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzkxOTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMi0yMCAgRGFuaWVsIEJhdGVz
ICA8ZGJhdGVzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ09MIGVsZW1lbnQgaW4gdGFibGUgaGFzIDAgZm9yIG9mZnNldFdpZHRo
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3Nwor
CisgICAgICAgIFRlc3RzIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdodH0gd29y
ayBhbmQgcmV0dXJuIElFLWNvbXBhdGlibGUKKyAgICAgICAgcmVzdWx0cyBmb3IgdGFibGUgY29s
dW1ucyBhbmQgY29sdW1uIGdyb3Vwcy4KKworICAgICAgICAqIGZhc3QvdGFibGUvY29sLWFuZC1j
b2xncm91cC1vZmZzZXRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC90YWJs
ZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNldHMuaHRtbDogQWRkZWQuCisKIDIwMTEtMDItMjAgIE1P
UklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBl
eHBlY3RhdGlvbiB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1hbmQt
Y29sZ3JvdXAtb2Zmc2V0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC90YWJsZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNldHMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90YWJsZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNldHMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACitUaGlzIHRlc3QgY2hl
Y2tzIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdodH0gd29yayBhbmQgcmV0dXJu
IElFLWNvbXBhdGlibGUgcmVzdWx0cyBmb3IgdGFibGUgY29sdW1ucyBhbmQgY29sdW1uIGdyb3Vw
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworVGVzdHMgZm9yIG9mZnNldExl
ZnQ6CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2Rl
Lm9mZnNldExlZnQgaXMgMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5v
Iikub2Zmc2V0TGVmdCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0
TmFtZSIpLm9mZnNldExlZnQgaXMgMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TUFuZEhhc05BbmRIYXNPIikub2Zmc2V0TGVmdCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9mZnNldExlZnQgaXMgMAorUEFTUyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldExlZnQgaXMgMAorUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaGFzUCIpLm9mZnNldExlZnQgaXMgMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRMZWZ0IGlzIDAKKwor
VGVzdHMgZm9yIG9mZnNldFRvcDoKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1
Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0VG9wIGlzIDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldFRvcCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldFRvcCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRUb3AgaXMgMAorUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRUb3AgaXMgMAorUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldFRvcCBpcyAwCitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0VG9wIGlzIDAKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0VG9w
IGlzIDAKKworVGVzdHMgZm9yIG9mZnNldFdpZHRoOgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCBpcyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicm93MUNlbGwxIikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRl
clNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0V2lk
dGgKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldFdpZHRo
IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRXaWR0aAorUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZzZXRXaWR0aCBpcyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0V2lkdGgKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldFdpZHRoIGlz
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0aCArIHRhYmxl
SG9yem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2Vs
bDQiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDUiKS5vZmZzZXRXaWR0aAorUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRXaWR0aCBpcyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRl
clNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw0Iikub2Zmc2V0V2lk
dGgKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRXaWR0aCBpcyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lkdGgKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRXaWR0aCBpcyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicm93MUNlbGw2Iikub2Zmc2V0V2lkdGgKK1BBU1MgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0V2lkdGggaXMg
MAorCitUZXN0cyBmb3Igb2Zmc2V0SGVpZ2h0OgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgaXMgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF0ub2Zmc2V0SGVpZ2h0IC0gMiAqIHRhYmxlVG9wQm9y
ZGVyCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRIZWln
aHQgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF0ub2Zmc2V0SGVp
Z2h0IC0gMiAqIHRhYmxlVG9wQm9yZGVyCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJw
cm9kdWN0TmFtZSIpLm9mZnNldEhlaWdodCBpcyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3JkZXIKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldEhlaWdodCBp
cyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQg
LSAyICogdGFibGVUb3BCb3JkZXIKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01B
bmRIYXNOIikub2Zmc2V0SGVpZ2h0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0
YWJsZSIpWzBdLm9mZnNldEhlaWdodCAtIDIgKiB0YWJsZVRvcEJvcmRlcgorUEFTUyBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldEhlaWdodCBpcyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3Jk
ZXIKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRIZWlnaHQgaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF0ub2Zmc2V0SGVpZ2h0IC0g
MiAqIHRhYmxlVG9wQm9yZGVyCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5U
aGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldEhlaWdodCBpcyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3Jk
ZXIKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1h
bmQtY29sZ3JvdXAtb2Zmc2V0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
dGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPgor
dGFibGUsIHRkLCB0aCB7IGJvcmRlcjogMnB4IHNvbGlkIGJsdWUgfSAvKiBUbyBtYWtlIGl0IGVh
c2llciB0byB2aXN1YWxseSBpbnNwZWN0IHRoZSB0ZXN0IGNhc2UuICovCis8L3N0eWxlPgorPHNj
cmlwdD4KK3ZhciB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmc7Cit2YXIgdGFibGVMZWZ0Qm9y
ZGVyOwordmFyIHRhYmxlVG9wQm9yZGVyOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilb
MF07CisgICAgdmFyIHRhYmxlU3R5bGUgPSBjb21wdXRlZFN0eWxlKHRhYmxlKTsKKyAgICB0YWJs
ZUxlZnRCb3JkZXIgPSBwYXJzZUludCh0YWJsZVN0eWxlLmJvcmRlckxlZnRXaWR0aCk7CisgICAg
dGFibGVUb3BCb3JkZXIgPSBwYXJzZUludCh0YWJsZVN0eWxlLmJvcmRlclRvcFdpZHRoKTsKKyAg
ICB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcgPSBwYXJzZUludCh0YWJsZS5nZXRBdHRyaWJ1
dGUoImNlbGxzcGFjaW5nIikpOworCisgICAgcnVuVGVzdHMoKTsKK30KKworZnVuY3Rpb24gcnVu
VGVzdHMoKQoreworICAgIGRlYnVnKCc8YnIgLz5UZXN0cyBmb3Igb2Zmc2V0TGVmdDonKTsKKyAg
ICB0ZXN0T2Zmc2V0TGVmdCgpOworCisgICAgZGVidWcoJzxiciAvPlRlc3RzIGZvciBvZmZzZXRU
b3A6Jyk7CisgICAgdGVzdE9mZnNldFRvcCgpOworCisgICAgZGVidWcoJzxiciAvPlRlc3RzIGZv
ciBvZmZzZXRXaWR0aDonKTsKKyAgICB0ZXN0T2Zmc2V0V2lkdGgoKTsKKworICAgIGRlYnVnKCc8
YnIgLz5UZXN0cyBmb3Igb2Zmc2V0SGVpZ2h0OicpOworICAgIHRlc3RPZmZzZXRIZWlnaHQoKTsK
KworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilb
MF0pOworICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwv
c3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdE9mZnNldExlZnQoKQoreworICAgIC8vIE5vdGUs
IElFIGFsd2F5cyByZXR1cm5zIDAgZm9yIHRoZSBvZmZzZXRMZWZ0IG9mIGEgY29sdW1uL2NvbHVt
biBncm91cC4KKyAgICAvLyA8aHR0cDovL3NvY2lhbC5tc2RuLm1pY3Jvc29mdC5jb20vRm9ydW1z
L2VuL2lld2ViZGV2ZWxvcG1lbnQvdGhyZWFkLzA4NTk3ZDFmLTcxNTMtNGViZS1iODM0LTRhYzI4
ODNjMjQ0Nz4uCisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0TGVmdCcsIDApOworICAgIHNob3VsZEV2YWx1
YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0Jywg
MCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1
Y3ROYW1lIikub2Zmc2V0TGVmdCcsIDApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRMZWZ0JywgMCk7Cisg
ICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNO
Iikub2Zmc2V0TGVmdCcsIDApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0TGVmdCcsIDApOworICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0TGVmdCcsIDApOworICAgIHNo
b3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxk
Tm90QmVSZW5kZXJlZCIpLm9mZnNldExlZnQnLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdE9mZnNl
dFRvcCgpCit7CisgICAgLy8gTm90ZSwgSUUgYWx3YXlzIHJldHVybnMgMCBmb3IgdGhlIG9mZnNl
dFRvcCBvZiBhIGNvbHVtbi9jb2x1bW4gZ3JvdXAuCisgICAgLy8gPGh0dHA6Ly9zb2NpYWwubXNk
bi5taWNyb3NvZnQuY29tL0ZvcnVtcy9lbi9pZXdlYmRldmVsb3BtZW50L3RocmVhZC8wODU5N2Qx
Zi03MTUzLTRlYmUtYjgzNC00YWMyODgzYzI0NDc+LgorICAgIHNob3VsZEV2YWx1YXRlVG8oJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldFRvcCcs
IDApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9k
dWN0Tm8iKS5vZmZzZXRUb3AnLCAwKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZzZXRUb3AnLCAwKTsKKyAgICBzaG91bGRF
dmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRIYXNPIiku
b2Zmc2V0VG9wJywgMCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0VG9wJywgMCk7CisgICAgc2hvdWxkRXZhbHVhdGVU
bygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRUb3AnLCAwKTsKKyAgICBz
aG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzUCIpLm9mZnNldFRv
cCcsIDApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldFRvcCcsIDApOworfQorCitmdW5j
dGlvbiB0ZXN0T2Zmc2V0V2lkdGgoKQoreworICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCcsICdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicm93MUNlbGwxIikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJv
cmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0
V2lkdGgnKTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RO
byIpLm9mZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5v
ZmZzZXRXaWR0aCcpOworICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJv
ZHVjdE5hbWUiKS5vZmZzZXRXaWR0aCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNl
bGwyIikub2Zmc2V0V2lkdGgnKTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yem9udGFsQm9yZGVyU3Bh
Y2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDQiKS5vZmZzZXRXaWR0aCAr
IHRhYmxlSG9yem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
b3cxQ2VsbDUiKS5vZmZzZXRXaWR0aCcpOworICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRXaWR0aCcsICdkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicm93MUNlbGwzIikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNp
bmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw0Iikub2Zmc2V0V2lkdGgnKTsK
KyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRXaWR0
aCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lkdGgnKTsK
KyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRXaWR0
aCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw2Iikub2Zmc2V0V2lkdGgnKTsK
KyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1uVGhh
dFNob3VsZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRXaWR0aCcsIDApOworfQorCitmdW5jdGlvbiB0
ZXN0T2Zmc2V0SGVpZ2h0KCkKK3sKKyAgICB2YXIgdGFibGVDb250ZW50SGVpZ2h0ID0gJ2RvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdLm9mZnNldEhlaWdodCAtIDIgKiB0
YWJsZVRvcEJvcmRlcic7CisgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJw
cm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7
CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RO
byIpLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hvdWxkQmUoJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldEhlaWdodCcsIHRhYmxl
Q29udGVudEhlaWdodCk7CisgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
YXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRIZWlnaHQnLCB0YWJsZUNvbnRlbnRIZWlnaHQpOwor
ICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZz
ZXRIZWlnaHQnLCB0YWJsZUNvbnRlbnRIZWlnaHQpOworICAgIHNob3VsZEJlKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7
CisgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0SGVp
Z2h0JywgdGFibGVDb250ZW50SGVpZ2h0KTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0SGVpZ2h0Jywg
dGFibGVDb250ZW50SGVpZ2h0KTsKK30KKworZnVuY3Rpb24gY29tcHV0ZWRTdHlsZShlbGVtZW50
KQoreworICAgIHZhciBzdHlsZTsKKyAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpCisg
ICAgICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIEFzc3VtZSB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgd2l0
aGluIEludGVybmV0IEV4cGxvcmVyLgorICAgICAgICBzdHlsZSA9IGVsZW1lbnQuY3VycmVudFN0
eWxlOworICAgIH0KKyAgICByZXR1cm4gc3R5bGU7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8dGFibGUgY2VsbHNwYWNpbmc9IjQiPgor
ICAgIDxjb2wgaWQ9InByb2R1Y3RObyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1
ZSI+CisgICAgPGNvbCBpZD0icHJvZHVjdE5hbWUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBs
aWdodGdyZWVuIj4KKyAgICA8Y29sZ3JvdXAgaWQ9Imhhc01BbmRIYXNOQW5kSGFzTyIgc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheSI+CisgICAgICAgIDxjb2wgaWQ9Imhhc01BbmRI
YXNOIiBzcGFuPSIyIj4KKyAgICAgICAgPGNvbCBpZD0iaGFzTyI+CisgICAgPC9jb2xncm91cD4K
KyAgICA8Y29sZ3JvdXAgaWQ9Imhhc1AiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmF5Ij4K
KyAgICA8Y29sZ3JvdXAgaWQ9ImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIiBzdHlsZT0i
YmFja2dyb3VuZC1jb2xvcjogcmVkIiBzcGFuPSIyIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDx0
cj48dGg+UHJvZHVjdCBOby48L3RoPjx0aD5OYW1lPC90aD48dGg+SGFzIE08L3RoPjx0aD5IYXMg
TjwvdGg+PHRoPkhhcyBPPC90aD48dGg+SGFzIFA8L3RoPjwvdHI+CisgICAgPC90aGVhZD4KKyAg
ICA8dGJvZHk+CisgICAgICAgIDx0cj48dGQgaWQ9InJvdzFDZWxsMSI+MTwvdGQ+PHRkIGlkPSJy
b3cxQ2VsbDIiPkdpem1vIEE8L3RkPjx0ZCBpZD0icm93MUNlbGwzIj4mI3gyNzEzOzwvdGQ+PHRk
IGlkPSJyb3cxQ2VsbDQiPjwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDUiPiYjeDI3MTM7PC90ZD48dGQg
aWQ9InJvdzFDZWxsNiI+JiN4MjcxMzs8L3RkPjwvdHI+CisgICAgICAgIDx0cj48dGQ+MjwvdGQ+
PHRkPkdpem1vIEEgUHJvPC90ZD48dGQ+JiN4MjcxMzs8L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PHRk
PiYjeDI3MTM7PC90ZD48dGQ+JiN4MjcxMzs8L3RkPjwvdHI+CisgICAgICAgIDx0cj48dGQ+Mzwv
dGQ+PHRkPkdpem1vIEI8L3RkPjx0ZD48dGQ+PHRkIGNvbHNwYW49IjIiIHN0eWxlPSJ0ZXh0LWFs
aWduOiBjZW50ZXIiPiYjeDI3MTM7PC90ZD48L3RyPgorICAgIDwvdGJvZHk+Cis8L3RhYmxlPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJUaGlz
IHRlc3QgY2hlY2tzIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdodH0gd29yayBh
bmQgcmV0dXJuIElFLWNvbXBhdGlibGUgcmVzdWx0cyBmb3IgdGFibGUgY29sdW1ucyBhbmQgY29s
dW1uIGdyb3Vwcy4iKTsKKyAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>83230</attachid>
            <date>2011-02-21 15:55:28 -0800</date>
            <delta_ts>2014-02-18 12:12:58 -0800</delta_ts>
            <desc>Self-contained col-and-colgroup-offsets.html</desc>
            <filename>col-and-colgroup-offsets-self-contained.html</filename>
            <type>text/html</type>
            <size>15370</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+Ci5wYXNzIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAg
Y29sb3I6IGdyZWVuOwp9Ci5mYWlsIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6
IHJlZDsKfQojY29uc29sZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBmb250LWZh
bWlseTogbW9ub3NwYWNlOwp9Cjwvc3R5bGU+CjxzY3JpcHQ+Ci8vIHN2Zy9keW5hbWljLXVwZGF0
ZXMgdGVzdHMgc2V0IGVuYWJsZVBpeGVsVGVzdGluZz10cnVlLCBhcyB3ZSB3YW50IHRvIGR1bXAg
dGV4dCArIHBpeGVsIHJlc3VsdHMKaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQod2luZG93LmVuYWJsZVBpeGVsVGVzdGlu
Zyk7CgpmdW5jdGlvbiBkZXNjcmlwdGlvbihtc2cpCnsKICAgIC8vIEZvciBNU0lFIDYgY29tcGF0
aWJpbGl0eQogICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAg
ICBzcGFuLmlubmVySFRNTCA9ICc8cD4nICsgbXNnICsgJzwvcD48cD5PbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICI8c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bh
bj4iLjwvcD4nOwogICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImRlc2NyaXB0aW9uIik7CiAgICBpZiAoZGVzY3JpcHRpb24uZmlyc3RDaGlsZCkKICAgICAgICBk
ZXNjcmlwdGlvbi5yZXBsYWNlQ2hpbGQoc3BhbiwgZGVzY3JpcHRpb24uZmlyc3RDaGlsZCk7CiAg
ICBlbHNlCiAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoc3Bhbik7Cn0KCmZ1bmN0aW9u
IGRlYnVnKG1zZykKewogICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNw
YW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZQogICAg
c3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKfQoKZnVuY3Rpb24gZXNjYXBlSFRNTCh0
ZXh0KQp7CiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwv
ZywgIiZsdDsiKS5yZXBsYWNlKC9cMC9nLCAiXFwwIik7Cn0KCmZ1bmN0aW9uIHRlc3RQYXNzZWQo
bXNnKQp7CiAgICBkZWJ1ZygnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcg
KyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwp9CgpmdW5jdGlvbiB0ZXN0RmFpbGVkKG1z
ZykKewogICAgZGVidWcoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsg
ZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKfQoKZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwo
X2EsIF9iKQp7CiAgICB0cnkgewogICAgICAgIGlmIChfYS5sZW5ndGggIT09IF9iLmxlbmd0aCkK
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2Eu
bGVuZ3RoOyBpKyspCiAgICAgICAgICAgIGlmIChfYVtpXSAhPT0gX2JbaV0pCiAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChleCkgewogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBpc01pbnVzWmVybyhuKQp7CiAg
ICAvLyB0aGUgb25seSB3YXkgdG8gdGVsbCAwIGZyb20gLTAgaW4gSlMgaXMgdGhlIGZhY3QgdGhh
dCAxLy0wIGlzCiAgICAvLyAtSW5maW5pdHkgaW5zdGVhZCBvZiBJbmZpbml0eQogICAgcmV0dXJu
IG4gPT09IDAgJiYgMS9uIDwgMDsKfQoKZnVuY3Rpb24gaXNSZXN1bHRDb3JyZWN0KF9hY3R1YWws
IF9leHBlY3RlZCkKewogICAgaWYgKF9leHBlY3RlZCA9PT0gMCkKICAgICAgICByZXR1cm4gX2Fj
dHVhbCA9PT0gX2V4cGVjdGVkICYmICgxL19hY3R1YWwpID09PSAoMS9fZXhwZWN0ZWQpOwogICAg
aWYgKF9hY3R1YWwgPT09IF9leHBlY3RlZCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICh0
eXBlb2YoX2V4cGVjdGVkKSA9PSAibnVtYmVyIiAmJiBpc05hTihfZXhwZWN0ZWQpKQogICAgICAg
IHJldHVybiB0eXBlb2YoX2FjdHVhbCkgPT0gIm51bWJlciIgJiYgaXNOYU4oX2FjdHVhbCk7CiAg
ICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9leHBlY3RlZCkgPT0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdKSkKICAgICAgICByZXR1cm4gYXJlQXJyYXlzRXF1
YWwoX2FjdHVhbCwgX2V4cGVjdGVkKTsKICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gc3Ry
aW5naWZ5KHYpCnsKICAgIGlmICh2ID09PSAwICYmIDEvdiA8IDApCiAgICAgICAgcmV0dXJuICIt
MCI7CiAgICBlbHNlIHJldHVybiAiIiArIHY7Cn0KCmZ1bmN0aW9uIGV2YWxBbmRMb2coX2EpCnsK
ICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciKQogICAgZGVidWcoIldBUk46IHRyeUFuZExvZygp
IGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQiKTsKCiAgLy8gTG9nIGZpcnN0IGluIGNhc2UgdGhp
bmdzIGdvIGhvcnJpYmx5IHdyb25nIG9yIHRoaXMgY2F1c2VzIGEgc3luYyBldmVudC4KICBkZWJ1
ZyhfYSk7CgogIHZhciBfYXY7CiAgdHJ5IHsKICAgICBfYXYgPSBldmFsKF9hKTsKICB9IGNhdGNo
IChlKSB7CiAgICB0ZXN0RmFpbGVkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUpOwogIH0K
ICByZXR1cm4gX2F2Owp9CgpmdW5jdGlvbiBzaG91bGRCZShfYSwgX2IpCnsKICBpZiAodHlwZW9m
IF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKICAgIGRlYnVnKCJXQVJO
OiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOwogIHZhciBleGNlcHRpb247
CiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsK
ICAgICBleGNlcHRpb24gPSBlOwogIH0KICB2YXIgX2J2ID0gZXZhbChfYik7CgogIGlmIChleGNl
cHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIuIFRocmV3
IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKICBlbHNlIGlmIChpc1Jlc3VsdENvcnJlY3QoX2F2
LCBfYnYpKQogICAgdGVzdFBhc3NlZChfYSArICIgaXMgIiArIF9iKTsKICBlbHNlIGlmICh0eXBl
b2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAi
ICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CiAgZWxzZQogICAgdGVz
dEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2Yg
X2J2ICsgIikuIFdhcyAiICsgX2F2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9hdiArICIpLiIp
Owp9CgpmdW5jdGlvbiBzaG91bGRCZVRydWUoX2EpIHsgc2hvdWxkQmUoX2EsICJ0cnVlIik7IH0K
ZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkgeyBzaG91bGRCZShfYSwgImZhbHNlIik7IH0KZnVu
Y3Rpb24gc2hvdWxkQmVOYU4oX2EpIHsgc2hvdWxkQmUoX2EsICJOYU4iKTsgfQpmdW5jdGlvbiBz
aG91bGRCZU51bGwoX2EpIHsgc2hvdWxkQmUoX2EsICJudWxsIik7IH0KCmZ1bmN0aW9uIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZyhhLCBiKQp7CiAgdmFyIHVuZXZhbGVkU3RyaW5nID0gJyInICsgYi5y
ZXBsYWNlKC9cXC9nLCAiXFxcXCIpLnJlcGxhY2UoLyIvZywgIlwiIikucmVwbGFjZSgvXG4vZywg
IlxcbiIpLnJlcGxhY2UoL1xyL2csICJcXHIiKSArICciJzsKICBzaG91bGRCZShhLCB1bmV2YWxl
ZFN0cmluZyk7Cn0KCmZ1bmN0aW9uIHNob3VsZEV2YWx1YXRlVG8oYWN0dWFsLCBleHBlY3RlZCkg
ewogIC8vIEEgZ2VuZXJhbC1wdXJwb3NlIGNvbXBhcmF0b3IuICAnYWN0dWFsJyBzaG91bGQgYmUg
YSBzdHJpbmcgdG8gYmUKICAvLyBldmFsdWF0ZWQsIGFzIGZvciBzaG91bGRCZSgpLiAnZXhwZWN0
ZWQnIG1heSBiZSBhbnkgdHlwZSBhbmQgd2lsbCBiZQogIC8vIHVzZWQgd2l0aG91dCBiZWluZyBl
dmFsJ2VkLgogIGlmIChleHBlY3RlZCA9PSBudWxsKSB7CiAgICAvLyBEbyB0aGlzIGJlZm9yZSB0
aGUgb2JqZWN0IHRlc3QsIHNpbmNlIG51bGwgaXMgb2YgdHlwZSAnb2JqZWN0Jy4KICAgIHNob3Vs
ZEJlTnVsbChhY3R1YWwpOwogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJ1bmRlZmlu
ZWQiKSB7CiAgICBzaG91bGRCZVVuZGVmaW5lZChhY3R1YWwpOwogIH0gZWxzZSBpZiAodHlwZW9m
IGV4cGVjdGVkID09ICJmdW5jdGlvbiIpIHsKICAgIC8vIEFsbCB0aGlzIGZ1c3MgaXMgdG8gYXZv
aWQgdGhlIHN0cmluZy1hcmcgd2FybmluZyBmcm9tIHNob3VsZEJlKCkuCiAgICB0cnkgewogICAg
ICBhY3R1YWxWYWx1ZSA9IGV2YWwoYWN0dWFsKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGVz
dEZhaWxlZCgiRXZhbHVhdGluZyAiICsgYWN0dWFsICsgIjogVGhyZXcgZXhjZXB0aW9uICIgKyBl
KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2hvdWxkQmUoIiciICsgYWN0dWFsVmFsdWUudG9T
dHJpbmcoKS5yZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIsCiAgICAgICAgICAgICAiJyIgKyBleHBl
Y3RlZC50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSArICInIik7CiAgfSBlbHNlIGlmICh0
eXBlb2YgZXhwZWN0ZWQgPT0gIm9iamVjdCIpIHsKICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwgKyAi
ID09ICciICsgZXhwZWN0ZWQgKyAiJyIpOwogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09
ICJzdHJpbmciKSB7CiAgICBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKTsKICB9IGVsc2UgaWYg
KHR5cGVvZiBleHBlY3RlZCA9PSAiYm9vbGVhbiIpIHsKICAgIHNob3VsZEJlKCJ0eXBlb2YgIiAr
IGFjdHVhbCwgIidib29sZWFuJyIpOwogICAgaWYgKGV4cGVjdGVkKQogICAgICBzaG91bGRCZVRy
dWUoYWN0dWFsKTsKICAgIGVsc2UKICAgICAgc2hvdWxkQmVGYWxzZShhY3R1YWwpOwogIH0gZWxz
ZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJudW1iZXIiKSB7CiAgICBzaG91bGRCZShhY3R1YWws
IHN0cmluZ2lmeShleHBlY3RlZCkpOwogIH0gZWxzZSB7CiAgICBkZWJ1ZyhleHBlY3RlZCArICIg
aXMgdW5rbm93biB0eXBlICIgKyB0eXBlb2YgZXhwZWN0ZWQpOwogICAgc2hvdWxkQmVUcnVlKGFj
dHVhbCwgIiciICArZXhwZWN0ZWQudG9TdHJpbmcoKSArICInIik7CiAgfQp9CgpmdW5jdGlvbiBz
aG91bGRCZU5vblplcm8oX2EpCnsKICB2YXIgZXhjZXB0aW9uOwogIHZhciBfYXY7CiAgdHJ5IHsK
ICAgICBfYXYgPSBldmFsKF9hKTsKICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsK
ICB9CgogIGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgbm9u
LXplcm8uIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKICBlbHNlIGlmIChfYXYgIT0g
MCkKICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi16ZXJvLiIpOwogIGVsc2UKICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24temVyby4gV2FzICIgKyBfYXYpOwp9CgpmdW5jdGlv
biBzaG91bGRCZU5vbk51bGwoX2EpCnsKICB2YXIgZXhjZXB0aW9uOwogIHZhciBfYXY7CiAgdHJ5
IHsKICAgICBfYXYgPSBldmFsKF9hKTsKICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0g
ZTsKICB9CgogIGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUg
bm9uLW51bGwuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKICBlbHNlIGlmIChfYXYg
IT0gbnVsbCkKICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi1udWxsLiIpOwogIGVsc2UKICAg
IHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24tbnVsbC4gV2FzICIgKyBfYXYpOwp9Cgpm
dW5jdGlvbiBzaG91bGRCZVVuZGVmaW5lZChfYSkKewogIHZhciBleGNlcHRpb247CiAgdmFyIF9h
djsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgICBleGNl
cHRpb24gPSBlOwogIH0KCiAgaWYgKGV4Y2VwdGlvbikKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNo
b3VsZCBiZSB1bmRlZmluZWQuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKICBlbHNl
IGlmICh0eXBlb2YgX2F2ID09ICJ1bmRlZmluZWQiKQogICAgdGVzdFBhc3NlZChfYSArICIgaXMg
dW5kZWZpbmVkLiIpOwogIGVsc2UKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSB1bmRl
ZmluZWQuIFdhcyAiICsgX2F2KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVEZWZpbmVkKF9hKQp7CiAg
dmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0gZXZhbChfYSk7CiAg
fSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICBpZiAoZXhjZXB0aW9uKQog
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIGRlZmluZWQuIFRocmV3IGV4Y2VwdGlvbiAi
ICsgZXhjZXB0aW9uKTsKICBlbHNlIGlmIChfYXYgIT09IHVuZGVmaW5lZCkKICAgIHRlc3RQYXNz
ZWQoX2EgKyAiIGlzIGRlZmluZWQuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlIGRlZmluZWQuIFdhcyAiICsgX2F2KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVHcmVhdGVy
VGhhbk9yRXF1YWwoX2EsIF9iKSB7CiAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5
cGVvZiBfYiAhPSAic3RyaW5nIikKICAgICAgICBkZWJ1ZygiV0FSTjogc2hvdWxkQmVHcmVhdGVy
VGhhbk9yRXF1YWwgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CgogICAgdmFyIGV4Y2VwdGlv
bjsKICAgIHZhciBfYXY7CiAgICB0cnkgewogICAgICAgIF9hdiA9IGV2YWwoX2EpOwogICAgfSBj
YXRjaCAoZSkgewogICAgICAgIGV4Y2VwdGlvbiA9IGU7CiAgICB9CiAgICB2YXIgX2J2ID0gZXZh
bChfYik7CgogICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgYmUgPj0gIiArIF9iICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOwogICAg
ZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYgPCBfYnYpCiAgICAgICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlID49ICIgKyBfYiArICIuIFdhcyAiICsgX2F2ICsg
IiAob2YgdHlwZSAiICsgdHlwZW9mIF9hdiArICIpLiIpOwogICAgZWxzZQogICAgICAgIHRlc3RQ
YXNzZWQoX2EgKyAiIGlzID49ICIgKyBfYik7Cn0KCmZ1bmN0aW9uIHNob3VsZFRocm93KF9hLCBf
ZSkKewogIHZhciBleGNlcHRpb247CiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwo
X2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwogIH0KCiAgdmFyIF9ldjsK
ICBpZiAoX2UpCiAgICAgIF9ldiA9ICBldmFsKF9lKTsKCiAgaWYgKGV4Y2VwdGlvbikgewogICAg
aWYgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiB8fCBleGNlcHRpb24gPT0gX2V2KQogICAgICB0
ZXN0UGFzc2VkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbiArICIuIik7CiAg
ICBlbHNlCiAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBf
ZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFRocmV3IGV4Y2Vw
dGlvbiAiICsgZXhjZXB0aW9uICsgIi4iKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVu
ZGVmaW5lZCIpCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgdGhyb3cgIiArICh0eXBlb2Yg
X2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0aW9uIiA6IF9ldikgKyAiLiBXYXMgdW5kZWZp
bmVkLiIpOwogIGVsc2UKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5
cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAi
ICsgX2F2ICsgIi4iKTsKfQoKZnVuY3Rpb24gZ2MoKSB7CiAgICBpZiAodHlwZW9mIEdDQ29udHJv
bGxlciAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKICAg
IGVsc2UgewogICAgICAgIGZ1bmN0aW9uIGdjUmVjKG4pIHsKICAgICAgICAgICAgaWYgKG4gPCAx
KQogICAgICAgICAgICAgICAgcmV0dXJuIHt9OwogICAgICAgICAgICB2YXIgdGVtcCA9IHtpOiAi
YWIiICsgaSArIChpIC8gMTAwMDAwKX07CiAgICAgICAgICAgIHRlbXAgKz0gImZvbyI7CiAgICAg
ICAgICAgIGdjUmVjKG4tMSk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDsgaSsrKQogICAgICAgICAgICBnY1JlYygxMCkKICAgIH0KfQoKLy8gSXQncyBwb3NzaWJs
ZSBmb3IgYW4gYXN5bmMgdGVzdCB0byBjYWxsIGZpbmlzaEpTVGVzdCgpIGJlZm9yZSBqcy10ZXN0
LXBvc3QuanMKLy8gaGFzIGJlZW4gcGFyc2VkLgpmdW5jdGlvbiBmaW5pc2hKU1Rlc3QoKQp7CiAg
ICB3YXNGaW5pc2hKU1Rlc3RDYWxsZWQgPSB0cnVlOwogICAgaWYgKCF3aW5kb3cud2FzUG9zdFRl
c3RTY3JpcHRQYXJzZWQpCiAgICAgICAgcmV0dXJuOwogICAgc2hvdWxkQmVUcnVlKCJzdWNjZXNz
ZnVsbHlQYXJzZWQiKTsKICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBD
T01QTEVURTwvc3Bhbj4nKTsKICAgIGlmICh3aW5kb3cuanNUZXN0SXNBc3luYyAmJiB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwp9Cjwvc2NyaXB0Pgo8c3R5bGU+CnRhYmxlLCB0ZCwgdGggeyBib3JkZXI6IDJweCBz
b2xpZCBibHVlIH0gLyogVG8gbWFrZSBpdCBlYXNpZXIgdG8gdmlzdWFsbHkgaW5zcGVjdCB0aGUg
dGVzdCBjYXNlLiAqLwo8L3N0eWxlPgo8c2NyaXB0Pgp2YXIgdGFibGVIb3J6b250YWxCb3JkZXJT
cGFjaW5nOwp2YXIgdGFibGVMZWZ0Qm9yZGVyOwp2YXIgdGFibGVUb3BCb3JkZXI7Cgp3aW5kb3cu
b25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgidGFibGUiKVswXTsKICAgIHZhciB0YWJsZVN0eWxlID0gY29tcHV0ZWRTdHls
ZSh0YWJsZSk7CiAgICB0YWJsZUxlZnRCb3JkZXIgPSBwYXJzZUludCh0YWJsZVN0eWxlLmJvcmRl
ckxlZnRXaWR0aCk7CiAgICB0YWJsZVRvcEJvcmRlciA9IHBhcnNlSW50KHRhYmxlU3R5bGUuYm9y
ZGVyVG9wV2lkdGgpOwogICAgdGFibGVIb3J6b250YWxCb3JkZXJTcGFjaW5nID0gcGFyc2VJbnQo
dGFibGUuZ2V0QXR0cmlidXRlKCJjZWxsc3BhY2luZyIpKTsKCiAgICBydW5UZXN0cygpOwp9Cgpm
dW5jdGlvbiBydW5UZXN0cygpCnsKICAgIGRlYnVnKCc8YnIgLz5UZXN0cyBmb3Igb2Zmc2V0TGVm
dDonKTsKICAgIHRlc3RPZmZzZXRMZWZ0KCk7CgogICAgZGVidWcoJzxiciAvPlRlc3RzIGZvciBv
ZmZzZXRUb3A6Jyk7CiAgICB0ZXN0T2Zmc2V0VG9wKCk7CgogICAgZGVidWcoJzxiciAvPlRlc3Rz
IGZvciBvZmZzZXRXaWR0aDonKTsKICAgIHRlc3RPZmZzZXRXaWR0aCgpOwoKICAgIGRlYnVnKCc8
YnIgLz5UZXN0cyBmb3Igb2Zmc2V0SGVpZ2h0OicpOwogICAgdGVzdE9mZnNldEhlaWdodCgpOwoK
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXSk7
CiAgICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+
Jyk7Cn0KCmZ1bmN0aW9uIHRlc3RPZmZzZXRMZWZ0KCkKewogICAgLy8gTm90ZSwgSUUgYWx3YXlz
IHJldHVybnMgMCBmb3IgdGhlIG9mZnNldExlZnQgb2YgYSBjb2x1bW4vY29sdW1uIGdyb3VwLgog
ICAgLy8gPGh0dHA6Ly9zb2NpYWwubXNkbi5taWNyb3NvZnQuY29tL0ZvcnVtcy9lbi9pZXdlYmRl
dmVsb3BtZW50L3RocmVhZC8wODU5N2QxZi03MTUzLTRlYmUtYjgzNC00YWMyODgzYzI0NDc+Lgog
ICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIp
LnBhcmVudE5vZGUub2Zmc2V0TGVmdCcsIDApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldExlZnQnLCAwKTsKICAgIHNob3Vs
ZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNl
dExlZnQnLCAwKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRMZWZ0JywgMCk7CiAgICBzaG91bGRFdmFsdWF0
ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRMZWZ0Jywg
MCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTyIp
Lm9mZnNldExlZnQnLCAwKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJoYXNQIikub2Zmc2V0TGVmdCcsIDApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zm
c2V0TGVmdCcsIDApOwp9CgpmdW5jdGlvbiB0ZXN0T2Zmc2V0VG9wKCkKewogICAgLy8gTm90ZSwg
SUUgYWx3YXlzIHJldHVybnMgMCBmb3IgdGhlIG9mZnNldFRvcCBvZiBhIGNvbHVtbi9jb2x1bW4g
Z3JvdXAuCiAgICAvLyA8aHR0cDovL3NvY2lhbC5tc2RuLm1pY3Jvc29mdC5jb20vRm9ydW1zL2Vu
L2lld2ViZGV2ZWxvcG1lbnQvdGhyZWFkLzA4NTk3ZDFmLTcxNTMtNGViZS1iODM0LTRhYzI4ODNj
MjQ0Nz4uCiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJv
ZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRUb3AnLCAwKTsKICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRUb3AnLCAwKTsKICAg
IHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIp
Lm9mZnNldFRvcCcsIDApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldFRvcCcsIDApOwogICAgc2hvdWxkRXZh
bHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0VG9w
JywgMCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TyIpLm9mZnNldFRvcCcsIDApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhhc1AiKS5vZmZzZXRUb3AnLCAwKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9m
ZnNldFRvcCcsIDApOwp9CgpmdW5jdGlvbiB0ZXN0T2Zmc2V0V2lkdGgoKQp7CiAgICBzaG91bGRC
ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0
V2lkdGgnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMSIpLm9mZnNldFdpZHRo
ICsgdGFibGVIb3J6b250YWxCb3JkZXJTcGFjaW5nICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJvdzFDZWxsMiIpLm9mZnNldFdpZHRoJyk7CiAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRXaWR0aCcpOwogICAgc2hvdWxkQmUoJ2RvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyb3cxQ2VsbDIiKS5vZmZzZXRXaWR0aCcpOwogICAgc2hvdWxkQmUoJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRXaWR0aCcsICdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0V2lkdGggKyB0YWJsZUhv
cnpvbnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw0
Iikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpvbnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lkdGgnKTsKICAgIHNob3VsZEJlKCdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRXaWR0aCcsICdkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcnpv
bnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw0Iiku
b2Zmc2V0V2lkdGgnKTsKICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TyIpLm9mZnNldFdpZHRoJywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDUiKS5v
ZmZzZXRXaWR0aCcpOwogICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQ
Iikub2Zmc2V0V2lkdGgnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNiIpLm9m
ZnNldFdpZHRoJyk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRXaWR0aCcsIDApOwp9Cgpm
dW5jdGlvbiB0ZXN0T2Zmc2V0SGVpZ2h0KCkKewogICAgdmFyIHRhYmxlQ29udGVudEhlaWdodCA9
ICdkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQg
LSAyICogdGFibGVUb3BCb3JkZXInOwogICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhl
aWdodCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJv
ZHVjdE5vIikub2Zmc2V0SGVpZ2h0JywgdGFibGVDb250ZW50SGVpZ2h0KTsKICAgIHNob3VsZEJl
KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZzZXRIZWlnaHQnLCB0
YWJsZUNvbnRlbnRIZWlnaHQpOwogICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRIZWlnaHQnLCB0YWJsZUNvbnRlbnRIZWlnaHQp
OwogICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9m
ZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CiAgICBzaG91bGRCZSgnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRIZWlnaHQnLCB0YWJsZUNvbnRlbnRIZWlnaHQp
OwogICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0SGVp
Z2h0JywgdGFibGVDb250ZW50SGVpZ2h0KTsKICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRIZWlnaHQnLCB0
YWJsZUNvbnRlbnRIZWlnaHQpOwp9CgpmdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsZW1lbnQpCnsK
ICAgIHZhciBzdHlsZTsKICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkKICAgICAgICBz
dHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpOwogICAgZWxzZSB7
CiAgICAgICAgLy8gQXNzdW1lIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyB3aXRoaW4gSW50ZXJu
ZXQgRXhwbG9yZXIuCiAgICAgICAgc3R5bGUgPSBlbGVtZW50LmN1cnJlbnRTdHlsZTsKICAgIH0K
ICAgIHJldHVybiBzdHlsZTsKfQo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cjx0YWJsZSBjZWxsc3BhY2luZz0iNCI+CiAgICA8Y29sIGlkPSJwcm9kdWN0
Tm8iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPgogICAgPGNvbCBpZD0icHJv
ZHVjdE5hbWUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuIj4KICAgIDxjb2xn
cm91cCBpZD0iaGFzTUFuZEhhc05BbmRIYXNPIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGln
aHRncmF5Ij4KICAgICAgICA8Y29sIGlkPSJoYXNNQW5kSGFzTiIgc3Bhbj0iMiI+CiAgICAgICAg
PGNvbCBpZD0iaGFzTyI+CiAgICA8L2NvbGdyb3VwPgogICAgPGNvbGdyb3VwIGlkPSJoYXNQIiBz
dHlsZT0iYmFja2dyb3VuZC1jb2xvcjogZ3JheSI+CiAgICA8Y29sZ3JvdXAgaWQ9ImNvbHVtblRo
YXRTaG91bGROb3RCZVJlbmRlcmVkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmVkIiBzcGFu
PSIyIj4KICAgIDx0aGVhZD4KICAgICAgICA8dHI+PHRoPlByb2R1Y3QgTm8uPC90aD48dGg+TmFt
ZTwvdGg+PHRoPkhhcyBNPC90aD48dGg+SGFzIE48L3RoPjx0aD5IYXMgTzwvdGg+PHRoPkhhcyBQ
PC90aD48L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgICAgICA8dHI+PHRkIGlkPSJy
b3cxQ2VsbDEiPjE8L3RkPjx0ZCBpZD0icm93MUNlbGwyIj5HaXptbyBBPC90ZD48dGQgaWQ9InJv
dzFDZWxsMyI+JiN4MjcxMzs8L3RkPjx0ZCBpZD0icm93MUNlbGw0Ij48L3RkPjx0ZCBpZD0icm93
MUNlbGw1Ij4mI3gyNzEzOzwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDYiPiYjeDI3MTM7PC90ZD48L3Ry
PgogICAgICAgIDx0cj48dGQ+MjwvdGQ+PHRkPkdpem1vIEEgUHJvPC90ZD48dGQ+JiN4MjcxMzs8
L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PHRkPiYjeDI3MTM7PC90ZD48dGQ+JiN4MjcxMzs8L3RkPjwv
dHI+CiAgICAgICAgPHRyPjx0ZD4zPC90ZD48dGQ+R2l6bW8gQjwvdGQ+PHRkPjx0ZD48dGQgY29s
c3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+JiN4MjcxMzs8L3RkPjwvdHI+CiAg
ICA8L3Rib2R5Pgo8L3RhYmxlPgo8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KPHNjcmlwdD4KICAg
IGRlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lk
dGgsIEhlaWdodH0gd29yayBhbmQgcmV0dXJuIElFLWNvbXBhdGlibGUgcmVzdWx0cyBmb3IgdGFi
bGUgY29sdW1ucyBhbmQgY29sdW1uIGdyb3Vwcy4iKTsKICAgIHZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214928</attachid>
            <date>2013-10-22 22:13:50 -0700</date>
            <delta_ts>2014-02-18 12:09:04 -0800</delta_ts>
            <desc>Work-in-progress patch and layout test</desc>
            <filename>bug-15277-20131022221349.patch</filename>
            <type>text/plain</type>
            <size>31788</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWJhNDk5MmE1MjQwMWYx
OWJlYjRjNDc2YWZhMGJhZjk5MjIwNjc2OC4uMDJhZDViZDkzODFiY2E5MmUyODJjZjRhMWJjYjA3
MTEzMWYyOTlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDEzLTEwLTIyICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBDT0wgZWxlbWVudCBpbiB0
YWJsZSBoYXMgMCBmb3Igb2Zmc2V0V2lkdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Mjc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC90YWJsZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNl
dHMuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6UmVuZGVyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6
OmludmFsaWRhdGVDYWNoZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Ojp1cGRhdGVDb2x1bW5DYWNoZSk6IE1vZGlmaWVkIHRvIGJ1aWxkCisgICAgICAgIGVmZmVjdGl2
ZSBjb2x1bW4gaW5kZXggbWFwLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmVmZmVj
dGl2ZUluZGV4T2ZDb2x1bW4pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpvZmZzZXRUb3BGb3JDb2x1bW4pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpvZmZzZXRMZWZ0Rm9yQ29sdW1uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6b2Zmc2V0V2lkdGhGb3JDb2x1bW4pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpvZmZzZXRIZWlnaHRGb3JDb2x1bW4pOiBBZGRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpSZW5kZXJUYWJsZUNvbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNvbDo6bmV4dENvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNvbDo6b2Zmc2V0TGVmdCk6IEFkZGVkOyB0dXJucyBhcm91bmQgYW5kIGNhbGxzCisg
ICAgICAgIFJlbmRlclRhYmxlOjpvZmZzZXRMZWZ0Rm9yQ29sdW1uKCkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNvbDo6b2Zmc2V0VG9wKTogQWRkZWQ7IHR1cm5zIGFyb3VuZCBhbmQg
Y2FsbHMKKyAgICAgICAgUmVuZGVyVGFibGU6Om9mZnNldFRvcEZvckNvbHVtbigpLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDb2w6Om9mZnNldFdpZHRoKTogQWRkZWQ7IHR1cm5zIGFy
b3VuZCBhbmQgY2FsbHMKKyAgICAgICAgUmVuZGVyVGFibGU6Om9mZnNldFdpZHRoRm9yQ29sdW1u
KCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6b2Zmc2V0SGVpZ2h0KTogQWRk
ZWQ7IHR1cm5zIGFyb3VuZCBhbmQgY2FsbHMKKyAgICAgICAgUmVuZGVyVGFibGU6Om9mZnNldEhl
aWdodEZvckNvbHVtbigpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbENvbnN0YW50cy5oOiBBZGRlZC4KKwor
MjAxMy0xMC0yMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKICAgICAgICAg
W2lPU10gVXBzdHJlYW0gbW9yZSBBUk12N3MgYml0cwogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMDUyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhYTk0YzI4YzIyZDhkOTY3NmFh
NmUzMzkxOGI5NTU2M2I5ZGY4MjhkLi5iNWQ0YjgxM2NiMjdiM2IzZjIzMzkwYTI2NjUxZDk0ZDEz
Njc5ZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC01Mzc5LDYgKzUzNzksNyBAQAogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2
RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQ0UwOEMzRDExNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwOEMzQ0YxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwICovOyB9OwogCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwOEMzRDAxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OworCQlDRTRERkU3MTE3
NzkzMTVDMDA1NEMxOUQgLyogUmVuZGVyVGFibGVDb2xDb25zdGFudHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNERGRTcwMTc3OTMxNUMwMDU0QzE5
RCAvKiBSZW5kZXJUYWJsZUNvbENvbnN0YW50cy5oICovOyB9OwogCQlDRTdCMkRCMzE1ODZBQkFE
MDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEg
LyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0U3QjJEQjQxNTg2QUJBRDAwOThCM0ZBIC8qIEFs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIubW0gKi87IH07CiAJCUNFN0IyREI1MTU4NkFCQUQwMDk4QjNGQSAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIxMTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTIzMzgsNiArMTIzMzksNyBAQAogCQlDRTA1N0ZBNDEyMjA3MzExMDBBNDc2
RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRTA4QzNDRjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Uw
OEMzRDAxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTRERkU3MDE3NzkzMTVDMDA1NEMxOUQg
LyogUmVuZGVyVGFibGVDb2xDb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyVGFibGVDb2xDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0U1Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2ZW50U2VuZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U2VuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWx0ZXJuYXRp
dmVUZXh0VUlDb250cm9sbGVyLmg7IHBhdGggPSBtYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFN0IyREIwMTU4NkFCQUQwMDk4
QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW07IHBh
dGggPSBtYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3MDIsNiArMjA3MDQsNyBAQAogCQkJCUE4REY0QURGMDk4MEM0MkMw
MDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwuaCAqLywKIAkJCQlBOERGNEFERTA5ODBDNDJDMDA1
Mjk4MUIgLyogUmVuZGVyVGFibGVDb2wuY3BwICovLAogCQkJCUE4REY0QUU3MDk4MEM0MkMwMDUy
OTgxQiAvKiBSZW5kZXJUYWJsZUNvbC5oICovLAorCQkJCUNFNERGRTcwMTc3OTMxNUMwMDU0QzE5
RCAvKiBSZW5kZXJUYWJsZUNvbENvbnN0YW50cy5oICovLAogCQkJCUE4REY0QUU2MDk4MEM0MkMw
MDUyOTgxQiAvKiBSZW5kZXJUYWJsZVJvdy5jcHAgKi8sCiAJCQkJQThERjRBRTQwOTgwQzQyQzAw
NTI5ODFCIC8qIFJlbmRlclRhYmxlUm93LmggKi8sCiAJCQkJQThERjRBRTMwOTgwQzQyQzAwNTI5
ODFCIC8qIFJlbmRlclRhYmxlU2VjdGlvbi5jcHAgKi8sCkBAIC0yMjgwMyw2ICsyMjgwNiw3IEBA
CiAJCQkJODI4ODlCNEQxM0M2MjM5MjAwOUE2MTU2IC8qIEluc3BlY3RvclN0eWxlVGV4dEVkaXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU0MTMzQTgxMDJFMDBFODAwMDc1RDAwIC8qIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3OERBMjBGMTUyMEVCQTMw
MDYxNDFDMSAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U0
REZFNzExNzc5MzE1QzAwNTRDMTlEIC8qIFJlbmRlclRhYmxlQ29sQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyogSW5zcGVj
dG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTI5MTdEMTREMUMwMDQy
MEFBMSAvKiBSVENTdGF0c0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDcxNmMxZWI2YmRjY2VmMGE0ODExODM4ZTMy
MWE0YWEzMWVlZjMxNWYuLmU2OGU3Njk2ZDUxYTk0NDY3ZDdhZGY4OWI4MWExOTI2YmYyNTY3YzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRh
YmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGFibGVDb2xDb25zdGFudHMuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCkBA
IC02NSw2ICs2Niw4IEBAIFJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZShFbGVtZW50JiBlbGVtZW50
KQogICAgICwgbV92U3BhY2luZygwKQogICAgICwgbV9ib3JkZXJTdGFydCgwKQogICAgICwgbV9i
b3JkZXJFbmQoMCkKKyAgICAsIG1fY29sdW1uT2Zmc2V0VG9wKC0xKQorICAgICwgbV9jb2x1bW5P
ZmZzZXRIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIG1f
Y29sdW1uUG9zLmZpbGwoMCwgMSk7CkBAIC0yMzgsNiArMjQxLDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6aW52YWxpZGF0ZUNhY2hlZENvbHVtbnMoKQogewogICAgIG1fY29sdW1uUmVuZGVyZXJzVmFs
aWQgPSBmYWxzZTsKICAgICBtX2NvbHVtblJlbmRlcmVycy5yZXNpemUoMCk7CisgICAgbV9lZmZl
Y3RpdmVDb2x1bW5JbmRleE1hcC5jbGVhcigpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjphZGRD
b2x1bW4oY29uc3QgUmVuZGVyVGFibGVDb2wqKQpAQCAtODYyLDE2ICs4NjYsOTIgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6dXBkYXRlQ29sdW1uQ2FjaGUoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hh
c0NvbEVsZW1lbnRzKTsKICAgICBBU1NFUlQobV9jb2x1bW5SZW5kZXJlcnMuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobV9lZmZlY3RpdmVDb2x1bW5JbmRleE1hcC5pc0VtcHR5KCkpOwogICAgIEFT
U0VSVCghbV9jb2x1bW5SZW5kZXJlcnNWYWxpZCk7CiAKKyAgICB1bnNpZ25lZCBjb2x1bW5JbmRl
eCA9IDA7CiAgICAgZm9yIChSZW5kZXJUYWJsZUNvbCogY29sdW1uUmVuZGVyZXIgPSBmaXJzdENv
bHVtbigpOyBjb2x1bW5SZW5kZXJlcjsgY29sdW1uUmVuZGVyZXIgPSBjb2x1bW5SZW5kZXJlci0+
bmV4dENvbHVtbigpKSB7CiAgICAgICAgIGlmIChjb2x1bW5SZW5kZXJlci0+aXNUYWJsZUNvbHVt
bkdyb3VwV2l0aENvbHVtbkNoaWxkcmVuKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgbV9jb2x1bW5SZW5kZXJlcnMuYXBwZW5kKGNvbHVtblJlbmRlcmVyKTsKKyAgICAgICAgLy8g
RklYTUU6IGNvbFRvRWZmQ29sKCkgaXMgaW4gTyhudW1FZmZDb2xzKCkpLiBXZSBzaG91bGQgbG9v
ayB0byBjb21wdXRlIGl0IGRpcmVjdGx5LgorICAgICAgICBtX2VmZmVjdGl2ZUNvbHVtbkluZGV4
TWFwLmFkZChjb2x1bW5SZW5kZXJlciwgY29sVG9FZmZDb2woY29sdW1uSW5kZXgpKTsKKyAgICAg
ICAgY29sdW1uSW5kZXggKz0gY29sdW1uUmVuZGVyZXItPnNwYW4oKTsKICAgICB9CiAgICAgbV9j
b2x1bW5SZW5kZXJlcnNWYWxpZCA9IHRydWU7CiB9CiAKK3Vuc2lnbmVkIFJlbmRlclRhYmxlOjpl
ZmZlY3RpdmVJbmRleE9mQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJiBjb2x1bW4pIGNvbnN0
Cit7CisgICAgaWYgKCFtX2NvbHVtblJlbmRlcmVyc1ZhbGlkKQorICAgICAgICB1cGRhdGVDb2x1
bW5DYWNoZSgpOworICAgIGNvbnN0IFJlbmRlclRhYmxlQ29sKiBjb2x1bW5Ub1VzZTsKKyAgICBp
ZiAoIWNvbHVtbi5pc1RhYmxlQ29sdW1uR3JvdXBXaXRoQ29sdW1uQ2hpbGRyZW4oKSkKKyAgICAg
ICAgY29sdW1uVG9Vc2UgPSAmY29sdW1uOworICAgIGVsc2UgeworICAgICAgICAvLyBXZSBkZWZp
bmUgdGhlIGluZGV4IG9mIGEgPGNvbGdyb3VwPiB0byBiZSB0aGUgaW5kZXggb2YgaXRzIGZpcnN0
IGNvbHVtbi4KKyAgICAgICAgY29sdW1uVG9Vc2UgPSB0b1JlbmRlclRhYmxlQ29sKGNvbHVtbi5m
aXJzdENoaWxkKCkpOworICAgIH0KKyAgICBhdXRvIGl0ID0gbV9lZmZlY3RpdmVDb2x1bW5JbmRl
eE1hcC5maW5kKGNvbHVtblRvVXNlKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihpdCAhPSBtX2VmZmVjdGl2ZUNvbHVtbkluZGV4TWFwLmVuZCgpKTsKKyAgICBpZiAoaXQg
PT0gbV9lZmZlY3RpdmVDb2x1bW5JbmRleE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1heENv
bHVtbkluZGV4OworICAgIHJldHVybiBpdC0+dmFsdWU7Cit9CisKK0xheW91dFVuaXQgUmVuZGVy
VGFibGU6Om9mZnNldFRvcEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNvbCYgY29sdW1uKSBj
b25zdAoreworICAgIGlmIChlZmZlY3RpdmVJbmRleE9mQ29sdW1uKGNvbHVtbikgPj0gbnVtRWZm
Q29scygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9jb2x1bW5PZmZzZXRUb3AgPj0g
MCkKKyAgICAgICAgcmV0dXJuIG1fY29sdW1uT2Zmc2V0VG9wOworICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbiA9IHRvcE5vbkVtcHR5U2VjdGlvbigpOworICAgIG1fY29sdW1uT2Zmc2V0
VG9wID0gc2VjdGlvbiA/IHNlY3Rpb24tPm9mZnNldFRvcCgpICsgbV92U3BhY2luZyA6IExheW91
dFVuaXQoMCk7CisgICAgcmV0dXJuIG1fY29sdW1uT2Zmc2V0VG9wOworfQorCitMYXlvdXRVbml0
IFJlbmRlclRhYmxlOjpvZmZzZXRMZWZ0Rm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJiBj
b2x1bW4pIGNvbnN0Cit7CisgICAgdW5zaWduZWQgY29sdW1uSW5kZXggPSBlZmZlY3RpdmVJbmRl
eE9mQ29sdW1uKGNvbHVtbik7CisgICAgaWYgKGNvbHVtbkluZGV4ID49IG51bUVmZkNvbHMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fY29sdW1uUG9zW2NvbHVtbkluZGV4XSAr
IG1faFNwYWNpbmcgKyBib3JkZXJMZWZ0KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyVGFibGU6
Om9mZnNldFdpZHRoRm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJiBjb2x1bW4pIGNvbnN0
Cit7CisgICAgTGF5b3V0VW5pdCB3aWR0aCA9IDA7CisgICAgaWYgKGNvbHVtbi5pc1RhYmxlQ29s
dW1uR3JvdXBXaXRoQ29sdW1uQ2hpbGRyZW4oKSkgeworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkNoaWxkcmVuID0gMDsKKyAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDb2wqIGN1cnJlbnRDb2x1
bW4gPSAmY29sdW1uOworICAgICAgICB3aGlsZSAoKGN1cnJlbnRDb2x1bW4gPSBjdXJyZW50Q29s
dW1uLT5uZXh0Q29sdW1uKFJlbmRlclRhYmxlQ29sOjpTdGF5V2l0aGluVGhpc0NvbHVtbkdyb3Vw
KSkpIHsKKyAgICAgICAgICAgIHdpZHRoICs9IG9mZnNldFdpZHRoRm9yQ29sdW1uKCpjdXJyZW50
Q29sdW1uKTsKKyAgICAgICAgICAgICsrbnVtYmVyT2ZDaGlsZHJlbjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gd2lkdGggKyBMYXlvdXRVbml0KChudW1iZXJPZkNoaWxkcmVuIC0gMSkgKiBt
X2hTcGFjaW5nKTsKKyAgICB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RpdmVDb2x1bW5z
ID0gbnVtRWZmQ29scygpOworICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4ID0gZWZmZWN0aXZlSW5k
ZXhPZkNvbHVtbihjb2x1bW4pOworICAgIGlmIChjb2x1bW5JbmRleCA+PSBudW1iZXJPZkVmZmVj
dGl2ZUNvbHVtbnMpCisgICAgICAgIHJldHVybiAwOworICAgIGZvciAodW5zaWduZWQgc3BhbiA9
IGNvbHVtbi5zcGFuKCk7IHNwYW4gJiYgY29sdW1uSW5kZXggPCBudW1iZXJPZkVmZmVjdGl2ZUNv
bHVtbnM7ICsrY29sdW1uSW5kZXgsIC0tc3BhbikKKyAgICAgICAgd2lkdGggKz0gbV9jb2x1bW5Q
b3NbY29sdW1uSW5kZXggKyAxXSAtIG1fY29sdW1uUG9zW2NvbHVtbkluZGV4XTsKKyAgICByZXR1
cm4gd2lkdGggLSBtX2hTcGFjaW5nOworfQorCitMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpvZmZz
ZXRIZWlnaHRGb3JDb2x1bW4oY29uc3QgUmVuZGVyVGFibGVDb2wmIGNvbHVtbikgY29uc3QKK3sK
KyAgICBpZiAoZWZmZWN0aXZlSW5kZXhPZkNvbHVtbihjb2x1bW4pID49IG51bUVmZkNvbHMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fY29sdW1uT2Zmc2V0SGVpZ2h0ID49IDApCisg
ICAgICAgIHJldHVybiBtX2NvbHVtbk9mZnNldEhlaWdodDsKKyAgICBMYXlvdXRVbml0IGhlaWdo
dCA9IDA7CisgICAgZm9yIChSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b3BTZWN0aW9u
KCk7IHNlY3Rpb247IHNlY3Rpb24gPSBzZWN0aW9uQmVsb3coc2VjdGlvbikpCisgICAgICAgIGhl
aWdodCArPSBzZWN0aW9uLT5vZmZzZXRIZWlnaHQoKTsKKyAgICBtX2NvbHVtbk9mZnNldEhlaWdo
dCA9IGhlaWdodDsKKyAgICByZXR1cm4gbV9jb2x1bW5PZmZzZXRIZWlnaHQ7Cit9CisKIFJlbmRl
clRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6c2xvd0NvbEVsZW1lbnQodW5zaWduZWQgY29sLCBib29s
KiBzdGFydEVkZ2UsIGJvb2wqIGVuZEVkZ2UpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faGFzQ29s
RWxlbWVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAppbmRleCA2MmE4
N2IzYmU1OGE5MjVmMjNkMjA3Y2Y3YTBjYmVjZDM4ZWFkYjM5Li5jYjM5MTBiMGNmNDZmZjdiMDFi
NjRiM2FmZDJjNzdiMzdlMWExZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNp
bmNsdWRlICJDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI2Myw2ICsyNjQsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sKik7CiAgICAgdm9pZCByZW1vdmVDb2x1bW4o
Y29uc3QgUmVuZGVyVGFibGVDb2wqKTsKIAorICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yQ29s
dW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvZmZzZXRM
ZWZ0Rm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJikgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBvZmZzZXRXaWR0aEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNvbCYpIGNvbnN0OworICAg
IExheW91dFVuaXQgb2Zmc2V0SGVpZ2h0Rm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJikg
Y29uc3Q7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIE9WRVJSSURFIEZJTkFM
OwogICAgIHZpcnR1YWwgdm9pZCBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpIE9WRVJSSURF
IEZJTkFMOwpAQCAtMjkyLDYgKzI5OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb2x1
bW5DYWNoZSgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZENvbHVtbnMoKTsKIAor
ICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUluZGV4T2ZDb2x1bW4oY29uc3QgUmVuZGVyVGFibGVDb2wm
KSBjb25zdDsKKwogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCkg
T1ZFUlJJREUgRklOQUw7CiAgICAgCkBAIC0zMTgsNiArMzI2LDkgQEAgcHJpdmF0ZToKICAgICBt
dXRhYmxlIFZlY3RvcjxSZW5kZXJUYWJsZUNhcHRpb24qPiBtX2NhcHRpb25zOwogICAgIG11dGFi
bGUgVmVjdG9yPFJlbmRlclRhYmxlQ29sKj4gbV9jb2x1bW5SZW5kZXJlcnM7CiAKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyVGFibGVDb2wqLCB1bnNpZ25lZD4gRWZmZWN0aXZlQ29s
dW1uSW5kZXhNYXA7CisgICAgbXV0YWJsZSBFZmZlY3RpdmVDb2x1bW5JbmRleE1hcCBtX2VmZmVj
dGl2ZUNvbHVtbkluZGV4TWFwOworCiAgICAgbXV0YWJsZSBSZW5kZXJUYWJsZVNlY3Rpb24qIG1f
aGVhZDsKICAgICBtdXRhYmxlIFJlbmRlclRhYmxlU2VjdGlvbiogbV9mb290OwogICAgIG11dGFi
bGUgUmVuZGVyVGFibGVTZWN0aW9uKiBtX2ZpcnN0Qm9keTsKQEAgLTMzOCw2ICszNDksOCBAQCBw
cml2YXRlOgogICAgIHNob3J0IG1fdlNwYWNpbmc7CiAgICAgaW50IG1fYm9yZGVyU3RhcnQ7CiAg
ICAgaW50IG1fYm9yZGVyRW5kOworICAgIG11dGFibGUgTGF5b3V0VW5pdCBtX2NvbHVtbk9mZnNl
dFRvcDsKKyAgICBtdXRhYmxlIExheW91dFVuaXQgbV9jb2x1bW5PZmZzZXRIZWlnaHQ7CiB9Owog
CiBpbmxpbmUgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wU2VjdGlvbigpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5kZXggMDdl
NzgzZjYwOGExNzNiOTUwNzE0YmEyMmY0YmNlMjA5NjM3MzM2Yi4uZGQ4ODM0MDJmMThmMTQ5NGU3
OTI1NGI5ZjY5MWUyZGM5NzRlMGQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaApAQCAtMjYsMTQgKzI2LDEyIEBACiAjZGVmaW5lIFJlbmRlclRhYmxlQ2Vs
bF9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNvbENvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVTZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHVuc2V0Q29sdW1uSW5kZXggPSAweDFGRkZGRkZGOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heENvbHVtbkluZGV4ID0gMHgxRkZGRkZGRTsgLy8gNTM2LDg3MCw5MTAKLQog
ZW51bSBJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCB7IERvTm90SW5jbHVkZUJvcmRlckNvbG9yLCBJ
bmNsdWRlQm9yZGVyQ29sb3IgfTsKIAogY2xhc3MgUmVuZGVyVGFibGVDZWxsIEZJTkFMIDogcHVi
bGljIFJlbmRlckJsb2NrRmxvdyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcAppbmRleCA3YjVmNDA3NzkwMWEyYzFiODk2NWFmMmFmN2RmNjljYWNlYWM5NmQ5
Li5hYjhkNjYyYmEzYjQ5MTIzOGM3OWI4MTEyMmE0YjYyZTAwMmZiNTU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJIVE1MVGFibGVDb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbENv
bnN0YW50cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYgKzM5LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFJlbmRlclRhYmxlQ29sOjpSZW5kZXJUYWJsZUNvbChF
bGVtZW50JiBlbGVtZW50KQogICAgIDogUmVuZGVyQm94KGVsZW1lbnQsIDApCiAgICAgLCBtX3Nw
YW4oMSkKKyAgICAsIG1fY29sdW1uSW5kZXgodW5zZXRDb2x1bW5JbmRleCkKIHsKICAgICAvLyBp
bml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKHRydWUpOyAvLyBvdXIg
b2JqZWN0IGlzIG5vdCBJbmxpbmUKQEAgLTEzOSw3ICsxNDEsNyBAQCBSZW5kZXJUYWJsZUNvbCog
UmVuZGVyVGFibGVDb2w6OmVuY2xvc2luZ0NvbHVtbkdyb3VwKCkgY29uc3QKICAgICByZXR1cm4g
cGFyZW50Q29sdW1uR3JvdXA7CiB9CiAKLVJlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZUNvbDo6
bmV4dENvbHVtbigpIGNvbnN0CitSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGVDb2w6Om5leHRD
b2x1bW4oQ29sdW1uVHJhdmVyc2FsQmVoYXZpb3Igc3RheVdpdGhpbkdyb3VwKSBjb25zdAogewog
ICAgIC8vIElmIHx0aGlzfCBpcyBhIGNvbHVtbi1ncm91cCwgdGhlIG5leHQgY29sdW1uIGlzIHRo
ZSBjb2xncm91cCdzIGZpcnN0IGNoaWxkIGNvbHVtbi4KICAgICBpZiAoUmVuZGVyT2JqZWN0KiBm
aXJzdENoaWxkID0gdGhpcy0+Zmlyc3RDaGlsZCgpKQpAQCAtMTQ5LDcgKzE1MSw3IEBAIFJlbmRl
clRhYmxlQ29sKiBSZW5kZXJUYWJsZUNvbDo6bmV4dENvbHVtbigpIGNvbnN0CiAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKIAogICAgIC8vIEZhaWxpbmcgdGhhdCwgdGhl
IGNoaWxkIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiBhIGNvbHVtbi1ncm91cCwgc28gdGhlIG5leHQg
Y29sdW1uIGlzIHRoZSBuZXh0IGNvbHVtbi9jb2x1bW4tZ3JvdXAgYWZ0ZXIgaXRzIGNvbHVtbi1n
cm91cC4KLSAgICBpZiAoIW5leHQgJiYgcGFyZW50KCktPmlzUmVuZGVyVGFibGVDb2woKSkKKyAg
ICBpZiAoIW5leHQgJiYgc3RheVdpdGhpbkdyb3VwID09IERvTm90U3RheVdpdGhpblRoaXNDb2x1
bW5Hcm91cCAmJiBwYXJlbnQoKS0+aXNSZW5kZXJUYWJsZUNvbCgpKQogICAgICAgICBuZXh0ID0g
cGFyZW50KCktPm5leHRTaWJsaW5nKCk7CiAKICAgICBmb3IgKDsgbmV4dCAmJiAhbmV4dC0+aXNS
ZW5kZXJUYWJsZUNvbCgpOyBuZXh0ID0gbmV4dC0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMTg0LDUg
KzE4NiwyNSBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVDb2w6OmJvcmRlckFkam9p
bmluZ0NlbGxBZnRlcihjb25zdCBSZW5kZXJUYWJsZUNlbAogICAgIEFTU0VSVF9VTlVTRUQoY2Vs
bCwgdGFibGUoKS0+Y29sRWxlbWVudChjZWxsLT5jb2woKSAtIDEpID09IHRoaXMpOwogICAgIHJl
dHVybiBzdHlsZSgpLT5ib3JkZXJFbmQoKTsKIH0KKyAgICAKK0xheW91dFVuaXQgUmVuZGVyVGFi
bGVDb2w6Om9mZnNldExlZnQoKSBjb25zdAoreworICAgIHJldHVybiB0YWJsZSgpLT5vZmZzZXRM
ZWZ0Rm9yQ29sdW1uKCp0aGlzKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNvbDo6b2Zm
c2V0VG9wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGFibGUoKS0+b2Zmc2V0VG9wRm9yQ29sdW1u
KCp0aGlzKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNvbDo6b2Zmc2V0V2lkdGgoKSBj
b25zdAoreworICAgIHJldHVybiB0YWJsZSgpLT5vZmZzZXRXaWR0aEZvckNvbHVtbigqdGhpcyk7
Cit9CisKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDb2w6Om9mZnNldEhlaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRhYmxlKCktPm9mZnNldEhlaWdodEZvckNvbHVtbigqdGhpcyk7Cit9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKaW5kZXggYjM2NzJm
NmY0YWJjYjc5NGI0ZTYyYjc0ZjQyMzkyMWRmMjVhNDZhZS4uNGU1ZjNkODQ4ZjUwYjI5YzFkNmY0
ZjE4ODk1YzUyZGNlZjY0YTk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHNwYW4oKSBj
b25zdCB7IHJldHVybiBtX3NwYW47IH0KICAgICB2b2lkIHNldFNwYW4odW5zaWduZWQgc3Bhbikg
eyBtX3NwYW4gPSBzcGFuOyB9CiAKLSAgICBib29sIGlzVGFibGVDb2x1bW5Hcm91cFdpdGhDb2x1
bW5DaGlsZHJlbigpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoKTsgfQorICAgIGJvb2wgaXNUYWJsZUNv
bHVtbkdyb3VwV2l0aENvbHVtbkNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gZmlyc3RDaGlsZCgp
OyB9CiAgICAgYm9vbCBpc1RhYmxlQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlz
cGxheSgpID09IFRBQkxFX0NPTFVNTjsgfQogICAgIGJvb2wgaXNUYWJsZUNvbHVtbkdyb3VwKCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9HUk9VUDsg
fQogCkBAIC02MiwxNSArNjIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Q29sdW1uR3JvdXAoKTsKICAgICB9CiAKLQorICAgIGVudW0gQ29sdW1uVHJhdmVyc2FsQmVoYXZp
b3IgeyBEb05vdFN0YXlXaXRoaW5UaGlzQ29sdW1uR3JvdXAsIFN0YXlXaXRoaW5UaGlzQ29sdW1u
R3JvdXAgfTsKICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGNvbHVtbiBvciBjb2x1bW4tZ3JvdXAu
Ci0gICAgUmVuZGVyVGFibGVDb2wqIG5leHRDb2x1bW4oKSBjb25zdDsKKyAgICBSZW5kZXJUYWJs
ZUNvbCogbmV4dENvbHVtbihDb2x1bW5UcmF2ZXJzYWxCZWhhdmlvciA9IERvTm90U3RheVdpdGhp
blRoaXNDb2x1bW5Hcm91cCkgY29uc3Q7CiAKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
QWRqb2luaW5nQ2VsbFN0YXJ0Qm9yZGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0Owog
ICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsRW5kQm9yZGVyKGNvbnN0
IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJB
ZGpvaW5pbmdDZWxsQmVmb3JlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwogICAgIGNv
bnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoY29uc3QgUmVuZGVyVGFi
bGVDZWxsKikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0TGVmdCgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRUb3AoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgT1ZFUlJJ
REU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclRhYmxlQ29sIjsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlclRhYmxlQ29sKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sQ29uc3RhbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2xDb25zdGFudHMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ZWU4ZGQzZDQxY2RiZjUyYTZlOTk4YmFkY2U5NGY3OGIxMDYzZWNiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sQ29u
c3RhbnRzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyVGFi
bGVDb2xDb25zdGFudHNfaAorI2RlZmluZSBSZW5kZXJUYWJsZUNvbENvbnN0YW50c19oCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQgdW5zZXRDb2x1bW5JbmRleCA9IDB4
MUZGRkZGRkY7Citjb25zdCB1bnNpZ25lZCBtYXhDb2x1bW5JbmRleCA9IDB4MUZGRkZGRkU7IC8v
IDUzNiw4NzAsOTEwCisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjhmYWJhODFhZTQ4ZGQ4ZjgxNjAw
ZDU1YTZjMzM0NzE5NDU1ZTIyZS4uMzU2Y2E0YmM0MzQ3YTZiZDNiNmZlMzUxZjA3M2IwOWEzYmNi
Y2MzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTIyICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDT0wgZWxlbWVudCBpbiB0YWJsZSBoYXMgMCBm
b3Igb2Zmc2V0V2lkdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Mjc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0
bWw6IEFkZGVkLgorCiAyMDEzLTEwLTIyICBCcmVuZGFuIExvbmcgIDxiLmxvbmdAY2FibGVsYWJz
LmNvbT4KIAogICAgICAgICBjdWUudGV4dCBmYWlscyBmb3Igc29tZSB0cmFjayBlbGVtZW50IGN1
ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1v
ZmZzZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xn
cm91cC1vZmZzZXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDdkZjZhNmI5ZGRmOTZlMDIx
ZGM3ZGMyNzBiOTc1ZDZiMzM3ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC90YWJsZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NDggQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBvZmZzZXR7TGVmdCwgVG9wLCBXaWR0aCwgSGVp
Z2h0fSB3b3JrIGFuZCByZXR1cm4gSUUtY29tcGF0aWJsZSByZXN1bHRzIGZvciB0YWJsZSBjb2x1
bW5zIGFuZCBjb2x1bW4gZ3JvdXBzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
CitUZXN0cyBmb3Igb2Zmc2V0TGVmdDoKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBy
b2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0TGVmdCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0IGlzIDAKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0TGVmdCBpcyAwCitQQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRMZWZ0IGlzIDAKK1BB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0TGVmdCBpcyAw
CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0TGVmdCBpcyAwCitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0TGVmdCBpcyAwCitQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIp
Lm9mZnNldExlZnQgaXMgMAorCitUZXN0cyBmb3Igb2Zmc2V0VG9wOgorUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRUb3AgaXMgMAorUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikub2Zmc2V0VG9wIGlzIDAKK1BB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0VG9wIGlzIDAK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNl
dFRvcCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9m
ZnNldFRvcCBpcyAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0
VG9wIGlzIDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRUb3Ag
aXMgMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1uVGhhdFNob3VsZE5vdEJl
UmVuZGVyZWQiKS5vZmZzZXRUb3AgaXMgMAorCitUZXN0cyBmb3Igb2Zmc2V0V2lkdGg6CitQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldFdp
ZHRoIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRXaWR0aCAr
IHRhYmxlSG9yem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
b3cxQ2VsbDIiKS5vZmZzZXRXaWR0aAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJv
ZHVjdE5vIikub2Zmc2V0V2lkdGggaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxs
MSIpLm9mZnNldFdpZHRoCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFt
ZSIpLm9mZnNldFdpZHRoIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDIiKS5v
ZmZzZXRXaWR0aAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRI
YXNPIikub2Zmc2V0V2lkdGggaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIp
Lm9mZnNldFdpZHRoICsgdGFibGVIb3J6b250YWxCb3JkZXJTcGFjaW5nICsgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJvdzFDZWxsNCIpLm9mZnNldFdpZHRoICsgdGFibGVIb3J6b250YWxCb3Jk
ZXJTcGFjaW5nICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNSIpLm9mZnNldFdp
ZHRoCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9mZnNldFdp
ZHRoIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0aCAr
IHRhYmxlSG9yem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
b3cxQ2VsbDQiKS5vZmZzZXRXaWR0aAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TyIpLm9mZnNldFdpZHRoIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDUiKS5v
ZmZzZXRXaWR0aAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzUCIpLm9mZnNldFdp
ZHRoIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRXaWR0aAor
UEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1uVGhhdFNob3VsZE5vdEJlUmVuZGVy
ZWQiKS5vZmZzZXRXaWR0aCBpcyAwCisKK1Rlc3RzIGZvciBvZmZzZXRIZWlnaHQ6CitQQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldEhlaWdo
dCBpcyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWln
aHQgLSAyICogdGFibGVUb3BCb3JkZXIKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBy
b2R1Y3RObyIpLm9mZnNldEhlaWdodCBpcyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
dGFibGUiKVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3JkZXIKK1BBU1MgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0SGVpZ2h0IGlzIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdLm9mZnNldEhlaWdodCAtIDIgKiB0YWJs
ZVRvcEJvcmRlcgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRI
YXNPIikub2Zmc2V0SGVpZ2h0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJs
ZSIpWzBdLm9mZnNldEhlaWdodCAtIDIgKiB0YWJsZVRvcEJvcmRlcgorUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRIZWlnaHQgaXMgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF0ub2Zmc2V0SGVpZ2h0IC0gMiAqIHRhYmxlVG9w
Qm9yZGVyCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0SGVpZ2h0
IGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdLm9mZnNldEhlaWdo
dCAtIDIgKiB0YWJsZVRvcEJvcmRlcgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
UCIpLm9mZnNldEhlaWdodCBpcyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUi
KVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3JkZXIKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0SGVpZ2h0
IGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdLm9mZnNldEhlaWdo
dCAtIDIgKiB0YWJsZVRvcEJvcmRlcgorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk0NzM0NDRhMmUwYjk2MjllNWRjNzM0NmEzYTZjNTRkYjgzMzA4YTEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy5o
dG1sCkBAIC0wLDAgKzEsMTM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzdHlsZT4KK3RhYmxlLCB0ZCwgdGggeyBib3JkZXI6IDJweCBzb2xpZCBibHVlIH0g
LyogVG8gbWFrZSBpdCBlYXNpZXIgdG8gdmlzdWFsbHkgaW5zcGVjdCB0aGUgdGVzdCBjYXNlLiAq
LworPC9zdHlsZT4KKzxzY3JpcHQ+Cit2YXIgdGFibGVIb3Jpem9udGFsQm9yZGVyU3BhY2luZzsK
K3ZhciB0YWJsZUxlZnRCb3JkZXI7Cit2YXIgdGFibGVUb3BCb3JkZXI7CisKK3dpbmRvdy5vbmxv
YWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGFibGUiKVswXTsKKyAgICB2YXIgdGFibGVTdHlsZSA9IGNvbXB1dGVkU3R5bGUo
dGFibGUpOworICAgIHRhYmxlTGVmdEJvcmRlciA9IHBhcnNlSW50KHRhYmxlU3R5bGUuYm9yZGVy
TGVmdFdpZHRoKTsKKyAgICB0YWJsZVRvcEJvcmRlciA9IHBhcnNlSW50KHRhYmxlU3R5bGUuYm9y
ZGVyVG9wV2lkdGgpOworICAgIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcgPSBwYXJzZUlu
dCh0YWJsZS5nZXRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIikpOworCisgICAgcnVuVGVzdHMoKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIGRlYnVnKCI8YnI+VGVzdHMgZm9yIG9m
ZnNldExlZnQ6Iik7CisgICAgdGVzdE9mZnNldExlZnQoKTsKKworICAgIGRlYnVnKCI8YnI+VGVz
dHMgZm9yIG9mZnNldFRvcDoiKTsKKyAgICB0ZXN0T2Zmc2V0VG9wKCk7CisKKyAgICBkZWJ1Zygi
PGJyPlRlc3RzIGZvciBvZmZzZXRXaWR0aDoiKTsKKyAgICB0ZXN0T2Zmc2V0V2lkdGgoKTsKKwor
ICAgIGRlYnVnKCI8YnI+VGVzdHMgZm9yIG9mZnNldEhlaWdodDoiKTsKKyAgICB0ZXN0T2Zmc2V0
SGVpZ2h0KCk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJ0YWJsZSIpWzBdKTsKKyAgICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1Qg
Q09NUExFVEU8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRMZWZ0KCkKK3sKKyAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIiku
cGFyZW50Tm9kZS5vZmZzZXRMZWZ0JywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2Vs
bDEiKS5vZmZzZXRMZWZ0Jyk7CisgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0JywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cx
Q2VsbDEiKS5vZmZzZXRMZWZ0Jyk7CisgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJvdzFDZWxsMiIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0TGVmdCcsICdkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0TGVmdCcpOworICAgIHNob3VsZEJl
KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldExlZnQnLCAnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNSIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRMZWZ0JywgJ2RvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRMZWZ0Jyk7CisgICAgc2hvdWxkRXZhbHVh
dGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRl
cmVkIikub2Zmc2V0TGVmdCcsIDApOworfQorCitmdW5jdGlvbiB0ZXN0T2Zmc2V0VG9wKCkKK3sK
KyAgICB2YXIgdG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROb0hlYWRpbmci
KS5vZmZzZXRUb3A7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0VG9wJywgdG9wKTsKKyAgICBzaG91bGRF
dmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikub2Zmc2V0VG9w
JywgdG9wKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cHJvZHVjdE5hbWUiKS5vZmZzZXRUb3AnLCB0b3ApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRUb3AnLCB0
b3ApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNN
QW5kSGFzTiIpLm9mZnNldFRvcCcsIHRvcCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRUb3AnLCB0b3ApOworICAgIHNob3VsZEV2
YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0VG9wJywgdG9w
KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1u
VGhhdFNob3VsZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRUb3AnLCAwKTsKK30KKworZnVuY3Rpb24g
dGVzdE9mZnNldFdpZHRoKCkKK3sKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCcsIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yaXpvbnRh
bEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zm
c2V0V2lkdGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwcm9kdWN0Tm8iKS5vZmZzZXRXaWR0aCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cx
Q2VsbDEiKS5vZmZzZXRXaWR0aCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0V2lkdGgnLCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0V2lkdGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRXaWR0
aCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0aCArIHRh
YmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93
MUNlbGw0Iikub2Zmc2V0V2lkdGggKyB0YWJsZUhvcml6b250YWxCb3JkZXJTcGFjaW5nICsgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNSIpLm9mZnNldFdpZHRoKTsKKyAgICBzaG91
bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZz
ZXRXaWR0aCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0
aCArIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicm93MUNlbGw0Iikub2Zmc2V0V2lkdGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0V2lkdGgnLCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lkdGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0V2lkdGgnLCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicm93MUNlbGw2Iikub2Zmc2V0V2lkdGgpOworICAgIHNob3VsZEV2YWx1
YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5k
ZXJlZCIpLm9mZnNldFdpZHRoJywgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRIZWlnaHQo
KQoreworICAgIHZhciB0YWJsZUNvbnRlbnRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGFibGUiKVswXS5vZmZzZXRIZWlnaHQgLSAyICogdGFibGVUb3BCb3JkZXIgLSBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYXB0aW9uIikub2Zmc2V0SGVpZ2h0OworICAgIHNob3Vs
ZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnRO
b2RlLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hvdWxkRXZhbHVh
dGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldEhlaWdodCcs
IHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0SGVpZ2h0JywgdGFibGVDb250ZW50SGVp
Z2h0KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TUFuZEhhc05BbmRIYXNPIikub2Zmc2V0SGVpZ2h0JywgdGFibGVDb250ZW50SGVpZ2h0KTsKKyAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04i
KS5vZmZzZXRIZWlnaHQnLCB0YWJsZUNvbnRlbnRIZWlnaHQpOworICAgIHNob3VsZEV2YWx1YXRl
VG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0SGVpZ2h0JywgdGFibGVD
b250ZW50SGVpZ2h0KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGFzUCIpLm9mZnNldEhlaWdodCcsIHRhYmxlQ29udGVudEhlaWdodCk7CisgICAgc2hv
dWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGRO
b3RCZVJlbmRlcmVkIikub2Zmc2V0SGVpZ2h0JywgMCk7Cit9CisKK2Z1bmN0aW9uIGNvbXB1dGVk
U3R5bGUoZWxlbWVudCkKK3sKKyAgICB2YXIgc3R5bGU7CisgICAgaWYgKHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKQorICAgICAgICBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1l
bnQsIG51bGwpOworICAgIGVsc2UgeworICAgICAgICAvLyBBc3N1bWUgdGhpcyBzY3JpcHQgaXMg
ZXhlY3V0aW5nIHdpdGhpbiBJbnRlcm5ldCBFeHBsb3Jlci4KKyAgICAgICAgc3R5bGUgPSBlbGVt
ZW50LmN1cnJlbnRTdHlsZTsKKyAgICB9CisgICAgcmV0dXJuIHN0eWxlOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHRhYmxlIGNlbGxz
cGFjaW5nPSI0Ij4KKyAgICA8Y2FwdGlvbj5Qcm9kdWN0IFRhYmxlPC9jYXB0aW9uPgorICAgIDxj
b2wgaWQ9InByb2R1Y3RObyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+Cisg
ICAgPGNvbCBpZD0icHJvZHVjdE5hbWUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdy
ZWVuIj4KKyAgICA8Y29sZ3JvdXAgaWQ9Imhhc01BbmRIYXNOQW5kSGFzTyIgc3R5bGU9ImJhY2tn
cm91bmQtY29sb3I6IGxpZ2h0Z3JheSI+CisgICAgICAgIDxjb2wgaWQ9Imhhc01BbmRIYXNOIiBz
cGFuPSIyIj4KKyAgICAgICAgPGNvbCBpZD0iaGFzTyI+CisgICAgPC9jb2xncm91cD4KKyAgICA8
Y29sZ3JvdXAgaWQ9Imhhc1AiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmF5Ij4KKyAgICA8
Y29sZ3JvdXAgaWQ9ImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIiBzdHlsZT0iYmFja2dy
b3VuZC1jb2xvcjogcmVkIiBzcGFuPSIyIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDx0cj48dGgg
aWQ9InByb2R1Y3ROb0hlYWRpbmciPlByb2R1Y3QgTm8uPC90aD48dGg+TmFtZTwvdGg+PHRoPkhh
cyBNPC90aD48dGg+SGFzIE48L3RoPjx0aD5IYXMgTzwvdGg+PHRoPkhhcyBQPC90aD48L3RyPgor
ICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PgorICAgICAgICA8dHI+PHRkIGlkPSJyb3cxQ2VsbDEi
PjE8L3RkPjx0ZCBpZD0icm93MUNlbGwyIj5HaXptbyBBPC90ZD48dGQgaWQ9InJvdzFDZWxsMyI+
JiN4MjcxMzs8L3RkPjx0ZCBpZD0icm93MUNlbGw0Ij48L3RkPjx0ZCBpZD0icm93MUNlbGw1Ij4m
I3gyNzEzOzwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDYiPiYjeDI3MTM7PC90ZD48L3RyPgorICAgICAg
ICA8dHI+PHRkPjI8L3RkPjx0ZD5HaXptbyBBIFBybzwvdGQ+PHRkPiYjeDI3MTM7PC90ZD48dGQ+
JiN4MjcxMzs8L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PHRkPiYjeDI3MTM7PC90ZD48L3RyPgorICAg
ICAgICA8dHI+PHRkPjM8L3RkPjx0ZD5HaXptbyBCPC90ZD48dGQ+PHRkPjx0ZCBjb2xzcGFuPSIy
IiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4mI3gyNzEzOzwvdGQ+PC90cj4KKyAgICA8L3Ri
b2R5PgorPC90YWJsZT4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG9mZnNldHtMZWZ0LCBUb3AsIFdpZHRo
LCBIZWlnaHR9IHdvcmsgYW5kIHJldHVybiBJRS1jb21wYXRpYmxlIHJlc3VsdHMgZm9yIHRhYmxl
IGNvbHVtbnMgYW5kIGNvbHVtbiBncm91cHMuIik7CisgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224533</attachid>
            <date>2014-02-18 12:08:55 -0800</date>
            <delta_ts>2014-02-20 11:21:40 -0800</delta_ts>
            <desc>Patch and layout test</desc>
            <filename>Bug15277_1.patch</filename>
            <type>text/plain</type>
            <size>31180</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">RnJvbSBhZWEzYWQzMDRkOGI5MGE2MjI2MGFhZWRhMzJiODQ5NDAzZGJjMTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgQmF0ZXMgPGRiYXRlc0B3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDE4IEZlYiAyMDE0IDExOjU5OjA1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gQ09MIGVs
ZW1lbnQgaW4gdGFibGUgaGFzIDAgZm9yIG9mZnNldFdpZHRoCiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzcKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoK
U291cmNlL1dlYkNvcmU6CgpJbXBsZW1lbnRzIG9mZnNldHtMZWZ0LCBUb3AsIFdpZHRoLCBIZWln
aHR9IGZvciB0YWJsZSBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzCnBlciBzZWN0aW9uIEV4dGVu
c2lvbnMgdG8gdGhlIEhUTUxFbGVtZW50IEludGVyZmFjZSBvZiB0aGUgQ1NTT00gVmlldyBzcGVj
LAo8aHR0cDovL3d3dy53My5vcmcvVFIvY3Nzb20tdmlldy8jZXh0ZW5zaW9ucy10by10aGUtaHRt
bGVsZW1lbnQtaW50ZXJmYWNlPiAoRHJhZnQgMTcgRGVjZW1iZXIgMjAxMykuCgpGb3Igbm93LCB3
ZSBmYWlsIGFsbW9zdCBhbGwgb2YgdGhlIG9mZnNldHtIZWlnaHQsIFRvcH0gc3ViLXRlc3RzIGlu
IHRoZSBpbmNsdWRlZCB0ZXN0CmZvciB0aGUgc2VwYXJhdGUgYm9yZGVyIG1vZGVsIGFzIHdlIG5l
ZWQgdG8gZml4IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4OTg4
Pi4KClRlc3Q6IGZhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWwKCiogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJs
ZSk6IEluaXRpYWxpemUgY2FjaGVkIGNvbHVtbiBvZmZzZXQgdG9wIGFuZCBvZmZzZXQgaGVpZ2h0
LgpXZSBjYWNoZSB0aGVzZSBvZmZzZXRzIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGZvciBhbGwg
Y29sdW1ucyBpbiB0aGUgdGFibGUuCihXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aW52YWxpZGF0ZUNh
Y2hlZENvbHVtbnMpOiBDbGVhciBjYWNoZWQgZWZmZWN0aXZlIGNvbHVtbiBpbmRleCBtYXAuCihX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6aW52YWxpZGF0ZUNhY2hlZENvbHVtbk9mZnNldHMpOiBBZGRl
ZC4KKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpsYXlvdXQpOiBJbnZhbGlkYXRlIGNhY2hlZCBjb2x1
bW4gb2Zmc2V0cyBhcyB0aGUgbG9jYXRpb24gb3IgaGVpZ2h0Cm9mIG9uZSBvciBtb3JlIHNlY3Rp
b25zIG1heSBoYXZlIGNoYW5nZWQuCihXZWJDb3JlOjpSZW5kZXJUYWJsZTo6dXBkYXRlQ29sdW1u
Q2FjaGUpOiBNb2RpZmllZCB0byBidWlsZCBlZmZlY3RpdmUgY29sdW1uIGluZGV4IG1hcC4KKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjplZmZlY3RpdmVJbmRleE9mQ29sdW1uKTogQWRkZWQuCihXZWJD
b3JlOjpSZW5kZXJUYWJsZTo6b2Zmc2V0VG9wRm9yQ29sdW1uKTogQWRkZWQuCihXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6b2Zmc2V0TGVmdEZvckNvbHVtbik6IEFkZGVkLgooV2ViQ29yZTo6UmVuZGVy
VGFibGU6Om9mZnNldFdpZHRoRm9yQ29sdW1uKTogQWRkZWQuCihXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6b2Zmc2V0SGVpZ2h0Rm9yQ29sdW1uKTogQWRkZWQuCiogcmVuZGVyaW5nL1JlbmRlclRhYmxl
Lmg6IE1ha2UgaXNUYWJsZUNvbHVtbkdyb3VwV2l0aENvbHVtbkNoaWxkcmVuKCkgY29uc3QuCiog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpv
ZmZzZXRMZWZ0KTogQWRkZWQ7IHR1cm5zIGFyb3VuZCBhbmQgY2FsbHMgUmVuZGVyVGFibGU6Om9m
ZnNldExlZnRGb3JDb2x1bW4oKS4KKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpvZmZzZXRUb3Ap
OiBBZGRlZDsgdHVybnMgYXJvdW5kIGFuZCBjYWxscyBSZW5kZXJUYWJsZTo6b2Zmc2V0VG9wRm9y
Q29sdW1uKCkuCihXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6b2Zmc2V0V2lkdGgpOiBBZGRlZDsg
dHVybnMgYXJvdW5kIGFuZCBjYWxscyBSZW5kZXJUYWJsZTo6b2Zmc2V0V2lkdGhGb3JDb2x1bW4o
KS4KKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpvZmZzZXRIZWlnaHQpOiBBZGRlZDsgdHVybnMg
YXJvdW5kIGFuZCBjYWxscyBSZW5kZXJUYWJsZTo6b2Zmc2V0SGVpZ2h0Rm9yQ29sdW1uKCkuCiog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmg6CgpMYXlvdXRUZXN0czoKCkFkZGVkIHRlc3QgdG8g
ZW5zdXJlIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdodH0gcmV0dXJuIGNvcnJl
Y3QgcmVzdWx0cwpmb3IgdGFibGUgY29sdW1ucyBhbmQgY29sdW1uIGdyb3Vwcy4KCkZvciBub3cs
IHdlIGZhaWwgYWxtb3N0IGFsbCBvZiB0aGUgb2Zmc2V0e0hlaWdodCwgVG9wfSBzdWItdGVzdHMg
Zm9yIHRoZSBzZXBhcmF0ZQpib3JkZXIgbW9kZWwgYXMgd2UgbmVlZCB0byBmaXggPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg5ODg+LgoKKiBmYXN0L3RhYmxlL2Nv
bC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgoqIGZhc3QvdGFibGUv
Y29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWw6IEFkZGVkLgotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAuLi4vdGFibGUv
Y29sLWFuZC1jb2xncm91cC1vZmZzZXRzLWV4cGVjdGVkLnR4dCAgICB8ICA5MyArKysrKysrKysr
KysKIC4uLi9mYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy5odG1sICAgICAgIHwg
MTYyICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAgICAgICAgICAgIHwgIDk4ICsrKysrKysrKysrKy0KIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oICAgICAgICAgICAgIHwgIDE2ICstCiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwICAgICAgICB8ICAyMCArKysK
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oICAgICAgICAgIHwgICA3
ICstCiA4IGZpbGVzIGNoYW5nZWQsIDQ0NiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xncm91
cC1vZmZzZXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zh
c3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWM4ZDExNC4u
YmYxMjQzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE0LTAyLTE4ICBEYW5pZWwgQmF0ZXMg
IDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDT0wgZWxlbWVudCBpbiB0YWJsZSBoYXMg
MCBmb3Igb2Zmc2V0V2lkdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Mjc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgdGVzdCB0byBlbnN1cmUgdGhhdCBvZmZzZXR7TGVmdCwgVG9wLCBXaWR0
aCwgSGVpZ2h0fSByZXR1cm4gY29ycmVjdCByZXN1bHRzCisgICAgICAgIGZvciB0YWJsZSBjb2x1
bW5zIGFuZCBjb2x1bW4gZ3JvdXBzLgorCisgICAgICAgIEZvciBub3csIHdlIGZhaWwgYWxtb3N0
IGFsbCBvZiB0aGUgb2Zmc2V0e0hlaWdodCwgVG9wfSBzdWItdGVzdHMgZm9yIHRoZSBzZXBhcmF0
ZQorICAgICAgICBib3JkZXIgbW9kZWwgYXMgd2UgbmVlZCB0byBmaXggPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg5ODg+LgorCisgICAgICAgICogZmFzdC90YWJs
ZS9jb2wtYW5kLWNvbGdyb3VwLW9mZnNldHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3RhYmxlL2NvbC1hbmQtY29sZ3JvdXAtb2Zmc2V0cy5odG1sOiBBZGRlZC4KKwogMjAx
NC0wMi0xOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIENvbnZlcnQgcG9zaXRpb246c3RpY2t5IHRvIHBvc2l0aW9uOnN0YXRpYyB1cG9uIGNvcHkg
YW5kIHBhc3RlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1hbmQtY29s
Z3JvdXAtb2Zmc2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3RhYmxlL2NvbC1h
bmQtY29sZ3JvdXAtb2Zmc2V0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTFjZDU3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
dGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkz
IEBACitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdo
dH0gd29yayBmb3IgdGFibGUgY29sdW1ucyBhbmQgY29sdW1uIGdyb3Vwcy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKKworV2hlbiBib3JkZXJDb2xsYXBzZSA9PSAic2VwYXJhdGUi
CisKK1Rlc3RzIGZvciBvZmZzZXRMZWZ0OgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRMZWZ0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRMZWZ0CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cx
Q2VsbDEiKS5vZmZzZXRMZWZ0CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0
TmFtZSIpLm9mZnNldExlZnQgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMiIp
Lm9mZnNldExlZnQKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5k
SGFzTyIpLm9mZnNldExlZnQgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIp
Lm9mZnNldExlZnQKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIiku
b2Zmc2V0TGVmdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0
TGVmdAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldExlZnQgaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNSIpLm9mZnNldExlZnQKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRMZWZ0IGlzIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRMZWZ0CitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldExlZnQgaXMgMAor
CitUZXN0cyBmb3Igb2Zmc2V0VG9wOgorRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJv
ZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRUb3Agc2hvdWxkIGJlIDI0LiBXYXMgMjAuCitGQUlM
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRUb3Agc2hvdWxkIGJl
IDI0LiBXYXMgMjAuCitGQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIp
Lm9mZnNldFRvcCBzaG91bGQgYmUgMjQuIFdhcyAyMC4KK0ZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldFRvcCBzaG91bGQgYmUgMjQuIFdhcyAy
MC4KK0ZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0VG9w
IHNob3VsZCBiZSAyNC4gV2FzIDIwLgorRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TyIpLm9mZnNldFRvcCBzaG91bGQgYmUgMjQuIFdhcyAyMC4KK0ZBSUwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhhc1AiKS5vZmZzZXRUb3Agc2hvdWxkIGJlIDI0LiBXYXMgMjAuCitQQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9m
ZnNldFRvcCBpcyAwCisKK1Rlc3RzIGZvciBvZmZzZXRXaWR0aDoKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0V2lkdGggaXMgMTg0CitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRXaWR0aCBpcyA4
OQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZzZXRXaWR0
aCBpcyA5MQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRIYXNP
Iikub2Zmc2V0V2lkdGggaXMgMTU1CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNN
QW5kSGFzTiIpLm9mZnNldFdpZHRoIGlzIDEwMworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaGFzTyIpLm9mZnNldFdpZHRoIGlzIDQ4CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJoYXNQIikub2Zmc2V0V2lkdGggaXMgNDYKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0V2lkdGggaXMgMAorCitUZXN0
cyBmb3Igb2Zmc2V0SGVpZ2h0OgorRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVj
dE5vIikucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgc2hvdWxkIGJlIDExMS4gV2FzIDExOS4KK0ZB
SUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldEhlaWdodCBzaG91
bGQgYmUgMTExLiBXYXMgMTE5LgorRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVj
dE5hbWUiKS5vZmZzZXRIZWlnaHQgc2hvdWxkIGJlIDExMS4gV2FzIDExOS4KK0ZBSUwgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldEhlaWdodCBzaG91
bGQgYmUgMTExLiBXYXMgMTE5LgorRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFu
ZEhhc04iKS5vZmZzZXRIZWlnaHQgc2hvdWxkIGJlIDExMS4gV2FzIDExOS4KK0ZBSUwgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRIZWlnaHQgc2hvdWxkIGJlIDExMS4gV2Fz
IDExOS4KK0ZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRIZWlnaHQg
c2hvdWxkIGJlIDExMS4gV2FzIDExOS4KK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0SGVpZ2h0IGlzIDAKKworV2hlbiBi
b3JkZXJDb2xsYXBzZSA9PSAiY29sbGFwc2UiCisKK1Rlc3RzIGZvciBvZmZzZXRMZWZ0OgorUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRM
ZWZ0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRMZWZ0CitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0IGlzIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRMZWZ0CitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldExlZnQgaXMgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMiIpLm9mZnNldExlZnQKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9mZnNldExlZnQgaXMgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIpLm9mZnNldExlZnQKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0TGVmdCBpcyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0TGVmdAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGFzTyIpLm9mZnNldExlZnQgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFD
ZWxsNSIpLm9mZnNldExlZnQKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5v
ZmZzZXRMZWZ0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRM
ZWZ0CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVS
ZW5kZXJlZCIpLm9mZnNldExlZnQgaXMgMAorCitUZXN0cyBmb3Igb2Zmc2V0VG9wOgorUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRUb3Ag
aXMgMTkKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldFRv
cCBpcyAxOQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZz
ZXRUb3AgaXMgMTkKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5k
SGFzTyIpLm9mZnNldFRvcCBpcyAxOQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TUFuZEhhc04iKS5vZmZzZXRUb3AgaXMgMTkKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhhc08iKS5vZmZzZXRUb3AgaXMgMTkKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhh
c1AiKS5vZmZzZXRUb3AgaXMgMTkKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVt
blRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0VG9wIGlzIDAKKworVGVzdHMgZm9yIG9m
ZnNldFdpZHRoOgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFy
ZW50Tm9kZS5vZmZzZXRXaWR0aCBpcyAxNzYKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InByb2R1Y3RObyIpLm9mZnNldFdpZHRoIGlzIDg3CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldFdpZHRoIGlzIDg5CitQQVNTIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRXaWR0aCBpcyAxNDEKK1BBU1Mg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0V2lkdGggaXMgOTUK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRXaWR0aCBpcyA0Ngor
UEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzUCIpLm9mZnNldFdpZHRoIGlzIDQ0CitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJl
ZCIpLm9mZnNldFdpZHRoIGlzIDAKKworVGVzdHMgZm9yIG9mZnNldEhlaWdodDoKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0
IGlzIDkxCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRI
ZWlnaHQgaXMgOTEKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIiku
b2Zmc2V0SGVpZ2h0IGlzIDkxCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5k
SGFzTkFuZEhhc08iKS5vZmZzZXRIZWlnaHQgaXMgOTEKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0SGVpZ2h0IGlzIDkxCitQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0SGVpZ2h0IGlzIDkxCitQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0SGVpZ2h0IGlzIDkxCitQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldEhlaWdo
dCBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90YWJsZS9jb2wtYW5kLWNvbGdyb3VwLW9m
ZnNldHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1vZmZz
ZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0MTNiMgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGFibGUvY29sLWFuZC1jb2xncm91cC1v
ZmZzZXRzLmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHN0eWxlPgordGFibGUsIHRkLCB0aCB7IGJvcmRlcjogMnB4IHNvbGlkIGJsdWU7IH0g
LyogVG8gbWFrZSBpdCBlYXNpZXIgdG8gdmlzdWFsbHkgaW5zcGVjdCB0aGUgdGVzdCBjYXNlLiAq
LworPC9zdHlsZT4KKzxzY3JpcHQ+Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKK3Zh
ciB0YWJsZTsKK3ZhciB0YWJsZUhvcml6b250YWxCb3JkZXJTcGFjaW5nOwordmFyIHRhYmxlVmVy
dGljYWxCb3JkZXJTcGFjaW5nOwordmFyIGJvcmRlckNvbGxhcHNlTWVudTsKKword2luZG93Lm9u
bG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRo
YXQgb2Zmc2V0e0xlZnQsIFRvcCwgV2lkdGgsIEhlaWdodH0gd29yayBmb3IgdGFibGUgY29sdW1u
cyBhbmQgY29sdW1uIGdyb3Vwcy4iKTsKKworICAgIHRhYmxlID0gZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcigidGFibGUiKTsKKyAgICBib3JkZXJDb2xsYXBzZU1lbnUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYm9yZGVyQ29sbGFwc2VNZW51Iik7CisgICAgYm9yZGVyQ29sbGFwc2VNZW51Lm9u
Y2hhbmdlID0gZGlkQ2hhbmdlQm9yZGVyQ29sbGFwc2U7CisKKyAgICBydW5UZXN0cygpOworfQor
CitmdW5jdGlvbiBkaWRDaGFuZ2VCb3JkZXJDb2xsYXBzZSgpCit7CisgICAgdmFyIG5ld0JvcmRl
ckNvbGxhcHNlID0gYm9yZGVyQ29sbGFwc2VNZW51Lm9wdGlvbnNbYm9yZGVyQ29sbGFwc2VNZW51
LnNlbGVjdGVkSW5kZXhdLnZhbHVlOworICAgIHRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0g
Ym9yZGVyQ29sbGFwc2VNZW51Lm9wdGlvbnNbYm9yZGVyQ29sbGFwc2VNZW51LnNlbGVjdGVkSW5k
ZXhdLnZhbHVlOworICAgIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcgPSBuZXdCb3JkZXJD
b2xsYXBzZSA9PT0gImNvbGxhcHNlIiA/IDAgOiBwYXJzZUludCh0YWJsZS5nZXRBdHRyaWJ1dGUo
ImNlbGxzcGFjaW5nIiksIDEwKTsKKyAgICB0YWJsZVZlcnRpY2FsQm9yZGVyU3BhY2luZyA9IHRh
YmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmc7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sK
KyAgICB2YXIgc2F2ZWRTZWxlY3RlZEluZGV4OworICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHNhdmVkU2VsZWN0ZWRJbmRleCA9IGJvcmRlckNvbGxhcHNlTWVudS5zZWxlY3Rl
ZEluZGV4OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3JkZXJDb2xsYXBzZU1lbnUub3B0
aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICBib3JkZXJDb2xsYXBzZU1lbnUub3B0aW9uc1tp
XS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIGRpZENoYW5nZUJvcmRlckNvbGxhcHNlKCk7CisK
KyAgICAgICAgZGVidWcoJzxicj5XaGVuIGJvcmRlckNvbGxhcHNlID09ICInICsgYm9yZGVyQ29s
bGFwc2VNZW51Lm9wdGlvbnNbaV0udmFsdWUgKyAnIicpOworCisgICAgICAgIGRlYnVnKCI8YnI+
VGVzdHMgZm9yIG9mZnNldExlZnQ6Iik7CisgICAgICAgIHRlc3RPZmZzZXRMZWZ0KCk7CisKKyAg
ICAgICAgZGVidWcoIjxicj5UZXN0cyBmb3Igb2Zmc2V0VG9wOiIpOworICAgICAgICB0ZXN0T2Zm
c2V0VG9wKCk7CisKKyAgICAgICAgZGVidWcoIjxicj5UZXN0cyBmb3Igb2Zmc2V0V2lkdGg6Iik7
CisgICAgICAgIHRlc3RPZmZzZXRXaWR0aCgpOworCisgICAgICAgIGRlYnVnKCI8YnI+VGVzdHMg
Zm9yIG9mZnNldEhlaWdodDoiKTsKKyAgICAgICAgdGVzdE9mZnNldEhlaWdodCgpOworICAgIH0K
KworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1v
dmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdC1jb250YWluZXIiKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIGJvcmRlckNvbGxhcHNlTWVudS5vcHRpb25zW3NhdmVkU2VsZWN0ZWRJ
bmRleF0uc2VsZWN0ZWQgPSB0cnVlOworICAgICAgICBkaWRDaGFuZ2VCb3JkZXJDb2xsYXBzZSgp
OworICAgIH0KKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gdGVzdE9mZnNldExl
ZnQoKQoreworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJw
cm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInJvdzFDZWxsMSIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldExlZnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInJvdzFDZWxsMSIpLm9mZnNldExlZnQnKTsKKyAgICBzaG91bGRCZSgnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0TGVmdCcsICdkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0TGVmdCcpOworICAgIHNob3VsZEJlKCdkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRIYXNPIikub2Zmc2V0TGVmdCcsICdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0TGVmdCcpOworICAgIHNo
b3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRMZWZ0
JywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRMZWZ0Jyk7Cisg
ICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0TGVmdCcs
ICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0TGVmdCcpOworICAg
IHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzUCIpLm9mZnNldExlZnQnLCAn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsNiIpLm9mZnNldExlZnQnKTsKKyAgICBz
aG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1uVGhhdFNob3Vs
ZE5vdEJlUmVuZGVyZWQiKS5vZmZzZXRMZWZ0JywgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPZmZz
ZXRUb3AoKQoreworICAgIHZhciB0b3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVj
dE5vSGVhZGluZyIpLm9mZnNldFRvcDsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRUb3AnLCB0b3ApOwor
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8i
KS5vZmZzZXRUb3AnLCB0b3ApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldFRvcCcsIHRvcCk7CisgICAgc2hvdWxkRXZh
bHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIpLm9m
ZnNldFRvcCcsIHRvcCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0VG9wJywgdG9wKTsKKyAgICBzaG91bGRFdmFsdWF0
ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTyIpLm9mZnNldFRvcCcsIHRvcCk7Cisg
ICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZz
ZXRUb3AnLCB0b3ApOworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldFRvcCcsIDApOworfQor
CitmdW5jdGlvbiB0ZXN0T2Zmc2V0V2lkdGgoKQoreworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldFdpZHRo
JywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMSIpLm9mZnNldFdpZHRoICsgdGFi
bGVIb3Jpem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cx
Q2VsbDIiKS5vZmZzZXRXaWR0aCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInJvdzFDZWxsMSIpLm9mZnNldFdpZHRoKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdE5hbWUiKS5vZmZzZXRXaWR0aCcsIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDIiKS5vZmZzZXRXaWR0aCk7CisgICAgc2hvdWxk
RXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOQW5kSGFzTyIp
Lm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIpLm9mZnNl
dFdpZHRoICsgdGFibGVIb3Jpem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyb3cxQ2VsbDQiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNw
YWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0V2lkdGgp
OworICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5k
SGFzTiIpLm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIp
Lm9mZnNldFdpZHRoICsgdGFibGVIb3Jpem9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDQiKS5vZmZzZXRXaWR0aCk7CisgICAgc2hvdWxkRXZhbHVh
dGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc08iKS5vZmZzZXRXaWR0aCcsIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDUiKS5vZmZzZXRXaWR0aCk7CisgICAgc2hvdWxk
RXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc1AiKS5vZmZzZXRXaWR0aCcs
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDYiKS5vZmZzZXRXaWR0aCk7CisgICAg
c2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91
bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0V2lkdGgnLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdE9m
ZnNldEhlaWdodCgpCit7CisgICAgdmFyIGhlaWdodCA9IHRhYmxlQ29udGVudEhlaWdodCgpOwor
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8i
KS5wYXJlbnROb2RlLm9mZnNldEhlaWdodCcsIGhlaWdodCk7CisgICAgc2hvdWxkRXZhbHVhdGVU
bygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RObyIpLm9mZnNldEhlaWdodCcsIGhl
aWdodCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBy
b2R1Y3ROYW1lIikub2Zmc2V0SGVpZ2h0JywgaGVpZ2h0KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRv
KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhhc05BbmRIYXNPIikub2Zmc2V0SGVp
Z2h0JywgaGVpZ2h0KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGFzTUFuZEhhc04iKS5vZmZzZXRIZWlnaHQnLCBoZWlnaHQpOworICAgIHNob3VsZEV2
YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0SGVpZ2h0Jywg
aGVpZ2h0KTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aGFzUCIpLm9mZnNldEhlaWdodCcsIGhlaWdodCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zm
c2V0SGVpZ2h0JywgMCk7Cit9CisKK2Z1bmN0aW9uIHRhYmxlQ29udGVudEhlaWdodCgpCit7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIHJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidHIiKTsKKyAgICB2YXIgbnVtYmVyT2ZSb3dzID0gcm93cy5sZW5ndGg7CisgICAg
aWYgKG51bWJlck9mUm93cykKKyAgICAgICAgcmVzdWx0ICs9IHJvd3NbMF0ub2Zmc2V0SGVpZ2h0
OworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbnVtYmVyT2ZSb3dzOyArK2kpCisgICAgICAgIHJl
c3VsdCArPSB0YWJsZVZlcnRpY2FsQm9yZGVyU3BhY2luZyArIHJvd3NbaV0ub2Zmc2V0SGVpZ2h0
OworICAgIHJldHVybiByZXN1bHQ7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGxh
YmVsIGZvcj0iYm9yZGVyQ29sbGFwc2VNZW51Ij5ib3JkZXItY29sbGFwc2U8L2xhYmVsPgorICAg
IDxzZWxlY3QgaWQ9ImJvcmRlckNvbGxhcHNlTWVudSI+CisgICAgICAgIDxvcHRpb24gdmFsdWU9
InNlcGFyYXRlIj5zZXBhcmF0ZTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJjb2xs
YXBzZSI+Y29sbGFwc2U8L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKyAgICA8dGFibGUgY2VsbHNw
YWNpbmc9IjQiPgorICAgICAgICA8Y2FwdGlvbj5Qcm9kdWN0IFRhYmxlPC9jYXB0aW9uPgorICAg
ICAgICA8Y29sIGlkPSJwcm9kdWN0Tm8iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJs
dWUiPgorICAgICAgICA8Y29sIGlkPSJwcm9kdWN0TmFtZSIgc3R5bGU9ImJhY2tncm91bmQtY29s
b3I6IGxpZ2h0Z3JlZW4iPgorICAgICAgICA8Y29sZ3JvdXAgaWQ9Imhhc01BbmRIYXNOQW5kSGFz
TyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheSI+CisgICAgICAgICAgICA8Y29s
IGlkPSJoYXNNQW5kSGFzTiIgc3Bhbj0iMiI+CisgICAgICAgICAgICA8Y29sIGlkPSJoYXNPIj4K
KyAgICAgICAgPC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwIGlkPSJoYXNQIiBzdHlsZT0i
YmFja2dyb3VuZC1jb2xvcjogZ3JheSI+CisgICAgICAgIDxjb2xncm91cCBpZD0iY29sdW1uVGhh
dFNob3VsZE5vdEJlUmVuZGVyZWQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZWQiIHNwYW49
IjIiPgorICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICA8dHI+PHRoIGlkPSJwcm9kdWN0Tm9I
ZWFkaW5nIj5Qcm9kdWN0IE5vLjwvdGg+PHRoPk5hbWU8L3RoPjx0aD5IYXMgTTwvdGg+PHRoPkhh
cyBOPC90aD48dGg+SGFzIE88L3RoPjx0aD5IYXMgUDwvdGg+PC90cj4KKyAgICAgICAgPC90aGVh
ZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBpZD0icm93MUNlbGwxIj4x
PC90ZD48dGQgaWQ9InJvdzFDZWxsMiI+R2l6bW8gQTwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDMiPiYj
eDI3MTM7PC90ZD48dGQgaWQ9InJvdzFDZWxsNCI+PC90ZD48dGQgaWQ9InJvdzFDZWxsNSI+JiN4
MjcxMzs8L3RkPjx0ZCBpZD0icm93MUNlbGw2Ij4mI3gyNzEzOzwvdGQ+PC90cj4KKyAgICAgICAg
ICAgIDx0cj48dGQ+MjwvdGQ+PHRkPkdpem1vIEEgUHJvPC90ZD48dGQ+JiN4MjcxMzs8L3RkPjx0
ZD4mI3gyNzEzOzwvdGQ+PHRkPiYjeDI3MTM7PC90ZD48dGQ+JiN4MjcxMzs8L3RkPjwvdHI+Cisg
ICAgICAgICAgICA8dHI+PHRkPjM8L3RkPjx0ZD5HaXptbyBCPC90ZD48dGQ+PHRkPjx0ZCBjb2xz
cGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4mI3gyNzEzOzwvdGQ+PC90cj4KKyAg
ICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYTFkMGVlLi5hZTNiMTAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTQtMDItMTggIERhbmllbCBCYXRlcyAgPGRh
YmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIENPTCBlbGVtZW50IGluIHRhYmxlIGhhcyAwIGZv
ciBvZmZzZXRXaWR0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRzIG9mZnNldHtMZWZ0LCBUb3AsIFdpZHRoLCBIZWlnaHR9IGZvciB0YWJs
ZSBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzCisgICAgICAgIHBlciBzZWN0aW9uIEV4dGVuc2lv
bnMgdG8gdGhlIEhUTUxFbGVtZW50IEludGVyZmFjZSBvZiB0aGUgQ1NTT00gVmlldyBzcGVjLAor
ICAgICAgICA8aHR0cDovL3d3dy53My5vcmcvVFIvY3Nzb20tdmlldy8jZXh0ZW5zaW9ucy10by10
aGUtaHRtbGVsZW1lbnQtaW50ZXJmYWNlPiAoRHJhZnQgMTcgRGVjZW1iZXIgMjAxMykuCisKKyAg
ICAgICAgRm9yIG5vdywgd2UgZmFpbCBhbG1vc3QgYWxsIG9mIHRoZSBvZmZzZXR7SGVpZ2h0LCBU
b3B9IHN1Yi10ZXN0cyBpbiB0aGUgaW5jbHVkZWQgdGVzdAorICAgICAgICBmb3IgdGhlIHNlcGFy
YXRlIGJvcmRlciBtb2RlbCBhcyB3ZSBuZWVkIHRvIGZpeCA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyODk4OD4uCisKKyAgICAgICAgVGVzdDogZmFzdC90YWJsZS9j
b2wtYW5kLWNvbGdyb3VwLW9mZnNldHMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6
IEluaXRpYWxpemUgY2FjaGVkIGNvbHVtbiBvZmZzZXQgdG9wIGFuZCBvZmZzZXQgaGVpZ2h0Lgor
ICAgICAgICBXZSBjYWNoZSB0aGVzZSBvZmZzZXRzIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGZv
ciBhbGwgY29sdW1ucyBpbiB0aGUgdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6aW52YWxpZGF0ZUNhY2hlZENvbHVtbnMpOiBDbGVhciBjYWNoZWQgZWZmZWN0aXZlIGNvbHVt
biBpbmRleCBtYXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aW52YWxpZGF0ZUNh
Y2hlZENvbHVtbk9mZnNldHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpsYXlvdXQpOiBJbnZhbGlkYXRlIGNhY2hlZCBjb2x1bW4gb2Zmc2V0cyBhcyB0aGUgbG9jYXRp
b24gb3IgaGVpZ2h0CisgICAgICAgIG9mIG9uZSBvciBtb3JlIHNlY3Rpb25zIG1heSBoYXZlIGNo
YW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6dXBkYXRlQ29sdW1uQ2FjaGUp
OiBNb2RpZmllZCB0byBidWlsZCBlZmZlY3RpdmUgY29sdW1uIGluZGV4IG1hcC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZlY3RpdmVJbmRleE9mQ29sdW1uKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b2Zmc2V0VG9wRm9yQ29sdW1uKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b2Zmc2V0TGVmdEZvckNvbHVtbik6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om9mZnNldFdpZHRoRm9yQ29sdW1u
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b2Zmc2V0SGVpZ2h0Rm9y
Q29sdW1uKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6IE1ha2Ug
aXNUYWJsZUNvbHVtbkdyb3VwV2l0aENvbHVtbkNoaWxkcmVuKCkgY29uc3QuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ29sOjpvZmZzZXRMZWZ0KTogQWRkZWQ7IHR1cm5zIGFyb3VuZCBhbmQgY2FsbHMgUmVuZGVy
VGFibGU6Om9mZnNldExlZnRGb3JDb2x1bW4oKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ29sOjpvZmZzZXRUb3ApOiBBZGRlZDsgdHVybnMgYXJvdW5kIGFuZCBjYWxscyBSZW5kZXJU
YWJsZTo6b2Zmc2V0VG9wRm9yQ29sdW1uKCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZUNvbDo6b2Zmc2V0V2lkdGgpOiBBZGRlZDsgdHVybnMgYXJvdW5kIGFuZCBjYWxscyBSZW5kZXJU
YWJsZTo6b2Zmc2V0V2lkdGhGb3JDb2x1bW4oKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ29sOjpvZmZzZXRIZWlnaHQpOiBBZGRlZDsgdHVybnMgYXJvdW5kIGFuZCBjYWxscyBSZW5k
ZXJUYWJsZTo6b2Zmc2V0SGVpZ2h0Rm9yQ29sdW1uKCkuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmg6CisKIDIwMTQtMDItMTggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZp
ZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IHBvc2l0aW9uOnN0aWNreSB0byBwb3Np
dGlvbjpzdGF0aWMgdXBvbiBjb3B5IGFuZCBwYXN0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKaW5kZXggZmY4N2Y5OC4uOTM0YTNiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAgIChD
KSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3Au
Y29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTY0LDYgKzY0LDggQEAgUmVuZGVyVGFibGU6OlJlbmRlclRh
YmxlKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQogICAgICwg
bV92U3BhY2luZygwKQogICAgICwgbV9ib3JkZXJTdGFydCgwKQogICAgICwgbV9ib3JkZXJFbmQo
MCkKKyAgICAsIG1fY29sdW1uT2Zmc2V0VG9wKC0xKQorICAgICwgbV9jb2x1bW5PZmZzZXRIZWln
aHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIG1fY29sdW1uUG9z
LmZpbGwoMCwgMSk7CkBAIC0yMzcsNiArMjM5LDEzIEBAIHZvaWQgUmVuZGVyVGFibGU6OmludmFs
aWRhdGVDYWNoZWRDb2x1bW5zKCkKIHsKICAgICBtX2NvbHVtblJlbmRlcmVyc1ZhbGlkID0gZmFs
c2U7CiAgICAgbV9jb2x1bW5SZW5kZXJlcnMucmVzaXplKDApOworICAgIG1fZWZmZWN0aXZlQ29s
dW1uSW5kZXhNYXAuY2xlYXIoKTsKK30KKwordm9pZCBSZW5kZXJUYWJsZTo6aW52YWxpZGF0ZUNh
Y2hlZENvbHVtbk9mZnNldHMoKQoreworICAgIG1fY29sdW1uT2Zmc2V0VG9wID0gLTE7CisgICAg
bV9jb2x1bW5PZmZzZXRIZWlnaHQgPSAtMTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ29s
dW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sKikKQEAgLTU1Nyw2ICs1NjYsOSBAQCB2b2lkIFJlbmRl
clRhYmxlOjpsYXlvdXQoKQogICAgIC8vIExheW91dCB3YXMgY2hhbmdlZCwgc28gcHJvYmFibHkg
Ym9yZGVycyB0b28uCiAgICAgaW52YWxpZGF0ZUNvbGxhcHNlZEJvcmRlcnMoKTsKIAorICAgIC8v
IFRoZSBsb2NhdGlvbiBvciBoZWlnaHQgb2Ygb25lIG9yIG1vcmUgc2VjdGlvbnMgbWF5IGhhdmUg
Y2hhbmdlZC4KKyAgICBpbnZhbGlkYXRlQ2FjaGVkQ29sdW1uT2Zmc2V0cygpOworCiAgICAgY29t
cHV0ZU92ZXJmbG93KGNsaWVudExvZ2ljYWxCb3R0b20oKSk7CiAKICAgICBzdGF0ZVB1c2hlci5w
b3AoKTsKQEAgLTg0OSwxNiArODYxLDEwMCBAQCB2b2lkIFJlbmRlclRhYmxlOjp1cGRhdGVDb2x1
bW5DYWNoZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faGFzQ29sRWxlbWVudHMpOwogICAgIEFT
U0VSVChtX2NvbHVtblJlbmRlcmVycy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2VmZmVjdGl2
ZUNvbHVtbkluZGV4TWFwLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX2NvbHVtblJlbmRlcmVy
c1ZhbGlkKTsKIAorICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4ID0gMDsKICAgICBmb3IgKFJlbmRl
clRhYmxlQ29sKiBjb2x1bW5SZW5kZXJlciA9IGZpcnN0Q29sdW1uKCk7IGNvbHVtblJlbmRlcmVy
OyBjb2x1bW5SZW5kZXJlciA9IGNvbHVtblJlbmRlcmVyLT5uZXh0Q29sdW1uKCkpIHsKICAgICAg
ICAgaWYgKGNvbHVtblJlbmRlcmVyLT5pc1RhYmxlQ29sdW1uR3JvdXBXaXRoQ29sdW1uQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBtX2NvbHVtblJlbmRlcmVycy5h
cHBlbmQoY29sdW1uUmVuZGVyZXIpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sg
dG8gY29tcHV0ZSB0aGUgZWZmZWN0aXZlIGNvbHVtbiBpbmRleCBzdWNjZXNzaXZlbHkgZnJvbSBw
cmV2aW91cyB2YWx1ZXMgaW5zdGVhZCBvZgorICAgICAgICAvLyBjYWxsaW5nIGNvbFRvRWZmQ29s
KCksIHdoaWNoIGlzIGluIE8obnVtRWZmQ29scygpKS4gQWx0aG91Z2ggaXQncyB1bmxpa2VseSB0
aGF0IHRoaXMgaXMgYSBob3QgZnVuY3Rpb24uCisgICAgICAgIG1fZWZmZWN0aXZlQ29sdW1uSW5k
ZXhNYXAuYWRkKGNvbHVtblJlbmRlcmVyLCBjb2xUb0VmZkNvbChjb2x1bW5JbmRleCkpOworICAg
ICAgICBjb2x1bW5JbmRleCArPSBjb2x1bW5SZW5kZXJlci0+c3BhbigpOwogICAgIH0KICAgICBt
X2NvbHVtblJlbmRlcmVyc1ZhbGlkID0gdHJ1ZTsKIH0KIAordW5zaWduZWQgUmVuZGVyVGFibGU6
OmVmZmVjdGl2ZUluZGV4T2ZDb2x1bW4oY29uc3QgUmVuZGVyVGFibGVDb2wmIGNvbHVtbikgY29u
c3QKK3sKKyAgICBpZiAoIW1fY29sdW1uUmVuZGVyZXJzVmFsaWQpCisgICAgICAgIHVwZGF0ZUNv
bHVtbkNhY2hlKCk7CisgICAgY29uc3QgUmVuZGVyVGFibGVDb2wqIGNvbHVtblRvVXNlID0gJmNv
bHVtbjsKKyAgICBpZiAoY29sdW1uVG9Vc2UtPmlzVGFibGVDb2x1bW5Hcm91cFdpdGhDb2x1bW5D
aGlsZHJlbigpKQorICAgICAgICBjb2x1bW5Ub1VzZSA9IGNvbHVtblRvVXNlLT5uZXh0Q29sdW1u
KCk7IC8vIEZpcnN0IGNvbHVtbiBpbiBjb2x1bW4tZ3JvdXAKKyAgICBhdXRvIGl0ID0gbV9lZmZl
Y3RpdmVDb2x1bW5JbmRleE1hcC5maW5kKGNvbHVtblRvVXNlKTsKKyAgICBBU1NFUlQoaXQgIT0g
bV9lZmZlY3RpdmVDb2x1bW5JbmRleE1hcC5lbmQoKSk7CisgICAgaWYgKGl0ID09IG1fZWZmZWN0
aXZlQ29sdW1uSW5kZXhNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKworTGF5b3V0
VW5pdCBSZW5kZXJUYWJsZTo6b2Zmc2V0VG9wRm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29s
JiBjb2x1bW4pIGNvbnN0Cit7CisgICAgaWYgKGVmZmVjdGl2ZUluZGV4T2ZDb2x1bW4oY29sdW1u
KSA+PSBudW1FZmZDb2xzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2NvbHVtbk9m
ZnNldFRvcCA+PSAwKSB7CisgICAgICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CisgICAgICAg
IHJldHVybiBtX2NvbHVtbk9mZnNldFRvcDsKKyAgICB9CisgICAgUmVuZGVyVGFibGVTZWN0aW9u
KiBzZWN0aW9uID0gdG9wTm9uRW1wdHlTZWN0aW9uKCk7CisgICAgcmV0dXJuIG1fY29sdW1uT2Zm
c2V0VG9wID0gc2VjdGlvbiA/IHNlY3Rpb24tPm9mZnNldFRvcCgpIDogTGF5b3V0VW5pdCgwKTsK
K30KKworTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b2Zmc2V0TGVmdEZvckNvbHVtbihjb25zdCBS
ZW5kZXJUYWJsZUNvbCYgY29sdW1uKSBjb25zdAoreworICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4
ID0gZWZmZWN0aXZlSW5kZXhPZkNvbHVtbihjb2x1bW4pOworICAgIGlmIChjb2x1bW5JbmRleCA+
PSBudW1FZmZDb2xzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2NvbHVtblBv
c1tjb2x1bW5JbmRleF0gKyBtX2hTcGFjaW5nICsgYm9yZGVyTGVmdCgpOworfQorCitMYXlvdXRV
bml0IFJlbmRlclRhYmxlOjpvZmZzZXRXaWR0aEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNv
bCYgY29sdW1uKSBjb25zdAoreworICAgIGNvbnN0IFJlbmRlclRhYmxlQ29sKiBjdXJyZW50Q29s
dW1uID0gJmNvbHVtbjsKKyAgICBib29sIGhhc0NvbHVtbkNoaWxkcmVuOworICAgIGlmICgoaGFz
Q29sdW1uQ2hpbGRyZW4gPSBjdXJyZW50Q29sdW1uLT5pc1RhYmxlQ29sdW1uR3JvdXBXaXRoQ29s
dW1uQ2hpbGRyZW4oKSkpCisgICAgICAgIGN1cnJlbnRDb2x1bW4gPSBjdXJyZW50Q29sdW1uLT5u
ZXh0Q29sdW1uKCk7IC8vIEZpcnN0IGNvbHVtbiBpbiBjb2x1bW4tZ3JvdXAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkVmZmVjdGl2ZUNvbHVtbnMgPSBudW1FZmZDb2xzKCk7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9jb2x1bW5Qb3Muc2l6ZSgpID49IG51bWJlck9mRWZm
ZWN0aXZlQ29sdW1ucyArIDEpOworICAgIHVuc2lnbmVkIHdpZHRoID0gMDsKKyAgICB3aGlsZSAo
Y3VycmVudENvbHVtbikgeworICAgICAgICB1bnNpZ25lZCBjb2x1bW5JbmRleCA9IGVmZmVjdGl2
ZUluZGV4T2ZDb2x1bW4oKmN1cnJlbnRDb2x1bW4pOworICAgICAgICB1bnNpZ25lZCBzcGFuID0g
Y3VycmVudENvbHVtbi0+c3BhbigpOworICAgICAgICB3aGlsZSAoc3BhbiAmJiBjb2x1bW5JbmRl
eCA8IG51bWJlck9mRWZmZWN0aXZlQ29sdW1ucykgeworICAgICAgICAgICAgd2lkdGggKz0gbV9j
b2x1bW5Qb3NbY29sdW1uSW5kZXggKyAxXSAtIG1fY29sdW1uUG9zW2NvbHVtbkluZGV4XSAtIG1f
aFNwYWNpbmc7CisgICAgICAgICAgICBzcGFuIC09IG1fY29sdW1uc1tjb2x1bW5JbmRleF0uc3Bh
bjsKKyAgICAgICAgICAgICsrY29sdW1uSW5kZXg7CisgICAgICAgICAgICBpZiAoc3BhbikKKyAg
ICAgICAgICAgICAgICB3aWR0aCArPSBtX2hTcGFjaW5nOworICAgICAgICB9CisgICAgICAgIGlm
ICghaGFzQ29sdW1uQ2hpbGRyZW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VycmVu
dENvbHVtbiA9IGN1cnJlbnRDb2x1bW4tPm5leHRDb2x1bW4oKTsKKyAgICAgICAgaWYgKCFjdXJy
ZW50Q29sdW1uIHx8IGN1cnJlbnRDb2x1bW4tPmlzVGFibGVDb2x1bW5Hcm91cCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHdpZHRoICs9IG1faFNwYWNpbmc7CisgICAgfQorICAgIHJl
dHVybiB3aWR0aDsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b2Zmc2V0SGVpZ2h0Rm9y
Q29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJiBjb2x1bW4pIGNvbnN0Cit7CisgICAgaWYgKGVm
ZmVjdGl2ZUluZGV4T2ZDb2x1bW4oY29sdW1uKSA+PSBudW1FZmZDb2xzKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChtX2NvbHVtbk9mZnNldEhlaWdodCA+PSAwKSB7CisgICAgICAgIEFT
U0VSVCghbmVlZHNMYXlvdXQoKSk7CisgICAgICAgIHJldHVybiBtX2NvbHVtbk9mZnNldEhlaWdo
dDsKKyAgICB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSAwOworICAgIGZvciAoUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uID0gdG9wU2VjdGlvbigpOyBzZWN0aW9uOyBzZWN0aW9uID0gc2Vj
dGlvbkJlbG93KHNlY3Rpb24pKQorICAgICAgICBoZWlnaHQgKz0gc2VjdGlvbi0+b2Zmc2V0SGVp
Z2h0KCk7CisgICAgbV9jb2x1bW5PZmZzZXRIZWlnaHQgPSBoZWlnaHQ7CisgICAgcmV0dXJuIG1f
Y29sdW1uT2Zmc2V0SGVpZ2h0OworfQorCiBSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGU6OnNs
b3dDb2xFbGVtZW50KHVuc2lnbmVkIGNvbCwgYm9vbCogc3RhcnRFZGdlLCBib29sKiBlbmRFZGdl
KSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0NvbEVsZW1lbnRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggNWZjMTliNC4uMzcyMjBhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAg
KEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5LCAyMDEw
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTI2Myw2ICsyNjQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
Q29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sKik7CiAgICAgdm9pZCByZW1vdmVDb2x1bW4oY29u
c3QgUmVuZGVyVGFibGVDb2wqKTsKIAorICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yQ29sdW1u
KGNvbnN0IFJlbmRlclRhYmxlQ29sJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvZmZzZXRMZWZ0
Rm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBv
ZmZzZXRXaWR0aEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNvbCYpIGNvbnN0OworICAgIExh
eW91dFVuaXQgb2Zmc2V0SGVpZ2h0Rm9yQ29sdW1uKGNvbnN0IFJlbmRlclRhYmxlQ29sJikgY29u
c3Q7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgdm9pZCBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpIG92ZXJyaWRlIGZp
bmFsOwpAQCAtMjkyLDYgKzI5OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb2x1bW5D
YWNoZSgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZENvbHVtbnMoKTsKIAorICAg
IHZvaWQgaW52YWxpZGF0ZUNhY2hlZENvbHVtbk9mZnNldHMoKTsKKwogICAgIHZpcnR1YWwgUmVu
ZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgCkBAIC0z
MTgsNiArMzI2LDEwIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBWZWN0b3I8UmVuZGVyVGFibGVD
YXB0aW9uKj4gbV9jYXB0aW9uczsKICAgICBtdXRhYmxlIFZlY3RvcjxSZW5kZXJUYWJsZUNvbCo+
IG1fY29sdW1uUmVuZGVyZXJzOwogCisgICAgdW5zaWduZWQgZWZmZWN0aXZlSW5kZXhPZkNvbHVt
bihjb25zdCBSZW5kZXJUYWJsZUNvbCYpIGNvbnN0OworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBSZW5kZXJUYWJsZUNvbCosIHVuc2lnbmVkPiBFZmZlY3RpdmVDb2x1bW5JbmRleE1hcDsKKyAg
ICBtdXRhYmxlIEVmZmVjdGl2ZUNvbHVtbkluZGV4TWFwIG1fZWZmZWN0aXZlQ29sdW1uSW5kZXhN
YXA7CisKICAgICBtdXRhYmxlIFJlbmRlclRhYmxlU2VjdGlvbiogbV9oZWFkOwogICAgIG11dGFi
bGUgUmVuZGVyVGFibGVTZWN0aW9uKiBtX2Zvb3Q7CiAgICAgbXV0YWJsZSBSZW5kZXJUYWJsZVNl
Y3Rpb24qIG1fZmlyc3RCb2R5OwpAQCAtMzM4LDYgKzM1MCw4IEBAIHByaXZhdGU6CiAgICAgc2hv
cnQgbV92U3BhY2luZzsKICAgICBpbnQgbV9ib3JkZXJTdGFydDsKICAgICBpbnQgbV9ib3JkZXJF
bmQ7CisgICAgbXV0YWJsZSBMYXlvdXRVbml0IG1fY29sdW1uT2Zmc2V0VG9wOworICAgIG11dGFi
bGUgTGF5b3V0VW5pdCBtX2NvbHVtbk9mZnNldEhlaWdodDsKIH07CiAKIGlubGluZSBSZW5kZXJU
YWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjp0b3BTZWN0aW9uKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IGU5ZTQzNTQuLjZlN2M3ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAtMjAw
LDQgKzIwMCwyNCBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVDb2w6OmJvcmRlckFk
am9pbmluZ0NlbGxBZnRlcihjb25zdCBSZW5kZXJUYWJsZUNlbAogICAgIHJldHVybiBzdHlsZSgp
LmJvcmRlckVuZCgpOwogfQogCitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ29sOjpvZmZzZXRMZWZ0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGFibGUoKS0+b2Zmc2V0TGVmdEZvckNvbHVtbigqdGhp
cyk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDb2w6Om9mZnNldFRvcCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRhYmxlKCktPm9mZnNldFRvcEZvckNvbHVtbigqdGhpcyk7Cit9CisKK0xh
eW91dFVuaXQgUmVuZGVyVGFibGVDb2w6Om9mZnNldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdGFibGUoKS0+b2Zmc2V0V2lkdGhGb3JDb2x1bW4oKnRoaXMpOworfQorCitMYXlvdXRVbml0
IFJlbmRlclRhYmxlQ29sOjpvZmZzZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiB0YWJs
ZSgpLT5vZmZzZXRIZWlnaHRGb3JDb2x1bW4oKnRoaXMpOworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCmluZGV4IGRhMWIzYjguLjI3MGE4YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCkBAIC00Myw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBzcGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9CiAg
ICAgdm9pZCBzZXRTcGFuKHVuc2lnbmVkIHNwYW4pIHsgbV9zcGFuID0gc3BhbjsgfQogCi0gICAg
Ym9vbCBpc1RhYmxlQ29sdW1uR3JvdXBXaXRoQ29sdW1uQ2hpbGRyZW4oKSB7IHJldHVybiBmaXJz
dENoaWxkKCk7IH0KKyAgICBib29sIGlzVGFibGVDb2x1bW5Hcm91cFdpdGhDb2x1bW5DaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIGZpcnN0Q2hpbGQoKTsgfQogICAgIGJvb2wgaXNUYWJsZUNvbHVt
bigpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTjsgfQog
ICAgIGJvb2wgaXNUYWJsZUNvbHVtbkdyb3VwKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5kaXNw
bGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dST1VQOyB9CiAKQEAgLTcxLDYgKzcxLDExIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZShjb25z
dCBSZW5kZXJUYWJsZUNlbGwqKSBjb25zdDsKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
QWRqb2luaW5nQ2VsbEFmdGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwogCisgICAg
dmlydHVhbCBMYXlvdXRVbml0IG9mZnNldExlZnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBM
YXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJS
ZW5kZXJUYWJsZUNvbCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYWJsZUNvbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLS0gCjEuOC41LjIgKEFwcGxlIEdpdC00OCkK
Cg==
</data>
<flag name="review"
          id="248616"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>224534</attachid>
            <date>2014-02-18 12:12:58 -0800</date>
            <delta_ts>2014-02-18 12:12:58 -0800</delta_ts>
            <desc>Self-contained col-and-colgroup-offsets.html</desc>
            <filename>col-and-colgroup-offsets-self-contained.html</filename>
            <type>text/html</type>
            <size>30351</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHNjcmlwdD4KLy8gVGhpcyBzY3JpcHQgaXMg
aWRlbnRpY2FsIHRvIExheW91dFRlc3RzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyBhcyBvZiBy
MTY0MTEyLgoKLy8gc3ZnL2R5bmFtaWMtdXBkYXRlcyB0ZXN0cyBzZXQgZW5hYmxlUGl4ZWxUZXN0
aW5nPXRydWUsIGFzIHdlIHdhbnQgdG8gZHVtcCB0ZXh0ICsgcGl4ZWwgcmVzdWx0cwppZiAoc2Vs
Zi50ZXN0UnVubmVyKQogICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KHNlbGYuZW5hYmxlUGl4ZWxU
ZXN0aW5nKTsKCnZhciBkZXNjcmlwdGlvbiwgZGVidWcsIHN1Y2Nlc3NmdWxseVBhcnNlZCwgZXJy
b3JNZXNzYWdlLCBzaWxlbnRUZXN0UGFzcywgZGlkUGFzc1NvbWVUZXN0c1NpbGVudGx5LCBkaWRG
YWlsU29tZVRlc3RzOwoKc2lsZW50VGVzdFBhc3MgPSBmYWxzZTsKZGlkUGFzc1NvbWVUZXN0c1Np
bGVudGx5ID0gZmFsc2U7CmRpZEZhaWxTb21lVGVzdHMgPSBmYWxzZTsKCihmdW5jdGlvbigpIHsK
CiAgICBmdW5jdGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKICAgIHsKICAgICAgICB2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICBpZiAoZWxlbWVu
dCkKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CgogICAgICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwogICAgICAgIGVsZW1lbnQuaWQgPSBpZDsKICAgICAg
ICB2YXIgcmVmTm9kZTsKICAgICAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgaWYgKGlkID09ICJkZXNjcmlwdGlvbiIpCiAg
ICAgICAgICAgIHJlZk5vZGUgPSBnZXRPckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHJlZk5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsKCiAgICAgICAg
cGFyZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCByZWZOb2RlKTsKICAgICAgICByZXR1cm4gZWxl
bWVudDsKICAgIH0KCiAgICBkZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKG1zZywg
cXVpZXQpCiAgICB7CiAgICAgICAgLy8gRm9yIE1TSUUgNiBjb21wYXRpYmlsaXR5CiAgICAgICAg
dmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgaWYgKHF1
aWV0KQogICAgICAgICAgICBzcGFuLmlubmVySFRNTCA9ICc8cD4nICsgbXNnICsgJzwvcD48cD5P
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgbm8gIjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFu
PiIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICI8c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVU
RTwvc3Bhbj4iLjwvcD4nOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc3Bhbi5pbm5lckhUTUwg
PSAnPHA+JyArIG1zZyArICc8L3A+PHA+T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICI8c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4iIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiPHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Ii48L3A+JzsKCiAgICAg
ICAgdmFyIGRlc2NyaXB0aW9uID0gZ2V0T3JDcmVhdGUoImRlc2NyaXB0aW9uIiwgInAiKTsKICAg
ICAgICBpZiAoZGVzY3JpcHRpb24uZmlyc3RDaGlsZCkKICAgICAgICAgICAgZGVzY3JpcHRpb24u
cmVwbGFjZUNoaWxkKHNwYW4sIGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQpOwogICAgICAgIGVsc2UK
ICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoc3Bhbik7CiAgICB9OwoKICAgIGRl
YnVnID0gZnVuY3Rpb24gZGVidWcobXNnKQogICAgewogICAgICAgIHZhciBzcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgIGdldE9yQ3JlYXRlKCJjb25zb2xlIiwg
ImRpdiIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25v
d3MgdGhlIG5hbWVzcGFjZQogICAgICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7
CiAgICB9OwoKICAgIHZhciBjc3MgPQogICAgICAgICIucGFzcyB7IiArCiAgICAgICAgICAgICJm
b250LXdlaWdodDogYm9sZDsiICsKICAgICAgICAgICAgImNvbG9yOiBncmVlbjsiICsKICAgICAg
ICAifSIgKwogICAgICAgICIuZmFpbCB7IiArCiAgICAgICAgICAgICJmb250LXdlaWdodDogYm9s
ZDsiICsKICAgICAgICAgICAgImNvbG9yOiByZWQ7IiArCiAgICAgICAgIn0iICsKICAgICAgICAi
I2NvbnNvbGUgeyIgKwogICAgICAgICAgICAid2hpdGUtc3BhY2U6IHByZS13cmFwOyIgKwogICAg
ICAgICAgICAiZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsiICsKICAgICAgICAifSI7CgogICAgZnVu
Y3Rpb24gaW5zZXJ0U3R5bGVTaGVldCgpCiAgICB7CiAgICAgICAgdmFyIHN0eWxlRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgc3R5bGVFbGVtZW50LnRl
eHRDb250ZW50ID0gY3NzOwogICAgICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKICAgIH0KCiAgICBpZiAoIWlz
V29ya2VyKCkpCiAgICAgICAgaW5zZXJ0U3R5bGVTaGVldCgpOwoKICAgIHNlbGYub25lcnJvciA9
IGZ1bmN0aW9uKG1lc3NhZ2UpCiAgICB7CiAgICAgICAgZXJyb3JNZXNzYWdlID0gbWVzc2FnZTsK
ICAgIH07Cgp9KSgpOwoKZnVuY3Rpb24gaXNXb3JrZXIoKQp7CiAgICAvLyBJdCdzIGNvbmNlaXZh
YmxlIHRoYXQgc29tZW9uZSB3b3VsZCBzdHViIG91dCAnZG9jdW1lbnQnIGluIGEgd29ya2VyIHNv
CiAgICAvLyBhbHNvIGNoZWNrIGZvciBjaGlsZE5vZGVzLCBhbiBhcmJpdHJhcnkgRE9NLXJlbGF0
ZWQgb2JqZWN0IHRoYXQgaXMKICAgIC8vIG1lYW5pbmdsZXNzIGluIGEgV29ya2VyQ29udGV4dC4K
ICAgIHJldHVybiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZG9j
dW1lbnQuY2hpbGROb2RlcyA9PT0gJ3VuZGVmaW5lZCcpICYmICEhc2VsZi5pbXBvcnRTY3JpcHRz
Owp9CgpmdW5jdGlvbiBkZXNjcmlwdGlvblF1aWV0KG1zZykgeyBkZXNjcmlwdGlvbihtc2csIHRy
dWUpOyB9CgpmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCnsKICAgIHJldHVybiB0ZXh0LnJlcGxh
Y2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpLnJlcGxhY2UoL1wwL2csICJc
XDAiKTsKfQoKZnVuY3Rpb24gdGVzdFBhc3NlZChtc2cpCnsKICAgIGlmIChzaWxlbnRUZXN0UGFz
cykKICAgICAgICBkaWRQYXNzU29tZVRlc3RzU2lsZW50bHkgPSB0cnVlOwogICAgZWxzZQogICAg
ICAgIGRlYnVnKCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2Fw
ZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cn0KCmZ1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQp7CiAg
ICBkaWRGYWlsU29tZVRlc3RzID0gdHJ1ZTsKICAgIGRlYnVnKCc8c3Bhbj48c3BhbiBjbGFzcz0i
ZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cn0KCmZ1
bmN0aW9uIGFyZU51bWJlcnNFcXVhbChfYWN0dWFsLCBfZXhwZWN0ZWQpCnsKICAgIGlmIChfZXhw
ZWN0ZWQgPT09IDApCiAgICAgICAgcmV0dXJuIF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9f
YWN0dWFsKSA9PT0gKDEvX2V4cGVjdGVkKTsKICAgIGlmIChfYWN0dWFsID09PSBfZXhwZWN0ZWQp
CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJl
ciIgJiYgaXNOYU4oX2V4cGVjdGVkKSkKICAgICAgICByZXR1cm4gdHlwZW9mKF9hY3R1YWwpID09
ICJudW1iZXIiICYmIGlzTmFOKF9hY3R1YWwpOwogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlv
biBhcmVBcnJheXNFcXVhbChfYSwgX2IpCnsKICAgIHRyeSB7CiAgICAgICAgaWYgKF9hLmxlbmd0
aCAhPT0gX2IubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBfYS5sZW5ndGg7IGkrKykKICAgICAgICAgICAgaWYgKCFhcmVOdW1iZXJz
RXF1YWwoX2FbaV0sIF9iW2ldKSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0g
Y2F0Y2ggKGV4KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7
Cn0KCmZ1bmN0aW9uIGlzTWludXNaZXJvKG4pCnsKICAgIC8vIHRoZSBvbmx5IHdheSB0byB0ZWxs
IDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0aGF0IDEvLTAgaXMKICAgIC8vIC1JbmZpbml0
eSBpbnN0ZWFkIG9mIEluZmluaXR5CiAgICByZXR1cm4gbiA9PT0gMCAmJiAxL24gPCAwOwp9Cgpm
dW5jdGlvbiBpc1R5cGVkQXJyYXkoYXJyYXkpCnsKICAgIHJldHVybiBhcnJheSBpbnN0YW5jZW9m
IEludDhBcnJheQogICAgICAgIHx8IGFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheQogICAgICAg
IHx8IGFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheQogICAgICAgIHx8IGFycmF5IGluc3RhbmNl
b2YgVWludDhBcnJheQogICAgICAgIHx8IGFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJy
YXkKICAgICAgICB8fCBhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5CiAgICAgICAgfHwgYXJy
YXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheQogICAgICAgIHx8IGFycmF5IGluc3RhbmNlb2YgRmxv
YXQzMkFycmF5CiAgICAgICAgfHwgYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk7Cn0KCmZ1
bmN0aW9uIGlzUmVzdWx0Q29ycmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpCnsKICAgIGlmIChhcmVO
dW1iZXJzRXF1YWwoX2FjdHVhbCwgX2V4cGVjdGVkKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
IGlmIChfZXhwZWN0ZWQKICAgICAgICAmJiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KF9leHBlY3RlZCkgPT0KICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KFtdKQogICAgICAgICAgICB8fCBpc1R5cGVkQXJyYXkoX2V4cGVjdGVkKSkpCiAgICAgICAgcmV0
dXJuIGFyZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7CiAgICByZXR1cm4gZmFsc2U7
Cn0KCmZ1bmN0aW9uIHN0cmluZ2lmeSh2KQp7CiAgICBpZiAodiA9PT0gMCAmJiAxL3YgPCAwKQog
ICAgICAgIHJldHVybiAiLTAiOwogICAgZWxzZSBpZiAoaXNUeXBlZEFycmF5KHYpKQogICAgICAg
IHJldHVybiB2Ll9fcHJvdG9fXy5jb25zdHJ1Y3Rvci5uYW1lICsgIjpbIiArIEFycmF5LnByb3Rv
dHlwZS5qb2luLmNhbGwodiwgIiwiKSArICJdIjsKICAgIGVsc2UKICAgICAgICByZXR1cm4gIiIg
KyB2Owp9CgpmdW5jdGlvbiBldmFsQW5kTG9nKF9hLCBfcXVpZXQpCnsKICBpZiAodHlwZW9mIF9h
ICE9ICJzdHJpbmciKQogICAgZGVidWcoIldBUk46IHRyeUFuZExvZygpIGV4cGVjdHMgYSBzdHJp
bmcgYXJndW1lbnQiKTsKCiAgLy8gTG9nIGZpcnN0IGluIGNhc2UgdGhpbmdzIGdvIGhvcnJpYmx5
IHdyb25nIG9yIHRoaXMgY2F1c2VzIGEgc3luYyBldmVudC4KICBpZiAoIV9xdWlldCkKICAgIGRl
YnVnKF9hKTsKCiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0
Y2ggKGUpIHsKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CiAg
fQogIHJldHVybiBfYXY7Cn0KCmZ1bmN0aW9uIHNob3VsZEJlKF9hLCBfYiwgcXVpZXQpCnsKICBp
ZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKICAgIGRl
YnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOwogIHZhciBl
eGNlcHRpb247CiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0
Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwogIH0KICB2YXIgX2J2ID0gZXZhbChfYik7Cgog
IGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIHN0cmlu
Z2lmeShfYnYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOwogIGVsc2UgaWYg
KGlzUmVzdWx0Q29ycmVjdChfYXYsIF9idikpIHsKICAgIGlmICghcXVpZXQpIHsKICAgICAgICB0
ZXN0UGFzc2VkKF9hICsgIiBpcyAiICsgX2IpOwogICAgfQogIH0gZWxzZSBpZiAodHlwZW9mKF9h
dikgPT0gdHlwZW9mKF9idikpCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIHN0
cmluZ2lmeShfYnYpICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CiAgZWxzZQog
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBzdHJpbmdpZnkoX2J2KSArICIgKG9m
IHR5cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0
eXBlb2YgX2F2ICsgIikuIik7Cn0KCmZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBf
YSwgX2IpCnsKICBpZiAodHlwZW9mIHRoZUZ1bmN0aW9uICE9ICJmdW5jdGlvbiIgfHwgdHlwZW9m
IF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKICAgIGRlYnVnKCJXQVJO
OiBkZmdTaG91bGRCZSgpIGV4cGVjdHMgYSBmdW5jdGlvbiBhbmQgdHdvIHN0cmluZ3MiKTsKICBu
b0lubGluZSh0aGVGdW5jdGlvbik7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgdmFsdWVzID0gW107
CgogIC8vIERlZmVuZCBhZ2FpbnN0IHRlc3RzIHRoYXQgbXVjayB3aXRoIG51bWVyaWMgcHJvcGVy
dGllcyBvbiBhcnJheS5wcm90b3R5cGUuCiAgdmFsdWVzLl9fcHJvdG9fXyA9IG51bGw7CiAgdmFs
dWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAKICB0cnkgewogICAgd2hpbGUgKCFk
ZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQogICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7
CiAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgfSBjYXRjaCAoZSkgewogICAgZXhjZXB0aW9u
ID0gZTsKICB9CgogIHZhciBfYnYgPSBldmFsKF9iKTsKICBpZiAoZXhjZXB0aW9uKQogICAgdGVz
dEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBzdHJpbmdpZnkoX2J2KSArICIuIE9uIGl0ZXJh
dGlvbiAiICsgKHZhbHVlcy5sZW5ndGggKyAxKSArICIsIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhj
ZXB0aW9uKTsKICBlbHNlIHsKICAgIHZhciBhbGxQYXNzZWQgPSB0cnVlOwogICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIF9hdiA9IHZhbHVlc1tp
XTsKICAgICAgaWYgKGlzUmVzdWx0Q29ycmVjdChfYXYsIF9idikpCiAgICAgICAgY29udGludWU7
CiAgICAgIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKICAgICAgICB0ZXN0RmFpbGVk
KF9hICsgIiBzaG91bGQgYmUgIiArIHN0cmluZ2lmeShfYnYpICsgIi4gT24gaXRlcmF0aW9uICIg
KyAoaSArIDEpICsgIiwgd2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CiAgICAgIGVsc2UK
ICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIHN0cmluZ2lmeShfYnYpICsg
IiAob2YgdHlwZSAiICsgdHlwZW9mIF9idiArICIpLiBPbiBpdGVyYXRpb24gIiArIChpICsgMSkg
KyAiLCB3YXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKICAg
ICAgYWxsUGFzc2VkID0gZmFsc2U7CiAgICB9CiAgICBpZiAoYWxsUGFzc2VkKQogICAgICB0ZXN0
UGFzc2VkKF9hICsgIiBpcyAiICsgX2IgKyAiIG9uIGFsbCBpdGVyYXRpb25zIGluY2x1ZGluZyBh
ZnRlciBERkcgdGllci11cC4iKTsKICB9CiAgCiAgcmV0dXJuIHZhbHVlcy5sZW5ndGg7Cn0KCi8v
IEV4ZWN1dGUgY29uZGl0aW9uIGV2ZXJ5IDUgbWlsbGlzZWNvbmRzIHVudGlsIGl0IHN1Y2NlZWRz
LgpmdW5jdGlvbiBfd2FpdEZvckNvbmRpdGlvbihjb25kaXRpb24sIGNvbXBsZXRpb25IYW5kbGVy
KQp7CiAgaWYgKGNvbmRpdGlvbigpKQogICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICBlbHNlCiAg
ICBzZXRUaW1lb3V0KF93YWl0Rm9yQ29uZGl0aW9uLCA1LCBjb25kaXRpb24sIGNvbXBsZXRpb25I
YW5kbGVyKTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVjb21lRXF1YWwoX2EsIF9iLCBjb21wbGV0aW9u
SGFuZGxlcikKewogIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9iICE9ICJz
dHJpbmciKQogICAgZGVidWcoIldBUk46IHNob3VsZEJlY29tZUVxdWFsKCkgZXhwZWN0cyBzdHJp
bmcgYXJndW1lbnRzIik7CgogIHZhciBjb25kaXRpb24gPSBmdW5jdGlvbigpIHsKICAgIHZhciBl
eGNlcHRpb247CiAgICB2YXIgX2F2OwogICAgdHJ5IHsKICAgICAgX2F2ID0gZXZhbChfYSk7CiAg
ICB9IGNhdGNoIChlKSB7CiAgICAgIGV4Y2VwdGlvbiA9IGU7CiAgICB9CiAgICB2YXIgX2J2ID0g
ZXZhbChfYik7CiAgICBpZiAoZXhjZXB0aW9uKQogICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgYmVjb21lICIgKyBfYnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CiAg
ICBpZiAoaXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgewogICAgICB0ZXN0UGFzc2VkKF9hICsg
IiBiZWNhbWUgIiArIF9iKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFs
c2U7CiAgfTsKICBfd2FpdEZvckNvbmRpdGlvbihjb25kaXRpb24sIGNvbXBsZXRpb25IYW5kbGVy
KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVjb21lRXF1YWxUb1N0cmluZyh2YWx1ZSwgcmVmZXJlbmNl
LCBjb21wbGV0aW9uSGFuZGxlcikKewogIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciIHx8
IHR5cGVvZiByZWZlcmVuY2UgIT09ICJzdHJpbmciKQogICAgZGVidWcoIldBUk46IHNob3VsZEJl
Y29tZUVxdWFsVG9TdHJpbmcoKSBleHBlY3RzIHN0cmluZyBhcmd1bWVudHMiKTsKICB2YXIgdW5l
dmFsZWRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZWZlcmVuY2UpOwogIHNob3VsZEJlY29tZUVx
dWFsKHZhbHVlLCB1bmV2YWxlZFN0cmluZywgY29tcGxldGlvbkhhbmRsZXIpOwp9CgpmdW5jdGlv
biBzaG91bGRCZVR5cGUoX2EsIF90eXBlKSB7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2Owog
IHRyeSB7CiAgICBfYXYgPSBldmFsKF9hKTsKICB9IGNhdGNoIChlKSB7CiAgICBleGNlcHRpb24g
PSBlOwogIH0KCiAgdmFyIF90eXBldiA9IGV2YWwoX3R5cGUpOwogIGlmIChfYXYgaW5zdGFuY2Vv
ZiBfdHlwZXYpIHsKICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIGFuIGluc3RhbmNlIG9mICIgKyBf
dHlwZSk7CiAgfSBlbHNlIHsKICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiAiICsgX3R5cGUpOwogIH0KfQoKLy8gVmFyaWFudCBvZiBzaG91bGRCZSgpLS1jb25maXJt
cyB0aGF0IHJlc3VsdCBvZiBldmFsKF90b19ldmFsKSBpcyB3aXRoaW4KLy8gbnVtZXJpYyBfdG9s
ZXJhbmNlIG9mIG51bWVyaWMgX3RhcmdldC4KZnVuY3Rpb24gc2hvdWxkQmVDbG9zZVRvKF90b19l
dmFsLCBfdGFyZ2V0LCBfdG9sZXJhbmNlLCBxdWlldCkKewogIGlmICh0eXBlb2YgX3RvX2V2YWwg
IT0gInN0cmluZyIpIHsKICAgIHRlc3RGYWlsZWQoInNob3VsZEJlQ2xvc2VUbygpIHJlcXVpcmVz
IHN0cmluZyBhcmd1bWVudCBfdG9fZXZhbC4gd2FzIHR5cGUgIiArIHR5cGVvZiBfdG9fZXZhbCk7
CiAgICByZXR1cm47CiAgfQogIGlmICh0eXBlb2YgX3RhcmdldCAhPSAibnVtYmVyIikgewogICAg
dGVzdEZhaWxlZCgic2hvdWxkQmVDbG9zZVRvKCkgcmVxdWlyZXMgbnVtZXJpYyBhcmd1bWVudCBf
dGFyZ2V0LiB3YXMgdHlwZSAiICsgdHlwZW9mIF90YXJnZXQpOwogICAgcmV0dXJuOwogIH0KICBp
ZiAodHlwZW9mIF90b2xlcmFuY2UgIT0gIm51bWJlciIpIHsKICAgIHRlc3RGYWlsZWQoInNob3Vs
ZEJlQ2xvc2VUbygpIHJlcXVpcmVzIG51bWVyaWMgYXJndW1lbnQgX3RvbGVyYW5jZS4gd2FzIHR5
cGUgIiArIHR5cGVvZiBfdG9sZXJhbmNlKTsKICAgIHJldHVybjsKICB9CgogIHZhciBfcmVzdWx0
OwogIHRyeSB7CiAgICAgX3Jlc3VsdCA9IGV2YWwoX3RvX2V2YWwpOwogIH0gY2F0Y2ggKGUpIHsK
ICAgIHRlc3RGYWlsZWQoX3RvX2V2YWwgKyAiIHNob3VsZCBiZSB3aXRoaW4gIiArIF90b2xlcmFu
Y2UgKyAiIG9mICIKICAgICAgICAgICAgICAgKyBfdGFyZ2V0ICsgIi4gVGhyZXcgZXhjZXB0aW9u
ICIgKyBlKTsKICAgIHJldHVybjsKICB9CgogIGlmICh0eXBlb2YoX3Jlc3VsdCkgIT0gdHlwZW9m
KF90YXJnZXQpKSB7CiAgICB0ZXN0RmFpbGVkKF90b19ldmFsICsgIiBzaG91bGQgYmUgb2YgdHlw
ZSAiICsgdHlwZW9mIF90YXJnZXQKICAgICAgICAgICAgICAgKyAiIGJ1dCB3YXMgb2YgdHlwZSAi
ICsgdHlwZW9mIF9yZXN1bHQpOwogIH0gZWxzZSBpZiAoTWF0aC5hYnMoX3Jlc3VsdCAtIF90YXJn
ZXQpIDw9IF90b2xlcmFuY2UpIHsKICAgIGlmICghcXVpZXQpIHsKICAgICAgICB0ZXN0UGFzc2Vk
KF90b19ldmFsICsgIiBpcyB3aXRoaW4gIiArIF90b2xlcmFuY2UgKyAiIG9mICIgKyBfdGFyZ2V0
KTsKICAgIH0KICB9IGVsc2UgewogICAgdGVzdEZhaWxlZChfdG9fZXZhbCArICIgc2hvdWxkIGJl
IHdpdGhpbiAiICsgX3RvbGVyYW5jZSArICIgb2YgIiArIF90YXJnZXQKICAgICAgICAgICAgICAg
KyAiLiBXYXMgIiArIF9yZXN1bHQgKyAiLiIpOwogIH0KfQoKZnVuY3Rpb24gc2hvdWxkTm90QmUo
X2EsIF9iLCBxdWlldCkKewogIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9i
ICE9ICJzdHJpbmciKQogICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJlKCkgZXhwZWN0cyBzdHJp
bmcgYXJndW1lbnRzIik7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAg
X2F2ID0gZXZhbChfYSk7CiAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQog
IHZhciBfYnYgPSBldmFsKF9iKTsKCiAgaWYgKGV4Y2VwdGlvbikKICAgIHRlc3RGYWlsZWQoX2Eg
KyAiIHNob3VsZCBub3QgYmUgIiArIF9idiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0
aW9uKTsKICBlbHNlIGlmICghaXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgewogICAgaWYgKCFx
dWlldCkgewogICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAiICsgX2IpOwogICAgfQog
IH0gZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIG5vdCBiZSAiICsgX2J2ICsgIi4i
KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVjb21lRGlmZmVyZW50KF9hLCBfYiwgY29tcGxldGlvbkhh
bmRsZXIpCnsKICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3Ry
aW5nIikKICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZWNvbWVEaWZmZXJlbnQoKSBleHBlY3RzIHN0
cmluZyBhcmd1bWVudHMiKTsKCiAgdmFyIGNvbmRpdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgdmFy
IGV4Y2VwdGlvbjsKICAgIHZhciBfYXY7CiAgICB0cnkgewogICAgICBfYXYgPSBldmFsKF9hKTsK
ICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgZXhjZXB0aW9uID0gZTsKICAgIH0KICAgIHZhciBfYnYg
PSBldmFsKF9iKTsKICAgIGlmIChleGNlcHRpb24pCiAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNo
b3VsZCBiZWNhbWUgbm90IGVxdWFsIHRvICIgKyBfYnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiAr
IGV4Y2VwdGlvbik7CiAgICBpZiAoIWlzUmVzdWx0Q29ycmVjdChfYXYsIF9idikpIHsKICAgICAg
dGVzdFBhc3NlZChfYSArICIgYmVjYW1lIGRpZmZlcmVudCBmcm9tICIgKyBfYik7CiAgICAgIHJl
dHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH07CiAgX3dhaXRGb3JDb25kaXRp
b24oY29uZGl0aW9uLCBjb21wbGV0aW9uSGFuZGxlcik7Cn0KCmZ1bmN0aW9uIHNob3VsZEJlVHJ1
ZShfYSkgeyBzaG91bGRCZShfYSwgInRydWUiKTsgfQpmdW5jdGlvbiBzaG91bGRCZVRydWVRdWll
dChfYSkgeyBzaG91bGRCZShfYSwgInRydWUiLCB0cnVlKTsgfQpmdW5jdGlvbiBzaG91bGRCZUZh
bHNlKF9hKSB7IHNob3VsZEJlKF9hLCAiZmFsc2UiKTsgfQpmdW5jdGlvbiBzaG91bGRCZU5hTihf
YSkgeyBzaG91bGRCZShfYSwgIk5hTiIpOyB9CmZ1bmN0aW9uIHNob3VsZEJlTnVsbChfYSkgeyBz
aG91bGRCZShfYSwgIm51bGwiKTsgfQpmdW5jdGlvbiBzaG91bGRCZVplcm8oX2EpIHsgc2hvdWxk
QmUoX2EsICIwIik7IH0KCmZ1bmN0aW9uIHNob3VsZEJlRXF1YWxUb1N0cmluZyhhLCBiKQp7CiAg
aWYgKHR5cGVvZiBhICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgYiAhPT0gInN0cmluZyIpCiAgICBk
ZWJ1ZygiV0FSTjogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1l
bnRzIik7CiAgdmFyIHVuZXZhbGVkU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYik7CiAgc2hvdWxk
QmUoYSwgdW5ldmFsZWRTdHJpbmcpOwp9CgpmdW5jdGlvbiBzaG91bGROb3RCZUVxdWFsVG9TdHJp
bmcoYSwgYikKewogIGlmICh0eXBlb2YgYSAhPT0gInN0cmluZyIgfHwgdHlwZW9mIGIgIT09ICJz
dHJpbmciKQogICAgZGVidWcoIldBUk46IHNob3VsZEJlRXF1YWxUb1N0cmluZygpIGV4cGVjdHMg
c3RyaW5nIGFyZ3VtZW50cyIpOwogIHZhciB1bmV2YWxlZFN0cmluZyA9IEpTT04uc3RyaW5naWZ5
KGIpOwogIHNob3VsZE5vdEJlKGEsIHVuZXZhbGVkU3RyaW5nKTsKfQpmdW5jdGlvbiBzaG91bGRC
ZUVtcHR5U3RyaW5nKF9hKSB7IHNob3VsZEJlRXF1YWxUb1N0cmluZyhfYSwgIiIpOyB9CgpmdW5j
dGlvbiBzaG91bGRFdmFsdWF0ZVRvKGFjdHVhbCwgZXhwZWN0ZWQpIHsKICAvLyBBIGdlbmVyYWwt
cHVycG9zZSBjb21wYXJhdG9yLiAgJ2FjdHVhbCcgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCiAg
Ly8gZXZhbHVhdGVkLCBhcyBmb3Igc2hvdWxkQmUoKS4gJ2V4cGVjdGVkJyBtYXkgYmUgYW55IHR5
cGUgYW5kIHdpbGwgYmUKICAvLyB1c2VkIHdpdGhvdXQgYmVpbmcgZXZhbCdlZC4KICBpZiAoZXhw
ZWN0ZWQgPT0gbnVsbCkgewogICAgLy8gRG8gdGhpcyBiZWZvcmUgdGhlIG9iamVjdCB0ZXN0LCBz
aW5jZSBudWxsIGlzIG9mIHR5cGUgJ29iamVjdCcuCiAgICBzaG91bGRCZU51bGwoYWN0dWFsKTsK
ICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAidW5kZWZpbmVkIikgewogICAgc2hvdWxk
QmVVbmRlZmluZWQoYWN0dWFsKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAiZnVu
Y3Rpb24iKSB7CiAgICAvLyBBbGwgdGhpcyBmdXNzIGlzIHRvIGF2b2lkIHRoZSBzdHJpbmctYXJn
IHdhcm5pbmcgZnJvbSBzaG91bGRCZSgpLgogICAgdHJ5IHsKICAgICAgYWN0dWFsVmFsdWUgPSBl
dmFsKGFjdHVhbCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRlc3RGYWlsZWQoIkV2YWx1YXRp
bmcgIiArIGFjdHVhbCArICI6IFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CiAgICAgIHJldHVybjsK
ICAgIH0KICAgIHNob3VsZEJlKCInIiArIGFjdHVhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgv
XG4vZywgIiIpICsgIiciLAogICAgICAgICAgICAgIiciICsgZXhwZWN0ZWQudG9TdHJpbmcoKS5y
ZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIpOwogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09
ICJvYmplY3QiKSB7CiAgICBzaG91bGRCZVRydWUoYWN0dWFsICsgIiA9PSAnIiArIGV4cGVjdGVk
ICsgIiciKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAic3RyaW5nIikgewogICAg
c2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCk7CiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQg
PT0gImJvb2xlYW4iKSB7CiAgICBzaG91bGRCZSgidHlwZW9mICIgKyBhY3R1YWwsICInYm9vbGVh
biciKTsKICAgIGlmIChleHBlY3RlZCkKICAgICAgc2hvdWxkQmVUcnVlKGFjdHVhbCk7CiAgICBl
bHNlCiAgICAgIHNob3VsZEJlRmFsc2UoYWN0dWFsKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBleHBl
Y3RlZCA9PSAibnVtYmVyIikgewogICAgc2hvdWxkQmUoYWN0dWFsLCBzdHJpbmdpZnkoZXhwZWN0
ZWQpKTsKICB9IGVsc2UgewogICAgZGVidWcoZXhwZWN0ZWQgKyAiIGlzIHVua25vd24gdHlwZSAi
ICsgdHlwZW9mIGV4cGVjdGVkKTsKICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwsICInIiAgK2V4cGVj
dGVkLnRvU3RyaW5nKCkgKyAiJyIpOwogIH0KfQoKZnVuY3Rpb24gc2hvdWxkQmVOb25aZXJvKF9h
KQp7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0gZXZhbChf
YSk7CiAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICBpZiAoZXhjZXB0
aW9uKQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBUaHJldyBleGNl
cHRpb24gIiArIGV4Y2VwdGlvbik7CiAgZWxzZSBpZiAoX2F2ICE9IDApCiAgICB0ZXN0UGFzc2Vk
KF9hICsgIiBpcyBub24temVyby4iKTsKICBlbHNlCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgYmUgbm9uLXplcm8uIFdhcyAiICsgX2F2KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVOb25OdWxs
KF9hKQp7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0gZXZh
bChfYSk7CiAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICBpZiAoZXhj
ZXB0aW9uKQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1udWxsLiBUaHJldyBl
eGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CiAgZWxzZSBpZiAoX2F2ICE9IG51bGwpCiAgICB0ZXN0
UGFzc2VkKF9hICsgIiBpcyBub24tbnVsbC4iKTsKICBlbHNlCiAgICB0ZXN0RmFpbGVkKF9hICsg
IiBzaG91bGQgYmUgbm9uLW51bGwuIFdhcyAiICsgX2F2KTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVV
bmRlZmluZWQoX2EpCnsKICB2YXIgZXhjZXB0aW9uOwogIHZhciBfYXY7CiAgdHJ5IHsKICAgICBf
YXYgPSBldmFsKF9hKTsKICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKICB9Cgog
IGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgdW5kZWZpbmVk
LiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CiAgZWxzZSBpZiAodHlwZW9mIF9hdiA9
PSAidW5kZWZpbmVkIikKICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIHVuZGVmaW5lZC4iKTsKICBl
bHNlCiAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgdW5kZWZpbmVkLiBXYXMgIiArIF9h
dik7Cn0KCmZ1bmN0aW9uIHNob3VsZEJlRGVmaW5lZChfYSkKewogIHZhciBleGNlcHRpb247CiAg
dmFyIF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAg
ICBleGNlcHRpb24gPSBlOwogIH0KCiAgaWYgKGV4Y2VwdGlvbikKICAgIHRlc3RGYWlsZWQoX2Eg
KyAiIHNob3VsZCBiZSBkZWZpbmVkLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CiAg
ZWxzZSBpZiAoX2F2ICE9PSB1bmRlZmluZWQpCiAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBkZWZp
bmVkLiIpOwogIGVsc2UKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBkZWZpbmVkLiBX
YXMgIiArIF9hdik7Cn0KCmZ1bmN0aW9uIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKF9hLCBf
YikgewogICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmlu
ZyIpCiAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsIGV4cGVj
dHMgc3RyaW5nIGFyZ3VtZW50cyIpOwoKICAgIHZhciBleGNlcHRpb247CiAgICB2YXIgX2F2Owog
ICAgdHJ5IHsKICAgICAgICBfYXYgPSBldmFsKF9hKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAg
ICBleGNlcHRpb24gPSBlOwogICAgfQogICAgdmFyIF9idiA9IGV2YWwoX2IpOwoKICAgIGlmIChl
eGNlcHRpb24pCiAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlID49ICIgKyBfYiAr
ICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKICAgIGVsc2UgaWYgKHR5cGVvZiBf
YXYgPT0gInVuZGVmaW5lZCIgfHwgX2F2IDwgX2J2KQogICAgICAgIHRlc3RGYWlsZWQoX2EgKyAi
IHNob3VsZCBiZSA+PSAiICsgX2IgKyAiLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5
cGVvZiBfYXYgKyAiKS4iKTsKICAgIGVsc2UKICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyA+
PSAiICsgX2IpOwp9CgpmdW5jdGlvbiBleHBlY3RUcnVlKHYsIG1zZykgewogIGlmICh2KSB7CiAg
ICB0ZXN0UGFzc2VkKG1zZyk7CiAgfSBlbHNlIHsKICAgIHRlc3RGYWlsZWQobXNnKTsKICB9Cn0K
CmZ1bmN0aW9uIHNob3VsZE5vdFRocm93KF9hKSB7CiAgICB0cnkgewogICAgICAgIGV2YWwoX2Ep
OwogICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLiIpOwog
ICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgdGhy
b3cgZXhjZXB0aW9uLiBUaHJldyBleGNlcHRpb24gIiArIGUgKyAiLiIpOwogICAgfQp9CgpmdW5j
dGlvbiBzaG91bGRUaHJvdyhfYSwgX2UpCnsKICB2YXIgZXhjZXB0aW9uOwogIHZhciBfYXY7CiAg
dHJ5IHsKICAgICBfYXYgPSBldmFsKF9hKTsKICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9u
ID0gZTsKICB9CgogIHZhciBfZXY7CiAgaWYgKF9lKQogICAgICBfZXYgPSAgZXZhbChfZSk7Cgog
IGlmIChleGNlcHRpb24pIHsKICAgIGlmICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgfHwgZXhj
ZXB0aW9uID09IF9ldikKICAgICAgdGVzdFBhc3NlZChfYSArICIgdGhyZXcgZXhjZXB0aW9uICIg
KyBleGNlcHRpb24gKyAiLiIpOwogICAgZWxzZQogICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0aW9uIiA6
IF9ldikgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbiArICIuIik7CiAgfSBlbHNl
IGlmICh0eXBlb2YgX2F2ID09ICJ1bmRlZmluZWQiKQogICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIg
OiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKICBlbHNlCiAgICB0ZXN0RmFpbGVkKF9hICsg
IiBzaG91bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0
aW9uIiA6IF9ldikgKyAiLiBXYXMgIiArIF9hdiArICIuIik7Cn0KCmZ1bmN0aW9uIHNob3VsZEhh
dmVIYWRFcnJvcihtZXNzYWdlKQp7CiAgICBpZiAoZXJyb3JNZXNzYWdlKSB7CiAgICAgICAgaWYg
KCFtZXNzYWdlKQogICAgICAgICAgICB0ZXN0UGFzc2VkKCJHb3QgZXhwZWN0ZWQgZXJyb3IiKTsK
ICAgICAgICBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5kZXhPZihtZXNzYWdlKSAhPT0gLTEpCiAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIkdvdCBleHBlY3RlZCBlcnJvcjogJyIgKyBtZXNzYWdlICsg
IiciKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZXh0ZWQgZXJy
b3IgJyIgKyBtZXNzYWdlICsgIiciKTsKICAgIH0gZWxzZQogICAgICAgIHRlc3RGYWlsZWQoIk1p
c3NpbmcgZXhwZXh0ZWQgZXJyb3IiKTsKICAgIGVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDsKfQoK
ZnVuY3Rpb24gZ2MoKSB7CiAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxlciAhPT0gInVuZGVmaW5l
ZCIpCiAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKICAgIGVsc2UgewogICAgICAgIHZh
ciBnY1JlYyA9IGZ1bmN0aW9uIChuKSB7CiAgICAgICAgICAgIGlmIChuIDwgMSkKICAgICAgICAg
ICAgICAgIHJldHVybiB7fTsKICAgICAgICAgICAgdmFyIHRlbXAgPSB7aTogImFiIiArIGkgKyAo
aSAvIDEwMDAwMCl9OwogICAgICAgICAgICB0ZW1wICs9ICJmb28iOwogICAgICAgICAgICBnY1Jl
YyhuLTEpOwogICAgICAgIH07CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKysp
CiAgICAgICAgICAgIGdjUmVjKDEwKQogICAgfQp9CgpmdW5jdGlvbiBkZmdDb21waWxlZChhcmd1
bWVudCkKewogICAgdmFyIG51bWJlck9mQ29tcGlsZXMgPSAiY29tcGlsZXMiIGluIGFyZ3VtZW50
ID8gYXJndW1lbnQuY29tcGlsZXMgOiAxOwogICAgCiAgICBpZiAoISgiZiIgaW4gYXJndW1lbnQp
KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiZGZnQ29tcGlsZWQgY2FsbGVkIHdpdGggaW52YWxp
ZCBhcmd1bWVudC4iKTsKICAgIAogICAgaWYgKGFyZ3VtZW50LmYgaW5zdGFuY2VvZiBBcnJheSkg
ewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnQuZi5sZW5ndGg7ICsraSkgewog
ICAgICAgICAgICBpZiAodGVzdFJ1bm5lci5udW1iZXJPZkRGR0NvbXBpbGVzKGFyZ3VtZW50LmZb
aV0pIDwgbnVtYmVyT2ZDb21waWxlcykKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmICh0ZXN0UnVubmVyLm51bWJlck9mREZHQ29t
cGlsZXMoYXJndW1lbnQuZikgPCBudW1iZXJPZkNvbXBpbGVzKQogICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICB9CiAgICAKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBkZmdJbmNyZW1l
bnQoYXJndW1lbnQpCnsKICAgIGlmICghc2VsZi50ZXN0UnVubmVyKQogICAgICAgIHJldHVybiBh
cmd1bWVudC5pOwogICAgCiAgICBpZiAoYXJndW1lbnQuaSA8IGFyZ3VtZW50Lm4pCiAgICAgICAg
cmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAKICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAg
IHJldHVybiBhcmd1bWVudC5pOwogICAgCiAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkK
ICAgICAgICByZXR1cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50LnN0YXJ0IDogMDsK
ICAgIAogICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cn0KCmZ1bmN0aW9uIG5vSW5saW5lKHRoZUZ1bmN0
aW9uKQp7CiAgICBpZiAoIXNlbGYudGVzdFJ1bm5lcikKICAgICAgICByZXR1cm47CiAgICAKICAg
IHRlc3RSdW5uZXIubmV2ZXJJbmxpbmVGdW5jdGlvbih0aGVGdW5jdGlvbik7Cn0KCmZ1bmN0aW9u
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCkKewogICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFuZCBv
bmx5IHJlcG9ydCB1bmV4cGVjdGVkIHN5bnRheCBlcnJvcnMuCiAgICBpZiAoIWVycm9yTWVzc2Fn
ZSkKICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogICAgc2hvdWxkQmVUcnVlKCJz
dWNjZXNzZnVsbHlQYXJzZWQiKTsKICAgIGlmIChzaWxlbnRUZXN0UGFzcyAmJiBkaWRQYXNzU29t
ZVRlc3RzU2lsZW50bHkpCiAgICAgICAgZGVidWcoIlBhc3NlZCBzb21lIHRlc3RzIHNpbGVudGx5
LiIpOwogICAgaWYgKHNpbGVudFRlc3RQYXNzICYmIGRpZEZhaWxTb21lVGVzdHMpCiAgICAgICAg
ZGVidWcoIlNvbWUgdGVzdHMgZmFpbGVkLiIpOwogICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNz
PSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOwp9CgovLyBJdCdzIHBvc3NpYmxlIGZvciBh
biBhc3luYyB0ZXN0IHRvIGNhbGwgZmluaXNoSlNUZXN0KCkgYmVmb3JlIGpzLXRlc3QtcG9zdC5q
cwovLyBoYXMgYmVlbiBwYXJzZWQuCmZ1bmN0aW9uIGZpbmlzaEpTVGVzdCgpCnsKICAgIHdhc0Zp
bmlzaEpTVGVzdENhbGxlZCA9IHRydWU7CiAgICBpZiAoIXNlbGYud2FzUG9zdFRlc3RTY3JpcHRQ
YXJzZWQpCiAgICAgICAgcmV0dXJuOwogICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKICAgIGlm
IChzZWxmLmpzVGVzdElzQXN5bmMgJiYgc2VsZi50ZXN0UnVubmVyKQogICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwp9CgpmdW5jdGlvbiBzdGFydFdvcmtlcih0ZXN0U2NyaXB0VVJMLCBz
aGFyZWQpCnsKICAgIHNlbGYuanNUZXN0SXNBc3luYyA9IHRydWU7CiAgICBkZWJ1ZygnU3RhcnRp
bmcgd29ya2VyOiAnICsgdGVzdFNjcmlwdFVSTCk7CiAgICB2YXIgd29ya2VyID0gc2hhcmVkID8g
bmV3IFNoYXJlZFdvcmtlcih0ZXN0U2NyaXB0VVJMLCAiU2hhcmVkIFdvcmtlciIpIDogbmV3IFdv
cmtlcih0ZXN0U2NyaXB0VVJMKTsKICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVu
dCkKICAgIHsKICAgICAgICB2YXIgd29ya2VyUHJlZml4ID0gIltXb3JrZXJdICI7CiAgICAgICAg
aWYgKGV2ZW50LmRhdGEubGVuZ3RoIDwgNSB8fCBldmVudC5kYXRhLmNoYXJBdCg0KSAhPSAnOicp
IHsKICAgICAgICAgIGRlYnVnKHdvcmtlclByZWZpeCArIGV2ZW50LmRhdGEpOwogICAgICAgICAg
cmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmRhdGEuc3Vic3RyaW5n
KDAsIDQpOwogICAgICAgIHZhciBwYXlsb2FkID0gd29ya2VyUHJlZml4ICsgZXZlbnQuZGF0YS5z
dWJzdHJpbmcoNSk7CiAgICAgICAgaWYgKGNvZGUgPT0gIlBBU1MiKQogICAgICAgICAgICB0ZXN0
UGFzc2VkKHBheWxvYWQpOwogICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gIkZBSUwiKQogICAgICAg
ICAgICB0ZXN0RmFpbGVkKHBheWxvYWQpOwogICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gIkRFU0Mi
KQogICAgICAgICAgICBkZXNjcmlwdGlvbihwYXlsb2FkKTsKICAgICAgICBlbHNlIGlmIChjb2Rl
ID09ICJET05FIikKICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgICBkZWJ1Zyh3b3JrZXJQcmVmaXggKyBldmVudC5kYXRhKTsKICAgIH07CgogICAgd29y
a2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkKICAgIHsKICAgICAgICBkZWJ1ZygnR290IGVy
cm9yIGZyb20gd29ya2VyOiAnICsgZXZlbnQubWVzc2FnZSk7CiAgICAgICAgZmluaXNoSlNUZXN0
KCk7CiAgICB9CgogICAgaWYgKHNoYXJlZCkgewogICAgICAgIHdvcmtlci5wb3J0Lm9ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IHdvcmtlci5vbm1lc3NhZ2UoZXZlbnQpOyB9OwogICAgICAg
IHdvcmtlci5wb3J0LnN0YXJ0KCk7CiAgICB9CiAgICByZXR1cm4gd29ya2VyOwp9CgppZiAoaXNX
b3JrZXIoKSkgewogICAgdmFyIHdvcmtlclBvcnQgPSBzZWxmOwogICAgaWYgKHNlbGYubmFtZSA9
PSAiU2hhcmVkIFdvcmtlciIpIHsKICAgICAgICBzZWxmLm9uY29ubmVjdCA9IGZ1bmN0aW9uKGUp
IHsKICAgICAgICAgICAgd29ya2VyUG9ydCA9IGUucG9ydHNbMF07CiAgICAgICAgICAgIHdvcmtl
clBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHZhciBjb2xvbiA9IGV2ZW50LmRhdGEuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAg
ICAgaWYgKGNvbG9uID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVW5y
ZWNvZ25pemVkIG1lc3NhZ2UgdG8gc2hhcmVkIHdvcmtlcjogIiArIGV2ZW50LmRhdGEpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IHZhciBjb2RlID0gZXZlbnQuZGF0YS5zdWJzdHJpbmcoMCwgY29sb24pOwogICAgICAgICAgICAg
ICAgdmFyIHBheWxvYWQgPSBldmVudC5kYXRhLnN1YnN0cmluZyhjb2xvbiArIDEpOwogICAgICAg
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSAiSU1QT1JUIikK
ICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0U2NyaXB0cyhwYXlsb2FkKTsKICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlVucmVj
b2duaXplZCBtZXNzYWdlIHRvIHNoYXJlZCB3b3JrZXI6ICIgKyBldmVudC5kYXRhKTsKICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Q2F1Z2h0IGV4Y2VwdGlvbiBpbiBzaGFyZWQgd29ya2VyIG9ubWVzc2FnZTogIiArIGV4KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQogICAgZGVzY3Jp
cHRpb24gPSBmdW5jdGlvbihtc2csIHF1aWV0KSB7CiAgICAgICAgd29ya2VyUG9ydC5wb3N0TWVz
c2FnZSgnREVTQzonICsgbXNnKTsKICAgIH0KICAgIHRlc3RGYWlsZWQgPSBmdW5jdGlvbihtc2cp
IHsKICAgICAgICB3b3JrZXJQb3J0LnBvc3RNZXNzYWdlKCdGQUlMOicgKyBtc2cpOwogICAgfQog
ICAgdGVzdFBhc3NlZCA9IGZ1bmN0aW9uKG1zZykgewogICAgICAgIHdvcmtlclBvcnQucG9zdE1l
c3NhZ2UoJ1BBU1M6JyArIG1zZyk7CiAgICB9CiAgICBmaW5pc2hKU1Rlc3QgPSBmdW5jdGlvbigp
IHsKICAgICAgICB3b3JrZXJQb3J0LnBvc3RNZXNzYWdlKCdET05FOicpOwogICAgfQogICAgZGVi
dWcgPSBmdW5jdGlvbihtc2cpIHsKICAgICAgICB3b3JrZXJQb3J0LnBvc3RNZXNzYWdlKG1zZyk7
CiAgICB9Cn0KPC9zY3JpcHQ+CjxzdHlsZT4KdGFibGUsIHRkLCB0aCB7IGJvcmRlcjogMnB4IHNv
bGlkIGJsdWU7IH0gLyogVG8gbWFrZSBpdCBlYXNpZXIgdG8gdmlzdWFsbHkgaW5zcGVjdCB0aGUg
dGVzdCBjYXNlLiAqLwo8L3N0eWxlPgo8c2NyaXB0Pgp3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Cgp2YXIgdGFibGU7CnZhciB0YWJsZUhvcml6b250YWxCb3JkZXJTcGFjaW5nOwp2YXIgdGFi
bGVWZXJ0aWNhbEJvcmRlclNwYWNpbmc7CnZhciBib3JkZXJDb2xsYXBzZU1lbnU7Cgp3aW5kb3cu
b25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0
aGF0IG9mZnNldHtMZWZ0LCBUb3AsIFdpZHRoLCBIZWlnaHR9IHdvcmsgZm9yIHRhYmxlIGNvbHVt
bnMgYW5kIGNvbHVtbiBncm91cHMuIik7CgogICAgdGFibGUgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCJ0YWJsZSIpOwogICAgYm9yZGVyQ29sbGFwc2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImJvcmRlckNvbGxhcHNlTWVudSIpOwogICAgYm9yZGVyQ29sbGFwc2VNZW51Lm9uY2hh
bmdlID0gZGlkQ2hhbmdlQm9yZGVyQ29sbGFwc2U7CgogICAgcnVuVGVzdHMoKTsKfQoKZnVuY3Rp
b24gZGlkQ2hhbmdlQm9yZGVyQ29sbGFwc2UoKQp7CiAgICB2YXIgbmV3Qm9yZGVyQ29sbGFwc2Ug
PSBib3JkZXJDb2xsYXBzZU1lbnUub3B0aW9uc1tib3JkZXJDb2xsYXBzZU1lbnUuc2VsZWN0ZWRJ
bmRleF0udmFsdWU7CiAgICB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9IGJvcmRlckNvbGxh
cHNlTWVudS5vcHRpb25zW2JvcmRlckNvbGxhcHNlTWVudS5zZWxlY3RlZEluZGV4XS52YWx1ZTsK
ICAgIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcgPSBuZXdCb3JkZXJDb2xsYXBzZSA9PT0g
ImNvbGxhcHNlIiA/IDAgOiBwYXJzZUludCh0YWJsZS5nZXRBdHRyaWJ1dGUoImNlbGxzcGFjaW5n
IiksIDEwKTsKICAgIHRhYmxlVmVydGljYWxCb3JkZXJTcGFjaW5nID0gdGFibGVIb3Jpem9udGFs
Qm9yZGVyU3BhY2luZzsKfQoKZnVuY3Rpb24gcnVuVGVzdHMoKQp7CiAgICB2YXIgc2F2ZWRTZWxl
Y3RlZEluZGV4OwogICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICBzYXZlZFNlbGVj
dGVkSW5kZXggPSBib3JkZXJDb2xsYXBzZU1lbnUuc2VsZWN0ZWRJbmRleDsKCiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJvcmRlckNvbGxhcHNlTWVudS5vcHRpb25zLmxlbmd0aDsgKytpKSB7CiAg
ICAgICAgYm9yZGVyQ29sbGFwc2VNZW51Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOwogICAg
ICAgIGRpZENoYW5nZUJvcmRlckNvbGxhcHNlKCk7CgogICAgICAgIGRlYnVnKCc8YnI+V2hlbiBi
b3JkZXJDb2xsYXBzZSA9PSAiJyArIGJvcmRlckNvbGxhcHNlTWVudS5vcHRpb25zW2ldLnZhbHVl
ICsgJyInKTsKCiAgICAgICAgZGVidWcoIjxicj5UZXN0cyBmb3Igb2Zmc2V0TGVmdDoiKTsKICAg
ICAgICB0ZXN0T2Zmc2V0TGVmdCgpOwoKICAgICAgICBkZWJ1ZygiPGJyPlRlc3RzIGZvciBvZmZz
ZXRUb3A6Iik7CiAgICAgICAgdGVzdE9mZnNldFRvcCgpOwoKICAgICAgICBkZWJ1ZygiPGJyPlRl
c3RzIGZvciBvZmZzZXRXaWR0aDoiKTsKICAgICAgICB0ZXN0T2Zmc2V0V2lkdGgoKTsKCiAgICAg
ICAgZGVidWcoIjxicj5UZXN0cyBmb3Igb2Zmc2V0SGVpZ2h0OiIpOwogICAgICAgIHRlc3RPZmZz
ZXRIZWlnaHQoKTsKICAgIH0KCiAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgZG9j
dW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdC1jb250
YWluZXIiKSk7CiAgICBlbHNlIHsKICAgICAgICBib3JkZXJDb2xsYXBzZU1lbnUub3B0aW9uc1tz
YXZlZFNlbGVjdGVkSW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICBkaWRDaGFuZ2VCb3Jk
ZXJDb2xsYXBzZSgpOwogICAgfQogICAgZmluaXNoSlNUZXN0KCk7Cn0KCmZ1bmN0aW9uIHRlc3RP
ZmZzZXRMZWZ0KCkKewogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0TGVmdCcsICdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicm93MUNlbGwxIikub2Zmc2V0TGVmdCcpOwogICAgc2hvdWxkQmUoJ2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRMZWZ0JywgJ2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRMZWZ0Jyk7CiAgICBzaG91bGRCZSgnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3ROYW1lIikub2Zmc2V0TGVmdCcsICdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0TGVmdCcpOwogICAgc2hvdWxkQmUoJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRMZWZ0Jywg
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRMZWZ0Jyk7CiAgICBz
aG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01BbmRIYXNOIikub2Zmc2V0TGVm
dCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwzIikub2Zmc2V0TGVmdCcpOwog
ICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0TGVmdCcs
ICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw1Iikub2Zmc2V0TGVmdCcpOwogICAg
c2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0TGVmdCcsICdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw2Iikub2Zmc2V0TGVmdCcpOwogICAgc2hv
dWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGRO
b3RCZVJlbmRlcmVkIikub2Zmc2V0TGVmdCcsIDApOwp9CgpmdW5jdGlvbiB0ZXN0T2Zmc2V0VG9w
KCkKewogICAgdmFyIHRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm9IZWFk
aW5nIikub2Zmc2V0VG9wOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInByb2R1Y3RObyIpLnBhcmVudE5vZGUub2Zmc2V0VG9wJywgdG9wKTsKICAgIHNob3Vs
ZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5vZmZzZXRU
b3AnLCB0b3ApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InByb2R1Y3ROYW1lIikub2Zmc2V0VG9wJywgdG9wKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2Rv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRUb3AnLCB0
b3ApOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhc01B
bmRIYXNOIikub2Zmc2V0VG9wJywgdG9wKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJoYXNPIikub2Zmc2V0VG9wJywgdG9wKTsKICAgIHNob3VsZEV2YWx1
YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0VG9wJywgdG9wKTsK
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5UaGF0
U2hvdWxkTm90QmVSZW5kZXJlZCIpLm9mZnNldFRvcCcsIDApOwp9CgpmdW5jdGlvbiB0ZXN0T2Zm
c2V0V2lkdGgoKQp7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicHJvZHVjdE5vIikucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCcsIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyb3cxQ2VsbDEiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yaXpvbnRhbEJvcmRlclNw
YWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGwyIikub2Zmc2V0V2lkdGgp
OwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RO
byIpLm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMSIpLm9m
ZnNldFdpZHRoKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwcm9kdWN0TmFtZSIpLm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJv
dzFDZWxsMiIpLm9mZnNldFdpZHRoKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTkFuZEhhc08iKS5vZmZzZXRXaWR0aCcsIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDMiKS5vZmZzZXRXaWR0aCArIHRhYmxlSG9yaXpvbnRh
bEJvcmRlclNwYWNpbmcgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93MUNlbGw0Iikub2Zm
c2V0V2lkdGggKyB0YWJsZUhvcml6b250YWxCb3JkZXJTcGFjaW5nICsgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJvdzFDZWxsNSIpLm9mZnNldFdpZHRoKTsKICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9mZnNldFdpZHRoJywgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFDZWxsMyIpLm9mZnNldFdpZHRoICsgdGFibGVIb3Jp
em9udGFsQm9yZGVyU3BhY2luZyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3cxQ2VsbDQi
KS5vZmZzZXRXaWR0aCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGFzTyIpLm9mZnNldFdpZHRoJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdzFD
ZWxsNSIpLm9mZnNldFdpZHRoKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJoYXNQIikub2Zmc2V0V2lkdGgnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cm93MUNlbGw2Iikub2Zmc2V0V2lkdGgpOwogICAgc2hvdWxkRXZhbHVhdGVUbygnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbHVtblRoYXRTaG91bGROb3RCZVJlbmRlcmVkIikub2Zmc2V0V2lk
dGgnLCAwKTsKfQoKZnVuY3Rpb24gdGVzdE9mZnNldEhlaWdodCgpCnsKICAgIHZhciBoZWlnaHQg
PSB0YWJsZUNvbnRlbnRIZWlnaHQoKTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJwcm9kdWN0Tm8iKS5wYXJlbnROb2RlLm9mZnNldEhlaWdodCcsIGhlaWdo
dCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVj
dE5vIikub2Zmc2V0SGVpZ2h0JywgaGVpZ2h0KTsKICAgIHNob3VsZEV2YWx1YXRlVG8oJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwcm9kdWN0TmFtZSIpLm9mZnNldEhlaWdodCcsIGhlaWdodCk7
CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFzTUFuZEhh
c05BbmRIYXNPIikub2Zmc2V0SGVpZ2h0JywgaGVpZ2h0KTsKICAgIHNob3VsZEV2YWx1YXRlVG8o
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXNNQW5kSGFzTiIpLm9mZnNldEhlaWdodCcsIGhl
aWdodCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFz
TyIpLm9mZnNldEhlaWdodCcsIGhlaWdodCk7CiAgICBzaG91bGRFdmFsdWF0ZVRvKCdkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaGFzUCIpLm9mZnNldEhlaWdodCcsIGhlaWdodCk7CiAgICBzaG91
bGRFdmFsdWF0ZVRvKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29sdW1uVGhhdFNob3VsZE5v
dEJlUmVuZGVyZWQiKS5vZmZzZXRIZWlnaHQnLCAwKTsKfQoKZnVuY3Rpb24gdGFibGVDb250ZW50
SGVpZ2h0KCkKewogICAgdmFyIHJlc3VsdCA9IDA7CiAgICB2YXIgcm93cyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwogICAgdmFyIG51bWJlck9mUm93cyA9IHJvd3MubGVu
Z3RoOwogICAgaWYgKG51bWJlck9mUm93cykKICAgICAgICByZXN1bHQgKz0gcm93c1swXS5vZmZz
ZXRIZWlnaHQ7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG51bWJlck9mUm93czsgKytpKQogICAg
ICAgIHJlc3VsdCArPSB0YWJsZVZlcnRpY2FsQm9yZGVyU3BhY2luZyArIHJvd3NbaV0ub2Zmc2V0
SGVpZ2h0OwogICAgcmV0dXJuIHJlc3VsdDsKfQo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+CjxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KICAgIDxsYWJl
bCBmb3I9ImJvcmRlckNvbGxhcHNlTWVudSI+Ym9yZGVyLWNvbGxhcHNlPC9sYWJlbD4KICAgIDxz
ZWxlY3QgaWQ9ImJvcmRlckNvbGxhcHNlTWVudSI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic2Vw
YXJhdGUiPnNlcGFyYXRlPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY29sbGFwc2Ui
PmNvbGxhcHNlPC9vcHRpb24+CiAgICA8L3NlbGVjdD4KICAgIDx0YWJsZSBjZWxsc3BhY2luZz0i
NCI+CiAgICAgICAgPGNhcHRpb24+UHJvZHVjdCBUYWJsZTwvY2FwdGlvbj4KICAgICAgICA8Y29s
IGlkPSJwcm9kdWN0Tm8iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPgogICAg
ICAgIDxjb2wgaWQ9InByb2R1Y3ROYW1lIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRn
cmVlbiI+CiAgICAgICAgPGNvbGdyb3VwIGlkPSJoYXNNQW5kSGFzTkFuZEhhc08iIHN0eWxlPSJi
YWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyYXkiPgogICAgICAgICAgICA8Y29sIGlkPSJoYXNNQW5k
SGFzTiIgc3Bhbj0iMiI+CiAgICAgICAgICAgIDxjb2wgaWQ9Imhhc08iPgogICAgICAgIDwvY29s
Z3JvdXA+CiAgICAgICAgPGNvbGdyb3VwIGlkPSJoYXNQIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xv
cjogZ3JheSI+CiAgICAgICAgPGNvbGdyb3VwIGlkPSJjb2x1bW5UaGF0U2hvdWxkTm90QmVSZW5k
ZXJlZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJlZCIgc3Bhbj0iMiI+CiAgICAgICAgPHRo
ZWFkPgogICAgICAgICAgICA8dHI+PHRoIGlkPSJwcm9kdWN0Tm9IZWFkaW5nIj5Qcm9kdWN0IE5v
LjwvdGg+PHRoPk5hbWU8L3RoPjx0aD5IYXMgTTwvdGg+PHRoPkhhcyBOPC90aD48dGg+SGFzIE88
L3RoPjx0aD5IYXMgUDwvdGg+PC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4K
ICAgICAgICAgICAgPHRyPjx0ZCBpZD0icm93MUNlbGwxIj4xPC90ZD48dGQgaWQ9InJvdzFDZWxs
MiI+R2l6bW8gQTwvdGQ+PHRkIGlkPSJyb3cxQ2VsbDMiPiYjeDI3MTM7PC90ZD48dGQgaWQ9InJv
dzFDZWxsNCI+PC90ZD48dGQgaWQ9InJvdzFDZWxsNSI+JiN4MjcxMzs8L3RkPjx0ZCBpZD0icm93
MUNlbGw2Ij4mI3gyNzEzOzwvdGQ+PC90cj4KICAgICAgICAgICAgPHRyPjx0ZD4yPC90ZD48dGQ+
R2l6bW8gQSBQcm88L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PHRkPiYjeDI3MTM7PC90ZD48dGQ+JiN4
MjcxMzs8L3RkPjx0ZD4mI3gyNzEzOzwvdGQ+PC90cj4KICAgICAgICAgICAgPHRyPjx0ZD4zPC90
ZD48dGQ+R2l6bW8gQjwvdGQ+PHRkPjx0ZD48dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxp
Z246IGNlbnRlciI+JiN4MjcxMzs8L3RkPjwvdHI+CiAgICAgICAgPC90Ym9keT4KICAgIDwvdGFi
bGU+CjwvZGl2Pgo8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KPHNjcmlwdD4KLy8gVGhpcyBzY3Jp
cHQgaXMgaWRlbnRpY2FsIHRvIExheW91dFRlc3RzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMg
YXMgb2YgcjE2NDExMi4KCndhc1Bvc3RUZXN0U2NyaXB0UGFyc2VkID0gdHJ1ZTsKCmlmICh3aW5k
b3cuanNUZXN0SXNBc3luYykgewogICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgaWYgKHdpbmRvdy53YXNGaW5pc2hKU1Rlc3RD
YWxsZWQpCiAgICAgICAgZmluaXNoSlNUZXN0KCk7Cn0gZWxzZQogICAgZmluaXNoSlNUZXN0KCk7
Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>