<?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>22269</bug_id>
          
          <creation_ts>2008-11-14 12:05:38 -0800</creation_ts>
          <short_desc>Reduce PropertyMap usage</short_desc>
          <delta_ts>2008-11-14 15:36:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98814</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-14 12:05:38 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98815</commentid>
    <comment_count>1</comment_count>
      <attachid>25174</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-14 12:06:41 -0800</bug_when>
    <thetext>Created attachment 25174
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98822</commentid>
    <comment_count>2</comment_count>
      <attachid>25174</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-14 14:11:25 -0800</bug_when>
    <thetext>Comment on attachment 25174
patch

&gt; +    RefPtr&lt;StructureID&gt; structureID = StructureID::addPropertyTransitionToExistingStructure(m_structureID, propertyName, attributes, offset);
&gt; +    if (structureID) {

It would make the long line even longer, but this would be a great case for putting the assignment into the if statement to make it clear you can&apos;t use this outside the if statement. Also is this a rare enough case that it should go into a separate function? Or maybe a separate inline function just for code clarity?

&gt; -    RefPtr&lt;StructureID&gt; structureID = StructureID::addPropertyTransition(m_structureID, propertyName, attributes, offset);
&gt; +    structureID = StructureID::addPropertyTransition(m_structureID, propertyName, attributes, offset);

If you put the structureID into the if then you wouldn&apos;t have to change this line, and in fact it would be ever so slightly more efficient because you&apos;d save one branch and deref.

&gt; +    // Taken  from http://www.cs.utk.edu/~vose/c-stuff/bithacks.html

Extra space here in the comment.

&gt; +    // Search for the last StructureID with a property table 

Please use periods if you use capitals.

&gt; +            rehashPropertyMapHashTable(sizeForKeyCount(m_offset + 1)); // This could be made more efficient by combinding with the copy above 

Ditto. Also misspells combining.

&gt; +    for (int i = structures.size() - 2; i &gt;= 0; --i) {

ptrdiff_t instead of int? I can never figure out what we should do about 64 vs. 32 bit.

&gt; +        structure-&gt;m_nameInPrevious-&gt;ref();
&gt; +        PropertyMapEntry entry(structure-&gt;m_nameInPrevious, structure-&gt;m_offset, structure-&gt;m_attributesInPrevious, ++m_propertyTable-&gt;lastIndexUsed); 
&gt; +        insertIntoPropertyMapHashTable(entry);

I wish there was a way to put that ref call somewhere lower level so it was more obvious it was balanced by deref.

&gt; +    // deleted offsets vector) before transistioning from dictionary. 

Spelling error in the word &quot;transitioning&quot;.

Does this get thoroughly enough tested by existing tests, or do we need new tests?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98827</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-14 15:36:34 -0800</bug_when>
    <thetext>Landed in r38407.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25174</attachid>
            <date>2008-11-14 12:06:41 -0800</date>
            <delta_ts>2008-11-14 14:11:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29654</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NDAz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAKKzIwMDgtMTEt
MTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjI2OQorICAgICAgICBSZWR1Y2UgUHJvcGVydHlNYXAgdXNhZ2UK
KworICAgICAgICBGcm9tIG9ic2VydmF0aW9uIG9mIFN0cnVjdHVyZUlEIHN0YXRpc3RpY3MsIGl0
IGJlY2FtZSBjbGVhciB0aGF0IG1hbnkKKyAgICAgICAgU3RydWN0dXJlSUQncyB3ZXJlIG5vdCBi
ZWluZyB1c2VkIGFzIFN0cnVjdHVyZUlEcyB0aGVtc2VsdmVzLCBidXQgcmF0aGVyCisgICAgICAg
IG9ubHkgYmVpbmcgbmVjZXNzYXJ5IGFzIGxpbmtzIGluIHRoZSB0cmFuc2l0aW9uIGNoYWluLiAg
QWNrbm93bGVkZ2luZyB0aGlzCisgICAgICAgIGFuZCB0aGF0IFByb3BlcnR5TWFwcyBzdG9yZWQg
aW4gU3RydWN0dXJlSURzIGNhbiBiZSB0cmVhdGVkIGFzIGNhY2hlcywgdGhhdAorICAgICAgICBp
cyB0aGF0IHRoZXkgY2FuIGJlIHJlY29uc3RydWN0ZWQgb24gZGVtYW5kLCBpdCBiZWNhbWUgY2xl
YXIgdGhhdCB3ZSBjb3VsZAorICAgICAgICByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBv
ZiBTdHJ1Y3R1cmVJRHMgYnkgb25seSBrZWVwaW5nIFByb3BlcnR5TWFwcworICAgICAgICBmb3Ig
dGhlIFN0cnVjdHVyZUlEcyB0aGF0IG5lZWQgdGhlbSB0aGUgbW9zdC4KKworICAgICAgICBUaGUg
c3BlY2lmaWMgc3RyYXRlZ3kgdXNlZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBTdHJ1Y3R1cmVJ
RHMgd2l0aAorICAgICAgICBQcm9wZXJ0eU1hcHMgaXMgdG8gdGFrZSB0aGUgcHJldmlvdXMgU3Ry
dWN0dXJlSURzIFByb3BlcnR5TWFwIHdoZW4gaW5pdGlhbGx5CisgICAgICAgIHRyYW5zaXRpb25p
bmcgKGFkZFByb3BlcnR5VHJhbnNpdGlvbikgZnJvbSBpdCBhbmQgY2xlYXJpbmcgb3V0IHRoZSBw
b2ludGVyIAorICAgICAgICBpbiB0aGUgcHJvY2Vzcy4gIFRoZSBuZXh0IHRpbWUgd2UgbmVlZCB0
byBkbyB0aGUgc2FtZSB0cmFuc2l0aW9uLCBmb3IgaW5zdGFuY2UKKyAgICAgICAgcmVwZWF0ZWQg
Y2FsbHMgdG8gdGhlIHNhbWUgY29uc3RydWN0b3IsIHdlIHVzZSB0aGUgbmV3IGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUKKyAgICAgICAgZmlyc3QsIHdoaWNoIGFsbG93
cyB1cyBub3QgdG8gbmVlZCB0aGUgUHJvcGVydHlNYXAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9w
ZXJ0eQorICAgICAgICBleGlzdHMgYWxyZWFkeSwgc2luY2UgYSB0cmFuc2l0aW9uIHRvIHRoYXQg
cHJvcGVydHkgd291bGQgcmVxdWlyZSBpdCBub3QgYWxyZWFkeQorICAgICAgICBiZSBwcmVzZW50
IGluIHRoZSBTdHJ1Y3R1cmVJRC4gIFNob3VsZCB0aGVyZSBiZSBubyB0cmFuc2l0aW9uLCB0aGUg
UHJvcGVydHlNYXAKKyAgICAgICAgY2FuIGJlIGNvbnN0cnVjdGVkIG9uIGRlbWFuZCAodmlhIGJ1
aWxkUHJvcGVydHlNYXApIHRvIGRldGVybWluZSBpZiB0aGUgcHV0IGlzIGEgCisgICAgICAgIHJl
cGxhY2Ugb3IgYSB0cmFuc2l0aW9uIHRvIGEgbmV3IFN0cnVjdHVyZUlELgorCisgICAgICAgIFJl
ZHVjZXMgbWVtb3J5IHVzZSBvbiBNZW1idXN0ZXIgaGVhZCB0ZXN0ICgzMCBwYWdlcyBvcGVuKSBi
eSB+MTVNQi4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3QpOiBGaXJz
dCB1c2UgYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZQorICAgICAgICBz
byB0aGF0IHdlIGNhbiBhdm9pZCBidWlsZGluZyB0aGUgUHJvcGVydHlNYXAgb24gc3Vic2VxdWVu
dCBzaW1pbGFyIG9iamVjdAorICAgICAgICBjcmVhdGlvbnMuCisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVudHJ5OjpQ
cm9wZXJ0eU1hcEVudHJ5KTogQWRkIHZlcnNpb24gb2YgY29uc3RydWN0b3Igd2hpY2ggdGFrZXMK
KyAgICAgICAgYWxsIHZhbHVlcyB0byBiZSB1c2VkIHdoZW4gbGF6aWx5IGJ1aWxkaW5nIHRoZSBQ
cm9wZXJ0eU1hcC4gCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJRC5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUlEOjpkdW1wU3RhdGlzdGljcyk6IEFkZCBzdGF0aXN0aWNzIG9uIHRo
ZSBudW1iZXIgb2YgU3RydWN0dXJlSURzCisgICAgICAgIHdpdGggUHJvcGVydHlNYXBzLgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6U3RydWN0dXJlSUQpOiBSZW5hbWUgbV9jYWNoZWRUcmFu
c2lzdGlvbk9mZnNldCB0byBtX29mZnNldAorICAgICAgICAoSlNDOjppc1Bvd2VyT2YyKToKKyAg
ICAgICAgKEpTQzo6bmV4dFBvd2VyT2YyKToKKyAgICAgICAgKEpTQzo6c2l6ZUZvcktleUNvdW50
KTogUmV0dXJucyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiBhIFByb3BlcnR5TWFwIGZvciBhIGtleSBj
b3VudC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmJ1aWxkUHJvcGVydHlNYXApOiBCdWls
ZHMgdGhlIFByb3BlcnR5TWFwIGZyb20gaXRzIHByZXZpb3VzIHBvaW50ZXIgY2hhaW4uCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlKTogT25seSB0cmFuc2l0aW9ucyBpZiB0aGVyZSBpcyBhCisgICAgICAgIGFuIGV4aXN0
aW5nIHRyYW5zaXRpb24uCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb24pOiBJbnN0ZWFkIG9mIGFsd2F5cyBjb3B5aW5nIHRoZSBQcm9wZXJ5TWFwLCB0cnkg
YW5kIHRha2UKKyAgICAgICAgaXQgZnJvbSBpdCBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRDo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKTogU2ltcGxpZnkgYnkg
Y2FsbGluZyB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKCkgdG8gZG8KKyAgICAgICAgdHJhbnNpdGlv
biB3b3JrLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6Y2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbik6IEJ1aWxkIHRoZSBQcm9wZXJ0eU1hcCBpZiBuZWNlc3NhcnkgYmVmb3JlIHRyYW5zaXRp
b25pbmcKKyAgICAgICAgYmVjYXVzZSBvbmNlIHlvdSBoYXZlIHRyYW5zaXRpb25lZCwgeW91IHdp
bGwgbm90IGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgaXQgYWZ0ZXJ3YXJkcyBhcyB0aGVyZSBpcyBu
bworICAgICAgICBwcmV2aW91cyBwb2ludGVyLCBwaW5uaW5nIHRoZSBQcm9wZXJ5TWFwIGFzIHdl
bGwuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKTog
RGl0dG8uCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9u
KTogUGluIHRoZSBQcm9wZXJ0eU1hcCBzbyB0aGF0IGl0IGlzIG5vdCBkZXN0cm95ZWQgb24gZnVy
dGhlciB0cmFuc2l0aW9ucy4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmZyb21EaWN0aW9u
YXJ5VHJhbnNpdGlvbik6IFdlIGNhbiBvbmx5IHRyYW5zaXRpb24gYmFjayBmcm9tIGEgZGljdGlv
bmFyeSB0cmFuc2l0aW9uIGlmIHRoZXJlCisgICAgICAgIGFyZSBubyBkZWxldGVkIG9mZnNldHMu
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KTogQnVpbGQgUHJvcGVydHlNYXAgb24gZGVtYW5kcyBhbmQgcGluLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJRDo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6IERpdHRvLgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6Z2V0KTogQnVpbGQgb24gZGVtYW5kLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlUHJvcGVydHlNYXBIYXNoVGFibGUpOiBBZGQgdmVyc2lv
biBvZiBjcmVhdGUgdGhhdCB0YWtlcyBhIHNpemUKKyAgICAgICAgZm9yIG9uIGRlbWFuZCBidWls
ZGluZy4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmV4cGFuZFByb3BlcnR5TWFwSGFzaFRh
YmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OnJlaGFzaFByb3BlcnR5TWFwSGFzaFRh
YmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5h
bWVzSW50ZXJuYWwpOiBCdWlsZCBQcm9wZXJ0eU1hcCBvbiBkZW1hbmQuCisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmVJRC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6cHJvcGVydHlT
dG9yYWdlU2l6ZSk6IEFjY291bnQgZm9yIFN0cnVjdHVyZUlEcyB3aXRob3V0IFByb3BlcnR5TWFw
cy4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmlzRW1wdHkpOiBEaXR0by4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlSUQ6OmJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUlEOjpnZXQpOiBCdWlsZCBQcm9wZXJ0eU1hcCBvbiBkZW1hbmQKKwog
MjAwOC0xMS0xNCAgQ3NhYmEgT3N6dHJvZ29uYWMgIDxvc3ppQGluZi51LXN6ZWdlZC5odT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM4NDAzKQor
KysgSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAg
X19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0RVBOU183SlNWYQogX19aTjNKU0MxMUpTSW1t
ZWRpYXRlOHRvU3RyaW5nRVBOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTFKU0ltbWVkaWF0ZTlwcm90
b3R5cGVFUE5TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxMVByb2ZpbGVOb2Rl
NHNvcnRFUEZiUktOM1dURjZSZWZQdHJJUzBfRUVTNV9FCitfX1pOM0pTQzExU3RydWN0dXJlSUQx
NmJ1aWxkUHJvcGVydHlNYXBFdgogX19aTjNKU0MxMVN0cnVjdHVyZUlEMTdzdG9wSWdub3JpbmdM
ZWFrc0V2CiBfX1pOM0pTQzExU3RydWN0dXJlSUQxOHN0YXJ0SWdub3JpbmdMZWFrc0V2CiBfX1pO
M0pTQzExU3RydWN0dXJlSUQyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQUzBfUktOU18xMElkZW50
aWZpZXJFalJtCkBAIC0xMTQsNiArMTE1LDggQEAgX19aTjNKU0MxMVN0cnVjdHVyZUlEMjRmcm9t
RGljdGlvbmFyeVRyYQogX19aTjNKU0MxMVN0cnVjdHVyZUlEMjVjaGFuZ2VQcm90b3R5cGVUcmFu
c2l0aW9uRVBTMF9QTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExU3RydWN0dXJlSUQyN2dyb3dQcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eUV2CiBfX1pOM0pTQzExU3RydWN0dXJlSUQyOGFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb25FUktOU18xMElkZW50aWZpZXJFagorX19aTjNKU0MxMVN0cnVjdHVy
ZUlEM2dldEVSS05TXzEwSWRlbnRpZmllckVSagorX19aTjNKU0MxMVN0cnVjdHVyZUlENDBhZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlRVBTMF9SS05TXzEwSWRlbnRpZmll
ckVqUm0KIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJREMxRVBOU183SlNWYWx1ZUVSS05TXzhUeXBlSW5m
b0UKIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJREQxRXYKIF9fWk4zSlNDMTJEYXRlSW5zdGFuY2U0aW5m
b0UKQEAgLTMwMCw3ICszMDMsNiBAQCBfX1pOM1dURjhDb2xsYXRvcjE4c2V0T3JkZXJMb3dlckZp
cnN0RWIKIF9fWk4zV1RGOENvbGxhdG9yQzFFUEtjCiBfX1pOM1dURjhDb2xsYXRvckQxRXYKIF9f
Wk4zV1RGOGZhc3RGcmVlRVB2Ci1fX1pOSzNKU0MxMVN0cnVjdHVyZUlEM2dldEVSS05TXzEwSWRl
bnRpZmllckVSagogX19aTkszSlNDMTJEYXRlSW5zdGFuY2U3Z2V0VGltZUVSZFJpCiBfX1pOSzNK
U0MxMlN0cmluZ09iamVjdDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlND
MTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAzODQw
MykKKysrIHJ1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDggKzQwOSwy
MyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0IElkCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBzaXplX3Qgb2Zmc2V0OworICAgIHNpemVfdCBjdXJyZW50Q2Fw
YWNpdHkgPSBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOworICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShtX3N0cnVjdHVyZUlELCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYgKHN0cnVjdHVyZUlEKSB7CisgICAgICAgIGlm
IChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlSUQtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5
KCkpCisgICAgICAgICAgICBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShjdXJyZW50Q2FwYWNpdHks
IHN0cnVjdHVyZUlELT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKworICAgICAgICBBU1NF
UlQob2Zmc2V0IDwgc3RydWN0dXJlSUQtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOworICAg
ICAgICBtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdID0gdmFsdWU7CisgICAgICAgIHNsb3Quc2V0
TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXRXYXNUcmFuc2l0aW9u
KHRydWUpOworICAgICAgICBzZXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRC5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
Ci0gICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlSUQtPmdldChwcm9wZXJ0eU5hbWUsIGN1
cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBvZmZzZXQgPSBtX3N0cnVjdHVyZUlELT5nZXQocHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBXVEY6Om5vdEZv
dW5kKSB7CiAgICAgICAgIGlmIChjaGVja1JlYWRPbmx5ICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYg
UmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MTksOCArNDM0LDcgQEAgaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IG1fc3RydWN0dXJlSUQtPnByb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCk7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCA9
IFN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24obV9zdHJ1Y3R1cmVJRCwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgIHN0cnVjdHVyZUlEID0gU3RydWN0dXJl
SUQ6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihtX3N0cnVjdHVyZUlELCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIG9mZnNldCk7CiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmVJ
RC0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKICAgICAgICAgYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmVJRC0+cHJvcGVydHlTdG9yYWdlQ2FwYWNp
dHkoKSk7CiAKSW5kZXg6IHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDM4NDAzKQorKysg
cnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyAr
MzEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4OwogCi0gICAgICAgIFByb3BlcnR5TWFwRW50cnkoVVN0cmlu
Zzo6UmVwKiBrLCBpbnQgYSkKLSAgICAgICAgICAgIDoga2V5KGspCisgICAgICAgIFByb3BlcnR5
TWFwRW50cnkoVVN0cmluZzo6UmVwKiBrZXksIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgICAg
ICAgICA6IGtleShrZXkpCiAgICAgICAgICAgICAsIG9mZnNldCgwKQotICAgICAgICAgICAgLCBh
dHRyaWJ1dGVzKGEpCisgICAgICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAg
ICAgICAgICwgaW5kZXgoMCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgUHJvcGVy
dHlNYXBFbnRyeShVU3RyaW5nOjpSZXAqIGtleSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDoga2V5KGtleSkKKyAgICAg
ICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CiAg
ICAgfTsKIAogICAgIC8vIGxhc3RJbmRleFVzZWQgaXMgYW4gZXZlci1pbmNyZWFzaW5nIGluZGV4
IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9yZGVyIGl0ZW1zCkluZGV4OiBydW50aW1lL1N0cnVjdHVy
ZUlELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBydW50aW1lL1N0cnVjdHVyZUlELmNwcAkocmV2aXNpb24g
Mzg0MDMpCisrKyBydW50aW1lL1N0cnVjdHVyZUlELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksOCBAQCBzdGF0aWMgY29uc3QgaW50IHNtYWxsTWFwVGhyZXNob2xkID0gMTAyCiAvLyBi
ZWNvbWVzIHNtYWxsIGNvbXBhcmVkIHRvIHRoZSBpbmVmZmljaWVuY3kgb2YgaW5zZXJ0aW9uIHNv
cnQuCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgdGlueU1hcFRocmVzaG9sZCA9IDIwOwogCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgbmV3VGFibGVTaXplID0gMTY7CisKICNpZm5kZWYgTkRFQlVHCiBz
dGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgc3RydWN0dXJlSURDb3VudGVyKCJTdHJ1
Y3R1cmVJRCIpOwogCkBAIC04MCw2ICs4Miw3IEBAIHZvaWQgU3RydWN0dXJlSUQ6OmR1bXBTdGF0
aXN0aWNzKCkKICAgICB1bnNpZ25lZCBudW1iZXJMZWFmID0gMDsKICAgICB1bnNpZ25lZCBudW1i
ZXJVc2luZ1NpbmdsZVNsb3QgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlclNpbmdsZXRvbnMgPSAw
OworICAgIHVuc2lnbmVkIG51bWJlcldpdGhQcm9wZXJ0eU1hcHMgPSAwOwogICAgIHVuc2lnbmVk
IHRvdGFsUHJvcGVydHlNYXBzU2l6ZSA9IDA7CiAKICAgICBIYXNoU2V0PFN0cnVjdHVyZUlEKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpdmVTdHJ1Y3R1cmVJRFNldC5lbmQoKTsKQEAgLTk1LDE0
ICs5OCwxNyBAQCB2b2lkIFN0cnVjdHVyZUlEOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAg
ICAgICAgKytudW1iZXJTaW5nbGV0b25zOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0cnVj
dHVyZUlELT5tX3Byb3BlcnR5VGFibGUpCisgICAgICAgIGlmIChzdHJ1Y3R1cmVJRC0+bV9wcm9w
ZXJ0eVRhYmxlKSB7CisgICAgICAgICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7CiAgICAg
ICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0gUHJvcGVydHlNYXBIYXNoVGFibGU6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5VGFibGUtPnNpemUpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcHJpbnRmKCJOdW1iZXIgb2YgbGl2ZSBTdHJ1Y3R1cmVJRHM6ICVk
XG4iLCBsaXZlU3RydWN0dXJlSURTZXQuc2l6ZSgpKTsKICAgICBwcmludGYoIk51bWJlciBvZiBT
dHJ1Y3R1cmVJRHMgdXNpbmcgdGhlIHNpbmdsZSBpdGVtIG9wdGltaXphdGlvbiBmb3IgdHJhbnNp
dGlvbiBtYXA6ICVkXG4iLCBudW1iZXJVc2luZ1NpbmdsZVNsb3QpOwogICAgIHByaW50ZigiTnVt
YmVyIG9mIFN0cnVjdHVyZUlEcyB0aGF0IGFyZSBsZWFmIG5vZGVzOiAlZFxuIiwgbnVtYmVyTGVh
Zik7CiAgICAgcHJpbnRmKCJOdW1iZXIgb2YgU3RydWN0dXJlSURzIHRoYXQgc2luZ2xldG9uczog
JWRcbiIsIG51bWJlclNpbmdsZXRvbnMpOworICAgIHByaW50ZigiTnVtYmVyIG9mIFN0cnVjdHVy
ZUlEcyB3aXRoIFByb3BlcnR5TWFwczogJWRcbiIsIG51bWJlcldpdGhQcm9wZXJ0eU1hcHMpOwog
CiAgICAgcHJpbnRmKCJTaXplIG9mIGEgc2luZ2xlIFN0cnVjdHVyZUlEczogJWRcbiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzaXplb2YoU3RydWN0dXJlSUQpKSk7CiAgICAgcHJpbnRmKCJTaXpl
IG9mIHN1bSBvZiBhbGwgcHJvcGVydHkgbWFwczogJWRcbiIsIHRvdGFsUHJvcGVydHlNYXBzU2l6
ZSk7CkBAIC0xMjEsOCArMTI3LDkgQEAgU3RydWN0dXJlSUQ6OlN0cnVjdHVyZUlEKEpTVmFsdWUq
IHByb3RvdAogICAgICwgbV90cmFuc2l0aW9uQ291bnQoMCkKICAgICAsIG1fcHJvcGVydHlUYWJs
ZSgwKQogICAgICwgbV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eShKU09iamVjdDo6aW5saW5lU3Rv
cmFnZUNhcGFjaXR5KQotICAgICwgbV9jYWNoZWRUcmFuc2lzdGlvbk9mZnNldChXVEY6Om5vdEZv
dW5kKQorICAgICwgbV9vZmZzZXQoV1RGOjpub3RGb3VuZCkKICAgICAsIG1faXNEaWN0aW9uYXJ5
KGZhbHNlKQorICAgICwgbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpCiAgICAgLCBtX2hh
c0dldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpCiAgICAgLCBtX3VzaW5nU2luZ2xlVHJhbnNp
dGlvblNsb3QodHJ1ZSkKICAgICAsIG1fYXR0cmlidXRlc0luUHJldmlvdXMoMCkKQEAgLTIwMyw2
ICsyMTAsODAgQEAgdm9pZCBTdHJ1Y3R1cmVJRDo6c3RvcElnbm9yaW5nTGVha3MoKQogI2VuZGlm
CiB9CiAKK3N0YXRpYyBib29sIGlzUG93ZXJPZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtl
biAgZnJvbSBodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1s
CisgICAgCisgICAgcmV0dXJuICEodiAmICh2IC0gMSkpICYmIHY7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBuZXh0UG93ZXJPZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBmcm9tIGh0dHA6
Ly93d3cuY3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAgICAvLyBEZXZp
c2VkIGJ5IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2LS07CisgICAg
diB8PSB2ID4+IDE7CisgICAgdiB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7CisgICAgdiB8
PSB2ID4+IDg7CisgICAgdiB8PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJldHVybiB2Owor
fQorCitzdGF0aWMgdW5zaWduZWQgc2l6ZUZvcktleUNvdW50KHNpemVfdCBrZXlDb3VudCkKK3sK
KyAgICBpZiAoa2V5Q291bnQgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG5ld1Rh
YmxlU2l6ZTsKKworICAgIGlmIChrZXlDb3VudCA8IDgpCisgICAgICAgIHJldHVybiBuZXdUYWJs
ZVNpemU7CisKKyAgICBpZiAoaXNQb3dlck9mMihrZXlDb3VudCkpCisgICAgICAgIHJldHVybiBr
ZXlDb3VudCAqIDQ7CisKKyAgICByZXR1cm4gbmV4dFBvd2VyT2YyKGtleUNvdW50KSAqIDI7Cit9
CisKK3ZvaWQgU3RydWN0dXJlSUQ6OmJ1aWxkUHJvcGVydHlNYXAoKQoreworICAgIEFTU0VSVCgh
bV9wcm9wZXJ0eVRhYmxlKTsKKworICAgIFZlY3RvcjxTdHJ1Y3R1cmVJRCosIDg+IHN0cnVjdHVy
ZXM7CisgICAgc3RydWN0dXJlcy5hcHBlbmQodGhpcyk7CisKKyAgICBTdHJ1Y3R1cmVJRCogc3Ry
dWN0dXJlID0gdGhpczsKKworICAgIC8vIFNlYXJjaCBmb3IgdGhlIGxhc3QgU3RydWN0dXJlSUQg
d2l0aCBhIHByb3BlcnR5IHRhYmxlIAorICAgIHdoaWxlICgoc3RydWN0dXJlID0gc3RydWN0dXJl
LT5wcmV2aW91c0lEKCkpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUpOworICAgICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm1fcHJldmlvdXMpOworCisgICAg
ICAgICAgICBtX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZXMuYXBw
ZW5kKHN0cnVjdHVyZSk7CisgICAgfQorCisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAg
ICAgIGNyZWF0ZVByb3BlcnR5TWFwSGFzaFRhYmxlKHNpemVGb3JLZXlDb3VudChtX29mZnNldCAr
IDEpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHNpemVGb3JLZXlDb3VudChtX29mZnNldCAr
IDEpID4gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKQorICAgICAgICAgICAgcmVoYXNoUHJvcGVydHlN
YXBIYXNoVGFibGUoc2l6ZUZvcktleUNvdW50KG1fb2Zmc2V0ICsgMSkpOyAvLyBUaGlzIGNvdWxk
IGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkgY29tYmluZGluZyB3aXRoIHRoZSBjb3B5IGFib3Zl
IAorICAgIH0KKworICAgIGZvciAoaW50IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDI7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CisgICAgICAgIHN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy0+cmVmKCk7CisgICAgICAgIFByb3BlcnR5TWFwRW50
cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0
LCBzdHJ1Y3R1cmUtPm1fYXR0cmlidXRlc0luUHJldmlvdXMsICsrbV9wcm9wZXJ0eVRhYmxlLT5s
YXN0SW5kZXhVc2VkKTsgCisgICAgICAgIGluc2VydEludG9Qcm9wZXJ0eU1hcEhhc2hUYWJsZShl
bnRyeSk7CisgICAgfQorfQorCiB2b2lkIFN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBKU09iamVjdCogYmFzZU9iamVjdCkKIHsKICAgICBib29sIHNob3VsZENhY2hlID0gcHJvcGVy
dHlOYW1lcy5jYWNoZWFibGUoKSAmJiAhKHByb3BlcnR5TmFtZXMuc2l6ZSgpIHx8IG1faXNEaWN0
aW9uYXJ5KTsKQEAgLTI2Niw3ICszNDcsNyBAQCB2b2lkIFN0cnVjdHVyZUlEOjpncm93UHJvcGVy
dHlTdG9yYWdlQ2FwCiAgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgKj0gMjsKIH0K
IAotUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmFkZFByb3BlcnR5VHJhbnNp
dGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpCitQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZShTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVJ
RC0+dHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSk7CkBAIC0yNzQsMTggKzM1NSwyOCBA
QCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6YWRkCiAgICAgaWYgKHN0cnVj
dHVyZUlELT5tX3VzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QpIHsKICAgICAgICAgU3RydWN0dXJl
SUQqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZUlELT5tX3RyYW5zaXRpb25zLnNpbmds
ZVRyYW5zaXRpb247CiAgICAgICAgIGlmIChleGlzdGluZ1RyYW5zaXRpb24gJiYgZXhpc3RpbmdU
cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID09IHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVw
KCkgJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGF0dHJp
YnV0ZXMpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZUlELT5tX3RyYW5zaXRpb25z
LnNpbmdsZVRyYW5zaXRpb24tPmNhY2hlZFRyYW5zaXN0aW9uT2Zmc2V0KCk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmVJRC0+bV90cmFuc2l0aW9ucy5zaW5nbGVUcmFuc2l0aW9uLT5t
X29mZnNldDsKICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCk7CiAg
ICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKFN0cnVjdHVyZUlEKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1
Y3R1cmVJRC0+bV90cmFuc2l0aW9ucy50YWJsZS0+Z2V0KG1ha2VfcGFpcihwcm9wZXJ0eU5hbWUu
dXN0cmluZygpLnJlcCgpLCBhdHRyaWJ1dGVzKSkpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IGV4
aXN0aW5nVHJhbnNpdGlvbi0+Y2FjaGVkVHJhbnNpc3Rpb25PZmZzZXQoKTsKKyAgICAgICAgICAg
IG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQ7CiAgICAgICAgICAgICBBU1NF
UlQob2Zmc2V0ICE9IFdURjo6bm90Rm91bmQpOwogICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5n
VHJhbnNpdGlvbjsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKKyAgICBy
ZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpCit7
CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkpOworICAgIEFTU0VSVChz
dHJ1Y3R1cmVJRC0+dHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSk7CisgICAgQVNTRVJU
KHN0cnVjdHVyZUlELT5tX2RlbGV0ZWRPZmZzZXRzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFT
dHJ1Y3R1cmVJRDo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1
Y3R1cmVJRCwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKTsKKwogICAgIGlmIChz
dHJ1Y3R1cmVJRC0+bV90cmFuc2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsK
ICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gdG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbihzdHJ1Y3R1cmVJRCk7CiAgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dChw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwpAQCAtMzAwLDE2ICszOTEsMjggQEAgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmFkZAogICAgIHRyYW5zaXRpb24tPm1fbmFtZUlu
UHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpOwogICAgIHRyYW5zaXRpb24t
Pm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOwogICAgIHRyYW5zaXRpb24tPm1f
dHJhbnNpdGlvbkNvdW50ID0gc3RydWN0dXJlSUQtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKLSAg
ICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmVJRC0+Y29weVByb3BlcnR5
VGFibGUoKTsKLSAgICB0cmFuc2l0aW9uLT5tX2RlbGV0ZWRPZmZzZXRzID0gc3RydWN0dXJlSUQt
Pm1fZGVsZXRlZE9mZnNldHM7IAogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlTdG9yYWdlQ2Fw
YWNpdHkgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eTsKICAgICB0cmFu
c2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSBzdHJ1Y3R1cmVJRC0+bV9oYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwogCisgICAgaWYgKHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5
VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZUlELT5tX2lzUGlubmVkUHJvcGVydHlUYWJs
ZSkKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlE
LT5jb3B5UHJvcGVydHlUYWJsZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRyYW5z
aXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5VGFibGU7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVRhYmxlID0gMDsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmVJRC0+bV9wcmV2aW91cykKKyAgICAg
ICAgICAgIHRyYW5zaXRpb24tPmJ1aWxkUHJvcGVydHlNYXAoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXBIYXNoVGFibGUoKTsKKyAgICB9
CisKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsKICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gdHJhbnNpdGlv
bi0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKICAgICAgICAgdHJhbnNpdGlvbi0+Z3Jvd1By
b3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7CiAKLSAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRUcmFu
c2lzdGlvbk9mZnNldChvZmZzZXQpOworICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gb2Zmc2V0
OwogCiAgICAgaWYgKHN0cnVjdHVyZUlELT5tX3VzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QpIHsK
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmVJRC0+bV90cmFuc2l0aW9ucy5zaW5nbGVUcmFuc2l0aW9u
KSB7CkBAIC0zMzEsMTQgKzQzNCw0NCBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1
cmVJRDo6cmVtCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkpOwog
Ci0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlE
LT5tX3Byb3RvdHlwZSwgc3RydWN0dXJlSUQtPnR5cGVJbmZvKCkpOwotICAgIHRyYW5zaXRpb24t
Pm1faXNEaWN0aW9uYXJ5ID0gdHJ1ZTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUg
PSBzdHJ1Y3R1cmVJRC0+Y29weVByb3BlcnR5VGFibGUoKTsKKyAgICBSZWZQdHI8U3RydWN0dXJl
SUQ+IHRyYW5zaXRpb24gPSB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHN0cnVjdHVyZUlEKTsKKwor
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnJlbW92ZShwcm9wZXJ0eU5hbWUpOworCisgICAgcmV0
dXJuIHRyYW5zaXRpb24ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBT
dHJ1Y3R1cmVJRDo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0
dXJlSUQsIEpTVmFsdWUqIHByb3RvdHlwZSkKK3sKKyAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRy
YW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBlLCBzdHJ1Y3R1cmVJRC0+dHlwZUluZm8oKSk7CisK
KyAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Db3VudCA9IHN0cnVjdHVyZUlELT5tX3RyYW5z
aXRpb25Db3VudCArIDE7CiAgICAgdHJhbnNpdGlvbi0+bV9kZWxldGVkT2Zmc2V0cyA9IHN0cnVj
dHVyZUlELT5tX2RlbGV0ZWRPZmZzZXRzOwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eTsKICAg
ICB0cmFuc2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSBzdHJ1Y3R1cmVJRC0+
bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwogCi0gICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+
cmVtb3ZlKHByb3BlcnR5TmFtZSk7CisgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUg
Y2FuIG5vdCB0cmFuc2l0aW9uIHRvIHRoaXMuCisKKyAgICBzdHJ1Y3R1cmVJRC0+YnVpbGRQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KCk7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlSUQtPmNvcHlQcm9wZXJ0eVRhYmxlKCk7CisgICAgdHJhbnNpdGlvbi0+bV9pc1Bp
bm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOworCisgICAgcmV0dXJuIHRyYW5zaXRpb24ucmVsZWFz
ZSgpOworfQorCitQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6Z2V0dGVyU2V0
dGVyVHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQpCit7CisgICAgUmVmUHRyPFN0
cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlELT5zdG9yZWRQcm90b3R5
cGUoKSwgc3RydWN0dXJlSUQtPnR5cGVJbmZvKCkpOworICAgIHRyYW5zaXRpb24tPm1fdHJhbnNp
dGlvbkNvdW50ID0gc3RydWN0dXJlSUQtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKKyAgICB0cmFu
c2l0aW9uLT5tX2RlbGV0ZWRPZmZzZXRzID0gc3RydWN0dXJlSUQtPm1fZGVsZXRlZE9mZnNldHM7
CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSA9IHN0cnVjdHVyZUlE
LT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OworICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcyA9IHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
czsKKworICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBub3QgdHJhbnNpdGlv
biB0byB0aGlzLgorCisgICAgc3RydWN0dXJlSUQtPmJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSgpOworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlELT5jb3B5
UHJvcGVydHlUYWJsZSgpOworICAgIHRyYW5zaXRpb24tPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxl
ID0gdHJ1ZTsKIAogICAgIHJldHVybiB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKIH0KQEAgLTM0OSw0
OCArNDgyLDQwIEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjp0b0QKIAog
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+
bV9wcm90b3R5cGUsIHN0cnVjdHVyZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5t
X2lzRGljdGlvbmFyeSA9IHRydWU7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlSUQtPmNvcHlQcm9wZXJ0eVRhYmxlKCk7CiAgICAgdHJhbnNpdGlvbi0+bV9kZWxl
dGVkT2Zmc2V0cyA9IHN0cnVjdHVyZUlELT5tX2RlbGV0ZWRPZmZzZXRzOwogICAgIHRyYW5zaXRp
b24tPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVN0
b3JhZ2VDYXBhY2l0eTsKICAgICB0cmFuc2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRp
ZXMgPSBzdHJ1Y3R1cmVJRC0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOworCisgICAgc3Ry
dWN0dXJlSUQtPmJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSgpOworICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlELT5jb3B5UHJvcGVydHlUYWJsZSgpOworICAg
IHRyYW5zaXRpb24tPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlID0gdHJ1ZTsKKwogICAgIHJldHVy
biB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3Ry
dWN0dXJlSUQ6OmZyb21EaWN0aW9uYXJ5VHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJl
SUQpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZUlELT5tX2lzRGljdGlvbmFyeSk7Ci0KKyAgICAK
ICAgICAvLyBTaW5jZSBkaWN0aW9uYXJ5IFN0cnVjdHVyZUlEcyBhcmUgbm90IHNoYXJlZCwgYW5k
IG5vIG9wY29kZXMgc3BlY2lhbGl6ZQogICAgIC8vIGZvciB0aGVtLCB3ZSBkb24ndCBuZWVkIHRv
IGFsbG9jYXRlIGEgbmV3IFN0cnVjdHVyZUlEIHdoZW4gdHJhbnNpdGlvbmluZwogICAgIC8vIHRv
IG5vbi1kaWN0aW9uYXJ5IHN0YXR1cy4KLSAgICBzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkg
PSBmYWxzZTsKLSAgICByZXR1cm4gc3RydWN0dXJlSUQ7Ci19CiAKLVBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+IFN0cnVjdHVyZUlEOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFN0cnVjdHVyZUlE
KiBzdHJ1Y3R1cmVJRCwgSlNWYWx1ZSogcHJvdG90eXBlKQotewotICAgIFJlZlB0cjxTdHJ1Y3R1
cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShwcm90b3R5cGUsIHN0cnVjdHVyZUlELT50eXBlSW5m
bygpKTsKLSAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Db3VudCA9IHN0cnVjdHVyZUlELT5t
X3RyYW5zaXRpb25Db3VudCArIDE7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlSUQtPmNvcHlQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdHJhbnNpdGlvbi0+bV9kZWxl
dGVkT2Zmc2V0cyA9IHN0cnVjdHVyZUlELT5tX2RlbGV0ZWRPZmZzZXRzOwotICAgIHRyYW5zaXRp
b24tPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVN0
b3JhZ2VDYXBhY2l0eTsKLSAgICB0cmFuc2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRp
ZXMgPSBzdHJ1Y3R1cmVJRC0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwotICAgIHJldHVy
biB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKLX0KKyAgICAvLyBGSU1YRTogV2UgY2FuIG1ha2UgdGhp
cyBtb3JlIGVmZmljaWVudCBieSBjYW5vbmljYWxpemluZyB0aGUgU3RydWN0dXJlSUQgKGRyYWlu
aW5nIHRoZQorICAgIC8vIGRlbGV0ZWQgb2Zmc2V0cyB2ZWN0b3IpIGJlZm9yZSB0cmFuc2lzdGlv
bmluZyBmcm9tIGRpY3Rpb25hcnkuIAorICAgIGlmIChzdHJ1Y3R1cmVJRC0+bV9kZWxldGVkT2Zm
c2V0cy5pc0VtcHR5KCkpCisgICAgICAgIHN0cnVjdHVyZUlELT5tX2lzRGljdGlvbmFyeSA9IGZh
bHNlOwogCi1QYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6Z2V0dGVyU2V0dGVy
VHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQpCi17Ci0gICAgUmVmUHRyPFN0cnVj
dHVyZUlEPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlELT5zdG9yZWRQcm90b3R5cGUo
KSwgc3RydWN0dXJlSUQtPnR5cGVJbmZvKCkpOwotICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlv
bkNvdW50ID0gc3RydWN0dXJlSUQtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKLSAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmVJRC0+Y29weVByb3BlcnR5VGFibGUoKTsK
LSAgICB0cmFuc2l0aW9uLT5tX2RlbGV0ZWRPZmZzZXRzID0gc3RydWN0dXJlSUQtPm1fZGVsZXRl
ZE9mZnNldHM7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSA9IHN0
cnVjdHVyZUlELT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwotICAgIHRyYW5zaXRpb24tPm1f
aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA9IHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllczsKLSAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IHN0cnVjdHVyZUlEOwogfQogCiBzaXplX3QgU3RydWN0dXJlSUQ6OmFkZFByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogeworICAgIEFTU0VSVCghbV90cmFuc2l0aW9ucy5zaW5nbGVUcmFuc2l0aW9uKTsK
KworICAgIGJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSgpOworCisgICAgbV9pc1Bpbm5lZFBy
b3BlcnR5VGFibGUgPSB0cnVlOwogICAgIHNpemVfdCBvZmZzZXQgPSBwdXQocHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICBpZiAocHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gcHJvcGVydHlT
dG9yYWdlQ2FwYWNpdHkoKSkKICAgICAgICAgZ3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7
CkBAIC00MDAsNiArNTI1LDEyIEBAIHNpemVfdCBTdHJ1Y3R1cmVJRDo6YWRkUHJvcGVydHlXaXRo
b3V0VHIKIAogc2l6ZV90IFN0cnVjdHVyZUlEOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKKyAgICBBU1NFUlQoIW1fdHJh
bnNpdGlvbnMuc2luZ2xlVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKG1faXNEaWN0aW9uYXJ5KTsK
KworICAgIGJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSgpOworCisgICAgbV9pc1Bpbm5lZFBy
b3BlcnR5VGFibGUgPSB0cnVlOwogICAgIHNpemVfdCBvZmZzZXQgPSByZW1vdmUocHJvcGVydHlO
YW1lKTsKICAgICBjbGVhckVudW1lcmF0aW9uQ2FjaGUoKTsKICAgICByZXR1cm4gb2Zmc2V0OwpA
QCAtNDQ5LDcgKzU4MCw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWxldGVkU2VudGluZWxJ
bmQKIAogaW5saW5lIHZvaWQgU3RydWN0dXJlSUQ6OmNoZWNrQ29uc2lzdGVuY3koKQogewotfSAg
IAorfQogCiAjZW5kaWYKIApAQCAtNDcxLDEwICs2MDIsMTEgQEAgUHJvcGVydHlNYXBIYXNoVGFi
bGUqIFN0cnVjdHVyZUlEOjpjb3B5UAogICAgIHJldHVybiBuZXdUYWJsZTsKIH0KIAotc2l6ZV90
IFN0cnVjdHVyZUlEOjpnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykgY29uc3QKK3NpemVfdCBTdHJ1Y3R1cmVJRDo6Z2V0KGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJU
KCFwcm9wZXJ0eU5hbWUuaXNOdWxsKCkpOwogCisgICAgYnVpbGRQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5KCk7CiAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCiAgICAgICAgIHJldHVybiBXVEY6Om5v
dEZvdW5kOwogCkBAIC03MTIsMTcgKzg0NCwxNiBAQCB2b2lkIFN0cnVjdHVyZUlEOjppbnNlcnRJ
bnRvUHJvcGVydHlNYXBICiAgICAgKyttX3Byb3BlcnR5VGFibGUtPmtleUNvdW50OwogfQogCi12
b2lkIFN0cnVjdHVyZUlEOjpleHBhbmRQcm9wZXJ0eU1hcEhhc2hUYWJsZSgpCit2b2lkIFN0cnVj
dHVyZUlEOjpjcmVhdGVQcm9wZXJ0eU1hcEhhc2hUYWJsZSgpCiB7Ci0gICAgQVNTRVJUKG1fcHJv
cGVydHlUYWJsZSk7Ci0gICAgcmVoYXNoUHJvcGVydHlNYXBIYXNoVGFibGUobV9wcm9wZXJ0eVRh
YmxlLT5zaXplICogMik7CisgICAgQVNTRVJUKHNpemVGb3JLZXlDb3VudCg3KSA9PSBuZXdUYWJs
ZVNpemUpOworICAgIGNyZWF0ZVByb3BlcnR5TWFwSGFzaFRhYmxlKG5ld1RhYmxlU2l6ZSk7CiB9
CiAKLXZvaWQgU3RydWN0dXJlSUQ6OmNyZWF0ZVByb3BlcnR5TWFwSGFzaFRhYmxlKCkKK3ZvaWQg
U3RydWN0dXJlSUQ6OmNyZWF0ZVByb3BlcnR5TWFwSGFzaFRhYmxlKHVuc2lnbmVkIG5ld1RhYmxl
U2l6ZSkKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSAxNjsKLQogICAgIEFT
U0VSVCghbV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQoaXNQb3dlck9mMihuZXdUYWJsZVNp
emUpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtNzMzLDYgKzg2NCwxMiBAQCB2
b2lkIFN0cnVjdHVyZUlEOjpjcmVhdGVQcm9wZXJ0eU1hcEhhc2hUCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogfQogCit2b2lkIFN0cnVjdHVyZUlEOjpleHBhbmRQcm9wZXJ0eU1hcEhhc2hUYWJs
ZSgpCit7CisgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZSk7CisgICAgcmVoYXNoUHJvcGVydHlN
YXBIYXNoVGFibGUobV9wcm9wZXJ0eVRhYmxlLT5zaXplICogMik7Cit9CisKIHZvaWQgU3RydWN0
dXJlSUQ6OnJlaGFzaFByb3BlcnR5TWFwSGFzaFRhYmxlKCkKIHsKICAgICBBU1NFUlQobV9wcm9w
ZXJ0eVRhYmxlKTsKQEAgLTc0Myw2ICs4ODAsNyBAQCB2b2lkIFN0cnVjdHVyZUlEOjpyZWhhc2hQ
cm9wZXJ0eU1hcEhhc2hUCiB2b2lkIFN0cnVjdHVyZUlEOjpyZWhhc2hQcm9wZXJ0eU1hcEhhc2hU
YWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNpemUpCiB7CiAgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJs
ZSk7CisgICAgQVNTRVJUKGlzUG93ZXJPZjIobmV3VGFibGVTaXplKSk7CiAKICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAKQEAgLTc3OCw4ICs5MTYsOSBAQCBzdGF0aWMgaW50IGNvbXBhcmVQcm9w
ZXJ0eU1hcEVudHJ5SW5kaWNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU3RydWN0dXJlSUQ6
OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzSW50ZXJuYWwoUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMpIGNvbnN0Cit2b2lkIFN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lc0ludGVybmFsKFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogeworICAg
IGJ1aWxkUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSgpOwogICAgIGlmICghbV9wcm9wZXJ0eVRhYmxl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTg0MSw3ICs5ODAsNyBAQCB2b2lkIFN0cnVjdHVyZUlE
OjpjaGVja0NvbnNpc3RlbmN5KCkKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZS0+c2l6ZSA+PSAxNik7CisgICAg
QVNTRVJUKG1fcHJvcGVydHlUYWJsZS0+c2l6ZSA+PSBuZXdUYWJsZVNpemUpOwogICAgIEFTU0VS
VChtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrKTsKICAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxl
LT5zaXplID09IG1fcHJvcGVydHlUYWJsZS0+c2l6ZU1hc2sgKyAxKTsKICAgICBBU1NFUlQoISht
X3Byb3BlcnR5VGFibGUtPnNpemUgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrKSk7CkluZGV4
OiBydW50aW1lL1N0cnVjdHVyZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9TdHJ1Y3R1cmVJ
RC5oCShyZXZpc2lvbiAzODQwMykKKysrIHJ1bnRpbWUvU3RydWN0dXJlSUQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsOSArNjQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCosIEpTVmFsdWUq
IHByb3RvdHlwZSk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBhZGRQ
cm9wZXJ0eVRyYW5zaXRpb24oU3RydWN0dXJlSUQqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIHNpemVfdCYgb2Zmc2V0KTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUoU3RydWN0dXJlSUQqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIHNpemVfdCYgb2Zmc2V0KTsKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihTdHJ1Y3R1cmVJ
RCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgc2l6ZV90JiBvZmZzZXQpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbihTdHJ1Y3R1cmVJRCosIEpTVmFsdWUqIHByb3RvdHlwZSk7CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZUlE
Kik7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiB0b0RpY3Rpb25hcnlU
cmFuc2l0aW9uKFN0cnVjdHVyZUlEKik7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZUlEPiBmcm9tRGljdGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlSUQqKTsKQEAgLTEwMCwz
NyArMTAxLDQyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldENhY2hlZFByb3Rv
dHlwZUNoYWluKFBhc3NSZWZQdHI8U3RydWN0dXJlSURDaGFpbj4gY2FjaGVkUHJvdG90eXBlQ2hh
aW4pIHsgbV9jYWNoZWRQcm90b3R5cGVDaGFpbiA9IGNhY2hlZFByb3RvdHlwZUNoYWluOyB9CiAg
ICAgICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0
Q2FjaGVkVHJhbnNpc3Rpb25PZmZzZXQoc2l6ZV90IG9mZnNldCkgeyBtX2NhY2hlZFRyYW5zaXN0
aW9uT2Zmc2V0ID0gb2Zmc2V0OyB9Ci0gICAgICAgIHNpemVfdCBjYWNoZWRUcmFuc2lzdGlvbk9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkVHJhbnNpc3Rpb25PZmZzZXQ7IH0KLQogICAg
ICAgICB2b2lkIGdyb3dQcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOwogICAgICAgICBzaXplX3Qg
cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5U3RvcmFn
ZUNhcGFjaXR5OyB9Ci0gICAgICAgIHNpemVfdCBwcm9wZXJ0eVN0b3JhZ2VTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlID8gbV9wcm9wZXJ0eVRhYmxlLT5rZXlDb3VudCArIG1f
ZGVsZXRlZE9mZnNldHMuc2l6ZSgpIDogMDsgfQorICAgICAgICBzaXplX3QgcHJvcGVydHlTdG9y
YWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/IG1fcHJvcGVydHlUYWJs
ZS0+a2V5Q291bnQgKyBtX2RlbGV0ZWRPZmZzZXRzLnNpemUoKSA6IG1fb2Zmc2V0ICsgMTsgfQog
Ci0gICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25z
dDsKLSAgICAgICAgc2l6ZV90IGdldChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdDsKKyAgICAgICAgc2l6ZV90IGdldChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBzaXplX3QgZ2V0KGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGdl
dEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
SlNPYmplY3QqKTsKIAogICAgICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7IH0KICAgICAgICAgdm9p
ZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcykgeyBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSBoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzOyB9CiAKLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fcHJv
cGVydHlUYWJsZTsgfQorICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5VGFibGUgPyAhbV9wcm9wZXJ0eVRhYmxlLT5rZXlDb3VudCA6IG1fb2Zmc2V0ID09IFdU
Rjo6bm90Rm91bmQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZUlEKEpTVmFs
dWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKIAogICAgICAgICBzaXplX3QgcHV0KGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAg
ICAgIHNpemVfdCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lc0ludGVybmFsKFByb3BlcnR5TmFtZUFy
cmF5JikgY29uc3Q7CisgICAgICAgIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXNJbnRl
cm5hbChQcm9wZXJ0eU5hbWVBcnJheSYpOwogCiAgICAgICAgIHZvaWQgZXhwYW5kUHJvcGVydHlN
YXBIYXNoVGFibGUoKTsKICAgICAgICAgdm9pZCByZWhhc2hQcm9wZXJ0eU1hcEhhc2hUYWJsZSgp
OwogICAgICAgICB2b2lkIHJlaGFzaFByb3BlcnR5TWFwSGFzaFRhYmxlKHVuc2lnbmVkIG5ld1Rh
YmxlU2l6ZSk7CiAgICAgICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXBIYXNoVGFibGUoKTsKKyAg
ICAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcEhhc2hUYWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNp
emUpOwogICAgICAgICB2b2lkIGluc2VydEludG9Qcm9wZXJ0eU1hcEhhc2hUYWJsZShjb25zdCBQ
cm9wZXJ0eU1hcEVudHJ5Jik7CiAgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAg
ICAgICAgIFByb3BlcnR5TWFwSGFzaFRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZSgpOworICAgICAg
ICB2b2lkIGJ1aWxkUHJvcGVydHlNYXAoKTsKKyAgICAgICAgdm9pZCBidWlsZFByb3BlcnR5TWFw
SWZOZWNlc3NhcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wcm9wZXJ0eVRhYmxl
IHx8ICFtX3ByZXZpb3VzKSAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBidWlsZFByb3BlcnR5TWFwKCk7CisgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGNsZWFyRW51bWVyYXRpb25DYWNoZSgpOwogCkBAIC0xNTgsMTkgKzE2NCwyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2RlbGV0ZWRPZmZzZXRzOwogCiAg
ICAgICAgIHNpemVfdCBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwotCi0gICAgICAgIHNpemVf
dCBtX2NhY2hlZFRyYW5zaXN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3QgbV9vZmZzZXQ7CiAK
ICAgICAgICAgYm9vbCBtX2lzRGljdGlvbmFyeSA6IDE7CisgICAgICAgIGJvb2wgbV9pc1Bpbm5l
ZFByb3BlcnR5VGFibGUgOiAxOwogICAgICAgICBib29sIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcyA6IDE7CiAgICAgICAgIGJvb2wgbV91c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90IDogMTsK
ICAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDU7CiAgICAgfTsKIAot
ICAgIGlubGluZSBzaXplX3QgU3RydWN0dXJlSUQ6OmdldChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CisgICAgaW5saW5lIHNpemVfdCBTdHJ1Y3R1cmVJRDo6Z2V0KGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghcHJvcGVy
dHlOYW1lLmlzTnVsbCgpKTsKIAorICAgICAgICBidWlsZFByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
KTsKICAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCiAgICAgICAgICAgICByZXR1cm4gV1RG
Ojpub3RGb3VuZDsKIAo=
</data>
<flag name="review"
          id="11613"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>