<?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>204397</bug_id>
          
          <creation_ts>2019-11-19 23:05:37 -0800</creation_ts>
          <short_desc>MicrotaskQueue should be accessed via EventLoop</short_desc>
          <delta_ts>2019-11-20 19:34:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=204395</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204042</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1591899</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-19 23:05:37 -0800</bug_when>
    <thetext>In order to integrate MicrotaskQueue, refactor the existing code to always access it via EventLoop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591907</commentid>
    <comment_count>1</comment_count>
      <attachid>383948</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-19 23:31:23 -0800</bug_when>
    <thetext>Created attachment 383948
Refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591908</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-19 23:33:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/57351294&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591910</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-19 23:45:25 -0800</bug_when>
    <thetext>Once this patch is landed, there are a few bugs to fix:
 - MutationObserver&apos;s compound microtask queue must be per similar origin windows; i.e. per event loop. This should let us remove the hack we added in https://trac.webkit.org/r247222.
 - Custom Element&apos;s backup queue must be per micro per similar origin windows; i.e. per event loop. This will be observable via editing commands issued across sites.
 - EventLoopTaskQueue::queueMicrotaskCallback should automatically suspend or stop microtasks if the associated script execution context is suspend or stopped like regular EventLoopTasks. This will let us remove ActiveDOMCallbackMicrotask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591933</commentid>
    <comment_count>4</comment_count>
      <attachid>383948</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-20 01:39:53 -0800</bug_when>
    <thetext>Comment on attachment 383948
Refactoring

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

&gt; Source/WebCore/dom/MutationObserver.cpp:163
&gt; +// This state must be per event loop.
&gt; +static bool mutationObserverCompoundMicrotaskQueuedFlag = false;

I suppose this is a FIXME.

&gt; Source/WebCore/dom/WindowEventLoop.cpp:78
&gt; +    // MicrotaskQueue must be one per event loop.

FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592237</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-20 17:47:58 -0800</bug_when>
    <thetext>Committed r252723: &lt;https://trac.webkit.org/changeset/252723&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592261</commentid>
    <comment_count>6</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-20 19:34:45 -0800</bug_when>
    <thetext>Filed: Bug 204437 – [MSVC] error C2039: &apos;weakPtrFactory&apos;: is not a member of &apos;WebCore::DocumentStorageAccess::requestStorageAccess::&lt;lambda_3f2cfd7704f93d8fe19d5b5f064f8add&gt;&apos;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383948</attachid>
            <date>2019-11-19 23:31:23 -0800</date>
            <delta_ts>2019-11-20 01:39:53 -0800</delta_ts>
            <desc>Refactoring</desc>
            <filename>bug-204397-20191119233122.patch</filename>
            <type>text/plain</type>
            <size>43796</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDE5LTExLTE5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1pY3JvdGFza1F1ZXVlIHNob3Vs
ZCBiZSBhY2Nlc3NlZCB2aWEgRXZlbnRMb29wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgY29k
ZSBzbyB0aGF0IGEgbWljcm90YXNrIGlzIGFsd2F5cyBxdWV1ZWQgdmlhIEV2ZW50TG9vcFRhc2tH
cm91cC4KKyAgICAgICAgSXQgcHJlc2VydmVzIGFsbCBvdGhlciAoYnJva2VuKSBzZW1hbnRpY3Mg
YW5kIGJlaGF2aW9yIGxpa2UgYWxsIG9yaWdpbnMgc2hhcmluZyBhIHNpbmdsZSBtaWNyb3Rhc2sg
cXVldWUuCisKKyAgICAgICAgVGhlIHNpbmdsZXRvbiBNaWNyb3Rhc2tRdWV1ZSBmb3IgdGhlIG1h
aW4gdGhyZWFkIGhhcyBiZWVuIG1vdmVkIGZyb20gTWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRR
dWV1ZQorICAgICAgICB0byBXaW5kb3dFdmVudExvb3AsIGFuZCBhbiBpbnN0YW5jZSBvZiBNaWNy
b3Rhc2tRdWV1ZSBmb3IgZWFjaCB3b3JrZXIgaGFzIGJlZW4gbW92ZWQgZnJvbSBXb3JrZXJHbG9i
YWxTY29wZQorICAgICAgICB0byBXb3JrZXJFdmVudExvb3AuCisKKyAgICAgICAgKiBhbmltYXRp
b24vRG9jdW1lbnRUaW1lbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRpbWVs
aW5lOjppbnRlcm5hbFVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBh
bmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlv
bjo6dXBkYXRlRmluaXNoZWRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3RUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTR2xvYmFsT2JqZWN0VGFzazo6
SlNHbG9iYWxPYmplY3RUYXNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpxdWV1ZU1pY3JvdGFz
a1RvRXZlbnRMb29wKTogUmVuYW1lZCBmcm9tIHF1ZXVlVGFza1RvRXZlbnRMb29wLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXhlY1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpkaWRMZWF2
ZVNjcmlwdENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
QmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnF1ZXVlTWlj
cm90YXNrVG9FdmVudExvb3ApOiBSZW5hbWVkIGZyb20gcXVldWVUYXNrVG9FdmVudExvb3AuCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oOgorICAgICAgICAqIGRvbS9DdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYWNrdXBFbGVt
ZW50UXVldWVNaWNyb3Rhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50T25BcHByb3ByaWF0ZUVsZW1lbnRRdWV1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5zdXJl
QmFja3VwUXVldWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5o
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6ZmluaXNoZWRQYXJzaW5nKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdG9yYWdlQWNjZXNz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3RvcmFnZUFjY2Vzczo6cmVxdWVzdFN0
b3JhZ2VBY2Nlc3MpOgorICAgICAgICAqIGRvbS9FdmVudExvb3AuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMb29wOjpxdWV1ZU1pY3JvdGFzayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMb29wOjpwZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpxdWV1ZU1pY3JvdGFza0NhbGxiYWNrKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlTWljcm90
YXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnBlcmZv
cm1NaWNyb3Rhc2tDaGVja3BvaW50KTogQWRkZWQuCisgICAgICAgICogZG9tL0V2ZW50TG9vcC5o
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjptaWNyb3Rhc2tRdWV1ZSk6
CisgICAgICAgICogZG9tL01pY3JvdGFza3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWljcm90
YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpN
aWNyb3Rhc2tRdWV1ZTo6Y29udGV4dFF1ZXVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTWlj
cm90YXNrcy5oOgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJNaWNyb3Rhc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRN
aWNyb3Rhc2spOiBNYWRlIHRoaXMgYSBtZW1iZXIgZnVuY3Rpb24KKyAgICAgICAgc28gdGhhdCBp
dCBjYW4gY2FsbCBub3RpZnlNdXRhdGlvbk9ic2VydmVycyBpbiBpdHMgbGFtYmRhLgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVTbG90Q2hhbmdlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6c2V0SGFzVHJhbnNpZW50UmVn
aXN0cmF0aW9uKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5oOgorICAgICAgICAq
IGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0
YWNoKToKKyAgICAgICAgKiBkb20vV2luZG93RXZlbnRMb29wLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd0V2ZW50TG9vcDo6bWljcm90YXNrUXVldWUpOgorICAgICAgICAqIGRvbS9XaW5k
b3dFdmVudExvb3AuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9y
UGF1c2VkVHJlZUJ1aWxkZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRp
bmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
cmVjb3JkQ2FudmFzQWN0aW9uKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnF1ZXVlTWljcm9UYXNrKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVu
dExvb3A6On5Xb3JrZXJFdmVudExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRM
b29wOjptaWNyb3Rhc2tRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6
OmNsZWFyTWljcm90YXNrUXVldWUpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRMb29w
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6V29ya2VyR2xvYmFsU2NvcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OnByZXBhcmVGb3JUZXJtaW5hdGlvbik6CisgICAg
ICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyR2xvYmFsU2NvcGU6Om1pY3JvdGFza1F1ZXVlIGNvbnN0KTogRGVsZXRlZC4KKwogMjAxOS0x
MS0xOSAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIEFzc2VydGlv
biBmYWlsdXJlIGluIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuY3BwCShyZXZpc2lv
biAyNTI2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEZWNsYXJhdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJLZXlmcmFtZUVmZmVjdC5oIgpAQCAt
Mzg4LDcgKzM4OSw4IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZTo6aW50ZXJuYWxVcGRhdGVBbmkK
ICAgICByZW1vdmVSZXBsYWNlZEFuaW1hdGlvbnMoKTsKIAogICAgIC8vIDMuIFBlcmZvcm0gYSBt
aWNyb3Rhc2sgY2hlY2twb2ludC4KLSAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVl
KCkucGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKTsKKyAgICBpZiAoYXV0byBkb2N1bWVudCA9
IG1ha2VSZWZQdHIodGhpcy0+ZG9jdW1lbnQoKSkpCisgICAgICAgIGRvY3VtZW50LT5ldmVudExv
b3AoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOwogCiAgICAgLy8gNC4gTGV0IGV2ZW50
cyB0byBkaXNwYXRjaCBiZSBhIGNvcHkgb2YgZG9jJ3MgcGVuZGluZyBhbmltYXRpb24gZXZlbnQg
cXVldWUuCiAgICAgLy8gNS4gQ2xlYXIgZG9jJ3MgcGVuZGluZyBhbmltYXRpb24gZXZlbnQgcXVl
dWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcAkocmV2
aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5NiwxMiArNzk2LDE0IEBAIHZvaWQgV2ViQW5pbWF0aW9u
Ojp1cGRhdGVGaW5pc2hlZFN0YXRlKEQKICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgc3lu
Y2hyb25vdXNseSBub3RpZnkgaXMgZmFsc2UsIHF1ZXVlIGEgbWljcm90YXNrIHRvIHJ1biBmaW5p
c2ggbm90aWZpY2F0aW9uIHN0ZXBzIGZvciBhbmltYXRpb24gdW5sZXNzIHRoZXJlCiAgICAgICAg
ICAgICAvLyBpcyBhbHJlYWR5IGEgbWljcm90YXNrIHF1ZXVlZCB0byBydW4gdGhvc2Ugc3RlcHMg
Zm9yIGFuaW1hdGlvbi4KICAgICAgICAgICAgIG1fZmluaXNoTm90aWZpY2F0aW9uU3RlcHNNaWNy
b3Rhc2tQZW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIE1pY3JvdGFza1F1ZXVlOjptYWluVGhy
ZWFkUXVldWUoKS5hcHBlbmQobWFrZVVuaXF1ZTxWb2lkTWljcm90YXNrPihbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlu
aXNoTm90aWZpY2F0aW9uU3RlcHNNaWNyb3Rhc2tQZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZmluaXNoTm90aWZpY2F0aW9uU3RlcHNNaWNyb3Rhc2tQZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpbmlzaE5vdGlmaWNhdGlvblN0ZXBzKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
dmVudExvb3AoKS5xdWV1ZU1pY3JvdGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZpbmlzaE5vdGlmaWNhdGlvblN0
ZXBzTWljcm90YXNrUGVuZGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9maW5pc2hO
b3RpZmljYXRpb25TdGVwc01pY3JvdGFza1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmlzaE5vdGlmaWNhdGlvblN0ZXBzKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdFRhc2suY3BwCShyZXZpc2lvbiAyNTI2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0Q2Fs
bGJhY2sgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxKU0dsb2JhbE9iamVjdENhbGxiYWNrPiwg
cHJpdmF0ZSBBY3RpdmVET01DYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxKU0ds
b2JhbE9iamVjdENhbGxiYWNrPiBjcmVhdGUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmPE1pY3JvdGFzaz4mJiB0YXNrKQorICAgIHN0YXRpYyBSZWY8SlNHbG9iYWxPYmplY3RD
YWxsYmFjaz4gY3JlYXRlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxKU0M6
Ok1pY3JvdGFzaz4mJiB0YXNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SlNHbG9iYWxPYmplY3RDYWxsYmFjayhnbG9iYWxPYmplY3QsIFdURk1vdmUodGFzaykpKTsKICAg
ICB9CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNH
bG9iYWxPYmplY3RDYWxsYmFjayhKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8
TWljcm90YXNrPiYmIHRhc2spCisgICAgSlNHbG9iYWxPYmplY3RDYWxsYmFjayhKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8SlNDOjpNaWNyb3Rhc2s+JiYgdGFzaykKICAgICAg
ICAgOiBBY3RpdmVET01DYWxsYmFjayB7IGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgfQogICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0IHsgZ2xvYmFsT2JqZWN0LnZtKCksICZn
bG9iYWxPYmplY3QgfQogICAgICAgICAsIG1fdGFzayB7IFdURk1vdmUodGFzaykgfQpAQCAtNzIs
MTAgKzcyLDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3Ryb25nPEpTRE9NR2xvYmFsT2Jq
ZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBSZWY8TWljcm90YXNrPiBtX3Rhc2s7CisgICAgUmVm
PEpTQzo6TWljcm90YXNrPiBtX3Rhc2s7CiB9OwogCi1KU0dsb2JhbE9iamVjdFRhc2s6OkpTR2xv
YmFsT2JqZWN0VGFzayhKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8TWljcm90
YXNrPiYmIHRhc2spCitKU0dsb2JhbE9iamVjdFRhc2s6OkpTR2xvYmFsT2JqZWN0VGFzayhKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8SlNDOjpNaWNyb3Rhc2s+JiYgdGFzaykK
ICAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soeyB9KQogewogICAgIGF1dG8gY2Fs
bGJhY2sgPSBKU0dsb2JhbE9iamVjdENhbGxiYWNrOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKHRhc2spKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJGZXRjaFJl
c3BvbnNlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCkBAIC03MCw3ICs3MSw3IEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpT
RE9NV2luZG8KICAgICAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywKICAgICAmc2hvdWxkSW50ZXJy
dXB0U2NyaXB0LAogICAgICZqYXZhU2NyaXB0UnVudGltZUZsYWdzLAotICAgICZxdWV1ZVRhc2tU
b0V2ZW50TG9vcCwKKyAgICAmcXVldWVNaWNyb3Rhc2tUb0V2ZW50TG9vcCwKICAgICAmc2hvdWxk
SW50ZXJydXB0U2NyaXB0QmVmb3JlVGltZW91dCwKICAgICAmbW9kdWxlTG9hZGVySW1wb3J0TW9k
dWxlLAogICAgICZtb2R1bGVMb2FkZXJSZXNvbHZlLApAQCAtMjA0LDE2ICsyMDUsMTYgQEAgUnVu
dGltZUZsYWdzIEpTRE9NV2luZG93QmFzZTo6amF2YVNjcmlwdAogICAgIHJldHVybiBmcmFtZS0+
c2V0dGluZ3MoKS5qYXZhU2NyaXB0UnVudGltZUZsYWdzKCk7CiB9CiAKLXZvaWQgSlNET01XaW5k
b3dCYXNlOjpxdWV1ZVRhc2tUb0V2ZW50TG9vcChKU0dsb2JhbE9iamVjdCYgb2JqZWN0LCBSZWY8
SlNDOjpNaWNyb3Rhc2s+JiYgdGFzaykKK3ZvaWQgSlNET01XaW5kb3dCYXNlOjpxdWV1ZU1pY3Jv
dGFza1RvRXZlbnRMb29wKEpTR2xvYmFsT2JqZWN0JiBvYmplY3QsIFJlZjxKU0M6Ok1pY3JvdGFz
az4mJiB0YXNrKQogewogICAgIEpTRE9NV2luZG93QmFzZSYgdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PEpTRE9NV2luZG93QmFzZSY+KG9iamVjdCk7CiAKICAgICBhdXRvIGNhbGxiYWNrID0gSlNN
aWNyb3Rhc2tDYWxsYmFjazo6Y3JlYXRlKHRoaXNPYmplY3QsIFdURk1vdmUodGFzaykpOwotICAg
IGF1dG8gbWljcm90YXNrID0gbWFrZVVuaXF1ZTxBY3RpdmVET01DYWxsYmFja01pY3JvdGFzaz4o
TWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLCAqdGhpc09iamVjdC5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUg
eworICAgIGF1dG8mIGV2ZW50TG9vcCA9IHRoaXNPYmplY3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5ldmVudExvb3AoKTsKKyAgICBhdXRvIG1pY3JvdGFzayA9IG1ha2VVbmlxdWU8QWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2s+KGV2ZW50TG9vcC5taWNyb3Rhc2tRdWV1ZSgpLCAqdGhpc09i
amVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXSgpIG11dGFibGUgewogICAgICAgICBjYWxsYmFjay0+Y2FsbCgpOwogICAgIH0pOwotCi0g
ICAgTWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLmFwcGVuZChXVEZNb3ZlKG1pY3Jv
dGFzaykpOworICAgIGV2ZW50TG9vcC5xdWV1ZU1pY3JvdGFza0NhbGxiYWNrKFdURk1vdmUobWlj
cm90YXNrKSk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjp3aWxsUmVtb3ZlRnJvbVdpbmRv
d1Byb3h5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oCShyZXZpc2lvbiAyNTI2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkSW50ZXJydXB0U2NyaXB0KGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVU
aW1lb3V0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNDOjpSdW50
aW1lRmxhZ3MgamF2YVNjcmlwdFJ1bnRpbWVGbGFncyhjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgc3RhdGljIHZvaWQgcXVldWVUYXNrVG9FdmVudExvb3AoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIFJlZjxKU0M6Ok1pY3JvdGFzaz4mJik7CisgICAgc3RhdGljIHZvaWQgcXVldWVNaWNy
b3Rhc2tUb0V2ZW50TG9vcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVmPEpTQzo6TWljcm90YXNr
PiYmKTsKIAogICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5jcHAJKHJl
dmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTRXhlY1N0YXRlLmgiCiAKKyNpbmNsdWRlICJFdmVudExvb3AuaCIKICNp
bmNsdWRlICJNaWNyb3Rhc2tzLmgiCiAjaW5jbHVkZSAiUmVqZWN0ZWRQcm9taXNlVHJhY2tlci5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTM5LDcgKzQwLDcgQEAg
dm9pZCBKU0V4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KAogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBNaWNyb3Rhc2tRdWV1ZTo6Y29udGV4dFF1ZXVlKCpjb250ZXh0KS5wZXJmb3JtTWlj
cm90YXNrQ2hlY2twb2ludCgpOworICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnBlcmZvcm1NaWNy
b3Rhc2tDaGVja3BvaW50KCk7CiAgICAgY29udGV4dC0+ZW5zdXJlUmVqZWN0ZWRQcm9taXNlVHJh
Y2tlcigpLnByb2Nlc3NRdWV1ZVNvb24oKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAy
NTI2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNvbnN0IEdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlIEpTUmVtb3RlRE8KICAgICBudWxscHRyLCAvLyBzaGVsbFN1cHBvcnRzUmlj
aFNvdXJjZUluZm8KICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRTY3JpcHQKICAgICAm
amF2YVNjcmlwdFJ1bnRpbWVGbGFncywKLSAgICBudWxscHRyLCAvLyBxdWV1ZVRhc2tUb0V2ZW50
TG9vcAorICAgIG51bGxwdHIsIC8vIHF1ZXVlTWljcm90YXNrVG9FdmVudExvb3AKICAgICBudWxs
cHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0CiAgICAgbnVsbHB0ciwg
Ly8gbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlCiAgICAgbnVsbHB0ciwgLy8gbW9kdWxlTG9hZGVy
UmVzb2x2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFja01pY3Jv
dGFzay5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV2ZW50TG9v
cC5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0VGFzay5oIgogI2luY2x1ZGUgIkpTRE9N
R3VhcmRlZE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
aCIKQEAgLTU3LDcgKzU4LDcgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3Jr
ZXJHbAogICAgICZzdXBwb3J0c1JpY2hTb3VyY2VJbmZvLAogICAgICZzaG91bGRJbnRlcnJ1cHRT
Y3JpcHQsCiAgICAgJmphdmFTY3JpcHRSdW50aW1lRmxhZ3MsCi0gICAgJnF1ZXVlVGFza1RvRXZl
bnRMb29wLAorICAgICZxdWV1ZU1pY3JvdGFza1RvRXZlbnRMb29wLAogICAgICZzaG91bGRJbnRl
cnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0LAogICAgIG51bGxwdHIsIC8vIG1vZHVsZUxvYWRlcklt
cG9ydE1vZHVsZQogICAgIG51bGxwdHIsIC8vIG1vZHVsZUxvYWRlclJlc29sdmUKQEAgLTEzMCwx
NyArMTMxLDE2IEBAIFJ1bnRpbWVGbGFncyBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6amEKICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bV93cmFwcGVkLT50aHJlYWQoKS5ydW50aW1lRmxhZ3MoKTsK
IH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6cXVldWVUYXNrVG9FdmVudExvb3Ao
SlNHbG9iYWxPYmplY3QmIG9iamVjdCwgUmVmPEpTQzo6TWljcm90YXNrPiYmIHRhc2spCit2b2lk
IEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpxdWV1ZU1pY3JvdGFza1RvRXZlbnRMb29wKEpTR2xv
YmFsT2JqZWN0JiBvYmplY3QsIFJlZjxKU0M6Ok1pY3JvdGFzaz4mJiB0YXNrKQogewogICAgIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlJiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UmPihvYmplY3QpOwogCiAgICAgYXV0byBjYWxsYmFjayA9IEpTTWljcm90
YXNrQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzT2JqZWN0LCBXVEZNb3ZlKHRhc2spKTsKICAgICBhdXRv
JiBjb250ZXh0ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBtaWNyb3Rhc2sgPSBt
YWtlVW5pcXVlPEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrPihjb250ZXh0Lm1pY3JvdGFza1F1
ZXVlKCksIGNvbnRleHQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUg
eworICAgIGF1dG8gbWljcm90YXNrID0gbWFrZVVuaXF1ZTxBY3RpdmVET01DYWxsYmFja01pY3Jv
dGFzaz4oY29udGV4dC5ldmVudExvb3AoKS5taWNyb3Rhc2tRdWV1ZSgpLCBjb250ZXh0LCBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2st
PmNhbGwoKTsKICAgICB9KTsKLQotICAgIGNvbnRleHQubWljcm90YXNrUXVldWUoKS5hcHBlbmQo
V1RGTW92ZShtaWNyb3Rhc2spKTsKKyAgICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlTWljcm90
YXNrQ2FsbGJhY2soV1RGTW92ZShtaWNyb3Rhc2spKTsKIH0KIAogSlNWYWx1ZSB0b0pTKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCosIFdvcmtl
ckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24g
MjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgc2hvdWxkSW50ZXJydXB0U2NyaXB0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0KGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNDOjpSdW50aW1lRmxhZ3Mg
amF2YVNjcmlwdFJ1bnRpbWVGbGFncyhjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
c3RhdGljIHZvaWQgcXVldWVUYXNrVG9FdmVudExvb3AoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJl
ZjxKU0M6Ok1pY3JvdGFzaz4mJik7CisgICAgc3RhdGljIHZvaWQgcXVldWVNaWNyb3Rhc2tUb0V2
ZW50TG9vcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVmPEpTQzo6TWljcm90YXNrPiYmKTsKIAog
ICAgIHZvaWQgY2xlYXJET01HdWFyZGVkT2JqZWN0cygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJ
KHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrbGV0RwogICAgICZzdXBwb3J0c1JpY2hT
b3VyY2VJbmZvLAogICAgICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsCiAgICAgJmphdmFTY3JpcHRS
dW50aW1lRmxhZ3MsCi0gICAgbnVsbHB0ciwgLy8gcXVldWVUYXNrVG9FdmVudExvb3AKKyAgICBu
dWxscHRyLCAvLyBxdWV1ZU1pY3JvdGFza1RvRXZlbnRMb29wCiAgICAgJnNob3VsZEludGVycnVw
dFNjcmlwdEJlZm9yZVRpbWVvdXQsCiAgICAgbnVsbHB0ciwgLy8gbW9kdWxlTG9hZGVySW1wb3J0
TW9kdWxlCiAgICAgbnVsbHB0ciwgLy8gbW9kdWxlTG9hZGVyUmVzb2x2ZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIHNob3VsZEludGVycnVwdFNjcmlwdEJl
Zm9yZVRpbWVvdXQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBKU0M6
OlJ1bnRpbWVGbGFncyBqYXZhU2NyaXB0UnVudGltZUZsYWdzKGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tUb0V2ZW50TG9vcChKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgUmVmPEpTQzo6TWljcm90YXNrPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBxdWV1
ZU1pY3JvdGFza1RvRXZlbnRMb29wKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZWY8SlNDOjpNaWNy
b3Rhc2s+JiYpOwogCiAgICAgdm9pZCBjbGVhckRPTUd1YXJkZWRPYmplY3RzKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNw
cAkocmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtMjkzLDcgKzI5NCw3IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6
OmVucXVldWUKIHsKICAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlvblF1ZXVlKCkpOwogICAgIGlm
ICghQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykg
ewotICAgICAgICBhdXRvJiBxdWV1ZSA9IGVuc3VyZUJhY2t1cFF1ZXVlKCk7CisgICAgICAgIGF1
dG8mIHF1ZXVlID0gZW5zdXJlQmFja3VwUXVldWUoZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICAg
ICAgcXVldWUuYWRkKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzE4LDIz
ICszMTksMTYgQEAgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6cHJvY2VzcwogICAg
IG1fcXVldWUgPSBudWxscHRyOwogfQogCi1jbGFzcyBCYWNrdXBFbGVtZW50UXVldWVNaWNyb3Rh
c2sgZmluYWwgOiBwdWJsaWMgTWljcm90YXNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXByaXZhdGU6Ci0gICAgUmVzdWx0IHJ1bigpIGZpbmFsCi0gICAgewotICAgICAgICBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6cHJvY2Vzc0JhY2t1cFF1ZXVlKCk7Ci0gICAgICAgIHJl
dHVybiBSZXN1bHQ6OkRvbmU7Ci0gICAgfQotfTsKLQogc3RhdGljIGJvb2wgc19wcm9jZXNzaW5n
QmFja3VwRWxlbWVudFF1ZXVlID0gZmFsc2U7CiAKLUN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
OjpFbGVtZW50UXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1cmVCYWNrdXBR
dWV1ZSgpCisvLyBGSVhNRTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KK0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjplbnN1cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAg
aWYgKCFzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKICAgICAgICAgc19wcm9jZXNz
aW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgTWljcm90YXNrUXVldWU6Om1h
aW5UaHJlYWRRdWV1ZSgpLmFwcGVuZChtYWtlVW5pcXVlPEJhY2t1cEVsZW1lbnRRdWV1ZU1pY3Jv
dGFzaz4oKSk7CisgICAgICAgIGRvY3VtZW50LmV2ZW50TG9vcCgpLnF1ZXVlTWljcm90YXNrKFtd
IHsKKyAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3Vw
UXVldWUoKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJldHVybiBiYWNrdXBFbGVtZW50UXVl
dWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oCShyZXZpc2lvbiAyNTI2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRPbkFw
cHJvcHJpYXRlRWxlbWVudFF1ZXVlKEVsZW1lbnQmKTsKLSAgICBzdGF0aWMgRWxlbWVudFF1ZXVl
JiBlbnN1cmVCYWNrdXBRdWV1ZSgpOworICAgIHN0YXRpYyBFbGVtZW50UXVldWUmIGVuc3VyZUJh
Y2t1cFF1ZXVlKERvY3VtZW50Jik7CiAgICAgc3RhdGljIEVsZW1lbnRRdWV1ZSYgYmFja3VwRWxl
bWVudFF1ZXVlKCk7CiAKICAgICBSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiBtX2ludGVy
ZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc5Myw3
ICs1NzkzLDcgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKIAogICAgIGlmICgh
cGFnZSgpIHx8ICFwYWdlKCktPmlzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQoKSkgewogICAgICAg
ICAvLyBGSVhNRTogU2NoZWR1bGUgYSB0YXNrIHRvIGZpcmUgRE9NQ29udGVudExvYWRlZCBldmVu
dCBpbnN0ZWFkLiBTZWUgd2Via2l0Lm9yZy9iLzgyOTMxCi0gICAgICAgIE1pY3JvdGFza1F1ZXVl
OjptYWluVGhyZWFkUXVldWUoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOworICAgICAg
ICBldmVudExvb3AoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOwogICAgIH0KIAogICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ29udGVudExvYWRl
ZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmNwcAko
cmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3RvcmFnZUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBAQAogI2luY2x1ZGUgIkNo
cm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNsdWRlICJNaWNyb3Rhc2tzLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKQEAgLTE4MiwxMCArMTgyLDEwIEBAIHZvaWQgRG9jdW1lbnRTdG9yYWdl
QWNjZXNzOjpyZXF1ZXN0U3RvcmEKICAgICAgICAgYm9vbCBzaG91bGRQcmVzZXJ2ZVVzZXJHZXN0
dXJlID0gd2FzR3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzIHx8IHByb21w
dFdhc1Nob3duID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CiAKICAgICAgICAg
aWYgKHNob3VsZFByZXNlcnZlVXNlckdlc3R1cmUpIHsKLSAgICAgICAgICAgIE1pY3JvdGFza1F1
ZXVlOjptYWluVGhyZWFkUXVldWUoKS5hcHBlbmQobWFrZVVuaXF1ZTxWb2lkTWljcm90YXNrPihb
dGhpcywgd2Vha1RoaXNdICgpIHsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuZXZlbnRMb29wKCku
cXVldWVNaWNyb3Rhc2soW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICBlbmFibGVU
ZW1wb3JhcnlUaW1lVXNlckdlc3R1cmUoKTsKLSAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHdhc0dyYW50ZWQgPT0gU3RvcmFnZUFjY2Vz
c1dhc0dyYW50ZWQ6OlllcykKQEAgLTE5NywxMCArMTk3LDEwIEBAIHZvaWQgRG9jdW1lbnRTdG9y
YWdlQWNjZXNzOjpyZXF1ZXN0U3RvcmEKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaG91bGRQ
cmVzZXJ2ZVVzZXJHZXN0dXJlKSB7Ci0gICAgICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRo
cmVhZFF1ZXVlKCkuYXBwZW5kKG1ha2VVbmlxdWU8Vm9pZE1pY3JvdGFzaz4oW3RoaXMsIHdlYWtU
aGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldICgpIHsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuZXZl
bnRMb29wKCkucXVldWVNaWNyb3Rhc2soW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSB7CiAgICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAg
ICBjb25zdW1lVGVtcG9yYXJ5VGltZVVzZXJHZXN0dXJlKCk7Ci0gICAgICAgICAgICB9KSk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAKKyNpbmNsdWRlICJBY3RpdmVET01DYWxs
YmFja01pY3JvdGFzay5oIgorI2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIEV2ZW50TG9vcDo6cXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVu
dExvb3BUYXNrPiYmIHRhc2spCkBAIC0zNiw2ICszOSwxNiBAQCB2b2lkIEV2ZW50TG9vcDo6cXVl
dWVUYXNrKHN0ZDo6dW5pcXVlX3B0CiAgICAgbV90YXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7
CiB9CiAKK3ZvaWQgRXZlbnRMb29wOjpxdWV1ZU1pY3JvdGFzayhzdGQ6OnVuaXF1ZV9wdHI8TWlj
cm90YXNrPiYmIG1pY3JvdGFzaykKK3sKKyAgICBtaWNyb3Rhc2tRdWV1ZSgpLmFwcGVuZChXVEZN
b3ZlKG1pY3JvdGFzaykpOworfQorCit2b2lkIEV2ZW50TG9vcDo6cGVyZm9ybU1pY3JvdGFza0No
ZWNrcG9pbnQoKQoreworICAgIG1pY3JvdGFza1F1ZXVlKCkucGVyZm9ybU1pY3JvdGFza0NoZWNr
cG9pbnQoKTsKK30KKwogdm9pZCBFdmVudExvb3A6OnJlc3VtZUdyb3VwKEV2ZW50TG9vcFRhc2tH
cm91cCYgZ3JvdXApCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKQEAgLTEyMCw0
ICsxMzMsNDEgQEAgdm9pZCBFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFzayhUYXNrUwogICAg
IHJldHVybiBxdWV1ZVRhc2sobWFrZVVuaXF1ZTxFdmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFz
az4oc291cmNlLCAqdGhpcywgV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAordm9pZCBFdmVudExv
b3BUYXNrR3JvdXA6OnF1ZXVlTWljcm90YXNrQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEFjdGl2
ZURPTUNhbGxiYWNrTWljcm90YXNrPiYmIG1pY3JvdGFzaykKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6U3RvcHBlZCB8fCAhbV9ldmVudExvb3ApCisgICAgICAgIHJldHVybjsKKyAgICBt
X2V2ZW50TG9vcC0+cXVldWVNaWNyb3Rhc2soV1RGTW92ZShtaWNyb3Rhc2spKTsKK30KKworY2xh
c3MgVm9pZE1pY3JvdGFzayBmaW5hbCA6IHB1YmxpYyBNaWNyb3Rhc2sgeworcHVibGljOgorICAg
IGV4cGxpY2l0IFZvaWRNaWNyb3Rhc2soRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQorICAg
ICAgICA6IG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICBSZXN1bHQgcnVuKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24o
KTsKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6RG9uZTsKKyAgICB9CisKKyAgICBGdW5jdGlvbjx2
b2lkKCk+IG1fZnVuY3Rpb247Cit9OworCit2b2lkIEV2ZW50TG9vcFRhc2tHcm91cDo6cXVldWVN
aWNyb3Rhc2soRXZlbnRMb29wOjpUYXNrRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZCB8fCAhbV9ldmVudExvb3ApCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2V2ZW50TG9vcC0+cXVldWVNaWNyb3Rhc2sobWFrZVVuaXF1ZTxWb2lkTWljcm90
YXNrPihXVEZNb3ZlKGZ1bmN0aW9uKSkpOworfQorCit2b2lkIEV2ZW50TG9vcFRhc2tHcm91cDo6
cGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKQoreworICAgIGlmIChtX2V2ZW50TG9vcCkKKyAg
ICAgICAgbV9ldmVudExvb3AtPnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExvb3Au
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMb29wLmgJKHJldmlzaW9u
IDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExvb3AuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBY3Rp
dmVET01DYWxsYmFja01pY3JvdGFzazsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNz
IEV2ZW50VGFyZ2V0OworY2xhc3MgTWljcm90YXNrOworY2xhc3MgTWljcm90YXNrUXVldWU7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBFdmVudExvb3BUYXNrIHsKQEAg
LTY2LDYgKzY5LDEzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQgKCk+IFRh
c2tGdW5jdGlvbjsKICAgICB2b2lkIHF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29w
VGFzaz4mJik7CiAKKyAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFn
ZS93ZWJhcHBhcGlzLmh0bWwjcXVldWUtYS1taWNyb3Rhc2sKKyAgICB2b2lkIHF1ZXVlTWljcm90
YXNrKHN0ZDo6dW5pcXVlX3B0cjxNaWNyb3Rhc2s+JiYpOworCisgICAgLy8gaHR0cHM6Ly9odG1s
LnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3BlcmZvcm0tYS1taWNy
b3Rhc2stY2hlY2twb2ludAorICAgIHZvaWQgcGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKTsK
KyAgICB2aXJ0dWFsIE1pY3JvdGFza1F1ZXVlJiBtaWNyb3Rhc2tRdWV1ZSgpID0gMDsKKwogICAg
IHZvaWQgcmVzdW1lR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJik7CiAgICAgdm9pZCBzdG9wR3Jv
dXAoRXZlbnRMb29wVGFza0dyb3VwJik7CiAKQEAgLTEzMCw2ICsxNDAsMTYgQEAgcHVibGljOgog
ICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYmKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBFdmVudExvb3A6OlRh
c2tGdW5jdGlvbiYmKTsKIAorICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNxdWV1ZS1hLW1pY3JvdGFzaworICAgIHZvaWQgcXVldWVN
aWNyb3Rhc2soRXZlbnRMb29wOjpUYXNrRnVuY3Rpb24mJik7CisgICAgTWljcm90YXNrUXVldWUm
IG1pY3JvdGFza1F1ZXVlKCkgeyByZXR1cm4gbV9ldmVudExvb3AtPm1pY3JvdGFza1F1ZXVlKCk7
IH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGFuZCBBY3RpdmVET01DYWxsYmFja01p
Y3JvdGFzayBzaG91bGQgZ28gYXdheS4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHF1ZXVlTWlj
cm90YXNrQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNr
PiYmKTsKKworICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCNwZXJmb3JtLWEtbWljcm90YXNrLWNoZWNrcG9pbnQKKyAgICB2b2lkIHBl
cmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7CisKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBT
dGF0ZSA6IHVpbnQ4X3QgeyBSdW5uaW5nLCBTdXNwZW5kZWQsIFN0b3BwZWQgfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01pY3JvdGFza3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NaWNyb3Rhc2tzLmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL01pY3JvdGFza3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNCArNDMsNiBA
QCBNaWNyb3Rhc2tRdWV1ZTo6TWljcm90YXNrUXVldWUoSlNDOjpWTSYgCiAKIE1pY3JvdGFza1F1
ZXVlOjp+TWljcm90YXNrUXVldWUoKSA9IGRlZmF1bHQ7CiAKLU1pY3JvdGFza1F1ZXVlJiBNaWNy
b3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNaWNyb3Rhc2tRdWV1ZT4gcXVldWUoY29t
bW9uVk0oKSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1NaWNyb3Rhc2tRdWV1ZSYgTWljcm90
YXNrUXVldWU6OmNvbnRleHRRdWV1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQot
ewotICAgIC8vIFdoaWxlIG1haW4gdGhyZWFkIGhhcyBtYW55IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRzLCBXb3JrZXJHbG9iYWxTY29wZSBhbmQgd29ya2VyIHRocmVhZCBoYXZlCi0gICAgLy8gb25l
IG9uIG9uZSBjb3JyZXNwb25kZW5jZS4gVGhlIGxpZmV0aW1lIG9mIE1pY3JvdGFza1F1ZXVlIGlz
IGFsaWduZWQgdG8gdGhpcyBzZW1hbnRpY3MuCi0gICAgLy8gV2hpbGUgbWFpbiB0aHJlYWQgTWlj
cm90YXNrUXVldWUgaXMgcGVyc2lzdGVudGx5IGhlbGQsIHdvcmtlcidzIE1pY3JvdGFza1F1ZXVl
IGlzIGhlbGQgYnkKLSAgICAvLyBXb3JrZXJHbG9iYWxTY29wZS4KLSAgICBpZiAoaXNNYWluVGhy
ZWFkKCkpCi0gICAgICAgIHJldHVybiBtYWluVGhyZWFkUXVldWUoKTsKLSAgICByZXR1cm4gZG93
bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpLm1pY3JvdGFza1F1ZXVlKCk7Ci19Ci0K
IHZvaWQgTWljcm90YXNrUXVldWU6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8TWljcm90YXNrPiYm
IHRhc2spCiB7CiAgICAgbV9taWNyb3Rhc2tRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm90YXNrcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NaWNyb3Rhc2tzLmgJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NaWNyb3Rhc2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDMxICs1MiwxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZW1vdmVTZWxmRnJvbVF1ZXVlKE1pY3JvdGFza1F1ZXVl
Jik7CiB9OwogCi1jbGFzcyBWb2lkTWljcm90YXNrIGZpbmFsIDogcHVibGljIE1pY3JvdGFzayB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgVm9pZE1pY3JvdGFzayhGdW5jdGlvbjx2b2lkKCk+JiYg
ZnVuY3Rpb24pCi0gICAgICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKLSAgICB7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlc3VsdCBydW4oKSBmaW5hbAotICAgIHsKLSAgICAg
ICAgbV9mdW5jdGlvbigpOwotICAgICAgICByZXR1cm4gUmVzdWx0OjpEb25lOwotICAgIH0KLQot
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KIGNsYXNzIE1pY3JvdGFza1F1
ZXVlIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgTmV2
ZXJEZXN0cm95ZWQ8TWljcm90YXNrUXVldWU+OwogICAgIGZyaWVuZCBjbGFzcyBNaWNyb3Rhc2s7
CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE1pY3JvdGFza1F1ZXVlJiBtYWlu
VGhyZWFkUXVldWUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTWljcm90YXNrUXVldWUm
IGNvbnRleHRRdWV1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCBNaWNyb3Rhc2tRdWV1ZShKU0M6OlZNJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgfk1pY3Jv
dGFza1F1ZXVlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5j
cHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2Vy
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIk11dGF0
aW9uT2JzZXJ2ZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRM
b29wLmgiCiAjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIKICNpbmNsdWRlICJIVE1MU2xvdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTE1OCwz
NSArMTU5LDMwIEBAIHN0YXRpYyBWZWN0b3I8R0NSZWFjaGFibGVSZWY8SFRNTFNsb3RFbGUKICAg
ICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIGJvb2wgbXV0YXRpb25PYnNlcnZlckNvbXBvdW5k
TWljcm90YXNrUXVldWVkRmxhZzsKKy8vIFRoaXMgc3RhdGUgbXVzdCBiZSBwZXIgZXZlbnQgbG9v
cC4KK3N0YXRpYyBib29sIG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZs
YWcgPSBmYWxzZTsKIAotY2xhc3MgTXV0YXRpb25PYnNlcnZlck1pY3JvdGFzayBmaW5hbCA6IHB1
YmxpYyBNaWNyb3Rhc2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHJpdmF0ZToK
LSAgICBSZXN1bHQgcnVuKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXI6
Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCk7Ci0gICAgICAgIHJldHVybiBSZXN1bHQ6OkRvbmU7
Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRN
aWNyb3Rhc2soKQordm9pZCBNdXRhdGlvbk9ic2VydmVyOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJD
b21wb3VuZE1pY3JvdGFzayhEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKG11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcpCiAgICAgICAgIHJldHVybjsKICAg
ICBtdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gdHJ1ZTsKLSAg
ICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkuYXBwZW5kKG1ha2VVbmlxdWU8TXV0
YXRpb25PYnNlcnZlck1pY3JvdGFzaz4oKSk7CisgICAgZG9jdW1lbnQuZXZlbnRMb29wKCkucXVl
dWVNaWNyb3Rhc2soW10geworICAgICAgICBub3RpZnlNdXRhdGlvbk9ic2VydmVycygpOworICAg
IH0pOwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlvblJlY29yZChS
ZWY8TXV0YXRpb25SZWNvcmQ+JiYgbXV0YXRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBBU1NFUlQobXV0YXRpb24tPnRhcmdldCgpKTsKKyAgICBhdXRvIGRvY3VtZW50
ID0gbWFrZVJlZihtdXRhdGlvbi0+dGFyZ2V0KCktPmRvY3VtZW50KCkpOworCiAgICAgbV9wZW5k
aW5nVGFyZ2V0cy5hZGQoKm11dGF0aW9uLT50YXJnZXQoKSk7CiAgICAgbV9yZWNvcmRzLmFwcGVu
ZChXVEZNb3ZlKG11dGF0aW9uKSk7CiAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQo
dGhpcyk7CiAKLSAgICBxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwor
ICAgIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKGRvY3VtZW50LmdldCgp
KTsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZUV2ZW50KEhU
TUxTbG90RWxlbWVudCYgc2xvdCkKQEAgLTE5NSwxNSArMTkxLDE1IEBAIHZvaWQgTXV0YXRpb25P
YnNlcnZlcjo6ZW5xdWV1ZVNsb3RDaGFuZ2UKICAgICBBU1NFUlQoc2lnbmFsU2xvdExpc3QoKS5m
aW5kTWF0Y2hpbmcoWyZzbG90XShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnkucHRyKCkgPT0g
JnNsb3Q7IH0pID09IG5vdEZvdW5kKTsKICAgICBzaWduYWxTbG90TGlzdCgpLmFwcGVuZChzbG90
KTsKIAotICAgIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CisgICAg
cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soc2xvdC5kb2N1bWVudCgpKTsK
IH0KIAotdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpzZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24o
KQordm9pZCBNdXRhdGlvbk9ic2VydmVyOjpzZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24oRG9j
dW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYWN0
aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQodGhpcyk7CiAKLSAgICBxdWV1ZU11dGF0aW9uT2Jz
ZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOworICAgIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBv
dW5kTWljcm90YXNrKGRvY3VtZW50KTsKIH0KIAogSGFzaFNldDxOb2RlKj4gTXV0YXRpb25PYnNl
cnZlcjo6b2JzZXJ2ZWROb2RlcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bk9ic2VydmVyLmgJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxTbG90RWxlbWVudDsK
IGNsYXNzIE11dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOwpAQCAtNTEsNyArNTIsNiBAQCB1c2luZyBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cyA9IHVuCiAKIGNsYXNzIE11dGF0aW9uT2JzZXJ2ZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxNdXRhdGlvbk9ic2VydmVyPiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNdXRhdGlv
bk9ic2VydmVyKTsKLSAgICBmcmllbmQgY2xhc3MgTXV0YXRpb25PYnNlcnZlck1pY3JvdGFzazsK
IHB1YmxpYzoKICAgICBlbnVtIE11dGF0aW9uVHlwZSB7CiAgICAgICAgIENoaWxkTGlzdCA9IDEg
PDwgMCwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgb2JzZXJ2YXRpb25TdGFy
dGVkKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mKTsKICAgICB2b2lkIG9ic2VydmF0aW9u
RW5kZWQoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiYpOwogICAgIHZvaWQgZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKFJlZjxNdXRhdGlvblJlY29yZD4mJik7Ci0gICAgdm9pZCBzZXRIYXNUcmFu
c2llbnRSZWdpc3RyYXRpb24oKTsKKyAgICB2b2lkIHNldEhhc1RyYW5zaWVudFJlZ2lzdHJhdGlv
bihEb2N1bWVudCYpOwogICAgIGJvb2wgY2FuRGVsaXZlcigpOwogCiAgICAgSGFzaFNldDxOb2Rl
Kj4gb2JzZXJ2ZWROb2RlcygpIGNvbnN0OwpAQCAtMTEwLDYgKzExMCw3IEBAIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgTXV0YXRpb25PYnNlcnZlcihSZWY8TXV0YXRpb25DYWxsYmFjaz4mJik7CiAg
ICAgdm9pZCBkZWxpdmVyKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBxdWV1ZU11dGF0aW9uT2JzZXJ2
ZXJDb21wb3VuZE1pY3JvdGFzayhEb2N1bWVudCYpOwogICAgIHN0YXRpYyB2b2lkIG5vdGlmeU11
dGF0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVPcHRpb25zKE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbjo6b2JzZXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbm9kZS5yZWdpc3RlclRyYW5zaWVu
dE11dGF0aW9uT2JzZXJ2ZXIoKnRoaXMpOwotICAgIG1fb2JzZXJ2ZXItPnNldEhhc1RyYW5zaWVu
dFJlZ2lzdHJhdGlvbigpOworICAgIG1fb2JzZXJ2ZXItPnNldEhhc1RyYW5zaWVudFJlZ2lzdHJh
dGlvbihub2RlLmRvY3VtZW50KCkpOwogCiAgICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlv
bk5vZGVzKSB7CiAgICAgICAgIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMgPSBtYWtlVW5p
cXVlPEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+PigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2luZG93RXZlbnRMb29wLmgiCiAK
KyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
TWljcm90YXNrcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcxLDQgKzczLDExIEBA
IGJvb2wgV2luZG93RXZlbnRMb29wOjppc0NvbnRleHRUaHJlYWQoKSAKICAgICByZXR1cm4gaXNN
YWluVGhyZWFkKCk7CiB9CiAKK01pY3JvdGFza1F1ZXVlJiBXaW5kb3dFdmVudExvb3A6Om1pY3Jv
dGFza1F1ZXVlKCkKK3sKKyAgICAvLyBNaWNyb3Rhc2tRdWV1ZSBtdXN0IGJlIG9uZSBwZXIgZXZl
bnQgbG9vcC4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWljcm90YXNrUXVldWU+IHF1ZXVl
KGNvbW1vblZNKCkpOworICAgIHJldHVybiBxdWV1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAkocmV2aXNpb24gMjUy
Njc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwxMyArMzksMTQgQEAgY2xhc3MgV2luZG93RXZlbnRMb29wIGZpbmFsIDogcHVi
bGljIEV2ZQogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2luZG93RXZlbnRMb29wPiBlbnN1cmVG
b3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwogCi0gICAgfldp
bmRvd0V2ZW50TG9vcCgpOworICAgIHZpcnR1YWwgfldpbmRvd0V2ZW50TG9vcCgpOwogCiBwcml2
YXRlOgogICAgIFdpbmRvd0V2ZW50TG9vcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwogCiAg
ICAgdm9pZCBzY2hlZHVsZVRvUnVuKCkgZmluYWw7CiAgICAgYm9vbCBpc0NvbnRleHRUaHJlYWQo
KSBjb25zdCBmaW5hbDsKKyAgICBNaWNyb3Rhc2tRdWV1ZSYgbWljcm90YXNrUXVldWUoKSBmaW5h
bDsKIAogICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZG9tYWluOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNp
b24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VyU2NoZWR1bGVyLmgiCkBAIC00MCw3ICs0MSw2IEBACiAjaW5jbHVkZSAiSFRNTFVua25v
d25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmgiCiAjaW5j
bHVkZSAiTGlua0xvYWRlci5oIgotI2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKICNpbmNsdWRlICJO
YXZpZ2F0aW9uU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgogI2luY2x1
ZGUgIlRocm93T25EeW5hbWljTWFya3VwSW5zZXJ0aW9uQ291bnRJbmNyZW1lbnRlci5oIgpAQCAt
MjE2LDcgKzIxNiw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGEK
ICAgICAgICAgICAgIC8vIFByZXZlbnQgZG9jdW1lbnQub3Blbi93cml0ZSBkdXJpbmcgcmVhY3Rp
b25zIGJ5IGFsbG9jYXRpbmcgdGhlIGluY3JlbWVudGVyIGJlZm9yZSB0aGUgcmVhY3Rpb25zIHN0
YWNrLgogICAgICAgICAgICAgVGhyb3dPbkR5bmFtaWNNYXJrdXBJbnNlcnRpb25Db3VudEluY3Jl
bWVudGVyIGluY3JlbWVudGVyKCpkb2N1bWVudCgpKTsKIAotICAgICAgICAgICAgTWljcm90YXNr
UXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Cisg
ICAgICAgICAgICBkb2N1bWVudCgpLT5ldmVudExvb3AoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2tw
b2ludCgpOwogCiAgICAgICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayByZWFjdGlv
blN0YWNrKGRvY3VtZW50KCktPmV4ZWNTdGF0ZSgpKTsKICAgICAgICAgICAgIGF1dG8mIGVsZW1l
bnRJbnRlcmZhY2UgPSBjb25zdHJ1Y3Rpb25EYXRhLT5lbGVtZW50SW50ZXJmYWNlLmdldCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxT
Y3JpcHRSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExvb3Au
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRTdHJlYW0uaCIKQEAgLTM2LDcgKzM3LDYgQEAKICNpbmNsdWRlICJIVE1MU2Ny
aXB0UnVubmVySG9zdC5oIgogI2luY2x1ZGUgIklnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudElu
Y3JlbWVudGVyLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2xhc3NpY1NjcmlwdC5oIgotI2luY2x1ZGUg
Ik1pY3JvdGFza3MuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCkBA
IC0xMDYsOCArMTA2LDggQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1Nj
cgogICAgIGlmIChwZW5kaW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQogICAgICAgICBzdG9w
V2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogCi0gICAgaWYgKCFpc0V4ZWN1dGluZ1Nj
cmlwdCgpKQotICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkucGVyZm9y
bU1pY3JvdGFza0NoZWNrcG9pbnQoKTsKKyAgICBpZiAoIWlzRXhlY3V0aW5nU2NyaXB0KCkgJiYg
bV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucGVyZm9ybU1pY3Jv
dGFza0NoZWNrcG9pbnQoKTsKIAogICAgIHsKICAgICAgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50
ZXIgbmVzdGluZ0xldmVsSW5jcmVtZW50ZXIobV9zY3JpcHROZXN0aW5nTGV2ZWwpOwpAQCAtMjQx
LDggKzI0MSw4IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KFNjcmlwdEUKICAg
ICAvLyBldmVyeSBzY3JpcHQgZWxlbWVudCwgZXZlbiBpZiBpdCdzIG5vdCByZWFkeSB0byBleGVj
dXRlIHlldC4gVGhlcmUncwogICAgIC8vIHVuZm9ydHVuYXRlbHkgbm8gb2J2aW91cyB3YXkgdG8g
dGVsbCBpZiBwcmVwYXJlU2NyaXB0IGlzIGdvaW5nIHRvCiAgICAgLy8gZXhlY3V0ZSB0aGUgc2Ny
aXB0IGJlZm9yZSBjYWxsaW5nIGl0LgotICAgIGlmICghaXNFeGVjdXRpbmdTY3JpcHQoKSkKLSAg
ICAgICAgTWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLnBlcmZvcm1NaWNyb3Rhc2tD
aGVja3BvaW50KCk7CisgICAgaWYgKCFpc0V4ZWN1dGluZ1NjcmlwdCgpICYmIG1fZG9jdW1lbnQp
CisgICAgICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3Bv
aW50KCk7CiAKICAgICBJbnNlcnRpb25Qb2ludFJlY29yZCBpbnNlcnRpb25Qb2ludFJlY29yZCht
X2hvc3QuaW5wdXRTdHJlYW0oKSk7CiAgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgbmVzdGlu
Z0xldmVsSW5jcmVtZW50ZXIobV9zY3JpcHROZXN0aW5nTGV2ZWwpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1
ZGUgIkltYWdlQml0bWFwLmgiCkBAIC00NTMsOCArNDU0LDggQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6cmVjb3JkQ2FudmFzQQogICAgIC8vIGNvdmVyZWQgYnkgdGhlIGluaXRpYWwgbWlj
cm90YXNrIHVudGlsIHRoZSBuZXh0IGZyYW1lLgogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzLT5j
dXJyZW50RnJhbWVIYXNEYXRhKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewot
ICAgICAgICAgICAgYXV0byYgcXVldWUgPSBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVl
KCk7Ci0gICAgICAgICAgICBxdWV1ZS5hcHBlbmQobWFrZVVuaXF1ZTxBY3RpdmVET01DYWxsYmFj
a01pY3JvdGFzaz4ocXVldWUsICpzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBbJiwgcHJvdGVjdGVk
SW5zcGVjdG9yQ2FudmFzID0gaW5zcGVjdG9yQ2FudmFzLmNvcHlSZWYoKV0geworICAgICAgICAg
ICAgYXV0byYgZXZlbnRMb29wID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZXZlbnRMb29wKCk7
CisgICAgICAgICAgICBhdXRvIG1pY3JvdGFzayA9IG1ha2VVbmlxdWU8QWN0aXZlRE9NQ2FsbGJh
Y2tNaWNyb3Rhc2s+KGV2ZW50TG9vcC5taWNyb3Rhc2tRdWV1ZSgpLCAqc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgWyYsIHByb3RlY3RlZEluc3BlY3RvckNhbnZhcyA9IGluc3BlY3RvckNhbnZhcy5j
b3B5UmVmKCldIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogY2FudmFzRWxlbWVudCA9IHBy
b3RlY3RlZEluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjYW52YXNFbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihjYW52YXNFbGVtZW50LT5k
b2N1bWVudCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ2Miw3ICs0
NjMsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRDYW52YXNBCiAKICAgICAg
ICAgICAgICAgICBpZiAoY2FudmFzUmVuZGVyaW5nQ29udGV4dC5jYWxsVHJhY2luZ0FjdGl2ZSgp
KQogICAgICAgICAgICAgICAgICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjYW52
YXNSZW5kZXJpbmdDb250ZXh0KTsKLSAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgZXZlbnRMb29wLnF1ZXVlTWljcm90YXNrQ2FsbGJhY2soV1RGTW92ZShtaWNy
b3Rhc2spKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAkocmV2aXNpb24gMjUyNjc5KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzI3LDExICs0MzI3LDEyIEBAIHZvaWQg
SW50ZXJuYWxzOjpxdWV1ZU1pY3JvVGFzayhpbnQgdGVzdE4KICAgICBpZiAoIWRvY3VtZW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG1pY3JvdGFzayA9IG1ha2VVbmlxdWU8QWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2s+KE1pY3JvdGFza1F1ZXVlOjptYWluVGhyZWFkUXVldWUoKSwg
KmRvY3VtZW50LCBbZG9jdW1lbnQsIHRlc3ROdW1iZXJdKCkgeworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBkb2N1bWVudDsKKyAgICBhdXRvJiBldmVudExvb3AgPSBjb250
ZXh0LT5ldmVudExvb3AoKTsKKyAgICBhdXRvIG1pY3JvdGFzayA9IG1ha2VVbmlxdWU8QWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2s+KGV2ZW50TG9vcC5taWNyb3Rhc2tRdWV1ZSgpLCAqZG9jdW1l
bnQsIFtkb2N1bWVudCwgdGVzdE51bWJlcl0oKSB7CiAgICAgICAgIGRvY3VtZW50LT5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpEZWJ1ZywgbWFrZVN0
cmluZygiTWljcm9UYXNrICMiLCB0ZXN0TnVtYmVyLCAiIGhhcyBydW4uIikpOwogICAgIH0pOwot
Ci0gICAgTWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLmFwcGVuZChXVEZNb3ZlKG1p
Y3JvdGFzaykpOworICAgIGV2ZW50TG9vcC5xdWV1ZU1pY3JvdGFza0NhbGxiYWNrKFdURk1vdmUo
bWljcm90YXNrKSk7CiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuY3BwCShyZXZpc2lvbiAyNTI2
NzkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXb3JrZXJFdmVudExvb3AuaCIKIAorI2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKICNpbmNsdWRl
ICJXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIldvcmtsZXRHbG9iYWxTY29wZS5oIgog
CkBAIC00OCw2ICs0OSwxMCBAQCBXb3JrZXJFdmVudExvb3A6OldvcmtlckV2ZW50TG9vcChTY3Jp
cHRFCiB7CiB9CiAKK1dvcmtlckV2ZW50TG9vcDo6fldvcmtlckV2ZW50TG9vcCgpCit7Cit9CisK
IHZvaWQgV29ya2VyRXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuKCkKIHsKICAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTYxLDUgKzY2LDE4IEBAIGJvb2wgV29ya2VyRXZl
bnRMb29wOjppc0NvbnRleHRUaHJlYWQoKSAKICAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKTsKIH0KIAorTWljcm90YXNrUXVldWUmIFdvcmtlckV2
ZW50TG9vcDo6bWljcm90YXNrUXVldWUoKQoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIGlmICghbV9taWNyb3Rhc2tRdWV1ZSkKKyAgICAgICAgbV9taWNyb3Rh
c2tRdWV1ZSA9IG1ha2VVbmlxdWU8TWljcm90YXNrUXVldWU+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKSk7CisgICAgcmV0dXJuICptX21pY3JvdGFza1F1ZXVlOworfQorCit2b2lkIFdv
cmtlckV2ZW50TG9vcDo6Y2xlYXJNaWNyb3Rhc2tRdWV1ZSgpCit7CisgICAgbV9taWNyb3Rhc2tR
dWV1ZSA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI2NzkpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwxMSArNDIsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8V29ya2VyRXZlbnRM
b29wPiBjcmVhdGUoV29ya2xldEdsb2JhbFNjb3BlJik7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwg
fldvcmtlckV2ZW50TG9vcCgpOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbW92
ZWQgb25jZSBNaWNyb3Rhc2tRdWV1ZSBpcyBpbnRlZ3JhdGVkIHdpdGggRXZlbnRMb29wVGFza0dy
b3VwLgorICAgIHZvaWQgY2xlYXJNaWNyb3Rhc2tRdWV1ZSgpOworCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFdvcmtlckV2ZW50TG9vcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKICAgICB2
b2lkIHNjaGVkdWxlVG9SdW4oKSBmaW5hbDsKICAgICBib29sIGlzQ29udGV4dFRocmVhZCgpIGNv
bnN0OworICAgIE1pY3JvdGFza1F1ZXVlJiBtaWNyb3Rhc2tRdWV1ZSgpIGZpbmFsOworCisgICAg
c3RkOjp1bmlxdWVfcHRyPE1pY3JvdGFza1F1ZXVlPiBtX21pY3JvdGFza1F1ZXVlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw2IEBAIFdvcmtlckdsb2JhbFNjb3BlOjpXb3JrZXJHbG9iYWxTY29wZShjb24KICAgICAsIG1f
dGhyZWFkKHRocmVhZCkKICAgICAsIG1fc2NyaXB0KG1ha2VVbmlxdWU8V29ya2VyU2NyaXB0Q29u
dHJvbGxlcj4odGhpcykpCiAgICAgLCBtX2luc3BlY3RvckNvbnRyb2xsZXIobWFrZVVuaXF1ZTxX
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX21pY3JvdGFza1F1ZXVl
KG1ha2VVbmlxdWU8TWljcm90YXNrUXVldWU+KG1fc2NyaXB0LT52bSgpKSkKICAgICAsIG1faXNP
bmxpbmUoaXNPbmxpbmUpCiAgICAgLCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeShzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpCiAg
ICAgLCBtX2V2ZW50UXVldWUoKnRoaXMpCkBAIC0xNDMsNyArMTQyLDggQEAgdm9pZCBXb3JrZXJH
bG9iYWxTY29wZTo6cHJlcGFyZUZvclRlcm1pbgogICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
KCk7CiAKICAgICAvLyBNaWNyb3Rhc2tRdWV1ZSBhbmQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlciBy
ZWZlcmVuY2UgSGVhcC4KLSAgICBtX21pY3JvdGFza1F1ZXVlID0gbnVsbHB0cjsKKyAgICBpZiAo
bV9ldmVudExvb3ApCisgICAgICAgIG1fZXZlbnRMb29wLT5jbGVhck1pY3JvdGFza1F1ZXVlKCk7
CiAgICAgcmVtb3ZlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyNTI2NzkpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGVudFNl
Y3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOwogY2xhc3MgQ3J5cHRvOwogY2xhc3MgRXZlbnRM
b29wVGFza0dyb3VwOwotY2xhc3MgTWljcm90YXNrUXVldWU7CiBjbGFzcyBQZXJmb3JtYW5jZTsK
IGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKIGNsYXNzIFdvcmtlckV2ZW50TG9vcDsKQEAgLTkwLDgg
Kzg5LDYgQEAgcHVibGljOgogCiAgICAgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlciYgaW5zcGVj
dG9yQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX2luc3BlY3RvckNvbnRyb2xsZXI7IH0K
IAotICAgIE1pY3JvdGFza1F1ZXVlJiBtaWNyb3Rhc2tRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuICpt
X21pY3JvdGFza1F1ZXVlOyB9Ci0KICAgICBXb3JrZXJUaHJlYWQmIHRocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkOyB9CiAKICAgICB1c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpo
YXNQZW5kaW5nQWN0aXZpdHk7CkBAIC0xOTEsNyArMTg4LDYgQEAgcHJpdmF0ZToKICAgICBXb3Jr
ZXJUaHJlYWQmIG1fdGhyZWFkOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXb3JrZXJTY3JpcHRDb250
cm9sbGVyPiBtX3NjcmlwdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V29ya2VySW5zcGVjdG9yQ29u
dHJvbGxlcj4gbV9pbnNwZWN0b3JDb250cm9sbGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNaWNy
b3Rhc2tRdWV1ZT4gbV9taWNyb3Rhc2tRdWV1ZTsKIAogICAgIGJvb2wgbV9jbG9zaW5nIHsgZmFs
c2UgfTsKICAgICBib29sIG1faXNPbmxpbmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0
cy9Xb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dv
cmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjY3OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDggKzgwLDEwIEBAIHZvaWQgV29ya2xldEdsb2JhbFNjb3BlOjpwcmVwYXJlRm9yRGVz
dHIKICAgICBpZiAobV9kZWZhdWx0VGFza0dyb3VwKQogICAgICAgICBtX2RlZmF1bHRUYXNrR3Jv
dXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygp
OwotICAgIHJlbW92ZVJlamVjdGVkUHJvbWlzZVRyYWNrZXIoKTsKICAgICByZW1vdmVBbGxFdmVu
dExpc3RlbmVycygpOworICAgIGlmIChtX2V2ZW50TG9vcCkKKyAgICAgICAgbV9ldmVudExvb3At
PmNsZWFyTWljcm90YXNrUXVldWUoKTsKKyAgICByZW1vdmVSZWplY3RlZFByb21pc2VUcmFja2Vy
KCk7CiAgICAgbV9zY3JpcHQtPnZtKCkubm90aWZ5TmVlZFRlcm1pbmF0aW9uKCk7CiAgICAgbV9z
Y3JpcHQgPSBudWxscHRyOwogfQo=
</data>
<flag name="review"
          id="399731"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>