<?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>39252</bug_id>
          
          <creation_ts>2010-05-17 17:23:56 -0700</creation_ts>
          <short_desc>Move host/native JSFunction&apos;s NativeFunction onto NativeExecutable.</short_desc>
          <delta_ts>2010-05-17 19:39:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>227011</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-17 17:23:56 -0700</bug_when>
    <thetext>Currently host functions reuse JSFunction&apos;s ScopeChain as storage for their NativeFunction (the C function pointer to the host function implementation).
Instead, move this onto NativeExecutable.  This will allow host functions to have a scopechain (which will be implemented as a separate patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227013</commentid>
    <comment_count>1</comment_count>
      <attachid>56293</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-17 17:25:52 -0700</bug_when>
    <thetext>Created attachment 56293
The patch

No perf impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227017</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 17:36:15 -0700</bug_when>
    <thetext>Attachment 56293 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/2247251</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227029</commentid>
    <comment_count>3</comment_count>
      <attachid>56299</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-17 18:08:44 -0700</bug_when>
    <thetext>Created attachment 56299
Fix JSGlue build; add caching of NativeExecutables on JSGlobalData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227038</commentid>
    <comment_count>4</comment_count>
      <attachid>56302</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-17 18:33:04 -0700</bug_when>
    <thetext>Created attachment 56302
Fix WebCore build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227046</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-17 18:49:39 -0700</bug_when>
    <thetext>Attachment 56293 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/2284275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227059</commentid>
    <comment_count>6</comment_count>
      <attachid>56302</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-17 19:31:38 -0700</bug_when>
    <thetext>Comment on attachment 56302
Fix WebCore build.

r=me

Looks like JSLazyEventListener may need to #include JSFunction.h, or something:

../../WebCore/bindings/js/JSLazyEventListener.cpp: In member function ‘virtual JSC::JSObject* WebCore::JSLazyEventListener::initializeJSFunction(WebCore::ScriptExecutionContext*) const’:
../../WebCore/bindings/js/JSLazyEventListener.cpp:125: error: ‘class JSC::JSFunction’ has no member named ‘setScope’
make[1]: *** [WebCore/bindings/js/libwebkit_1_0_la-JSLazyEventListener.lo] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227062</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-17 19:39:29 -0700</bug_when>
    <thetext>Transmitting file data ....................
Committed revision 59637.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56293</attachid>
            <date>2010-05-17 17:25:52 -0700</date>
            <delta_ts>2010-05-17 18:08:44 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.hostscope.txt</filename>
            <type>text/plain</type>
            <size>42692</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NjMzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTAtMDUtMTcgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAzOTI1MiAtIE1vdmUgaG9zdC9uYXRpdmUg
SlNGdW5jdGlvbidzIE5hdGl2ZUZ1bmN0aW9uIG9udG8gTmF0aXZlRXhlY3V0YWJsZS4KKworICAg
ICAgICBDdXJyZW50bHkgaG9zdCBmdW5jdGlvbnMgcmV1c2UgSlNGdW5jdGlvbidzIFNjb3BlQ2hh
aW4gYXMgc3RvcmFnZSBmb3IgdGhlaXIKKyAgICAgICAgTmF0aXZlRnVuY3Rpb24gKHRoZSBDIGZ1
bmN0aW9uIHBvaW50ZXIgdG8gdGhlIGhvc3QgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24pLgorICAg
ICAgICBJbnN0ZWFkLCBtb3ZlIHRoaXMgb250byBOYXRpdmVFeGVjdXRhYmxlLiAgVGhpcyB3aWxs
IGFsbG93IGhvc3QgZnVuY3Rpb25zIHRvCisgICAgICAgIGhhdmUgYSBzY29wZWNoYWluICh3aGlj
aCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIGEgc2VwYXJhdGUgcGF0Y2gpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OnNwZWNpYWxpemVkVGh1bmspOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAg
ICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwpOgorICAgICAgICAqIGppdC9TcGVj
aWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZp
bmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246Om5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0
YSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6c2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6Z2V0VGh1bmspOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1
Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IpOgorCiAyMDEwLTA1LTE3ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21i
b3MuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjIyLDYgKzIyMiw5IEBACiAJCTg2Qjk5QUUzMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJp
bmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI5OUFFNDExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IH07CisJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwICovOyB9OworCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkM1NjhERTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggKi87IH07CisJ
CTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oICovOyB9OwogCQk4NkNBMDMyRTEwMzhFODQ0MDAyOEE2MDkg
LyogRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkNBMDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi87IH07
CiAJCTg2Q0FGRUUzMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNBRkVFMjEwMzVEREU2MDAyOEE2
MDkgLyogRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CiAJCTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMDBFRTc5QTQ3
MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oICovOyB9OwpAQCAtNzc3LDYgKzc4MCw5IEBA
CiAJCTg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmlu
Z0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMjExN0U1Nzgx
MDBERjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3RyaW5nSW1wbEJhc2UuaDsgcGF0aCA9IHRleHQvU3RyaW5nSW1wbEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1h
Y3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OEREMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJNSVBTLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1JUFNB
c3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQTAzMkQxMDM4RTg0
NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NCwxMiArMTc5MCwxNSBAQAogCQkJCTg2RTExNkIwMEZF
NzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovLAogCQkJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1
OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovLAorCQkJCTg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8sCiAJCQkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8sCiAJCQkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMy
IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLywKIAkJCQk4NjNCMjNERjBGQzYwRTYyMDA3MDNB
QTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8sCisJCQkJODZDNTY4REUxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovLAogCQkJCTg2MDE2MUUxMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovLAogCQkJCTg2MDE2MUUyMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovLAorCQkJCTg2QzU2OERG
MTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggKi8sCiAJCQkJODZEM0IzQzIxMDE1
OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRF
MDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi8sCiAJCQkpOwpAQCAtMjEzNiw2ICsyMTQ1LDgg
QEAKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2Vu
ZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8q
IENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTg2QzU2
OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI1ODgsNiArMjU5OSw3IEBACiAJCQkJQTc1NzA2REUxMThBMkJDRjAwNTdG
ODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI2QkVD
RjExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzEyMzZFNTExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDU5NjIyKQorKysg
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNl
cXVlbmNlQmVnaW47CiAjZW5kaWYKICNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
YXRpdmVFeGVjdXRhYmxlPiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7CisgICAgICAgIHN0YXRpYyBDb2Rl
UHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKTsKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAg
ICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYQogICAgIC8vIHJl
Z1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQKICAgICBzdG9yZTMyKHJlZ1Qx
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpICsgT0JKRUNU
X09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7IC8vIHNjb3BlQ2hhaW4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7
IC8vIHNjb3BlQ2hhaW4KIAogICAgIGVtaXRTdG9yZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVn
aXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyksIEpTVmFsdWUoKSk7CiAgICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBjYWxsZWUKQEAg
LTM1MCw3ICszNTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgZW1pdFN0b3JlKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50cywgSlNWYWx1ZSgpKTsKICAgICBlbWl0U3RvcmUocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1QxKTsgLy8gbmV3U2NvcGVDaGFpbgor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1Qx
KTsgLy8gbmV3U2NvcGVDaGFpbgogICAgIHN0b3JlMzIoSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVn
aXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTQzNCw3ICs0MzQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhCiB7CiAgICAgc3Rv
cmUzMihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRh
KSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdT
Y29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25v
ZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAKICAgICBzdG9yZVB0cihJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb21pdHMgdG8gc2V0IHVwIFJl
Z2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBzZXQgaW4gdGhlIGNhbGxlZQogICAgIHN0
b3JlUHRyKEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAg
IHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwg
cmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihT
Y29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAgICAgc3RvcmUz
MihJbW0zMihhcmdDb3VudCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSwxNCArMzA5LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICAvLyBQbGFudCBjYWxsZnJhbWUKICAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKLSAgICBjYWxsKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICBjYWxs
KEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRh
YmxlLCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgLy8gSlNWYWx1ZSBpcyBhIG5vbi1QT0QgdHlwZSwg
c28gZWF4IHBvaW50cyB0byBpdAogICAgIGVtaXRMb2FkKDAsIHJlZ1QxLCByZWdUMCwgWDg2UmVn
aXN0ZXJzOjplYXgpOwogI2Vsc2UKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplZHgpOyAvLyBjYWxsZWUKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7IC8vIGNhbGxGcmFtZQot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM3Myw3ICszNzUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgLy8gU2V0dXAgYXJnMDoKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7CiAKLSAgICBjYWxsKEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsK
KyAgICBjYWxsKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxl
LCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIDApLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDQpLCByZWdUMSk7CkBAIC00MDEsNyArNDA0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEpOwogCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CisgICAgY2Fs
bChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5j
dGlvbikpKTsKIAogICAgIC8vIExvYWQgcmV0dXJuIHZhbHVlCiAgICAgbG9hZDMyKEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDApOwpAQCAtNDc2LDcgKzQ4MCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIHRyYW1wb2xpbmVz
LT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDYWxsQmVn
aW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBvbGluZUF0
KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
TmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklUQ29kZShK
SVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRo
dW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9saW5lQXQo
ZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJP
UEVSVFlfQUNDRVNTKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5l
ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOwogI2VuZGlmCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1
OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWRpKTsgCiAKLSAgICBjYWxsKEFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2Rh
dGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6cjkpOworICAg
IGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OnI5LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhl
Y3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKICAgICAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgQ1BVKFg4NikKQEAgLTMzNyw3
ICszMzgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAg
Ly8gUGxhbnQgY2FsbGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0
ZXJzOjplZHgpOwogCi0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODZS
ZWdpc3RlcnM6OmVheCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCBYODZSZWdpc3RlcnM6OmVieCk7CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJ4
LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKIAogICAg
IC8vIEpTVmFsdWUgaXMgYSBub24tUE9EIHR5cGUKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplYXgpLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0zNDcsNyArMzQ5LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogCiAgICAgLy8gUGxhbnQgY2Fs
bGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM5NSw3ICszOTgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgc3ViUHRyKEltbTMyKHNpemVvZihSZWdpc3Rlcikp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKIAotICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDMpOworICAg
IGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1f
ZnVuY3Rpb24pKSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CiAKQEAg
LTQxMyw3ICs0MTcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgLy8gU2V0dXAgYXJnNDogVGhpcyBpcyBhIHBsYWluIGhhY2sKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBBUk1SZWdpc3RlcnM6OnIzKTsKIAotICAgIGNhbGwoQWRkcmVzcyhy
ZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUp
KSwgcmVnVDMpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2
ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8vIE9TKFdJTkNFKQpAQCAt
NDYwLDcgKzQ2NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8K
ICAgICBhZGRQdHIoSW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVy
czo6YTApOwogCiAgICAgLy8gQ2FsbAotICAgIGNhbGwoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjph
MiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4
ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICAvLyBHZXQgcmV0dXJu
ZWQgdmFsdWUgZnJvbSAwKCR2MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZVJlZ2lzdGVyLCAwKSwgcmV0dXJuVmFsdWVSZWdpc3Rl
cik7CkBAIC01MzUsNyArNTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluayA9IHRyYW1w
b2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwogICAgIHRyYW1w
b2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxD
YWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBv
bGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5l
cy0+Y3RpTmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklU
Q29kZShKSVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZl
Q2FsbFRodW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9s
aW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1J
WkVfTU9EKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZp
bmFsQ29kZSwgc29mdE1vZEJlZ2luKTsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKElu
c3RyCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpJVDo6c3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0yOTgsNyAr
Mjk4LDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAgIGpp
dC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wpOwot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2Nv
ZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+
anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRodW5r
KHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCku
YWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gSklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQog
ewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTgw
LDcgKzgwLDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAg
IGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wp
OwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5t
X2NvZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0
YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkuYWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdl
dFRodW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1
OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0MDQsMTMgKzM0MDQsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpzcGVjaWFsaXplZFRodW5rKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6c3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8VGh1bmtNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRy
eSA9IG1fdGh1bmtNYXAuYWRkKGdlbmVyYXRvciwgMCk7Ci0gICAgaWYgKCFlbnRyeS5zZWNvbmQp
Ci0gICAgICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwotICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQo
KSk7Ci0gICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CisgICAgc3RkOjpwYWly
PFRodW5rTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX3RodW5rTWFwLmFkZChnZW5lcmF0
b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKQorICAg
ICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCkpOworICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1OTYy
MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpVmlydHVhbENvbnN0cnVjdExpbms7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlWaXJ0dWFsQ2FsbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1
YWxDb25zdHJ1Y3Q7Ci0gICAgICAgIFJlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBjdGlOYXRpdmVD
YWxsVGh1bms7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbzsKICAgICB9OwogCkBA
IC0yNzksMTIgKzI3OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgeyByZXR1cm4gbV90cmFtcG9saW5l
U3RydWN0dXJlLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rOyB9CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVy
ZS5jdGlWaXJ0dWFsQ2FsbDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmly
dHVhbENvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlWaXJ0dWFs
Q29uc3RydWN0OyB9Ci0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGN0aU5hdGl2ZUNhbGxUaHVu
aygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDYWxsVGh1bmsuZ2V0
KCk7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoKSB7IHJl
dHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ2FsbDsgfQogICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0
cnVjdHVyZS5jdGlTb2Z0TW9kdWxvOyB9CiAKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogc3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcGVjaWFsaXplZFRodW5r
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKICAg
ICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIFJlZlB0
cjxOYXRpdmVFeGVjdXRhYmxlPiA+IFRodW5rTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA+IFRodW5rTWFwOwogICAgICAg
ICBUaHVua01hcCBtX3RodW5rTWFwOwogICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1f
ZXhlY3V0YWJsZVBvb2w7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRo
dW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZpbmFsaXplKCkKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGZpbmFsaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX3Bvb2wuZ2V0KCkpOwotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmpp
dFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFk
ZHJlc3NGb3JDYWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZl
RXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSkpOworICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEt
PmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKSkpOworICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2
YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNp
YWxpemVkVGh1bgogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAg
ICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2
ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgpOwogfQog
Ci1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzksNyArNzks
NyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICAv
LyBsb2FkIGNoYXIgY29kZQpAQCAtODksMTIgKzg5LDEyIEBAIFBhc3NSZWZQdHI8TmF0aXZlRXhl
Y3V0YWJsZT4gZnJvbUNoYXJDb2QKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCk7CiB9CiAKLVBh
c3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBp
ZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKTsKIAogICAgIGppdC5sb2FkRG91Ymxl
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpAQCAtMTAyLDE5ICsxMDIsMTkg
QEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBzcXJ0VGh1bmtHZQogICAgIHJldHVybiBq
aXQuZmluYWxpemUoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBvb2wpOwotICAgIHJldHVy
biBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2FsbCgpOwogI2VuZGlmCiB9CiAKIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5l
Z2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgyLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxU
aHVuaygpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2Fs
bCgpOwogCiAgICAgaml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QxKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTE1MCw3
ICsxNTAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2VuCiAgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocG9vbCk7Ci0g
ICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpOworICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gNTk2MjIp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDE5ICsyNywxOSBAQAogI2RlZmluZSBUaHVua0dlbmVyYXRvcnNfaAogCiAjaWYgRU5B
QkxFKEpJVCkKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
RXhlY3V0YWJsZVBvb2w7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIE5hdGl2
ZUV4ZWN1dGFibGU7CiAKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4g
KCpUaHVua0dlbmVyYXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBQ
YXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0
YWJsZT4gY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wq
KTsKLSAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21DaGFyQ29kZVRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgUGFzc1JlZlB0cjxO
YXRpdmVFeGVjdXRhYmxlPiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0
YWJsZVBvb2wqKTsKLSAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgKCpUaHVua0dlbmVyYXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0
YWJsZVBvb2wqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQ
b29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqLCBFeGVjdXRhYmxlUG9vbCopOwogfQogI2VuZGlmCiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVm
IEV4ZWN1dGFibGVfaAogI2RlZmluZSBFeGVjdXRhYmxlX2gKIAorI2luY2x1ZGUgIkNhbGxEYXRh
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiTm9kZXMuaCIKQEAgLTkwLDIxICs5MSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVj
dXRhYmxlQmFzZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgotICAg
ICAgICBOYXRpdmVFeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogRXhl
Y3V0YWJsZUJhc2UoTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gY3JlYXRlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0aHVu
aywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0
Q29kZUZvckNhbGwgPSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRo
dW5rKCktPm1faml0Q29kZUZvckNhbGw7Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1
Y3QgPSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1f
aml0Q29kZUZvckNhbGw7IC8vIEZJWE1FOiB0aGlzIHRodW5rIHNob3VsZCBoYXZlIGEgY29uc3Ry
dWN0IGZvcm0KKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJs
ZShKSVRDb2RlOjpIb3N0RnVuY3Rpb24odGh1bmspLCBmdW5jdGlvbikpOwogICAgICAgICB9Ci0g
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUoSklUQ29kZSB0aHVuaykKKworICAgICAgICB+TmF0aXZl
RXhlY3V0YWJsZSgpOworCisgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9mdW5jdGlvbjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJs
ZShKSVRDb2RlIHRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKICAgICAgICAgICAgIDog
RXhlY3V0YWJsZUJhc2UoTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgICAgICwgbV9m
dW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IHRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gdGh1bms7CiAg
ICAgICAgIH0KIAotICAgICAgICB+TmF0aXZlRXhlY3V0YWJsZSgpOworICAgICAgICBOYXRpdmVG
dW5jdGlvbiBtX2Z1bmN0aW9uOwogICAgIH07CiAjZW5kaWYKIApAQCAtNDAzLDYgKzQxMCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZS0+aXNIb3N0RnVu
Y3Rpb24oKTsKICAgICB9CiAKKyAgICBpbmxpbmUgTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6
bmF0aXZlRnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uKCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KG1fZXhlY3V0
YWJsZS5nZXQoKSktPmZ1bmN0aW9uKCk7CisgICAgfQogfQogCiAjZW5kaWYKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNyAr
NTMsMTggQEAgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZQogSlNGdW5j
dGlvbjo6SlNGdW5jdGlvbihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkK
ICAgICA6IEJhc2Uoc3RydWN0dXJlKQogICAgICwgbV9leGVjdXRhYmxlKGFkb3B0UmVmKG5ldyBW
UHRySGFja0V4ZWN1dGFibGUoKSkpCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkp
CiB7CiB9CiAKLUpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBOb25OdWxs
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgTmF0aXZlRXhlY3V0YWJsZSogdGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMp
CitKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gdGh1bmspCiAgICAgOiBCYXNlKCZleGVj
LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgbmFtZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwg
bV9leGVjdXRhYmxlKHRodW5rKQogI2VuZGlmCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNo
YWluKCkpCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzZXROYXRpdmVGdW5jdGlvbihmdW5jKTsK
ICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhl
YywgbGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0odGh1bmspOwpAQCAtNzYsMTEgKzc3LDExIEBAIEpTRnVuY3Rpb246OkpT
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCAKIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxl
bmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICA6
IEJhc2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBuYW1lKQogI2lmIEVOQUJMRShK
SVQpCi0gICAgLCBtX2V4ZWN1dGFibGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmppdFN0dWJzLmN0aU5h
dGl2ZUNhbGxUaHVuaygpKQorICAgICwgbV9leGVjdXRhYmxlKE5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbCgpLCBmdW5jKSkK
ICNlbmRpZgorICAgICwgbV9zY29wZUNoYWluKE5vU2NvcGVDaGFpbigpKQogewogI2lmIEVOQUJM
RShKSVQpCi0gICAgc2V0TmF0aXZlRnVuY3Rpb24oZnVuYyk7CiAgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCksIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7CkBAIC05Miw4ICs5Myw4IEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCAKIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBOb25OdWxsUGFz
c1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+IGV4ZWN1dGFibGUsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSkKICAgICA6IEJhc2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBleGVjdXRhYmxlLT5uYW1l
KCkpCiAgICAgLCBtX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKyAgICAsIG1fc2NvcGVDaGFpbihz
Y29wZUNoYWluTm9kZSkKIHsKLSAgICBzZXRTY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKIH0K
IAogSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKQpAQCAtMTExLDcgKzExMiw2IEBAIEpTRnVuY3Rp
b246On5KU0Z1bmN0aW9uKCkKICAgICAgICAgaWYgKGpzRXhlY3V0YWJsZSgpLT5pc0dlbmVyYXRl
ZEZvckNvbnN0cnVjdCgpKQogICAgICAgICAgICAganNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5
dGVjb2RlRm9yQ29uc3RydWN0KCkudW5saW5rQ2FsbGVycygpOwogI2VuZGlmCi0gICAgICAgIHNj
b3BlQ2hhaW4oKS5+U2NvcGVDaGFpbigpOyAvLyBGSVhNRTogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0
aGlzIGluIHRoZSBpbnRlcnByZXRlciB0b28/CiAgICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBKU0Z1bmN0aW9uOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJgogICAgIEJhc2U6Om1h
cmtDaGlsZHJlbihtYXJrU3RhY2spOwogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oKSkgewogICAg
ICAgICBqc0V4ZWN1dGFibGUoKS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwotICAgICAgICBz
Y29wZUNoYWluKCkubWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOworICAgICAgICBzY29wZSgpLm1h
cmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICB9CiB9CiAKQEAgLTEzMSwxNCArMTMxLDE0IEBA
IENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxEYXQKICAgICAgICAgcmV0dXJu
IENhbGxUeXBlSG9zdDsKICAgICB9CiAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxl
ID0ganNFeGVjdXRhYmxlKCk7Ci0gICAgY2FsbERhdGEuanMuc2NvcGVDaGFpbiA9IHNjb3BlQ2hh
aW4oKS5ub2RlKCk7CisgICAgY2FsbERhdGEuanMuc2NvcGVDaGFpbiA9IHNjb3BlKCkubm9kZSgp
OwogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCiBKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGwo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIHJldHVybiBleGVjLT5pbnRl
cnByZXRlcigpLT5leGVjdXRlQ2FsbChqc0V4ZWN1dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKSwgYXJncywgc2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+
ZXhjZXB0aW9uU2xvdCgpKTsKKyAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0
ZUNhbGwoanNFeGVjdXRhYmxlKCksIGV4ZWMsIHRoaXMsIHRoaXNWYWx1ZS50b1RoaXNPYmplY3Qo
ZXhlYyksIGFyZ3MsIHNjb3BlKCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOwogfQog
CiBKU1ZhbHVlIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQpAQCAtMTcxLDcgKzE3MSw3IEBAIGJv
b2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWMKICAgICAgICAgSlNWYWx1ZSog
bG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlm
ICghbG9jYXRpb24pIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBuZXcgKGV4
ZWMpIEpTT2JqZWN0KHNjb3BlQ2hhaW4oKS5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gbmV3IChleGVjKSBK
U09iamVjdChzY29wZSgpLmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdGhpcywgRG9udEVudW0pOwogICAgICAgICAgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSk7CiAgICAg
ICAgICAgICBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CkBAIC0y
NjQsNyArMjY0LDcgQEAgQ29uc3RydWN0VHlwZSBKU0Z1bmN0aW9uOjpnZXRDb25zdHJ1Y3REYQog
ICAgIGlmIChpc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5v
bmU7CiAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0V4ZWN1dGFi
bGUoKTsKLSAgICBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlQ2hhaW4gPSBzY29wZUNoYWluKCkubm9k
ZSgpOworICAgIGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFpbiA9IHNjb3BlKCkubm9kZSgpOwog
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSlM7CiB9CiAKQEAgLTI3OSw3ICsyNzksNyBAQCBKU09i
amVjdCogSlNGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNTdGF0CiAgICAgICAgIHN0cnVjdHVyZSA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVj
dChqc0V4ZWN1dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc2NvcGVDaGFpbigp
Lm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4
ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVDb25zdHJ1Y3QoanNFeGVjdXRhYmxlKCksIGV4ZWMs
IHRoaXMsIHRoaXNPYmosIGFyZ3MsIHNjb3BlKCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90
KCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAhcmVzdWx0LmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aGlzT2JqOwogICAgIHJldHVybiBhc09iamVjdChyZXN1bHQpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDU5NjIyKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDE1ICs0MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSlNG
dW5jdGlvbihFeGVjU3RhdGUqLCBOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBpbnQgbGVu
Z3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24pOwotICAgICAgICBKU0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGludCBsZW5ndGgs
IGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVFeGVjdXRhYmxlKiwgTmF0aXZlRnVuY3Rpb24pOwor
ICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4sIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1
dGFibGU+KTsKICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBOb25OdWxsUGFzc1JlZlB0
cjxGdW5jdGlvbkV4ZWN1dGFibGU+LCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFs
IH5KU0Z1bmN0aW9uKCk7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUq
LCBjb25zdCBBcmdMaXN0Jik7CiAgICAgICAgIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogCi0gICAgICAgIHZvaWQgc2V0U2NvcGUo
Y29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbikgeyBzZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4p
OyB9Ci0gICAgICAgIFNjb3BlQ2hhaW4mIHNjb3BlKCkgeyByZXR1cm4gc2NvcGVDaGFpbigpOyB9
CisgICAgICAgIFNjb3BlQ2hhaW4mIHNjb3BlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Nj
b3BlQ2hhaW47CisgICAgICAgIH0KIAogICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQogCkBAIC02NiwxMCArNjks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnlt
b3VzU2xvdENvdW50KTsgCiAgICAgICAgIH0KIAotICAgICAgICBOYXRpdmVGdW5jdGlvbiBuYXRp
dmVGdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqV1RGOjpiaXR3aXNl
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24qPihtX2RhdGEpOwotICAgICAgICB9CisgICAgICAgIE5hdGl2
ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7CiAKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENh
bGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkBAIC05NywzMSArOTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKTsKIAogICAgICAgICBSZWZQdHI8RXhlY3V0YWJs
ZUJhc2U+IG1fZXhlY3V0YWJsZTsKLSAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gKldURjo6Yml0d2lzZV9jYXN0PFNjb3BlQ2hhaW4qPihtX2Rh
dGEpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgY2xlYXJTY29wZUNoYWluKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKLSAgICAg
ICAgICAgIG5ldyAobV9kYXRhKSBTY29wZUNoYWluKE5vU2NvcGVDaGFpbigpKTsKLSAgICAgICAg
fQotICAgICAgICB2b2lkIHNldFNjb3BlQ2hhaW4oU2NvcGVDaGFpbk5vZGUqIHNjKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwotICAg
ICAgICAgICAgbmV3IChtX2RhdGEpIFNjb3BlQ2hhaW4oc2MpOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgc2V0U2NvcGVDaGFpbihjb25zdCBTY29wZUNoYWluJiBzYykKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKLSAgICAgICAgICAg
ICpXVEY6OmJpdHdpc2VfY2FzdDxTY29wZUNoYWluKj4obV9kYXRhKSA9IHNjOwotICAgICAgICB9
Ci0gICAgICAgIHZvaWQgc2V0TmF0aXZlRnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuYykKLSAg
ICAgICAgewotICAgICAgICAgICAgKldURjo6Yml0d2lzZV9jYXN0PE5hdGl2ZUZ1bmN0aW9uKj4o
bV9kYXRhKSA9IGZ1bmM7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgY2hhciBtX2RhdGFb
c2l6ZW9mKHZvaWQqKV07CisgICAgICAgIFNjb3BlQ2hhaW4gbV9zY29wZUNoYWluOwogICAgIH07
CiAKICAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWUpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwog
I2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVFRodW5rcyBqaXRTdHViczsKLSAgICAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0VGh1bmsoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0VGh1bmsoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMuc3BlY2lhbGl6ZWRUaHVu
ayh0aGlzLCBnZW5lcmF0b3IpOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xvb2t1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29r
dXAuY3BwCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkxvb2t1cC5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJQcm90b3R5cGVGdW5jdGlvbi5oIgogCkBAIC03
Nyw3ICs3OCw3IEBAIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiAKICAg
ICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb247CiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChl
eGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgo
KSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0VGh1bmsoZW50cnktPmdlbmVy
YXRvcigpKSwgZW50cnktPmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBuZXcg
KGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0
aCgpLCBwcm9wZXJ0eU5hbWUsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0VGh1bmsoZW50cnktPmdlbmVyYXRvcigpKSwgZW50cnktPmZ1bmN0aW9uKCkpKTsK
ICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAoZXhlYykg
TmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHBy
b3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU5NjIyKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdDb25z
dHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkpJVENvZGUu
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJQcm90b3R5cGVGdW5jdGlvbi5oIgpAQCAtNTUsNyArNTcsNyBAQCBTdHJpbmdD
b25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IoRXhlCiAKICAgICAvLyBFQ01BIDE1LjUuMy4y
IGZyb21DaGFyQ29kZSgpCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBwdXREaXJlY3RGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4
ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZnJvbUNoYXJDb2RlLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0VGh1bmsoZnJvbUNoYXJDb2RlVGh1
bmtHZW5lcmF0b3IpLCBzdHJpbmdGcm9tQ2hhckNvZGUpLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0
aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmZyb21DaGFyQ29kZSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKS5nZXRUaHVuayhmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvciksIHN0cmlu
Z0Zyb21DaGFyQ29kZSkpLCBEb250RW51bSk7CiAjZWxzZQogICAgIHB1dERpcmVjdEZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIo
ZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5mcm9tQ2hhckNvZGUsIHN0cmluZ0Zyb21DaGFyQ29kZSksIERvbnRFbnVtKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56299</attachid>
            <date>2010-05-17 18:08:44 -0700</date>
            <delta_ts>2010-05-17 18:33:04 -0700</delta_ts>
            <desc>Fix JSGlue build; add caching of NativeExecutables on JSGlobalData.</desc>
            <filename>patch.hostscope.2.txt</filename>
            <type>text/plain</type>
            <size>44289</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NjMzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTAtMDUtMTcgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAzOTI1MiAtIE1vdmUgaG9zdC9uYXRpdmUg
SlNGdW5jdGlvbidzIE5hdGl2ZUZ1bmN0aW9uIG9udG8gTmF0aXZlRXhlY3V0YWJsZS4KKworICAg
ICAgICBDdXJyZW50bHkgaG9zdCBmdW5jdGlvbnMgcmV1c2UgSlNGdW5jdGlvbidzIFNjb3BlQ2hh
aW4gYXMgc3RvcmFnZSBmb3IgdGhlaXIKKyAgICAgICAgTmF0aXZlRnVuY3Rpb24gKHRoZSBDIGZ1
bmN0aW9uIHBvaW50ZXIgdG8gdGhlIGhvc3QgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24pLgorICAg
ICAgICBJbnN0ZWFkLCBtb3ZlIHRoaXMgb250byBOYXRpdmVFeGVjdXRhYmxlLiAgVGhpcyB3aWxs
IGFsbG93IGhvc3QgZnVuY3Rpb25zIHRvCisgICAgICAgIGhhdmUgYSBzY29wZWNoYWluICh3aGlj
aCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIGEgc2VwYXJhdGUgcGF0Y2gpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OnNwZWNpYWxpemVkVGh1bmspOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAg
ICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwpOgorICAgICAgICAqIGppdC9TcGVj
aWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZp
bmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246Om5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0
YSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6c2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6Z2V0VGh1bmspOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1
Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IpOgorCiAyMDEwLTA1LTE3ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21i
b3MuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjIyLDYgKzIyMiw5IEBACiAJCTg2Qjk5QUUzMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJp
bmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI5OUFFNDExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IH07CisJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwICovOyB9OworCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkM1NjhERTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggKi87IH07CisJ
CTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oICovOyB9OwogCQk4NkNBMDMyRTEwMzhFODQ0MDAyOEE2MDkg
LyogRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkNBMDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi87IH07
CiAJCTg2Q0FGRUUzMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNBRkVFMjEwMzVEREU2MDAyOEE2
MDkgLyogRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CiAJCTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMDBFRTc5QTQ3
MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oICovOyB9OwpAQCAtNzc3LDYgKzc4MCw5IEBA
CiAJCTg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmlu
Z0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMjExN0U1Nzgx
MDBERjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3RyaW5nSW1wbEJhc2UuaDsgcGF0aCA9IHRleHQvU3RyaW5nSW1wbEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1h
Y3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OEREMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJNSVBTLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1JUFNB
c3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQTAzMkQxMDM4RTg0
NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NCwxMiArMTc5MCwxNSBAQAogCQkJCTg2RTExNkIwMEZF
NzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovLAogCQkJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1
OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovLAorCQkJCTg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8sCiAJCQkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8sCiAJCQkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMy
IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLywKIAkJCQk4NjNCMjNERjBGQzYwRTYyMDA3MDNB
QTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8sCisJCQkJODZDNTY4REUxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovLAogCQkJCTg2MDE2MUUxMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovLAogCQkJCTg2MDE2MUUyMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovLAorCQkJCTg2QzU2OERG
MTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggKi8sCiAJCQkJODZEM0IzQzIxMDE1
OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRF
MDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi8sCiAJCQkpOwpAQCAtMjEzNiw2ICsyMTQ1LDgg
QEAKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2Vu
ZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8q
IENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTg2QzU2
OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI1ODgsNiArMjU5OSw3IEBACiAJCQkJQTc1NzA2REUxMThBMkJDRjAwNTdG
ODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI2QkVD
RjExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzEyMzZFNTExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDU5NjIyKQorKysg
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNl
cXVlbmNlQmVnaW47CiAjZW5kaWYKICNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
YXRpdmVFeGVjdXRhYmxlPiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7CisgICAgICAgIHN0YXRpYyBDb2Rl
UHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKTsKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAg
ICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYQogICAgIC8vIHJl
Z1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQKICAgICBzdG9yZTMyKHJlZ1Qx
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpICsgT0JKRUNU
X09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7IC8vIHNjb3BlQ2hhaW4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7
IC8vIHNjb3BlQ2hhaW4KIAogICAgIGVtaXRTdG9yZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVn
aXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyksIEpTVmFsdWUoKSk7CiAgICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBjYWxsZWUKQEAg
LTM1MCw3ICszNTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgZW1pdFN0b3JlKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50cywgSlNWYWx1ZSgpKTsKICAgICBlbWl0U3RvcmUocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1QxKTsgLy8gbmV3U2NvcGVDaGFpbgor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1Qx
KTsgLy8gbmV3U2NvcGVDaGFpbgogICAgIHN0b3JlMzIoSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVn
aXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTQzNCw3ICs0MzQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhCiB7CiAgICAgc3Rv
cmUzMihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRh
KSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdT
Y29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25v
ZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAKICAgICBzdG9yZVB0cihJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb21pdHMgdG8gc2V0IHVwIFJl
Z2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBzZXQgaW4gdGhlIGNhbGxlZQogICAgIHN0
b3JlUHRyKEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAg
IHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwg
cmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihT
Y29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAgICAgc3RvcmUz
MihJbW0zMihhcmdDb3VudCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSwxNCArMzA5LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICAvLyBQbGFudCBjYWxsZnJhbWUKICAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKLSAgICBjYWxsKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICBjYWxs
KEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRh
YmxlLCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgLy8gSlNWYWx1ZSBpcyBhIG5vbi1QT0QgdHlwZSwg
c28gZWF4IHBvaW50cyB0byBpdAogICAgIGVtaXRMb2FkKDAsIHJlZ1QxLCByZWdUMCwgWDg2UmVn
aXN0ZXJzOjplYXgpOwogI2Vsc2UKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplZHgpOyAvLyBjYWxsZWUKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7IC8vIGNhbGxGcmFtZQot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM3Myw3ICszNzUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgLy8gU2V0dXAgYXJnMDoKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7CiAKLSAgICBjYWxsKEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsK
KyAgICBjYWxsKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxl
LCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIDApLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDQpLCByZWdUMSk7CkBAIC00MDEsNyArNDA0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEpOwogCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CisgICAgY2Fs
bChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5j
dGlvbikpKTsKIAogICAgIC8vIExvYWQgcmV0dXJuIHZhbHVlCiAgICAgbG9hZDMyKEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDApOwpAQCAtNDc2LDcgKzQ4MCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIHRyYW1wb2xpbmVz
LT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDYWxsQmVn
aW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBvbGluZUF0
KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
TmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklUQ29kZShK
SVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRo
dW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9saW5lQXQo
ZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJP
UEVSVFlfQUNDRVNTKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5l
ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOwogI2VuZGlmCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1
OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWRpKTsgCiAKLSAgICBjYWxsKEFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2Rh
dGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6cjkpOworICAg
IGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OnI5LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhl
Y3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKICAgICAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgQ1BVKFg4NikKQEAgLTMzNyw3
ICszMzgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAg
Ly8gUGxhbnQgY2FsbGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0
ZXJzOjplZHgpOwogCi0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODZS
ZWdpc3RlcnM6OmVheCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCBYODZSZWdpc3RlcnM6OmVieCk7CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJ4
LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKIAogICAg
IC8vIEpTVmFsdWUgaXMgYSBub24tUE9EIHR5cGUKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplYXgpLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0zNDcsNyArMzQ5LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogCiAgICAgLy8gUGxhbnQgY2Fs
bGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM5NSw3ICszOTgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgc3ViUHRyKEltbTMyKHNpemVvZihSZWdpc3Rlcikp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKIAotICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDMpOworICAg
IGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1f
ZnVuY3Rpb24pKSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CiAKQEAg
LTQxMyw3ICs0MTcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgLy8gU2V0dXAgYXJnNDogVGhpcyBpcyBhIHBsYWluIGhhY2sKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBBUk1SZWdpc3RlcnM6OnIzKTsKIAotICAgIGNhbGwoQWRkcmVzcyhy
ZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUp
KSwgcmVnVDMpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2
ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8vIE9TKFdJTkNFKQpAQCAt
NDYwLDcgKzQ2NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8K
ICAgICBhZGRQdHIoSW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVy
czo6YTApOwogCiAgICAgLy8gQ2FsbAotICAgIGNhbGwoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjph
MiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4
ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICAvLyBHZXQgcmV0dXJu
ZWQgdmFsdWUgZnJvbSAwKCR2MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZVJlZ2lzdGVyLCAwKSwgcmV0dXJuVmFsdWVSZWdpc3Rl
cik7CkBAIC01MzUsNyArNTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluayA9IHRyYW1w
b2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwogICAgIHRyYW1w
b2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxD
YWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBv
bGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5l
cy0+Y3RpTmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklU
Q29kZShKSVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZl
Q2FsbFRodW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9s
aW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1J
WkVfTU9EKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZp
bmFsQ29kZSwgc29mdE1vZEJlZ2luKTsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKElu
c3RyCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpJVDo6c3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0yOTgsNyAr
Mjk4LDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAgIGpp
dC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wpOwot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2Nv
ZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+
anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRodW5r
KHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCku
YWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gSklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQog
ewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTgw
LDcgKzgwLDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAg
IGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wp
OwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5t
X2NvZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0
YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkuYWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdl
dFRodW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1
OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0MDQsMTMgKzM0MDQsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpzcGVjaWFsaXplZFRodW5rKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6c3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8VGh1bmtNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRy
eSA9IG1fdGh1bmtNYXAuYWRkKGdlbmVyYXRvciwgMCk7Ci0gICAgaWYgKCFlbnRyeS5zZWNvbmQp
Ci0gICAgICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwotICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQo
KSk7Ci0gICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CisgICAgc3RkOjpwYWly
PFRodW5rTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX3RodW5rTWFwLmFkZChnZW5lcmF0
b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKQorICAg
ICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCkpOworICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1OTYy
MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpVmlydHVhbENvbnN0cnVjdExpbms7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlWaXJ0dWFsQ2FsbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1
YWxDb25zdHJ1Y3Q7Ci0gICAgICAgIFJlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBjdGlOYXRpdmVD
YWxsVGh1bms7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbzsKICAgICB9OwogCkBA
IC0yNzksMTIgKzI3OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgeyByZXR1cm4gbV90cmFtcG9saW5l
U3RydWN0dXJlLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rOyB9CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVy
ZS5jdGlWaXJ0dWFsQ2FsbDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmly
dHVhbENvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlWaXJ0dWFs
Q29uc3RydWN0OyB9Ci0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGN0aU5hdGl2ZUNhbGxUaHVu
aygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDYWxsVGh1bmsuZ2V0
KCk7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoKSB7IHJl
dHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ2FsbDsgfQogICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0
cnVjdHVyZS5jdGlTb2Z0TW9kdWxvOyB9CiAKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogc3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcGVjaWFsaXplZFRodW5r
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKICAg
ICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIFJlZlB0
cjxOYXRpdmVFeGVjdXRhYmxlPiA+IFRodW5rTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA+IFRodW5rTWFwOwogICAgICAg
ICBUaHVua01hcCBtX3RodW5rTWFwOwogICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1f
ZXhlY3V0YWJsZVBvb2w7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRo
dW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZpbmFsaXplKCkKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGZpbmFsaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX3Bvb2wuZ2V0KCkpOwotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmpp
dFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFk
ZHJlc3NGb3JDYWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZl
RXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSkpOworICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEt
PmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKSkpOworICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2
YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNp
YWxpemVkVGh1bgogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAg
ICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2
ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgpOwogfQog
Ci1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzksNyArNzks
NyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICAv
LyBsb2FkIGNoYXIgY29kZQpAQCAtODksMTIgKzg5LDEyIEBAIFBhc3NSZWZQdHI8TmF0aXZlRXhl
Y3V0YWJsZT4gZnJvbUNoYXJDb2QKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCk7CiB9CiAKLVBh
c3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBp
ZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKTsKIAogICAgIGppdC5sb2FkRG91Ymxl
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpAQCAtMTAyLDE5ICsxMDIsMTkg
QEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBzcXJ0VGh1bmtHZQogICAgIHJldHVybiBq
aXQuZmluYWxpemUoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBvb2wpOwotICAgIHJldHVy
biBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2FsbCgpOwogI2VuZGlmCiB9CiAKIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5l
Z2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgyLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxU
aHVuaygpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2Fs
bCgpOwogCiAgICAgaml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QxKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTE1MCw3
ICsxNTAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2VuCiAgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocG9vbCk7Ci0g
ICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpOworICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gNTk2MjIp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDE5ICsyNywxOCBAQAogI2RlZmluZSBUaHVua0dlbmVyYXRvcnNfaAogCiAjaWYgRU5B
QkxFKEpJVCkKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCiBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAg
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7
CiAKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gKCpUaHVua0dlbmVy
YXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBQYXNzUmVmUHRyPE5h
dGl2ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBF
eGVjdXRhYmxlUG9vbCopOwotICAgIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gY2hhckF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBQYXNz
UmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRh
YmxlPiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
LSAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgKCpUaHVua0dlbmVyYXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNo
YXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOwogfQogI2VuZGlmCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEV4ZWN1dGFibGVf
aAogI2RlZmluZSBFeGVjdXRhYmxlX2gKIAorI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTm9k
ZXMuaCIKQEAgLTkwLDIxICs5MSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgotICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2Uo
TlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmF0aXZl
RXhlY3V0YWJsZT4gY3JlYXRlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0aHVuaywgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwg
PSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1faml0
Q29kZUZvckNhbGw7Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBleGVjLT5n
bG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1faml0Q29kZUZvckNh
bGw7IC8vIEZJWE1FOiB0aGlzIHRodW5rIHNob3VsZCBoYXZlIGEgY29uc3RydWN0IGZvcm0KKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShKSVRDb2RlOjpI
b3N0RnVuY3Rpb24odGh1bmspLCBmdW5jdGlvbikpOwogICAgICAgICB9Ci0gICAgICAgIE5hdGl2
ZUV4ZWN1dGFibGUoSklUQ29kZSB0aHVuaykKKworICAgICAgICB+TmF0aXZlRXhlY3V0YWJsZSgp
OworCisgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlv
bjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZShKSVRDb2RlIHRo
dW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJh
c2UoTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgICAgICwgbV9mdW5jdGlvbihmdW5j
dGlvbikKICAgICAgICAgewogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IHRodW5rOwog
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gdGh1bms7CiAgICAgICAgIH0KIAot
ICAgICAgICB+TmF0aXZlRXhlY3V0YWJsZSgpOworICAgICAgICBOYXRpdmVGdW5jdGlvbiBtX2Z1
bmN0aW9uOwogICAgIH07CiAjZW5kaWYKIApAQCAtNDAzLDYgKzQxMCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKTsKICAg
ICB9CiAKKyAgICBpbmxpbmUgTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uKCkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KG1fZXhlY3V0YWJsZS5nZXQoKSkt
PmZ1bmN0aW9uKCk7CisgICAgfQogfQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNyArNTMsMTggQEAgYm9v
bCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZQogSlNGdW5jdGlvbjo6SlNGdW5j
dGlvbihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKICAgICA6IEJhc2Uo
c3RydWN0dXJlKQogICAgICwgbV9leGVjdXRhYmxlKGFkb3B0UmVmKG5ldyBWUHRySGFja0V4ZWN1
dGFibGUoKSkpCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkpCiB7CiB9CiAKLUpT
RnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
TmF0aXZlRXhlY3V0YWJsZSogdGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCitKU0Z1bmN0aW9u
OjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFBhc3NSZWZQ
dHI8TmF0aXZlRXhlY3V0YWJsZT4gdGh1bmspCiAgICAgOiBCYXNlKCZleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwgbmFtZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9leGVjdXRhYmxl
KHRodW5rKQogI2VuZGlmCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkpCiB7CiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBzZXROYXRpdmVGdW5jdGlvbihmdW5jKTsKICAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odGh1bmspOwpAQCAtNzYsMTEgKzc3LDExIEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCAKIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBO
b25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICA6IEJhc2UoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBuYW1lKQogI2lmIEVOQUJMRShKSVQpCi0gICAgLCBt
X2V4ZWN1dGFibGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVu
aygpKQorICAgICwgbV9leGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKS5nZXROYXRpdmVFeGVj
dXRhYmxlKGZ1bmMpKQogI2VuZGlmCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzZXROYXRpdmVGdW5jdGlvbihmdW5jKTsKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0obGVuZ3RoKTsKQEAgLTkyLDggKzkzLDggQEAgSlNGdW5jdGlvbjo6SlNGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIAogSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIE5vbk51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZXhlY3V0YWJsZSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgIDogQmFzZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGV4
ZWN1dGFibGUtPm5hbWUoKSkKICAgICAsIG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgICwg
bV9zY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIHNldFNjb3BlQ2hhaW4oc2NvcGVD
aGFpbk5vZGUpOwogfQogCiBKU0Z1bmN0aW9uOjp+SlNGdW5jdGlvbigpCkBAIC0xMTEsNyArMTEy
LDYgQEAgSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgICAgICBpZiAoanNFeGVjdXRhYmxl
KCktPmlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkpCiAgICAgICAgICAgICBqc0V4ZWN1dGFibGUo
KS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QoKS51bmxpbmtDYWxsZXJzKCk7CiAjZW5k
aWYKLSAgICAgICAgc2NvcGVDaGFpbigpLn5TY29wZUNoYWluKCk7IC8vIEZJWE1FOiBEb24ndCB3
ZSBuZWVkIHRvIGRvIHRoaXMgaW4gdGhlIGludGVycHJldGVyIHRvbz8KICAgICB9CiB9CiAKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpTRnVuY3Rpb246Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
CiAgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAgICAgaWYgKCFpc0hvc3RGdW5j
dGlvbigpKSB7CiAgICAgICAgIGpzRXhlY3V0YWJsZSgpLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFj
ayk7Ci0gICAgICAgIHNjb3BlQ2hhaW4oKS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CisgICAg
ICAgIHNjb3BlKCkubWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIH0KIH0KIApAQCAtMTMx
LDE0ICsxMzEsMTQgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdAog
ICAgICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogICAgIH0KICAgICBjYWxsRGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUgPSBqc0V4ZWN1dGFibGUoKTsKLSAgICBjYWxsRGF0YS5qcy5zY29wZUNo
YWluID0gc2NvcGVDaGFpbigpLm5vZGUoKTsKKyAgICBjYWxsRGF0YS5qcy5zY29wZUNoYWluID0g
c2NvcGUoKS5ub2RlKCk7CiAgICAgcmV0dXJuIENhbGxUeXBlSlM7CiB9CiAKIEpTVmFsdWUgSlNG
dW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0
dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVDYWxsKGpzRXhlY3V0YWJsZSgpLCBleGVj
LCB0aGlzLCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLCBhcmdzLCBzY29wZUNoYWluKCku
bm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIHJldHVybiBleGVjLT5pbnRlcnBy
ZXRlcigpLT5leGVjdXRlQ2FsbChqc0V4ZWN1dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVl
LnRvVGhpc09iamVjdChleGVjKSwgYXJncywgc2NvcGUoKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlv
blNsb3QoKSk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCkBAIC0xNzEs
NyArMTcxLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlYwogICAg
ICAgICBKU1ZhbHVlKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7
CiAKICAgICAgICAgaWYgKCFsb2NhdGlvbikgewotICAgICAgICAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc2NvcGVDaGFpbigpLmdsb2JhbE9iamVjdCgpLT5l
bXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBuZXcgKGV4ZWMpIEpTT2JqZWN0KHNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB0aGlzLCBEb250RW51bSk7CiAgICAgICAgICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250
RGVsZXRlKTsKICAgICAgICAgICAgIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVy
dHlOYW1lKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBDb25zdHJ1Y3RUeXBlIEpTRnVuY3Rpb246Omdl
dENvbnN0cnVjdERhCiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlTm9uZTsKICAgICBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IGpzRXhlY3V0YWJsZSgpOwotICAgIGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFpbiA9IHNj
b3BlQ2hhaW4oKS5ub2RlKCk7CisgICAgY29uc3RydWN0RGF0YS5qcy5zY29wZUNoYWluID0gc2Nv
cGUoKS5ub2RlKCk7CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVKUzsKIH0KIApAQCAtMjc5LDcg
KzI3OSw3IEBAIEpTT2JqZWN0KiBKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXQKICAgICAg
ICAgc3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0
cnVjdHVyZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gbmV3IChleGVjKSBKU09iamVjdChz
dHJ1Y3R1cmUpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5l
eGVjdXRlQ29uc3RydWN0KGpzRXhlY3V0YWJsZSgpLCBleGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdz
LCBzY29wZUNoYWluKCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVjdChqc0V4ZWN1
dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc2NvcGUoKS5ub2RlKCksIGV4ZWMt
PmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1
bHQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRoaXNPYmo7CiAgICAgcmV0dXJuIGFzT2Jq
ZWN0KHJlc3VsdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNp
b24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTUgKzQzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGlj
OgogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVj
dHVyZT4sIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7Ci0g
ICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBOYXRp
dmVGdW5jdGlvbik7CisgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgTm9uTnVsbFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIFBhc3NSZWZQ
dHI8TmF0aXZlRXhlY3V0YWJsZT4pOwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5v
bk51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4sIFNjb3BlQ2hhaW5Ob2RlKik7CiAg
ICAgICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICBKU09iamVjdCogY29uc3Ry
dWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKLSAgICAgICAg
dm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluKSB7IHNldFNjb3BlQ2hh
aW4oc2NvcGVDaGFpbik7IH0KLSAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBz
Y29wZUNoYWluKCk7IH0KKyAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fc2NvcGVDaGFpbjsKKyAgICAgICAgfQogCiAgICAgICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CiAK
QEAgLTY2LDEwICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOyAKICAgICAgICAgfQogCi0gICAgICAgIE5hdGl2
ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpXVEY6OmJpdHdpc2VfY2FzdDxOYXRpdmVGdW5jdGlvbio+KG1fZGF0YSk7Ci0gICAgICAgIH0K
KyAgICAgICAgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24oKTsKIAogICAgICAgICB2aXJ0
dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAg
ICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKQEAgLTk3LDMxICs5
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAgICAgIFJl
ZlB0cjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotICAgICAgICBTY29wZUNoYWluJiBz
Y29wZUNoYWluKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlv
bk5vbklubGluZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAqV1RGOjpiaXR3aXNlX2Nhc3Q8U2Nv
cGVDaGFpbio+KG1fZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBjbGVhclNjb3BlQ2hh
aW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5s
aW5lKCkpOwotICAgICAgICAgICAgbmV3IChtX2RhdGEpIFNjb3BlQ2hhaW4oTm9TY29wZUNoYWlu
KCkpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0U2NvcGVDaGFpbihTY29wZUNoYWluTm9k
ZSogc2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25J
bmxpbmUoKSk7Ci0gICAgICAgICAgICBuZXcgKG1fZGF0YSkgU2NvcGVDaGFpbihzYyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluKGNvbnN0IFNjb3BlQ2hhaW4mIHNjKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkp
OwotICAgICAgICAgICAgKldURjo6Yml0d2lzZV9jYXN0PFNjb3BlQ2hhaW4qPihtX2RhdGEpID0g
c2M7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXROYXRpdmVGdW5jdGlvbihOYXRpdmVGdW5j
dGlvbiBmdW5jKQotICAgICAgICB7Ci0gICAgICAgICAgICAqV1RGOjpiaXR3aXNlX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24qPihtX2RhdGEpID0gZnVuYzsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25l
ZCBjaGFyIG1fZGF0YVtzaXplb2Yodm9pZCopXTsKKyAgICAgICAgU2NvcGVDaGFpbiBtX3Njb3Bl
Q2hhaW47CiAgICAgfTsKIAogICAgIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZSk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA1OTYy
MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUzLDYgKzI1MywyNCBAQCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBKU0ds
b2JhbERhdGE6CiAgICAgcmV0dXJuIGxhenlOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOwogfQogCitQ
YXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpTR2xvYmFsRGF0YTo6Z2V0TmF0aXZlRXhlY3V0
YWJsZShOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBzdGQ6OnBhaXI8TmF0aXZlRXhl
Y3V0YWJsZU1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9uYXRpdmVFeGVjdXRhYmxlTWFw
LmFkZChmdW5jdGlvbiwgMCk7CisgICAgaWYgKGVudHJ5LnNlY29uZCkKKyAgICAgICAgZW50cnku
Zmlyc3QtPnNlY29uZCA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZShqaXRTdHVicy5jdGlOYXRp
dmVDYWxsKCksIGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKK30K
KworI2lmIEVOQUJMRShKSVQpCitQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpTR2xvYmFs
RGF0YTo6Z2V0TmF0aXZlRXhlY3V0YWJsZShOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIHN0ZDo6cGFpcjxOYXRpdmVFeGVjdXRhYmxlTWFw
OjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX25hdGl2ZUV4ZWN1dGFibGVNYXAuYWRkKGZ1bmN0
aW9uLCAwKTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKQorICAgICAgICBlbnRyeS5maXJzdC0+c2Vj
b25kID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKGdldFRodW5rKGdlbmVyYXRvciksIGZ1bmN0
aW9uKTsKKyAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKK30KKyNlbmRpZgorCiBKU0ds
b2JhbERhdGE6OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKIHsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsK
ICNpZiBFTkFCTEUoSklUKQogICAgICAgICBKSVRUaHVua3Mgaml0U3R1YnM7Ci0gICAgICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGdldFRodW5rKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldFRodW5rKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLnNwZWNpYWxpemVkVGh1
bmsodGhpcywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQpAQCAtMTc5LDYgKzE3OSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVGVybWluYXRvciB0ZXJtaW5hdG9yOwogICAgICAgICBIZWFw
IGhlYXA7CiAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9uLCBSZWZQdHI8
TmF0aXZlRXhlY3V0YWJsZT4gPiBOYXRpdmVFeGVjdXRhYmxlTWFwOworICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlTWFwIG1fbmF0aXZlRXhlY3V0YWJsZU1hcDsKKyAgICAgICAgUGFzc1JlZlB0cjxO
YXRpdmVFeGVjdXRhYmxlPiBnZXROYXRpdmVFeGVjdXRhYmxlKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uKTsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFi
bGU+IGdldE5hdGl2ZUV4ZWN1dGFibGUoTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcik7CisjZW5kaWYKKwogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsK
ICNpZiBFTkFCTEUoSklUKQogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0
aW9uOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gNTk2MjIpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKIAor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIKIApAQCAtNzcsNyArNzgsNyBAQCB2b2lkIHNldFVwU3Rh
dGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1
bmN0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGlmIChlbnRyeS0+Z2VuZXJhdG9yKCkp
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVy
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZXhlYy0+Z2xv
YmFsRGF0YSgpLmdldFRodW5rKGVudHJ5LT5nZW5lcmF0b3IoKSksIGVudHJ5LT5mdW5jdGlvbigp
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBw
ZXIoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5n
bG9iYWxEYXRhKCkuZ2V0TmF0aXZlRXhlY3V0YWJsZShlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnkt
PmdlbmVyYXRvcigpKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgZnVuY3Rp
b24gPSBuZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5j
dGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1
OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIKQEAgLTU1LDcg
KzU3LDcgQEAgU3RyaW5nQ29uc3RydWN0b3I6OlN0cmluZ0NvbnN0cnVjdG9yKEV4ZQogCiAgICAg
Ly8gRUNNQSAxNS41LjMuMiBmcm9tQ2hhckNvZGUoKQogI2lmIEVOQUJMRShKSVQpCi0gICAgcHV0
RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIE5hdGl2ZUZ1
bmN0aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmZyb21DaGFyQ29kZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldFRodW5r
KGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKSwgc3RyaW5nRnJvbUNoYXJDb2RlKSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChl
eGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5mcm9tQ2hhckNvZGUsIGV4ZWMtPmdsb2JhbERh
dGEoKS5nZXROYXRpdmVFeGVjdXRhYmxlKHN0cmluZ0Zyb21DaGFyQ29kZSwgZnJvbUNoYXJDb2Rl
VGh1bmtHZW5lcmF0b3IpKSwgRG9udEVudW0pOwogI2Vsc2UKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVy
KGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZnJvbUNoYXJDb2RlLCBzdHJpbmdGcm9tQ2hhckNvZGUpLCBEb250RW51bSk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56302</attachid>
            <date>2010-05-17 18:33:04 -0700</date>
            <delta_ts>2010-05-17 19:31:38 -0700</delta_ts>
            <desc>Fix WebCore build.</desc>
            <filename>patch.hostscope.3.txt</filename>
            <type>text/plain</type>
            <size>44454</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NjMzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTAtMDUtMTcgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAzOTI1MiAtIE1vdmUgaG9zdC9uYXRpdmUg
SlNGdW5jdGlvbidzIE5hdGl2ZUZ1bmN0aW9uIG9udG8gTmF0aXZlRXhlY3V0YWJsZS4KKworICAg
ICAgICBDdXJyZW50bHkgaG9zdCBmdW5jdGlvbnMgcmV1c2UgSlNGdW5jdGlvbidzIFNjb3BlQ2hh
aW4gYXMgc3RvcmFnZSBmb3IgdGhlaXIKKyAgICAgICAgTmF0aXZlRnVuY3Rpb24gKHRoZSBDIGZ1
bmN0aW9uIHBvaW50ZXIgdG8gdGhlIGhvc3QgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24pLgorICAg
ICAgICBJbnN0ZWFkLCBtb3ZlIHRoaXMgb250byBOYXRpdmVFeGVjdXRhYmxlLiAgVGhpcyB3aWxs
IGFsbG93IGhvc3QgZnVuY3Rpb25zIHRvCisgICAgICAgIGhhdmUgYSBzY29wZWNoYWluICh3aGlj
aCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIGEgc2VwYXJhdGUgcGF0Y2gpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OnNwZWNpYWxpemVkVGh1bmspOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAg
ICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwpOgorICAgICAgICAqIGppdC9TcGVj
aWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZp
bmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246Om5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0
YSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6c2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6Z2V0VGh1bmspOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1
Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IpOgorCiAyMDEwLTA1LTE3ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21i
b3MuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjIyLDYgKzIyMiw5IEBACiAJCTg2Qjk5QUUzMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJp
bmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI5OUFFNDExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IH07CisJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwICovOyB9OworCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkM1NjhERTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggKi87IH07CisJ
CTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oICovOyB9OwogCQk4NkNBMDMyRTEwMzhFODQ0MDAyOEE2MDkg
LyogRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkNBMDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi87IH07
CiAJCTg2Q0FGRUUzMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNBRkVFMjEwMzVEREU2MDAyOEE2
MDkgLyogRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CiAJCTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMDBFRTc5QTQ3
MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oICovOyB9OwpAQCAtNzc3LDYgKzc4MCw5IEBA
CiAJCTg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmlu
Z0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMjExN0U1Nzgx
MDBERjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3RyaW5nSW1wbEJhc2UuaDsgcGF0aCA9IHRleHQvU3RyaW5nSW1wbEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1h
Y3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OEREMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJNSVBTLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1JUFNB
c3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQTAzMkQxMDM4RTg0
NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NCwxMiArMTc5MCwxNSBAQAogCQkJCTg2RTExNkIwMEZF
NzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovLAogCQkJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1
OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovLAorCQkJCTg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi8sCiAJCQkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8sCiAJCQkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMy
IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLywKIAkJCQk4NjNCMjNERjBGQzYwRTYyMDA3MDNB
QTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8sCisJCQkJODZDNTY4REUxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovLAogCQkJCTg2MDE2MUUxMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovLAogCQkJCTg2MDE2MUUyMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovLAorCQkJCTg2QzU2OERG
MTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggKi8sCiAJCQkJODZEM0IzQzIxMDE1
OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRF
MDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi8sCiAJCQkpOwpAQCAtMjEzNiw2ICsyMTQ1LDgg
QEAKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2Vu
ZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8q
IENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTg2QzU2
OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI1ODgsNiArMjU5OSw3IEBACiAJCQkJQTc1NzA2REUxMThBMkJDRjAwNTdG
ODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI2QkVD
RjExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzEyMzZFNTExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDU5NjIyKQorKysg
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNl
cXVlbmNlQmVnaW47CiAjZW5kaWYKICNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
YXRpdmVFeGVjdXRhYmxlPiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7CisgICAgICAgIHN0YXRpYyBDb2Rl
UHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKTsKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAg
ICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYQogICAgIC8vIHJl
Z1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQKICAgICBzdG9yZTMyKHJlZ1Qx
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpICsgT0JKRUNU
X09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7IC8vIHNjb3BlQ2hhaW4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCByZWdUMSk7
IC8vIHNjb3BlQ2hhaW4KIAogICAgIGVtaXRTdG9yZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVn
aXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyksIEpTVmFsdWUoKSk7CiAgICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBjYWxsZWUKQEAg
LTM1MCw3ICszNTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgZW1pdFN0b3JlKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50cywgSlNWYWx1ZSgpKTsKICAgICBlbWl0U3RvcmUocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1QxKTsgLy8gbmV3U2NvcGVDaGFpbgor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1Qx
KTsgLy8gbmV3U2NvcGVDaGFpbgogICAgIHN0b3JlMzIoSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVn
aXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTQzNCw3ICs0MzQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhCiB7CiAgICAgc3Rv
cmUzMihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRh
KSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdT
Y29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25v
ZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAKICAgICBzdG9yZVB0cihJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb21pdHMgdG8gc2V0IHVwIFJl
Z2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBzZXQgaW4gdGhlIGNhbGxlZQogICAgIHN0
b3JlUHRyKEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAg
IHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwg
cmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihT
Y29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAgICAgc3RvcmUz
MihJbW0zMihhcmdDb3VudCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSwxNCArMzA5LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICAvLyBQbGFudCBjYWxsZnJhbWUKICAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKLSAgICBjYWxsKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICBjYWxs
KEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRh
YmxlLCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgLy8gSlNWYWx1ZSBpcyBhIG5vbi1QT0QgdHlwZSwg
c28gZWF4IHBvaW50cyB0byBpdAogICAgIGVtaXRMb2FkKDAsIHJlZ1QxLCByZWdUMCwgWDg2UmVn
aXN0ZXJzOjplYXgpOwogI2Vsc2UKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplZHgpOyAvLyBjYWxsZWUKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7IC8vIGNhbGxGcmFtZQot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM3Myw3ICszNzUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgLy8gU2V0dXAgYXJnMDoKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7CiAKLSAgICBjYWxsKEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsK
KyAgICBjYWxsKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxl
LCBtX2Z1bmN0aW9uKSkpOwogCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIDApLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDQpLCByZWdUMSk7CkBAIC00MDEsNyArNDA0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEpOwogCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CisgICAgY2Fs
bChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5j
dGlvbikpKTsKIAogICAgIC8vIExvYWQgcmV0dXJuIHZhbHVlCiAgICAgbG9hZDMyKEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDApOwpAQCAtNDc2LDcgKzQ4MCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIHRyYW1wb2xpbmVz
LT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDYWxsQmVn
aW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBvbGluZUF0
KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
TmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklUQ29kZShK
SVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRo
dW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9saW5lQXQo
ZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJP
UEVSVFlfQUNDRVNTKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5l
ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOwogI2VuZGlmCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1
OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWRpKTsgCiAKLSAgICBjYWxsKEFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2Rh
dGEpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6cjkpOworICAg
IGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OnI5LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhl
Y3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKICAgICAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgQ1BVKFg4NikKQEAgLTMzNyw3
ICszMzgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAg
Ly8gUGxhbnQgY2FsbGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0
ZXJzOjplZHgpOwogCi0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODZS
ZWdpc3RlcnM6OmVheCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCBYODZSZWdpc3RlcnM6OmVieCk7CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJ4
LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKIAogICAg
IC8vIEpTVmFsdWUgaXMgYSBub24tUE9EIHR5cGUKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplYXgpLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0zNDcsNyArMzQ5LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogCiAgICAgLy8gUGxhbnQgY2Fs
bGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwot
ICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJz
OjplYngpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAjZW5kaWYKIAogICAgIC8vIFdl
J3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8gdGhl
IGFjdHVhbCBhcmd1bWVudHMKQEAgLTM5NSw3ICszOTgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgc3ViUHRyKEltbTMyKHNpemVvZihSZWdpc3Rlcikp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKIAotICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDMpOworICAg
IGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1f
ZnVuY3Rpb24pKSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CiAKQEAg
LTQxMyw3ICs0MTcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgLy8gU2V0dXAgYXJnNDogVGhpcyBpcyBhIHBsYWluIGhhY2sKICAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBBUk1SZWdpc3RlcnM6OnIzKTsKIAotICAgIGNhbGwoQWRkcmVzcyhy
ZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUp
KSwgcmVnVDMpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKE5hdGl2
ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8vIE9TKFdJTkNFKQpAQCAt
NDYwLDcgKzQ2NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8K
ICAgICBhZGRQdHIoSW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVy
czo6YTApOwogCiAgICAgLy8gQ2FsbAotICAgIGNhbGwoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjph
MiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4
ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CiAKICAgICAvLyBHZXQgcmV0dXJu
ZWQgdmFsdWUgZnJvbSAwKCR2MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZVJlZ2lzdGVyLCAwKSwgcmV0dXJuVmFsdWVSZWdpc3Rl
cik7CkBAIC01MzUsNyArNTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluayA9IHRyYW1w
b2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwogICAgIHRyYW1w
b2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxD
YWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBv
bGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKLSAgICB0cmFtcG9saW5l
cy0+Y3RpTmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklU
Q29kZShKSVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZl
Q2FsbFRodW5rKSkpKSk7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFtcG9s
aW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwogI2lmIEVOQUJMRShKSVRfT1BUSU1J
WkVfTU9EKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZp
bmFsQ29kZSwgc29mdE1vZEJlZ2luKTsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKElu
c3RyCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpJVDo6c3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0yOTgsNyAr
Mjk4LDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAgIGpp
dC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wpOwot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2Nv
ZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+
anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRodW5r
KHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCku
YWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gSklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQog
ewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTgw
LDcgKzgwLDcgQEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVQ6OnN0cmluZwogICAg
IGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCZqaXQsIHBvb2wp
OwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKSkpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5t
X2NvZGU7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0
YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldFRo
dW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkuYWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdl
dFRodW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOwogICAgIEp1bXAgZmFpbGVkID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X3ZhbCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1
OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0MDQsMTMgKzM0MDQsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpzcGVjaWFsaXplZFRodW5rKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6c3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8VGh1bmtNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRy
eSA9IG1fdGh1bmtNYXAuYWRkKGdlbmVyYXRvciwgMCk7Ci0gICAgaWYgKCFlbnRyeS5zZWNvbmQp
Ci0gICAgICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwotICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQo
KSk7Ci0gICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CisgICAgc3RkOjpwYWly
PFRodW5rTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX3RodW5rTWFwLmFkZChnZW5lcmF0
b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKQorICAg
ICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCkpOworICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1OTYy
MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpVmlydHVhbENvbnN0cnVjdExpbms7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlWaXJ0dWFsQ2FsbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1
YWxDb25zdHJ1Y3Q7Ci0gICAgICAgIFJlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBjdGlOYXRpdmVD
YWxsVGh1bms7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbzsKICAgICB9OwogCkBA
IC0yNzksMTIgKzI3OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgeyByZXR1cm4gbV90cmFtcG9saW5l
U3RydWN0dXJlLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rOyB9CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVy
ZS5jdGlWaXJ0dWFsQ2FsbDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmly
dHVhbENvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlWaXJ0dWFs
Q29uc3RydWN0OyB9Ci0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGN0aU5hdGl2ZUNhbGxUaHVu
aygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDYWxsVGh1bmsuZ2V0
KCk7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoKSB7IHJl
dHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ2FsbDsgfQogICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0
cnVjdHVyZS5jdGlTb2Z0TW9kdWxvOyB9CiAKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogc3Bl
Y2lhbGl6ZWRUaHVuayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcGVjaWFsaXplZFRodW5r
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKICAg
ICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIFJlZlB0
cjxOYXRpdmVFeGVjdXRhYmxlPiA+IFRodW5rTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA+IFRodW5rTWFwOwogICAgICAg
ICBUaHVua01hcCBtX3RodW5rTWFwOwogICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1f
ZXhlY3V0YWJsZVBvb2w7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRo
dW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZpbmFsaXplKCkKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGZpbmFsaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX3Bvb2wuZ2V0KCkpOwotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmpp
dFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFk
ZHJlc3NGb3JDYWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZl
RXhlY3V0YWJsZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSkpOworICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEt
PmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKSkpOworICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2
YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDU5NjIyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNp
YWxpemVkVGh1bgogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAg
ICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2
ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgpOwogfQog
Ci1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwpAQCAtNzksNyArNzks
NyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGNoYXJBdFRodW5rCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKIHsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICAv
LyBsb2FkIGNoYXIgY29kZQpAQCAtODksMTIgKzg5LDEyIEBAIFBhc3NSZWZQdHI8TmF0aXZlRXhl
Y3V0YWJsZT4gZnJvbUNoYXJDb2QKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCk7CiB9CiAKLVBh
c3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBp
ZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGwoKTsKIAogICAgIGppdC5sb2FkRG91Ymxl
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpAQCAtMTAyLDE5ICsxMDIsMTkg
QEAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxlPiBzcXJ0VGh1bmtHZQogICAgIHJldHVybiBq
aXQuZmluYWxpemUoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBvb2wpOwotICAgIHJldHVy
biBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKTsKKyAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2FsbCgpOwogI2VuZGlmCiB9CiAKIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5l
Z2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKIAotUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRhYmxl
PiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCiB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkgfHwgVVNFKEpTVkFMVUUzMl82NCkKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgyLCBnbG9iYWxEYXRhLCBwb29sKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxU
aHVuaygpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2Fs
bCgpOwogCiAgICAgaml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QxKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTE1MCw3
ICsxNTAsNyBAQCBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2VuCiAgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocG9vbCk7Ci0g
ICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVuaygpOworICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gNTk2MjIp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDE5ICsyNywxOCBAQAogI2RlZmluZSBUaHVua0dlbmVyYXRvcnNfaAogCiAjaWYgRU5B
QkxFKEpJVCkKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCiBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAg
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7
CiAKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gKCpUaHVua0dlbmVy
YXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBQYXNzUmVmUHRyPE5h
dGl2ZUV4ZWN1dGFibGU+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBF
eGVjdXRhYmxlUG9vbCopOwotICAgIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gY2hhckF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBQYXNz
UmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgUGFzc1JlZlB0cjxOYXRpdmVFeGVjdXRh
YmxlPiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
LSAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IHBvd1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgKCpUaHVua0dlbmVyYXRvcikoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNo
YXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOwogfQogI2VuZGlmCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiA1OTYyMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEV4ZWN1dGFibGVf
aAogI2RlZmluZSBFeGVjdXRhYmxlX2gKIAorI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTm9k
ZXMuaCIKQEAgLTkwLDIxICs5MSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgotICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2Uo
TlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmF0aXZl
RXhlY3V0YWJsZT4gY3JlYXRlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0aHVuaywgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwg
PSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1faml0
Q29kZUZvckNhbGw7Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBleGVjLT5n
bG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1faml0Q29kZUZvckNh
bGw7IC8vIEZJWE1FOiB0aGlzIHRodW5rIHNob3VsZCBoYXZlIGEgY29uc3RydWN0IGZvcm0KKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0YWJsZShKSVRDb2RlOjpI
b3N0RnVuY3Rpb24odGh1bmspLCBmdW5jdGlvbikpOwogICAgICAgICB9Ci0gICAgICAgIE5hdGl2
ZUV4ZWN1dGFibGUoSklUQ29kZSB0aHVuaykKKworICAgICAgICB+TmF0aXZlRXhlY3V0YWJsZSgp
OworCisgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlv
bjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZShKSVRDb2RlIHRo
dW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJh
c2UoTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgICAgICwgbV9mdW5jdGlvbihmdW5j
dGlvbikKICAgICAgICAgewogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IHRodW5rOwog
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gdGh1bms7CiAgICAgICAgIH0KIAot
ICAgICAgICB+TmF0aXZlRXhlY3V0YWJsZSgpOworICAgICAgICBOYXRpdmVGdW5jdGlvbiBtX2Z1
bmN0aW9uOwogICAgIH07CiAjZW5kaWYKIApAQCAtNDAzLDYgKzQxMCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKTsKICAg
ICB9CiAKKyAgICBpbmxpbmUgTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uKCkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KG1fZXhlY3V0YWJsZS5nZXQoKSkt
PmZ1bmN0aW9uKCk7CisgICAgfQogfQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNyArNTMsMTggQEAgYm9v
bCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZQogSlNGdW5jdGlvbjo6SlNGdW5j
dGlvbihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKICAgICA6IEJhc2Uo
c3RydWN0dXJlKQogICAgICwgbV9leGVjdXRhYmxlKGFkb3B0UmVmKG5ldyBWUHRySGFja0V4ZWN1
dGFibGUoKSkpCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkpCiB7CiB9CiAKLUpT
RnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
TmF0aXZlRXhlY3V0YWJsZSogdGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCitKU0Z1bmN0aW9u
OjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFBhc3NSZWZQ
dHI8TmF0aXZlRXhlY3V0YWJsZT4gdGh1bmspCiAgICAgOiBCYXNlKCZleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwgbmFtZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9leGVjdXRhYmxl
KHRodW5rKQogI2VuZGlmCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkpCiB7CiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBzZXROYXRpdmVGdW5jdGlvbihmdW5jKTsKICAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odGh1bmspOwpAQCAtNzYsMTEgKzc3LDExIEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCAKIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBO
b25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICA6IEJhc2UoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBuYW1lKQogI2lmIEVOQUJMRShKSVQpCi0gICAgLCBt
X2V4ZWN1dGFibGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmppdFN0dWJzLmN0aU5hdGl2ZUNhbGxUaHVu
aygpKQorICAgICwgbV9leGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKS5nZXROYXRpdmVFeGVj
dXRhYmxlKGZ1bmMpKQogI2VuZGlmCisgICAgLCBtX3Njb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzZXROYXRpdmVGdW5jdGlvbihmdW5jKTsKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0obGVuZ3RoKTsKQEAgLTkyLDggKzkzLDggQEAgSlNGdW5jdGlvbjo6SlNGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIAogSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIE5vbk51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZXhlY3V0YWJsZSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgIDogQmFzZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGV4
ZWN1dGFibGUtPm5hbWUoKSkKICAgICAsIG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgICwg
bV9zY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIHNldFNjb3BlQ2hhaW4oc2NvcGVD
aGFpbk5vZGUpOwogfQogCiBKU0Z1bmN0aW9uOjp+SlNGdW5jdGlvbigpCkBAIC0xMTEsNyArMTEy
LDYgQEAgSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgICAgICBpZiAoanNFeGVjdXRhYmxl
KCktPmlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkpCiAgICAgICAgICAgICBqc0V4ZWN1dGFibGUo
KS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QoKS51bmxpbmtDYWxsZXJzKCk7CiAjZW5k
aWYKLSAgICAgICAgc2NvcGVDaGFpbigpLn5TY29wZUNoYWluKCk7IC8vIEZJWE1FOiBEb24ndCB3
ZSBuZWVkIHRvIGRvIHRoaXMgaW4gdGhlIGludGVycHJldGVyIHRvbz8KICAgICB9CiB9CiAKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpTRnVuY3Rpb246Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
CiAgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAgICAgaWYgKCFpc0hvc3RGdW5j
dGlvbigpKSB7CiAgICAgICAgIGpzRXhlY3V0YWJsZSgpLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFj
ayk7Ci0gICAgICAgIHNjb3BlQ2hhaW4oKS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CisgICAg
ICAgIHNjb3BlKCkubWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIH0KIH0KIApAQCAtMTMx
LDE0ICsxMzEsMTQgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdAog
ICAgICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogICAgIH0KICAgICBjYWxsRGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUgPSBqc0V4ZWN1dGFibGUoKTsKLSAgICBjYWxsRGF0YS5qcy5zY29wZUNo
YWluID0gc2NvcGVDaGFpbigpLm5vZGUoKTsKKyAgICBjYWxsRGF0YS5qcy5zY29wZUNoYWluID0g
c2NvcGUoKS5ub2RlKCk7CiAgICAgcmV0dXJuIENhbGxUeXBlSlM7CiB9CiAKIEpTVmFsdWUgSlNG
dW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0
dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVDYWxsKGpzRXhlY3V0YWJsZSgpLCBleGVj
LCB0aGlzLCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLCBhcmdzLCBzY29wZUNoYWluKCku
bm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIHJldHVybiBleGVjLT5pbnRlcnBy
ZXRlcigpLT5leGVjdXRlQ2FsbChqc0V4ZWN1dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVl
LnRvVGhpc09iamVjdChleGVjKSwgYXJncywgc2NvcGUoKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlv
blNsb3QoKSk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCkBAIC0xNzEs
NyArMTcxLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlYwogICAg
ICAgICBKU1ZhbHVlKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7
CiAKICAgICAgICAgaWYgKCFsb2NhdGlvbikgewotICAgICAgICAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc2NvcGVDaGFpbigpLmdsb2JhbE9iamVjdCgpLT5l
bXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBuZXcgKGV4ZWMpIEpTT2JqZWN0KHNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB0aGlzLCBEb250RW51bSk7CiAgICAgICAgICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250
RGVsZXRlKTsKICAgICAgICAgICAgIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVy
dHlOYW1lKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBDb25zdHJ1Y3RUeXBlIEpTRnVuY3Rpb246Omdl
dENvbnN0cnVjdERhCiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlTm9uZTsKICAgICBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IGpzRXhlY3V0YWJsZSgpOwotICAgIGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFpbiA9IHNj
b3BlQ2hhaW4oKS5ub2RlKCk7CisgICAgY29uc3RydWN0RGF0YS5qcy5zY29wZUNoYWluID0gc2Nv
cGUoKS5ub2RlKCk7CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVKUzsKIH0KIApAQCAtMjc5LDcg
KzI3OSw3IEBAIEpTT2JqZWN0KiBKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXQKICAgICAg
ICAgc3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0
cnVjdHVyZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gbmV3IChleGVjKSBKU09iamVjdChz
dHJ1Y3R1cmUpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5l
eGVjdXRlQ29uc3RydWN0KGpzRXhlY3V0YWJsZSgpLCBleGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdz
LCBzY29wZUNoYWluKCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVjdChqc0V4ZWN1
dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc2NvcGUoKS5ub2RlKCksIGV4ZWMt
PmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1
bHQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRoaXNPYmo7CiAgICAgcmV0dXJuIGFzT2Jq
ZWN0KHJlc3VsdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNp
b24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTUgKzQzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGlj
OgogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVj
dHVyZT4sIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7Ci0g
ICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBOYXRp
dmVGdW5jdGlvbik7CisgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgTm9uTnVsbFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIFBhc3NSZWZQ
dHI8TmF0aXZlRXhlY3V0YWJsZT4pOwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5v
bk51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4sIFNjb3BlQ2hhaW5Ob2RlKik7CiAg
ICAgICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICBKU09iamVjdCogY29uc3Ry
dWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKLSAgICAgICAg
dm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluKSB7IHNldFNjb3BlQ2hh
aW4oc2NvcGVDaGFpbik7IH0KLSAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBz
Y29wZUNoYWluKCk7IH0KKyAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fc2NvcGVDaGFpbjsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldFNjb3Bl
KGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CisgICAgICAgICAgICBtX3Njb3BlQ2hh
aW4gPSBzY29wZUNoYWluOworICAgICAgICB9CiAKICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0KIApAQCAtNjYs
MTAgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCk7IAogICAgICAgICB9CiAKLSAgICAgICAgTmF0aXZlRnVuY3Rp
b24gbmF0aXZlRnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKldURjo6
Yml0d2lzZV9jYXN0PE5hdGl2ZUZ1bmN0aW9uKj4obV9kYXRhKTsKLSAgICAgICAgfQorICAgICAg
ICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbigpOwogCiAgICAgICAgIHZpcnR1YWwgQ29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKICAgICAgICAgdmly
dHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpAQCAtOTcsMzEgKzEwMiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAgICAgIFJlZlB0cjxF
eGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotICAgICAgICBTY29wZUNoYWluJiBzY29wZUNo
YWluKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklu
bGluZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAqV1RGOjpiaXR3aXNlX2Nhc3Q8U2NvcGVDaGFp
bio+KG1fZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBjbGVhclNjb3BlQ2hhaW4oKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkp
OwotICAgICAgICAgICAgbmV3IChtX2RhdGEpIFNjb3BlQ2hhaW4oTm9TY29wZUNoYWluKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0U2NvcGVDaGFpbihTY29wZUNoYWluTm9kZSogc2Mp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUo
KSk7Ci0gICAgICAgICAgICBuZXcgKG1fZGF0YSkgU2NvcGVDaGFpbihzYyk7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluKGNvbnN0IFNjb3BlQ2hhaW4mIHNjKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwotICAg
ICAgICAgICAgKldURjo6Yml0d2lzZV9jYXN0PFNjb3BlQ2hhaW4qPihtX2RhdGEpID0gc2M7Ci0g
ICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXROYXRpdmVGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBm
dW5jKQotICAgICAgICB7Ci0gICAgICAgICAgICAqV1RGOjpiaXR3aXNlX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24qPihtX2RhdGEpID0gZnVuYzsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBjaGFy
IG1fZGF0YVtzaXplb2Yodm9pZCopXTsKKyAgICAgICAgU2NvcGVDaGFpbiBtX3Njb3BlQ2hhaW47
CiAgICAgfTsKIAogICAgIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA1OTYyMikKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUzLDYgKzI1MywyNCBAQCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBKU0dsb2JhbERh
dGE6CiAgICAgcmV0dXJuIGxhenlOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOwogfQogCitQYXNzUmVm
UHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpTR2xvYmFsRGF0YTo6Z2V0TmF0aXZlRXhlY3V0YWJsZShO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBzdGQ6OnBhaXI8TmF0aXZlRXhlY3V0YWJs
ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9uYXRpdmVFeGVjdXRhYmxlTWFwLmFkZChm
dW5jdGlvbiwgMCk7CisgICAgaWYgKGVudHJ5LnNlY29uZCkKKyAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZCA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZShqaXRTdHVicy5jdGlOYXRpdmVDYWxs
KCksIGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKK30KKworI2lm
IEVOQUJMRShKSVQpCitQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IEpTR2xvYmFsRGF0YTo6
Z2V0TmF0aXZlRXhlY3V0YWJsZShOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQoreworICAgIHN0ZDo6cGFpcjxOYXRpdmVFeGVjdXRhYmxlTWFwOjppdGVy
YXRvciwgYm9vbD4gZW50cnkgPSBtX25hdGl2ZUV4ZWN1dGFibGVNYXAuYWRkKGZ1bmN0aW9uLCAw
KTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKQorICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0g
TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKGdldFRodW5rKGdlbmVyYXRvciksIGZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKK30KKyNlbmRpZgorCiBKU0dsb2JhbERh
dGE6OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKIHsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICBKSVRUaHVua3Mgaml0U3R1YnM7Ci0gICAgICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGdldFRodW5rKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGdldFRodW5rKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLnNwZWNpYWxpemVkVGh1bmsodGhp
cywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQpAQCAtMTc5LDYgKzE3OSwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVGVybWluYXRvciB0ZXJtaW5hdG9yOwogICAgICAgICBIZWFwIGhlYXA7
CiAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9uLCBSZWZQdHI8TmF0aXZl
RXhlY3V0YWJsZT4gPiBOYXRpdmVFeGVjdXRhYmxlTWFwOworICAgICAgICBOYXRpdmVFeGVjdXRh
YmxlTWFwIG1fbmF0aXZlRXhlY3V0YWJsZU1hcDsKKyAgICAgICAgUGFzc1JlZlB0cjxOYXRpdmVF
eGVjdXRhYmxlPiBnZXROYXRpdmVFeGVjdXRhYmxlKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKTsK
KyNpZiBFTkFCTEUoSklUKQorICAgICAgICBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGdl
dE5hdGl2ZUV4ZWN1dGFibGUoTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcik7CisjZW5kaWYKKwogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gNTk2MjIpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIw
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKIAorI2luY2x1
ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUHJv
dG90eXBlRnVuY3Rpb24uaCIKIApAQCAtNzcsNyArNzgsNyBAQCB2b2lkIHNldFVwU3RhdGljRnVu
Y3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
OwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGlmIChlbnRyeS0+Z2VuZXJhdG9yKCkpCi0gICAg
ICAgICAgICBmdW5jdGlvbiA9IG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLmdldFRodW5rKGVudHJ5LT5nZW5lcmF0b3IoKSksIGVudHJ5LT5mdW5jdGlvbigpKTsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0TmF0aXZlRXhlY3V0YWJsZShlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnktPmdlbmVy
YXRvcigpKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgZnVuY3Rpb24gPSBu
ZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxl
bmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1OTYyMikK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U3RyaW5nQ29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRl
ICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIKQEAgLTU1LDcgKzU3LDcg
QEAgU3RyaW5nQ29uc3RydWN0b3I6OlN0cmluZ0NvbnN0cnVjdG9yKEV4ZQogCiAgICAgLy8gRUNN
QSAxNS41LjMuMiBmcm9tQ2hhckNvZGUoKQogI2lmIEVOQUJMRShKSVQpCi0gICAgcHV0RGlyZWN0
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9u
V3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmZyb21DaGFyQ29kZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldFRodW5rKGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKSwgc3RyaW5nRnJvbUNoYXJDb2RlKSwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBO
YXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5mcm9tQ2hhckNvZGUsIGV4ZWMtPmdsb2JhbERhdGEoKS5n
ZXROYXRpdmVFeGVjdXRhYmxlKHN0cmluZ0Zyb21DaGFyQ29kZSwgZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpKSwgRG9udEVudW0pOwogI2Vsc2UKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMs
IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZnJv
bUNoYXJDb2RlLCBzdHJpbmdGcm9tQ2hhckNvZGUpLCBEb250RW51bSk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="40706"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>