<?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>43216</bug_id>
          
          <creation_ts>2010-07-29 15:14:31 -0700</creation_ts>
          <short_desc>Script engine agnostic ScriptCallback class</short_desc>
          <delta_ts>2010-09-22 17:47:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>37205</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Luiz Agostini">luiz</reporter>
          <assigned_to name="Luiz Agostini">luiz</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kenneth</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257908</commentid>
    <comment_count>0</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-07-29 15:14:31 -0700</bug_when>
    <thetext>The objective is to  this kind of code to be script engine agnostic:

void doSomething(ScriptState* exec, ScriptValue function, bool p1, int p2, ...)
{
    ScriptCallback callback(exec, function);
    callback.appendArgument(p1);
    callback.appendArgument(p2);
    callback.call();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257912</commentid>
    <comment_count>1</comment_count>
      <attachid>62997</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-07-29 15:22:28 -0700</bug_when>
    <thetext>Created attachment 62997
patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257920</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-29 15:29:15 -0700</bug_when>
    <thetext>Attachment 62997 did not build on chromium:
Build output: http://queues.webkit.org/results/3578627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257927</commentid>
    <comment_count>3</comment_count>
      <attachid>63001</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-07-29 15:35:26 -0700</bug_when>
    <thetext>Created attachment 63001
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257962</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-29 16:31:10 -0700</bug_when>
    <thetext>Attachment 63001 did not build on chromium:
Build output: http://queues.webkit.org/results/3631201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258480</commentid>
    <comment_count>5</comment_count>
      <attachid>63126</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-07-30 16:55:51 -0700</bug_when>
    <thetext>Created attachment 63126
patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258510</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-30 18:35:29 -0700</bug_when>
    <thetext>Attachment 63126 did not build on chromium:
Build output: http://queues.webkit.org/results/3620319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261468</commentid>
    <comment_count>7</comment_count>
      <attachid>63760</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-08-06 14:31:10 -0700</bug_when>
    <thetext>Created attachment 63760
patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262370</commentid>
    <comment_count>8</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-08-09 15:51:23 -0700</bug_when>
    <thetext>Bug 37205 needs a callback class. I could have an abstract class and two concrete classes for javascript, a JS and a V8 classes.

Looking at file ScriptFunctionCall I have seen that it was almost what I needed to have a common class for JS and V8. This patch just does a small refactoring of class ScriptFunctionCall and implements the new callback class using NodeFilterCondition implementation as example (JS and V8).

Any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264661</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-08-14 01:44:56 -0700</bug_when>
    <thetext>This looks OK with me. Sam, Oliver, can you have a quick look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265359</commentid>
    <comment_count>10</comment_count>
      <attachid>63760</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-08-16 22:15:13 -0700</bug_when>
    <thetext>Comment on attachment 63760
patch 4

It seems that this patch will not be usefull for bug 37205 as I thought it would at first. I will remove the review flag for now and will close the bug later, together with bug 37205.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280198</commentid>
    <comment_count>11</comment_count>
      <attachid>63760</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-16 10:43:37 -0700</bug_when>
    <thetext>Comment on attachment 63760
patch 4

View in context: https://bugs.webkit.org/attachment.cgi?id=63760&amp;action=prettypatch

Seems like more of this code could be shared between the V8 and non-V8 versions. A lot of the changes are identical to both, which indicates we have the factoring wrong

&gt; WebCore/bindings/js/ScriptFunctionCall.cpp:201
&gt; +ScriptCallback::ScriptCallback(ScriptState* exec, ScriptValue function)
&gt; +    : ScriptCallArgumentHandler(exec)

I would name this argument “state” rather than “exec”.

&gt; WebCore/bindings/js/ScriptFunctionCall.cpp:208
&gt; +    bool hadException = false;

It does not seem necessary to initialize this boolean.

&gt; WebCore/bindings/js/ScriptFunctionCall.h:52
&gt; +        ScriptCallArgumentHandler(ScriptState* exec) : m_exec(exec) {}
&gt; +        virtual ~ScriptCallArgumentHandler() {};

The argument should be named “state”, not “exec”. The braces should have a single space between them (WebKit codings style).

Not something you introduced, but there is no reason for this class to have a virtual destructor. It has no other virtual functions, and adding a virtual destructor will make the object larger and not offer other benefits. I suggest not declaring the destructor at all.

&gt; WebCore/bindings/js/ScriptFunctionCall.h:76
&gt; +        virtual ~ScriptFunctionCall() {};

There’s no reason for this class to have a virtual destructor.

&gt; WebCore/bindings/js/ScriptFunctionCall.h:94
&gt; +        ScriptCallback(ScriptState* exec, ScriptValue function);

There’s no need to name the ScriptState argument at all. Here.

review- because I’d really like to see those needless virtual destructors removed, but the patch seems otherwise good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280803</commentid>
    <comment_count>12</comment_count>
      <attachid>67939</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-09-17 12:40:01 -0700</bug_when>
    <thetext>Created attachment 67939
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281672</commentid>
    <comment_count>13</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-09-20 11:08:14 -0700</bug_when>
    <thetext>this latest patch is equal to previous one except by the virtual destructors that have been removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282407</commentid>
    <comment_count>14</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-09-21 10:32:14 -0700</bug_when>
    <thetext>Darin, is there anything else you would like to see in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283069</commentid>
    <comment_count>15</comment_count>
      <attachid>67939</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 11:11:40 -0700</bug_when>
    <thetext>Comment on attachment 67939
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=67939&amp;action=review

&gt; WebCore/bindings/js/ScriptFunctionCall.cpp:219
&gt; +    ASSERT(callType != CallTypeNone);

What makes this assertion correct? Can we ever get CallTypeNone here? We must only assert something we know will be true for some reason.

&gt; WebCore/bindings/js/ScriptFunctionCall.h:69
&gt; +    protected:
&gt; +        JSC::MarkedArgumentBuffer m_arguments;
&gt; +        ScriptState* m_exec;

Normally we would make data members private, and give derived classes access with protected accessor functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283086</commentid>
    <comment_count>16</comment_count>
      <attachid>67939</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-22 11:23:47 -0700</bug_when>
    <thetext>Comment on attachment 67939
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=67939&amp;action=review

&gt; WebCore/bindings/js/ScriptFunctionCall.h:68
&gt; +        JSC::MarkedArgumentBuffer m_arguments;

MarkedArgumentBuffer can&apos;t be heap allocated, so in addition to pulling MarkedArgumentBuffer up to this point you should also pull
// MarkedArgumentBuffer must be stack allocated, so prevent heap
void* operator new(size_t) { ASSERT_NOT_REACHED(); return reinterpret_cast&lt;void*&gt;(0xbadbeef); }
void* operator new[](size_t) { ASSERT_NOT_REACHED(); return reinterpret_cast&lt;void*&gt;(0xbadbeef); }

r-, because this could actually result in real bustage being introduced</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283097</commentid>
    <comment_count>17</comment_count>
      <attachid>67939</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-22 11:37:37 -0700</bug_when>
    <thetext>Comment on attachment 67939
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=67939&amp;action=review

&gt; WebCore/bindings/js/ScriptFunctionCall.h:-75
&gt; -        JSC::MarkedArgumentBuffer m_arguments;

Oliver, it seems that that line was just refactored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283103</commentid>
    <comment_count>18</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-22 11:43:31 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 67939 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67939&amp;action=review
&gt; 
&gt; &gt; WebCore/bindings/js/ScriptFunctionCall.h:-75
&gt; &gt; -        JSC::MarkedArgumentBuffer m_arguments;
&gt; 
&gt; Oliver, it seems that that line was just refactored.

I know, however the guards to protect the class containing the argument buffer from heap allocation were not refactored with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283123</commentid>
    <comment_count>19</comment_count>
      <attachid>68410</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-09-22 12:01:47 -0700</bug_when>
    <thetext>Created attachment 68410
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283127</commentid>
    <comment_count>20</comment_count>
      <attachid>68410</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-22 12:04:21 -0700</bug_when>
    <thetext>Comment on attachment 68410
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283144</commentid>
    <comment_count>21</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2010-09-22 12:15:57 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 67939 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67939&amp;action=review
&gt; 
&gt; &gt; WebCore/bindings/js/ScriptFunctionCall.cpp:219
&gt; &gt; +    ASSERT(callType != CallTypeNone);
&gt; 
&gt; What makes this assertion correct? Can we ever get CallTypeNone here? We must only assert something we know will be true for some reason.

It is possible since a ScriptValue is received in constructor and it may not be callable. Am I wrong?

&gt; 
&gt; &gt; WebCore/bindings/js/ScriptFunctionCall.h:69
&gt; &gt; +    protected:
&gt; &gt; +        JSC::MarkedArgumentBuffer m_arguments;
&gt; &gt; +        ScriptState* m_exec;
&gt; 
&gt; Normally we would make data members private, and give derived classes access with protected accessor functions.

Sure. This time I just kept it as it was before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283172</commentid>
    <comment_count>22</comment_count>
      <attachid>68410</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-22 12:46:46 -0700</bug_when>
    <thetext>Comment on attachment 68410
patch

Clearing flags on attachment: 68410

Committed r68074: &lt;http://trac.webkit.org/changeset/68074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283173</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-22 12:46:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283397</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 17:47:16 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #15)
&gt; &gt; &gt; WebCore/bindings/js/ScriptFunctionCall.cpp:219
&gt; &gt; &gt; +    ASSERT(callType != CallTypeNone);
&gt; &gt; 
&gt; &gt; What makes this assertion correct? Can we ever get CallTypeNone here? We must only assert something we know will be true for some reason.
&gt; 
&gt; It is possible since a ScriptValue is received in constructor and it may not be callable. Am I wrong?

Yes, the assertion is wrong, and thus the code is wrong! We need to handle that case.

Please don’t use this class for anything until you fix that!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62997</attachid>
            <date>2010-07-29 15:22:28 -0700</date>
            <delta_ts>2010-07-29 15:35:26 -0700</delta_ts>
            <desc>patch 1</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63001</attachid>
            <date>2010-07-29 15:35:26 -0700</date>
            <delta_ts>2010-07-30 16:55:51 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>17055</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSAwZTkxYzM1ZjZiZmI1ZjlkZWU0OGQwZjYzMGI1OTdhNzNmMTAxZjc1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFRodSwgMjkgSnVsIDIwMTAgMTk6MjA6MDIgLTAzMDAKU3ViamVjdDogW1BB
VENIXSBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKUmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0
ZSBhIGNsYXNzIChTY3JpcHRDYWxsYmFjaykgdGhhdApyZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlv
biBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQg
cGFyYW1ldGVycy4KCiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2Fs
bCk6CiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6
OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToK
KFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6CiogYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpTY3JpcHRD
YWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CiogYmluZGluZ3Mvdjgv
U2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdEZ1
bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArKysrKysrKysrKwogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIHwgICA3MyArKysrKysrKysrKysrKysrKysr
Ky0tLS0tLS0tCiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAg
IDI5ICsrKysrKysrKy0tCiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAgfCAgIDY4ICsrKysrKysrKysrKysrKysrKystLS0tLS0tCiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAgIDI5ICsrKysrKysrKy0tCiA1IGZpbGVzIGNoYW5n
ZWQsIDE4MCBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYwNjdiOGMuLjIyMDFlNDYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDctMjkgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5p
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU2NyaXB0IGVuZ2luZSBhZ25vc3RpYyBTY3JpcHRDYWxsYmFjayBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKKworICAg
ICAgICBSZWZhY3RvcmluZyBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgdG8gY3JlYXRlIGEgY2xh
c3MgKFNjcmlwdENhbGxiYWNrKSB0aGF0IAorICAgICAgICByZWNlaXZlcyBhIHNjcmlwdCBmdW5j
dGlvbiBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlk
ZWQgcGFyYW1ldGVycy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBl
bmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6U2NyaXB0
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjp+U2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6
On5TY3JpcHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0
aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6
OlNjcmlwdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6
U2NyaXB0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjp+U2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlv
bkNhbGw6On5TY3JpcHRGdW5jdGlvbkNhbGwpOgorCiAyMDEwLTA3LTI5ICBOaWtvbGFzIFppbW1l
cm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gRml4
IHJlbGVhc2UgYnVpbGRzLCBieSByZW1vdmluZyB1bnVzZWQgdmFyaWFibGVzLCB0aGF0IG9ubHkg
c2VydmVkIGZvciBBU1NFUlRzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXggOWJhZjgwOS4uYTNjYjI5NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcApAQCAtNDMsMTQg
KzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
Y3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3Qm
IHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IG1fZXhlYyh0aGlzT2JqZWN0
LnNjcmlwdFN0YXRlKCkpCi0gICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVjdCkKLSAgICAsIG1f
bmFtZShuYW1lKQotewotfQotCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1l
bnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKIHsK
ICAgICBpZiAoYXJndW1lbnQuc2NyaXB0U3RhdGUoKSAhPSBtX2V4ZWMpIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC01OSw3NCArNTIsODEgQEAgdm9pZCBTY3JpcHRGdW5jdGlv
bkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiAgICAg
bV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzT2JqZWN0KCkpOwogfQogCi12b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBhcmd1bWVu
dCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3Qg
U2NyaXB0U3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJp
bmcobV9leGVjLCBhcmd1bWVudC51c3RyaW5nKCkpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlv
bkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudCkKK3ZvaWQg
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0VmFs
dWUmIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudC5qc1ZhbHVl
KCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3Qg
U3RyaW5nJiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4
ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1
bWVudChjb25zdCBKU0M6OlVTdHJpbmcmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJpbmcmIGFyZ3VtZW50KQog
ewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRG
dW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQordm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1
bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmcoYXJndW1lbnQpKSk7CiB9
CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChKU0M6OkpTVmFsdWUg
YXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KEpTQzo6SlNWYWx1ZSBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1l
bnQpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBh
cmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
bG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9
CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChsb25nIGxvbmcgYXJn
dW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxv
bmcgbG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMsIGFyZ3VtZW50KSk7
CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBp
bnQgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3Vt
ZW50KHVuc2lnbmVkIGludCBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMsIGFy
Z3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCh1
bnNpZ25lZCBsb25nIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjph
cHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVu
ZEFyZ3VtZW50KGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6
YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywg
YXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50
KGJvb2wgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KGJvb2wgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzQm9vbGVh
bihhcmd1bWVudCkpOwogfQogCitTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAg
ICA6IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIodGhpc09iamVjdC5zY3JpcHRTdGF0ZSgpKQor
ICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCisgICAgLCBtX25hbWUobmFtZSkKK3sKK30K
KwogU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlv
biwgYm9vbCByZXBvcnRFeGNlcHRpb25zKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
bV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CkBAIC0xOTcsNCArMTk3LDM3IEBAIFNjcmlwdE9iamVj
dCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wg
cmVwb3J0RXhjZXB0CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdChtX2V4ZWMsIGFzT2JqZWN0KHJl
c3VsdCkpOwogfQogCitTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2FsbGJhY2soU2NyaXB0U3RhdGUq
IGV4ZWMsIFNjcmlwdFZhbHVlIGZ1bmN0aW9uKQorICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcihleGVjKQorICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKK30KKworU2NyaXB0VmFs
dWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQoreworICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFs
c2U7CisgICAgcmV0dXJuIGNhbGwoaGFkRXhjZXB0aW9uKTsKK30KKworU2NyaXB0VmFsdWUgU2Ny
aXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlv
bnMpCit7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9m
dW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRhKTsKKworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBD
YWxsVHlwZU5vbmUpOworCisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBt
X2Z1bmN0aW9uLmpzVmFsdWUoKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2Z1bmN0aW9uLmpzVmFs
dWUoKSwgbV9hcmd1bWVudHMpOworICAgIGhhZEV4Y2VwdGlvbiA9IG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCk7CisKKyAgICBpZiAoaGFkRXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChyZXBvcnRFeGNl
cHRpb25zKQorICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAppbmRleCA5NzQyZThmLi45NThj
OTYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTQ2LDEw
ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0VmFsdWU7CiAg
ICAgY2xhc3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsK
KyAgICBjbGFzcyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgp
IHt9OworICAgICAgICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKFNjcmlwdFN0YXRlKiBleGVj
KSA6IG1fZXhlYyhleGVjKSB7fQorICAgICAgICB2aXJ0dWFsIH5TY3JpcHRDYWxsQXJndW1lbnRI
YW5kbGVyKCkge307CiAKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRP
YmplY3QmKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcm
KTsKQEAgLTY0LDE1ICs2NCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyk7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1l
bnQoaW50KTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChib29sKTsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKKyAg
ICAgICAgU2NyaXB0U3RhdGUqIG1fZXhlYzsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0RnVu
Y3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rp
b25DYWxsKCkge307CiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9u
LCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2Fs
bCgpOwogICAgICAgICBTY3JpcHRPYmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwg
Ym9vbCByZXBvcnRFeGNlcHRpb25zID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IFNjcmlwdFN0YXRlKiBtX2V4ZWM7CiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7
CiAgICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgbV9hcmd1bWVudHM7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBtdXN0IGJlIHN0YWNrIGFsbG9jYXRlZCwgc28gcHJldmVudCBoZWFwCkBAIC04MSw2
ICs4OSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KDB4YmFkYmVlZik7IH0KICAgICB9OwogCisgICAgY2xhc3MgU2NyaXB0Q2FsbGJh
Y2sgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAg
ICAgICBTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0ZSogZXhlYywgU2NyaXB0VmFsdWUgZnVuY3Rp
b24pOworCisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKKyAgICAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9IHRydWUpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU2NyaXB0VmFsdWUgbV9mdW5jdGlvbjsKKyAgICB9Owor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAppbmRleCBlNmIyMmVl
Li45OTQyOWE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9u
Q2FsbC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
CkBAIC00NSwxNCArNDUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlwdEZ1bmN0
aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogbV9zY3JpcHRTdGF0ZSh0aGlzT2JqZWN0LnNj
cmlwdFN0YXRlKCkpCi0gICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVjdCkKLSAgICAsIG1fbmFt
ZShuYW1lKQotewotfQotCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKIHsKICAg
ICBpZiAoYXJndW1lbnQuc2NyaXB0U3RhdGUoKSAhPSBtX3NjcmlwdFN0YXRlKSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNjEsNjQgKzU0LDcxIEBAIHZvaWQgU2NyaXB0RnVu
Y3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQog
ICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudCk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQordm9p
ZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRT
dHJpbmcmIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUp
OwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0cmluZyhhcmd1bWVudCkpOwogfQogCi12b2lk
IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0VmFsdWUmIGFy
Z3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChj
b25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFy
Z3VtZW50KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNv
bnN0IFN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFw
cGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUg
c2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFy
Z3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChj
b25zdCBjaGFyKiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2Nv
cGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3Vt
ZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChsb25n
IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dChsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUp
OwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0K
IAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1
bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9u
ZyBsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUp
OwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0K
IAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBh
cmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
dW5zaWduZWQgaW50IGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0
U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQp
KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVk
IGxvbmcgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUo
bV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhh
cmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQo
aW50IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1
bWVudChpbnQgYXJndW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0
ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwog
fQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoYm9vbCBhcmd1bWVu
dCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoYm9vbCBh
cmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjhCb29sZWFuKGFyZ3VtZW50KSk7
CiB9CiAKK1NjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlw
dE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlcih0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCisgICAgLCBtX3RoaXNP
YmplY3QodGhpc09iamVjdCkKKyAgICAsIG1fbmFtZShuYW1lKQoreworfQorCiBTY3JpcHRWYWx1
ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9y
dEV4Y2VwdGlvbnMpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSwgcmVw
b3J0RXhjZXB0aW9ucyk7CkBAIC0xNzksNCArMTc5LDM2IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRG
dW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhj
ZXB0CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCByZXN1bHQpOwogfQog
CitTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2FsbGJhY2soU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3Jp
cHRWYWx1ZSBmdW5jdGlvbikKKyAgICA6IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoc3RhdGUp
CisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQoreworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRD
YWxsYmFjazo6Y2FsbCgpCit7CisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBy
ZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFj
azo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucykKK3sKKyAg
ICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRlLCByZXBvcnRFeGNlcHRpb25zKTsKKwor
ICAgIEFTU0VSVChtX2Z1bmN0aW9uLT52OFZhbHVlKCktPklzRnVuY3Rpb24oKSk7CisgICAgdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24odjg6OkZ1bmN0aW9uOjpDYXN0KCptX2Z1bmN0
aW9uLT52OFZhbHVlKCkpKTsKKworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVl
PiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAg
ICAgICBhcmdzW2ldID0gbV9hcmd1bWVudHNbaV0udjhWYWx1ZSgpOworCisgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gcmVzdWx0ID0gZnVuY3Rpb24tPkNhbGwodGhpc09iamVjdCwgbV9hcmd1bWVu
dHMuc2l6ZSgpLCBhcmdzLmdldCgpKTsKKyAgICBpZiAoIXNjb3BlLnN1Y2Nlc3MoKSkgeworICAg
ICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUocmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5j
dGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmgKaW5k
ZXggNGNiYmY3ZS4uYjc0MmI2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9u
Q2FsbC5oCkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IFNjcmlwdFN0YXRlOwogICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKIAotICAgIGNsYXNzIFNjcmlw
dEZ1bmN0aW9uQ2FsbCB7CisgICAgY2xhc3MgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CiAg
ICAgcHVibGljOgotICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0
JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgICAgICB2aXJ0dWFsIH5TY3Jp
cHRGdW5jdGlvbkNhbGwoKSB7fTsKKyAgICAgICAgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcihT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpIDogbV9zY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkge30K
KyAgICAgICAgdmlydHVhbCB+U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcigpIHt9OwogCiAgICAg
ICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAgICAgICAgIHZv
aWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJik7CkBAIC01NywxNSArNTcsMzQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KHVuc2ln
bmVkIGxvbmcpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGludCk7CiAgICAgICAgIHZv
aWQgYXBwZW5kQXJndW1lbnQoYm9vbCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNjcmlw
dFN0YXRlKiBtX3NjcmlwdFN0YXRlOworICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJn
dW1lbnRzOworICAgIH07CisKKyAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMg
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRG
dW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgICAgICB2aXJ0dWFsIH5TY3JpcHRGdW5jdGlvbkNhbGwoKSB7fTsKICAgICAg
ICAgU2NyaXB0VmFsdWUgY2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0
aW9ucyA9IHRydWUpOwogICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKCk7CiAgICAgICAgIFNjcmlw
dE9iamVjdCBjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlv
bnMgPSB0cnVlKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2Ny
aXB0U3RhdGU7CiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7CiAgICAgICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7Cisg
ICAgfTsKKworICAgIGNsYXNzIFNjcmlwdENhbGxiYWNrIDogcHVibGljIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0Q2FsbGJhY2soU2NyaXB0
U3RhdGUqIGV4ZWMsIFNjcmlwdFZhbHVlIGZ1bmN0aW9uKTsKKworICAgICAgICBTY3JpcHRWYWx1
ZSBjYWxsKCk7CisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBi
b29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFNj
cmlwdFZhbHVlIG1fZnVuY3Rpb247CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
LSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63126</attachid>
            <date>2010-07-30 16:55:51 -0700</date>
            <delta_ts>2010-08-06 14:31:10 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>17128</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSBiMDY3Y2Q3MTAyYWY2NjVlNGZkMmYwN2Y3MWU5OTFiZjIwYjUxNzBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTU6NDI6MTMgLTAzMDAKU3ViamVjdDogW1BB
VENIXSBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKUmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0
ZSBhIGNsYXNzIChTY3JpcHRDYWxsYmFjaykgdGhhdApyZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlv
biBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQg
cGFyYW1ldGVycy4KCiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2Fs
bCk6CiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6
OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToK
KFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6CiogYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpTY3JpcHRD
YWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CiogYmluZGluZ3Mvdjgv
U2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdEZ1
bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArKysrKysrKysrKwogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIHwgICA3MiArKysrKysrKysrKysrKysrKysr
Ky0tLS0tLS0tCiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAg
IDI5ICsrKysrKysrKy0tCiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RnVuY3Rpb25DYWxsLmggICB8ICAgMjkgKysrKysrKysrLS0KIDUgZmlsZXMgY2hh
bmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA2N2I4Yy4uYzNjMDQ4
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNy0yOSAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3Rp
bmlAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzIxNgorCisg
ICAgICAgIFJlZmFjdG9yaW5nIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbCB0byBjcmVhdGUgYSBj
bGFzcyAoU2NyaXB0Q2FsbGJhY2spIHRoYXQKKyAgICAgICAgcmVjZWl2ZXMgYSBzY3JpcHQgZnVu
Y3Rpb24gYXMgYSBTY3JpcHRWYWx1ZSBhbmQgY2FsbHMgdGhhdCBmdW5jdGlvbiB3aXRoIHByb3Zp
ZGVkIHBhcmFtZXRlcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpTY3Jp
cHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OlNjcmlw
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6flNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxs
Ojp+U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
cjo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxs
OjpTY3JpcHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6
OlNjcmlwdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxs
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6flNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rp
b25DYWxsOjp+U2NyaXB0RnVuY3Rpb25DYWxsKToKKwogMjAxMC0wNy0yOSAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEZp
eCByZWxlYXNlIGJ1aWxkcywgYnkgcmVtb3ZpbmcgdW51c2VkIHZhcmlhYmxlcywgdGhhdCBvbmx5
IHNlcnZlZCBmb3IgQVNTRVJUcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCmluZGV4IDliYWY4MDkuLmQ1NmZjMTMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTQzLDE0
ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0
JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBtX2V4ZWModGhpc09iamVj
dC5zY3JpcHRTdGF0ZSgpKQotICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCi0gICAgLCBt
X25hbWUobmFtZSkKLXsKLX0KLQotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3Vt
ZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiB7
CiAgICAgaWYgKGFyZ3VtZW50LnNjcmlwdFN0YXRlKCkgIT0gbV9leGVjKSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTksNzQgKzUyLDgxIEBAIHZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogICAg
IG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudC5qc09iamVjdCgpKTsKIH0KIAotdm9pZCBTY3Jp
cHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgYXJndW1l
bnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0
IFNjcmlwdFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3Ry
aW5nKG1fZXhlYywgYXJndW1lbnQudXN0cmluZygpKSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCit2b2lk
IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZh
bHVlJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQuanNWYWx1
ZSgpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0
IFN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVu
ZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9l
eGVjLCBhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgSlNDOjpVU3RyaW5nJiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3Vt
ZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgSlNDOjpVU3RyaW5nJiBhcmd1bWVudCkK
IHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0
RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKK3ZvaWQg
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJn
dW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBt
X2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5nKGFyZ3VtZW50KSkpOwog
fQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoSlNDOjpKU1ZhbHVl
IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dChKU0M6OkpTVmFsdWUgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3Vt
ZW50KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGxvbmcg
YXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KGxvbmcgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkpOwog
fQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFy
Z3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChs
b25nIGxvbmcgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkp
OwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQg
aW50IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1
bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBh
cmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQo
dW5zaWduZWQgbG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6
YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJl
cihtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBl
bmRBcmd1bWVudChpbnQgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMs
IGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVu
dChib29sIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRB
cmd1bWVudChib29sIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc0Jvb2xl
YW4oYXJndW1lbnQpKTsKIH0KIAorU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNh
bGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCisg
ICAgOiBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKHRoaXNPYmplY3Quc2NyaXB0U3RhdGUoKSkK
KyAgICAsIG1fdGhpc09iamVjdCh0aGlzT2JqZWN0KQorICAgICwgbV9uYW1lKG5hbWUpCit7Cit9
CisKIFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRp
b24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucykKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IG1fdGhpc09iamVjdC5qc09iamVjdCgpOwpAQCAtMTk3LDQgKzE5NywzNiBAQCBTY3JpcHRPYmpl
Y3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29s
IHJlcG9ydEV4Y2VwdAogICAgIHJldHVybiBTY3JpcHRPYmplY3QobV9leGVjLCBhc09iamVjdChy
ZXN1bHQpKTsKIH0KIAorU2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRl
KiBleGVjLCBTY3JpcHRWYWx1ZSBmdW5jdGlvbikKKyAgICA6IFNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXIoZXhlYykKKyAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCit7Cit9CisKK1NjcmlwdFZh
bHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKK3sKKyAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZh
bHNlOworICAgIHJldHVybiBjYWxsKGhhZEV4Y2VwdGlvbik7Cit9CisKK1NjcmlwdFZhbHVlIFNj
cmlwdENhbGxiYWNrOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKK3sKKyAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1bmN0aW9uLmpzVmFsdWUoKSwgY2Fs
bERhdGEpOworCisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CisKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChtX2V4ZWMsIG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBtX2FyZ3VtZW50cyk7Cisg
ICAgaGFkRXhjZXB0aW9uID0gbV9leGVjLT5oYWRFeGNlcHRpb24oKTsKKworICAgIGlmIChoYWRF
eGNlcHRpb24pIHsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAppbmRleCA5NzQyZThmLi44MzEy
Y2QwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTQ2LDEw
ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0VmFsdWU7CiAg
ICAgY2xhc3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsK
KyAgICBjbGFzcyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgp
IHt9OworICAgICAgICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKFNjcmlwdFN0YXRlKiBleGVj
KSA6IG1fZXhlYyhleGVjKSB7fQorICAgICAgICB2aXJ0dWFsIH5TY3JpcHRDYWxsQXJndW1lbnRI
YW5kbGVyKCkge307CiAKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRP
YmplY3QmKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcm
KTsKQEAgLTY0LDE1ICs2NCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyk7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1l
bnQoaW50KTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChib29sKTsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKKyAg
ICAgICAgU2NyaXB0U3RhdGUqIG1fZXhlYzsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0RnVu
Y3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rp
b25DYWxsKCkge307CiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9u
LCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2Fs
bCgpOwogICAgICAgICBTY3JpcHRPYmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwg
Ym9vbCByZXBvcnRFeGNlcHRpb25zID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IFNjcmlwdFN0YXRlKiBtX2V4ZWM7CiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7
CiAgICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgbV9hcmd1bWVudHM7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBtdXN0IGJlIHN0YWNrIGFsbG9jYXRlZCwgc28gcHJldmVudCBoZWFwCkBAIC04MSw2
ICs4OSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KDB4YmFkYmVlZik7IH0KICAgICB9OwogCisgICAgY2xhc3MgU2NyaXB0Q2FsbGJh
Y2sgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAg
ICAgICBTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0ZSogZXhlYywgU2NyaXB0VmFsdWUgZnVuY3Rp
b24pOworCisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKKyAgICAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24pOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2NyaXB0
VmFsdWUgbV9mdW5jdGlvbjsKKyAgICB9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcAppbmRleCBlNmIyMmVlLi5mYmFkNjY1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCkBAIC00NSwxNCArNDUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNv
bnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDog
bV9zY3JpcHRTdGF0ZSh0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCi0gICAgLCBtX3RoaXNPYmpl
Y3QodGhpc09iamVjdCkKLSAgICAsIG1fbmFtZShuYW1lKQotewotfQotCi12b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkK
K3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2Ny
aXB0T2JqZWN0JiBhcmd1bWVudCkKIHsKICAgICBpZiAoYXJndW1lbnQuc2NyaXB0U3RhdGUoKSAh
PSBtX3NjcmlwdFN0YXRlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNjEs
NjQgKzU0LDcxIEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25z
dCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVu
dCk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBT
Y3JpcHRTdHJpbmcmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjph
cHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0
cmluZyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCiB7
CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5j
dGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJn
dW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVu
Y3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKK3ZvaWQgU2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1l
bnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChsb25nIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6
TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6
TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3Vt
ZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewogICAg
IFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCit2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQp
CiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQgYXJndW1lbnQpCiB7CiAgICAgU2Ny
aXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4
OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6
YXBwZW5kQXJndW1lbnQoYm9vbCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcjo6YXBwZW5kQXJndW1lbnQoYm9vbCBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5h
cHBlbmQodjhCb29sZWFuKGFyZ3VtZW50KSk7CiB9CiAKK1NjcmlwdEZ1bmN0aW9uQ2FsbDo6U2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcih0aGlzT2JqZWN0LnNj
cmlwdFN0YXRlKCkpCisgICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVjdCkKKyAgICAsIG1fbmFt
ZShuYW1lKQoreworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
bCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMpCiB7CiAgICAgU2NyaXB0U2Nv
cGUgc2NvcGUobV9zY3JpcHRTdGF0ZSwgcmVwb3J0RXhjZXB0aW9ucyk7CkBAIC0xNzksNCArMTc5
LDQwIEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBo
YWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCht
X3NjcmlwdFN0YXRlLCByZXN1bHQpOwogfQogCitTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2FsbGJh
Y2soU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRWYWx1ZSBmdW5jdGlvbikKKyAgICA6IFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXIoc3RhdGUpCisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQor
eworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbCgpCit7CisgICAgYm9vbCBo
YWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICByZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOworfQor
CitTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCit7
CisgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAgQVNTRVJUKG1fZnVu
Y3Rpb24tPnY4VmFsdWUoKS0+SXNGdW5jdGlvbigpKTsKKworICAgIHY4OjpUcnlDYXRjaCBleGNl
cHRpb25DYXRjaGVyOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZnVuY3Rpb24t
PnY4VmFsdWUoKSk7CisKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBh
cmdzKG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAg
YXJnc1tpXSA9IG1fYXJndW1lbnRzW2ldLnY4VmFsdWUoKTsKKworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZXN1bHQgPSBWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRob3V0RnJhbWUoZnVuY3Rp
b24sIG9iamVjdCwgbV9hcmd1bWVudHMuc2l6ZSgpLCBhcmdzLmdldCgpKTsKKworICAgIGlmIChl
eGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKSB7CisgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRy
dWU7CisgICAgICAgIG1fc2NyaXB0U3RhdGUtPnNldEV4Y2VwdGlvbihleGNlcHRpb25DYXRjaGVy
LkV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCmluZGV4IDRjYmJmN2Uu
Ljg3YTA1ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25D
YWxsLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaApAQCAt
NDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRTdGF0
ZTsKICAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNh
bGwgeworICAgIGNsYXNzIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25D
YWxsKCkge307CisgICAgICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlKSA6IG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpIHt9CisgICAgICAgIHZp
cnR1YWwgflNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoKSB7fTsKIAogICAgICAgICB2b2lkIGFw
cGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYpOwogICAgICAgICB2b2lkIGFwcGVuZEFy
Z3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYpOwpAQCAtNTcsMTUgKzU3LDM0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nKTsK
ICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChpbnQpOwogICAgICAgICB2b2lkIGFwcGVuZEFy
Z3VtZW50KGJvb2wpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBTY3JpcHRTdGF0ZSogbV9z
Y3JpcHRTdGF0ZTsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX2FyZ3VtZW50czsKKyAg
ICB9OworCisgICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxs
KGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CiAgICAgICAgIFNjcmlwdFZh
bHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVl
KTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOwogICAgICAgICBTY3JpcHRPYmplY3QgY29u
c3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHRpb25zID0gdHJ1ZSk7
CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwog
ICAgICAgICBTY3JpcHRPYmplY3QgbV90aGlzT2JqZWN0OwogICAgICAgICBTdHJpbmcgbV9uYW1l
OwotICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIH07CisKKyAg
ICBjbGFzcyBTY3JpcHRDYWxsYmFjayA6IHB1YmxpYyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiBleGVj
LCBTY3JpcHRWYWx1ZSBmdW5jdGlvbik7CisKKyAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOwor
ICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTY3JpcHRWYWx1ZSBtX2Z1bmN0aW9uOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63760</attachid>
            <date>2010-08-06 14:31:10 -0700</date>
            <delta_ts>2010-09-17 12:40:01 -0700</delta_ts>
            <desc>patch 4</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>17086</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSBjNTliNDQxNDlmNWQxYTgyYmNhMTRhNWZiMWJmNWQ4Yjg3MjQ2MjcxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTU6NDI6MTMgLTAzMDAKU3ViamVjdDogW1BB
VENIXSBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKUmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0
ZSBhIGNsYXNzIChTY3JpcHRDYWxsYmFjaykgdGhhdApyZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlv
biBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQg
cGFyYW1ldGVycy4KCiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2Fs
bCk6CiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6
OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToK
KFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6CiogYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpTY3JpcHRD
YWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CiogYmluZGluZ3Mvdjgv
U2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6On5TY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKFdlYkNvcmU6OlNjcmlwdEZ1
bmN0aW9uQ2FsbDo6flNjcmlwdEZ1bmN0aW9uQ2FsbCk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArKysrKysrKysrKwogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIHwgICA3MiArKysrKysrKysrKysrKysrKysr
Ky0tLS0tLS0tCiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAg
IDI5ICsrKysrKysrKy0tCiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RnVuY3Rpb25DYWxsLmggICB8ICAgMjkgKysrKysrKysrLS0KIDUgZmlsZXMgY2hh
bmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGIzYzY2ZC4uM2I1ODQy
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNy0yOSAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3Rp
bmlAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzIxNgorCisg
ICAgICAgIFJlZmFjdG9yaW5nIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbCB0byBjcmVhdGUgYSBj
bGFzcyAoU2NyaXB0Q2FsbGJhY2spIHRoYXQKKyAgICAgICAgcmVjZWl2ZXMgYSBzY3JpcHQgZnVu
Y3Rpb24gYXMgYSBTY3JpcHRWYWx1ZSBhbmQgY2FsbHMgdGhhdCBmdW5jdGlvbiB3aXRoIHByb3Zp
ZGVkIHBhcmFtZXRlcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpTY3Jp
cHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OlNjcmlw
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6flNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxs
Ojp+U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
cjo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxs
OjpTY3JpcHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6
OlNjcmlwdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxs
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6flNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rp
b25DYWxsOjp+U2NyaXB0RnVuY3Rpb25DYWxsKToKKwogMjAxMC0wOC0wNiAgSmVzc2llIEJlcmxp
biAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGwgb3V0IGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzY0ODAxLCB3aGljaCBicm9rZSB0aGUgU2FmYXJpIFdpbmRvd3Mg
QnVpbGQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXgg
OWJhZjgwOS4uZDU2ZmMxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRG
dW5jdGlvbkNhbGwuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25D
YWxsLmNwcApAQCAtNDMsMTQgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChj
b25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6
IG1fZXhlYyh0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCi0gICAgLCBtX3RoaXNPYmplY3QodGhp
c09iamVjdCkKLSAgICAsIG1fbmFtZShuYW1lKQotewotfQotCi12b2lkIFNjcmlwdEZ1bmN0aW9u
Q2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKK3ZvaWQg
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2Jq
ZWN0JiBhcmd1bWVudCkKIHsKICAgICBpZiAoYXJndW1lbnQuc2NyaXB0U3RhdGUoKSAhPSBtX2V4
ZWMpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01OSw3NCArNTIsODEgQEAg
dm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVj
dCYgYXJndW1lbnQpCiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzT2JqZWN0KCkp
OwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2Ny
aXB0U3RyaW5nJiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudC51c3RyaW5nKCkpKTsKIH0KIAot
dm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVl
JiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1l
bnQoY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChhcmd1bWVudC5qc1ZhbHVlKCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBw
ZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3Vt
ZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFw
cGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJpbmcmIGFyZ3VtZW50KQordm9p
ZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVT
dHJpbmcmIGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsK
IH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIq
IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIFVTdHJp
bmcoYXJndW1lbnQpKSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1
bWVudChKU0M6OkpTVmFsdWUgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OmFwcGVuZEFyZ3VtZW50KEpTQzo6SlNWYWx1ZSBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoYXJndW1lbnQpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBw
ZW5kQXJndW1lbnQobG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
cjo6YXBwZW5kQXJndW1lbnQobG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4
ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1
bWVudChsb25nIGxvbmcgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlciht
X2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRB
cmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXI6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBhcmd1bWVudCkKIHsKICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChq
c051bWJlcihtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxs
OjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQog
ewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRG
dW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQogewogICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5k
KGpzTnVtYmVyKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmFwcGVuZEFyZ3VtZW50KGJvb2wgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGJvb2wgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKGpzQm9vbGVhbihhcmd1bWVudCkpOwogfQogCitTY3JpcHRGdW5jdGlvbkNhbGw6
OlNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICA6IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIodGhpc09iamVj
dC5zY3JpcHRTdGF0ZSgpKQorICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCisgICAgLCBt
X25hbWUobmFtZSkKK3sKK30KKwogU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxs
KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHRpb25zKQogewogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CkBAIC0xOTcsNCArMTk3
LDM2IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBo
YWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCht
X2V4ZWMsIGFzT2JqZWN0KHJlc3VsdCkpOwogfQogCitTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2Fs
bGJhY2soU2NyaXB0U3RhdGUqIGV4ZWMsIFNjcmlwdFZhbHVlIGZ1bmN0aW9uKQorICAgIDogU2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcihleGVjKQorICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
K3sKK30KKworU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQoreworICAgIGJvb2wg
aGFkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgcmV0dXJuIGNhbGwoaGFkRXhjZXB0aW9uKTsKK30K
KworU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQor
eworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKG1fZnVuY3Rp
b24uanNWYWx1ZSgpLCBjYWxsRGF0YSk7CisKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5
cGVOb25lKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgbV9mdW5j
dGlvbi5qc1ZhbHVlKCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9mdW5jdGlvbi5qc1ZhbHVlKCks
IG1fYXJndW1lbnRzKTsKKyAgICBoYWRFeGNlcHRpb24gPSBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
OworCisgICAgaWYgKGhhZEV4Y2VwdGlvbikgeworICAgICAgICByZXBvcnRFeGNlcHRpb24obV9l
eGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7
CisgICAgfQorCisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHJlc3VsdCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVu
Y3Rpb25DYWxsLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCmlu
ZGV4IDk3NDJlOGYuLjgzMTJjZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0RnVuY3Rpb25DYWxsLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlv
bkNhbGwuaApAQCAtNDYsMTAgKzQ2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBTY3Jp
cHRGdW5jdGlvbkNhbGwgeworICAgIGNsYXNzIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVj
dCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICAgICAgdmlydHVhbCB+U2Ny
aXB0RnVuY3Rpb25DYWxsKCkge307CisgICAgICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIo
U2NyaXB0U3RhdGUqIGV4ZWMpIDogbV9leGVjKGV4ZWMpIHt9CisgICAgICAgIHZpcnR1YWwgflNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIoKSB7fTsKIAogICAgICAgICB2b2lkIGFwcGVuZEFyZ3Vt
ZW50KGNvbnN0IFNjcmlwdE9iamVjdCYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNv
bnN0IFNjcmlwdFN0cmluZyYpOwpAQCAtNjQsMTUgKzY0LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nKTsKICAgICAgICAg
dm9pZCBhcHBlbmRBcmd1bWVudChpbnQpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGJv
b2wpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IG1fYXJndW1lbnRzOworICAgICAgICBTY3JpcHRTdGF0ZSogbV9leGVjOworICAgIH07CisKKyAg
ICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlciB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwoY29uc3QgU2Ny
aXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgICAgICB2aXJ0
dWFsIH5TY3JpcHRGdW5jdGlvbkNhbGwoKSB7fTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2FsbChi
b29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9IHRydWUpOwogICAgICAg
ICBTY3JpcHRWYWx1ZSBjYWxsKCk7CiAgICAgICAgIFNjcmlwdE9iamVjdCBjb25zdHJ1Y3QoYm9v
bCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fZXhlYzsKICAgICAgICAgU2NyaXB0T2Jq
ZWN0IG1fdGhpc09iamVjdDsKICAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IC8vIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG11c3QgYmUgc3RhY2sgYWxsb2NhdGVkLCBzbyBwcmV2
ZW50IGhlYXAKQEAgLTgxLDYgKzg5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhiYWRiZWVmKTsgfQogICAgIH07CiAKKyAgICBj
bGFzcyBTY3JpcHRDYWxsYmFjayA6IHB1YmxpYyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiBleGVjLCBT
Y3JpcHRWYWx1ZSBmdW5jdGlvbik7CisKKyAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOworICAg
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBTY3JpcHRWYWx1ZSBtX2Z1bmN0aW9uOworICAgIH07CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNjcmlwdEZ1bmN0aW9uQ2FsbApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCmluZGV4IGU2YjIyZWUuLjI5ZGJiMDIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTQ1LDE0ICs0
NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3Jp
cHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgOiBtX3NjcmlwdFN0YXRlKHRoaXNPYmplY3Quc2NyaXB0U3RhdGUoKSkK
LSAgICAsIG1fdGhpc09iamVjdCh0aGlzT2JqZWN0KQotICAgICwgbV9uYW1lKG5hbWUpCi17Ci19
Ci0KLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRP
YmplY3QmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRB
cmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogewogICAgIGlmIChhcmd1bWVu
dC5zY3JpcHRTdGF0ZSgpICE9IG1fc2NyaXB0U3RhdGUpIHsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC02MSw2NCArNTQsNzEgQEAgdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKGFyZ3VtZW50KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVu
ZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgYXJndW1l
bnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCit2b2lk
IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZh
bHVlJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwogfQog
Ci12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBh
cmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3Njcmlw
dFN0YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjhTdHJpbmcoYXJndW1lbnQpKTsKIH0K
IAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFy
Z3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChj
b25zdCBjaGFyKiBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0
YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjhTdHJpbmcoYXJndW1lbnQpKTsKIH0KIAot
dm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCit2
b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1l
bnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQordm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25nIGxvbmcgYXJndW1l
bnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQordm9p
ZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQg
YXJndW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAg
bV9hcmd1bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lk
IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyBhcmd1bWVu
dCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQodW5zaWdu
ZWQgbG9uZyBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRl
KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7CiB9
CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChpbnQgYXJndW1lbnQp
Cit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1
bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRlKTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2Ny
aXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChib29sIGFyZ3VtZW50KQordm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChib29sIGFyZ3VtZW50KQogewog
ICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OEJvb2xlYW4oYXJndW1lbnQpKTsKIH0KIAorU2NyaXB0
RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlz
T2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBTY3JpcHRDYWxsQXJndW1lbnRIYW5k
bGVyKHRoaXNPYmplY3Quc2NyaXB0U3RhdGUoKSkKKyAgICAsIG1fdGhpc09iamVjdCh0aGlzT2Jq
ZWN0KQorICAgICwgbV9uYW1lKG5hbWUpCit7Cit9CisKIFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0
aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucykK
IHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRlLCByZXBvcnRFeGNlcHRpb25z
KTsKQEAgLTE3OSw0ICsxNzksNDAgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6
Y29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHQKICAgICByZXR1
cm4gU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUsIHJlc3VsdCk7CiB9CiAKK1NjcmlwdENhbGxi
YWNrOjpTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdFZhbHVlIGZ1bmN0
aW9uKQorICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcihzdGF0ZSkKKyAgICAsIG1fZnVu
Y3Rpb24oZnVuY3Rpb24pCit7Cit9CisKK1NjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxs
KCkKK3sKKyAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgIHJldHVybiBjYWxsKGhh
ZEV4Y2VwdGlvbik7Cit9CisKK1NjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKGJvb2wm
IGhhZEV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsK
KyAgICBBU1NFUlQobV9mdW5jdGlvbi52OFZhbHVlKCktPklzRnVuY3Rpb24oKSk7CisKKyAgICB2
ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2JhbCgpOworICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6
Q2FzdChtX2Z1bmN0aW9uLnY4VmFsdWUoKSk7CisKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gPiBhcmdzKG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMu
c2l6ZSgpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7
ICsraSkKKyAgICAgICAgYXJnc1tpXSA9IG1fYXJndW1lbnRzW2ldLnY4VmFsdWUoKTsKKworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRo
b3V0RnJhbWUoZnVuY3Rpb24sIG9iamVjdCwgbV9hcmd1bWVudHMuc2l6ZSgpLCBhcmdzLmdldCgp
KTsKKworICAgIGlmIChleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKSB7CisgICAgICAgIGhh
ZEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgIG1fc2NyaXB0U3RhdGUtPnNldEV4Y2VwdGlvbihl
eGNlcHRpb25DYXRjaGVyLkV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHJlc3VsdCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
RnVuY3Rpb25DYWxsLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
CmluZGV4IDRjYmJmN2UuLjg3YTA1ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5j
dGlvbkNhbGwuaApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTY3JpcHRTdGF0ZTsKICAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBT
Y3JpcHRGdW5jdGlvbkNhbGwgeworICAgIGNsYXNzIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9i
amVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICAgICAgdmlydHVhbCB+
U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CisgICAgICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXIoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKSA6IG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUp
IHt9CisgICAgICAgIHZpcnR1YWwgflNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoKSB7fTsKIAog
ICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYpOwogICAgICAg
ICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYpOwpAQCAtNTcsMTUgKzU3
LDM0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1
bnNpZ25lZCBsb25nKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChpbnQpOwogICAgICAg
ICB2b2lkIGFwcGVuZEFyZ3VtZW50KGJvb2wpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBT
Y3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBt
X2FyZ3VtZW50czsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIDogcHVi
bGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKyAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CiAg
ICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4
Y2VwdGlvbnMgPSB0cnVlKTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOwogICAgICAgICBT
Y3JpcHRPYmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNl
cHRpb25zID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBt
X3NjcmlwdFN0YXRlOwogICAgICAgICBTY3JpcHRPYmplY3QgbV90aGlzT2JqZWN0OwogICAgICAg
ICBTdHJpbmcgbV9uYW1lOwotICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRz
OworICAgIH07CisKKyAgICBjbGFzcyBTY3JpcHRDYWxsYmFjayA6IHB1YmxpYyBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxiYWNrKFNj
cmlwdFN0YXRlKiBleGVjLCBTY3JpcHRWYWx1ZSBmdW5jdGlvbik7CisKKyAgICAgICAgU2NyaXB0
VmFsdWUgY2FsbCgpOworICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlv
bik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTY3JpcHRWYWx1ZSBtX2Z1bmN0aW9uOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="57085"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67939</attachid>
            <date>2010-09-17 12:40:01 -0700</date>
            <delta_ts>2010-09-22 12:01:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>16335</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSBhYzIzNGQxMTY2ZGVjNGE1NjFkNjhkMzRiYjAwNzI2YWQ5MTBmY2EwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IEZyaSwgMTcgU2VwIDIwMTAgMTY6MzE6NDggLTAzMDAKU3ViamVjdDogW1BB
VENIXSBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKUmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0
ZSBhIGNsYXNzIChTY3JpcHRDYWxsYmFjaykgdGhhdApyZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlv
biBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQg
cGFyYW1ldGVycy4KCiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2Fs
bCk6CiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKiBiaW5kaW5n
cy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgooV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQpOgooV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpT
Y3JpcHRGdW5jdGlvbkNhbGwpOgooV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxi
YWNrKToKKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKiBiaW5kaW5ncy92OC9TY3Jp
cHRGdW5jdGlvbkNhbGwuaDoKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIpOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMjUgKysrKysrKysrKwogV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwIHwgICA3MiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
CiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAgIDI3ICsrKysr
KysrLS0KIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCB8ICAgNzIg
KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRG
dW5jdGlvbkNhbGwuaCAgIHwgICAyNyArKysrKysrKy0tCiA1IGZpbGVzIGNoYW5nZWQsIDE3NSBp
bnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRlYzdmYTIuLjYyNWZkYWUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTAtMDktMTcgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2NyaXB0IGVuZ2luZSBhZ25vc3RpYyBTY3JpcHRDYWxsYmFjayBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKKworICAgICAgICBSZWZh
Y3RvcmluZyBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgdG8gY3JlYXRlIGEgY2xhc3MgKFNjcmlw
dENhbGxiYWNrKSB0aGF0CisgICAgICAgIHJlY2VpdmVzIGEgc2NyaXB0IGZ1bmN0aW9uIGFzIGEg
U2NyaXB0VmFsdWUgYW5kIGNhbGxzIHRoYXQgZnVuY3Rpb24gd2l0aCBwcm92aWRlZCBwYXJhbWV0
ZXJzLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25D
YWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRG
dW5jdGlvbkNhbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIpOgorCiAyMDEwLTA5LTE3ICBMdWNhcyBEZSBN
YXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmll
d2VkLCBidWlsZCBmaXguIEFkZCBmaWxlcyBtaXNzZWQgaW4gcjY3NzA0LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCmluZGV4IDliYWY4MDkuLjYxNDY3MTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTQzLDE0ICs0
Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2Ny
aXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0
aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBtX2V4ZWModGhpc09iamVjdC5z
Y3JpcHRTdGF0ZSgpKQotICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCi0gICAgLCBtX25h
bWUobmFtZSkKLXsKLX0KLQotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50
KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiB7CiAg
ICAgaWYgKGFyZ3VtZW50LnNjcmlwdFN0YXRlKCkgIT0gbV9leGVjKSB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTksNzQgKzUyLDgxIEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25D
YWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogICAgIG1f
YXJndW1lbnRzLmFwcGVuZChhcmd1bWVudC5qc09iamVjdCgpKTsKIH0KIAotdm9pZCBTY3JpcHRG
dW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgYXJndW1lbnQp
Cit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNj
cmlwdFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KG1fZXhlYywgYXJndW1lbnQudXN0cmluZygpKSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25D
YWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCit2b2lkIFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVl
JiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQuanNWYWx1ZSgp
KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0
cmluZyYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVj
LCBhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1l
bnQoY29uc3QgSlNDOjpVU3RyaW5nJiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgSlNDOjpVU3RyaW5nJiBhcmd1bWVudCkKIHsK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVu
Y3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKK3ZvaWQgU2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1l
bnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5nKGFyZ3VtZW50KSkpOwogfQog
Ci12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoSlNDOjpKU1ZhbHVlIGFy
Z3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChK
U0M6OkpTVmFsdWUgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50
KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJn
dW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxv
bmcgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkpOwogfQog
Ci12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFyZ3Vt
ZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25n
IGxvbmcgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkpOwog
fQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50
IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1
bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5z
aWduZWQgbG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlciht
X2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRB
cmd1bWVudChpbnQgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFw
cGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMsIGFy
Z3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChi
b29sIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1
bWVudChib29sIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc0Jvb2xlYW4o
YXJndW1lbnQpKTsKIH0KIAorU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwo
Y29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAg
OiBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKHRoaXNPYmplY3Quc2NyaXB0U3RhdGUoKSkKKyAg
ICAsIG1fdGhpc09iamVjdCh0aGlzT2JqZWN0KQorICAgICwgbV9uYW1lKG5hbWUpCit7Cit9CisK
IFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24s
IGJvb2wgcmVwb3J0RXhjZXB0aW9ucykKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1f
dGhpc09iamVjdC5qc09iamVjdCgpOwpAQCAtMTk3LDQgKzE5NywzNiBAQCBTY3JpcHRPYmplY3Qg
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJl
cG9ydEV4Y2VwdAogICAgIHJldHVybiBTY3JpcHRPYmplY3QobV9leGVjLCBhc09iamVjdChyZXN1
bHQpKTsKIH0KIAorU2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiBz
dGF0ZSwgU2NyaXB0VmFsdWUgZnVuY3Rpb24pCisgICAgOiBTY3JpcHRDYWxsQXJndW1lbnRIYW5k
bGVyKHN0YXRlKQorICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKK30KKworU2NyaXB0VmFs
dWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQoreworICAgIGJvb2wgaGFkRXhjZXB0aW9uOworICAg
IHJldHVybiBjYWxsKGhhZEV4Y2VwdGlvbik7Cit9CisKK1NjcmlwdFZhbHVlIFNjcmlwdENhbGxi
YWNrOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKK3sKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1bmN0aW9uLmpzVmFsdWUoKSwgY2FsbERhdGEpOwor
CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CisKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQzo6Y2FsbChtX2V4ZWMsIG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBtX2FyZ3VtZW50cyk7CisgICAgaGFkRXhj
ZXB0aW9uID0gbV9leGVjLT5oYWRFeGNlcHRpb24oKTsKKworICAgIGlmIChoYWRFeGNlcHRpb24p
IHsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAgIHJldHVybiBTY3Jp
cHRWYWx1ZShyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAppbmRleCA5NzQyZThmLi4xZjQ1MTIyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTQ2LDEwICs0Niw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBT
Y3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgeworICAgIGNsYXNz
IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKLSAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CisgICAg
ICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoU2NyaXB0U3RhdGUqIHN0YXRlKSA6IG1fZXhl
YyhzdGF0ZSkgeyB9CiAKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRP
YmplY3QmKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcm
KTsKQEAgLTY0LDE1ICs2MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyk7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1l
bnQoaW50KTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChib29sKTsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKKyAg
ICAgICAgU2NyaXB0U3RhdGUqIG1fZXhlYzsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0RnVu
Y3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICAgU2NyaXB0VmFsdWUgY2FsbChib29s
JiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9IHRydWUpOwogICAgICAgICBT
Y3JpcHRWYWx1ZSBjYWxsKCk7CiAgICAgICAgIFNjcmlwdE9iamVjdCBjb25zdHJ1Y3QoYm9vbCYg
aGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fZXhlYzsKICAgICAgICAgU2NyaXB0T2JqZWN0
IG1fdGhpc09iamVjdDsKICAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8v
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIG11c3QgYmUgc3RhY2sgYWxsb2NhdGVkLCBzbyBwcmV2ZW50
IGhlYXAKQEAgLTgxLDYgKzg3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhiYWRiZWVmKTsgfQogICAgIH07CiAKKyAgICBjbGFz
cyBTY3JpcHRDYWxsYmFjayA6IHB1YmxpYyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiwgU2NyaXB0VmFs
dWUpOworCisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKKyAgICAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24pOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2NyaXB0
VmFsdWUgbV9mdW5jdGlvbjsKKyAgICB9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcAppbmRleCBlNmIyMmVlLi4yOWRiYjAyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCkBAIC00NSwxNCArNDUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNv
bnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDog
bV9zY3JpcHRTdGF0ZSh0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCi0gICAgLCBtX3RoaXNPYmpl
Y3QodGhpc09iamVjdCkKLSAgICAsIG1fbmFtZShuYW1lKQotewotfQotCi12b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkK
K3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2Ny
aXB0T2JqZWN0JiBhcmd1bWVudCkKIHsKICAgICBpZiAoYXJndW1lbnQuc2NyaXB0U3RhdGUoKSAh
PSBtX3NjcmlwdFN0YXRlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNjEs
NjQgKzU0LDcxIEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25z
dCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVu
dCk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBT
Y3JpcHRTdHJpbmcmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjph
cHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0
cmluZyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCiB7
CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5j
dGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYgYXJn
dW1lbnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVu
Y3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKK3ZvaWQgU2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1l
bnQpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rp
b25DYWxsOjphcHBlbmRBcmd1bWVudChsb25nIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6
TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlw
dFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6
TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3Vt
ZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewogICAg
IFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCit2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQp
CiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQgYXJndW1lbnQpCiB7CiAgICAgU2Ny
aXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4
OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6
YXBwZW5kQXJndW1lbnQoYm9vbCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcjo6YXBwZW5kQXJndW1lbnQoYm9vbCBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5h
cHBlbmQodjhCb29sZWFuKGFyZ3VtZW50KSk7CiB9CiAKK1NjcmlwdEZ1bmN0aW9uQ2FsbDo6U2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcih0aGlzT2JqZWN0LnNj
cmlwdFN0YXRlKCkpCisgICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVjdCkKKyAgICAsIG1fbmFt
ZShuYW1lKQoreworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
bCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMpCiB7CiAgICAgU2NyaXB0U2Nv
cGUgc2NvcGUobV9zY3JpcHRTdGF0ZSwgcmVwb3J0RXhjZXB0aW9ucyk7CkBAIC0xNzksNCArMTc5
LDQwIEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBo
YWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCht
X3NjcmlwdFN0YXRlLCByZXN1bHQpOwogfQogCitTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2FsbGJh
Y2soU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRWYWx1ZSBmdW5jdGlvbikKKyAgICA6IFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXIoc3RhdGUpCisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQor
eworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbCgpCit7CisgICAgYm9vbCBo
YWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICByZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOworfQor
CitTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCit7
CisgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAgQVNTRVJUKG1fZnVu
Y3Rpb24udjhWYWx1ZSgpLT5Jc0Z1bmN0aW9uKCkpOworCisgICAgdjg6OlRyeUNhdGNoIGV4Y2Vw
dGlvbkNhdGNoZXI7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6Q29u
dGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4gZnVuY3Rpb24gPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobV9mdW5jdGlvbi52
OFZhbHVlKCkpOworCisgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJn
cyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFy
Z3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcmVzdWx0ID0gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uV2l0aG91dEZyYW1lKGZ1bmN0aW9u
LCBvYmplY3QsIG1fYXJndW1lbnRzLnNpemUoKSwgYXJncy5nZXQoKSk7CisKKyAgICBpZiAoZXhj
ZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkgeworICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVl
OworICAgICAgICBtX3NjcmlwdFN0YXRlLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uQ2F0Y2hlci5F
eGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAg
IHJldHVybiBTY3JpcHRWYWx1ZShyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaAppbmRleCA0Y2JiZjdlLi4w
NGRkZGM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTQx
LDEwICs0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRTdGF0ZTsK
ICAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwg
eworICAgIGNsYXNzIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxs
KCkge307CisgICAgICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlKSA6IG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpIHsgfQogCiAgICAgICAgIHZv
aWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAgICAgICAgIHZvaWQgYXBw
ZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJik7CkBAIC01NywxNSArNTYsMzMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxv
bmcpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGludCk7CiAgICAgICAgIHZvaWQgYXBw
ZW5kQXJndW1lbnQoYm9vbCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNjcmlwdFN0YXRl
KiBtX3NjcmlwdFN0YXRlOworICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRz
OworICAgIH07CisKKyAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0
Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRGdW5jdGlv
bkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUp
OwogICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBv
cnRFeGNlcHRpb25zID0gdHJ1ZSk7CiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKICAgICAg
ICAgU2NyaXB0T2JqZWN0IGNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0
RXhjZXB0aW9ucyA9IHRydWUpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBTY3JpcHRTdGF0
ZSogbV9zY3JpcHRTdGF0ZTsKICAgICAgICAgU2NyaXB0T2JqZWN0IG1fdGhpc09iamVjdDsKICAg
ICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX2FyZ3Vt
ZW50czsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0Q2FsbGJhY2sgOiBwdWJsaWMgU2NyaXB0
Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRDYWxsYmFj
ayhTY3JpcHRTdGF0ZSosIFNjcmlwdFZhbHVlKTsKKworICAgICAgICBTY3JpcHRWYWx1ZSBjYWxs
KCk7CisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFNjcmlwdFZhbHVlIG1fZnVuY3Rpb247CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMS43LjIuMgoK
</data>
<flag name="review"
          id="57367"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68410</attachid>
            <date>2010-09-22 12:01:47 -0700</date>
            <delta_ts>2010-09-22 12:46:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Script-engine-agnostic-ScriptCallback-class.patch</filename>
            <type>text/plain</type>
            <size>16540</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSA1NmJhNWZkNzllMjc5ZTg2MDgxYWI0NDE2MDkyYzhmZTg0NWVhMjhjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IEZyaSwgMTcgU2VwIDIwMTAgMTY6MzE6NDggLTAzMDAKU3ViamVjdDogW1BB
VENIXSBTY3JpcHQgZW5naW5lIGFnbm9zdGljIFNjcmlwdENhbGxiYWNrIGNsYXNzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMTYKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKUmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0
ZSBhIGNsYXNzIChTY3JpcHRDYWxsYmFjaykgdGhhdApyZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlv
biBhcyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQg
cGFyYW1ldGVycy4KCiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKFdlYkNvcmU6OlNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CihXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2Fs
bCk6CiogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CihXZWJDb3JlOjpTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKiBiaW5kaW5n
cy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgooV2ViQ29yZTo6U2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQpOgooV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpT
Y3JpcHRGdW5jdGlvbkNhbGwpOgooV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxi
YWNrKToKKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKiBiaW5kaW5ncy92OC9TY3Jp
cHRGdW5jdGlvbkNhbGwuaDoKKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OlNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIpOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMjUgKysrKysrKysrKwogV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwIHwgICA3MiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
CiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oICAgfCAgIDM1ICsrKysr
KysrKystLS0tCiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgfCAg
IDcyICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIFdlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RnVuY3Rpb25DYWxsLmggICB8ICAgMjcgKysrKysrKystLQogNSBmaWxlcyBjaGFuZ2VkLCAx
NzkgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ZWM3ZmEyLi42MjVmZGFlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDEwLTA5LTE3ICBMdWl6IEFnb3N0aW5pICA8bHVpei5hZ29zdGluaUBvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFNjcmlwdCBlbmdpbmUgYWdub3N0aWMgU2NyaXB0Q2FsbGJhY2sgY2xhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMjE2CisKKyAgICAgICAg
UmVmYWN0b3JpbmcgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHRvIGNyZWF0ZSBhIGNsYXNzIChT
Y3JpcHRDYWxsYmFjaykgdGhhdAorICAgICAgICByZWNlaXZlcyBhIHNjcmlwdCBmdW5jdGlvbiBh
cyBhIFNjcmlwdFZhbHVlIGFuZCBjYWxscyB0aGF0IGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgcGFy
YW1ldGVycy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0
aW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6U2NyaXB0Q2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Ny
aXB0RnVuY3Rpb25DYWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRI
YW5kbGVyOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKToKKwogMjAxMC0wOS0xNyAgTHVjYXMg
RGUgTWFyY2hpICA8bHVjYXMuZGVtYXJjaGlAcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYnVpbGQgZml4LiBBZGQgZmlsZXMgbWlzc2VkIGluIHI2NzcwNC4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAppbmRleCA5YmFmODA5Li42MTQ2NzEy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCkBAIC00Mywx
NCArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVj
dCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogbV9leGVjKHRoaXNPYmpl
Y3Quc2NyaXB0U3RhdGUoKSkKLSAgICAsIG1fdGhpc09iamVjdCh0aGlzT2JqZWN0KQotICAgICwg
bV9uYW1lKG5hbWUpCi17Ci19Ci0KLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1
bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQog
ewogICAgIGlmIChhcmd1bWVudC5zY3JpcHRTdGF0ZSgpICE9IG1fZXhlYykgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU5LDc0ICs1Miw4MSBAQCB2b2lkIFNjcmlwdEZ1bmN0
aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVudCkKICAg
ICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQuanNPYmplY3QoKSk7CiB9CiAKLXZvaWQgU2Ny
aXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3Vt
ZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25z
dCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0
cmluZyhtX2V4ZWMsIGFyZ3VtZW50LnVzdHJpbmcoKSkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0
aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3VtZW50KQordm9p
ZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRW
YWx1ZSYgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzVmFs
dWUoKSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBl
bmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1f
ZXhlYywgYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFy
Z3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYgYXJndW1lbnQp
CiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1lbnQpCit2b2lk
IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFy
Z3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
bV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgVVN0cmluZyhhcmd1bWVudCkpKTsK
IH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KEpTQzo6SlNWYWx1
ZSBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1l
bnQoSlNDOjpKU1ZhbHVlIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1
bWVudCk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChsb25n
IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dChsb25nIGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywgYXJndW1lbnQpKTsK
IH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBh
cmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
bG9uZyBsb25nIGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywgYXJndW1lbnQp
KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVk
IGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywg
YXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50
KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1i
ZXIobV9leGVjLCBhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBw
ZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjphcHBlbmRBcmd1bWVudChpbnQgYXJndW1lbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVj
LCBhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1l
bnQoYm9vbCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQoYm9vbCBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNCb29s
ZWFuKGFyZ3VtZW50KSk7CiB9CiAKK1NjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25D
YWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
ICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcih0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkp
CisgICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVjdCkKKyAgICAsIG1fbmFtZShuYW1lKQorewor
fQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYgaGFkRXhjZXB0
aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKQEAgLTE5Nyw0ICsxOTcsMzYgQEAgU2NyaXB0T2Jq
ZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9v
bCByZXBvcnRFeGNlcHQKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KG1fZXhlYywgYXNPYmplY3Qo
cmVzdWx0KSk7CiB9CiAKK1NjcmlwdENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0
ZSogc3RhdGUsIFNjcmlwdFZhbHVlIGZ1bmN0aW9uKQorICAgIDogU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcihzdGF0ZSkKKyAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCit7Cit9CisKK1Njcmlw
dFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKK3sKKyAgICBib29sIGhhZEV4Y2VwdGlvbjsK
KyAgICByZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRD
YWxsYmFjazo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCit7CisgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRh
KTsKKworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworCisgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBtX2Z1bmN0aW9uLmpzVmFsdWUoKSwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBtX2Z1bmN0aW9uLmpzVmFsdWUoKSwgbV9hcmd1bWVudHMpOworICAgIGhh
ZEV4Y2VwdGlvbiA9IG1fZXhlYy0+aGFkRXhjZXB0aW9uKCk7CisKKyAgICBpZiAoaGFkRXhjZXB0
aW9uKSB7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1fZXhlYy0+ZXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
U2NyaXB0VmFsdWUocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKaW5kZXggOTc0MmU4Zi4uMDM3YTMzNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCkBAIC00NiwxMCArNDYs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0VmFsdWU7CiAgICAgY2xh
c3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsKKyAgICBj
bGFzcyBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgpIHt9Owor
ICAgICAgICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKFNjcmlwdFN0YXRlKiBzdGF0ZSkgOiBt
X2V4ZWMoc3RhdGUpIHsgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2Ny
aXB0T2JqZWN0Jik7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3Ry
aW5nJik7CkBAIC02NCwxNSArNjMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGxvbmcpOwogICAgICAgICB2b2lkIGFwcGVuZEFy
Z3VtZW50KGludCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoYm9vbCk7Ci0gICAgICAg
IFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlv
bnMgPSB0cnVlKTsKLSAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOwotICAgICAgICBTY3JpcHRP
YmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHRpb25z
ID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBtX2V4ZWM7
Ci0gICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7Ci0gICAgICAgIFN0cmluZyBtX25h
bWU7CiAgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbV9hcmd1bWVudHM7CisgICAg
ICAgIFNjcmlwdFN0YXRlKiBtX2V4ZWM7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBtdXN0IGJlIHN0YWNrIGFsbG9jYXRlZCwgc28gcHJldmVudCBoZWFw
CkBAIC04MSw2ICs3NSwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIG9w
ZXJhdG9yIG5ld1tdKHNpemVfdCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4YmFkYmVlZik7IH0KICAgICB9OwogCisgICAgY2xhc3MgU2Ny
aXB0RnVuY3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYg
dGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgU2NyaXB0VmFsdWUgY2Fs
bChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9IHRydWUpOworICAg
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKCk7CisgICAgICAgIFNjcmlwdE9iamVjdCBjb25zdHJ1Y3Qo
Ym9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKKworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgU2NyaXB0T2JqZWN0IG1fdGhpc09iamVjdDsKKyAgICAgICAg
U3RyaW5nIG1fbmFtZTsKKyAgICB9OworCisgICAgY2xhc3MgU2NyaXB0Q2FsbGJhY2sgOiBwdWJs
aWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICBTY3Jp
cHRDYWxsYmFjayhTY3JpcHRTdGF0ZSosIFNjcmlwdFZhbHVlKTsKKworICAgICAgICBTY3JpcHRW
YWx1ZSBjYWxsKCk7CisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9u
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFNjcmlwdFZhbHVlIG1fZnVuY3Rpb247CisgICAg
fTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU2NyaXB0RnVuY3Rpb25D
YWxsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXggZTZi
MjJlZS4uMjlkYmIwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
LmNwcApAQCAtNDUsMTQgKzQ1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRG
dW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNP
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IG1fc2NyaXB0U3RhdGUodGhpc09iamVj
dC5zY3JpcHRTdGF0ZSgpKQotICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCi0gICAgLCBt
X25hbWUobmFtZSkKLXsKLX0KLQotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3Vt
ZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiB7
CiAgICAgaWYgKGFyZ3VtZW50LnNjcmlwdFN0YXRlKCkgIT0gbV9zY3JpcHRTdGF0ZSkgewogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTYxLDY0ICs1NCw3MSBAQCB2b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiBhcmd1bWVu
dCkKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwogfQogCi12b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBhcmd1bWVudCkK
K3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2Ny
aXB0U3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0
YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjhTdHJpbmcoYXJndW1lbnQpKTsKIH0KIAot
dm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVl
JiBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1l
bnQoY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3VtZW50KQogewogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChhcmd1bWVudCk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVu
dChjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNj
b3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0cmlu
Zyhhcmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1l
bnQoY29uc3QgY2hhciogYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3Bl
IHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0cmluZyhh
cmd1bWVudCkpOwogfQogCi12b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQo
bG9uZyBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQobG9uZyBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0
YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7
CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChsb25nIGxvbmcg
YXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0
YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7
CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBp
bnQgYXJndW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3Vt
ZW50KHVuc2lnbmVkIGludCBhcmd1bWVudCkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShtX3Nj
cmlwdFN0YXRlKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3Vt
ZW50KSk7CiB9CiAKLXZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCh1bnNp
Z25lZCBsb25nIGFyZ3VtZW50KQordm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBl
bmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNj
b3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpO
ZXcoYXJndW1lbnQpKTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3Vt
ZW50KGludCBhcmd1bWVudCkKK3ZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQoaW50IGFyZ3VtZW50KQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0
U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQp
KTsKIH0KIAotdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGJvb2wgYXJn
dW1lbnQpCit2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGJv
b2wgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4Qm9vbGVhbihhcmd1bWVu
dCkpOwogfQogCitTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBT
Y3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXIodGhpc09iamVjdC5zY3JpcHRTdGF0ZSgpKQorICAgICwgbV90
aGlzT2JqZWN0KHRoaXNPYmplY3QpCisgICAgLCBtX25hbWUobmFtZSkKK3sKK30KKwogU2NyaXB0
VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCBy
ZXBvcnRFeGNlcHRpb25zKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUs
IHJlcG9ydEV4Y2VwdGlvbnMpOwpAQCAtMTc5LDQgKzE3OSw0MCBAQCBTY3JpcHRPYmplY3QgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9y
dEV4Y2VwdAogICAgIHJldHVybiBTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgcmVzdWx0KTsK
IH0KIAorU2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
U2NyaXB0VmFsdWUgZnVuY3Rpb24pCisgICAgOiBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKHN0
YXRlKQorICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKK30KKworU2NyaXB0VmFsdWUgU2Ny
aXB0Q2FsbGJhY2s6OmNhbGwoKQoreworICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7Cisg
ICAgcmV0dXJuIGNhbGwoaGFkRXhjZXB0aW9uKTsKK30KKworU2NyaXB0VmFsdWUgU2NyaXB0Q2Fs
bGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQoreworICAgIEFTU0VSVCh2ODo6Q29udGV4
dDo6SW5Db250ZXh0KCkpOworICAgIEFTU0VSVChtX2Z1bmN0aW9uLnY4VmFsdWUoKS0+SXNGdW5j
dGlvbigpKTsKKworICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xv
YmFsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZnVuY3Rpb24udjhWYWx1ZSgpKTsKKworICAgIE93bkFy
cmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZh
bHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBhcmdzW2ldID0gbV9hcmd1bWVudHNbaV0u
djhWYWx1ZSgpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IFY4UHJveHk6
OmNhbGxGdW5jdGlvbldpdGhvdXRGcmFtZShmdW5jdGlvbiwgb2JqZWN0LCBtX2FyZ3VtZW50cy5z
aXplKCksIGFyZ3MuZ2V0KCkpOworCisgICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0
KCkpIHsKKyAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9zY3JpcHRTdGF0
ZS0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbkNhdGNoZXIuRXhjZXB0aW9uKCkpOworICAgICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUocmVz
dWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RnVuY3Rpb25DYWxsLmgKaW5kZXggNGNiYmY3ZS4uMDRkZGRjOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCkBAIC00MSwxMCArNDEsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0U3RhdGU7CiAgICAgY2xhc3MgU2NyaXB0U3RyaW5n
OwogCi0gICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsKKyAgICBjbGFzcyBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0g
ICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgpIHt9OworICAgICAgICBTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgOiBtX3NjcmlwdFN0
YXRlKHNjcmlwdFN0YXRlKSB7IH0KIAogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0
IFNjcmlwdE9iamVjdCYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlw
dFN0cmluZyYpOwpAQCAtNTcsMTUgKzU2LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nKTsKICAgICAgICAgdm9pZCBhcHBl
bmRBcmd1bWVudChpbnQpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGJvb2wpOworCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICAg
ICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX2FyZ3VtZW50czsKKyAgICB9OworCisgICAgY2xhc3Mg
U2NyaXB0RnVuY3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVj
dCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9IHRydWUpOwog
ICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKCk7CiAgICAgICAgIFNjcmlwdE9iamVjdCBjb25zdHJ1
Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0cnVlKTsKIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAgICAg
ICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7CiAgICAgICAgIFN0cmluZyBtX25hbWU7Ci0g
ICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgfTsKKworICAgIGNs
YXNzIFNjcmlwdENhbGxiYWNrIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0Q2FsbGJhY2soU2NyaXB0U3RhdGUqLCBTY3JpcHRW
YWx1ZSk7CisKKyAgICAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOworICAgICAgICBTY3JpcHRWYWx1
ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTY3Jp
cHRWYWx1ZSBtX2Z1bmN0aW9uOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0g
CjEuNy4yLjIKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>