<?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>172235</bug_id>
          
          <creation_ts>2017-05-17 12:03:27 -0700</creation_ts>
          <short_desc>Bindings: Support runtime-enabled features in specific worlds</short_desc>
          <delta_ts>2017-05-20 12:34:33 -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>Bindings</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1309727</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-17 12:03:27 -0700</bug_when>
    <thetext>Currently an interface, function, or attribute can be annotated with either EnabledAtRuntime or EnabledForWorld, but not both. Even though we do not have any interfaces, functions, or attributes that are annotated with both at the time of writing, it seems reasonable to support such a combination of annotations. This will also generalize the CodeGenerator code that exposes/conceals an interface, function, or attribute so as to make it straightforward to support the extended attribute SecureContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309729</commentid>
    <comment_count>1</comment_count>
      <attachid>310423</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-17 12:05:39 -0700</bug_when>
    <thetext>Created attachment 310423
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309816</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-17 14:16:15 -0700</bug_when>
    <thetext>I am not a fan of continuing to promote the use of RuntimeEnabledFeature, and instead think we should be use Settings for all &quot;settings&quot;.  I&apos;d rather not see more features being added to support RuntimeEnabledFeature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309912</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-17 16:53:32 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #2)
&gt; I am not a fan of continuing to promote the use of RuntimeEnabledFeature,
&gt; and instead think we should be use Settings for all &quot;settings&quot;.  I&apos;d rather
&gt; not see more features being added to support RuntimeEnabledFeature.

We can likely remove the code generation logic for RuntimeEnabledFeature. I see this an an orthogonal issue to the purpose of this patch, generalizing code generation logic for arbitrary runtime enabled features, because the infrastructure that supports code generation of RuntimeEnabledFeature feature checks (e.g. GetRuntimeEnableFunctionName()) is also being used to support the extended attribute EnabledForWorld - to restrict interfaces, attributes, and functions to specific DOM worlds. I was planning to make use of this machinery to support the extended attribute SecureContext. We may be able to further refactor the CodeGeneratorJS machinery for features enabled via settings into the GetRuntimeEnableFunctionName() machinery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310284</commentid>
    <comment_count>4</comment_count>
      <attachid>310555</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-18 15:09:06 -0700</bug_when>
    <thetext>Created attachment 310555
Patch and tests

Updated patch following the landing of the patch for bug #172252</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310342</commentid>
    <comment_count>5</comment_count>
      <attachid>310555</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-18 16:48:18 -0700</bug_when>
    <thetext>Comment on attachment 310555
Patch and tests

This does not really add complexity and Daniel explains this is a first step towards supporting SecureContext, so OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310344</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-18 16:49:46 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #2)
&gt; I am not a fan of continuing to promote the use of RuntimeEnabledFeature,
&gt; and instead think we should be use Settings for all &quot;settings&quot;.  I&apos;d rather
&gt; not see more features being added to support RuntimeEnabledFeature.

I think this should be a webkit-dev thread then. There was a mail thread about using RuntimeEnabled more not too long ago. I even spent time improving our support for RuntimeEnabled in the bindings generator as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310737</commentid>
    <comment_count>7</comment_count>
      <attachid>310555</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-19 13:13:20 -0700</bug_when>
    <thetext>Comment on attachment 310555
Patch and tests

Clearing flags on attachment: 310555

Committed r217146: &lt;http://trac.webkit.org/changeset/217146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310738</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-19 13:13:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311029</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-20 11:52:43 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Sam Weinig from comment #2)
&gt; &gt; I am not a fan of continuing to promote the use of RuntimeEnabledFeature,
&gt; &gt; and instead think we should be use Settings for all &quot;settings&quot;.  I&apos;d rather
&gt; &gt; not see more features being added to support RuntimeEnabledFeature.
&gt; 
&gt; I think this should be a webkit-dev thread then. There was a mail thread
&gt; about using RuntimeEnabled more not too long ago. I even spent time
&gt; improving our support for RuntimeEnabled in the bindings generator as a
&gt; result.

Do you have a link to that thread in the archives, I&apos;d be interested to go over it. 

By the way, in case it wasn&apos;t clear, I am all in favor of enabling features at runtime rather than compile time, I just think we should stick to one class for such configurations, and that class should be Settings. I&apos;ve plumbed through support for using Settings in the bindings, so I don&apos;t think that should be the issue.

What are the virtues of having both RuntimeEnabledFeature and Settings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311043</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-20 12:34:33 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Chris Dumez from comment #6)
&gt; &gt; (In reply to Sam Weinig from comment #2)
&gt; &gt; &gt; I am not a fan of continuing to promote the use of RuntimeEnabledFeature,
&gt; &gt; &gt; and instead think we should be use Settings for all &quot;settings&quot;.  I&apos;d rather
&gt; &gt; &gt; not see more features being added to support RuntimeEnabledFeature.
&gt; &gt; 
&gt; &gt; I think this should be a webkit-dev thread then. There was a mail thread
&gt; &gt; about using RuntimeEnabled more not too long ago. I even spent time
&gt; &gt; improving our support for RuntimeEnabled in the bindings generator as a
&gt; &gt; result.
&gt; 
&gt; Do you have a link to that thread in the archives, I&apos;d be interested to go
&gt; over it. 
&gt; 
&gt; By the way, in case it wasn&apos;t clear, I am all in favor of enabling features
&gt; at runtime rather than compile time, I just think we should stick to one
&gt; class for such configurations, and that class should be Settings. I&apos;ve
&gt; plumbed through support for using Settings in the bindings, so I don&apos;t think
&gt; that should be the issue.
&gt; 
&gt; What are the virtues of having both RuntimeEnabledFeature and Settings?

Not much AFAICT. I did not even know the Settings version until you pointed it out. I have been using RuntimeEnabledFeature exclusively for a while, most people have (You can see how little EnabledBySetting is used right now compared to EnabledAtEuntime).

I am not saying EnabledAtEuntime is better. I am saying that if EnabledBySetting is better, then this needs to be discussed and we need to actively port code from one to another. We should also make sure EnabledBySetting works for all cases, like EnabledAtEuntime (e.g. On instance, on Prototype, on Window, ...).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310423</attachid>
            <date>2017-05-17 12:05:39 -0700</date>
            <delta_ts>2017-05-18 15:09:04 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-172235-20170517120539.patch</filename>
            <type>text/plain</type>
            <size>23314</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZkZWIxZGYxYzczNTYx
YzE5N2ViYzU1NjA4YjBmMjM5Njg1MTdlOS4uOWFhNjUzMGY3ZmJmY2ZmZDA4ZmEyNThhMzliNmI0
OWVhNDEwYTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA1LTE3ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBCaW5kaW5nczogU3VwcG9y
dCBydW50aW1lLWVuYWJsZWQgZmVhdHVyZXMgaW4gc3BlY2lmaWMgd29ybGRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyMzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgYSBmdW5jdGlv
biwgYXR0cmlidXRlLCBvciBpbnRlcmZhY2UgY2FuIGJlIGFubm90YXRlZCB3aXRoIGVpdGhlciBF
bmFibGVkQXRSdW50aW1lCisgICAgICAgIG9yIEVuYWJsZWRGb3JXb3JsZCAobm90IGJvdGgpIHRv
IGV4cG9zZS9jb25jZWFsIGl0IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgYSBydW50aW1lCisg
ICAgICAgIGZlYXR1cmUgZmxhZyBvciB0aGUgRE9NIHdvcmxkIGFzc29jaWF0ZWQgd2l0aCB0aGUg
cnVubmluZyBKYXZhU2NyaXB0IGNvZGUsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgRXZlbiB0aG91
Z2ggd2UgZG8gbm90IGhhdmUgYW55IGZ1bmN0aW9ucywgYXR0cmlidXRlcywgb3IgaW50ZXJmYWNl
cyB0aGF0IGFyZSBhbm5vdGF0ZWQKKyAgICAgICAgd2l0aCBib3RoIEVuYWJsZWRBdFJ1bnRpbWUg
YW5kIEVuYWJsZWRGb3JXb3JsZCBhdCB0aGUgdGltZSBvZiB3cml0aW5nLCBpdCBzZWVtcyByZWFz
b25hYmxlCisgICAgICAgIHRvIHN1cHBvcnQgc3VjaCBhIGNvbWJpbmF0aW9uIG9mIGFubm90YXRp
b25zLiBUaGlzIGFsc28gaGFzIHRoZSBiZW5lZml0IG9mIG1ha2luZyBpdAorICAgICAgICBzdHJh
aWdodGZvcndhcmQgdG8gc3VwcG9ydCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIFNlY3VyZUNvbnRl
eHQgYnkgZ2VuZXJhbGl6aW5nIHRoZSBsb2dpYworICAgICAgICB0aGF0IGdlbmVyYXRlcyB0aGUg
Y29kZSB0byBleHBvc2UvY29uY2VhbCBhIGZ1bmN0aW9uLCBhdHRyaWJ1dGUsIG9yIGludGVyZmFj
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAoR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcpOiBVc2UgYW4gYXJy
YXkgdG8gYnVpbGQgdXAgYWxsIHRoZSBjb25qdW5jdHMgaW4KKyAgICAgICAgdGhlIGNvbmRpdGlv
bmFsIGV4cHJlc3Npb24uCisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKTogU3Vic3Rp
dHV0ZSBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygpIGFuZCAkcnVudGlt
ZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nCisgICAgICAgIGZvciBHZXRSdW50aW1lRW5hYmxlRnVu
Y3Rpb25OYW1lKCkgYW5kICRlbmFibGVfZnVuY3Rpb25fcmVzdWx0LCByZXNwZWN0aXZlbHkuCisg
ICAgICAgIChHZXRSdW50aW1lRW5hYmxlRnVuY3Rpb25OYW1lKTogRGVsZXRlZC4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZElu
U3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hl
blJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZl
YXR1cmVzRW5hYmxlZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVy
ZVdpdGhNaXNzaW5nVmFsdWVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVG
ZWF0dXJlV2l0aE1pc3NpbmdWYWx1ZUVuYWJsZWRDYWxsZXIpOgorICAgICAgICBVcGRhdGUgZXhw
ZWN0ZWQgcmVzdWx0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxl
ZENhbGxlcik6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsOiBBZGQgdGVzdCBjYXNlLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDogQWRkIHRlc3QgY2FzZXMuCisKIDIwMTctMDUt
MTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCbG9iRGF0
YUZpbGVSZWZlcmVuY2U6OmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKCkgc2hvdWxkIHVzZSBta3N0
ZW1wKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KaW5kZXggZTBiMzQ2ZWYzYmNmMGE0NzUwOTk2ZTY3MGQ4MDU4N2VhZGNlZmM0ZC4u
NjZlMWNhNTgzNmU4MjcxYzIxYzU1OTMyNWMwOWQ1NDQyYTYwMzg4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTI5NjAs
MzMgKzI5NjAsMzQgQEAgc3ViIFRvTWV0aG9kTmFtZQogICAgIHJldHVybiAkcmV0OwogfQogCi0j
IFJldHVybnMgdGhlIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMgZnVuY3Rpb24gbmFtZSB0aGF0IGlz
IGhvb2tlZCB1cCB0byBjaGVjayBpZiBhIG1ldGhvZC9hdHRyaWJ1dGUgaXMgZW5hYmxlZC4KKyMg
UmV0dXJucyB0aGUgY29uZGl0aW9uYWwgc3RyaW5nIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEg
bWV0aG9kL2F0dHJpYnV0ZSBpcyBlbmFibGVkIGF0IHJ1bnRpbWUuCisjIEEgbWV0aG9kL2F0dHJp
YnV0ZSBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgaWYgZWl0aGVyIGl0cyBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzIGZ1bmN0aW9uIHJldHVybnMKKyMgdHJ1ZSBvciBpdHMgRW5hYmxlZEZvcldvcmxkIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSAob3IgYm90aCkuCiAjIE5PVEU6IFBhcmFtZXRlciBwYXNzZWQg
aW4gbXVzdCBoYXZlIGFuICdleHRlbmRlZEF0dHJpYnV0ZXMnIHByb3BlcnR5LgotIyAgKGUuZy4g
RE9NSW50ZXJmYWNlLCBET01BdHRyaWJ1dGUsIERPTU9wZXJhdGlvbiwgRE9NSXRlcmFibGUsIGV0
Yy4pCi1zdWIgR2V0UnVudGltZUVuYWJsZUZ1bmN0aW9uTmFtZQorIyAoZS5nLiBET01JbnRlcmZh
Y2UsIERPTUF0dHJpYnV0ZSwgRE9NT3BlcmF0aW9uLCBET01JdGVyYWJsZSwgZXRjLikKK3N1YiBH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZwogewogICAgIG15ICRjb250ZXh0
ID0gc2hpZnQ7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIik7CiAKLSAgICBpZiAoJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRG
b3JXb3JsZH0pIHsKLSAgICAgICAgcmV0dXJuICJ3b3JsZEZvckRPTU9iamVjdCh0aGlzKS4iIC4g
VG9NZXRob2ROYW1lKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkRm9yV29y
bGR9KSAuICIoKSI7Ci0gICAgfQorICAgIG15IEBjb25qdW5jdHM7CisgICAgcHVzaCBAY29uanVu
Y3RzLCAid29ybGRGb3JET01PYmplY3QodGhpcykuIiAuIFRvTWV0aG9kTmFtZSgkY29udGV4dC0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEZvcldvcmxkfSkgLiAiKCkiIGlmICRjb250ZXh0
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkRm9yV29ybGR9OwogCi0gICAgIyBJZiBhIHBh
cmFtZXRlciBpcyBnaXZlbiAoZS5nLiAiRW5hYmxlZEF0UnVudGltZT1GZWF0dXJlTmFtZSIpIHJl
dHVybiB0aGUgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS57RmVhdHVy
ZU5hbWV9RW5hYmxlZCgpIG1ldGhvZC4KICAgICBpZiAoJGNvbnRleHQtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VuYWJsZWRBdFJ1bnRpbWV9ICYmICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntFbmFibGVkQXRSdW50aW1lfSBuZSAiVkFMVUVfSVNfTUlTU0lORyIpIHsKKyAgICAgICAgIyBJ
ZiBhIHBhcmFtZXRlciBpcyBnaXZlbiAoZS5nLiAiRW5hYmxlZEF0UnVudGltZT1GZWF0dXJlTmFt
ZSIpIHJldHVybiB0aGUgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS57
RmVhdHVyZU5hbWV9RW5hYmxlZCgpIG1ldGhvZC4KICAgICAgICAgbXkgQGZsYWdzID0gc3BsaXQg
LyYvLCAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEF0UnVudGltZX07Ci0g
ICAgICAgIG15ICRyZXN1bHQgPSAiIjsKICAgICAgICAgZm9yZWFjaCBteSAkZmxhZyAoQGZsYWdz
KSB7Ci0gICAgICAgICAgICAkcmVzdWx0IC49ICIgJiYgIiB1bmxlc3MgbGVuZ3RoICRyZXN1bHQg
ZXEgMDsKLSAgICAgICAgICAgICRyZXN1bHQgLj0gIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuIiAuIFRvTWV0aG9kTmFtZSgkZmxhZykgLiAiRW5hYmxlZCgpIgorICAg
ICAgICAgICAgcHVzaCBAY29uanVuY3RzLCAiUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS4iIC4gVG9NZXRob2ROYW1lKCRmbGFnKSAuICJFbmFibGVkKCkiOwogICAgICAg
ICB9Ci0gICAgICAgICRyZXN1bHQgPSAiKCIgLiAkcmVzdWx0IC4gIikiIHVubGVzcyBzY2FsYXIg
QGZsYWdzIGVxIDE7Ci0gICAgICAgIHJldHVybiAkcmVzdWx0OworICAgIH0gZWxzaWYgKCRjb250
ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkQXRSdW50aW1lfSkgeworICAgICAgICAj
IE90aGVyd2lzZSByZXR1cm4gYSBmdW5jdGlvbiBuYW1lZCBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLnttZXRob2ROYW1lfUVuYWJsZWQoKS4KKyAgICAgICAgcHVzaCBA
Y29uanVuY3RzLCAiUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS4iIC4g
VG9NZXRob2ROYW1lKCRjb250ZXh0LT5uYW1lKSAuICJFbmFibGVkKCkiOwogICAgIH0KIAotICAg
ICMgT3RoZXJ3aXNlIHJldHVybiBhIGZ1bmN0aW9uIG5hbWVkIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkue21ldGhvZE5hbWV9RW5hYmxlZCgpLgotICAgIHJldHVybiAi
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS4iIC4gVG9NZXRob2ROYW1l
KCRjb250ZXh0LT5uYW1lKSAuICJFbmFibGVkKCkiOworICAgIG15ICRyZXN1bHQgPSBqb2luKCIg
JiYgIiwgQGNvbmp1bmN0cyk7CisgICAgJHJlc3VsdCA9ICIoJHJlc3VsdCkiIGlmIEBjb25qdW5j
dHMgPiAxOworICAgIHJldHVybiAkcmVzdWx0OwogfQogCiBzdWIgR2V0Q2FzdGluZ0hlbHBlckZv
clRoaXNPYmplY3QKQEAgLTM0MjAsOSArMzQyMSw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+
R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb25PckF0dHJpYnV0ZSk7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIpOwotICAgICAgICAgICAgbXkgJGVuYWJsZV9mdW5jdGlvbl9y
ZXN1bHQgPSBHZXRSdW50aW1lRW5hYmxlRnVuY3Rpb25OYW1lKCRmdW5jdGlvbk9yQXR0cmlidXRl
KTsKKyAgICAgICAgICAgIG15ICRydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcgPSBHZW5l
cmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb25PckF0dHJpYnV0ZSk7
CiAgICAgICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbk9yQXR0cmlidXRlLT5uYW1lOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke2VuYWJsZV9mdW5jdGlvbl9y
ZXN1bHR9KSB7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
JHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIk
bmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7XG4iKTsK
QEAgLTM1NTMsOSArMzU1NCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lm
ICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgICAg
IG15ICRlbmFibGVfZnVuY3Rpb25fcmVzdWx0ID0gR2V0UnVudGltZUVuYWJsZUZ1bmN0aW9uTmFt
ZSgkYXR0cmlidXRlKTsKKyAgICAgICAgbXkgJHJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmlu
ZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUpOwog
ICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke2VuYWJsZV9mdW5jdGlvbl9yZXN1bHR9KSB7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCR7cnVudGltZUVuYWJsZUNv
bmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CiAgICAgICAgIG15ICRnZXR0ZXIgPSBHZXRBdHRyaWJ1
dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwogICAgICAg
ICBteSAkc2V0dGVyID0gSXNSZWFkb25seSgkYXR0cmlidXRlKSA/ICJudWxscHRyIiA6IEdldEF0
dHJpYnV0ZVNldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0
ZXIgPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRlciwgJHNldHRlcik7XG4i
KTsKQEAgLTM1ODgsMTIgKzM1ODksMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAog
ICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVD
b25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24pOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAg
ICAgICBteSAkZW5hYmxlX2Z1bmN0aW9uX3Jlc3VsdCA9IEdldFJ1bnRpbWVFbmFibGVGdW5jdGlv
bk5hbWUoJGZ1bmN0aW9uKTsKKyAgICAgICAgbXkgJHJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0
cmluZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbik7
CiAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPm5hbWU7CiAgICAgICAgIG15
ICRpbXBsZW1lbnRhdGlvbkZ1bmN0aW9uID0gR2V0RnVuY3Rpb25OYW1lKCRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRmdW5jdGlvbik7CiAgICAgICAgIG15ICRmdW5jdGlvbkxlbmd0aCA9IEdldEZ1
bmN0aW9uTGVuZ3RoKCRmdW5jdGlvbik7CiAgICAgICAgIG15ICRqc0F0dHJpYnV0ZXMgPSBDb21w
dXRlRnVuY3Rpb25TcGVjaWFsKCRpbnRlcmZhY2UsICRmdW5jdGlvbik7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICgke2VuYWJsZV9mdW5jdGlvbl9yZXN1bHR9KVxuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke3J1bnRpbWVFbmFibGVDb25kaXRp
b25hbFN0cmluZ30pXG4iKTsKIAogICAgICAgICBteSAkcHJvcGVydHlOYW1lID0gInZtLnByb3Bl
cnR5TmFtZXMtPiRmdW5jdGlvbk5hbWUiOwogICAgICAgICAkcHJvcGVydHlOYW1lID0gInN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIg
LiAkZnVuY3Rpb25OYW1lIC4gIlByaXZhdGVOYW1lKCkiIGlmICRmdW5jdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNw
cAppbmRleCBkZTAyMzgxNzI3YzY1OTBkZjFjZDJjOTJmY2Q1NzU1ZTk2NjViNWNkLi5mMWIyY2Uy
YzJhYTc5ZTczOTk4NjUzZmYzM2ZmNzBiYjE5ZGRlYWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmNwcApAQCAtNDgsNiArNDgsOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYQogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZChKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1
bnRpbWVGZWF0dXJlc0VuYWJsZWQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhNaXNzaW5nVmFsdWVFbmFibGVk
KEpTQzo6RXhlY1N0YXRlKik7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
VGVzdFByaXZhdGVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCkBAIC0xNjUsNiAr
MTY4LDEyIEBAIHZvaWQgSlNUZXN0R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAjZW5kaWYKICAgICBpZiAod29ybGRGb3JET01PYmplY3QodGhpcykuc3BlY2lmaWNXb3JsZCgp
KQogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgdm0ucHJvcGVydHlO
YW1lcy0+ZW5hYmxlZEluU3BlY2lmaWNXb3JsZCwgMSwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFu
Y2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGQsIE5vSW50cmluc2ljLCBhdHRyaWJ1dGVz
Rm9yU3RydWN0dXJlKEpTQzo6RnVuY3Rpb24pKTsKKyAgICBpZiAoKHdvcmxkRm9yRE9NT2JqZWN0
KHRoaXMpLnNwZWNpZmljV29ybGQoKSAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb24odm0sIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPmVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkLCAxLCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQs
IE5vSW50cmluc2ljLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKEpTQzo6RnVuY3Rpb24pKTsKKyAg
ICBpZiAoKHdvcmxkRm9yRE9NT2JqZWN0KHRoaXMpLnNwZWNpZmljV29ybGQoKSAmJiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpICYm
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmUxRW5h
YmxlZCgpKSkKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIHZtLnBy
b3BlcnR5TmFtZXMtPmVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5h
YmxlZCwgMSwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNp
ZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCwgTm9JbnRyaW5zaWMsIGF0dHJpYnV0
ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpGdW5jdGlvbikpOworICAgIGlmICgod29ybGRGb3JET01PYmpl
Y3QodGhpcykuc3BlY2lmaWNXb3JsZCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhN
aXNzaW5nVmFsdWVFbmFibGVkRW5hYmxlZCgpKSkKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb24odm0sIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPmVuYWJsZWRJblNwZWNpZmljV29ybGRX
aGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZCwgMSwganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZl
YXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZCwgTm9JbnRyaW5zaWMsIGF0dHJpYnV0ZXNGb3JT
dHJ1Y3R1cmUoSlNDOjpGdW5jdGlvbikpOwogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiAgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVF
bmFibGVkKCkpCiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS50
ZXN0UHJpdmF0ZUZ1bmN0aW9uUHJpdmF0ZU5hbWUoKSwgMCwganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb24sIE5vSW50cmluc2ljLCBhdHRyaWJ1dGVz
Rm9yU3RydWN0dXJlKEpTQzo6RnVuY3Rpb24pKTsKQEAgLTQ3Nyw2ICs0ODYsNjYgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkSW5TcGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZl
YXR1cmVFbmFibGVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0Kiwg
SlNDOjpUaHJvd1Njb3BlJik7CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVu
dGltZUZlYXR1cmVFbmFibGVkKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxP
YmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVh
dHVyZUVuYWJsZWRDYWxsZXI+KHN0YXRlLCAiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50
aW1lRmVhdHVyZUVuYWJsZWQiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaW1wbC5lbmFibGVkSW5TcGVjaWZp
Y1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChXVEZNb3ZlKHRlc3RQYXJhbSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
RW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CisK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZChF
eGVjU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmNhbGxPcGVyYXRpb248anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZENhbGxlcj4o
c3RhdGUsICJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQi
KTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlc0VuYWJsZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAg
YXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1l
RmVhdHVyZXNFbmFibGVkKFdURk1vdmUodGVzdFBhcmFtKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZp
Y1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlV2l0aE1pc3NpbmdWYWx1ZUVuYWJsZWRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhNaXNzaW5n
VmFsdWVFbmFibGVkKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdp
dGhNaXNzaW5nVmFsdWVFbmFibGVkQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZCIpOworfQorCitzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2lu
Z1ZhbHVlRW5hYmxlZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgaW1wbC5lbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRp
bWVGZWF0dXJlV2l0aE1pc3NpbmdWYWx1ZUVuYWJsZWQoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCmluZGV4IGRhMjNlNDc3NDU1NDNlYmViMmI4NjcxZmUyYzJhMjAxOTA3ZDU5NmQuLjUz
YTJjMmZlOGYxYjQ0ZjNhNWI1ZDgzOTRkMTc1NDI0NmI0NzI1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0x
MTA4LDYgKzExMDgsOSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFy
eUMgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYQogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNX
b3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhNaXNzaW5nVmFsdWVFbmFibGVkKEpTQzo6RXhlY1N0
YXRlKik7CisjZW5kaWYKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsK
ICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOwpAQCAtMTc2NSw2ICsxNzY4LDExIEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICNlbHNlCiAgICAg
eyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgorI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCisgICAgeyAiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVy
ZVdpdGhNaXNzaW5nVmFsdWVFbmFibGVkIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2lu
Z1ZhbHVlRW5hYmxlZCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBO
b0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgogICAgIHsgIndvcmxkU3BlY2lmaWNNZXRo
b2QiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01l
dGhvZCksIChpbnRwdHJfdCkgKDEpIH0gfSwKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAg
IHsgImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiksIChpbnRwdHJfdCkgKDEpIH0g
fSwKQEAgLTE5NjAsNiArMTk2OCwxMyBAQCB2b2lkIEpTVGVzdE9ialByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQorICAgIGlmICghKHdvcmxkRm9yRE9NT2JqZWN0KHRoaXMpLnNvbWVXb3JsZCgpICYmIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZW5hYmxlZEluU3BlY2lmaWNX
b3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhNaXNzaW5nVmFsdWVFbmFibGVkRW5hYmxlZCgpKSkg
eworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRJblNwZWNpZmlj
V29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZCIpLCBzdHJsZW4o
ImVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVl
RW5hYmxlZCIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZt
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSwgcHJvcGVydHlOYW1lKTsKKyAgICB9CisjZW5kaWYKICAgICBpZiAoIXdvcmxkRm9yRE9NT2Jq
ZWN0KHRoaXMpLnNvbWVXb3JsZCgpKSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigid29ybGRTcGVjaWZpY01ldGhvZCIpLCBzdHJsZW4oIndvcmxkU3BlY2lmaWNNZXRob2Qi
KSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKQEAgLTUzNzMsNiArNTM4OCwy
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbgogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdp
dGhNaXNzaW5nVmFsdWVFbmFibGVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlV2l0aE1pc3NpbmdWYWx1ZUVuYWJsZWQoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhN
aXNzaW5nVmFsdWVFbmFibGVkQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29ybGRX
aGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZCIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFi
bGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlV2l0aE1pc3NpbmdWYWx1ZUVuYWJs
ZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBj
b252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdpdGhNaXNzaW5n
VmFsdWVFbmFibGVkKFdURk1vdmUodGVzdFBhcmFtKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldvcmxkU3BlY2lmaWNNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0R2xvYmFsT2JqZWN0LmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0R2xvYmFsT2JqZWN0LmlkbApp
bmRleCAxMjQ1YWFkNWMzNjY3YmRhYzg5ZjFlMzFjMzk2OTdhYjk4YjM0OGYwLi5hOWMxM2NmZmQ3
OGU2ZTkzNjAwYzAwMTVjZDNlMDlmNTZkMDAxOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEdsb2JhbE9iamVjdC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsCkBAIC0z
Nyw2ICszNywxMCBAQAogCiAgICAgW0VuYWJsZWRGb3JXb3JsZD1zcGVjaWZpY1dvcmxkXSB2b2lk
IGVuYWJsZWRJblNwZWNpZmljV29ybGQobG9uZyB0ZXN0UGFyYW0pOwogCisgICAgW0VuYWJsZWRG
b3JXb3JsZD1zcGVjaWZpY1dvcmxkLCBFbmFibGVkQXRSdW50aW1lPVRlc3RGZWF0dXJlXSB2b2lk
IGVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKGxvbmcgdGVz
dFBhcmFtKTsKKyAgICBbRW5hYmxlZEZvcldvcmxkPXNwZWNpZmljV29ybGQsIEVuYWJsZWRBdFJ1
bnRpbWU9VGVzdEZlYXR1cmUmVGVzdEZlYXR1cmUxXSB2b2lkIGVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZChsb25nIHRlc3RQYXJhbSk7CisgICAgW0VuYWJs
ZWRGb3JXb3JsZD1zcGVjaWZpY1dvcmxkLCBFbmFibGVkQXRSdW50aW1lXSB2b2lkIGVuYWJsZWRJ
blNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVXaXRoTWlzc2luZ1ZhbHVlRW5hYmxlZChs
b25nIHRlc3RQYXJhbSk7CisKICAgICBbUHJpdmF0ZUlkZW50aWZpZXIsIENvbmRpdGlvbmFsPVRF
U1RfRkVBVFVSRSwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gdm9pZCB0ZXN0UHJpdmF0
ZUZ1bmN0aW9uKCk7CiAgICAgW0pTQnVpbHRpbiwgQ29uZGl0aW9uYWw9VEVTVF9GRUFUVVJFLCBF
bmFibGVkQXRSdW50aW1lPVRlc3RGZWF0dXJlXSB2b2lkIHRlc3RKU0J1aWx0aW5GdW5jdGlvbigp
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbAppbmRleCBkNTQ0NzY1OGE1OGZhMDJhM2U2NTIwYWFlOTJiMzllZjBlNDA5ZjE4Li40MTE5
NThhOTM1ZjFlZWU4MzAxNGQzMDAwYWY1NTYzMWUzY2Y0ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0xMTEsNiArMTExLDgg
QEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIgfTsKICAgICBbQ29u
ZGl0aW9uYWw9VEVTVF9GRUFUVVJFLCBFbmFibGVkQXRSdW50aW1lPVRlc3RGZWF0dXJlXSB2b2lk
IGVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oRE9NU3RyaW5nIHRlc3RQYXJhbSk7CiAgICAgW0Nv
bmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gdm9p
ZCBlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKGxvbmcgdGVzdFBhcmFtKTsKIAorICAgIFtDb25k
aXRpb25hbD1URVNUX0ZFQVRVUkUsIEVuYWJsZWRGb3JXb3JsZD1zb21lV29ybGQsIEVuYWJsZWRB
dFJ1bnRpbWVdIHZvaWQgZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZVdp
dGhNaXNzaW5nVmFsdWVFbmFibGVkKGxvbmcgdGVzdFBhcmFtKTsKKwogICAgIFtFbmFibGVkRm9y
V29ybGQ9c29tZVdvcmxkXSB2b2lkIHdvcmxkU3BlY2lmaWNNZXRob2QobG9uZyB0ZXN0UGFyYW0p
OwogCiAgICAgLy8gW0VuYWJsZWRCeVNldHRpbmddIGF0dHJpYnV0ZXMgYW5kIG9wZXJhdGlvbnMu
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310555</attachid>
            <date>2017-05-18 15:09:06 -0700</date>
            <delta_ts>2017-05-19 13:13:20 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-172235-20170518150905.patch</filename>
            <type>text/plain</type>
            <size>20006</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE3MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhhY2EzZTBiODA0MGE5
MWJkY2Y2OWNlZjQzOGM5ZjUzM2QwMDY2NS4uZjA3NDUwYzI1Zjg0OWU1M2Q5NTk4NmI3MDA2Yzcw
ZDdkNjdmMmQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDE3LTA1LTE4ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBCaW5kaW5nczogU3VwcG9y
dCBydW50aW1lLWVuYWJsZWQgZmVhdHVyZXMgaW4gc3BlY2lmaWMgd29ybGRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyMzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgYSBmdW5jdGlv
biwgYXR0cmlidXRlLCBvciBpbnRlcmZhY2UgY2FuIGJlIGFubm90YXRlZCB3aXRoIGVpdGhlciBF
bmFibGVkQXRSdW50aW1lCisgICAgICAgIG9yIEVuYWJsZWRGb3JXb3JsZCAobm90IGJvdGgpIHRv
IGV4cG9zZS9jb25jZWFsIGl0IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgYSBydW50aW1lCisg
ICAgICAgIGZlYXR1cmUgZmxhZyBvciB0aGUgRE9NIHdvcmxkIGFzc29jaWF0ZWQgd2l0aCB0aGUg
cnVubmluZyBKYXZhU2NyaXB0IGNvZGUsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgRXZlbiB0aG91
Z2ggd2UgZG8gbm90IGhhdmUgYW55IGZ1bmN0aW9ucywgYXR0cmlidXRlcywgb3IgaW50ZXJmYWNl
cyB0aGF0IGFyZSBhbm5vdGF0ZWQKKyAgICAgICAgd2l0aCBib3RoIEVuYWJsZWRBdFJ1bnRpbWUg
YW5kIEVuYWJsZWRGb3JXb3JsZCBhdCB0aGUgdGltZSBvZiB3cml0aW5nLCBpdCBzZWVtcyByZWFz
b25hYmxlCisgICAgICAgIHRvIHN1cHBvcnQgc3VjaCBhIGNvbWJpbmF0aW9uIG9mIGFubm90YXRp
b25zLiBUaGlzIGFsc28gaGFzIHRoZSBiZW5lZml0IG9mIG1ha2luZyBpdAorICAgICAgICBzdHJh
aWdodGZvcndhcmQgdG8gc3VwcG9ydCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIFNlY3VyZUNvbnRl
eHQgYnkgZ2VuZXJhbGl6aW5nIHRoZSBsb2dpYworICAgICAgICB0aGF0IGdlbmVyYXRlcyB0aGUg
Y29kZSB0byBleHBvc2UvY29uY2VhbCBhIGZ1bmN0aW9uLCBhdHRyaWJ1dGUsIG9yIGludGVyZmFj
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAoR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcpOiBVc2UgYW4gYXJy
YXkgdG8gYnVpbGQgdXAgYWxsIHRoZSBjb25qdW5jdHMgaW4KKyAgICAgICAgdGhlIGNvbmRpdGlv
bmFsIGV4cHJlc3Npb24uCisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKTogU3Vic3Rp
dHV0ZSBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygpIGFuZCAkcnVudGlt
ZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nCisgICAgICAgIGZvciBHZXRSdW50aW1lRW5hYmxlRnVu
Y3Rpb25OYW1lKCkgYW5kICRlbmFibGVfZnVuY3Rpb25fcmVzdWx0LCByZXNwZWN0aXZlbHkuCisg
ICAgICAgIChHZXRSdW50aW1lRW5hYmxlRnVuY3Rpb25OYW1lKTogRGVsZXRlZC4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
SW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCk6CisgICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmlj
V29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQ2FsbGVyKToKKyAgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3Js
ZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkKToKKyAgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50
aW1lRmVhdHVyZXNFbmFibGVkQ2FsbGVyKToKKyAgICAgICAgIFVwZGF0ZSBleHBlY3RlZCByZXN1
bHRzLgorCisgICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
OgorICAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZElu
U3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQpOgorICAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5S
dW50aW1lRmVhdHVyZUVuYWJsZWRDYWxsZXIpOgorICAgICAgICAgRGl0dG8uCisKKyAgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsOiBBZGRlZCB0ZXN0
IGNhc2VzLgorICAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFk
ZGVkIHRlc3QgY2FzZS4KKworMjAxNy0wNS0xOCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBs
ZS5jb20+CisKICAgICAgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBBY2Nlc3MtQ29udHJv
bC1BbGxvdy1PcmlnaW4gdmlvbGF0aW9uIGR1ZSB0byBtaXNjb25maWd1cmVkIHNlcnZlcgogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODE5CiAgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8yODU3NTkzOD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMzM3MTIwNTM5NmFmNDQ5OTI4
YmE5OWUzOGZmZGNmNDE0NTFiZTQzMC4uMjM3OGE2NmMwYTc1NDk1NTkzZTQ3NWMxYmJiZTcyMWRj
NjhkNzk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KQEAgLTI5NjAsMzEgKzI5NjAsMzQgQEAgc3ViIFRvTWV0aG9kTmFtZQog
ICAgIHJldHVybiAkcmV0OwogfQogCi0jIFJldHVybnMgdGhlIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMgZnVuY3Rpb24gbmFtZSB0aGF0IGlzIGhvb2tlZCB1cCB0byBjaGVjayBpZiBhIG1ldGhvZC9h
dHRyaWJ1dGUgaXMgZW5hYmxlZC4KKyMgUmV0dXJucyB0aGUgY29uZGl0aW9uYWwgc3RyaW5nIHRo
YXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgbWV0aG9kL2F0dHJpYnV0ZSBpcyBlbmFibGVkIGF0IHJ1
bnRpbWUuCisjIEEgbWV0aG9kL2F0dHJpYnV0ZSBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgaWYgZWl0
aGVyIGl0cyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzIGZ1bmN0aW9uIHJldHVybnMKKyMgdHJ1ZSBv
ciBpdHMgRW5hYmxlZEZvcldvcmxkIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSAob3IgYm90aCkuCiAj
IE5PVEU6IFBhcmFtZXRlciBwYXNzZWQgaW4gbXVzdCBoYXZlIGFuICdleHRlbmRlZEF0dHJpYnV0
ZXMnIHByb3BlcnR5LgotIyAgKGUuZy4gRE9NSW50ZXJmYWNlLCBET01BdHRyaWJ1dGUsIERPTU9w
ZXJhdGlvbiwgRE9NSXRlcmFibGUsIGV0Yy4pCi1zdWIgR2V0UnVudGltZUVuYWJsZUZ1bmN0aW9u
TmFtZQorIyAoZS5nLiBET01JbnRlcmZhY2UsIERPTUF0dHJpYnV0ZSwgRE9NT3BlcmF0aW9uLCBE
T01JdGVyYWJsZSwgZXRjLikKK3N1YiBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0
cmluZwogewogICAgIG15ICRjb250ZXh0ID0gc2hpZnQ7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIik7CiAKKyAgICBteSBAY29uanVuY3RzOwogICAg
IGlmICgkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEZvcldvcmxkfSkgewog
ICAgICAgICBhc3NlcnQoIk11c3Qgc3BlY2lmeSB2YWx1ZSBmb3IgRW5hYmxlZEZvcldvcmxkLiIp
IGlmICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkRm9yV29ybGR9IGVxICJW
QUxVRV9JU19NSVNTSU5HIjsKLSAgICAgICAgcmV0dXJuICJ3b3JsZEZvckRPTU9iamVjdCh0aGlz
KS4iIC4gVG9NZXRob2ROYW1lKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVk
Rm9yV29ybGR9KSAuICIoKSI7CisgICAgICAgIHB1c2ggQGNvbmp1bmN0cywgIndvcmxkRm9yRE9N
T2JqZWN0KHRoaXMpLiIgLiBUb01ldGhvZE5hbWUoJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0VuYWJsZWRGb3JXb3JsZH0pIC4gIigpIjsKICAgICB9CiAKICAgICBpZiAoJGNvbnRleHQt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRBdFJ1bnRpbWV9KSB7CiAgICAgICAgIGFzc2Vy
dCgiTXVzdCBzcGVjaWZ5IHZhbHVlIGZvciBFbmFibGVkQXRSdW50aW1lLiIpIGlmICRjb250ZXh0
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkQXRSdW50aW1lfSBlcSAiVkFMVUVfSVNfTUlT
U0lORyI7CiAgICAgICAgIG15IEBmbGFncyA9IHNwbGl0IC8mLywgJGNvbnRleHQtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0VuYWJsZWRBdFJ1bnRpbWV9OwotICAgICAgICBteSAkcmVzdWx0ID0gIiI7
CiAgICAgICAgIGZvcmVhY2ggbXkgJGZsYWcgKEBmbGFncykgewotICAgICAgICAgICAgJHJlc3Vs
dCAuPSAiICYmICIgdW5sZXNzIGxlbmd0aCAkcmVzdWx0IGVxIDA7Ci0gICAgICAgICAgICAkcmVz
dWx0IC49ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLiIgLiBUb01l
dGhvZE5hbWUoJGZsYWcpIC4gIkVuYWJsZWQoKSIKKyAgICAgICAgICAgIHB1c2ggQGNvbmp1bmN0
cywgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuIiAuIFRvTWV0aG9k
TmFtZSgkZmxhZykgLiAiRW5hYmxlZCgpIjsKICAgICAgICAgfQotICAgICAgICAkcmVzdWx0ID0g
IigiIC4gJHJlc3VsdCAuICIpIiB1bmxlc3Mgc2NhbGFyIEBmbGFncyBlcSAxOwotICAgICAgICBy
ZXR1cm4gJHJlc3VsdDsKICAgICB9CisKKyAgICBteSAkcmVzdWx0ID0gam9pbigiICYmICIsIEBj
b25qdW5jdHMpOworICAgICRyZXN1bHQgPSAiKCRyZXN1bHQpIiBpZiBAY29uanVuY3RzID4gMTsK
KyAgICByZXR1cm4gJHJlc3VsdDsKIH0KIAogc3ViIEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2Jq
ZWN0CkBAIC0zNDE3LDkgKzM0MjAsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbk9yQXR0cmlidXRlIChAcnVudGltZUVuYWJsZWRQcm9w
ZXJ0aWVzKSB7CiAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVy
YXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb25PckF0dHJpYnV0ZSk7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgICAgICAgICAgbXkgJGVuYWJsZV9mdW5jdGlv
bl9yZXN1bHQgPSBHZXRSdW50aW1lRW5hYmxlRnVuY3Rpb25OYW1lKCRmdW5jdGlvbk9yQXR0cmli
dXRlKTsKKyAgICAgICAgICAgIG15ICRydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb25PckF0dHJpYnV0
ZSk7CiAgICAgICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbk9yQXR0cmlidXRlLT5uYW1lOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke2VuYWJsZV9mdW5jdGlv
bl9yZXN1bHR9KSB7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICghJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
XCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZt
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7XG4i
KTsKQEAgLTM1NTAsOSArMzU1Myw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAg
ICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAg
ICAgIG15ICRlbmFibGVfZnVuY3Rpb25fcmVzdWx0ID0gR2V0UnVudGltZUVuYWJsZUZ1bmN0aW9u
TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgbXkgJHJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0
cmluZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUp
OwogICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke2VuYWJsZV9mdW5jdGlvbl9yZXN1bHR9KSB7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCR7cnVudGltZUVuYWJs
ZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CiAgICAgICAgIG15ICRnZXR0ZXIgPSBHZXRBdHRy
aWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwogICAg
ICAgICBteSAkc2V0dGVyID0gSXNSZWFkb25seSgkYXR0cmlidXRlKSA/ICJudWxscHRyIiA6IEdl
dEF0dHJpYnV0ZVNldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiBjdXN0b21HZXR0ZXJT
ZXR0ZXIgPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRlciwgJHNldHRlcik7
XG4iKTsKQEAgLTM1ODUsMTIgKzM1ODgsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
IAogICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24pOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwot
ICAgICAgICBteSAkZW5hYmxlX2Z1bmN0aW9uX3Jlc3VsdCA9IEdldFJ1bnRpbWVFbmFibGVGdW5j
dGlvbk5hbWUoJGZ1bmN0aW9uKTsKKyAgICAgICAgbXkgJHJ1bnRpbWVFbmFibGVDb25kaXRpb25h
bFN0cmluZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlv
bik7CiAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPm5hbWU7CiAgICAgICAg
IG15ICRpbXBsZW1lbnRhdGlvbkZ1bmN0aW9uID0gR2V0RnVuY3Rpb25OYW1lKCRpbnRlcmZhY2Us
ICRjbGFzc05hbWUsICRmdW5jdGlvbik7CiAgICAgICAgIG15ICRmdW5jdGlvbkxlbmd0aCA9IEdl
dEZ1bmN0aW9uTGVuZ3RoKCRmdW5jdGlvbik7CiAgICAgICAgIG15ICRqc0F0dHJpYnV0ZXMgPSBD
b21wdXRlRnVuY3Rpb25TcGVjaWFsKCRpbnRlcmZhY2UsICRmdW5jdGlvbik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke2VuYWJsZV9mdW5jdGlvbl9yZXN1bHR9KVxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke3J1bnRpbWVFbmFibGVDb25k
aXRpb25hbFN0cmluZ30pXG4iKTsKIAogICAgICAgICBteSAkcHJvcGVydHlOYW1lID0gInZtLnBy
b3BlcnR5TmFtZXMtPiRmdW5jdGlvbk5hbWUiOwogICAgICAgICAkcHJvcGVydHlOYW1lID0gInN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygp
LiIgLiAkZnVuY3Rpb25OYW1lIC4gIlByaXZhdGVOYW1lKCkiIGlmICRmdW5jdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAppbmRleCBkZTAyMzgxNzI3YzY1OTBkZjFjZDJjOTJmY2Q1NzU1ZTk2NjViNWNkLi5kOTcy
OGFlN2YxYTBmOGU3MzEyYmFmNzM3N2UwYzJkYmIyMmFlM2VhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcApAQCAtNDgsNiArNDgsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYQogSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5k
aWYKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxl
ZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hl
blJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQoSlNDOjpFeGVjU3RhdGUqKTsKICNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
Kik7CiAjZW5kaWYKQEAgLTE2NSw2ICsxNjcsMTAgQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICNlbmRpZgogICAgIGlmICh3b3JsZEZvckRPTU9iamVj
dCh0aGlzKS5zcGVjaWZpY1dvcmxkKCkpCiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT5lbmFibGVkSW5TcGVjaWZpY1dvcmxkLCAxLCBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZCwg
Tm9JbnRyaW5zaWMsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpGdW5jdGlvbikpOworICAg
IGlmICgod29ybGRGb3JET01PYmplY3QodGhpcykuc3BlY2lmaWNXb3JsZCgpICYmIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkpKQor
ICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgdm0ucHJvcGVydHlOYW1l
cy0+ZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQsIDEsIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hl
blJ1bnRpbWVGZWF0dXJlRW5hYmxlZCwgTm9JbnRyaW5zaWMsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1
cmUoSlNDOjpGdW5jdGlvbikpOworICAgIGlmICgod29ybGRGb3JET01PYmplY3QodGhpcykuc3Bl
Y2lmaWNXb3JsZCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
dGVzdEZlYXR1cmVFbmFibGVkKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS50ZXN0RmVhdHVyZTFFbmFibGVkKCkpKQorICAgICAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbih2bSwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+ZW5hYmxlZEluU3BlY2lmaWNXb3Js
ZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkLCAxLCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVk
LCBOb0ludHJpbnNpYywgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShKU0M6OkZ1bmN0aW9uKSk7CiAj
aWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkKICAgICAgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLnRlc3RQcml2YXRlRnVuY3Rpb25Qcml2YXRlTmFt
ZSgpLCAwLCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpGdW5jdGlvbikp
OwpAQCAtNDc3LDYgKzQ4Myw0NiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
RW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQoRXhlY1N0YXRl
KiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
SW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZENhbGxlcj4oc3RhdGUsICJl
bmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOworfQorCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFu
Y2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVk
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGF1dG8gdGVzdFBh
cmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBpbXBsLmVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFi
bGVkKFdURk1vdmUodGVzdFBhcmFtKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1
bnRpbWVGZWF0dXJlc0VuYWJsZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxP
YmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3Js
ZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5S
dW50aW1lRmVhdHVyZXNFbmFibGVkQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJ
blNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaW1wbC5lbmFi
bGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQoV1RGTW92ZSh0ZXN0
UGFyYW0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlv
bkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGRhMjNlNDc3NDU1NDNlYmViMmI4NjcxZmUyYzJhMjAx
OTA3ZDU5NmQuLjk3N2UyN2Y4ODY4ZDg4N2ZiNzk3Nzg1OTFmM2JmZDZhN2JhZDA2YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCkBAIC0xMTA4LDYgKzExMDgsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlv
bmFsRGljdGlvbmFyeUMgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYQogI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CiAjZW5kaWYKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGlt
ZUZlYXR1cmVFbmFibGVkKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9k
KEpTQzo6RXhlY1N0YXRlKik7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRC
eVNldHRpbmdPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKQEAgLTE3NjUsNiArMTc2Niw3IEBA
IHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVl
c1tdID0KICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRp
ZgorICAgIHsgImVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVk
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmlj
V29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKSwgKGludHB0cl90KSAoMSkgfSB9LAogICAg
IHsgIndvcmxkU3BlY2lmaWNNZXRob2QiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZCksIChpbnRwdHJfdCkgKDEpIH0gfSwKICNpZiBFTkFC
TEUoVEVTVF9GRUFUVVJFKQogICAgIHsgImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iLCBKU0M6
OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlv
biksIChpbnRwdHJfdCkgKDEpIH0gfSwKQEAgLTE5NjAsNiArMTk2MiwxMSBAQCB2b2lkIEpTVGVz
dE9ialByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYK
KyAgICBpZiAoISh3b3JsZEZvckRPTU9iamVjdCh0aGlzKS5zb21lV29ybGQoKSAmJiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkg
eworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRJblNwZWNpZmlj
V29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIiksIHN0cmxlbigiZW5hYmxlZEluU3BlY2lm
aWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKSk7CisgICAgICAgIFZNOjpEZWxldGVQ
cm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3Jl
Q29uZmlndXJhYmxlKTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgfQogICAgIGlm
ICghd29ybGRGb3JET01PYmplY3QodGhpcykuc29tZVdvcmxkKCkpIHsKICAgICAgICAgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ3b3JsZFNwZWNpZmljTWV0aG9kIiksIHN0cmxlbigid29y
bGRTcGVjaWZpY01ldGhvZCIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3Bl
IHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwpA
QCAtNTM3Myw2ICs1MzgwLDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uCiB9CiAjZW5kaWYK
IAorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWRDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKEV4ZWNTdGF0ZSogc3Rh
dGUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVu
dGltZUZlYXR1cmVFbmFibGVkQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29ybGRX
aGVuUnVudGltZUZlYXR1cmVFbmFibGVkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29y
bGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpbXBsLmVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVu
UnVudGltZUZlYXR1cmVFbmFibGVkKFdURk1vdmUodGVzdFBhcmFtKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwogc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhv
ZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V29ybGRTcGVjaWZpY01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsCmlu
ZGV4IDEyNDVhYWQ1YzM2NjdiZGFjODlmMWUzMWMzOTY5N2FiOThiMzQ4ZjAuLjNhMDhmYmE0MDVh
OGVkYzUwY2M2M2RkYzgxN2MxNmUzZWZmYzI2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0R2xvYmFsT2JqZWN0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEdsb2JhbE9iamVjdC5pZGwKQEAgLTM3
LDYgKzM3LDkgQEAKIAogICAgIFtFbmFibGVkRm9yV29ybGQ9c3BlY2lmaWNXb3JsZF0gdm9pZCBl
bmFibGVkSW5TcGVjaWZpY1dvcmxkKGxvbmcgdGVzdFBhcmFtKTsKIAorICAgIFtFbmFibGVkRm9y
V29ybGQ9c3BlY2lmaWNXb3JsZCwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gdm9pZCBl
bmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChsb25nIHRlc3RQ
YXJhbSk7CisgICAgW0VuYWJsZWRGb3JXb3JsZD1zcGVjaWZpY1dvcmxkLCBFbmFibGVkQXRSdW50
aW1lPVRlc3RGZWF0dXJlJlRlc3RGZWF0dXJlMV0gdm9pZCBlbmFibGVkSW5TcGVjaWZpY1dvcmxk
V2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQobG9uZyB0ZXN0UGFyYW0pOworCiAgICAgW1ByaXZh
dGVJZGVudGlmaWVyLCBDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIEVuYWJsZWRBdFJ1bnRpbWU9
VGVzdEZlYXR1cmVdIHZvaWQgdGVzdFByaXZhdGVGdW5jdGlvbigpOwogICAgIFtKU0J1aWx0aW4s
IENvbmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0g
dm9pZCB0ZXN0SlNCdWlsdGluRnVuY3Rpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggZDU0NDc2NThhNThmYTAyYTNl
NjUyMGFhZTkyYjM5ZWYwZTQwOWYxOC4uMGFkN2NlNmYzZGM2YTlhMGNmMGZlNzkxMmY2NTIzYmRk
YWNiNjUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbApAQCAtMTExLDYgKzExMSw4IEBAIGVudW0gVGVzdENvbmZpZGVuY2UgeyAiaGln
aCIsICJraW5kYS1sb3ciIH07CiAgICAgW0NvbmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgRW5hYmxl
ZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gdm9pZCBlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKERP
TVN0cmluZyB0ZXN0UGFyYW0pOwogICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIEVuYWJs
ZWRBdFJ1bnRpbWU9VGVzdEZlYXR1cmVdIHZvaWQgZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihs
b25nIHRlc3RQYXJhbSk7CiAKKyAgICBbRW5hYmxlZEZvcldvcmxkPXNvbWVXb3JsZCwgRW5hYmxl
ZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gdm9pZCBlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1
bnRpbWVGZWF0dXJlRW5hYmxlZChsb25nIHRlc3RQYXJhbSk7CisKICAgICBbRW5hYmxlZEZvcldv
cmxkPXNvbWVXb3JsZF0gdm9pZCB3b3JsZFNwZWNpZmljTWV0aG9kKGxvbmcgdGVzdFBhcmFtKTsK
IAogICAgIC8vIFtFbmFibGVkQnlTZXR0aW5nXSBhdHRyaWJ1dGVzIGFuZCBvcGVyYXRpb25zLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>