<?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>74633</bug_id>
          
          <creation_ts>2011-12-15 11:00:58 -0800</creation_ts>
          <short_desc>Allow JSStaticScope to bind more than one variable</short_desc>
          <delta_ts>2012-03-19 13:04: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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andy Wingo">wingo</reporter>
          <assigned_to name="Andy Wingo">wingo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>522074</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-15 11:00:58 -0800</bug_when>
    <thetext>The patch to be attached generalizes JSStaticScope to be able to bind more than one variable.  As the symbol table could grow large, instead of copying it all the time, we refcount it.  A &quot;template&quot; JSStaticScope can beget other scope objects that share the symbol table, but have their own storage.  It also changes the push_new_scope op to take a template scope as an argument instead of an identifier.  Eventually we will remove the &quot;value&quot; arg from push_new_scope, and instead bind the variable with an op_put_scoped_var.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522139</commentid>
    <comment_count>1</comment_count>
      <attachid>119482</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-15 12:32:50 -0800</bug_when>
    <thetext>Created attachment 119482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522162</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-15 12:52:23 -0800</bug_when>
    <thetext>What do we need this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522215</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-15 13:46:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; What do we need this for?

It will be used in a later patch that implements block scoping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524357</commentid>
    <comment_count>4</comment_count>
      <attachid>119482</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-19 18:40:44 -0800</bug_when>
    <thetext>Comment on attachment 119482
Patch

So, we&apos;re really keen to avoid unnecessary complexity introduced by premature optimizations, and I think this patch is probably not truly necessary at this stage.  I think it would be perfectly possible to implement block scoped const by pushing multiple consts each with their own scope.  Clearly letting them share a scope object is more efficient, but it seems this is just an optimization.  As such it would have been much better to implement the feature first, then the optimization for it, rather than implementing an optimization for a feature that doesn&apos;t just exist, and as such we can&apos;t assess the value of!

I think it&apos;s likely enough that this will be a benefit in the long run that we can let this slide this time, so I won&apos;t make you restructure your set of changes to land this after block scoped const, but for future reference we really do want changes like this to be justified empirically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524375</commentid>
    <comment_count>5</comment_count>
      <attachid>119482</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-19 19:12:22 -0800</bug_when>
    <thetext>Comment on attachment 119482
Patch

Hmmm, retracting my r+ for now based on Geoff&apos;s comments in https://bugs.webkit.org/show_bug.cgi?id=74718 .  If we don&apos;t use the scope chain for const, this change won&apos;t make sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526204</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-22 05:46:37 -0800</bug_when>
    <thetext>Gavin, do you still think that this patch should not go in, after the discussion in bug 74718?  I&apos;m uncertain, as Geoff is arguing for more efficiency, but you seem to think this is a premature optimization.

It seems to me that single-var JSStaticScope is not the right thing, because `const&apos; and `let&apos; form mutually recursive bindings:

  {
     const f = function() { return g; }
     const g = Foo();
     return f;
   }

Thanks,

Andy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527081</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-25 15:30:44 -0800</bug_when>
    <thetext>Hi Andy,

Ah, good point – you&apos;re right we will need a solution based around a scope supporting multiple variables.

However I think Geoff has a good point about eager vs lazy tear-off, an that it really might be worth a quick investigation before moving forwards.  It may be much better to switch the const/let mechanism to be based on create_activation rather than push_new_scope, and since doing so may make a number of these changes redundant it could be a good idea to at least look into how hard this would be before going ahead with the push_new_scope based solution.

Lazy tear-off of activations offers two key performance advantages over static scopes.  In some cases the variables that might be captured may be accessed frequently within the function they are declared in and benefit from fast access to local virtual registers.  Further, we usually try to be lazy about allocating activation objects, only doing so if a function expression is actually reached (it is not atypical for a program to contain functions that can and sometimes do create closures, but upon many invocations do not).

There may be further advantages to using activations.  Activations already support multiple variables, and if generalized to be able to be used at block scope as well as function scope may allow us to remove push_new_scope, reducing complexity.  Considering let/const variables at function scope, it would be inefficient to create separate objects on the scope chain for vars and const/let variables, placing const/let values on the activation would allow us to use the same object.  And a key optimization for both vars and let/const values will be escape/capture analysis.  This mechanism will want to operate over all types of variables, and having 

static</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527082</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-25 15:38:18 -0800</bug_when>
    <thetext>&lt;Gah, accidental commit!&gt;

... , and having differing mechanisms underlying const/let/var may complicate implementation (e.g. activation based lazy tear-off results in eager virtual register allocation, use of static scopes does not – in the case of activation, if capture analysis shows a variable cannot be captured the only change in code generation might be to omit the create-activation/tear-off checks, at the points variables are accessed there would be no change in the byte code emitted).

In the case of optimizations to const/let that are additive to the basic mechanism, there is no need for these to be considered as part of the initial implementation (indeed I&apos;d argue it&apos;s best not to – to land the code in its simplest functional, correct form, and to optimize incrementally from there showing the benefit of each change).  But we don&apos;t want to land large changed that would only be torn out weeks later, so I think the question of whether the const/let implementation should be based on static scope objects or activations is a fundamental question that really ought to be addressed before proceeding.

What do you think?

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537976</commentid>
    <comment_count>9</comment_count>
      <attachid>122959</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-01-18 10:30:29 -0800</bug_when>
    <thetext>Created attachment 122959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537988</commentid>
    <comment_count>10</comment_count>
      <attachid>122959</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-18 10:42:07 -0800</bug_when>
    <thetext>Comment on attachment 122959
Patch

Please see my prior comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582094</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-19 13:04:16 -0700</bug_when>
    <thetext>Resolving as invalid; the parts that were good (?) live on in bug 74708.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119482</attachid>
            <date>2011-12-15 12:32:50 -0800</date>
            <delta_ts>2012-01-18 10:30:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74633-20111215213248.patch</filename>
            <type>text/plain</type>
            <size>19388</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZjhlOTEzMDJkYjQ5NDc5NDJmYmFmOGIyMjNmZDI3NDc0OGJiZTI0Li4zYzM1YmQxODBmNGQ1MDRl
MjMzYzYwYWZkYjIzNTBmODQ5MzliZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1NiBAQAogMjAxMS0xMi0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgQWxsb3cgSlNTdGF0aWNTY29wZSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjMz
CisKKyAgICAgICAgVGhpcyBwYXRjaCBnZW5lcmFsaXplcyBKU1N0YXRpY1Njb3BlIHRvIGJlIGFi
bGUgdG8gYmluZCBtb3JlIHRoYW4KKyAgICAgICAgb25lIHZhcmlhYmxlLiAgQXMgdGhlIHN5bWJv
bCB0YWJsZSBjb3VsZCBncm93IGxhcmdlLCBpbnN0ZWFkIG9mCisgICAgICAgIGNvcHlpbmcgaXQg
YWxsIHRoZSB0aW1lLCB3ZSByZWZjb3VudCBpdC4gIEEgInRlbXBsYXRlIgorICAgICAgICBKU1N0
YXRpY1Njb3BlIGNhbiBiZWdldCBvdGhlciBzY29wZSBvYmplY3RzIHRoYXQgc2hhcmUgdGhlIHN5
bWJvbAorICAgICAgICB0YWJsZSwgYnV0IGhhdmUgdGhlaXIgb3duIHN0b3JhZ2UuICBJdCBhbHNv
IGNoYW5nZXMgdGhlCisgICAgICAgIHB1c2hfbmV3X3Njb3BlIG9wIHRvIHRha2UgYSB0ZW1wbGF0
ZSBzY29wZSBhcyBhbiBhcmd1bWVudCBpbnN0ZWFkCisgICAgICAgIG9mIGFuIGlkZW50aWZpZXIu
ICBFdmVudHVhbGx5IHdlIHdpbGwgcmVtb3ZlIHRoZSAidmFsdWUiIGFyZyBmcm9tCisgICAgICAg
IHB1c2hfbmV3X3Njb3BlLCBhbmQgaW5zdGVhZCBiaW5kIHRoZSB2YXJpYWJsZSB3aXRoIGFuCisg
ICAgICAgIG9wX3B1dF9zY29wZWRfdmFyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSk6IEhhdmUgYSBuZXcgdmFyaWFu
dCB0aGF0IG1ha2VzCisgICAgICAgIGFuICJlbXB0eSIgc2NvcGUgLS0gYSBzY29wZSB0ZW1wbGF0
ZS4KKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6YWRkVmFyaWFibGUpOiBDYWxs
IHRoaXMgbWV0aG9kIHRvIGFkZAorICAgICAgICBzbG90cyAoc3ltYm9sIHRhYmxlIGVudHJpZXMp
IHRvIHNjb3BlIHRlbXBsYXRlcy4KKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6
Y2xvbmUpOiBUaGlzIG1ldGhvZCB3aWxsIGNsb25lIGEgc2NvcGUKKyAgICAgICAgdGVtcGxhdGUg
YW5kIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGl0cyB2YXJpYWJsZXMsIHRob3VnaCB3aXRob3V0Cisg
ICAgICAgIGFsbG9jYXRpb24gaW4gdGhlIGNvbW1vbiBjYXNlIG9mIG9ubHkgYmluZGluZyBvbmUg
dmFyaWFibGUuCisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2Nv
cGVPYmplY3QpOiBBZGFwdCB0byB0YWtlIGEKKyAgICAgICAgcmVmZXJlbmNlIG9uIGEgc2hhcmVk
IHN5bWJvbCB0YWJsZS4KKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKTogVmlz
aXQgYWxsIHRoZQorICAgICAgICByZWdpc3RlcnMhCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBVcGRhdGUgZm9yIG5ldworICAgICAgICBv
cF9wdXNoX25ld19zY29wZS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29wZSk6IFRha2UgYSBy
ZWdpc3RlciBmb3IKKyAgICAgICAgdGhlIHNjb3BlIHRlbXBsYXRlLCBpbnN0ZWFkIG9mIGFuIElE
LgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlND
OjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBDcmVhdGUgYSBzY29wZSB0ZW1wbGF0ZSwgZW1pdCBh
CisgICAgICAgIGxvYWQsIGFuZCBwbHVtYiB0aGUgcmVzdWx0aW5nIHJlZ2lzdGVyIGRvd24gdG8g
ZW1pdFB1c2hOZXdTY29wZS4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6IEluc3Rl
YWQgb2YgbWFraW5nIGEgbmV3CisgICAgICAgIHNjb3BlIGZyb20gc2NyYXRjaCwgY2xvbmUgb25l
IGZyb20gdGhlIGluY29taW5nIHRlbXBsYXRlLgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
cHJpdmF0ZWV4ZWN1dGUpOiBBZGFwdCBhIGNvbW1lbnQuCisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcCAoSlNDOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOiBJbnN0ZWFkIG9mIHRha2luZworICAg
ICAgICB0aGUgaWRlbnRpZmllciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRha2UgdGhlIHNjb3Bl
IHRlbXBsYXRlLgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcCAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHVzaF9uZXdfc2NvcGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXNoX25ld19zY29wZSk6CisgICAgICAgIEFkYXB0IHRvIGN0aV9v
cF9wdXNoX25ld19zY29wZSBjaGFuZ2UuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oIChK
U0M6OkpTT2JqZWN0Ojppc1N0YXRpY1Njb3BlT2JqZWN0KTogTmV3CisgICAgICAgIGhlbHBlci4K
KworMjAxMS0xMi0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisKICAgICAgICAg
QXZvaWQgZG91YmxlLWxvb2t1cCB3aGVuIHNldHRpbmcgc3RhdGljLXNjb3BlZCB2YXJzIGluIHN0
cmljdCBtb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDYyOAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CmluZGV4IDc0ZGNmMWIzMGFiMWJmZGQ0ZmNiMjdjNDU1NDBiNGZkNDk0YTRlNzkuLmNhMmU1Yzdk
MjFkZTcyODk1NTY3ZGU0NzlkYWRmYTY3MzJmZmEwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMjE5LDkgKzEyMTksOSBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHVzaF9uZXdfc2Nv
cGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIHB1c2hfbmV3X3Njb3Bl
IFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
LCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludGYoIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xu
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIyKS5kYXRhKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IDdkNGU3ZGI1OTFhNzJjY2FhNzY2MzEwNGI2NGU1Y2Q0ZTNkOTAw
ZWIuLjUyNzA3MTZjZGU1NThjYTA0ZjY3NjE5NDVmODBmNTEyZTE1MzlhNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC0yMjAwLDggKzIyMDAsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
U3Vicm91dGluZVJldHVybihSZWdpc3RlcklEKiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEICpzY29wZVRlbXBsYXRl
LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKKyAgICAvLyBGSVhNRTogVHJhY2sgdGhlIHNjb3BlIHNv
IHRoYXQgZmluZFNjb3BlZFByb3BlcnR5IGNhbiBEVFJULgogICAgIENvbnRyb2xGbG93Q29udGV4
dCBjb250ZXh0OwogICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKICAgICBtX3Nj
b3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKQEAgLTIyMDksNyArMjIxMCw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wCiAKICAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3Bl
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc2NvcGVUZW1wbGF0ZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHZhbHVlLT5pbmRleCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGJlY2ZmM2IwZjAwY2Vh
NGZhN2E5NzE1NGI4NDljMjhiNDA4YzIzODAuLjVmZjJlNTcwNDcwZmNkNTAzNTQwZmJkYWU5ZTBk
YTFkZDhkNzdjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTM2OCw3ICszNjgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFVTdHJp
bmcmIG1lc3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQg
KnNjb3BlVGVtcGxhdGUsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UG9w
U2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAppbmRleCBhMDEyN2Q4ZDczZWU1NzlkMjQ1N2Q4ZWIzMTk4OTc3N2U4Mzdk
NmRlLi40YzQ1NjI3ZjllYjY0MGM4ODk2YWZjZWM1ZjcyNjNjZDdhMTQ4OGI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBA
IC0xOTM4LDggKzE5MzgsMTIgQEAgUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChkeW5hbWljU2NvcGVPYmplY3QuZ2V0KCksIG1fZXhjZXB0
aW9uSWRlbnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgZHluYW1pY1Njb3BlT2JqZWN0Lmdl
dCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaFNjb3BlKGV4Y2VwdGlvblJlZ2lz
dGVyLmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgbV9leGNlcHRpb25JZGVudCwgZXhj
ZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogc2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNy
ZWF0ZShnZW5lcmF0b3Iuc2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7
CisgICAgICAgICAgICBzY29wZVRlbXBsYXRlLT5hZGRWYXJpYWJsZShtX2V4Y2VwdGlvbklkZW50
LCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wbCA9IGdl
bmVyYXRvci5lbWl0TG9hZCgwLCBKU1ZhbHVlKHNjb3BlVGVtcGxhdGUpKTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaE5ld1Njb3BlKGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0ZW1w
bC5nZXQoKSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICB9CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0UG9wU2NvcGUoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjYXRjaEVuZExhYmVs
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCmluZGV4IDcwYTQ0MzJlYTg4Yzk3MzY3MGE5MzdiMWQwMWRkMTQ2ZDM3YzhhZTYu
LjMxMGY4YjY4YWZkMzZkZWU1MTJmNThkNmU3YjNiYWJlNjdjZTJjNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTQwOCwx
MyArMTQwOCwxNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVnSG9vawogTkVWRVJfSU5MSU5FIFNjb3Bl
Q2hhaW5Ob2RlKiBJbnRlcnByZXRlcjo6Y3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCiB7CiAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIElkZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KHZQQ1syXS51Lm9wZXJhbmQpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIodlBD
WzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0
ZSk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKHNjb3BlKTsKKyAg
ICBpbnQgdGVtcGwgPSB2UENbMl0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IHZQQ1szXS51
Lm9wZXJhbmQ7CisKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5yKHRlbXBsKS5qc1ZhbHVlKCkuaXNP
YmplY3QoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSBhc09iamVjdChjYWxsRnJh
bWUtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3Rh
dGljU2NvcGVPYmplY3QoKSk7CisgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBz
dGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSktPmNsb25lKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOworICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7CiAKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCktPnB1c2goc2NvcGUpOworICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+cHVzaChuZXdTY29wZSk7CiB9CiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0
cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90KQpAQCAtNDg1MSwxMSArNDg1NCwxMSBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
ICAgIGdvdG8gKigmJnNraXBfbmV3X3Njb3BlKTsKICNlbmRpZgogICAgIERFRklORV9PUENPREUo
b3BfcHVzaF9uZXdfc2NvcGUpIHsKLSAgICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSBwcm9wZXJ0
eShpZCkgdmFsdWUocikKKyAgICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSB0ZW1wbChyKSB2YWx1
ZShyKQogICAgICAgICAgCi0gICAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVP
YmplY3Qgd2l0aCBwcm9wZXJ0eSBzZXQgdG8gdmFsdWUuICBUaGF0IHNjb3BlCi0gICAgICAgICAg
IG9iamVjdCBpcyB0aGVuIHB1c2hlZCBvbnRvIHRoZSBTY29wZUNoYWluLiAgVGhlIHNjb3BlIG9i
amVjdCBpcyB0aGVuIHN0b3JlZAotICAgICAgICAgICBpbiBkc3QgZm9yIEdDLgorICAgICAgICAg
ICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3BlT2JqZWN0IHdob3NlIG9uZSBwcm9wZXJ0eSBp
cyBzZXQgdG8KKyAgICAgICAgICAgdmFsdWUuICBUaGF0IHNjb3BlIG9iamVjdCBpcyB0aGVuIHB1
c2hlZCBvbnRvIHRoZSBTY29wZUNoYWluLiAgVGhlCisgICAgICAgICAgIHNjb3BlIG9iamVjdCBp
cyB0aGVuIHN0b3JlZCBpbiBkc3QgZm9yIEdDLgogICAgICAgICAgKi8KICAgICAgICAgY2FsbEZy
YW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDcwNTRiNTM0
MTU2NDc0OTZlMDcxZmFhZDZjYjlhY2U4NDA1MjAzZmEuLjNiYjYwMGFjMWQxYmE5OWY1ZTc4YTA3
MDA4NDM1ZWFjZjRlZDMwYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcApAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fanNudW1iZXIo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1c2hf
bmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMik7CiAgICAg
c3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCAwY2VhNDll
ODJmMzJkZmEzMDIzY2U2MWMyYmRlYjI2NWY3ZmFiNjA1Li41ZDU4NjVmOWU1ZmMwNGQ2ZGQ2MjE4
M2QxMjU4NGQwZWJmYmFmYmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCkBAIC0xMzMxLDcgKzEzMzEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYQogdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
cHVzaF9uZXdfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIo
Jm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggNDEzNjE0
ZTk0NjBlOWRjNWU3NTBiNGUwNDFlOTY3NDBkMGVjOTdlNC4uYTczMmZlNjcyYjBiNWUxYjFlOWU4
NzJkNmQyMTY4MTM5MGJhMzM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKQEAgLTM1MzAsMTEgKzM1MzAsMTUgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3Qq
LCBvcF9wdXNoX25ld19zY29wZSkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVh
dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCks
IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIEFTU0VSVChz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBz
Y29wZVRlbXBsYXRlID0gYXNPYmplY3Qoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Cisg
ICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIGNhbGxGcmFt
ZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChzY29wZSkpOwot
ICAgIHJldHVybiBzY29wZTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRpY19j
YXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKS0+Y2xvbmUoY2FsbEZyYW1l
LCB2YWx1ZSk7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKG5ld1Njb3BlKSk7CisgICAgcmV0dXJuIG5ld1Njb3BlOwogfQogCiBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9qbXBfc2NvcGVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5kZXggZjU2OGQ0MmE0NmYyMThjZmE0ZThiY2U4MjNhMjlk
Yjk3YTRjNDZlNi4uMzdjODRmMDk4MTQwYTU1ZTZhYWRiYTg4YmE1YzA1ZWFiODRkZGI2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xOTIsNiArMTkyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNHbG9iYWxPYmplY3QoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc1ZhcmlhYmxlT2JqZWN0KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNB
Y3RpdmF0aW9uT2JqZWN0KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNTdGF0aWNTY29wZU9iamVj
dCgpIGNvbnN0OwogICAgICAgICBib29sIGlzRXJyb3JJbnN0YW5jZSgpIGNvbnN0OwogICAgICAg
ICBib29sIGlzR2xvYmFsVGhpcygpIGNvbnN0OwogCkBAIC00MjAsNiArNDIxLDExIEBAIGlubGlu
ZSBib29sIEpTT2JqZWN0Ojppc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdAogICAgIHJldHVybiBz
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gQWN0aXZhdGlvbk9iamVjdFR5cGU7CiB9
CiAKK2lubGluZSBib29sIEpTT2JqZWN0Ojppc1N0YXRpY1Njb3BlT2JqZWN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IFN0YXRpY1Njb3Bl
T2JqZWN0VHlwZTsKK30KKwogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBF
cnJvckluc3RhbmNlVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKaW5kZXggODc3YWU1Yjg1Y2U2NGE1Y2NiN2E2ZGU3
N2JkZDgyYzU4MmRiYTM4NC4uNmY3OWRhMmM3OWMyZTUwY2QyNDdjNDUwZmEwZmM4NzYwOTQyZjBi
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29w
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKQEAgLTQxLDcgKzQxLDggQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKICAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykKKyAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlcnMsIHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUt
PnNpemUoKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNPYmpl
Y3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCmluZGV4IDIzYTNhY2FkNzhjZWU0ZTc2
MDc5ZTg5ZTJhYTQ1ZjA1NWZkNTJmZmYuLjRkNjFkNGY2NjhhNDRhNDQzMGJlMWMwMWU3M2E0ZDFi
MGQ2NTZhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTM0LDEzICszNCw1NyBAQCBuYW1lc3BhY2UgSlNDewogICAg
IHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICAg
ICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBz
Y29wZU9iamVjdCA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KCpleGVj
LT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgc2NvcGVP
YmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBhdHRyaWJ1dGVz
KTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRTeW1ib2xUYWJsZT4gdGFibGUgPSBTaGFyZWRT
eW1ib2xUYWJsZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBz
Y29wZU9iamVjdCA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KCpleGVj
LT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMsIHRhYmxlLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKICAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICAgICAgfQogCisgICAgICAg
IHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9
IGNyZWF0ZShleGVjKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5hZGRWYXJpYWJsZShuYW1l
LCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5tX3JlZ2lzdGVycyA9ICZz
Y29wZU9iamVjdC0+bV9zaW5nbGVSZWdpc3RlclN0b3JlOworICAgICAgICAgICAgc2NvcGVPYmpl
Y3QtPm1fc2luZ2xlUmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzY29wZU9i
amVjdCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogY2xvbmUoRXhlY1N0YXRlKiBleGVjKQor
ICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0ICpzY29wZU9iamVjdCA9
IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBK
U1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMsIG1fc3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYg
KG1fc3ltYm9sVGFibGUtPnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgc2NvcGVPYmpl
Y3QtPm1fcmVnaXN0ZXJzID0gJnNjb3BlT2JqZWN0LT5tX3NpbmdsZVJlZ2lzdGVyU3RvcmU7Cisg
ICAgICAgICAgICAgICAgc2NvcGVPYmplY3QtPm1fc2luZ2xlUmVnaXN0ZXJTdG9yZS5zZXRVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgT3duQXJyYXlQ
dHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0QXJyYXlQdHIo
bmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX3N5bWJvbFRhYmxlLT5zaXplKCldKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fc3ltYm9sVGFibGUtPnNpemUoKTsgaSsr
KQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiAqcmVnaXN0ZXJzID0gcmVnaXN0
ZXJBcnJheS5nZXQoKTsKKyAgICAgICAgICAgICAgICBzY29wZU9iamVjdC0+c2V0UmVnaXN0ZXJz
KHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBK
U1N0YXRpY1Njb3BlT2JqZWN0KiBjbG9uZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaW5pdCkK
KyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVPYmplY3Qg
PSBjbG9uZShleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZU9iamVjdC0+c3ltYm9sVGFi
bGUoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+bV9zaW5nbGVSZWdp
c3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHNjb3BlT2JqZWN0LCBpbml0KTsKKyAg
ICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBh
ZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzKTsKKyAgICAgICAgICAg
IGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
KCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlkeCwgYXR0cmlidXRlcykpOwor
ICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgpID09IGlkeCArIDEpOworICAg
ICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgYm9vbCBpc0R5bmFt
aWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKQEAgLTU0LDIy
ICs5OCwxNyBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVy
U3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUoKS5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAg
ICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgSlNTdGF0
aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2hhcmVkU3ltYm9sVGFi
bGU+IHRhYmxlKQorICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCB0YWJs
ZS5nZXQoKSwgMCkKKyAgICAgICAgICAgICwgbV9zeW1ib2xUYWJsZSh0YWJsZSkKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTeW1ib2xUYWJsZSBtX3N5bWJvbFRhYmxl
OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOworICAgICAg
ICBSZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX3NpbmdsZVJlZ2lzdGVyU3RvcmU7IC8vIEZvciB0aGUgY29tbW9u
IGNhc2UgaW4gd2hpY2ggb25seSBvbmUgdmFsdWUgaXMgYmVpbmcgYm91bmQuCiAgICAgfTsKIAog
ICAgIGlubGluZSBib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wm
KSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122959</attachid>
            <date>2012-01-18 10:30:29 -0800</date>
            <delta_ts>2012-01-18 10:42:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74633-20120118193027.patch</filename>
            <type>text/plain</type>
            <size>19439</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YjkwMzk2ZGRkNTk3NmI2ZWZiMGQ2MDA1OTZlZjg0MTk4NGY2YzIwLi44MzU2NTM2ZWYzOGRmZTU4
MDUwNzkxNjA4MzM4NWU3ODE4OWJmNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1NiBAQAogMjAxMS0xMi0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgQWxsb3cgSlNTdGF0aWNTY29wZSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjMz
CisKKyAgICAgICAgVGhpcyBwYXRjaCBnZW5lcmFsaXplcyBKU1N0YXRpY1Njb3BlIHRvIGJlIGFi
bGUgdG8gYmluZCBtb3JlIHRoYW4KKyAgICAgICAgb25lIHZhcmlhYmxlLiAgQXMgdGhlIHN5bWJv
bCB0YWJsZSBjb3VsZCBncm93IGxhcmdlLCBpbnN0ZWFkIG9mCisgICAgICAgIGNvcHlpbmcgaXQg
YWxsIHRoZSB0aW1lLCB3ZSByZWZjb3VudCBpdC4gIEEgInRlbXBsYXRlIgorICAgICAgICBKU1N0
YXRpY1Njb3BlIGNhbiBiZWdldCBvdGhlciBzY29wZSBvYmplY3RzIHRoYXQgc2hhcmUgdGhlIHN5
bWJvbAorICAgICAgICB0YWJsZSwgYnV0IGhhdmUgdGhlaXIgb3duIHN0b3JhZ2UuICBJdCBhbHNv
IGNoYW5nZXMgdGhlCisgICAgICAgIHB1c2hfbmV3X3Njb3BlIG9wIHRvIHRha2UgYSB0ZW1wbGF0
ZSBzY29wZSBhcyBhbiBhcmd1bWVudCBpbnN0ZWFkCisgICAgICAgIG9mIGFuIGlkZW50aWZpZXIu
ICBFdmVudHVhbGx5IHdlIHdpbGwgcmVtb3ZlIHRoZSAidmFsdWUiIGFyZyBmcm9tCisgICAgICAg
IHB1c2hfbmV3X3Njb3BlLCBhbmQgaW5zdGVhZCBiaW5kIHRoZSB2YXJpYWJsZSB3aXRoIGFuCisg
ICAgICAgIG9wX3B1dF9zY29wZWRfdmFyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSk6IEhhdmUgYSBuZXcgdmFyaWFu
dCB0aGF0IG1ha2VzCisgICAgICAgIGFuICJlbXB0eSIgc2NvcGUgLS0gYSBzY29wZSB0ZW1wbGF0
ZS4KKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6YWRkVmFyaWFibGUpOiBDYWxs
IHRoaXMgbWV0aG9kIHRvIGFkZAorICAgICAgICBzbG90cyAoc3ltYm9sIHRhYmxlIGVudHJpZXMp
IHRvIHNjb3BlIHRlbXBsYXRlcy4KKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6
Y2xvbmUpOiBUaGlzIG1ldGhvZCB3aWxsIGNsb25lIGEgc2NvcGUKKyAgICAgICAgdGVtcGxhdGUg
YW5kIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGl0cyB2YXJpYWJsZXMsIHRob3VnaCB3aXRob3V0Cisg
ICAgICAgIGFsbG9jYXRpb24gaW4gdGhlIGNvbW1vbiBjYXNlIG9mIG9ubHkgYmluZGluZyBvbmUg
dmFyaWFibGUuCisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2Nv
cGVPYmplY3QpOiBBZGFwdCB0byB0YWtlIGEKKyAgICAgICAgcmVmZXJlbmNlIG9uIGEgc2hhcmVk
IHN5bWJvbCB0YWJsZS4KKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKTogVmlz
aXQgYWxsIHRoZQorICAgICAgICByZWdpc3RlcnMhCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBVcGRhdGUgZm9yIG5ldworICAgICAgICBv
cF9wdXNoX25ld19zY29wZS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29wZSk6IFRha2UgYSBy
ZWdpc3RlciBmb3IKKyAgICAgICAgdGhlIHNjb3BlIHRlbXBsYXRlLCBpbnN0ZWFkIG9mIGFuIElE
LgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlND
OjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBDcmVhdGUgYSBzY29wZSB0ZW1wbGF0ZSwgZW1pdCBh
CisgICAgICAgIGxvYWQsIGFuZCBwbHVtYiB0aGUgcmVzdWx0aW5nIHJlZ2lzdGVyIGRvd24gdG8g
ZW1pdFB1c2hOZXdTY29wZS4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6IEluc3Rl
YWQgb2YgbWFraW5nIGEgbmV3CisgICAgICAgIHNjb3BlIGZyb20gc2NyYXRjaCwgY2xvbmUgb25l
IGZyb20gdGhlIGluY29taW5nIHRlbXBsYXRlLgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
cHJpdmF0ZWV4ZWN1dGUpOiBBZGFwdCBhIGNvbW1lbnQuCisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcCAoSlNDOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOiBJbnN0ZWFkIG9mIHRha2luZworICAg
ICAgICB0aGUgaWRlbnRpZmllciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRha2UgdGhlIHNjb3Bl
IHRlbXBsYXRlLgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcCAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHVzaF9uZXdfc2NvcGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXNoX25ld19zY29wZSk6CisgICAgICAgIEFkYXB0IHRvIGN0aV9v
cF9wdXNoX25ld19zY29wZSBjaGFuZ2UuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oIChK
U0M6OkpTT2JqZWN0Ojppc1N0YXRpY1Njb3BlT2JqZWN0KTogTmV3CisgICAgICAgIGhlbHBlci4K
KworMjAxMS0xMi0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisKICAgICAgICAg
QXZvaWQgZG91YmxlLWxvb2t1cCB3aGVuIHNldHRpbmcgc3RhdGljLXNjb3BlZCB2YXJzIGluIHN0
cmljdCBtb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDYyOAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CmluZGV4IDhmMjgzZDgyNmNmMDcyMmQwZmM4NjI2Njg0MzVjMmQyNTkyNTRjNTMuLjc4NjllOTky
NTliNWVjNzE0NDQ4ZjJiMTM0ZTAzNWZlMzUwNjIxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMjE5LDkgKzEyMTksOSBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHVzaF9uZXdfc2Nv
cGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIHB1c2hfbmV3X3Njb3Bl
IFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
LCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludGYoIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xu
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIyKS5kYXRhKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IGI4YWUwNDJiODVjOTNiNDNiN2UyOWQ2ODllZjg0Y2QwOTg1Yjdm
MWUuLjI1MTI5M2NkOWNjNDY5N2YyMWU5OGYxZmE4YTJlMzU2NjA1MDgzMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC0yMjMzLDggKzIyMzMsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
U3Vicm91dGluZVJldHVybihSZWdpc3RlcklEKiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEICpzY29wZVRlbXBsYXRl
LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKKyAgICAvLyBGSVhNRTogVHJhY2sgdGhlIHNjb3BlIHNv
IHRoYXQgZmluZFNjb3BlZFByb3BlcnR5IGNhbiBEVFJULgogICAgIENvbnRyb2xGbG93Q29udGV4
dCBjb250ZXh0OwogICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKICAgICBtX3Nj
b3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKQEAgLTIyNDIsNyArMjI0Myw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wCiAKICAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3Bl
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc2NvcGVUZW1wbGF0ZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHZhbHVlLT5pbmRleCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDZkYWYyNzcxNTk1OGE5
ZjM4NTlmMGYxZGRhY2QxZmM4NTk3ZTZlODEuLjY3YjMxMTY0MmI2YTAyZGIwMWQwNmQ0YWRiMTBi
MmM3NzMxZGM1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTQ0Miw3ICs0NDIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFVTdHJp
bmcmIG1lc3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQg
KnNjb3BlVGVtcGxhdGUsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UG9w
U2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAppbmRleCBkNmYwOWU5NDk0NDM3YzVhOWI1YzgxODIyZTk5MDNmM2ZkZWFj
OTFjLi42YTc0YWQ3Zjc0YmJkYjNlNzVjNWNhNzViZDQxODM5MTBlYTEzNTM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBA
IC0xOTIyLDggKzE5MjIsMTIgQEAgUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChkeW5hbWljU2NvcGVPYmplY3QuZ2V0KCksIG1fZXhjZXB0
aW9uSWRlbnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgZHluYW1pY1Njb3BlT2JqZWN0Lmdl
dCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaFNjb3BlKGV4Y2VwdGlvblJlZ2lz
dGVyLmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgbV9leGNlcHRpb25JZGVudCwgZXhj
ZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogc2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNy
ZWF0ZShnZW5lcmF0b3Iuc2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7
CisgICAgICAgICAgICBzY29wZVRlbXBsYXRlLT5hZGRWYXJpYWJsZShtX2V4Y2VwdGlvbklkZW50
LCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wbCA9IGdl
bmVyYXRvci5lbWl0TG9hZCgwLCBKU1ZhbHVlKHNjb3BlVGVtcGxhdGUpKTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaE5ld1Njb3BlKGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0ZW1w
bC5nZXQoKSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICB9CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0UG9wU2NvcGUoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjYXRjaEVuZExhYmVs
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCmluZGV4IGQzMDY3OWYxZjkxMGYyZGMzNmUyZjBmNzAzOGZiODgyN2Y1OGJmNzQu
LmU5OGExMmM3Mjg2NWUzNjhlMDM0ZTg4ODkzOTMxZDliZDZlNjdmOTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTQzOSwx
MyArMTQzOSwxNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVnSG9vawogTkVWRVJfSU5MSU5FIFNjb3Bl
Q2hhaW5Ob2RlKiBJbnRlcnByZXRlcjo6Y3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCiB7CiAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIElkZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KHZQQ1syXS51Lm9wZXJhbmQpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIodlBD
WzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0
ZSk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKHNjb3BlKTsKKyAg
ICBpbnQgdGVtcGwgPSB2UENbMl0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IHZQQ1szXS51
Lm9wZXJhbmQ7CisKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5yKHRlbXBsKS5qc1ZhbHVlKCkuaXNP
YmplY3QoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSBhc09iamVjdChjYWxsRnJh
bWUtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3Rh
dGljU2NvcGVPYmplY3QoKSk7CisgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBz
dGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSktPmNsb25lKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOworICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7CiAKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCktPnB1c2goc2NvcGUpOworICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+cHVzaChuZXdTY29wZSk7CiB9CiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0
cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90KQpAQCAtNDg4OCwxMSArNDg5MSwxMSBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
ICAgIGdvdG8gKigmJnNraXBfbmV3X3Njb3BlKTsKICNlbmRpZgogICAgIERFRklORV9PUENPREUo
b3BfcHVzaF9uZXdfc2NvcGUpIHsKLSAgICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSBwcm9wZXJ0
eShpZCkgdmFsdWUocikKKyAgICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSB0ZW1wbChyKSB2YWx1
ZShyKQogICAgICAgICAgCi0gICAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVP
YmplY3Qgd2l0aCBwcm9wZXJ0eSBzZXQgdG8gdmFsdWUuICBUaGF0IHNjb3BlCi0gICAgICAgICAg
IG9iamVjdCBpcyB0aGVuIHB1c2hlZCBvbnRvIHRoZSBTY29wZUNoYWluLiAgVGhlIHNjb3BlIG9i
amVjdCBpcyB0aGVuIHN0b3JlZAotICAgICAgICAgICBpbiBkc3QgZm9yIEdDLgorICAgICAgICAg
ICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3BlT2JqZWN0IHdob3NlIG9uZSBwcm9wZXJ0eSBp
cyBzZXQgdG8KKyAgICAgICAgICAgdmFsdWUuICBUaGF0IHNjb3BlIG9iamVjdCBpcyB0aGVuIHB1
c2hlZCBvbnRvIHRoZSBTY29wZUNoYWluLiAgVGhlCisgICAgICAgICAgIHNjb3BlIG9iamVjdCBp
cyB0aGVuIHN0b3JlZCBpbiBkc3QgZm9yIEdDLgogICAgICAgICAgKi8KICAgICAgICAgY2FsbEZy
YW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY1YmUyNzlh
NjI5YzNlMWZjNmQ1NjJlNDlhYWIzZmFlYTA4NDU5NTQuLjIyMWE5YjA4NWQ4N2QxOTU5Y2ViMDQ3
Yzc3ZTJjMTA4YzkzNGI1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcApAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fanNudW1iZXIo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1c2hf
bmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMik7CiAgICAg
c3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCA5ZDFjYmNl
OGRlOTZjMWRkMWE3ZDJjYjBmNTYzOGY4YWE2ZGQyOTg5Li44MzFmOWY2YTRiMWI4MTI2OWNmMWRi
N2I3Y2RjMzQxZDk3YjBlNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCkBAIC0xMzMxLDcgKzEzMzEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYQogdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
cHVzaF9uZXdfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIo
Jm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggZWM0YWUx
YzJlYjkxMDI1OGJlMjgyOTliYmUyOTA5NzJiNzI2ZDc5Ni4uN2U1ZTBhYjUwZTRmNzI1MjUzMmE4
YjdjMDNiYmIyZTI3ZjE1Yzg4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKQEAgLTMzOTUsMTEgKzMzOTUsMTUgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3Qq
LCBvcF9wdXNoX25ld19zY29wZSkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVh
dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCks
IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIEFTU0VSVChz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBz
Y29wZVRlbXBsYXRlID0gYXNPYmplY3Qoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Cisg
ICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIGNhbGxGcmFt
ZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChzY29wZSkpOwot
ICAgIHJldHVybiBzY29wZTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRpY19j
YXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKS0+Y2xvbmUoY2FsbEZyYW1l
LCB2YWx1ZSk7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKG5ld1Njb3BlKSk7CisgICAgcmV0dXJuIG5ld1Njb3BlOwogfQogCiBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9qbXBfc2NvcGVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5kZXggNmQ0NWU4MmQ5NGQyZmU0YmZmMzRmY2ZhNjlhOThl
MzViNjkzNGY1OS4uZTEyZTlmMDgxN2FiZTZjNzg0OTc5ODY3YzUxMTFiNDlkMWM3ZTU3MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0yMDUsNiArMjA1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNHbG9iYWxPYmplY3QoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc1ZhcmlhYmxlT2JqZWN0KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNB
Y3RpdmF0aW9uT2JqZWN0KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNTdGF0aWNTY29wZU9iamVj
dCgpIGNvbnN0OwogICAgICAgICBib29sIGlzRXJyb3JJbnN0YW5jZSgpIGNvbnN0OwogICAgICAg
ICBib29sIGlzR2xvYmFsVGhpcygpIGNvbnN0OwogCkBAIC00MzQsNiArNDM1LDExIEBAIGlubGlu
ZSBib29sIEpTT2JqZWN0Ojppc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdAogICAgIHJldHVybiBz
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gQWN0aXZhdGlvbk9iamVjdFR5cGU7CiB9
CiAKK2lubGluZSBib29sIEpTT2JqZWN0Ojppc1N0YXRpY1Njb3BlT2JqZWN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IFN0YXRpY1Njb3Bl
T2JqZWN0VHlwZTsKK30KKwogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBF
cnJvckluc3RhbmNlVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKaW5kZXggZTg3MDVhNGZiMzIzZDc3YTAwYzgzYWZk
NDFkYjljYWM3MzhjYTBiZi4uNmNjYTcxYWQxYTM3YTFjZGFlM2JmMGJjZmQ5YzYyMzQwOTgxOWMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29w
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKQEAgLTQ2LDcgKzQ2LDggQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKICAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykKKyAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlcnMsIHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUt
PnNpemUoKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNPYmpl
Y3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCmluZGV4IGJiZjAzYTM0NzNhMjU3Njlk
MmI0MjU5Yjc1MGY2YmY3ZmZkNDBmODkuLjA5ODRiNjMwMjMyZTY5ZWNkNWVlZDU2MTI0NmIzMmU2
ZDcxMjNhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTM0LDEzICszNCw1NyBAQCBuYW1lc3BhY2UgSlNDewogICAg
IHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICAg
ICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBz
Y29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmpl
Y3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMpOwotICAgICAgICAg
ICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBh
dHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRTeW1ib2xUYWJsZT4gdGFibGUg
PSBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3Bl
T2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGlj
U2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMsIHRh
YmxlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAg
ICAgICAgfQogCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiBzY29wZU9iamVjdCA9IGNyZWF0ZShleGVjKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0
LT5hZGRWYXJpYWJsZShuYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0
LT5tX3JlZ2lzdGVycyA9ICZzY29wZU9iamVjdC0+bV9zaW5nbGVSZWdpc3RlclN0b3JlOworICAg
ICAgICAgICAgc2NvcGVPYmplY3QtPm1fc2luZ2xlUmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBzY29wZU9iamVjdCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHNjb3Bl
T2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogY2xvbmUo
RXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0ICpzY29wZU9iamVjdCA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+
KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMsIG1fc3ltYm9sVGFibGUp
OworICAgICAgICAgICAgaWYgKG1fc3ltYm9sVGFibGUtPnNpemUoKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVPYmplY3QtPm1fcmVnaXN0ZXJzID0gJnNjb3BlT2JqZWN0LT5tX3Npbmds
ZVJlZ2lzdGVyU3RvcmU7CisgICAgICAgICAgICAgICAgc2NvcGVPYmplY3QtPm1fc2luZ2xlUmVn
aXN0ZXJTdG9yZS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJh
eSA9IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX3N5bWJvbFRhYmxl
LT5zaXplKCldKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fc3ltYm9s
VGFibGUtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlckFycmF5W2ld
LnNldFVuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiAq
cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheS5nZXQoKTsKKyAgICAgICAgICAgICAgICBzY29wZU9i
amVjdC0+c2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAg
ICAgIH0KKworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjbG9uZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9i
amVjdCAqc2NvcGVPYmplY3QgPSBjbG9uZShleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29w
ZU9iamVjdC0+c3ltYm9sVGFibGUoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBzY29wZU9i
amVjdC0+bV9zaW5nbGVSZWdpc3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHNjb3Bl
T2JqZWN0LCBpbml0KTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAg
fQorCisgICAgICAgIGludCBhZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0
ZXJzKTsKKyAgICAgICAgICAgIGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlk
eCwgYXR0cmlidXRlcykpOworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgp
ID09IGlkeCArIDEpOworICAgICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAg
ICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNv
bnN0OwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVj
U3RhdGUqKTsKQEAgLTU0LDI0ICs5OCwxOSBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
ICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFs
dWUpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUoKS5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5
bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQogICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRl
KiBleGVjKQotICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1i
b2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAx
KSkKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQ
dHI8U2hhcmVkU3ltYm9sVGFibGU+IHRhYmxlKQorICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3Ry
dWN0dXJlLmdldCgpLCB0YWJsZS5nZXQoKSwgMCkKKyAgICAgICAgICAgICwgbV9zeW1ib2xUYWJs
ZSh0YWJsZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKIAotICAgICAgICBTeW1ib2xUYWJsZSBtX3N5bWJvbFRhYmxlOwotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOworICAgICAgICBSZWZQ
dHI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX3NpbmdsZVJlZ2lzdGVyU3RvcmU7IC8vIEZvciB0aGUgY29tbW9uIGNhc2Ug
aW4gd2hpY2ggb25seSBvbmUgdmFsdWUgaXMgYmVpbmcgYm91bmQuCiAgICAgfTsKIAogICAgIGlu
bGluZSBib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmKSBjb25z
dAo=
</data>
<flag name="review"
          id="123889"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>