<?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>41613</bug_id>
          
          <creation_ts>2010-07-05 07:15:36 -0700</creation_ts>
          <short_desc>Adds support for generating code from IDL with reserved keywords (it&apos;ll be necessary for IDBCursor::continue).</short_desc>
          <delta_ts>2010-07-16 11:32:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marcus Bulach">bulach</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>japhet</cc>
    
    <cc>jorlow</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246627</commentid>
    <comment_count>0</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-05 07:15:36 -0700</bug_when>
    <thetext>Adds support for generating code from IDL with reserved keywords (it&apos;ll be necessary for IDBCursor::continue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246630</commentid>
    <comment_count>1</comment_count>
      <attachid>60529</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-05 07:20:20 -0700</bug_when>
    <thetext>Created attachment 60529
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246631</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-05 07:21:35 -0700</bug_when>
    <thetext>Attachment 60529 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:681:  WebDOMTestObj::continue_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:689:  WebDOMTestObj::delete_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:124:  continue_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:125:  delete_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246634</commentid>
    <comment_count>3</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-05 07:25:55 -0700</bug_when>
    <thetext>jeremy: this patch will allow IDBCursor to have its infamous &quot;continue&quot; method.
Two questions though:

1. we could probably get away with a [Custom] binding, but I think it&apos;s better to improve the generator?

2. this patch simply adds a &quot;_&quot; suffix for a couple of reserved keywords. please, let me know if you think of a better idea to escape such names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249818</commentid>
    <comment_count>4</comment_count>
      <attachid>60529</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-12 07:15:18 -0700</bug_when>
    <thetext>Comment on attachment 60529
Patch

Looks good, except the way you&apos;re escaping it doesn&apos;t seem very webkitty.  Not sure what&apos;d be a better suffix tho.  :-(

Also, you should git blame this and cc some others who work in this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249824</commentid>
    <comment_count>5</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-12 07:33:38 -0700</bug_when>
    <thetext>+japhet@chromium.org

Nate, I guess you know quite a lot of the code generators, would you mind taking a look at this?

quick background: we&apos;re working on IndexedDB, and some of its IDLs use C++ reserved keywords such &quot;continue&quot; and &quot;delete&quot; on methods such as &quot;IDBCursor::continue()&quot;.
The idea is that we need to escape such methods somehow, and in this patch I used a &quot;_&quot; as a suffix.. would you have any suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251089</commentid>
    <comment_count>6</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-14 03:22:18 -0700</bug_when>
    <thetext>+abarth@webkit.org

Adam, this is the part of naming mangling / escaping you commented on https://bugs.webkit.org/show_bug.cgi?id=41888.

I&apos;d be happy to hear your ideas here as well. Having the IDL attribute as you suggested, &quot;[ImplementationName=continue_]&quot;, could help clarifying, but I&apos;m afraid it just adds more &quot;noise&quot; and the real problem (how to define the implementation name) still exists and it&apos;d be solved ad hoc per method.

I think it&apos;d be better if we could define an automated mangling/escaping mechanism. I borrowed the current idea from http://www.w3.org/TR/WebIDL/#java-binding (although I&apos;m using a suffix rather than prefix). I&apos;m obviously happy to go any other way.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251229</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-14 09:37:18 -0700</bug_when>
    <thetext>My thought about using an IDL attribute arise from the general design principle of being explicit rather than implicit.  As for adding noise, I think it is much less common than some of our other attributes.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251231</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-14 09:40:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; My thought about using an IDL attribute arise from the general design principle of being explicit rather than implicit.  As for adding noise, I think it is much less common than some of our other attributes.  :)

Generally I&apos;d agree with you Adam, but in this case my thinking is that these are reserved words and thus there is never a reason why they shouldn&apos;t be changed to something else.

I guess we could have the generator raise an error if it sees one without such an attribute?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251236</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-14 09:44:10 -0700</bug_when>
    <thetext>&gt; I guess we could have the generator raise an error if it sees one without such an attribute?

Well, the compiler will happily raise that error for you.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251240</commentid>
    <comment_count>10</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-14 09:46:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; My thought about using an IDL attribute arise from the general design principle of being explicit rather than implicit.  As for adding noise, I think it is much less common than some of our other attributes.  :)

I agree that it&apos;d be explicit, but it wouldn&apos;t really solve the problem, right? :)

I mean, we&apos;d still need to have a rule on how to define the escaping/mangling, and then if we have such a rule, why not just have it written in code? :)

Perhaps a compromise would be just have an attribute like &quot;[EscapeCppName]&quot; in the IDL (making it explicit) but then letting the codegenerator (making it normative) do the actual escaping? how does that sound?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251241</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-14 09:47:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; I guess we could have the generator raise an error if it sees one without such an attribute?
&gt; 
&gt; Well, the compiler will happily raise that error for you.  :)

For C++ reserved words.  The worse case is JS or other binding language reserved words in which case the error might only be seen in run time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251570</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-14 18:36:07 -0700</bug_when>
    <thetext>&gt; Perhaps a compromise would be just have an attribute like &quot;[EscapeCppName]&quot; in the IDL (making it explicit) but then letting the codegenerator (making it normative) do the actual escaping? how does that sound?

Yeah, something like [WebCoreName=continueDarnIt]

&gt; For C++ reserved words.  The worse case is JS or other binding language reserved words in which case the error might only be seen in run time.

I feel like we should deal with that problem when we come to it.  Currently, all the code generators generate C++ code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251571</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-14 18:36:56 -0700</bug_when>
    <thetext>BTW, Mozilla has such an attribute in their IDL language as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251783</commentid>
    <comment_count>14</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-15 03:31:42 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Perhaps a compromise would be just have an attribute like &quot;[EscapeCppName]&quot; in the IDL (making it explicit) but then letting the codegenerator (making it normative) do the actual escaping? how does that sound?
&gt; 
&gt; Yeah, something like [WebCoreName=continueDarnIt]

hmm, but in this case the &quot;DarnIt&quot; suffix would be ad hoc..

granted, it wouldn&apos;t be that common, but I&apos;d prefer to establish an enforced rule in the generator rather than discuss what suffix should be used.
just to be clear, I&apos;m happy with DarnIt ;) but the attribute should be [EscapeWebCoreNameDarnIt] :)
no options allowed, more straightforward code reviews.
how does it sound?

&gt; 
&gt; &gt; For C++ reserved words.  The worse case is JS or other binding language reserved words in which case the error might only be seen in run time.
&gt; 
&gt; I feel like we should deal with that problem when we come to it.  Currently, all the code generators generate C++ code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251918</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-15 09:00:24 -0700</bug_when>
    <thetext>I feel like we&apos;re over designing this feature.  We should just take the implementation name as the value of the attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251921</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-15 09:06:39 -0700</bug_when>
    <thetext>For what it&apos;s worth, I think the original approach Marcus had was fine and that making this more general purpose was an &quot;overdesign&quot; as well.  So I think it&apos;s a bit unfair to dismis Marcus&apos; suggestion as &quot;overdesign&quot;.

That said, I would lean towards the [WebCoreName=continueForRealz] approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251928</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-15 09:25:41 -0700</bug_when>
    <thetext>&gt; So I think it&apos;s a bit unfair to dismis Marcus&apos; suggestion as &quot;overdesign&quot;.

Oh, I didn&apos;t mean to dimiss Marcus&apos; suggestion.  I just meant that we should just pick something and go with it, whether that&apos;s the implicit design, the parameterized explicit design, or the unparameterized explicit design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251940</commentid>
    <comment_count>18</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-15 09:42:29 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; So I think it&apos;s a bit unfair to dismis Marcus&apos; suggestion as &quot;overdesign&quot;.
&gt; 
&gt; Oh, I didn&apos;t mean to dimiss Marcus&apos; suggestion.  I just meant that we should just pick something and go with it, whether that&apos;s the implicit design, the parameterized explicit design, or the unparameterized explicit design.

:)
my votes, in order of preference:
1. unparameterized explicit design
2. parameterized explicit design
3. implicit design

I&apos;m happy with whatever, please cast your votes.. but more important: any suggestion for the escaping rule? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251943</commentid>
    <comment_count>19</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-15 09:45:11 -0700</bug_when>
    <thetext>You could (In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; &gt; So I think it&apos;s a bit unfair to dismis Marcus&apos; suggestion as &quot;overdesign&quot;.
&gt; &gt; 
&gt; &gt; Oh, I didn&apos;t mean to dimiss Marcus&apos; suggestion.  I just meant that we should just pick something and go with it, whether that&apos;s the implicit design, the parameterized explicit design, or the unparameterized explicit design.
&gt; 
&gt; :)
&gt; my votes, in order of preference:
&gt; 1. unparameterized explicit design
&gt; 2. parameterized explicit design
&gt; 3. implicit design
&gt; 
&gt; I&apos;m happy with whatever, please cast your votes.. but more important: any suggestion for the escaping rule? :)

Function?  i.e.  &quot;continueFunction&quot; or &quot;deleteFunction&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251946</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-15 09:48:57 -0700</bug_when>
    <thetext>Yay design by committee.  :)

1. parameterized explicit design
2. unparameterized explicit design
3. implicit design</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251950</commentid>
    <comment_count>21</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-15 09:52:52 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Yay design by committee.  :)
&gt; 
&gt; 1. parameterized explicit design
&gt; 2. unparameterized explicit design
&gt; 3. implicit design

yay, decided! :) parametrized explicit design, and I&apos;ll use &quot;Function&quot; as suffix on the baseline TestObj.idl and the methods I&apos;ll need on the IDBCursor.. new patch follow soon. thanks both!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252498</commentid>
    <comment_count>22</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-16 07:13:39 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; Yay design by committee.  :)
&gt; &gt; 
&gt; &gt; 1. parameterized explicit design
&gt; &gt; 2. unparameterized explicit design
&gt; &gt; 3. implicit design
&gt; 
&gt; yay, decided! :) parametrized explicit design, and I&apos;ll use &quot;Function&quot; as suffix on the baseline TestObj.idl and the methods I&apos;ll need on the IDBCursor.. new patch follow soon. thanks both!

duh :(
apparently there&apos;s already support for *exactly* this.

http://trac.webkit.org/browser/trunk/WebCore/page/Console.idl
[CustomArgumentHandling, ImplementationFunction=assertCondition] void assert(in boolean condition);

I&apos;ll double check it works and hopefully close this issue.
thanks for all your help, apologies for wasting your time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252625</commentid>
    <comment_count>23</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-16 11:32:18 -0700</bug_when>
    <thetext>Attribute [ImplementationFunction=nameFunction] does exactly what this was intending. Closing this as invalid.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60529</attachid>
            <date>2010-07-05 07:20:20 -0700</date>
            <delta_ts>2010-07-12 07:15:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41613-20100705152017.patch</filename>
            <type>text/plain</type>
            <size>19847</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmQ2MGYwNDg4MjZjNWQ1NTk2NjkxM2Y3MjI5N2Q4Y2U0MzgyNDZiMS4uYjUwZDRhZGI3MzYyZTdh
Y2YzNjQ4ZWFlZDJiN2ExZDZlMjhmYTA0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wNy0wNSAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIGNv
ZGUgZnJvbSBJREwgd2l0aCByZXNlcnZlZCBrZXl3b3JkcyAoaXQnbGwgYmUgbmVjZXNzYXJ5IGZv
ciBJREJDdXJzb3I6OmNvbnRpbnVlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQxNjEzCisKKyAgICAgICAgVGVzdDogcnVuLWJpbmRpbmdzLXRlc3Rz
IHNob3VsZCBnZW5lcmF0ZSB2YWxpZCBjb2RlIChlc2NhcGluZyByZXNlcnZlZCBrZXl3b3Jkcykg
Zm9yIFRlc3RPYmouaWRsLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmNvbnRp
bnVlXyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpkZWxldGVfKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NvbnRpbnVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZGVsZXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db250aW51ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkRlbGV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOgorICAgICAg
ICAoLVtET01UZXN0T2JqIGNvbnRpbnVlX10pOgorICAgICAgICAoLVtET01UZXN0T2JqIGRlbGV0
ZV9dKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmNvbnRpbnVlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9iakludGVybmFsOjpkZWxldGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjopOgorCiAyMDEwLTA3LTA0ICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCmluZGV4IGZiY2VlMDJlODVjZDc2ODg5OWMyODA5YTk1ZWNiNDRl
NDZjOGQ0OGMuLjNjODA2ZGE5OTI0NGFhODYwZWZiZGRiOGQ0MDUxMTFhMmE0MDBiNzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCkBAIC00NjMsNCArNDYzLDE4
IEBAIHN1YiBTZXR0ZXJFeHByZXNzaW9uUHJlZml4CiAgICAgcmV0dXJuICIkZnVuY3Rpb25OYW1l
KCRjb250ZW50QXR0cmlidXRlTmFtZSwgIgogfQogCitzdWIgRXNjYXBlUmVzZXJ2ZWRLZXl3b3Jk
cworeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworCisg
ICAgbXkgJWNwcFJlc2VydmVkS2V5V29yZHMgPSAoCisgICAgICAgICJjb250aW51ZSIgPT4gIjEi
LAorICAgICAgICAiZGVsZXRlIiA9PiAiMSIsCisgICAgKTsKKworICAgIHJldHVybiAkbmFtZSAu
ICJfIiBpZiBleGlzdHMgJGNwcFJlc2VydmVkS2V5V29yZHN7JG5hbWV9OworICAgIHJldHVybiAk
bmFtZTsKK30KKwogMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yQ1BQLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JD
UFAucG0KaW5kZXggN2RmOTFjYWUwMTI1MmQzYWQ1OTA0OTM2NDE5MmE4ZTJkY2M5YWZjYy4uZWJj
ZjM3NTFjYzE2Y2YyYmRiYmZhNWRlMGU4YjJkYjk5ODViOWFhMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0KKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0KQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKICAgICAgICAgZm9y
ZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAg
ICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5IZWFkZXIoJGZ1bmN0aW9uKTsKLSAgICAgICAgICAg
IG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAg
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+RXNjYXBlUmVzZXJ2ZWRLZXl3
b3JkcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKICAgICAgICAgICAgIG15ICRyZXR1
cm5UeXBlID0gR2V0Q1BQVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSwgMCk7CiAgICAg
ICAgICAgICBteSAkbnVtYmVyT2ZQYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
OwpAQCAtNzU3LDcgKzc1Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlvbigkZnVuY3Rpb24pIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifTsKICAgICAg
ICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CiAK
LSAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZTsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+RXNjYXBl
UmVzZXJ2ZWRLZXl3b3JkcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAgICAgICAgICAg
ICBteSAkcmV0dXJuVHlwZSA9IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUs
IDApOwogICAgICAgICAgICAgbXkgJGhhc1BhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc307CiAgICAgICAgICAgICBteSAkcmFpc2VzRXhjZXB0aW9ucyA9IEB7JGZ1bmN0aW9uLT5y
YWlzZXNFeGNlcHRpb25zfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yR09iamVjdC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbQppbmRleCBhZTRhYzM5ZjExNjg5YzcxMDAwMDc2ZTQwYjM5MmJmMTM4
MzQ1MmQ2Li42ZGVjYWY2ODIwZGQ1MTQ0MWNlODNhNDE0MWNhYjVlYWEyODBmNzFiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCkBAIC03
ODQsMTEgKzc4NCwxMiBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbiB7CiAgICAgbXkgJHJldHVyblR5
cGUgPSBHZXRHbGliVHlwZU5hbWUoJGZ1bmN0aW9uU2lnVHlwZSk7CiAgICAgbXkgJHJldHVyblZh
bHVlSXNHRE9NVHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkZnVuY3Rpb25TaWdUeXBlKTsKICAgICBt
eSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlv
bi0+c2lnbmF0dXJlKTsKLQogICAgIG15ICRmdW5jdGlvblNpZyA9ICIke2NsYXNzTmFtZX0qIHNl
bGYiOwogCiAgICAgbXkgJGNhbGxJbXBsUGFyYW1zID0gIiI7CiAKKyAgICAkZnVuY3Rpb25TaWdO
YW1lID0gJGNvZGVHZW5lcmF0b3ItPkVzY2FwZVJlc2VydmVkS2V5d29yZHMoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWUpOworCiAgICAgIyBza2lwIHNvbWUgY3VzdG9tIGZ1bmN0aW9ucyBmb3Ig
bm93CiAgICAgbXkgJGlzQ3VzdG9tRnVuY3Rpb24gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRI
YW5kbGluZyJ9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
aW5kZXggNGMwY2JlMTA3ZTJhYjU5OGE5ZGNkODExNjRmNTkzYTYxOTBjYWZiZi4uMjcwMDFhMzNm
MDVlMTU1YTlmODY3ODQ1ZmQyMjI0YmJlOTQ3OTIxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xODYyLDYgKzE4NjIsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIG15ICRhcmdzSW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1J
bmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFt
ZSA9ICRjb2RlR2VuZXJhdG9yLT5Fc2NhcGVSZXNlcnZlZEtleXdvcmRzKCRmdW5jdGlvbkltcGxl
bWVudGF0aW9uTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9
ICgkcG9kVHlwZSA/ICJwb2RJbXAuIiA6ICJpbXAtPiIpIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRp
b25OYW1lIC4gIigiOwogCiAgICAgICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3Vt
ZW50cyA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvck9iakMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMu
cG0KaW5kZXggN2Q2Njk3OTA2MThiNjRkOWY5ZTg5MWJlOTY1MTlkMGMxMWE4MGJlYS4uNWQ2NWQw
MTg5NGIwZTc2YzYwYjE0ODliMzllM2I3M2VjMjM1Mjg2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQpAQCAtODI4LDcgKzgyOCw3IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgICMgLSBBZGQgZnVuY3Rpb25zLgogICAgIGlmICgkbnVtRnVuY3Rp
b25zID4gMCkgewogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1
bmN0aW9uc30pIHsKLSAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVy
YXRvci0+RXNjYXBlUmVzZXJ2ZWRLZXl3b3JkcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7
CiAKICAgICAgICAgICAgIG15ICRyZXR1cm5UeXBlID0gR2V0T2JqQ1R5cGUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPnR5cGUpOwogICAgICAgICAgICAgbXkgJG5lZWRzRGVwcmVjYXRlZFZlcnNpb24g
PSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9ID4gMSBhbmQgJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbGRTdHlsZU9iakMifSk7CkBAIC0xMzQ5LDcgKzEzNDks
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKICAgICAgICAgICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CiAKLSAgICAgICAgICAgIG15ICRm
dW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgIG15
ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+RXNjYXBlUmVzZXJ2ZWRLZXl3b3Jkcygk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAgICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9
IEdldE9iakNUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKICAgICAgICAgICAgIG15
ICRoYXNQYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OwogICAgICAgICAgICAg
bXkgJHJhaXNlc0V4Y2VwdGlvbnMgPSBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAxYWUwZjhm
YzJkNzE2ZWZjMmMwYzdhMzljMmFiZjlkZWYxODM2MTE1Li44MzE1N2IyODcxNjI4YWVmNmE2YzJm
OTlhMjY5MTIxZjI4NDIxNzExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KQEAgLTI0OTEsNiArMjQ5MSw4IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygpCiAgICAgICAgICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIn07CiAgICAgfQogCisgICAgJG5h
bWUgPSAkY29kZUdlbmVyYXRvci0+RXNjYXBlUmVzZXJ2ZWRLZXl3b3JkcygkbmFtZSk7CisKICAg
ICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wLT4ke25hbWV9KCI7CiAKICAgICBpZiAoJGNvcHlG
aXJzdCkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouY3BwCmluZGV4IGVlOGFmY2ZjNjBmYTA1MDk5MzIzYmE1NjA5NmI5NGU3Y2VkMWU0
ZDAuLjU1NGUzZGEwZWIzNzg2ZTQ1MGMzZWU2OTg1NWQ3MDRkZjlmMWI2MGQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKQEAg
LTY3OCw2ICs2NzgsMjIgQEAgdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoaW50IG5vbk9wdCwgaW50IG8KICAgICBpbXBsKCktPm1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9w
dDIpOwogfQogCit2b2lkIFdlYkRPTVRlc3RPYmo6OmNvbnRpbnVlXygpCit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+Y29udGludWVfKCk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6ZGVsZXRlXygpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGltcGwoKS0+ZGVsZXRlXygpOworfQorCiBXZWJDb3JlOjpUZXN0
T2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE9iaiYgd3JhcHBlcikKIHsKICAgICByZXR1
cm4gd3JhcHBlci5pbXBsKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCBjZGQ0N2VkMDIzMjYyNTQ5ZWRlZmQwNDE3NjM1YmQ4
YTVjOWNjYmI0Li4wZmMxMDk0NjRjMzQwMjczOTkzYWYzYzA1YmI4ZmFiZjM3ODMwN2Q2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgK
QEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtZXRob2RXaXRoT3B0aW9uYWxB
cmcoaW50IG9wdCk7CiAgICAgdm9pZCBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZyhpbnQgbm9uT3B0LCBpbnQgb3B0KTsKICAgICB2b2lkIG1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZFR3b09wdGlvbmFsQXJncyhpbnQgbm9uT3B0LCBpbnQgb3B0MSwgaW50IG9wdDIpOwor
ICAgIHZvaWQgY29udGludWVfKCk7CisgICAgdm9pZCBkZWxldGVfKCk7CiAKICAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpbXBsKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDNmY2Qz
ZjczNWU4MzU2NDZmYTkzNzExZGQyYzc0ODZlOGE3ODRiMTAuLjczYTVmYjI5OGIwNzc2YWUxMDA3
MmYxNGIzOTExY2QxZGNmOTE1MmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMTgwLDYgKzE4
MCw3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiAga2V5KQog
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5KTsKQEAgLTM0Miw2ICszNDMsMjQg
QEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90
d29fb3B0aW9uYWxfYXJncyhXZWJLaXRET00KICAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uX29wdCwgb3B0MSwgb3B0Mik7CiB9CiAKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfY29udGludWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5jb250aW51ZV8oKTsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9kZWxldGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5kZWxldGVfKCk7Cit9CisKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFk
X29ubHlfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgK
aW5kZXggNjFjM2Q5NWJkN2I2ZmE5OTA2MzNhOTVkNWY0ZjMxYjZkNjgwYzBmNy4uYzI0YmIxOWM1
Njk5OGUwMWZlY2M2MmRjMjc0M2Q4OTRhOTkwZGJlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTEy
NCw2ICsxMjQsMTIgQEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9u
YWxfYXJnX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE8KIFdFQktJVF9BUEkgdm9pZAog
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29f
b3B0aW9uYWxfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9u
ZyBvcHQxLCBnbG9uZyBvcHQyKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2NvbnRpbnVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZGVsZXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOworCiBX
RUJLSVRfQVBJIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfaW50X2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDMxYTNmNzBhY2UyMDJiZDhlMzdhZjcwZWEw
Y2FjMzMwM2M5ZTliMTcuLjc1NmNlMjFiNjk2ZGQ3MzZhNTBkZmNkN2ZlNDRhMTM0Yzg3MGM5ZGYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApA
QCAtMTQ2LDcgKzE0Niw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5L
X0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMxXSA9CitzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzNdID0KIHsKICAgICB7
ICJ2b2lkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCks
IChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInZvaWRNZXRob2RXaXRo
QXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyks
IChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTc3LDEyICsxNzcsMTQgQEAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVz
WzMxXSA9CiAgICAgeyAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTEgVEhVTktfR0VO
RVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAg
IHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIERvbnREZWxl
dGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlv
bmFsQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgImNvbnRp
bnVlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udGludWUpLCAoaW50cHRyX3Qp
MCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJkZWxldGUiLCBEb250RGVsZXRlIHwgRnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25EZWxldGUpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
ICAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAg
IHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQogfTsKIAogI3VuZGVmIFRIVU5LX0dF
TkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlID0geyAxMzAsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMs
IDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90
b3R5cGVUYWJsZSA9IHsgMTMxLCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAw
IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0
T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAwIH07CiAKIEpTT2Jq
ZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTEyMCw2ICsxMTIyLDMwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnRpbnVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAgIGltcC0+Y29udGludWVfKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Cisg
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisK
KyAgICBpbXAtPmRlbGV0ZV8oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworfQorCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggNGRlYTNkMjNlOWRl
YjFiNGNhNDhmZmY3N2JiYzE2ZWM5ODIxNmJkMS4uNmM1MTYwZTBlYWIwOTQ1YTk2ZmEzM2UwYTc0
MGFjMTFmOTVkOGMyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgKQEAgLTExNSw2ICsxMTUsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b250aW51ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKEpTQzo6RXhlY1N0YXRlKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiAvLyBBdHRyaWJ1dGVzCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXgg
ZDM4ZGVjZTNlZGY0ODJmNTUyMjYyYjdlM2QyNjMwYmY0YTljNDg2ZC4uMjgyNGE3YWViYWYyMzc3
N2I4OGQ4OGM3ODhmZDEyYjA2OTY4MDcwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTEyMCw2ICsxMjAsOCBAQAogLSAodm9pZClt
ZXRob2RXaXRoT3B0aW9uYWxBcmc6KGludClvcHQ7CiAtICh2b2lkKW1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZE9wdGlvbmFsQXJnOihpbnQpbm9uT3B0IG9wdDooaW50KW9wdDsKIC0gKHZvaWQp
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzOihpbnQpbm9uT3B0IG9w
dDE6KGludClvcHQxIG9wdDI6KGludClvcHQyOworLSAodm9pZCljb250aW51ZV87CistICh2b2lk
KWRlbGV0ZV87CiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCmluZGV4IGQ3MWNiMDUyMjFhODUzMDA5N2MwODg0YmM5
MzUyMzZiZDg2OTQ0NjEuLjkyMTgyMTRiMjYzZThjMzVkYmNhYjhmMjEwYWVhMDQ2MWQzNWFjNmQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9i
ai5tbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW0KQEAgLTU4NCw2ICs1ODQsMTggQEAKICAgICBJTVBMLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxLCBvcHQyKTsKIH0KIAorLSAodm9pZClj
b250aW51ZV8KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgSU1QTC0+Y29udGludWVfKCk7Cit9CisKKy0gKHZvaWQpZGVsZXRlXworeworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5kZWxldGVfKCk7Cit9
CisKIEBlbmQKIAogV2ViQ29yZTo6VGVzdE9iaiogY29yZShET01UZXN0T2JqICp3cmFwcGVyKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCAzNDY3MTE2N2E1
NDhkN2YzOTZiNTYxZjNkNDA5MWZjOTlkOTMzMzdiLi5jN2FiZmQzY2Y2ZDUxOTczM2Q4OWJjOWY5
MDJhMDIxNGIxZGQxZjM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbApAQCAtMTE0LDYgKzExNCwxMCBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIGF0dHJpYnV0
ZSBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMSZDb25kaXRpb24yXSBsb25nIGNvbmRpdGlvbmFsQXR0
cjI7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24y
XSBsb25nIGNvbmRpdGlvbmFsQXR0cjM7CiAKKyAgICAgICAgLy8gUmVzZXJ2ZWQgQysrIGtleXdv
cmRzLgorICAgICAgICB2b2lkICAgIGNvbnRpbnVlKCk7CisgICAgICAgIHZvaWQgICAgZGVsZXRl
KCk7CisKICNpZiBkZWZpbmVkKFRFU1RJTkdfVjgpIHx8IGRlZmluZWQoVEVTVElOR19KUykKICAg
ICAgICAgLy8gT3ZlcmxvYWRzCiAgICAgICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChpbiBU
ZXN0T2JqIG9iakFyZywgaW4gRE9NU3RyaW5nIHN0ckFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCAxYWQ4YTQxNmI4M2NlOWE5N2M5
ODc0ZmU0MjEwM2FlNGNmMzU3NGQ2Li41MWM0NTA0M2ZiY2VkZTUyODcyYzNmMmY2YzdkMjBlYWE1
N2JmNmZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKQEAgLTgzMCw2ICs4MzAsMjIgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBt
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsYmFjaygKICAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29udGludWVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY29udGludWUiKTsKKyAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGltcC0+Y29udGludWVf
KCk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGRlbGV0ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5kZWxldGUiKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGltcC0+ZGVs
ZXRlXygpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9h
ZGVkTWV0aG9kMSIpOwpAQCAtOTc3LDYgKzk5Myw4IEBAIHN0YXRpYyBjb25zdCBCYXRjaGVkQ2Fs
bGJhY2sgVGVzdE9iakNhbGxiYWNrc1tdID0gewogICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsQXJn
IiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAg
eyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIFRlc3RPYmpJbnRlcm5h
bDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAg
eyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2JqSW50
ZXJuYWw6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNr
fSwKKyAgICB7ImNvbnRpbnVlIiwgVGVzdE9iakludGVybmFsOjpjb250aW51ZUNhbGxiYWNrfSwK
KyAgICB7ImRlbGV0ZSIsIFRlc3RPYmpJbnRlcm5hbDo6ZGVsZXRlQ2FsbGJhY2t9LAogICAgIHsi
b3ZlcmxvYWRlZE1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxi
YWNrfSwKIH07CiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENv
bmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjKQo=
</data>
<flag name="review"
          id="48083"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>