<?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>209266</bug_id>
          
          <creation_ts>2020-03-18 19:22:15 -0700</creation_ts>
          <short_desc>[JSC] StructureStubInfo::bufferedStructures should not ref/deref UniquedStringImpl</short_desc>
          <delta_ts>2020-03-19 14:59:36 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1631493</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-18 19:22:15 -0700</bug_when>
    <thetext>This data structure can be destroyed in CodeBlock::finalizeUnconditionally. So it should not include Strings.

1. Can we just set AtomStringTable when executing CodeBlock::finalizeUnconditionally?

This does not work correctly. Our Web Worker implementation is releasing heapAccess() when finishing code execution and waiting for runloop message.
This means that CodeBlock::finalizeUnconditionally can potentially work concurrently to Web Worker&apos;s main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631494</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-18 19:22:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/60508312&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631495</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-18 19:24:14 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #0)
&gt; 1. Can we just set AtomStringTable when executing
&gt; CodeBlock::finalizeUnconditionally?
&gt; 
&gt; This does not work correctly. Our Web Worker implementation is releasing
&gt; heapAccess() when finishing code execution and waiting for runloop message.
&gt; This means that CodeBlock::finalizeUnconditionally can potentially work
&gt; concurrently to Web Worker&apos;s main thread.

2. Can we fix this issue by giving up resetJITData call in CodeBlock::finalizeUnconditionally?

No since we are calling visitWeakReferences(), which removes some of buffered-structures in CodeBlock::finalizeUnconditionally anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631505</commentid>
    <comment_count>3</comment_count>
      <attachid>393939</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-18 19:59:53 -0700</bug_when>
    <thetext>Created attachment 393939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631508</commentid>
    <comment_count>4</comment_count>
      <attachid>393939</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-18 20:00:53 -0700</bug_when>
    <thetext>Comment on attachment 393939
Patch

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

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:-2239
&gt; -            if (stubInfo-&gt;considerCaching(vm, codeBlock, baseValue.structureOrNull()))

This patch also fixes DeleteByVal&apos;s considerCaching. It was not getting CacheableIdentifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631757</commentid>
    <comment_count>5</comment_count>
      <attachid>393939</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-19 11:31:29 -0700</bug_when>
    <thetext>Comment on attachment 393939
Patch

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

r=me

Nice find

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        concurrent collector to run this, we introduce m_bufferedStructuresLock in StructureStubInfo to guard m_bufferedStructures.

aren&apos;t we always holding the code block&apos;s lock in both cases?

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.h:102
&gt; +    ALWAYS_INLINE bool considerCaching(VM&amp; vm, CodeBlock* codeBlock, Structure* structure, CacheableIdentifier impl = CacheableIdentifier())

I wonder if making this have a default argument was a mistake

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.h:291
&gt; +        using KeyTraits = SimpleClassHashTraits&lt;BufferedStructure&gt;;

nit: Maybe static assert that emptyValueIsZero for documentation purpose?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631803</commentid>
    <comment_count>6</comment_count>
      <attachid>393939</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-19 13:48:35 -0700</bug_when>
    <thetext>Comment on attachment 393939
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:25
&gt;&gt; +        concurrent collector to run this, we introduce m_bufferedStructuresLock in StructureStubInfo to guard m_bufferedStructures.
&gt; 
&gt; aren&apos;t we always holding the code block&apos;s lock in both cases?

We are not holding a lock while executing considerCaching. I think fine-grained locking here is nice.

&gt;&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.h:102
&gt;&gt; +    ALWAYS_INLINE bool considerCaching(VM&amp; vm, CodeBlock* codeBlock, Structure* structure, CacheableIdentifier impl = CacheableIdentifier())
&gt; 
&gt; I wonder if making this have a default argument was a mistake

I think,

1. Adding `considerCachingById` and `considerCachingByVal`
2. `considerCachingById` internally calls `considerCaching` with CacheableIdentifier()

would be nice. Fixed.

&gt;&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.h:291
&gt;&gt; +        using KeyTraits = SimpleClassHashTraits&lt;BufferedStructure&gt;;
&gt; 
&gt; nit: Maybe static assert that emptyValueIsZero for documentation purpose?

Sounds nice. Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631849</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-19 14:59:36 -0700</bug_when>
    <thetext>Committed r258732: &lt;https://trac.webkit.org/changeset/258732&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393939</attachid>
            <date>2020-03-18 19:59:53 -0700</date>
            <delta_ts>2020-03-19 11:31:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209266-20200318195952.patch</filename>
            <type>text/plain</type>
            <size>19203</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
Nzc2ZThkYzMxYjZmYTAyZTY3MWZjYjYxNzBlNjU1MzA0YWI4N2QyLi4yN2U4NmE1YWFiZjI3ZDlj
ZWRmN2YwMTg1Yzc3MmY5NzM3OGQxN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAyMC0wMy0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFN0cnVjdHVyZVN0dWJJbmZvOjpidWZmZXJlZFN0cnVjdHVyZXMg
c2hvdWxkIG5vdCByZWYvZGVyZWYgVW5pcXVlZFN0cmluZ0ltcGwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTI2NgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjA1MDgzMTI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU3RydWN0dXJlU3R1YkluZm86OmJ1ZmZlcmVkU3RydWN0dXJlcyBpbmNsdWRlcyBS
ZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LiBTbyBkZXN0cm95aW5nIFN0cnVjdHVyZVN0dWJJbmZv
IGluCisgICAgICAgIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgY2FuIGFjY2Vz
cyB0byBBdG9tU3RyaW5nVGFibGUsIGFuZCBnZXQgbnVsbHB0ciBBdG9tU3RyaW5nVGFibGUgc2lu
Y2UKKyAgICAgICAgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBjYW4gYmUgZXhl
Y3V0ZWQgaW4gaGVhcC10aHJlYWQuCisKKyAgICAgICAgVGVtcG9yYXJpbHkgc2V0dGluZyBBdG9t
U3RyaW5nVGFibGUgaW4gdGhlIGhlYXAtdGhyZWFkIHdoZW4gZXhlY3V0aW5nIEdDIEVuZCBwaGFz
ZSBpcyBkYW5nZXJvdXM6IFdlYiB3b3JrZXIncworICAgICAgICBKU0MgVk0gaXMgcmVsZWFzaW5n
IGhlYXBBY2Nlc3Mgd2hlbiB3YWl0aW5nIGZvciB0aGUgbmV4dCBtZXNzYWdlIGluIHRoZSBSdW5M
b29wLiBUaGlzIHBvdGVudGlhbGx5IG1lYW5zIHRoYXQKKyAgICAgICAgV2ViIHdvcmtlcidzIG1h
aW4gdGhyZWFkIGNhbiBydW4gY29uY3VycmVudGx5IHdpdGggV2ViIHdvcmtlcidzIEpTQyBWTSdz
IEVuZCBwaGFzZSBoZWFwLXRocmVhZCB1bnRpbCB0aGUgd2ViCisgICAgICAgIHdvcmtlciB0YWtl
cyBKU0xvY2suIChUaGlzIGlzIG5vdCBhIHByb2JsZW0gaW4gV2ViQ29yZSBzaW5jZSBXZWJDb3Jl
IEpTQyBWTSBuZXZlciByZWxlYXNlcyBoZWFwQWNjZXNzLiBXZSBjYW5ub3QKKyAgICAgICAgdGFr
ZSB0aGUgc2FtZSBkZXNpZ24gc2luY2Ugd2Ugd291bGQgbGlrZSB0byBydW4gRW5kIHBoYXNlIGV2
ZW4gaWYgd2ViIHdvcmtlciBpcyBub3QgZ2V0dGluZyBhbnkgbWVzc2FnZXMpLgorCisgICAgICAg
IEFuZCByZW1vdmluZyByZXNldEpJVERhdGEgaW4gQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSBkb2VzIG5vdCBmaXggYXMgd2VsbCBzaW5jZSBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5CisgICAgICAgIGNhbGxzIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzLCBhbmQgaXQgcmVtb3ZlcyBzb21lIG9mIGVudHJpZXMgb2YgU3RydWN0dXJlU3R1
YkluZm86OmJ1ZmZlcmVkU3RydWN0dXJlcyBhZnRlcgorICAgICAgICBCeVZhbCBleHRlbnNpb24g
aXMgaW50cm9kdWNlZCBpbnRvIFN0cnVjdHVyZVN0dWJJbmZvLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggdXNlcyBDYWNoZWFibGVJZGVudGlmaWVyIGZvciBidWZmZXJlZFN0cnVjdHVyZXMuIFdlIG1h
a2UgQnVmZmVyZWRTdHJ1Y3R1cmUgY2xhc3Mgd2hpY2ggaG9sZHMgU3RydWN0dXJlIGFuZCBDYWNo
ZWFibGVJZGVudGlmaWVyLgorICAgICAgICBBbmQgU3RydWN0dXJlU3R1YkluZm8gaG9sZHMgSGFz
aFNldDxCdWZmZXJlZFN0cnVjdHVyZT4uIFdlIGFsc28gdmlzaXQgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpbiBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUuIFRvIGFsbG93CisgICAgICAg
IGNvbmN1cnJlbnQgY29sbGVjdG9yIHRvIHJ1biB0aGlzLCB3ZSBpbnRyb2R1Y2UgbV9idWZmZXJl
ZFN0cnVjdHVyZXNMb2NrIGluIFN0cnVjdHVyZVN0dWJJbmZvIHRvIGd1YXJkIG1fYnVmZmVyZWRT
dHJ1Y3R1cmVzLgorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNoaW5n
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmdldEJ5SWRTZWxmSWRlbnRpZmll
cik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjYWNoZVR5cGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6QnVmZmVyZWRTdHJ1Y3R1cmU6OkJ1
ZmZlcmVkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OkJ1ZmZl
cmVkU3RydWN0dXJlOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpCdWZmZXJlZFN0cnVjdHVyZTo6aGFzaCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpCdWZmZXJlZFN0cnVjdHVyZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpCdWZmZXJlZFN0cnVjdHVy
ZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpCdWZmZXJl
ZFN0cnVjdHVyZTo6SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpCdWZmZXJlZFN0cnVjdHVyZTo6SGFzaDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6QnVmZmVyZWRTdHJ1Y3R1cmU6OnN0cnVjdHVyZSBjb25zdCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpCdWZmZXJlZFN0cnVjdHVyZTo6YnlWYWxJZCBjb25z
dCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVy
OjpoYXNoIGNvbnN0KToKKwogMjAyMC0wMy0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBw
bGUuY29tPgogCiAgICAgICAgIEFkZCBhIHdheSB0byBtYXJrIGEgcmVqZWN0ZWQgcHJvbWlzZSBh
cyBoYW5kbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAppbmRleCA5NmExYmFlY2JlNGNiYmI3NmRiZGVkYTgwNTY1YTJjNTk4
NjU1MjJjLi44OTRjMzYwYmIwYmQwMzgwNDE5YTg5ZDYxODljNjE5M2UxNGE5NjYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKQEAgLTQyLDEwICs0Miw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAKIFN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUpCiAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCi0gICAgLCBtX2NhY2hlVHlw
ZShDYWNoZVR5cGU6OlVuc2V0KQotICAgICwgY291bnRkb3duKDEpIC8vIEZvciBhIHRvdGFsbHkg
Y2xlYXIgc3R1Yiwgd2UnbGwgcGF0Y2ggaXQgYWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbi4KLSAg
ICAsIHJlcGF0Y2hDb3VudCgwKQotICAgICwgbnVtYmVyT2ZDb29sRG93bnMoMCkKICAgICAsIGJ1
ZmZlcmluZ0NvdW50ZG93bihPcHRpb25zOjpyZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duKCkpCiAg
ICAgLCByZXNldEJ5R0MoZmFsc2UpCiAgICAgLCB0b29rU2xvd1BhdGgoZmFsc2UpCkBAIC0xNjUs
NyArMTYxLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRk
QWNjZXNzQ2FzZSgKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5idWZmZXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyZWRTdHJ1
Y3R1cmVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewpAQCAtMTg4LDcgKzE4NCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3Ry
dWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UoCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYnVmZmVyZWQoKSkgewotICAgICAgICAg
ICAgICAgIGJ1ZmZlcmVkU3RydWN0dXJlcy5jbGVhcigpOworICAgICAgICAgICAgICAgIGNsZWFy
QnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA0LDcgKzIwMCw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UoCiAgICAgICAgIGlm
ICghcmVzdWx0LmJ1ZmZlcmVkKCkpIHsKICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5m
b0ludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkRpZG4ndCBidWZm
ZXIgYW55dGhpbmcsIGJhaWxpbmcuXG4iKTsKLSAgICAgICAgICAgIGJ1ZmZlcmVkU3RydWN0dXJl
cy5jbGVhcigpOworICAgICAgICAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTcsNyArMjEz
LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSgKICAgICAgICAgCiAgICAgICAgIC8vIEZvcmdldCB0aGUgYnVmZmVyZWQgc3RydWN0dXJl
cyBzbyB0aGF0IGFsbCBmdXR1cmUgYXR0ZW1wdHMgdG8gY2FjaGUgZ2V0IGZ1bGx5IGhhbmRsZWQg
YnkgdGhlCiAgICAgICAgIC8vIFBvbHltb3JwaGljQWNjZXNzLgotICAgICAgICBidWZmZXJlZFN0
cnVjdHVyZXMuY2xlYXIoKTsKKyAgICAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAg
ICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHUuc3R1Yi0+cmVnZW5lcmF0ZShsb2NrZXIsIHZtLCBj
b2RlQmxvY2ssICp0aGlzKTsKICAgICAgICAgCkBAIC0yNDAsNyArMjM2LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKIAogdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgYnVm
ZmVyZWRTdHJ1Y3R1cmVzLmNsZWFyKCk7CisgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsK
IAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1
cm47CkBAIC0yOTAsNiArMjg2LDExIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENv
ZGVCbG9jayogY29kZUJsb2NrKQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRv
JiBidWZmZXJlZFN0cnVjdHVyZSA6IG1fYnVmZmVyZWRTdHJ1Y3R1cmVzKQorICAgICAgICAgICAg
YnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAg
IH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0
OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKQEAgLTMxMiwxMiArMzEzLDEzIEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgYnVmZmVyZWRTdHJ1Y3R1cmVzLnJlbW92ZUlmKAotICAgICAgICBbJl0gKGF1dG8mIHBhaXIp
IC0+IGJvb2wgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwYWlyLmZpcnN0
OwotICAgICAgICAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0pOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVk
U3RydWN0dXJlc0xvY2spOworICAgICAgICBtX2J1ZmZlcmVkU3RydWN0dXJlcy5yZW1vdmVJZigK
KyAgICAgICAgICAgIFsmXSAoYXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiAhdm0uaGVhcC5pc01hcmtlZChlbnRyeS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICB9CiAKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCBiNTc1YmRkMjE2MTljMmRmZTRmMTgyZmFlZDkw
ZjI2OGU5ZTI2MTliLi4zN2EzNTc0NTgxMTc2MzM1NThhYmJmN2I2MDVlNGRhNGI4NTA2ZmFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaApAQCAtOTksNyArOTksNyBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgLy8g
VGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIHRoYXQgaXQgd2ls
bCBldmVyIG1hcmsuCiAgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYp
OwogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY29uc2lkZXJDYWNoaW5nKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogaW1wbCA9IG51bGxwdHIpCisgICAgQUxXQVlTX0lOTElORSBib29sIGNvbnNpZGVy
Q2FjaGluZyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpbXBsID0gQ2FjaGVhYmxlSWRlbnRpZmllcigpKQogICAg
IHsKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogCkBAIC0xMTUsNyArMTE1LDcgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAvLwogICAgICAgICAvLyBJZiB3ZSBk
ZXRlcm1pbmUgdGhhdCB3ZSBzaG91bGQgZG8gc29tZXRoaW5nIHRvIHRoZSBJQyB0aGVuIHRoZSBu
ZXh0IG9yZGVyIG9mIGJ1c2luZXNzIGlzCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGlz
IFN0cnVjdHVyZSB3b3VsZCBpbXBhY3QgdGhlIElDIGF0IGFsbC4gV2Uga25vdyB0aGF0IGl0IHdv
bid0LCBpZiB3ZQotICAgICAgICAvLyBoYXZlIGFscmVhZHkgYnVmZmVyZWQgc29tZXRoaW5nIG9u
IGl0cyBiZWhhbGYuIFRoYXQncyB3aGF0IHRoZSBidWZmZXJlZFN0cnVjdHVyZXMgc2V0IGlzCisg
ICAgICAgIC8vIGhhdmUgYWxyZWFkeSBidWZmZXJlZCBzb21ldGhpbmcgb24gaXRzIGJlaGFsZi4g
VGhhdCdzIHdoYXQgdGhlIG1fYnVmZmVyZWRTdHJ1Y3R1cmVzIHNldCBpcwogICAgICAgICAvLyBm
b3IuCiAgICAgICAgIAogICAgICAgICBldmVyQ29uc2lkZXJlZCA9IHRydWU7CkBAIC0xNTksNyAr
MTU5LDExIEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIC8vIE5PVEU6
IFRoaXMgd2lsbCBiZWhhdmUgb2RkbHkgZm9yIEluc3RhbmNlT2YgaWYgdGhlIHVzZXIgdmFyaWVz
IHRoZSBwcm90b3R5cGUgYnV0IG5vdAogICAgICAgICAgICAgLy8gdGhlIGJhc2UncyBzdHJ1Y3R1
cmUuIFRoYXQgc2VlbXMgdW5saWtlbHkgZm9yIHRoZSBjYW5vbmljYWwgdXNlIG9mIGluc3RhbmNl
b2YsIHdoZXJlCiAgICAgICAgICAgICAvLyB0aGUgcHJvdG90eXBlIGlzIGZpeGVkLgotICAgICAg
ICAgICAgYm9vbCBpc05ld2x5QWRkZWQgPSBidWZmZXJlZFN0cnVjdHVyZXMuYWRkKHsgc3RydWN0
dXJlLCBpbXBsIH0pLmlzTmV3RW50cnk7CisgICAgICAgICAgICBib29sIGlzTmV3bHlBZGRlZCA9
IGZhbHNlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKKyAgICAgICAgICAgICAgICBpc05ld2x5
QWRkZWQgPSBtX2J1ZmZlcmVkU3RydWN0dXJlcy5hZGQoeyBzdHJ1Y3R1cmUsIGltcGwgfSkuaXNO
ZXdFbnRyeTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc05ld2x5QWRkZWQpCiAg
ICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIHJldHVybiBpc05ld2x5QWRkZWQ7CkBAIC0xNzIsNDEgKzE3NiwxMyBAQCBjbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgCiAgICAgc3RhdGljIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
KFZNJiwgY29uc3QgU3RydWN0dXJlU3R1YkluZm8qKTsKIAotICAgIGJvb2wgY29udGFpbnNQQyh2
b2lkKiBwYykgY29uc3Q7Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci1wcml2YXRlOgot
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9nZXRCeUlkU2VsZklkZW50aWZpZXI7Ci1wdWJsaWM6
Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKLSAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3MqIHN0dWI7Ci0gICAgfSB1OwotCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBnZXRC
eUlkU2VsZklkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgICAgIHJldHVybiBtX2dldEJ5
SWRTZWxmSWRlbnRpZmllcjsKICAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIC8vIFJlcHJlc2Vu
dHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNl
cyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCi0gICAgLy8gTm90ZSB0aGF0IGl0J3MgYWx3YXlz
IHNhZmUgdG8gY2xlYXIgdGhpcy4gSWYgd2UgY2xlYXIgaXQgcHJlbWF0dXJlbHksIHRoZW4gaWYg
d2Ugc2VlIHRoZSBzYW1lCi0gICAgLy8gc3RydWN0dXJlIGFnYWluIGR1cmluZyB0aGlzIGJ1ZmZl
cmluZyBjb3VudGRvd24sIHdlIHdpbGwgY3JlYXRlIGFuIEFjY2Vzc0Nhc2Ugb2JqZWN0IGZvciBp
dC4KLSAgICAvLyBUaGF0J3Mgbm90IHNvIGJhZCAtIHdlJ2xsIGdldCByaWQgb2YgdGhlIHJlZHVu
ZGFudCBvbmVzIG9uY2Ugd2UgcmVnZW5lcmF0ZS4KLSAgICBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJ1
Y3R1cmUqLCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+Pj4gYnVmZmVyZWRTdHJ1Y3R1cmVzOwot
cHVibGljOgotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9y
ICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5z
dGFuY2VvZicgY2FjaGVzLgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKLSAgICBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IHNs
b3dQYXRoQ2FsbExvY2F0aW9uOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247CiAKLSAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzOworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7CiAKICAgICB1aW50
MzJfdCBpbmxpbmVTaXplKCkgY29uc3QKICAgICB7CkBAIC0yMTUsMjQgKzE5MSw2IEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgcmV0dXJuIGlubGluZVNpemU7CiAgICAgfQog
Ci0gICAgR1BSUmVnIGJhc2VHUFI7Ci0gICAgR1BSUmVnIHZhbHVlR1BSOwotICAgIHVuaW9uIHsK
LSAgICAgICAgR1BSUmVnIHRoaXNHUFI7Ci0gICAgICAgIEdQUlJlZyBwcm90b3R5cGVHUFI7Ci0g
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKLSAgICB9IHJlZ3M7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFI7Ci0gICAgLy8gRklYTUU6IFszMi1iaXRzXSBD
aGVjayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NzI2Ci0g
ICAgR1BSUmVnIGJhc2VUYWdHUFI7Ci0gICAgdW5pb24gewotICAgICAgICBHUFJSZWcgdGhpc1Rh
Z0dQUjsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5VGFnR1BSOwotICAgIH0gdjsKLSNlbmRpZgot
CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wKCkK
ICAgICB7IAogICAgICAgICBBU1NFUlQoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpJbnN0YW5j
ZU9mKTsKQEAgLTI3NCwxNSArMjMyLDEyMyBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSB7IH0KICNlbmRpZgogCi0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIENhY2hlVHlwZSBjYWNoZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlVHlwZTsgfQorCiBwcml2YXRlOgotICAgIENhY2hlVHlwZSBtX2Nh
Y2hlVHlwZTsKICAgICB2b2lkIHNldENhY2hlVHlwZShDYWNoZVR5cGUpOworCisgICAgdm9pZCBj
bGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jayk7CisgICAgICAgIG1fYnVmZmVyZWRTdHJ1
Y3R1cmVzLmNsZWFyKCk7CisgICAgfQorCisgICAgY2xhc3MgQnVmZmVyZWRTdHJ1Y3R1cmUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgaGFzaFRhYmxl
RGVsZXRlZFZhbHVlID0gMHgyOworICAgICAgICBCdWZmZXJlZFN0cnVjdHVyZSgpID0gZGVmYXVs
dDsKKyAgICAgICAgQnVmZmVyZWRTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgYnlWYWxJZCkKKyAgICAgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0
dXJlKQorICAgICAgICAgICAgLCBtX2J5VmFsSWQoYnlWYWxJZCkKKyAgICAgICAgeyB9CisgICAg
ICAgIEJ1ZmZlcmVkU3RydWN0dXJlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAg
ICAgICAgICAgIDogbV9zdHJ1Y3R1cmUoYml0d2lzZV9jYXN0PFN0cnVjdHVyZSo+KGhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3N0
cnVjdHVyZSkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlOyB9CisKKyAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBQdHJI
YXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGlmIChtX2J5
VmFsSWQpCisgICAgICAgICAgICAgICAgaGFzaCArPSBtX2J5VmFsSWQuaGFzaCgpOworICAgICAg
ICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIH0KKworICAgICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEJ1ZmZlcmVkU3RydWN0dXJlJiBhLCBjb25zdCBCdWZmZXJlZFN0cnVjdHVy
ZSYgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEubV9zdHJ1Y3R1cmUgPT0gYi5t
X3N0cnVjdHVyZSAmJiBhLm1fYnlWYWxJZCA9PSBiLm1fYnlWYWxJZDsKKyAgICAgICAgfQorCisg
ICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgQnVmZmVyZWRTdHJ1Y3R1cmUmIGEs
IGNvbnN0IEJ1ZmZlcmVkU3RydWN0dXJlJiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gIShhID09IGIpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEhhc2ggeworICAgICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQnVmZmVyZWRTdHJ1Y3R1cmUmIGtleSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQnVmZmVyZWRT
dHJ1Y3R1cmUmIGEsIGNvbnN0IEJ1ZmZlcmVkU3RydWN0dXJlJiBiKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworICAgICAgICB9OworICAgICAgICB1c2luZyBLZXlUcmFpdHMgPSBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8QnVmZmVyZWRTdHJ1Y3R1cmU+OworCisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgY29uc3QgQ2Fj
aGVhYmxlSWRlbnRpZmllciYgYnlWYWxJZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJZDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZSB7IG51bGxwdHIg
fTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2J5VmFsSWQ7CisgICAgfTsKKwogcHVi
bGljOgotICAgIENhY2hlVHlwZSBjYWNoZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlVHlw
ZTsgfQotICAgIHVpbnQ4X3QgY291bnRkb3duOyAvLyBXZSByZXBhdGNoIG9ubHkgd2hlbiB0aGlz
IGlzIHplcm8uIElmIG5vdCB6ZXJvLCB3ZSBkZWNyZW1lbnQuCi0gICAgdWludDhfdCByZXBhdGNo
Q291bnQ7Ci0gICAgdWludDhfdCBudW1iZXJPZkNvb2xEb3duczsKKyAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gYnlJZFNlbGY7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBzdHViOworICAgIH0gdTsKK3ByaXZhdGU6CisgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBtX2dldEJ5SWRTZWxmSWRlbnRpZmllcjsKKyAgICAvLyBSZXByZXNlbnRzIHRo
b3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVyZWQgQWNjZXNzQ2FzZXMgaW4g
dGhlIFBvbHltb3JwaGljQWNjZXNzLgorICAgIC8vIE5vdGUgdGhhdCBpdCdzIGFsd2F5cyBzYWZl
IHRvIGNsZWFyIHRoaXMuIElmIHdlIGNsZWFyIGl0IHByZW1hdHVyZWx5LCB0aGVuIGlmIHdlIHNl
ZSB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSBhZ2FpbiBkdXJpbmcgdGhpcyBidWZmZXJpbmcg
Y291bnRkb3duLCB3ZSB3aWxsIGNyZWF0ZSBhbiBBY2Nlc3NDYXNlIG9iamVjdCBmb3IgaXQuCisg
ICAgLy8gVGhhdCdzIG5vdCBzbyBiYWQgLSB3ZSdsbCBnZXQgcmlkIG9mIHRoZSByZWR1bmRhbnQg
b25lcyBvbmNlIHdlIHJlZ2VuZXJhdGUuCisgICAgSGFzaFNldDxCdWZmZXJlZFN0cnVjdHVyZSwg
QnVmZmVyZWRTdHJ1Y3R1cmU6Okhhc2gsIEJ1ZmZlcmVkU3RydWN0dXJlOjpLZXlUcmFpdHM+IG1f
YnVmZmVyZWRTdHJ1Y3R1cmVzOworcHVibGljOgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRo
ZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJs
ZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25DYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IHNsb3dQYXRoQ2FsbExvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgIHVuaW9uIHsKKyAgICAgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgICAg
IEdQUlJlZyBwcm90b3R5cGVHUFI7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICB9
IHJlZ3M7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFsdWVUYWdHUFI7Cisg
ICAgLy8gRklYTUU6IFszMi1iaXRzXSBDaGVjayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRh
Z0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA0NzI2CisgICAgR1BSUmVnIGJhc2VUYWdHUFI7CisgICAgdW5pb24g
eworICAgICAgICBHUFJSZWcgdGhpc1RhZ0dQUjsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5VGFn
R1BSOworICAgIH0gdjsKKyNlbmRpZgorCisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworcHJp
dmF0ZToKKyAgICBDYWNoZVR5cGUgbV9jYWNoZVR5cGUgeyBDYWNoZVR5cGU6OlVuc2V0IH07Citw
dWJsaWM6CisgICAgLy8gV2UgcmVwYXRjaCBvbmx5IHdoZW4gdGhpcyBpcyB6ZXJvLiBJZiBub3Qg
emVybywgd2UgZGVjcmVtZW50LgorICAgIC8vIFNldHRpbmcgMSBmb3IgYSB0b3RhbGx5IGNsZWFy
IHN0dWIsIHdlJ2xsIHBhdGNoIGl0IGFmdGVyIHRoZSBmaXJzdCBleGVjdXRpb24uCisgICAgdWlu
dDhfdCBjb3VudGRvd24geyAxIH07CisgICAgdWludDhfdCByZXBhdGNoQ291bnQgeyAwIH07Cisg
ICAgdWludDhfdCBudW1iZXJPZkNvb2xEb3ducyB7IDAgfTsKIAogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleDsKIApAQCAtMjk2LDYgKzM2Miw4IEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICBib29sIHByb3BlcnR5SXNTdHJpbmcgOiAxOwogICAgIGJvb2wgcHJvcGVydHlJ
c0ludDMyIDogMTsKICAgICBib29sIHByb3BlcnR5SXNTeW1ib2wgOiAxOworcHJpdmF0ZToKKyAg
ICBMb2NrIG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jazsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2lu
IGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0
dXJlU3R1YkluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAppbmRleCA0MWU4M2M2MThlYWE1NjEwY2U3ZTA1NjUzYjMyMDE3ODU2YWU1Nzk1Li5iNzcxNDIy
ODVhMTg0NTc2ZTkzOTE0N2Y1MGViOWE4MWI3NmY3ZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTIwMTgsOCArMjAxOCw5IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VW
YWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFsmXSAoYm9v
bCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RC
YXNlKCkpKTsgCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVs
bCgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwYXRjaEdl
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSksIHNsb3QsICpzdHViSW5mbywg
R2V0QnlLaW5kOjpOb3JtYWxCeVZhbCk7CisgICAgICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vi
c2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZyh2bSwgY29kZUJsb2NrLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCksIGlkZW50
aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtp
bmQ6Ok5vcm1hbEJ5VmFsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQgPyBzbG90Lmdl
dFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgICAgICB9KSk7CiAgICAgICAgIH0KQEAgLTIyMzYsOCArMjIzNyw5IEBAIHNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwKIAogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkK
LSAgICAgICAgICAgICAgICByZXBhdGNoRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpLCAqc3R1YkluZm8sIERlbEJ5S2luZDo6Tm9y
bWFsQnlWYWwpOworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAg
ICAgcmVwYXRjaERlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFs
dWUsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgKnN0dWJJbmZvLCBEZWxCeUtpbmQ6Ok5vcm1h
bEJ5VmFsKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCmluZGV4IDc4MzFjMTk2YWI1N2I3ODc3
YjdhNzYyNjIwODE4MmZlMGUyMGNhMmIuLjYwYzI2MWMyY2YxNjc5NTFjN2FmMjk3MDQzNmJmMDg1
NjcwYjMwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgKQEAgLTY5LDYgKzY5LDggQEAgY2xhc3MgQ2FjaGVhYmxlSWRlbnRp
ZmllciB7CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9i
aXRzOyB9CiAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gdWlkKCktPnN5bWJv
bEF3YXJlSGFzaCgpOyB9CisKICAgICBDYWNoZWFibGVJZGVudGlmaWVyJiBvcGVyYXRvcj0oY29u
c3QgQ2FjaGVhYmxlSWRlbnRpZmllciYpID0gZGVmYXVsdDsKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyJiBvcGVyYXRvcj0oQ2FjaGVhYmxlSWRlbnRpZmllciYmKSA9IGRlZmF1bHQ7CiAK
</data>
<flag name="review"
          id="409338"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>