<?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>30095</bug_id>
          
          <creation_ts>2009-10-05 14:51:07 -0700</creation_ts>
          <short_desc>StringImpl needs a method to get an instance for another thread which doesn&apos;t copy the underlying buffer.</short_desc>
          <delta_ts>2009-10-06 00:46:26 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>152473</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-05 14:51:07 -0700</bug_when>
    <thetext>The primary motivation has been long strings that can be formed in workers which need to be passed to the main thread, but this should benefit other places as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152488</commentid>
    <comment_count>1</comment_count>
      <attachid>40667</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-05 15:26:37 -0700</bug_when>
    <thetext>Created attachment 40667
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152493</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-05 15:40:15 -0700</bug_when>
    <thetext>This is in support of finally implementing WorkerContext::resourceRetrievedByXMLHttpRequest and WorkerContext::scriptImported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152494</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-10-05 15:43:03 -0700</bug_when>
    <thetext>One nit:

&gt; diff --git a/WebCore/storage/StorageNamespaceImpl.cpp b/WebCore/storage/StorageNamespaceImpl.cpp
&gt; index bc9d90c..ab540f1 100644
&gt; --- a/WebCore/storage/StorageNamespaceImpl.cpp
&gt; +++ b/WebCore/storage/StorageNamespaceImpl.cpp
&gt; @@ -65,7 +65,7 @@ PassRefPtr&lt;StorageNamespace&gt; StorageNamespaceImpl::sessionStorageNamespace()
&gt;  
&gt;  StorageNamespaceImpl::StorageNamespaceImpl(StorageType storageType, const String&amp; path, unsigned quota)
&gt;      : m_storageType(storageType)
&gt; -    , m_path(path.copy())  // Copy makes it safe for our other thread to access the path.
&gt; +    , m_path(path.crossThreadString()) // Make it safe for our other thread to access the path.

This comment seems redundant now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152528</commentid>
    <comment_count>4</comment_count>
      <attachid>40667</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-05 17:47:47 -0700</bug_when>
    <thetext>Comment on attachment 40667
Proposed fix.

Just marking as cq- because I want to land this myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152541</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-10-05 19:12:39 -0700</bug_when>
    <thetext>&quot;call was made threadsafeCopy unless I could show that *threadsafey* wasn&apos;t needed.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152616</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-06 00:46:26 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/49160.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40667</attachid>
            <date>2009-10-05 15:26:37 -0700</date>
            <delta_ts>2009-10-05 17:47:46 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug30095.txt</filename>
            <type>text/plain</type>
            <size>43686</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwYjdmNWExLi45NTZkYjI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMDktMTAtMDUgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0cmluZ0ltcGwgbmVl
ZHMgYSBtZXRob2QgdG8gZ2V0IGFuIGluc3RhbmNlIGZvciBhbm90aGVyIHRocmVhZCB3aGljaCBk
b2Vzbid0IGNvcHkgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwOTUKKworICAgICAgICAqIHd0Zi9Dcm9zc1Ro
cmVhZFJlZkNvdW50ZWQuaDoKKyAgICAgICAgUmVtb3ZlZCBhbiB1bnVzZWQgZnVuY3Rpb24gYW5k
IGFzc2VydCBpbXByb3ZlbWVudC4KKyAgICAgICAgKFdURjo6Q3Jvc3NUaHJlYWRSZWZDb3VudGVk
Ojppc093bmVkQnlDdXJyZW50VGhyZWFkKTogTW92ZWQgb3V0IGNvbW1vbiBjb2RlIGZyb20gYXNz
ZXJ0cy4KKyAgICAgICAgKFdURjo6Q3Jvc3NUaHJlYWRSZWZDb3VudGVkOjpyZWYpOiBDaGFuZ2Vk
IGFzc2VydCB0byB1c2UgdGhlIGNvbW1vbiBtZXRob2QuCisgICAgICAgIChXVEY6OkNyb3NzVGhy
ZWFkUmVmQ291bnRlZDo6ZGVyZWYpOiBDaGFuZ2VkIGFzc2VydCB0byB1c2UgdGhlIGNvbW1vbiBt
ZXRob2QuCisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUmVmQ291bnRlZDo6Y3Jvc3NUaHJlYWRD
b3B5KTogU2luY2UgdGhlcmUgaXMgYSBwb3RlbnRpYWxseSwKKyAgICAgICAgbm9uLXRocmVhZHNh
ZmUgb3BlcmF0aW9uIGFkZCBhbiBhc3NlcnQgdGhhdCB0aGUgY2xhc3MgaXMgb3duZWQgYnkgdGhl
IGN1cnJlbnQgdGhyZWFkLgorCiAyMDA5LTEwLTAyICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAppbmRleCA2YTA1MjExLi5mNjgyZjBkIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCkBAIC03MCwxMCAr
NzAsNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiAhbV9yZWZDb3VudGVy
Lmhhc09uZVJlZigpIHx8IChtX3RocmVhZFNhZmVSZWZDb3VudGVyICYmICFtX3RocmVhZFNhZmVS
ZWZDb3VudGVyLT5oYXNPbmVSZWYoKSk7CiAgICAgICAgIH0KIAotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgYm9vbCBtYXlCZVBhc3NlZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0IHsgQVNTRVJUKCFt
X3RocmVhZElkKTsgcmV0dXJuIG1fcmVmQ291bnRlci5oYXNPbmVSZWYoKTsgfQotI2VuZGlmCi0K
ICAgICBwcml2YXRlOgogICAgICAgICBDcm9zc1RocmVhZFJlZkNvdW50ZWQoVCogZGF0YSwgVGhy
ZWFkU2FmZVNoYXJlZEJhc2UqIHRocmVhZGVkQ291bnRlcikKICAgICAgICAgICAgIDogbV90aHJl
YWRTYWZlUmVmQ291bnRlcih0aHJlYWRlZENvdW50ZXIpCkBAIC05Miw2ICs4OCwxMCBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogICAgICAgICB2b2lkIHRocmVhZFNhZmVEZXJlZigpOwogCisjaWZuZGVm
IE5ERUJVRworICAgICAgICBib29sIGlzT3duZWRCeUN1cnJlbnRUaHJlYWQoKSBjb25zdCB7IHJl
dHVybiAhbV90aHJlYWRJZCB8fCBtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKTsgfQorI2Vu
ZGlmCisKICAgICAgICAgUmVmQ291bnRlZEJhc2UgbV9yZWZDb3VudGVyOwogICAgICAgICBUaHJl
YWRTYWZlU2hhcmVkQmFzZSogbV90aHJlYWRTYWZlUmVmQ291bnRlcjsKICAgICAgICAgVCogbV9k
YXRhOwpAQCAtMTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPGNs
YXNzIFQ+CiAgICAgdm9pZCBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46OnJlZigpCiAgICAgewot
ICAgICAgICBBU1NFUlQoIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFk
KCkpOworICAgICAgICBBU1NFUlQoaXNPd25lZEJ5Q3VycmVudFRocmVhZCgpKTsKICAgICAgICAg
bV9yZWZDb3VudGVyLnJlZigpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gU3RvcmUgdGhl
IHRocmVhZElkIGFzIHNvb24gYXMgdGhlIHJlZiBjb3VudCBnZXRzIHRvIDIuCkBAIC0xMTksNyAr
MTE5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgICB2b2lk
IENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPjo6ZGVyZWYoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCFtX3RocmVhZElkIHx8IG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAg
QVNTRVJUKGlzT3duZWRCeUN1cnJlbnRUaHJlYWQoKSk7CiAgICAgICAgIGlmIChtX3JlZkNvdW50
ZXIuZGVyZWZCYXNlKCkpIHsKICAgICAgICAgICAgIHRocmVhZFNhZmVEZXJlZigpOwogICAgICAg
ICAgICAgZGVsZXRlIHRoaXM7CkBAIC0xNDYsMTAgKzE0NiwxMiBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPgogICAgIFBhc3NSZWZQdHI8Q3Jvc3NUaHJlYWRSZWZDb3Vu
dGVkPFQ+ID4gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+Ojpjcm9zc1RocmVhZENvcHkoKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzT3duZWRCeUN1cnJlbnRUaHJlYWQoKSk7CiAgICAgICAgIGlm
IChtX3RocmVhZFNhZmVSZWZDb3VudGVyKQogICAgICAgICAgICAgbV90aHJlYWRTYWZlUmVmQ291
bnRlci0+cmVmKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdGhyZWFkU2FmZVJlZkNv
dW50ZXIgPSBuZXcgVGhyZWFkU2FmZVNoYXJlZEJhc2UoMik7CisKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD4obV9kYXRhLCBtX3RocmVhZFNhZmVS
ZWZDb3VudGVyKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDEwODMzZmEuLjA2YWNkZDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBACisy
MDA5LTEwLTA1ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHJpbmdJbXBsIG5lZWRzIGEg
bWV0aG9kIHRvIGdldCBhbiBpbnN0YW5jZSBmb3IgYW5vdGhlciB0aHJlYWQgd2hpY2ggZG9lc24n
dCBjb3B5IHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMDk1CisKKyAgICAgICAgQWxsIFN0cmluZzo6Y29weSBt
ZXRob2RzIHdlcmUgY2hhbmdlZCB0byBjYWxsIGVpdGhlciB0aHJlYWRzYWZlQ29weSBvciBjcm9z
c1RocmVhZFN0cmluZy4gVGhlIG1ldGhvZAorICAgICAgICBjYWxsIHdhcyBtYWRlIHRocmVhZHNh
ZmVDb3B5IHVubGVzcyBJIGNvdWxkIHNob3cgdGhhdCB0aHJlYWRzYWZleSB3YXNuJ3QgbmVlZGVk
LgorCisgICAgICAgIE5vIHZpc2libGUgY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6RXZlbnREYXRhKToKKyAg
ICAgICAgKiBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFk
QnJpZGdlKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjppY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnJl
dGFpbkljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6cmVs
ZWFzZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6c2V0
SWNvbkRhdGFGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6c2V0
SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkYXRh
YmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJh
c2VGaWxlbmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4pOiBTaW5jZSB0aGlzIGlz
IHVzZWQgYnkgU2VjdXJpdHlPcmlnaW46OnRocmVhZHNhZmVDb3B5LAorICAgICAgICBpdCBtYWtl
cyB0aHJlYWRzYWZlIGNhbGxzLgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRo
cmVhZHNhZmVDb3B5KTogVGhlIG9ubHkgcGxhY2UgdGhhdCBjYWxsZWQgdGhpcworICAgICAgICBu
ZWVkZWQgYSB0aHJlYWRzYWZlIG1ldGhvZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2lu
Lmg6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Ojpjb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OmNvcHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUEhl
YWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjpjb3B5RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yQmFzZTo6Y29weSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OmNvcHlEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFZhbHVlOjpTUUxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxWYWx1ZTo6c3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMVmFsdWUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFZhbHVlOjpTUUxWYWx1ZSk6CisgICAgICAgIEFsbCBj
b25zdHJ1Y3RvcnMgbm93IGluaXRpYWxpemUgdGhlIG1fbnVtYmVyIHdoaWNoIGlzIGEgZG91Ymxl
LiBGYWlsdXJlIHRvCisgICAgICAgIGRvIHNvIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFz
aGVzIHdoZW4gaXQgaXMgY29waWVkIGluIHRoZSBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICBT
ZWUgaHR0cDovL2Jsb2dzLm1zZG4uY29tL29sZG5ld3RoaW5nL2FyY2hpdmUvMjAwOC8wNy8wMi84
Njc5MTkxLmFzcHgsIEkgd2FzIHRoYXQgY29sbGVhZ3VlLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnRocmVhZHNhZmVDb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZzo6Y3Jvc3NUaHJlYWRTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIFJlbW92ZWQgU3RyaW5nSW1wbDo6c3Vic3RyaW5n
Q29weSB3aGljaCB3YXMgbm8gbG9uZ2VyIGJlaW5nIHVzZWQgYW55d2hlcmUuCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjp0aHJlYWRzYWZlQ29weSk6IENoYW5nZWQgdGhlIG5hbWUgdG8g
aW5kaWNhdGUgdGhhdAorICAgICAgICBpdCBpcyB0aHJlYWRzYWZlLgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nSW1wbDo6Y3Jvc3NUaHJlYWRTdHJpbmcpOiBUaGUgd2F5IHRvIGdldCBzdHJpbmdz
IGZvcgorICAgICAgICBhbm90aGVyIHRocmVhZCB3aGljaCBpcyBub3QgdGhyZWFkc2FmZS4gVGhp
cyBzaGFyZXMgdGhlIHVuZGVybHlpbmcgYnVmZmVyCisgICAgICAgIHdpdGggYm90aCBzdHJpbmdz
IGFuZCBnaXZlcyB0aGVtIGEgd2F5IHRvIGRvIHRocmVhZHNhZmUgcmVmY291bnRpbmcgZm9yIGl0
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAqIHN0b3Jh
Z2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVy
c2lvbldyYXBwZXI6OkNoYW5nZVZlcnNpb25XcmFwcGVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRWZXJzaW9uTWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6
OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW5Db3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKToKKyAgICAgICAgKiBzdG9yYWdl
L09yaWdpblF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5RdW90YU1h
bmFnZXI6OmFkZERhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxFcnJvcjo6bWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxF
cnJvcjo6U1FMRXJyb3IpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YVN5bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6aW1wb3J0SXRlbSk6CisgICAgICAgICog
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwpOgorICAgICAgICAqIHN0b3Jh
Z2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5j
TWFuYWdlcjo6U3RvcmFnZVN5bmNNYW5hZ2VyKToKKyAgICAgICAgKiB3b3JrZXJzL0RlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtl
clByb3h5Ojp1cmwpOiBEbyB0aGUgY29weSBvZiB0aGUgdXJsIGluIGEgd2F5IHRoYXQgaXMgdGhy
ZWFkc2FmZS4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRXb3JrZXJQcm94eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Z2V0UHJveHkp
OiBEbyB0aGUgY29weSBvZiB0aGUgdXJsIGluIGEgd2F5IHRoYXQgaXMgdGhyZWFkc2FmZS4KKyAg
ICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVhZCk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
V29ya2VyQ29udGV4dFRhc2s6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6TWVzc2FnZVdvcmtlclRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6V29ya2VyRXhjZXB0aW9uVGFzayk6CisgICAg
ICAgICogd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clJ1bkxvb3A6OlRhc2s6OlRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6
cG9zdFRhc2tGb3JNb2RlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3Rh
cnR1cERhdGEpOgorCiAyMDA5LTEwLTA0ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
IAogICAgICAgICBSZXZlcnQgcHJldmlvdXMgcGF0Y2gsIGFzIHRoZSBuZXdseSBhZGRlZCB0ZXN0
IGJyZWFrcyBvdGhlciB0ZXN0cy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCmluZGV4IDM0
YjJjZTcuLjU0NGNhYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5l
bC5jcHAKKysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmNwcApAQCAtMzksNyAr
MzksNyBAQCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBNZXNzYWdl
UG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6Y3JlYXRlKAogfQogCiBNZXNzYWdlUG9ydENoYW5uZWw6
OkV2ZW50RGF0YTo6RXZlbnREYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi0gICAgOiBtX21lc3NhZ2UobWVzc2Fn
ZS5jb3B5KCkpCisgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jcm9zc1RocmVhZFN0cmluZygpKQog
ICAgICwgbV9jaGFubmVscyhjaGFubmVscykKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggNjgxOTc1OS4uYmQzNjJmNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZShQYXNzUmVm
UHRyPFRocmVhZGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29ya2VyQ2xpZW50V3Jh
cHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwgbV9sb2FkZXJQcm94eShsb2FkZXJQcm94
eSkKLSAgICAsIG1fdGFza01vZGUodGFza01vZGUuY29weSgpKQorICAgICwgbV90YXNrTW9kZSh0
YXNrTW9kZS5jcm9zc1RocmVhZFN0cmluZygpKQogewogICAgIEFTU0VSVChtX3dvcmtlckNsaWVu
dFdyYXBwZXIuZ2V0KCkpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVh
dGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIs
IHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cAppbmRleCBiNzgyOTFkLi43OGNhMGE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
Y3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBt
X2RhdGFiYXNlRGlyZWN0b3J5ID0gZGF0YWJhc2VQYXRoLmNvcHkoKTsKKyAgICBtX2RhdGFiYXNl
RGlyZWN0b3J5ID0gZGF0YWJhc2VQYXRoLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAKICAgICAvLyBG
b3JtdWxhdGUgdGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGRhdGFiYXNlIGZpbGUKICAgICBtX2NvbXBs
ZXRlRGF0YWJhc2VQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJl
Y3RvcnksIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOwpAQCAtMjI3LDcgKzIyNyw3IEBAIElt
YWdlKiBJY29uRGF0YWJhc2U6Omljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTE9y
aWdpbmFsLCBjb25zdCBJbnRTaXplCiAgICAgCiAgICAgUGFnZVVSTFJlY29yZCogcGFnZVJlY29y
ZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmdldChwYWdlVVJMT3JpZ2luYWwpOwogICAgIGlmICgh
cGFnZVJlY29yZCkgewotICAgICAgICBwYWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5jb3B5
KCk7CisgICAgICAgIHBhZ2VVUkxDb3B5ID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3Ry
aW5nKCk7CiAgICAgICAgIHBhZ2VSZWNvcmQgPSBnZXRPckNyZWF0ZVBhZ2VVUkxSZWNvcmQocGFn
ZVVSTENvcHkpOwogICAgIH0KICAgICAKQEAgLTI2Myw3ICsyNjMsNyBAQCBJbWFnZSogSWNvbkRh
dGFiYXNlOjppY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCwgY29u
c3QgSW50U2l6ZQogICAgIC8vIG1hcmsgaXQgdG8gYmUgcmVhZCBieSB0aGUgYmFja2dyb3VuZCB0
aHJlYWQKICAgICBpZiAoaWNvblJlY29yZC0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1hZ2VEYXRh
U3RhdHVzVW5rbm93bikgewogICAgICAgICBpZiAocGFnZVVSTENvcHkuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBwYWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5jb3B5KCk7CisgICAgICAgICAg
ICBwYWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOwogICAg
IAogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5kaW5nUmVhZGluZ0xvY2spOwogICAg
ICAgICBtX3BhZ2VVUkxzSW50ZXJlc3RlZEluSWNvbnMuYWRkKHBhZ2VVUkxDb3B5KTsKQEAgLTMx
Miw3ICszMTIsNyBAQCBTdHJpbmcgSWNvbkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCkKICAgICAKICAgICBQYWdlVVJMUmVjb3JkKiBwYWdl
UmVjb3JkID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZ2V0KHBhZ2VVUkxPcmlnaW5hbCk7CiAgICAg
aWYgKCFwYWdlUmVjb3JkKQotICAgICAgICBwYWdlUmVjb3JkID0gZ2V0T3JDcmVhdGVQYWdlVVJM
UmVjb3JkKHBhZ2VVUkxPcmlnaW5hbC5jb3B5KCkpOworICAgICAgICBwYWdlUmVjb3JkID0gZ2V0
T3JDcmVhdGVQYWdlVVJMUmVjb3JkKHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygp
KTsKICAgICAKICAgICAvLyBJZiBwYWdlUmVjb3JkIGlzIE5VTEwsIG9uZSBvZiB0d28gdGhpbmdz
IGlzIHRydWUgLQogICAgIC8vIDEgLSBUaGUgaW5pdGlhbCB1cmwgaW1wb3J0IGlzIGluY29tcGxl
dGUgYW5kIHRoaXMgcGFnZVVSTCBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCB0byBiZSBub3RpZmll
ZCBvbmNlIGl0IGlzIGNvbXBsZXRlIGlmIGFuIGljb25VUkwgZXhpc3RzCkBAIC0zMjEsNyArMzIx
LDcgQEAgU3RyaW5nIEljb25EYXRhYmFzZTo6aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
JiBwYWdlVVJMT3JpZ2luYWwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAv
LyBQb3NzaWJsZSB0aGUgcGFnZVJlY29yZCBpcyBhcm91bmQgYmVjYXVzZSBpdCdzIGEgcmV0YWlu
ZWQgcGFnZVVSTCB3aXRoIG5vIGljb25VUkwsIHNvIHdlIGhhdmUgdG8gY2hlY2sKLSAgICByZXR1
cm4gcGFnZVJlY29yZC0+aWNvblJlY29yZCgpID8gcGFnZVJlY29yZC0+aWNvblJlY29yZCgpLT5p
Y29uVVJMKCkuY29weSgpIDogU3RyaW5nKCk7CisgICAgcmV0dXJuIHBhZ2VSZWNvcmQtPmljb25S
ZWNvcmQoKSA/IHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKS0+aWNvblVSTCgpLnRocmVhZHNhZmVD
b3B5KCkgOiBTdHJpbmcoKTsKIH0KIAogI2lmZGVmIENBTl9USEVNRV9VUkxfSUNPTgpAQCAtNDA1
LDcgKzQwNSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCkKICAgICBTdHJpbmcgcGFnZVVSTDsKICAgICAKICAg
ICBpZiAoIXJlY29yZCkgewotICAgICAgICBwYWdlVVJMID0gcGFnZVVSTE9yaWdpbmFsLmNvcHko
KTsKKyAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygp
OwogCiAgICAgICAgIHJlY29yZCA9IG5ldyBQYWdlVVJMUmVjb3JkKHBhZ2VVUkwpOwogICAgICAg
ICBtX3BhZ2VVUkxUb1JlY29yZE1hcC5zZXQocGFnZVVSTCwgcmVjb3JkKTsKQEAgLTQxMyw3ICs0
MTMsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJiBwYWdlVVJMT3JpZ2luYWwpCiAgICAgCiAgICAgaWYgKCFyZWNvcmQtPnJldGFpbigpKSB7
CiAgICAgICAgIGlmIChwYWdlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgcGFnZVVSTCA9IHBh
Z2VVUkxPcmlnaW5hbC5jb3B5KCk7CisgICAgICAgICAgICBwYWdlVVJMID0gcGFnZVVSTE9yaWdp
bmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAKICAgICAgICAgLy8gVGhpcyBwYWdlIGp1c3QgaGFk
IGl0cyByZXRhaW4gY291bnQgYnVtcGVkIGZyb20gMCB0byAxIC0gUmVjb3JkIHRoYXQgZmFjdAog
ICAgICAgICBtX3JldGFpbmVkUGFnZVVSTHMuYWRkKHBhZ2VVUkwpOwpAQCAtNDg4LDcgKzQ4OCw3
IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
JiBwYWdlVVJMT3JpZ2luYWwpCiAgICAgLy8gTWFyayBzdHVmZiBmb3IgZGVsZXRpb24gZnJvbSB0
aGUgZGF0YWJhc2Ugb25seSBpZiB3ZSdyZSBub3QgaW4gcHJpdmF0ZSBicm93c2luZwogICAgIGlm
ICghbV9wcml2YXRlQnJvd3NpbmdFbmFibGVkKSB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3BlbmRpbmdTeW5jTG9jayk7Ci0gICAgICAgIG1fcGFnZVVSTHNQZW5kaW5nU3luYy5zZXQo
cGFnZVVSTE9yaWdpbmFsLmNvcHkoKSwgcGFnZVJlY29yZC0+c25hcHNob3QodHJ1ZSkpOworICAg
ICAgICBtX3BhZ2VVUkxzUGVuZGluZ1N5bmMuc2V0KHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVh
ZFN0cmluZygpLCBwYWdlUmVjb3JkLT5zbmFwc2hvdCh0cnVlKSk7CiAgICAgCiAgICAgICAgIC8v
IElmIHRoaXMgcGFnZSBpcyB0aGUgbGFzdCBwYWdlIHRvIHJlZmVyIHRvIGEgcGFydGljdWxhciBJ
Y29uUmVjb3JkLCB0aGF0IEljb25SZWNvcmQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgbWFya2Vk
IGZvciBkZWxldGlvbgpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJ
Y29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFPcmlnaW5hbCwK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBk
YXRhT3JpZ2luYWwgPyBkYXRhT3JpZ2luYWwtPmNvcHkoKSA6IDA7Ci0gICAgU3RyaW5nIGljb25V
UkwgPSBpY29uVVJMT3JpZ2luYWwuY29weSgpOworICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVS
TE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgCiAgICAgVmVjdG9yPFN0cmluZz4g
cGFnZVVSTHM7CiAgICAgewpAQCAtNTg5LDggKzU4OSw4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpz
ZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkxPcmlnaW5hbCwgY29uc3Qg
U3RyCiAgICAgICAgIGlmIChwYWdlUmVjb3JkICYmIHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKSAm
JiBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCktPmljb25VUkwoKSA9PSBpY29uVVJMT3JpZ2luYWwp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgcGFnZVVSTCA9IHBh
Z2VVUkxPcmlnaW5hbC5jb3B5KCk7Ci0gICAgICAgIGljb25VUkwgPSBpY29uVVJMT3JpZ2luYWwu
Y29weSgpOworICAgICAgICBwYWdlVVJMID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3Ry
aW5nKCk7CisgICAgICAgIGljb25VUkwgPSBpY29uVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJp
bmcoKTsKIAogICAgICAgICBpZiAoIXBhZ2VSZWNvcmQpIHsKICAgICAgICAgICAgIHBhZ2VSZWNv
cmQgPSBuZXcgUGFnZVVSTFJlY29yZChwYWdlVVJMKTsKQEAgLTg0NywxMyArODQ3LDEzIEBAIGJv
b2wgSWNvbkRhdGFiYXNlOjppc09wZW4oKSBjb25zdAogU3RyaW5nIEljb25EYXRhYmFzZTo6ZGF0
YWJhc2VQYXRoKCkgY29uc3QKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zeW5jTG9jayk7
Ci0gICAgcmV0dXJuIG1fY29tcGxldGVEYXRhYmFzZVBhdGguY29weSgpOworICAgIHJldHVybiBt
X2NvbXBsZXRlRGF0YWJhc2VQYXRoLnRocmVhZHNhZmVDb3B5KCk7CiB9CiAKIFN0cmluZyBJY29u
RGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkKIHsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUsICgiV2VicGFnZUljb25zLmRi
IikpOwotICAgIHJldHVybiBkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZS5jb3B5KCk7CisgICAgcmV0
dXJuIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7CiB9CiAKIC8vIFVu
bGlrZSBnZXRPckNyZWF0ZVBhZ2VVUkxSZWNvcmQoKSwgZ2V0T3JDcmVhdGVJY29uUmVjb3JkKCkg
ZG9lcyBub3QgbWFyayB0aGUgaWNvbiBhcyAiaW50ZXJlc3RlZCBpbiBpbXBvcnQiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwIGIvV2ViQ29yZS9wYWdlL1NlY3Vy
aXR5T3JpZ2luLmNwcAppbmRleCBiOTFjMWYxLi41MDMxODk1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAKQEAgLTExNiw5ICsxMTYsOSBAQCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4o
Y29uc3QgS1VSTCYgdXJsKQogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29u
c3QgU2VjdXJpdHlPcmlnaW4qIG90aGVyKQotICAgIDogbV9wcm90b2NvbChvdGhlci0+bV9wcm90
b2NvbC5jb3B5KCkpCi0gICAgLCBtX2hvc3Qob3RoZXItPm1faG9zdC5jb3B5KCkpCi0gICAgLCBt
X2RvbWFpbihvdGhlci0+bV9kb21haW4uY29weSgpKQorICAgIDogbV9wcm90b2NvbChvdGhlci0+
bV9wcm90b2NvbC50aHJlYWRzYWZlQ29weSgpKQorICAgICwgbV9ob3N0KG90aGVyLT5tX2hvc3Qu
dGhyZWFkc2FmZUNvcHkoKSkKKyAgICAsIG1fZG9tYWluKG90aGVyLT5tX2RvbWFpbi50aHJlYWRz
YWZlQ29weSgpKQogICAgICwgbV9wb3J0KG90aGVyLT5tX3BvcnQpCiAgICAgLCBtX25vQWNjZXNz
KG90aGVyLT5tX25vQWNjZXNzKQogICAgICwgbV91bml2ZXJzYWxBY2Nlc3Mob3RoZXItPm1fdW5p
dmVyc2FsQWNjZXNzKQpAQCAtMTQ0LDcgKzE0NCw3IEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVFbXB0eSgpCiAgICAgcmV0dXJuIGNyZWF0ZShLVVJM
KCkpOwogfQogCi1QYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y29w
eSgpCitQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6dGhyZWFkc2Fm
ZUNvcHkoKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4odGhpcykp
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmggYi9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAppbmRleCA3MzJhZmE4Li41Nzk5MGQ0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAorKysgYi9XZWJDb3JlL3BhZ2UvU2VjdXJp
dHlPcmlnaW4uaApAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoaXMgU2VjdXJpdHlPcmlnaW4uICBUaGlzIG1l
dGhvZCBpcyB1c2VmdWwKICAgICAgICAgLy8gd2hlbiBtYXJzaGFsbGluZyBhIFNlY3VyaXR5T3Jp
Z2luIHRvIGFub3RoZXIgdGhyZWFkLgotICAgICAgICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBjb3B5KCk7CisgICAgICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRocmVhZHNhZmVD
b3B5KCk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBkb21haW4gcHJvcGVydHkgb2YgdGhpcyBzZWN1
cml0eSBvcmlnaW4gdG8gbmV3RG9tYWluLiAgVGhpcwogICAgICAgICAvLyBmdW5jdGlvbiBkb2Vz
IG5vdCBjaGVjayB3aGV0aGVyIG5ld0RvbWFpbiBpcyBhIHN1ZmZpeCBvZiB0aGUgY3VycmVudApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCA5Y2E2MjZmLi5kMDJkYTZj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcApAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgU3Ry
aW5nPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OmNvcHkoY29u
c3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgcmV0dXJuIHN0ci5jb3B5KCk7CisgICAgcmV0dXJuIHN0
ci5jcm9zc1RocmVhZFN0cmluZygpOwogfQogCiBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IFJlc291cmNlRXJyb3I+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3Vy
Y2VFcnJvcj46OmNvcHkoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAppbmRl
eCBhYTljNjI0Li5mZmFjYzE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lk
IEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbgogS1VSTCBLVVJMOjpjb3B5KCkgY29uc3QKIHsKICAgICBLVVJM
IHJlc3VsdCA9ICp0aGlzOwotICAgIHJlc3VsdC5tX3N0cmluZyA9IHJlc3VsdC5tX3N0cmluZy5j
b3B5KCk7CisgICAgcmVzdWx0Lm1fc3RyaW5nID0gcmVzdWx0Lm1fc3RyaW5nLmNyb3NzVGhyZWFk
U3RyaW5nKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBIZWFkZXJNYXAuY3BwCmluZGV4IGZmNDcwYTAuLjA3YzY2ZTggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgYXV0
b19wdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRUUEhlYWRlck1hcDo6Y29weURh
dGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kX2l0ID0g
ZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2lu
KCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWly
KGl0LT5maXJzdC5zdHJpbmcoKS5jb3B5KCksIGl0LT5zZWNvbmQuY29weSgpKSk7CisgICAgICAg
IGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQtPmZpcnN0LnN0cmluZygpLmNyb3NzVGhyZWFkU3Ry
aW5nKCksIGl0LT5zZWNvbmQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkpOwogICAgIH0KICAgICByZXR1
cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUVycm9yQmFzZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJh
c2UuY3BwCmluZGV4IDM3MDY1MGYuLjk3NDM1YmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcApAQCAtMzQsMTAgKzM0LDEwIEBAIFJlc291cmNl
RXJyb3IgUmVzb3VyY2VFcnJvckJhc2U6OmNvcHkoKSBjb25zdAogICAgIGxhenlJbml0KCk7CiAK
ICAgICBSZXNvdXJjZUVycm9yIGVycm9yQ29weTsKLSAgICBlcnJvckNvcHkubV9kb21haW4gPSBt
X2RvbWFpbi5jb3B5KCk7CisgICAgZXJyb3JDb3B5Lm1fZG9tYWluID0gbV9kb21haW4uY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKICAgICBlcnJvckNvcHkubV9lcnJvckNvZGUgPSBtX2Vycm9yQ29kZTsK
LSAgICBlcnJvckNvcHkubV9mYWlsaW5nVVJMID0gbV9mYWlsaW5nVVJMLmNvcHkoKTsKLSAgICBl
cnJvckNvcHkubV9sb2NhbGl6ZWREZXNjcmlwdGlvbiA9IG1fbG9jYWxpemVkRGVzY3JpcHRpb24u
Y29weSgpOworICAgIGVycm9yQ29weS5tX2ZhaWxpbmdVUkwgPSBtX2ZhaWxpbmdVUkwuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKKyAgICBlcnJvckNvcHkubV9sb2NhbGl6ZWREZXNjcmlwdGlvbiA9IG1f
bG9jYWxpemVkRGVzY3JpcHRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICBlcnJvckNvcHku
bV9pc051bGwgPSBtX2lzTnVsbDsKICAgICBlcnJvckNvcHkubV9pc0NhbmNlbGxhdGlvbiA9IG1f
aXNDYW5jZWxsYXRpb247CiAgICAgcmV0dXJuIGVycm9yQ29weTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCBhNjUxYTNmLi40Yzc3
OTk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCkBAIC03MywxMyArNzMsMTMgQEAgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
cXVlc3REYXRhPiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSgpIGNvbnN0CiAgICAgZGF0
YS0+bV9jYWNoZVBvbGljeSA9IGNhY2hlUG9saWN5KCk7CiAgICAgZGF0YS0+bV90aW1lb3V0SW50
ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWwoKTsKICAgICBkYXRhLT5tX2ZpcnN0UGFydHlGb3JDb29r
aWVzID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jb3B5KCk7Ci0gICAgZGF0YS0+bV9odHRwTWV0
aG9kID0gaHR0cE1ldGhvZCgpLmNvcHkoKTsKKyAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRw
TWV0aG9kKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzLmFk
b3B0KGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpKTsKIAogICAgIGRhdGEtPm1fcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0gbV9yZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGVuY29kaW5nQXJyYXlTaXplOyArK2luZGV4KSB7Ci0gICAg
ICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXkuYXBwZW5kKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXlbaW5kZXhdLmNvcHkoKSk7CisgICAgICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuYXBwZW5kKG1fcmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbaW5kZXhdLmNyb3NzVGhyZWFkU3RyaW5nKCkpOwog
ICAgIH0KICAgICBpZiAobV9odHRwQm9keSkKICAgICAgICAgZGF0YS0+bV9odHRwQm9keSA9IG1f
aHR0cEJvZHktPmRlZXBDb3B5KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmNwcAppbmRleCA3ZjhhNGUyLi5mZDQ0MjI1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAKQEAgLTEw
OCwxMiArMTA4LDEyIEBAIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb3B5RGF0YSgpIGNvbnN0CiB7CiAgICAgYXV0b19wdHI8
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YShuZXcgQ3Jvc3NUaHJlYWRSZXNv
dXJjZVJlc3BvbnNlRGF0YSgpKTsKICAgICBkYXRhLT5tX3VybCA9IHVybCgpLmNvcHkoKTsKLSAg
ICBkYXRhLT5tX21pbWVUeXBlID0gbWltZVR5cGUoKS5jb3B5KCk7CisgICAgZGF0YS0+bV9taW1l
VHlwZSA9IG1pbWVUeXBlKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICBkYXRhLT5tX2V4cGVj
dGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGRhdGEtPm1f
dGV4dEVuY29kaW5nTmFtZSA9IHRleHRFbmNvZGluZ05hbWUoKS5jb3B5KCk7Ci0gICAgZGF0YS0+
bV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lKCkuY29weSgpOworICAgIGRh
dGEtPm1fdGV4dEVuY29kaW5nTmFtZSA9IHRleHRFbmNvZGluZ05hbWUoKS5jcm9zc1RocmVhZFN0
cmluZygpOworICAgIGRhdGEtPm1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFt
ZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwU3RhdHVzQ29kZSA9IGh0
dHBTdGF0dXNDb2RlKCk7Ci0gICAgZGF0YS0+bV9odHRwU3RhdHVzVGV4dCA9IGh0dHBTdGF0dXNU
ZXh0KCkuY29weSgpOworICAgIGRhdGEtPm1faHR0cFN0YXR1c1RleHQgPSBodHRwU3RhdHVzVGV4
dCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycy5hZG9wdCho
dHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEoKSk7CiAgICAgZGF0YS0+bV9sYXN0TW9kaWZpZWRE
YXRlID0gbGFzdE1vZGlmaWVkRGF0ZSgpOwogICAgIHJldHVybiBkYXRhOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMVmFsdWUuY3BwCmluZGV4IDdlMTc4ZjkuLjBhZDY0M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKQEAgLTMyLDEwICszMiwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTUUxW
YWx1ZTo6U1FMVmFsdWUoY29uc3QgU1FMVmFsdWUmIHZhbCkKKyAgICA6IG1fdHlwZSh2YWwubV90
eXBlKQorICAgICwgbV9udW1iZXIodmFsLm1fbnVtYmVyKQorICAgICwgbV9zdHJpbmcodmFsLm1f
c3RyaW5nLnRocmVhZHNhZmVDb3B5KCkpCiB7Ci0gICAgbV9udW1iZXIgPSB2YWwubV9udW1iZXI7
Ci0gICAgbV9zdHJpbmcgPSB2YWwubV9zdHJpbmcuY29weSgpOwotICAgIG1fdHlwZSA9IHZhbC5t
X3R5cGU7CiB9CiAKIFN0cmluZyBTUUxWYWx1ZTo6c3RyaW5nKCkgY29uc3QKQEAgLTQzLDcgKzQz
LDcgQEAgU3RyaW5nIFNRTFZhbHVlOjpzdHJpbmcoKSBjb25zdAogICAgIEFTU0VSVChtX3R5cGUg
PT0gU3RyaW5nVmFsdWUpOwogCiAgICAgLy8gTXVzdCByZXR1cm4gYSBjb3B5IHNpbmNlIHJlZi1z
aGFyZWQgU3RyaW5ncyBhcmUgbm90IHRocmVhZCBzYWZlCi0gICAgcmV0dXJuIG1fc3RyaW5nLmNv
cHkoKTsKKyAgICByZXR1cm4gbV9zdHJpbmcudGhyZWFkc2FmZUNvcHkoKTsKIH0KIAogZG91Ymxl
IFNRTFZhbHVlOjpudW1iZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMVmFsdWUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgKaW5kZXggN2Q4
NTA1MS4uMGY4NTRmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oCkBAIC0zOCw5ICszOCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gVHlwZSB7IE51
bGxWYWx1ZSwgTnVtYmVyVmFsdWUsIFN0cmluZ1ZhbHVlIH07CiAKLSAgICAgICAgU1FMVmFsdWUo
KSA6IG1fdHlwZShOdWxsVmFsdWUpIHsgfQorICAgICAgICBTUUxWYWx1ZSgpIDogbV90eXBlKE51
bGxWYWx1ZSksIG1fbnVtYmVyKDAuMCkgeyB9CiAgICAgICAgIFNRTFZhbHVlKGRvdWJsZSBudW1i
ZXIpIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIobnVtYmVyKSB7IH0KLSAgICAgICAg
U1FMVmFsdWUoY29uc3QgU3RyaW5nJiBzKSA6IG1fdHlwZShTdHJpbmdWYWx1ZSksIG1fc3RyaW5n
KHMpIHsgfQorICAgICAgICBTUUxWYWx1ZShjb25zdCBTdHJpbmcmIHMpIDogbV90eXBlKFN0cmlu
Z1ZhbHVlKSwgbV9udW1iZXIoMC4wKSwgbV9zdHJpbmcocykgeyB9CiAgICAgICAgIFNRTFZhbHVl
KGNvbnN0IFNRTFZhbHVlJik7CiAKICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJp
bmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCmluZGV4IGI5YjQw
NzguLjhkMTljMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0
cmluZy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCkBAIC0x
OTMsMTYgKzE5MywxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBlcmNlbnRhZ2UoaW50JiBwZXJj
ZW50YWdlKSBjb25zdDsKIAotICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9ubHkg
aWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFJl
dHVybnMgYSBTdHJpbmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCisg
ICAgU3RyaW5nIGNyb3NzVGhyZWFkU3RyaW5nKCkgY29uc3Q7CisgICAgLy8gTWFrZXMgYSBkZWVw
IGNvcHkuIEhlbHBmdWwgb25seSBpZiB5b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24gYW5vdGhl
ciB0aHJlYWQKKyAgICAvLyAodXNlIGNyb3NzVGhyZWFkU3RyaW5nIGlmIHRoZSBtZXRob2QgY2Fs
bCBkb2Vzbid0IG5lZWQgdG8gYmUgdGhyZWFkc2FmZSkuCiAgICAgLy8gU2luY2UgdGhlIHVuZGVy
bHlpbmcgU3RyaW5nSW1wbCBvYmplY3RzIGFyZSBpbW11dGFibGUsIHRoZXJlJ3Mgbm8gb3RoZXIg
cmVhc29uCiAgICAgLy8gdG8gZXZlciBwcmVmZXIgY29weSgpIG92ZXIgcGxhaW4gb2xkIGFzc2ln
bm1lbnQuCi0gICAgU3RyaW5nIGNvcHkoKSBjb25zdDsKLQotICAgIC8vIE1ha2VzIGEgZGVlcCBj
b3B5IGxpa2UgY29weSgpIGJ1dCBvbmx5IGZvciBhIHN1YnN0cmluZy4KLSAgICAvLyAoVGhpcyBl
bnN1cmVzIHRoYXQgeW91IGFsd2F5cyBnZXQgc29tZXRoaW5nIHN1aXRhYmxlIGZvciBhIHRocmVh
ZCB3aGlsZSBzdWJ0cmluZwotICAgIC8vIG1heSBub3QuICBGb3IgZXhhbXBsZSwgaW4gdGhlIGVt
cHR5IHN0cmluZyBjYXNlLCBTdHJpbmdJbXBsOjpzdWJzdHJpbmcgcmV0dXJucwotICAgIC8vIGVt
cHR5KCkgd2hpY2ggaXMgbm90IHNhZmUgZm9yIGFub3RoZXIgdGhyZWFkLikKLSAgICBTdHJpbmcg
c3Vic3RyaW5nQ29weSh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiAgPSBVSU5UX01BWCkgY29u
c3Q7CisgICAgU3RyaW5nIHRocmVhZHNhZmVDb3B5KCkgY29uc3Q7CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKaW5kZXggZTg5MmVmNi4uYmVmMjY3NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZy5jcHAKQEAgLTI2MywxMyArMjYzLDYgQEAgU3RyaW5nIFN0cmluZzo6c3Vi
c3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuKSBjb25zdAogICAgIHJldHVybiBtX2lt
cGwtPnN1YnN0cmluZyhwb3MsIGxlbik7CiB9CiAKLVN0cmluZyBTdHJpbmc6OnN1YnN0cmluZ0Nv
cHkodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwp
IAotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+c3Vic3RyaW5n
Q29weShwb3MsIGxlbik7Ci19Ci0KIFN0cmluZyBTdHJpbmc6Omxvd2VyKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1faW1wbCkKQEAgLTU5MCwxMSArNTgzLDE4IEBAIGZsb2F0IFN0cmluZzo6dG9GbG9h
dChib29sKiBvaykgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT50b0Zsb2F0KG9rKTsKIH0KIAot
U3RyaW5nIFN0cmluZzo6Y29weSgpIGNvbnN0CitTdHJpbmcgU3RyaW5nOjp0aHJlYWRzYWZlQ29w
eSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gbV9pbXBsLT50aHJlYWRzYWZlQ29weSgpOworfQorCitTdHJpbmcgU3RyaW5n
Ojpjcm9zc1RocmVhZFN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5jb3B5KCk7CisgICAgcmV0dXJu
IG1faW1wbC0+Y3Jvc3NUaHJlYWRTdHJpbmcoKTsKIH0KIAogYm9vbCBTdHJpbmc6OmlzRW1wdHko
KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDhiNzQ5YzcuLjdk
MDAzNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTIxOCwxNSArMjE4
LDYgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdWJzdHJpbmcodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0
YXJ0LCBsZW5ndGgpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN1
YnN0cmluZ0NvcHkodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBzdGFy
dCA9IG1pbihzdGFydCwgbV9sZW5ndGgpOwotICAgIGxlbmd0aCA9IG1pbihsZW5ndGgsIG1fbGVu
Z3RoIC0gc3RhcnQpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0cmluZ0ltcGwpOwotICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3RhcnQsIGxlbmd0
aCk7Ci19Ci0KIFVDaGFyMzIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25l
ZCBpKQogewogICAgIGlmIChVMTZfSVNfU0lOR0xFKG1fZGF0YVtpXSkpCkBAIC0xMDc0LDEyICsx
MDY1LDI1IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aFRl
cm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHJpbmdJbXBsKHN0cmluZywgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKSk7CiB9
CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29weSgpCitQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnRocmVhZHNhZmVDb3B5KCkgY29uc3QKIHsKICAgICAv
LyBVc2luZyB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHkgdG8gbWFrZSBzdXJlIHRoYXQgcGVyLXRo
cmVhZCBlbXB0eSBzdHJpbmcgaW5zdGFuY2UgaXNuJ3QgcmV0dXJuZWQuCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgpKTsKIH0KIAorUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZygpCit7CisgICAgU2hh
cmVkVUNoYXIqIHNoYXJlZCA9IHNoYXJlZEJ1ZmZlcigpOworICAgIGlmIChzaGFyZWQpIHsKKyAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChj
b25zdF9jYXN0PFVDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgsIEFkb3B0QnVmZmVyKCkpKTsKKyAg
ICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoc2hhcmVkLT5jcm9zc1RocmVh
ZENvcHkoKS5yZWxlYXNlUmVmKCkpOworICAgICAgICByZXR1cm4gaW1wbC5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgLy8gVXNpbmcgdGhlIGNvbnN0cnVjdG9yIGRpcmVjdGx5IHRvIG1ha2Ugc3Vy
ZSB0aGF0IHBlci10aHJlYWQgZW1wdHkgc3RyaW5nIGluc3RhbmNlIGlzbid0IHJldHVybmVkLgor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKSk7Cit9
CisKIFN0cmluZ0ltcGw6OlNoYXJlZFVDaGFyKiBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKQog
ewogICAgIGlmIChtX2xlbmd0aCA8IG1pbkxlbmd0aFRvU2hhcmUgfHwgbV9idWZmZXJJc0ludGVy
bmFsKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggOGI0ZTgyZC4uMjU0ZjAyMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xMTQsMTUgKzExNCwxMiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuKTsKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hhciopOwog
ICAgIAotICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQg
dG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFJldHVybnMgYSBTdHJp
bmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCisgICAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcm9zc1RocmVhZFN0cmluZygpOworICAgIC8vIE1ha2VzIGEgZGVlcCBj
b3B5LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIg
dGhyZWFkCisgICAgLy8gKHVzZSBjcm9zc1RocmVhZFN0cmluZyBpZiB0aGUgbWV0aG9kIGNhbGwg
ZG9lc24ndCBuZWVkIHRvIGJlIHRocmVhZHNhZmUpLgogICAgIC8vIFNpbmNlIFN0cmluZ0ltcGwg
b2JqZWN0cyBhcmUgaW1tdXRhYmxlLCB0aGVyZSdzIG5vIG90aGVyIHJlYXNvbiB0byBtYWtlIGEg
Y29weS4KLSAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNvcHkoKTsKLQotICAgIC8vIE1ha2Vz
IGEgZGVlcCBjb3B5IGxpa2UgY29weSgpIGJ1dCBvbmx5IGZvciBhIHN1YnN0cmluZy4KLSAgICAv
LyAoVGhpcyBlbnN1cmVzIHRoYXQgeW91IGFsd2F5cyBnZXQgc29tZXRoaW5nIHN1aXRhYmxlIGZv
ciBhIHRocmVhZCB3aGlsZSBzdWJ0cmluZwotICAgIC8vIG1heSBub3QuICBGb3IgZXhhbXBsZSwg
aW4gdGhlIGVtcHR5IHN0cmluZyBjYXNlLCBzdWJzdHJpbmcgcmV0dXJucyBlbXB0eSgpIHdoaWNo
Ci0gICAgLy8gaXMgbm90IHNhZmUgZm9yIGFub3RoZXIgdGhyZWFkLikKLSAgICBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHN1YnN0cmluZ0NvcHkodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gID0g
VUlOVF9NQVgpOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGhyZWFkc2FmZUNvcHkoKSBj
b25zdDsKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBv
cywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNp
b25XcmFwcGVyLmNwcAppbmRleCAzMzY2MGU3Li4xN2E5NDA3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ2hhbmdlVmVyc2lvbldyYXBwZXI6OkNoYW5nZVZlcnNpb25XcmFwcGVyKGNvbnN0
IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKQotICAgIDogbV9v
bGRWZXJzaW9uKG9sZFZlcnNpb24uY29weSgpKQotICAgICwgbV9uZXdWZXJzaW9uKG5ld1ZlcnNp
b24uY29weSgpKQorICAgIDogbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgYi9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCmluZGV4IGJlNWNkY2MuLmVhMDM0MmYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmNwcApAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3Vp
ZFZlcnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQogICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0gd2l0
aC4KIAogICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21tZW50
IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLmNvcHkoKSk7CisgICAgZ3VpZFRvVmVyc2lv
bk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVy
c2lvbi50aHJlYWRzYWZlQ29weSgpKTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNl
dDxEYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIG5hCiBEYXRhYmFzZTo6RGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKQogICAg
IDogbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9uYW1lKG5hbWUuY29weSgpKQorICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NU
aHJlYWRTdHJpbmcoKSkKICAgICAsIG1fZ3VpZCgwKQogICAgICwgbV9leHBlY3RlZFZlcnNpb24o
ZXhwZWN0ZWRWZXJzaW9uKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpAQCAtMjQ0LDcgKzI0NCw3
IEBAIGJvb2wgRGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9u
KQogCiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKIAotICAgIGJvb2wgcmVz
dWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdl
dFZlcnNpb25RdWVyeS5jb3B5KCksIHZlcnNpb24pOworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmll
dmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVy
eS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CiAKQEAgLTI4Miw3ICsyODIsNyBA
QCBib29sIERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNp
b24pCiAKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwogCi0gICAgYm9vbCBy
ZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNp
b25RdWVyeS5jb3B5KCksIHZlcnNpb24pOworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVl
SW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNv
cHkoKSwgdmVyc2lvbik7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCku
ZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogCkBAIC02MTUsNyArNjE1
LDcgQEAgU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKICAgICBpZiAobV9kZWxldGVk
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRN
dXRleCgpKTsKLSAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLmNvcHko
KTsKKyAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVD
b3B5KCk7CiB9CiAKIHZvaWQgRGF0YWJhc2U6OmRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCog
Y29udGV4dCkKQEAgLTY0MCw3ICs2NDAsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFi
bGVOYW1lcygpCiAKIHZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24pCiB7Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmNvcHkoKTsK
KyAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHkoKTsKICAgICAv
LyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KICAgICBNdXRleExv
Y2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3Vp
ZCwgdmVyc2lvbik7CkBAIC02NDgsMTMgKzY0OCwxMyBAQCB2b2lkIERhdGFiYXNlOjpzZXRFeHBl
Y3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogCiBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW5Db3B5KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9zZWN1cml0eU9yaWdpbi0+Y29weSgpOworICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2lu
LT50aHJlYWRzYWZlQ29weSgpOwogfQogCiBTdHJpbmcgRGF0YWJhc2U6OnN0cmluZ0lkZW50aWZp
ZXIoKSBjb25zdAogewogICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5n
IHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLmNvcHkoKTsKKyAgICByZXR1cm4gbV9u
YW1lLnRocmVhZHNhZmVDb3B5KCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAppbmRleCA0OTFlNmYxLi4yNjVjZDBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmNwcApAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzY2hlZHVs
ZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zCiB7CiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5vdGlmaWNhdGlvbk11dGV4KCkpOwogCi0gICAgbm90aWZp
Y2F0aW9uUXVldWUoKS5hcHBlbmQocGFpcjxTZWN1cml0eU9yaWdpbiosIFN0cmluZz4ob3JpZ2lu
LCBuYW1lLmNvcHkoKSkpOworICAgIG5vdGlmaWNhdGlvblF1ZXVlKCkuYXBwZW5kKHBhaXI8U2Vj
dXJpdHlPcmlnaW4qLCBTdHJpbmc+KG9yaWdpbiwgbmFtZS5jcm9zc1RocmVhZFN0cmluZygpKSk7
CiAgICAgc2NoZWR1bGVGb3JOb3RpZmljYXRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmNwcAppbmRleCBiNzU3ZjcwLi4yMGJiMzRkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
T3JpZ2luUXVvdGFNYW5hZ2VyLmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIE9yaWdpblF1b3Rh
TWFuYWdlcjo6YWRkRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYgogICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAu
Z2V0KG9yaWdpbik7CiAgICAgQVNTRVJUKHVzYWdlUmVjb3JkKTsKIAotICAgIHVzYWdlUmVjb3Jk
LT5hZGREYXRhYmFzZShkYXRhYmFzZUlkZW50aWZpZXIuY29weSgpLCBmdWxsUGF0aC5jb3B5KCkp
OworICAgIHVzYWdlUmVjb3JkLT5hZGREYXRhYmFzZShkYXRhYmFzZUlkZW50aWZpZXIudGhyZWFk
c2FmZUNvcHkoKSwgZnVsbFBhdGgudGhyZWFkc2FmZUNvcHkoKSk7CiB9CiAKIHZvaWQgT3JpZ2lu
UXVvdGFNYW5hZ2VyOjpyZW1vdmVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFn
ZS9TUUxFcnJvci5oIGIvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgKaW5kZXggYTE3ZWZhOS4u
NDQxNGU2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL1NRTEVycm9yLmgKQEAgLTQxLDEwICs0MSwxMCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxFcnJvcihjb2RlLCBtZXNz
YWdlKSk7IH0KIAogICAgIHVuc2lnbmVkIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0K
LSAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS5jb3B5KCk7IH0K
KyAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS50aHJlYWRzYWZl
Q29weSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU1FMRXJyb3IodW5zaWduZWQgY29kZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKSA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgp
KSB7IH0KKyAgICBTUUxFcnJvcih1bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IDogbV9jb2RlKGNvZGUpLCBtX21lc3NhZ2UobWVzc2FnZS50aHJlYWRzYWZlQ29weSgpKSB7IH0K
ICAgICB1bnNpZ25lZCBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKIH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnQuY3BwCmluZGV4IDk3MGY3NTcuLmI0ZWI5ZWYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0
ZW1lbnQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxT
dGF0ZW1lbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjCiB9CiAK
IFNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCi0gICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQu
Y29weSgpKQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNyb3NzVGhyZWFkU3RyaW5nKCkp
CiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCiAgICAgLCBtX3N0YXRlbWVudENhbGxiYWNr
KGNhbGxiYWNrKQogICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2sp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IGJlYzQ1YWEuLmFkNDFlMjggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBT
dG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQog
ICAgICAgICB9CiAKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
IG1faXRlbXNQZW5kaW5nU3luYy5zZXQoaXQtPmZpcnN0LmNvcHkoKSwgaXQtPnNlY29uZC5jb3B5
KCkpOworICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChpdC0+Zmlyc3QuY3Jvc3NU
aHJlYWRTdHJpbmcoKSwgaXQtPnNlY29uZC5jcm9zc1RocmVhZFN0cmluZygpKTsKIAogICAgICAg
ICBpZiAoIW1fc3luY1NjaGVkdWxlZCkgewogICAgICAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCBlZDkxYzhjLi41NDk4ZDllIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VNYXAuY3BwCkBAIC0xNjIsMTAgKzE2MiwxMCBAQCB2b2lkIFN0b3JhZ2VNYXA6Omlt
cG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
Ly8gQmUgc3VyZSB0byBjb3B5IHRoZSBrZXlzL3ZhbHVlcyBhcyBpdGVtcyBpbXBvcnRlZCBvbiBh
IGJhY2tncm91bmQgdGhyZWFkIGFyZSBkZXN0aW5lZAogICAgIC8vIHRvIGNyb3NzIGEgdGhyZWFk
IGJvdW5kYXJ5Ci0gICAgcGFpcjxIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IG1fbWFwLmFkZChrZXkuY29weSgpLCBTdHJpbmcoKSk7CisgICAgcGFpcjxI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbWFwLmFk
ZChrZXkudGhyZWFkc2FmZUNvcHkoKSwgU3RyaW5nKCkpOwogCiAgICAgaWYgKHJlc3VsdC5zZWNv
bmQpCi0gICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gdmFsdWUuY29weSgpOworICAgICAg
ICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IHZhbHVlLnRocmVhZHNhZmVDb3B5KCk7CiAKICAgICAv
LyBVcGRhdGUgcXVvdGEuCiAgICAgQVNTRVJUKG1fY3VycmVudExlbmd0aCArIHZhbHVlLmxlbmd0
aCgpID49IG1fY3VycmVudExlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmNwcAppbmRleCBiYzlkOTBjLi5hYjU0MGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQog
CiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpCiAgICAgOiBt
X3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQotICAgICwgbV9wYXRoKHBhdGguY29weSgpKSAgLy8g
Q29weSBtYWtlcyBpdCBzYWZlIGZvciBvdXIgb3RoZXIgdGhyZWFkIHRvIGFjY2VzcyB0aGUgcGF0
aC4KKyAgICAsIG1fcGF0aChwYXRoLmNyb3NzVGhyZWFkU3RyaW5nKCkpIC8vIE1ha2UgaXQgc2Fm
ZSBmb3Igb3VyIG90aGVyIHRocmVhZCB0byBhY2Nlc3MgdGhlIHBhdGguCiAgICAgLCBtX3N5bmNN
YW5hZ2VyKDApCiAgICAgLCBtX3F1b3RhKHF1b3RhKQogICAgICwgbV9pc1NodXRkb3duKGZhbHNl
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgYi9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAppbmRleCA0MTZiODFjLi5mOTI3
NmRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAor
KysgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcApAQCAtNDgsNyArNDgs
NyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gU3RvcmFnZVN5bmNNYW5hZ2VyOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogfQogCiBTdG9yYWdlU3luY01hbmFnZXI6OlN0b3Jh
Z2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aC5jb3B5
KCkpCisgICAgOiBtX3BhdGgocGF0aC5jcm9zc1RocmVhZFN0cmluZygpKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3BhdGguaXNFbXB0eSgpKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAg
Yi9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCmluZGV4
IDExMTA2ZWUuLjRhM2I5MmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hh
cmVkV29ya2VyUmVwb3NpdG9yeS5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmNwcApAQCAtNjMsOCArNjMsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VGhyZWFkKFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV90
aHJlYWQgPSB0aHJlYWQ7IH0KICAgICBTaGFyZWRXb3JrZXJUaHJlYWQqIHRocmVhZCgpIHsgcmV0
dXJuIG1fdGhyZWFkLmdldCgpOyB9CiAgICAgYm9vbCBpc0Nsb3NpbmcoKSBjb25zdCB7IHJldHVy
biBtX2Nsb3Npbmc7IH0KLSAgICBLVVJMIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLmNvcHko
KTsgfQotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmNvcHkoKTsgfQor
ICAgIEtVUkwgdXJsKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIERvbid0IHVzZSBtX3VybC5j
b3B5KCkgYmVjYXVzZSBpdCBpc24ndCBhIHRocmVhZHNhZmUgbWV0aG9kLgorICAgICAgICByZXR1
cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fdXJsLnN0cmluZygpLnRocmVhZHNhZmVDb3B5KCkp
OworICAgIH0KKworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLnRocmVh
ZHNhZmVDb3B5KCk7IH0KICAgICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNv
bnN0OwogCiAgICAgLy8gV29ya2VyTG9hZGVyUHJveHkKQEAgLTEwMiw3ICsxMDcsNyBAQCBwcml2
YXRlOgogCiBTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdp
bikKICAgICA6IG1fY2xvc2luZyhmYWxzZSkKLSAgICAsIG1fbmFtZShuYW1lLmNvcHkoKSkKKyAg
ICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgLCBtX3VybCh1cmwuY29w
eSgpKQogICAgICwgbV9vcmlnaW4ob3JpZ2luKQogewpAQCAtMzc5LDggKzM4NCw5IEBAIHZvaWQg
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3RUb1dvcmtlcihQYXNzUmVmUHRy
PFNoYXJlZFdvcmtlcj4gd29yCiBQYXNzUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiBEZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Z2V0UHJveHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBLVVJMJiB1cmwpCiB7CiAgICAgLy8gTG9vayBmb3IgYW4gZXhpc3Rpbmcgd29ya2VyLCBhbmQg
Y3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgIC8vIEl0ZW1zIGluIHRoZSBjYWNo
ZSBhcmUgZnJlZWQgb24gYW5vdGhlciB0aHJlYWQsIHNvIGNvcHkgdGhlIFVSTCBiZWZvcmUgY3Jl
YXRpbmcgdGhlIG9yaWdpbiwgdG8gbWFrZSBzdXJlIG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwg
c3RyaW5ncyBsaW5nZXIuCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKHVybC5jb3B5KCkpOworICAgIC8vIEl0ZW1zIGluIHRoZSBjYWNo
ZSBhcmUgZnJlZWQgb24gYW5vdGhlciB0aHJlYWQsIHNvIGRvIGEgdGhyZWFkc2FmZSBjb3B5IG9m
IHRoZSBVUkwgYmVmb3JlIGNyZWF0aW5nIHRoZSBvcmlnaW4sCisgICAgLy8gdG8gbWFrZSBzdXJl
IG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgc3RyaW5ncyBsaW5nZXIuCisgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwuc3RyaW5nKCkudGhyZWFkc2FmZUNvcHkoKSkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3Byb3hpZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFt
X3Byb3hpZXNbaV0tPmlzQ2xvc2luZygpICYmIG1fcHJveGllc1tpXS0+bWF0Y2hlcyhuYW1lLCBv
cmlnaW4sIHVybCkpCiAgICAgICAgICAgICByZXR1cm4gbV9wcm94aWVzW2ldOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAgYi9XZWJDb3JlL3dvcmtl
cnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcAppbmRleCBkZWQ0ODM0Li5lNTlkZjRmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcAorKysgYi9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcApAQCAtNDUsNyArNDUsNyBAQCBQYXNzUmVm
UHRyPFNoYXJlZFdvcmtlclRocmVhZD4gU2hhcmVkV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogCiBTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVh
ZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtl
ckxvYWRlclByb3h5LCBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHkp
CiAgICAgOiBXb3JrZXJUaHJlYWQodXJsLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlckxv
YWRlclByb3h5LCB3b3JrZXJSZXBvcnRpbmdQcm94eSkKLSAgICAsIG1fbmFtZShuYW1lLmNvcHko
KSkKKyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDNkMjhmOWUuLjM4MWJjNGEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysr
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNTMsNyArNTMs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMpCi0gICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQorICAgICAgICA6
IG1fbWVzc2FnZShtZXNzYWdlLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgICAgICwgbV9jaGFu
bmVscyhjaGFubmVscykKICAgICB7CiAgICAgfQpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgTWVzc2FnZVdvcmtlclRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscywgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNv
cHkoKSkKKyAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jcm9zc1RocmVhZFN0cmluZygpKQog
ICAgICAgICAsIG1fY2hhbm5lbHMoY2hhbm5lbHMpCiAgICAgICAgICwgbV9tZXNzYWdpbmdQcm94
eShtZXNzYWdpbmdQcm94eSkKICAgICB7CkBAIC0xMTIsOSArMTEyLDkgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIFdvcmtlckV4Y2VwdGlvblRhc2soY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICA6IG1fZXJyb3JNZXNzYWdlKGVycm9y
TWVzc2FnZS5jb3B5KCkpCisgICAgICAgIDogbV9lcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlLmNy
b3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0g
ICAgICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMLmNvcHkoKSkKKyAgICAgICAgLCBtX3NvdXJj
ZVVSTChzb3VyY2VVUkwuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKICAgICAgICAgLCBtX21lc3NhZ2lu
Z1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5jcHAKaW5kZXggNTJkNjUwZi4uMzliMjFjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNw
cApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRhc2soUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUp
CiAgICAgICAgIDogbV90YXNrKHRhc2spCi0gICAgICAgICwgbV9tb2RlKG1vZGUuY29weSgpKQor
ICAgICAgICAsIG1fbW9kZShtb2RlLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgewogICAgIH0K
IApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2soUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogCiB2b2lkIFdvcmtlclJ1
bkxvb3A6OnBvc3RUYXNrRm9yTW9kZShQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKLSAgICBtX21lc3NhZ2VRdWV1ZS5h
cHBlbmQoVGFzazo6Y3JlYXRlKHRhc2ssIG1vZGUuY29weSgpKSk7CisgICAgbV9tZXNzYWdlUXVl
dWUuYXBwZW5kKFRhc2s6OmNyZWF0ZSh0YXNrLCBtb2RlLmNyb3NzVGhyZWFkU3RyaW5nKCkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRl
eCAyMjI1M2JmLi40NjcxNTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtNzEsOCAr
NzEsOCBAQCBwcml2YXRlOgogCiBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFk
U3RhcnR1cERhdGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQogICAgIDogbV9zY3JpcHRVUkwoc2NyaXB0VVJM
LmNvcHkoKSkKLSAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudC5jb3B5KCkpCi0gICAgLCBtX3Nv
dXJjZUNvZGUoc291cmNlQ29kZS5jb3B5KCkpCisgICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQu
Y3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlLmNyb3Nz
VGhyZWFkU3RyaW5nKCkpCiB7CiB9CiAK
</data>
<flag name="review"
          id="21921"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="21931"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>