<?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>57230</bug_id>
          
          <creation_ts>2011-03-28 07:11:51 -0700</creation_ts>
          <short_desc>Add to Chromium WebKit API methods for injecting Java objects into JavaScript</short_desc>
          <delta_ts>2012-01-08 10:19:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55383</dependson>
    
    <dependson>57859</dependson>
          <blocked>65928</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>bulach</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374464</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-28 07:11:51 -0700</bug_when>
    <thetext>Add to Chromium WebKit API methods for injecting Java objects into JavaScript</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380310</commentid>
    <comment_count>1</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 06:28:46 -0700</bug_when>
    <thetext>Since Bug 55383, V8 performs all interaction with injected Java objects through the JavaInstance, JavaClass, JavaMethod and JavaField interfaces. These interfaces are independent of JNI.

Currently, the only implementations of these interfaces are JavaInstanceJobject etc, which are wrappers around a JNI jobject. These implementations use JNI to query the underlying Java object for its methods and properties and to access them.

We&apos;d like to be able to implement injecting Java objects in the Android browser in a multi-process environment. Access to the underlying Java object must be in the remote process. This means that we need implementations of JavaInstance etc which simply proxy requests to the embedder. The browser can then take care of routing these requests to the Java object in the correct process.

We share code paths with Chromium in a number of places on Android and this would be another such place.

Adding these proxy implementations is tracked in Bug 57859.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380315</commentid>
    <comment_count>2</comment_count>
      <attachid>88407</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 06:39:37 -0700</bug_when>
    <thetext>Created attachment 88407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380316</commentid>
    <comment_count>3</comment_count>
      <attachid>88407</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 06:40:53 -0700</bug_when>
    <thetext>Comment on attachment 88407
Patch

Not for review. Provided as context for Bug 57859 only. WebCore changes will be made in that bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448666</commentid>
    <comment_count>4</comment_count>
      <attachid>103371</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-09 10:51:31 -0700</bug_when>
    <thetext>Created attachment 103371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448831</commentid>
    <comment_count>5</comment_count>
      <attachid>103371</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-09 14:59:44 -0700</bug_when>
    <thetext>Comment on attachment 103371
Patch

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

&gt; Source/WebKit/chromium/public/WebJavaBridge.h:49
&gt; +    WebJavaBridge();

Just realised that this will have to be guarded with !WEBKIT_IMPLEMENTATION. Is this acceptable style, or should I just leave out the private constructor?

&gt; Source/WebKit/chromium/public/WebJavaValue.h:31
&gt; +namespace JSC { namespace Bindings { class JavaValue; } }

bulach: guard the JSC namespace forward declaration with WEBKIT_IMPLEMENTATION? not sure what the style says though..
Looking at other code, it seems that some places add the guards, others don&apos;t. I can&apos;t see any direct advice in the style guide. It&apos;s probably best to add the guard.

&gt; Source/WebKit/chromium/public/WebJavaValue.h:40
&gt; +class WebJavaValue {

bulach: is WebJavaValue a concrete class? should it be part of the patch?
Yes, it is. Am happy to include it as part of this patch if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449043</commentid>
    <comment_count>6</comment_count>
      <attachid>103455</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-10 02:06:09 -0700</bug_when>
    <thetext>Created attachment 103455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449054</commentid>
    <comment_count>7</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-10 02:24:36 -0700</bug_when>
    <thetext>Uploaded a patch to Bug 65928 for context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449215</commentid>
    <comment_count>8</comment_count>
      <attachid>103455</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2011-08-10 10:14:10 -0700</bug_when>
    <thetext>Comment on attachment 103455
Patch

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

(not a reviewer, take with a grain of salt :)
it overall looks good, just one comment on the various getters / setters.

&gt; Source/WebKit/chromium/src/WebJavaValue.cpp:234
&gt; +    m_private-&gt;m_stringValue = value;

I&apos;m not entirely sure what are the expected semantics, but maybe assert (or set?) the type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449248</commentid>
    <comment_count>9</comment_count>
      <attachid>103455</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-10 11:03:23 -0700</bug_when>
    <thetext>Comment on attachment 103455
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebJavaValue.cpp:234
&gt;&gt; +    m_private-&gt;m_stringValue = value;
&gt; 
&gt; I&apos;m not entirely sure what are the expected semantics, but maybe assert (or set?) the type?

Good idea. I could remove setType(), set the type from setFooValue() and add an assert in fooValue().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467802</commentid>
    <comment_count>10</comment_count>
      <attachid>103455</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-09-15 07:45:31 -0700</bug_when>
    <thetext>Comment on attachment 103455
Patch

Investigating an alternative way of doing this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531773</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2012-01-08 10:19:28 -0800</bug_when>
    <thetext>We&apos;re no longer pursuing this approach. Chromium will use it&apos;s existing NPAPI APIs to implement the Java Bridge. See discussion in Bug 57859.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88407</attachid>
            <date>2011-04-06 06:39:37 -0700</date>
            <delta_ts>2011-08-09 10:51:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57230-20110406143935.patch</filename>
            <type>text/plain</type>
            <size>62258</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQudjhiaW5kaW5ncy5tayBiL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5t
awppbmRleCA5ZTQzOGU3ZjRkZmY4NTE3MTQ1MzNkYzdjMGE2NjYwMTc1YjYwNTdkLi4wYTRiZTA1
ODE0Mjg4NWI0MmVlNDkyNTMwZTE3M2MyNWVmNzg4NjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsKKysrIGIvU291cmNlL1dlYkNvcmUvQW5kcm9pZC52
OGJpbmRpbmdzLm1rCkBAIC0xNzYsMTAgKzE3NiwxMyBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAog
TE9DQUxfU1JDX0ZJTEVTICs9IFwKIAlicmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwIFwKIAlicmlk
Z2Uvam5pL0phdmFNZXRob2RKb2JqZWN0LmNwcCBcCisJYnJpZGdlL2puaS9KYXZhTWV0aG9kUHJv
eHkuY3BwIFwKIAlicmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmNwcCBcCiAJYnJpZGdlL2puaS92
OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAgXAogCWJyaWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVj
dFY4LmNwcCBcCisJYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmNwcCBcCiAJYnJpZGdl
L2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwIFwKKwlicmlkZ2Uvam5pL3Y4L0phdmFGaWVs
ZFByb3h5VjguY3BwIFwKIAlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAg
XAotCWJyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0LmNwcCBcCi0JYnJpZGdlL2puaS92OC9Kb2Jq
ZWN0V3JhcHBlci5jcHAKKwlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguY3BwIFwK
KwlicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDZjMzgxM2My
OTM1NDE3YzA1NWVjZGZhN2UzNThkNGQyN2FiZWE4Li5mMTFkNGQ3MWExM2Y5Yjg3MTI4ZjgwYTY2
NjVmOWE0MmQ0NDUyY2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDQtMDYg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0byBDaHJvbWl1bSBXZWJLaXQgQVBJ
IG1ldGhvZHMgZm9yIGluamVjdGluZyBKYXZhIG9iamVjdHMgaW50byBKYXZhU2NyaXB0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzIzMAorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogQW5kcm9pZC52OGJpbmRpbmdz
Lm1rOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBicmlkZ2Uvam5pL0phdmFN
ZXRob2RQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1ldGhv
ZFByb3h5OjpKYXZhTWV0aG9kUHJveHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1l
dGhvZFByb3h5OjpuYW1lKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2RQcm94
eTo6cmV0dXJuVHlwZUNsYXNzTmFtZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhTWV0
aG9kUHJveHk6OnBhcmFtZXRlckF0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRo
b2RQcm94eTo6c2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2RQ
cm94eTo6cmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJv
eHk6OmlzU3RhdGljKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2RQcm94eTo6
bnVtUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJveHk6
OmlkKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL0phdmFNZXRob2RQcm94eS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Byb3h5VjguY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkphdmFDbGFzc1Byb3h5OjpKYXZhQ2xhc3NQcm94eSk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhQ2xhc3NQcm94eTo6fkphdmFDbGFzc1Byb3h5KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFDbGFzc1Byb3h5OjptZXRob2RzTmFtZWQpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUNsYXNzUHJveHk6OmZpZWxkTmFtZWQpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6SmF2YUNsYXNzUHJveHk6OmFkZE1ldGhvZCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpKYXZhQ2xhc3NQcm94eTo6YWRkRmllbGQpOgorICAgICAgICAqIGJyaWRn
ZS9qbmkvdjgvSmF2YUNsYXNzUHJveHlWOC5oOiBBZGRlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5p
L3Y4L0phdmFGaWVsZFByb3h5VjguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkphdmFGaWVsZFByb3h5OjpKYXZhRmllbGRQcm94eSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpKYXZhRmllbGRQcm94eTo6bmFtZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhRmll
bGRQcm94eTo6dHlwZUNsYXNzTmFtZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhRmll
bGRQcm94eTo6dHlwZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhRmllbGRQcm94eTo6
aWQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5oOiBBZGRlZC4K
KyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5OjpKYXZhSW5zdGFuY2VQ
cm94eSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2VQcm94eTo6fkphdmFJ
bnN0YW5jZVByb3h5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5
OjpnZXRDbGFzcyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2VQcm94eTo6
aW52b2tlTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5
OjpnZXRGaWVsZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2VQcm94eTo6
YWRkTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5Ojph
ZGRGaWVsZCk6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4Lmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlUHJveHk6OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5OjplbmQpOgorCiAy
MDExLTA0LTA2ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYTdlN2ZiYTI5
MGJhMzAwNTQxNTcyZTk5NDJkNTVjNjE0NTM4MGJjYi4uMjA0NmUyMTIxOWY1MDBhYTUzZmQ3MDkz
MzkzYTY4ZjBlOTg4YzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjE3Myw2ICsyMTczLDggQEAK
ICAgICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFNZXRob2QuaCcsCiAgICAgICAgICAgICAnYnJp
ZGdlL2puaS9KYXZhTWV0aG9kSm9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkv
SmF2YU1ldGhvZEpvYmplY3QuaCcsCisgICAgICAgICAgICAnYnJpZGdlL2puaS9KYXZhTWV0aG9k
UHJveHkuY3BwJywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFNZXRob2RQcm94eS5oJywK
ICAgICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFTdHJpbmcuaCcsCiAgICAgICAgICAgICAnYnJp
ZGdlL2puaS9KYXZhVHlwZS5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL0pvYmplY3RXcmFw
cGVyLmNwcCcsCkBAIC0yMTk2LDEyICsyMTk4LDE4IEBACiAgICAgICAgICAgICAnYnJpZGdlL2pu
aS92OC9KTklVdGlsaXR5UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0ph
dmFDbGFzc0pvYmplY3RWOC5jcHAnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNs
YXNzSm9iamVjdFY4LmgnLAorICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzUHJv
eHlWOC5jcHAnLAorICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzUHJveHlWOC5o
JywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Y4LmgnLAogICAgICAgICAg
ICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkSm9iamVjdFY4LmNwcCcsCiAgICAgICAgICAgICAn
YnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguaCcsCisgICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhRmllbGRQcm94eVY4LmNwcCcsCisgICAgICAgICAgICAnYnJpZGdlL2puaS92
OC9KYXZhRmllbGRQcm94eVY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUZp
ZWxkVjguaCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0
VjguY3BwJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RW
OC5oJywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguY3Bw
JywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguaCcsCiAg
ICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VWOC5oJywKICAgICAgICAgICAg
ICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNwcCcsCiAgICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhTlBPYmplY3RWOC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
SmF2YU1ldGhvZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWYwNzRiNTVjNjZmNzRiN2VkMTIyNzhj
MGE4OWIwMDkwMTNlYzFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9KYXZhTWV0aG9kUHJveHkuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKYXZhTWV0aG9kUHJveHkuaCIKKworI2lm
IEVOQUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBC
aW5kaW5ncyB7CisKK0phdmFNZXRob2RQcm94eTo6SmF2YU1ldGhvZFByb3h5KGludCBpZCwgYm9v
bCBpc1N0YXRpYywgU3RyaW5nIG5hbWUsIFN0cmluZyByZXR1cm5UeXBlQ2xhc3NOYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1ldGVycykKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX2lz
U3RhdGljKGlzU3RhdGljKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3JldHVyblR5cGVD
bGFzc05hbWUocmV0dXJuVHlwZUNsYXNzTmFtZSkKKyAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0
ZXJzKQoreworfQorCitTdHJpbmcgSmF2YU1ldGhvZFByb3h5OjpuYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9uYW1lOworfQorCitSdW50aW1lVHlwZSBKYXZhTWV0aG9kUHJveHk6OnJldHVy
blR5cGVDbGFzc05hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldHVyblR5cGVDbGFzc05h
bWUudXRmOCgpLmRhdGEoKTsKK30KKworU3RyaW5nIEphdmFNZXRob2RQcm94eTo6cGFyYW1ldGVy
QXQoaW50IGkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVyc1tpXTsKK30KKworY29u
c3QgY2hhciogSmF2YU1ldGhvZFByb3h5OjpzaWduYXR1cmUoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitKYXZhVHlwZSBKYXZhTWV0aG9k
UHJveHk6OnJldHVyblR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBqYXZhVHlwZUZyb21DbGFz
c05hbWUobV9yZXR1cm5UeXBlQ2xhc3NOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitib29sIEph
dmFNZXRob2RQcm94eTo6aXNTdGF0aWMoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzU3RhdGlj
OworfQorCitpbnQgSmF2YU1ldGhvZFByb3h5OjpudW1QYXJhbWV0ZXJzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYXJhbWV0ZXJzLnNpemUoKTsKK30KKworaW50IEphdmFNZXRob2RQcm94eTo6
aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkOworfQorCit9IC8vIG5hbWVzcGFjZSBCaW5k
aW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURH
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0phdmFNZXRob2RQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQxNTQzODhkNDdhZThmMmYzNjA4MTE3NzczOGZlNGYyNTBhZGRlMTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0phdmFNZXRob2RQcm94eS5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSmF2YU1ldGhvZFByb3h5X2gKKyNk
ZWZpbmUgSmF2YU1ldGhvZFByb3h5X2gKKworI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2lu
Y2x1ZGUgIkphdmFNZXRob2QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5k
aW5ncyB7CisKKy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIEphdmFNZXRob2QgdGhhdCBjYW4gYmUg
Y29uZmlndXJlZCBtYW51YWxseSwgdXNlZCBieQorLy8gSmF2YUluc3RhbmNlUHJveHkuCitjbGFz
cyBKYXZhTWV0aG9kUHJveHkgOiBwdWJsaWMgSmF2YU1ldGhvZCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSmF2YU1ldGhvZFByb3h5KTsKK3B1YmxpYzoKKyAgICBKYXZhTWV0aG9kUHJveHko
aW50IGlkLCBib29sIGlzU3RhdGljLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVDbGFz
c05hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbWV0ZXJzKTsKKworICAgIC8vIEphdmFN
ZXRob2QgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBSdW50aW1lVHlwZSByZXR1cm5UeXBlQ2xhc3NOYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgcGFyYW1ldGVyQXQoaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHNpZ25hdHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgSmF2YVR5cGUgcmV0dXJuVHlw
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXRpYygpIGNvbnN0OworCisgICAgLy8g
TWV0aG9kIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNv
bnN0OworCisgICAgaW50IGlkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7Cisg
ICAgYm9vbCBtX2lzU3RhdGljOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fcmV0
dXJuVHlwZUNsYXNzTmFtZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhcmFtZXRlcnM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2VuZGlmIC8vIEphdmFNZXRob2RQcm94eV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Byb3h5Vjgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNTUzYmIxODM5MjEyMjE4NTBlNjY0OWU0YTE1MmViM2U5MzgwYjU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94
eVY4LmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKYXZhQ2xhc3NQcm94eVY4LmgiCisKKyNpZiBFTkFCTEUoSkFWQV9C
UklER0UpCisKKyNpbmNsdWRlICJKYXZhRmllbGRQcm94eVY4LmgiCisjaW5jbHVkZSAiSmF2YU1l
dGhvZFByb3h5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3Mgewor
CitKYXZhQ2xhc3NQcm94eTo6SmF2YUNsYXNzUHJveHkoKQoreworfQorCitKYXZhQ2xhc3NQcm94
eTo6fkphdmFDbGFzc1Byb3h5KCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB1Z2xpbmVzcyBpcyBy
ZXF1aXJlZCBiZWNhdXNlIHdlJ3JlIG5vdCBhYmxlIHRvIHVzZSBPd25QdHIgaW4KKyAgICAvLyBh
IEhhc2hNYXAuIEFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHVzZSBSZWZQdHIsIGJ1dCBtYWtp
bmcgSmF2YU1ldGhvZAorICAgIC8vIGluaGVyaXQgZnJvbSBSZWZDb3VudGVkIGNhdXNlcyBwcm9i
bGVtcyBhcyBib3RoIFJlZkNvdW50ZWQgYW5kIE1ldGhvZAorICAgIC8vIHByb3ZpZGUgb3Zlcmxv
YWRzIG9mIG9wZXJhdG9ycyBuZXcgYW5kIGRlbGV0ZS4KKyAgICBmb3IgKEphdmFNZXRob2RWZWN0
b3JNYXA6Oml0ZXJhdG9yIGl0ZXIxID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ZXIxICE9IG1fbWV0
aG9kcy5lbmQoKTsgKytpdGVyMSkgeworICAgICAgICBKYXZhTWV0aG9kVmVjdG9yKiB2ZWN0b3Ig
PSAmaXRlcjEtPnNlY29uZDsKKyAgICAgICAgZm9yIChKYXZhTWV0aG9kVmVjdG9yOjppdGVyYXRv
ciBpdGVyMiA9IHZlY3Rvci0+YmVnaW4oKTsgaXRlcjIgIT0gdmVjdG9yLT5lbmQoKTsgKytpdGVy
MikKKyAgICAgICAgICAgIGRlbGV0ZSBpdGVyMjsKKyAgICB9CisgICAgZm9yIChKYXZhRmllbGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ZpZWxkcy5iZWdpbigpOyBpdGVyICE9IG1fZmllbGRzLmVu
ZCgpOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSBpdGVyLT5zZWNvbmQ7Cit9CisKK01ldGhvZExp
c3QgSmF2YUNsYXNzUHJveHk6Om1ldGhvZHNOYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAor
eworICAgIE1ldGhvZExpc3QgcmVzdWx0OworICAgIEphdmFNZXRob2RWZWN0b3JNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX21ldGhvZHMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
X21ldGhvZHMuZW5kKCkpIHsKKyAgICAgICAgY29uc3QgSmF2YU1ldGhvZFZlY3RvciogdmVjdG9y
ID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2
ZWN0b3ItPnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2ZWN0b3ItPmF0
KGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSmF2YUZpZWxkKiBKYXZhQ2xh
c3NQcm94eTo6ZmllbGROYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAoreworICAgIEphdmFG
aWVsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZmllbGRzLmZpbmQobmFtZSk7CisgICAg
cmV0dXJuIGl0ZXIgPT0gbV9maWVsZHMuZW5kKCkgPyAwIDogaXRlci0+c2Vjb25kOworfQorCit2
b2lkIEphdmFDbGFzc1Byb3h5OjphZGRNZXRob2QoaW50IGlkLCBib29sIGlzU3RhdGljLCBTdHJp
bmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVDbGFzc05hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbWV0ZXJzKQoreworICAgIEphdmFNZXRob2RWZWN0b3JNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX21ldGhvZHMuZmluZChuYW1lKTsKKyAgICBKYXZhTWV0aG9kVmVjdG9yKiB2ZWN0b3I7Cisg
ICAgaWYgKGl0ZXIgPT0gbV9tZXRob2RzLmVuZCgpKSB7CisgICAgICAgIHBhaXI8SmF2YU1ldGhv
ZFZlY3Rvck1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbWV0aG9kcy5hZGQobmFtZSwg
SmF2YU1ldGhvZFZlY3RvcigpKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5zZWNvbmQpOworICAg
ICAgICB2ZWN0b3IgPSAmcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisgICAgfSBlbHNlCisgICAgICAg
IHZlY3RvciA9ICZpdGVyLT5zZWNvbmQ7CisgICAgdmVjdG9yLT5hcHBlbmQobmV3IEphdmFNZXRo
b2RQcm94eShpZCwgaXNTdGF0aWMsIG5hbWUsIHJldHVyblR5cGVDbGFzc05hbWUsIHBhcmFtZXRl
cnMpKTsKK30KKwordm9pZCBKYXZhQ2xhc3NQcm94eTo6YWRkRmllbGQoaW50IGlkLCBTdHJpbmcg
bmFtZSwgU3RyaW5nIHR5cGVDbGFzc05hbWUpCit7CisgICAgbV9maWVsZHMuYWRkKG5hbWUsIG5l
dyBKYXZhRmllbGRQcm94eShpZCwgbmFtZSwgdHlwZUNsYXNzTmFtZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgv
SmF2YUNsYXNzUHJveHlWOC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhQ2xh
c3NQcm94eVY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyNTVjMTM5MGYzY2ZhNzZiODhkNThjODE2MjFmYzJk
MWQ3MGI3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgv
SmF2YUNsYXNzUHJveHlWOC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBKYXZhQ2xhc3NQcm94eVY4X2gKKyNkZWZpbmUgSmF2YUNsYXNzUHJveHlWOF9oCisKKyNp
ZiBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKYXZhQ2xhc3NWOC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworY2xhc3MgSmF2YUZpZWxkUHJv
eHk7CitjbGFzcyBKYXZhTWV0aG9kUHJveHk7CisKKy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIEph
dmFDbGFzcyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIG1hbnVhbGx5LCB1c2VkIGJ5CisvLyBKYXZh
SW5zdGFuY2VQcm94eS4KK2NsYXNzIEphdmFDbGFzc1Byb3h5IDogcHVibGljIEphdmFDbGFzcyB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSmF2YUNsYXNzUHJveHkpOworcHVibGljOgorICAg
IEphdmFDbGFzc1Byb3h5KCk7CisgICAgfkphdmFDbGFzc1Byb3h5KCk7CisKKyAgICAvLyBKYXZh
Q2xhc3MgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIE1ldGhvZExpc3QgbWV0aG9kc05hbWVk
KGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgSmF2YUZpZWxkKiBmaWVsZE5h
bWVkKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0OworCisgICAgdm9pZCBhZGRNZXRob2QoaW50IGlk
LCBib29sIGlzU3RhdGljLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVDbGFzc05hbWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGFkZEZpZWxkKGlu
dCBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlQ2xhc3NOYW1lKTsKKworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIFZlY3RvcjxKYXZhTWV0aG9kUHJveHkqPiBKYXZhTWV0aG9kVmVjdG9yOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEphdmFNZXRob2RWZWN0b3I+IEphdmFNZXRob2RWZWN0
b3JNYXA7CisgICAgSmF2YU1ldGhvZFZlY3Rvck1hcCBtX21ldGhvZHM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgSmF2YUZpZWxkUHJveHkqPiBKYXZhRmllbGRNYXA7CisgICAgSmF2YUZp
ZWxkTWFwIG1fZmllbGRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNlbmRpZiAv
LyBKYXZhQ2xhc3NQcm94eVY4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUZpZWxkUHJveHlWOC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4
L0phdmFGaWVsZFByb3h5VjguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlYjc2ZjI2ZmIzODFlYzBkMDdjNTdm
MzczNjFmMjFhZjgzOTM4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5VjguY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFGaWVsZFByb3h5Vjgu
aCIKKworI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK0phdmFG
aWVsZFByb3h5OjpKYXZhRmllbGRQcm94eShpbnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlw
ZUNsYXNzTmFtZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1f
dHlwZUNsYXNzTmFtZSh0eXBlQ2xhc3NOYW1lKQoreworfQorCitTdHJpbmcgSmF2YUZpZWxkUHJv
eHk6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CisKK2NvbnN0IGNoYXIq
IEphdmFGaWVsZFByb3h5Ojp0eXBlQ2xhc3NOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
eXBlQ2xhc3NOYW1lLnV0ZjgoKS5kYXRhKCk7Cit9CisKK0phdmFUeXBlIEphdmFGaWVsZFByb3h5
Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gamF2YVR5cGVGcm9tQ2xhc3NOYW1lKG1fdHlw
ZUNsYXNzTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworaW50IEphdmFGaWVsZFByb3h5OjppZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdz
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRQcm94eVY4
LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5VjguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43Mjc2ZDgyZjgyYTEzZjA1OGU3ZWIyZjBmMTlhN2EzYmU4Y2E5ODQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRQcm94eVY4
LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEphdmFGaWVsZFBy
b3h5VjhfaAorI2RlZmluZSBKYXZhRmllbGRQcm94eVY4X2gKKworI2lmIEVOQUJMRShKQVZBX0JS
SURHRSkKKworI2luY2x1ZGUgIkphdmFGaWVsZFY4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitu
YW1lc3BhY2UgQmluZGluZ3MgeworCisvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhRmllbGQg
dGhhdCBjYW4gYmUgY29uZmlndXJlZCBtYW51YWxseSwgdXNlZCBieQorLy8gSmF2YUluc3RhbmNl
UHJveHkuCitjbGFzcyBKYXZhRmllbGRQcm94eSA6IHB1YmxpYyBKYXZhRmllbGQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEphdmFGaWVsZFByb3h5KTsKK3B1YmxpYzoKKyAgICBKYXZhRmll
bGRQcm94eShpbnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUNsYXNzTmFtZSk7CisKKyAg
ICAvLyBKYXZhRmllbGQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlQ2xhc3NOYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBKYXZhVHlwZSB0eXBlKCkgY29uc3Q7CisKKyAgICBpbnQgaWQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmlu
ZyBtX3R5cGVDbGFzc05hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2VuZGlm
IC8vIEphdmFGaWVsZFByb3h5VjhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY0YjhlMDk5NGQ5Y2I5
ZDY3NTRiYTBmZTE2OTU0YWY5M2FhYzRiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5jcHAKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSmF2YUlu
c3RhbmNlUHJveHlWOC5oIgorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAi
SmF2YUNsYXNzUHJveHlWOC5oIgorI2luY2x1ZGUgIkphdmFGaWVsZFByb3h5VjguaCIKKyNpbmNs
dWRlICJKYXZhTWV0aG9kUHJveHkuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitKYXZhSW5zdGFuY2VQ
cm94eTo6SmF2YUluc3RhbmNlUHJveHkoKQorICAgIDogbV9jbGFzcyhhZG9wdFB0cihuZXcgSmF2
YUNsYXNzUHJveHkpKQoreworfQorCitKYXZhSW5zdGFuY2VQcm94eTo6fkphdmFJbnN0YW5jZVBy
b3h5KCkKK3sKK30KKworSmF2YUNsYXNzKiBKYXZhSW5zdGFuY2VQcm94eTo6Z2V0Q2xhc3MoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NsYXNzLmdldCgpOworfQorCitKYXZhVmFsdWUgSmF2YUlu
c3RhbmNlUHJveHk6Omludm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kKiBtZXRob2QsIEphdmFW
YWx1ZSogYXJncykKK3sKKyAgICByZXR1cm4gaW52b2tlTWV0aG9kKHN0YXRpY19jYXN0PGNvbnN0
IEphdmFNZXRob2RQcm94eSo+KG1ldGhvZCksIGFyZ3MpOworfQorCitKYXZhVmFsdWUgSmF2YUlu
c3RhbmNlUHJveHk6OmdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCogZmllbGQpCit7CisgICAgcmV0
dXJuIGdldEZpZWxkKHN0YXRpY19jYXN0PGNvbnN0IEphdmFGaWVsZFByb3h5Kj4oZmllbGQpKTsK
K30KKwordm9pZCBKYXZhSW5zdGFuY2VQcm94eTo6YWRkTWV0aG9kKGludCBpZCwgYm9vbCBpc1N0
YXRpYywgU3RyaW5nIG5hbWUsIFN0cmluZyByZXR1cm5UeXBlQ2xhc3NOYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiAmcGFyYW1ldGVycykKK3sKKyAgICBtX2NsYXNzLT5hZGRNZXRob2QoaWQsIGlz
U3RhdGljLCBuYW1lLCByZXR1cm5UeXBlQ2xhc3NOYW1lLCBwYXJhbWV0ZXJzKTsKK30KKwordm9p
ZCBKYXZhSW5zdGFuY2VQcm94eTo6YWRkRmllbGQoaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5n
IHR5cGVDbGFzc05hbWUpCit7CisgICAgbV9jbGFzcy0+YWRkRmllbGQoaWQsIG5hbWUsIHR5cGVD
bGFzc05hbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5oIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQy
NzY2ZTRmYWU2ZGFmN2I3OTg3YmY0NjMyNDRlOTE2MjRhZTRjMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5oCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBKYXZhSW5zdGFuY2VQcm94eVY4
X2gKKyNkZWZpbmUgSmF2YUluc3RhbmNlUHJveHlWOF9oCisKKyNpZiBFTkFCTEUoSkFWQV9CUklE
R0UpCisKKyNpbmNsdWRlICJKYXZhSW5zdGFuY2VWOC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
bmFtZXNwYWNlIEJpbmRpbmdzIHsKKworY2xhc3MgSmF2YUNsYXNzUHJveHk7CitjbGFzcyBKYXZh
RmllbGRQcm94eTsKK2NsYXNzIEphdmFNZXRob2RQcm94eTsKKworLy8gQW4gaW1wbGVtZW50YXRp
b24gb2YgSmF2YUluc3RhbmNlIHdoaWNoIGFsbG93cyB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGll
cworLy8gZXhwb3NlZCBieSB0aGUgaW5zdGFuY2UgdG8gYmUgc2V0IG1hbnVhbGx5LgorY2xhc3Mg
SmF2YUluc3RhbmNlUHJveHkgOiBwdWJsaWMgSmF2YUluc3RhbmNlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShKYXZhSW5zdGFuY2VQcm94eSk7CitwdWJsaWM6CisgICAgSmF2YUluc3RhbmNl
UHJveHkoKTsKKyAgICB+SmF2YUluc3RhbmNlUHJveHkoKTsKKworICAgIC8vIEphdmFJbnN0YW5j
ZSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgSmF2YUNsYXNzKiBnZXRDbGFzcygpIGNvbnN0
OworICAgIHZpcnR1YWwgSmF2YVZhbHVlIGludm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kKiwg
SmF2YVZhbHVlKiBhcmdzKTsKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBnZXRGaWVsZChjb25zdCBK
YXZhRmllbGQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCBlbmQoKSB7fQorCisgICAgdm9pZCBhZGRNZXRob2QoaW50IGlkLCBib29sIGlzU3RhdGljLCBT
dHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVDbGFzc05hbWUsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+ICZwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGFkZEZpZWxkKGludCBpZCwgU3RyaW5nIG5hbWUs
IFN0cmluZyB0eXBlQ2xhc3NOYW1lKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEphdmFWYWx1
ZSBpbnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZFByb3h5KiwgSmF2YVZhbHVlKiBhcmdzKSA9
IDA7CisgICAgdmlydHVhbCBKYXZhVmFsdWUgZ2V0RmllbGQoY29uc3QgSmF2YUZpZWxkUHJveHkq
KSA9IDA7CisKKyAgICAvLyBXZSBuZWVkIHRvIHJldHVybiBKYXZhQ2xhc3MqIGZyb20gZ2V0Q2xh
c3MoKS4KKyAgICBPd25QdHI8SmF2YUNsYXNzUHJveHk+IG1fY2xhc3M7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBX0JSSURHRSkKKworI2VuZGlmIC8vIEphdmFJbnN0YW5jZVByb3h5VjhfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA2NDIxNTZkNWQ0Mjk2NDM0ZWU1MjNiZWExZGM2NTk5YTAx
YzdkYTUzLi5iZmQ1YmE3OTk1NjczZTE1MDBhM2ZmNmYxNjYzOWVmNWQ5YTY3M2VmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDExLTA0LTA2ICBTdGV2ZSBC
bG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdG8gQ2hyb21pdW0gV2ViS2l0IEFQSSBtZXRob2Rz
IGZvciBpbmplY3RpbmcgSmF2YSBvYmplY3RzIGludG8gSmF2YVNjcmlwdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyMzAKKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkphdmFCcmlkZ2UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkphdmFCcmlkZ2U6On5XZWJKYXZhQnJpZGdlKToKKyAgICAgICAgKiBw
dWJsaWMvV2ViSmF2YUluc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZh
SW5zdGFuY2U6On5XZWJKYXZhSW5zdGFuY2UpOgorICAgICAgICAqIHB1YmxpYy9XZWJKYXZhVmFs
dWUuaDogQWRkZWQuCisgICAgICAgICogc3JjL0phdmFJbnN0YW5jZVByb3h5SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpKYXZhSW5zdGFuY2VQcm94eUltcGw6OkphdmFJbnN0YW5j
ZVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkphdmFJbnN0YW5jZVByb3h5SW1wbDo6aW52
b2tlTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6SmF2YUluc3RhbmNlUHJveHlJbXBsOjpnZXRG
aWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkphdmFJbnN0YW5jZVByb3h5SW1wbDo6d2ViT2JqZWN0
KToKKyAgICAgICAgKiBzcmMvSmF2YUluc3RhbmNlUHJveHlJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpKYXZhSW5zdGFuY2VQcm94eUltcGw6OmNyZWF0ZSk6CisgICAgICAgICogc3Jj
L1dlYkphdmFCcmlkZ2VJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkphdmFC
cmlkZ2VJbXBsOjpyZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkphdmFCcmlk
Z2VJbXBsOjp1bnJlZ2lzdGVyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YUJyaWRn
ZUltcGw6OmluamVjdE9iamVjdHMpOgorICAgICAgICAqIHNyYy9XZWJKYXZhQnJpZGdlSW1wbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViSmF2YVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkphdmFWYWx1ZTo6V2ViSmF2YVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSmF2YVZhbHVlOjp+V2ViSmF2YVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YVZh
bHVlOjp0eXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YVZhbHVlOjpzZXRUeXBlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSmF2YVZhbHVlOjpvYmplY3RWYWx1ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkphdmFWYWx1ZTo6c2V0T2JqZWN0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJK
YXZhVmFsdWU6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkphdmFWYWx1ZTo6
c2V0Qm9vbGVhblZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YVZhbHVlOjpieXRlVmFs
dWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OnNldEJ5dGVWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkphdmFWYWx1ZTo6Y2hhclZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSmF2YVZhbHVlOjpzZXRDaGFyVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFs
dWU6OnNob3J0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OnNldFNob3J0
VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OmludFZhbHVlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSmF2YVZhbHVlOjpzZXRJbnRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkphdmFWYWx1ZTo6bG9uZ1ZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YVZhbHVl
OjpzZXRMb25nVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OmZsb2F0VmFs
dWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OnNldEZsb2F0VmFsdWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OmRvdWJsZVZhbHVlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSmF2YVZhbHVlOjpzZXREb3VibGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkph
dmFWYWx1ZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6OnNl
dFN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSmF2YVZhbHVlOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhVmFsdWU6Om9wZXJhdG9yIEphdmFWYWx1ZSk6CisK
IDIwMTEtMDQtMDUgIFplbGlkcmFnIEhvcm51bmcgIDx6ZWxpZHJhZ0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKaW5kZXggMjYzYjQ5ZTU0ODI3NWQxMWE2YjRjYzAyNGVmMWJmNWNmZDA5NjRjNy4uMDczMzli
ZWIwMmE3MmI4OWE1MGYxMDdjY2E3ODJjYTBkOWU2OTU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cApAQCAtMjAxLDYgKzIwMSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJ
REJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklu
cHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklucHV0RXZlbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJKYXZhQnJpZGdlLmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViSmF2YUluc3RhbmNlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSmF2YVZhbHVlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTGFiZWxFbGVtZW50LmgnLApAQCAtMzc1LDIxICszNzgsMjIgQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0luc3BlY3RvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL0ph
dmFJbnN0YW5jZVByb3h5SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvSmF2YUluc3Rh
bmNlUHJveHlJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJpbmcuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvbGludXgvV2ViUmVuZGVyVGhlbWUuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
TWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL21h
Yy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2Vi
U2NyZWVuSW5mb0ZhY3RvcnkubW0nLAotICAgICAgICAgICAgICAgICdzcmMvTG9jYWxGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL0xvY2FsaXplZFN0cmluZ3Mu
Y3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAnLAotICAg
ICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9w
YWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
UmVzb3VyY2VIYW5kbGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NoYXJlZFdvcmtlclJl
cG9zaXRvcnkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5j
cHAnLApAQCAtNDAzLDEwICs0MDcsMTAgQEAKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VO
YW1lc3BhY2VQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3RvcmFnZU5hbWVzcGFj
ZVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvVGVtcG9yYXJ5R2x1ZS5oJywKLSAgICAg
ICAgICAgICAgICAnc3JjL1dlYlRleHRDaGVja2luZ0NvbXBsZXRpb25JbXBsLmgnLAotICAgICAg
ICAgICAgICAgICdzcmMvV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJUZXh0Q2hlY2tpbmdDb21wbGV0aW9uSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYlRleHRDaGVja2luZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFj
Y2Vzc2liaWxpdHlDYWNoZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFjY2Vz
c2liaWxpdHlDYWNoZUltcGwuaCcsCkBAIC01MDAsNiArNTA0LDkgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYklucHV0RXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYklucHV0
RXZlbnRDb252ZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50
Q29udmVyc2lvbi5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkphdmFCcmlkZ2VJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJKYXZhQnJpZGdlSW1wbCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJKYXZhVmFsdWUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYktp
dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGFiZWxFbGVtZW50LmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKQEAgLTU4Miw2ICs1ODksNyBA
QAogICAgICAgICAgICAgICAgICdzcmMvV3JhcHBlZFJlc291cmNlUmVzcG9uc2UuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL3dpbi9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICBdLAog
ICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCiAgICAgICAgICAgICAgICAgWydpbnNpZGVfY2hy
b21pdW1fYnVpbGQ9PTEgYW5kIE9TPT0id2luIicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkphdmFCcmlkZ2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkphdmFCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGUyNWRjNWViMzQwZDMwMGZl
YmRkOTM0MjhlZmZkNDQ2YzlkZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSmF2YUJyaWRnZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkphdmFCcmlkZ2VfaAorI2RlZmluZSBXZWJKYXZhQnJpZGdlX2gK
KworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViSmF2YUluc3RhbmNlOworCitjbGFzcyBXZWJKYXZhQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5XZWJKYXZhQnJpZGdlKCkge30KKworICAgIC8vIE93bmVyc2hpcCBvZiB0aGUgV2Vi
SmF2YUluc3RhbmNlIGlzIHBhc3NlZCB0byB0aGlzIG9iamVjdC4KKyAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJKYXZhSW5zdGFuY2UqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBu
YW1lKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkph
dmFCcmlkZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SmF2YUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhSW5z
dGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NGU0YTZiZjJmN2VlZTgwMzlhZWI3MzE2OGI0MjZmNGNhYjk4
MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SmF2YUluc3RhbmNlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViSmF2YUluc3RhbmNlX2gKKyNkZWZpbmUgV2ViSmF2YUluc3RhbmNlX2gKKworI2luY2x1ZGUg
IldlYkphdmFWYWx1ZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVXNlcnMgb2YgdGhlIEFQSSBwYXNz
IG9iamVjdHMgaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIHRvIGJlIGluamVjdGVkIGludG8K
Ky8vIEphdmFTY3JpcHQuCitjbGFzcyBXZWJKYXZhSW5zdGFuY2UgeworcHVibGljOgorICAgIHN0
cnVjdCBNZXRob2RQcm9wZXJ0aWVzIHsKKyAgICAgICAgaW50IG1faWQ7IC8vIFVzZWQgdG8gaWRl
bnRpZnkgdGhlIG1ldGhvZCB3aGVuIGl0J3MgaW52b2tlZC4KKyAgICAgICAgYm9vbCBtX2lzU3Rh
dGljOworICAgICAgICBXZWJTdHJpbmcgbV9uYW1lOworICAgICAgICBXZWJTdHJpbmcgbV9yZXR1
cm5UeXBlQ2xhc3NOYW1lOworICAgICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBtX3BhcmFtZXRl
cnM7CisgICAgfTsKKyAgICBzdHJ1Y3QgRmllbGRQcm9wZXJ0aWVzIHsKKyAgICAgICAgaW50IG1f
aWQ7IC8vIFVzZWQgdG8gaWRlbnRpZnkgdGhlIGZpZWxkIHdoZW4gaXQncyBhY2Nlc3NlZC4KKyAg
ICAgICAgV2ViU3RyaW5nIG1fbmFtZTsKKyAgICAgICAgV2ViU3RyaW5nIG1fdHlwZUNsYXNzTmFt
ZTsKKyAgICB9OworCisgICAgfldlYkphdmFJbnN0YW5jZSgpIHt9CisKKyAgICAvLyBDYWxsZWQg
ZnJvbSBXZWJDb3JlIHZpYSBKYXZhSW5zdGFuY2VJbXBsLgorICAgIHZpcnR1YWwgY29uc3QgV2Vi
VmVjdG9yPE1ldGhvZFByb3BlcnRpZXM+JiBtZXRob2RzKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgY29uc3QgV2ViVmVjdG9yPEZpZWxkUHJvcGVydGllcz4mIGZpZWxkcygpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFdlYkphdmFWYWx1ZSBpbnZva2VNZXRob2QoaW50IGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViSmF2YVZhbHVl
PiYgYXJncykgPSAwOworICAgIHZpcnR1YWwgV2ViSmF2YVZhbHVlIGdldEZpZWxkKGludCBpZCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJKYXZhSW5z
dGFuY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2
YVZhbHVlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhVmFsdWUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZjI3N2RlMDNmNGIzYzUyNzdjZDUyOWZhYWIzOGQwMjMxZjExZjc0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YVZhbHVl
LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSmF2YVZhbHVl
X2gKKyNkZWZpbmUgV2ViSmF2YVZhbHVlX2gKKworI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
aW5kaW5ncyB7IGNsYXNzIEphdmFWYWx1ZTsgfSB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJKYXZhSW5zdGFuY2U7CisKK2NsYXNzIFdlYkphdmFWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgLy8gQ29waWVkIGZyb20gSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlLgorICAgIGVudW0gVHlw
ZSB7CisgICAgICAgIEphdmFUeXBlSW52YWxpZCA9IDAsCisgICAgICAgIEphdmFUeXBlVm9pZCwK
KyAgICAgICAgSmF2YVR5cGVPYmplY3QsCisgICAgICAgIEphdmFUeXBlQm9vbGVhbiwKKyAgICAg
ICAgSmF2YVR5cGVCeXRlLAorICAgICAgICBKYXZhVHlwZUNoYXIsCisgICAgICAgIEphdmFUeXBl
U2hvcnQsCisgICAgICAgIEphdmFUeXBlSW50LAorICAgICAgICBKYXZhVHlwZUxvbmcsCisgICAg
ICAgIEphdmFUeXBlRmxvYXQsCisgICAgICAgIEphdmFUeXBlRG91YmxlLAorICAgICAgICBKYXZh
VHlwZUFycmF5LAorICAgICAgICBKYXZhVHlwZVN0cmluZywKKyAgICB9OworCisgICAgV2ViSmF2
YVZhbHVlKCk7CisgICAgV2ViSmF2YVZhbHVlKGNvbnN0IFdlYkphdmFWYWx1ZSYpOworICAgIH5X
ZWJKYXZhVmFsdWUoKTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlw
ZShUeXBlKTsKKworICAgIFdlYkphdmFJbnN0YW5jZSogb2JqZWN0VmFsdWUoKSBjb25zdDsKKyAg
ICB2b2lkIHNldE9iamVjdFZhbHVlKFdlYkphdmFJbnN0YW5jZSopOworICAgIGJvb2wgYm9vbGVh
blZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbCk7CisgICAgc2ln
bmVkIGNoYXIgYnl0ZVZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCeXRlVmFsdWUoc2lnbmVk
IGNoYXIpOworICAgIHVuc2lnbmVkIHNob3J0IGNoYXJWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0Q2hhclZhbHVlKHVuc2lnbmVkIHNob3J0KTsKKyAgICBzaG9ydCBzaG9ydFZhbHVlKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRTaG9ydFZhbHVlKHNob3J0KTsKKyAgICBpbnQgaW50VmFsdWUoKSBj
b25zdDsKKyAgICB2b2lkIHNldEludFZhbHVlKGludCk7CisgICAgbG9uZyBsb25nIGxvbmdWYWx1
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0TG9uZ1ZhbHVlKGxvbmcgbG9uZyk7CisgICAgZmxvYXQg
ZmxvYXRWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RmxvYXRWYWx1ZShmbG9hdCk7CisgICAg
ZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXREb3VibGVWYWx1ZShkb3Vi
bGUpOworICAgIFdlYlN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3Ry
aW5nVmFsdWUoV2ViU3RyaW5nKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdl
YkphdmFWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IEpTQzo6QmluZGluZ3M6OkphdmFWYWx1ZSYpOwor
ICAgIG9wZXJhdG9yIEpTQzo6QmluZGluZ3M6OkphdmFWYWx1ZSgpIGNvbnN0OworI2VuZGlmIC8v
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVPd25QdHI8
SlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkphdmFWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9KYXZhSW5zdGFuY2VQcm94eUltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSmF2YUluc3RhbmNlUHJveHlJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YjY0NTc5Y2Y5NjdjNGNlZTZjN2Y3ZTE3ZTQ0NmMyYWJkMmM3YjY2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSmF2YUluc3RhbmNlUHJveHlJbXBsLmNwcApA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkphdmFJbnN0YW5jZVByb3h5SW1wbC5oIgorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdF
KQorCisjaW5jbHVkZSAiSmF2YUZpZWxkUHJveHlWOC5oIgorI2luY2x1ZGUgIkphdmFNZXRob2RQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworSmF2YUluc3RhbmNlUHJveHlJbXBsOjpK
YXZhSW5zdGFuY2VQcm94eUltcGwoV2ViSmF2YUluc3RhbmNlKiB3ZWJPYmplY3QpCisgICAgOiBt
X3dlYk9iamVjdCh3ZWJPYmplY3QpCit7CisgICAgY29uc3QgV2ViVmVjdG9yPFdlYkphdmFJbnN0
YW5jZTo6TWV0aG9kUHJvcGVydGllcz4mIG1ldGhvZHMgPSBtX3dlYk9iamVjdC0+bWV0aG9kcygp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWV0aG9kcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBXZWJKYXZhSW5zdGFuY2U6Ok1ldGhvZFByb3BlcnRpZXMqIG1ldGhvZCA9ICZt
ZXRob2RzW2ldOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbWV0ZXJzOworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IG1ldGhvZC0+bV9wYXJhbWV0ZXJzLnNpemUoKTsgKytqKQor
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQobWV0aG9kLT5tX3BhcmFtZXRlcnNbal0pOwor
ICAgICAgICBhZGRNZXRob2QobWV0aG9kLT5tX2lkLCBtZXRob2QtPm1faXNTdGF0aWMsIG1ldGhv
ZC0+bV9uYW1lLCBtZXRob2QtPm1fcmV0dXJuVHlwZUNsYXNzTmFtZSwgcGFyYW1ldGVycyk7Cisg
ICAgfQorCisgICAgY29uc3QgV2ViVmVjdG9yPFdlYkphdmFJbnN0YW5jZTo6RmllbGRQcm9wZXJ0
aWVzPiYgZmllbGRzID0gbV93ZWJPYmplY3QtPmZpZWxkcygpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYkphdmFJbnN0
YW5jZTo6RmllbGRQcm9wZXJ0aWVzKiBmaWVsZCA9ICZmaWVsZHNbaV07CisgICAgICAgIGFkZEZp
ZWxkKGZpZWxkLT5tX2lkLCBmaWVsZC0+bV9uYW1lLCBmaWVsZC0+bV90eXBlQ2xhc3NOYW1lKTsK
KyAgICB9Cit9CisKK0pTQzo6QmluZGluZ3M6OkphdmFWYWx1ZSBKYXZhSW5zdGFuY2VQcm94eUlt
cGw6Omludm9rZU1ldGhvZChjb25zdCBKU0M6OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJveHkqIG1l
dGhvZCwgSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlKiBhcmdzKQoreworICAgIHNpemVfdCBudW1Q
YXJhbWV0ZXJzID0gbWV0aG9kLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgV2ViVmVjdG9yPFdlYkph
dmFWYWx1ZT4gd2ViQXJncyhudW1QYXJhbWV0ZXJzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bVBhcmFtZXRlcnM7ICsraSkKKyAgICAgICAgd2ViQXJnc1tpXSA9IGFyZ3NbaV07Cisg
ICAgcmV0dXJuIG1fd2ViT2JqZWN0LT5pbnZva2VNZXRob2QobWV0aG9kLT5pZCgpLCB3ZWJBcmdz
KTsKK30KKworSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlIEphdmFJbnN0YW5jZVByb3h5SW1wbDo6
Z2V0RmllbGQoY29uc3QgSlNDOjpCaW5kaW5nczo6SmF2YUZpZWxkUHJveHkqIGZpZWxkKQorewor
ICAgIHJldHVybiBtX3dlYk9iamVjdC0+Z2V0RmllbGQoZmllbGQtPmlkKCkpOworfQorCitXZWJK
YXZhSW5zdGFuY2UqIEphdmFJbnN0YW5jZVByb3h5SW1wbDo6d2ViT2JqZWN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJPYmplY3QuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSmF2YUluc3RhbmNlUHJveHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9KYXZhSW5zdGFuY2VQcm94eUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzM2Yjky
Y2Y2ZmZlZTc3ZTk3ZDY1ZWViMGY5YTY3MzQ2NTk5NWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSmF2YUluc3RhbmNlUHJveHlJbXBsLmgKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSmF2YUluc3RhbmNlUHJveHlJbXBsX2gK
KyNkZWZpbmUgSmF2YUluc3RhbmNlUHJveHlJbXBsX2gKKworI2lmIEVOQUJMRShKQVZBX0JSSURH
RSkKKworI2luY2x1ZGUgIkphdmFJbnN0YW5jZVByb3h5VjguaCIKKyNpbmNsdWRlICJXZWJKYXZh
SW5zdGFuY2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEFuIGltcGxlbWVudGF0aW9u
IG9mIEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5IHRoYXQgc2ltcGx5IHByb3hpZXMK
Ky8vIGNhbGxzIHRvIGEgV2ViSmF2YUluc3RhbmNlLiBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIFdl
YkphdmFJbnN0YW5jZS4KK2NsYXNzIEphdmFJbnN0YW5jZVByb3h5SW1wbCA6IHB1YmxpYyBKU0M6
OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2VQcm94eSB7CitwdWJsaWM6CisgICAgLy8gVGFrZXMgb3du
ZXJzaGlwIG9mIFdlYkphdmFJbnN0YW5jZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhSW5z
dGFuY2VQcm94eUltcGw+IGNyZWF0ZShXZWJKYXZhSW5zdGFuY2UqIHdlYk9iamVjdCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEphdmFJbnN0YW5jZVByb3h5SW1wbCh3ZWJPYmplY3QpKTsgfQorCisg
ICAgLy8gSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlUHJveHkKKyAgICB2aXJ0dWFsIEpTQzo6
QmluZGluZ3M6OkphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3QgSlNDOjpCaW5kaW5nczo6SmF2
YU1ldGhvZFByb3h5KiwgSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlKiBhcmdzKTsKKyAgICB2aXJ0
dWFsIEpTQzo6QmluZGluZ3M6OkphdmFWYWx1ZSBnZXRGaWVsZChjb25zdCBKU0M6OkJpbmRpbmdz
OjpKYXZhRmllbGRQcm94eSopOworCisgICAgV2ViSmF2YUluc3RhbmNlKiB3ZWJPYmplY3QoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBKYXZhSW5zdGFuY2VQcm94eUltcGwoV2Vi
SmF2YUluc3RhbmNlKik7CisKKyAgICBPd25QdHI8V2ViSmF2YUluc3RhbmNlPiBtX3dlYk9iamVj
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFf
QlJJREdFKQorCisjZW5kaWYgLy8gSmF2YUluc3RhbmNlUHJveHlJbXBsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkphdmFCcmlkZ2VJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkphdmFCcmlkZ2VJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
OTY2MzljMjc5ZGZjM2RhYjUxY2RlMGNlOThhMjliMzliZDc1ZGFhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSmF2YUJyaWRnZUltcGwuY3BwCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViSmF2YUJyaWRnZUltcGwuaCIKKworI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2lu
Y2x1ZGUgIkphdmFOUE9iamVjdFY4LmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViSmF2YUJyaWRnZUltcGw6OnJlZ2lzdGVyT2JqZWN0KGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSmF2YUluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICAv
LyBXZSBjcmVhdGUgYSBuZXcgSmF2YUluc3RhbmNlSW1wbCBvYmplY3QsIHdoaWNoIHRha2VzIG93
bmVyc2hpcCBvZiB0aGUKKyAgICAvLyBXZWJKYXZhSW5zdGFuY2UuCisgICAgbV9vYmplY3RzLnNl
dChuYW1lLCBKYXZhSW5zdGFuY2VQcm94eUltcGw6OmNyZWF0ZShpbnN0YW5jZSkpOworfQorCit2
b2lkIFdlYkphdmFCcmlkZ2VJbXBsOjp1bnJlZ2lzdGVyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYg
bmFtZSkKK3sKKyAgICBtX29iamVjdHMucmVtb3ZlKG5hbWUpOworfQorCit2b2lkIFdlYkphdmFC
cmlkZ2VJbXBsOjppbmplY3RPYmplY3RzKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBmb3IgKE9i
amVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fb2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IG1fb2Jq
ZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgdGFrZXMgb3duZXJz
aGlwIG9mIHRoZSBuZXcgTlBPYmplY3QsIHdoaWNoIGhhcyBhIHJlZiB0byB0aGUKKyAgICAgICAg
Ly8gSmF2YUluc3RhbmNlSW1wbC4KKyAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gSlNDOjpC
aW5kaW5nczo6SmF2YUluc3RhbmNlVG9OUE9iamVjdChpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBmcmFtZS0+YmluZFRvV2luZG93T2JqZWN0KGl0ZXItPmZpcnN0LCBucE9iamVjdCk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShKQVZB
X0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkphdmFC
cmlkZ2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJKYXZhQnJpZGdlSW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhmZWYyNjY4YjU0YmYyNjcwY2JiYWI4YjczODA4MWYwN2Q3MDAwMWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJKYXZhQnJp
ZGdlSW1wbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkph
dmFCcmlkZ2VJbXBsX2gKKyNkZWZpbmUgV2ViSmF2YUJyaWRnZUltcGxfaAorCisjaWYgRU5BQkxF
KEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiSmF2YUluc3RhbmNlUHJveHlJbXBsLmgiCisjaW5j
bHVkZSAiV2ViSmF2YUJyaWRnZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJGcmFtZTsKKworY2xhc3MgV2ViSmF2YUJyaWRnZUltcGwgOiBwdWJsaWMgV2ViSmF2YUJy
aWRnZSB7CitwdWJsaWM6CisgICAgLy8gV2ViSmF2YUJyaWRnZQorICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3Rlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkphdmFJbnN0YW5jZSopOwor
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7
CisKKyAgICB2b2lkIGluamVjdE9iamVjdHMoV2ViRnJhbWUqKTsKKworcHJpdmF0ZToKKyAgICAv
LyBXZSBoYXZlIHRvIGtlZXAgYSBsaXN0IG9mIGFsbCBKYXZhIG9iamVjdHMgb24gdGhlIGJyb3dz
ZXIgc2lkZSBiZWNhdXNlIHdlCisgICAgLy8gaGF2ZSB0byBkbyB0aGUgY29udmVyc2lvbiBiZXR3
ZWVuIGpvYmplY3QgYW5kIElEIHRoZXJlLgorICAgIC8vIFdlIGNvdWxkIGF2b2lkIGtlZXBpbmcg
YW55IGxpc3RzIG9uIHRoZSByZW5kZXJlciBzaWRlIGlmIG9uIGV2ZXJ5IHBhZ2UKKyAgICAvLyBs
b2FkIHdlIHNlbnQgSVBDIG1lc3NhZ2VzIGFuZCBjcmVhdGVkIG5ldyBKYXZhSW5zdGFuY2VJbXBs
IG9iamVjdHMgaGVyZQorICAgIC8vIGluIHRoZSByZW5kZXJlci4gSW5zdGVhZCB3ZSB3YW50IHRv
IG1pbmltaXNlIElQQyBieSBvbmx5IGRvaW5nIElQQyB3aGVuCisgICAgLy8gb2JqZWN0cyBhcmUg
cmVtb3ZlZCBvciBhZGRlZC4gU28gd2UgaGF2ZSB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZQor
ICAgIC8vIGluamVjdGVkIG9iamVjdHMgaGVyZSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGVtIGFj
cm9zcyBwYWdlIGxvYWRzLgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxKYXZh
SW5zdGFuY2VQcm94eUltcGw+ID4gT2JqZWN0TWFwOworICAgIE9iamVjdE1hcCBtX29iamVjdHM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JS
SURHRSkKKworI2VuZGlmIC8vIFdlYkphdmFCcmlkZ2VJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkphdmFWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJKYXZhVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYTEwMGMwNDJjYjhmZjI2
ZTYxNDk3NTQ4OTkzODJlZjBiYTBjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJKYXZhVmFsdWUuY3BwCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkphdmFWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiSmF2YUluc3RhbmNlUHJveHlJ
bXBsLmgiCisjaW5jbHVkZSAiSmF2YVZhbHVlVjguaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK3VzaW5nIEpTQzo6QmluZGluZ3M6OkphdmFWYWx1ZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYkphdmFWYWx1ZTo6V2ViSmF2YVZhbHVlKCkgOiBtX3ByaXZhdGUobmV3IEph
dmFWYWx1ZSgpKQoreworfQorCitXZWJKYXZhVmFsdWU6OldlYkphdmFWYWx1ZShjb25zdCBXZWJK
YXZhVmFsdWUmIG90aGVyKQorICAgIDogbV9wcml2YXRlKG5ldyBKYXZhVmFsdWUoKm90aGVyLm1f
cHJpdmF0ZS5nZXQoKSkpCit7Cit9CisKK1dlYkphdmFWYWx1ZTo6fldlYkphdmFWYWx1ZSgpCit7
CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCitXZWJKYXZhVmFsdWU6OlR5cGUgV2ViSmF2
YVZhbHVlOjp0eXBlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fcHJpdmF0ZS0+bV90eXBlKSB7
CisgICAgY2FzZSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUludmFsaWQ6CisgICAgICAgIHJldHVy
biBKYXZhVHlwZUludmFsaWQ7CisgICAgY2FzZSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZVZvaWQ6
CisgICAgICAgIHJldHVybiBKYXZhVHlwZVZvaWQ7CisgICAgY2FzZSBKU0M6OkJpbmRpbmdzOjpK
YXZhVHlwZU9iamVjdDoKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlT2JqZWN0OworICAgIGNhc2Ug
SlNDOjpCaW5kaW5nczo6SmF2YVR5cGVCb29sZWFuOgorICAgICAgICByZXR1cm4gSmF2YVR5cGVC
b29sZWFuOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVCeXRlOgorICAgICAgICBy
ZXR1cm4gSmF2YVR5cGVCeXRlOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVDaGFy
OgorICAgICAgICByZXR1cm4gSmF2YVR5cGVDaGFyOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6
SmF2YVR5cGVTaG9ydDoKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlU2hvcnQ7CisgICAgY2FzZSBK
U0M6OkJpbmRpbmdzOjpKYXZhVHlwZUludDoKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlSW50Owor
ICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVMb25nOgorICAgICAgICByZXR1cm4gSmF2
YVR5cGVMb25nOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVGbG9hdDoKKyAgICAg
ICAgcmV0dXJuIEphdmFUeXBlRmxvYXQ7CisgICAgY2FzZSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlw
ZURvdWJsZToKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlRG91YmxlOworICAgIGNhc2UgSlNDOjpC
aW5kaW5nczo6SmF2YVR5cGVBcnJheToKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlQXJyYXk7Cisg
ICAgY2FzZSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIEph
dmFUeXBlU3RyaW5nOworICAgIH0KKyAgICBBU1NFUlQoZmFsc2UpOworICAgIHJldHVybiBKYXZh
VHlwZUludmFsaWQ7Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRUeXBlKFR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEphdmFUeXBlSW52YWxpZDoKKyAgICAg
ICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUludmFsaWQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2YVR5cGVWb2lkOgorICAgICAgICBtX3ByaXZhdGUt
Pm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlVm9pZDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKKyAgICAgICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6
OkJpbmRpbmdzOjpKYXZhVHlwZU9iamVjdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKYXZh
VHlwZUJvb2xlYW46CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpCaW5kaW5nczo6
SmF2YVR5cGVCb29sZWFuOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFUeXBlQnl0ZToK
KyAgICAgICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUJ5dGU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2YVR5cGVDaGFyOgorICAgICAgICBtX3ByaXZh
dGUtPm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlQ2hhcjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKYXZhVHlwZVNob3J0OgorICAgICAgICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpT
Qzo6QmluZGluZ3M6OkphdmFUeXBlU2hvcnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2
YVR5cGVJbnQ6CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpCaW5kaW5nczo6SmF2
YVR5cGVJbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2YVR5cGVMb25nOgorICAgICAg
ICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlTG9uZzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKYXZhVHlwZUZsb2F0OgorICAgICAgICBtX3ByaXZhdGUtPm1f
dHlwZSA9IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlRmxvYXQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSmF2YVR5cGVEb3VibGU6CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpC
aW5kaW5nczo6SmF2YVR5cGVEb3VibGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2YVR5
cGVBcnJheToKKyAgICAgICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZh
VHlwZUFycmF5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFUeXBlU3RyaW5nOgorICAg
ICAgICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlU3RyaW5nOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoZmFsc2UpOworICAg
IH0KK30KKworV2ViSmF2YUluc3RhbmNlKiBXZWJKYXZhVmFsdWU6Om9iamVjdFZhbHVlKCkgY29u
c3QKK3sKKyAgICAvLyBHZXQgdGhlIFdlYkphdmFJbnN0YW5jZSBvdXQgb2YgdGhlIEphdmFJbnN0
YW5jZVByb3h5SW1wbC4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlUHJveHlJ
bXBsKj4obV9wcml2YXRlLT5tX29iamVjdFZhbHVlLmdldCgpKS0+d2ViT2JqZWN0KCk7Cit9CisK
K3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRPYmplY3RWYWx1ZShXZWJKYXZhSW5zdGFuY2UqIHZhbHVl
KQoreworICAgIC8vIENyZWF0ZSBhIEphdmFJbnN0YW5jZUltcGwgdG8gd3JhcCB0aGlzIFdlYkph
dmFJbnN0YW5jZS4KKyAgICAvLyBUaGUgSmF2YUluc3RhbmNlSW1wbCB0YWtlcyBvd25lcnNoaXAg
b2YgdGhlIFdlYkphdmFJbnN0YW5jZS4KKyAgICBtX3ByaXZhdGUtPm1fb2JqZWN0VmFsdWUgPSBK
YXZhSW5zdGFuY2VQcm94eUltcGw6OmNyZWF0ZSh2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViSmF2YVZh
bHVlOjpib29sZWFuVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fYm9v
bGVhblZhbHVlOworfQorCit2b2lkIFdlYkphdmFWYWx1ZTo6c2V0Qm9vbGVhblZhbHVlKGJvb2wg
dmFsdWUpCit7CisgICAgbV9wcml2YXRlLT5tX2Jvb2xlYW5WYWx1ZSA9IHZhbHVlOworfQorCitz
aWduZWQgY2hhciBXZWJKYXZhVmFsdWU6OmJ5dGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9ieXRlVmFsdWU7Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRCeXRl
VmFsdWUoc2lnbmVkIGNoYXIgdmFsdWUpCit7CisgICAgbV9wcml2YXRlLT5tX2J5dGVWYWx1ZSA9
IHZhbHVlOworfQorCit1bnNpZ25lZCBzaG9ydCBXZWJKYXZhVmFsdWU6OmNoYXJWYWx1ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9jaGFyVmFsdWU7Cit9CisKK3ZvaWQgV2Vi
SmF2YVZhbHVlOjpzZXRDaGFyVmFsdWUodW5zaWduZWQgc2hvcnQgdmFsdWUpCit7CisgICAgbV9w
cml2YXRlLT5tX2NoYXJWYWx1ZSA9IHZhbHVlOworfQorCitzaG9ydCBXZWJKYXZhVmFsdWU6OnNo
b3J0VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fc2hvcnRWYWx1ZTsK
K30KKwordm9pZCBXZWJKYXZhVmFsdWU6OnNldFNob3J0VmFsdWUoc2hvcnQgdmFsdWUpCit7Cisg
ICAgbV9wcml2YXRlLT5tX3Nob3J0VmFsdWUgPSB2YWx1ZTsKK30KKworaW50IFdlYkphdmFWYWx1
ZTo6aW50VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1faW50VmFsdWU7
Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRJbnRWYWx1ZShpbnQgdmFsdWUpCit7CisgICAg
bV9wcml2YXRlLT5tX2ludFZhbHVlID0gdmFsdWU7Cit9CisKK2xvbmcgbG9uZyBXZWJKYXZhVmFs
dWU6OmxvbmdWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb25nVmFs
dWU7Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRMb25nVmFsdWUobG9uZyBsb25nIHZhbHVl
KQoreworICAgIG1fcHJpdmF0ZS0+bV9sb25nVmFsdWUgPSB2YWx1ZTsKK30KKworZmxvYXQgV2Vi
SmF2YVZhbHVlOjpmbG9hdFZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X2Zsb2F0VmFsdWU7Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRGbG9hdFZhbHVlKGZsb2F0
IHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9mbG9hdFZhbHVlID0gdmFsdWU7Cit9CisKK2Rv
dWJsZSBXZWJKYXZhVmFsdWU6OmRvdWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5tX2RvdWJsZVZhbHVlOworfQorCit2b2lkIFdlYkphdmFWYWx1ZTo6c2V0RG91Ymxl
VmFsdWUoZG91YmxlIHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9kb3VibGVWYWx1ZSA9IHZh
bHVlOworfQorCitXZWJTdHJpbmcgV2ViSmF2YVZhbHVlOjpzdHJpbmdWYWx1ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9zdHJpbmdWYWx1ZTsKK30KKwordm9pZCBXZWJKYXZh
VmFsdWU6OnNldFN0cmluZ1ZhbHVlKFdlYlN0cmluZyB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUt
Pm1fc3RyaW5nVmFsdWUgPSB2YWx1ZTsKK30KKworV2ViSmF2YVZhbHVlJiBXZWJKYXZhVmFsdWU6
Om9wZXJhdG9yPShjb25zdCBKYXZhVmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS5yZXNl
dChuZXcgSmF2YVZhbHVlKHZhbHVlKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJKYXZh
VmFsdWU6Om9wZXJhdG9yIEphdmFWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX3ByaXZh
dGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEpBVkFfQlJJREdFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103371</attachid>
            <date>2011-08-09 10:51:31 -0700</date>
            <delta_ts>2011-08-10 02:06:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57230-20110809185127.patch</filename>
            <type>text/plain</type>
            <size>12955</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Y2E4Zjc1MjMyZTliMDQ1MzBjMTBjZmQ4NTRhMTA2NDlhYWI1NWE4ZC4uZmI4MWMzOGI0ZTI4NmIx
MDQ0YWI1OGIxMDI3MjljYTY3NDkxZjcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0wOC0wOSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkIHRvIENocm9taXVtIFdlYktpdCBBUEkgbWV0aG9kcyBmb3Ig
aW5qZWN0aW5nIEphdmEgb2JqZWN0cyBpbnRvIEphdmFTY3JpcHQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1
YmxpYy9XZWJKYXZhQnJpZGdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhQnJp
ZGdlOjp+V2ViSmF2YUJyaWRnZSk6CisgICAgICAgICogcHVibGljL1dlYkphdmFPYmplY3QuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkphdmFPYmplY3Q6On5XZWJKYXZhT2JqZWN0KToK
KyAgICAgICAgKiBwdWJsaWMvV2ViSmF2YVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIHB1Ymxp
Yy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmphdmFCcmlkZ2UpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpqYXZhQnJpZGdlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wOC0w
OSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIHJlbW92ZSB0ZW1wb3JhcnkgI2RlZmluZSBmcm9tIFdlYlVSTFJlcXVlc3QuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGI5N2E2N2M0NTE3MjA2MWVhZTNmNjU5ZTk4Zjkz
YTQwZjllZTUyMDcuLjQyNjA4MWI5NTk3ZDEwNzdmMWE4MzlhNTZiNWNmODVkYTg0NmJiOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTIwMiw2ICsyMDIsOSBAQAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJJbnB1dEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJJbnB1dEV2ZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSmF2YUJyaWRn
ZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkphdmFPYmplY3QuaCcsCisgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJKYXZhVmFsdWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJLaXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXRDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYWJlbEVsZW1lbnQuaCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhQnJpZGdlLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhQnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc3ODQ3MDNl
OTFiYTg0Y2VmZmNiYjhkYzE0MGIyMDk3ODIxZDY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkphdmFCcmlkZ2UuaApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJKYXZhQnJpZGdlX2gKKyNkZWZpbmUgV2ViSmF2
YUJyaWRnZV9oCisKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSmF2YU9iamVjdDsKKwor
Ly8gVGhlIGJyaWRnZSB1c2VkIHRvIGluamVjdCBKYXZhIG9iamVjdHMgaW50byBKYXZhU2NyaXB0
LiBKYXZhIG9iamVjdHMKKy8vIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnJpZGdlIHdpbGwgYXBwZWFy
IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdsb2JhbAorLy8gc2NvcGUgb2YgdGhlIHBhZ2Un
cyBtYWluIGZyYW1lLiBOb3RlIHRoYXQgdGhlIHNldCBvZiBvYmplY3RzIGF2YWlsYWJsZSBpbiB0
aGUKKy8vIHBhZ2UgaXMgb25seSB1cGRhdGVkIHdoZW4gdGhlIHBhZ2UgaXMgcmVsb2FkZWQuCitj
bGFzcyBXZWJKYXZhQnJpZGdlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5XZWJKYXZhQnJpZGdlKCkgeyB9CisKKyAgICAvLyBPd25lcnNoaXAgb2YgdGhl
IFdlYkphdmFPYmplY3QgaXMgcGFzc2VkIHRvIHRoZSBicmlkZ2UuCisgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSmF2YU9iamVjdCopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG5h
bWUpID0gMDsKKworcHJpdmF0ZToKKyAgICAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4g
bm90IGJlIGNyZWF0ZWQgYnkgdGhlIGVtYmVkZGVyLgorICAgIFdlYkphdmFCcmlkZ2UoKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViSmF2YUJyaWRnZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhT2JqZWN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDJjNDgwNGQyNzBlYzQ2NzY2ODhmZWRlNWQyYjA2Nzg4YWVmY2ViYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkphdmFPYmplY3QuaApAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJKYXZhT2JqZWN0X2gKKyNk
ZWZpbmUgV2ViSmF2YU9iamVjdF9oCisKKyNpbmNsdWRlICJXZWJKYXZhVmFsdWUuaCIKKyNpbmNs
dWRlICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUg
IldlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gUmVwcmVzZW50cyBhIEph
dmEgb2JqZWN0LiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgdXNlZCB0byByZXByZXNlbnQg
dGhlCisvLyBKYXZhIG9iamVjdHMgdGhhdCBhcmUgaW5qZWN0ZWQgaW50byBKYXZhU2NyaXB0IHVz
aW5nIHRoZSBKYXZhIGJyaWRnZSwgYW5kIHRvCisvLyByZXByZXNlbnQgSmF2YSBvYmplY3RzIHBh
c3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSB0aGVpciBtZXRob2RzLgorY2xhc3MgV2ViSmF2YU9i
amVjdCA6IHB1YmxpYyBXZWJOb25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RydWN0IE1ldGhv
ZFByb3BlcnRpZXMgeworICAgICAgICBXZWJTdHJpbmcgbmFtZTsKKyAgICAgICAgV2ViVmVjdG9y
PFdlYlN0cmluZz4gcGFyYW1ldGVyVHlwZUNsYXNzTmFtZXM7CisgICAgfTsKKworICAgIHZpcnR1
YWwgfldlYkphdmFPYmplY3QoKSB7IH0KKworICAgIHZpcnR1YWwgV2ViVmVjdG9yPE1ldGhvZFBy
b3BlcnRpZXM+IG1ldGhvZHNOYW1lZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBXZWJKYXZhVmFsdWUgaW52b2tlTWV0aG9kKGNvbnN0IE1ldGhvZFBy
b3BlcnRpZXMmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJWZWN0b3I8V2ViSmF2YVZhbHVlPiYgYXJncykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgV2Vi
SmF2YVZhbHVlIGZpZWxkVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdCA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkphdmFPYmplY3RfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YVZhbHVlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhVmFsdWUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NGEwNmE3YTVmNGQxNjQzMGFmNzA1ZjFlMGQ3YjUxZDdjNjczMjU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YVZhbHVlLmgKQEAgLTAs
MCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkphdmFWYWx1ZV9oCisjZGVm
aW5lIFdlYkphdmFWYWx1ZV9oCisKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQmluZGluZ3Mg
eyBjbGFzcyBKYXZhVmFsdWU7IH0gfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
SmF2YU9iamVjdDsKKworLy8gUmVwcmVzZW50cyBhIEphdmEgdmFsdWUuIEluc3RhbmNlcyBvZiB0
aGlzIGNsYXNzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUKKy8vIEphdmEgdmFsdWVzIHBhc3Nl
ZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBtZXRob2RzIGludm9rZWQgb24gSmF2YSBvYmplY3RzIHRo
YXQKKy8vIGhhdmUgYmVlbiBpbmplY3RlZCBpbnRvIEphdmFTY3JpcHQgdXNpbmcgdGhlIEphdmEg
YnJpZGdlLgorY2xhc3MgV2ViSmF2YVZhbHVlIHsKK3B1YmxpYzoKKyAgICAvLyBDb3BpZWQgZnJv
bSBKU0M6OkJpbmRpbmdzOjpKYXZhVmFsdWUuCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgSmF2
YVR5cGVJbnZhbGlkID0gMCwKKyAgICAgICAgSmF2YVR5cGVWb2lkLAorICAgICAgICBKYXZhVHlw
ZU9iamVjdCwKKyAgICAgICAgSmF2YVR5cGVCb29sZWFuLAorICAgICAgICBKYXZhVHlwZUJ5dGUs
CisgICAgICAgIEphdmFUeXBlQ2hhciwKKyAgICAgICAgSmF2YVR5cGVTaG9ydCwKKyAgICAgICAg
SmF2YVR5cGVJbnQsCisgICAgICAgIEphdmFUeXBlTG9uZywKKyAgICAgICAgSmF2YVR5cGVGbG9h
dCwKKyAgICAgICAgSmF2YVR5cGVEb3VibGUsCisgICAgICAgIEphdmFUeXBlQXJyYXksCisgICAg
ICAgIEphdmFUeXBlU3RyaW5nLAorICAgIH07CisKKyAgICBXZWJKYXZhVmFsdWUoKTsKKyAgICBX
ZWJKYXZhVmFsdWUoY29uc3QgV2ViSmF2YVZhbHVlJik7CisgICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgV2ViSmF2YVZhbHVlJik7CisgICAgfldlYkphdmFWYWx1ZSgpOworCisgICAgVHlwZSB0eXBl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKFR5cGUpOworCisgICAgV2ViSmF2YU9iamVjdCog
b2JqZWN0VmFsdWUoKSBjb25zdDsKKyAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIFdlYkph
dmFPYmplY3QuCisgICAgdm9pZCBzZXRPYmplY3RWYWx1ZShXZWJKYXZhT2JqZWN0Kik7CisgICAg
Ym9vbCBib29sZWFuVmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEJvb2xlYW5WYWx1ZShib29s
KTsKKyAgICBzaWduZWQgY2hhciBieXRlVmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEJ5dGVW
YWx1ZShzaWduZWQgY2hhcik7CisgICAgdW5zaWduZWQgc2hvcnQgY2hhclZhbHVlKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRDaGFyVmFsdWUodW5zaWduZWQgc2hvcnQpOworICAgIHNob3J0IHNob3J0
VmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3J0VmFsdWUoc2hvcnQpOworICAgIGludCBp
bnRWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW50VmFsdWUoaW50KTsKKyAgICBsb25nIGxv
bmcgbG9uZ1ZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb25nVmFsdWUobG9uZyBsb25nKTsK
KyAgICBmbG9hdCBmbG9hdFZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGbG9hdFZhbHVlKGZs
b2F0KTsKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldERvdWJs
ZVZhbHVlKGRvdWJsZSk7CisgICAgV2ViU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTdHJpbmdWYWx1ZShXZWJTdHJpbmcpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgV2ViSmF2YVZhbHVlJiBvcGVyYXRvcj0oY29uc3QgSlNDOjpCaW5kaW5nczo6SmF2
YVZhbHVlJik7CisgICAgb3BlcmF0b3IgSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlKCkgY29uc3Q7
CisjZW5kaWYgLy8gV0VCS0lUX0lNUExFTUVOVEFUSU9OCisKK3ByaXZhdGU6CisgICAgV2ViUHJp
dmF0ZU93blB0cjxKU0M6OkJpbmRpbmdzOjpKYXZhVmFsdWU+IG1fcHJpdmF0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViSmF2YVZhbHVlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRleCAyNjU5OWFjMzAxOTlmOGU0NWVhZjZi
NGIzY2E1ZTk3Y2Q2YzA3MGI4Li5kOGJhMDA3MDQxNWVlZDlkYzEwZDhhYzRkODhlMjRmNzFmMDY2
YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC00Nyw2ICs0
Nyw3IEBAIGNsYXNzIFdlYkRyYWdEYXRhOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJGcmFt
ZUNsaWVudDsKIGNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViSmF2YUJyaWRn
ZTsKIGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3MgV2Vi
U2V0dGluZ3M7CkBAIC0zNjksNiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0
ZSkgeyB9CiAKKyAgICAvLyBKYXZhIEJyaWRnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBHZXRzIHRoZSBicmlk
Z2UgdXNlZCB0byBpbmplY3QgSmF2YSBvYmplY3RzIGludG8gSmF2YVNjcmlwdCwgaWYgaXQgaXMK
KyAgICAvLyBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCBvZiBXZWJLaXQuCisgICAgdmlydHVhbCBX
ZWJKYXZhQnJpZGdlKiBqYXZhQnJpZGdlKCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlZp
ZXcoKSB7fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApp
bmRleCAwY2ViZDEzMjlmNmQ2YjA1MmUwZDM1YzRlZDMwMjUxOGZhMThmNTlhLi5lY2E0MTBlOWQ0
Y2E2MjQ3ODg2Y2M3NzY3MzlkZDJiZDA0MjUxOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yNzEwLDUgKzI3MTAsMTAgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigpCiB9CiAjZW5kaWYKIAorV2ViSmF2YUJyaWRn
ZSogV2ViVmlld0ltcGw6OmphdmFCcmlkZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyEgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTkyOAor
ICAgIHJldHVybiAwOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGFlMzUyNWY2ZGY5OTBiZTJiOWIxYWM0ZTU4
ZGQ4MTdhMThkYzc5YjQuLmFiYzRhZTdiNzYzYjI4NTZhNmVkM2M0NjU1OWY1MmViMTY0ZWFjYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMjA2LDYgKzIw
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluYWN0aXZlQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIFdlYkphdmFCcmlkZ2UqIGphdmFCcmlkZ2UoKTsKIAogICAgIC8vIENDTGF5ZXJU
cmVlSG9zdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103455</attachid>
            <date>2011-08-10 02:06:09 -0700</date>
            <delta_ts>2011-09-15 07:45:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57230-20110810100607.patch</filename>
            <type>text/plain</type>
            <size>20404</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Y2E4Zjc1MjMyZTliMDQ1MzBjMTBjZmQ4NTRhMTA2NDlhYWI1NWE4ZC4uMDM2OWExOTMzYTE1NWZk
YjRlNzA1MzcyMDc2MmMzNzg2NzVlNDUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMyBAQAorMjAxMS0wOC0wOSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkIHRvIENocm9taXVtIFdlYktpdCBBUEkgbWV0aG9kcyBmb3Ig
aW5qZWN0aW5nIEphdmEgb2JqZWN0cyBpbnRvIEphdmFTY3JpcHQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1
YmxpYy9XZWJKYXZhQnJpZGdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJKYXZhQnJp
ZGdlOjp+V2ViSmF2YUJyaWRnZSk6CisgICAgICAgICogcHVibGljL1dlYkphdmFPYmplY3QuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkphdmFPYmplY3Q6On5XZWJKYXZhT2JqZWN0KToK
KyAgICAgICAgKiBwdWJsaWMvV2ViSmF2YVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIHB1Ymxp
Yy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmphdmFCcmlkZ2UpOgorICAg
ICAgICAqIHNyYy9XZWJKYXZhVmFsdWUuY3BwOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpqYXZhQnJpZGdlKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wOC0wOSAgSm9jaGVuIEVpc2luZ2VyICA8am9j
aGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIHJlbW92ZSB0ZW1wb3Jhcnkg
I2RlZmluZSBmcm9tIFdlYlVSTFJlcXVlc3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmlu
ZGV4IGI5N2E2N2M0NTE3MjA2MWVhZTNmNjU5ZTk4ZjkzYTQwZjllZTUyMDcuLjQ1MzU2YWZlY2I1
YThkZTgzMDM4OTU3OGNmMjU1ZGY0ZjY2ODViZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKQEAgLTIwMiw2ICsyMDIsOSBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSURCVHJh
bnNhY3Rpb25DYWxsYmFja3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEVs
ZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgnLAorICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViSmF2YUJyaWRnZS5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkphdmFPYmplY3QuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJKYXZh
VmFsdWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJLaXRDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJMYWJlbEVsZW1lbnQuaCcsCkBAIC01MDgsNiArNTExLDcgQEAKICAgICAgICAgICAgICAgICAn
c3JjL1dlYklucHV0RXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYklucHV0RXZl
bnRDb252ZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50Q29u
dmVyc2lvbi5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkphdmFWYWx1ZS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViS2l0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJM
YWJlbEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YUJy
aWRnZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YUJyaWRnZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA3ZDc2ZDUwYzM0N2VjYTQ0NzY1ZDQ4YjM3MzY3OTYyYzUyOTdiNjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhQnJpZGdl
LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSmF2YUJyaWRn
ZV9oCisjZGVmaW5lIFdlYkphdmFCcmlkZ2VfaAorCisjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYkphdmFPYmplY3Q7CisKKy8vIFRoZSBicmlkZ2UgdXNlZCB0byBpbmplY3QgSmF2YSBvYmpl
Y3RzIGludG8gSmF2YVNjcmlwdC4gSmF2YSBvYmplY3RzCisvLyByZWdpc3RlcmVkIHdpdGggdGhl
IGJyaWRnZSB3aWxsIGFwcGVhciB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBnbG9iYWwKKy8v
IHNjb3BlIG9mIHRoZSBwYWdlJ3MgbWFpbiBmcmFtZS4gTm90ZSB0aGF0IHRoZSBzZXQgb2Ygb2Jq
ZWN0cyBhdmFpbGFibGUgaW4gdGhlCisvLyBwYWdlIGlzIG9ubHkgdXBkYXRlZCB3aGVuIHRoZSBw
YWdlIGlzIHJlbG9hZGVkLgorY2xhc3MgV2ViSmF2YUJyaWRnZSA6IHB1YmxpYyBXZWJOb25Db3B5
YWJsZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSmF2YUJyaWRnZSgpIHsgfQorCisgICAg
Ly8gT3duZXJzaGlwIG9mIHRoZSBXZWJKYXZhT2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgYnJpZGdl
LgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IFdlYkphdmFPYmplY3QqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPYmplY3Qo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lKSA9IDA7CisKKyNpZiAhV0VCS0lUX0lNUExFTUVOVEFUSU9O
Citwcml2YXRlOgorICAgIC8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBub3QgYmUgY3Jl
YXRlZCBieSB0aGUgZW1iZWRkZXIuCisgICAgV2ViSmF2YUJyaWRnZSgpOworI2VuZGlmCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkphdmFCcmlkZ2VfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YU9iamVjdC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YU9iamVjdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQyYzQ4MDRkMjcwZWM0Njc2Njg4ZmVkZTVkMmIwNjc4OGFlZmNlYmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJKYXZhT2JqZWN0LmgKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSmF2YU9iamVjdF9oCisjZGVm
aW5lIFdlYkphdmFPYmplY3RfaAorCisjaW5jbHVkZSAiV2ViSmF2YVZhbHVlLmgiCisjaW5jbHVk
ZSAiV2ViTm9uQ29weWFibGUuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJX
ZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFJlcHJlc2VudHMgYSBKYXZh
IG9iamVjdC4gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRo
ZQorLy8gSmF2YSBvYmplY3RzIHRoYXQgYXJlIGluamVjdGVkIGludG8gSmF2YVNjcmlwdCB1c2lu
ZyB0aGUgSmF2YSBicmlkZ2UsIGFuZCB0bworLy8gcmVwcmVzZW50IEphdmEgb2JqZWN0cyBwYXNz
ZWQgdG8gYW5kIHJldHVybmVkIGZyb20gdGhlaXIgbWV0aG9kcy4KK2NsYXNzIFdlYkphdmFPYmpl
Y3QgOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIHN0cnVjdCBNZXRob2RQ
cm9wZXJ0aWVzIHsKKyAgICAgICAgV2ViU3RyaW5nIG5hbWU7CisgICAgICAgIFdlYlZlY3RvcjxX
ZWJTdHJpbmc+IHBhcmFtZXRlclR5cGVDbGFzc05hbWVzOworICAgIH07CisKKyAgICB2aXJ0dWFs
IH5XZWJKYXZhT2JqZWN0KCkgeyB9CisKKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxNZXRob2RQcm9w
ZXJ0aWVzPiBtZXRob2RzTmFtZWQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGhhc0ZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgV2ViSmF2YVZhbHVlIGludm9rZU1ldGhvZChjb25zdCBNZXRob2RQcm9w
ZXJ0aWVzJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
VmVjdG9yPFdlYkphdmFWYWx1ZT4mIGFyZ3MpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkph
dmFWYWx1ZSBmaWVsZFZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJKYXZhT2JqZWN0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkphdmFWYWx1ZS5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSmF2YVZhbHVlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGNhMjNhNDk2MzlkYjdlMjg3YTI2YmI3MmI0YzUxMThkYzU1MTlkNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkphdmFWYWx1ZS5oCkBAIC0wLDAg
KzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJKYXZhVmFsdWVfaAorI2RlZmlu
ZSBXZWJKYXZhVmFsdWVfaAorCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorI2luY2x1
ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEJpbmRpbmdzIHsgY2xhc3MgSmF2YVZhbHVlOyB9IH0KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSmF2YU9iamVjdDsKKworLy8gUmVwcmVz
ZW50cyBhIEphdmEgdmFsdWUuIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSB1c2VkIHRvIHJl
cHJlc2VudCB0aGUKKy8vIEphdmEgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBt
ZXRob2RzIGludm9rZWQgb24gSmF2YSBvYmplY3RzIHRoYXQKKy8vIGhhdmUgYmVlbiBpbmplY3Rl
ZCBpbnRvIEphdmFTY3JpcHQgdXNpbmcgdGhlIEphdmEgYnJpZGdlLgorY2xhc3MgV2ViSmF2YVZh
bHVlIHsKK3B1YmxpYzoKKyAgICAvLyBDb3BpZWQgZnJvbSBKU0M6OkJpbmRpbmdzOjpKYXZhVmFs
dWUuCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgSmF2YVR5cGVJbnZhbGlkID0gMCwKKyAgICAg
ICAgSmF2YVR5cGVWb2lkLAorICAgICAgICBKYXZhVHlwZU9iamVjdCwKKyAgICAgICAgSmF2YVR5
cGVCb29sZWFuLAorICAgICAgICBKYXZhVHlwZUJ5dGUsCisgICAgICAgIEphdmFUeXBlQ2hhciwK
KyAgICAgICAgSmF2YVR5cGVTaG9ydCwKKyAgICAgICAgSmF2YVR5cGVJbnQsCisgICAgICAgIEph
dmFUeXBlTG9uZywKKyAgICAgICAgSmF2YVR5cGVGbG9hdCwKKyAgICAgICAgSmF2YVR5cGVEb3Vi
bGUsCisgICAgICAgIEphdmFUeXBlQXJyYXksCisgICAgICAgIEphdmFUeXBlU3RyaW5nLAorICAg
IH07CisKKyAgICBXZWJKYXZhVmFsdWUoKTsKKyAgICBXZWJKYXZhVmFsdWUoY29uc3QgV2ViSmF2
YVZhbHVlJik7CisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgV2ViSmF2YVZhbHVlJik7CisgICAg
fldlYkphdmFWYWx1ZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRU
eXBlKFR5cGUpOworCisgICAgV2ViSmF2YU9iamVjdCogb2JqZWN0VmFsdWUoKSBjb25zdDsKKyAg
ICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIFdlYkphdmFPYmplY3QuCisgICAgdm9pZCBzZXRP
YmplY3RWYWx1ZShXZWJKYXZhT2JqZWN0Kik7CisgICAgYm9vbCBib29sZWFuVmFsdWUoKSBjb25z
dDsKKyAgICB2b2lkIHNldEJvb2xlYW5WYWx1ZShib29sKTsKKyAgICBzaWduZWQgY2hhciBieXRl
VmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEJ5dGVWYWx1ZShzaWduZWQgY2hhcik7CisgICAg
dW5zaWduZWQgc2hvcnQgY2hhclZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDaGFyVmFsdWUo
dW5zaWduZWQgc2hvcnQpOworICAgIHNob3J0IHNob3J0VmFsdWUoKSBjb25zdDsKKyAgICB2b2lk
IHNldFNob3J0VmFsdWUoc2hvcnQpOworICAgIGludCBpbnRWYWx1ZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0SW50VmFsdWUoaW50KTsKKyAgICBsb25nIGxvbmcgbG9uZ1ZhbHVlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRMb25nVmFsdWUobG9uZyBsb25nKTsKKyAgICBmbG9hdCBmbG9hdFZhbHVlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRGbG9hdFZhbHVlKGZsb2F0KTsKKyAgICBkb3VibGUgZG91Ymxl
VmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSk7CisgICAgV2Vi
U3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdHJpbmdWYWx1ZShXZWJT
dHJpbmcpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViSmF2YVZhbHVlJiBv
cGVyYXRvcj0oY29uc3QgSlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlJik7CisgICAgb3BlcmF0b3Ig
SlNDOjpCaW5kaW5nczo6SmF2YVZhbHVlKCkgY29uc3Q7CisjZW5kaWYgLy8gV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZU93blB0cjxKU0M6OkJpbmRpbmdz
OjpKYXZhVmFsdWU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViSmF2YVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAppbmRleCAyNjU5OWFjMzAxOTlmOGU0NWVhZjZiNGIzY2E1ZTk3Y2Q2YzA3MGI4Li5kOGJh
MDA3MDQxNWVlZDlkYzEwZDhhYzRkODhlMjRmNzFmMDY2YThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNzIFdlYkRyYWdEYXRh
OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJGcmFtZUNsaWVudDsKIGNsYXNzIFdlYkdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgV2ViSmF2YUJyaWRnZTsKIGNsYXNzIFdlYk5vZGU7CiBjbGFz
cyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3M7CkBAIC0zNjksNiArMzcw
LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBh
Z2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0ZSkgeyB9CiAKKyAgICAvLyBKYXZhIEJy
aWRnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgICAvLyBHZXRzIHRoZSBicmlkZ2UgdXNlZCB0byBpbmplY3QgSmF2YSBv
YmplY3RzIGludG8gSmF2YVNjcmlwdCwgaWYgaXQgaXMKKyAgICAvLyBzdXBwb3J0ZWQgYnkgdGhp
cyBidWlsZCBvZiBXZWJLaXQuCisgICAgdmlydHVhbCBXZWJKYXZhQnJpZGdlKiBqYXZhQnJpZGdl
KCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlZpZXcoKSB7fQogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkphdmFWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJKYXZhVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNWViYWE3NWYx
NTM5MWE4NzdmNTkyMmMzMzI4Y2ZhZTkxOTQ2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJKYXZhVmFsdWUuY3BwCkBAIC0wLDAgKzEsMjUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkphdmFWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiSmF2YUluc3RhbmNl
SW1wbC5oIgorI2luY2x1ZGUgIkphdmFWYWx1ZVY4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCit1c2luZyBKU0M6OkJpbmRpbmdzOjpKYXZhVmFsdWU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJKYXZhVmFsdWU6OldlYkphdmFWYWx1ZSgpIDogbV9wcml2YXRlKG5ldyBK
YXZhVmFsdWUoKSkKK3sKK30KKworV2ViSmF2YVZhbHVlOjpXZWJKYXZhVmFsdWUoY29uc3QgV2Vi
SmF2YVZhbHVlJiBvdGhlcikKKyAgICA6IG1fcHJpdmF0ZShuZXcgSmF2YVZhbHVlKCpvdGhlci5t
X3ByaXZhdGUuZ2V0KCkpKQoreworfQorCitXZWJKYXZhVmFsdWU6On5XZWJKYXZhVmFsdWUoKQor
eworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworV2ViSmF2YVZhbHVlOjpUeXBlIFdlYkph
dmFWYWx1ZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3ByaXZhdGUtPm1fdHlwZSkg
eworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVJbnZhbGlkOgorICAgICAgICByZXR1
cm4gSmF2YVR5cGVJbnZhbGlkOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVWb2lk
OgorICAgICAgICByZXR1cm4gSmF2YVR5cGVWb2lkOworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6
SmF2YVR5cGVPYmplY3Q6CisgICAgICAgIHJldHVybiBKYXZhVHlwZU9iamVjdDsKKyAgICBjYXNl
IEpTQzo6QmluZGluZ3M6OkphdmFUeXBlQm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIEphdmFUeXBl
Qm9vbGVhbjsKKyAgICBjYXNlIEpTQzo6QmluZGluZ3M6OkphdmFUeXBlQnl0ZToKKyAgICAgICAg
cmV0dXJuIEphdmFUeXBlQnl0ZTsKKyAgICBjYXNlIEpTQzo6QmluZGluZ3M6OkphdmFUeXBlQ2hh
cjoKKyAgICAgICAgcmV0dXJuIEphdmFUeXBlQ2hhcjsKKyAgICBjYXNlIEpTQzo6QmluZGluZ3M6
OkphdmFUeXBlU2hvcnQ6CisgICAgICAgIHJldHVybiBKYXZhVHlwZVNob3J0OworICAgIGNhc2Ug
SlNDOjpCaW5kaW5nczo6SmF2YVR5cGVJbnQ6CisgICAgICAgIHJldHVybiBKYXZhVHlwZUludDsK
KyAgICBjYXNlIEpTQzo6QmluZGluZ3M6OkphdmFUeXBlTG9uZzoKKyAgICAgICAgcmV0dXJuIEph
dmFUeXBlTG9uZzsKKyAgICBjYXNlIEpTQzo6QmluZGluZ3M6OkphdmFUeXBlRmxvYXQ6CisgICAg
ICAgIHJldHVybiBKYXZhVHlwZUZsb2F0OworICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5
cGVEb3VibGU6CisgICAgICAgIHJldHVybiBKYXZhVHlwZURvdWJsZTsKKyAgICBjYXNlIEpTQzo6
QmluZGluZ3M6OkphdmFUeXBlQXJyYXk6CisgICAgICAgIHJldHVybiBKYXZhVHlwZUFycmF5Owor
ICAgIGNhc2UgSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVTdHJpbmc6CisgICAgICAgIHJldHVybiBK
YXZhVHlwZVN0cmluZzsKKyAgICB9CisgICAgQVNTRVJUKGZhbHNlKTsKKyAgICByZXR1cm4gSmF2
YVR5cGVJbnZhbGlkOworfQorCit2b2lkIFdlYkphdmFWYWx1ZTo6c2V0VHlwZShUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKYXZhVHlwZUludmFsaWQ6CisgICAg
ICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVJbnZhbGlkOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFUeXBlVm9pZDoKKyAgICAgICAgbV9wcml2YXRl
LT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZVZvaWQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlND
OjpCaW5kaW5nczo6SmF2YVR5cGVPYmplY3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSmF2
YVR5cGVCb29sZWFuOgorICAgICAgICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6
OkphdmFUeXBlQm9vbGVhbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKYXZhVHlwZUJ5dGU6
CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpCaW5kaW5nczo6SmF2YVR5cGVCeXRl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFUeXBlQ2hhcjoKKyAgICAgICAgbV9wcml2
YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUNoYXI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKKyAgICAgICAgbV9wcml2YXRlLT5tX3R5cGUgPSBK
U0M6OkJpbmRpbmdzOjpKYXZhVHlwZVNob3J0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEph
dmFUeXBlSW50OgorICAgICAgICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpTQzo6QmluZGluZ3M6Okph
dmFUeXBlSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFUeXBlTG9uZzoKKyAgICAg
ICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUxvbmc7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoKKyAgICAgICAgbV9wcml2YXRlLT5t
X3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZUZsb2F0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEphdmFUeXBlRG91YmxlOgorICAgICAgICBtX3ByaXZhdGUtPm1fdHlwZSA9IEpTQzo6
QmluZGluZ3M6OkphdmFUeXBlRG91YmxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEphdmFU
eXBlQXJyYXk6CisgICAgICAgIG1fcHJpdmF0ZS0+bV90eXBlID0gSlNDOjpCaW5kaW5nczo6SmF2
YVR5cGVBcnJheTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKYXZhVHlwZVN0cmluZzoKKyAg
ICAgICAgbV9wcml2YXRlLT5tX3R5cGUgPSBKU0M6OkJpbmRpbmdzOjpKYXZhVHlwZVN0cmluZzsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAg
ICB9Cit9CisKK1dlYkphdmFPYmplY3QqIFdlYkphdmFWYWx1ZTo6b2JqZWN0VmFsdWUoKSBjb25z
dAoreworICAgIC8vIEdldCB0aGUgV2ViSmF2YU9iamVjdCBvdXQgb2YgdGhlIEphdmFJbnN0YW5j
ZUltcGwuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZUltcGwqPihtX3ByaXZh
dGUtPm1fb2JqZWN0VmFsdWUuZ2V0KCkpLT53ZWJKYXZhT2JqZWN0KCk7Cit9CisKK3ZvaWQgV2Vi
SmF2YVZhbHVlOjpzZXRPYmplY3RWYWx1ZShXZWJKYXZhT2JqZWN0KiB2YWx1ZSkKK3sKKyAgICAv
LyBDcmVhdGUgYSBKYXZhSW5zdGFuY2VJbXBsIHRvIHdyYXAgdGhpcyBXZWJKYXZhT2JqZWN0Lgor
ICAgIC8vIFRoZSBKYXZhSW5zdGFuY2VJbXBsIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgV2ViSmF2
YU9iamVjdC4KKyAgICBtX3ByaXZhdGUtPm1fb2JqZWN0VmFsdWUgPSBKYXZhSW5zdGFuY2VJbXBs
OjpjcmVhdGUodmFsdWUpOworfQorCitib29sIFdlYkphdmFWYWx1ZTo6Ym9vbGVhblZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2Jvb2xlYW5WYWx1ZTsKK30KKwordm9p
ZCBXZWJKYXZhVmFsdWU6OnNldEJvb2xlYW5WYWx1ZShib29sIHZhbHVlKQoreworICAgIG1fcHJp
dmF0ZS0+bV9ib29sZWFuVmFsdWUgPSB2YWx1ZTsKK30KKworc2lnbmVkIGNoYXIgV2ViSmF2YVZh
bHVlOjpieXRlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fYnl0ZVZh
bHVlOworfQorCit2b2lkIFdlYkphdmFWYWx1ZTo6c2V0Qnl0ZVZhbHVlKHNpZ25lZCBjaGFyIHZh
bHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9ieXRlVmFsdWUgPSB2YWx1ZTsKK30KKwordW5zaWdu
ZWQgc2hvcnQgV2ViSmF2YVZhbHVlOjpjaGFyVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPm1fY2hhclZhbHVlOworfQorCit2b2lkIFdlYkphdmFWYWx1ZTo6c2V0Q2hhclZh
bHVlKHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9jaGFyVmFsdWUg
PSB2YWx1ZTsKK30KKworc2hvcnQgV2ViSmF2YVZhbHVlOjpzaG9ydFZhbHVlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Nob3J0VmFsdWU7Cit9CisKK3ZvaWQgV2ViSmF2YVZh
bHVlOjpzZXRTaG9ydFZhbHVlKHNob3J0IHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9zaG9y
dFZhbHVlID0gdmFsdWU7Cit9CisKK2ludCBXZWJKYXZhVmFsdWU6OmludFZhbHVlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2ludFZhbHVlOworfQorCit2b2lkIFdlYkphdmFW
YWx1ZTo6c2V0SW50VmFsdWUoaW50IHZhbHVlKQoreworICAgIG1fcHJpdmF0ZS0+bV9pbnRWYWx1
ZSA9IHZhbHVlOworfQorCitsb25nIGxvbmcgV2ViSmF2YVZhbHVlOjpsb25nVmFsdWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fbG9uZ1ZhbHVlOworfQorCit2b2lkIFdlYkph
dmFWYWx1ZTo6c2V0TG9uZ1ZhbHVlKGxvbmcgbG9uZyB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUt
Pm1fbG9uZ1ZhbHVlID0gdmFsdWU7Cit9CisKK2Zsb2F0IFdlYkphdmFWYWx1ZTo6ZmxvYXRWYWx1
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9mbG9hdFZhbHVlOworfQorCit2
b2lkIFdlYkphdmFWYWx1ZTo6c2V0RmxvYXRWYWx1ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICBtX3By
aXZhdGUtPm1fZmxvYXRWYWx1ZSA9IHZhbHVlOworfQorCitkb3VibGUgV2ViSmF2YVZhbHVlOjpk
b3VibGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3VibGVWYWx1
ZTsKK30KKwordm9pZCBXZWJKYXZhVmFsdWU6OnNldERvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSkK
K3sKKyAgICBtX3ByaXZhdGUtPm1fZG91YmxlVmFsdWUgPSB2YWx1ZTsKK30KKworV2ViU3RyaW5n
IFdlYkphdmFWYWx1ZTo6c3RyaW5nVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fc3RyaW5nVmFsdWU7Cit9CisKK3ZvaWQgV2ViSmF2YVZhbHVlOjpzZXRTdHJpbmdWYWx1
ZShXZWJTdHJpbmcgdmFsdWUpCit7CisgICAgbV9wcml2YXRlLT5tX3N0cmluZ1ZhbHVlID0gdmFs
dWU7Cit9CisKK1dlYkphdmFWYWx1ZSYgV2ViSmF2YVZhbHVlOjpvcGVyYXRvcj0oY29uc3QgSmF2
YVZhbHVlJiB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IEphdmFWYWx1ZSh2YWx1
ZSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViSmF2YVZhbHVlOjpvcGVyYXRvciBKYXZh
VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiAqbV9wcml2YXRlLmdldCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAwY2ViZDEzMjlmNmQ2
YjA1MmUwZDM1YzRlZDMwMjUxOGZhMThmNTlhLi5lY2E0MTBlOWQ0Y2E2MjQ3ODg2Y2M3NzY3Mzlk
ZDJiZDA0MjUxOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCkBAIC0yNzEwLDUgKzI3MTAsMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzZXRHZXN0dXJl
UmVjb2duaXplcigpCiB9CiAjZW5kaWYKIAorV2ViSmF2YUJyaWRnZSogV2ViVmlld0ltcGw6Omph
dmFCcmlkZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyEgU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTkyOAorICAgIHJldHVybiAwOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCmluZGV4IGFlMzUyNWY2ZGY5OTBiZTJiOWIxYWM0ZTU4ZGQ4MTdhMThkYzc5YjQuLmFi
YzRhZTdiNzYzYjI4NTZhNmVkM2M0NjU1OWY1MmViMTY0ZWFjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMjA2LDYgKzIwNiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlQmFja2dy
b3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9t
Q29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKKyAgICB2aXJ0dWFsIFdlYkphdmFC
cmlkZ2UqIGphdmFCcmlkZ2UoKTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENsaWVudAogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>