<?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>143253</bug_id>
          
          <creation_ts>2015-03-30 21:37:18 -0700</creation_ts>
          <short_desc>Content Extensions: split the state machines to minimize prefix states</short_desc>
          <delta_ts>2015-03-31 16:01:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1081559</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-30 21:37:18 -0700</bug_when>
    <thetext>Content Extensions: split the state machines to minimize prefix states</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081564</commentid>
    <comment_count>1</comment_count>
      <attachid>249800</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-30 22:02:53 -0700</bug_when>
    <thetext>Created attachment 249800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081569</commentid>
    <comment_count>2</comment_count>
      <attachid>249800</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-30 23:10:34 -0700</bug_when>
    <thetext>Comment on attachment 249800
Patch

Oops, I forgot a unrelated file in my xcodeproject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081741</commentid>
    <comment_count>3</comment_count>
      <attachid>249842</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-31 12:31:33 -0700</bug_when>
    <thetext>Created attachment 249842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081800</commentid>
    <comment_count>4</comment_count>
      <attachid>249842</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-31 15:34:35 -0700</bug_when>
    <thetext>Comment on attachment 249842
Patch

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

lgtm

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:62
&gt; +    Vector&lt;PrefixTreeVertex*, 128&gt; prefixTreeVerticesForPattern;

Why 128 here?  Is that just an arbitrary large number?  It&apos;s not related to the number of possible edges in one PrefixTreeVertex, right?

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:93
&gt; +    for (unsigned i = pattern.size(); i--;) {

This is beautiful.  I especially like the fact that it needs post decrement :)

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:125
&gt; +        ActiveNFASubtree&amp; activeSubtree = activeStack.last();
&gt; +        for (;activeSubtree.iterator != activeSubtree.vertex-&gt;edges.end(); ++activeSubtree.iterator) {

activeSubtree is not used outside of the for loop.  Why not put its declaration inside the loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081814</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-31 16:00:06 -0700</bug_when>
    <thetext>Committed r182211: &lt;http://trac.webkit.org/changeset/182211&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081816</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-31 16:01:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 249842 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249842&amp;action=review
&gt; 
&gt; lgtm
&gt; 
&gt; &gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:62
&gt; &gt; +    Vector&lt;PrefixTreeVertex*, 128&gt; prefixTreeVerticesForPattern;
&gt; 
&gt; Why 128 here?  Is that just an arbitrary large number?  It&apos;s not related to
&gt; the number of possible edges in one PrefixTreeVertex, right?

I made up that number :)

It is the length of the pattern. I figured 128 should be bigger than most patterns.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>249800</attachid>
            <date>2015-03-30 22:02:53 -0700</date>
            <delta_ts>2015-03-30 23:10:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143253-20150330220210.patch</filename>
            <type>text/plain</type>
            <size>80011</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTVmY2U1YzgwMWJkOGI1
NTU5NzExZWY0NDBmMTE1MDFlYTA4Mjc5OS4uNGU1NDk0ZTczYjMzNGRjZWE5NDVjODIzZWFjYjU0
NTE4YzEwMzFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNS0wMy0zMCAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBDb250ZW50IEV4
dGVuc2lvbnM6IHNwbGl0IHRoZSBzdGF0ZSBtYWNoaW5lcyB0byBtaW5pbWl6ZSBwcmVmaXggc3Rh
dGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMy
NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRo
IHRoaXMgcGF0Y2gsIHdlIHJlZmluZSBob3cgdGhlIFVSTHMgYXJlIHBhcnRpdGlvbmVkIHRvIG1h
a2UKKyAgICAgICAgbXVsdGlwbGUgc21hbGwgbWFjaGluZXMgaW5zdGVhZCBvZiBhIGJpZyBvbmUu
CisKKyAgICAgICAgSGVyZSwgY29uc2lkZXJpbmcgZWFjaCBwYXR0ZXJuIGFzIGEgbGFuZ3VhZ2Us
IEkgdG9vayB0aGUgc2ltcGxlc3QKKyAgICAgICAgcGFydGl0aW9uaW5nOiB0YWtlIHRoZSB1bmlv
biBtaW5pbWl6aW5nIHRoZSBzdGF0ZXMKKyAgICAgICAgdGhhdCBkaWZmZXJlbnRpYXRlIGxhbmd1
YWdlcy4KKworICAgICAgICBUaGUgaWRlYSBpcyB0aGUgZm9sbG93aW5nOiBldmVyeSB0aW1lIGEg
c3ViZ3JhcGggY2FuIGJlIHNraXBwZWQKKyAgICAgICAgb3IgcmVwZWF0ZWQsIGl0IGlzIGFuIG9w
cG9ydHVuaXR5IGZvciBhIG1lcmdlZCBsYW5ndWFnZSB0byBzdGFydAorICAgICAgICB3aXRoIGEg
ZGlzdGluZ3Vpc2hhYmxlIHN0YXRlLgorICAgICAgICBUbyBhdm9pZCBhY2N1bXVsYXRpbmcgdGhv
c2UgZGlmZmVyZW5jZXMsIHdlIG9ubHkgbWVyZ2UgbGFuZ3VhZ2VzCisgICAgICAgIHRoYXQgc2hh
cmUgdGhlIGV4YWN0IHNhbWUgInZhcmlhYmxlIiBzdWJncmFwaCBhcyBhIHByZWZpeC4KKworICAg
ICAgICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgd2UgY291bGQgY3JlYXRlIGFzIG1hbnkgbWFjaGlu
ZXMgYXMgd2UgaGF2ZSBwYXR0ZXJucy4KKyAgICAgICAgV2UnbGwgaGF2ZSB0byBhZGRyZXNzIHRo
YXQgaW4gYSBmb2xsb3ctdXAgYnkgbWVyZ2luZyBzbWFsbCBtYWNoaW5lcworICAgICAgICB1bnRp
bCB0aGV5IHJlYWNoIGEgY2VydGFpbiBzaXplLgorICAgICAgICBJbiB0aGUgY29tbW9uIGNhc2Vz
LCBwYXR0ZXJucyBsb29rIHZlcnkgbXVjaCBhbGlrZSBzbyB0aGF0IGlzIG5vdCBhIHByb2JsZW0K
KyAgICAgICAgYXQgdGhlIG1vbWVudC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZp
bHRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgSSBtb3ZlZCB0aGUgcHJlZml4IHRyZWUgYW5kIGdy
YXBoIGNvbnN0cnVjdGlvbiBvdXQgb2YgVVJMRmlsdGVyUGFyc2VyIGZvciBjbGFyaXR5LgorCisg
ICAgICAgIENvbWJpbmVkVVJMRmlsdGVycyBtYWludGFpbiB0aGUgdGVybSBwcmVmaXggdHJlZS4g
SW5zdGVhZCBvZiBnZW5lcmF0aW5nIG9uIHRoZSBmbHkKKyAgICAgICAgYXMgd2UgYnVpbGQgdGhl
IHByZWZpeCB0cmVlLCB3ZSBmaXJzdCBnZW5lcmF0ZSB0aGUgZW50aXJlIHRyZWUgb2YgdGVybXMs
IHRoZW4gZ2VuZXJhdGUKKyAgICAgICAgTkZBcyBmb3IgZWFjaCBicmFuY2ggd2l0aG91dCBhIHZh
cmlhYmxlIHByZWZpeC4KKworICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bWJpbmVkVVJMRmlsdGVyczo6Q29tYmluZWRVUkxGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6On5Db21iaW5lZFVSTEZpbHRl
cnMpOgorCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxG
aWx0ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAgTm90ZSBoZXJlIHRoYXQgd2Uga2VlcCB0cmFj
ayBvZiB3aGljaCBzdWJ0cmVlIGNvbnRhaW5zIGEgYW55IHZhcmlhYmxlIGxlbmd0aCB0ZXJtLgor
ICAgICAgICBJbnN0ZWFkIG9mIGFub3RhdGluZyB0aGUgZWRnZXMsIHRoZSBkZXN0aW5hdGlvbiB2
ZXJ0ZXggaXMgYW5vdGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgZnJvbSB0aGUg
ZWRnZS4KKworICAgICAgICBUaGUgZmxhZyAiaW5WYXJpYWJsZUxlbmd0aFByZWZpeCIgaXMgdGhl
cmUgdG8gc2ltcGxpZnkgdHJhdmVyc2FsLgorCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GQXMpOgorICAgICAgICBT
aW5jZSB3ZSBhcmUgdHJhdmVyc2luZyBhIHRyZWUgZ2VuZXJhdGVkIGJ5IHN0cmluZywgdXNpbmcg
dGhlIHN0YWNrIGZvciByZWN1cnNpb24KKyAgICAgICAgaXMgb3V0IG9mIHRoZSBxdWVzdGlvbi4K
KworICAgICAgICBGb3J0dW5hdGVseSwgdGhlIGVudGlyZSBzdGF0ZSBpcyB2ZXJ5IHNpbXBsZSB3
aGVuIGdvaW5nIGRlcHRoIGZpcnN0OiB3ZSBvbmx5IG5lZWQKKyAgICAgICAgdGhlIGFjdGl2ZSB2
ZXJ0ZXggYW5kIGVkZ2UsIGFuZCB0cmF2ZXJzZSB0aGUgZWRnZXMgaW4gb3JkZXIuCisKKyAgICAg
ICAgVG8gZG8ga2VlcCB0cmFjayBvZiB0aGUgZWRnZXMsIEkgdXNlZCB0aGUgSGFzaFRhYmxlIGl0
ZXJhdG9yIG9uIHRoZSBjdXJyZW50IHRlcm0uCisgICAgICAgIFNpbmNlIG5vIHZlcnRleCBpcyBt
b2RpZmllZCBmb3IgZ2VuZXJhdGlvbiwgc3RvcmluZyB0aGUgaXRlcmF0b3JzIGlzIHNhZmUuCisK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaDoKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Ok5GQTo6ZGVidWdQcmludERvdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TkZBOjpzZXRGaW5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjphZGRSdWxlSWQpOiBEZWxldGVkLgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05G
QUdyYXBoQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05G
QUdyYXBoQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFO
b2RlLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOiBBZGRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgVGVybSB0byBpdHMgb3duIGZpbGUgc2luY2UgaXQgaXMgbm93IHNoYXJlZCBi
ZXR3ZWVuIHRoZSBwYXJzZXIKKyAgICAgICAgYW5kIHRoZSBDb21iaW5lZFVSTEZpbHRlcnMuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFyYWN0ZXJTZXQ6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06
OkNoYXJhY3RlclNldDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6VGVybTo6R3JvdXA6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06Okdyb3VwOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpUZXJtSGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6VGVybUhhc2g6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpUZXJtOjpUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpUZXJtOjp+VGVybSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVy
bTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6
YWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpleHRlbmRHcm91cFN1YnBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlRlcm06OnF1YW50aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjppc0VuZE9mTGluZUFzc2VydGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6bWF0Y2hlc0F0TGVhc3RPbmVDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmlzS25vd25Ub01h
dGNoQW55U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpoYXNGaXhlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpp
c0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06
OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjppc1VuaXZlcnNhbFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpkZXN0cm95KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlBhdHRlcm5QYXJzZXI6OlBhdHRlcm5QYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlBhdHRlcm5QYXJzZXI6OmZpbmFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpQYXR0ZXJuUGFyc2VyOjphc3NlcnRpb25C
T0wpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNl
cjo6VVJMRmlsdGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpVUkxGaWx0ZXJQYXJzZXI6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlRlcm06OlRlcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlRlcm06On5UZXJtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjppc1ZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjphZGRDaGFyYWN0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmV4dGVuZEdyb3VwU3Vi
cGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6cXVhbnRpZnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmlzRW5kT2ZMaW5lQXNzZXJ0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjptYXRjaGVzQXRMZWFz
dE9uZUNoYXJhY3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6VGVybTo6aXNLbm93blRvTWF0Y2hBbnlTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Om9wZXJhdG9yPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6b3BlcmF0b3I9PSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNF
bXB0eVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpUZXJtOjppc0RlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpnZW5lcmF0ZVN1YmdyYXBo
Rm9yQXRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6VGVybTo6Q2hhcmFjdGVyU2V0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFyYWN0ZXJTZXQ6Omhhc2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Okdyb3Vw
OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpUZXJtOjpHcm91cDo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6VGVybUhhc2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm1IYXNoOjplcXVhbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjpHcmFwaEJ1aWxkZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBoQnVp
bGRlcjo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkdyYXBoQnVpbGRlcjo6YXNzZXJ0aW9uQk9MKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuaDoKKwogMjAxNS0wMy0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IGFmdGVyIHIxODIxNjguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjg4ZGJlYmE3OTQ1N2FiOWE3YjQ4ZTRh
NWM2ZTU5Mzk5YTczZmRjMS4uMTVmZDA1NzBjYjgyYWI2ZGQ4OWY4OGU0MzU3YWFmOWFkY2JjNmQz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAyOSw2ICsxMDI5LDExIEBACiAJCTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAv
KiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNG
NTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovOyB9OwogCQkyNkMxN0EzRTE0OTFEMkQ0MDBEMTJCQTIg
LyogRmlsZVN5c3RlbUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkMxN0EzRjE0
OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxl
U3lzdGVtSU9TLm1tICovOyB9OworCQkyNkU5NDREODFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmlu
ZWRVUkxGaWx0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2RTk0NEQ0MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuY3Bw
ICovOyB9OworCQkyNkU5NDREOTFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5NDRE
NTFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjZFOTQ0REExQUM0QjJERDAwN0I4
NUI1IC8qIE5GQUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkU5NDRENjFBQzRCMkREMDA3Qjg1QjUgLyogTkZBR3JhcGhCdWls
ZGVyLmNwcCAqLzsgfTsKKwkJMjZFOTQ0REIxQUM0QjJERDAwN0I4NUI1IC8qIE5GQUdyYXBoQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZF
OTQ0RDcxQUM0QjJERDAwN0I4NUI1IC8qIE5GQUdyYXBoQnVpbGRlci5oICovOyB9OworCQkyNkU5
NDRERDFBQzRCNEVBMDA3Qjg1QjUgLyogVGVybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFOTQ0REMxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAq
LzsgfTsKIAkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk4
QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07CiAJ
CTI2RjBDODk3MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk1MUEy
RTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJMjZG
MEM4OTgxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk2MUEyRTcyNEIw
MDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgxMTgsNiArODEyMywxMSBAQAogCQkyNkMx
NUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZp
bGVTeXN0ZW1JT1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmlsZVN5c3RlbUlP
Uy5tbTsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNkU5NDRENDFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbWJpbmVkVVJMRmlsdGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTk0NEQ1MUFDNEIyREQwMDdC
ODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tYmluZWRVUkxGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTI2RTk0NEQ2MUFDNEIyREQwMDdCODVCNSAvKiBORkFHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTkZBR3JhcGhCdWlsZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFOTQ0RDcxQUM0QjJERDAwN0I4NUI1IC8qIE5GQUdy
YXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBORkFHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFOTQ0REMxQUM0QjRFQTAw
N0I4NUI1IC8qIFRlcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVybS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIg
LyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5NjFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTUwMiwxNSArMTU1MTIsMTcgQEAKIAkJMjZGMEM4OTAxQTJENzlDQjAw
Mjc5NEY4IC8qIGNvbnRlbnRleHRlbnNpb25zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQk1MUI0NUQxRTFBQjhEMUUyMDAxMTdDRDIgLyogQ29udGVudEV4
dGVuc2lvbi5jcHAgKi8sCi0JCQkJNTFCNDVEMUYxQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRF
eHRlbnNpb24uaCAqLywKKwkJCQkyNkU5NDRENDFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcCAqLywKKwkJCQkyNkU5NDRENTFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmlu
ZWRVUkxGaWx0ZXJzLmggKi8sCiAJCQkJN0M5M0YzNDcxQUE2QkE1RTAwQTk4QkFCIC8qIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8sCiAJCQkJN0M5M0YzNDgxQUE2QkE1RTAwQTk4QkFC
IC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTUxQjQ1RDFFMUFCOEQxRTIw
MDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCAqLywKKwkJCQk1MUI0NUQxRjFBQjhEMUUy
MDAxMTdDRDIgLyogQ29udGVudEV4dGVuc2lvbi5oICovLAogCQkJCTVDREZBNkM3MUFBNEYyREEw
MEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovLAotCQkJCTdDRkRDNTdBMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovLAotCQkJCTdDRkRD
NTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLywKIAkJCQk3
QzkzRjM0QjFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCAq
LywKIAkJCQk3QzkzRjM0QzFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmggKi8sCisJCQkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi8sCisJCQkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRF
eHRlbnNpb25FcnJvci5oICovLAogCQkJCTI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLywKIAkJCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0Rjgg
LyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovLAogCQkJCTI2RjBDODk5MUEyRUMxMTAwMDI3
OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHAgKi8sCkBAIC0xNTUyOCw5ICsxNTU0MCwx
MiBAQAogCQkJCTI2NzcyNUY5MUE1QjNBRDkwMDNDMjRERCAvKiBERkFOb2RlLmggKi8sCiAJCQkJ
MjY5Mzk3MjUxQTRBNUZCRDAwRTgzNDlEIC8qIE5GQS5jcHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRB
NUI2NDAwRTgzNDlEIC8qIE5GQS5oICovLAorCQkJCTI2RTk0NEQ2MUFDNEIyREQwMDdCODVCNSAv
KiBORkFHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCTI2RTk0NEQ3MUFDNEIyREQwMDdCODVCNSAv
KiBORkFHcmFwaEJ1aWxkZXIuaCAqLywKIAkJCQkyNjkzOTcyMDFBNEE0MTJGMDBFODM0OUQgLyog
TkZBTm9kZS5oICovLAogCQkJCTI2NzcyNUZBMUE1QjNBRDkwMDNDMjRERCAvKiBORkFUb0RGQS5j
cHAgKi8sCiAJCQkJMjY3NzI1RkIxQTVCM0FEOTAwM0MyNEREIC8qIE5GQVRvREZBLmggKi8sCisJ
CQkJMjZFOTQ0REMxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLywKIAkJCQkyNjc3MjYwMjFB
NURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2VyLmNwcCAqLywKIAkJCQkyNjc3MjYwMzFB
NURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2VyLmggKi8sCiAJCQkpOwpAQCAtMjUxNzEs
NiArMjUxODYsNyBAQAogCQkJCTFBRTJBQTk4MEExQ0REMkQwMEI0MkIyNSAvKiBKU0hUTUxJbWFn
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3RTk3MEExQTgzRTMwMDdGQjhDNSAv
KiBKU0hUTUxJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQUQxNDIzMTI5NUVB
N0YwMEFDQTk4OSAvKiBKU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAor
CQkJCTI2RTk0NERCMUFDNEIyREQwMDdCODVCNSAvKiBORkFHcmFwaEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE2MTQ4QTc5MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyMjBBMUNFNjNCMDBCNDJCMjUgLyogSlNI
VE1MTGFiZWxFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyNDBBMUNFNjNCMDBC
NDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjEwNiw2
ICsyNjEyMiw3IEBACiAJCQkJNDM2NzA4Q0YxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RDExMkQ5Q0E0QjAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MzY3MDhEMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTI2RTk0NEREMUFDNEI0RUEwMDdCODVCNSAvKiBUZXJtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzY3MDhENTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEQ3MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzY3MDhEOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzA0NSw2ICsyNzA2Miw3IEBACiAJCQkJQTE0ODMy
QkYxODdGNjUyQzAwREE2M0E2IC8qIFdLR3JhcGhpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
NDgzMkMxMTg3RjY1N0EwMERBNjNBNiAvKiBXS1R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTQ4MzJDMzE4N0Y2NURGMDBEQTYzQTYgLyogV0tVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTI2RTk0NEQ5MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNDgzMkM0MTg3RjY2M0MwMERBNjNBNiAvKiBXS1ZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNDgzMkM2MTg3RjY2OEYwMERBNjNBNiAvKiBXS1ZpZXdQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk5MTk5NzEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZp
bGVGb3JtYXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjg1NDQsNiArMjg1NjIsNyBAQAogCQkJCTA3
RkJERTJDMThGRUQxNzgwMDFBN0NGRiAvKiBKU0RhdGFDdWVDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQyMUE4IC8qIEpTRGF0YVRyYW5zZmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3Q0UyMDUwMDM0MjFBOCAvKiBKU0RhdGFUcmFu
c2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU5NDREQTFBQzRCMkREMDA3Qjg1
QjUgLyogTkZBR3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAx
MTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQxMTJCMDNG
OTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4ODExLDYg
KzI4ODMwLDcgQEAKIAkJCQlCQ0Q5QzI2NTBDMTdBQTY3MDA1QzkwQTIgLyogSlNOb2RlTGlzdEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM3NjM2QjFBMkU2OEJCMDA5QTdFRTIgLyog
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzNTAzQ0Ez
MTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyNkU5NDREODFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMzNTAzQ0E1MTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlv
bkNlbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUVDMUUyODE0RkY2MEVFMDBDOTQ2NjIg
LyogSlNOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0U0NkY2RkExNjI3QTJDQTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmYTNkODNiZTVkNTg2YmUw
YjQxZTBkYWY0MjZkNjM2ZjVlZTY2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCkBAIC0wLDAgKzEsMjEx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbWJpbmVk
VVJMRmlsdGVycy5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1
ZGUgIlRlcm0uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3R5cGVkZWYgSGFzaE1hcDxU
ZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4sIFRlcm1IYXNoLCBUZXJtSGFz
aFRyYWl0cz4gUHJlZml4VHJlZUVkZ2VzOworCitzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7Cisg
ICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOworICAgIEFjdGlvblNldCBmaW5hbEFjdGlvbnM7Cisg
ICAgYm9vbCBpblZhcmlhYmxlTGVuZ3RoUHJlZml4IHsgZmFsc2UgfTsKK307CisKK0NvbWJpbmVk
VVJMRmlsdGVyczo6Q29tYmluZWRVUkxGaWx0ZXJzKCkKKyAgICA6IG1fcHJlZml4VHJlZVJvb3Qo
c3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpKQoreworfQorCitDb21iaW5lZFVS
TEZpbHRlcnM6On5Db21iaW5lZFVSTEZpbHRlcnMoKQoreworfQorCit2b2lkIENvbWJpbmVkVVJM
RmlsdGVyczo6YWRkUGF0dGVybih1aW50NjRfdCBhY3Rpb25JZCwgY29uc3QgVmVjdG9yPFRlcm0+
JiBwYXR0ZXJuKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXBhdHRlcm4uaXNFbXB0eSgp
LCAiVGhlIHBhcnNlciBzaG91bGQgaGF2ZSBleGNsdWRlZCBlbXB0eSBwYXR0ZXJucyBiZWZvcmUg
cmVhY2hpbmcgQ29tYmluZWRVUkxGaWx0ZXJzLiIpOworCisgICAgaWYgKHBhdHRlcm4uaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEy
OD4gcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybjsKKyAgICBwcmVmaXhUcmVlVmVydGljZXNG
b3JQYXR0ZXJuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKKwor
ICAgIC8vIEV4dGVuZCB0aGUgcHJlZml4IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCisgICAg
Ym9vbCBoYXNOZXdUZXJtID0gZmFsc2U7CisgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZp
eFRyZWUgPSBtX3ByZWZpeFRyZWVSb290LmdldCgpOworICAgIHByZWZpeFRyZWVWZXJ0aWNlc0Zv
clBhdHRlcm4uYXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKKworICAgIGZvciAoY29uc3QgVGVybSYg
dGVybSA6IHBhdHRlcm4pIHsKKyAgICAgICAgYXV0byBuZXh0RW50cnkgPSBsYXN0UHJlZml4VHJl
ZS0+ZWRnZXMuZmluZCh0ZXJtKTsKKyAgICAgICAgaWYgKG5leHRFbnRyeSAhPSBsYXN0UHJlZml4
VHJlZS0+ZWRnZXMuZW5kKCkpCisgICAgICAgICAgICBsYXN0UHJlZml4VHJlZSA9IG5leHRFbnRy
eS0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGFzTmV3VGVybSA9
IHRydWU7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlVmVydGV4PiBu
ZXh0UHJlZml4VHJlZVZlcnRleCA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZVZlcnRleD4o
KTsKKworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMu
c2V0KHRlcm0sIFdURjo6bW92ZShuZXh0UHJlZml4VHJlZVZlcnRleCkpOworICAgICAgICAgICAg
QVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgICAgICAgICAgbGFzdFByZWZpeFRy
ZWUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgICAgICB9CisgICAgICAg
IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKKyAg
ICB9CisKKyAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLmxhc3QoKS0+ZmluYWxBY3Rp
b25zLmFkZChhY3Rpb25JZCk7CisKKyAgICBpZiAoIWhhc05ld1Rlcm0pCisgICAgICAgIHJldHVy
bjsKKworICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXMgPSBmYWxzZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykgeworICAgICAgICBjb25zdCBU
ZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKKyAgICAgICAgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVy
bXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKKyAgICAgICAgcHJlZml4VHJlZVZlcnRpY2Vz
Rm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlh
YmxlTGVuZ3RoVGVybXM7CisgICAgfQorICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm5b
MF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXM7
Cit9CisKK3N0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKKyAgICBjb25zdCBQcmVmaXhUcmVlVmVydGV4
KiB2ZXJ0ZXg7CisgICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsK
K307CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgdW5zaWdu
ZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVmaXhUcmVlVmVydGV4KQorewor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXByZWZpeFRyZWVWZXJ0ZXguaW5WYXJpYWJsZUxlbmd0
aFByZWZpeCwgIlRoaXMgY29kZSBhc3N1bWVzIHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHBy
ZWZpeCBsZW5ndGggaGF2ZSBhbHJlYWR5IGJlZW4gaGFuZGxlZC4iKTsKKworICAgIHN0cnVjdCBB
Y3RpdmVORkFTdWJ0cmVlIDogQWN0aXZlU3VidHJlZSB7CisgICAgICAgIEFjdGl2ZU5GQVN1YnRy
ZWUoY29uc3QgUHJlZml4VHJlZVZlcnRleCogdmVydGV4LCBQcmVmaXhUcmVlRWRnZXM6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXJhdG9yLCB1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgICAgICAgICA6IEFj
dGl2ZVN1YnRyZWUoeyB2ZXJ0ZXgsIGl0ZXJhdG9yIH0pCisgICAgICAgICAgICAsIGxhc3ROb2Rl
SW5kZXgobm9kZUluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQg
bGFzdE5vZGVJbmRleDsKKyAgICB9OworCisgICAgVmVjdG9yPEFjdGl2ZU5GQVN1YnRyZWU+IGFj
dGl2ZVN0YWNrOworICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKCZwcmVm
aXhUcmVlVmVydGV4LCBwcmVmaXhUcmVlVmVydGV4LmVkZ2VzLmJlZ2luKCksIHJvb3RJZCkpOwor
CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICBQcm9jZXNzU3VidHJlZToKKyAgICAgICAgQWN0aXZl
TkZBU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsKKyAgICAgICAg
Zm9yICg7YWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRn
ZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgeworICAgICAgICAgICAgaWYgKGFj
dGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnZhbHVlLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0g
YWN0aXZlU3VidHJlZS5pdGVyYXRvci0+a2V5OworICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5k
Tm9kZUluZGV4ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJlZS5sYXN0Tm9k
ZUluZGV4LCBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT52YWx1ZS0+ZmluYWxBY3Rpb25zKTsKKwor
ICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgICAgICAgICAgaWYgKCFwcmVmaXhUcmVl
VmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5h
cHBlbmQoQWN0aXZlTkZBU3VidHJlZShwcmVmaXhUcmVlVmVydGV4LCBwcmVmaXhUcmVlVmVydGV4
LT5lZGdlcy5iZWdpbigpLCBuZXdFbmROb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBnb3Rv
IFByb2Nlc3NTdWJ0cmVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWN0
aXZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgpLml0ZXJh
dG9yOworICAgIH0KK30KKworVmVjdG9yPE5GQT4gQ29tYmluZWRVUkxGaWx0ZXJzOjpjcmVhdGVO
RkFzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4gYWN0aXZlU3RhY2s7Cisg
ICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBtX3ByZWZpeFRyZWVSb290Lmdl
dCgpLCBtX3ByZWZpeFRyZWVSb290LT5lZGdlcy5iZWdpbigpIH0pKTsKKworICAgIFZlY3RvcjxO
RkE+IG5mYXM7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgIFByb2Nlc3NTdWJ0cmVlOgorICAg
ICAgICBBY3RpdmVTdWJ0cmVlJiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOwor
CisgICAgICAgIC8vIFdlIGdvIGRlcHRoIGZpcnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFy
aWFibGUgcHJlZml4LiBGaW5kIHRoZSBuZXh0IHN1YnRyZWUuCisgICAgICAgIGZvciAoOyBhY3Rp
dmVTdWJ0cmVlLml0ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsg
KythY3RpdmVTdWJ0cmVlLml0ZXJhdG9yKSB7CisgICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4
KiBwcmVmaXhUcmVlVmVydGV4ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7
CisgICAgICAgICAgICBpZiAocHJlZml4VHJlZVZlcnRleC0+aW5WYXJpYWJsZUxlbmd0aFByZWZp
eCkgeworICAgICAgICAgICAgICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsg
cHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSB9KSk7Cisg
ICAgICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEFmdGVyIHdlIHJlYWNoZWQgaGVyZSwgd2Uga25vdyB0aGF0IGFs
bCB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXhlcyBoYXZlIGJlZW4gcHJvY2Vzc2Vk
LAorICAgICAgICAvLyB0aW1lIHRvIGdlbmVyYXRlIHRoZSBORkEgZm9yIHRoZSBncmFwaCByb290
ZWQgaGVyZS4KKyAgICAgICAgYm9vbCBuZWVkVG9HZW5lcmF0ZSA9IGFjdGl2ZVN1YnRyZWUudmVy
dGV4LT5lZGdlcy5pc0VtcHR5KCkgJiYgIWFjdGl2ZVN1YnRyZWUudmVydGV4LT5maW5hbEFjdGlv
bnMuaXNFbXB0eSgpOworICAgICAgICBpZiAoIW5lZWRUb0dlbmVyYXRlKSB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWVkZ2UudmFsdWUtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgbmVlZFRvR2VuZXJhdGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobmVlZFRvR2VuZXJhdGUpIHsKKyAgICAgICAgICAgIG5mYXMu
YXBwZW5kKE5GQSgpKTsKKyAgICAgICAgICAgIE5GQSYgZ2VuZXJhdGluZ05GQSA9IG5mYXMubGFz
dCgpOworCisgICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBnZW5lcmF0aW5nTkZBLnJv
b3QoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFjdGl2ZVN0YWNr
LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBh
Y3RpdmVTdGFja1tpXS5pdGVyYXRvci0+a2V5OworICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9
IHRlcm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGFjdGl2ZVN0YWNr
W2ldLml0ZXJhdG9yLT52YWx1ZS0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdlIDogYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVk
Z2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlLnZhbHVlLT5pblZhcmlhYmxlTGVuZ3Ro
UHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBlZGdlLmtl
eTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gdGVybS5n
ZW5lcmF0ZUdyYXBoKGdlbmVyYXRpbmdORkEsIHByZWZpeEVuZCwgZWRnZS52YWx1ZS0+ZmluYWxB
Y3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKGdlbmVy
YXRpbmdORkEsIG5ld1N1YnRyZWVTdGFydCwgKmVkZ2UudmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGhhdmUgcHJvY2Vz
c2VkIGFsbCB0aGUgc3VidHJlZXMgb2YgdGhpcyBsZXZlbCwgcG9wIHRoZSBzdGFjayBhbmQgbW92
ZSBvbiB0byB0aGUgbmV4dCBzaWJsaW5nLgorICAgICAgICBhY3RpdmVTdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgICAgIGlmIChhY3RpdmVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgKythY3RpdmVTdGFjay5sYXN0KCkuaXRlcmF0b3I7CisgICAgfQorCisgICAg
cmV0dXJuIG5mYXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRV
UkxGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mjk1OGNlNmRiYjE2MWM2YjZiZWQ0ZGRjMzM4MmRlZjgx
OWE0NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ29tYmluZWRVUkxGaWx0ZXJzX2gKKyNkZWZpbmUgQ29tYmluZWRVUkxGaWx0ZXJzX2gK
KworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJORkEuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgVGVybTsKK3N0cnVjdCBQcmVmaXhUcmVlVmVy
dGV4OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBDb21iaW5lZFVSTEZpbHRlcnMgeworcHVibGlj
OgorICAgIENvbWJpbmVkVVJMRmlsdGVycygpOworICAgIH5Db21iaW5lZFVSTEZpbHRlcnMoKTsK
KyAgICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVy
bT4mIHBhdHRlcm4pOworCisgICAgVmVjdG9yPE5GQT4gY3JlYXRlTkZBcygpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlVmVydGV4PiBtX3ByZWZpeFRy
ZWVSb290OworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisK
KyNlbmRpZiAvLyBDb21iaW5lZFVSTEZpbHRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAK
aW5kZXggMzhmZGRhNzNiMWE4N2NlODZiZDIzNmY2NzQ2NmE5ZGNmN2M3NjBiZC4uMDQ5NjQ2MjQ0
YWI2Yjc0MDI4MWJmMDMxMTNjMmFhZDhlYjVhMDJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
CisjaW5jbHVkZSAiQ29tYmluZWRVUkxGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKICNp
bmNsdWRlICJDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCIKQEAgLTEyNywyNCArMTI4LDE3IEBAIHN0
ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9u
Q2xpZW50JiBjbGllbnQsIGNvbnN0CiAgICAgICAgIHJldHVybiBwYXJzZXJFcnJvcjsKIAogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKLSAgICBkb3VibGUgbmZh
QnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBkb3Vi
bGUgcGF0dGVyblBhcnRpdGlvbmluZ1N0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7CiAjZW5kaWYKIAogICAgIFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4gYWN0aW9uczsK
ICAgICBWZWN0b3I8dW5zaWduZWQ+IGFjdGlvbkxvY2F0aW9ucyA9IHNlcmlhbGl6ZUFjdGlvbnMo
cGFyc2VkUnVsZUxpc3QsIGFjdGlvbnMpOwogICAgIFZlY3Rvcjx1aW50NjRfdD4gdW5pdmVyc2Fs
QWN0aW9uTG9jYXRpb25zOwogCi0gICAgVmVjdG9yPE5GQT4gbmZhczsKLSAgICBuZmFzLmFwcGVu
ZChORkEoKSk7CisgICAgQ29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAg
ICBVUkxGaWx0ZXJQYXJzZXIgdXJsRmlsdGVyUGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CiAg
ICAgYm9vbCBpZ25vcmVQcmV2aW91c1J1bGVzU2VlbiA9IGZhbHNlOwogICAgIGZvciAodW5zaWdu
ZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcGFyc2VkUnVsZUxpc3Quc2l6ZSgpOyArK3J1
bGVJbmRleCkgewotCi0gICAgICAgIC8vIEZJWE1FOiBUdW5lIHRoaXMgYmV0dGVyIGFuZCBhZGp1
c3QgQ29udGVudEV4dGVuc2lvblRlc3QuTXVsdGlERkEgYWNjb3JkaW5nbHkuCi0gICAgICAgIGlm
IChuZmFzW25mYXMuc2l6ZSgpIC0gMV0uZ3JhcGhTaXplKCkgPiA0MDApCi0gICAgICAgICAgICBu
ZmFzLmFwcGVuZChORkEoKSk7Ci0KLSAgICAgICAgTkZBJiBsYXN0TkZBID0gbmZhc1tuZmFzLnNp
emUoKSAtIDFdOwotICAgICAgICBVUkxGaWx0ZXJQYXJzZXIgdXJsRmlsdGVyUGFyc2VyKGxhc3RO
RkEpOwogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYgY29udGVudEV4dGVuc2lv
blJ1bGUgPSBwYXJzZWRSdWxlTGlzdFtydWxlSW5kZXhdOwogICAgICAgICBjb25zdCBUcmlnZ2Vy
JiB0cmlnZ2VyID0gY29udGVudEV4dGVuc2lvblJ1bGUudHJpZ2dlcigpOwogICAgICAgICBBU1NF
UlQodHJpZ2dlci51cmxGaWx0ZXIubGVuZ3RoKCkpOwpAQCAtMTU0LDExICsxNDgsMTIgQEAgc3Rk
OjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25D
bGllbnQmIGNsaWVudCwgY29uc3QKICAgICAgICAgVVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1
cyBzdGF0dXMgPSB1cmxGaWx0ZXJQYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwg
dHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3Mp
OwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0gVVJMRmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZlcnl0
aGluZykgeworCiAgICAgICAgICAgICBpZiAoaWdub3JlUHJldmlvdXNSdWxlc1NlZW4pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZl
cnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlczsKICAgICAgICAgICAgIHVuaXZlcnNhbEFj
dGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgaWYgKHN0YXR1cyAhPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rICYm
IHN0YXR1cyAhPSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nRigiRXJyb3Igd2hpbGUgcGFyc2luZyAlczogJXNcbiIsIHRyaWdnZXIudXJs
RmlsdGVyLnV0ZjgoKS5kYXRhKCksIFVSTEZpbHRlclBhcnNlcjo6c3RhdHVzU3RyaW5nKHN0YXR1
cykudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZFJlZ2V4OwpAQCAtMTY5LDYgKzE2NCwxNyBAQCBzdGQ6OmVycm9yX2Nv
ZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xp
ZW50LCBjb25zdAogICAgIH0KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9S
RVBPUlRJTkcKKyAgICBkb3VibGUgcGF0dGVyblBhcnRpdGlvbmluZ0VuZCA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOworICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBwYXJ0aXRp
b25pbmcgdGhlIHJ1bGVzIGludG8gZ3JvdXBzOiAlZlxuIiwgKHBhdHRlcm5QYXJ0aXRpb25pbmdF
bmQgLSBwYXR0ZXJuUGFydGl0aW9uaW5nU3RhcnQpKTsKKyNlbmRpZgorCisjaWYgQ09OVEVOVF9F
WFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORworICAgIGRvdWJsZSBuZmFCdWlsZFRpbWVT
dGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworI2VuZGlmCisKKyAgICBWZWN0
b3I8TkZBPiBuZmFzID0gY29tYmluZWRVUkxGaWx0ZXJzLmNyZWF0ZU5GQXMoKTsKKworI2lmIENP
TlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgbmZhQnVp
bGRUaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0Yo
IiAgICBUaW1lIHNwZW50IGJ1aWxkaW5nIHRoZSBORkE6ICVmXG4iLCAobmZhQnVpbGRUaW1lRW5k
IC0gbmZhQnVpbGRUaW1lU3RhcnQpKTsKICNlbmRpZgpAQCAtMjAzLDEwICsyMDksNiBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNs
aWVudCYgY2xpZW50LCBjb25zdAogICAgICAgICBjb21waWxlci5jb21waWxlKCk7CiAgICAgfQog
Ci0jaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgZGZh
LmRlYnVnUHJpbnREb3QoKTsKLSNlbmRpZgotCiAgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RG
Ojptb3ZlKGJ5dGVjb2RlKSk7CiAgICAgY2xpZW50LndyaXRlQWN0aW9ucyhXVEY6Om1vdmUoYWN0
aW9ucykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9O
RkEuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAppbmRleCA5
ZWFhMzBiNTlhM2FkNWNjOTcwZjIxNjZkNzZmNDkxNjkyNzA4NWQ1Li5lNjQ4MjMyMDAzNzllMzg0
NjNkM2YxNjUzNzUxNzNjYWMxMjQ5ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQS5jcHAKQEAgLTgxLDEwICs4MSwxMCBAQCB2b2lkIE5GQTo6YWRkVHJhbnNpdGlvbnNP
bkFueUNoYXJhY3Rlcih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKICAgICAgICAgdHJhbnNp
dGlvblNsb3QudmFsdWUucmVtb3ZlKHRvKTsKIH0KIAotdm9pZCBORkE6OnNldEZpbmFsKHVuc2ln
bmVkIG5vZGUsIHVpbnQ2NF90IHJ1bGVJZCkKK3ZvaWQgTkZBOjpzZXRBY3Rpb25zKHVuc2lnbmVk
IG5vZGUsIGNvbnN0IEFjdGlvblNldCYgYWN0aW9ucykKIHsKLSAgICBpZiAoIW1fbm9kZXNbbm9k
ZV0uZmluYWxSdWxlSWRzLmNvbnRhaW5zKHJ1bGVJZCkpCi0gICAgICAgIG1fbm9kZXNbbm9kZV0u
ZmluYWxSdWxlSWRzLmFwcGVuZChydWxlSWQpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9u
b2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMuaXNFbXB0eSgpLCAiVGhlIGZpbmFsIHN0YXRlIHNob3Vs
ZCBvbmx5IGJlIGRlZmluZWQgb25jZS4iKTsKKyAgICBjb3B5VG9WZWN0b3IoYWN0aW9ucywgbV9u
b2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMpOwogfQogCiB1bnNpZ25lZCBORkE6OmdyYXBoU2l6ZSgp
IGNvbnN0CkBAIC0xMDEsMTMgKzEwMSw2IEBAIHZvaWQgTkZBOjpyZXN0b3JlVG9HcmFwaFNpemUo
dW5zaWduZWQgc2l6ZSkKIH0KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwotCi12b2lkIE5GQTo6YWRkUnVsZUlkKHVuc2lnbmVkIG5vZGUsIHVpbnQ2NF90
IHJ1bGVJZCkKLXsKLSAgICBpZiAoIW1fbm9kZXNbbm9kZV0ucnVsZUlkcy5jb250YWlucyhydWxl
SWQpKQotICAgICAgICBtX25vZGVzW25vZGVdLnJ1bGVJZHMuYXBwZW5kKHJ1bGVJZCk7Ci19Ci0K
IHN0YXRpYyB2b2lkIHByaW50UmFuZ2UoYm9vbCBmaXJzdFJhbmdlLCB1aW50MTZfdCByYW5nZVN0
YXJ0LCB1aW50MTZfdCByYW5nZUVuZCwgdWludDE2X3QgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0
ZXIpCiB7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQpAQCAtMTgxLDE3ICsxNzQsNiBAQCB2b2lkIE5G
QTo6ZGVidWdQcmludERvdCgpIGNvbnN0CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bm9kZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgICVkIFtsYWJl
bD08Tm9kZSAlZCIsIGksIGkpOwogCi0gICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIG9y
aWdpbmFsUnVsZXMgPSBtX25vZGVzW2ldLnJ1bGVJZHM7Ci0gICAgICAgIGlmICghb3JpZ2luYWxS
dWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCI8QlIvPihSdWxlczogIik7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7IHJ1bGVJbmRleCA8IG9y
aWdpbmFsUnVsZXMuc2l6ZSgpOyArK3J1bGVJbmRleCkgewotICAgICAgICAgICAgICAgIGlmIChy
dWxlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIsICIpOwotICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCIlbGx1Iiwgb3JpZ2luYWxSdWxlc1tydWxlSW5kZXhdKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFMb2dGKCIpIik7Ci0gICAgICAgIH0KLQogICAgICAg
ICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBmaW5hbFJ1bGVzID0gbV9ub2Rlc1tpXS5maW5hbFJ1
bGVJZHM7CiAgICAgICAgIGlmICghZmluYWxSdWxlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGRhdGFMb2dGKCI8QlIvPihGaW5hbDogIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ORkEuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L05GQS5oCmluZGV4IDJkMzgyMjUxMzIwMGI2MTUzNDg5MjE3NzNiZTczOTA0M2QxMGMwYzUuLmZi
YjJhOTUwNjk0ZGZmOTgxOTk4OGRjZmQzM2ZjYTEwNzc5ODZlMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL05GQS5oCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CiAKIGNsYXNzIE5GQVRvREZBOwogCit0eXBlZGVmIEhhc2hTZXQ8dWludDY0
X3QsIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1aW50NjRfdD4+IEFjdGlvblNldDsKKwogLy8gVGhlIE5GQSBwcm92aWRlcyBh
IHdheSB0byBidWlsZCBhIE5GQSBncmFwaCB3aXRoIGNoYXJhY3RlcnMgb3IgZXBzaWxvbiBhcyB0
cmFuc2l0aW9ucy4KIC8vIFRoZSBub2RlcyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBhbiBpZGVudGlm
aWVyLgogY2xhc3MgTkZBIHsKQEAgLTQ5LDEzICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRUcmFuc2l0aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBjaGFyIGNoYXJhY3Rlcik7
CiAgICAgdm9pZCBhZGRFcHNpbG9uVHJhbnNpdGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
byk7CiAgICAgdm9pZCBhZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKTsKLSAgICB2b2lkIHNldEZpbmFsKHVuc2lnbmVkIG5vZGUsIHVpbnQ2NF90
IHJ1bGVJZCk7CisgICAgdm9pZCBzZXRBY3Rpb25zKHVuc2lnbmVkIG5vZGUsIGNvbnN0IEFjdGlv
blNldCYgZmluYWxBY3Rpb25zKTsKIAogICAgIHVuc2lnbmVkIGdyYXBoU2l6ZSgpIGNvbnN0Owog
ICAgIHZvaWQgcmVzdG9yZVRvR3JhcGhTaXplKHVuc2lnbmVkKTsKIAogI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgIHZvaWQgYWRkUnVsZUlkKHVuc2ln
bmVkIG5vZGUsIHVpbnQ2NF90IHJ1bGVJZCk7CisgICAgdm9pZCBhZGRSdWxlSWQodW5zaWduZWQg
bm9kZSwgY29uc3QgQWN0aW9uU2V0JiBydWxlSWRzKTsKIAogICAgIHZvaWQgZGVidWdQcmludERv
dCgpIGNvbnN0OwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL05GQUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ORkFHcmFwaEJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL05GQUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvTkZBR3JhcGhCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIy
OWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvTkZBTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZB
Tm9kZS5oCmluZGV4IGZmNzEwNTBjMDAzY2VhYTRlODgyZjljMDIzNTU0ZWU4NjExNmQxM2MuLjRl
NWVjMDBlODhmYjlkZmRlY2M4YjNkZTIyMmIzNDBhOGY5YmEwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFOb2RlLmgKQEAgLTQ4LDkgKzQ4LDYgQEAgcHVibGljOgog
ICAgIE5GQU5vZGVJbmRleFNldCB0cmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyOwogCiAgICAgVmVj
dG9yPHVpbnQ2NF90PiBmaW5hbFJ1bGVJZHM7Ci0jaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCi0gICAgVmVjdG9yPHVpbnQ2NF90PiBydWxlSWRzOwotI2VuZGlm
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9U
ZXJtLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWU1NjRiNmZkM2VmZDg4MGU0ZjQxMzBkZTk5NzEzOGNiYTQ2YzllMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaApAQCAtMCwwICsx
LDU4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXJtX2gKKyNkZWZpbmUgVGVybV9o
CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiTkZBLmgiCisj
aW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgor
I2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
Q29udGVudEV4dGVuc2lvbnMgeworCitlbnVtIGNsYXNzIEF0b21RdWFudGlmaWVyIDogdWludDhf
dCB7CisgICAgT25lLAorICAgIFplcm9Pck9uZSwKKyAgICBaZXJvT3JNb3JlLAorICAgIE9uZU9y
TW9yZQorfTsKKworY2xhc3MgVGVybSB7CitwdWJsaWM6CisgICAgVGVybSgpOworICAgIFRlcm0o
Y2hhciBjaGFyYWN0ZXIsIGJvb2wgaXNDYXNlU2Vuc2l0aXZlKTsKKworICAgIGVudW0gVW5pdmVy
c2FsVHJhbnNpdGlvblRhZyB7IFVuaXZlcnNhbFRyYW5zaXRpb24gfTsKKyAgICBleHBsaWNpdCBU
ZXJtKFVuaXZlcnNhbFRyYW5zaXRpb25UYWcpOworCisgICAgZW51bSBDaGFyYWN0ZXJTZXRUZXJt
VGFnIHsgQ2hhcmFjdGVyU2V0VGVybSB9OworICAgIGV4cGxpY2l0IFRlcm0oQ2hhcmFjdGVyU2V0
VGVybVRhZywgYm9vbCBpc0ludmVydGVkKTsKKworICAgIGVudW0gR3JvdXBUZXJtVGFnIHsgR3Jv
dXBUZXJtIH07CisgICAgZXhwbGljaXQgVGVybShHcm91cFRlcm1UYWcpOworCisgICAgZW51bSBF
bmRPZkxpbmVBc3NlcnRpb25UZXJtVGFnIHsgRW5kT2ZMaW5lQXNzZXJ0aW9uVGVybSB9OworICAg
IGV4cGxpY2l0IFRlcm0oRW5kT2ZMaW5lQXNzZXJ0aW9uVGVybVRhZyk7CisKKyAgICBUZXJtKGNv
bnN0IFRlcm0mIG90aGVyKTsKKyAgICBUZXJtKFRlcm0mJiBvdGhlcik7CisKKyAgICBlbnVtIEVt
cHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgVGVybShFbXB0eVZhbHVlVGFnKTsKKwor
ICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgVGVybShEZWxl
dGVkVmFsdWVUYWcpOworCisgICAgflRlcm0oKTsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OworCisgICAgLy8gQ2hhcmFjdGVyU2V0IHRlcm1zIG9ubHkuCisgICAgdm9pZCBhZGRDaGFyYWN0
ZXIoVUNoYXIgY2hhcmFjdGVyLCBib29sIGlzQ2FzZVNlbnNpdGl2ZSk7CisKKyAgICAvLyBHcm91
cCB0ZXJtcyBvbmx5LgorICAgIHZvaWQgZXh0ZW5kR3JvdXBTdWJwYXR0ZXJuKGNvbnN0IFRlcm0m
KTsKKworICAgIHZvaWQgcXVhbnRpZnkoY29uc3QgQXRvbVF1YW50aWZpZXImKTsKKworICAgIHVu
c2lnbmVkIGdlbmVyYXRlR3JhcGgoTkZBJiwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvblNl
dCYgZmluYWxBY3Rpb25zKSBjb25zdDsKKworICAgIGJvb2wgaXNFbmRPZkxpbmVBc3NlcnRpb24o
KSBjb25zdDsKKworICAgIGJvb2wgbWF0Y2hlc0F0TGVhc3RPbmVDaGFyYWN0ZXIoKSBjb25zdDsK
KworICAgIC8vIE1hdGNoZXMgYW55IHN0cmluZywgdGhlIGVtcHR5IHN0cmluZyBpbmNsdWRlZC4K
KyAgICAvLyBUaGlzIGlzIHZlcnkgY29uc2VydmF0aXZlLiBQYXR0ZXJucyBtYXRjaGluZyBhbnkg
c3RyaW5nIGNhbiByZXR1cm4gZmFsc2UgaGVyZS4KKyAgICBib29sIGlzS25vd25Ub01hdGNoQW55
U3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGVybSBjYW4gb25s
eSBtYXRjaCBpbnB1dCBvZiBhIHNpbmdsZSBmaXhlZCBsZW5ndGguCisgICAgYm9vbCBoYXNGaXhl
ZExlbmd0aCgpIGNvbnN0OworCisgICAgVGVybSYgb3BlcmF0b3I9KGNvbnN0IFRlcm0mIG90aGVy
KTsKKyAgICBUZXJtJiBvcGVyYXRvcj0oVGVybSYmIG90aGVyKTsKKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUZXJtJiBvdGhlcikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CisKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0OworICAgIGJvb2wgaXNEZWxldGVk
VmFsdWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIGV4YWN0IGZvciBjaGFy
YWN0ZXIgc2V0cyBidXQgY29uc2VydmF0aXZlIGZvciBncm91cHMuCisgICAgLy8gVGhlIHJldHVy
biB2YWx1ZSBjYW4gYmUgZmFsc2UgZm9yIGEgZ3JvdXAgZXF1aXZhbGVudCB0byBhIHVuaXZlcnNh
bCB0cmFuc2l0aW9uLgorICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3Q7CisK
KyAgICB1bnNpZ25lZCBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmLCB1bnNpZ25lZCBzb3Vy
Y2UpIGNvbnN0OworCisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICBlbnVtIGNsYXNzIFRlcm1U
eXBlIDogdWludDhfdCB7CisgICAgICAgIEVtcHR5LAorICAgICAgICBEZWxldGVkLAorICAgICAg
ICBDaGFyYWN0ZXJTZXQsCisgICAgICAgIEdyb3VwCisgICAgfTsKKworICAgIFRlcm1UeXBlIG1f
dGVybVR5cGUgeyBUZXJtVHlwZTo6RW1wdHkgfTsKKyAgICBBdG9tUXVhbnRpZmllciBtX3F1YW50
aWZpZXIgeyBBdG9tUXVhbnRpZmllcjo6T25lIH07CisKKyAgICBzdHJ1Y3QgQ2hhcmFjdGVyU2V0
IHsKKyAgICAgICAgYm9vbCBpbnZlcnRlZCB7IGZhbHNlIH07CisgICAgICAgIEJpdFZlY3RvciBj
aGFyYWN0ZXJzIHsgMTI4IH07CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJh
Y3RlclNldCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBvdGhl
ci5pbnZlcnRlZCA9PSBpbnZlcnRlZCAmJiBvdGhlci5jaGFyYWN0ZXJzID09IGNoYXJhY3RlcnM7
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goaW52ZXJ0ZWQsIGNoYXJhY3RlcnMu
aGFzaCgpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAg
ICBWZWN0b3I8VGVybT4gdGVybXM7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdy
b3VwJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG90aGVyLnRl
cm1zID09IHRlcm1zOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSA2NDIxNzQ5OworICAgICAg
ICAgICAgZm9yIChjb25zdCBUZXJtJiB0ZXJtIDogdGVybXMpIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCB0ZXJtSGFzaCA9IHRlcm0uaGFzaCgpOworICAgICAgICAgICAgICAgIGhhc2ggPSAo
aGFzaCA8PCAxNikgXiAoKHRlcm1IYXNoIDw8IDExKSBeIGhhc2gpOworICAgICAgICAgICAgICAg
IGhhc2ggKz0gaGFzaCA+PiAxMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBo
YXNoOworICAgICAgICB9CisgICAgfTsKKworICAgIHVuaW9uIEF0b21EYXRhIHsKKyAgICAgICAg
QXRvbURhdGEoKQorICAgICAgICAgICAgOiBpbnZhbGlkVGVybSgwKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgfkF0b21EYXRhKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgY2hhciBpbnZhbGlkVGVybTsKKyAgICAgICAgQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldDsK
KyAgICAgICAgR3JvdXAgZ3JvdXA7CisgICAgfSBtX2F0b21EYXRhOworfTsKKworc3RydWN0IFRl
cm1IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUZXJtJiB0ZXJtKSB7IHJl
dHVybiB0ZXJtLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRlcm0mIGEs
IGNvbnN0IFRlcm0mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3N0cnVjdCBUZXJt
SGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OkN1c3RvbUhhc2hUcmFpdHM8VGVybT4geyB9OworCitp
bmxpbmUgVGVybTo6VGVybSgpCit7Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKGNoYXIgY2hhcmFj
dGVyLCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKKyAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkNo
YXJhY3RlclNldCkKK3sKKyAgICBuZXcgKE5vdE51bGwsICZtX2F0b21EYXRhLmNoYXJhY3RlclNl
dCkgQ2hhcmFjdGVyU2V0KCk7CisgICAgYWRkQ2hhcmFjdGVyKGNoYXJhY3RlciwgaXNDYXNlU2Vu
c2l0aXZlKTsKK30KKworZW51bSBVbml2ZXJzYWxUcmFuc2l0aW9uVGFnIHsgVW5pdmVyc2FsVHJh
bnNpdGlvbiB9OworaW5saW5lIFRlcm06OlRlcm0oVW5pdmVyc2FsVHJhbnNpdGlvblRhZykKKyAg
ICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkNoYXJhY3RlclNldCkKK3sKKyAgICBuZXcgKE5vdE51
bGwsICZtX2F0b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDEyODsgKytpKQorICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3Rl
clNldC5jaGFyYWN0ZXJzLnNldChpKTsKK30KKworaW5saW5lIFRlcm06OlRlcm0oQ2hhcmFjdGVy
U2V0VGVybVRhZywgYm9vbCBpc0ludmVydGVkKQorICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6
Q2hhcmFjdGVyU2V0KQoreworICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0KSBDaGFyYWN0ZXJTZXQoKTsKKyAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRl
ZCA9IGlzSW52ZXJ0ZWQ7Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKEdyb3VwVGVybVRhZykKKyAg
ICA6IG1fdGVybVR5cGUoVGVybVR5cGU6Okdyb3VwKQoreworICAgIG5ldyAoTm90TnVsbCwgJm1f
YXRvbURhdGEuZ3JvdXApIEdyb3VwKCk7Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKEVuZE9mTGlu
ZUFzc2VydGlvblRlcm1UYWcpCisgICAgOiBUZXJtKENoYXJhY3RlclNldFRlcm0sIGZhbHNlKQor
eworICAgIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuc2V0KDApOworfQorCitp
bmxpbmUgVGVybTo6VGVybShjb25zdCBUZXJtJiBvdGhlcikKKyAgICA6IG1fdGVybVR5cGUob3Ro
ZXIubV90ZXJtVHlwZSkKKyAgICAsIG1fcXVhbnRpZmllcihvdGhlci5tX3F1YW50aWZpZXIpCit7
CisgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Cisg
ICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJt
VHlwZTo6Q2hhcmFjdGVyU2V0OgorICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21EYXRhLmNo
YXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgJm1fYXRvbURhdGEuZ3JvdXApIEdyb3VwKG90aGVyLm1fYXRvbURhdGEuZ3JvdXAp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKFRlcm0mJiBv
dGhlcikKKyAgICA6IG1fdGVybVR5cGUoV1RGOjptb3ZlKG90aGVyLm1fdGVybVR5cGUpKQorICAg
ICwgbV9xdWFudGlmaWVyKFdURjo6bW92ZShvdGhlci5tX3F1YW50aWZpZXIpKQoreworICAgIHN3
aXRjaCAobV90ZXJtVHlwZSkgeworICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgorICAgIGNhc2Ug
VGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGVybVR5cGU6OkNo
YXJhY3RlclNldDoKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5jaGFyYWN0ZXJT
ZXQpIENoYXJhY3RlclNldChXVEY6Om1vdmUob3RoZXIubV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAgICAgIG5l
dyAoTm90TnVsbCwgJm1fYXRvbURhdGEuZ3JvdXApIEdyb3VwKFdURjo6bW92ZShvdGhlci5tX2F0
b21EYXRhLmdyb3VwKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBvdGhlci5kZXN0cm95
KCk7Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKEVtcHR5VmFsdWVUYWcpCisgICAgOiBtX3Rlcm1U
eXBlKFRlcm1UeXBlOjpFbXB0eSkKK3sKK30KKworaW5saW5lIFRlcm06OlRlcm0oRGVsZXRlZFZh
bHVlVGFnKQorICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6RGVsZXRlZCkKK3sKK30KKworaW5s
aW5lIFRlcm06On5UZXJtKCkKK3sKKyAgICBkZXN0cm95KCk7Cit9CisKK2lubGluZSBib29sIFRl
cm06OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rlcm1UeXBlICE9IFRlcm1UeXBl
OjpFbXB0eSAmJiBtX3Rlcm1UeXBlICE9IFRlcm1UeXBlOjpEZWxldGVkOworfQorCitpbmxpbmUg
dm9pZCBUZXJtOjphZGRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyLCBib29sIGlzQ2FzZVNlbnNp
dGl2ZSkKK3sKKyAgICBBU1NFUlQoaXNBU0NJSShjaGFyYWN0ZXIpKTsKKworICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fdGVybVR5cGUgPT0gVGVybVR5cGU6OkNoYXJhY3Rl
clNldCk7CisgICAgaWYgKG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkNoYXJhY3RlclNldCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzQ2FzZVNlbnNpdGl2ZSB8fCAhaXNBU0NJSUFscGhh
KGNoYXJhY3RlcikpCisgICAgICAgIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMu
c2V0KGNoYXJhY3Rlcik7CisgICAgZWxzZSB7CisgICAgICAgIG1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0LmNoYXJhY3RlcnMuc2V0KHRvQVNDSUlVcHBlcihjaGFyYWN0ZXIpKTsKKyAgICAgICAgbV9h
dG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zZXQodG9BU0NJSUxvd2VyKGNoYXJhY3Rl
cikpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgVGVybTo6ZXh0ZW5kR3JvdXBTdWJwYXR0ZXJu
KGNvbnN0IFRlcm0mIHRlcm0pCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04obV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6R3JvdXApOworICAgIGlmIChtX3Rlcm1UeXBlICE9
IFRlcm1UeXBlOjpHcm91cCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYXRvbURhdGEuZ3JvdXAu
dGVybXMuYXBwZW5kKHRlcm0pOworfQorCitpbmxpbmUgdm9pZCBUZXJtOjpxdWFudGlmeShjb25z
dCBBdG9tUXVhbnRpZmllciYgcXVhbnRpZmllcikKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6T25lLCAiVHJhbnNpdGlvbiB0byBxdWFu
dGlmaWVkIHRlcm0gc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UuIik7CisgICAgbV9xdWFudGlmaWVy
ID0gcXVhbnRpZmllcjsKK30KKworaW5saW5lIHVuc2lnbmVkIFRlcm06OlRlcm06OmdlbmVyYXRl
R3JhcGgoTkZBJiBuZmEsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBBY3Rpb25TZXQmIGZpbmFsQWN0
aW9ucykgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIHVuc2lnbmVkIG5l
d0VuZDsKKworICAgIHN3aXRjaCAobV9xdWFudGlmaWVyKSB7CisgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6T25lOiB7CisgICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5m
YSwgc3RhcnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9tUXVhbnRpZmll
cjo6WmVyb09yT25lOiB7CisgICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9t
KG5mYSwgc3RhcnQpOworICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIG5l
d0VuZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpa
ZXJvT3JNb3JlOiB7CisgICAgICAgIHVuc2lnbmVkIHJlcGVhdFN0YXJ0ID0gbmZhLmNyZWF0ZU5v
ZGUoKTsKKyAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFy
dCk7CisKKyAgICAgICAgdW5zaWduZWQgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0
b20obmZhLCByZXBlYXRTdGFydCk7CisgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihy
ZXBlYXRFbmQsIHJlcGVhdFN0YXJ0KTsKKworICAgICAgICB1bnNpZ25lZCBrbGVlbkVuZCA9IG5m
YS5jcmVhdGVOb2RlKCk7CisgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRF
bmQsIGtsZWVuRW5kKTsKKyAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCBr
bGVlbkVuZCk7CisgICAgICAgIG5ld0VuZCA9IGtsZWVuRW5kOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3JlOiB7CisgICAgICAgIHVuc2ln
bmVkIHJlcGVhdFN0YXJ0ID0gbmZhLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgbmZhLmFkZEVwc2ls
b25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFydCk7CisKKyAgICAgICAgdW5zaWduZWQgcmVw
ZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCk7CisgICAg
ICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIHJlcGVhdFN0YXJ0KTsKKwor
ICAgICAgICB1bnNpZ25lZCBhZnRlclJlcGVhdCA9IG5mYS5jcmVhdGVOb2RlKCk7CisgICAgICAg
IG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIGFmdGVyUmVwZWF0KTsKKyAgICAg
ICAgbmV3RW5kID0gYWZ0ZXJSZXBlYXQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cisg
ICAgbmZhLnNldEFjdGlvbnMobmV3RW5kLCBmaW5hbEFjdGlvbnMpOworICAgIHJldHVybiBuZXdF
bmQ7Cit9CisKK2lubGluZSBib29sIFRlcm06OmlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0ICYmIG1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSA9PSAxICYmIG1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuZ2V0KDApOworfQorCitpbmxpbmUgYm9vbCBU
ZXJtOjptYXRjaGVzQXRMZWFzdE9uZUNoYXJhY3RlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
VmFsaWQoKSk7CisKKyAgICBpZiAobV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpaZXJv
T3JPbmUgfHwgbV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3JlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpHcm91
cCkgeworICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBtX2F0b21EYXRhLmdyb3VwLnRl
cm1zKSB7CisgICAgICAgICAgICBpZiAodGVybS5tYXRjaGVzQXRMZWFzdE9uZUNoYXJhY3Rlcigp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIFRlcm06
OmlzS25vd25Ub01hdGNoQW55U3RyaW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKKworICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgeworICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5
OgorICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6Cisg
ICAgICAgIC8vICIuKiIgaXMgdGhlIG9ubHkgc2ltcGxlIHRlcm0gbWF0Y2hpbmcgYW55IHN0cmlu
Zy4KKyAgICAgICAgcmV0dXJuIGlzVW5pdmVyc2FsVHJhbnNpdGlvbigpICYmIG1fcXVhbnRpZmll
ciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09yTW9yZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUZXJtVHlwZTo6R3JvdXA6IHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIGluZmluaXRlbHkgbWFu
eSB3YXlzIHRvIG1hdGNoIGFueXRoaW5nIHdpdGggZ3JvdXBzLCB3ZSBqdXN0IGhhbmRsZSBzaW1w
bGUgY2FzZXMKKyAgICAgICAgaWYgKG1fYXRvbURhdGEuZ3JvdXAudGVybXMuc2l6ZSgpICE9IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgVGVybSYgZmlyc3RU
ZXJtSW5Hcm91cCA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXMuZmlyc3QoKTsKKyAgICAgICAgLy8g
LSguKikgd2l0aCBhbnkgcXVhbnRpZmllci4KKyAgICAgICAgaWYgKGZpcnN0VGVybUluR3JvdXAu
aXNLbm93blRvTWF0Y2hBbnlTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGlmIChmaXJzdFRlcm1Jbkdyb3VwLmlzVW5pdmVyc2FsVHJhbnNpdGlvbigpKSB7Cisg
ICAgICAgICAgICAvLyAtKC4pKiwgKC4rKSosICguPykqIGV0Yy4KKyAgICAgICAgICAgIGlmICht
X3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIC8vIC0oLispPy4KKyAgICAgICAgICAgIGlm
IChtX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Olplcm9Pck9uZSAmJiBmaXJzdFRlcm1J
bkdyb3VwLm1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3JlKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyAtKC4/KSsuCisgICAgICAg
ICAgICBpZiAobV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmUgJiYgZmly
c3RUZXJtSW5Hcm91cC5tX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Olplcm9Pck9uZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgVGVybTo6
aGFzRml4ZWRMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAg
c3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CisgICAgY2Fz
ZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKKyAgICAgICAgcmV0
dXJuIG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6T25lOworICAgIGNhc2UgVGVybVR5
cGU6Okdyb3VwOiB7CisgICAgICAgIGlmIChtX3F1YW50aWZpZXIgIT0gQXRvbVF1YW50aWZpZXI6
Ok9uZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChjb25zdCBUZXJt
JiB0ZXJtIDogbV9hdG9tRGF0YS5ncm91cC50ZXJtcykgeworICAgICAgICAgICAgaWYgKCF0ZXJt
Lmhhc0ZpeGVkTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbmxpbmUgVGVybSYgVGVybTo6b3BlcmF0b3I9KGNvbnN0IFRlcm0mIG90aGVyKQor
eworICAgIGRlc3Ryb3koKTsKKyAgICBuZXcgKE5vdE51bGwsIHRoaXMpIFRlcm0ob3RoZXIpOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFRlcm0mIFRlcm06Om9wZXJhdG9yPShUZXJt
JiYgb3RoZXIpCit7CisgICAgZGVzdHJveSgpOworICAgIG5ldyAoTm90TnVsbCwgdGhpcykgVGVy
bShXVEY6Om1vdmUob3RoZXIpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBib29s
IFRlcm06Om9wZXJhdG9yPT0oY29uc3QgVGVybSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG90
aGVyLm1fdGVybVR5cGUgIT0gbV90ZXJtVHlwZSB8fCBvdGhlci5tX3F1YW50aWZpZXIgIT0gbV9x
dWFudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdGVybVR5
cGUpIHsKKyAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKKyAgICBjYXNlIFRlcm1UeXBlOjpEZWxl
dGVkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJT
ZXQ6CisgICAgICAgIHJldHVybiBtX2F0b21EYXRhLmNoYXJhY3RlclNldCA9PSBvdGhlci5tX2F0
b21EYXRhLmNoYXJhY3RlclNldDsKKyAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKKyAgICAgICAg
cmV0dXJuIG1fYXRvbURhdGEuZ3JvdXAgPT0gb3RoZXIubV9hdG9tRGF0YS5ncm91cDsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgdW5zaWduZWQgVGVybTo6aGFzaCgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcHJpbWFyeSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Rlcm1UeXBlKSA8PCAxNiB8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3F1YW50aWZpZXIpOworICAgIHVuc2lnbmVkIHNlY29uZGFyeSA9IDA7CisgICAg
c3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CisgICAgICAg
IHNlY29uZGFyeSA9IDUyMTg0MzkzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBl
OjpEZWxldGVkOgorICAgICAgICBzZWNvbmRhcnkgPSA0MDM0Mjk4ODsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OgorICAgICAgICBzZWNvbmRhcnkgPSBt
X2F0b21EYXRhLmNoYXJhY3RlclNldC5oYXNoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VGVybVR5cGU6Okdyb3VwOgorICAgICAgICBzZWNvbmRhcnkgPSBtX2F0b21EYXRhLmdyb3VwLmhh
c2goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KHByaW1hcnksIHNlY29uZGFyeSk7Cit9CisKK2lubGluZSBib29sIFRlcm06OmlzRW1wdHlWYWx1
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGVybVR5cGUgPT0gVGVybVR5cGU6OkVtcHR5Owor
fQorCitpbmxpbmUgYm9vbCBUZXJtOjppc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGVybVR5cGUgPT0gVGVybVR5cGU6OkRlbGV0ZWQ7Cit9CisKK2lubGluZSBib29sIFRl
cm06OmlzVW5pdmVyc2FsVHJhbnNpdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CisKKyAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKKyAgICBjYXNlIFRlcm1UeXBlOjpFbXB0
eToKKyAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0Ogor
ICAgICAgICByZXR1cm4gKG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkICYmICFtX2F0
b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLmJpdENvdW50KCkpCisgICAgICAgICAgICB8
fCAoIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkICYmIG1fYXRvbURhdGEuY2hhcmFj
dGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSA9PSAxMjgpOworICAgIGNhc2UgVGVybVR5cGU6
Okdyb3VwOgorICAgICAgICByZXR1cm4gbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5zaXplKCkgPT0g
MSAmJiBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuaXNVbml2ZXJzYWxUcmFuc2l0aW9u
KCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIHVuc2lnbmVkIFRlcm06
OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZhLCB1bnNpZ25lZCBzb3VyY2UpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6
CisgICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6
IHsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbmZhLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAg
aWYgKGlzVW5pdmVyc2FsVHJhbnNpdGlvbigpKQorICAgICAgICAgICAgbmZhLmFkZFRyYW5zaXRp
b25zT25BbnlDaGFyYWN0ZXIoc291cmNlLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGlmICghbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52ZXJ0ZWQpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYXJhY3Rlckl0ZXJhdG9yIDogbV9hdG9tRGF0YS5j
aGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zZXRCaXRzKCkpCisgICAgICAgICAgICAgICAgICAgIG5m
YS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0
ZXJJdGVyYXRvcikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hdG9tRGF0YS5jaGFyYWN0
ZXJTZXQuY2hhcmFjdGVycy5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgbmZhLmFkZFRyYW5zaXRpb24oc291cmNlLCB0YXJnZXQs
IHN0YXRpY19jYXN0PGNoYXI+KGkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgY2FzZSBUZXJt
VHlwZTo6R3JvdXA6IHsKKyAgICAgICAgdW5zaWduZWQgbGFzdFRhcmdldCA9IHNvdXJjZTsKKyAg
ICAgICAgZm9yIChjb25zdCBUZXJtJiB0ZXJtIDogbV9hdG9tRGF0YS5ncm91cC50ZXJtcykKKyAg
ICAgICAgICAgIGxhc3RUYXJnZXQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0VGFyZ2V0
LCBBY3Rpb25TZXQoKSk7CisgICAgICAgIHJldHVybiBsYXN0VGFyZ2V0OworICAgIH0KKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIFRlcm06OmRlc3Ryb3koKQoreworICAgIHN3aXRjaCAobV90ZXJt
VHlwZSkgeworICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgorICAgIGNhc2UgVGVybVR5cGU6OkRl
bGV0ZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoK
KyAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQufkNoYXJhY3RlclNldCgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKKyAgICAgICAgbV9hdG9tRGF0YS5n
cm91cC5+R3JvdXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fdGVybVR5cGUgPSBU
ZXJtVHlwZTo6RGVsZXRlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKKyNlbmRpZiAvLyBUZXJtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1VSTEZpbHRlclBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwCmluZGV4IDI1YTkwOWY0MTNmN2UxOWYy
MzY0ZTUyZjIyMGNlN2ZjOTIwNjYzNTguLmNjMTJiYWEzZWNiYjBjOWQyODY3NDIyMjAyMDFiMTUx
ODQzYjdlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1VS
TEZpbHRlclBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VVJMRmlsdGVyUGFyc2VyLmNwcApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKIAotI2luY2x1ZGUgIk5GQS5oIgorI2luY2x1ZGUgIkNvbWJpbmVkVVJM
RmlsdGVycy5oIgorI2luY2x1ZGUgIlRlcm0uaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Z
YXJyUGFyc2VyLmg+Ci0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzgsNDc4ICszOCwx
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7
CiAKLWVudW0gY2xhc3MgQXRvbVF1YW50aWZpZXIgOiB1aW50OF90IHsKLSAgICBPbmUsCi0gICAg
WmVyb09yT25lLAotICAgIFplcm9Pck1vcmUsCi0gICAgT25lT3JNb3JlCi19OwotCi1jbGFzcyBU
ZXJtIHsKLXB1YmxpYzoKLSAgICBUZXJtKCkKLSAgICB7Ci0gICAgfQotCi0gICAgVGVybShjaGFy
IGNoYXJhY3RlciwgYm9vbCBpc0Nhc2VTZW5zaXRpdmUpCi0gICAgICAgIDogbV90ZXJtVHlwZShU
ZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9h
dG9tRGF0YS5jaGFyYWN0ZXJTZXQpIENoYXJhY3RlclNldCgpOwotICAgICAgICBhZGRDaGFyYWN0
ZXIoY2hhcmFjdGVyLCBpc0Nhc2VTZW5zaXRpdmUpOwotICAgIH0KLQotICAgIGVudW0gVW5pdmVy
c2FsVHJhbnNpdGlvblRhZyB7IFVuaXZlcnNhbFRyYW5zaXRpb24gfTsKLSAgICBleHBsaWNpdCBU
ZXJtKFVuaXZlcnNhbFRyYW5zaXRpb25UYWcpCi0gICAgICAgIDogbV90ZXJtVHlwZShUZXJtVHlw
ZTo6Q2hhcmFjdGVyU2V0KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0
YS5jaGFyYWN0ZXJTZXQpIENoYXJhY3RlclNldCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMTI4OyArK2kpCi0gICAgICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5j
aGFyYWN0ZXJzLnNldChpKTsKLSAgICB9Ci0KLSAgICBlbnVtIENoYXJhY3RlclNldFRlcm1UYWcg
eyBDaGFyYWN0ZXJTZXRUZXJtIH07Ci0gICAgZXhwbGljaXQgVGVybShDaGFyYWN0ZXJTZXRUZXJt
VGFnLCBib29sIGlzSW52ZXJ0ZWQpCi0gICAgICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6Q2hh
cmFjdGVyU2V0KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5jaGFy
YWN0ZXJTZXQpIENoYXJhY3RlclNldCgpOwotICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNl
dC5pbnZlcnRlZCA9IGlzSW52ZXJ0ZWQ7Ci0gICAgfQotCi0gICAgZW51bSBHcm91cFRlcm1UYWcg
eyBHcm91cFRlcm0gfTsKLSAgICBleHBsaWNpdCBUZXJtKEdyb3VwVGVybVRhZykKLSAgICAgICAg
OiBtX3Rlcm1UeXBlKFRlcm1UeXBlOjpHcm91cCkKLSAgICB7Ci0gICAgICAgIG5ldyAoTm90TnVs
bCwgJm1fYXRvbURhdGEuZ3JvdXApIEdyb3VwKCk7Ci0gICAgfQotCi0gICAgZW51bSBFbmRPZkxp
bmVBc3NlcnRpb25UZXJtVGFnIHsgRW5kT2ZMaW5lQXNzZXJ0aW9uVGVybSB9OwotICAgIGV4cGxp
Y2l0IFRlcm0oRW5kT2ZMaW5lQXNzZXJ0aW9uVGVybVRhZykKLSAgICAgICAgOiBUZXJtKENoYXJh
Y3RlclNldFRlcm0sIGZhbHNlKQotICAgIHsKLSAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJT
ZXQuY2hhcmFjdGVycy5zZXQoMCk7Ci0gICAgfQotCi0gICAgVGVybShjb25zdCBUZXJtJiBvdGhl
cikKLSAgICAgICAgOiBtX3Rlcm1UeXBlKG90aGVyLm1fdGVybVR5cGUpCi0gICAgICAgICwgbV9x
dWFudGlmaWVyKG90aGVyLm1fcXVhbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90
ZXJtVHlwZSkgewotICAgICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKLSAgICAgICAgY2FzZSBU
ZXJtVHlwZTo6RGVsZXRlZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1U
eXBlOjpDaGFyYWN0ZXJTZXQ6Ci0gICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21EYXRh
LmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKLSAg
ICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuZ3JvdXApIEdyb3VwKG90aGVyLm1f
YXRvbURhdGEuZ3JvdXApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBUZXJtKFRlcm0mJiBvdGhlcikKLSAgICAgICAgOiBtX3Rlcm1UeXBlKFdURjo6bW92ZShv
dGhlci5tX3Rlcm1UeXBlKSkKLSAgICAgICAgLCBtX3F1YW50aWZpZXIoV1RGOjptb3ZlKG90aGVy
Lm1fcXVhbnRpZmllcikpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKLSAg
ICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0
ZWQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVy
U2V0OgotICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQp
IENoYXJhY3RlclNldChXVEY6Om1vdmUob3RoZXIubV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKLSAgICAg
ICAgICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuZ3JvdXApIEdyb3VwKFdURjo6bW92ZShv
dGhlci5tX2F0b21EYXRhLmdyb3VwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBvdGhlci5kZXN0cm95KCk7Ci0gICAgfQotCi0gICAgZW51bSBFbXB0eVZhbHVlVGFn
IHsgRW1wdHlWYWx1ZSB9OwotICAgIFRlcm0oRW1wdHlWYWx1ZVRhZykKLSAgICAgICAgOiBtX3Rl
cm1UeXBlKFRlcm1UeXBlOjpFbXB0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgZW51bSBEZWxldGVk
VmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKLSAgICBUZXJtKERlbGV0ZWRWYWx1ZVRhZykKLSAg
ICAgICAgOiBtX3Rlcm1UeXBlKFRlcm1UeXBlOjpEZWxldGVkKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB+VGVybSgpCi0gICAgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgfQotCi0gICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Rlcm1UeXBlICE9IFRlcm1U
eXBlOjpFbXB0eSAmJiBtX3Rlcm1UeXBlICE9IFRlcm1UeXBlOjpEZWxldGVkOwotICAgIH0KLQot
ICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgYm9vbCBpc0Nhc2VTZW5zaXRp
dmUpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNBU0NJSShjaGFyYWN0ZXIpKTsKLQotICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX3Rlcm1UeXBlID09IFRlcm1UeXBl
OjpDaGFyYWN0ZXJTZXQpOwotICAgICAgICBpZiAobV90ZXJtVHlwZSAhPSBUZXJtVHlwZTo6Q2hh
cmFjdGVyU2V0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChpc0Nhc2VTZW5z
aXRpdmUgfHwgIWlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgbV9hdG9tRGF0
YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zZXQoY2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldCh0b0FT
Q0lJVXBwZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNl
dC5jaGFyYWN0ZXJzLnNldCh0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2b2lkIGV4dGVuZEdyb3VwU3VicGF0dGVybihjb25zdCBUZXJtJiB0ZXJtKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV90ZXJtVHlw
ZSA9PSBUZXJtVHlwZTo6R3JvdXApOwotICAgICAgICBpZiAobV90ZXJtVHlwZSAhPSBUZXJtVHlw
ZTo6R3JvdXApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fYXRvbURhdGEuZ3JvdXAu
dGVybXMuYXBwZW5kKHRlcm0pOwotICAgIH0KLQotICAgIHZvaWQgcXVhbnRpZnkoY29uc3QgQXRv
bVF1YW50aWZpZXImIHF1YW50aWZpZXIpCi0gICAgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6T25lLCAiVHJhbnNpdGlvbiB0byBx
dWFudGlmaWVkIHRlcm0gc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UuIik7Ci0gICAgICAgIG1fcXVh
bnRpZmllciA9IHF1YW50aWZpZXI7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFw
aChORkEmIG5mYSwgdWludDY0X3QgcGF0dGVybklkLCB1bnNpZ25lZCBzdGFydCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgICAgIHN3aXRjaCAobV9xdWFu
dGlmaWVyKSB7Ci0gICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZTogewotICAgICAgICAg
ICAgdW5zaWduZWQgbmV3RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBwYXR0ZXJu
SWQsIHN0YXJ0KTsKLSAgICAgICAgICAgIHJldHVybiBuZXdFbmQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6WmVyb09yT25lOiB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBuZXdFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHBhdHRlcm5JZCwgc3RhcnQp
OwotICAgICAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCBuZXdFbmQpOwot
ICAgICAgICAgICAgcmV0dXJuIG5ld0VuZDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF0b21R
dWFudGlmaWVyOjpaZXJvT3JNb3JlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRTdGFy
dCA9IG5mYS5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICBuZmEuYWRkUnVsZUlkKHJlcGVhdFN0
YXJ0LCBwYXR0ZXJuSWQpOwotICAgICAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0
YXJ0LCByZXBlYXRTdGFydCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdEVuZCA9IGdl
bmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgcGF0dGVybklkLCByZXBlYXRTdGFydCk7Ci0gICAg
ICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCByZXBlYXRTdGFydCk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGtsZWVuRW5kID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAg
ICAgICAgICAgIG5mYS5hZGRSdWxlSWQoa2xlZW5FbmQsIHBhdHRlcm5JZCk7Ci0gICAgICAgICAg
ICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBrbGVlbkVuZCk7Ci0gICAgICAg
ICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIGtsZWVuRW5kKTsKLSAgICAgICAg
ICAgIHJldHVybiBrbGVlbkVuZDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF0b21RdWFudGlm
aWVyOjpPbmVPck1vcmU6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdFN0YXJ0ID0gbmZh
LmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIG5mYS5hZGRSdWxlSWQocmVwZWF0U3RhcnQsIHBh
dHRlcm5JZCk7Ci0gICAgICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIHJl
cGVhdFN0YXJ0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0RW5kID0gZ2VuZXJhdGVT
dWJncmFwaEZvckF0b20obmZhLCBwYXR0ZXJuSWQsIHJlcGVhdFN0YXJ0KTsKLSAgICAgICAgICAg
IG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIHJlcGVhdFN0YXJ0KTsKLQotICAg
ICAgICAgICAgdW5zaWduZWQgYWZ0ZXJSZXBlYXQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgbmZhLmFkZFJ1bGVJZChhZnRlclJlcGVhdCwgcGF0dGVybklkKTsKLSAgICAgICAgICAg
IG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIGFmdGVyUmVwZWF0KTsKLSAgICAg
ICAgICAgIHJldHVybiBhZnRlclJlcGVhdDsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0VuZE9mTGluZUFzc2VydGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0ICYmIG1fYXRvbURhdGEu
Y2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSA9PSAxICYmIG1fYXRvbURhdGEuY2hh
cmFjdGVyU2V0LmNoYXJhY3RlcnMuZ2V0KDApOwotICAgIH0KLQotICAgIGJvb2wgbWF0Y2hlc0F0
TGVhc3RPbmVDaGFyYWN0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQo
KSk7Ci0KLSAgICAgICAgaWYgKG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09y
T25lIHx8IG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09yTW9yZSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1fdGVybVR5cGUgPT0g
VGVybVR5cGU6Okdyb3VwKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBt
X2F0b21EYXRhLmdyb3VwLnRlcm1zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRlcm0ubWF0Y2hl
c0F0TGVhc3RPbmVDaGFyYWN0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gTWF0Y2hlcyBhbnkgc3RyaW5nLCB0
aGUgZW1wdHkgc3RyaW5nIGluY2x1ZGVkLgotICAgIC8vIFRoaXMgaXMgdmVyeSBjb25zZXJ2YXRp
dmUuIFBhdHRlcm5zIG1hdGNoaW5nIGFueSBzdHJpbmcgY2FuIHJldHVybiBmYWxzZSBoZXJlLgot
ICAgIGJvb2wgaXNLbm93blRvTWF0Y2hBbnlTdHJpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7Ci0gICAg
ICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgotICAgICAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVk
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OgotICAgICAgICAgICAgLy8gIi4q
IiBpcyB0aGUgb25seSBzaW1wbGUgdGVybSBtYXRjaGluZyBhbnkgc3RyaW5nLgotICAgICAgICAg
ICAgcmV0dXJuIGlzVW5pdmVyc2FsVHJhbnNpdGlvbigpICYmIG1fcXVhbnRpZmllciA9PSBBdG9t
UXVhbnRpZmllcjo6WmVyb09yTW9yZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFRlcm1UeXBlOjpHcm91cDogewotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIGluZmluaXRlbHkg
bWFueSB3YXlzIHRvIG1hdGNoIGFueXRoaW5nIHdpdGggZ3JvdXBzLCB3ZSBqdXN0IGhhbmRsZSBz
aW1wbGUgY2FzZXMKLSAgICAgICAgICAgIGlmIChtX2F0b21EYXRhLmdyb3VwLnRlcm1zLnNpemUo
KSAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgY29u
c3QgVGVybSYgZmlyc3RUZXJtSW5Hcm91cCA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXMuZmlyc3Qo
KTsKLSAgICAgICAgICAgIC8vIC0oLiopIHdpdGggYW55IHF1YW50aWZpZXIuCi0gICAgICAgICAg
ICBpZiAoZmlyc3RUZXJtSW5Hcm91cC5pc0tub3duVG9NYXRjaEFueVN0cmluZygpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoZmlyc3RUZXJtSW5Hcm91
cC5pc1VuaXZlcnNhbFRyYW5zaXRpb24oKSkgewotICAgICAgICAgICAgICAgIC8vIC0oLikqLCAo
LispKiwgKC4/KSogZXRjLgotICAgICAgICAgICAgICAgIGlmIChtX3F1YW50aWZpZXIgPT0gQXRv
bVF1YW50aWZpZXI6Olplcm9Pck1vcmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgICAgICAgICAgLy8gLSguKyk/LgotICAgICAgICAgICAgICAgIGlmIChtX3F1
YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Olplcm9Pck9uZSAmJiBmaXJzdFRlcm1Jbkdyb3Vw
Lm1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3JlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vIC0oLj8pKy4KLSAgICAg
ICAgICAgICAgICBpZiAobV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmUg
JiYgZmlyc3RUZXJtSW5Hcm91cC5tX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Olplcm9P
ck9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBUZXJtJiBvcGVyYXRvcj0oY29uc3QgVGVybSYgb3RoZXIpCi0g
ICAgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgdGhpcykgVGVy
bShvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBUZXJtJiBvcGVy
YXRvcj0oVGVybSYmIG90aGVyKQotICAgIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBu
ZXcgKE5vdE51bGwsIHRoaXMpIFRlcm0oV1RGOjptb3ZlKG90aGVyKSk7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGVybSYgb3RoZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAob3RoZXIubV90ZXJtVHlwZSAhPSBtX3Rlcm1UeXBl
IHx8IG90aGVyLm1fcXVhbnRpZmllciAhPSBtX3F1YW50aWZpZXIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7Ci0gICAgICAgIGNhc2Ug
VGVybVR5cGU6OkVtcHR5OgotICAgICAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoK
LSAgICAgICAgICAgIHJldHVybiBtX2F0b21EYXRhLmNoYXJhY3RlclNldCA9PSBvdGhlci5tX2F0
b21EYXRhLmNoYXJhY3RlclNldDsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6Ci0gICAg
ICAgICAgICByZXR1cm4gbV9hdG9tRGF0YS5ncm91cCA9PSBvdGhlci5tX2F0b21EYXRhLmdyb3Vw
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICB1bnNpZ25lZCBwcmltYXJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGVybVR5cGUp
IDw8IDE2IHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcXVhbnRpZmllcik7Ci0gICAgICAgIHVu
c2lnbmVkIHNlY29uZGFyeSA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgewotICAg
ICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKLSAgICAgICAgICAgIHNlY29uZGFyeSA9IDUyMTg0
MzkzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6
Ci0gICAgICAgICAgICBzZWNvbmRhcnkgPSA0MDM0Mjk4ODsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6Ci0gICAgICAgICAgICBzZWNvbmRh
cnkgPSBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5oYXNoKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6Ci0gICAgICAgICAgICBzZWNvbmRhcnkgPSBt
X2F0b21EYXRhLmdyb3VwLmhhc2goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKHByaW1hcnksIHNlY29uZGFyeSk7Ci0gICAg
fQotCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fdGVybVR5cGUgPT0gVGVybVR5cGU6OkVtcHR5OwotICAgIH0KLQotICAgIGJvb2wgaXNEZWxl
dGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGVybVR5cGUgPT0gVGVy
bVR5cGU6OkRlbGV0ZWQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgaXMgZXhhY3Qg
Zm9yIGNoYXJhY3RlciBzZXRzIGJ1dCBjb25zZXJ2YXRpdmUgZm9yIGdyb3Vwcy4KLSAgICAvLyBU
aGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBmYWxzZSBmb3IgYSBncm91cCBlcXVpdmFsZW50IHRvIGEg
dW5pdmVyc2FsIHRyYW5zaXRpb24uCi0gICAgYm9vbCBpc1VuaXZlcnNhbFRyYW5zaXRpb24oKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICAgICAgc3dpdGNo
IChtX3Rlcm1UeXBlKSB7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgotICAgICAgICBj
YXNlIFRlcm1UeXBlOjpEZWxldGVkOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0
OgotICAgICAgICAgICAgcmV0dXJuIChtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCAm
JiAhbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5iaXRDb3VudCgpKQotICAgICAg
ICAgICAgICAgIHx8ICghbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52ZXJ0ZWQgJiYgbV9hdG9t
RGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5iaXRDb3VudCgpID09IDEyOCk7Ci0gICAgICAg
IGNhc2UgVGVybVR5cGU6Okdyb3VwOgotICAgICAgICAgICAgcmV0dXJuIG1fYXRvbURhdGEuZ3Jv
dXAudGVybXMuc2l6ZSgpID09IDEgJiYgbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5maXJzdCgpLmlz
VW5pdmVyc2FsVHJhbnNpdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmIG5mYSwg
dWludDY0X3QgcGF0dGVybklkLCB1bnNpZ25lZCBzb3VyY2UpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Ci0g
ICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6
Q2hhcmFjdGVyU2V0OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBuZmEuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgbmZhLmFkZFJ1bGVJZCh0YXJnZXQsIHBhdHRlcm5JZCk7Ci0g
ICAgICAgICAgICBpZiAoaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkpCi0gICAgICAgICAgICAgICAg
bmZhLmFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIoc291cmNlLCB0YXJnZXQpOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNl
dC5pbnZlcnRlZCkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYXJh
Y3Rlckl0ZXJhdG9yIDogbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zZXRCaXRz
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRh
cmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVySXRlcmF0b3IpKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3Rl
cnMuZ2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbmZhLmFkZFRyYW5zaXRpb24oc291cmNlLCB0YXJnZXQsIHN0YXRp
Y19jYXN0PGNoYXI+KGkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxh
c3RUYXJnZXQgPSBzb3VyY2U7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBt
X2F0b21EYXRhLmdyb3VwLnRlcm1zKQotICAgICAgICAgICAgICAgIGxhc3RUYXJnZXQgPSB0ZXJt
LmdlbmVyYXRlR3JhcGgobmZhLCBwYXR0ZXJuSWQsIGxhc3RUYXJnZXQpOwotICAgICAgICAgICAg
cmV0dXJuIGxhc3RUYXJnZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZv
aWQgZGVzdHJveSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0
OgotICAgICAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQufkNoYXJhY3RlclNldCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6Okdyb3VwOgotICAgICAg
ICAgICAgbV9hdG9tRGF0YS5ncm91cC5+R3JvdXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIG1fdGVybVR5cGUgPSBUZXJtVHlwZTo6RGVsZXRlZDsKLSAgICB9Ci0K
LSAgICBlbnVtIGNsYXNzIFRlcm1UeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEVtcHR5LAotICAg
ICAgICBEZWxldGVkLAotICAgICAgICBDaGFyYWN0ZXJTZXQsCi0gICAgICAgIEdyb3VwCi0gICAg
fTsKLQotICAgIFRlcm1UeXBlIG1fdGVybVR5cGUgeyBUZXJtVHlwZTo6RW1wdHkgfTsKLSAgICBB
dG9tUXVhbnRpZmllciBtX3F1YW50aWZpZXIgeyBBdG9tUXVhbnRpZmllcjo6T25lIH07Ci0KLSAg
ICBzdHJ1Y3QgQ2hhcmFjdGVyU2V0IHsKLSAgICAgICAgYm9vbCBpbnZlcnRlZCB7IGZhbHNlIH07
Ci0gICAgICAgIEJpdFZlY3RvciBjaGFyYWN0ZXJzIHsgMTI4IH07Ci0KLSAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENoYXJhY3RlclNldCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBvdGhlci5pbnZlcnRlZCA9PSBpbnZlcnRlZCAmJiBvdGhlci5jaGFy
YWN0ZXJzID09IGNoYXJhY3RlcnM7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2go
aW52ZXJ0ZWQsIGNoYXJhY3RlcnMuaGFzaCgpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgR3JvdXAgewotICAgICAgICBWZWN0b3I8VGVybT4gdGVybXM7Ci0KLSAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdyb3VwJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG90aGVyLnRlcm1zID09IHRlcm1zOwotICAgICAgICB9Ci0KLSAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGhh
c2ggPSA2NDIxNzQ5OwotICAgICAgICAgICAgZm9yIChjb25zdCBUZXJtJiB0ZXJtIDogdGVybXMp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCB0ZXJtSGFzaCA9IHRlcm0uaGFzaCgpOwotICAg
ICAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxNikgXiAoKHRlcm1IYXNoIDw8IDExKSBeIGhh
c2gpOwotICAgICAgICAgICAgICAgIGhhc2ggKz0gaGFzaCA+PiAxMTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHVuaW9u
IEF0b21EYXRhIHsKLSAgICAgICAgQXRvbURhdGEoKQotICAgICAgICAgICAgOiBpbnZhbGlkVGVy
bSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgfkF0b21EYXRhKCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgY2hhciBpbnZhbGlkVGVybTsKLSAgICAgICAgQ2hhcmFj
dGVyU2V0IGNoYXJhY3RlclNldDsKLSAgICAgICAgR3JvdXAgZ3JvdXA7Ci0gICAgfSBtX2F0b21E
YXRhOwotfTsKLQotc3RydWN0IFRlcm1IYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBUZXJtJiB0ZXJtKSB7IHJldHVybiB0ZXJtLmhhc2goKTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFRlcm0mIGEsIGNvbnN0IFRlcm0mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQot
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKLX07Ci0KLXN0cnVjdCBUZXJtSGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OkN1c3RvbUhhc2hU
cmFpdHM8VGVybT4geyB9OwotCi1zdHJ1Y3QgUHJlZml4VHJlZUVudHJ5IHsKLSAgICB1bnNpZ25l
ZCBuZmFOb2RlOwotICAgIEhhc2hNYXA8VGVybSwgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVF
bnRyeT4sIFRlcm1IYXNoLCBUZXJtSGFzaFRyYWl0cz4gbmV4dFBhdHRlcm47Ci19OwotCi1jbGFz
cyBHcmFwaEJ1aWxkZXIgeworY2xhc3MgUGF0dGVyblBhcnNlciB7CiBwdWJsaWM6Ci0gICAgR3Jh
cGhCdWlsZGVyKE5GQSYgbmZhLCBQcmVmaXhUcmVlRW50cnkmIHByZWZpeFRyZWVSb290LCBib29s
IHBhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUsIHVpbnQ2NF90IHBhdHRlcm5JZCkKLSAgICAgICAgOiBt
X25mYShuZmEpCi0gICAgICAgICwgbV9wYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlKHBhdHRlcm5Jc0Nh
c2VTZW5zaXRpdmUpCi0gICAgICAgICwgbV9wYXR0ZXJuSWQocGF0dGVybklkKQotICAgICAgICAs
IG1fc3VidHJlZVN0YXJ0KG5mYS5yb290KCkpCi0gICAgICAgICwgbV9zdWJ0cmVlRW5kKG5mYS5y
b290KCkpCi0gICAgICAgICwgbV9sYXN0UHJlZml4VHJlZUVudHJ5KCZwcmVmaXhUcmVlUm9vdCkK
KyAgICBQYXR0ZXJuUGFyc2VyKGJvb2wgcGF0dGVybklzQ2FzZVNlbnNpdGl2ZSkKKyAgICAgICAg
OiBtX3BhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUocGF0dGVybklzQ2FzZVNlbnNpdGl2ZSkKICAgICAg
ICAgLCBtX3BhcnNlU3RhdHVzKFVSTEZpbHRlclBhcnNlcjo6T2spCiAgICAgewogICAgIH0KIAot
ICAgIHZvaWQgZmluYWxpemUoKQorICAgIHZvaWQgZmluYWxpemUodWludDY0X3QgcGF0dGVybklk
LCBDb21iaW5lZFVSTEZpbHRlcnMmIGNvbWJpbmVkVVJMRmlsdGVycykKICAgICB7CiAgICAgICAg
IGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTMxLDMwICs2OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgdGVybSA6IG1fc3Vua1Rlcm1zKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9s
YXN0UHJlZml4VHJlZUVudHJ5KTsKLSAgICAgICAgICAgIGF1dG8gbmV4dEVudHJ5ID0gbV9sYXN0
UHJlZml4VHJlZUVudHJ5LT5uZXh0UGF0dGVybi5maW5kKHRlcm0pOwotICAgICAgICAgICAgaWYg
KG5leHRFbnRyeSAhPSBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5leHRQYXR0ZXJuLmVuZCgpKSB7
Ci0gICAgICAgICAgICAgICAgbV9sYXN0UHJlZml4VHJlZUVudHJ5ID0gbmV4dEVudHJ5LT52YWx1
ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBtX25mYS5hZGRSdWxlSWQobV9sYXN0UHJlZml4VHJl
ZUVudHJ5LT5uZmFOb2RlLCBtX3BhdHRlcm5JZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlRW50cnk+IG5leHRQcmVmaXhU
cmVlRW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFByZWZpeFRyZWVFbnRyeT4oKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmQgPSB0ZXJtLmdlbmVyYXRl
R3JhcGgobV9uZmEsIG1fcGF0dGVybklkLCBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5mYU5vZGUp
OwotICAgICAgICAgICAgICAgIG5leHRQcmVmaXhUcmVlRW50cnktPm5mYU5vZGUgPSBuZXdFbmQ7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2xh
c3RQcmVmaXhUcmVlRW50cnktPm5leHRQYXR0ZXJuLnNldCh0ZXJtLCBXVEY6Om1vdmUobmV4dFBy
ZWZpeFRyZWVFbnRyeSkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7Ci0KLSAgICAgICAgICAgICAgICBtX2xhc3RQcmVmaXhUcmVlRW50cnkgPSBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9z
dWJ0cmVlRW5kID0gbV9sYXN0UHJlZml4VHJlZUVudHJ5LT5uZmFOb2RlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fb3Blbkdyb3Vwcy5pc0VtcHR5
KCksICJBbiB1bmNsb3NlZCBncm91cCBzaG91bGQgYmUgYSBwYXJzaW5nIGVycm9yIGluIFlBUlIu
Iik7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdWJ0cmVlU3RhcnQgIT0gbV9zdWJ0
cmVlRW5kLCAiVGhpcyByZWdleCBjYW5ub3QgbWF0Y2ggYW55dGhpbmciKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fbmZhLnNldEZpbmFsKG1fc3VidHJlZUVuZCwgbV9wYXR0ZXJuSWQpOworICAgICAg
ICBjb21iaW5lZFVSTEZpbHRlcnMuYWRkUGF0dGVybihwYXR0ZXJuSWQsIG1fc3Vua1Rlcm1zKTsK
ICAgICB9CiAKICAgICBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIHBhcnNlU3RhdHVzKCkg
Y29uc3QKQEAgLTYyMCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNFcnJvcigp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChtX3N1YnRyZWVTdGFydCAhPSBt
X3N1YnRyZWVFbmQgfHwgbV9mbG9hdGluZ1Rlcm0uaXNWYWxpZCgpIHx8ICFtX29wZW5Hcm91cHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nVGVybS5pc1ZhbGlkKCkgfHwgIW1f
c3Vua1Rlcm1zLmlzRW1wdHkoKSB8fCAhbV9vcGVuR3JvdXBzLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgZmFpbChVUkxGaWx0ZXJQYXJzZXI6Ok1pc3BsYWNlZFN0YXJ0T2ZMaW5lKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtODAyLDMwICszMTYsMjAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fc3Vua1Rlcm1zLnJlbW92ZUxhc3QoKTsKICAgICB9CiAKLSAgICBORkEm
IG1fbmZhOwogICAgIGJvb2wgbV9wYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlOwotICAgIGNvbnN0IHVp
bnQ2NF90IG1fcGF0dGVybklkOwogCi0gICAgdW5zaWduZWQgbV9zdWJ0cmVlU3RhcnQgeyAwIH07
Ci0gICAgdW5zaWduZWQgbV9zdWJ0cmVlRW5kIHsgMCB9OwotCi0gICAgUHJlZml4VHJlZUVudHJ5
KiBtX2xhc3RQcmVmaXhUcmVlRW50cnk7CiAgICAgRGVxdWU8VGVybT4gbV9vcGVuR3JvdXBzOwog
ICAgIFZlY3RvcjxUZXJtPiBtX3N1bmtUZXJtczsKICAgICBUZXJtIG1fZmxvYXRpbmdUZXJtOwog
ICAgIGJvb2wgbV9oYXNCZWdpbm5pbmdPZkxpbmVBc3NlcnRpb24geyBmYWxzZSB9OwogICAgIGJv
b2wgbV9oYXNQcm9jZXNzZWRFbmRPZkxpbmVBc3NlcnRpb24geyBmYWxzZSB9OwogCi0gICAgVGVy
bSBtX25ld1ByZWZpeFN0YXJpbmdQb2ludDsKLQogICAgIFVSTEZpbHRlclBhcnNlcjo6UGFyc2VT
dGF0dXMgbV9wYXJzZVN0YXR1czsKIH07CiAKLVVSTEZpbHRlclBhcnNlcjo6VVJMRmlsdGVyUGFy
c2VyKE5GQSYgbmZhKQotICAgIDogbV9uZmEobmZhKQotICAgICwgbV9wcmVmaXhUcmVlUm9vdChz
dGQ6Om1ha2VfdW5pcXVlPFByZWZpeFRyZWVFbnRyeT4oKSkKK1VSTEZpbHRlclBhcnNlcjo6VVJM
RmlsdGVyUGFyc2VyKENvbWJpbmVkVVJMRmlsdGVycyYgY29tYmluZWRVUkxGaWx0ZXJzKQorICAg
IDogbV9jb21iaW5lZFVSTEZpbHRlcnMoY29tYmluZWRVUkxGaWx0ZXJzKQogewotICAgIG1fcHJl
Zml4VHJlZVJvb3QtPm5mYU5vZGUgPSBuZmEucm9vdCgpOwogfQogCiBVUkxGaWx0ZXJQYXJzZXI6
On5VUkxGaWx0ZXJQYXJzZXIoKQpAQCAtODM5LDIxICszNDMsMTYgQEAgVVJMRmlsdGVyUGFyc2Vy
OjpQYXJzZVN0YXR1cyBVUkxGaWx0ZXJQYXJzZXI6OmFkZFBhdHRlcm4oY29uc3QgU3RyaW5nJiBw
YXR0ZXJuLAogICAgIGlmIChwYXR0ZXJuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEVtcHR5
UGF0dGVybjsKIAotICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX25mYS5ncmFwaFNpemUoKTsKLQog
ICAgIFBhcnNlU3RhdHVzIHN0YXR1cyA9IE9rOwotICAgIEdyYXBoQnVpbGRlciBncmFwaEJ1aWxk
ZXIobV9uZmEsICptX3ByZWZpeFRyZWVSb290LCBwYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlLCBwYXR0
ZXJuSWQpOwotICAgIFN0cmluZyBlcnJvciA9IFN0cmluZyhKU0M6OllhcnI6OnBhcnNlKGdyYXBo
QnVpbGRlciwgcGF0dGVybiwgMCkpOworICAgIFBhdHRlcm5QYXJzZXIgcGF0dGVyblBhcnNlcihw
YXR0ZXJuSXNDYXNlU2Vuc2l0aXZlKTsKKyAgICBTdHJpbmcgZXJyb3IgPSBTdHJpbmcoSlNDOjpZ
YXJyOjpwYXJzZShwYXR0ZXJuUGFyc2VyLCBwYXR0ZXJuLCAwKSk7CiAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQotICAgICAgICBncmFwaEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICAgICAgcGF0dGVy
blBhcnNlci5maW5hbGl6ZShwYXR0ZXJuSWQsIG1fY29tYmluZWRVUkxGaWx0ZXJzKTsKICAgICBl
bHNlCiAgICAgICAgIHN0YXR1cyA9IFlhcnJFcnJvcjsKICAgICAKICAgICBpZiAoc3RhdHVzID09
IE9rKQotICAgICAgICBzdGF0dXMgPSBncmFwaEJ1aWxkZXIucGFyc2VTdGF0dXMoKTsKLQotICAg
IGlmIChzdGF0dXMgIT0gT2spCi0gICAgICAgIG1fbmZhLnJlc3RvcmVUb0dyYXBoU2l6ZShvbGRT
aXplKTsKKyAgICAgICAgc3RhdHVzID0gcGF0dGVyblBhcnNlci5wYXJzZVN0YXR1cygpOwogCiAg
ICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL1VSTEZpbHRlclBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvVVJMRmlsdGVyUGFyc2VyLmgKaW5kZXggMDgyMzlhZGIwMGFjNTcwYTc2NTM2YWEyNTM4
NmQwZGEyZWEwMTM5Yi4uZWQwOGE4MmIzNzAxMTI2NDM0NThjZDVjNmRhZTNjZTIyMjNhNWJhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFy
c2VyLmgKQEAgLTI4LDE2ICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNp
b25zIHsKIAotY2xhc3MgTkZBOwotCi1zdHJ1Y3QgUHJlZml4VHJlZUVudHJ5OworY2xhc3MgQ29t
YmluZWRVUkxGaWx0ZXJzOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBVUkxGaWx0ZXJQYXJzZXIg
ewogcHVibGljOgpAQCAtNTgsMTMgKzU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgSW52YWxpZFF1
YW50aWZpZXIsCiAgICAgfTsKICAgICBzdGF0aWMgU3RyaW5nIHN0YXR1c1N0cmluZyhQYXJzZVN0
YXR1cyk7Ci0gICAgZXhwbGljaXQgVVJMRmlsdGVyUGFyc2VyKE5GQSYpOworICAgIGV4cGxpY2l0
IFVSTEZpbHRlclBhcnNlcihDb21iaW5lZFVSTEZpbHRlcnMmKTsKICAgICB+VVJMRmlsdGVyUGFy
c2VyKCk7CiAgICAgUGFyc2VTdGF0dXMgYWRkUGF0dGVybihjb25zdCBTdHJpbmcmIHBhdHRlcm4s
IGJvb2wgcGF0dGVybklzQ2FzZVNlbnNpdGl2ZSwgdWludDY0X3QgcGF0dGVybklkKTsKIAogcHJp
dmF0ZToKLSAgICBORkEmIG1fbmZhOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlRW50
cnk+IG1fcHJlZml4VHJlZVJvb3Q7CisgICAgQ29tYmluZWRVUkxGaWx0ZXJzJiBtX2NvbWJpbmVk
VVJMRmlsdGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjRiYzQ4MWM4
YWFhZDFjZDRhNzVhNDQ0Zjc1YjQ1Y2ExZjFiODcwMi4uOGJjMDRhMTk5MmM0ZDA5OThjODg5NTQ3
NGY4NmJhNWNlZmFiNDQ3ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAzLTMwICBCZW5qYW1pbiBQb3VsYWlu
ICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIENvbnRlbnQgRXh0ZW5zaW9uczogc3Bs
aXQgdGhlIHN0YXRlIG1hY2hpbmVzIHRvIG1pbmltaXplIHByZWZpeCBzdGF0ZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzI1MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0UGF0dGVyblN0YXR1cyk6
CisKIDIwMTUtMDMtMzAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBDb3JyZWN0bHkgaGFuZGxlIHJlZ3Vs
YXIgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgZXZlcnl0aGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMTk3
NjU1ZDU1YjNlYmIwMzg0NWQ1OWU1NDAxNjU0MmVlZTBiYTE3Yy4uYTM3Y2VjMDUyOTI2YjcyY2E1
YmExZDVkZGNlOTU3ZWNmNDFhYjEwMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbWJpbmVkVVJM
RmlsdGVycy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oPgpAQCAtNjIxLDEwICs2MjIsODYgQEAg
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTikKICAgICAgICAgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdleCk7CiB9
CiAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFj
aGluZXMxKQoreworICAgIGNvbnN0IGNoYXIqIHN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVz
RmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJeLipmb29cIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmFyJFwifX0sIgorICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeW2FiXStiYW5nXCJ9fV0iOworCisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihzdHJpY3RQcmVmaXhT
ZXBhcmF0ZWRNYWNoaW5lc0ZpbHRlcik7CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CisgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5z
aW9uKCJTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczEiLCBleHRlbnNpb24pOworCisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvZm9vIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmb286Ly93ZWJr
aXQub3JnL2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmcvYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJi
YXI6Ly93ZWJraXQub3JnL2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJhYmFuZzovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJiYmFuZzovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJjYmFuZzovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmFuZyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJhbmc6
Ly93ZWJraXQub3JnLyIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVzMVBhcnRpdGlvbmluZykKK3sKKyAgICBDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAg
ICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZp
bHRlcnMpOworCisgICAgLy8gVGhvc2UgdHdvIHNoYXJlIGEgcHJlZml4LgorICAgIEVYUEVDVF9F
UShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBh
cnNlci5hZGRQYXR0ZXJuKCJeLipmb28iLCBmYWxzZSwgMCkpOworICAgIEVYUEVDVF9FUShDb250
ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5h
ZGRQYXR0ZXJuKCJiYXIkIiwgZmFsc2UsIDEpKTsKKworICAgIC8vIE5vdCB0aGlzIG9uZS4KKyAg
ICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0
dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiXlthYl0rYmFuZyIsIGZhbHNlLCAwKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMnVsLCBjb21iaW5lZFVSTEZpbHRlcnMuY3JlYXRlTkZBcygpLnNpemUoKSk7
Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVk
TWFjaGluZXMyKQoreworICAgIGNvbnN0IGNoYXIqIHN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hp
bmVzRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJeZm9vXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl4uKlthLWNdK2Jhclwi
fX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJed2Via2l0OlwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1jXStiK29vbVwi
fX1dIjsKKworICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoc3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXNGaWx0
ZXIpOworCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBi
YWNrZW5kOworICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiU3RyaWN0UHJlZml4U2Vw
YXJhdGVkTWFjaGluZXMyIiwgZXh0ZW5zaW9uKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZvbzovL3dlYmtpdC5vcmcv
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ3ZWJraXQ6Ly93ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmFy
Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vYWJhci5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vYmJhci5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vY2Jhci5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vYWJjYmFyLm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly9kYmFyLm9yZy8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczJQYXJ0aXRpb25pbmcpCit7
CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVSTEZp
bHRlcnM7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlciBwYXJzZXIoY29t
YmluZWRVUkxGaWx0ZXJzKTsKKworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJM
RmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJeZm9vIiwg
ZmFsc2UsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBh
cnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiXi4qW2EtY10rYmFyIiwg
ZmFsc2UsIDEpKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBh
cnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiXndlYmtpdDoiLCBmYWxz
ZSwgMikpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2Vy
OjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJbYS1jXStiK29vbSIsIGZhbHNl
LCAzKSk7CisKKyAgICAvLyAiXmZvbyIgYW5kICJed2Via2l0OiIgY2FuIGJlIGdyb3VwZWQsIHRo
ZSBvdGhlciB0d28gaGF2ZSBhIHZhcmlhYmxlIHByZWZpeC4KKyAgICBFWFBFQ1RfRVEoM3VsLCBj
b21iaW5lZFVSTEZpbHRlcnMuY3JlYXRlTkZBcygpLnNpemUoKSk7Cit9CisKIHN0YXRpYyB2b2lk
IHRlc3RQYXR0ZXJuU3RhdHVzKFN0cmluZyBwYXR0ZXJuLCBDb250ZW50RXh0ZW5zaW9uczo6VVJM
RmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1cyBzdGF0dXMpCiB7Ci0gICAgQ29udGVudEV4dGVuc2lv
bnM6Ok5GQSBuZmE7Ci0gICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlciBwYXJz
ZXIobmZhKTsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJp
bmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBh
cnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOwogICAgIEVYUEVDVF9FUShzdGF0dXMsIHBhcnNlci5h
ZGRQYXR0ZXJuKHBhdHRlcm4sIGZhbHNlLCAwKSk7CiB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249842</attachid>
            <date>2015-03-31 12:31:33 -0700</date>
            <delta_ts>2015-03-31 15:34:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143253-20150331123050.patch</filename>
            <type>text/plain</type>
            <size>77577</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTVmY2U1YzgwMWJkOGI1
NTU5NzExZWY0NDBmMTE1MDFlYTA4Mjc5OS4uNGU1NDk0ZTczYjMzNGRjZWE5NDVjODIzZWFjYjU0
NTE4YzEwMzFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNS0wMy0zMCAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBDb250ZW50IEV4
dGVuc2lvbnM6IHNwbGl0IHRoZSBzdGF0ZSBtYWNoaW5lcyB0byBtaW5pbWl6ZSBwcmVmaXggc3Rh
dGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMy
NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRo
IHRoaXMgcGF0Y2gsIHdlIHJlZmluZSBob3cgdGhlIFVSTHMgYXJlIHBhcnRpdGlvbmVkIHRvIG1h
a2UKKyAgICAgICAgbXVsdGlwbGUgc21hbGwgbWFjaGluZXMgaW5zdGVhZCBvZiBhIGJpZyBvbmUu
CisKKyAgICAgICAgSGVyZSwgY29uc2lkZXJpbmcgZWFjaCBwYXR0ZXJuIGFzIGEgbGFuZ3VhZ2Us
IEkgdG9vayB0aGUgc2ltcGxlc3QKKyAgICAgICAgcGFydGl0aW9uaW5nOiB0YWtlIHRoZSB1bmlv
biBtaW5pbWl6aW5nIHRoZSBzdGF0ZXMKKyAgICAgICAgdGhhdCBkaWZmZXJlbnRpYXRlIGxhbmd1
YWdlcy4KKworICAgICAgICBUaGUgaWRlYSBpcyB0aGUgZm9sbG93aW5nOiBldmVyeSB0aW1lIGEg
c3ViZ3JhcGggY2FuIGJlIHNraXBwZWQKKyAgICAgICAgb3IgcmVwZWF0ZWQsIGl0IGlzIGFuIG9w
cG9ydHVuaXR5IGZvciBhIG1lcmdlZCBsYW5ndWFnZSB0byBzdGFydAorICAgICAgICB3aXRoIGEg
ZGlzdGluZ3Vpc2hhYmxlIHN0YXRlLgorICAgICAgICBUbyBhdm9pZCBhY2N1bXVsYXRpbmcgdGhv
c2UgZGlmZmVyZW5jZXMsIHdlIG9ubHkgbWVyZ2UgbGFuZ3VhZ2VzCisgICAgICAgIHRoYXQgc2hh
cmUgdGhlIGV4YWN0IHNhbWUgInZhcmlhYmxlIiBzdWJncmFwaCBhcyBhIHByZWZpeC4KKworICAg
ICAgICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgd2UgY291bGQgY3JlYXRlIGFzIG1hbnkgbWFjaGlu
ZXMgYXMgd2UgaGF2ZSBwYXR0ZXJucy4KKyAgICAgICAgV2UnbGwgaGF2ZSB0byBhZGRyZXNzIHRo
YXQgaW4gYSBmb2xsb3ctdXAgYnkgbWVyZ2luZyBzbWFsbCBtYWNoaW5lcworICAgICAgICB1bnRp
bCB0aGV5IHJlYWNoIGEgY2VydGFpbiBzaXplLgorICAgICAgICBJbiB0aGUgY29tbW9uIGNhc2Vz
LCBwYXR0ZXJucyBsb29rIHZlcnkgbXVjaCBhbGlrZSBzbyB0aGF0IGlzIG5vdCBhIHByb2JsZW0K
KyAgICAgICAgYXQgdGhlIG1vbWVudC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZp
bHRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgSSBtb3ZlZCB0aGUgcHJlZml4IHRyZWUgYW5kIGdy
YXBoIGNvbnN0cnVjdGlvbiBvdXQgb2YgVVJMRmlsdGVyUGFyc2VyIGZvciBjbGFyaXR5LgorCisg
ICAgICAgIENvbWJpbmVkVVJMRmlsdGVycyBtYWludGFpbiB0aGUgdGVybSBwcmVmaXggdHJlZS4g
SW5zdGVhZCBvZiBnZW5lcmF0aW5nIG9uIHRoZSBmbHkKKyAgICAgICAgYXMgd2UgYnVpbGQgdGhl
IHByZWZpeCB0cmVlLCB3ZSBmaXJzdCBnZW5lcmF0ZSB0aGUgZW50aXJlIHRyZWUgb2YgdGVybXMs
IHRoZW4gZ2VuZXJhdGUKKyAgICAgICAgTkZBcyBmb3IgZWFjaCBicmFuY2ggd2l0aG91dCBhIHZh
cmlhYmxlIHByZWZpeC4KKworICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bWJpbmVkVVJMRmlsdGVyczo6Q29tYmluZWRVUkxGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6On5Db21iaW5lZFVSTEZpbHRl
cnMpOgorCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxG
aWx0ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAgTm90ZSBoZXJlIHRoYXQgd2Uga2VlcCB0cmFj
ayBvZiB3aGljaCBzdWJ0cmVlIGNvbnRhaW5zIGEgYW55IHZhcmlhYmxlIGxlbmd0aCB0ZXJtLgor
ICAgICAgICBJbnN0ZWFkIG9mIGFub3RhdGluZyB0aGUgZWRnZXMsIHRoZSBkZXN0aW5hdGlvbiB2
ZXJ0ZXggaXMgYW5vdGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgZnJvbSB0aGUg
ZWRnZS4KKworICAgICAgICBUaGUgZmxhZyAiaW5WYXJpYWJsZUxlbmd0aFByZWZpeCIgaXMgdGhl
cmUgdG8gc2ltcGxpZnkgdHJhdmVyc2FsLgorCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GQXMpOgorICAgICAgICBT
aW5jZSB3ZSBhcmUgdHJhdmVyc2luZyBhIHRyZWUgZ2VuZXJhdGVkIGJ5IHN0cmluZywgdXNpbmcg
dGhlIHN0YWNrIGZvciByZWN1cnNpb24KKyAgICAgICAgaXMgb3V0IG9mIHRoZSBxdWVzdGlvbi4K
KworICAgICAgICBGb3J0dW5hdGVseSwgdGhlIGVudGlyZSBzdGF0ZSBpcyB2ZXJ5IHNpbXBsZSB3
aGVuIGdvaW5nIGRlcHRoIGZpcnN0OiB3ZSBvbmx5IG5lZWQKKyAgICAgICAgdGhlIGFjdGl2ZSB2
ZXJ0ZXggYW5kIGVkZ2UsIGFuZCB0cmF2ZXJzZSB0aGUgZWRnZXMgaW4gb3JkZXIuCisKKyAgICAg
ICAgVG8gZG8ga2VlcCB0cmFjayBvZiB0aGUgZWRnZXMsIEkgdXNlZCB0aGUgSGFzaFRhYmxlIGl0
ZXJhdG9yIG9uIHRoZSBjdXJyZW50IHRlcm0uCisgICAgICAgIFNpbmNlIG5vIHZlcnRleCBpcyBt
b2RpZmllZCBmb3IgZ2VuZXJhdGlvbiwgc3RvcmluZyB0aGUgaXRlcmF0b3JzIGlzIHNhZmUuCisK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaDoKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Ok5GQTo6ZGVidWdQcmludERvdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TkZBOjpzZXRGaW5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjphZGRSdWxlSWQpOiBEZWxldGVkLgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05G
QUdyYXBoQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05G
QUdyYXBoQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFO
b2RlLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOiBBZGRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgVGVybSB0byBpdHMgb3duIGZpbGUgc2luY2UgaXQgaXMgbm93IHNoYXJlZCBi
ZXR3ZWVuIHRoZSBwYXJzZXIKKyAgICAgICAgYW5kIHRoZSBDb21iaW5lZFVSTEZpbHRlcnMuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFyYWN0ZXJTZXQ6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06
OkNoYXJhY3RlclNldDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6VGVybTo6R3JvdXA6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06Okdyb3VwOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpUZXJtSGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6VGVybUhhc2g6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpUZXJtOjpUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpUZXJtOjp+VGVybSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVy
bTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6
YWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpleHRlbmRHcm91cFN1YnBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlRlcm06OnF1YW50aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjppc0VuZE9mTGluZUFzc2VydGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6bWF0Y2hlc0F0TGVhc3RPbmVDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmlzS25vd25Ub01h
dGNoQW55U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpoYXNGaXhlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpp
c0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06
OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpU
ZXJtOjppc1VuaXZlcnNhbFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpkZXN0cm95KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlBhdHRlcm5QYXJzZXI6OlBhdHRlcm5QYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlBhdHRlcm5QYXJzZXI6OmZpbmFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpQYXR0ZXJuUGFyc2VyOjphc3NlcnRpb25C
T0wpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNl
cjo6VVJMRmlsdGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpVUkxGaWx0ZXJQYXJzZXI6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlRlcm06OlRlcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlRlcm06On5UZXJtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjppc1ZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjphZGRDaGFyYWN0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmV4dGVuZEdyb3VwU3Vi
cGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6cXVhbnRpZnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmlzRW5kT2ZMaW5lQXNzZXJ0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjptYXRjaGVzQXRMZWFz
dE9uZUNoYXJhY3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6VGVybTo6aXNLbm93blRvTWF0Y2hBbnlTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Om9wZXJhdG9yPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6b3BlcmF0b3I9PSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNF
bXB0eVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpUZXJtOjppc0RlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpnZW5lcmF0ZVN1YmdyYXBo
Rm9yQXRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6VGVybTo6Q2hhcmFjdGVyU2V0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFyYWN0ZXJTZXQ6Omhhc2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Okdyb3Vw
OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpUZXJtOjpHcm91cDo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6VGVybUhhc2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm1IYXNoOjplcXVhbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjpHcmFwaEJ1aWxkZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBoQnVp
bGRlcjo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkdyYXBoQnVpbGRlcjo6YXNzZXJ0aW9uQk9MKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuaDoKKwogMjAxNS0wMy0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IGFmdGVyIHIxODIxNjguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjg4ZGJlYmE3OTQ1N2FiOWE3YjQ4ZTRh
NWM2ZTU5Mzk5YTczZmRjMS4uNjRkYWFlODQ4M2FmNmE4Njk3NGM2YjJjNTlhNmJkNTViMWNhY2I3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAyOSw2ICsxMDI5LDkgQEAKIAkJMjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8q
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE1Q0Y1
MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlLmggKi87IH07CiAJCTI2QzE3QTNFMTQ5MUQyRDQwMEQxMkJBMiAv
KiBGaWxlU3lzdGVtSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkMxN0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2QzE3QTNGMTQ5
MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVT
eXN0ZW1JT1MubW0gKi87IH07CisJCTI2RTk0NEQ4MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5l
ZFVSTEZpbHRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjZFOTQ0RDQxQUM0QjJERDAwN0I4NUI1IC8qIENvbWJpbmVkVVJMRmlsdGVycy5jcHAg
Ki87IH07CisJCTI2RTk0NEQ5MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk0NEQ1
MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNkU5NDRERDFBQzRCNEVBMDA3Qjg1
QjUgLyogVGVybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjZFOTQ0REMxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLzsgfTsKIAkJMjZFOThBMTAx
MzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk4QTBGMTMwQTlGQ0EwMDhFQjdC
MiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07CiAJCTI2RjBDODk3MUEyRTcyNEIw
MDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBD
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJMjZGMEM4OTgxQTJFNzI0QjAwMjc5
NEY4IC8qIENvbnRlbnRFeHRlbnNpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk2MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50
RXh0ZW5zaW9uUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTgxMTgsNiArODEyMSw5IEBACiAJCTI2QzE1Q0Y1MTg1N0UxNUQwMEYxNUMw
MyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1
ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbUlPUy5oOyBwYXRo
ID0gaW9zL0ZpbGVTeXN0ZW1JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZD
MTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLm1tOyBwYXRoID0gaW9zL0Zp
bGVTeXN0ZW1JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTk0NEQ0MUFD
NEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29tYmluZWRVUkxGaWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMjZFOTQ0RDUxQUM0QjJERDAwN0I4NUI1IC8qIENvbWJpbmVkVVJM
RmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZFVSTEZp
bHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFOTQ0REMxQUM0QjRFQTAw
N0I4NUI1IC8qIFRlcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVybS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIg
LyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5NjFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTUwMiwxNSArMTU1MDgsMTcgQEAKIAkJMjZGMEM4OTAxQTJENzlDQjAw
Mjc5NEY4IC8qIGNvbnRlbnRleHRlbnNpb25zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQk1MUI0NUQxRTFBQjhEMUUyMDAxMTdDRDIgLyogQ29udGVudEV4
dGVuc2lvbi5jcHAgKi8sCi0JCQkJNTFCNDVEMUYxQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRF
eHRlbnNpb24uaCAqLywKKwkJCQkyNkU5NDRENDFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcCAqLywKKwkJCQkyNkU5NDRENTFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmlu
ZWRVUkxGaWx0ZXJzLmggKi8sCiAJCQkJN0M5M0YzNDcxQUE2QkE1RTAwQTk4QkFCIC8qIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8sCiAJCQkJN0M5M0YzNDgxQUE2QkE1RTAwQTk4QkFC
IC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTUxQjQ1RDFFMUFCOEQxRTIw
MDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCAqLywKKwkJCQk1MUI0NUQxRjFBQjhEMUUy
MDAxMTdDRDIgLyogQ29udGVudEV4dGVuc2lvbi5oICovLAogCQkJCTVDREZBNkM3MUFBNEYyREEw
MEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovLAotCQkJCTdDRkRDNTdBMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovLAotCQkJCTdDRkRD
NTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLywKIAkJCQk3
QzkzRjM0QjFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCAq
LywKIAkJCQk3QzkzRjM0QzFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmggKi8sCisJCQkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi8sCisJCQkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRF
eHRlbnNpb25FcnJvci5oICovLAogCQkJCTI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLywKIAkJCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0Rjgg
LyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovLAogCQkJCTI2RjBDODk5MUEyRUMxMTAwMDI3
OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHAgKi8sCkBAIC0xNTUzMSw2ICsxNTUzOSw3
IEBACiAJCQkJMjY5Mzk3MjAxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCAqLywKIAkJCQky
Njc3MjVGQTFBNUIzQUQ5MDAzQzI0REQgLyogTkZBVG9ERkEuY3BwICovLAogCQkJCTI2NzcyNUZC
MUE1QjNBRDkwMDNDMjRERCAvKiBORkFUb0RGQS5oICovLAorCQkJCTI2RTk0NERDMUFDNEI0RUEw
MDdCODVCNSAvKiBUZXJtLmggKi8sCiAJCQkJMjY3NzI2MDIxQTVERjZGMjAwM0MyNEREIC8qIFVS
TEZpbHRlclBhcnNlci5jcHAgKi8sCiAJCQkJMjY3NzI2MDMxQTVERjZGMjAwM0MyNEREIC8qIFVS
TEZpbHRlclBhcnNlci5oICovLAogCQkJKTsKQEAgLTI2MTA2LDYgKzI2MTE1LDcgQEAKIAkJCQk0
MzY3MDhDRjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MzY3MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEQzMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZF
OTQ0REQxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcw
OEQ1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RDcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEQ5MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTI3MDQ1LDYgKzI3MDU1LDcgQEAKIAkJCQlBMTQ4MzJCRjE4N0Y2NTJDMDBEQTYzQTYg
LyogV0tHcmFwaGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQzExODdGNjU3QTAwREE2
M0E2IC8qIFdLVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkMzMTg3RjY1REYwMERB
NjNBNiAvKiBXS1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZFOTQ0RDkxQUM0QjJE
RDAwN0I4NUI1IC8qIENvbWJpbmVkVVJMRmlsdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0
ODMyQzQxODdGNjYzQzAwREE2M0E2IC8qIFdLVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0
ODMyQzYxODdGNjY4RjAwREE2M0E2IC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3OTkxOTk3MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yODgxMSw2ICsyODgyMiw3IEBACiAJCQkJQkNEOUMyNjUwQzE3QUE2NzAwNUM5
MEEyIC8qIEpTTm9kZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNzYzNkIx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMzUwM0NBMzEwMTc5QUQ3MDAzQjQ3RTEgLyogSlNOb3RpZmljYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMjZFOTQ0RDgxQUM0QjJERDAwN0I4NUI1IC8qIENvbWJpbmVk
VVJMRmlsdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzUwM0NBNTEwMTc5QUQ3MDAzQjQ3
RTEgLyogSlNOb3RpZmljYXRpb25DZW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFFQzFF
MjgxNEZGNjBFRTAwQzk0NjYyIC8qIEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdFNDZGNkZBMTYyN0EyQ0EwMDA2MjIyMyAvKiBKU09FU0Vs
ZW1lbnRJbmRleFVpbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZmEzZDgzYmU1ZDU4NmJlMGI0MWUwZGFmNDI2ZDYzNmY1ZWU2NjA1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJz
LmNwcApAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb21iaW5lZFVSTEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKKyNpbmNsdWRlICJUZXJtLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewor
Cit0eXBlZGVmIEhhc2hNYXA8VGVybSwgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+
LCBUZXJtSGFzaCwgVGVybUhhc2hUcmFpdHM+IFByZWZpeFRyZWVFZGdlczsKKworc3RydWN0IFBy
ZWZpeFRyZWVWZXJ0ZXggeworICAgIFByZWZpeFRyZWVFZGdlcyBlZGdlczsKKyAgICBBY3Rpb25T
ZXQgZmluYWxBY3Rpb25zOworICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFByZWZpeCB7IGZhbHNl
IH07Cit9OworCitDb21iaW5lZFVSTEZpbHRlcnM6OkNvbWJpbmVkVVJMRmlsdGVycygpCisgICAg
OiBtX3ByZWZpeFRyZWVSb290KHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZVZlcnRleD4oKSkK
K3sKK30KKworQ29tYmluZWRVUkxGaWx0ZXJzOjp+Q29tYmluZWRVUkxGaWx0ZXJzKCkKK3sKK30K
Kwordm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQs
IGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybikKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFwYXR0ZXJuLmlzRW1wdHkoKSwgIlRoZSBwYXJzZXIgc2hvdWxkIGhhdmUgZXhjbHVkZWQgZW1w
dHkgcGF0dGVybnMgYmVmb3JlIHJlYWNoaW5nIENvbWJpbmVkVVJMRmlsdGVycy4iKTsKKworICAg
IGlmIChwYXR0ZXJuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFBy
ZWZpeFRyZWVWZXJ0ZXgqLCAxMjg+IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm47CisgICAg
cHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRl
cm4uc2l6ZSgpICsgMSk7CisKKyAgICAvLyBFeHRlbmQgdGhlIHByZWZpeCB0cmVlIHdpdGggdGhl
IG5ldyBwYXR0ZXJuLgorICAgIGJvb2wgaGFzTmV3VGVybSA9IGZhbHNlOworICAgIFByZWZpeFRy
ZWVWZXJ0ZXgqIGxhc3RQcmVmaXhUcmVlID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsKKyAgICBw
cmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CisKKyAg
ICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBwYXR0ZXJuKSB7CisgICAgICAgIGF1dG8gbmV4dEVu
dHJ5ID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmZpbmQodGVybSk7CisgICAgICAgIGlmIChuZXh0
RW50cnkgIT0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmVuZCgpKQorICAgICAgICAgICAgbGFzdFBy
ZWZpeFRyZWUgPSBuZXh0RW50cnktPnZhbHVlLmdldCgpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGhhc05ld1Rlcm0gPSB0cnVlOworCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UHJlZml4VHJlZVZlcnRleD4gbmV4dFByZWZpeFRyZWVWZXJ0ZXggPSBzdGQ6Om1ha2VfdW5pcXVl
PFByZWZpeFRyZWVWZXJ0ZXg+KCk7CisKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbGFz
dFByZWZpeFRyZWUtPmVkZ2VzLnNldCh0ZXJtLCBXVEY6Om1vdmUobmV4dFByZWZpeFRyZWVWZXJ0
ZXgpKTsKKyAgICAgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICAg
ICAgICAgIGxhc3RQcmVmaXhUcmVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChs
YXN0UHJlZml4VHJlZSk7CisgICAgfQorCisgICAgcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVy
bi5sYXN0KCktPmZpbmFsQWN0aW9ucy5hZGQoYWN0aW9uSWQpOworCisgICAgaWYgKCFoYXNOZXdU
ZXJtKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRl
cm1zID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0dGVybi5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IHBhdHRlcm5baV07CisgICAgICAgIGhhc1Nl
ZW5WYXJpYWJsZUxlbmd0aFRlcm1zIHw9ICF0ZXJtLmhhc0ZpeGVkTGVuZ3RoKCk7CisgICAgICAg
IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm5baSArIDFdLT5pblZhcmlhYmxlTGVuZ3RoUHJl
Zml4IHw9IGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zOworICAgIH0KKyAgICBwcmVmaXhUcmVl
VmVydGljZXNGb3JQYXR0ZXJuWzBdLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5W
YXJpYWJsZUxlbmd0aFRlcm1zOworfQorCitzdHJ1Y3QgQWN0aXZlU3VidHJlZSB7CisgICAgY29u
c3QgUHJlZml4VHJlZVZlcnRleCogdmVydGV4OworICAgIFByZWZpeFRyZWVFZGdlczo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7Cit9OworCitzdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRy
ZWUoTkZBJiBuZmEsIHVuc2lnbmVkIHJvb3RJZCwgY29uc3QgUHJlZml4VHJlZVZlcnRleCYgcHJl
Zml4VHJlZVZlcnRleCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFwcmVmaXhUcmVlVmVy
dGV4LmluVmFyaWFibGVMZW5ndGhQcmVmaXgsICJUaGlzIGNvZGUgYXNzdW1lcyB0aGUgc3VidHJl
ZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXggbGVuZ3RoIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQu
Iik7CisKKyAgICBzdHJ1Y3QgQWN0aXZlTkZBU3VidHJlZSA6IEFjdGl2ZVN1YnRyZWUgeworICAg
ICAgICBBY3RpdmVORkFTdWJ0cmVlKGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqIHZlcnRleCwgUHJl
Zml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvciwgdW5zaWduZWQgbm9kZUluZGV4
KQorICAgICAgICAgICAgOiBBY3RpdmVTdWJ0cmVlKHsgdmVydGV4LCBpdGVyYXRvciB9KQorICAg
ICAgICAgICAgLCBsYXN0Tm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIHVuc2lnbmVkIGxhc3ROb2RlSW5kZXg7CisgICAgfTsKKworICAgIFZlY3RvcjxB
Y3RpdmVORkFTdWJ0cmVlPiBhY3RpdmVTdGFjazsKKyAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0
aXZlTkZBU3VidHJlZSgmcHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC5lZGdlcy5i
ZWdpbigpLCByb290SWQpKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgUHJvY2Vzc1N1YnRy
ZWU6CisgICAgICAgIEFjdGl2ZU5GQVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBhY3RpdmVTdGFj
ay5sYXN0KCk7CisgICAgICAgIGZvciAoO2FjdGl2ZVN1YnRyZWUuaXRlcmF0b3IgIT0gYWN0aXZl
U3VidHJlZS52ZXJ0ZXgtPmVkZ2VzLmVuZCgpOyArK2FjdGl2ZVN1YnRyZWUuaXRlcmF0b3IpIHsK
KyAgICAgICAgICAgIGlmIChhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT52YWx1ZS0+aW5WYXJpYWJs
ZUxlbmd0aFByZWZpeCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
Y29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmtleTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGFj
dGl2ZVN1YnRyZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUt
PmZpbmFsQWN0aW9ucyk7CisKKyAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHByZWZpeFRy
ZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZU5GQVN1YnRyZWUocHJlZml4VHJlZVZlcnRl
eCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSwgbmV3RW5kTm9kZUluZGV4KSk7Cisg
ICAgICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgaWYgKGFj
dGl2ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICArK2FjdGl2
ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKKyAgICB9Cit9CisKK1ZlY3RvcjxORkE+IENvbWJpbmVk
VVJMRmlsdGVyczo6Y3JlYXRlTkZBcygpIGNvbnN0Cit7CisgICAgVmVjdG9yPEFjdGl2ZVN1YnRy
ZWU+IGFjdGl2ZVN0YWNrOworICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsg
bV9wcmVmaXhUcmVlUm9vdC5nZXQoKSwgbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuYmVnaW4oKSB9
KSk7CisKKyAgICBWZWN0b3I8TkZBPiBuZmFzOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICBQ
cm9jZXNzU3VidHJlZToKKyAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFj
dGl2ZVN0YWNrLmxhc3QoKTsKKworICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJzdCBpbnRvIHRo
ZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBzdWJ0cmVlLgor
ICAgICAgICBmb3IgKDsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZl
cnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgeworICAgICAgICAg
ICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOworICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgtPmlu
VmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBl
bmQoQWN0aXZlU3VidHJlZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVk
Z2VzLmJlZ2luKCkgfSkpOworICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZnRlciB3ZSByZWFjaGVkIGhl
cmUsIHdlIGtub3cgdGhhdCBhbGwgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4ZXMg
aGF2ZSBiZWVuIHByb2Nlc3NlZCwKKyAgICAgICAgLy8gdGltZSB0byBnZW5lcmF0ZSB0aGUgTkZB
IGZvciB0aGUgZ3JhcGggcm9vdGVkIGhlcmUuCisgICAgICAgIGJvb2wgbmVlZFRvR2VuZXJhdGUg
PSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpICYmICFhY3RpdmVTdWJ0cmVl
LnZlcnRleC0+ZmluYWxBY3Rpb25zLmlzRW1wdHkoKTsKKyAgICAgICAgaWYgKCFuZWVkVG9HZW5l
cmF0ZSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdlIDogYWN0aXZlU3VidHJl
ZS52ZXJ0ZXgtPmVkZ2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlLnZhbHVlLT5pblZh
cmlhYmxlTGVuZ3RoUHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIG5lZWRUb0dlbmVyYXRl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRlKSB7
CisgICAgICAgICAgICBuZmFzLmFwcGVuZChORkEoKSk7CisgICAgICAgICAgICBORkEmIGdlbmVy
YXRpbmdORkEgPSBuZmFzLmxhc3QoKTsKKworICAgICAgICAgICAgdW5zaWduZWQgcHJlZml4RW5k
ID0gZ2VuZXJhdGluZ05GQS5yb290KCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhY3RpdmVTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPmtleTsKKyAgICAgICAg
ICAgICAgICBwcmVmaXhFbmQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGluZ05GQSwgcHJl
Zml4RW5kLCBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+dmFsdWUtPmZpbmFsQWN0aW9ucyk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgeworICAgICAgICAgICAgICAgIGlmICghZWRnZS52YWx1
ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZXJtJiB0ZXJtID0gZWRnZS5rZXk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld1N1
YnRyZWVTdGFydCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQs
IGVkZ2UudmFsdWUtPmZpbmFsQWN0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
TkZBRm9yU3VidHJlZShnZW5lcmF0aW5nTkZBLCBuZXdTdWJ0cmVlU3RhcnQsICplZGdlLnZhbHVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBXZSBoYXZlIHByb2Nlc3NlZCBhbGwgdGhlIHN1YnRyZWVzIG9mIHRoaXMgbGV2ZWwsIHBv
cCB0aGUgc3RhY2sgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgc2libGluZy4KKyAgICAgICAgYWN0
aXZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgpLml0ZXJh
dG9yOworICAgIH0KKworICAgIHJldHVybiBuZmFzOworfQorCit9IC8vIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI5NThjZTZkYmIxNjFj
NmI2YmVkNGRkYzMzODJkZWY4MTlhNDQ4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbWJpbmVkVVJMRmlsdGVyc19oCisjZGVmaW5lIENv
bWJpbmVkVVJMRmlsdGVyc19oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisj
aW5jbHVkZSAiTkZBLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK2NsYXNzIFRlcm07Citz
dHJ1Y3QgUHJlZml4VHJlZVZlcnRleDsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ29tYmluZWRV
UkxGaWx0ZXJzIHsKK3B1YmxpYzoKKyAgICBDb21iaW5lZFVSTEZpbHRlcnMoKTsKKyAgICB+Q29t
YmluZWRVUkxGaWx0ZXJzKCk7CisgICAgdm9pZCBhZGRQYXR0ZXJuKHVpbnQ2NF90IHBhdHRlcm5J
ZCwgY29uc3QgVmVjdG9yPFRlcm0+JiBwYXR0ZXJuKTsKKworICAgIFZlY3RvcjxORkE+IGNyZWF0
ZU5GQXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJl
ZVZlcnRleD4gbV9wcmVmaXhUcmVlUm9vdDsKK307CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gQ29tYmluZWRVUkxGaWx0ZXJzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCmluZGV4IDM4ZmRkYTczYjFhODdjZTg2YmQyMzZmNjc0NjZhOWRj
ZjdjNzYwYmQuLjA0OTY0NjI0NGFiNmI3NDAyODFiZjAzMTEzYzJhYWQ4ZWI1YTAyYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbWJpbmVkVVJMRmlsdGVycy5oIgogI2lu
Y2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRl
bnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCkBAIC0x
MjcsMjQgKzEyOCwxNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRF
eHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBjb25zdAogICAgICAgICByZXR1cm4g
cGFyc2VyRXJyb3I7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JU
SU5HCi0gICAgZG91YmxlIG5mYUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7CisgICAgZG91YmxlIHBhdHRlcm5QYXJ0aXRpb25pbmdTdGFydCA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOwogI2VuZGlmCiAKICAgICBWZWN0b3I8U2VyaWFsaXplZEFj
dGlvbkJ5dGU+IGFjdGlvbnM7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBhY3Rpb25Mb2NhdGlvbnMg
PSBzZXJpYWxpemVBY3Rpb25zKHBhcnNlZFJ1bGVMaXN0LCBhY3Rpb25zKTsKICAgICBWZWN0b3I8
dWludDY0X3Q+IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uczsKIAotICAgIFZlY3RvcjxORkE+IG5m
YXM7Ci0gICAgbmZhcy5hcHBlbmQoTkZBKCkpOworICAgIENvbWJpbmVkVVJMRmlsdGVycyBjb21i
aW5lZFVSTEZpbHRlcnM7CisgICAgVVJMRmlsdGVyUGFyc2VyIHVybEZpbHRlclBhcnNlcihjb21i
aW5lZFVSTEZpbHRlcnMpOwogICAgIGJvb2wgaWdub3JlUHJldmlvdXNSdWxlc1NlZW4gPSBmYWxz
ZTsKICAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7IHJ1bGVJbmRleCA8IHBhcnNlZFJ1
bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgpIHsKLQotICAgICAgICAvLyBGSVhNRTogVHVuZSB0
aGlzIGJldHRlciBhbmQgYWRqdXN0IENvbnRlbnRFeHRlbnNpb25UZXN0Lk11bHRpREZBIGFjY29y
ZGluZ2x5LgotICAgICAgICBpZiAobmZhc1tuZmFzLnNpemUoKSAtIDFdLmdyYXBoU2l6ZSgpID4g
NDAwKQotICAgICAgICAgICAgbmZhcy5hcHBlbmQoTkZBKCkpOwotCi0gICAgICAgIE5GQSYgbGFz
dE5GQSA9IG5mYXNbbmZhcy5zaXplKCkgLSAxXTsKLSAgICAgICAgVVJMRmlsdGVyUGFyc2VyIHVy
bEZpbHRlclBhcnNlcihsYXN0TkZBKTsKICAgICAgICAgY29uc3QgQ29udGVudEV4dGVuc2lvblJ1
bGUmIGNvbnRlbnRFeHRlbnNpb25SdWxlID0gcGFyc2VkUnVsZUxpc3RbcnVsZUluZGV4XTsKICAg
ICAgICAgY29uc3QgVHJpZ2dlciYgdHJpZ2dlciA9IGNvbnRlbnRFeHRlbnNpb25SdWxlLnRyaWdn
ZXIoKTsKICAgICAgICAgQVNTRVJUKHRyaWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKQEAgLTE1
NCwxMSArMTQ4LDEyIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEV4
dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIGNvbnN0CiAgICAgICAgIFVSTEZpbHRl
clBhcnNlcjo6UGFyc2VTdGF0dXMgc3RhdHVzID0gdXJsRmlsdGVyUGFyc2VyLmFkZFBhdHRlcm4o
dHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCBhY3Rp
b25Mb2NhdGlvbkFuZEZsYWdzKTsKIAogICAgICAgICBpZiAoc3RhdHVzID09IFVSTEZpbHRlclBh
cnNlcjo6TWF0Y2hlc0V2ZXJ5dGhpbmcpIHsKKwogICAgICAgICAgICAgaWYgKGlnbm9yZVByZXZp
b3VzUnVsZXNTZWVuKQogICAgICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3VzUnVsZXM7CiAgICAg
ICAgICAgICB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9uQW5k
RmxhZ3MpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzdGF0dXMgIT0gVVJM
RmlsdGVyUGFyc2VyOjpPayAmJiBzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZl
cnl0aGluZykgewogICAgICAgICAgICAgZGF0YUxvZ0YoIkVycm9yIHdoaWxlIHBhcnNpbmcgJXM6
ICVzXG4iLCB0cmlnZ2VyLnVybEZpbHRlci51dGY4KCkuZGF0YSgpLCBVUkxGaWx0ZXJQYXJzZXI6
OnN0YXR1c1N0cmluZyhzdGF0dXMpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdleDsKQEAgLTE2OSw2ICsxNjQs
MTcgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQmIGNsaWVudCwgY29uc3QKICAgICB9CiAKICNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgZG91YmxlIHBhdHRlcm5QYXJ0aXRpb25p
bmdFbmQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBkYXRhTG9nRigiICAg
IFRpbWUgc3BlbnQgcGFydGl0aW9uaW5nIHRoZSBydWxlcyBpbnRvIGdyb3VwczogJWZcbiIsIChw
YXR0ZXJuUGFydGl0aW9uaW5nRW5kIC0gcGF0dGVyblBhcnRpdGlvbmluZ1N0YXJ0KSk7CisjZW5k
aWYKKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKKyAgICBk
b3VibGUgbmZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
KyNlbmRpZgorCisgICAgVmVjdG9yPE5GQT4gbmZhcyA9IGNvbWJpbmVkVVJMRmlsdGVycy5jcmVh
dGVORkFzKCk7CisKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5H
CiAgICAgZG91YmxlIG5mYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOwogICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgTkZBOiAlZlxu
IiwgKG5mYUJ1aWxkVGltZUVuZCAtIG5mYUJ1aWxkVGltZVN0YXJ0KSk7CiAjZW5kaWYKQEAgLTIw
MywxMCArMjA5LDYgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0
ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQmIGNsaWVudCwgY29uc3QKICAgICAgICAgY29tcGlsZXIu
Y29tcGlsZSgpOwogICAgIH0KIAotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwotICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7Ci0jZW5kaWYKLQogICAgIGNsaWVu
dC53cml0ZUJ5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogICAgIGNsaWVudC53cml0ZUFj
dGlvbnMoV1RGOjptb3ZlKGFjdGlvbnMpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvTkZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQS5jcHAKaW5kZXggOWVhYTMwYjU5YTNhZDVjYzk3MGYyMTY2ZDc2ZjQ5MTY5MjcwODVk
NS4uZTY0ODIzMjAwMzc5ZTM4NDYzZDNmMTY1Mzc1MTczY2FjMTI0OTgzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCkBAIC04MSwxMCArODEsMTAgQEAgdm9pZCBO
RkE6OmFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pCiAgICAgICAgIHRyYW5zaXRpb25TbG90LnZhbHVlLnJlbW92ZSh0byk7CiB9CiAKLXZvaWQg
TkZBOjpzZXRGaW5hbCh1bnNpZ25lZCBub2RlLCB1aW50NjRfdCBydWxlSWQpCit2b2lkIE5GQTo6
c2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25TZXQmIGFjdGlvbnMpCiB7Ci0g
ICAgaWYgKCFtX25vZGVzW25vZGVdLmZpbmFsUnVsZUlkcy5jb250YWlucyhydWxlSWQpKQotICAg
ICAgICBtX25vZGVzW25vZGVdLmZpbmFsUnVsZUlkcy5hcHBlbmQocnVsZUlkKTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fbm9kZXNbbm9kZV0uZmluYWxSdWxlSWRzLmlzRW1wdHkoKSwgIlRo
ZSBmaW5hbCBzdGF0ZSBzaG91bGQgb25seSBiZSBkZWZpbmVkIG9uY2UuIik7CisgICAgY29weVRv
VmVjdG9yKGFjdGlvbnMsIG1fbm9kZXNbbm9kZV0uZmluYWxSdWxlSWRzKTsKIH0KIAogdW5zaWdu
ZWQgTkZBOjpncmFwaFNpemUoKSBjb25zdApAQCAtMTAxLDEzICsxMDEsNiBAQCB2b2lkIE5GQTo6
cmVzdG9yZVRvR3JhcGhTaXplKHVuc2lnbmVkIHNpemUpCiB9CiAKICNpZiBDT05URU5UX0VYVEVO
U0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLQotdm9pZCBORkE6OmFkZFJ1bGVJZCh1bnNp
Z25lZCBub2RlLCB1aW50NjRfdCBydWxlSWQpCi17Ci0gICAgaWYgKCFtX25vZGVzW25vZGVdLnJ1
bGVJZHMuY29udGFpbnMocnVsZUlkKSkKLSAgICAgICAgbV9ub2Rlc1tub2RlXS5ydWxlSWRzLmFw
cGVuZChydWxlSWQpOwotfQotCiBzdGF0aWMgdm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RSYW5n
ZSwgdWludDE2X3QgcmFuZ2VTdGFydCwgdWludDE2X3QgcmFuZ2VFbmQsIHVpbnQxNl90IGVwc2ls
b25UcmFuc2l0aW9uQ2hhcmFjdGVyKQogewogICAgIGlmICghZmlyc3RSYW5nZSkKQEAgLTE4MSwx
NyArMTc0LDYgQEAgdm9pZCBORkE6OmRlYnVnUHJpbnREb3QoKSBjb25zdAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgICAlZCBbbGFiZWw9PE5vZGUgJWQiLCBpLCBpKTsKIAotICAgICAgICBjb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBvcmlnaW5hbFJ1bGVzID0gbV9ub2Rlc1tpXS5ydWxlSWRzOwotICAg
ICAgICBpZiAoIW9yaWdpbmFsUnVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
RigiPEJSLz4oUnVsZXM6ICIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXgg
PSAwOyBydWxlSW5kZXggPCBvcmlnaW5hbFJ1bGVzLnNpemUoKTsgKytydWxlSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBpZiAocnVsZUluZGV4KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiLCAiKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWxsdSIsIG9yaWdpbmFsUnVsZXNb
cnVsZUluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhTG9nRigiKSIpOwot
ICAgICAgICB9Ci0KICAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgZmluYWxSdWxlcyA9
IG1fbm9kZXNbaV0uZmluYWxSdWxlSWRzOwogICAgICAgICBpZiAoIWZpbmFsUnVsZXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiPEJSLz4oRmluYWw6ICIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaAppbmRleCAyZDM4MjI1MTMyMDBiNjE1MzQ4OTIxNzcz
YmU3MzkwNDNkMTBjMGM1Li5mYmIyYTk1MDY5NGRmZjk4MTk5ODhkY2ZkMzNmY2ExMDc3OTg2ZTI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaApAQCAtMzgsNiArMzgsOCBA
QCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCiBjbGFzcyBORkFUb0RGQTsKIAordHlw
ZWRlZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBBY3Rpb25TZXQ7CisKIC8v
IFRoZSBORkEgcHJvdmlkZXMgYSB3YXkgdG8gYnVpbGQgYSBORkEgZ3JhcGggd2l0aCBjaGFyYWN0
ZXJzIG9yIGVwc2lsb24gYXMgdHJhbnNpdGlvbnMuCiAvLyBUaGUgbm9kZXMgYXJlIGFjY2Vzc2Vk
IHRocm91Z2ggYW4gaWRlbnRpZmllci4KIGNsYXNzIE5GQSB7CkBAIC00OSwxMyArNTEsMTMgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkVHJhbnNpdGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgY2hhciBjaGFyYWN0ZXIpOwogICAgIHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24odW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogICAgIHZvaWQgYWRkVHJhbnNpdGlvbnNPbkFueUNoYXJh
Y3Rlcih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7Ci0gICAgdm9pZCBzZXRGaW5hbCh1bnNp
Z25lZCBub2RlLCB1aW50NjRfdCBydWxlSWQpOworICAgIHZvaWQgc2V0QWN0aW9ucyh1bnNpZ25l
ZCBub2RlLCBjb25zdCBBY3Rpb25TZXQmIGZpbmFsQWN0aW9ucyk7CiAKICAgICB1bnNpZ25lZCBn
cmFwaFNpemUoKSBjb25zdDsKICAgICB2b2lkIHJlc3RvcmVUb0dyYXBoU2l6ZSh1bnNpZ25lZCk7
CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLSAgICB2
b2lkIGFkZFJ1bGVJZCh1bnNpZ25lZCBub2RlLCB1aW50NjRfdCBydWxlSWQpOworICAgIHZvaWQg
YWRkUnVsZUlkKHVuc2lnbmVkIG5vZGUsIGNvbnN0IEFjdGlvblNldCYgcnVsZUlkcyk7CiAKICAg
ICB2b2lkIGRlYnVnUHJpbnREb3QoKSBjb25zdDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ORkFOb2RlLmgKaW5kZXggZmY3MTA1MGMwMDNjZWFhNGU4ODJmOWMwMjM1
NTRlZTg2MTE2ZDEzYy4uNGU1ZWMwMGU4OGZiOWRmZGVjYzhiM2RlMjIyYjM0MGE4ZjliYTAxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaApAQCAtNDgsOSAr
NDgsNiBAQCBwdWJsaWM6CiAgICAgTkZBTm9kZUluZGV4U2V0IHRyYW5zaXRpb25zT25BbnlDaGFy
YWN0ZXI7CiAKICAgICBWZWN0b3I8dWludDY0X3Q+IGZpbmFsUnVsZUlkczsKLSNpZiBDT05URU5U
X0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLSAgICBWZWN0b3I8dWludDY0X3Q+
IHJ1bGVJZHM7Ci0jZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1Rlcm0uaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L1Rlcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZTU2NGI2ZmQzZWZkODgwZTRmNDEzMGRlOTk3MTM4Y2JhNDZj
OWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oCkBAIC0wLDAgKzEsNTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRlcm1f
aAorI2RlZmluZSBUZXJtX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNp
bmNsdWRlICJORkEuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK2VudW0gY2xhc3MgQXRvbVF1
YW50aWZpZXIgOiB1aW50OF90IHsKKyAgICBPbmUsCisgICAgWmVyb09yT25lLAorICAgIFplcm9P
ck1vcmUsCisgICAgT25lT3JNb3JlCit9OworCitjbGFzcyBUZXJtIHsKK3B1YmxpYzoKKyAgICBU
ZXJtKCk7CisgICAgVGVybShjaGFyIGNoYXJhY3RlciwgYm9vbCBpc0Nhc2VTZW5zaXRpdmUpOwor
CisgICAgZW51bSBVbml2ZXJzYWxUcmFuc2l0aW9uVGFnIHsgVW5pdmVyc2FsVHJhbnNpdGlvbiB9
OworICAgIGV4cGxpY2l0IFRlcm0oVW5pdmVyc2FsVHJhbnNpdGlvblRhZyk7CisKKyAgICBlbnVt
IENoYXJhY3RlclNldFRlcm1UYWcgeyBDaGFyYWN0ZXJTZXRUZXJtIH07CisgICAgZXhwbGljaXQg
VGVybShDaGFyYWN0ZXJTZXRUZXJtVGFnLCBib29sIGlzSW52ZXJ0ZWQpOworCisgICAgZW51bSBH
cm91cFRlcm1UYWcgeyBHcm91cFRlcm0gfTsKKyAgICBleHBsaWNpdCBUZXJtKEdyb3VwVGVybVRh
Zyk7CisKKyAgICBlbnVtIEVuZE9mTGluZUFzc2VydGlvblRlcm1UYWcgeyBFbmRPZkxpbmVBc3Nl
cnRpb25UZXJtIH07CisgICAgZXhwbGljaXQgVGVybShFbmRPZkxpbmVBc3NlcnRpb25UZXJtVGFn
KTsKKworICAgIFRlcm0oY29uc3QgVGVybSYgb3RoZXIpOworICAgIFRlcm0oVGVybSYmIG90aGVy
KTsKKworICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBUZXJtKEVt
cHR5VmFsdWVUYWcpOworCisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUg
fTsKKyAgICBUZXJtKERlbGV0ZWRWYWx1ZVRhZyk7CisKKyAgICB+VGVybSgpOworCisgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICAvLyBDaGFyYWN0ZXJTZXQgdGVybXMgb25seS4KKyAg
ICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgaXNDYXNlU2Vuc2l0aXZl
KTsKKworICAgIC8vIEdyb3VwIHRlcm1zIG9ubHkuCisgICAgdm9pZCBleHRlbmRHcm91cFN1YnBh
dHRlcm4oY29uc3QgVGVybSYpOworCisgICAgdm9pZCBxdWFudGlmeShjb25zdCBBdG9tUXVhbnRp
ZmllciYpOworCisgICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFwaChORkEmLCB1bnNpZ25lZCBzdGFy
dCwgY29uc3QgQWN0aW9uU2V0JiBmaW5hbEFjdGlvbnMpIGNvbnN0OworCisgICAgYm9vbCBpc0Vu
ZE9mTGluZUFzc2VydGlvbigpIGNvbnN0OworCisgICAgYm9vbCBtYXRjaGVzQXRMZWFzdE9uZUNo
YXJhY3RlcigpIGNvbnN0OworCisgICAgLy8gTWF0Y2hlcyBhbnkgc3RyaW5nLCB0aGUgZW1wdHkg
c3RyaW5nIGluY2x1ZGVkLgorICAgIC8vIFRoaXMgaXMgdmVyeSBjb25zZXJ2YXRpdmUuIFBhdHRl
cm5zIG1hdGNoaW5nIGFueSBzdHJpbmcgY2FuIHJldHVybiBmYWxzZSBoZXJlLgorICAgIGJvb2wg
aXNLbm93blRvTWF0Y2hBbnlTdHJpbmcoKSBjb25zdDsKKworICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoZSB0ZXJtIGNhbiBvbmx5IG1hdGNoIGlucHV0IG9mIGEgc2luZ2xlIGZpeGVkIGxlbmd0aC4K
KyAgICBib29sIGhhc0ZpeGVkTGVuZ3RoKCkgY29uc3Q7CisKKyAgICBUZXJtJiBvcGVyYXRvcj0o
Y29uc3QgVGVybSYgb3RoZXIpOworICAgIFRlcm0mIG9wZXJhdG9yPShUZXJtJiYgb3RoZXIpOwor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRlcm0mIG90aGVyKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFRoaXMg
aXMgZXhhY3QgZm9yIGNoYXJhY3RlciBzZXRzIGJ1dCBjb25zZXJ2YXRpdmUgZm9yIGdyb3Vwcy4K
KyAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBmYWxzZSBmb3IgYSBncm91cCBlcXVpdmFs
ZW50IHRvIGEgdW5pdmVyc2FsIHRyYW5zaXRpb24uCisgICAgYm9vbCBpc1VuaXZlcnNhbFRyYW5z
aXRpb24oKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5G
QSYsIHVuc2lnbmVkIHNvdXJjZSkgY29uc3Q7CisKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworICAg
IGVudW0gY2xhc3MgVGVybVR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgRW1wdHksCisgICAgICAg
IERlbGV0ZWQsCisgICAgICAgIENoYXJhY3RlclNldCwKKyAgICAgICAgR3JvdXAKKyAgICB9Owor
CisgICAgVGVybVR5cGUgbV90ZXJtVHlwZSB7IFRlcm1UeXBlOjpFbXB0eSB9OworICAgIEF0b21R
dWFudGlmaWVyIG1fcXVhbnRpZmllciB7IEF0b21RdWFudGlmaWVyOjpPbmUgfTsKKworICAgIHN0
cnVjdCBDaGFyYWN0ZXJTZXQgeworICAgICAgICBib29sIGludmVydGVkIHsgZmFsc2UgfTsKKyAg
ICAgICAgQml0VmVjdG9yIGNoYXJhY3RlcnMgeyAxMjggfTsKKworICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2hhcmFjdGVyU2V0JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG90aGVyLmludmVydGVkID09IGludmVydGVkICYmIG90aGVyLmNoYXJhY3Rl
cnMgPT0gY2hhcmFjdGVyczsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChpbnZl
cnRlZCwgY2hhcmFjdGVycy5oYXNoKCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0cnVj
dCBHcm91cCB7CisgICAgICAgIFZlY3RvcjxUZXJtPiB0ZXJtczsKKworICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgR3JvdXAmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gb3RoZXIudGVybXMgPT0gdGVybXM7CisgICAgICAgIH0KKworICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaGFzaCA9
IDY0MjE3NDk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiB0ZXJtcykgewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRlcm1IYXNoID0gdGVybS5oYXNoKCk7CisgICAgICAg
ICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeICgodGVybUhhc2ggPDwgMTEpIF4gaGFzaCk7
CisgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDExOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdW5pb24gQXRv
bURhdGEgeworICAgICAgICBBdG9tRGF0YSgpCisgICAgICAgICAgICA6IGludmFsaWRUZXJtKDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB+QXRvbURhdGEoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBjaGFyIGludmFsaWRUZXJtOworICAgICAgICBDaGFyYWN0ZXJT
ZXQgY2hhcmFjdGVyU2V0OworICAgICAgICBHcm91cCBncm91cDsKKyAgICB9IG1fYXRvbURhdGE7
Cit9OworCitzdHJ1Y3QgVGVybUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFRlcm0mIHRlcm0pIHsgcmV0dXJuIHRlcm0uaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgVGVybSYgYSwgY29uc3QgVGVybSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworc3RydWN0IFRlcm1IYXNoVHJhaXRzIDogcHVibGljIFdURjo6Q3VzdG9tSGFzaFRyYWl0
czxUZXJtPiB7IH07CisKK2lubGluZSBUZXJtOjpUZXJtKCkKK3sKK30KKworaW5saW5lIFRlcm06
OlRlcm0oY2hhciBjaGFyYWN0ZXIsIGJvb2wgaXNDYXNlU2Vuc2l0aXZlKQorICAgIDogbV90ZXJt
VHlwZShUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQoreworICAgIG5ldyAoTm90TnVsbCwgJm1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJTZXQoKTsKKyAgICBhZGRDaGFyYWN0ZXIoY2hh
cmFjdGVyLCBpc0Nhc2VTZW5zaXRpdmUpOworfQorCitlbnVtIFVuaXZlcnNhbFRyYW5zaXRpb25U
YWcgeyBVbml2ZXJzYWxUcmFuc2l0aW9uIH07CitpbmxpbmUgVGVybTo6VGVybShVbml2ZXJzYWxU
cmFuc2l0aW9uVGFnKQorICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQor
eworICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJT
ZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgICAgIG1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuc2V0KGkpOworfQorCitpbmxpbmUgVGVy
bTo6VGVybShDaGFyYWN0ZXJTZXRUZXJtVGFnLCBib29sIGlzSW52ZXJ0ZWQpCisgICAgOiBtX3Rl
cm1UeXBlKFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCit7CisgICAgbmV3IChOb3ROdWxsLCAmbV9h
dG9tRGF0YS5jaGFyYWN0ZXJTZXQpIENoYXJhY3RlclNldCgpOworICAgIG1fYXRvbURhdGEuY2hh
cmFjdGVyU2V0LmludmVydGVkID0gaXNJbnZlcnRlZDsKK30KKworaW5saW5lIFRlcm06OlRlcm0o
R3JvdXBUZXJtVGFnKQorICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6R3JvdXApCit7CisgICAg
bmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkgR3JvdXAoKTsKK30KKworaW5saW5lIFRl
cm06OlRlcm0oRW5kT2ZMaW5lQXNzZXJ0aW9uVGVybVRhZykKKyAgICA6IFRlcm0oQ2hhcmFjdGVy
U2V0VGVybSwgZmFsc2UpCit7CisgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVy
cy5zZXQoMCk7Cit9CisKK2lubGluZSBUZXJtOjpUZXJtKGNvbnN0IFRlcm0mIG90aGVyKQorICAg
IDogbV90ZXJtVHlwZShvdGhlci5tX3Rlcm1UeXBlKQorICAgICwgbV9xdWFudGlmaWVyKG90aGVy
Lm1fcXVhbnRpZmllcikKK3sKKyAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKKyAgICBjYXNlIFRl
cm1UeXBlOjpFbXB0eToKKyAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6CisgICAgICAgIG5ldyAoTm90TnVs
bCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJTZXQob3RoZXIubV9hdG9tRGF0
YS5jaGFyYWN0ZXJTZXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpHcm91
cDoKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkgR3JvdXAob3RoZXIu
bV9hdG9tRGF0YS5ncm91cCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworaW5saW5lIFRl
cm06OlRlcm0oVGVybSYmIG90aGVyKQorICAgIDogbV90ZXJtVHlwZShXVEY6Om1vdmUob3RoZXIu
bV90ZXJtVHlwZSkpCisgICAgLCBtX3F1YW50aWZpZXIoV1RGOjptb3ZlKG90aGVyLm1fcXVhbnRp
ZmllcikpCit7CisgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6
RW1wdHk6CisgICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OgorICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0
b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KFdURjo6bW92ZShvdGhlci5tX2F0b21E
YXRhLmNoYXJhY3RlclNldCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpH
cm91cDoKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkgR3JvdXAoV1RG
Ojptb3ZlKG90aGVyLm1fYXRvbURhdGEuZ3JvdXApKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIG90aGVyLmRlc3Ryb3koKTsKK30KKworaW5saW5lIFRlcm06OlRlcm0oRW1wdHlWYWx1ZVRh
ZykKKyAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkVtcHR5KQoreworfQorCitpbmxpbmUgVGVy
bTo6VGVybShEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX3Rlcm1UeXBlKFRlcm1UeXBlOjpEZWxl
dGVkKQoreworfQorCitpbmxpbmUgVGVybTo6flRlcm0oKQoreworICAgIGRlc3Ryb3koKTsKK30K
KworaW5saW5lIGJvb2wgVGVybTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGVy
bVR5cGUgIT0gVGVybVR5cGU6OkVtcHR5ICYmIG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkRlbGV0
ZWQ7Cit9CisKK2lubGluZSB2b2lkIFRlcm06OmFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIs
IGJvb2wgaXNDYXNlU2Vuc2l0aXZlKQoreworICAgIEFTU0VSVChpc0FTQ0lJKGNoYXJhY3Rlcikp
OworCisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV90ZXJtVHlwZSA9PSBU
ZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KTsKKyAgICBpZiAobV90ZXJtVHlwZSAhPSBUZXJtVHlwZTo6
Q2hhcmFjdGVyU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDYXNlU2Vuc2l0aXZl
IHx8ICFpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkKKyAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0
ZXJTZXQuY2hhcmFjdGVycy5zZXQoY2hhcmFjdGVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9h
dG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5zZXQodG9BU0NJSVVwcGVyKGNoYXJhY3Rl
cikpOworICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldCh0b0FT
Q0lJTG93ZXIoY2hhcmFjdGVyKSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBUZXJtOjpleHRl
bmRHcm91cFN1YnBhdHRlcm4oY29uc3QgVGVybSYgdGVybSkKK3sKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpHcm91cCk7CisgICAg
aWYgKG1fdGVybVR5cGUgIT0gVGVybVR5cGU6Okdyb3VwKQorICAgICAgICByZXR1cm47CisgICAg
bV9hdG9tRGF0YS5ncm91cC50ZXJtcy5hcHBlbmQodGVybSk7Cit9CisKK2lubGluZSB2b2lkIFRl
cm06OnF1YW50aWZ5KGNvbnN0IEF0b21RdWFudGlmaWVyJiBxdWFudGlmaWVyKQoreworICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmUsICJU
cmFuc2l0aW9uIHRvIHF1YW50aWZpZWQgdGVybSBzaG91bGQgb25seSBoYXBwZW4gb25jZS4iKTsK
KyAgICBtX3F1YW50aWZpZXIgPSBxdWFudGlmaWVyOworfQorCitpbmxpbmUgdW5zaWduZWQgVGVy
bTo6VGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFj
dGlvblNldCYgZmluYWxBY3Rpb25zKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
CisgICAgdW5zaWduZWQgbmV3RW5kOworCisgICAgc3dpdGNoIChtX3F1YW50aWZpZXIpIHsKKyAg
ICBjYXNlIEF0b21RdWFudGlmaWVyOjpPbmU6IHsKKyAgICAgICAgbmV3RW5kID0gZ2VuZXJhdGVT
dWJncmFwaEZvckF0b20obmZhLCBzdGFydCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JPbmU6IHsKKyAgICAgICAgbmV3RW5kID0gZ2VuZXJh
dGVTdWJncmFwaEZvckF0b20obmZhLCBzdGFydCk7CisgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJh
bnNpdGlvbihzdGFydCwgbmV3RW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
QXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmU6IHsKKyAgICAgICAgdW5zaWduZWQgcmVwZWF0U3Rh
cnQgPSBuZmEuY3JlYXRlTm9kZSgpOworICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24o
c3RhcnQsIHJlcGVhdFN0YXJ0KTsKKworICAgICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBnZW5l
cmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgbmZhLmFkZEVw
c2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwgcmVwZWF0U3RhcnQpOworCisgICAgICAgIHVuc2ln
bmVkIGtsZWVuRW5kID0gbmZhLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgbmZhLmFkZEVwc2lsb25U
cmFuc2l0aW9uKHJlcGVhdEVuZCwga2xlZW5FbmQpOworICAgICAgICBuZmEuYWRkRXBzaWxvblRy
YW5zaXRpb24oc3RhcnQsIGtsZWVuRW5kKTsKKyAgICAgICAgbmV3RW5kID0ga2xlZW5FbmQ7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmU6
IHsKKyAgICAgICAgdW5zaWduZWQgcmVwZWF0U3RhcnQgPSBuZmEuY3JlYXRlTm9kZSgpOworICAg
ICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIHJlcGVhdFN0YXJ0KTsKKworICAg
ICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHJl
cGVhdFN0YXJ0KTsKKyAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwg
cmVwZWF0U3RhcnQpOworCisgICAgICAgIHVuc2lnbmVkIGFmdGVyUmVwZWF0ID0gbmZhLmNyZWF0
ZU5vZGUoKTsKKyAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwgYWZ0
ZXJSZXBlYXQpOworICAgICAgICBuZXdFbmQgPSBhZnRlclJlcGVhdDsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIH0KKyAgICBuZmEuc2V0QWN0aW9ucyhuZXdFbmQsIGZpbmFsQWN0aW9ucyk7
CisgICAgcmV0dXJuIG5ld0VuZDsKK30KKworaW5saW5lIGJvb2wgVGVybTo6aXNFbmRPZkxpbmVB
c3NlcnRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpD
aGFyYWN0ZXJTZXQgJiYgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5iaXRDb3Vu
dCgpID09IDEgJiYgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5nZXQoMCk7Cit9
CisKK2lubGluZSBib29sIFRlcm06Om1hdGNoZXNBdExlYXN0T25lQ2hhcmFjdGVyKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIGlmIChtX3F1YW50aWZpZXIgPT0gQXRv
bVF1YW50aWZpZXI6Olplcm9Pck9uZSB8fCBtX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6
Olplcm9Pck1vcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNFbmRPZkxpbmVB
c3NlcnRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fdGVybVR5cGUg
PT0gVGVybVR5cGU6Okdyb3VwKSB7CisgICAgICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IG1f
YXRvbURhdGEuZ3JvdXAudGVybXMpIHsKKyAgICAgICAgICAgIGlmICh0ZXJtLm1hdGNoZXNBdExl
YXN0T25lQ2hhcmFjdGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW5saW5lIGJvb2wgVGVybTo6aXNLbm93blRvTWF0Y2hBbnlTdHJpbmcoKSBjb25zdAoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2Fz
ZSBUZXJtVHlwZTo6RW1wdHk6CisgICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGVybVR5cGU6
OkNoYXJhY3RlclNldDoKKyAgICAgICAgLy8gIi4qIiBpcyB0aGUgb25seSBzaW1wbGUgdGVybSBt
YXRjaGluZyBhbnkgc3RyaW5nLgorICAgICAgICByZXR1cm4gaXNVbml2ZXJzYWxUcmFuc2l0aW9u
KCkgJiYgbV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3JlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDogeworICAgICAgICAvLyBUaGVyZSBh
cmUgaW5maW5pdGVseSBtYW55IHdheXMgdG8gbWF0Y2ggYW55dGhpbmcgd2l0aCBncm91cHMsIHdl
IGp1c3QgaGFuZGxlIHNpbXBsZSBjYXNlcworICAgICAgICBpZiAobV9hdG9tRGF0YS5ncm91cC50
ZXJtcy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBj
b25zdCBUZXJtJiBmaXJzdFRlcm1Jbkdyb3VwID0gbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5maXJz
dCgpOworICAgICAgICAvLyAtKC4qKSB3aXRoIGFueSBxdWFudGlmaWVyLgorICAgICAgICBpZiAo
Zmlyc3RUZXJtSW5Hcm91cC5pc0tub3duVG9NYXRjaEFueVN0cmluZygpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKGZpcnN0VGVybUluR3JvdXAuaXNVbml2ZXJzYWxU
cmFuc2l0aW9uKCkpIHsKKyAgICAgICAgICAgIC8vIC0oLikqLCAoLispKiwgKC4/KSogZXRjLgor
ICAgICAgICAgICAgaWYgKG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09yTW9y
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgLy8gLSguKyk/
LgorICAgICAgICAgICAgaWYgKG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09y
T25lICYmIGZpcnN0VGVybUluR3JvdXAubV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpP
bmVPck1vcmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIC8v
IC0oLj8pKy4KKyAgICAgICAgICAgIGlmIChtX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6
Ok9uZU9yTW9yZSAmJiBmaXJzdFRlcm1Jbkdyb3VwLm1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRp
Zmllcjo6WmVyb09yT25lKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bmxpbmUgYm9vbCBUZXJtOjpoYXNGaXhlZExlbmd0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
VmFsaWQoKSk7CisKKyAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKKyAgICBjYXNlIFRlcm1UeXBl
OjpFbXB0eToKKyAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVy
U2V0OgorICAgICAgICByZXR1cm4gbV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmU7
CisgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6IHsKKyAgICAgICAgaWYgKG1fcXVhbnRpZmllciAh
PSBBdG9tUXVhbnRpZmllcjo6T25lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBtX2F0b21EYXRhLmdyb3VwLnRlcm1zKSB7CisgICAg
ICAgICAgICBpZiAoIXRlcm0uaGFzRml4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBUZXJtJiBUZXJtOjpvcGVyYXRvcj0oY29u
c3QgVGVybSYgb3RoZXIpCit7CisgICAgZGVzdHJveSgpOworICAgIG5ldyAoTm90TnVsbCwgdGhp
cykgVGVybShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVGVybSYgVGVy
bTo6b3BlcmF0b3I9KFRlcm0mJiBvdGhlcikKK3sKKyAgICBkZXN0cm95KCk7CisgICAgbmV3IChO
b3ROdWxsLCB0aGlzKSBUZXJtKFdURjo6bW92ZShvdGhlcikpOworICAgIHJldHVybiAqdGhpczsK
K30KKworaW5saW5lIGJvb2wgVGVybTo6b3BlcmF0b3I9PShjb25zdCBUZXJtJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAob3RoZXIubV90ZXJtVHlwZSAhPSBtX3Rlcm1UeXBlIHx8IG90aGVyLm1f
cXVhbnRpZmllciAhPSBtX3F1YW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN3aXRjaCAobV90ZXJtVHlwZSkgeworICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgorICAgIGNh
c2UgVGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgVGVy
bVR5cGU6OkNoYXJhY3RlclNldDoKKyAgICAgICAgcmV0dXJuIG1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0ID09IG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0OworICAgIGNhc2UgVGVybVR5cGU6
Okdyb3VwOgorICAgICAgICByZXR1cm4gbV9hdG9tRGF0YS5ncm91cCA9PSBvdGhlci5tX2F0b21E
YXRhLmdyb3VwOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2lubGluZSB1bnNpZ25lZCBUZXJtOjpoYXNoKCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBwcmltYXJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGVybVR5cGUpIDw8IDE2
IHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcXVhbnRpZmllcik7CisgICAgdW5zaWduZWQgc2Vj
b25kYXJ5ID0gMDsKKyAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKKyAgICBjYXNlIFRlcm1UeXBl
OjpFbXB0eToKKyAgICAgICAgc2Vjb25kYXJ5ID0gNTIxODQzOTM7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgIHNlY29uZGFyeSA9IDQwMzQyOTg4
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6CisgICAg
ICAgIHNlY29uZGFyeSA9IG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0Lmhhc2goKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAgICAgIHNlY29uZGFyeSA9IG1f
YXRvbURhdGEuZ3JvdXAuaGFzaCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IFdURjo6cGFpckludEhhc2gocHJpbWFyeSwgc2Vjb25kYXJ5KTsKK30KKworaW5saW5lIGJvb2wg
VGVybTo6aXNFbXB0eVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXJtVHlwZSA9PSBU
ZXJtVHlwZTo6RW1wdHk7Cit9CisKK2lubGluZSBib29sIFRlcm06OmlzRGVsZXRlZFZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6RGVsZXRlZDsKK30K
KworaW5saW5lIGJvb2wgVGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgeworICAgIGNh
c2UgVGVybVR5cGU6OkVtcHR5OgorICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRlcm1UeXBl
OjpDaGFyYWN0ZXJTZXQ6CisgICAgICAgIHJldHVybiAobV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQu
aW52ZXJ0ZWQgJiYgIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQo
KSkKKyAgICAgICAgICAgIHx8ICghbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52ZXJ0ZWQgJiYg
bV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5iaXRDb3VudCgpID09IDEyOCk7Cisg
ICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAgICAgIHJldHVybiBtX2F0b21EYXRhLmdyb3Vw
LnRlcm1zLnNpemUoKSA9PSAxICYmIG1fYXRvbURhdGEuZ3JvdXAudGVybXMuZmlyc3QoKS5pc1Vu
aXZlcnNhbFRyYW5zaXRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgdW5zaWduZWQgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBuZmEsIHVuc2ln
bmVkIHNvdXJjZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKKyAgICBjYXNl
IFRlcm1UeXBlOjpFbXB0eToKKyAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgVGVybVR5
cGU6OkNoYXJhY3RlclNldDogeworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBuZmEuY3JlYXRl
Tm9kZSgpOworICAgICAgICBpZiAoaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkpCisgICAgICAgICAg
ICBuZmEuYWRkVHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rlcihzb3VyY2UsIHRhcmdldCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZl
cnRlZCkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2hhcmFjdGVySXRlcmF0
b3IgOiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldEJpdHMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbmZhLmFkZFRyYW5zaXRpb24oc291cmNlLCB0YXJnZXQsIHN0YXRpY19j
YXN0PGNoYXI+KGNoYXJhY3Rlckl0ZXJhdG9yKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21EYXRhLmNoYXJhY3Rl
clNldC5jaGFyYWN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLmdldChpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlv
bihzb3VyY2UsIHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oaSkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAg
IH0KKyAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDogeworICAgICAgICB1bnNpZ25lZCBsYXN0VGFy
Z2V0ID0gc291cmNlOworICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBtX2F0b21EYXRh
Lmdyb3VwLnRlcm1zKQorICAgICAgICAgICAgbGFzdFRhcmdldCA9IHRlcm0uZ2VuZXJhdGVHcmFw
aChuZmEsIGxhc3RUYXJnZXQsIEFjdGlvblNldCgpKTsKKyAgICAgICAgcmV0dXJuIGxhc3RUYXJn
ZXQ7CisgICAgfQorICAgIH0KK30KKworaW5saW5lIHZvaWQgVGVybTo6ZGVzdHJveSgpCit7Cisg
ICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CisgICAg
Y2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXJtVHlw
ZTo6Q2hhcmFjdGVyU2V0OgorICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5+Q2hhcmFj
dGVyU2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGVybVR5cGU6Okdyb3VwOgorICAg
ICAgICBtX2F0b21EYXRhLmdyb3VwLn5Hcm91cCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgbV90ZXJtVHlwZSA9IFRlcm1UeXBlOjpEZWxldGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9ucworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8vIFRlcm1faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFyc2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1VSTEZpbHRlclBhcnNlci5jcHAKaW5kZXgg
MjVhOTA5ZjQxM2Y3ZTE5ZjIzNjRlNTJmMjIwY2U3ZmM5MjA2NjM1OC4uY2MxMmJhYTNlY2JiMGM5
ZDI4Njc0MjIyMDIwMWIxNTE4NDNiN2ViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwCkBAIC0yOCw5ICsyOCw5IEBACiAK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSAiTkZBLmgiCisjaW5j
bHVkZSAiQ29tYmluZWRVUkxGaWx0ZXJzLmgiCisjaW5jbHVkZSAiVGVybS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1lhcnJQYXJzZXIuaD4KLSNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CkBAIC0zOCw0NzggKzM4LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENv
bnRlbnRFeHRlbnNpb25zIHsKIAotZW51bSBjbGFzcyBBdG9tUXVhbnRpZmllciA6IHVpbnQ4X3Qg
ewotICAgIE9uZSwKLSAgICBaZXJvT3JPbmUsCi0gICAgWmVyb09yTW9yZSwKLSAgICBPbmVPck1v
cmUKLX07Ci0KLWNsYXNzIFRlcm0gewotcHVibGljOgotICAgIFRlcm0oKQotICAgIHsKLSAgICB9
Ci0KLSAgICBUZXJtKGNoYXIgY2hhcmFjdGVyLCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKLSAgICAg
ICAgOiBtX3Rlcm1UeXBlKFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCi0gICAgewotICAgICAgICBu
ZXcgKE5vdE51bGwsICZtX2F0b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7Ci0g
ICAgICAgIGFkZENoYXJhY3RlcihjaGFyYWN0ZXIsIGlzQ2FzZVNlbnNpdGl2ZSk7Ci0gICAgfQot
Ci0gICAgZW51bSBVbml2ZXJzYWxUcmFuc2l0aW9uVGFnIHsgVW5pdmVyc2FsVHJhbnNpdGlvbiB9
OwotICAgIGV4cGxpY2l0IFRlcm0oVW5pdmVyc2FsVHJhbnNpdGlvblRhZykKLSAgICAgICAgOiBt
X3Rlcm1UeXBlKFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCi0gICAgewotICAgICAgICBuZXcgKE5v
dE51bGwsICZtX2F0b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjg7ICsraSkKLSAgICAgICAgICAgIG1fYXRvbURh
dGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuc2V0KGkpOwotICAgIH0KLQotICAgIGVudW0gQ2hh
cmFjdGVyU2V0VGVybVRhZyB7IENoYXJhY3RlclNldFRlcm0gfTsKLSAgICBleHBsaWNpdCBUZXJt
KENoYXJhY3RlclNldFRlcm1UYWcsIGJvb2wgaXNJbnZlcnRlZCkKLSAgICAgICAgOiBtX3Rlcm1U
eXBlKFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCi0gICAgewotICAgICAgICBuZXcgKE5vdE51bGws
ICZtX2F0b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7Ci0gICAgICAgIG1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkID0gaXNJbnZlcnRlZDsKLSAgICB9Ci0KLSAgICBl
bnVtIEdyb3VwVGVybVRhZyB7IEdyb3VwVGVybSB9OwotICAgIGV4cGxpY2l0IFRlcm0oR3JvdXBU
ZXJtVGFnKQotICAgICAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6Okdyb3VwKQotICAgIHsKLSAg
ICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkgR3JvdXAoKTsKLSAgICB9Ci0K
LSAgICBlbnVtIEVuZE9mTGluZUFzc2VydGlvblRlcm1UYWcgeyBFbmRPZkxpbmVBc3NlcnRpb25U
ZXJtIH07Ci0gICAgZXhwbGljaXQgVGVybShFbmRPZkxpbmVBc3NlcnRpb25UZXJtVGFnKQotICAg
ICAgICA6IFRlcm0oQ2hhcmFjdGVyU2V0VGVybSwgZmFsc2UpCi0gICAgewotICAgICAgICBtX2F0
b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldCgwKTsKLSAgICB9Ci0KLSAgICBUZXJt
KGNvbnN0IFRlcm0mIG90aGVyKQotICAgICAgICA6IG1fdGVybVR5cGUob3RoZXIubV90ZXJtVHlw
ZSkKLSAgICAgICAgLCBtX3F1YW50aWZpZXIob3RoZXIubV9xdWFudGlmaWVyKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5
OgotICAgICAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKLSAgICAgICAgICAgIG5ldyAoTm90
TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJTZXQob3RoZXIubV9hdG9t
RGF0YS5jaGFyYWN0ZXJTZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGVy
bVR5cGU6Okdyb3VwOgotICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91
cCkgR3JvdXAob3RoZXIubV9hdG9tRGF0YS5ncm91cCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFRlcm0oVGVybSYmIG90aGVyKQotICAgICAgICA6IG1fdGVy
bVR5cGUoV1RGOjptb3ZlKG90aGVyLm1fdGVybVR5cGUpKQotICAgICAgICAsIG1fcXVhbnRpZmll
cihXVEY6Om1vdmUob3RoZXIubV9xdWFudGlmaWVyKSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
bV90ZXJtVHlwZSkgewotICAgICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKLSAgICAgICAgY2Fz
ZSBUZXJtVHlwZTo6RGVsZXRlZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRl
cm1UeXBlOjpDaGFyYWN0ZXJTZXQ6Ci0gICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21E
YXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KFdURjo6bW92ZShvdGhlci5tX2F0b21EYXRh
LmNoYXJhY3RlclNldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGVybVR5
cGU6Okdyb3VwOgotICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkg
R3JvdXAoV1RGOjptb3ZlKG90aGVyLm1fYXRvbURhdGEuZ3JvdXApKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIG90aGVyLmRlc3Ryb3koKTsKLSAgICB9Ci0KLSAgICBl
bnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07Ci0gICAgVGVybShFbXB0eVZhbHVlVGFn
KQotICAgICAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkVtcHR5KQotICAgIHsKLSAgICB9Ci0K
LSAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OwotICAgIFRlcm0oRGVs
ZXRlZFZhbHVlVGFnKQotICAgICAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkRlbGV0ZWQpCi0g
ICAgewotICAgIH0KLQotICAgIH5UZXJtKCkKLSAgICB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
dGVybVR5cGUgIT0gVGVybVR5cGU6OkVtcHR5ICYmIG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkRl
bGV0ZWQ7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyLCBi
b29sIGlzQ2FzZVNlbnNpdGl2ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0FTQ0lJKGNoYXJh
Y3RlcikpOwotCi0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fdGVy
bVR5cGUgPT0gVGVybVR5cGU6OkNoYXJhY3RlclNldCk7Ci0gICAgICAgIGlmIChtX3Rlcm1UeXBl
ICE9IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKGlzQ2FzZVNlbnNpdGl2ZSB8fCAhaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpCi0gICAg
ICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldChjaGFyYWN0ZXIp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNo
YXJhY3RlcnMuc2V0KHRvQVNDSUlVcHBlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIG1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuc2V0KHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZXh0ZW5kR3JvdXBTdWJwYXR0ZXJuKGNv
bnN0IFRlcm0mIHRlcm0pCi0gICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpHcm91cCk7Ci0gICAgICAgIGlmIChtX3Rl
cm1UeXBlICE9IFRlcm1UeXBlOjpHcm91cCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9hdG9tRGF0YS5ncm91cC50ZXJtcy5hcHBlbmQodGVybSk7Ci0gICAgfQotCi0gICAgdm9pZCBx
dWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYgcXVhbnRpZmllcikKLSAgICB7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmUs
ICJUcmFuc2l0aW9uIHRvIHF1YW50aWZpZWQgdGVybSBzaG91bGQgb25seSBoYXBwZW4gb25jZS4i
KTsKLSAgICAgICAgbV9xdWFudGlmaWVyID0gcXVhbnRpZmllcjsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCB1aW50NjRfdCBwYXR0ZXJuSWQsIHVuc2lnbmVk
IHN0YXJ0KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICAg
ICAgc3dpdGNoIChtX3F1YW50aWZpZXIpIHsKLSAgICAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6
T25lOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9y
QXRvbShuZmEsIHBhdHRlcm5JZCwgc3RhcnQpOwotICAgICAgICAgICAgcmV0dXJuIG5ld0VuZDsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JPbmU6IHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwg
cGF0dGVybklkLCBzdGFydCk7Ci0gICAgICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24o
c3RhcnQsIG5ld0VuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3RW5kOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmU6IHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHJlcGVhdFN0YXJ0ID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIG5mYS5h
ZGRSdWxlSWQocmVwZWF0U3RhcnQsIHBhdHRlcm5JZCk7Ci0gICAgICAgICAgICBuZmEuYWRkRXBz
aWxvblRyYW5zaXRpb24oc3RhcnQsIHJlcGVhdFN0YXJ0KTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBwYXR0ZXJuSWQsIHJl
cGVhdFN0YXJ0KTsKLSAgICAgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRF
bmQsIHJlcGVhdFN0YXJ0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQga2xlZW5FbmQgPSBuZmEu
Y3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbmZhLmFkZFJ1bGVJZChrbGVlbkVuZCwgcGF0dGVy
bklkKTsKLSAgICAgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIGts
ZWVuRW5kKTsKLSAgICAgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihzdGFydCwga2xl
ZW5FbmQpOwotICAgICAgICAgICAgcmV0dXJuIGtsZWVuRW5kOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZU9yTW9yZTogewotICAgICAgICAgICAgdW5zaWduZWQg
cmVwZWF0U3RhcnQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbmZhLmFkZFJ1bGVJ
ZChyZXBlYXRTdGFydCwgcGF0dGVybklkKTsKLSAgICAgICAgICAgIG5mYS5hZGRFcHNpbG9uVHJh
bnNpdGlvbihzdGFydCwgcmVwZWF0U3RhcnQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCByZXBl
YXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHBhdHRlcm5JZCwgcmVwZWF0U3Rh
cnQpOwotICAgICAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwgcmVw
ZWF0U3RhcnQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhZnRlclJlcGVhdCA9IG5mYS5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICBuZmEuYWRkUnVsZUlkKGFmdGVyUmVwZWF0LCBwYXR0ZXJu
SWQpOwotICAgICAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwgYWZ0
ZXJSZXBlYXQpOwotICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVwZWF0OwotICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpDaGFyYWN0ZXJT
ZXQgJiYgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5iaXRDb3VudCgpID09IDEg
JiYgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5nZXQoMCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBtYXRjaGVzQXRMZWFzdE9uZUNoYXJhY3RlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAgICAgICBpZiAobV9xdWFudGlmaWVyID09IEF0b21R
dWFudGlmaWVyOjpaZXJvT3JPbmUgfHwgbV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpa
ZXJvT3JNb3JlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNFbmRP
ZkxpbmVBc3NlcnRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAobV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6R3JvdXApIHsKLSAgICAgICAgICAgIGZvciAoY29u
c3QgVGVybSYgdGVybSA6IG1fYXRvbURhdGEuZ3JvdXAudGVybXMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGVybS5tYXRjaGVzQXRMZWFzdE9uZUNoYXJhY3RlcigpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBNYXRj
aGVzIGFueSBzdHJpbmcsIHRoZSBlbXB0eSBzdHJpbmcgaW5jbHVkZWQuCi0gICAgLy8gVGhpcyBp
cyB2ZXJ5IGNvbnNlcnZhdGl2ZS4gUGF0dGVybnMgbWF0Y2hpbmcgYW55IHN0cmluZyBjYW4gcmV0
dXJuIGZhbHNlIGhlcmUuCi0gICAgYm9vbCBpc0tub3duVG9NYXRjaEFueVN0cmluZygpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAgICAgICBzd2l0Y2ggKG1f
dGVybVR5cGUpIHsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Ci0gICAgICAgIGNhc2Ug
VGVybVR5cGU6OkRlbGV0ZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6Ci0g
ICAgICAgICAgICAvLyAiLioiIGlzIHRoZSBvbmx5IHNpbXBsZSB0ZXJtIG1hdGNoaW5nIGFueSBz
dHJpbmcuCi0gICAgICAgICAgICByZXR1cm4gaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgJiYgbV9x
dWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3JlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6Okdyb3VwOiB7Ci0gICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgaW5maW5pdGVseSBtYW55IHdheXMgdG8gbWF0Y2ggYW55dGhpbmcgd2l0aCBncm91cHMs
IHdlIGp1c3QgaGFuZGxlIHNpbXBsZSBjYXNlcwotICAgICAgICAgICAgaWYgKG1fYXRvbURhdGEu
Z3JvdXAudGVybXMuc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBjb25zdCBUZXJtJiBmaXJzdFRlcm1Jbkdyb3VwID0gbV9hdG9tRGF0YS5n
cm91cC50ZXJtcy5maXJzdCgpOwotICAgICAgICAgICAgLy8gLSguKikgd2l0aCBhbnkgcXVhbnRp
Zmllci4KLSAgICAgICAgICAgIGlmIChmaXJzdFRlcm1Jbkdyb3VwLmlzS25vd25Ub01hdGNoQW55
U3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlm
IChmaXJzdFRlcm1Jbkdyb3VwLmlzVW5pdmVyc2FsVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gLSguKSosICguKykqLCAoLj8pKiBldGMuCi0gICAgICAgICAgICAgICAgaWYgKG1f
cXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09yTW9yZSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICAvLyAtKC4rKT8uCi0gICAgICAg
ICAgICAgICAgaWYgKG1fcXVhbnRpZmllciA9PSBBdG9tUXVhbnRpZmllcjo6WmVyb09yT25lICYm
IGZpcnN0VGVybUluR3JvdXAubV9xdWFudGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmVPck1v
cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAgICAg
Ly8gLSguPykrLgotICAgICAgICAgICAgICAgIGlmIChtX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50
aWZpZXI6Ok9uZU9yTW9yZSAmJiBmaXJzdFRlcm1Jbkdyb3VwLm1fcXVhbnRpZmllciA9PSBBdG9t
UXVhbnRpZmllcjo6WmVyb09yT25lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRlcm0mIG9wZXJhdG9yPShjb25z
dCBUZXJtJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgbmV3IChO
b3ROdWxsLCB0aGlzKSBUZXJtKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIFRlcm0mIG9wZXJhdG9yPShUZXJtJiYgb3RoZXIpCi0gICAgewotICAgICAgICBkZXN0
cm95KCk7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgdGhpcykgVGVybShXVEY6Om1vdmUob3RoZXIp
KTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUZXJtJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci5tX3Rlcm1U
eXBlICE9IG1fdGVybVR5cGUgfHwgb3RoZXIubV9xdWFudGlmaWVyICE9IG1fcXVhbnRpZmllcikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKG1fdGVybVR5cGUp
IHsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6
OkRlbGV0ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBUZXJtVHlw
ZTo6Q2hhcmFjdGVyU2V0OgotICAgICAgICAgICAgcmV0dXJuIG1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0ID09IG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0OwotICAgICAgICBjYXNlIFRlcm1U
eXBlOjpHcm91cDoKLSAgICAgICAgICAgIHJldHVybiBtX2F0b21EYXRhLmdyb3VwID09IG90aGVy
Lm1fYXRvbURhdGEuZ3JvdXA7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHByaW1hcnkgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV90ZXJtVHlwZSkgPDwgMTYgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9xdWFudGlm
aWVyKTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25kYXJ5ID0gMDsKLSAgICAgICAgc3dpdGNoICht
X3Rlcm1UeXBlKSB7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgotICAgICAgICAgICAg
c2Vjb25kYXJ5ID0gNTIxODQzOTM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBU
ZXJtVHlwZTo6RGVsZXRlZDoKLSAgICAgICAgICAgIHNlY29uZGFyeSA9IDQwMzQyOTg4OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKLSAg
ICAgICAgICAgIHNlY29uZGFyeSA9IG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0Lmhhc2goKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKLSAgICAgICAg
ICAgIHNlY29uZGFyeSA9IG1fYXRvbURhdGEuZ3JvdXAuaGFzaCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2gocHJpbWFyeSwg
c2Vjb25kYXJ5KTsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6RW1wdHk7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6RGVsZXRlZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
Ly8gVGhpcyBpcyBleGFjdCBmb3IgY2hhcmFjdGVyIHNldHMgYnV0IGNvbnNlcnZhdGl2ZSBmb3Ig
Z3JvdXBzLgotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGZhbHNlIGZvciBhIGdyb3Vw
IGVxdWl2YWxlbnQgdG8gYSB1bml2ZXJzYWwgdHJhbnNpdGlvbi4KLSAgICBib29sIGlzVW5pdmVy
c2FsVHJhbnNpdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
LQotICAgICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6
RW1wdHk6Ci0gICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1U
eXBlOjpDaGFyYWN0ZXJTZXQ6Ci0gICAgICAgICAgICByZXR1cm4gKG1fYXRvbURhdGEuY2hhcmFj
dGVyU2V0LmludmVydGVkICYmICFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLmJp
dENvdW50KCkpCi0gICAgICAgICAgICAgICAgfHwgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5p
bnZlcnRlZCAmJiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLmJpdENvdW50KCkg
PT0gMTI4KTsKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6Ci0gICAgICAgICAgICByZXR1
cm4gbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5zaXplKCkgPT0gMSAmJiBtX2F0b21EYXRhLmdyb3Vw
LnRlcm1zLmZpcnN0KCkuaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdlbmVyYXRlU3ViZ3JhcGhG
b3JBdG9tKE5GQSYgbmZhLCB1aW50NjRfdCBwYXR0ZXJuSWQsIHVuc2lnbmVkIHNvdXJjZSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgewotICAgICAgICBjYXNlIFRl
cm1UeXBlOjpFbXB0eToKLSAgICAgICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
ICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IG5mYS5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICBuZmEuYWRkUnVsZUlkKHRhcmdl
dCwgcGF0dGVybklkKTsKLSAgICAgICAgICAgIGlmIChpc1VuaXZlcnNhbFRyYW5zaXRpb24oKSkK
LSAgICAgICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rlcihzb3VyY2Us
IHRhcmdldCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgY2hhcmFjdGVySXRlcmF0b3IgOiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5j
aGFyYWN0ZXJzLnNldEJpdHMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5mYS5hZGRUcmFu
c2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJJdGVyYXRv
cikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9hdG9tRGF0YS5jaGFy
YWN0ZXJTZXQuY2hhcmFjdGVycy5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbihzb3Vy
Y2UsIHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oaSkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRh
cmdldDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDogewotICAgICAg
ICAgICAgdW5zaWduZWQgbGFzdFRhcmdldCA9IHNvdXJjZTsKLSAgICAgICAgICAgIGZvciAoY29u
c3QgVGVybSYgdGVybSA6IG1fYXRvbURhdGEuZ3JvdXAudGVybXMpCi0gICAgICAgICAgICAgICAg
bGFzdFRhcmdldCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHBhdHRlcm5JZCwgbGFzdFRhcmdl
dCk7Ci0gICAgICAgICAgICByZXR1cm4gbGFzdFRhcmdldDsKLSAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgdm9pZCBkZXN0cm95KCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90
ZXJtVHlwZSkgewotICAgICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKLSAgICAgICAgY2FzZSBU
ZXJtVHlwZTo6RGVsZXRlZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRlcm1U
eXBlOjpDaGFyYWN0ZXJTZXQ6Ci0gICAgICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5+
Q2hhcmFjdGVyU2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUZXJtVHlw
ZTo6R3JvdXA6Ci0gICAgICAgICAgICBtX2F0b21EYXRhLmdyb3VwLn5Hcm91cCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV90ZXJtVHlwZSA9IFRlcm1UeXBlOjpE
ZWxldGVkOwotICAgIH0KLQotICAgIGVudW0gY2xhc3MgVGVybVR5cGUgOiB1aW50OF90IHsKLSAg
ICAgICAgRW1wdHksCi0gICAgICAgIERlbGV0ZWQsCi0gICAgICAgIENoYXJhY3RlclNldCwKLSAg
ICAgICAgR3JvdXAKLSAgICB9OwotCi0gICAgVGVybVR5cGUgbV90ZXJtVHlwZSB7IFRlcm1UeXBl
OjpFbXB0eSB9OwotICAgIEF0b21RdWFudGlmaWVyIG1fcXVhbnRpZmllciB7IEF0b21RdWFudGlm
aWVyOjpPbmUgfTsKLQotICAgIHN0cnVjdCBDaGFyYWN0ZXJTZXQgewotICAgICAgICBib29sIGlu
dmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgQml0VmVjdG9yIGNoYXJhY3RlcnMgeyAxMjggfTsK
LQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyU2V0JiBvdGhlcikgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG90aGVyLmludmVydGVkID09IGludmVy
dGVkICYmIG90aGVyLmNoYXJhY3RlcnMgPT0gY2hhcmFjdGVyczsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
V1RGOjpwYWlySW50SGFzaChpbnZlcnRlZCwgY2hhcmFjdGVycy5oYXNoKCkpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBHcm91cCB7Ci0gICAgICAgIFZlY3RvcjxUZXJtPiB0ZXJt
czsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR3JvdXAmIG90aGVyKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIudGVybXMgPT0gdGVybXM7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaGFzaCA9IDY0MjE3NDk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IFRl
cm0mIHRlcm0gOiB0ZXJtcykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRlcm1IYXNoID0g
dGVybS5oYXNoKCk7Ci0gICAgICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeICgodGVy
bUhhc2ggPDwgMTEpIF4gaGFzaCk7Ci0gICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDEx
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdW5pb24gQXRvbURhdGEgewotICAgICAgICBBdG9tRGF0YSgpCi0gICAgICAg
ICAgICA6IGludmFsaWRUZXJtKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICB+QXRv
bURhdGEoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyIGludmFsaWRUZXJt
OwotICAgICAgICBDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0OwotICAgICAgICBHcm91cCBncm91
cDsKLSAgICB9IG1fYXRvbURhdGE7Ci19OwotCi1zdHJ1Y3QgVGVybUhhc2ggewotICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRlcm0mIHRlcm0pIHsgcmV0dXJuIHRlcm0uaGFzaCgpOyB9
Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVGVybSYgYSwgY29uc3QgVGVybSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IFRlcm1IYXNoVHJhaXRzIDogcHVibGlj
IFdURjo6Q3VzdG9tSGFzaFRyYWl0czxUZXJtPiB7IH07Ci0KLXN0cnVjdCBQcmVmaXhUcmVlRW50
cnkgewotICAgIHVuc2lnbmVkIG5mYU5vZGU7Ci0gICAgSGFzaE1hcDxUZXJtLCBzdGQ6OnVuaXF1
ZV9wdHI8UHJlZml4VHJlZUVudHJ5PiwgVGVybUhhc2gsIFRlcm1IYXNoVHJhaXRzPiBuZXh0UGF0
dGVybjsKLX07Ci0KLWNsYXNzIEdyYXBoQnVpbGRlciB7CitjbGFzcyBQYXR0ZXJuUGFyc2VyIHsK
IHB1YmxpYzoKLSAgICBHcmFwaEJ1aWxkZXIoTkZBJiBuZmEsIFByZWZpeFRyZWVFbnRyeSYgcHJl
Zml4VHJlZVJvb3QsIGJvb2wgcGF0dGVybklzQ2FzZVNlbnNpdGl2ZSwgdWludDY0X3QgcGF0dGVy
bklkKQotICAgICAgICA6IG1fbmZhKG5mYSkKLSAgICAgICAgLCBtX3BhdHRlcm5Jc0Nhc2VTZW5z
aXRpdmUocGF0dGVybklzQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgLCBtX3BhdHRlcm5JZChwYXR0
ZXJuSWQpCi0gICAgICAgICwgbV9zdWJ0cmVlU3RhcnQobmZhLnJvb3QoKSkKLSAgICAgICAgLCBt
X3N1YnRyZWVFbmQobmZhLnJvb3QoKSkKLSAgICAgICAgLCBtX2xhc3RQcmVmaXhUcmVlRW50cnko
JnByZWZpeFRyZWVSb290KQorICAgIFBhdHRlcm5QYXJzZXIoYm9vbCBwYXR0ZXJuSXNDYXNlU2Vu
c2l0aXZlKQorICAgICAgICA6IG1fcGF0dGVybklzQ2FzZVNlbnNpdGl2ZShwYXR0ZXJuSXNDYXNl
U2Vuc2l0aXZlKQogICAgICAgICAsIG1fcGFyc2VTdGF0dXMoVVJMRmlsdGVyUGFyc2VyOjpPaykK
ICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5hbGl6ZSgpCisgICAgdm9pZCBmaW5hbGl6ZSh1
aW50NjRfdCBwYXR0ZXJuSWQsIENvbWJpbmVkVVJMRmlsdGVycyYgY29tYmluZWRVUkxGaWx0ZXJz
KQogICAgIHsKICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC01MzEsMzAgKzY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXJtIDogbV9zdW5rVGVybXMpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2xhc3RQcmVmaXhUcmVlRW50cnkpOwotICAgICAgICAgICAgYXV0byBu
ZXh0RW50cnkgPSBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5leHRQYXR0ZXJuLmZpbmQodGVybSk7
Ci0gICAgICAgICAgICBpZiAobmV4dEVudHJ5ICE9IG1fbGFzdFByZWZpeFRyZWVFbnRyeS0+bmV4
dFBhdHRlcm4uZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBtX2xhc3RQcmVmaXhUcmVlRW50cnkg
PSBuZXh0RW50cnktPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgICAgIG1fbmZhLmFkZFJ1bGVJ
ZChtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5mYU5vZGUsIG1fcGF0dGVybklkKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVF
bnRyeT4gbmV4dFByZWZpeFRyZWVFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZUVu
dHJ5PigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld0Vu
ZCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChtX25mYSwgbV9wYXR0ZXJuSWQsIG1fbGFzdFByZWZpeFRy
ZWVFbnRyeS0+bmZhTm9kZSk7Ci0gICAgICAgICAgICAgICAgbmV4dFByZWZpeFRyZWVFbnRyeS0+
bmZhTm9kZSA9IG5ld0VuZDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbGFzdFByZWZpeFRyZWVFbnRyeS0+bmV4dFBhdHRlcm4uc2V0KHRlcm0s
IFdURjo6bW92ZShuZXh0UHJlZml4VHJlZUVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgICAgICAgICAgICAgIG1fbGFzdFByZWZpeFRy
ZWVFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3N1YnRyZWVFbmQgPSBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5mYU5v
ZGU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9v
cGVuR3JvdXBzLmlzRW1wdHkoKSwgIkFuIHVuY2xvc2VkIGdyb3VwIHNob3VsZCBiZSBhIHBhcnNp
bmcgZXJyb3IgaW4gWUFSUi4iKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N1YnRy
ZWVTdGFydCAhPSBtX3N1YnRyZWVFbmQsICJUaGlzIHJlZ2V4IGNhbm5vdCBtYXRjaCBhbnl0aGlu
ZyIpOwotICAgICAgICAKLSAgICAgICAgbV9uZmEuc2V0RmluYWwobV9zdWJ0cmVlRW5kLCBtX3Bh
dHRlcm5JZCk7CisgICAgICAgIGNvbWJpbmVkVVJMRmlsdGVycy5hZGRQYXR0ZXJuKHBhdHRlcm5J
ZCwgbV9zdW5rVGVybXMpOwogICAgIH0KIAogICAgIFVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0
dXMgcGFyc2VTdGF0dXMoKSBjb25zdApAQCAtNjIwLDcgKzEzNCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKG1f
c3VidHJlZVN0YXJ0ICE9IG1fc3VidHJlZUVuZCB8fCBtX2Zsb2F0aW5nVGVybS5pc1ZhbGlkKCkg
fHwgIW1fb3Blbkdyb3Vwcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fZmxvYXRpbmdUZXJt
LmlzVmFsaWQoKSB8fCAhbV9zdW5rVGVybXMuaXNFbXB0eSgpIHx8ICFtX29wZW5Hcm91cHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBmYWlsKFVSTEZpbHRlclBhcnNlcjo6TWlzcGxhY2VkU3Rh
cnRPZkxpbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC04MDIsMzAgKzMx
NiwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9zdW5rVGVybXMucmVtb3ZlTGFzdCgpOwog
ICAgIH0KIAotICAgIE5GQSYgbV9uZmE7CiAgICAgYm9vbCBtX3BhdHRlcm5Jc0Nhc2VTZW5zaXRp
dmU7Ci0gICAgY29uc3QgdWludDY0X3QgbV9wYXR0ZXJuSWQ7CiAKLSAgICB1bnNpZ25lZCBtX3N1
YnRyZWVTdGFydCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3N1YnRyZWVFbmQgeyAwIH07Ci0KLSAg
ICBQcmVmaXhUcmVlRW50cnkqIG1fbGFzdFByZWZpeFRyZWVFbnRyeTsKICAgICBEZXF1ZTxUZXJt
PiBtX29wZW5Hcm91cHM7CiAgICAgVmVjdG9yPFRlcm0+IG1fc3Vua1Rlcm1zOwogICAgIFRlcm0g
bV9mbG9hdGluZ1Rlcm07CiAgICAgYm9vbCBtX2hhc0JlZ2lubmluZ09mTGluZUFzc2VydGlvbiB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1Byb2Nlc3NlZEVuZE9mTGluZUFzc2VydGlvbiB7IGZh
bHNlIH07CiAKLSAgICBUZXJtIG1fbmV3UHJlZml4U3RhcmluZ1BvaW50OwotCiAgICAgVVJMRmls
dGVyUGFyc2VyOjpQYXJzZVN0YXR1cyBtX3BhcnNlU3RhdHVzOwogfTsKIAotVVJMRmlsdGVyUGFy
c2VyOjpVUkxGaWx0ZXJQYXJzZXIoTkZBJiBuZmEpCi0gICAgOiBtX25mYShuZmEpCi0gICAgLCBt
X3ByZWZpeFRyZWVSb290KHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZUVudHJ5PigpKQorVVJM
RmlsdGVyUGFyc2VyOjpVUkxGaWx0ZXJQYXJzZXIoQ29tYmluZWRVUkxGaWx0ZXJzJiBjb21iaW5l
ZFVSTEZpbHRlcnMpCisgICAgOiBtX2NvbWJpbmVkVVJMRmlsdGVycyhjb21iaW5lZFVSTEZpbHRl
cnMpCiB7Ci0gICAgbV9wcmVmaXhUcmVlUm9vdC0+bmZhTm9kZSA9IG5mYS5yb290KCk7CiB9CiAK
IFVSTEZpbHRlclBhcnNlcjo6flVSTEZpbHRlclBhcnNlcigpCkBAIC04MzksMjEgKzM0MywxNiBA
QCBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIFVSTEZpbHRlclBhcnNlcjo6YWRkUGF0dGVy
bihjb25zdCBTdHJpbmcmIHBhdHRlcm4sCiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gRW1wdHlQYXR0ZXJuOwogCi0gICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fbmZh
LmdyYXBoU2l6ZSgpOwotCiAgICAgUGFyc2VTdGF0dXMgc3RhdHVzID0gT2s7Ci0gICAgR3JhcGhC
dWlsZGVyIGdyYXBoQnVpbGRlcihtX25mYSwgKm1fcHJlZml4VHJlZVJvb3QsIHBhdHRlcm5Jc0Nh
c2VTZW5zaXRpdmUsIHBhdHRlcm5JZCk7Ci0gICAgU3RyaW5nIGVycm9yID0gU3RyaW5nKEpTQzo6
WWFycjo6cGFyc2UoZ3JhcGhCdWlsZGVyLCBwYXR0ZXJuLCAwKSk7CisgICAgUGF0dGVyblBhcnNl
ciBwYXR0ZXJuUGFyc2VyKHBhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUpOworICAgIFN0cmluZyBlcnJv
ciA9IFN0cmluZyhKU0M6OllhcnI6OnBhcnNlKHBhdHRlcm5QYXJzZXIsIHBhdHRlcm4sIDApKTsK
ICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCi0gICAgICAgIGdyYXBoQnVpbGRlci5maW5hbGl6ZSgp
OworICAgICAgICBwYXR0ZXJuUGFyc2VyLmZpbmFsaXplKHBhdHRlcm5JZCwgbV9jb21iaW5lZFVS
TEZpbHRlcnMpOwogICAgIGVsc2UKICAgICAgICAgc3RhdHVzID0gWWFyckVycm9yOwogICAgIAog
ICAgIGlmIChzdGF0dXMgPT0gT2spCi0gICAgICAgIHN0YXR1cyA9IGdyYXBoQnVpbGRlci5wYXJz
ZVN0YXR1cygpOwotCi0gICAgaWYgKHN0YXR1cyAhPSBPaykKLSAgICAgICAgbV9uZmEucmVzdG9y
ZVRvR3JhcGhTaXplKG9sZFNpemUpOworICAgICAgICBzdGF0dXMgPSBwYXR0ZXJuUGFyc2VyLnBh
cnNlU3RhdHVzKCk7CiAKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuaAppbmRleCAwODIzOWFkYjAw
YWM1NzBhNzY1MzZhYTI1Mzg2ZDBkYTJlYTAxMzliLi5lZDA4YTgyYjM3MDExMjY0MzQ1OGNkNWM2
ZGFlM2NlMjIyM2E1YmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9VUkxGaWx0ZXJQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9VUkxGaWx0ZXJQYXJzZXIuaApAQCAtMjgsMTYgKzI4LDEzIEBACiAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1jbGFzcyBORkE7Ci0KLXN0cnVjdCBQcmVmaXhUcmVl
RW50cnk7CitjbGFzcyBDb21iaW5lZFVSTEZpbHRlcnM7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IFVSTEZpbHRlclBhcnNlciB7CiBwdWJsaWM6CkBAIC01OCwxMyArNTUsMTIgQEAgcHVibGljOgog
ICAgICAgICBJbnZhbGlkUXVhbnRpZmllciwKICAgICB9OwogICAgIHN0YXRpYyBTdHJpbmcgc3Rh
dHVzU3RyaW5nKFBhcnNlU3RhdHVzKTsKLSAgICBleHBsaWNpdCBVUkxGaWx0ZXJQYXJzZXIoTkZB
Jik7CisgICAgZXhwbGljaXQgVVJMRmlsdGVyUGFyc2VyKENvbWJpbmVkVVJMRmlsdGVycyYpOwog
ICAgIH5VUkxGaWx0ZXJQYXJzZXIoKTsKICAgICBQYXJzZVN0YXR1cyBhZGRQYXR0ZXJuKGNvbnN0
IFN0cmluZyYgcGF0dGVybiwgYm9vbCBwYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlLCB1aW50NjRfdCBw
YXR0ZXJuSWQpOwogCiBwcml2YXRlOgotICAgIE5GQSYgbV9uZmE7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFByZWZpeFRyZWVFbnRyeT4gbV9wcmVmaXhUcmVlUm9vdDsKKyAgICBDb21iaW5lZFVSTEZp
bHRlcnMmIG1fY29tYmluZWRVUkxGaWx0ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA2NGJjNDgxYzhhYWFkMWNkNGE3NWE0NDRmNzViNDVjYTFmMWI4NzAyLi44YmMwNGEx
OTkyYzRkMDk5OGM4ODk1NDc0Zjg2YmE1Y2VmYWI0NDdmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDMtMzAg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29udGVu
dCBFeHRlbnNpb25zOiBzcGxpdCB0aGUgc3RhdGUgbWFjaGluZXMgdG8gbWluaW1pemUgcHJlZml4
IHN0YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRl
c3RQYXR0ZXJuU3RhdHVzKToKKwogMjAxNS0wMy0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIENvcnJl
Y3RseSBoYW5kbGUgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGluZyBldmVyeXRoaW5nCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcAppbmRleCAxOTc2NTVkNTViM2ViYjAzODQ1ZDU5ZTU0MDE2NTQyZWVlMGJhMTdjLi5h
MzdjZWMwNTI5MjZiNzJjYTViYTFkNWRkY2U5NTdlY2Y0MWFiMTAwIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29tYmluZWRVUkxGaWx0ZXJzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25FcnJv
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CkBAIC02
MjEsMTAgKzYyMiw4NiBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09O
KQogICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
SW52YWxpZFJlZ2V4KTsKIH0KIAorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQ
cmVmaXhTZXBhcmF0ZWRNYWNoaW5lczEpCit7CisgICAgY29uc3QgY2hhciogc3RyaWN0UHJlZml4
U2VwYXJhdGVkTWFjaGluZXNGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl4uKmZvb1wifX0sIgorICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJiYXIkXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYWJdK2JhbmdcIn19XSI7CisKKyAgICBhdXRvIGV4
dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmls
dGVyKHN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVzRmlsdGVyKTsKKworICAgIENvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKKyAgICBiYWNrZW5k
LmFkZENvbnRlbnRFeHRlbnNpb24oIlN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVzMSIsIGV4
dGVuc2lvbik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd2Via2l0Lm9yZy9mb28iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImZvbzovL3dlYmtpdC5vcmcvYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImJhcjovL3dlYmtpdC5vcmcvYmFyIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImFiYW5nOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJiYW5nOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImNiYW5nOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9iYW5nIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiYmFuZzovL3dlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMxUGFydGl0aW9u
aW5nKQoreworICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29tYmlu
ZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXIgcGFy
c2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisKKyAgICAvLyBUaG9zZSB0d28gc2hhcmUgYSBwcmVm
aXguCisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBh
cnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIl4uKmZvbyIsIGZhbHNlLCAwKSk7Cisg
ICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3Rh
dHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oImJhciQiLCBmYWxzZSwgMSkpOworCisgICAgLy8g
Tm90IHRoaXMgb25lLgorICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVy
UGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJeW2FiXStiYW5nIiwg
ZmFsc2UsIDApKTsKKworICAgIEVYUEVDVF9FUSgydWwsIGNvbWJpbmVkVVJMRmlsdGVycy5jcmVh
dGVORkFzKCkuc2l6ZSgpKTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJp
Y3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczIpCit7CisgICAgY29uc3QgY2hhciogc3RyaWN0UHJl
Zml4U2VwYXJhdGVkTWFjaGluZXNGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5mb29cIn19LCIKKyAgICAie1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiXi4qW2EtY10rYmFyXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl53ZWJraXQ6XCJ9fSwiCisgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIlthLWNdK2Irb29tXCJ9fV0iOworCisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihzdHJpY3RQcmVmaXhTZXBh
cmF0ZWRNYWNoaW5lc0ZpbHRlcik7CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CisgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9u
KCJTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczIiLCBleHRlbnNpb24pOworCisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
Zm9vOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
IndlYmtpdDovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly9iYXIub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9hYmFyLm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9iYmFyLm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9jYmFyLm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9hYmNiYXIub3JnLyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2RiYXIub3JnLyIpLCB7IH0pOworfQorCitU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVz
MlBhcnRpdGlvbmluZykKK3sKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0
ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVy
UGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworCisgICAgRVhQRUNUX0VRKENvbnRl
bnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFk
ZFBhdHRlcm4oIl5mb28iLCBmYWxzZSwgMCkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5z
aW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJu
KCJeLipbYS1jXStiYXIiLCBmYWxzZSwgMSkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5z
aW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJu
KCJed2Via2l0OiIsIGZhbHNlLCAyKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25z
OjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIlth
LWNdK2Irb29tIiwgZmFsc2UsIDMpKTsKKworICAgIC8vICJeZm9vIiBhbmQgIl53ZWJraXQ6IiBj
YW4gYmUgZ3JvdXBlZCwgdGhlIG90aGVyIHR3byBoYXZlIGEgdmFyaWFibGUgcHJlZml4LgorICAg
IEVYUEVDVF9FUSgzdWwsIGNvbWJpbmVkVVJMRmlsdGVycy5jcmVhdGVORkFzKCkuc2l6ZSgpKTsK
K30KKwogc3RhdGljIHZvaWQgdGVzdFBhdHRlcm5TdGF0dXMoU3RyaW5nIHBhdHRlcm4sIENvbnRl
bnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIHN0YXR1cykKIHsKLSAg
ICBDb250ZW50RXh0ZW5zaW9uczo6TkZBIG5mYTsKLSAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJM
RmlsdGVyUGFyc2VyIHBhcnNlcihuZmEpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5l
ZFVSTEZpbHRlcnMgY29tYmluZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpV
UkxGaWx0ZXJQYXJzZXIgcGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CiAgICAgRVhQRUNUX0VR
KHN0YXR1cywgcGFyc2VyLmFkZFBhdHRlcm4ocGF0dGVybiwgZmFsc2UsIDApKTsKIH0KICAgICAK
</data>
<flag name="review"
          id="274683"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>