<?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>11245</bug_id>
          
          <creation_ts>2006-10-10 11:55:47 -0700</creation_ts>
          <short_desc>HTML5 client-side session &amp; persistent storage should be supported</short_desc>
          <delta_ts>2008-09-07 12:15:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/#storage</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Carson">dacarson</reporter>
          <assigned_to name="David Carson">dacarson</assigned_to>
          <cc>arthur_webkit</cc>
    
    <cc>bedney</cc>
    
    <cc>beidson</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>erik.arvidsson</cc>
    
    <cc>mrowe</cc>
    
    <cc>rik</cc>
    
    <cc>sam</cc>
    
    <cc>vicki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>53567</commentid>
    <comment_count>0</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-10-10 11:55:47 -0700</bug_when>
    <thetext>Firefox 2.0 will have support for this feature and WebKit should support it to.
http://www.mozilla.com/en-US/firefox/2.0/releasenotes/

After discussing with xenon, MacDome and MarvinD on IRC, we decided that the data could be stored in SQLLite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51934</commentid>
    <comment_count>1</comment_count>
      <attachid>11138</attachid>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-10-18 14:36:11 -0700</bug_when>
    <thetext>Created attachment 11138
Framework

This patch is just the framework for sessionStorage support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49304</commentid>
    <comment_count>2</comment_count>
      <attachid>11256</attachid>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-10-27 13:21:55 -0700</bug_when>
    <thetext>Created attachment 11256
Updated framework

This is mostly working for sessionStorage. It is missing the security checks for accessing the value in StorageItem. 
Missing is support for globalStorage and the StorageEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49305</commentid>
    <comment_count>3</comment_count>
      <attachid>11257</attachid>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-10-27 13:24:14 -0700</bug_when>
    <thetext>Created attachment 11257
sessionStorage test page

Very rough sessionStorage test page to test basic functionality.
When testing, you should be able to reload the page, and still access data stored previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29917</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-31 02:27:33 -0800</bug_when>
    <thetext>*** Bug 12489 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73594</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-03-13 11:10:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/5797684&gt;

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79834</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-05-07 13:01:25 -0700</bug_when>
    <thetext>Those following recent checkins have noticed that I have now finished implementing this.
SessionStorage has been complete for weeks and as of yesterday LocalStorage was completed.

Listing all of the checkins involved would not be productive, but as of r32942 this is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90425</commentid>
    <comment_count>7</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2008-09-07 12:15:00 -0700</bug_when>
    <thetext>All -

Note that I just filed bug:

https://bugs.webkit.org/show_bug.cgi?id=20701

showing localStorage not working for file:// or http://localhost URLs.

I&apos;ve attached a testcase to that bug.

Thanks!

Cheers,

- Bill</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11138</attachid>
            <date>2006-10-18 14:36:11 -0700</date>
            <delta_ts>2006-10-27 13:21:55 -0700</delta_ts>
            <desc>Framework</desc>
            <filename>CliStorFramework.txt</filename>
            <type>text/plain</type>
            <size>22699</size>
            <attacher name="David Carson">dacarson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3MTE1KQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDggQEAgYWxsIDogXAog
ICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmggXAogICAgIEpTUmFuZ2UuaCBcCiAgICAgSlNS
YW5nZUV4Y2VwdGlvbi5oIFwKKyAgICBKU1N0b3JhZ2UuaCBcCisgICAgSlNTdG9yYWdlSXRlbS5o
IFwKICAgICBKU1NWR1pvb21FdmVudC5oIFwKICAgICBKU1NWR0FFbGVtZW50LmggXAogICAgIEpT
U1ZHQW5nbGUuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTcxMTUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY3OSw2ICsyNjc5LDE2IEBACiAJCUQyM0NB
NTVEMEFCMEVBQUUwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5oICovOyB9OwogCQlEMjNDQTU1RjBBQjBFQUI2MDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMjNDQTU1RTBBQjBFQUI2MDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlv
bi5jcHAgKi87IH07CiAJCUQyM0NBNTZDMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIzQ0E1
NkIwQUIwRUI4RDAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmggKi87IH07CisJCUQ1NzlGMzM2
MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzMxMEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdl
LmNwcCAqLzsgfTsKKwkJRDU3OUYzMzcwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzMyMEFFNkNC
OUIwMDBDRUNFMCAvKiBTdG9yYWdlLmggKi87IH07CisJCUQ1NzlGMzM4MEFFNkNCOUIwMDBDRUNF
MCAvKiBTdG9yYWdlLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDU3OUYzMzMwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuaWRsICovOyB9Owor
CQlENTc5RjMzOTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzM0MEFFNkNCOUIwMDBDRUNF
MCAvKiBTdG9yYWdlSXRlbS5oICovOyB9OworCQlENTc5RjMzQTBBRTZDQjlCMDAwQ0VDRTAgLyog
U3RvcmFnZUl0ZW0uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENTc5RjMzNTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uaWRsICovOyB9
OworCQlENTc5RjMzRjBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzNCMEFFNkNENzQwMDBD
RUNFMCAvKiBKU1N0b3JhZ2UuY3BwICovOyB9OworCQlENTc5RjM0MDBBRTZDRDc0MDAwQ0VDRTAg
LyogSlNTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBENTc5RjMzQzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi87IH07CisJCUQ1
NzlGMzQxMEFFNkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzNEMEFFNkNENzQwMDBDRUNF
MCAvKiBKU1N0b3JhZ2VJdGVtLmNwcCAqLzsgfTsKKwkJRDU3OUYzNDIwQUU2Q0Q3NDAwMENFQ0Uw
IC8qIEpTU3RvcmFnZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQ1NzlGMzNFMEFFNkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmggKi87
IH07CisJCUQ1NzlGMzQ3MEFFNkQxNDAwMDBDRUNFMCAvKiBTdG9yYWdlSXRlbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENTc5RjM0NjBBRTZEMTQw
MDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uY3BwICovOyB9OwogCQlEQjIzQzJDQjBBNTA4RDI5MDAy
NDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyM0MyQzkwQTUwOEQyOTAwMjQ4OUVCIC8qIEluZGVu
dE91dGRlbnRDb21tYW5kLmNwcCAqLzsgfTsKIAkJREIyM0MyQ0MwQTUwOEQyOTAwMjQ4OUVCIC8q
IEluZGVudE91dGRlbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENv
bW1hbmQuaCAqLzsgfTsKIAkJREQ3NjNCQjIwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHls
aWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDc2
M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLzsgfTsKQEAgLTU2MzksNiAr
NTY0OSwxNiBAQAogCQlEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSYW5nZUV4Y2VwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjNDQTU1RTBBQjBFQUI2MDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNSYW5nZUV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQyM0NBNTZCMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRDU3OUYzMzEwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENTc5RjMzMjBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENTc5RjMzMzBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlENTc5RjMzNDBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VJdGVtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ1NzlGMzM1MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9y
YWdlSXRlbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2VJdGVtLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDU3OUYzM0IwQUU2Q0Q3NDAwMENFQ0UwIC8qIEpT
U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNTdG9y
YWdlLmNwcDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlENTc5RjMz
QzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1N0b3JhZ2UuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJRDU3OUYzM0QwQUU2Q0Q3NDAwMENFQ0UwIC8qIEpTU3RvcmFnZUl0ZW0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTU3RvcmFnZUl0ZW0uY3BwOyBwYXRo
ID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJ
dGVtLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlENTc5RjMzRTBBRTZDRDc0
MDAwQ0VDRTAgLyogSlNTdG9yYWdlSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNTdG9yYWdlSXRlbS5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJdGVtLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJRDU3OUYzNDYwQUU2RDE0MDAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlSXRlbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURCMjNDMkM5MEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRl
bnRPdXRkZW50Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBs
aWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRo
ID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
QEAgLTU4MjAsNiArNTg0MCwxMCBAQAogCQkxNERGQjMzRjBBN0RGNzYzMDAxOEY3NjkgLyogRGVy
aXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlENTc5RjMzQjBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmNwcCAqLywKKwkJCQlE
NTc5RjMzQzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi8sCisJCQkJRDU3OUYzM0Qw
QUU2Q0Q3NDAwMENFQ0UwIC8qIEpTU3RvcmFnZUl0ZW0uY3BwICovLAorCQkJCUQ1NzlGMzNFMEFF
NkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmggKi8sCiAJCQkJQjIwMTExMDUwQUI3NzQw
NTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovLAogCQkJCUIyMDExMTA2MEFCNzc0MDUw
MERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggKi8sCiAJCQkJQjJGQTNDNEUwQUI3NUE2RTAwMEU1
QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAgKi8sCkBAIC04ODU3LDYgKzg4ODEs
MTIgQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRvbSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRDU3OUYzNDYwQUU2RDE0MDAwMENFQ0Uw
IC8qIFN0b3JhZ2VJdGVtLmNwcCAqLywKKwkJCQlENTc5RjMzMTBBRTZDQjlCMDAwQ0VDRTAgLyog
U3RvcmFnZS5jcHAgKi8sCisJCQkJRDU3OUYzMzIwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2Uu
aCAqLywKKwkJCQlENTc5RjMzMzBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZS5pZGwgKi8sCisJ
CQkJRDU3OUYzMzQwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmggKi8sCisJCQkJRDU3
OUYzMzUwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmlkbCAqLywKIAkJCQlCQzNCMzY0
NzA1QzlENUUyMDBFNDI5MDIgLyogQXRvbWljU3RyaW5nTGlzdC5oICovLAogCQkJCUE4QzRBN0ZD
MDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKIAkJCQlBOEM0QTdGQjA5RDU2MzI3MDAw
M0FDOEQgLyogQXR0ci5oICovLApAQCAtMTA0MDgsNiArMTA0MzgsMTAgQEAKIAkJCQk4NTQyQTc5
NTBBRTVDOTQxMDBERjU4REYgLyogSlNTVkdQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0
MkE3OTcwQUU1Qzk0MzAwREY1OERGIC8qIEpTU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTQyQTc5OTBBRTVDOTQ0MDBERjU4REYgLyogSlNTVkdFbGVtZW50V3JhcHBlckZhY3Rvcnku
aCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzM3MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlENTc5RjMzOTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzQwMEFFNkNENzQwMDBDRUNFMCAvKiBK
U1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzQyMEFFNkNENzQwMDBDRUNFMCAv
KiBKU1N0b3JhZ2VJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEwNDQyLDcgKzEwNDc2LDYgQEAK
IAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJ
aXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4
OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlF
bmdsaXNoLApAQCAtMTA0NTcsNyArMTA0OTAsNiBAQAogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0
NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwogCQkJcHJvamVjdERpclBhdGgg
PSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7Ci0JCQlzaG91bGRDaGVja0NvbXBhdGliaWxpdHkg
PSAxOwogCQkJdGFyZ2V0cyA9ICgKIAkJCQk5M0YxOThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2Vi
Q29yZSAqLywKIAkJCQlERDA0MUZCRTA5RDlEREJFMDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2Vz
ICovLApAQCAtMTA1MDIsNiArMTA1MzQsOCBAQAogCQkJCTFDRDQ0MThGMEE0Q0U3NkYwMEEwMDdB
QiAvKiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yLnRpZmYgaW4gUmVzb3VyY2VzICovLAogCQkJCTFD
RDQ0MTkwMEE0Q0U3NkYwMEEwMDdBQiAvKiBub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3Iu
dGlmZiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJNTExNTA5NUMwQTlDRTA0NzAwOTAxMDEzIC8qIHVy
bEljb24udGlmZiBpbiBSZXNvdXJjZXMgKi8sCisJCQkJRDU3OUYzMzgwQUU2Q0I5QjAwMENFQ0Uw
IC8qIFN0b3JhZ2UuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQlENTc5RjMzQTBBRTZDQjlCMDAw
Q0VDRTAgLyogU3RvcmFnZUl0ZW0uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTExNjQxLDYgKzEx
Njc1LDEwIEBACiAJCQkJODU0MkE3OTYwQUU1Qzk0MjAwREY1OERGIC8qIEpTU1ZHUG9pbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODU0MkE3OTgwQUU1Qzk0MzAwREY1OERGIC8qIEpTU1ZHTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NDJBNzlBMEFFNUM5NDQwMERGNThERiAvKiBK
U1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlENTc5RjMz
NjBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlENTc5
RjMzRjBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUQ1NzlGMzQxMEFFNkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUQ1NzlGMzQ3MEFFNkQxNDAwMDBDRUNFMCAvKiBTdG9yYWdlSXRlbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0b3JhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1N0b3JhZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3Rv
cmFnZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VJdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworU3RvcmFnZTo6U3RvcmFnZShET01XaW5kb3cgKmltcGwsIGJvb2wgc2Vzc2lvbikKK3sK
K30KKwordW5zaWduZWQgbG9uZyBTdG9yYWdlOjpsZW5ndGgoKQoreworICAgIHJldHVybiAwOwor
fQorCitTdHJpbmcgU3RvcmFnZTo6a2V5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VJdGVtPiBTdG9yYWdlOjpnZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIHJldHVybiBuZXcgU3RvcmFnZUl0ZW0odGhp
cyk7Cit9CisKK3ZvaWQgU3RvcmFnZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBkYXRhKQoreworfQorCit2b2lkIFN0b3JhZ2U6OnJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogV2ViQ29y
ZS9kb20vU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0b3JhZ2UuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1N0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR29vZ2xlLCBJbmMKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBET01fU3RvcmFnZUltcGxfaAorI2RlZmluZSBET01fU3RvcmFnZUltcGxfaAorCisjaW5jbHVk
ZSAiU2hhcmVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJTdG9y
YWdlSXRlbS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworCWNsYXNzIERPTVdpbmRvdzsKKwkKKwljbGFzcyBTdG9yYWdlIDogcHVibGljIFNo
YXJlZDxTdG9yYWdlPiB7CisJcHVibGljOgorCSAgICBTdG9yYWdlKERPTVdpbmRvdyAqaW1wbCwg
Ym9vbCBzZXNzaW9uKTsKKwkKKwkgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKTsKKwkgICAgU3Ry
aW5nIGtleSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKwkgICAgUGFzc1JlZlB0cjxTdG9yYWdlSXRl
bT4gZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSk7CisJICAgIHZvaWQgc2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKwkgICAgdm9pZCByZW1vdmVJdGVtKGNv
bnN0IFN0cmluZyYga2V5KTsKKwkKKwl9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBET01fU3RvcmFnZUltcGxfaApJbmRleDogV2ViQ29yZS9kb20vU3RvcmFnZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZS5pZGwJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9TdG9yYWdlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworbW9kdWxlIGNvcmUgeworCisgICAgLy8gSW50
cm9kdWNlZCBpbiBXSEFUIFdHIFdlYiBBcHBsaWNhdGlvbiAxLjA6CisgICAgaW50ZXJmYWNlIFN0
b3JhZ2UgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
CisgICAgICAgIAorICAgICAgICBET01TdHJpbmcga2V5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgp
OworICAgICAgICAKKyAgICAgICAgU3RvcmFnZUl0ZW0gZ2V0SXRlbShpbiBET01TdHJpbmcga2V5
KTsKKyAgICAgICAgdm9pZCBzZXRJdGVtKGluIERPTVN0cmluZyBrZXksIGluIERPTVN0cmluZyBk
YXRhKTsKKyAgICAgICAgdm9pZCByZW1vdmVJdGVtKGluIERPTVN0cmluZyBrZXkpOyAgICAgCisg
ICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9kb20vU3RvcmFnZUV2ZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9TdG9yYWdlRXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9kb20vU3RvcmFnZUV2ZW50LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgZXZlbnRzIHsKKworICAgIC8v
IEludHJvZHVjZWQgaW4gV0hBVCBXRyBXZWIgQXBwbGljYXRpb24gMS4wOgorICAgIGludGVyZmFj
ZSBTdG9yYWdlRXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgZG9tYWluOworICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0U3RvcmFnZUV2ZW50KGlu
IERPTVN0cmluZyB0eXBlQXJnLCBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBj
YW5jZWxhYmxlQXJnLCBpbiBET01TdHJpbmcgZG9tYWluQXJnKTsKKyAgICAgICAgdm9pZCBpbml0
U3RvcmFnZUV2ZW50TlMoaW4gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSUFyZywgaW4gRE9NU3RyaW5n
IHR5cGVBcmcsIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVB
cmcsIGluIERPTVN0cmluZyBkb21haW5BcmcpOworICAgICAgICAKKyAgICB9OworCit9CkluZGV4
OiBXZWJDb3JlL2RvbS9TdG9yYWdlSXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
U3RvcmFnZUl0ZW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RvcmFnZUl0ZW0u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBHb29nbGUsIEluYworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VJdGVtLmgiCisjaW5jbHVkZSAiU3RvcmFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFdpbGwgbmVlZCB0aGUgbGluayBiYWNrIHRvIHRoZSBvd25pbmcgc3RvcmFnZQorLy8gb2Jq
ZWN0IGFzIFN0b3JhZ2VJdGVtIGlzIGEgc2hhbGxvdyBjb3B5IGFuZCBhbGwgc2V0cy9nZXRzCisv
LyBuZWVkIHRvIGJlIHBlcmZvcm1lZCB0aHJvdWdoIHRoZSBzdG9yYWdlIG9iamVjdC4KK1N0b3Jh
Z2VJdGVtOjpTdG9yYWdlSXRlbShTdG9yYWdlKiBpbXBsKQoreworfQorCitib29sIFN0b3JhZ2VJ
dGVtOjpzZWN1cmUoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIFN0b3JhZ2VJdGVtOjpz
ZXRTZWN1cmUoYm9vbCB2YWx1ZSkKK3sKK30KKworU3RyaW5nIFN0b3JhZ2VJdGVtOjp2YWx1ZSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFN0b3JhZ2VJdGVtOjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
SW5kZXg6IFdlYkNvcmUvZG9tL1N0b3JhZ2VJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vU3RvcmFnZUl0ZW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1N0b3JhZ2VJdGVt
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdvb2dsZSwgSW5jCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRE9NX1N0b3JhZ2VJdGVtSW1wbF9oCisjZGVmaW5l
IERPTV9TdG9yYWdlSXRlbUltcGxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisJY2xhc3MgU3RvcmFnZTsKKwkKKwljbGFzcyBTdG9yYWdl
SXRlbSA6IHB1YmxpYyBTaGFyZWQ8U3RvcmFnZUl0ZW0+IHsKKwlwdWJsaWM6CisJICAgIFN0b3Jh
Z2VJdGVtKFN0b3JhZ2UgKmltcGwpOworCQorCSAgICBib29sIHNlY3VyZSgpOworCSAgICB2b2lk
IHNldFNlY3VyZShib29sIHZhbHVlKTsKKwkgICAgU3RyaW5nIHZhbHVlKCk7CisJICAgIHZvaWQg
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisJCisJfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRE9NX1N0b3JhZ2VJdGVtSW1wbF9oCkluZGV4OiBXZWJDb3Jl
L2RvbS9TdG9yYWdlSXRlbS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZUl0
ZW0uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RvcmFnZUl0ZW0uaWRsCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2ds
ZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICov
Cittb2R1bGUgY29yZSB7CisKKyAgICAvLyBJbnRyb2R1Y2VkIGluIFdIQVQgV0cgV2ViIEFwcGxp
Y2F0aW9uIDEuMDoKKyAgICBpbnRlcmZhY2UgU3RvcmFnZUl0ZW0geworICAgICAgICAKKyAgICAg
ICAgYXR0cmlidXRlIGJvb2xlYW4gc2VjdXJlOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHZhbHVlOyAgICAgICAKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2RvbS9TdG9yYWdlTGlz
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZUxpc3QuaWRsCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9kb20vU3RvcmFnZUxpc3QuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCittb2R1bGUgY29yZSB7
CisKKyAgICBpbnRlcmZhY2UgU3RvcmFnZUxpc3QgeworICAgICAgICBTdG9yYWdlIG5hbWVkSXRl
bShpbiBET01TdHJpbmcgZG9tYWluKTsgIAorICAgIH07CisKK30KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CShyZXZpc2lvbiAxNzExNSkKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiU3RvcmFnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDQgKzkwLDkgQEAgZG91YmxlIERPTVdpbmRvdzo6
ZGV2aWNlUGl4ZWxSYXRpbygpIGNvbgogICAgIHJldHVybiBzY2FsZUZhY3RvcihtX2ZyYW1lLT5w
YWdlKCkpOwogfQogCitTdG9yYWdlKiBET01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKCkKK3sKKyAg
ICByZXR1cm4gbmV3IFN0b3JhZ2UodGhpcywgdHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDE3MTE1KQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIFN0
cmluZzsKKyAgICBjbGFzcyBTdG9yYWdlOwogICAgIAogICAgIGNsYXNzIERPTVdpbmRvdyA6IHB1
YmxpYyBTaGFyZWQ8RE9NV2luZG93PiB7CiAgICAgcHVibGljOgpAQCAtNTMsNiArNTQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1h
dGNoZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0
aG9yT25seSA9IHRydWUpIGNvbnN0OwogICAgICAgICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygp
IGNvbnN0OwogICAgICAgICAKKyAgICAgICAgLy8gV0hBVCBXRyBXZWIgQXBwbGljYXRpb24gMS4w
CisgICAgICAgIFN0b3JhZ2UqIHNlc3Npb25TdG9yYWdlKCk7CisgICAgICAgIAogICAgIHByaXZh
dGU6CiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAko
cmV2aXNpb24gMTcxMTUpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNjksNiArNjksOCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRl
IFhQYXRoRXZhbHVhdG9yQ29uc3RydWN0b3IgWFBhdGhFdmFsdWF0b3I7CiAgICAgICAgIGF0dHJp
YnV0ZSBYUGF0aFJlc3VsdENvbnN0cnVjdG9yIFhQYXRoUmVzdWx0OwogI2VuZGlmCisJCSAgICAg
ICAgCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTdG9yYWdlICBzZXNzaW9uU3RvcmFnZTsK
ICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11256</attachid>
            <date>2006-10-27 13:21:55 -0700</date>
            <delta_ts>2006-10-27 13:21:55 -0700</delta_ts>
            <desc>Updated framework</desc>
            <filename>firstpass.txt</filename>
            <type>text/plain</type>
            <size>25544</size>
            <attacher name="David Carson">dacarson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3MzY2KQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDggQEAgYWxsIDogXAog
ICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmggXAogICAgIEpTUmFuZ2UuaCBcCiAgICAgSlNS
YW5nZUV4Y2VwdGlvbi5oIFwKKyAgICBKU1N0b3JhZ2UuaCBcCisgICAgSlNTdG9yYWdlSXRlbS5o
IFwKICAgICBKU1NWR1pvb21FdmVudC5oIFwKICAgICBKU1NWR0FFbGVtZW50LmggXAogICAgIEpT
U1ZHQW5nbGUuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTczNjYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY4OSw2ICsyNjg5LDE2IEBACiAJCUQyM0NB
NTVEMEFCMEVBQUUwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5oICovOyB9OwogCQlEMjNDQTU1RjBBQjBFQUI2MDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMjNDQTU1RTBBQjBFQUI2MDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlv
bi5jcHAgKi87IH07CiAJCUQyM0NBNTZDMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIzQ0E1
NkIwQUIwRUI4RDAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmggKi87IH07CisJCUQ1NzlGMzM2
MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzMxMEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdl
LmNwcCAqLzsgfTsKKwkJRDU3OUYzMzcwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzMyMEFFNkNC
OUIwMDBDRUNFMCAvKiBTdG9yYWdlLmggKi87IH07CisJCUQ1NzlGMzM4MEFFNkNCOUIwMDBDRUNF
MCAvKiBTdG9yYWdlLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDU3OUYzMzMwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuaWRsICovOyB9Owor
CQlENTc5RjMzOTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzM0MEFFNkNCOUIwMDBDRUNF
MCAvKiBTdG9yYWdlSXRlbS5oICovOyB9OworCQlENTc5RjMzQTBBRTZDQjlCMDAwQ0VDRTAgLyog
U3RvcmFnZUl0ZW0uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENTc5RjMzNTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uaWRsICovOyB9
OworCQlENTc5RjMzRjBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzNCMEFFNkNENzQwMDBD
RUNFMCAvKiBKU1N0b3JhZ2UuY3BwICovOyB9OworCQlENTc5RjM0MDBBRTZDRDc0MDAwQ0VDRTAg
LyogSlNTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBENTc5RjMzQzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi87IH07CisJCUQ1
NzlGMzQxMEFFNkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ1NzlGMzNEMEFFNkNENzQwMDBDRUNF
MCAvKiBKU1N0b3JhZ2VJdGVtLmNwcCAqLzsgfTsKKwkJRDU3OUYzNDIwQUU2Q0Q3NDAwMENFQ0Uw
IC8qIEpTU3RvcmFnZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQ1NzlGMzNFMEFFNkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmggKi87
IH07CisJCUQ1NzlGMzQ3MEFFNkQxNDAwMDBDRUNFMCAvKiBTdG9yYWdlSXRlbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENTc5RjM0NjBBRTZEMTQw
MDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0uY3BwICovOyB9OwogCQlEQjIzQzJDQjBBNTA4RDI5MDAy
NDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyM0MyQzkwQTUwOEQyOTAwMjQ4OUVCIC8qIEluZGVu
dE91dGRlbnRDb21tYW5kLmNwcCAqLzsgfTsKIAkJREIyM0MyQ0MwQTUwOEQyOTAwMjQ4OUVCIC8q
IEluZGVudE91dGRlbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENv
bW1hbmQuaCAqLzsgfTsKIAkJREQ3NjNCQjIwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHls
aWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDc2
M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLzsgfTsKQEAgLTU2NjAsNiAr
NTY3MCwxNiBAQAogCQlEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSYW5nZUV4Y2VwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjNDQTU1RTBBQjBFQUI2MDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNSYW5nZUV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQyM0NBNTZCMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRDU3OUYzMzEwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENTc5RjMzMjBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENTc5RjMzMzBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlENTc5RjMzNDBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZUl0ZW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VJdGVtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ1NzlGMzM1MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9y
YWdlSXRlbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2VJdGVtLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDU3OUYzM0IwQUU2Q0Q3NDAwMENFQ0UwIC8qIEpT
U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNTdG9y
YWdlLmNwcDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlENTc5RjMz
QzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1N0b3JhZ2UuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJRDU3OUYzM0QwQUU2Q0Q3NDAwMENFQ0UwIC8qIEpTU3RvcmFnZUl0ZW0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTU3RvcmFnZUl0ZW0uY3BwOyBwYXRo
ID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJ
dGVtLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlENTc5RjMzRTBBRTZDRDc0
MDAwQ0VDRTAgLyogSlNTdG9yYWdlSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNTdG9yYWdlSXRlbS5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJdGVtLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJRDU3OUYzNDYwQUU2RDE0MDAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlSXRlbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURCMjNDMkM5MEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRl
bnRPdXRkZW50Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBs
aWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRo
ID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
QEAgLTU4NDEsNiArNTg2MSwxMCBAQAogCQkxNERGQjMzRjBBN0RGNzYzMDAxOEY3NjkgLyogRGVy
aXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlENTc5RjMzQjBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmNwcCAqLywKKwkJCQlE
NTc5RjMzQzBBRTZDRDc0MDAwQ0VDRTAgLyogSlNTdG9yYWdlLmggKi8sCisJCQkJRDU3OUYzM0Qw
QUU2Q0Q3NDAwMENFQ0UwIC8qIEpTU3RvcmFnZUl0ZW0uY3BwICovLAorCQkJCUQ1NzlGMzNFMEFF
NkNENzQwMDBDRUNFMCAvKiBKU1N0b3JhZ2VJdGVtLmggKi8sCiAJCQkJQjIwMTExMDUwQUI3NzQw
NTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovLAogCQkJCUIyMDExMTA2MEFCNzc0MDUw
MERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggKi8sCiAJCQkJQjJGQTNDNEUwQUI3NUE2RTAwMEU1
QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAgKi8sCkBAIC04ODk5LDYgKzg5MjMs
MTIgQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRvbSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRDU3OUYzNDYwQUU2RDE0MDAwMENFQ0Uw
IC8qIFN0b3JhZ2VJdGVtLmNwcCAqLywKKwkJCQlENTc5RjMzMTBBRTZDQjlCMDAwQ0VDRTAgLyog
U3RvcmFnZS5jcHAgKi8sCisJCQkJRDU3OUYzMzIwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2Uu
aCAqLywKKwkJCQlENTc5RjMzMzBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFnZS5pZGwgKi8sCisJ
CQkJRDU3OUYzMzQwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmggKi8sCisJCQkJRDU3
OUYzMzUwQUU2Q0I5QjAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmlkbCAqLywKIAkJCQlCQzNCMzY0
NzA1QzlENUUyMDBFNDI5MDIgLyogQXRvbWljU3RyaW5nTGlzdC5oICovLAogCQkJCUE4QzRBN0ZD
MDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKIAkJCQlBOEM0QTdGQjA5RDU2MzI3MDAw
M0FDOEQgLyogQXR0ci5oICovLApAQCAtMTA0MzcsNiArMTA0NjcsMTAgQEAKIAkJCQk4NTQyQTc5
NTBBRTVDOTQxMDBERjU4REYgLyogSlNTVkdQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0
MkE3OTcwQUU1Qzk0MzAwREY1OERGIC8qIEpTU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTQyQTc5OTBBRTVDOTQ0MDBERjU4REYgLyogSlNTVkdFbGVtZW50V3JhcHBlckZhY3Rvcnku
aCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzM3MEFFNkNCOUIwMDBDRUNFMCAvKiBTdG9yYWdl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlENTc5RjMzOTBBRTZDQjlCMDAwQ0VDRTAgLyogU3RvcmFn
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzQwMEFFNkNENzQwMDBDRUNFMCAvKiBK
U1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUQ1NzlGMzQyMEFFNkNENzQwMDBDRUNFMCAv
KiBKU1N0b3JhZ2VJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlFREVDOTgwMzBBRUQ3RTE3MDA1
OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2Qjg0RTIwQUVB
MUQzMTAwQTA5NUI0IC8qIFJlc291cmNlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTZCODRFMzBBRUExRDMxMDBBMDk1QjQgLyogUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDUzMSw2ICsxMDU2NSw4IEBACiAJCQkJQTc2MzhBOTIwOTk1OTJD
MzAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsIGluIFJlc291cmNl
cyAqLywKIAkJCQlBQjQyNjFEODBBMkY2Qzk3MDBCREQxN0QgLyogbWlzc2luZ0ltYWdlLnRpZmYg
aW4gUmVzb3VyY2VzICovLAogCQkJCTUxMTUwOTVDMEE5Q0UwNDcwMDkwMTAxMyAvKiB1cmxJY29u
LnRpZmYgaW4gUmVzb3VyY2VzICovLAorCQkJCUQ1NzlGMzM4MEFFNkNCOUIwMDBDRUNFMCAvKiBT
dG9yYWdlLmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJRDU3OUYzM0EwQUU2Q0I5QjAwMENFQ0Uw
IC8qIFN0b3JhZ2VJdGVtLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUMxNEU3NkIwQUQ4Qzgx
QzAwQjYxNThCIC8qIGRlbGV0ZUJ1dHRvblByZXNzZWQudGlmZiBpbiBSZXNvdXJjZXMgKi8sCiAJ
CQkJMUMxNEU3NkMwQUQ4QzgxQzAwQjYxNThCIC8qIGRlbGV0ZUJ1dHRvbi50aWZmIGluIFJlc291
cmNlcyAqLywKIAkJCQk4NTEzNkM5OTBBRUQ2NjU5MDBGOTBBM0QgLyogZWFzdFJlc2l6ZUN1cnNv
ci5wbmcgaW4gUmVzb3VyY2VzICovLApAQCAtMTE2NzYsNiArMTE3MTIsMTAgQEAKIAkJCQk4NTQy
QTc5NjBBRTVDOTQyMDBERjU4REYgLyogSlNTVkdQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NTQyQTc5ODBBRTVDOTQzMDBERjU4REYgLyogSlNTVkdOdW1iZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODU0MkE3OUEwQUU1Qzk0NDAwREY1OERGIC8qIEpTU1ZHRWxlbWVudFdyYXBwZXJG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ1NzlGMzM2MEFFNkNCOUIwMDBDRUNFMCAv
KiBTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ1NzlGMzNGMEFFNkNENzQwMDBDRUNF
MCAvKiBKU1N0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDU3OUYzNDEwQUU2Q0Q3NDAw
MENFQ0UwIC8qIEpTU3RvcmFnZUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDU3OUYzNDcw
QUU2RDE0MDAwMENFQ0UwIC8qIFN0b3JhZ2VJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
NkI4NEUwMEFFQTFEMzEwMEEwOTVCNCAvKiBSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTZCODRFQjBBRUExRERBMDBBMDk1QjQgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQk4NTNDQTlENjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2RvbS9TdG9yYWdlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAor
LyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR29vZ2xlLCBJbmMKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKyAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUl0ZW0uaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RvcmFn
ZTo6U3RvcmFnZShET01XaW5kb3cgKmltcGwsIGJvb2wgc2Vzc2lvbikKKzogbV93aW5kb3coaW1w
bCkKK3sKK30KKwordW5zaWduZWQgbG9uZyBTdG9yYWdlOjpsZW5ndGgoKQoreworICAgIHJldHVy
biBtX2tleVZlY3Rvci5zaXplKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlOjprZXkodW5zaWduZWQg
bG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgY29kZSkKK3sKKyAgICAvLyBJcyBpdCBvdXQgb2Yg
Ym91bmRzCisgICAgaWYgKGluZGV4ID4gbV9rZXlWZWN0b3Iuc2l6ZSgpKSB7CisgICAgICAgIGNv
ZGUgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbV9rZXlWZWN0b3JbaW5kZXhdOworfQorCitQYXNzUmVmUHRyPFN0b3Jh
Z2VJdGVtPiBTdG9yYWdlOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIC8vIERv
IHdlIGhhdmUgdGhpcyBrZXk/CisgICAgaWYgKCFtX2tleVZhbHVlTWFwLmNvbnRhaW5zKGtleSkp
CisgICAgICAgIHJldHVybiAwOyAKKyAgICAKKyAgICByZXR1cm4gbmV3IFN0b3JhZ2VJdGVtKHRo
aXMsIGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIC8vIGRvIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRo
ZSBWZWN0b3Igb3IgZG9lcyBpdCBhbHJlYWR5IGV4aXN0CisgICAgaWYgKCFtX2tleVZhbHVlTWFw
LmNvbnRhaW5zKGtleSkpCisgICAgICAgIG1fa2V5VmVjdG9yLmFwcGVuZChrZXkpOworICAgIAor
ICAgIGJvb2wgc2VjdXJlU3RvcmFnZSA9IGZhbHNlOworICAgIG1fa2V5VmFsdWVNYXAuc2V0KGtl
eSwgU3RvcmFnZURhdGEoZGF0YSwgc2VjdXJlU3RvcmFnZSkpOworfQorCit2b2lkIFN0b3JhZ2U6
OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgLy8gRmluZCB0aGUgaXRlbSBp
biB0aGUgdmVjdG9yIGZpcnN0LCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlcmUKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1fa2V5VmVjdG9yLnNpemUoKTsgaSsrKQorICAgICAgICBp
ZiAobV9rZXlWZWN0b3JbaV0gPT0ga2V5KSB7CisgICAgICAgICAgICBtX2tleVZlY3Rvci5yZW1v
dmUoaSk7CisgICAgICAgICAgICBtX2tleVZhbHVlTWFwLnJlbW92ZShrZXkpOworICAgICAgICB9
Cit9CisKK1N0cmluZyBTdG9yYWdlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmICBrZXkpCit7Cisg
ICAgaWYgKG1fa2V5VmFsdWVNYXAuY29udGFpbnMoa2V5KSkKKyAgICAgICByZXR1cm4gIG1fa2V5
VmFsdWVNYXAuZ2V0KGtleSkuZGF0YTsKKyAgICAgICAKKyAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBXZWJDb3JlL2RvbS9TdG9yYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vU3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYworICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIERPTV9TdG9yYWdlSW1w
bF9oCisjZGVmaW5lIERPTV9TdG9yYWdlSW1wbF9oCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIlN0b3JhZ2VJdGVtLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgU3RvcmFn
ZURhdGEgeworICAgIFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VjKSA6
IGRhdGEodmFsdWUpLCBzZWN1cmUoc2VjKSB7fQorICAgIFN0b3JhZ2VEYXRhKCkge30KKyAgICBT
dHJpbmcgZGF0YTsKKyAgICBib29sIHNlY3VyZTsKK307CisgICAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKKworCWNsYXNzIERPTVdpbmRvdzsKKwkKKwljbGFzcyBTdG9yYWdlIDogcHVibGlj
IFNoYXJlZDxTdG9yYWdlPiB7CisJcHVibGljOgorCSAgICBTdG9yYWdlKERPTVdpbmRvdyAqaW1w
bCwgYm9vbCBzZXNzaW9uKTsKKwkKKyAgICAgICAgLy8gRE9NIGludGVyZmFjZXMKKwkgICAgdW5z
aWduZWQgbG9uZyBsZW5ndGgoKTsKKwkgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBsb25nIGluZGV4
LCBFeGNlcHRpb25Db2RlJiBjb2RlKTsKKwkgICAgUGFzc1JlZlB0cjxTdG9yYWdlSXRlbT4gZ2V0
SXRlbShjb25zdCBTdHJpbmcmIGtleSk7CisJICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKwkgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0
cmluZyYga2V5KTsKKyAgICAgICAgCisgICAgICAgIC8vIEV4dHJhIGludGVyZmFjZXMKKyAgICAg
ICAgU3RyaW5nIGdldFZhbHVlKGNvbnN0IFN0cmluZyYgIGtleSk7CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIERPTVdpbmRvdyogbV93aW5kb3c7CisgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdG9yYWdlRGF0YT4gbV9rZXlWYWx1ZU1hcDsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bV9rZXlWZWN0b3I7CisJCisJfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRE9NX1N0b3JhZ2VJbXBsX2gKSW5kZXg6IFdlYkNvcmUvZG9tL1N0b3JhZ2UuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0b3JhZ2UuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9kb20vU3RvcmFnZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKi8KK21vZHVsZSBjb3JlIHsKKworICAgIC8vIEludHJvZHVj
ZWQgaW4gV0hBVCBXRyBXZWIgQXBwbGljYXRpb24gMS4wOgorICAgIGludGVyZmFjZSBTdG9yYWdl
IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAg
ICAgICAKKyAgICAgICAgRE9NU3RyaW5nIGtleShpbiB1bnNpZ25lZCBsb25nIGluZGV4KQorICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7IC8vIElOREVYX1NJWkVfRVJSCisgICAgICAg
IAorICAgICAgICBTdG9yYWdlSXRlbSBnZXRJdGVtKGluIERPTVN0cmluZyBrZXkpOworICAgICAg
ICB2b2lkIHNldEl0ZW0oaW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NU3RyaW5nIGRhdGEpOyAvLyBm
b3IgU2VjdXJpdHkgRXhjZXB0aW9uIHJldHVybiBudWxsCisgICAgICAgICAgICAgCisgICAgICAg
IHZvaWQgcmVtb3ZlSXRlbShpbiBET01TdHJpbmcga2V5KTsgIC8vIGZvciBTZWN1cml0eSBFeGNl
cHRpb24gcmV0dXJuIG51bGwKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2RvbS9TdG9yYWdl
RXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0b3JhZ2VFdmVudC5pZGwJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9TdG9yYWdlRXZlbnQuaWRsCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVs
ZSBldmVudHMgeworCisgICAgLy8gSW50cm9kdWNlZCBpbiBXSEFUIFdHIFdlYiBBcHBsaWNhdGlv
biAxLjA6CisgICAgaW50ZXJmYWNlIFN0b3JhZ2VFdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47CisgICAgICAgIAorICAgICAgICB2b2lk
IGluaXRTdG9yYWdlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVBcmcsIGluIGJvb2xlYW4gY2FuQnVi
YmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIGluIERPTVN0cmluZyBkb21haW5Bcmcp
OworICAgICAgICB2b2lkIGluaXRTdG9yYWdlRXZlbnROUyhpbiBET01TdHJpbmcgbmFtZXNwYWNl
VVJJQXJnLCBpbiBET01TdHJpbmcgdHlwZUFyZywgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsIGlu
IGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgaW4gRE9NU3RyaW5nIGRvbWFpbkFyZyk7CisgICAgICAg
IAorICAgIH07CisKK30KSW5kZXg6IFdlYkNvcmUvZG9tL1N0b3JhZ2VJdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TdG9yYWdlSXRlbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2RvbS9TdG9yYWdlSXRlbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8q
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisgCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3RvcmFnZUl0ZW0uaCIKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2lsbCBuZWVkIHRoZSBsaW5rIGJhY2sgdG8gdGhlIG93
bmluZyBzdG9yYWdlCisvLyBvYmplY3QgYXMgU3RvcmFnZUl0ZW0gaXMgYSBzaGFsbG93IGNvcHkg
YW5kIGFsbCBzZXRzL2dldHMKKy8vIG5lZWQgdG8gYmUgcGVyZm9ybWVkIHRocm91Z2ggdGhlIHN0
b3JhZ2Ugb2JqZWN0LgorU3RvcmFnZUl0ZW06OlN0b3JhZ2VJdGVtKFN0b3JhZ2UqIGltcGwsIGNv
bnN0IFN0cmluZyYga2V5KQorOiBtX293bmVyKGltcGwpLCBtX2tleShrZXkpCit7CisgICAgLy8g
bmVlZCB0byBjb3B5IHRoZSBrZXkgYXMgdGhlIGtleSBjb3VsZCBiZSBjaGFuZ2VkIG9yIHJlbW92
ZWQKKwkvLyBmcm9tIHRoZSBzdG9yYWdlIG9iamVjdC4KK30KKworYm9vbCBTdG9yYWdlSXRlbTo6
c2VjdXJlKEV4Y2VwdGlvbkNvZGUmIGNvZGUpCit7CisgIC8vIG11c3QgY2hlY2sgYWdhaW4gdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGN1cnJlbnQgc2NyaXB0IGlzIGFsbG93ZWQKKyAgLy8gdG8gYWNj
ZXNzCisgICAgcmV0dXJuIG1fc2VjdXJlOworfQorCit2b2lkIFN0b3JhZ2VJdGVtOjpzZXRTZWN1
cmUoYm9vbCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgY29kZSkKK3sKKyAgICBtX3NlY3VyZSA9IHZh
bHVlOworfQorCitTdHJpbmcgU3RvcmFnZUl0ZW06OnZhbHVlKCkKK3sKKyAgICByZXR1cm4gbV9v
d25lci0+Z2V0VmFsdWUobV9rZXkpOworfQorCit2b2lkIFN0b3JhZ2VJdGVtOjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fb3duZXItPnNldEl0ZW0obV9rZXksIHZhbHVl
KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFdlYkNvcmUvZG9tL1N0
b3JhZ2VJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RvcmFnZUl0ZW0uaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1N0b3JhZ2VJdGVtLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgRE9NX1N0b3JhZ2VJdGVtSW1wbF9oCisjZGVmaW5lIERPTV9TdG9yYWdlSXRlbUltcGxf
aAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisJY2xhc3MgU3RvcmFnZTsKKyAgICAKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwor
CQorCWNsYXNzIFN0b3JhZ2VJdGVtIDogcHVibGljIFNoYXJlZDxTdG9yYWdlSXRlbT4geworCXB1
YmxpYzoKKwkgICAgU3RvcmFnZUl0ZW0oU3RvcmFnZSAqaW1wbCwgY29uc3QgU3RyaW5nJiBrZXkp
OworCQorICAgICAgICAvLyBET00gaW50ZXJmYWNlcworCSAgICBib29sIHNlY3VyZShFeGNlcHRp
b25Db2RlJiBjb2RlKTsKKwkgICAgdm9pZCBzZXRTZWN1cmUoYm9vbCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgY29kZSk7CisJICAgIFN0cmluZyB2YWx1ZSgpOworCSAgICB2b2lkIHNldFZhbHVlKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworCQkKKwlwcml2YXRlOgorCSAgICBTdG9yYWdlKiBtX293bmVy
OworCQlTdHJpbmcgbV9rZXk7CisgICAgICAgIGJvb2wgbV9zZWN1cmU7CisJCisJfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NX1N0b3JhZ2VJdGVtSW1wbF9oCklu
ZGV4OiBXZWJDb3JlL2RvbS9TdG9yYWdlSXRlbS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vU3RvcmFnZUl0ZW0uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RvcmFnZUl0
ZW0uaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICovCittb2R1bGUgY29yZSB7CisKKyAgICAvLyBJbnRyb2R1Y2VkIGluIFdIQVQg
V0cgV2ViIEFwcGxpY2F0aW9uIDEuMDoKKyAgICBpbnRlcmZhY2UgU3RvcmFnZUl0ZW0geworICAg
ICAgICAKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gc2VjdXJlCisgICAgICAgICAgICBnZXR0
ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbikgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOyAvLyBJ
TlZBTElEX0FDQ0VTU19FUlIKKyAgICAgICAgICAgIAorICAgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHZhbHVlOyAgICAgCisgICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9kb20vU3RvcmFnZUxp
c3QuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0b3JhZ2VMaXN0LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZG9tL1N0b3JhZ2VMaXN0LmlkbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworbW9kdWxlIGNvcmUg
eworCisgICAgaW50ZXJmYWNlIFN0b3JhZ2VMaXN0IHsKKyAgICAgICAgU3RvcmFnZSBuYW1lZEl0
ZW0oaW4gRE9NU3RyaW5nIGRvbWFpbik7ICAKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAkocmV2aXNpb24gMTczNjYpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmVlbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw2ICs1MCw3IEBAIEZyYW1lKiBET01XaW5kb3c6
OmZyYW1lKCkKIHZvaWQgRE9NV2luZG93OjpkaXNjb25uZWN0RnJhbWUoKQogewogICAgIG1fZnJh
bWUgPSAwOworICAgIAogfQogCiBEb2N1bWVudCogRE9NV2luZG93Ojpkb2N1bWVudCgpIGNvbnN0
CkBAIC04OSw0ICs5MSwyMSBAQCBkb3VibGUgRE9NV2luZG93OjpkZXZpY2VQaXhlbFJhdGlvKCkg
Y29uCiAgICAgcmV0dXJuIHNjYWxlRmFjdG9yKG1fZnJhbWUtPnBhZ2UoKSk7CiB9CiAKK1N0b3Jh
Z2UqIERPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UoKQoreworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIFN0cmluZyBob3N0TmFtZShtX2ZyYW1lLT51
cmwoKS5ob3N0KCkpOworICAgIFN0b3JhZ2UqIHN0b3JlOworICAgIAorICAgIGlmICgoc3RvcmUg
PSBtX3Nlc3Npb25TdG9yYWdlTWFwLmdldChob3N0TmFtZSkpKQorICAgICAgICByZXR1cm4gc3Rv
cmU7CisgICAgCisgICAgc3RvcmUgPSBuZXcgU3RvcmFnZSh0aGlzLCB0cnVlKTsKKyAgICBtX3Nl
c3Npb25TdG9yYWdlTWFwLnNldChob3N0TmFtZSwgc3RvcmUpOworICAgIAorICAgIHJldHVybiBz
dG9yZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNp
b24gMTczNjYpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIlNoYXJlZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2hhc2htYXAuaD4KKyNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NSdWxlTGlzdDsKQEAgLTM2
LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAg
Y2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFN0b3JhZ2U7CiAgICAg
CiAgICAgY2xhc3MgRE9NV2luZG93IDogcHVibGljIFNoYXJlZDxET01XaW5kb3c+IHsKICAgICBw
dWJsaWM6CkBAIC01Myw4ICs1NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3Qg
U3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0aG9yT25seSA9IHRydWUpIGNvbnN0OwogICAgICAg
ICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0OwogICAgICAgICAKKyAgICAgICAgLy8g
V0hBVCBXRyBXZWIgQXBwbGljYXRpb24gMS4wCisgICAgICAgIFN0b3JhZ2UqIHNlc3Npb25TdG9y
YWdlKCk7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RvcmFnZSo+IG1fc2Vzc2lvblN0b3JhZ2VNYXA7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlz
aW9uIDE3MzY2KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDYgKzY5LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBYUGF0
aEV2YWx1YXRvckNvbnN0cnVjdG9yIFhQYXRoRXZhbHVhdG9yOwogICAgICAgICBhdHRyaWJ1dGUg
WFBhdGhSZXN1bHRDb25zdHJ1Y3RvciBYUGF0aFJlc3VsdDsKICNlbmRpZgorCQkgICAgICAgIAor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU3RvcmFnZSAgc2Vzc2lvblN0b3JhZ2U7CiAgICAg
fTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>11257</attachid>
            <date>2006-10-27 13:24:14 -0700</date>
            <delta_ts>2006-10-27 13:24:14 -0700</delta_ts>
            <desc>sessionStorage test page</desc>
            <filename>sessionTest.html</filename>
            <type>application/xhtml+xml</type>
            <size>1061</size>
            <attacher name="David Carson">dacarson</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c2NyaXB0PgpmdW5jdGlvbiB0ZXN0KCkKewogICAgdmFyIHMgPSBzZXNz
aW9uU3RvcmFnZTsKICAgIGFsZXJ0KHMpOwogICAgYWxlcnQocy5sZW5ndGgpOwp9CgpmdW5jdGlv
biBhZGRzdHVmZigpCnsKICAgIHZhciBzID0gc2Vzc2lvblN0b3JhZ2U7CiAgICBzLnNldEl0ZW0o
J2VtYWlsJywnZGFjYXJzb25AZ21haWwuY29tJyk7CiAgICB2YXIgbnVtPTMuMTQxNTM5ODsKICAg
IHMuc2V0SXRlbSgncGknLCBudW0pOwp9CgpmdW5jdGlvbiBzaG93c3R1ZmYoKQp7CiAgICB2YXIg
cz1zZXNzaW9uU3RvcmFnZTsKICAgIGFsZXJ0KHMuZ2V0SXRlbSgnZW1haWwnKS52YWx1ZSk7CiAg
ICBhbGVydChzLmdldEl0ZW0oJ3BpJykudmFsdWUpOwogICAgYWxlcnQocy5nZXRJdGVtKCdtaXNz
aW5nJykpOwp9CgpmdW5jdGlvbiBzZXQodmFsdWVGb3JtKQp7CglzZXNzaW9uU3RvcmFnZS5zZXRJ
dGVtKHZhbHVlRm9ybS5rZXksIHZhbHVlRm9ybS5kYXRhKTsKfQoKZnVuY3Rpb24gZ2V0KHZhbHVl
Rm9ybSkKewoJdmFyIGl0ZW0gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHZhbHVlRm9ybS5rZXkp
OwoJaWYgKGl0ZW0gIT0gbnVsbCkKCSAgICBhbGVydChpdGVtLnZhbHVlKTsKCWVsc2UKCSAgICBh
bGVydCgiTm8gZGF0YSBzdG9yZWQgZm9yIGtleSIpOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5
Pgo8YSBocmVmPSJqYXZhc2NyaXB0OnRlc3QoKSI+dGVzdDwvYT4KPGEgaHJlZj0iamF2YXNjcmlw
dDphZGRzdHVmZigpIj5BZGQgc3R1ZmY8L2E+CjxhIGhyZWY9ImphdmFzY3JpcHQ6c2hvd3N0dWZm
KCkiPlNob3cgc3R1ZmY8L2E+Cgo8Zm9ybSBvbnN1Ym1pdD0icmV0dXJuIGZhbHNlOyI+Ck5hbWU6
IDxpbnB1dCBuYW1lPSJrZXkiPgpWYWx1ZTogPGlucHV0IG5hbWU9ImRhdGEiPgoKPGlucHV0IHR5
cGU9ImJ1dHRvbiIgb25DbGljaz0ic2V0KHRoaXMuZm9ybSk7IiB2YWx1ZT0iU2V0IFZhbHVlIj4K
PGlucHV0IHR5cGU9ImJ1dHRvbiIgb25DbGljaz0iZ2V0KHRoaXMuZm9ybSk7IiB2YWx1ZSA9ICJH
ZXQgVmFsdWUiPgo8L2Zvcm0+Cgo8L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
      

    </bug>

</bugzilla>