<?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>234322</bug_id>
          
          <creation_ts>2021-12-14 15:46:42 -0800</creation_ts>
          <short_desc>Add ModalContainerControlClassifier and use it to implement classifyModalContainerControls()</short_desc>
          <delta_ts>2021-12-20 19:12:17 -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>Platform</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>234489</dependson>
          <blocked>234440</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>akeerthi</cc>
    
    <cc>bdakin</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>hi</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1824160</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-14 15:46:42 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825163</commentid>
    <comment_count>1</comment_count>
      <attachid>447469</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-17 12:42:01 -0800</bug_when>
    <thetext>Created attachment 447469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825748</commentid>
    <comment_count>2</comment_count>
      <attachid>447640</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-20 14:38:16 -0800</bug_when>
    <thetext>Created attachment 447640
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825762</commentid>
    <comment_count>3</comment_count>
      <attachid>447648</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-20 15:00:08 -0800</bug_when>
    <thetext>Created attachment 447648
Fix macOS 10.14 build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825783</commentid>
    <comment_count>4</comment_count>
      <attachid>447648</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-12-20 15:40:10 -0800</bug_when>
    <thetext>Comment on attachment 447648
Fix macOS 10.14 build

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

r=me, neato :)

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:28
&gt; +#import &lt;wtf/CompletionHandler.h&gt;

NIT: Could/Should we use `&lt;wtf/Forward.h&gt;` for these instead?

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:46
&gt; +    ModalContainerControlClassifier();

Should this be in `private:`?

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:48
&gt; +    void classify(Vector&lt;String&gt;&amp;&amp;, CompletionHandler&lt;void(Vector&lt;WebCore::ModalContainerControlType&gt;&amp;&amp;)&gt;&amp;&amp;);

Style: I&apos;d make this `Vector&lt;String&gt;&amp;&amp; texts` as it&apos;s not really clear what that parameter is supposed to be used for just by looking at the type.

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:125
&gt; +static std::unique_ptr&lt;ModalContainerControlClassifier&gt;&amp; sharedModalContainerControlClassifier()

NIT: I&apos;d inline this

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:156
&gt; +    for (NSInteger index = 0; index &lt; [batch count]; ++index) {

Why not `[resultProvider count]`?

&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:175
&gt; +    m_queue-&gt;dispatch([this, texts = texts.isolatedCopy(), completion = WTFMove(completion)]() mutable {

Are you doing `texts.isolatedCopy()` instead of `WTFMove(texts)` to avoid deallocing on a different thread?  Is that an issue for `Vector`/`String`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825798</commentid>
    <comment_count>5</comment_count>
      <attachid>447648</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-20 16:11:39 -0800</bug_when>
    <thetext>Comment on attachment 447648
Fix macOS 10.14 build

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

Thanks for the review!

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:28
&gt;&gt; +#import &lt;wtf/CompletionHandler.h&gt;
&gt; 
&gt; NIT: Could/Should we use `&lt;wtf/Forward.h&gt;` for these instead?

Sure.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:46
&gt;&gt; +    ModalContainerControlClassifier();
&gt; 
&gt; Should this be in `private:`?

Hm…I might be able to, if I `friend std::unique_ptr&lt;~&gt;`…

Will give that a try.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.h:48
&gt;&gt; +    void classify(Vector&lt;String&gt;&amp;&amp;, CompletionHandler&lt;void(Vector&lt;WebCore::ModalContainerControlType&gt;&amp;&amp;)&gt;&amp;&amp;);
&gt; 
&gt; Style: I&apos;d make this `Vector&lt;String&gt;&amp;&amp; texts` as it&apos;s not really clear what that parameter is supposed to be used for just by looking at the type.

👍🏻

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:125
&gt;&gt; +static std::unique_ptr&lt;ModalContainerControlClassifier&gt;&amp; sharedModalContainerControlClassifier()
&gt; 
&gt; NIT: I&apos;d inline this

Good point. Moved into the implementation of `sharedClassifier()` below.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:156
&gt;&gt; +    for (NSInteger index = 0; index &lt; [batch count]; ++index) {
&gt; 
&gt; Why not `[resultProvider count]`?

Good point — changed to use `resultProvider.count` here.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/ModalContainerControlClassifier.mm:175
&gt;&gt; +    m_queue-&gt;dispatch([this, texts = texts.isolatedCopy(), completion = WTFMove(completion)]() mutable {
&gt; 
&gt; Are you doing `texts.isolatedCopy()` instead of `WTFMove(texts)` to avoid deallocing on a different thread?  Is that an issue for `Vector`/`String`?

I believe it is. These strings passed into `classify()` were created on the main thread, so they should also be destroyed on the main thread…AFAICT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825808</commentid>
    <comment_count>6</comment_count>
      <attachid>447663</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-20 16:34:13 -0800</bug_when>
    <thetext>Created attachment 447663
Style error is false positive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825815</commentid>
    <comment_count>7</comment_count>
      <attachid>447665</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-12-20 16:52:50 -0800</bug_when>
    <thetext>Created attachment 447665
Ignore style error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825849</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-20 19:11:00 -0800</bug_when>
    <thetext>Committed r287296 (245448@main): &lt;https://commits.webkit.org/245448@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447665.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825850</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-20 19:12:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/86750278&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447469</attachid>
            <date>2021-12-17 12:42:01 -0800</date>
            <delta_ts>2021-12-20 14:38:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234322-20211217124201.patch</filename>
            <type>text/plain</type>
            <size>23784</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFmOWQ3MjgyNjU0OTc2Njg0
YTZmZmVmM2Q4Y2EwY2EyMGE3NzA3N2QuLjBlYjU2NDM3YmNhODkzNjg2YTk5YTg0Zjg2YTI5YWJl
NWZlMjMzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMjEtMTItMTcgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIE1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIgYW5kIHVzZSBpdCB0byBpbXBsZW1lbnQgY2xhc3NpZnlNb2Rh
bENvbnRhaW5lckNvbnRyb2xzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBhbmQgaW1wbGVtZW50IE1vZGFsQ29udGFpbmVyQ29udHJv
bENsYXNzaWZpZXIuIFRoaXMgc2luZ2xldG9uIHVzZXMgdGhlIE5hdHVyYWxMYW5ndWFnZSBhbmQg
Q29yZU1MCisgICAgICAgIGZyYW1ld29ya3Mgb24gQ29jb2EgdG8gY2xhc3NpZnkgc3RyaW5ncyBh
cyBvbmUgb2YgZm91ciBtb2RhbCBjb250YWluZXIgY29udHJvbCB0eXBlcy4gU2VlIGJlbG93IGZv
ciBtb3JlCisgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNz
aWZpZXJCYXRjaCBpbml0V2l0aFJhd0lucHV0czpdKToKKyAgICAgICAgKC1bV0tNb2RhbENvbnRh
aW5lckNsYXNzaWZpZXJCYXRjaCBjb3VudF0pOgorICAgICAgICAoLVtXS01vZGFsQ29udGFpbmVy
Q2xhc3NpZmllckJhdGNoIGZlYXR1cmVzQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tNb2RhbENv
bnRhaW5lckNsYXNzaWZpZXJJbnB1dCBpbml0V2l0aFRva2VuaXplcjpyYXdJbnB1dDpdKToKKyAg
ICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlTmFtZXNdKToK
KyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlVmFsdWVG
b3JOYW1lOl0pOgorCisgICAgICAgIEFkZCBPYmplY3RpdmUtQyBvYmplY3RzIHRoYXQgaW1wbGVt
ZW50IHRoZSBNTEJhdGNoUHJvdmlkZXIgYW5kIE1MRmVhdHVyZVByb3ZpZGVyIHByb3RvY29scywg
cmVzcGVjdGl2ZWx5LgorICAgICAgICBXS01vZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIGlz
IGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYSBsaXN0IG9mIFdLTW9kYWxDb250YWluZXJD
bGFzc2lmaWVySW5wdXQ7IGVhY2gKKyAgICAgICAgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJ
bnB1dCBpcyBpbml0aWFsaXplZCB3aXRoIGEgcmF3IHN0cmluZywgYW5kIHVzZXMgTkxUb2tlbml6
ZXIgdG8gZmlsdGVyIG91dCBub24td29yZAorICAgICAgICBjaGFyYWN0ZXJzIGFuZCB0b2tlbml6
ZSB0aGUgcmF3IGlucHV0IGludG8gYSBzaW5nbGUgc3BhY2Utc2VwYXJhdGVkLCBsb3dlciBjYXNl
IHN0cmluZyAocmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgICJjYW5vbmljYWwiIGlucHV0IGZv
cm1hdCkuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
cjo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OnNo
YXJlZE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpN
b2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKToKKworICAg
ICAgICBSZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodGhpcyBtdXN0IGJlIGFjY2Vzc2Vk
IG9uIHRoZSBtYWluIHRocmVhZCkuCisKKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZVByZWRpY3Rp
b25zKToKKworICAgICAgICBTdGF0aWMgaGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIGEgbGlzdCBv
ZiBzdHJpbmdzIGFuZCBhbiBNTE1vZGVsLCBhbmQgY2xhc3NpZmllcyBlYWNoIHN0cmluZyB1c2lu
ZyB0aGUgbW9kZWwuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xh
c3NpZmllcjo6Y2xhc3NpZnkpOgorCisgICAgICAgIFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHBy
aW1hcnkgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2xhc3NpZmllciwgd2hpY2ggaXMgdG8gdGFrZSBh
IGxpc3Qgb2YgcmF3IHN0cmluZ3MKKyAgICAgICAgcmVwcmVzZW50aW5nIHRleHQgaW4gY2xpY2th
YmxlIGNvbnRyb2xzLCBhbmQgYXN5bmNocm9ub3VzbHkgcmV0dXJuIGEgbGlzdCBvZiBjbGFzcyBs
YWJlbHMgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICBwcmVkaWN0ZWQgY29udHJvbCB0eXBlIGZv
ciBlYWNoIG9mIHRoZSBzdHJpbmdzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUg
aW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKGFuZCB3aWxsIGFsc28gaW52b2tl
IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgb24gdGhlIG1haW4gdGhyZWFkKSwgYnV0IHRoZSBwcm9j
ZXNzIG9mIGxvYWRpbmcgdGhlIE1MTW9kZWwgYW5kCisgICAgICAgIHVzaW5nIGl0IHRvIHByZWRp
Y3QgaW5wdXQgc3RyaW5ncyBpcyBkb25lIGluIGEgd29yayBxdWV1ZSAoImNvbS5hcHBsZS5XZWJL
aXQuTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciIpLgorCisgICAgICAgIChXZWJLaXQ6
Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OnRyeVRvTG9hZE1vZGVsKToKKworICAg
ICAgICBBc3luY2hyb25vdXNseSBsb2FkIHRoZSBNTE1vZGVsIGZyb20gYSBwcmVkZXRlcm1pbmVk
IGJ1bmRsZSByZXNvdXJjZSBuYW1lOyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBtb2RlbCBo
YXMKKyAgICAgICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Y2xhc3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGFzc2lm
eU1vZGFsQ29udGFpbmVyQ29udHJvbHMpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDIxLTEyLTE3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBjbGllbnQgbGF5ZXIgcGx1bWJpbmcgZm9yIGNsYXNz
aWZ5aW5nIG1vZGFsIGNvbnRhaW5lciBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IGM4YmU1NTg2OTI3NmU1MDYyMGJkMzM1YzAwZTY2NmRmMmM0NTRhOTQuLjY1ZDkxODFiYTBjOWUx
MWRjOGI2Y2Y0YTA3MTJjYzI1MjNjMmZlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTQw
Myw2ICs0MDMsNyBAQCBVSVByb2Nlc3MvQ29jb2EvSWNvbkxvYWRpbmdEZWxlZ2F0ZS5tbQogVUlQ
cm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbQogVUlQcm9j
ZXNzL0NvY29hL01lZGlhVXRpbGl0aWVzLm1tCiBVSVByb2Nlc3MvQ29jb2EvTWVkaWFQZXJtaXNz
aW9uVXRpbGl0aWVzLm1tCitVSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xh
c3NpZmllci5tbQogVUlQcm9jZXNzL0NvY29hL01vZGVsRWxlbWVudENvbnRyb2xsZXJDb2NvYS5t
bQogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQogVUlQcm9jZXNzL0NvY29hL1Bh
Z2VDbGllbnRJbXBsQ29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYTY5YmI2YTRmOWFmMDZkMTdlZjc0ZDliY2YzYmI2NTA3OWE1NTEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250
cm9sQ2xhc3NpZmllci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvV29ya1F1ZXVl
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworQGNsYXNzIE1MTW9kZWw7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2VudW0gY2xhc3MgTW9kYWxDb250YWluZXJDb250cm9sVHlw
ZSA6IHVpbnQ4X3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNb2RhbENvbnRh
aW5lckNvbnRyb2xDbGFzc2lmaWVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciYgc2hhcmVk
Q2xhc3NpZmllcigpOworICAgIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIoKTsKKwor
ICAgIHZvaWQgY2xhc3NpZnkoVmVjdG9yPFN0cmluZz4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViQ29yZTo6TW9kYWxDb250YWluZXJDb250cm9sVHlwZT4mJik+JiYpOworCitw
cml2YXRlOgorICAgIHZvaWQgdHJ5VG9Mb2FkTW9kZWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChN
TE1vZGVsICopPiYmKTsKKworICAgIFZlY3RvcjxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1MTW9k
ZWwgKik+PiBtX2xvYWRDb21wbGV0aW9uSGFuZGxlcnM7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV9x
dWV1ZTsKKyAgICBSZXRhaW5QdHI8TUxNb2RlbD4gbV9tb2RlbDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9k
YWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzFj
YmU0ODdjYzA2Mjk1NjFhNDg3YWMzMjE3ZTU4NTQyNjE0OGZjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNz
aWZpZXIubW0KQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIk1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCIKKworI2ltcG9y
dCA8Q29yZU1ML0NvcmVNTC5oPgorI2ltcG9ydCA8TmF0dXJhbExhbmd1YWdlL05hdHVyYWxMYW5n
dWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Nb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlLmg+CisK
K3N0YXRpYyBOU1N0cmluZyAqY29uc3QgY2xhc3NpZmllcklucHV0RmVhdHVyZUtleSA9IEAidGV4
dCI7CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IGNsYXNzaWZpZXJPdXRwdXRGZWF0dXJlS2V5ID0g
QCJsYWJlbCI7CisKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1MKQorU09GVF9MSU5LX0NMQVNT
KENvcmVNTCwgTUxGZWF0dXJlVmFsdWUpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1MLCBNTE1vZGVs
KQorU09GVF9MSU5LX0NMQVNTKENvcmVNTCwgTUxNb2RlbENvbmZpZ3VyYXRpb24pCisKK1NPRlRf
TElOS19GUkFNRVdPUksoTmF0dXJhbExhbmd1YWdlKQorU09GVF9MSU5LX0NMQVNTKE5hdHVyYWxM
YW5ndWFnZSwgTkxUb2tlbml6ZXIpCisKK0BpbnRlcmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNz
aWZpZXJCYXRjaCA6IE5TT2JqZWN0PE1MQmF0Y2hQcm92aWRlcj4KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFJhd0lucHV0czooVmVjdG9yPFN0cmluZz4mJilpbnB1dFN0cmluZ3M7CitAZW5kCisK
K0BpbnRlcmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCA6IE5TT2JqZWN0PE1M
RmVhdHVyZVByb3ZpZGVyPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRv
a2VuaXplciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dDsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0Y2ggeworICAg
IFZlY3RvcjxSZXRhaW5QdHI8V0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dD4+IF9pbnB1
dHM7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lucHV0czooVmVjdG9yPFN0cmlu
Zz4mJilpbnB1dFN0cmluZ3MKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8gdG9rZW5pemVyID0gYWRvcHROUyhbYWxsb2NO
TFRva2VuaXplckluc3RhbmNlKCkgaW5pdFdpdGhVbml0Ok5MVG9rZW5Vbml0V29yZF0pOworICAg
IF9pbnB1dHMgPSBpbnB1dFN0cmluZ3MubWFwKFsmXShhdXRvJiByYXdJbnB1dCkgeworICAgICAg
ICByZXR1cm4gYWRvcHROUyhbW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgYWxsb2Nd
IGluaXRXaXRoVG9rZW5pemVyOnRva2VuaXplci5nZXQoKSByYXdJbnB1dDpyYXdJbnB1dF0pOwor
ICAgIH0pOworICAgIHJldHVybiBzZWxmOworfQorCistIChOU0ludGVnZXIpY291bnQKK3sKKyAg
ICByZXR1cm4gX2lucHV0cy5zaXplKCk7Cit9CisKKy0gKGlkIDxNTEZlYXR1cmVQcm92aWRlcj4p
ZmVhdHVyZXNBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPj0gc3Rh
dGljX2Nhc3Q8TlNJbnRlZ2VyPihfaW5wdXRzLnNpemUoKSkpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgcmV0dXJuIF9p
bnB1dHNbaW5kZXhdLmdldCgpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS01vZGFs
Q29udGFpbmVyQ2xhc3NpZmllcklucHV0IHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9jYW5v
bmljYWxJbnB1dDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRv
a2VuaXplciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
W3Rva2VuaXplciBzZXRTdHJpbmc6cmF3SW5wdXRdOworCisgICAgYXV0byB0b2tlbnMgPSBhZG9w
dE5TKFtOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiBuZXddKTsKKyAgICBbdG9rZW5pemVyIGVu
dW1lcmF0ZVRva2Vuc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmF3SW5wdXQubGVuZ3RoKSB1c2lu
Z0Jsb2NrOlsmXShOU1JhbmdlIHJhbmdlLCBOTFRva2VuaXplckF0dHJpYnV0ZXMgYXR0cmlidXRl
cywgQk9PTCAqc3RvcCkgeworICAgICAgICBpZiAoYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBOU1N0cmluZyAqbG93ZXJjYXNlVG9rZW4gPSBbcmF3SW5wdXQgc3Vi
c3RyaW5nV2l0aFJhbmdlOnJhbmdlXS5sb3dlcmNhc2VTdHJpbmc7CisgICAgICAgIGlmICghbG93
ZXJjYXNlVG9rZW4ubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFt0b2tl
bnMgYWRkT2JqZWN0Omxvd2VyY2FzZVRva2VuXTsKKyAgICB9XTsKKworICAgIF9jYW5vbmljYWxJ
bnB1dCA9IFt0b2tlbnMgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiICJdOworICAgIHJldHVy
biBzZWxmOworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKWZlYXR1cmVOYW1lcworeworICAg
IHJldHVybiBbTlNTZXQ8TlNTdHJpbmcgKj4gc2V0V2l0aE9iamVjdDpjbGFzc2lmaWVySW5wdXRG
ZWF0dXJlS2V5XTsKK30KKworLSAoTUxGZWF0dXJlVmFsdWUgKilmZWF0dXJlVmFsdWVGb3JOYW1l
OihOU1N0cmluZyAqKWZlYXR1cmVOYW1lCit7CisgICAgcmV0dXJuIFtmZWF0dXJlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6Y2xhc3NpZmllcklucHV0RmVhdHVyZUtleV0gPyBbZ2V0TUxGZWF0dXJlVmFs
dWVDbGFzcygpIGZlYXR1cmVWYWx1ZVdpdGhTdHJpbmc6X2Nhbm9uaWNhbElucHV0LmdldCgpXSA6
IG5pbDsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpNb2RhbENvbnRhaW5l
ckNvbnRyb2xDbGFzc2lmaWVyKCkKKyAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNv
bS5hcHBsZS5XZWJLaXQuTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciIpKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcj4mIHNoYXJlZE1vZGFsQ29udGFpbmVyQ29u
dHJvbENsYXNzaWZpZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1
ZV9wdHI8TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcj4+IGNsYXNzaWZpZXI7CisgICAg
cmV0dXJuIGNsYXNzaWZpZXIuZ2V0KCk7Cit9CisKK01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNz
aWZpZXImIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OnNoYXJlZENsYXNzaWZpZXIo
KQoreworICAgIGF1dG8mIGNsYXNzaWZpZXIgPSBzaGFyZWRNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyKCk7CisgICAgaWYgKCFjbGFzc2lmaWVyKQorICAgICAgICBjbGFzc2lmaWVyID0g
bWFrZVVuaXF1ZTxNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyPigpOworICAgIHJldHVy
biAqY2xhc3NpZmllcjsKK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpNb2RhbENvbnRhaW5l
ckNvbnRyb2xUeXBlPiBjb21wdXRlUHJlZGljdGlvbnMoTUxNb2RlbCAqbW9kZWwsIFZlY3RvcjxT
dHJpbmc+JiYgdGV4dHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAg
aWYgKCFtb2RlbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYmF0Y2ggPSBhZG9w
dE5TKFtbV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJCYXRjaCBhbGxvY10gaW5pdFdpdGhSYXdJ
bnB1dHM6V1RGTW92ZSh0ZXh0cyldKTsKKyAgICBOU0Vycm9yICpwcmVkaWN0aW9uRXJyb3IgPSBu
aWw7CisgICAgYXV0byByZXN1bHRQcm92aWRlciA9IFttb2RlbCBwcmVkaWN0aW9uc0Zyb21CYXRj
aDpiYXRjaC5nZXQoKSBlcnJvcjomcHJlZGljdGlvbkVycm9yXTsKKyAgICBpZiAocHJlZGljdGlv
bkVycm9yIHx8IHJlc3VsdFByb3ZpZGVyLmNvdW50IDwgW2JhdGNoIGNvdW50XSkgeworICAgICAg
ICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbG9nIHRoZSBlcnJvciBoZXJlLgorICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3RvcjxNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBl
PiByZXN1bHRzOworICAgIHJlc3VsdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0ZXh0cy5zaXpl
KCkpOworCisgICAgZm9yIChOU0ludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtiYXRjaCBjb3Vu
dF07ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBbcmVzdWx0UHJvdmlkZXIgZmVh
dHVyZXNBdEluZGV4OmluZGV4XTsKKyAgICAgICAgYXV0byBzdHJpbmdSZXN1bHQgPSBbcmVzdWx0
IGZlYXR1cmVWYWx1ZUZvck5hbWU6Y2xhc3NpZmllck91dHB1dEZlYXR1cmVLZXldLnN0cmluZ1Zh
bHVlOworICAgICAgICBpZiAoW3N0cmluZ1Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJuZXV0cmFs
Il0pCisgICAgICAgICAgICByZXN1bHRzLnVuY2hlY2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNv
bnRyb2xUeXBlOjpOZXV0cmFsKTsKKyAgICAgICAgZWxzZSBpZiAoW3N0cmluZ1Jlc3VsdCBpc0Vx
dWFsVG9TdHJpbmc6QCJwb3NpdGl2ZSJdKQorICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRB
cHBlbmQoTW9kYWxDb250YWluZXJDb250cm9sVHlwZTo6UG9zaXRpdmUpOworICAgICAgICBlbHNl
IGlmIChbc3RyaW5nUmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIm5lZ2F0aXZlIl0pCisgICAgICAg
ICAgICByZXN1bHRzLnVuY2hlY2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlOjpO
ZWdhdGl2ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBw
ZW5kKE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU6Ok90aGVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0czsKK30KKwordm9pZCBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpj
bGFzc2lmeShWZWN0b3I8U3RyaW5nPiYmIHRleHRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJiBjb21wbGV0aW9uKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgdGV4dHMgPSB0ZXh0cy5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbiA9IFdURk1vdmUoY29t
cGxldGlvbildKCkgbXV0YWJsZSB7CisgICAgICAgIHRyeVRvTG9hZE1vZGVsKFt0ZXh0cyA9IFdU
Rk1vdmUodGV4dHMpLCBjb21wbGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKV0oTUxNb2RlbCAq
bW9kZWwpIG11dGFibGUgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKSwgcHJlZGljdGlvbnMgPSBjb21wdXRlUHJl
ZGljdGlvbnMobW9kZWwsIFdURk1vdmUodGV4dHMpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uKFdURk1vdmUocHJlZGljdGlvbnMpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFz
c2lmaWVyOjp0cnlUb0xvYWRNb2RlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1MTW9kZWwgKik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAobV9tb2RlbCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX21vZGVs
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYnVuZGxlID0gW05T
QnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdOworICAgIGF1
dG8gY29tcGlsZWRNb2RlbFVSTCA9IFtidW5kbGUgVVJMRm9yUmVzb3VyY2U6QCJNb2RhbENvbnRh
aW5lckNvbnRyb2xzIiB3aXRoRXh0ZW5zaW9uOkAibWxtb2RlbGMiXTsKKyAgICBpZiAoIWNvbXBp
bGVkTW9kZWxVUkwpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fbG9hZENvbXBsZXRpb25IYW5kbGVycy5hcHBlbmQoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmIChtX2xvYWRDb21wbGV0aW9uSGFuZGxl
cnMuc2l6ZSgpID4gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbYWxsb2NNTE1vZGVsQ29uZmlndXJhdGlvbkluc3RhbmNlKCkgaW5pdF0pOwor
ICAgIFtjb25maWd1cmF0aW9uIHNldENvbXB1dGVVbml0czpNTENvbXB1dGVVbml0c0NQVU9ubHld
OworICAgIFtnZXRNTE1vZGVsQ2xhc3MoKSBsb2FkQ29udGVudHNPZlVSTDpjb21waWxlZE1vZGVs
VVJMIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpt
YWtlQmxvY2tQdHIoW3RoaXNdKE1MTW9kZWwgKm1vZGVsLCBOU0Vycm9yICplcnJvcikgbXV0YWJs
ZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCB0byBsb2cgdGhlIGVycm9yIGhlcmUu
CisgICAgICAgIG1fbW9kZWwgPSBtb2RlbDsKKyAgICAgICAgZm9yIChhdXRvJiBjb21wbGV0aW9u
SGFuZGxlciA6IHN0ZDo6ZXhjaGFuZ2UobV9sb2FkQ29tcGxldGlvbkhhbmRsZXJzLCB7IH0pKQor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9tb2RlbC5nZXQoKSk7CisgICAgfSkuZ2V0
KCldOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5kZXggNmE1MGEwODEwMzM5NTg2
NTgzOWZmYTc4MGU4MzViNzU4MzM1ZmFiZS4uMjlmOTE3NzQ1OTZjZjAwNGNkMGQ1N2I1ZWEzODZi
NWNiMjMzYjMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkRhdGFEZXRlY3Rp
b25SZXN1bHQuaCIKICNpbXBvcnQgIkluc2VydFRleHRPcHRpb25zLmgiCiAjaW1wb3J0ICJMb2Fk
UGFyYW1ldGVycy5oIgorI2ltcG9ydCAiTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5o
IgogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUXVhcmFudGluZVNQSS5oIgogI2lt
cG9ydCAiUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLmgiCkBAIC03OTcsNiArNzk4LDExIEBAIGJv
b2wgV2ViUGFnZVByb3h5Ojppc1F1YXJhbnRpbmVkQW5kTm90VXNlckFwcHJvdmVkKGNvbnN0IFN0
cmluZyYgZmlsZVVSTFN0cmluZykKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2xh
c3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKFZlY3RvcjxTdHJpbmc+JiYgdGV4dHMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+JiYpPiYm
IGNvbXBsZXRpb24pCit7CisgICAgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6c2hh
cmVkQ2xhc3NpZmllcigpLmNsYXNzaWZ5KFdURk1vdmUodGV4dHMpLCBXVEZNb3ZlKGNvbXBsZXRp
b24pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4
IDAyZjNiNWUzYzlmY2FjZjdjNGIyNzYzNjgzNmYxMzhkYmMyNmY3NzIuLjQ4N2YwZjUzMmNkMzBh
YzY3NDA2Mzc2OWU1ZDJiMDFjNDE3ZWViOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtMTA5OTgsNiArMTA5OTgsMTEgQEAgVmVjdG9yPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gV2ViUGFnZVByb3h5OjpjcmVhdGVOZXR3b3JrRXh0ZW5zaW9uc1NhbmRi
b3hFeHQKIHsKICAgICByZXR1cm4geyB9OwogfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2xhc3Np
ZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKFZlY3RvcjxTdHJpbmc+JiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+JiYpPiYmIGNvbXBsZXRp
b24pCit7CisgICAgY29tcGxldGlvbih7IH0pOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTl9DT09SRElOQVRPUikKQEAgLTExMDQ4LDEzICsxMTA1Myw2IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZXF1ZXN0Q29va2llQ29uc2VudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKENv
b2tpZUNvbnNlbnREZWNpCiAgICAgbV91aUNsaWVudC0+cmVxdWVzdENvb2tpZUNvbnNlbnQoV1RG
TW92ZShjb21wbGV0aW9uKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjbGFzc2lmeU1vZGFs
Q29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0cmluZz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9sVHlwZT4mJik+JiYgY29tcGxldGlv
bikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLSAgICBVTlVTRURfUEFS
QU0odGV4dHMpOwotICAgIGNvbXBsZXRpb24oeyB9KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICN1bmRlZiBXRUJQQUdFUFJPWFlfUkVMRUFTRV9MT0cKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0NWQ0ZDM2OTMxNzg0NDcw
NGQ0NzE4MGZjNGRhZDZmMWI5NjYyMzYuLjU0MzkwOTIzNTk5MTYzMThiMjVlZWY3MTg5NDA5ZTcy
ZGZkMDJmZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjQzOCw2ICs2NDM4LDggQEAKIAkJRjQ4QkI4REYyNkY5NjM5MjAwMUMxQzQw
IC8qIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDhCQjhF
MDI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcHBLaXRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjQ5MzI4ODUyNzY5MEZDRjAwM0UyMEY4IC8qIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNz
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDkzMjg4NjI3NjkwRkNGMDAzRTIwRjgg
LyogTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBh
dGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
bW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDk3NUNGMTI2MjRCODBBMDAzQzYyNkUgLyogV0tRdWlja0xvb2tQ
cmV2aWV3Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1F1aWNrTG9va1ByZXZpZXdDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDIzLDYgKzc0MjUsOCBA
QAogCQkJCTkzNDI1ODhGMjU1NURDQTUwMDU5RUVERCAvKiBNZWRpYVBlcm1pc3Npb25VdGlsaXRp
ZXMubW0gKi8sCiAJCQkJNDExMjg2RUYyMUM4QTkwQzAwM0E4NTUwIC8qIE1lZGlhVXRpbGl0aWVz
LmggKi8sCiAJCQkJNDExMjg2RjAyMUM4QTkwRDAwM0E4NTUwIC8qIE1lZGlhVXRpbGl0aWVzLm1t
ICovLAorCQkJCUY0OTMyODg1Mjc2OTBGQ0YwMDNFMjBGOCAvKiBNb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyLmggKi8sCisJCQkJRjQ5MzI4ODYyNzY5MEZDRjAwM0UyMEY4IC8qIE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0gKi8sCiAJCQkJNzEzN0JBN0QyNUYxNTNFOTAw
OTE0RUUzIC8qIE1vZGVsRWxlbWVudENvbnRyb2xsZXJDb2NvYS5tbSAqLywKIAkJCQkxQUJDM0RG
NDE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJMUFCQzNERjMx
ODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25TdGF0ZS5tbSAqLywKQEAgLTEzMDM5LDcgKzEz
MDQzLDYgQEAKIAkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNr
Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBO
ZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JE
IC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NzI3NUVD
NUU1MDAyREMyMkQgLyogV2ViUHVzaE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0
OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0N0ZDOEEwMjVCODMzMUMwMDU0OTVGQyAvKiBOZXR3b3JrTG9hZFNjaGVkdWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0NTI2RUQyNzFFMTY0NzAwMDQ2N0I2IC8qIE5ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMTI3LDYgKzEzMTMw
LDcgQEAKIAkJCQkyRDI3OUUxOTI2OTU1NzY4MDA0QjNFRUIgLyogUHJvdG90eXBlVG9vbHNTUEku
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjgxMjc1RTk3QjYwMDJEQzIyRCAvKiBQdXNoQXBw
QnVuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY3RDI3NUU5N0I2MDAyREMyMkQgLyog
UHVzaENsaWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1Rjk1Mjc1RUJB
NjMwMDJEQzIyRCAvKiBQdXNoTWVzc2FnZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExRTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5n
U29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRUU1NzI1MjQwOUYxNDIwMDIwMDVENiAv
KiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1MTMsNiAr
MTM1MTcsNyBAQAogCQkJCTUxN0I1RjJFMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9u
Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlBMjcy
MUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTdCNUY3MzI3NUU5NjA5MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2Fn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJl
bW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg2MEU3MTIzMEY2N0ZD
MDA0NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMTM1NDcsNyArMTM1NTIsNiBAQAogCQkJCTkzNTZGMkRDMjE1MkI2
QjUwMEU2RDVERiAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxN0E1MzEwMUY0N0E4NjIwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNX
Q29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NTI3
NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NjBGNDg5MDFGOTk2RjcxMDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5l
Y3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzExQTlFQ0MyMTQwMzVGODAwQ0ZC
MjBBIC8qIFdlYlN3aXRjaGluZ0dQVUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1NkYy
REUyMTUyQjcxMDAwRTZENURGIC8qIFdlYlNXT3JpZ2luU3RvcmUuaCBpbiBIZWFkZXJzICovLApA
QCAtMTUxMTYsOSArMTUxMjAsOSBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
IAkJCWZpbGVzID0gKAogCQkJCTUxN0I1RjlBMjc1RjNBODYwMDJEQzIyRCAvKiBBcmd1bWVudENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyog
V2ViUHVzaFRvb2xDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOUIyNzVG
M0E5ODAwMkRDMjJEIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
N0I1RjlDMjc1RjNDMzcwMDJEQzIyRCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTUxN0I1RjlCMjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xD
b25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGNjUyNzVBOEQ3RjAwMkRDMjJE
IC8qIFdlYlB1c2hUb29sTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTUyMTQsNyArMTUyMTgsNiBAQAog
CQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3
OEM4QiAvKiBIYW5kbGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Mjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY5OTI3NUVDNjAxMDAyREMyMkQgLyogV2ViUHVzaE1l
c3NhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3NDlGNjQ1MjE0NjU2MUUwMDgzODBC
RiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlC
RjVFQzY0MjU0MTE0NTYwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzE0RDM3RkUyNEFDRTA4NjAwN0ZGMDE0IC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VN
YW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNTU3NCw2ICsxNTU3Nyw3IEBACiAJCQkJQkNF
RTdBRDAxMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QTI3NUU5N0E0MDAyREMyMkQgLyogV2ViUHVz
aERhZW1vbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1Rjc5Mjc1RTk3QTEwMDJEQzIyRCAv
KiBXZWJQdXNoRGFlbW9uTWFpbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1Rjk5Mjc1RUM2
MDEwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxRiAvKiBX
ZWJSVENNb25pdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2
MEUxMTY1NDMxODUwMEYzMjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447640</attachid>
            <date>2021-12-20 14:38:16 -0800</date>
            <delta_ts>2021-12-20 15:23:44 -0800</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-234322-20211220143815.patch</filename>
            <type>text/plain</type>
            <size>19724</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM3MDIzYTMzN2Y0NTYzNjk0
MjhkZjc3NTNmODNhZjk2OWI4YTk4Y2YuLjkyMWQ4YjUwNjI4MDk5NjI2MWYzYjRlYzdiMDVhMWMw
ZGRjYzhiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMjEtMTItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIE1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIgYW5kIHVzZSBpdCB0byBpbXBsZW1lbnQgY2xhc3NpZnlNb2Rh
bENvbnRhaW5lckNvbnRyb2xzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBhbmQgaW1wbGVtZW50IE1vZGFsQ29udGFpbmVyQ29udHJv
bENsYXNzaWZpZXIuIFRoaXMgc2luZ2xldG9uIHVzZXMgdGhlIE5hdHVyYWxMYW5ndWFnZSBhbmQg
Q29yZU1MCisgICAgICAgIGZyYW1ld29ya3Mgb24gQ29jb2EgdG8gY2xhc3NpZnkgc3RyaW5ncyBh
cyBvbmUgb2YgZm91ciBtb2RhbCBjb250YWluZXIgY29udHJvbCB0eXBlcy4gU2VlIGJlbG93IGZv
ciBtb3JlCisgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNz
aWZpZXJCYXRjaCBpbml0V2l0aFJhd0lucHV0czpdKToKKyAgICAgICAgKC1bV0tNb2RhbENvbnRh
aW5lckNsYXNzaWZpZXJCYXRjaCBjb3VudF0pOgorICAgICAgICAoLVtXS01vZGFsQ29udGFpbmVy
Q2xhc3NpZmllckJhdGNoIGZlYXR1cmVzQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tNb2RhbENv
bnRhaW5lckNsYXNzaWZpZXJJbnB1dCBpbml0V2l0aFRva2VuaXplcjpyYXdJbnB1dDpdKToKKyAg
ICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlTmFtZXNdKToK
KyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlVmFsdWVG
b3JOYW1lOl0pOgorCisgICAgICAgIEFkZCBPYmplY3RpdmUtQyBvYmplY3RzIHRoYXQgaW1wbGVt
ZW50IHRoZSBNTEJhdGNoUHJvdmlkZXIgYW5kIE1MRmVhdHVyZVByb3ZpZGVyIHByb3RvY29scywg
cmVzcGVjdGl2ZWx5LgorICAgICAgICBXS01vZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIGlz
IGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYSBsaXN0IG9mIFdLTW9kYWxDb250YWluZXJD
bGFzc2lmaWVySW5wdXQ7IGVhY2gKKyAgICAgICAgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJ
bnB1dCBpcyBpbml0aWFsaXplZCB3aXRoIGEgcmF3IHN0cmluZywgYW5kIHVzZXMgTkxUb2tlbml6
ZXIgdG8gZmlsdGVyIG91dCBub24td29yZAorICAgICAgICBjaGFyYWN0ZXJzIGFuZCB0b2tlbml6
ZSB0aGUgcmF3IGlucHV0IGludG8gYSBzaW5nbGUgc3BhY2Utc2VwYXJhdGVkLCBsb3dlciBjYXNl
IHN0cmluZyAocmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgICJjYW5vbmljYWwiIGlucHV0IGZv
cm1hdCkuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
cjo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OnNo
YXJlZE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpN
b2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKToKKworICAg
ICAgICBSZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodGhpcyBtdXN0IGJlIGFjY2Vzc2Vk
IG9uIHRoZSBtYWluIHRocmVhZCkuCisKKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZVByZWRpY3Rp
b25zKToKKworICAgICAgICBTdGF0aWMgaGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIGEgbGlzdCBv
ZiBzdHJpbmdzIGFuZCBhbiBNTE1vZGVsLCBhbmQgY2xhc3NpZmllcyBlYWNoIHN0cmluZyB1c2lu
ZyB0aGUgbW9kZWwuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xh
c3NpZmllcjo6Y2xhc3NpZnkpOgorCisgICAgICAgIFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHBy
aW1hcnkgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2xhc3NpZmllciwgd2hpY2ggaXMgdG8gdGFrZSBh
IGxpc3Qgb2YgcmF3IHN0cmluZ3MKKyAgICAgICAgcmVwcmVzZW50aW5nIHRleHQgaW4gY2xpY2th
YmxlIGNvbnRyb2xzLCBhbmQgYXN5bmNocm9ub3VzbHkgcmV0dXJuIGEgbGlzdCBvZiBjbGFzcyBs
YWJlbHMgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICBwcmVkaWN0ZWQgY29udHJvbCB0eXBlIGZv
ciBlYWNoIG9mIHRoZSBzdHJpbmdzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUg
aW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKGFuZCB3aWxsIGFsc28gaW52b2tl
IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgb24gdGhlIG1haW4gdGhyZWFkKSwgYnV0IHRoZSBwcm9j
ZXNzIG9mIGxvYWRpbmcgdGhlIE1MTW9kZWwgYW5kCisgICAgICAgIHVzaW5nIGl0IHRvIHByZWRp
Y3QgaW5wdXQgc3RyaW5ncyBpcyBkb25lIGluIGEgd29yayBxdWV1ZSAoImNvbS5hcHBsZS5XZWJL
aXQuTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciIpLgorCisgICAgICAgIChXZWJLaXQ6
Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OnRyeVRvTG9hZE1vZGVsKToKKworICAg
ICAgICBBc3luY2hyb25vdXNseSBsb2FkIHRoZSBNTE1vZGVsIGZyb20gYSBwcmVkZXRlcm1pbmVk
IGJ1bmRsZSByZXNvdXJjZSBuYW1lOyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBtb2RlbCBo
YXMKKyAgICAgICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Y2xhc3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGFzc2lm
eU1vZGFsQ29udGFpbmVyQ29udHJvbHMpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDIxLTEyLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgQVBJIGF2YWlsYWJpbGl0eSBt
YWNyb3MgYXJvdW5kIHNvbWUgV2ViWFIgU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzhi
ZTU1ODY5Mjc2ZTUwNjIwYmQzMzVjMDBlNjY2ZGYyYzQ1NGE5NC4uNjVkOTE4MWJhMGM5ZTExZGM4
YjZjZjRhMDcxMmNjMjUyM2MyZmVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNDAzLDYg
KzQwMyw3IEBAIFVJUHJvY2Vzcy9Db2NvYS9JY29uTG9hZGluZ0RlbGVnYXRlLm1tCiBVSVByb2Nl
c3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCiBVSVByb2Nlc3Mv
Q29jb2EvTWVkaWFVdGlsaXRpZXMubW0KIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYVBlcm1pc3Npb25V
dGlsaXRpZXMubW0KK1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lm
aWVyLm1tCiBVSVByb2Nlc3MvQ29jb2EvTW9kZWxFbGVtZW50Q29udHJvbGxlckNvY29hLm1tCiBV
SVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNs
aWVudEltcGxDb2NvYS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJhNjliYjZhNGY5YWYwNmQxN2VmNzRkOWJjZjNiYjY1MDc5YTU1MTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitAY2xhc3MgTUxNb2RlbDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworZW51bSBjbGFzcyBNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlIDog
dWludDhfdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1vZGFsQ29udGFpbmVy
Q29udHJvbENsYXNzaWZpZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyJiBzaGFyZWRDbGFz
c2lmaWVyKCk7CisgICAgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcigpOworCisgICAg
dm9pZCBjbGFzc2lmeShWZWN0b3I8U3RyaW5nPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJik7CisKK3ByaXZh
dGU6CisgICAgdm9pZCB0cnlUb0xvYWRNb2RlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1MTW9k
ZWwgKik+JiYpOworCisgICAgVmVjdG9yPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTUxNb2RlbCAq
KT4+IG1fbG9hZENvbXBsZXRpb25IYW5kbGVyczsKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVl
OworICAgIFJldGFpblB0cjxNTE1vZGVsPiBtX21vZGVsOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENv
bnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWVkMGRj
NDM2YjQ5NDkzNjYwM2RjZTJmM2IyMWI5ZTQ0M2VlOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
ci5tbQpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5oIgorCisjaW1wb3J0IDxX
ZWJDb3JlL01vZGFsQ29udGFpbmVyQ29udHJvbFR5cGUuaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9D
b3JlTUxTb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL2NvY29hL05hdHVyYWxMYW5ndWFnZVNvZnRM
aW5rLmg+CisKK3N0YXRpYyBOU1N0cmluZyAqY29uc3QgY2xhc3NpZmllcklucHV0RmVhdHVyZUtl
eSA9IEAidGV4dCI7CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IGNsYXNzaWZpZXJPdXRwdXRGZWF0
dXJlS2V5ID0gQCJsYWJlbCI7CisKK0BpbnRlcmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZp
ZXJCYXRjaCA6IE5TT2JqZWN0PE1MQmF0Y2hQcm92aWRlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJhd0lucHV0czooVmVjdG9yPFN0cmluZz4mJilpbnB1dFN0cmluZ3M7CitAZW5kCisKK0Bp
bnRlcmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCA6IE5TT2JqZWN0PE1MRmVh
dHVyZVByb3ZpZGVyPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRva2Vu
aXplciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dDsKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0Y2ggeworICAgIFZl
Y3RvcjxSZXRhaW5QdHI8V0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dD4+IF9pbnB1dHM7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lucHV0czooVmVjdG9yPFN0cmluZz4m
JilpbnB1dFN0cmluZ3MKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8gdG9rZW5pemVyID0gYWRvcHROUyhbUEFMOjphbGxv
Y05MVG9rZW5pemVySW5zdGFuY2UoKSBpbml0V2l0aFVuaXQ6TkxUb2tlblVuaXRXb3JkXSk7Cisg
ICAgX2lucHV0cyA9IGlucHV0U3RyaW5ncy5tYXAoWyZdKGF1dG8mIHJhd0lucHV0KSB7CisgICAg
ICAgIHJldHVybiBhZG9wdE5TKFtbV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBhbGxv
Y10gaW5pdFdpdGhUb2tlbml6ZXI6dG9rZW5pemVyLmdldCgpIHJhd0lucHV0OnJhd0lucHV0XSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TSW50ZWdlciljb3VudAorewor
ICAgIHJldHVybiBfaW5wdXRzLnNpemUoKTsKK30KKworLSAoaWQgPE1MRmVhdHVyZVByb3ZpZGVy
PilmZWF0dXJlc0F0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA+PSBz
dGF0aWNfY2FzdDxOU0ludGVnZXI+KF9pbnB1dHMuc2l6ZSgpKSkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICByZXR1cm4g
X2lucHV0c1tpbmRleF0uZ2V0KCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLTW9k
YWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2Nh
bm9uaWNhbElucHV0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUb2tlbml6ZXI6KE5M
VG9rZW5pemVyICopdG9rZW5pemVyIHJhd0lucHV0OihOU1N0cmluZyAqKXJhd0lucHV0Cit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBbdG9rZW5pemVyIHNldFN0cmluZzpyYXdJbnB1dF07CisKKyAgICBhdXRvIHRva2VucyA9IGFk
b3B0TlMoW05TTXV0YWJsZUFycmF5PE5TU3RyaW5nICo+IG5ld10pOworICAgIFt0b2tlbml6ZXIg
ZW51bWVyYXRlVG9rZW5zSW5SYW5nZTpOU01ha2VSYW5nZSgwLCByYXdJbnB1dC5sZW5ndGgpIHVz
aW5nQmxvY2s6WyZdKE5TUmFuZ2UgcmFuZ2UsIE5MVG9rZW5pemVyQXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBCT09MICpzdG9wKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIE5TU3RyaW5nICpsb3dlcmNhc2VUb2tlbiA9IFtyYXdJbnB1dCBz
dWJzdHJpbmdXaXRoUmFuZ2U6cmFuZ2VdLmxvd2VyY2FzZVN0cmluZzsKKyAgICAgICAgaWYgKCFs
b3dlcmNhc2VUb2tlbi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW3Rv
a2VucyBhZGRPYmplY3Q6bG93ZXJjYXNlVG9rZW5dOworICAgIH1dOworCisgICAgX2Nhbm9uaWNh
bElucHV0ID0gW3Rva2VucyBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIgIl07CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKE5TU2V0PE5TU3RyaW5nICo+ICopZmVhdHVyZU5hbWVzCit7Cisg
ICAgcmV0dXJuIFtOU1NldDxOU1N0cmluZyAqPiBzZXRXaXRoT2JqZWN0OmNsYXNzaWZpZXJJbnB1
dEZlYXR1cmVLZXldOworfQorCistIChNTEZlYXR1cmVWYWx1ZSAqKWZlYXR1cmVWYWx1ZUZvck5h
bWU6KE5TU3RyaW5nICopZmVhdHVyZU5hbWUKK3sKKyAgICByZXR1cm4gW2ZlYXR1cmVOYW1lIGlz
RXF1YWxUb1N0cmluZzpjbGFzc2lmaWVySW5wdXRGZWF0dXJlS2V5XSA/IFtQQUw6OmdldE1MRmVh
dHVyZVZhbHVlQ2xhc3MoKSBmZWF0dXJlVmFsdWVXaXRoU3RyaW5nOl9jYW5vbmljYWxJbnB1dC5n
ZXQoKV0gOiBuaWw7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6TW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllcigpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3Jl
YXRlKCJjb20uYXBwbGUuV2ViS2l0Lk1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIiKSkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworfQorCitzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+JiBzaGFyZWRNb2RhbENvbnRh
aW5lckNvbnRyb2xDbGFzc2lmaWVyKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+PiBjbGFzc2lmaWVy
OworICAgIHJldHVybiBjbGFzc2lmaWVyLmdldCgpOworfQorCitNb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyJiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFz
c2lmaWVyKCkKK3sKKyAgICBhdXRvJiBjbGFzc2lmaWVyID0gc2hhcmVkTW9kYWxDb250YWluZXJD
b250cm9sQ2xhc3NpZmllcigpOworICAgIGlmICghY2xhc3NpZmllcikKKyAgICAgICAgY2xhc3Np
ZmllciA9IG1ha2VVbmlxdWU8TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcj4oKTsKKyAg
ICByZXR1cm4gKmNsYXNzaWZpZXI7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6TW9kYWxD
b250YWluZXJDb250cm9sVHlwZT4gY29tcHV0ZVByZWRpY3Rpb25zKE1MTW9kZWwgKm1vZGVsLCBW
ZWN0b3I8U3RyaW5nPiYmIHRleHRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmICghbW9kZWwpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGJhdGNo
ID0gYWRvcHROUyhbW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0Y2ggYWxsb2NdIGluaXRX
aXRoUmF3SW5wdXRzOldURk1vdmUodGV4dHMpXSk7CisgICAgTlNFcnJvciAqcHJlZGljdGlvbkVy
cm9yID0gbmlsOworICAgIGF1dG8gcmVzdWx0UHJvdmlkZXIgPSBbbW9kZWwgcHJlZGljdGlvbnNG
cm9tQmF0Y2g6YmF0Y2guZ2V0KCkgZXJyb3I6JnByZWRpY3Rpb25FcnJvcl07CisgICAgaWYgKHBy
ZWRpY3Rpb25FcnJvciB8fCByZXN1bHRQcm92aWRlci5jb3VudCA8IFtiYXRjaCBjb3VudF0pIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50IHRvIGxvZyB0aGUgZXJyb3IgaGVyZS4KKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8TW9kYWxDb250YWluZXJDb250
cm9sVHlwZT4gcmVzdWx0czsKKyAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4
dHMuc2l6ZSgpKTsKKworICAgIGZvciAoTlNJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBbYmF0
Y2ggY291bnRdOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gW3Jlc3VsdFByb3Zp
ZGVyIGZlYXR1cmVzQXRJbmRleDppbmRleF07CisgICAgICAgIGF1dG8gc3RyaW5nUmVzdWx0ID0g
W3Jlc3VsdCBmZWF0dXJlVmFsdWVGb3JOYW1lOmNsYXNzaWZpZXJPdXRwdXRGZWF0dXJlS2V5XS5z
dHJpbmdWYWx1ZTsKKyAgICAgICAgaWYgKFtzdHJpbmdSZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAi
bmV1dHJhbCJdKQorICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBlbmQoTW9kYWxDb250
YWluZXJDb250cm9sVHlwZTo6TmV1dHJhbCk7CisgICAgICAgIGVsc2UgaWYgKFtzdHJpbmdSZXN1
bHQgaXNFcXVhbFRvU3RyaW5nOkAicG9zaXRpdmUiXSkKKyAgICAgICAgICAgIHJlc3VsdHMudW5j
aGVja2VkQXBwZW5kKE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU6OlBvc2l0aXZlKTsKKyAgICAg
ICAgZWxzZSBpZiAoW3N0cmluZ1Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJuZWdhdGl2ZSJdKQor
ICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBlbmQoTW9kYWxDb250YWluZXJDb250cm9s
VHlwZTo6TmVnYXRpdmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRzLnVuY2hl
Y2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlOjpPdGhlcik7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3Np
Zmllcjo6Y2xhc3NpZnkoVmVjdG9yPFN0cmluZz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9sVHlwZT4mJik+JiYgY29tcGxldGlvbikK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHRleHRzID0gdGV4dHMuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb24gPSBXVEZN
b3ZlKGNvbXBsZXRpb24pXSgpIG11dGFibGUgeworICAgICAgICB0cnlUb0xvYWRNb2RlbChbdGV4
dHMgPSBXVEZNb3ZlKHRleHRzKSwgY29tcGxldGlvbiA9IFdURk1vdmUoY29tcGxldGlvbildKE1M
TW9kZWwgKm1vZGVsKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbY29tcGxldGlvbiA9IFdURk1vdmUoY29tcGxldGlvbiksIHByZWRpY3Rpb25zID0gY29t
cHV0ZVByZWRpY3Rpb25zKG1vZGVsLCBXVEZNb3ZlKHRleHRzKSldKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbihXVEZNb3ZlKHByZWRpY3Rpb25zKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTW9kYWxDb250YWluZXJDb250
cm9sQ2xhc3NpZmllcjo6dHJ5VG9Mb2FkTW9kZWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChNTE1v
ZGVsICopPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKG1fbW9kZWwpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bV9tb2RlbC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGJ1bmRs
ZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXTsK
KyAgICBhdXRvIGNvbXBpbGVkTW9kZWxVUkwgPSBbYnVuZGxlIFVSTEZvclJlc291cmNlOkAiTW9k
YWxDb250YWluZXJDb250cm9scyIgd2l0aEV4dGVuc2lvbjpAIm1sbW9kZWxjIl07CisgICAgaWYg
KCFjb21waWxlZE1vZGVsVVJMKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xvYWRDb21wbGV0aW9uSGFuZGxlcnMuYXBw
ZW5kKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAobV9sb2FkQ29tcGxldGlv
bkhhbmRsZXJzLnNpemUoKSA+IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1BBTDo6YWxsb2NNTE1vZGVsQ29uZmlndXJhdGlvbkluc3RhbmNl
KCkgaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldENvbXB1dGVVbml0czpNTENvbXB1dGVV
bml0c0NQVU9ubHldOworICAgIFtQQUw6OmdldE1MTW9kZWxDbGFzcygpIGxvYWRDb250ZW50c09m
VVJMOmNvbXBpbGVkTW9kZWxVUkwgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGNv
bXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbdGhpc10oTUxNb2RlbCAqbW9kZWwsIE5TRXJy
b3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50IHRvIGxv
ZyB0aGUgZXJyb3IgaGVyZS4KKyAgICAgICAgbV9tb2RlbCA9IG1vZGVsOworICAgICAgICBmb3Ig
KGF1dG8mIGNvbXBsZXRpb25IYW5kbGVyIDogc3RkOjpleGNoYW5nZShtX2xvYWRDb21wbGV0aW9u
SGFuZGxlcnMsIHsgfSkpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX21vZGVsLmdl
dCgpKTsKKyAgICB9KS5nZXQoKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRl
eCA2YTUwYTA4MTAzMzk1ODY1ODM5ZmZhNzgwZTgzNWI3NTgzMzVmYWJlLi4yOWY5MTc3NDU5NmNm
MDA0Y2QwZDU3YjVlYTM4NmI1Y2IyMzNiMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2lt
cG9ydCAiRGF0YURldGVjdGlvblJlc3VsdC5oIgogI2ltcG9ydCAiSW5zZXJ0VGV4dE9wdGlvbnMu
aCIKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJNb2RhbENvbnRhaW5lckNv
bnRyb2xDbGFzc2lmaWVyLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJRdWFy
YW50aW5lU1BJLmgiCiAjaW1wb3J0ICJRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCIKQEAgLTc5
Nyw2ICs3OTgsMTEgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmlzUXVhcmFudGluZWRBbmROb3RVc2Vy
QXBwcm92ZWQoY29uc3QgU3RyaW5nJiBmaWxlVVJMU3RyaW5nKQogfQogI2VuZGlmCiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpjbGFzc2lmeU1vZGFsQ29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0cmlu
Zz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJD
b250cm9sVHlwZT4mJik+JiYgY29tcGxldGlvbikKK3sKKyAgICBNb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKCkuY2xhc3NpZnkoV1RGTW92ZSh0ZXh0cyks
IFdURk1vdmUoY29tcGxldGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI3Vu
ZGVmIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKaW5kZXggYmI2ZTZhYTYwOTk3YTBmN2Y0YjUwNzE1YzVmNjAxNTZiZjI4YjE5
Yi4uNWZmNjBlN2E0Yjc5Y2JlOGI4YzlhNDNiOWE0MDcyOTFmY2YyZWQzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMTAwMiw2ICsxMTAwMiwxMSBAQCBW
ZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBXZWJQYWdlUHJveHk6OmNyZWF0ZU5ldHdv
cmtFeHRlbnNpb25zU2FuZGJveEV4dAogewogICAgIHJldHVybiB7IH07CiB9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpjbGFzc2lmeU1vZGFsQ29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0cmluZz4m
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9sVHlw
ZT4mJik+JiYgY29tcGxldGlvbikKK3sKKyAgICBjb21wbGV0aW9uKHsgfSk7Cit9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKQpAQCAtMTEwNTIsMTMgKzEx
MDU3LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDb29raWVDb25zZW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoQ29va2llQ29uc2VudERlY2kKICAgICBtX3VpQ2xpZW50LT5yZXF1ZXN0
Q29va2llQ29uc2VudChXVEZNb3ZlKGNvbXBsZXRpb24pKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmNsYXNzaWZ5TW9kYWxDb250YWluZXJDb250cm9scyhWZWN0b3I8U3RyaW5nPiYmIHRleHRz
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBl
PiYmKT4mJiBjb21wbGV0aW9uKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0
LgotICAgIFVOVVNFRF9QQVJBTSh0ZXh0cyk7Ci0gICAgY29tcGxldGlvbih7IH0pOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI3VuZGVmIFdFQlBBR0VQUk9YWV9SRUxFQVNFX0xPRwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZmI4NjhhZDQwYTBkZDVmNmIzMWRhNDMzOWE1YzM1ZTAxODA0YzQ0My4uOThkOTQzZWY3ZDE2ZDVm
MWIzZjgyNzAyMDNiZTRhYTIxYTE0NGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDI1LDYgKzY0MjUsOCBAQAogCQlGNDhCQjhE
RjI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0OEJCOEUwMjZGOTYzOTIwMDFDMUM0MCAvKiBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1
MkIgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGNDkzMjg4NTI3NjkwRkNGMDAzRTIwRjggLyogTW9kYWxDb250
YWluZXJDb250cm9sQ2xhc3NpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RhbENvbnRhaW5lckNv
bnRyb2xDbGFzc2lmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTMyODg2
Mjc2OTBGQ0YwMDNFMjBGOCAvKiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8q
IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8qIERy
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc1Q0YxMjYyNEI4MEEwMDNDNjI2
RSAvKiBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUXVp
Y2tMb29rUHJldmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc0MDgsNiArNzQxMCw4IEBACiAJCQkJOTM0MjU4OEYyNTU1RENBNTAwNTlFRUREIC8qIE1lZGlh
UGVybWlzc2lvblV0aWxpdGllcy5tbSAqLywKIAkJCQk0MTEyODZFRjIxQzhBOTBDMDAzQTg1NTAg
LyogTWVkaWFVdGlsaXRpZXMuaCAqLywKIAkJCQk0MTEyODZGMDIxQzhBOTBEMDAzQTg1NTAgLyog
TWVkaWFVdGlsaXRpZXMubW0gKi8sCisJCQkJRjQ5MzI4ODUyNzY5MEZDRjAwM0UyMEY4IC8qIE1v
ZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCAqLywKKwkJCQlGNDkzMjg4NjI3NjkwRkNG
MDAzRTIwRjggLyogTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbSAqLywKIAkJCQk3
MTM3QkE3RDI1RjE1M0U5MDA5MTRFRTMgLyogTW9kZWxFbGVtZW50Q29udHJvbGxlckNvY29hLm1t
ICovLAogCQkJCTFBQkMzREY0MTg5OUU0MzcwMDRGMDYyNiAvKiBOYXZpZ2F0aW9uU3RhdGUuaCAq
LywKIAkJCQkxQUJDM0RGMzE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLm1tICov
LAo=
</data>
<flag name="commit-queue"
          id="473338"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447648</attachid>
            <date>2021-12-20 15:00:08 -0800</date>
            <delta_ts>2021-12-20 16:34:11 -0800</delta_ts>
            <desc>Fix macOS 10.14 build</desc>
            <filename>bug-234322-20211220150007.patch</filename>
            <type>text/plain</type>
            <size>19164</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM3MDIzYTMzN2Y0NTYzNjk0
MjhkZjc3NTNmODNhZjk2OWI4YTk4Y2YuLjgzZmNjYWY4MzM5ZmYyMGUzNGY3ODAxZGFkYjcxZTQy
YTI2YTk3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMjEtMTItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIE1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIgYW5kIHVzZSBpdCB0byBpbXBsZW1lbnQgY2xhc3NpZnlNb2Rh
bENvbnRhaW5lckNvbnRyb2xzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBhbmQgaW1wbGVtZW50IE1vZGFsQ29udGFpbmVyQ29udHJv
bENsYXNzaWZpZXIuIFRoaXMgc2luZ2xldG9uIHVzZXMgdGhlIE5hdHVyYWxMYW5ndWFnZSBhbmQg
Q29yZU1MCisgICAgICAgIGZyYW1ld29ya3Mgb24gQ29jb2EgdG8gY2xhc3NpZnkgc3RyaW5ncyBh
cyBvbmUgb2YgZm91ciBtb2RhbCBjb250YWluZXIgY29udHJvbCB0eXBlcy4gU2VlIGJlbG93IGZv
ciBtb3JlCisgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRhaW5lckNvbnRy
b2xDbGFzc2lmaWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNz
aWZpZXJCYXRjaCBpbml0V2l0aFJhd0lucHV0czpdKToKKyAgICAgICAgKC1bV0tNb2RhbENvbnRh
aW5lckNsYXNzaWZpZXJCYXRjaCBjb3VudF0pOgorICAgICAgICAoLVtXS01vZGFsQ29udGFpbmVy
Q2xhc3NpZmllckJhdGNoIGZlYXR1cmVzQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tNb2RhbENv
bnRhaW5lckNsYXNzaWZpZXJJbnB1dCBpbml0V2l0aFRva2VuaXplcjpyYXdJbnB1dDpdKToKKyAg
ICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlTmFtZXNdKToK
KyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBmZWF0dXJlVmFsdWVG
b3JOYW1lOl0pOgorCisgICAgICAgIEFkZCBPYmplY3RpdmUtQyBvYmplY3RzIHRoYXQgaW1wbGVt
ZW50IHRoZSBNTEJhdGNoUHJvdmlkZXIgYW5kIE1MRmVhdHVyZVByb3ZpZGVyIHByb3RvY29scywg
cmVzcGVjdGl2ZWx5LgorICAgICAgICBXS01vZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIGlz
IGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYSBsaXN0IG9mIFdLTW9kYWxDb250YWluZXJD
bGFzc2lmaWVySW5wdXQ7IGVhY2gKKyAgICAgICAgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJ
bnB1dCBpcyBpbml0aWFsaXplZCB3aXRoIGEgcmF3IHN0cmluZywgYW5kIHVzZXMgTkxUb2tlbml6
ZXIgdG8gZmlsdGVyIG91dCBub24td29yZAorICAgICAgICBjaGFyYWN0ZXJzIGFuZCB0b2tlbml6
ZSB0aGUgcmF3IGlucHV0IGludG8gYSBzaW5nbGUgc3BhY2Utc2VwYXJhdGVkLCBsb3dlciBjYXNl
IHN0cmluZyAocmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgICJjYW5vbmljYWwiIGlucHV0IGZv
cm1hdCkuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
cjo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OnNo
YXJlZE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpN
b2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKToKKworICAg
ICAgICBSZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodGhpcyBtdXN0IGJlIGFjY2Vzc2Vk
IG9uIHRoZSBtYWluIHRocmVhZCkuCisKKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZVByZWRpY3Rp
b25zKToKKworICAgICAgICBTdGF0aWMgaGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIGEgbGlzdCBv
ZiBzdHJpbmdzIGFuZCBhbiBNTE1vZGVsLCBhbmQgY2xhc3NpZmllcyBlYWNoIHN0cmluZyB1c2lu
ZyB0aGUgbW9kZWwsCisgICAgICAgIGFuZCB0aGUgT2JqZWN0aXZlLUMgaGVscGVyIGNsYXNzZXMg
YWJvdmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
cjo6Y2xhc3NpZnkpOgorCisgICAgICAgIFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHByaW1hcnkg
ZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2xhc3NpZmllciwgd2hpY2ggaXMgdG8gdGFrZSBhIGxpc3Qg
b2YgcmF3IHN0cmluZ3MKKyAgICAgICAgcmVwcmVzZW50aW5nIHRleHQgaW4gY2xpY2thYmxlIGNv
bnRyb2xzLCBhbmQgYXN5bmNocm9ub3VzbHkgcmV0dXJuIGEgbGlzdCBvZiBjbGFzcyBsYWJlbHMg
cmVwcmVzZW50aW5nIHRoZQorICAgICAgICBwcmVkaWN0ZWQgY29udHJvbCB0eXBlIGZvciBlYWNo
IG9mIHRoZSBzdHJpbmdzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgaW52b2tl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKGFuZCB3aWxsIGFsc28gaW52b2tlIHRoZSBj
b21wbGV0aW9uIGhhbmRsZXIgb24gdGhlIG1haW4gdGhyZWFkKSwgYnV0IHRoZSBwcm9jZXNzIG9m
IGxvYWRpbmcgdGhlIE1MTW9kZWwgYW5kCisgICAgICAgIHVzaW5nIGl0IHRvIHByZWRpY3QgaW5w
dXQgc3RyaW5ncyBpcyBkb25lIGluIGEgd29yayBxdWV1ZSAoImNvbS5hcHBsZS5XZWJLaXQuTW9k
YWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciIpLgorCisgICAgICAgIChXZWJLaXQ6Ok1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OmxvYWRNb2RlbElmTmVlZGVkKToKKworICAgICAg
ICBMb2FkIHRoZSBNTE1vZGVsIGZyb20gYSBwcmVkZXRlcm1pbmVkIGJ1bmRsZSByZXNvdXJjZSBu
YW1lOyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBtb2RlbCBoYXMKKyAgICAgICAgYWxyZWFk
eSBiZWVuIGNyZWF0ZWQuIFdoaWxlIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5LCB0aGlzIGlz
IGFsd2F5cyBpbnZva2VkIG9uIGEgYmFja2dyb3VuZCBxdWV1ZSBhbmQgbmV2ZXIKKyAgICAgICAg
YmxvY2tzIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQ
YWdlUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGFzc2lm
eU1vZGFsQ29udGFpbmVyQ29udHJvbHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsYXNzaWZ5TW9kYWxDb250
YWluZXJDb250cm9scyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMjEtMTItMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBBUEkgYXZhaWxhYmlsaXR5IG1hY3JvcyBhcm91
bmQgc29tZSBXZWJYUiBTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjOGJlNTU4NjkyNzZl
NTA2MjBiZDMzNWMwMGU2NjZkZjJjNDU0YTk0Li42NWQ5MTgxYmEwYzllMTFkYzhiNmNmNGEwNzEy
Y2MyNTIzYzJmZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDMsNiArNDAzLDcgQEAg
VUlQcm9jZXNzL0NvY29hL0ljb25Mb2FkaW5nRGVsZWdhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9NZWRp
YVV0aWxpdGllcy5tbQogVUlQcm9jZXNzL0NvY29hL01lZGlhUGVybWlzc2lvblV0aWxpdGllcy5t
bQorVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KIFVJ
UHJvY2Vzcy9Db2NvYS9Nb2RlbEVsZW1lbnRDb250cm9sbGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENv
Y29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENv
bnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFjOWQ2Y2Fl
MTRmYzJkMGIxOTRjZTZjMmRkNzk1ZDdlMDhlMTA1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIu
aApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2lt
cG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgorI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0BjbGFzcyBNTE1vZGVsOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitlbnVtIGNsYXNzIE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGUgOiB1aW50OF90Owor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTW9kYWxDb250YWluZXJDb250cm9sQ2xh
c3NpZmllciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXImIHNoYXJlZENsYXNzaWZpZXIoKTsK
KyAgICBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyKCk7CisKKyAgICB2b2lkIGNsYXNz
aWZ5KFZlY3RvcjxTdHJpbmc+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6Ok1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+JiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGxvYWRNb2RlbElmTmVlZGVkKCk7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwor
ICAgIFJldGFpblB0cjxNTE1vZGVsPiBtX21vZGVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRh
aW5lckNvbnRyb2xDbGFzc2lmaWVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDgzMzk1MDVl
ZTA2YjEwYWZiM2MyNzUyMmMxYjI5YmE0M2E0YmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5t
bQpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5oIgorCisjaW1wb3J0IDxXZWJD
b3JlL01vZGFsQ29udGFpbmVyQ29udHJvbFR5cGUuaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9Db3Jl
TUxTb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL2NvY29hL05hdHVyYWxMYW5ndWFnZVNvZnRMaW5r
Lmg+CisKK3N0YXRpYyBOU1N0cmluZyAqY29uc3QgY2xhc3NpZmllcklucHV0RmVhdHVyZUtleSA9
IEAidGV4dCI7CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IGNsYXNzaWZpZXJPdXRwdXRGZWF0dXJl
S2V5ID0gQCJsYWJlbCI7CisKK0BpbnRlcmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJC
YXRjaCA6IE5TT2JqZWN0PE1MQmF0Y2hQcm92aWRlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFJhd0lucHV0czooVmVjdG9yPFN0cmluZz4mJilpbnB1dFN0cmluZ3M7CitAZW5kCisKK0BpbnRl
cmZhY2UgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCA6IE5TT2JqZWN0PE1MRmVhdHVy
ZVByb3ZpZGVyPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRva2VuaXpl
ciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dDsKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0Y2ggeworICAgIFZlY3Rv
cjxSZXRhaW5QdHI8V0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dD4+IF9pbnB1dHM7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lucHV0czooVmVjdG9yPFN0cmluZz4mJilp
bnB1dFN0cmluZ3MKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIGF1dG8gdG9rZW5pemVyID0gYWRvcHROUyhbUEFMOjphbGxvY05M
VG9rZW5pemVySW5zdGFuY2UoKSBpbml0V2l0aFVuaXQ6TkxUb2tlblVuaXRXb3JkXSk7CisgICAg
X2lucHV0cyA9IGlucHV0U3RyaW5ncy5tYXAoWyZdKGF1dG8mIHJhd0lucHV0KSB7CisgICAgICAg
IHJldHVybiBhZG9wdE5TKFtbV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJJbnB1dCBhbGxvY10g
aW5pdFdpdGhUb2tlbml6ZXI6dG9rZW5pemVyLmdldCgpIHJhd0lucHV0OnJhd0lucHV0XSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TSW50ZWdlciljb3VudAoreworICAg
IHJldHVybiBfaW5wdXRzLnNpemUoKTsKK30KKworLSAoaWQgPE1MRmVhdHVyZVByb3ZpZGVyPilm
ZWF0dXJlc0F0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxOU0ludGVnZXI+KF9pbnB1dHMuc2l6ZSgpKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICByZXR1cm4gX2lu
cHV0c1tpbmRleF0uZ2V0KCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLTW9kYWxD
b250YWluZXJDbGFzc2lmaWVySW5wdXQgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2Nhbm9u
aWNhbElucHV0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUb2tlbml6ZXI6KE5MVG9r
ZW5pemVyICopdG9rZW5pemVyIHJhd0lucHV0OihOU1N0cmluZyAqKXJhd0lucHV0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBb
dG9rZW5pemVyIHNldFN0cmluZzpyYXdJbnB1dF07CisKKyAgICBhdXRvIHRva2VucyA9IGFkb3B0
TlMoW05TTXV0YWJsZUFycmF5PE5TU3RyaW5nICo+IG5ld10pOworICAgIFt0b2tlbml6ZXIgZW51
bWVyYXRlVG9rZW5zSW5SYW5nZTpOU01ha2VSYW5nZSgwLCByYXdJbnB1dC5sZW5ndGgpIHVzaW5n
QmxvY2s6WyZdKE5TUmFuZ2UgcmFuZ2UsIE5MVG9rZW5pemVyQXR0cmlidXRlcyBhdHRyaWJ1dGVz
LCBCT09MICpzdG9wKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIE5TU3RyaW5nICpsb3dlcmNhc2VUb2tlbiA9IFtyYXdJbnB1dCBzdWJz
dHJpbmdXaXRoUmFuZ2U6cmFuZ2VdLmxvd2VyY2FzZVN0cmluZzsKKyAgICAgICAgaWYgKCFsb3dl
cmNhc2VUb2tlbi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW3Rva2Vu
cyBhZGRPYmplY3Q6bG93ZXJjYXNlVG9rZW5dOworICAgIH1dOworCisgICAgX2Nhbm9uaWNhbElu
cHV0ID0gW3Rva2VucyBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIgIl07CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKE5TU2V0PE5TU3RyaW5nICo+ICopZmVhdHVyZU5hbWVzCit7CisgICAg
cmV0dXJuIFtOU1NldDxOU1N0cmluZyAqPiBzZXRXaXRoT2JqZWN0OmNsYXNzaWZpZXJJbnB1dEZl
YXR1cmVLZXldOworfQorCistIChNTEZlYXR1cmVWYWx1ZSAqKWZlYXR1cmVWYWx1ZUZvck5hbWU6
KE5TU3RyaW5nICopZmVhdHVyZU5hbWUKK3sKKyAgICByZXR1cm4gW2ZlYXR1cmVOYW1lIGlzRXF1
YWxUb1N0cmluZzpjbGFzc2lmaWVySW5wdXRGZWF0dXJlS2V5XSA/IFtQQUw6OmdldE1MRmVhdHVy
ZVZhbHVlQ2xhc3MoKSBmZWF0dXJlVmFsdWVXaXRoU3RyaW5nOl9jYW5vbmljYWxJbnB1dC5nZXQo
KV0gOiBuaWw7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6TW9kYWxDb250
YWluZXJDb250cm9sQ2xhc3NpZmllcigpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJjb20uYXBwbGUuV2ViS2l0Lk1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIiKSkKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworfQorCitzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+JiBzaGFyZWRNb2RhbENvbnRhaW5l
ckNvbnRyb2xDbGFzc2lmaWVyKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1
bmlxdWVfcHRyPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+PiBjbGFzc2lmaWVyOwor
ICAgIHJldHVybiBjbGFzc2lmaWVyLmdldCgpOworfQorCitNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyJiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lm
aWVyKCkKK3sKKyAgICBhdXRvJiBjbGFzc2lmaWVyID0gc2hhcmVkTW9kYWxDb250YWluZXJDb250
cm9sQ2xhc3NpZmllcigpOworICAgIGlmICghY2xhc3NpZmllcikKKyAgICAgICAgY2xhc3NpZmll
ciA9IG1ha2VVbmlxdWU8TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcj4oKTsKKyAgICBy
ZXR1cm4gKmNsYXNzaWZpZXI7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6TW9kYWxDb250
YWluZXJDb250cm9sVHlwZT4gY29tcHV0ZVByZWRpY3Rpb25zKE1MTW9kZWwgKm1vZGVsLCBWZWN0
b3I8U3RyaW5nPiYmIHRleHRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIGlmICghbW9kZWwpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGJhdGNoID0g
YWRvcHROUyhbW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0Y2ggYWxsb2NdIGluaXRXaXRo
UmF3SW5wdXRzOldURk1vdmUodGV4dHMpXSk7CisgICAgTlNFcnJvciAqcHJlZGljdGlvbkVycm9y
ID0gbmlsOworICAgIGF1dG8gcmVzdWx0UHJvdmlkZXIgPSBbbW9kZWwgcHJlZGljdGlvbnNGcm9t
QmF0Y2g6YmF0Y2guZ2V0KCkgZXJyb3I6JnByZWRpY3Rpb25FcnJvcl07CisgICAgaWYgKHByZWRp
Y3Rpb25FcnJvciB8fCByZXN1bHRQcm92aWRlci5jb3VudCA8IFtiYXRjaCBjb3VudF0pIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50IHRvIGxvZyB0aGUgZXJyb3IgaGVyZS4KKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9s
VHlwZT4gcmVzdWx0czsKKyAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dHMu
c2l6ZSgpKTsKKworICAgIGZvciAoTlNJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBbYmF0Y2gg
Y291bnRdOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gW3Jlc3VsdFByb3ZpZGVy
IGZlYXR1cmVzQXRJbmRleDppbmRleF07CisgICAgICAgIGF1dG8gc3RyaW5nUmVzdWx0ID0gW3Jl
c3VsdCBmZWF0dXJlVmFsdWVGb3JOYW1lOmNsYXNzaWZpZXJPdXRwdXRGZWF0dXJlS2V5XS5zdHJp
bmdWYWx1ZTsKKyAgICAgICAgaWYgKFtzdHJpbmdSZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAibmV1
dHJhbCJdKQorICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBlbmQoTW9kYWxDb250YWlu
ZXJDb250cm9sVHlwZTo6TmV1dHJhbCk7CisgICAgICAgIGVsc2UgaWYgKFtzdHJpbmdSZXN1bHQg
aXNFcXVhbFRvU3RyaW5nOkAicG9zaXRpdmUiXSkKKyAgICAgICAgICAgIHJlc3VsdHMudW5jaGVj
a2VkQXBwZW5kKE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU6OlBvc2l0aXZlKTsKKyAgICAgICAg
ZWxzZSBpZiAoW3N0cmluZ1Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJuZWdhdGl2ZSJdKQorICAg
ICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBlbmQoTW9kYWxDb250YWluZXJDb250cm9sVHlw
ZTo6TmVnYXRpdmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRzLnVuY2hlY2tl
ZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlOjpPdGhlcik7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmll
cjo6Y2xhc3NpZnkoVmVjdG9yPFN0cmluZz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9sVHlwZT4mJik+JiYgY29tcGxldGlvbikKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0
aGlzLCB0ZXh0cyA9IHRleHRzLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uID0gV1RGTW92ZShj
b21wbGV0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgbG9hZE1vZGVsSWZOZWVkZWQoKTsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uID0gV1RGTW92ZShjb21w
bGV0aW9uKSwgcHJlZGljdGlvbnMgPSBjb21wdXRlUHJlZGljdGlvbnMobV9tb2RlbC5nZXQoKSwg
V1RGTW92ZSh0ZXh0cykpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbihXVEZN
b3ZlKHByZWRpY3Rpb25zKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OmxvYWRNb2RlbElmTmVlZGVkKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6
QCJjb20uYXBwbGUuV2ViS2l0Il07CisgICAgYXV0byBjb21waWxlZE1vZGVsVVJMID0gW2J1bmRs
ZSBVUkxGb3JSZXNvdXJjZTpAIk1vZGFsQ29udGFpbmVyQ29udHJvbHMiIHdpdGhFeHRlbnNpb246
QCJtbG1vZGVsYyJdOworICAgIGlmICghY29tcGlsZWRNb2RlbFVSTCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbUEFMOjphbGxvY01MTW9kZWxD
b25maWd1cmF0aW9uSW5zdGFuY2UoKSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0Q29t
cHV0ZVVuaXRzOk1MQ29tcHV0ZVVuaXRzQ1BVT25seV07CisgICAgTlNFcnJvciAqbG9hZGluZ0Vy
cm9yID0gbmlsOworICAgIG1fbW9kZWwgPSBbUEFMOjpnZXRNTE1vZGVsQ2xhc3MoKSBtb2RlbFdp
dGhDb250ZW50c09mVVJMOmNvbXBpbGVkTW9kZWxVUkwgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpIGVycm9yOiZsb2FkaW5nRXJyb3JdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94
eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29j
b2EubW0KaW5kZXggNmE1MGEwODEwMzM5NTg2NTgzOWZmYTc4MGU4MzViNzU4MzM1ZmFiZS4uMjlm
OTE3NzQ1OTZjZjAwNGNkMGQ1N2I1ZWEzODZiNWNiMjMzYjMwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTM1LDYgKzM1
LDcgQEAKICNpbXBvcnQgIkRhdGFEZXRlY3Rpb25SZXN1bHQuaCIKICNpbXBvcnQgIkluc2VydFRl
eHRPcHRpb25zLmgiCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgorI2ltcG9ydCAiTW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllci5oIgogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2lt
cG9ydCAiUXVhcmFudGluZVNQSS5oIgogI2ltcG9ydCAiUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVy
LmgiCkBAIC03OTcsNiArNzk4LDExIEBAIGJvb2wgV2ViUGFnZVByb3h5Ojppc1F1YXJhbnRpbmVk
QW5kTm90VXNlckFwcHJvdmVkKGNvbnN0IFN0cmluZyYgZmlsZVVSTFN0cmluZykKIH0KICNlbmRp
ZgogCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2xhc3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKFZl
Y3RvcjxTdHJpbmc+JiYgdGV4dHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPE1vZGFs
Q29udGFpbmVyQ29udHJvbFR5cGU+JiYpPiYmIGNvbXBsZXRpb24pCit7CisgICAgTW9kYWxDb250
YWluZXJDb250cm9sQ2xhc3NpZmllcjo6c2hhcmVkQ2xhc3NpZmllcigpLmNsYXNzaWZ5KFdURk1v
dmUodGV4dHMpLCBXVEZNb3ZlKGNvbXBsZXRpb24pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICN1bmRlZiBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGJiNmU2YWE2MDk5N2EwZjdmNGI1MDcxNWM1ZjYw
MTU2YmYyOGIxOWIuLjVmZjYwZTdhNGI3OWNiZThiOGM5YTQzYjlhNDA3MjkxZmNmMmVkMzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTEwMDIsNiArMTEw
MDIsMTEgQEAgVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gV2ViUGFnZVByb3h5Ojpj
cmVhdGVOZXR3b3JrRXh0ZW5zaW9uc1NhbmRib3hFeHQKIHsKICAgICByZXR1cm4geyB9OwogfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6Y2xhc3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKFZlY3Rv
cjxTdHJpbmc+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPE1vZGFsQ29udGFpbmVy
Q29udHJvbFR5cGU+JiYpPiYmIGNvbXBsZXRpb24pCit7CisgICAgY29tcGxldGlvbih7IH0pOwor
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikKQEAgLTEx
MDUyLDEzICsxMTA1Nyw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q29va2llQ29uc2Vu
dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKENvb2tpZUNvbnNlbnREZWNpCiAgICAgbV91aUNsaWVu
dC0+cmVxdWVzdENvb2tpZUNvbnNlbnQoV1RGTW92ZShjb21wbGV0aW9uKSk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpjbGFzc2lmeU1vZGFsQ29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0cmlu
Zz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJD
b250cm9sVHlwZT4mJik+JiYgY29tcGxldGlvbikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkIHlldC4KLSAgICBVTlVTRURfUEFSQU0odGV4dHMpOwotICAgIGNvbXBsZXRpb24oeyB9
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1bmRlZiBXRUJQQUdFUFJPWFlfUkVM
RUFTRV9MT0cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZiODY4YWQ0MGEwZGQ1ZjZiMzFkYTQzMzlhNWMzNWUwMTgwNGM0NDMuLjk4ZDk0
M2VmN2QxNmQ1ZjFiM2Y4MjcwMjAzYmU0YWEyMWExNDRkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQyNSw2ICs2NDI1LDggQEAK
IAkJRjQ4QkI4REYyNkY5NjM5MjAwMUMxQzQwIC8qIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDhCQjhFMDI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ4RDJBODQyMTU4
M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBLaXRTUEkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ5MzI4ODUyNzY5MEZDRjAwM0UyMEY4IC8q
IE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGNDkzMjg4NjI3NjkwRkNGMDAzRTIwRjggLyogTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3Np
Zmllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNz
aWZpZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIw
MDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRD
MTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk3NUNGMTI2MjRC
ODBBMDAzQzYyNkUgLyogV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03NDA4LDYgKzc0MTAsOCBAQAogCQkJCTkzNDI1ODhGMjU1NURDQTUwMDU5RUVE
RCAvKiBNZWRpYVBlcm1pc3Npb25VdGlsaXRpZXMubW0gKi8sCiAJCQkJNDExMjg2RUYyMUM4QTkw
QzAwM0E4NTUwIC8qIE1lZGlhVXRpbGl0aWVzLmggKi8sCiAJCQkJNDExMjg2RjAyMUM4QTkwRDAw
M0E4NTUwIC8qIE1lZGlhVXRpbGl0aWVzLm1tICovLAorCQkJCUY0OTMyODg1Mjc2OTBGQ0YwMDNF
MjBGOCAvKiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmggKi8sCisJCQkJRjQ5MzI4
ODYyNzY5MEZDRjAwM0UyMEY4IC8qIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0g
Ki8sCiAJCQkJNzEzN0JBN0QyNUYxNTNFOTAwOTE0RUUzIC8qIE1vZGVsRWxlbWVudENvbnRyb2xs
ZXJDb2NvYS5tbSAqLywKIAkJCQkxQUJDM0RGNDE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlv
blN0YXRlLmggKi8sCiAJCQkJMUFCQzNERjMxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25T
dGF0ZS5tbSAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447663</attachid>
            <date>2021-12-20 16:34:13 -0800</date>
            <delta_ts>2021-12-20 16:52:48 -0800</delta_ts>
            <desc>Style error is false positive</desc>
            <filename>bug-234322-20211220163412.patch</filename>
            <type>text/plain</type>
            <size>18929</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM3MDIzYTMzN2Y0NTYzNjk0
MjhkZjc3NTNmODNhZjk2OWI4YTk4Y2YuLmNlMjU5M2ZjNWY4NGFjZTMyOTMyNDczOTcyMTcwNzcz
MGUyMmI1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjEtMTItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIE1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIgYW5kIHVzZSBpdCB0byBpbXBsZW1lbnQgY2xhc3NpZnlNb2Rh
bENvbnRhaW5lckNvbnRyb2xzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4K
KworICAgICAgICBJbnRyb2R1Y2UgYW5kIGltcGxlbWVudCBNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyLiBUaGlzIHNpbmdsZXRvbiB1c2VzIHRoZSBOYXR1cmFsTGFuZ3VhZ2UgYW5kIENv
cmVNTAorICAgICAgICBmcmFtZXdvcmtzIG9uIENvY29hIHRvIGNsYXNzaWZ5IHN0cmluZ3MgYXMg
b25lIG9mIGZvdXIgbW9kYWwgY29udGFpbmVyIGNvbnRyb2wgdHlwZXMuIFNlZSBiZWxvdyBmb3Ig
bW9yZQorICAgICAgICBkZXRhaWxzLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9s
Q2xhc3NpZmllci5tbTogQWRkZWQuCisgICAgICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lm
aWVyQmF0Y2ggaW5pdFdpdGhSYXdJbnB1dHM6XSk6CisgICAgICAgICgtW1dLTW9kYWxDb250YWlu
ZXJDbGFzc2lmaWVyQmF0Y2ggY291bnRdKToKKyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNs
YXNzaWZpZXJCYXRjaCBmZWF0dXJlc0F0SW5kZXg6XSk6CisgICAgICAgICgtW1dLTW9kYWxDb250
YWluZXJDbGFzc2lmaWVySW5wdXQgaW5pdFdpdGhUb2tlbml6ZXI6cmF3SW5wdXQ6XSk6CisgICAg
ICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgZmVhdHVyZU5hbWVzXSk6Cisg
ICAgICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgZmVhdHVyZVZhbHVlRm9y
TmFtZTpdKToKKworICAgICAgICBBZGQgT2JqZWN0aXZlLUMgb2JqZWN0cyB0aGF0IGltcGxlbWVu
dCB0aGUgTUxCYXRjaFByb3ZpZGVyIGFuZCBNTEZlYXR1cmVQcm92aWRlciBwcm90b2NvbHMsIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJCYXRjaCBpcyBl
c3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIGEgbGlzdCBvZiBXS01vZGFsQ29udGFpbmVyQ2xh
c3NpZmllcklucHV0OyBlYWNoCisgICAgICAgIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5w
dXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHJhdyBzdHJpbmcsIGFuZCB1c2VzIE5MVG9rZW5pemVy
IHRvIGZpbHRlciBvdXQgbm9uLXdvcmQKKyAgICAgICAgY2hhcmFjdGVycyBhbmQgdG9rZW5pemUg
dGhlIHJhdyBpbnB1dCBpbnRvIGEgc2luZ2xlIHNwYWNlLXNlcGFyYXRlZCwgbG93ZXIgY2FzZSBz
dHJpbmcgKHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICAiY2Fub25pY2FsIiBpbnB1dCBmb3Jt
YXQpLgorCisgICAgICAgIChXZWJLaXQ6Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6
Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpNb2Rh
bENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKToKKworICAgICAg
ICBSZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodGhpcyBtdXN0IGJlIGFjY2Vzc2VkIG9u
IHRoZSBtYWluIHRocmVhZCkuCisKKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZVByZWRpY3Rpb25z
KToKKworICAgICAgICBTdGF0aWMgaGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIGEgbGlzdCBvZiBz
dHJpbmdzIGFuZCBhbiBNTE1vZGVsLCBhbmQgY2xhc3NpZmllcyBlYWNoIHN0cmluZyB1c2luZyB0
aGUgbW9kZWwsCisgICAgICAgIGFuZCB0aGUgT2JqZWN0aXZlLUMgaGVscGVyIGNsYXNzZXMgYWJv
dmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6
Y2xhc3NpZnkpOgorCisgICAgICAgIFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHByaW1hcnkgZnVu
Y3Rpb25hbGl0eSBvZiB0aGUgY2xhc3NpZmllciwgd2hpY2ggaXMgdG8gdGFrZSBhIGxpc3Qgb2Yg
cmF3IHN0cmluZ3MKKyAgICAgICAgcmVwcmVzZW50aW5nIHRleHQgaW4gY2xpY2thYmxlIGNvbnRy
b2xzLCBhbmQgYXN5bmNocm9ub3VzbHkgcmV0dXJuIGEgbGlzdCBvZiBjbGFzcyBsYWJlbHMgcmVw
cmVzZW50aW5nIHRoZQorICAgICAgICBwcmVkaWN0ZWQgY29udHJvbCB0eXBlIGZvciBlYWNoIG9m
IHRoZSBzdHJpbmdzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgaW52b2tlZCBv
biB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKGFuZCB3aWxsIGFsc28gaW52b2tlIHRoZSBjb21w
bGV0aW9uIGhhbmRsZXIgb24gdGhlIG1haW4gdGhyZWFkKSwgYnV0IHRoZSBwcm9jZXNzIG9mIGxv
YWRpbmcgdGhlIE1MTW9kZWwgYW5kCisgICAgICAgIHVzaW5nIGl0IHRvIHByZWRpY3QgaW5wdXQg
c3RyaW5ncyBpcyBkb25lIGluIGEgd29yayBxdWV1ZSAoImNvbS5hcHBsZS5XZWJLaXQuTW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllciIpLgorCisgICAgICAgIChXZWJLaXQ6Ok1vZGFsQ29u
dGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OmxvYWRNb2RlbElmTmVlZGVkKToKKworICAgICAgICBM
b2FkIHRoZSBNTE1vZGVsIGZyb20gYSBwcmVkZXRlcm1pbmVkIGJ1bmRsZSByZXNvdXJjZSBuYW1l
OyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBtb2RlbCBoYXMKKyAgICAgICAgYWxyZWFkeSBi
ZWVuIGNyZWF0ZWQuIFdoaWxlIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5LCB0aGlzIGlzIGFs
d2F5cyBpbnZva2VkIG9uIGEgYmFja2dyb3VuZCBxdWV1ZSBhbmQgbmV2ZXIKKyAgICAgICAgYmxv
Y2tzIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdl
UHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGFzc2lmeU1v
ZGFsQ29udGFpbmVyQ29udHJvbHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsYXNzaWZ5TW9kYWxDb250YWlu
ZXJDb250cm9scyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisKIDIwMjEtMTItMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBBUEkgYXZhaWxhYmlsaXR5IG1hY3JvcyBhcm91bmQg
c29tZSBXZWJYUiBTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjOGJlNTU4NjkyNzZlNTA2
MjBiZDMzNWMwMGU2NjZkZjJjNDU0YTk0Li42NWQ5MTgxYmEwYzllMTFkYzhiNmNmNGEwNzEyY2My
NTIzYzJmZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDMsNiArNDAzLDcgQEAgVUlQ
cm9jZXNzL0NvY29hL0ljb25Mb2FkaW5nRGVsZWdhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYVV0
aWxpdGllcy5tbQogVUlQcm9jZXNzL0NvY29hL01lZGlhUGVybWlzc2lvblV0aWxpdGllcy5tbQor
VUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KIFVJUHJv
Y2Vzcy9Db2NvYS9Nb2RlbEVsZW1lbnRDb250cm9sbGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRh
aW5lckNvbnRyb2xDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9N
b2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWM0Mzg3NzA3Y2Q2
ZjIwNjc2NGE1OGY0OGY1MTNiNWE3YTAzMjNjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaApA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPHd0
Zi9Gb3J3YXJkLmg+CisKK0BjbGFzcyBNTE1vZGVsOworCituYW1lc3BhY2UgV2ViQ29yZSB7Citl
bnVtIGNsYXNzIE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGUgOiB1aW50OF90OworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXImIHNoYXJlZENsYXNzaWZpZXIoKTsKKworICAgIHZv
aWQgY2xhc3NpZnkoVmVjdG9yPFN0cmluZz4mJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxXZWJDb3JlOjpNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJik7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyPiBzdGQ6Om1ha2VfdW5pcXVlPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZp
ZXI+KCk7CisKKyAgICBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyKCk7CisgICAgdm9p
ZCBsb2FkTW9kZWxJZk5lZWRlZCgpOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAg
ICBSZXRhaW5QdHI8TUxNb2RlbD4gbV9tb2RlbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWlu
ZXJDb250cm9sQ2xhc3NpZmllci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01v
ZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEyOWQwNWQzODFj
NzE2OWIxMDRkMGM1ZTYzZTdmODE1OTM4MzU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0K
QEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIk1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCIKKworI2ltcG9ydCA8V2ViQ29y
ZS9Nb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlLmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQ29yZU1M
U29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9OYXR1cmFsTGFuZ3VhZ2VTb2Z0TGluay5o
PgorCitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IGNsYXNzaWZpZXJJbnB1dEZlYXR1cmVLZXkgPSBA
InRleHQiOworc3RhdGljIE5TU3RyaW5nICpjb25zdCBjbGFzc2lmaWVyT3V0cHV0RmVhdHVyZUtl
eSA9IEAibGFiZWwiOworCitAaW50ZXJmYWNlIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0
Y2ggOiBOU09iamVjdDxNTEJhdGNoUHJvdmlkZXI+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhS
YXdJbnB1dHM6KFZlY3RvcjxTdHJpbmc+JiYpaW5wdXRTdHJpbmdzOworQGVuZAorCitAaW50ZXJm
YWNlIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgOiBOU09iamVjdDxNTEZlYXR1cmVQ
cm92aWRlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRva2VuaXplcjooTkxUb2tlbml6ZXIg
Kil0b2tlbml6ZXIgcmF3SW5wdXQ6KE5TU3RyaW5nICopcmF3SW5wdXQ7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS01vZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIHsKKyAgICBWZWN0b3I8
UmV0YWluUHRyPFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQ+PiBfaW5wdXRzOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJbnB1dHM6KFZlY3RvcjxTdHJpbmc+JiYpaW5w
dXRTdHJpbmdzCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBhdXRvIHRva2VuaXplciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NOTFRv
a2VuaXplckluc3RhbmNlKCkgaW5pdFdpdGhVbml0Ok5MVG9rZW5Vbml0V29yZF0pOworICAgIF9p
bnB1dHMgPSBpbnB1dFN0cmluZ3MubWFwKFsmXShhdXRvJiByYXdJbnB1dCkgeworICAgICAgICBy
ZXR1cm4gYWRvcHROUyhbW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgYWxsb2NdIGlu
aXRXaXRoVG9rZW5pemVyOnRva2VuaXplci5nZXQoKSByYXdJbnB1dDpyYXdJbnB1dF0pOworICAg
IH0pOworICAgIHJldHVybiBzZWxmOworfQorCistIChOU0ludGVnZXIpY291bnQKK3sKKyAgICBy
ZXR1cm4gX2lucHV0cy5zaXplKCk7Cit9CisKKy0gKGlkIDxNTEZlYXR1cmVQcm92aWRlcj4pZmVh
dHVyZXNBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPj0gc3RhdGlj
X2Nhc3Q8TlNJbnRlZ2VyPihfaW5wdXRzLnNpemUoKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgcmV0dXJuIF9pbnB1
dHNbaW5kZXhdLmdldCgpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS01vZGFsQ29u
dGFpbmVyQ2xhc3NpZmllcklucHV0IHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9jYW5vbmlj
YWxJbnB1dDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRva2Vu
aXplciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgW3Rv
a2VuaXplciBzZXRTdHJpbmc6cmF3SW5wdXRdOworCisgICAgYXV0byB0b2tlbnMgPSBhZG9wdE5T
KFtOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiBuZXddKTsKKyAgICBbdG9rZW5pemVyIGVudW1l
cmF0ZVRva2Vuc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmF3SW5wdXQubGVuZ3RoKSB1c2luZ0Js
b2NrOlsmXShOU1JhbmdlIHJhbmdlLCBOTFRva2VuaXplckF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
Qk9PTCAqc3RvcCkgeworICAgICAgICBpZiAoYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBOU1N0cmluZyAqbG93ZXJjYXNlVG9rZW4gPSBbcmF3SW5wdXQgc3Vic3Ry
aW5nV2l0aFJhbmdlOnJhbmdlXS5sb3dlcmNhc2VTdHJpbmc7CisgICAgICAgIGlmICghbG93ZXJj
YXNlVG9rZW4ubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFt0b2tlbnMg
YWRkT2JqZWN0Omxvd2VyY2FzZVRva2VuXTsKKyAgICB9XTsKKworICAgIF9jYW5vbmljYWxJbnB1
dCA9IFt0b2tlbnMgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiICJdOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKWZlYXR1cmVOYW1lcworeworICAgIHJl
dHVybiBbTlNTZXQ8TlNTdHJpbmcgKj4gc2V0V2l0aE9iamVjdDpjbGFzc2lmaWVySW5wdXRGZWF0
dXJlS2V5XTsKK30KKworLSAoTUxGZWF0dXJlVmFsdWUgKilmZWF0dXJlVmFsdWVGb3JOYW1lOihO
U1N0cmluZyAqKWZlYXR1cmVOYW1lCit7CisgICAgcmV0dXJuIFtmZWF0dXJlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6Y2xhc3NpZmllcklucHV0RmVhdHVyZUtleV0gPyBbUEFMOjpnZXRNTEZlYXR1cmVW
YWx1ZUNsYXNzKCkgZmVhdHVyZVZhbHVlV2l0aFN0cmluZzpfY2Fub25pY2FsSW5wdXQuZ2V0KCld
IDogbmlsOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6Ok1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIoKQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
Y29tLmFwcGxlLldlYktpdC5Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyIikpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKworTW9kYWxDb250YWluZXJDb250cm9s
Q2xhc3NpZmllciYgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6c2hhcmVkQ2xhc3Np
ZmllcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxNb2Rh
bENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyPj4gY2xhc3NpZmllcjsKKyAgICBpZiAoIWNsYXNz
aWZpZXIuZ2V0KCkpCisgICAgICAgIGNsYXNzaWZpZXIuZ2V0KCkgPSBtYWtlVW5pcXVlPE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+KCk7CisgICAgcmV0dXJuICpjbGFzc2lmaWVyLmdl
dCgpOworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6Ok1vZGFsQ29udGFpbmVyQ29udHJvbFR5
cGU+IGNvbXB1dGVQcmVkaWN0aW9ucyhNTE1vZGVsICptb2RlbCwgVmVjdG9yPFN0cmluZz4mJiB0
ZXh0cykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIW1vZGVs
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBiYXRjaCA9IGFkb3B0TlMoW1tXS01v
ZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIGFsbG9jXSBpbml0V2l0aFJhd0lucHV0czpXVEZN
b3ZlKHRleHRzKV0pOworICAgIE5TRXJyb3IgKnByZWRpY3Rpb25FcnJvciA9IG5pbDsKKyAgICBh
dXRvIHJlc3VsdFByb3ZpZGVyID0gW21vZGVsIHByZWRpY3Rpb25zRnJvbUJhdGNoOmJhdGNoLmdl
dCgpIGVycm9yOiZwcmVkaWN0aW9uRXJyb3JdOworICAgIGlmIChwcmVkaWN0aW9uRXJyb3IgfHwg
cmVzdWx0UHJvdmlkZXIuY291bnQgPCBbYmF0Y2ggY291bnRdKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBtYXkgd2FudCB0byBsb2cgdGhlIGVycm9yIGhlcmUuCisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgVmVjdG9yPE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+IHJlc3VsdHM7
CisgICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRleHRzLnNpemUoKSk7CisKKyAg
ICBmb3IgKE5TSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgcmVzdWx0UHJvdmlkZXIuY291bnQ7
ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBbcmVzdWx0UHJvdmlkZXIgZmVhdHVy
ZXNBdEluZGV4OmluZGV4XTsKKyAgICAgICAgYXV0byBzdHJpbmdSZXN1bHQgPSBbcmVzdWx0IGZl
YXR1cmVWYWx1ZUZvck5hbWU6Y2xhc3NpZmllck91dHB1dEZlYXR1cmVLZXldLnN0cmluZ1ZhbHVl
OworICAgICAgICBpZiAoW3N0cmluZ1Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJuZXV0cmFsIl0p
CisgICAgICAgICAgICByZXN1bHRzLnVuY2hlY2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRy
b2xUeXBlOjpOZXV0cmFsKTsKKyAgICAgICAgZWxzZSBpZiAoW3N0cmluZ1Jlc3VsdCBpc0VxdWFs
VG9TdHJpbmc6QCJwb3NpdGl2ZSJdKQorICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBl
bmQoTW9kYWxDb250YWluZXJDb250cm9sVHlwZTo6UG9zaXRpdmUpOworICAgICAgICBlbHNlIGlm
IChbc3RyaW5nUmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIm5lZ2F0aXZlIl0pCisgICAgICAgICAg
ICByZXN1bHRzLnVuY2hlY2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlOjpOZWdh
dGl2ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBwZW5k
KE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU6Ok90aGVyKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0czsKK30KKwordm9pZCBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpjbGFz
c2lmeShWZWN0b3I8U3RyaW5nPiYmIHRleHRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJiBjb21wbGV0aW9uKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHRl
eHRzID0gdGV4dHMuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb24gPSBXVEZNb3ZlKGNvbXBsZXRp
b24pXSgpIG11dGFibGUgeworICAgICAgICBsb2FkTW9kZWxJZk5lZWRlZCgpOworICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb24gPSBXVEZNb3ZlKGNvbXBsZXRpb24p
LCBwcmVkaWN0aW9ucyA9IGNvbXB1dGVQcmVkaWN0aW9ucyhtX21vZGVsLmdldCgpLCBXVEZNb3Zl
KHRleHRzKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uKFdURk1vdmUocHJl
ZGljdGlvbnMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTW9kYWxDb250YWlu
ZXJDb250cm9sQ2xhc3NpZmllcjo6bG9hZE1vZGVsSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX21vZGVsKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIGJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5h
cHBsZS5XZWJLaXQiXTsKKyAgICBhdXRvIGNvbXBpbGVkTW9kZWxVUkwgPSBbYnVuZGxlIFVSTEZv
clJlc291cmNlOkAiTW9kYWxDb250YWluZXJDb250cm9scyIgd2l0aEV4dGVuc2lvbjpAIm1sbW9k
ZWxjIl07CisgICAgaWYgKCFjb21waWxlZE1vZGVsVVJMKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtQQUw6OmFsbG9jTUxNb2RlbENvbmZpZ3Vy
YXRpb25JbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRDb21wdXRlVW5p
dHM6TUxDb21wdXRlVW5pdHNDUFVPbmx5XTsKKyAgICBOU0Vycm9yICpsb2FkaW5nRXJyb3IgPSBu
aWw7CisgICAgbV9tb2RlbCA9IFtQQUw6OmdldE1MTW9kZWxDbGFzcygpIG1vZGVsV2l0aENvbnRl
bnRzT2ZVUkw6Y29tcGlsZWRNb2RlbFVSTCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCkgZXJyb3I6JmxvYWRpbmdFcnJvcl07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpp
bmRleCA2YTUwYTA4MTAzMzk1ODY1ODM5ZmZhNzgwZTgzNWI3NTgzMzVmYWJlLi4yOWY5MTc3NDU5
NmNmMDA0Y2QwZDU3YjVlYTM4NmI1Y2IyMzNiMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzUsNiArMzUsNyBAQAog
I2ltcG9ydCAiRGF0YURldGVjdGlvblJlc3VsdC5oIgogI2ltcG9ydCAiSW5zZXJ0VGV4dE9wdGlv
bnMuaCIKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJNb2RhbENvbnRhaW5l
ckNvbnRyb2xDbGFzc2lmaWVyLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJR
dWFyYW50aW5lU1BJLmgiCiAjaW1wb3J0ICJRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCIKQEAg
LTc5Nyw2ICs3OTgsMTEgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmlzUXVhcmFudGluZWRBbmROb3RV
c2VyQXBwcm92ZWQoY29uc3QgU3RyaW5nJiBmaWxlVVJMU3RyaW5nKQogfQogI2VuZGlmCiAKK3Zv
aWQgV2ViUGFnZVByb3h5OjpjbGFzc2lmeU1vZGFsQ29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0
cmluZz4mJiB0ZXh0cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWlu
ZXJDb250cm9sVHlwZT4mJik+JiYgY29tcGxldGlvbikKK3sKKyAgICBNb2RhbENvbnRhaW5lckNv
bnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKCkuY2xhc3NpZnkoV1RGTW92ZSh0ZXh0
cyksIFdURk1vdmUoY29tcGxldGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I3VuZGVmIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggYmI2ZTZhYTYwOTk3YTBmN2Y0YjUwNzE1YzVmNjAxNTZiZjI4
YjE5Yi4uNWZmNjBlN2E0Yjc5Y2JlOGI4YzlhNDNiOWE0MDcyOTFmY2YyZWQzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMTAwMiw2ICsxMTAwMiwxMSBA
QCBWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBXZWJQYWdlUHJveHk6OmNyZWF0ZU5l
dHdvcmtFeHRlbnNpb25zU2FuZGJveEV4dAogewogICAgIHJldHVybiB7IH07CiB9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpjbGFzc2lmeU1vZGFsQ29udGFpbmVyQ29udHJvbHMoVmVjdG9yPFN0cmlu
Zz4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TW9kYWxDb250YWluZXJDb250cm9s
VHlwZT4mJik+JiYgY29tcGxldGlvbikKK3sKKyAgICBjb21wbGV0aW9uKHsgfSk7Cit9CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKQpAQCAtMTEwNTIsMTMg
KzExMDU3LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDb29raWVDb25zZW50KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoQ29va2llQ29uc2VudERlY2kKICAgICBtX3VpQ2xpZW50LT5yZXF1
ZXN0Q29va2llQ29uc2VudChXVEZNb3ZlKGNvbXBsZXRpb24pKTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6OmNsYXNzaWZ5TW9kYWxDb250YWluZXJDb250cm9scyhWZWN0b3I8U3RyaW5nPiYmIHRl
eHRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxNb2RhbENvbnRhaW5lckNvbnRyb2xU
eXBlPiYmKT4mJiBjb21wbGV0aW9uKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQg
eWV0LgotICAgIFVOVVNFRF9QQVJBTSh0ZXh0cyk7Ci0gICAgY29tcGxldGlvbih7IH0pOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI3VuZGVmIFdFQlBBR0VQUk9YWV9SRUxFQVNFX0xP
RwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZmI4NjhhZDQwYTBkZDVmNmIzMWRhNDMzOWE1YzM1ZTAxODA0YzQ0My4uOThkOTQzZWY3ZDE2
ZDVmMWIzZjgyNzAyMDNiZTRhYTIxYTE0NGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDI1LDYgKzY0MjUsOCBAQAogCQlGNDhC
QjhERjI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OEJCOEUwMjZGOTYzOTIwMDFDMUM0MCAvKiBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDhEMkE4NDIxNTgzQTAyMDBD
Njc1MkIgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGNDkzMjg4NTI3NjkwRkNGMDAzRTIwRjggLyogTW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RhbENvbnRhaW5l
ckNvbnRyb2xDbGFzc2lmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTMy
ODg2Mjc2OTBGQ0YwMDNFMjBGOCAvKiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3
IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8q
IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc1Q0YxMjYyNEI4MEEwMDND
NjI2RSAvKiBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
UXVpY2tMb29rUHJldmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc0MDgsNiArNzQxMCw4IEBACiAJCQkJOTM0MjU4OEYyNTU1RENBNTAwNTlFRUREIC8qIE1l
ZGlhUGVybWlzc2lvblV0aWxpdGllcy5tbSAqLywKIAkJCQk0MTEyODZFRjIxQzhBOTBDMDAzQTg1
NTAgLyogTWVkaWFVdGlsaXRpZXMuaCAqLywKIAkJCQk0MTEyODZGMDIxQzhBOTBEMDAzQTg1NTAg
LyogTWVkaWFVdGlsaXRpZXMubW0gKi8sCisJCQkJRjQ5MzI4ODUyNzY5MEZDRjAwM0UyMEY4IC8q
IE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCAqLywKKwkJCQlGNDkzMjg4NjI3Njkw
RkNGMDAzRTIwRjggLyogTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5tbSAqLywKIAkJ
CQk3MTM3QkE3RDI1RjE1M0U5MDA5MTRFRTMgLyogTW9kZWxFbGVtZW50Q29udHJvbGxlckNvY29h
Lm1tICovLAogCQkJCTFBQkMzREY0MTg5OUU0MzcwMDRGMDYyNiAvKiBOYXZpZ2F0aW9uU3RhdGUu
aCAqLywKIAkJCQkxQUJDM0RGMzE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLm1t
ICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447665</attachid>
            <date>2021-12-20 16:52:50 -0800</date>
            <delta_ts>2021-12-20 19:11:02 -0800</delta_ts>
            <desc>Ignore style error</desc>
            <filename>bug-234322-20211220165249.patch</filename>
            <type>text/plain</type>
            <size>18937</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM3MDIzYTMzN2Y0NTYzNjk0
MjhkZjc3NTNmODNhZjk2OWI4YTk4Y2YuLmNlMjU5M2ZjNWY4NGFjZTMyOTMyNDczOTcyMTcwNzcz
MGUyMmI1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjEtMTItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIE1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIgYW5kIHVzZSBpdCB0byBpbXBsZW1lbnQgY2xhc3NpZnlNb2Rh
bENvbnRhaW5lckNvbnRyb2xzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4K
KworICAgICAgICBJbnRyb2R1Y2UgYW5kIGltcGxlbWVudCBNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyLiBUaGlzIHNpbmdsZXRvbiB1c2VzIHRoZSBOYXR1cmFsTGFuZ3VhZ2UgYW5kIENv
cmVNTAorICAgICAgICBmcmFtZXdvcmtzIG9uIENvY29hIHRvIGNsYXNzaWZ5IHN0cmluZ3MgYXMg
b25lIG9mIGZvdXIgbW9kYWwgY29udGFpbmVyIGNvbnRyb2wgdHlwZXMuIFNlZSBiZWxvdyBmb3Ig
bW9yZQorICAgICAgICBkZXRhaWxzLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWluZXJDb250cm9s
Q2xhc3NpZmllci5tbTogQWRkZWQuCisgICAgICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lm
aWVyQmF0Y2ggaW5pdFdpdGhSYXdJbnB1dHM6XSk6CisgICAgICAgICgtW1dLTW9kYWxDb250YWlu
ZXJDbGFzc2lmaWVyQmF0Y2ggY291bnRdKToKKyAgICAgICAgKC1bV0tNb2RhbENvbnRhaW5lckNs
YXNzaWZpZXJCYXRjaCBmZWF0dXJlc0F0SW5kZXg6XSk6CisgICAgICAgICgtW1dLTW9kYWxDb250
YWluZXJDbGFzc2lmaWVySW5wdXQgaW5pdFdpdGhUb2tlbml6ZXI6cmF3SW5wdXQ6XSk6CisgICAg
ICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgZmVhdHVyZU5hbWVzXSk6Cisg
ICAgICAgICgtW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgZmVhdHVyZVZhbHVlRm9y
TmFtZTpdKToKKworICAgICAgICBBZGQgT2JqZWN0aXZlLUMgb2JqZWN0cyB0aGF0IGltcGxlbWVu
dCB0aGUgTUxCYXRjaFByb3ZpZGVyIGFuZCBNTEZlYXR1cmVQcm92aWRlciBwcm90b2NvbHMsIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgV0tNb2RhbENvbnRhaW5lckNsYXNzaWZpZXJCYXRjaCBpcyBl
c3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIGEgbGlzdCBvZiBXS01vZGFsQ29udGFpbmVyQ2xh
c3NpZmllcklucHV0OyBlYWNoCisgICAgICAgIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5w
dXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHJhdyBzdHJpbmcsIGFuZCB1c2VzIE5MVG9rZW5pemVy
IHRvIGZpbHRlciBvdXQgbm9uLXdvcmQKKyAgICAgICAgY2hhcmFjdGVycyBhbmQgdG9rZW5pemUg
dGhlIHJhdyBpbnB1dCBpbnRvIGEgc2luZ2xlIHNwYWNlLXNlcGFyYXRlZCwgbG93ZXIgY2FzZSBz
dHJpbmcgKHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICAiY2Fub25pY2FsIiBpbnB1dCBmb3Jt
YXQpLgorCisgICAgICAgIChXZWJLaXQ6Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6
Ok1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpNb2Rh
bENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpzaGFyZWRDbGFzc2lmaWVyKToKKworICAgICAg
ICBSZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodGhpcyBtdXN0IGJlIGFjY2Vzc2VkIG9u
IHRoZSBtYWluIHRocmVhZCkuCisKKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZVByZWRpY3Rpb25z
KToKKworICAgICAgICBTdGF0aWMgaGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIGEgbGlzdCBvZiBz
dHJpbmdzIGFuZCBhbiBNTE1vZGVsLCBhbmQgY2xhc3NpZmllcyBlYWNoIHN0cmluZyB1c2luZyB0
aGUgbW9kZWwsCisgICAgICAgIGFuZCB0aGUgT2JqZWN0aXZlLUMgaGVscGVyIGNsYXNzZXMgYWJv
dmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6
Y2xhc3NpZnkpOgorCisgICAgICAgIFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHByaW1hcnkgZnVu
Y3Rpb25hbGl0eSBvZiB0aGUgY2xhc3NpZmllciwgd2hpY2ggaXMgdG8gdGFrZSBhIGxpc3Qgb2Yg
cmF3IHN0cmluZ3MKKyAgICAgICAgcmVwcmVzZW50aW5nIHRleHQgaW4gY2xpY2thYmxlIGNvbnRy
b2xzLCBhbmQgYXN5bmNocm9ub3VzbHkgcmV0dXJuIGEgbGlzdCBvZiBjbGFzcyBsYWJlbHMgcmVw
cmVzZW50aW5nIHRoZQorICAgICAgICBwcmVkaWN0ZWQgY29udHJvbCB0eXBlIGZvciBlYWNoIG9m
IHRoZSBzdHJpbmdzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgaW52b2tlZCBv
biB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKGFuZCB3aWxsIGFsc28gaW52b2tlIHRoZSBjb21w
bGV0aW9uIGhhbmRsZXIgb24gdGhlIG1haW4gdGhyZWFkKSwgYnV0IHRoZSBwcm9jZXNzIG9mIGxv
YWRpbmcgdGhlIE1MTW9kZWwgYW5kCisgICAgICAgIHVzaW5nIGl0IHRvIHByZWRpY3QgaW5wdXQg
c3RyaW5ncyBpcyBkb25lIGluIGEgd29yayBxdWV1ZSAoImNvbS5hcHBsZS5XZWJLaXQuTW9kYWxD
b250YWluZXJDb250cm9sQ2xhc3NpZmllciIpLgorCisgICAgICAgIChXZWJLaXQ6Ok1vZGFsQ29u
dGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OmxvYWRNb2RlbElmTmVlZGVkKToKKworICAgICAgICBM
b2FkIHRoZSBNTE1vZGVsIGZyb20gYSBwcmVkZXRlcm1pbmVkIGJ1bmRsZSByZXNvdXJjZSBuYW1l
OyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBtb2RlbCBoYXMKKyAgICAgICAgYWxyZWFkeSBi
ZWVuIGNyZWF0ZWQuIFdoaWxlIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5LCB0aGlzIGlzIGFs
d2F5cyBpbnZva2VkIG9uIGEgYmFja2dyb3VuZCBxdWV1ZSBhbmQgbmV2ZXIKKyAgICAgICAgYmxv
Y2tzIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdl
UHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGFzc2lmeU1v
ZGFsQ29udGFpbmVyQ29udHJvbHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsYXNzaWZ5TW9kYWxDb250YWlu
ZXJDb250cm9scyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisKIDIwMjEtMTItMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBBUEkgYXZhaWxhYmlsaXR5IG1hY3JvcyBhcm91bmQg
c29tZSBXZWJYUiBTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjOGJlNTU4NjkyNzZlNTA2
MjBiZDMzNWMwMGU2NjZkZjJjNDU0YTk0Li42NWQ5MTgxYmEwYzllMTFkYzhiNmNmNGEwNzEyY2My
NTIzYzJmZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDMsNiArNDAzLDcgQEAgVUlQ
cm9jZXNzL0NvY29hL0ljb25Mb2FkaW5nRGVsZWdhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYVV0
aWxpdGllcy5tbQogVUlQcm9jZXNzL0NvY29hL01lZGlhUGVybWlzc2lvblV0aWxpdGllcy5tbQor
VUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KIFVJUHJv
Y2Vzcy9Db2NvYS9Nb2RlbEVsZW1lbnRDb250cm9sbGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Nb2RhbENvbnRh
aW5lckNvbnRyb2xDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9N
b2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWM0Mzg3NzA3Y2Q2
ZjIwNjc2NGE1OGY0OGY1MTNiNWE3YTAzMjNjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaApA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPHd0
Zi9Gb3J3YXJkLmg+CisKK0BjbGFzcyBNTE1vZGVsOworCituYW1lc3BhY2UgV2ViQ29yZSB7Citl
bnVtIGNsYXNzIE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGUgOiB1aW50OF90OworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXImIHNoYXJlZENsYXNzaWZpZXIoKTsKKworICAgIHZv
aWQgY2xhc3NpZnkoVmVjdG9yPFN0cmluZz4mJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxXZWJDb3JlOjpNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJik7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxNb2RhbENvbnRhaW5lckNvbnRyb2xD
bGFzc2lmaWVyPiBzdGQ6Om1ha2VfdW5pcXVlPE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZp
ZXI+KCk7CisKKyAgICBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyKCk7CisgICAgdm9p
ZCBsb2FkTW9kZWxJZk5lZWRlZCgpOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAg
ICBSZXRhaW5QdHI8TUxNb2RlbD4gbV9tb2RlbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kYWxDb250YWlu
ZXJDb250cm9sQ2xhc3NpZmllci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01v
ZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI5YzM3YjY0ODU1
MjY4Y2MyNTI4M2IyMDZjZDg5MjdlZDA0YmMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIubW0K
QEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIk1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCIKKworI2ltcG9ydCA8V2ViQ29y
ZS9Nb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlLmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQ29yZU1M
U29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9OYXR1cmFsTGFuZ3VhZ2VTb2Z0TGluay5o
PgorCitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IGNsYXNzaWZpZXJJbnB1dEZlYXR1cmVLZXkgPSBA
InRleHQiOworc3RhdGljIE5TU3RyaW5nICpjb25zdCBjbGFzc2lmaWVyT3V0cHV0RmVhdHVyZUtl
eSA9IEAibGFiZWwiOworCitAaW50ZXJmYWNlIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVyQmF0
Y2ggOiBOU09iamVjdDxNTEJhdGNoUHJvdmlkZXI+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhS
YXdJbnB1dHM6KFZlY3RvcjxTdHJpbmc+JiYpaW5wdXRTdHJpbmdzOworQGVuZAorCitAaW50ZXJm
YWNlIFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgOiBOU09iamVjdDxNTEZlYXR1cmVQ
cm92aWRlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRva2VuaXplcjooTkxUb2tlbml6ZXIg
Kil0b2tlbml6ZXIgcmF3SW5wdXQ6KE5TU3RyaW5nICopcmF3SW5wdXQ7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS01vZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIHsKKyAgICBWZWN0b3I8
UmV0YWluUHRyPFdLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQ+PiBfaW5wdXRzOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJbnB1dHM6KFZlY3RvcjxTdHJpbmc+JiYpaW5w
dXRTdHJpbmdzCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBhdXRvIHRva2VuaXplciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NOTFRv
a2VuaXplckluc3RhbmNlKCkgaW5pdFdpdGhVbml0Ok5MVG9rZW5Vbml0V29yZF0pOworICAgIF9p
bnB1dHMgPSBpbnB1dFN0cmluZ3MubWFwKFsmXShhdXRvJiByYXdJbnB1dCkgeworICAgICAgICBy
ZXR1cm4gYWRvcHROUyhbW1dLTW9kYWxDb250YWluZXJDbGFzc2lmaWVySW5wdXQgYWxsb2NdIGlu
aXRXaXRoVG9rZW5pemVyOnRva2VuaXplci5nZXQoKSByYXdJbnB1dDpyYXdJbnB1dF0pOworICAg
IH0pOworICAgIHJldHVybiBzZWxmOworfQorCistIChOU0ludGVnZXIpY291bnQKK3sKKyAgICBy
ZXR1cm4gX2lucHV0cy5zaXplKCk7Cit9CisKKy0gKGlkIDxNTEZlYXR1cmVQcm92aWRlcj4pZmVh
dHVyZXNBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPj0gc3RhdGlj
X2Nhc3Q8TlNJbnRlZ2VyPihfaW5wdXRzLnNpemUoKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgcmV0dXJuIF9pbnB1
dHNbaW5kZXhdLmdldCgpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS01vZGFsQ29u
dGFpbmVyQ2xhc3NpZmllcklucHV0IHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9jYW5vbmlj
YWxJbnB1dDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVG9rZW5pemVyOihOTFRva2Vu
aXplciAqKXRva2VuaXplciByYXdJbnB1dDooTlNTdHJpbmcgKilyYXdJbnB1dAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgW3Rv
a2VuaXplciBzZXRTdHJpbmc6cmF3SW5wdXRdOworCisgICAgYXV0byB0b2tlbnMgPSBhZG9wdE5T
KFtOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiBuZXddKTsKKyAgICBbdG9rZW5pemVyIGVudW1l
cmF0ZVRva2Vuc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmF3SW5wdXQubGVuZ3RoKSB1c2luZ0Js
b2NrOlsmXShOU1JhbmdlIHJhbmdlLCBOTFRva2VuaXplckF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
Qk9PTCAqc3RvcCkgeworICAgICAgICBpZiAoYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBOU1N0cmluZyAqbG93ZXJjYXNlVG9rZW4gPSBbcmF3SW5wdXQgc3Vic3Ry
aW5nV2l0aFJhbmdlOnJhbmdlXS5sb3dlcmNhc2VTdHJpbmc7CisgICAgICAgIGlmICghbG93ZXJj
YXNlVG9rZW4ubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFt0b2tlbnMg
YWRkT2JqZWN0Omxvd2VyY2FzZVRva2VuXTsKKyAgICB9XTsKKworICAgIF9jYW5vbmljYWxJbnB1
dCA9IFt0b2tlbnMgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiICJdOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKWZlYXR1cmVOYW1lcworeworICAgIHJl
dHVybiBbTlNTZXQ8TlNTdHJpbmcgKj4gc2V0V2l0aE9iamVjdDpjbGFzc2lmaWVySW5wdXRGZWF0
dXJlS2V5XTsKK30KKworLSAoTUxGZWF0dXJlVmFsdWUgKilmZWF0dXJlVmFsdWVGb3JOYW1lOihO
U1N0cmluZyAqKWZlYXR1cmVOYW1lCit7CisgICAgcmV0dXJuIFtmZWF0dXJlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6Y2xhc3NpZmllcklucHV0RmVhdHVyZUtleV0gPyBbUEFMOjpnZXRNTEZlYXR1cmVW
YWx1ZUNsYXNzKCkgZmVhdHVyZVZhbHVlV2l0aFN0cmluZzpfY2Fub25pY2FsSW5wdXQuZ2V0KCld
IDogbmlsOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK01vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI6Ok1vZGFsQ29udGFp
bmVyQ29udHJvbENsYXNzaWZpZXIoKQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
Y29tLmFwcGxlLldlYktpdC5Nb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyIikpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKworTW9kYWxDb250YWluZXJDb250cm9s
Q2xhc3NpZmllciYgTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllcjo6c2hhcmVkQ2xhc3Np
ZmllcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxNb2Rh
bENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyPj4gY2xhc3NpZmllcjsKKyAgICBpZiAoIWNsYXNz
aWZpZXIuZ2V0KCkpCisgICAgICAgIGNsYXNzaWZpZXIuZ2V0KCkgPSBtYWtlVW5pcXVlPE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXI+KCk7CisgICAgcmV0dXJuICpjbGFzc2lmaWVyLmdl
dCgpOworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6Ok1vZGFsQ29udGFpbmVyQ29udHJvbFR5
cGU+IGNvbXB1dGVQcmVkaWN0aW9ucyhNTE1vZGVsICptb2RlbCwgVmVjdG9yPFN0cmluZz4mJiB0
ZXh0cykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIW1vZGVs
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBiYXRjaCA9IGFkb3B0TlMoW1tXS01v
ZGFsQ29udGFpbmVyQ2xhc3NpZmllckJhdGNoIGFsbG9jXSBpbml0V2l0aFJhd0lucHV0czpXVEZN
b3ZlKHRleHRzKV0pOworICAgIE5TRXJyb3IgKnByZWRpY3Rpb25FcnJvciA9IG5pbDsKKyAgICBh
dXRvIHJlc3VsdFByb3ZpZGVyID0gW21vZGVsIHByZWRpY3Rpb25zRnJvbUJhdGNoOmJhdGNoLmdl
dCgpIGVycm9yOiZwcmVkaWN0aW9uRXJyb3JdOworICAgIGlmIChwcmVkaWN0aW9uRXJyb3IgfHwg
cmVzdWx0UHJvdmlkZXIuY291bnQgPCBbYmF0Y2ggY291bnRdKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBtYXkgd2FudCB0byBsb2cgdGhlIGVycm9yIGhlcmUuCisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgVmVjdG9yPE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+IHJlc3VsdHM7
CisgICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdFByb3ZpZGVyLmNvdW50
KTsKKworICAgIGZvciAoTlNJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHRQcm92aWRl
ci5jb3VudDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IFtyZXN1bHRQcm92aWRl
ciBmZWF0dXJlc0F0SW5kZXg6aW5kZXhdOworICAgICAgICBhdXRvIHN0cmluZ1Jlc3VsdCA9IFty
ZXN1bHQgZmVhdHVyZVZhbHVlRm9yTmFtZTpjbGFzc2lmaWVyT3V0cHV0RmVhdHVyZUtleV0uc3Ry
aW5nVmFsdWU7CisgICAgICAgIGlmIChbc3RyaW5nUmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIm5l
dXRyYWwiXSkKKyAgICAgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBwZW5kKE1vZGFsQ29udGFp
bmVyQ29udHJvbFR5cGU6Ok5ldXRyYWwpOworICAgICAgICBlbHNlIGlmIChbc3RyaW5nUmVzdWx0
IGlzRXF1YWxUb1N0cmluZzpAInBvc2l0aXZlIl0pCisgICAgICAgICAgICByZXN1bHRzLnVuY2hl
Y2tlZEFwcGVuZChNb2RhbENvbnRhaW5lckNvbnRyb2xUeXBlOjpQb3NpdGl2ZSk7CisgICAgICAg
IGVsc2UgaWYgKFtzdHJpbmdSZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAibmVnYXRpdmUiXSkKKyAg
ICAgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBwZW5kKE1vZGFsQ29udGFpbmVyQ29udHJvbFR5
cGU6Ok5lZ2F0aXZlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0cy51bmNoZWNr
ZWRBcHBlbmQoTW9kYWxDb250YWluZXJDb250cm9sVHlwZTo6T3RoZXIpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHRzOworfQorCit2b2lkIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNzaWZp
ZXI6OmNsYXNzaWZ5KFZlY3RvcjxTdHJpbmc+JiYgdGV4dHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPE1vZGFsQ29udGFpbmVyQ29udHJvbFR5cGU+JiYpPiYmIGNvbXBsZXRpb24pCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgdGV4dHMgPSB0ZXh0cy5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbiA9IFdURk1vdmUo
Y29tcGxldGlvbildKCkgbXV0YWJsZSB7CisgICAgICAgIGxvYWRNb2RlbElmTmVlZGVkKCk7Cisg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbiA9IFdURk1vdmUoY29t
cGxldGlvbiksIHByZWRpY3Rpb25zID0gY29tcHV0ZVByZWRpY3Rpb25zKG1fbW9kZWwuZ2V0KCks
IFdURk1vdmUodGV4dHMpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb24oV1RG
TW92ZShwcmVkaWN0aW9ucykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBNb2Rh
bENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyOjpsb2FkTW9kZWxJZk5lZWRlZCgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKG1fbW9kZWwpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVy
OkAiY29tLmFwcGxlLldlYktpdCJdOworICAgIGF1dG8gY29tcGlsZWRNb2RlbFVSTCA9IFtidW5k
bGUgVVJMRm9yUmVzb3VyY2U6QCJNb2RhbENvbnRhaW5lckNvbnRyb2xzIiB3aXRoRXh0ZW5zaW9u
OkAibWxtb2RlbGMiXTsKKyAgICBpZiAoIWNvbXBpbGVkTW9kZWxVUkwpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1BBTDo6YWxsb2NNTE1vZGVs
Q29uZmlndXJhdGlvbkluc3RhbmNlKCkgaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldENv
bXB1dGVVbml0czpNTENvbXB1dGVVbml0c0NQVU9ubHldOworICAgIE5TRXJyb3IgKmxvYWRpbmdF
cnJvciA9IG5pbDsKKyAgICBtX21vZGVsID0gW1BBTDo6Z2V0TUxNb2RlbENsYXNzKCkgbW9kZWxX
aXRoQ29udGVudHNPZlVSTDpjb21waWxlZE1vZGVsVVJMIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKSBlcnJvcjombG9hZGluZ0Vycm9yXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJv
eHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNv
Y29hLm1tCmluZGV4IDZhNTBhMDgxMDMzOTU4NjU4MzlmZmE3ODBlODM1Yjc1ODMzNWZhYmUuLjI5
ZjkxNzc0NTk2Y2YwMDRjZDBkNTdiNWVhMzg2YjVjYjIzM2IzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW1wb3J0ICJEYXRhRGV0ZWN0aW9uUmVzdWx0LmgiCiAjaW1wb3J0ICJJbnNlcnRU
ZXh0T3B0aW9ucy5oIgogI2ltcG9ydCAiTG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIk1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNp
bXBvcnQgIlF1YXJhbnRpbmVTUEkuaCIKICNpbXBvcnQgIlF1aWNrTG9va1RodW1ibmFpbExvYWRl
ci5oIgpAQCAtNzk3LDYgKzc5OCwxMSBAQCBib29sIFdlYlBhZ2VQcm94eTo6aXNRdWFyYW50aW5l
ZEFuZE5vdFVzZXJBcHByb3ZlZChjb25zdCBTdHJpbmcmIGZpbGVVUkxTdHJpbmcpCiB9CiAjZW5k
aWYKIAordm9pZCBXZWJQYWdlUHJveHk6OmNsYXNzaWZ5TW9kYWxDb250YWluZXJDb250cm9scyhW
ZWN0b3I8U3RyaW5nPiYmIHRleHRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxNb2Rh
bENvbnRhaW5lckNvbnRyb2xUeXBlPiYmKT4mJiBjb21wbGV0aW9uKQoreworICAgIE1vZGFsQ29u
dGFpbmVyQ29udHJvbENsYXNzaWZpZXI6OnNoYXJlZENsYXNzaWZpZXIoKS5jbGFzc2lmeShXVEZN
b3ZlKHRleHRzKSwgV1RGTW92ZShjb21wbGV0aW9uKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjdW5kZWYgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBiYjZlNmFhNjA5OTdhMGY3ZjRiNTA3MTVjNWY2
MDE1NmJmMjhiMTliLi41ZmY2MGU3YTRiNzljYmU4YjhjOWE0M2I5YTQwNzI5MWZjZjJlZDM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTExMDAyLDYgKzEx
MDAyLDExIEBAIFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IFdlYlBhZ2VQcm94eTo6
Y3JlYXRlTmV0d29ya0V4dGVuc2lvbnNTYW5kYm94RXh0CiB7CiAgICAgcmV0dXJuIHsgfTsKIH0K
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNsYXNzaWZ5TW9kYWxDb250YWluZXJDb250cm9scyhWZWN0
b3I8U3RyaW5nPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxNb2RhbENvbnRhaW5l
ckNvbnRyb2xUeXBlPiYmKT4mJiBjb21wbGV0aW9uKQoreworICAgIGNvbXBsZXRpb24oeyB9KTsK
K30KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpCkBAIC0x
MTA1MiwxMyArMTEwNTcsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdENvb2tpZUNvbnNl
bnQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChDb29raWVDb25zZW50RGVjaQogICAgIG1fdWlDbGll
bnQtPnJlcXVlc3RDb29raWVDb25zZW50KFdURk1vdmUoY29tcGxldGlvbikpOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6Y2xhc3NpZnlNb2RhbENvbnRhaW5lckNvbnRyb2xzKFZlY3RvcjxTdHJp
bmc+JiYgdGV4dHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPE1vZGFsQ29udGFpbmVy
Q29udHJvbFR5cGU+JiYpPiYmIGNvbXBsZXRpb24pCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCi0gICAgVU5VU0VEX1BBUkFNKHRleHRzKTsKLSAgICBjb21wbGV0aW9uKHsg
fSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgV0VCUEFHRVBST1hZX1JF
TEVBU0VfTE9HCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBmYjg2OGFkNDBhMGRkNWY2YjMxZGE0MzM5YTVjMzVlMDE4MDRjNDQzLi45OGQ5
NDNlZjdkMTZkNWYxYjNmODI3MDIwM2JlNGFhMjFhMTQ0ZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MjUsNiArNjQyNSw4IEBA
CiAJCUY0OEJCOERGMjZGOTYzOTIwMDFDMUM0MCAvKiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ4QkI4RTAyNkY5NjM5MjAwMUMxQzQwIC8qIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OEQyQTg0MjE1
ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTMyODg1Mjc2OTBGQ0YwMDNFMjBGOCAv
KiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGFs
Q29udGFpbmVyQ29udHJvbENsYXNzaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjQ5MzI4ODYyNzY5MEZDRjAwM0UyMEY4IC8qIE1vZGFsQ29udGFpbmVyQ29udHJvbENsYXNz
aWZpZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFz
c2lmaWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQyRjFGNThBMjcy
MDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERy
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0
QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NzVDRjEyNjI0
QjgwQTAwM0M2MjZFIC8qIFdLUXVpY2tMb29rUHJldmlld0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzQwOCw2ICs3NDEwLDggQEAKIAkJCQk5MzQyNTg4RjI1NTVEQ0E1MDA1OUVF
REQgLyogTWVkaWFQZXJtaXNzaW9uVXRpbGl0aWVzLm1tICovLAogCQkJCTQxMTI4NkVGMjFDOEE5
MEMwMDNBODU1MCAvKiBNZWRpYVV0aWxpdGllcy5oICovLAogCQkJCTQxMTI4NkYwMjFDOEE5MEQw
MDNBODU1MCAvKiBNZWRpYVV0aWxpdGllcy5tbSAqLywKKwkJCQlGNDkzMjg4NTI3NjkwRkNGMDAz
RTIwRjggLyogTW9kYWxDb250YWluZXJDb250cm9sQ2xhc3NpZmllci5oICovLAorCQkJCUY0OTMy
ODg2Mjc2OTBGQ0YwMDNFMjBGOCAvKiBNb2RhbENvbnRhaW5lckNvbnRyb2xDbGFzc2lmaWVyLm1t
ICovLAogCQkJCTcxMzdCQTdEMjVGMTUzRTkwMDkxNEVFMyAvKiBNb2RlbEVsZW1lbnRDb250cm9s
bGVyQ29jb2EubW0gKi8sCiAJCQkJMUFCQzNERjQxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRp
b25TdGF0ZS5oICovLAogCQkJCTFBQkMzREYzMTg5OUU0MzcwMDRGMDYyNiAvKiBOYXZpZ2F0aW9u
U3RhdGUubW0gKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>