<?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>49837</bug_id>
          
          <creation_ts>2010-11-19 15:15:47 -0800</creation_ts>
          <short_desc>Loader cleanup: Make Loader per-request, attach to CachedResourceLoader</short_desc>
          <delta_ts>2010-12-20 14:02:50 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311715</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-19 15:15:47 -0800</bug_when>
    <thetext>This changes will give each request its own Loader, effectively merging Loader and Request.

After this change, Loader should be renamed to something more descriptive (maybe CachedResourceRequest?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311721</commentid>
    <comment_count>1</comment_count>
      <attachid>74431</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-19 15:20:46 -0800</bug_when>
    <thetext>Created attachment 74431
patch

Note that I have not thoroughly tested this patch yet (it passes layout tests, but I haven&apos;t done extensive browsing with it yet).  I figured I should get some eyes more on it to check whether the general design seems sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313847</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-25 13:13:17 -0800</bug_when>
    <thetext>I like the design direction. Eliminating Request is very nice. Loader seriously needs renaming after this.

Could you explain the rationale for this change bit more (in the ChangeLog too)?

Looks good but I&apos;ll have try it before r+&apos;ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315131</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-30 10:15:45 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I like the design direction. Eliminating Request is very nice. Loader seriously needs renaming after this.
&gt; 
&gt; Could you explain the rationale for this change bit more (in the ChangeLog too)?
&gt; 
&gt; Looks good but I&apos;ll have try it before r+&apos;ing.

The rationale is something like:
(1) Loader shouldn&apos;t be a member of MemoryCache (especially since we&apos;re trying to make MemoryCache storage-only, and not involved in the actual loading process).  It should be a member of CachedResourceLoader.
(2) Loader no longer needs to be a singleton if it&apos;s not tied to MemoryCache.  Request&apos;s only purpose is to store per-request data that Loader can&apos;t store because it&apos;s a singleton.  Ergo, merge the two.

I&apos;ll upload a new patch with a more descriptive ChangeLog in a bit once I&apos;ve had a chance to test the patch a little bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315234</commentid>
    <comment_count>4</comment_count>
      <attachid>75181</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-30 12:20:02 -0800</bug_when>
    <thetext>Created attachment 75181
More descriptive ChangeLog and merged to tip of tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315271</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-30 13:26:13 -0800</bug_when>
    <thetext>Attachment 75181 did not build on mac:
Build output: http://queues.webkit.org/results/6447048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319635</commentid>
    <comment_count>6</comment_count>
      <attachid>75181</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-09 11:55:34 -0800</bug_when>
    <thetext>Comment on attachment 75181
More descriptive ChangeLog and merged to tip of tree

r=me but please rename Loader to something more sensible in a follow-up patch and fix naming problems like:

void setRequest(Loader*)

at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319696</commentid>
    <comment_count>7</comment_count>
      <attachid>75181</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-09 13:48:42 -0800</bug_when>
    <thetext>Comment on attachment 75181
More descriptive ChangeLog and merged to tip of tree

Rejecting patch 75181 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=both&apos;]&quot; exit_code: 2
Last 500 characters of output:
ERSION_MAJOR 0300
    setenv XCODE_VERSION_MINOR 0320
    setenv YACC /Developer/usr/bin/yacc
    /bin/sh -c /Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Script-5DF50887116F3077005202AB.sh

** BUILD FAILED **


The following build commands failed:
WebCore:
	CompileC /Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/loader.o /Projects/CommitQueue/WebCore/loader/loader.cpp normal x86_64 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://queues.webkit.org/results/6965014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324563</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-20 14:02:50 -0800</bug_when>
    <thetext>Looks like I forgot to close this: http://trac.webkit.org/changeset/73749.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74431</attachid>
            <date>2010-11-19 15:20:46 -0800</date>
            <delta_ts>2010-11-30 12:20:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>request.txt</filename>
            <type>text/plain</type>
            <size>36122</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzI0MTApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYzLDcgKzEwNjMsNiBAQAogICAgIGxvYWRlci9Qb2xpY3lDaGVja2VyLmNwcCBc
CiAgICAgbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAgXAogICAgIGxvYWRlci9OYXZpZ2F0aW9u
U2NoZWR1bGVyLmNwcCBcCi0gICAgbG9hZGVyL1JlcXVlc3QuY3BwIFwKICAgICBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIFwK
ICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBcCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzI0MzMp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisy
MDEwLTExLTE5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2UgTG9hZGVyIGFuZCBS
ZXF1ZXN0LiBSYXRoZXIgdGhhbiBhIHNpbmdsZSBpbnN0YW5jZSBvZiBMb2FkZXIsCisgICAgICAg
IHRoZXJlIGlzIG5vdyBvbmUgZm9yIGVhY2ggbG9hZCBpbml0aWF0ZWQgYnkgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuCisgICAgICAgIExvYWRlciB3aWxsIGJlIGdpdmVuIGEgbW9yZSBkZXNjcmlwdGl2
ZSBuYW1lIGluIGEgbGF0ZXIgcGF0Y2guCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTgzNworCisgICAgICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgICogbG9hZGVyL1JlcXVlc3QuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXF1ZXN0Lmg6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJ
bWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWREb25lKTogV2FzIHNl
dExvYWRJblByb2dyZXNzKGZhbHNlKSwKKyAgICAgICAgICAgIHBsdXMgb3RoZXIgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIgY2xlYW51cCB0aGF0IGhhZCBiZWVuIGhhbmRsZWQgaW4gTG9hZGVyLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKTogTW92
ZWQgZnJvbSBMb2FkZXIuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdENvdW50KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRmluaXNo
aW5nKTogV2FzIHNldExvYWRJblByb2dyZXNzKHRydWUpCisgICAgICAgICogbG9hZGVyL2NhY2hl
L01lbW9yeUNhY2hlLmg6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMb2FkZXI6OkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6On5Mb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmRpZEZhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6
OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpjYWNoZWRSZXNvdXJjZUxvYWRlcik6CisKIDIwMTAt
MTEtMTggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcyNDEwKQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTk4OCw4ICsxOTg4LDYgQEAKIAlX
ZWJDb3JlL2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIvTmF2aWdh
dGlvblNjaGVkdWxlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIu
aCBcCi0JV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL1JlcXVl
c3QuaCBcCiAJV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIFwKIAlXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcyNDEwKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTIwOTEsOCArMjA5MSw2IEBACiAgICAgICAgICAgICAnbG9h
ZGVyL1Byb2dyZXNzVHJhY2tlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvTmF2aWdhdGlvblNj
aGVkdWxlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmgn
LAotICAgICAgICAgICAgJ2xvYWRlci9SZXF1ZXN0LmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVy
L1JlcXVlc3QuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAnLApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MjQxMCkK
KysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExNjAsNyArMTE2
MCw2IEBACiAgICAgbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCiAgICAgbG9hZGVyL1Byb2dyZXNz
VHJhY2tlci5jcHAKICAgICBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKLSAgICBsb2Fk
ZXIvUmVxdWVzdC5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCiAgICAg
bG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9B
bmRyb2lkLm1rCShyZXZpc2lvbiA3MjQxMCkKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2lu
ZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw2IEBACiAJbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwIFwK
IAlsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCBcCiAJbG9hZGVyL05hdmlnYXRpb25TY2hlZHVs
ZXIuY3BwIFwKLQlsb2FkZXIvUmVxdWVzdC5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgXAogCWxvYWRlci9TdWJmcmFt
ZUxvYWRlci5jcHAgXApJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDcyNDEwKQorKysgV2ViQ29yZS9s
b2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI0ICszNSwyOSBAQAogICAgIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlcXVlc3Q7CiAKLSAgICBjbGFz
cyBMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUsIHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQgeworICAgIGNsYXNzIExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPExvYWRlcj4sIHBy
aXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgewogICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TG9hZGVyPiBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVk
UmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpO1wKICAgICAgICAgfkxvYWRlcigpOworICAgICAgICB2
b2lkIGRpZEZhaWwoYm9vbCBjYW5jZWxsZWQgPSBmYWxzZSk7CiAKLSAgICAgICAgdm9pZCBsb2Fk
KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFs
ID0gdHJ1ZSwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7Ci0gICAgICAgIHZvaWQgY2FuY2VsUmVxdWVz
dHMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRSZXNvdXJjZUxv
YWRlcjsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgTG9hZGVyKENhY2hlZFJlc291cmNlTG9h
ZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2Fj
aGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJik7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGJv
b2wgY2FuY2VsbGVkID0gZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOwotICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOworCisgICAgICAgIFJlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBtX2Nh
Y2hlZFJlc291cmNlTG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsK
KyAgICAgICAgYm9vbCBtX2luY3JlbWVudGFsOworICAgICAgICBib29sIG1fbXVsdGlwYXJ0Owor
ICAgICAgICBib29sIG1fZmluaXNoaW5nOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDcyNDEwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNyArNDI3LDcgQEAKICAgICAgICAgZG9jLT5zZXRS
ZWFkeVN0YXRlKERvY3VtZW50OjpDb21wbGV0ZSk7CiAKICAgICAgICAgaWYgKENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvYy0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKSkKLSAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5jYW5jZWxSZXF1ZXN0cyhjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+Y2Fu
Y2VsUmVxdWVzdHMoKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgaWYgKGRhdGFi
YXNlUG9saWN5ID09IERhdGFiYXNlUG9saWN5U3RvcCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuY3BwCShyZXZpc2lvbiA3MjQxMCkKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
TWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgpAQCAtOTgsNyAr
OTksNyBAQAogewogICAgIGlmICghbV9sb2FkSW5pdGlhdGVkKSB7CiAgICAgICAgIG1fbG9hZElu
aXRpYXRlZCA9IHRydWU7Ci0gICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKGRsLCB0aGlz
LCBmYWxzZSk7CisgICAgICAgIGRsLT5sb2FkKHRoaXMsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMTA0LDkgKzEwMyw2IEBACiAgICAgICAgIFR5cGVT
dGF0aXN0aWMgZm9udHM7CiAgICAgfTsKIAotICAgIC8vIFRoZSBsb2FkZXIgdGhhdCBmZXRjaGVz
IHJlc291cmNlcy4KLSAgICBMb2FkZXIqIGxvYWRlcigpIHsgcmV0dXJuICZtX2xvYWRlcjsgfQot
CiAgICAgLy8gUmVxdWVzdCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBBIGxvYWQgd2lsbCBi
ZSBpbml0aWF0ZWQgYW5kIGEgY2FjaGUgb2JqZWN0IGNyZWF0ZWQgaWYgdGhlIG9iamVjdCBpcyBu
b3QKICAgICAvLyBmb3VuZCBpbiB0aGUgY2FjaGUuCiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlOjpUeXBlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQgPSBm
YWxzZSwgYm9vbCBmb3JIaXN0b3J5ID0gZmFsc2UpOwpAQCAtMTkxLDcgKzE4Nyw2IEBACiAKICAg
ICAvLyBNZW1iZXIgdmFyaWFibGVzLgogICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VMb2FkZXIq
PiBtX2NhY2hlZFJlc291cmNlTG9hZGVyczsKLSAgICBMb2FkZXIgbV9sb2FkZXI7CiAKICAgICBi
b29sIG1fZGlzYWJsZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgaXMgZW5hYmxlZC4K
ICAgICBib29sIG1fcHJ1bmVFbmFibGVkOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDcgQEAKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3JlcXVlc3RD
b3VudCgwKQogICAgICwgbV9hdXRvTG9hZEltYWdlcyh0cnVlKQotICAgICwgbV9sb2FkSW5Qcm9n
cmVzcyhmYWxzZSkKKyAgICAsIG1fbG9hZEZpbmlzaGluZyhmYWxzZSkKICAgICAsIG1fYWxsb3dT
dGFsZVJlc291cmNlcyhmYWxzZSkKIHsKICAgICBtX2NhY2hlLT5hZGRDYWNoZWRSZXNvdXJjZUxv
YWRlcih0aGlzKTsKQEAgLTYzLDkgKzYzLDcgQEAKIAogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5D
YWNoZWRSZXNvdXJjZUxvYWRlcigpCiB7Ci0gICAgaWYgKG1fcmVxdWVzdENvdW50KQotICAgICAg
ICBtX2NhY2hlLT5sb2FkZXIoKS0+Y2FuY2VsUmVxdWVzdHModGhpcyk7Ci0KKyAgICBjYW5jZWxS
ZXF1ZXN0cygpOwogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9j
dW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTEzNyw3ICsxMzUsNyBAQAogICAgIENhY2hlZEltYWdl
KiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CiAgICAgaWYgKGF1
dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkp
IHsKICAgICAgICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGNhY2hlKCkt
PmxvYWRlcigpLT5sb2FkKHRoaXMsIHJlc291cmNlLCB0cnVlKTsKKyAgICAgICAgbG9hZChyZXNv
dXJjZSwgdHJ1ZSk7CiAgICAgfQogICAgIHJldHVybiByZXNvdXJjZTsKIH0KQEAgLTMxNCw3ICsz
MTIsNyBAQAogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2FzdDxDYWNo
ZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2UpKTsKIAog
ICAgICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRzTG9hZCgpKQotICAgICAgICAgICAgICAg
IGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKHRoaXMsIGltYWdlLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBsb2FkKGltYWdlLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMzNCwxMyAr
MzMyLDM4IEBACiAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgp
KTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0TG9hZEluUHJvZ3Jlc3MoYm9v
bCBsb2FkKQordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG9hZChDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlD
aGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewotICAgIG1fbG9hZEluUHJv
Z3Jlc3MgPSBsb2FkOwotICAgIGlmICghbG9hZCAmJiBmcmFtZSgpKQorICAgIGluY3JlbWVudFJl
cXVlc3RDb3VudChyZXNvdXJjZSk7CisKKyAgICBSZWZQdHI8TG9hZGVyPiByZXF1ZXN0ID0gTG9h
ZGVyOjpsb2FkKHRoaXMsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIG1fcmVx
dWVzdHMuYWRkKHJlcXVlc3QpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2Fk
RG9uZShMb2FkZXIqIHJlcXVlc3QpCit7CisgICAgbV9sb2FkRmluaXNoaW5nID0gZmFsc2U7Cisg
ICAgUmVmUHRyPExvYWRlcj4gcHJvdGVjdChyZXF1ZXN0KTsKKyAgICBpZiAocmVxdWVzdCkKKyAg
ICAgICAgbV9yZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAgaWYgKGZyYW1lKCkpCiAgICAg
ICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2FkRG9uZSgpOworICAgIGNoZWNrRm9yUGVuZGluZ1By
ZWxvYWRzKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhbmNlbFJlcXVlc3Rz
KCkKK3sKKyAgICBjbGVhclBlbmRpbmdQcmVsb2FkcygpOworICAgIFZlY3RvcjxMb2FkZXIqLCAy
NTY+IHJlcXVlc3RzVG9DYW5jZWw7CisgICAgUmVxdWVzdFNldDo6aXRlcmF0b3IgZW5kID0gbV9y
ZXF1ZXN0cy5lbmQoKTsKKyAgICBmb3IgKFJlcXVlc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX3JlcXVl
c3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIHJlcXVlc3RzVG9DYW5jZWwuYXBw
ZW5kKCgqaSkuZ2V0KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcXVlc3Rz
VG9DYW5jZWwuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlcXVlc3RzVG9DYW5jZWxbaV0tPmRpZEZh
aWwodHJ1ZSk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrQ2FjaGVPYmpl
Y3RTdGF0dXMoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogICAgIC8vIFJldHVybiBmcm9t
IHRoZSBmdW5jdGlvbiBmb3Igb2JqZWN0cyB0aGF0IHdlIGRpZG4ndCBsb2FkIGZyb20gdGhlIGNh
Y2hlIG9yIGlmIHdlIGRvbid0IGhhdmUgYSBmcmFtZS4KQEAgLTM3MCw3ICszOTMsNyBAQAogCiBp
bnQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDb3VudCgpCiB7Ci0gICAgaWYgKGxvYWRJ
blByb2dyZXNzKCkpCisgICAgaWYgKG1fbG9hZEZpbmlzaGluZykKICAgICAgICAgIHJldHVybiBt
X3JlcXVlc3RDb3VudCArIDE7CiAgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50OwogfQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgpAQCAtODYsOCArODcsMTAgQEAKIAogICAgIHZvaWQgcmVtb3ZlQ2Fj
aGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKSBjb25zdDsKIAotICAgIHZvaWQgc2V0TG9hZElu
UHJvZ3Jlc3MoYm9vbCk7Ci0gICAgYm9vbCBsb2FkSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fbG9hZEluUHJvZ3Jlc3M7IH0KKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2UqLCBib29s
IGluY3JlbWVudGFsID0gZmFsc2UsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hl
Y2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUpOworICAgIHZvaWQgbG9h
ZEZpbmlzaGluZygpIHsgbV9sb2FkRmluaXNoaW5nID0gdHJ1ZTsgfQorICAgIHZvaWQgbG9hZERv
bmUoTG9hZGVyKik7CisgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cygpOwogICAgIAogICAgIHZvaWQg
c2V0QWxsb3dTdGFsZVJlc291cmNlcyhib29sIGFsbG93U3RhbGVSZXNvdXJjZXMpIHsgbV9hbGxv
d1N0YWxlUmVzb3VyY2VzID0gYWxsb3dTdGFsZVJlc291cmNlczsgfQogCkBAIC0xMTMsNiArMTE2
LDkgQEAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWxvYWRlZFVSTHM7CiAgICAgbXV0YWJsZSBE
b2N1bWVudFJlc291cmNlTWFwIG1fZG9jdW1lbnRSZXNvdXJjZXM7CiAgICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPExvYWRlcj4gPiBSZXF1ZXN0
U2V0OworICAgIFJlcXVlc3RTZXQgbV9yZXF1ZXN0czsKICAgICAKICAgICBpbnQgbV9yZXF1ZXN0
Q291bnQ7CiAgICAgCkBAIC0xMjYsNyArMTMyLDcgQEAKICAgICAKICAgICAvLzI5IGJpdHMgbGVm
dAogICAgIGJvb2wgbV9hdXRvTG9hZEltYWdlcyA6IDE7Ci0gICAgYm9vbCBtX2xvYWRJblByb2dy
ZXNzIDogMTsKKyAgICBib29sIG1fbG9hZEZpbmlzaGluZyA6IDE7CiAgICAgYm9vbCBtX2FsbG93
U3RhbGVSZXNvdXJjZXMgOiAxOwogfTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmNwcAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlB1cmdlYWJsZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIlJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgpAQCAtMTA2LDcgKzEwNiw3IEBACiB2
b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlciwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0
eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgbV9zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzID0gc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKLSAgICBjYWNo
ZSgpLT5sb2FkZXIoKS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlciwgdGhpcywgaW5jcmVtZW50
YWwsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGNhY2hl
ZFJlc291cmNlTG9hZGVyLT5sb2FkKHRoaXMsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogfQogCkBA
IC0yMDEsNyArMjAxLDcgQEAKICAgICByZXR1cm4gbV9jYWNoZWRNZXRhZGF0YS5nZXQoKTsKIH0K
IAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0KiByZXF1ZXN0KQordm9p
ZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChMb2FkZXIqIHJlcXVlc3QpCiB7CiAgICAgaWYg
KHJlcXVlc3QgJiYgIW1fcmVxdWVzdCkKICAgICAgICAgbV9zdGF0dXMgPSBQZW5kaW5nOwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA3MjQxMCkKKysr
IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDggKzQzLDggQEAKIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgRnJhbWU7
CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKK2NsYXNzIExvYWRlcjsKIGNsYXNzIFB1cmdlYWJs
ZUJ1ZmZlcjsKLWNsYXNzIFJlcXVlc3Q7CiAKIC8vIEEgcmVzb3VyY2UgdGhhdCBpcyBoZWxkIGlu
IHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hvdWxkIGRl
cml2ZQogLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5jdGlvbiBj
YWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4KQEAgLTE0OSw3ICsx
NDksNyBAQAogICAgIHZvaWQgc2V0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoYm9vbCBiKSB7
IG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgPSBiOyB9CiAgICAgYm9vbCBpbkxpdmVEZWNv
ZGVkUmVzb3VyY2VzTGlzdCgpIHsgcmV0dXJuIG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Q7
IH0KICAgICAKLSAgICB2b2lkIHNldFJlcXVlc3QoUmVxdWVzdCopOworICAgIHZvaWQgc2V0UmVx
dWVzdChMb2FkZXIqKTsKIAogICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgpIGNvbnN0IHsgQVNTRVJU
KCFtX3B1cmdlYWJsZURhdGEpOyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAKQEAgLTIxNSw3ICsy
MTUsNyBAQAogCiAgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmluZyBtX2FjY2VwdDsKLSAgICBS
ZXF1ZXN0KiBtX3JlcXVlc3Q7CisgICAgTG9hZGVyKiBtX3JlcXVlc3Q7CiAKICAgICBSZXNvdXJj
ZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lc3RhbXA7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvUmVxdWVzdC5oCShyZXZpc2lvbiA3MjQxMCkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIFJlcXVlc3RfaAotI2RlZmluZSBSZXF1ZXN0X2gKLQotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwotICAgIGNsYXNzIENhY2hlZFJl
c291cmNlTG9hZGVyOwotCi0gICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBib29s
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwotICAgICAgICB+UmVxdWVzdCgpOwotICAgICAg
ICAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3Q7IH0KLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsgfQotCi0g
ICAgICAgIGJvb2wgaXNJbmNyZW1lbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5jcmVtZW50YWw7
IH0KLSAgICAgICAgdm9pZCBzZXRJc0luY3JlbWVudGFsKGJvb2wgYiA9IHRydWUpIHsgbV9pbmNy
ZW1lbnRhbCA9IGI7IH0KLQotICAgICAgICBib29sIGlzTXVsdGlwYXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9tdWx0aXBhcnQ7IH0KLSAgICAgICAgdm9pZCBzZXRJc011bHRpcGFydChib29sIGIgPSB0
cnVlKSB7IG1fbXVsdGlwYXJ0ID0gYjsgfQotCi0gICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kg
c2hvdWxkRG9TZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREb1NlY3VyaXR5
Q2hlY2s7IH0KLSAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9Ci0gICAgICAgIAotICAgIHBy
aXZhdGU6Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiBtX29iamVjdDsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgICAgIGJvb2wgbV9p
bmNyZW1lbnRhbDsKLSAgICAgICAgYm9vbCBtX211bHRpcGFydDsKLSAgICAgICAgU2VjdXJpdHlD
aGVja1BvbGljeSBtX3Nob3VsZERvU2VjdXJpdHlDaGVjazsKLSAgICAgICAgYm9vbCBtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAgfTsKLQotfSAvL25hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBSZXF1ZXN0X2gKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gNzI0MTApCisr
KyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTQxLDExICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvYWRlcjo6fkxvYWRlcigpCi17ICAgIAot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQogICAgIAogc3RhdGljIFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0VHlwZSBjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUgdHlwZSkKIHsKQEAgLTkyLDIyICs4NiwzMyBAQAogICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OkxvdzsKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9v
bCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorTG9hZGVyOjpMb2FkZXIoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGJvb2wgaW5jcmVtZW50YWwpCisgICAgOiBtX2NhY2hlZFJlc291cmNlTG9hZGVyKGNhY2hlZFJl
c291cmNlTG9hZGVyKQorICAgICwgbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAsIG1faW5jcmVt
ZW50YWwoaW5jcmVtZW50YWwpCisgICAgLCBtX211bHRpcGFydChmYWxzZSkKKyAgICAsIG1fZmlu
aXNoaW5nKGZhbHNlKQogeworICAgIG1fcmVzb3VyY2UtPnNldFJlcXVlc3QodGhpcyk7Cit9CiAK
LSAgICBBU1NFUlQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIFJlcXVlc3QqIHJlcXVlc3Qg
PSBuZXcgUmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFs
LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKK0xvYWRlcjo6fkxv
YWRlcigpCit7CisgICAgbV9yZXNvdXJjZS0+c2V0UmVxdWVzdCgwKTsKK30KIAotICAgIGNhY2hl
ZFJlc291cmNlTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQocmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKSk7CitQYXNzUmVmUHRyPExvYWRlcj4gTG9hZGVyOjpsb2FkKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBi
b29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8TG9hZGVyPiByZXF1ZXN0
ID0gYWRvcHRSZWYobmV3IExvYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2UsIGlu
Y3JlbWVudGFsKSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHJlcXVl
c3QtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0VGFy
Z2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUocmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKS0+dHlwZSgpKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChy
ZXNvdXJjZS0+dXJsKCkpOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRUYXJnZXRUeXBlKGNhY2hl
ZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZShyZXNvdXJjZS0+dHlwZSgpKSk7CiAKLSAgICBpZiAo
IXJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+
YWNjZXB0KCkpOworICAgIGlmICghcmVzb3VyY2UtPmFjY2VwdCgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVzb3VyY2UtPmFjY2VwdCgpKTsKIAot
ICAgIGlmIChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5pc0NhY2hlVmFsaWRhdG9yKCkpIHsK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRlID0gcmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKKyAgICBpZiAocmVzb3Vy
Y2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2VUb1JldmFsaWRhdGUgPSByZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAgICAg
ICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigpKTsK
ICAgICAgICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5pc0xvYWRlZCgpKTsKICAgICAg
ICAgY29uc3QgU3RyaW5nJiBsYXN0TW9kaWZpZWQgPSByZXNvdXJjZVRvUmV2YWxpZGF0ZS0+cmVz
cG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKQEAgLTEyNCwyMjkgKzEy
OSwxNzIgQEAKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgaWYg
KHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZWZldGNoKQorICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpM
aW5rUHJlZmV0Y2gpCiAgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
IlgtUHVycG9zZSIsICJwcmVmZXRjaCIpOwogI2VuZGlmCiAKICAgICBSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJl
c291cmNlTG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwKLSAg
ICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJjZSks
IHJlcXVlc3QtPnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCkpOwotICAgIGlmIChsb2FkZXIgJiYgIWxvYWRlci0+cmVhY2hlZFRlcm1p
bmFsU3RhdGUoKSkKLSAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxlYXNl
KCksIHJlcXVlc3QpOwotICAgIGVsc2UgeworICAgICAgICByZXF1ZXN0LmdldCgpLCByZXNvdXJj
ZVJlcXVlc3QsIGRldGVybWluZVByaW9yaXR5KHJlc291cmNlKSwgc2VjdXJpdHlDaGVjaywgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5yZWFj
aGVkVGVybWluYWxTdGF0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291cmNl
cyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8KLSAg
ICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5nICclcyciLCBy
ZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOyAgICAgICAg
ICAgICAKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3Vu
dChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5k
YXRhKCkpOworICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KHJlc291cmNlKTsKKyAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5pc2hp
bmcoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKSAKICAg
ICAgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7IAogICAgICAg
ICByZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Ci0gICAgICAgIGNh
Y2hlZFJlc291cmNlTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgICAgIGRl
bGV0ZSByZXF1ZXN0OworICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUoMCk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICByZXF1ZXN0LT5tX2xvYWRlciA9IGxvYWRl
cjsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgTG9hZGVyOjpjYW5j
ZWxSZXF1ZXN0cyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCit2
b2lkIExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7Ci0gICAgY2FjaGVkUmVzb3VyY2VM
b2FkZXItPmNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0KLSAgICBWZWN0b3I8U3VicmVzb3VyY2VM
b2FkZXIqLCAyNTY+IGxvYWRlcnNUb0NhbmNlbDsKLSAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBl
bmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKLSAgICBmb3IgKFJlcXVlc3RNYXA6Oml0ZXJh
dG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAg
ICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpID09IGNhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICAgICAgICAgbG9hZGVyc1Rv
Q2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxvYWRlcnNUb0NhbmNlbC5zaXplKCk7ICsraSkgewotICAgICAgICBTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyID0gbG9hZGVyc1RvQ2FuY2VsW2ldOwotICAgICAgICBkaWRG
YWlsKGxvYWRlciwgdHJ1ZSk7Ci0gICAgfQorICAgIG1fcmVzb3VyY2UtPnNldFJlcXVlc3RlZEZy
b21OZXR3b3JraW5nTGF5ZXIoKTsKIH0KIAotdm9pZCBMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChT
dWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJikKLXsKLSAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xv
YWRpbmcuZmluZChsb2FkZXIpOwotICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVxdWVzdCogcmVxdWVzdCA9IGktPnNlY29u
ZDsKLSAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29y
a2luZ0xheWVyKCk7Ci19Ci0KIHZvaWQgTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291
cmNlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVx
dWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKLSAgICBpZiAoaSA9PSBtX3JlcXVlc3RzTG9hZGlu
Zy5lbmQoKSkKKyAgICBpZiAobV9maW5pc2hpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBSZXF1ZXN0KiByZXF1ZXN0ID0gaS0+c2Vjb25kOwotICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJl
bW92ZShpKTsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIg
PSByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgQVNTRVJUKGxvYWRlciA9
PSBtX2xvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2
YWxpZGF0ZSgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVjZWl2ZWQgJyVzJy4iLCBt
X3Jlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworCiAgICAgLy8gUHJldmVudCB0aGUg
ZG9jdW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAg
ICAvLyB0aGUgY2FjaGVkUmVzb3VyY2VMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVuIHRo
ZSBkb2N1bWVudCBnZXRzIGRlbGV0ZWQuCi0gICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3Io
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCkpOwotICAgIGlmICghcmVxdWVzdC0+aXNN
dWx0aXBhcnQoKSkKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVl
c3RDb3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+
IHByb3RlY3RvcihtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpKTsKKyAgICBpZiAo
IW1fbXVsdGlwYXJ0KQorICAgICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRS
ZXF1ZXN0Q291bnQobV9yZXNvdXJjZSk7CisgICAgbV9maW5pc2hpbmcgPSB0cnVlOwogCi0gICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKTsKLSAg
ICBBU1NFUlQoIXJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLQotICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJSZWNlaXZlZCAnJXMnLiIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEo
KS5kYXRhKCkpOwotCiAgICAgLy8gSWYgd2UgZ290IGEgNHh4IHJlc3BvbnNlLCB3ZSdyZSBwcmV0
ZW5kaW5nIHRvIGhhdmUgcmVjZWl2ZWQgYSBuZXR3b3JrCiAgICAgLy8gZXJyb3IsIHNvIHdlIGNh
bid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwgZGF0YSgpIGFuZCBmaW5pc2goKSBjYWxsYmFja3MuCi0g
ICAgaWYgKCFyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGNhY2hlZFJlc291
cmNlTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKLSAgICAgICAgcmVzb3VyY2UtPmRh
dGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghcmVzb3VyY2Ut
PmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJlc291cmNlLT5maW5pc2goKTsKKyAgICBp
ZiAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgeworICAgICAgICBtX2NhY2hlZFJlc291
cmNlTG9hZGVyLT5sb2FkRmluaXNoaW5nKCk7CisgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9h
ZGVyLT5yZXNvdXJjZURhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghbV9yZXNvdXJjZS0+ZXJy
b3JPY2N1cnJlZCgpKQorICAgICAgICAgICAgbV9yZXNvdXJjZS0+ZmluaXNoKCk7CiAgICAgfQot
Ci0gICAgZGVsZXRlIHJlcXVlc3Q7Ci0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldExvYWRJ
blByb2dyZXNzKGZhbHNlKTsgICAgCi0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNoZWNrRm9y
UGVuZGluZ1ByZWxvYWRzKCk7CisgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUo
dGhpcyk7CiB9CiAKIHZvaWQgTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQogewotICAgIGRpZEZhaWwobG9hZGVyKTsKKyAgICBp
ZiAoIW1fbG9hZGVyKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlci5nZXQoKSk7CisgICAgZGlkRmFpbCgpOwogfQogCi12b2lkIExvYWRlcjo6ZGlkRmFpbChT
dWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBib29sIGNhbmNlbGxlZCkKK3ZvaWQgTG9hZGVyOjpk
aWRGYWlsKGJvb2wgY2FuY2VsbGVkKQogewotICAgIGxvYWRlci0+Y2xlYXJDbGllbnQoKTsKLQot
ICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5kKGxvYWRl
cik7Ci0gICAgaWYgKGkgPT0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCkpCisgICAgaWYgKG1fZmlu
aXNoaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVxdWVzdCogcmVxdWVzdCA9IGkt
PnNlY29uZDsKLSAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUoaSk7Ci0gICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJGYWlsZWQgdG8gbG9hZCAn
JXMnIChjYW5jZWxsZWQ9JWQpLlxuIiwgbV9yZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgp
LCBjYW5jZWxsZWQpOworCiAgICAgLy8gUHJldmVudCB0aGUgZG9jdW1lbnQgZnJvbSBiZWluZyBk
ZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAgICAvLyB0aGUgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVuIHRoZSBkb2N1bWVudCBnZXRzIGRlbGV0
ZWQuCi0gICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IoY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmRvY3VtZW50KCkpOwotICAgIGlmICghcmVxdWVzdC0+aXNNdWx0aXBhcnQoKSkKLSAgICAgICAg
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudChyZXF1ZXN0LT5jYWNo
ZWRSZXNvdXJjZSgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2NhY2hlZFJl
c291cmNlTG9hZGVyLT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIW1fbXVsdGlwYXJ0KQorICAgICAg
ICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQobV9yZXNvdXJj
ZSk7CisgICAgbV9maW5pc2hpbmcgPSB0cnVlOworICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgp
OwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3Vy
Y2UoKTsKKyAgICBpZiAobV9yZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSkKKyAgICAg
ICAgY2FjaGUoKS0+cmV2YWxpZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogCi0gICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkZhaWxlZCB0byBsb2FkICclcycgKGNhbmNlbGxlZD0lZCkuXG4iLCBy
ZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpLCBjYW5jZWxsZWQpOwotCi0gICAgaWYgKHJl
c291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKQotICAgICAgICBjYWNoZSgpLT5yZXZhbGlk
YXRpb25GYWlsZWQocmVzb3VyY2UpOwotCiAgICAgaWYgKCFjYW5jZWxsZWQpIHsKLSAgICAgICAg
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAgICAgICBy
ZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CisgICAgICAgIG1fY2Fj
aGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5pc2hpbmcoKTsKKyAgICAgICAgbV9yZXNvdXJjZS0+
ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CiAgICAgfQorCisgICAgaWYgKGNhbmNl
bGxlZCB8fCAhbV9yZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKKyAgICAgICAgY2FjaGUoKS0+cmVt
b3ZlKG1fcmVzb3VyY2UpOwogICAgIAotICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5zZXRMb2Fk
SW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgaWYgKGNhbmNlbGxlZCB8fCAhcmVzb3VyY2UtPmlzUHJl
bG9hZGVkKCkpCi0gICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7Ci0gICAgCi0gICAg
ZGVsZXRlIHJlcXVlc3Q7Ci0gICAgCi0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNoZWNrRm9y
UGVuZGluZ1ByZWxvYWRzKCk7CisgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUo
dGhpcyk7CiB9CiAKIHZvaWQgTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAg
UmVxdWVzdCogcmVxdWVzdCA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChsb2FkZXIpOwotICAgIAot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUy
MzY4NDM+Ci0gICAgLy8gSWYgYSBsb2FkIHN0YXJ0cyB3aGlsZSB0aGUgZnJhbWUgaXMgc3RpbGwg
aW4gdGhlIHByb3Zpc2lvbmFsIHN0YXRlIAotICAgIC8vICh0aGlzIGNhbiBiZSB0aGUgY2FzZSB3
aGVuIGxvYWRpbmcgdGhlIHVzZXIgc3R5bGUgc2hlZXQpLCBjb21taXR0aW5nIHRoZSBsb2FkIHRo
ZW4gY2F1c2VzIGFsbAotICAgIC8vIHJlcXVlc3RzIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgbV9y
ZXF1ZXN0c0xvYWRpbmcgbWFwLiBUaGlzIG1lYW5zIHRoYXQgcmVxdWVzdCBtaWdodCBiZSBudWxs
IGhlcmUuCi0gICAgLy8gSW4gdGhhdCBjYXNlIHdlIGp1c3QgcmV0dXJuIGVhcmx5LiAKLSAgICAv
LyBBU1NFUlQocmVxdWVzdCk7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3Vy
Y2UoKTsKLSAgICAKLSAgICBpZiAocmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIuZ2V0KCkpOworICAgIGlmIChtX3Jlc291cmNlLT5p
c0NhY2hlVmFsaWRhdG9yKCkpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgPT0gMzA0KSB7CiAgICAgICAgICAgICAvLyAzMDQgTm90IG1vZGlmaWVkIC8gVXNlIGxvY2Fs
IGNvcHkKLSAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShsb2FkZXIpOwogICAg
ICAgICAgICAgbG9hZGVyLT5jbGVhckNsaWVudCgpOwotICAgICAgICAgICAgcmVxdWVzdC0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCkpOworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IobV9j
YWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBtX2NhY2hlZFJl
c291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQobV9yZXNvdXJjZSk7CisgICAgICAg
ICAgICBtX2ZpbmlzaGluZyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIEV4aXN0aW5nIHJlc291
cmNlIGlzIG9rLCBqdXN0IHVzZSBpdCB1cGRhdGluZyB0aGUgZXhwaXJhdGlvbiB0aW1lLgotICAg
ICAgICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0aW9uU3VjY2VlZGVkKHJlc291cmNlLCByZXNwb25z
ZSk7CisgICAgICAgICAgICBjYWNoZSgpLT5yZXZhbGlkYXRpb25TdWNjZWVkZWQobV9yZXNvdXJj
ZSwgcmVzcG9uc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocmVxdWVzdC0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICByZXF1ZXN0LT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQo
KTsKKyAgICAgICAgICAgIGlmIChtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpKQorICAg
ICAgICAgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5j
aGVja0NvbXBsZXRlZCgpOwogCi0gICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKLQorICAgICAg
ICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUodGhpcyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0gCiAgICAgICAgIC8vIERpZCBub3QgZ2V0IDMwNCByZXNwb25z
ZSwgY29udGludWUgYXMgYSByZWd1bGFyIHJlc291cmNlIGxvYWQuCi0gICAgICAgIGNhY2hlKCkt
PnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7CisgICAgICAgIGNhY2hlKCktPnJldmFsaWRh
dGlvbkZhaWxlZChtX3Jlc291cmNlKTsKICAgICB9CiAKLSAgICByZXNvdXJjZS0+c2V0UmVzcG9u
c2UocmVzcG9uc2UpOworICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsKIAog
ICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKICAgICBp
ZiAoIWVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICByZXNvdXJjZS0+c2V0RW5jb2RpbmcoZW5j
b2RpbmcpOworICAgICAgICBtX3Jlc291cmNlLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7CiAgICAg
Ci0gICAgaWYgKHJlcXVlc3QtPmlzTXVsdGlwYXJ0KCkpIHsKLSAgICAgICAgQVNTRVJUKHJlc291
cmNlLT5pc0ltYWdlKCkpOwotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlc291
cmNlKS0+Y2xlYXIoKTsKLSAgICAgICAgaWYgKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlTG9hZGVy
KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKyAgICBpZiAobV9tdWx0aXBh
cnQpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb3VyY2UtPmlzSW1hZ2UoKSk7CisgICAgICAgIHN0
YXRpY19jYXN0PENhY2hlZEltYWdlKj4obV9yZXNvdXJjZSktPmNsZWFyKCk7CisgICAgICAgIGlm
IChtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgbV9jYWNoZWRS
ZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CiAgICAg
fSBlbHNlIGlmIChyZXNwb25zZS5pc011bHRpcGFydCgpKSB7Ci0gICAgICAgIHJlcXVlc3QtPnNl
dElzTXVsdGlwYXJ0KHRydWUpOworICAgICAgICBtX211bHRpcGFydCA9IHRydWU7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGluIGEgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIncyByZXF1ZXN0IGNvdW50Ci0gICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNl
TG9hZGVyKCktPmRlY3JlbWVudFJlcXVlc3RDb3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgp
KTsKKyAgICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50
KG1fcmVzb3VyY2UpOwogCiAgICAgICAgIC8vIElmIHdlIGdldCBhIG11bHRpcGFydCByZXNwb25z
ZSwgd2UgbXVzdCBoYXZlIGEgaGFuZGxlCiAgICAgICAgIEFTU0VSVChsb2FkZXItPmhhbmRsZSgp
KTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZS0+aXNJbWFnZSgpKQorICAgICAgICBpZiAoIW1fcmVz
b3VyY2UtPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIGxvYWRlci0+aGFuZGxlKCktPmNhbmNlbCgp
OwogICAgIH0KIH0KIAogdm9pZCBMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQogewotICAgIFJlcXVlc3Qq
IHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKLSAgICBpZiAoIXJlcXVl
c3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJl
cXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAotICAgIEFTU0VSVCghcmVzb3VyY2UtPmlzQ2Fj
aGVWYWxpZGF0b3IoKSk7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlci5nZXQoKSk7Cisg
ICAgQVNTRVJUKCFtX3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOwogICAgIAotICAgIGlm
IChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgIGlmIChtX3Jlc291cmNlLT5lcnJvck9j
Y3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXNvdXJjZS0+cmVzcG9uc2Uo
KS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICByZXNvdXJjZS0+aHR0cFN0YXR1
c0NvZGVFcnJvcigpOworICAgIGlmIChtX3Jlc291cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXND
b2RlKCkgPj0gNDAwKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPmh0dHBTdGF0dXNDb2RlRXJyb3Io
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFNldCB0aGUgZGF0YS4KLSAgICBp
ZiAocmVxdWVzdC0+aXNNdWx0aXBhcnQoKSkgeworICAgIGlmIChtX211bHRpcGFydCkgewogICAg
ICAgICAvLyBUaGUgbG9hZGVyIGRlbGl2ZXJzIHRoZSBkYXRhIGluIGEgbXVsdGlwYXJ0IHNlY3Rp
b24gYWxsIGF0IG9uY2UsIHNlbmQgZW9mLgogICAgICAgICAvLyBUaGUgcmVzb3VyY2UgZGF0YSB3
aWxsIGNoYW5nZSBhcyB0aGUgbmV4dCBwYXJ0IGlzIGxvYWRlZCwgc28gd2UgbmVlZCB0byBtYWtl
IGEgY29weS4KICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29waWVkRGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIHNpemUpOwotICAgICAgICByZXNvdXJjZS0+ZGF0YShjb3Bp
ZWREYXRhLnJlbGVhc2UoKSwgdHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChyZXF1ZXN0LT5pc0luY3Jl
bWVudGFsKCkpCi0gICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRlci0+cmVzb3VyY2VEYXRhKCks
IGZhbHNlKTsKKyAgICAgICAgbV9yZXNvdXJjZS0+ZGF0YShjb3BpZWREYXRhLnJlbGVhc2UoKSwg
dHJ1ZSk7CisgICAgfSBlbHNlIGlmIChtX2luY3JlbWVudGFsKQorICAgICAgICBtX3Jlc291cmNl
LT5kYXRhKGxvYWRlci0+cmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIH0KICAgICAKIHZvaWQgTG9h
ZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCiB7Ci0gICAgUmVxdWVzdCogcmVxdWVzdCA9IG1f
cmVxdWVzdHNMb2FkaW5nLmdldChsb2FkZXIpOwotICAgIGlmICghcmVxdWVzdCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVk
UmVzb3VyY2UoKTsgICAgCi0gICAgQVNTRVJUKCFyZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRvcigp
KTsKLQotICAgIHJlc291cmNlLT5zZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6
ZSk7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKCFt
X3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOworICAgIG1fcmVzb3VyY2UtPnNldFNlcmlh
bGl6ZWRDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXplKTsKIH0KIAogfSAvL25hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9SZXF1ZXN0LmNwcAkocmV2aXNpb24gNzI0MTApCisrKyBXZWJDb3JlL2xvYWRl
ci9SZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENv
cHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXF1ZXN0Lmgi
Ci0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVJlcXVlc3Q6OlJlcXVlc3QoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyLCBDYWNoZWRSZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNo
ZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKQotICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICwgbV9jYWNoZWRSZXNvdXJjZUxv
YWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikKLSAgICAsIG1faW5jcmVtZW50YWwoaW5jcmVtZW50
YWwpCi0gICAgLCBtX211bHRpcGFydChmYWxzZSkKLSAgICAsIG1fc2hvdWxkRG9TZWN1cml0eUNo
ZWNrKHNob3VsZERvU2VjdXJpdHlDaGVjaykKLSAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQotewotICAgIG1fb2JqZWN0LT5zZXRSZXF1
ZXN0KHRoaXMpOwotfQotCi1SZXF1ZXN0Ojp+UmVxdWVzdCgpCi17Ci0gICAgbV9vYmplY3QtPnNl
dFJlcXVlc3QoMCk7Ci19Ci0KLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75181</attachid>
            <date>2010-11-30 12:20:02 -0800</date>
            <delta_ts>2010-12-09 13:48:42 -0800</delta_ts>
            <desc>More descriptive ChangeLog and merged to tip of tree</desc>
            <filename>request2.txt</filename>
            <type>text/plain</type>
            <size>41688</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDczLDcgKzEwNzMsNiBAQAogICAgIGxvYWRlci9Qb2xpY3lDaGVja2VyLmNwcCBc
CiAgICAgbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAgXAogICAgIGxvYWRlci9OYXZpZ2F0aW9u
U2NoZWR1bGVyLmNwcCBcCi0gICAgbG9hZGVyL1JlcXVlc3QuY3BwIFwKICAgICBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIFwK
ICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBcCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzI5MTgp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisy
MDEwLTExLTMwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2UgTG9hZGVyIGFuZCBS
ZXF1ZXN0LiBDdXJyZW50bHksIExvYWRlciBpcyBhIHNpbmdsZXRvbiBhdHRhY2hlZAorICAgICAg
ICB0byBNZW1vcnlDYWNoZS4gT3VyIGdvYWwgaXMgdG8gcmVtb3ZlIGtub3dsZWRnZSBvZiB0aGUg
bG9hZGluZyBwcm9jZXNzCisgICAgICAgIGZyb20gTWVtb3J5Q2FjaGUsIHNvIHdlIHNob3VsZCBh
dHRhY2ggTG9hZGVyIHRvIENhY2hlZFJlc291cmNlTG9hZGVyIGluc3RlYWQuCisgICAgICAgIE9u
Y2UgTG9hZGVyIGlzIG1vdmVkIG9mZiBvZiBNZW1vcnlDYWNoZSwgdGhlcmUncyBubyByZWFzb24g
aXQgbmVlZHMgdG8gYmUgYSBzaW5nbGV0b24sCisgICAgICAgIHdoaWNoIHJlbW92ZXMgdGhlIG1h
aW4gcmVhc29uIGZvciBSZXF1ZXN0IGV4aXN0aW5nIGFzIGEgc2VwYXJhdGUgY2xhc3MgKHRvIHN0
b3JlIHBlci1yZXF1ZXN0CisgICAgICAgIHN0YXRlIHRoYXQgTG9hZGVyIGNvdWxkbid0KS4KKwor
ICAgICAgICBMb2FkZXIgd2lsbCBiZSBnaXZlbiBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZSBpbiBh
IGxhdGVyIHBhdGNoLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTgzNworCisgICAgICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyB0ZXN0cy4KKwor
ICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgICog
bG9hZGVyL1JlcXVlc3QuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXF1ZXN0Lmg6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWREb25lKTogV2FzIHNldExvYWRJblBy
b2dyZXNzKGZhbHNlKSwKKyAgICAgICAgICAgIHBsdXMgb3RoZXIgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgY2xlYW51cCB0aGF0IGhhZCBiZWVuIGhhbmRsZWQgaW4gTG9hZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKTogTW92ZWQgZnJvbSBM
b2FkZXIuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdENv
dW50KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRmluaXNoaW5nKTogV2Fz
IHNldExvYWRJblByb2dyZXNzKHRydWUpCisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmg6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXI6OkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6On5Mb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6TG9hZGVyOjpjYWNoZWRSZXNvdXJjZUxvYWRlcik6CisKIDIwMTAtMTEtMzAgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MjkxNC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzkwNiwxNSArMjM5MDYsOCBAQAogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFByb2dyZXNzVHJhY2tlci5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJlcXVlc3Qu
Y3BwIg0KLQkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cbG9hZGVyXFJlcXVlc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlci5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjkxOCkKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNDYsOCArMjA0Niw2IEBACiAJV2ViQ29yZS9s
b2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmggXAogCVdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hl
ZHVsZXIuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmggXAotCVdl
YkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwIFwKLQlXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmggXAog
CVdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3Bw
IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5neXBpCShyZXZpc2lvbiA3MjkxOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTIwLDggKzIxMjAsNiBAQAogICAgICAgICAgICAgJ2xvYWRlci9Qcm9n
cmVzc1RyYWNrZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIu
Y3BwJywKICAgICAgICAgICAgICdsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5oJywKLSAgICAg
ICAgICAgICdsb2FkZXIvUmVxdWVzdC5jcHAnLAotICAgICAgICAgICAgJ2xvYWRlci9SZXF1ZXN0
LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3Vy
Y2VMb2FkTm90aWZpZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTczLDcgKzExNzMsNiBAQAog
ICAgIGxvYWRlci9Qb2xpY3lDaGVja2VyLmNwcAogICAgIGxvYWRlci9Qcm9ncmVzc1RyYWNrZXIu
Y3BwCiAgICAgbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCi0gICAgbG9hZGVyL1JlcXVl
c3QuY3BwCiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAogICAgIGxvYWRlci9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDcyOTE4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTUwNTUsOCArNTA1NSw2IEBACiAJCUJDQjE2QzJBMDk3OUMzQkQwMDQ2
Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZDMTEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJl
c291cmNlTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNCMTZDMkMwOTc5QzNCRDAwNDY3NzQxIC8qIGxvYWRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkMxMzA5NzlDM0JEMDA0
Njc3NDEgLyogbG9hZGVyLmNwcCAqLzsgfTsKIAkJQkNCMTZDMkQwOTc5QzNCRDAwNDY3NzQxIC8q
IGxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNCMTZDMTQwOTc5QzNCRDAwNDY3NzQxIC8qIGxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDQjE2QzJFMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDQjE2QzE1MDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0LmNwcCAqLzsgfTsKLQkJQkNC
MTZDMkYwOTc5QzNCRDAwNDY3NzQxIC8qIFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjE2QzE2MDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1
ZXN0LmggKi87IH07CiAJCUJDQjc3MzYxMEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCNzczNUUwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAg
Ki87IH07CiAJCUJDQjc3MzYyMEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjc3
MzVGMEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLzsgfTsKIAkJ
QkNCNzczNjMwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I3NzM2MDBDMTc4NTNE
MDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTExMTE5LDggKzEx
MTE3LDYgQEAKIAkJQkNCMTZDMTEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlTG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUxv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0IxNkMxMzA5NzlDM0JEMDA0
Njc3NDEgLyogbG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBsb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0IxNkMxNDA5NzlD
M0JEMDA0Njc3NDEgLyogbG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBsb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNCMTZDMTUwOTc5QzNC
RDAwNDY3NzQxIC8qIFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0IxNkMx
NjA5NzlDM0JEMDA0Njc3NDEgLyogUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0I3NzM1
RTBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0I3NzM1RjBDMTc4NTNEMDAxMzJCQTQgLyog
SlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU05vZGVGaWx0ZXJDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNCNzczNjAwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NDA2LDggKzE3NDAyLDYgQEAKIAkJCQk5
NzA1OTk3NjEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oICovLAogCQkJCTFBMkE2
ODIxMEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuY3BwICovLAogCQkJCTFBMkE2
ODIyMEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuaCAqLywKLQkJCQlCQ0IxNkMx
NTA5NzlDM0JEMDA0Njc3NDEgLyogUmVxdWVzdC5jcHAgKi8sCi0JCQkJQkNCMTZDMTYwOTc5QzNC
RDAwNDY3NzQxIC8qIFJlcXVlc3QuaCAqLywKIAkJCQk5M0UyMjdERTBBRjU4OUFEMDBENDgzMjQg
LyogUmVzb3VyY2VMb2FkZXIuY3BwICovLAogCQkJCTY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAv
KiBSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBS
ZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCkBAIC0yMDc4MCw3ICsyMDc3NCw2IEBACiAJCQkJ
OTM3OTlFRjkwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg5Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUwQTA5OUU2NDkyMDA1NkU1ODEgLyog
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQjE2QzJGMDk3
OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMDEy
NTFGMTJEMDAzRUYyNjkgLyogUmVzZXRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
NEY3MTQyMEQ1QTZGNDQwMDAxOEQ2OSAvKiBSZXNvdXJjZUVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzRGNzEzQzBENUE2RjE5MDAwMThENjkgLyogUmVzb3VyY2VFcnJvckJhc2UuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjM0NTgsNyArMjM0NTEsNiBAQAogCQkJCTkzNzk5RUY4MEJGMjc0MzYw
MEQwRjIzMCAvKiBSZW5kZXJXb3JkQnJlYWsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0ND
NTIwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RTA5MDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0IxNkMyRTA5NzlDM0JEMDA0Njc3
NDEgLyogUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDRjEyNTFGMTJEMDAz
RUYyNjkgLyogUmVzZXRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxM0Uw
RDVBNkYyODAwMDE4RDY5IC8qIFJlc291cmNlRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxNEM3NjUwMENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3MjkxOCkKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29y
a2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw2IEBACiAJbG9hZGVyL1BvbGljeUNoZWNrZXIuY3Bw
IFwKIAlsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCBcCiAJbG9hZGVyL05hdmlnYXRpb25TY2hl
ZHVsZXIuY3BwIFwKLQlsb2FkZXIvUmVxdWVzdC5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWRO
b3RpZmllci5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgXAogCWxvYWRlci9TdWJm
cmFtZUxvYWRlci5jcHAgXApJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDcyOTE4KQorKysgV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI0ICszNSwyOSBAQAogICAg
IGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlcXVlc3Q7CiAKLSAgICBj
bGFzcyBMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUsIHByaXZhdGUgU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQgeworICAgIGNsYXNzIExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPExvYWRlcj4s
IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgewogICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TG9hZGVyPiBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBib29s
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpO1wKICAgICAgICAgfkxvYWRlcigpOworICAgICAg
ICB2b2lkIGRpZEZhaWwoYm9vbCBjYW5jZWxsZWQgPSBmYWxzZSk7CiAKLSAgICAgICAgdm9pZCBs
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVu
dGFsID0gdHJ1ZSwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7Ci0gICAgICAgIHZvaWQgY2FuY2VsUmVx
dWVzdHMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRSZXNvdXJj
ZUxvYWRlcjsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgTG9hZGVyKENhY2hlZFJlc291cmNl
TG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
Q2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlcios
IGJvb2wgY2FuY2VsbGVkID0gZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOwotICAg
ICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOworCisgICAgICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBt
X2NhY2hlZFJlc291cmNlTG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJj
ZTsKKyAgICAgICAgYm9vbCBtX2luY3JlbWVudGFsOworICAgICAgICBib29sIG1fbXVsdGlwYXJ0
OworICAgICAgICBib29sIG1fZmluaXNoaW5nOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDcyOTE4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNyArNDMxLDcgQEAKICAgICAgICAgZG9jLT5z
ZXRSZWFkeVN0YXRlKERvY3VtZW50OjpDb21wbGV0ZSk7CiAKICAgICAgICAgaWYgKENhY2hlZFJl
c291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvYy0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSkKLSAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5jYW5jZWxSZXF1ZXN0cyhj
YWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+
Y2FuY2VsUmVxdWVzdHMoKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgaWYgKGRh
dGFiYXNlUG9saWN5ID09IERhdGFiYXNlUG9saWN5U3RvcCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA3MjkxOCkKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgpAQCAtOTgs
NyArOTksNyBAQAogewogICAgIGlmICghbV9sb2FkSW5pdGlhdGVkKSB7CiAgICAgICAgIG1fbG9h
ZEluaXRpYXRlZCA9IHRydWU7Ci0gICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKGRsLCB0
aGlzLCBmYWxzZSk7CisgICAgICAgIGRsLT5sb2FkKHRoaXMsIGZhbHNlKTsKICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gNzI5MTgpCisrKyBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibG9hZGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMTA0LDkgKzEwMyw2IEBACiAgICAgICAgIFR5
cGVTdGF0aXN0aWMgZm9udHM7CiAgICAgfTsKIAotICAgIC8vIFRoZSBsb2FkZXIgdGhhdCBmZXRj
aGVzIHJlc291cmNlcy4KLSAgICBMb2FkZXIqIGxvYWRlcigpIHsgcmV0dXJuICZtX2xvYWRlcjsg
fQotCiAgICAgLy8gUmVxdWVzdCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBBIGxvYWQgd2ls
bCBiZSBpbml0aWF0ZWQgYW5kIGEgY2FjaGUgb2JqZWN0IGNyZWF0ZWQgaWYgdGhlIG9iamVjdCBp
cyBub3QKICAgICAvLyBmb3VuZCBpbiB0aGUgY2FjaGUuCiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlOjpUeXBl
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQg
PSBmYWxzZSwgYm9vbCBmb3JIaXN0b3J5ID0gZmFsc2UpOwpAQCAtMTkxLDcgKzE4Nyw2IEBACiAK
ICAgICAvLyBNZW1iZXIgdmFyaWFibGVzLgogICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqPiBtX2NhY2hlZFJlc291cmNlTG9hZGVyczsKLSAgICBMb2FkZXIgbV9sb2FkZXI7CiAKICAg
ICBib29sIG1fZGlzYWJsZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgaXMgZW5hYmxl
ZC4KICAgICBib29sIG1fcHJ1bmVFbmFibGVkOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3JlcXVl
c3RDb3VudCgwKQogICAgICwgbV9hdXRvTG9hZEltYWdlcyh0cnVlKQotICAgICwgbV9sb2FkSW5Q
cm9ncmVzcyhmYWxzZSkKKyAgICAsIG1fbG9hZEZpbmlzaGluZyhmYWxzZSkKICAgICAsIG1fYWxs
b3dTdGFsZVJlc291cmNlcyhmYWxzZSkKIHsKICAgICBtX2NhY2hlLT5hZGRDYWNoZWRSZXNvdXJj
ZUxvYWRlcih0aGlzKTsKQEAgLTYzLDkgKzYzLDcgQEAKIAogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
On5DYWNoZWRSZXNvdXJjZUxvYWRlcigpCiB7Ci0gICAgaWYgKG1fcmVxdWVzdENvdW50KQotICAg
ICAgICBtX2NhY2hlLT5sb2FkZXIoKS0+Y2FuY2VsUmVxdWVzdHModGhpcyk7Ci0KKyAgICBjYW5j
ZWxSZXF1ZXN0cygpOwogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNl
TWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAo
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTEzNyw3ICsxMzUsNyBAQAogICAgIENhY2hlZElt
YWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CiAgICAgaWYg
KGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2Fk
KCkpIHsKICAgICAgICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGNhY2hl
KCktPmxvYWRlcigpLT5sb2FkKHRoaXMsIHJlc291cmNlLCB0cnVlKTsKKyAgICAgICAgbG9hZChy
ZXNvdXJjZSwgdHJ1ZSk7CiAgICAgfQogICAgIHJldHVybiByZXNvdXJjZTsKIH0KQEAgLTMxNCw3
ICszMTIsNyBAQAogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2FzdDxD
YWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2UpKTsK
IAogICAgICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRzTG9hZCgpKQotICAgICAgICAgICAg
ICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKHRoaXMsIGltYWdlLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICBsb2FkKGltYWdlLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMzNCwx
MyArMzMyLDM4IEBACiAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVy
bCgpKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0TG9hZEluUHJvZ3Jlc3Mo
Ym9vbCBsb2FkKQordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG9hZChDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJp
dHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewotICAgIG1fbG9hZElu
UHJvZ3Jlc3MgPSBsb2FkOwotICAgIGlmICghbG9hZCAmJiBmcmFtZSgpKQorICAgIGluY3JlbWVu
dFJlcXVlc3RDb3VudChyZXNvdXJjZSk7CisKKyAgICBSZWZQdHI8TG9hZGVyPiByZXF1ZXN0ID0g
TG9hZGVyOjpsb2FkKHRoaXMsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIG1f
cmVxdWVzdHMuYWRkKHJlcXVlc3QpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjps
b2FkRG9uZShMb2FkZXIqIHJlcXVlc3QpCit7CisgICAgbV9sb2FkRmluaXNoaW5nID0gZmFsc2U7
CisgICAgUmVmUHRyPExvYWRlcj4gcHJvdGVjdChyZXF1ZXN0KTsKKyAgICBpZiAocmVxdWVzdCkK
KyAgICAgICAgbV9yZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAgaWYgKGZyYW1lKCkpCiAg
ICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2FkRG9uZSgpOworICAgIGNoZWNrRm9yUGVuZGlu
Z1ByZWxvYWRzKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhbmNlbFJlcXVl
c3RzKCkKK3sKKyAgICBjbGVhclBlbmRpbmdQcmVsb2FkcygpOworICAgIFZlY3RvcjxMb2FkZXIq
LCAyNTY+IHJlcXVlc3RzVG9DYW5jZWw7CisgICAgUmVxdWVzdFNldDo6aXRlcmF0b3IgZW5kID0g
bV9yZXF1ZXN0cy5lbmQoKTsKKyAgICBmb3IgKFJlcXVlc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX3Jl
cXVlc3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIHJlcXVlc3RzVG9DYW5jZWwu
YXBwZW5kKCgqaSkuZ2V0KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcXVl
c3RzVG9DYW5jZWwuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlcXVlc3RzVG9DYW5jZWxbaV0tPmRp
ZEZhaWwodHJ1ZSk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrQ2FjaGVP
YmplY3RTdGF0dXMoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogICAgIC8vIFJldHVybiBm
cm9tIHRoZSBmdW5jdGlvbiBmb3Igb2JqZWN0cyB0aGF0IHdlIGRpZG4ndCBsb2FkIGZyb20gdGhl
IGNhY2hlIG9yIGlmIHdlIGRvbid0IGhhdmUgYSBmcmFtZS4KQEAgLTM3MCw3ICszOTMsNyBAQAog
CiBpbnQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDb3VudCgpCiB7Ci0gICAgaWYgKGxv
YWRJblByb2dyZXNzKCkpCisgICAgaWYgKG1fbG9hZEZpbmlzaGluZykKICAgICAgICAgIHJldHVy
biBtX3JlcXVlc3RDb3VudCArIDE7CiAgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50OwogfQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gNzI5MTgpCisrKyBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlw
ZXMuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtODYsOCArODcsMTAgQEAKIAogICAgIHZvaWQgcmVtb3Zl
Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKSBjb25zdDsKIAotICAgIHZvaWQgc2V0TG9h
ZEluUHJvZ3Jlc3MoYm9vbCk7Ci0gICAgYm9vbCBsb2FkSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fbG9hZEluUHJvZ3Jlc3M7IH0KKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2UqLCBi
b29sIGluY3JlbWVudGFsID0gZmFsc2UsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUpOworICAgIHZvaWQg
bG9hZEZpbmlzaGluZygpIHsgbV9sb2FkRmluaXNoaW5nID0gdHJ1ZTsgfQorICAgIHZvaWQgbG9h
ZERvbmUoTG9hZGVyKik7CisgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cygpOwogICAgIAogICAgIHZv
aWQgc2V0QWxsb3dTdGFsZVJlc291cmNlcyhib29sIGFsbG93U3RhbGVSZXNvdXJjZXMpIHsgbV9h
bGxvd1N0YWxlUmVzb3VyY2VzID0gYWxsb3dTdGFsZVJlc291cmNlczsgfQogCkBAIC0xMTMsNiAr
MTE2LDkgQEAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWxvYWRlZFVSTHM7CiAgICAgbXV0YWJs
ZSBEb2N1bWVudFJlc291cmNlTWFwIG1fZG9jdW1lbnRSZXNvdXJjZXM7CiAgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPExvYWRlcj4gPiBSZXF1
ZXN0U2V0OworICAgIFJlcXVlc3RTZXQgbV9yZXF1ZXN0czsKICAgICAKICAgICBpbnQgbV9yZXF1
ZXN0Q291bnQ7CiAgICAgCkBAIC0xMjYsNyArMTMyLDcgQEAKICAgICAKICAgICAvLzI5IGJpdHMg
bGVmdAogICAgIGJvb2wgbV9hdXRvTG9hZEltYWdlcyA6IDE7Ci0gICAgYm9vbCBtX2xvYWRJblBy
b2dyZXNzIDogMTsKKyAgICBib29sIG1fbG9hZEZpbmlzaGluZyA6IDE7CiAgICAgYm9vbCBtX2Fs
bG93U3RhbGVSZXNvdXJjZXMgOiAxOwogfTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNzI5MTgpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlB1cmdlYWJs
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgImxvYWRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgpAQCAtMTA2LDcgKzEwNiw3IEBA
CiB2b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1
cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgbV9zZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKLSAgICBj
YWNoZSgpLT5sb2FkZXIoKS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlciwgdGhpcywgaW5jcmVt
ZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGNh
Y2hlZFJlc291cmNlTG9hZGVyLT5sb2FkKHRoaXMsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNr
LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogfQog
CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICByZXR1cm4gbV9jYWNoZWRNZXRhZGF0YS5nZXQoKTsK
IH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0KiByZXF1ZXN0KQor
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChMb2FkZXIqIHJlcXVlc3QpCiB7CiAgICAg
aWYgKHJlcXVlc3QgJiYgIW1fcmVxdWVzdCkKICAgICAgICAgbV9zdGF0dXMgPSBQZW5kaW5nOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA3MjkxOCkK
KysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDggKzQzLDggQEAKIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKK2NsYXNzIExvYWRlcjsKIGNsYXNzIFB1cmdl
YWJsZUJ1ZmZlcjsKLWNsYXNzIFJlcXVlc3Q7CiAKIC8vIEEgcmVzb3VyY2UgdGhhdCBpcyBoZWxk
IGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hvdWxk
IGRlcml2ZQogLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5jdGlv
biBjYWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4KQEAgLTE1MCw3
ICsxNTAsNyBAQAogICAgIHZvaWQgc2V0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoYm9vbCBi
KSB7IG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgPSBiOyB9CiAgICAgYm9vbCBpbkxpdmVE
ZWNvZGVkUmVzb3VyY2VzTGlzdCgpIHsgcmV0dXJuIG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xp
c3Q7IH0KICAgICAKLSAgICB2b2lkIHNldFJlcXVlc3QoUmVxdWVzdCopOworICAgIHZvaWQgc2V0
UmVxdWVzdChMb2FkZXIqKTsKIAogICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgpIGNvbnN0IHsgQVNT
RVJUKCFtX3B1cmdlYWJsZURhdGEpOyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAKQEAgLTIxNiw3
ICsyMTYsNyBAQAogCiAgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmluZyBtX2FjY2VwdDsKLSAg
ICBSZXF1ZXN0KiBtX3JlcXVlc3Q7CisgICAgTG9hZGVyKiBtX3JlcXVlc3Q7CiAKICAgICBSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lc3RhbXA7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvUmVxdWVzdC5oCShyZXZpc2lvbiA3MjkxOCkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVl
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaWZuZGVmIFJlcXVlc3RfaAotI2RlZmluZSBSZXF1ZXN0X2gKLQotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwotICAgIGNsYXNzIENhY2hl
ZFJlc291cmNlTG9hZGVyOwotCi0gICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwg
Q2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwotICAgICAgICB+UmVxdWVzdCgpOwotICAg
ICAgICAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsgfQot
Ci0gICAgICAgIGJvb2wgaXNJbmNyZW1lbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5jcmVtZW50
YWw7IH0KLSAgICAgICAgdm9pZCBzZXRJc0luY3JlbWVudGFsKGJvb2wgYiA9IHRydWUpIHsgbV9p
bmNyZW1lbnRhbCA9IGI7IH0KLQotICAgICAgICBib29sIGlzTXVsdGlwYXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tdWx0aXBhcnQ7IH0KLSAgICAgICAgdm9pZCBzZXRJc011bHRpcGFydChib29sIGIg
PSB0cnVlKSB7IG1fbXVsdGlwYXJ0ID0gYjsgfQotCi0gICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xp
Y3kgc2hvdWxkRG9TZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREb1NlY3Vy
aXR5Q2hlY2s7IH0KLSAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29u
c3QgeyByZXR1cm4gbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9Ci0gICAgICAgIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiBtX29iamVjdDsKLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgICAgIGJvb2wg
bV9pbmNyZW1lbnRhbDsKLSAgICAgICAgYm9vbCBtX211bHRpcGFydDsKLSAgICAgICAgU2VjdXJp
dHlDaGVja1BvbGljeSBtX3Nob3VsZERvU2VjdXJpdHlDaGVjazsKLSAgICAgICAgYm9vbCBtX3Nl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAgfTsKLQotfSAvL25hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBSZXF1ZXN0X2gKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gNzI5MTgp
CisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTQxLDExICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvYWRlcjo6fkxvYWRlcigpCi17ICAg
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQogICAgIAogc3RhdGljIFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0VHlwZSBjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSkKIHsKQEAgLTkyLDIyICs4NiwzMyBAQAogICAgIHJldHVybiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OkxvdzsKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorTG9hZGVyOjpMb2FkZXIoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UsIGJvb2wgaW5jcmVtZW50YWwpCisgICAgOiBtX2NhY2hlZFJlc291cmNlTG9hZGVyKGNhY2hl
ZFJlc291cmNlTG9hZGVyKQorICAgICwgbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAsIG1faW5j
cmVtZW50YWwoaW5jcmVtZW50YWwpCisgICAgLCBtX211bHRpcGFydChmYWxzZSkKKyAgICAsIG1f
ZmluaXNoaW5nKGZhbHNlKQogeworICAgIG1fcmVzb3VyY2UtPnNldFJlcXVlc3QodGhpcyk7Cit9
CiAKLSAgICBBU1NFUlQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIFJlcXVlc3QqIHJlcXVl
c3QgPSBuZXcgUmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVu
dGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKK0xvYWRlcjo6
fkxvYWRlcigpCit7CisgICAgbV9yZXNvdXJjZS0+c2V0UmVxdWVzdCgwKTsKK30KIAotICAgIGNh
Y2hlZFJlc291cmNlTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQocmVxdWVzdC0+Y2FjaGVk
UmVzb3VyY2UoKSk7CitQYXNzUmVmUHRyPExvYWRlcj4gTG9hZGVyOjpsb2FkKENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8TG9hZGVyPiByZXF1
ZXN0ID0gYWRvcHRSZWYobmV3IExvYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2Us
IGluY3JlbWVudGFsKSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0
VGFyZ2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUocmVxdWVzdC0+Y2FjaGVk
UmVzb3VyY2UoKS0+dHlwZSgpKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVz
dChyZXNvdXJjZS0+dXJsKCkpOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRUYXJnZXRUeXBlKGNh
Y2hlZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZShyZXNvdXJjZS0+dHlwZSgpKSk7CiAKLSAgICBp
ZiAoIXJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2Uo
KS0+YWNjZXB0KCkpOworICAgIGlmICghcmVzb3VyY2UtPmFjY2VwdCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVzb3VyY2UtPmFjY2VwdCgpKTsK
IAotICAgIGlmIChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5pc0NhY2hlVmFsaWRhdG9yKCkp
IHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRlID0gcmVxdWVz
dC0+Y2FjaGVkUmVzb3VyY2UoKS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKKyAgICBpZiAocmVz
b3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2VUb1JldmFsaWRhdGUgPSByZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAg
ICAgICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigp
KTsKICAgICAgICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5pc0xvYWRlZCgpKTsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBsYXN0TW9kaWZpZWQgPSByZXNvdXJjZVRvUmV2YWxpZGF0ZS0+
cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKQEAgLTEyNCwyMzAg
KzEyOSwxNzMgQEAKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAg
aWYgKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6
TGlua1ByZWZldGNoKQorICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNl
OjpMaW5rUHJlZmV0Y2gpCiAgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoIlgtUHVycG9zZSIsICJwcmVmZXRjaCIpOwogI2VuZGlmCiAKICAgICBSZWZQdHI8U3VicmVz
b3VyY2VMb2FkZXI+IGxvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1
YnJlc291cmNlTG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwK
LSAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJj
ZSksIHJlcXVlc3QtPnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCkpOwotICAgIGlmIChsb2FkZXIgJiYgIWxvYWRlci0+cmVhY2hlZFRl
cm1pbmFsU3RhdGUoKSkKLSAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxl
YXNlKCksIHJlcXVlc3QpOwotICAgIGVsc2UgeworICAgICAgICByZXF1ZXN0LmdldCgpLCByZXNv
dXJjZVJlcXVlc3QsIGRldGVybWluZVByaW9yaXR5KHJlc291cmNlKSwgc2VjdXJpdHlDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5y
ZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291
cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8K
LSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5nICclcyci
LCByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOyAgICAg
ICAgICAgICAKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RD
b3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VM
b2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOworICAgICAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEo
KS5kYXRhKCkpOworICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVz
dENvdW50KHJlc291cmNlKTsKKyAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5p
c2hpbmcoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKSAK
ICAgICAgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7IAogICAg
ICAgICByZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Ci0gICAgICAg
IGNhY2hlZFJlc291cmNlTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgICAg
IGRlbGV0ZSByZXF1ZXN0OworICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUo
MCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICByZXF1ZXN0LT5tX2xvYWRlciA9IGxv
YWRlcjsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgTG9hZGVyOjpj
YW5jZWxSZXF1ZXN0cyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIp
Cit2b2lkIExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7Ci0gICAgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXItPmNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0KLSAgICBWZWN0b3I8U3VicmVzb3Vy
Y2VMb2FkZXIqLCAyNTY+IGxvYWRlcnNUb0NhbmNlbDsKLSAgICBSZXF1ZXN0TWFwOjppdGVyYXRv
ciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKLSAgICBmb3IgKFJlcXVlc3RNYXA6Oml0
ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0g
ICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpID09IGNhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICAgICAgICAgbG9hZGVy
c1RvQ2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxvYWRlcnNUb0NhbmNlbC5zaXplKCk7ICsraSkgewotICAgICAgICBT
dWJyZXNvdXJjZUxvYWRlciogbG9hZGVyID0gbG9hZGVyc1RvQ2FuY2VsW2ldOwotICAgICAgICBk
aWRGYWlsKGxvYWRlciwgdHJ1ZSk7Ci0gICAgfQorICAgIG1fcmVzb3VyY2UtPnNldFJlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKIH0KIAotdm9pZCBMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikKLXsKLSAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0
c0xvYWRpbmcuZmluZChsb2FkZXIpOwotICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVu
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVxdWVzdCogcmVxdWVzdCA9IGktPnNl
Y29uZDsKLSAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0
d29ya2luZ0xheWVyKCk7Ci19Ci0KIHZvaWQgTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1f
cmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKLSAgICBpZiAoaSA9PSBtX3JlcXVlc3RzTG9h
ZGluZy5lbmQoKSkKKyAgICBpZiAobV9maW5pc2hpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gaS0+c2Vjb25kOwotICAgIG1fcmVxdWVzdHNMb2FkaW5n
LnJlbW92ZShpKTsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgPSByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5yZXNvdXJjZVRv
UmV2YWxpZGF0ZSgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVjZWl2ZWQgJyVzJy4i
LCBtX3Jlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworCiAgICAgLy8gUHJldmVudCB0
aGUgZG9jdW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgK
ICAgICAvLyB0aGUgY2FjaGVkUmVzb3VyY2VMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVu
IHRoZSBkb2N1bWVudCBnZXRzIGRlbGV0ZWQuCi0gICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0
b3IoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCkpOwotICAgIGlmICghcmVxdWVzdC0+
aXNNdWx0aXBhcnQoKSkKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJl
cXVlc3RDb3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKKyAgICBSZWZQdHI8RG9jdW1l
bnQ+IHByb3RlY3RvcihtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpKTsKKyAgICBp
ZiAoIW1fbXVsdGlwYXJ0KQorICAgICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1l
bnRSZXF1ZXN0Q291bnQobV9yZXNvdXJjZSk7CisgICAgbV9maW5pc2hpbmcgPSB0cnVlOwogCi0g
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKTsK
LSAgICBBU1NFUlQoIXJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLQotICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICJSZWNlaXZlZCAnJXMnLiIsIHJlc291cmNlLT51cmwoKS5sYXRp
bjEoKS5kYXRhKCkpOwotCiAgICAgLy8gSWYgd2UgZ290IGEgNHh4IHJlc3BvbnNlLCB3ZSdyZSBw
cmV0ZW5kaW5nIHRvIGhhdmUgcmVjZWl2ZWQgYSBuZXR3b3JrCiAgICAgLy8gZXJyb3IsIHNvIHdl
IGNhbid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwgZGF0YSgpIGFuZCBmaW5pc2goKSBjYWxsYmFja3Mu
Ci0gICAgaWYgKCFyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGNhY2hlZFJl
c291cmNlTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKLSAgICAgICAgcmVzb3VyY2Ut
PmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghcmVzb3Vy
Y2UtPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJlc291cmNlLT5maW5pc2goKTsKKyAg
ICBpZiAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgeworICAgICAgICBtX2NhY2hlZFJl
c291cmNlTG9hZGVyLT5sb2FkRmluaXNoaW5nKCk7CisgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEo
bG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghbV9yZXNvdXJjZS0+
ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICAgICAgbV9yZXNvdXJjZS0+ZmluaXNoKCk7CiAgICAg
fQotCi0gICAgZGVsZXRlIHJlcXVlc3Q7Ci0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldExv
YWRJblByb2dyZXNzKGZhbHNlKTsgICAgCi0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNoZWNr
Rm9yUGVuZGluZ1ByZWxvYWRzKCk7CisgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERv
bmUodGhpcyk7CiB9CiAKIHZvaWQgTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQogewotICAgIGRpZEZhaWwobG9hZGVyKTsKKyAg
ICBpZiAoIW1fbG9hZGVyKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGxvYWRlciA9PSBt
X2xvYWRlci5nZXQoKSk7CisgICAgZGlkRmFpbCgpOwogfQogCi12b2lkIExvYWRlcjo6ZGlkRmFp
bChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBib29sIGNhbmNlbGxlZCkKK3ZvaWQgTG9hZGVy
OjpkaWRGYWlsKGJvb2wgY2FuY2VsbGVkKQogewotICAgIGxvYWRlci0+Y2xlYXJDbGllbnQoKTsK
LQotICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5kKGxv
YWRlcik7Ci0gICAgaWYgKGkgPT0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCkpCisgICAgaWYgKG1f
ZmluaXNoaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVxdWVzdCogcmVxdWVzdCA9
IGktPnNlY29uZDsKLSAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUoaSk7Ci0gICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJGYWlsZWQgdG8gbG9h
ZCAnJXMnIChjYW5jZWxsZWQ9JWQpLlxuIiwgbV9yZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0
YSgpLCBjYW5jZWxsZWQpOworCiAgICAgLy8gUHJldmVudCB0aGUgZG9jdW1lbnQgZnJvbSBiZWlu
ZyBkZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAgICAvLyB0aGUgY2FjaGVkUmVz
b3VyY2VMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVuIHRoZSBkb2N1bWVudCBnZXRzIGRl
bGV0ZWQuCi0gICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXItPmRvY3VtZW50KCkpOwotICAgIGlmICghcmVxdWVzdC0+aXNNdWx0aXBhcnQoKSkKLSAgICAg
ICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudChyZXF1ZXN0LT5j
YWNoZWRSZXNvdXJjZSgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2NhY2hl
ZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIW1fbXVsdGlwYXJ0KQorICAg
ICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQobV9yZXNv
dXJjZSk7CisgICAgbV9maW5pc2hpbmcgPSB0cnVlOworICAgIG1fbG9hZGVyLT5jbGVhckNsaWVu
dCgpOwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKTsKKyAgICBpZiAobV9yZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSkKKyAg
ICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogCi0gICAgTE9H
KFJlc291cmNlTG9hZGluZywgIkZhaWxlZCB0byBsb2FkICclcycgKGNhbmNlbGxlZD0lZCkuXG4i
LCByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpLCBjYW5jZWxsZWQpOwotCi0gICAgaWYg
KHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKQotICAgICAgICBjYWNoZSgpLT5yZXZh
bGlkYXRpb25GYWlsZWQocmVzb3VyY2UpOwotCiAgICAgaWYgKCFjYW5jZWxsZWQpIHsKLSAgICAg
ICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAgICAg
ICByZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CisgICAgICAgIG1f
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5pc2hpbmcoKTsKKyAgICAgICAgbV9yZXNvdXJj
ZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CiAgICAgfQorCisgICAgaWYgKGNh
bmNlbGxlZCB8fCAhbV9yZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKKyAgICAgICAgY2FjaGUoKS0+
cmVtb3ZlKG1fcmVzb3VyY2UpOwogICAgIAotICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5zZXRM
b2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgaWYgKGNhbmNlbGxlZCB8fCAhcmVzb3VyY2UtPmlz
UHJlbG9hZGVkKCkpCi0gICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7Ci0gICAgCi0g
ICAgZGVsZXRlIHJlcXVlc3Q7Ci0gICAgCi0gICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNoZWNr
Rm9yUGVuZGluZ1ByZWxvYWRzKCk7CisgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERv
bmUodGhpcyk7CiB9CiAKIHZvaWQgTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgUmVxdWVzdCogcmVxdWVzdCA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChsb2FkZXIpOwotICAg
IAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVt
LzUyMzY4NDM+Ci0gICAgLy8gSWYgYSBsb2FkIHN0YXJ0cyB3aGlsZSB0aGUgZnJhbWUgaXMgc3Rp
bGwgaW4gdGhlIHByb3Zpc2lvbmFsIHN0YXRlIAotICAgIC8vICh0aGlzIGNhbiBiZSB0aGUgY2Fz
ZSB3aGVuIGxvYWRpbmcgdGhlIHVzZXIgc3R5bGUgc2hlZXQpLCBjb21taXR0aW5nIHRoZSBsb2Fk
IHRoZW4gY2F1c2VzIGFsbAotICAgIC8vIHJlcXVlc3RzIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUg
bV9yZXF1ZXN0c0xvYWRpbmcgbWFwLiBUaGlzIG1lYW5zIHRoYXQgcmVxdWVzdCBtaWdodCBiZSBu
dWxsIGhlcmUuCi0gICAgLy8gSW4gdGhhdCBjYXNlIHdlIGp1c3QgcmV0dXJuIGVhcmx5LiAKLSAg
ICAvLyBBU1NFUlQocmVxdWVzdCk7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKTsKLSAgICAKLSAgICBpZiAocmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgewor
ICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIuZ2V0KCkpOworICAgIGlmIChtX3Jlc291cmNl
LT5pc0NhY2hlVmFsaWRhdG9yKCkpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgPT0gMzA0KSB7CiAgICAgICAgICAgICAvLyAzMDQgTm90IG1vZGlmaWVkIC8gVXNlIGxv
Y2FsIGNvcHkKLSAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShsb2FkZXIpOwog
ICAgICAgICAgICAgbG9hZGVyLT5jbGVhckNsaWVudCgpOwotICAgICAgICAgICAgcmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KHJlcXVlc3QtPmNh
Y2hlZFJlc291cmNlKCkpOworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3Io
bV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBtX2NhY2hl
ZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQobV9yZXNvdXJjZSk7CisgICAg
ICAgICAgICBtX2ZpbmlzaGluZyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIEV4aXN0aW5nIHJl
c291cmNlIGlzIG9rLCBqdXN0IHVzZSBpdCB1cGRhdGluZyB0aGUgZXhwaXJhdGlvbiB0aW1lLgot
ICAgICAgICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0aW9uU3VjY2VlZGVkKHJlc291cmNlLCByZXNw
b25zZSk7CisgICAgICAgICAgICBjYWNoZSgpLT5yZXZhbGlkYXRpb25TdWNjZWVkZWQobV9yZXNv
dXJjZSwgcmVzcG9uc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICByZXF1ZXN0
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0
ZWQoKTsKKyAgICAgICAgICAgIGlmIChtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpKQor
ICAgICAgICAgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxvYWRlcigp
LT5jaGVja0NvbXBsZXRlZCgpOwogCi0gICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKLQorICAg
ICAgICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUodGhpcyk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0gCiAgICAgICAgIC8vIERpZCBub3QgZ2V0IDMwNCByZXNw
b25zZSwgY29udGludWUgYXMgYSByZWd1bGFyIHJlc291cmNlIGxvYWQuCi0gICAgICAgIGNhY2hl
KCktPnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7CisgICAgICAgIGNhY2hlKCktPnJldmFs
aWRhdGlvbkZhaWxlZChtX3Jlc291cmNlKTsKICAgICB9CiAKLSAgICByZXNvdXJjZS0+c2V0UmVz
cG9uc2UocmVzcG9uc2UpOworICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsK
IAogICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKICAg
ICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICByZXNvdXJjZS0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcpOworICAgICAgICBtX3Jlc291cmNlLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7CiAg
ICAgCi0gICAgaWYgKHJlcXVlc3QtPmlzTXVsdGlwYXJ0KCkpIHsKLSAgICAgICAgQVNTRVJUKHJl
c291cmNlLT5pc0ltYWdlKCkpOwotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJl
c291cmNlKS0+Y2xlYXIoKTsKLSAgICAgICAgaWYgKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKyAgICBpZiAobV9tdWx0
aXBhcnQpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb3VyY2UtPmlzSW1hZ2UoKSk7CisgICAgICAg
IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4obV9yZXNvdXJjZSktPmNsZWFyKCk7CisgICAgICAg
IGlmIChtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgbV9jYWNo
ZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CiAg
ICAgfSBlbHNlIGlmIChyZXNwb25zZS5pc011bHRpcGFydCgpKSB7Ci0gICAgICAgIHJlcXVlc3Qt
PnNldElzTXVsdGlwYXJ0KHRydWUpOworICAgICAgICBtX211bHRpcGFydCA9IHRydWU7CiAgICAg
ICAgIAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGluIGEgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIncyByZXF1ZXN0IGNvdW50Ci0gICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCktPmRlY3JlbWVudFJlcXVlc3RDb3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJj
ZSgpKTsKKyAgICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KG1fcmVzb3VyY2UpOwogCiAgICAgICAgIC8vIElmIHdlIGdldCBhIG11bHRpcGFydCByZXNw
b25zZSwgd2UgbXVzdCBoYXZlIGEgaGFuZGxlCiAgICAgICAgIEFTU0VSVChsb2FkZXItPmhhbmRs
ZSgpKTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZS0+aXNJbWFnZSgpKQorICAgICAgICBpZiAoIW1f
cmVzb3VyY2UtPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIGxvYWRlci0+aGFuZGxlKCktPmNhbmNl
bCgpOwogICAgIH0KIH0KIAogdm9pZCBMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQogewotICAgIFJlcXVl
c3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKLSAgICBpZiAoIXJl
cXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAotICAgIEFTU0VSVCghcmVzb3VyY2UtPmlz
Q2FjaGVWYWxpZGF0b3IoKSk7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlci5nZXQoKSk7
CisgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOwogICAgIAotICAg
IGlmIChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgIGlmIChtX3Jlc291cmNlLT5lcnJv
ck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXNvdXJjZS0+cmVzcG9u
c2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIXJlc291cmNlLT5z
aG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpKQotICAgICAgICAgICAgcmVzb3VyY2Ut
PmVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOworICAgIGlmIChtX3Jlc291cmNlLT5y
ZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7CisgICAgICAgIGlmICghbV9yZXNv
dXJjZS0+c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSkKKyAgICAgICAgICAgIG1f
cmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgLy8gU2V0IHRoZSBkYXRhLgotICAgIGlmIChyZXF1ZXN0LT5pc011
bHRpcGFydCgpKSB7CisgICAgaWYgKG1fbXVsdGlwYXJ0KSB7CiAgICAgICAgIC8vIFRoZSBsb2Fk
ZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwg
c2VuZCBlb2YuCiAgICAgICAgIC8vIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRo
ZSBuZXh0IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5LgogICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3BpZWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJlc291cmNlLT5kYXRhKGNvcGllZERhdGEucmVsZWFzZSgp
LCB0cnVlKTsKLSAgICB9IGVsc2UgaWYgKHJlcXVlc3QtPmlzSW5jcmVtZW50YWwoKSkKLSAgICAg
ICAgcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOworICAgICAg
ICBtX3Jlc291cmNlLT5kYXRhKGNvcGllZERhdGEucmVsZWFzZSgpLCB0cnVlKTsKKyAgICB9IGVs
c2UgaWYgKG1faW5jcmVtZW50YWwpCisgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5y
ZXNvdXJjZURhdGEoKSwgZmFsc2UpOwogfQogCiB2b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBzaXplKQogewotICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQo
bG9hZGVyKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAotICAg
IEFTU0VSVCghcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSk7Ci0KLSAgICByZXNvdXJjZS0+
c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGRhdGEsIHNpemUpOworICAgIEFTU0VSVChsb2Fk
ZXIgPT0gbV9sb2FkZXIuZ2V0KCkpOworICAgIEFTU0VSVCghbV9yZXNvdXJjZS0+aXNDYWNoZVZh
bGlkYXRvcigpKTsKKyAgICBtX3Jlc291cmNlLT5zZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEo
ZGF0YSwgc2l6ZSk7CiB9CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDcyOTE4KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRv
IEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVxdWVzdC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZXF1ZXN0OjpSZXF1ZXN0KENh
Y2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2Uq
IG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1Nl
Y3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKLSAgICA6IG1fb2Jq
ZWN0KG9iamVjdCkKLSAgICAsIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpCi0gICAgLCBtX2luY3JlbWVudGFsKGluY3JlbWVudGFsKQotICAgICwgbV9tdWx0aXBh
cnQoZmFsc2UpCi0gICAgLCBtX3Nob3VsZERvU2VjdXJpdHlDaGVjayhzaG91bGREb1NlY3VyaXR5
Q2hlY2spCi0gICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcykKLXsKLSAgICBtX29iamVjdC0+c2V0UmVxdWVzdCh0aGlzKTsKLX0KLQotUmVx
dWVzdDo6flJlcXVlc3QoKQotewotICAgIG1fb2JqZWN0LT5zZXRSZXF1ZXN0KDApOwotfQotCi19
IC8vbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="65938"
          type_id="1"
          status="+"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="65939"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>