<?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>90310</bug_id>
          
          <creation_ts>2012-06-29 14:21:55 -0700</creation_ts>
          <short_desc>IndexedDB: Enable IDBFactory.deleteDatabase() and webkitGetDatabaseNames() in Workers</short_desc>
          <delta_ts>2012-07-12 15:19:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90832</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>charles.wei</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660782</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-29 14:21:55 -0700</bug_when>
    <thetext>IndexedDB: Enable IDBFactory.deleteDatabase() and webkitGetDatabaseNames() in Workers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660783</commentid>
    <comment_count>1</comment_count>
      <attachid>150257</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-29 14:24:06 -0700</bug_when>
    <thetext>Created attachment 150257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660785</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-29 14:25:50 -0700</bug_when>
    <thetext>Seemed pretty straightforward, but dgrogan@ should take a look.

Note that this will collide with https://bugs.webkit.org/show_bug.cgi?id=88338 but the resolution should be pretty straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662003</commentid>
    <comment_count>3</comment_count>
      <attachid>150257</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-07-02 23:37:23 -0700</bug_when>
    <thetext>Comment on attachment 150257
Patch

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

I&apos;m fine with others completely the review (especially since I will be out for a while but I wanted to push this code change to reduce duplicate code).

&gt; Source/WebCore/Modules/indexeddb/IDBFactory.cpp:134
&gt; +#endif

I think a lot of this code would be simpler if the difference between the worker and the document were handled down in the backend as opposed to being exposed here.


Your call would look like this:
  RefPtr&lt;IDBVersionChangeRequest&gt; request = IDBVersionChangeRequest::create(context, IDBAny::createNull(), &quot;&quot;);
  m_backend-&gt;deleteDatabaseFromWorker(name, request, context, String());

with no ifdef workers.

Ditto for getDatabaseNamesFromWorker

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:184
&gt; +    WebSecurityOrigin origin(prpOrigin);

Continuing the idea of only having getDatabaseNames (and not getDatabaseNamesFromWorker)


void IDBFactoryBackendProxy::getDatabaseNames(PassRefPtr&lt;IDBCallbacks&gt; callbacks, ScriptExecutionContext* context, const String&amp; dataDir)
{
    WebSecurityOrigin origin(context-&gt;securityOrigin());
    if (!allowIndexedDB(context, &quot;Database Listing&quot;, origin, callbacks))
        return;
  
    WebFrameImpl* webFrame = getWebFrame(context);
    m_webIDBFactory-&gt;getDatabaseNames(new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir);
}


Then make allowIndexedDB and getWebFrame of the right thing for WorkerContext vs Document. All your ifdef&apos;s move to that one piece of code and a lot of your duplicate code collapses and gets removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662436</commentid>
    <comment_count>4</comment_count>
      <attachid>150659</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-03 12:31:59 -0700</bug_when>
    <thetext>Created attachment 150659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662438</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-03 12:36:55 -0700</bug_when>
    <thetext>Thanks for the push to simplify this, David!

(In reply to comment #3)
&gt; I think a lot of this code would be simpler if the difference between the worker and the document were handled down in the backend as opposed to being exposed here.

Done!

&gt; with no ifdef workers.

One #ifdef remains in IDBFactory.cpp to handle the early exit case if workers are disabled, but factored out into a single static helper function.
 
&gt; void IDBFactoryBackendProxy::getDatabaseNames(PassRefPtr&lt;IDBCallbacks&gt; callbacks, ScriptExecutionContext* context, const String&amp; dataDir)

Since both the proxy impl. and real backend impl. need to implement the interface, the methods do end up needing a SecurityOrigin parameter. This is redundant for the proxy since it can be gleaned from the context...

&gt;     WebSecurityOrigin origin(context-&gt;securityOrigin());

...but the context is null on the real backend and it needs the origin passed in. Otherwise, basically copy/pasta what you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664948</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-09 10:16:56 -0700</bug_when>
    <thetext>dgrogan@ - can you do an informal review? Sounds like levin@ may not be around for a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665136</commentid>
    <comment_count>7</comment_count>
      <attachid>150659</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-09 13:53:40 -0700</bug_when>
    <thetext>Comment on attachment 150659
Patch

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

LGTM

The re-org is nice.  Looks like you&apos;ll have to rebase since https://bugs.webkit.org/show_bug.cgi?id=88338 landed.

&gt; Source/WebCore/Modules/indexeddb/IDBFactory.cpp:83
&gt; +    ASSERT(context-&gt;isDocument() || context-&gt;isWorkerContext());

Is this line removable as it&apos;s in isContextValid?

&gt; Source/WebCore/Modules/indexeddb/IDBFactory.cpp:111
&gt; +    ASSERT(context-&gt;isDocument() || context-&gt;isWorkerContext());

Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665258</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-09 15:53:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 150659 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150659&amp;action=review
&gt; 
&gt; LGTM
&gt; 
&gt; The re-org is nice.  Looks like you&apos;ll have to rebase since https://bugs.webkit.org/show_bug.cgi?id=88338 landed.

Ugh - 88338 actually broke this. The method that is used to fetch the IDB path is not safe to call from a worker outside of the initial script evaluation - the data it references is cleared before the event loop is run.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBFactory.cpp:83
&gt; &gt; +    ASSERT(context-&gt;isDocument() || context-&gt;isWorkerContext());
&gt; 
&gt; Is this line removable as it&apos;s in isContextValid?

Correct, I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665278</commentid>
    <comment_count>9</comment_count>
      <attachid>151344</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-09 16:14:51 -0700</bug_when>
    <thetext>Created attachment 151344
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665279</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-09 16:16:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=151344) [details]
&gt; Patch

Latest patch is rebased, but has issues (see http://webkit.org/b/90832). The bit that is broken by that bug is avoided in this patch by an #if 0, but we can wait and let a fix for that one be created first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667969</commentid>
    <comment_count>11</comment_count>
      <attachid>151997</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 10:46:27 -0700</bug_when>
    <thetext>Created attachment 151997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667972</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 10:48:27 -0700</bug_when>
    <thetext>Rebased now that http://webkit.org/b/90832 has landed as http://trac.webkit.org/changeset/122463

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668294</commentid>
    <comment_count>13</comment_count>
      <attachid>151997</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 15:19:28 -0700</bug_when>
    <thetext>Comment on attachment 151997
Patch

Clearing flags on attachment: 151997

Committed r122515: &lt;http://trac.webkit.org/changeset/122515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668295</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 15:19:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150257</attachid>
            <date>2012-06-29 14:24:06 -0700</date>
            <delta_ts>2012-07-03 12:31:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90310-20120629142406.patch</filename>
            <type>text/plain</type>
            <size>25190</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY2NGFjNWQ0Yjc4YWJm
NDNhMDVjZGY1Y2Y5ZTgyMDdlMTA5ZWU1NC4uYzU0MDNlNDQ3NjNiOGNlY2EzOGM2MWFjMzY3ZjNh
YTliY2NiYjNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTI5ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFi
bGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVz
KCkgaW4gV29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgc2ltaWxhciBjb250ZXh0IHBsdW1iaW5nIGZvciBkZWxldGVEYXRhYmFz
ZSgpIGFuZCBnZXREYXRhYmFzZU5hbWVzKCkgYXMgb3BlbigpLgorCisgICAgICAgIFRlc3Q6IHN0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbAorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21wKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZUludGVybmFsKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFt
ZXNGcm9tV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9t
V29ya2VyKToKKyAgICAgICAgKElEQkZhY3RvcnlCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2VGcm9tV29ya2VyKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
OgorICAgICAgICAoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UpOgorCiAyMDEyLTA2LTI5ICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTIxNTIwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0ZWZh
N2Q4NzllNWRlYTZlZjZjMmJhMDllNDE1ZTMyNjgyMmQyZTA0Li44OTQ0ZDdjYWRkNjJjZjVjMDRi
ODAwNDU0MjVmMDg2NjYwYTVmNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA2LTI5ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFibGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgp
IGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkgaW4gV29ya2VycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0
YWJhc2VOYW1lc0Zyb21Xb3JrZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChX
ZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKToKKyAgICAgICAg
KFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGVsZXRlRGF0YWJhc2VGcm9tV29ya2Vy
KToKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURC
RmFjdG9yeUJhY2tlbmRQcm94eSk6CisKIDIwMTItMDYtMjkgIEFteSBPdXN0ZXJob3V0ICA8YW91
c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERlbGV0aW5nIHVudXNlZCBmdW5jdGlvbiBp
biBXZWJEZXZpY2VPcmllbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCBkM2RlOGY2ZmE1YjRlNzMzMzY0MGM2MzEzZDZkNGVm
ZjhlZTlkYjUzLi43ODBmOTJmMTExNjk4NGU4MTI2MzQ1YTNmYmQ3YmYyM2I2MjZjYzA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcApAQCAt
NjUsMTkgKzY1LDIzIEBAIElEQkZhY3Rvcnk6On5JREJGYWN0b3J5KCkKIAogUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVu
dC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1
bWVudCgpIHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKIAotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3Vt
ZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2VuZC0+Z2V0
RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1l
bnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAg
ICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgICAgIGlmICghZG9jdW1l
bnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgICAgICBtX2JhY2tlbmQtPmdl
dERhdGFiYXNlTmFtZXMocmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1l
bnQtPmZyYW1lKCksIFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfQor
I2lmIEVOQUJMRShXT1JLRVJTKQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBt
X2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXNGcm9tV29ya2VyKHJlcXVlc3QsIGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCksIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSwgU3Ry
aW5nKCkpOwogICAgIHJldHVybiByZXF1ZXN0OworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTkyLDkgKzk2LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5
OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKICAg
ICAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKICAgICAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgICAgICBtX2JhY2tlbmQt
Pm9wZW4obmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgZnJh
bWUsIFN0cmluZygpKTsKKyAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QuZ2V0
KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBTdHJpbmco
KSk7CiAgICAgICAgIHJldHVybiByZXF1ZXN0OwogICAgIH0KICNpZiBFTkFCTEUoV09SS0VSUykK
QEAgLTEwOCwyNCArMTExLDI3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6
b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTCiAKIFBhc3NSZWZQ
dHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+
cGFnZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVu
dCgpIHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKIAogICAgIGlmIChuYW1lLmlzTnVs
bCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9UWVBFX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVu
dCwgSURCQW55OjpjcmVhdGVOdWxsKCksICIiKTsKLSAgICBHcm91cFNldHRpbmdzKiBncm91cFNl
dHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAg
bV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRh
dGFiYXNlUGF0aCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Cisg
ICAgICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgICAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNl
KG5hbWUsIHJlcXVlc3QsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFt
ZSgpLCBTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH0KKyNpZiBFTkFC
TEUoV09SS0VSUykKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRl
TnVsbCgpLCAiIik7CisgICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZUZyb21Xb3JrZXIobmFt
ZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29ya2Vy
Q29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CisjZWxz
ZQorICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKIHNob3J0IElEQkZhY3Rvcnk6OmNtcChQYXNz
UmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTM2LDggKzE0Miw4IEBAIHNob3J0IElEQkZhY3Rvcnk6OmNtcChQYXNz
UmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwCiAg
ICAgaWYgKCFmaXJzdC0+aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgewogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+
KGZpcnN0LT5jb21wYXJlKHNlY29uZC5nZXQoKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApp
bmRleCA0NDdiYTc3NTEwMzVjOGU5N2U0NzAxN2NkN2Q3NmEwYzcyMTUyYWU2Li43YmNmNDIyNmI2
MjY4NmJiNTA4MDE5NThjZDQ5MTM2OGU3YjhmMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTgxLDcgKzgw
LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKQogICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92
ZShmaWxlSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5h
bWVzSW50ZXJuYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVj
dG9yeSkKIHsKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVu
QmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkgewpAQCAtOTksMTcgKzk4LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywK
ICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBvcGVu
SW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7
Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0
YURpcmVjdG9yeSkKLXsKLSAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0
eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZUludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKICAgICBj
b25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5h
bWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCAyMDU2NGE4
ODUyZTMyMTBhZDc2NjljYTdhNTQ5NGE4ZDY4ZDM0ZTIwLi41NDgxYzdlODVlNjU2Mjk0ZjMxMTQy
ODg0MzkxMzc2ZGNhMjkyZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaApAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEltcGxfaAogCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC01
NSwxOCArNTYsMjMgQEAgcHVibGljOgogICAgIHZvaWQgYWRkSURCQmFja2luZ1N0b3JlKGNvbnN0
IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSopOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2lu
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgeyBnZXREYXRhYmFzZU5hbWVzSW50ZXJu
YWwoY2FsbGJhY2tzLCBvcmlnaW4sIGRhdGFEaXIpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldERh
dGFiYXNlTmFtZXNGcm9tV29ya2VyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgZGF0YURpcikgeyBnZXREYXRhYmFzZU5hbWVzSW50ZXJuYWwoY2FsbGJhY2tzLCBv
cmlnaW4sIGRhdGFEaXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSB7IG9wZW5JbnRlcm5hbChuYW1lLCBj
YWxsYmFja3MsIG9yaWdpbiwgZGF0YURpcik7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21X
b3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKSB7IG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIG9yaWdpbiwgZGF0YURp
cik7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpIHsgZGVsZXRl
RGF0YWJhc2VJbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIG9yaWdpbiwgZGF0YURpcik7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2VGcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSB7
IGRlbGV0ZURhdGFiYXNlSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGRhdGFEaXIp
OyB9CiAKIHByb3RlY3RlZDoKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgZ2V0RGF0YWJhc2VOYW1lc0ludGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAg
ICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2
b2lkIGRlbGV0ZURhdGFiYXNlSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNl
QmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CmluZGV4IDE5YTFjOTc4NGMzMGJmN2FhODc1NTAwYWJiY2M4ZDQwOTA4ZmI1NWYuLjJlNjVmYThi
NmU5MjU5OGVmODBjYmYwOTViNzU0MGZmNTI4ZmNkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtNTQsMTAgKzU0LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RGF0YWJhc2VOYW1lc0Zyb21Xb3JrZXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
V29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworCiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2VGcm9tV29y
a2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAppbmRleCAxNDli
ZmUxMmEwZTM5NjczZjdiNDY1YWY2Yjk3ZDExMGYzZGNkNTY3Li5iZjFmMjM4MDFhNzc0NDFkYjg4
NmY2NmNkMzE0NTE4YzdhOGM3YzBlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtNzIsMjAgKzcyLDYgQEAgSURC
RmFjdG9yeUJhY2tlbmRQcm94eTo6fklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKQogewogfQogCi12
b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3Jp
Z2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKLXsKLSAgICBXZWJTZWN1
cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKLSAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
ID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIFdlYlZpZXdJbXBsKiB3ZWJW
aWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7Ci0KLSAgICBpZiAod2ViVmlldy0+cGVybWlzc2lv
bkNsaWVudCgpICYmICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERC
KHdlYkZyYW1lLCAiRGF0YWJhc2UgTGlzdGluZyIsIG9yaWdpbikpIHsKLSAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJt
aXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV93ZWJJREJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxs
YmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwotfQotCiBz
dGF0aWMgY29uc3QgY2hhciBhbGxvd0luZGV4ZWREQk1vZGVbXSA9ICJhbGxvd0luZGV4ZWREQk1v
ZGUiOwogCiBjbGFzcyBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiB7CkBAIC0x
ODAsNiArMTY2LDMzIEBAIGJvb2wgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJREJGcm9t
V29ya2VyVGhyZWFkKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRlCiAgICAgcmV0dXJuIGJyaWRn
ZS0+cmVzdWx0KCk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJh
c2VOYW1lc0Zyb21Xb3JrZXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBXb3JrZXJDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgV2Vi
U2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgaWYgKCFhbGxvd0lEQkZyb21X
b3JrZXJUaHJlYWQoY29udGV4dCwgIkRhdGFiYXNlIExpc3RpbmciLCBvcmlnaW4pKSB7CisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKDAsICJUaGUgdXNlciBk
ZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSAwOworICAgIG1fd2ViSURCRmFj
dG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3Mp
LCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKKyNlbmRpZgorfQorCit2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBv
cmlnaW4ocHJwT3JpZ2luKTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJ
bXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJh
bWUtPnZpZXdJbXBsKCk7CisKKyAgICBpZiAod2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpICYm
ICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERCKHdlYkZyYW1lLCAi
RGF0YWJhc2UgTGlzdGluZyIsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFj
Y2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93
ZWJJREJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNh
bGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOworfQorCiB2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwg
V29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogI2lmIEVO
QUJMRShXT1JLRVJTKQpAQCAtMTg4LDcgKzIwMSw4IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQ
cm94eTo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNh
CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKDAsICJUaGUg
dXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3dlYklEQkZhY3RvcnktPm9wZW4obmFtZSwgbmV3IFdl
YklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCAvKndlYkZyYW1lKi8wLCBkYXRh
RGlyKTsKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSAwOworICAgIG1fd2ViSURCRmFjdG9yeS0+
b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdl
YkZyYW1lLCBkYXRhRGlyKTsKICNlbmRpZgogfQogCkBAIC0yMDUsNiArMjE5LDE4IEBAIHZvaWQg
SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxi
YWNrcyogY2FsbGJhY2tzLCBQCiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBX
ZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIp
OwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlRnJvbVdv
cmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgV29ya2VyQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworI2lmIEVOQUJMRShXT1JLRVJTKQor
ICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIGlmICghYWxsb3dJ
REJGcm9tV29ya2VyVGhyZWFkKGNvbnRleHQsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBw
ZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IDA7CisgICAgbV93ZWJJREJGYWN0b3J5LT5k
ZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBv
cmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKKyNlbmRpZgorfQogdm9pZCBJREJGYWN0b3J5QmFj
a2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9y
aWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgV2ViU2Vj
dXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggYzA3ZGIzNTU2ZTA5MDA2
NmM3YjRjYjFlMWI5ZWRjYWZjNzA2Yzk2MC4uYjRmYmFmM2Q5ZWQ1OTIxYzVlMTgwOGFmOGU4MmI1
YTFjMjE4YWMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuaApAQCAtNDgsMTEgKzQ4LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXNGcm9tV29ya2VyKFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbj4sIFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3Jl
OjpJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2Vi
Q29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogICAgIHZpcnR1YWwgdm9pZCBv
cGVuRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQkNhbGxiYWNrcyos
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpXb3JrZXJDb250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJh
c2VGcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6
V29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAg
SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0Y2U4ZmY0YzQ5YmRmZGYzYzBjZjlj
YjA3MzM1NjlmMmQ4NWU4MTIuLjk5YzNiNDUyMDZjNTVhMjAwZjMzOTU4NGVhZGQ5NzJiYThhZDAy
YzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yOSAgSm9zaHVhIEJlbGwgIDxqc2Jl
bGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogRW5hYmxlIElEQkZhY3Rvcnku
ZGVsZXRlRGF0YWJhc2UoKSBhbmQgd2Via2l0R2V0RGF0YWJhc2VOYW1lcygpIGluIFdvcmtlcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzEwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vycy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvZmFjdG9yeS1iYXNp
Y3MuanM6CisgICAgICAgIChnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEpOgorICAgICAgICAob3Bl
blN1Y2Nlc3MpOgorICAgICAgICAoZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyKToKKyAgICAgICAg
KGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMyk6CisKIDIwMTItMDYtMjggIFZzZXZvbG9kIFZsYXNv
diAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVzb3Vy
Y2UgY29udGVudCBpcyBub3QgbG9hZGVkIGlmIFJlc291cmNlLnJlcXVlc3RDb250ZW50IG1ldGhv
ZCBpcyBjYWxsZWQgYmVmb3JlIG5ldHdvcmsgcmVxdWVzdCBpcyBmaW5pc2hlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNp
Y3Mtd29ya2Vycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM3ZDI5MTU2OGUwYTkxYmUxNDNk
ODA3MWIxNTY2ODFjNTY5YjUxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMzMgQEAKK1tXb3JrZXJdIFRlc3QgdGhlIGJhc2ljcyBvZiBJbmRleGVkREIncyBJREJGYWN0
b3J5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU3RhcnRpbmcgd29ya2VyOiBy
ZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMKK1tXb3JrZXJdIGluZGV4ZWREQiA9IHNlbGYuaW5k
ZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhlZERCIHx8IHNlbGYubW96SW5kZXhlZERCIHx8IHNl
bGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5kZXhlZERCOworW1dvcmtlcl0gCitQQVNTIFtXb3Jr
ZXJdIHR5cGVvZiBpbmRleGVkREIub3BlbiBpcyAiZnVuY3Rpb24iCitQQVNTIFtXb3JrZXJdIHR5
cGVvZiBpbmRleGVkREIuY21wIGlzICJmdW5jdGlvbiIKK1BBU1MgW1dvcmtlcl0gdHlwZW9mIGlu
ZGV4ZWREQi5kZWxldGVEYXRhYmFzZSBpcyAiZnVuY3Rpb24iCitQQVNTIFtXb3JrZXJdIHR5cGVv
ZiBpbmRleGVkREIud2Via2l0R2V0RGF0YWJhc2VOYW1lcyBpcyAiZnVuY3Rpb24iCitQQVNTIFtX
b3JrZXJdIHR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyBpcyAidW5kZWZpbmVkIgor
W1dvcmtlcl0gaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFtZXMoKQorW1dvcmtlcl0gZGF0
YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgW1dvcmtlcl0gZGF0YWJhc2VO
YW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxz
ZQorUEFTUyBbV29ya2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERP
RVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK1tXb3JrZXJdIGluZGV4ZWREQi5vcGVuKG5hbWUpCitb
V29ya2VyXSBldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkKK1tXb3JrZXJdIGluZGV4ZWREQi53
ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkKK1tXb3JrZXJdIGRhdGFiYXNlTmFtZXMgPSBldmVudC50
YXJnZXQucmVzdWx0CitQQVNTIFtXb3JrZXJdIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgdHJ1ZQorUEFTUyBbV29ya2VyXSBkYXRh
YmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFs
c2UKK1tXb3JrZXJdIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1iYXNpY3MnKQorW1dvcmtlcl0gaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFt
ZXMoKQorW1dvcmtlcl0gZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1Mg
W1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1iYXNpY3MnKSBpcyBmYWxzZQorUEFTUyBbV29ya2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5z
KCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK1tXb3JrZXJdIGluZGV4
ZWREQi5kZWxldGVEYXRhYmFzZSgnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vycy5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vy
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc3MTY5ZmViM2VkZTc2ZWRmYmU5ZjVhZTNmNDI5OGZkZTNiMTA1
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0
b3J5LWJhc2ljcy13b3JrZXJzLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+c3RhcnRXb3JrZXIoJ3Jlc291cmNlcy9mYWN0b3J5LWJhc2lj
cy5qcycpOzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3Mu
anMKaW5kZXggMTg4Yzk3MDQ0YzI4YWVkOWFmOWJmNDA0OGE3NGRkNWVlNTA1NzgzNS4uN2EyYzMz
ZTkxMjYwNWVkMzNmZDA0NjdlNTkxNWM0Y2Q2NTE0NTI4NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9mYWN0b3J5LWJhc2ljcy5qcwpA
QCAtMjUsOCArMjUsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1
Y2Nlc3MxKCkKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMShldnQpCiB7CisgICAg
ZXZlbnQgPSBldnQ7CiAgICAgdmFyIGRhdGFiYXNlTmFtZXM7CiAgICAgZXZhbEFuZExvZygiZGF0
YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKICAgICBzaG91bGRCZUZhbHNlKCJk
YXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwpAQCAtMzcsMTYgKzM4LDE4
IEBAIGZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMSgpCiAgICAgcmVxdWVzdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAKLWZ1bmN0aW9uIG9wZW5TdWNjZXNz
KCkKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKGV2dCkKIHsKKyAgICBldmVudCA9IGV2dDsKICAgICBl
dmFsQW5kTG9nKCJldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkiKTsKICAgICByZXF1ZXN0ID0g
ZXZhbEFuZExvZygiaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFtZXMoKSIpOwogICAgIHJl
cXVlc3Qub25zdWNjZXNzID0gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyOwogICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCi1mdW5jdGlvbiBnZXREYXRh
YmFzZU5hbWVzU3VjY2VzczIoKQorZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyKGV2
dCkKIHsKKyAgICBldmVudCA9IGV2dDsKICAgICB2YXIgZGF0YWJhc2VOYW1lczsKICAgICBldmFs
QW5kTG9nKCJkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOwogICAgIHNob3Vs
ZEJlVHJ1ZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsKQEAgLTY0
LDggKzY3LDkgQEAgZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2VTdWNjZXNzKCkKICAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gZ2V0RGF0
YWJhc2VOYW1lc1N1Y2Nlc3MzKCkKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMyhl
dnQpCiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgdmFyIGRhdGFiYXNlTmFtZXM7CiAgICAgZXZh
bEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKICAgICBzaG91
bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150659</attachid>
            <date>2012-07-03 12:31:59 -0700</date>
            <delta_ts>2012-07-09 16:14:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90310-20120703123158.patch</filename>
            <type>text/plain</type>
            <size>32919</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzZmQ0NmJmMDk3MWFi
N2M4MDEwYjFkNDllYmZhNWEwMTMxZTFlNC4uYTk3NGVjMTc5ZWM2ZDQxZDBiZWRjMjkxYjlhMzEw
Zjc1MmU4MjRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA3LTAzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFi
bGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVz
KCkgaW4gV29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTaW1wbGlmeSBEb2N1bWVudCB2cy4gV29ya2VyIGxvZ2ljIGZvciBJREJGYWN0b3J5Ojpv
cGVuKCkgYW5kIGhvb2sgdXAgdGhlIAorICAgICAgICBvdGhlciB0d28gSURCRmFjdG9yeSBtZXRo
b2RzIGZvciB1c2UgYnkgd29ya2VycyBhcyB3ZWxsLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbAorCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NvbnRleHRW
YWxpZCk6IEhlbHBlciBmdW5jdGlvbiBjb25zb2xpZGF0aW5nIGNoZWNrcyB0aGF0IGNvbnRleHQg
aXMgdXNhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1l
cyk6IFNpbXBsaWZ5IC0ganVzdCBwYXNzIGNvbnRleHQgdGhyb3VnaCB0byBiYWNrIGVuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6Om9wZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpjbXApOiBXaGl0ZXNwYWNlLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6IE9ic29sZXRlIG9wZW5Gcm9tV29ya2VyKCkg
cmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0
YWJhc2VOYW1lcyk6IFNpZ25hdHVyZSB1cGRhdGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6IFNpZ25hdHVyZSB1cGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKTogU2lnbmF0dXJlIHVw
ZGF0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
Lmg6CisgICAgICAgIChJREJGYWN0b3J5QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6IEludGVyZmFjZSBtZXRob2Rz
IG5vdyB0YWtlIGJvdGggU2VjdXJpdHlPcmlnaW4KKyAgICAgICAgYW5kIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGJ1dCBub3QgRnJhbWUuIEluIHRoZSBwcm94eSwgU2VjdXJpdHlPcmlnaW4gaXMg
cmVkdW5kYW50IChjYW4gYmUgCisgICAgICAgIGFjY2Vzc2VkIGZyb20gY29udGV4dCkgYnV0IG9u
IHRoZSByZWFsIGJhY2sgZW5kIHRoZSBjb250ZXh0IGlzIG51bGwgKGFzIEZyYW1lIHdhcyBwcmV2
aW91c2x5KS4KKyAgICAgICAgKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERh
dGFiYXNlTmFtZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YSk6CisKIDIwMTItMDctMDIgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXh0dXJlTWFwcGVyXSBUaGUg
VGV4dHVyZU1hcHBlciBzaG91bGQgc3VwcG9ydCBlZGdlLWRpc3RhbmNlIGFudGktYW50aWFsaWFz
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1NGRhNWE3OTUyNjY0NTg3MGE2ODZl
MDM5N2YyNDQwODE4MTlmYmEuLjVhOThlY2Y1NzViOTM4NzYzMWU5YTgwZGE2YTc5MzllMWI1YmZj
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDct
MDMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVk
REI6IEVuYWJsZSBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlKCkgYW5kIHdlYmtpdEdldERhdGFi
YXNlTmFtZXMoKSBpbiBXb3JrZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDMxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjphbGxvd0luZGV4ZWREQik6IENvbnNvbGlk
YXRlcyB1c2VyLXByb21wdGluZyBsb2dpYy4KKyAgICAgICAgKFdlYktpdDo6Z2V0V2ViRnJhbWUp
OiBIZWxwZXIgdG8gZGlnIG91dCBmcmFtZSBmcm9tIERvY3VtZW50LCBvciBudWxsIGZvciBXb3Jr
ZXIuCisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNl
TmFtZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5oOiBVcGRhdGUgbWV0aG9kIHNpZ25hdHVyZXMgdG8gbWF0Y2ggaW50ZXJmYWNlLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChJREJGYWN0b3J5QmFja2VuZFByb3h5KToKKwogMjAxMi0w
Ny0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCBkM2RlOGY2ZmE1YjRlNzMzMzY0MGM2MzEz
ZDZkNGVmZjhlZTlkYjUzLi4zZjBjZDFmYmRjMzI2Yjc3NjRhZWQzYzk1NGRkOTkzMzQ5ZGViNmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNw
cApAQCAtNjMsMjAgKzYzLDMwIEBAIElEQkZhY3Rvcnk6On5JREJGYWN0b3J5KCkKIHsKIH0KIAot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitzdGF0aWMgYm9vbCBpc0NvbnRleHRWYWxpZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIGlmICghY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtl
cnMuCi0gICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkg
fHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIGlmIChjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1l
bnQtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisjaWYgIUVOQUJM
RShXT1JLRVJTKQorICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgIGlmICgh
ZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCitQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRl
eHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKworICAgIGlmICghaXNDb250ZXh0VmFsaWQoY29udGV4
dCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsK
LSAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3Jv
dXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJl
cXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3Jv
dXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRl
KHRoaXMpLCAwKTsKKyAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgY29udGV4dCwgU3RyaW5nKCkpOwogICAgIHJldHVybiBy
ZXF1ZXN0OwogfQogCkBAIC04OCw0MyArOTgsMjcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX1RZUEVfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OwotICAgICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOwotICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgICAgIG1fYmFj
a2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LCBmcmFtZSwgU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gcmVxdWVzdDsKLSAgICB9Ci0jaWYg
RU5BQkxFKFdPUktFUlMpCisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChjb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9iYWNr
ZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygp
KTsKKyAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKSwgY29udGV4dCwgU3RyaW5nKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwotI2Vsc2UK
LSAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRo
aXMgd29yayB3aXRoIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAg
aWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSk7CiAKICAgICBpZiAobmFtZS5pc051bGwoKSkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KKyAgICBpZiAoIWlzQ29udGV4dFZhbGlkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4g
MDsKIAotICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgp
LCAiIik7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdl
KCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJh
c2UobmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5m
cmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAgUmVm
UHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIG1f
YmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKSwgY29udGV4dCwgU3RyaW5nKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBA
IC0xMzYsOCArMTMwLDggQEAgc2hvcnQgSURCRmFjdG9yeTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5
PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXAKICAgICBpZiAoIWZpcnN0
LT5pc1ZhbGlkKCkgfHwgIXNlY29uZC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKLSAgICB9ICAgIAot
ICAgIAorICAgIH0KKwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBh
cmUoc2Vjb25kLmdldCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ0N2JhNzc1
MTAzNWM4ZTk3ZTQ3MDE3Y2Q3ZDc2YTBjNzIxNTJhZTYuLjNjY2UwYzM3NTUwOTI3YjcxNDdkOTRh
YzhjNGM0NzhhNTE4NjEyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMzUsNyArMzUsNiBA
QAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtODEsNyArODAsNyBAQCB2b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYg
ZmlsZUlkZW50aWZpZXIpCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlm
aWVyKTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXJlY3RvcnkpCiB7CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
b3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CiAgICAgaWYg
KCFiYWNraW5nU3RvcmUpIHsKQEAgLTk5LDE3ICs5OCw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwog
fQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAg
b3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rv
cnkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2Vj
dXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9y
aWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBz
ZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0
YURpcmVjdG9yeSkKIHsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1
dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIApAQCAtMTYw
LDcgKzE0OSw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
cHJwU2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3ZvaWQgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2Vj
dXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXJlY3RvcnkpCiB7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9
IHBycFNlY3VyaXR5T3JpZ2luOwogICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0g
Y29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuaAppbmRleCAyMDU2NGE4ODUyZTMyMTBhZDc2NjljYTdhNTQ5NGE4ZDY4ZDM0ZTIw
Li5jYTFkMDUyODJhOGM1ZWRmNzY2ZDVlNTU1MDhmYWUwYTljMDQ4YzY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEltcGxfaAog
CiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCkBAIC01NSwxOSArNTYsMTUgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkJhY2tp
bmdTdG9yZSopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3Qg
U3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VO
YW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lk
IG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9y
ZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAog
cHJpdmF0ZToKLSAgICB2b2lkIG9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNlQmFja2Vu
ZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5k
ZXggMTlhMWM5Nzg0YzMwYmY3YWE4NzU1MDBhYmJjYzhkNDA5MDhmYjU1Zi4uNDRmNWM3ODZlZjIx
ZWE0NzE5ZjYzNjk0MjlmNzY3MzkwMDQwOTI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CkBAIC01MywxMSArNTMsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IDYxMDdlYjk4MmUwMWM2MDZkZmNhZjRiMmViMzFkMmI4
MmRmYTFhZjguLjBmZGFjYTZlMjllMzg0OGNmZTcxNzIwYzI5OTUyY2I3MzQxZTg4NTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcApAQCAtMTg2LDcgKzE4Niw3IEBAIHByaXZhdGU6CiBjbGFzcyBFeGVjdXRhYmxlV2l0aERh
dGFiYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8RXhlY3V0YWJsZVdpdGhEYXRhYmFzZT4gewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoKSB7IH07Ci0gICAgdm9p
ZCBzdGFydChJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIFNlY3VyaXR5T3JpZ2luKiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CisgICAgdm9pZCBzdGFydChJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZSosIFNlY3VyaXR5T3JpZ2luKiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0gMDsKIH07CiAK
QEAgLTIzMywxMCArMjMzLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVXaXRo
RGF0YWJhc2U+IG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZTsKIH07CiAKLXZvaWQgRXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGlkYkZhY3Rv
cnksIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSkKK3ZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQo
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpCiB7CiAgICAgUmVmUHRyPE9wZW5EYXRhYmFzZUNhbGxiYWNrPiBj
YWxsYmFjayA9IE9wZW5EYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUodGhpcyk7Ci0gICAgaWRiRmFj
dG9yeS0+b3BlbihkYXRhYmFzZU5hbWUsIGNhbGxiYWNrLmdldCgpLCBzZWN1cml0eU9yaWdpbiwg
ZnJhbWUsIFN0cmluZygpKTsKKyAgICBpZGJGYWN0b3J5LT5vcGVuKGRhdGFiYXNlTmFtZSwgY2Fs
bGJhY2suZ2V0KCksIHNlY3VyaXR5T3JpZ2luLCBjb250ZXh0LCBTdHJpbmcoKSk7CiB9CiAKIHN0
YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b25Gb3JEYXRhYmFzZShJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGlkYkRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKQEAgLTczMiw3ICs3MzIsNyBAQCB2b2lkIElu
c3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKEVycm9y
U3RyaW5nKiBlcnJvclN0cgogCiAgICAgUmVmUHRyPEdldERhdGFiYXNlTmFtZXNDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s6OmNyZWF0ZShtX2Zyb250ZW5kUHJv
dmlkZXIuZ2V0KCksIHJlcXVlc3RJZCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCkpOwogICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFn
ZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBpZGJGYWN0b3J5LT5nZXREYXRhYmFz
ZU5hbWVzKGNhbGxiYWNrLmdldCgpLCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1l
bnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAg
ICBpZGJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKGNhbGxiYWNrLmdldCgpLCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQsIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFi
YXNlUGF0aCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERh
dGFiYXNlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKQEAgLTc0NSw3ICs3NDUs
NyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgcmVxdQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQ
dHI8RGF0YWJhc2VMb2FkZXJDYWxsYmFjaz4gZGF0YWJhc2VMb2FkZXJDYWxsYmFjayA9IERhdGFi
YXNlTG9hZGVyQ2FsbGJhY2s6OmNyZWF0ZShtX2Zyb250ZW5kUHJvdmlkZXIuZ2V0KCksIHJlcXVl
c3RJZCk7Ci0gICAgZGF0YWJhc2VMb2FkZXJDYWxsYmFjay0+c3RhcnQoaWRiRmFjdG9yeSwgZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBkYXRhYmFzZU5hbWUp
OworICAgIGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudCwgZGF0YWJhc2VOYW1lKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBpbnQgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIGtleVJhbmdlKQpAQCAtNzY5LDcgKzc2OSw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
aW50IHJlcXVlc3RJCiAgICAgfQogCiAgICAgUmVmUHRyPERhdGFMb2FkZXJDYWxsYmFjaz4gZGF0
YUxvYWRlckNhbGxiYWNrID0gRGF0YUxvYWRlckNhbGxiYWNrOjpjcmVhdGUobV9mcm9udGVuZFBy
b3ZpZGVyLCByZXF1ZXN0SWQsIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4
TmFtZSwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUpOwotICAgIGRhdGFMb2FkZXJD
YWxsYmFjay0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRv
Y3VtZW50LT5mcmFtZSgpLCBkYXRhYmFzZU5hbWUpOworICAgIGRhdGFMb2FkZXJDYWxsYmFjay0+
c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LCBk
YXRhYmFzZU5hbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4
IDE0OWJmZTEyYTBlMzk2NzNmN2I0NjVhZjZiOTdkMTEwZjNkY2Q1NjcuLjY4ZGU5NmI3MmNkNmVi
M2EwZWY2M2U2NTQ2MTI4YWFjZDQ3OWUzMTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2Vu
ZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrc0ltcGwuaCIKQEAg
LTcyLDIwICs3Myw2IEBAIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6On5JREJGYWN0b3J5QmFja2Vu
ZFByb3h5KCkKIHsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFz
ZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpCi17Ci0gICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7Ci0gICAgV2Vi
RnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKLSAg
ICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOwotCi0gICAgaWYg
KHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVu
dCgpLT5hbGxvd0luZGV4ZWREQih3ZWJGcmFtZSwgIkRhdGFiYXNlIExpc3RpbmciLCBvcmlnaW4p
KSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKDAsICJU
aGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2ViSURCRmFjdG9yeS0+Z2V0RGF0YWJhc2VO
YW1lcyhuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1l
LCBkYXRhRGlyKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgYWxsb3dJbmRleGVkREJNb2RlW10g
PSAiYWxsb3dJbmRleGVkREJNb2RlIjsKIAogY2xhc3MgQWxsb3dJbmRleGVkREJNYWluVGhyZWFk
QnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93SW5kZXhlZERCTWFpblRo
cmVhZEJyaWRnZT4gewpAQCAtMTYxLDYwICsxNDgsNzkgQEAgcHJpdmF0ZToKICAgICBXZWJXb3Jr
ZXJCYXNlKiBtX3dlYldvcmtlckJhc2U7CiB9OwogCi1ib29sIElEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OmFsbG93SURCRnJvbVdvcmtlclRocmVhZChXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikKK2Jvb2wgSURC
RmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJbmRleGVkREIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYg
b3JpZ2luLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogeworICAgIGJvb2wg
YWxsb3dlZDsKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7
CisgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFt
ZShkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2Vi
RnJhbWUtPnZpZXdJbXBsKCk7CisgICAgICAgIGFsbG93ZWQgPSB3ZWJWaWV3LT5wZXJtaXNzaW9u
Q2xpZW50KCkgJiYgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0luZGV4ZWREQih3
ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKTsKKyAgICB9IGVsc2UgeworICAgICAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQp
OworICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXJCYXNlID0gc3RhdGljX2Nhc3Q8V2Vi
V29ya2VyQmFzZSo+KCZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHko
KSk7CisgICAgICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+cnVuTG9vcCgpOworCisgICAgICAgIFN0cmluZyBtb2RlID0gYWxsb3dJbmRleGVkREJN
b2RlOworICAgICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVu
aXF1ZUlkKCkpKTsKKyAgICAgICAgUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRn
ZT4gYnJpZGdlID0gQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUod2ViV29y
a2VyQmFzZSwgbW9kZSwgbmFtZSk7CisKKyAgICAgICAgLy8gRWl0aGVyIHRoZSBicmlkZ2UgcmV0
dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAgICAgICAgaWYgKHJ1bkxvb3Au
cnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQp
IHsKKyAgICAgICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7CisgICAgICAgICAgICBhbGxvd2VkID0g
ZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYWxsb3dlZCA9IGJyaWRnZS0+cmVz
dWx0KCk7CisgICAgfQogCi0gICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyQmFzZSA9IHN0YXRp
Y19jYXN0PFdlYldvcmtlckJhc2UqPigmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxv
YWRlclByb3h5KCkpOwotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJDb250ZXh0
LT50aHJlYWQoKS0+cnVuTG9vcCgpOworICAgIGlmICghYWxsb3dlZCkKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRh
YmFzZS4iKSk7CiAKLSAgICBTdHJpbmcgbW9kZSA9IGFsbG93SW5kZXhlZERCTW9kZTsKLSAgICBt
b2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKLSAg
ICBSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UgPSBBbGxvd0lu
ZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSh3ZWJXb3JrZXJCYXNlLCBtb2RlLCBuYW1l
KTsKKyAgICByZXR1cm4gYWxsb3dlZDsKK30KIAotICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJl
dHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQuCi0gICAgaWYgKHJ1bkxvb3AucnVu
SW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsK
LSAgICAgICAgYnJpZGdlLT5jYW5jZWwoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworc3RhdGlj
IFdlYkZyYW1lSW1wbCogZ2V0V2ViRnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlzV29y
a2VyQ29udGV4dCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Cisg
ICAgICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7
CiAgICAgfQotCi0gICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7CisgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gcHJwT3JpZ2luLCBXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgZGF0YURpcikKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBXZWJTZWN1
cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKLSAgICBpZiAoIWFsbG93SURCRnJvbVdvcmtl
clRocmVhZChjb250ZXh0LCBuYW1lLCBvcmlnaW4pKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihXZWJJREJEYXRhYmFzZUVycm9yKDAsICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0
byBhY2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MocHJwQ2FsbGJhY2tzKTsKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4oc2VjdXJp
dHlPcmlnaW4pOworICAgIGlmICghYWxsb3dJbmRleGVkREIoY29udGV4dCwgIkRhdGFiYXNlIExp
c3RpbmciLCBvcmlnaW4sIGNhbGxiYWNrcykpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksIG9yaWdpbiwgLyp3ZWJGcmFtZSovMCwgZGF0YURpcik7Ci0jZW5kaWYKKworICAgIFdl
YkZyYW1lSW1wbCogd2ViRnJhbWUgPSBnZXRXZWJGcmFtZShjb250ZXh0KTsKKyAgICBtX3dlYklE
QkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewotICAgIFdl
YlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwotICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7Ci0gICAgV2ViVmlld0ltcGwq
IHdlYlZpZXcgPSB3ZWJGcmFtZS0+dmlld0ltcGwoKTsKLSAgICBpZiAod2ViVmlldy0+cGVybWlz
c2lvbkNsaWVudCgpICYmICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhl
ZERCKHdlYkZyYW1lLCBuYW1lLCBvcmlnaW4pKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihXZWJJREJEYXRhYmFzZUVycm9yKDAsICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBh
Y2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MocHJwQ2FsbGJhY2tzKTsKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4oc2VjdXJpdHlP
cmlnaW4pOworICAgIGlmICghYWxsb3dJbmRleGVkREIoY29udGV4dCwgbmFtZSwgb3JpZ2luLCBj
YWxsYmFja3MpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCisgICAgV2ViRnJhbWVJbXBsKiB3
ZWJGcmFtZSA9IGdldFdlYkZyYW1lKGNvbnRleHQpOwogICAgIG1fd2ViSURCRmFjdG9yeS0+b3Bl
bihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZy
YW1lLCBkYXRhRGlyKTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGF0YURpcikK
IHsKLSAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKLSAgICBXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIFdl
YlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7Ci0gICAgaWYgKHdlYlZp
ZXctPnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5h
bGxvd0luZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgewotICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1p
c3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKHBycENhbGxiYWNrcyk7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2lu
KHNlY3VyaXR5T3JpZ2luKTsKKyAgICBpZiAoIWFsbG93SW5kZXhlZERCKGNvbnRleHQsIG5hbWUs
IG9yaWdpbiwgY2FsbGJhY2tzKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAorICAgIFdlYkZy
YW1lSW1wbCogd2ViRnJhbWUgPSBnZXRXZWJGcmFtZShjb250ZXh0KTsKICAgICBtX3dlYklEQkZh
Y3RvcnktPmRlbGV0ZURhdGFiYXNlKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggYzA3ZGIz
NTU2ZTA5MDA2NmM3YjRjYjFlMWI5ZWRjYWZjNzA2Yzk2MC4uMjJhNmY1MmE4Njk4MTZjODA1NjY4
ZDY4NGQwYTdiZmZmYzI2YWU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtMzEsMTAgKzMxLDExIEBACiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgogI2lu
Y2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIFdvcmtlckNvbnRleHQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
fQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ3LDE2ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNy
ZWF0ZSgpOwogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PiwgV2ViQ29yZTo6V29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2
b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsK
IAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZFByb3h5KCk7Ci0gICAgYm9vbCBhbGxv
d0lEQkZyb21Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6V29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mKTsKKyAgICBib29sIGFsbG93SW5kZXhl
ZERCKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+KTsKIAogICAgIC8vIFdlIGRvbid0IG93biB0aGlzIHBvaW50ZXIgKHVubGlrZSBhbGwgdGhl
IG90aGVyIHByb3h5IGNsYXNzZXMgd2hpY2ggZG8pLgogICAgIFdlYklEQkZhY3RvcnkqIG1fd2Vi
SURCRmFjdG9yeTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCA3YjkxZGNkZmQ4MTY0MzA0YmM2NTA4MjFkNjk3NzhmYmNiNmYy
YzljLi5mMjg4NTg0OTk2Zjg2N2Q5MTE5OGYwZGZkYjZkZDBiYzQ0ODViMTE3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTItMDctMDMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBJbmRleGVkREI6IEVuYWJsZSBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNl
KCkgYW5kIHdlYmtpdEdldERhdGFiYXNlTmFtZXMoKSBpbiBXb3JrZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDMxMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1iYXNpY3Mtd29ya2Vycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzOiBBbGxvdyB1
c2UgYnkgV29ya2VyIGFzIHdlbGwgYXMgV2luZG93LgorICAgICAgICAoZ2V0RGF0YWJhc2VOYW1l
c1N1Y2Nlc3MxKToKKyAgICAgICAgKG9wZW5TdWNjZXNzKToKKyAgICAgICAgKGdldERhdGFiYXNl
TmFtZXNTdWNjZXNzMik6CisgICAgICAgIChnZXREYXRhYmFzZU5hbWVzU3VjY2VzczMpOgorCiAy
MDEyLTA3LTAyICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTGF5b3V0IFRlc3QgaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXJlY2VpdmUtcmVzcG9u
c2UtZXZlbnQuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjUzN2QyOTE1NjhlMGE5MWJlMTQzZDgwNzFiMTU2NjgxYzU2OWI1MTEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJh
c2ljcy13b3JrZXJzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMzIEBACitbV29ya2VyXSBUZXN0
IHRoZSBiYXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFjdG9yeS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1N0YXJ0aW5nIHdvcmtlcjogcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNz
LmpzCitbV29ya2VyXSBpbmRleGVkREIgPSBzZWxmLmluZGV4ZWREQiB8fCBzZWxmLndlYmtpdElu
ZGV4ZWREQiB8fCBzZWxmLm1vekluZGV4ZWREQiB8fCBzZWxmLm1zSW5kZXhlZERCIHx8IHNlbGYu
T0luZGV4ZWREQjsKK1tXb3JrZXJdIAorUEFTUyBbV29ya2VyXSB0eXBlb2YgaW5kZXhlZERCLm9w
ZW4gaXMgImZ1bmN0aW9uIgorUEFTUyBbV29ya2VyXSB0eXBlb2YgaW5kZXhlZERCLmNtcCBpcyAi
ZnVuY3Rpb24iCitQQVNTIFtXb3JrZXJdIHR5cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2Ug
aXMgImZ1bmN0aW9uIgorUEFTUyBbV29ya2VyXSB0eXBlb2YgaW5kZXhlZERCLndlYmtpdEdldERh
dGFiYXNlTmFtZXMgaXMgImZ1bmN0aW9uIgorUEFTUyBbV29ya2VyXSB0eXBlb2YgaW5kZXhlZERC
LmdldERhdGFiYXNlTmFtZXMgaXMgInVuZGVmaW5lZCIKK1tXb3JrZXJdIGluZGV4ZWREQi53ZWJr
aXRHZXREYXRhYmFzZU5hbWVzKCkKK1tXb3JrZXJdIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJn
ZXQucmVzdWx0CitQQVNTIFtXb3JrZXJdIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UKK1BBU1MgW1dvcmtlcl0gZGF0YWJh
c2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNl
CitbV29ya2VyXSBpbmRleGVkREIub3BlbihuYW1lKQorW1dvcmtlcl0gZXZlbnQudGFyZ2V0LnJl
c3VsdC5jbG9zZSgpCitbV29ya2VyXSBpbmRleGVkREIud2Via2l0R2V0RGF0YWJhc2VOYW1lcygp
CitbV29ya2VyXSBkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyBbV29y
a2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJh
c2ljcycpIGlzIHRydWUKK1BBU1MgW1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFU
QUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitbV29ya2VyXSBpbmRleGVkREIu
ZGVsZXRlRGF0YWJhc2UoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykKK1tXb3Jr
ZXJdIGluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkKK1tXb3JrZXJdIGRhdGFiYXNl
TmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIFtXb3JrZXJdIGRhdGFiYXNlTmFtZXMu
Y29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UKK1BB
U1MgW1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5P
VCBFWElTVCcpIGlzIGZhbHNlCitbV29ya2VyXSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ0RB
VEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzE2
OWZlYjNlZGU3NmVkZmJlOWY1YWUzZjQyOThmZGUzYjEwNTBiCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vycy5odG1s
CkBAIC0wLDAgKzEsMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PnN0
YXJ0V29ya2VyKCdyZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMnKTs8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzCmluZGV4IDE4OGM5NzA0NGMyOGFl
ZDlhZjliZjQwNDhhNzRkZDVlZTUwNTc4MzUuLjdhMmMzM2U5MTI2MDVlZDMzZmQwNDY3ZTU5MTVj
NGNkNjUxNDUyODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jl
c291cmNlcy9mYWN0b3J5LWJhc2ljcy5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMKQEAgLTI1LDggKzI1LDkgQEAgZnVuY3Rp
b24gdGVzdCgpCiAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CiB9CiAKLWZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMSgpCitmdW5jdGlvbiBnZXRE
YXRhYmFzZU5hbWVzU3VjY2VzczEoZXZ0KQogeworICAgIGV2ZW50ID0gZXZ0OwogICAgIHZhciBk
YXRhYmFzZU5hbWVzOwogICAgIGV2YWxBbmRMb2coImRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJn
ZXQucmVzdWx0Iik7CiAgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygn
IiArIG5hbWUgKyAiJykiKTsKQEAgLTM3LDE2ICszOCwxOCBAQCBmdW5jdGlvbiBnZXREYXRhYmFz
ZU5hbWVzU3VjY2VzczEoKQogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOwogfQogCi1mdW5jdGlvbiBvcGVuU3VjY2VzcygpCitmdW5jdGlvbiBvcGVuU3VjY2Vz
cyhldnQpCiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgZXZhbEFuZExvZygiZXZlbnQudGFyZ2V0
LnJlc3VsdC5jbG9zZSgpIik7CiAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi53
ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldERh
dGFiYXNlTmFtZXNTdWNjZXNzMjsKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyKCkKK2Z1
bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMihldnQpCiB7CisgICAgZXZlbnQgPSBldnQ7
CiAgICAgdmFyIGRhdGFiYXNlTmFtZXM7CiAgICAgZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9
IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKICAgICBzaG91bGRCZVRydWUoImRhdGFiYXNlTmFtZXMu
Y29udGFpbnMoJyIgKyBuYW1lICsgIicpIik7CkBAIC02NCw4ICs2Nyw5IEBAIGZ1bmN0aW9uIGRl
bGV0ZURhdGFiYXNlU3VjY2VzcygpCiAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7CiB9CiAKLWZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMygpCitm
dW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczMoZXZ0KQogeworICAgIGV2ZW50ID0gZXZ0
OwogICAgIHZhciBkYXRhYmFzZU5hbWVzOwogICAgIGV2YWxBbmRMb2coImRhdGFiYXNlTmFtZXMg
PSBldmVudC50YXJnZXQucmVzdWx0Iik7CiAgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1l
cy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151344</attachid>
            <date>2012-07-09 16:14:51 -0700</date>
            <delta_ts>2012-07-12 10:46:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90310-20120709161451.patch</filename>
            <type>text/plain</type>
            <size>33795</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2NGUwNTRhYmU5NGI4
Nzc2MDhmYjAzZTdkOTkyZTYyMjU4MGJhZi4uNWVmYWIyOGRmOTBmMDQwMGEyN2JhMGJiODdjMmY2
Y2YxNWIwMjU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA3LTAzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFi
bGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVz
KCkgaW4gV29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTaW1wbGlmeSBEb2N1bWVudCB2cy4gV29ya2VyIGxvZ2ljIGZvciBJREJGYWN0b3J5Ojpv
cGVuKCkgYW5kIGhvb2sgdXAgdGhlIAorICAgICAgICBvdGhlciB0d28gSURCRmFjdG9yeSBtZXRo
b2RzIGZvciB1c2UgYnkgd29ya2VycyBhcyB3ZWxsLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRtbAorCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NvbnRleHRW
YWxpZCk6IEhlbHBlciBmdW5jdGlvbiBjb25zb2xpZGF0aW5nIGNoZWNrcyB0aGF0IGNvbnRleHQg
aXMgdXNhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1l
cyk6IFNpbXBsaWZ5IC0ganVzdCBwYXNzIGNvbnRleHQgdGhyb3VnaCB0byBiYWNrIGVuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6Om9wZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpjbXApOiBXaGl0ZXNwYWNlLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6IE9ic29sZXRlIG9wZW5Gcm9tV29ya2VyKCkg
cmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0
YWJhc2VOYW1lcyk6IFNpZ25hdHVyZSB1cGRhdGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6IFNpZ25hdHVyZSB1cGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKTogU2lnbmF0dXJlIHVw
ZGF0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
Lmg6CisgICAgICAgIChJREJGYWN0b3J5QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6IEludGVyZmFjZSBtZXRob2Rz
IG5vdyB0YWtlIGJvdGggU2VjdXJpdHlPcmlnaW4KKyAgICAgICAgYW5kIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGJ1dCBub3QgRnJhbWUuIEluIHRoZSBwcm94eSwgU2VjdXJpdHlPcmlnaW4gaXMg
cmVkdW5kYW50IChjYW4gYmUgCisgICAgICAgIGFjY2Vzc2VkIGZyb20gY29udGV4dCkgYnV0IG9u
IHRoZSByZWFsIGJhY2sgZW5kIHRoZSBjb250ZXh0IGlzIG51bGwgKGFzIEZyYW1lIHdhcyBwcmV2
aW91c2x5KS4KKyAgICAgICAgKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERh
dGFiYXNlTmFtZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YSk6CisKIDIwMTItMDctMDkgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMjIxMDcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE3M2EyNzc4OGU2
YzBlZWJiYzU0OTQzMGRiYWNlMDhlZjIyMWJiZjQuLmI4YzhhYzdjMGJjNzM0ZGVlOTQ3ZmYwN2Qw
MDJjOGVkNmY5YThjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDctMDMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IEVuYWJsZSBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlKCkgYW5kIHdl
YmtpdEdldERhdGFiYXNlTmFtZXMoKSBpbiBXb3JrZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDMxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjphbGxvd0luZGV4ZWRE
Qik6IENvbnNvbGlkYXRlcyB1c2VyLXByb21wdGluZyBsb2dpYy4KKyAgICAgICAgKFdlYktpdDo6
Z2V0V2ViRnJhbWUpOiBIZWxwZXIgdG8gZGlnIG91dCBmcmFtZSBmcm9tIERvY3VtZW50LCBvciBu
dWxsIGZvciBXb3JrZXIuCisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6
OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvSURCRmFjdG9y
eUJhY2tlbmRQcm94eS5oOiBVcGRhdGUgbWV0aG9kIHNpZ25hdHVyZXMgdG8gbWF0Y2ggaW50ZXJm
YWNlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJREJGYWN0b3J5QmFja2VuZFByb3h5
KToKKwogMjAxMi0wNy0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMjEwNy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggOGJlOWQx
ZDI0MTA1N2MyZGU4NzEyOTQ4NDFmOWZhNjk3NGZhYjA2MC4uMmU3ZDA5MWI1YTM5MWYxZjY3YzUy
MDNhMDYxMWI2MTIwOTI0MzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAKQEAgLTYzLDcwICs2Myw3MiBAQCBJREJGYWN0b3J5Ojp+SURC
RmFjdG9yeSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0
RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorc3RhdGljIGJv
b2wgaXNDb250ZXh0VmFsaWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY29u
dGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBp
ZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgICAgIHJldHVybiBkb2N1bWVu
dC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+cGFnZSgpOwogICAgIH0KKyNpZiAhRU5BQkxFKFdPUktF
UlMpCisgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVu
dC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKK3N0YXRpYyBTdHJpbmcgZ2V0SW5kZXhl
ZERCRGF0YWJhc2VQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
QVNTRVJUKGlzQ29udGV4dFZhbGlkKGNvbnRleHQpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4oY29udGV4dCk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgp
Lmdyb3VwU2V0dGluZ3MoKS0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCk7CisgICAgfQorI2lmIDAg
JiYgRU5BQkxFKFdPUktFUlMpCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBoaXRzIGFuIGFzc2Vy
dGlvbiB3aGVuIGNhbGxlZCBmcm9tIHdvcmtlcnMgZnJvbSB0aGUgZXZlbnQgbG9vcAorICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCk7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IHdvcmtlckNvbnRl
eHQtPnRocmVhZCgpLT5ncm91cFNldHRpbmdzKCk7CisgICAgaWYgKGdyb3VwU2V0dGluZ3MpCisg
ICAgICAgIHJldHVybiBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKTsKKyNl
bmRpZgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIEdyb3VwU2V0dGluZ3Mq
IGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3Mo
KTsKLSAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVk
REJEYXRhYmFzZVBhdGgoKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1f
YmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLCBjb250ZXh0LCBnZXRJbmRleGVkREJEYXRhYmFzZVBhdGgoY29udGV4dCkpOwogICAgIHJl
dHVybiByZXF1ZXN0OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9w
ZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLQogICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9UWVBFX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0
KTsKLSAgICAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKLSAgICAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgICAgICBtX2Jh
Y2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSwgZnJhbWUsIGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpLT5pbmRl
eGVkREJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXF1ZXN0OwotICAgIH0KLSNp
ZiBFTkFCTEUoV09SS0VSUykKKyAgICBpZiAoIWlzQ29udGV4dFZhbGlkKGNvbnRleHQpKQorICAg
ICAgICByZXR1cm4gMDsKKwogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICBXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNv
bnRleHQpOwotICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSB3b3JrZXJDb250ZXh0
LT50aHJlYWQoKS0+Z3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2VuZC0+b3BlbkZyb21Xb3Jr
ZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgd29ya2Vy
Q29udGV4dCwgZ3JvdXBTZXR0aW5ncyA/IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNl
UGF0aCgpIDogU3RyaW5nKCkpOworICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBj
b250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBjb250ZXh0LCBnZXRJbmRleGVkREJEYXRhYmFzZVBh
dGgoY29udGV4dCkpOwogICAgIHJldHVybiByZXF1ZXN0OwotI2Vsc2UKLSAgICByZXR1cm4gMDsK
LSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJGYWN0
b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdv
cmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVudC0+
ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBp
ZiAobmFtZS5pc051bGwoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIWlzQ29udGV4
dFZhbGlkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVh
dGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7Ci0gICAgR3JvdXBTZXR0aW5n
cyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5n
cygpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5p
bmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2Uo
bmFtZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgY29udGV4dCwgZ2V0SW5k
ZXhlZERCRGF0YWJhc2VQYXRoKGNvbnRleHQpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApA
QCAtMTM4LDggKzE0MCw4IEBAIHNob3J0IElEQkZhY3Rvcnk6OmNtcChQYXNzUmVmUHRyPElEQktl
eT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwCiAgICAgaWYgKCFmaXJz
dC0+aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgICAK
LSAgICAKKyAgICB9CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGZpcnN0LT5jb21w
YXJlKHNlY29uZC5nZXQoKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDdiYTc3
NTEwMzVjOGU5N2U0NzAxN2NkN2Q3NmEwYzcyMTUyYWU2Li4zY2NlMGMzNzU1MDkyN2I3MTQ3ZDk0
YWM4YzRjNDc4YTUxODYxMjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVs
REJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgi
Ci0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTgxLDcgKzgwLDcgQEAgdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcm
IGZpbGVJZGVudGlmaWVyKQogICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRlbnRp
Zmllcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVz
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9y
eSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyZWN0b3J5KQogewogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogICAgIGlm
ICghYmFja2luZ1N0b3JlKSB7CkBAIC05OSwxNyArOTgsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsK
IH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQotewotICAg
IG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0
b3J5KTsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyZWN0b3J5KQotewotICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNl
Y3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0
b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
c2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXJlY3RvcnkpCiB7CiAgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21w
dXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKQEAgLTE2
MCw3ICsxNDksNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHBycFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNl
Y3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyZWN0b3J5KQogewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4g
PSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9
IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKaW5kZXggMjA1NjRhODg1MmUzMjEwYWQ3NjY5Y2E3YTU0OTRhOGQ2OGQzNGUy
MC4uY2ExZDA1MjgyYThjNWVkZjc2NmQ1ZTU1NTA4ZmFlMGE5YzA0OGM2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gK
IAogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNTUsMTkgKzU2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNr
aW5nU3RvcmUqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0
IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNl
TmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9p
ZCBvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKIAogcHJvdGVjdGVkOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgp
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3Rv
cmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tl
bmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmlu
ZGV4IDE5YTFjOTc4NGMzMGJmN2FhODc1NTAwYWJiY2M4ZDQwOTA4ZmI1NWYuLjQ0ZjVjNzg2ZWYy
MWVhNDcxOWY2MzY5NDI5Zjc2NzM5MDA0MDkyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aApAQCAtNTMsMTEgKzUzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmNwcAppbmRleCA2MTA3ZWI5ODJlMDFjNjA2ZGZjYWY0YjJlYjMxZDJi
ODJkZmExYWY4Li4wZmRhY2E2ZTI5ZTM4NDhjZmU3MTcyMGMyOTk1MmNiNzM0MWU4ODU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBwcml2YXRlOgogY2xhc3MgRXhlY3V0YWJsZVdpdGhE
YXRhYmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV4ZWN1dGFibGVXaXRoRGF0YWJhc2U+IHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgeyB9OwotICAgIHZv
aWQgc3RhcnQoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqLCBTZWN1cml0eU9yaWdpbiosIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOworICAgIHZvaWQgc3RhcnQoSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UqLCBTZWN1cml0eU9yaWdpbiosIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CiB9Owog
CkBAIC0yMzMsMTAgKzIzMywxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFeGVjdXRhYmxlV2l0
aERhdGFiYXNlPiBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2U7CiB9OwogCi12b2lkIEV4ZWN1dGFi
bGVXaXRoRGF0YWJhc2U6OnN0YXJ0KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBpZGJGYWN0
b3J5LCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUpCit2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2U6OnN0YXJ0
KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBpZGJGYWN0b3J5LCBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lKQogewogICAgIFJlZlB0cjxPcGVuRGF0YWJhc2VDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBPcGVuRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKHRoaXMpOwotICAgIGlkYkZh
Y3RvcnktPm9wZW4oZGF0YWJhc2VOYW1lLCBjYWxsYmFjay5nZXQoKSwgc2VjdXJpdHlPcmlnaW4s
IGZyYW1lLCBTdHJpbmcoKSk7CisgICAgaWRiRmFjdG9yeS0+b3BlbihkYXRhYmFzZU5hbWUsIGNh
bGxiYWNrLmdldCgpLCBzZWN1cml0eU9yaWdpbiwgY29udGV4dCwgU3RyaW5nKCkpOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBpZGJEYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCkBAIC03MzIsNyArNzMyLDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShFcnJv
clN0cmluZyogZXJyb3JTdHIKIAogICAgIFJlZlB0cjxHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
IGNhbGxiYWNrID0gR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUobV9mcm9udGVuZFBy
b3ZpZGVyLmdldCgpLCByZXF1ZXN0SWQsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0
cmluZygpKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBh
Z2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgaWRiRmFjdG9yeS0+Z2V0RGF0YWJh
c2VOYW1lcyhjYWxsYmFjay5nZXQoKSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3Vt
ZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7Cisg
ICAgaWRiRmFjdG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhjYWxsYmFjay5nZXQoKSwgZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRh
YmFzZVBhdGgoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3RE
YXRhYmFzZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCkBAIC03NDUsNyArNzQ1
LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgaW50IHJlcXUKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
UHRyPERhdGFiYXNlTG9hZGVyQ2FsbGJhY2s+IGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2sgPSBEYXRh
YmFzZUxvYWRlckNhbGxiYWNrOjpjcmVhdGUobV9mcm9udGVuZFByb3ZpZGVyLmdldCgpLCByZXF1
ZXN0SWQpOwotICAgIGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZGF0YWJhc2VOYW1l
KTsKKyAgICBkYXRhYmFzZUxvYWRlckNhbGxiYWNrLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQsIGRhdGFiYXNlTmFtZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSkKQEAgLTc2OSw3ICs3NjksNyBAQCB2b2lkIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGludCByZXF1ZXN0SQogICAgIH0KIAogICAgIFJlZlB0cjxEYXRhTG9hZGVyQ2FsbGJhY2s+IGRh
dGFMb2FkZXJDYWxsYmFjayA9IERhdGFMb2FkZXJDYWxsYmFjazo6Y3JlYXRlKG1fZnJvbnRlbmRQ
cm92aWRlciwgcmVxdWVzdElkLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRl
eE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplKTsKLSAgICBkYXRhTG9hZGVy
Q2FsbGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBk
b2N1bWVudC0+ZnJhbWUoKSwgZGF0YWJhc2VOYW1lKTsKKyAgICBkYXRhTG9hZGVyQ2FsbGJhY2st
PnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudCwg
ZGF0YWJhc2VOYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAppbmRl
eCAxNDliZmUxMmEwZTM5NjczZjdiNDY1YWY2Yjk3ZDExMGYzZGNkNTY3Li42OGRlOTZiNzJjZDZl
YjNhMGVmNjNlNjU0NjEyOGFhY2Q0NzllMzE3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3NJbXBsLmgiCkBA
IC03MiwyMCArNzMsNiBAQCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tl
bmRQcm94eSgpCiB7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKQotewotICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwotICAgIFdl
YkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7Ci0g
ICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSB3ZWJGcmFtZS0+dmlld0ltcGwoKTsKLQotICAgIGlm
ICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGll
bnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsICJEYXRhYmFzZSBMaXN0aW5nIiwgb3JpZ2lu
KSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAi
VGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNl
TmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFt
ZSwgZGF0YURpcik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyIGFsbG93SW5kZXhlZERCTW9kZVtd
ID0gImFsbG93SW5kZXhlZERCTW9kZSI7CiAKIGNsYXNzIEFsbG93SW5kZXhlZERCTWFpblRocmVh
ZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0luZGV4ZWREQk1haW5U
aHJlYWRCcmlkZ2U+IHsKQEAgLTE2MSw2MCArMTQ4LDc5IEBAIHByaXZhdGU6CiAgICAgV2ViV29y
a2VyQmFzZSogbV93ZWJXb3JrZXJCYXNlOwogfTsKIAotYm9vbCBJREJGYWN0b3J5QmFja2VuZFBy
b3h5OjphbGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYpCitib29sIElE
QkZhY3RvcnlCYWNrZW5kUHJveHk6OmFsbG93SW5kZXhlZERCKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4m
IG9yaWdpbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKKyAgICBib29s
IGFsbG93ZWQ7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OworICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZG9jdW1lbnQtPmZyYW1lKCkpOworICAgICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdl
YkZyYW1lLT52aWV3SW1wbCgpOworICAgICAgICBhbGxvd2VkID0gd2ViVmlldy0+cGVybWlzc2lv
bkNsaWVudCgpICYmIHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIo
d2ViRnJhbWUsIG5hbWUsIG9yaWdpbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0
KTsKKyAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyQmFzZSA9IHN0YXRpY19jYXN0PFdl
YldvcmtlckJhc2UqPigmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5
KCkpOworICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+dGhy
ZWFkKCktPnJ1bkxvb3AoKTsKKworICAgICAgICBTdHJpbmcgbW9kZSA9IGFsbG93SW5kZXhlZERC
TW9kZTsKKyAgICAgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVV
bmlxdWVJZCgpKSk7CisgICAgICAgIFJlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlk
Z2U+IGJyaWRnZSA9IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdlYldv
cmtlckJhc2UsIG1vZGUsIG5hbWUpOworCisgICAgICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJl
dHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQuCisgICAgICAgIGlmIChydW5Mb29w
LnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVk
KSB7CisgICAgICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICAgICAgYWxsb3dlZCA9
IGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFsbG93ZWQgPSBicmlkZ2UtPnJl
c3VsdCgpOworICAgIH0KIAotICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlckJhc2UgPSBzdGF0
aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4oJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJM
b2FkZXJQcm94eSgpKTsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBpZiAoIWFsbG93ZWQpCisgICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0
YWJhc2UuIikpOwogCi0gICAgU3RyaW5nIG1vZGUgPSBhbGxvd0luZGV4ZWREQk1vZGU7Ci0gICAg
bW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0g
ICAgUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlID0gQWxsb3dJ
bmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUod2ViV29ya2VyQmFzZSwgbW9kZSwgbmFt
ZSk7CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CiAKLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSBy
ZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29wLnJ1
bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7
Ci0gICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK3N0YXRp
YyBXZWJGcmFtZUltcGwqIGdldFdlYkZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkp
OwogICAgIH0KLQotICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOworICAgIHJldHVybiAwOwog
fQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHBycE9yaWdpbiwgV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKQordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV2ViU2Vj
dXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7Ci0gICAgaWYgKCFhbGxvd0lEQkZyb21Xb3Jr
ZXJUaHJlYWQoY29udGV4dCwgbmFtZSwgb3JpZ2luKSkgewotICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24g
dG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKHBycENhbGxiYWNrcyk7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHNlY3Vy
aXR5T3JpZ2luKTsKKyAgICBpZiAoIWFsbG93SW5kZXhlZERCKGNvbnRleHQsICJEYXRhYmFzZSBM
aXN0aW5nIiwgb3JpZ2luLCBjYWxsYmFja3MpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCBvcmlnaW4sIC8qd2ViRnJhbWUqLzAsIGRhdGFEaXIpOwotI2VuZGlmCisKKyAgICBX
ZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gZ2V0V2ViRnJhbWUoY29udGV4dCk7CisgICAgbV93ZWJJ
REJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQogCi12b2lkIElEQkZhY3RvcnlC
YWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgZGF0YURpcikKKwordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKLSAgICBX
ZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKLSAgICBXZWJGcmFtZUltcGwqIHdl
YkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIFdlYlZpZXdJbXBs
KiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7Ci0gICAgaWYgKHdlYlZpZXctPnBlcm1p
c3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0luZGV4
ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8g
YWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKHBycENhbGxiYWNrcyk7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHNlY3VyaXR5
T3JpZ2luKTsKKyAgICBpZiAoIWFsbG93SW5kZXhlZERCKGNvbnRleHQsIG5hbWUsIG9yaWdpbiwg
Y2FsbGJhY2tzKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAorICAgIFdlYkZyYW1lSW1wbCog
d2ViRnJhbWUgPSBnZXRXZWJGcmFtZShjb250ZXh0KTsKICAgICBtX3dlYklEQkZhY3RvcnktPm9w
ZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJG
cmFtZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
CiB7Ci0gICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7Ci0gICAgV2ViRnJh
bWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKLSAgICBX
ZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOwotICAgIGlmICh3ZWJW
aWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+
YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKLSAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJt
aXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyhwcnBDYWxsYmFja3MpOworICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdp
bihzZWN1cml0eU9yaWdpbik7CisgICAgaWYgKCFhbGxvd0luZGV4ZWREQihjb250ZXh0LCBuYW1l
LCBvcmlnaW4sIGNhbGxiYWNrcykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKKyAgICBXZWJG
cmFtZUltcGwqIHdlYkZyYW1lID0gZ2V0V2ViRnJhbWUoY29udGV4dCk7CiAgICAgbV93ZWJJREJG
YWN0b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCmluZGV4IGMwN2Ri
MzU1NmUwOTAwNjZjN2I0Y2IxZTFiOWVkY2FmYzcwNmM5NjAuLjIyYTZmNTJhODY5ODE2YzgwNTY2
OGQ2ODRkMGE3YmZmZmMyNmFlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTMxLDEwICszMSwxMSBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNp
bmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NywxNiArNDgsMTMgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBj
cmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwg
V2ViQ29yZTo6SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4sIFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZp
cnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwg
dm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwg
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7
CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwotICAgIGJvb2wgYWxs
b3dJREJGcm9tV29ya2VyVGhyZWFkKFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJik7CisgICAgYm9vbCBhbGxvd0luZGV4
ZWREQihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPik7CiAKICAgICAvLyBXZSBkb24ndCBvd24gdGhpcyBwb2ludGVyICh1bmxpa2UgYWxsIHRo
ZSBvdGhlciBwcm94eSBjbGFzc2VzIHdoaWNoIGRvKS4KICAgICBXZWJJREJGYWN0b3J5KiBtX3dl
YklEQkZhY3Rvcnk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDBlZDc3ZjY5YWRjN2Y3ZTE3ODE3YWExNmFiY2Q2NzViMzEx
MjVjOS4uMjg3NWUwYjdiMzY4YTA5NDhhMGIzMGI1MzVmNTAzZjZkYmE0MDFlMSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDEyLTA3LTAzICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFibGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFz
ZSgpIGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkgaW4gV29ya2VycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2Zh
Y3RvcnktYmFzaWNzLXdvcmtlcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9mYWN0b3J5LWJhc2ljcy5qczogQWxsb3cg
dXNlIGJ5IFdvcmtlciBhcyB3ZWxsIGFzIFdpbmRvdy4KKyAgICAgICAgKGdldERhdGFiYXNlTmFt
ZXNTdWNjZXNzMSk6CisgICAgICAgIChvcGVuU3VjY2Vzcyk6CisgICAgICAgIChnZXREYXRhYmFz
ZU5hbWVzU3VjY2VzczIpOgorICAgICAgICAoZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MzKToKKwog
MjAxMi0wNy0wOSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAg
ICAgIFtHdGtdIFVuc2tpcCB0aGUgQ1NTIFJlZ2lvbnMgbGF5b3V0IHRlc3RzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNz
LXdvcmtlcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzN2QyOTE1NjhlMGE5MWJlMTQzZDgw
NzFiMTU2NjgxYzU2OWI1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDMzIEBACitbV29ya2VyXSBUZXN0IHRoZSBiYXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFjdG9y
eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1N0YXJ0aW5nIHdvcmtlcjogcmVz
b3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzCitbV29ya2VyXSBpbmRleGVkREIgPSBzZWxmLmluZGV4
ZWREQiB8fCBzZWxmLndlYmtpdEluZGV4ZWREQiB8fCBzZWxmLm1vekluZGV4ZWREQiB8fCBzZWxm
Lm1zSW5kZXhlZERCIHx8IHNlbGYuT0luZGV4ZWREQjsKK1tXb3JrZXJdIAorUEFTUyBbV29ya2Vy
XSB0eXBlb2YgaW5kZXhlZERCLm9wZW4gaXMgImZ1bmN0aW9uIgorUEFTUyBbV29ya2VyXSB0eXBl
b2YgaW5kZXhlZERCLmNtcCBpcyAiZnVuY3Rpb24iCitQQVNTIFtXb3JrZXJdIHR5cGVvZiBpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UgaXMgImZ1bmN0aW9uIgorUEFTUyBbV29ya2VyXSB0eXBlb2Yg
aW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFtZXMgaXMgImZ1bmN0aW9uIgorUEFTUyBbV29y
a2VyXSB0eXBlb2YgaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMgaXMgInVuZGVmaW5lZCIKK1tX
b3JrZXJdIGluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkKK1tXb3JrZXJdIGRhdGFi
YXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIFtXb3JrZXJdIGRhdGFiYXNlTmFt
ZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UK
K1BBU1MgW1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VT
IE5PVCBFWElTVCcpIGlzIGZhbHNlCitbV29ya2VyXSBpbmRleGVkREIub3BlbihuYW1lKQorW1dv
cmtlcl0gZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpCitbV29ya2VyXSBpbmRleGVkREIud2Vi
a2l0R2V0RGF0YWJhc2VOYW1lcygpCitbV29ya2VyXSBkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFy
Z2V0LnJlc3VsdAorUEFTUyBbV29ya2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIHRydWUKK1BBU1MgW1dvcmtlcl0gZGF0YWJh
c2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNl
CitbV29ya2VyXSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ3N0b3JhZ2UvaW5kZXhlZGRiL2Zh
Y3RvcnktYmFzaWNzJykKK1tXb3JrZXJdIGluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5hbWVz
KCkKK1tXb3JrZXJdIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIFtX
b3JrZXJdIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
YmFzaWNzJykgaXMgZmFsc2UKK1BBU1MgW1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygn
REFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitbV29ya2VyXSBpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMuaHRt
bCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NzE2OWZlYjNlZGU3NmVkZmJlOWY1YWUzZjQyOThmZGUzYjEwNTBi
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1iYXNpY3Mtd29ya2Vycy5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PnN0YXJ0V29ya2VyKCdyZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3Mu
anMnKTs8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpzIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFzaWNzLmpz
CmluZGV4IDE4OGM5NzA0NGMyOGFlZDlhZjliZjQwNDhhNzRkZDVlZTUwNTc4MzUuLjdhMmMzM2U5
MTI2MDVlZDMzZmQwNDY3ZTU5MTVjNGNkNjUxNDUyODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9mYWN0b3J5LWJhc2ljcy5qcworKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMKQEAg
LTI1LDggKzI1LDkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAKLWZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNj
ZXNzMSgpCitmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEoZXZ0KQogeworICAgIGV2
ZW50ID0gZXZ0OwogICAgIHZhciBkYXRhYmFzZU5hbWVzOwogICAgIGV2YWxBbmRMb2coImRhdGFi
YXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CiAgICAgc2hvdWxkQmVGYWxzZSgiZGF0
YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsKQEAgLTM3LDE2ICszOCwxOCBA
QCBmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEoKQogICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCi1mdW5jdGlvbiBvcGVuU3VjY2Vzcygp
CitmdW5jdGlvbiBvcGVuU3VjY2VzcyhldnQpCiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgZXZh
bEFuZExvZygiZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpIik7CiAgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coImluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkiKTsKICAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMjsKICAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gZ2V0RGF0YWJh
c2VOYW1lc1N1Y2Nlc3MyKCkKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMihldnQp
CiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgdmFyIGRhdGFiYXNlTmFtZXM7CiAgICAgZXZhbEFu
ZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKICAgICBzaG91bGRC
ZVRydWUoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJyIgKyBuYW1lICsgIicpIik7CkBAIC02NCw4
ICs2Nyw5IEBAIGZ1bmN0aW9uIGRlbGV0ZURhdGFiYXNlU3VjY2VzcygpCiAgICAgcmVxdWVzdC5v
bmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAKLWZ1bmN0aW9uIGdldERhdGFi
YXNlTmFtZXNTdWNjZXNzMygpCitmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczMoZXZ0
KQogeworICAgIGV2ZW50ID0gZXZ0OwogICAgIHZhciBkYXRhYmFzZU5hbWVzOwogICAgIGV2YWxB
bmRMb2coImRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CiAgICAgc2hvdWxk
QmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151997</attachid>
            <date>2012-07-12 10:46:27 -0700</date>
            <delta_ts>2012-07-12 15:19:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90310-20120712104626.patch</filename>
            <type>text/plain</type>
            <size>33869</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWVmMjYyNzJmNWI5ZDU1
ZDYxOGFkOGJlYzk5OGIzYjljNGZiZjBjOC4uMTcyMmQ5ZjdlZTgzYzU4ODcxZTM0NmFmMGU0ZWI2
N2Y2MWJkNDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTAzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFi
bGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVz
KCkgaW4gV29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTaW1wbGlmeSBEb2N1bWVudCB2cy4gV29ya2VyIGxvZ2ljIGZvciBJREJGYWN0b3J5Ojpv
cGVuKCkgYW5kIGhvb2sgdXAgdGhlCisgICAgICAgIG90aGVyIHR3byBJREJGYWN0b3J5IG1ldGhv
ZHMgZm9yIHVzZSBieSB3b3JrZXJzIGFzIHdlbGwuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vycy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKGlzQ29udGV4dFZhbGlkKTogSGVs
cGVyIGZ1bmN0aW9uIGNvbnNvbGlkYXRpbmcgY2hlY2tzIHRoYXQgY29udGV4dCBpcyB1c2FibGUu
CisgICAgICAgIChnZXRJbmRleGVkREJEYXRhYmFzZVBhdGgpOiBIZWxwZXIgZnVuY3Rpb24gZm9y
IGFjY2Vzc2luZyBncm91cCBzZXR0aW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
OmdldERhdGFiYXNlTmFtZXMpOiBTaW1wbGlmeSAtIGp1c3QgcGFzcyBjb250ZXh0IHRocm91Z2gg
dG8gYmFjayBlbmQuCisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVuKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21wKTogV2hpdGVzcGFjZS4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOiBPYnNvbGV0ZSBv
cGVuRnJvbVdvcmtlcigpIHJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMpOiBTaWduYXR1cmUgdXBkYXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UpOiBTaWduYXR1
cmUgdXBkYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bik6IFNpZ25hdHVyZSB1cGRhdGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRmFjdG9yeUJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOiBJ
bnRlcmZhY2UgbWV0aG9kcyBub3cgdGFrZSBib3RoIFNlY3VyaXR5T3JpZ2luCisgICAgICAgIGFu
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBidXQgbm90IEZyYW1lLiBJbiB0aGUgcHJveHksIFNl
Y3VyaXR5T3JpZ2luIGlzIHJlZHVuZGFudCAoY2FuIGJlCisgICAgICAgIGFjY2Vzc2VkIGZyb20g
Y29udGV4dCkgYnV0IG9uIHRoZSByZWFsIGJhY2sgZW5kIHRoZSBjb250ZXh0IGlzIG51bGwgKGFz
IEZyYW1lIHdhcyBwcmV2aW91c2x5KS4KKyAgICAgICAgKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJB
Z2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YSk6CisKIDIwMTItMDctMTIg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogUmVtb3ZlIHJlc291cmNlcyBwYW5lbCBlZGl0ZWQgcmVzb3VyY2VzIHNlYXJjaCBz
dXBwb3J0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjODU4NDc2NTE4YzgwNTg0YTMw
YzE2ZDkzY2Y4ZTBlMGQ3YWZlN2E4Li5kOWI2NjFlODkxNmNkMjdkMGYwMGM4ZTk3YjIxNDlkYjcy
ZDVmODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTA3LTAzICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5k
ZXhlZERCOiBFbmFibGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGFuZCB3ZWJraXRHZXRE
YXRhYmFzZU5hbWVzKCkgaW4gV29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJbmRleGVkREIpOiBDb25z
b2xpZGF0ZXMgdXNlci1wcm9tcHRpbmcgbG9naWMuCisgICAgICAgIChXZWJLaXQ6OmdldFdlYkZy
YW1lKTogSGVscGVyIHRvIGRpZyBvdXQgZnJhbWUgZnJvbSBEb2N1bWVudCwgb3IgbnVsbCBmb3Ig
V29ya2VyLgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRh
YmFzZU5hbWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2Vu
ZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuaDogVXBkYXRlIG1ldGhvZCBzaWduYXR1cmVzIHRvIG1hdGNoIGludGVyZmFjZS4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSURCRmFjdG9yeUJhY2tlbmRQcm94eSk6CisKIDIw
MTItMDctMTIgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtDaHJvbWl1bV0gRW5hYmxlIGJ1aWxkaW5nIEFQS3MgZm9yIFRlc3RXZWJLaXRBUEkgYW5kIHdl
YmtpdF91bml0X3Rlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnkuY3BwCmluZGV4IDA2NmI0MWZhZDU1MDkwZTdkMGMwZjI1ZDkwNjMzZDIwNzY1Nzgz
NjkuLjdlMTBjYjFhNTNiMDlhZDQyMmRmODA1MGU0MDE2NmVjYzNjNWNiYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC02Myw3MCAr
NjMsNzMgQEAgSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQogewogfQogCi1QYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK25hbWVzcGFjZSB7CitzdGF0aWMgYm9vbCBpc0NvbnRleHRWYWxpZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIGlmICghY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtl
cnMuCi0gICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkg
fHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIGlmIChjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3Vt
ZW50LT5wYWdlKCk7CisgICAgfQorI2lmICFFTkFCTEUoV09SS0VSUykKKyAgICBpZiAoY29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgU3RyaW5nIGdldEluZGV4ZWREQkRhdGFiYXNlUGF0
aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChpc0NvbnRl
eHRWYWxpZChjb250ZXh0KSk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OworICAgICAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdz
KCktPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpOwogICAgIH0KKyNpZiBFTkFCTEUoV09SS0VSUykK
KyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KGNvbnRleHQpOworICAgIGNvbnN0IEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3Mg
PSB3b3JrZXJDb250ZXh0LT5ncm91cFNldHRpbmdzKCk7CisgICAgaWYgKGdyb3VwU2V0dGluZ3Mp
CisgICAgICAgIHJldHVybiBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKTsK
KyNlbmRpZgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KK30KIAotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVu
dC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQoreworICAgIGlmICghaXNDb250ZXh0VmFsaWQoY29udGV4dCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICBHcm91cFNldHRpbmdz
KiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdz
KCk7Ci0gICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhl
ZERCRGF0YWJhc2VQYXRoKCkpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBt
X2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSwgY29udGV4dCwgZ2V0SW5kZXhlZERCRGF0YWJhc2VQYXRoKGNvbnRleHQpKTsKICAgICBy
ZXR1cm4gcmVxdWVzdDsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5Ojpv
cGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8
fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0KICAgICBpZiAobmFtZS5pc051bGwoKSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfVFlQRV9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0g
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4
dCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7Ci0gICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICAgICAgbV9i
YWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCksIGZyYW1lLCBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKS0+aW5k
ZXhlZERCRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICByZXR1cm4gcmVxdWVzdDsKLSAgICB9Ci0j
aWYgRU5BQkxFKFdPUktFUlMpCisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgV29y
a2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihj
b250ZXh0KTsKLSAgICBjb25zdCBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gd29ya2Vy
Q29udGV4dC0+Z3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2VuZC0+b3BlbkZyb21Xb3JrZXIo
bmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgd29ya2VyQ29u
dGV4dCwgZ3JvdXBTZXR0aW5ncyA/IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0
aCgpIDogU3RyaW5nKCkpOworICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBjb250ZXh0LCBnZXRJbmRleGVkREJEYXRhYmFzZVBhdGgo
Y29udGV4dCkpOwogICAgIHJldHVybiByZXF1ZXN0OwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNl
bmRpZgogfQogCiBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJGYWN0b3J5
OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtl
cnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJh
bWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBpZiAo
bmFtZS5pc051bGwoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJf
VFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIWlzQ29udGV4dFZh
bGlkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUo
ZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7Ci0gICAgR3JvdXBTZXR0aW5ncyog
Z3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygp
OwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRl
eGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFt
ZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgY29udGV4dCwgZ2V0SW5kZXhl
ZERCRGF0YWJhc2VQYXRoKGNvbnRleHQpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAt
MTM4LDggKzE0MSw4IEBAIHNob3J0IElEQkZhY3Rvcnk6OmNtcChQYXNzUmVmUHRyPElEQktleT4g
Zmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwCiAgICAgaWYgKCFmaXJzdC0+
aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgICAKLSAg
ICAKKyAgICB9CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGZpcnN0LT5jb21wYXJl
KHNlY29uZC5nZXQoKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDdiYTc3NTEw
MzVjOGU5N2U0NzAxN2NkN2Q3NmEwYzcyMTUyYWU2Li4zY2NlMGMzNzU1MDkyN2I3MTQ3ZDk0YWM4
YzRjNDc4YTUxODYxMjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM1LDcgKzM1LDYgQEAK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJC
YWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTgxLDcgKzgwLDcgQEAgdm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZp
bGVJZGVudGlmaWVyKQogICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRlbnRpZmll
cik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkK
K3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQogewogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9w
ZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogICAgIGlmICgh
YmFja2luZ1N0b3JlKSB7CkBAIC05OSwxNyArOTgsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKIH0K
IAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQotewotICAgIG9w
ZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5
KTsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyZWN0b3J5KQotewotICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3Vy
aXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXJlY3RvcnkpCiB7CiAgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRl
VW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKQEAgLTE2MCw3
ICsxNDksNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVybiAwOwogfQogCi12
b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBy
cFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3Vy
aXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQogewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBw
cnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNv
bXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKaW5kZXggMjA1NjRhODg1MmUzMjEwYWQ3NjY5Y2E3YTU0OTRhOGQ2OGQzNGUyMC4u
Y2ExZDA1MjgyYThjNWVkZjc2NmQ1ZTU1NTA4ZmFlMGE5YzA0OGM2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gKIAog
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIApAQCAtNTUsMTkgKzU2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5n
U3RvcmUqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgZmlsZUlkZW50aWZpZXIpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBv
cGVuRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNl
TmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAg
dmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKIAogcHJvdGVjdGVkOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUo
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxs
YmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRN
YXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4
IDE5YTFjOTc4NGMzMGJmN2FhODc1NTAwYWJiY2M4ZDQwOTA4ZmI1NWYuLjQ0ZjVjNzg2ZWYyMWVh
NDcxOWY2MzY5NDI5Zjc2NzM5MDA0MDkyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApA
QCAtNTMsMTEgKzUzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcAppbmRleCA2MTA3ZWI5ODJlMDFjNjA2ZGZjYWY0YjJlYjMxZDJiODJk
ZmExYWY4Li4wZmRhY2E2ZTI5ZTM4NDhjZmU3MTcyMGMyOTk1MmNiNzM0MWU4ODU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5j
cHAKQEAgLTE4Niw3ICsxODYsNyBAQCBwcml2YXRlOgogY2xhc3MgRXhlY3V0YWJsZVdpdGhEYXRh
YmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV4ZWN1dGFibGVXaXRoRGF0YWJhc2U+IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgeyB9OwotICAgIHZvaWQg
c3RhcnQoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqLCBTZWN1cml0eU9yaWdpbiosIEZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOworICAgIHZvaWQgc3RhcnQoSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UqLCBTZWN1cml0eU9yaWdpbiosIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CiB9OwogCkBA
IC0yMzMsMTAgKzIzMywxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFeGVjdXRhYmxlV2l0aERh
dGFiYXNlPiBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2U7CiB9OwogCi12b2lkIEV4ZWN1dGFibGVX
aXRoRGF0YWJhc2U6OnN0YXJ0KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBpZGJGYWN0b3J5
LCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpCit2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2U6OnN0YXJ0KElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBpZGJGYWN0b3J5LCBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW1lKQogewogICAgIFJlZlB0cjxPcGVuRGF0YWJhc2VDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBPcGVuRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKHRoaXMpOwotICAgIGlkYkZhY3Rv
cnktPm9wZW4oZGF0YWJhc2VOYW1lLCBjYWxsYmFjay5nZXQoKSwgc2VjdXJpdHlPcmlnaW4sIGZy
YW1lLCBTdHJpbmcoKSk7CisgICAgaWRiRmFjdG9yeS0+b3BlbihkYXRhYmFzZU5hbWUsIGNhbGxi
YWNrLmdldCgpLCBzZWN1cml0eU9yaWdpbiwgY29udGV4dCwgU3RyaW5nKCkpOwogfQogCiBzdGF0
aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
Rm9yRGF0YWJhc2UoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBpZGJEYXRhYmFzZSwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCkBAIC03MzIsNyArNzMyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShFcnJvclN0
cmluZyogZXJyb3JTdHIKIAogICAgIFJlZlB0cjxHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IGNh
bGxiYWNrID0gR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUobV9mcm9udGVuZFByb3Zp
ZGVyLmdldCgpLCByZXF1ZXN0SWQsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2Uo
KS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgaWRiRmFjdG9yeS0+Z2V0RGF0YWJhc2VO
YW1lcyhjYWxsYmFjay5nZXQoKSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50
LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAg
aWRiRmFjdG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhjYWxsYmFjay5nZXQoKSwgZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFz
ZVBhdGgoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRh
YmFzZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCkBAIC03NDUsNyArNzQ1LDcg
QEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgaW50IHJlcXUKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRy
PERhdGFiYXNlTG9hZGVyQ2FsbGJhY2s+IGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2sgPSBEYXRhYmFz
ZUxvYWRlckNhbGxiYWNrOjpjcmVhdGUobV9mcm9udGVuZFByb3ZpZGVyLmdldCgpLCByZXF1ZXN0
SWQpOwotICAgIGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZGF0YWJhc2VOYW1lKTsK
KyAgICBkYXRhYmFzZUxvYWRlckNhbGxiYWNrLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQsIGRhdGFiYXNlTmFtZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSkKQEAgLTc2OSw3ICs3NjksNyBAQCB2b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGlu
dCByZXF1ZXN0SQogICAgIH0KIAogICAgIFJlZlB0cjxEYXRhTG9hZGVyQ2FsbGJhY2s+IGRhdGFM
b2FkZXJDYWxsYmFjayA9IERhdGFMb2FkZXJDYWxsYmFjazo6Y3JlYXRlKG1fZnJvbnRlbmRQcm92
aWRlciwgcmVxdWVzdElkLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5h
bWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplKTsKLSAgICBkYXRhTG9hZGVyQ2Fs
bGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1
bWVudC0+ZnJhbWUoKSwgZGF0YWJhc2VOYW1lKTsKKyAgICBkYXRhTG9hZGVyQ2FsbGJhY2stPnN0
YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudCwgZGF0
YWJhc2VOYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAppbmRleCAx
NDliZmUxMmEwZTM5NjczZjdiNDY1YWY2Yjk3ZDExMGYzZGNkNTY3Li42OGRlOTZiNzJjZDZlYjNh
MGVmNjNlNjU0NjEyOGFhY2Q0NzllMzE3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRQ
cm94eS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3NJbXBsLmgiCkBAIC03
MiwyMCArNzMsNiBAQCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tlbmRQ
cm94eSgpCiB7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VO
YW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KQotewotICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwotICAgIFdlYkZy
YW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7Ci0gICAg
V2ViVmlld0ltcGwqIHdlYlZpZXcgPSB3ZWJGcmFtZS0+dmlld0ltcGwoKTsKLQotICAgIGlmICh3
ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQo
KS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsICJEYXRhYmFzZSBMaXN0aW5nIiwgb3JpZ2luKSkg
ewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhl
IHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFt
ZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwg
ZGF0YURpcik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyIGFsbG93SW5kZXhlZERCTW9kZVtdID0g
ImFsbG93SW5kZXhlZERCTW9kZSI7CiAKIGNsYXNzIEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJy
aWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0luZGV4ZWREQk1haW5UaHJl
YWRCcmlkZ2U+IHsKQEAgLTE2MSw2MCArMTQ4LDc5IEBAIHByaXZhdGU6CiAgICAgV2ViV29ya2Vy
QmFzZSogbV93ZWJXb3JrZXJCYXNlOwogfTsKIAotYm9vbCBJREJGYWN0b3J5QmFja2VuZFByb3h5
OjphbGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYpCitib29sIElEQkZh
Y3RvcnlCYWNrZW5kUHJveHk6OmFsbG93SW5kZXhlZERCKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9y
aWdpbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKKyAgICBib29sIGFs
bG93ZWQ7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwor
ICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUo
ZG9jdW1lbnQtPmZyYW1lKCkpOworICAgICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZy
YW1lLT52aWV3SW1wbCgpOworICAgICAgICBhbGxvd2VkID0gd2ViVmlldy0+cGVybWlzc2lvbkNs
aWVudCgpICYmIHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2Vi
RnJhbWUsIG5hbWUsIG9yaWdpbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsK
KyAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyQmFzZSA9IHN0YXRpY19jYXN0PFdlYldv
cmtlckJhc2UqPigmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCkp
OworICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+dGhyZWFk
KCktPnJ1bkxvb3AoKTsKKworICAgICAgICBTdHJpbmcgbW9kZSA9IGFsbG93SW5kZXhlZERCTW9k
ZTsKKyAgICAgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlx
dWVJZCgpKSk7CisgICAgICAgIFJlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+
IGJyaWRnZSA9IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdlYldvcmtl
ckJhc2UsIG1vZGUsIG5hbWUpOworCisgICAgICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVy
bnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQuCisgICAgICAgIGlmIChydW5Mb29wLnJ1
bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7
CisgICAgICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICAgICAgYWxsb3dlZCA9IGZh
bHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFsbG93ZWQgPSBicmlkZ2UtPnJlc3Vs
dCgpOworICAgIH0KIAotICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlckJhc2UgPSBzdGF0aWNf
Y2FzdDxXZWJXb3JrZXJCYXNlKj4oJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2Fk
ZXJQcm94eSgpKTsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+
dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBpZiAoIWFsbG93ZWQpCisgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJh
c2UuIikpOwogCi0gICAgU3RyaW5nIG1vZGUgPSBhbGxvd0luZGV4ZWREQk1vZGU7Ci0gICAgbW9k
ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0gICAg
UmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlID0gQWxsb3dJbmRl
eGVkREJNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUod2ViV29ya2VyQmFzZSwgbW9kZSwgbmFtZSk7
CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CiAKLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1
cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29wLnJ1bklu
TW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7Ci0g
ICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK3N0YXRpYyBX
ZWJGcmFtZUltcGwqIGdldFdlYkZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
ICAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwog
ICAgIH0KLQotICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOworICAgIHJldHVybiAwOwogfQog
Ci12b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHBycE9yaWdpbiwgV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKQordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV2ViU2VjdXJp
dHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7Ci0gICAgaWYgKCFhbGxvd0lEQkZyb21Xb3JrZXJU
aHJlYWQoY29udGV4dCwgbmFtZSwgb3JpZ2luKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8g
YWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKHBycENhbGxiYWNrcyk7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHNlY3VyaXR5
T3JpZ2luKTsKKyAgICBpZiAoIWFsbG93SW5kZXhlZERCKGNvbnRleHQsICJEYXRhYmFzZSBMaXN0
aW5nIiwgb3JpZ2luLCBjYWxsYmFja3MpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
d2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MpLCBvcmlnaW4sIC8qd2ViRnJhbWUqLzAsIGRhdGFEaXIpOwotI2VuZGlmCisKKyAgICBXZWJG
cmFtZUltcGwqIHdlYkZyYW1lID0gZ2V0V2ViRnJhbWUoY29udGV4dCk7CisgICAgbV93ZWJJREJG
YWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNr
cyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNr
ZW5kUHJveHk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNv
bnN0IFN0cmluZyYgZGF0YURpcikKKwordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKLSAgICBXZWJT
ZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKLSAgICBXZWJGcmFtZUltcGwqIHdlYkZy
YW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIFdlYlZpZXdJbXBsKiB3
ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7Ci0gICAgaWYgKHdlYlZpZXctPnBlcm1pc3Np
b25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0luZGV4ZWRE
Qih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
V2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNj
ZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KHBycENhbGxiYWNrcyk7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHNlY3VyaXR5T3Jp
Z2luKTsKKyAgICBpZiAoIWFsbG93SW5kZXhlZERCKGNvbnRleHQsIG5hbWUsIG9yaWdpbiwgY2Fs
bGJhY2tzKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAorICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBnZXRXZWJGcmFtZShjb250ZXh0KTsKICAgICBtX3dlYklEQkZhY3RvcnktPm9wZW4o
bmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFt
ZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7
Ci0gICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7Ci0gICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKLSAgICBXZWJW
aWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOwotICAgIGlmICh3ZWJWaWV3
LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxs
b3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNz
aW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyhwcnBDYWxsYmFja3MpOworICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihz
ZWN1cml0eU9yaWdpbik7CisgICAgaWYgKCFhbGxvd0luZGV4ZWREQihjb250ZXh0LCBuYW1lLCBv
cmlnaW4sIGNhbGxiYWNrcykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKKyAgICBXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gZ2V0V2ViRnJhbWUoY29udGV4dCk7CiAgICAgbV93ZWJJREJGYWN0
b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCmluZGV4IGMwN2RiMzU1
NmUwOTAwNjZjN2I0Y2IxZTFiOWVkY2FmYzcwNmM5NjAuLjIyYTZmNTJhODY5ODE2YzgwNTY2OGQ2
ODRkMGE3YmZmZmMyNmFlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTMxLDEwICszMSwxMSBAQAogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NywxNiArNDgsMTMgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVh
dGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBT
dHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7
Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgV2Vi
Q29yZTo6SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4s
IFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9p
ZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAK
IHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwotICAgIGJvb2wgYWxsb3dJ
REJGcm9tV29ya2VyVGhyZWFkKFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJik7CisgICAgYm9vbCBhbGxvd0luZGV4ZWRE
QihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
Pik7CiAKICAgICAvLyBXZSBkb24ndCBvd24gdGhpcyBwb2ludGVyICh1bmxpa2UgYWxsIHRoZSBv
dGhlciBwcm94eSBjbGFzc2VzIHdoaWNoIGRvKS4KICAgICBXZWJJREJGYWN0b3J5KiBtX3dlYklE
QkZhY3Rvcnk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYjFmM2EyZjdhYWE2NDM1YTE2NmEzOWMwNGYxMGQ3M2U0YmFjM2Nh
Ni4uZGRmOGJjZTZlNWZmNGNmYzZjNTE5YmRiOTM3Y2E0NzMwMmU5YTRjMCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDEyLTA3LTAzICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBFbmFibGUgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZSgp
IGFuZCB3ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkgaW4gV29ya2VycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktYmFzaWNzLXdvcmtlcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9mYWN0b3J5LWJhc2ljcy5qczogQWxsb3cgdXNl
IGJ5IFdvcmtlciBhcyB3ZWxsIGFzIFdpbmRvdy4KKyAgICAgICAgKGdldERhdGFiYXNlTmFtZXNT
dWNjZXNzMSk6CisgICAgICAgIChvcGVuU3VjY2Vzcyk6CisgICAgICAgIChnZXREYXRhYmFzZU5h
bWVzU3VjY2VzczIpOgorICAgICAgICAoZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MzKToKKwogMjAx
Mi0wNy0xMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4K
IAogICAgICAgICBNb3ZlIG5vZGVzRnJvbVJlY3QgdGVzdHMgdG8gc2VwYXJhdGUgc3ViLWRpcmVj
dG9yeS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
YmFzaWNzLXdvcmtlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3Mtd29ya2Vycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM3ZDI5
MTU2OGUwYTkxYmUxNDNkODA3MWIxNTY2ODFjNTY5YjUxMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLXdvcmtlcnMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1tXb3JrZXJdIFRlc3QgdGhlIGJhc2ljcyBvZiBJbmRl
eGVkREIncyBJREJGYWN0b3J5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU3Rh
cnRpbmcgd29ya2VyOiByZXNvdXJjZXMvZmFjdG9yeS1iYXNpY3MuanMKK1tXb3JrZXJdIGluZGV4
ZWREQiA9IHNlbGYuaW5kZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhlZERCIHx8IHNlbGYubW96
SW5kZXhlZERCIHx8IHNlbGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5kZXhlZERCOworW1dvcmtl
cl0gCitQQVNTIFtXb3JrZXJdIHR5cGVvZiBpbmRleGVkREIub3BlbiBpcyAiZnVuY3Rpb24iCitQ
QVNTIFtXb3JrZXJdIHR5cGVvZiBpbmRleGVkREIuY21wIGlzICJmdW5jdGlvbiIKK1BBU1MgW1dv
cmtlcl0gdHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSBpcyAiZnVuY3Rpb24iCitQQVNT
IFtXb3JrZXJdIHR5cGVvZiBpbmRleGVkREIud2Via2l0R2V0RGF0YWJhc2VOYW1lcyBpcyAiZnVu
Y3Rpb24iCitQQVNTIFtXb3JrZXJdIHR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyBp
cyAidW5kZWZpbmVkIgorW1dvcmtlcl0gaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFtZXMo
KQorW1dvcmtlcl0gZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgW1dv
cmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1i
YXNpY3MnKSBpcyBmYWxzZQorUEFTUyBbV29ya2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdE
QVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK1tXb3JrZXJdIGluZGV4ZWRE
Qi5vcGVuKG5hbWUpCitbV29ya2VyXSBldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkKK1tXb3Jr
ZXJdIGluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkKK1tXb3JrZXJdIGRhdGFiYXNl
TmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIFtXb3JrZXJdIGRhdGFiYXNlTmFtZXMu
Y29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgdHJ1ZQorUEFT
UyBbV29ya2VyXSBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9U
IEVYSVNUJykgaXMgZmFsc2UKK1tXb3JrZXJdIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKQorW1dvcmtlcl0gaW5kZXhlZERCLndlYmtp
dEdldERhdGFiYXNlTmFtZXMoKQorW1dvcmtlcl0gZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQKK1BBU1MgW1dvcmtlcl0gZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxzZQorUEFTUyBbV29ya2VyXSBkYXRhYmFz
ZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UK
K1tXb3JrZXJdIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnREFUQUJBU0UgVEhBVCBET0VTIE5P
VCBFWElTVCcpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1i
YXNpY3Mtd29ya2Vycy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1iYXNpY3Mtd29ya2Vycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MTY5ZmViM2VkZTc2ZWRmYmU5ZjVh
ZTNmNDI5OGZkZTNiMTA1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy13b3JrZXJzLmh0bWwKQEAgLTAsMCArMSwxMCBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+c3RhcnRXb3JrZXIoJ3Jlc291cmNl
cy9mYWN0b3J5LWJhc2ljcy5qcycpOzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvZmFj
dG9yeS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMv
ZmFjdG9yeS1iYXNpY3MuanMKaW5kZXggMTg4Yzk3MDQ0YzI4YWVkOWFmOWJmNDA0OGE3NGRkNWVl
NTA1NzgzNS4uN2EyYzMzZTkxMjYwNWVkMzNmZDA0NjdlNTkxNWM0Y2Q2NTE0NTI4NyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2ZhY3RvcnktYmFz
aWNzLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9mYWN0
b3J5LWJhc2ljcy5qcwpAQCAtMjUsOCArMjUsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICByZXF1
ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gZ2V0
RGF0YWJhc2VOYW1lc1N1Y2Nlc3MxKCkKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNz
MShldnQpCiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgdmFyIGRhdGFiYXNlTmFtZXM7CiAgICAg
ZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKICAgICBz
aG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwpA
QCAtMzcsMTYgKzM4LDE4IEBAIGZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMSgpCiAg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAKLWZ1bmN0
aW9uIG9wZW5TdWNjZXNzKCkKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKGV2dCkKIHsKKyAgICBldmVu
dCA9IGV2dDsKICAgICBldmFsQW5kTG9nKCJldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkiKTsK
ICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFt
ZXMoKSIpOwogICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3My
OwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCi1m
dW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczIoKQorZnVuY3Rpb24gZ2V0RGF0YWJhc2VO
YW1lc1N1Y2Nlc3MyKGV2dCkKIHsKKyAgICBldmVudCA9IGV2dDsKICAgICB2YXIgZGF0YWJhc2VO
YW1lczsKICAgICBldmFsQW5kTG9nKCJkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dCIpOwogICAgIHNob3VsZEJlVHJ1ZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUg
KyAiJykiKTsKQEAgLTY0LDggKzY3LDkgQEAgZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2VTdWNjZXNz
KCkKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAot
ZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MzKCkKK2Z1bmN0aW9uIGdldERhdGFiYXNl
TmFtZXNTdWNjZXNzMyhldnQpCiB7CisgICAgZXZlbnQgPSBldnQ7CiAgICAgdmFyIGRhdGFiYXNl
TmFtZXM7CiAgICAgZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1
bHQiKTsKICAgICBzaG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFt
ZSArICInKSIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>