<?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>24285</bug_id>
          
          <creation_ts>2009-03-02 02:28:14 -0800</creation_ts>
          <short_desc>Text resource loading checks for BOM twice</short_desc>
          <delta_ts>2009-03-10 07:11:38 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111796</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-02 02:28:14 -0800</bug_when>
    <thetext>We check for BOM both in TextResourceDecoder and in TextDecoder, which makes no sense. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111799</commentid>
    <comment_count>1</comment_count>
      <attachid>28161</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-02 02:54:15 -0800</bug_when>
    <thetext>Created attachment 28161
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111800</commentid>
    <comment_count>2</comment_count>
      <attachid>28162</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-02 03:02:47 -0800</bug_when>
    <thetext>Created attachment 28162
proposed patch

Added a check for null m_codec in TextResourceDecoder::flush().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111801</commentid>
    <comment_count>3</comment_count>
      <attachid>28163</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-02 03:42:22 -0800</bug_when>
    <thetext>Created attachment 28163
proposed patch

This time for sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112982</commentid>
    <comment_count>4</comment_count>
      <attachid>28163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-10 05:38:57 -0700</bug_when>
    <thetext>Comment on attachment 28163
proposed patch

&gt; +        * loader/CachedScript.cpp:
&gt; +        (WebCore::CachedScript::CachedScript):
&gt; +        (WebCore::CachedScript::setEncoding):
&gt; +        (WebCore::CachedScript::encoding):
&gt; +        (WebCore::CachedScript::script):
&gt; +        * loader/CachedScript.h:
&gt; +        * loader/appcache/ManifestParser.cpp:
&gt; +        (WebCore::parseManifest):
&gt; +        Use TextResourceDecoder, as TextEncoding::decode() no longer checks for BOM.

Isn&apos;t this a bit more expensive? Are there really no differences in behavior other than the BOM check by using the TextResourceDecoder?

&gt;      if (m_source != UserChosenEncoding &amp;&amp; m_source != AutoDetectedEncoding &amp;&amp; encoding().isJapanese())
&gt;          detectJapaneseEncoding(data, len);
&gt;  
&gt; -    ASSERT(encoding().isValid());
&gt; +    ASSERT(m_encoding.isValid());

There&apos;s a mix here of m_encoding and encoding(). We should consistently use m_encoding, I think.

I&apos;ll say r=me for now. I&apos;m thinking that maybe we should remove the decode functions from TextEncoding, since that&apos;s just a convenience for newTextCodec. What callers really need that and are they better served by having that helper rather than calling newTextCodec directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112984</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-10 05:57:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Isn&apos;t this a bit more expensive? Are there really no differences in behavior
&gt; other than the BOM check by using the TextResourceDecoder?

For file types that don&apos;t have charset declarations internally, the only difference I can think of is enabling of Japanese encoding auto-detection.

I do not expect to see any measurable difference in performance, although it&apos;s possible that I underestimate some book-keeping work that is done by TextResourceDecoder.

&gt; I&apos;m thinking that maybe we should remove the decode
&gt; functions from TextEncoding, since that&apos;s just a convenience for newTextCodec.
&gt; What callers really need that and are they better served by having that helper
&gt; rather than calling newTextCodec directly?

The primary reason I didn&apos;t look into removing TextEncoding::decode() was that I wasn&apos;t sure what to do with TextEncoding:: encode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112986</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-10 06:00:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; For file types that don&apos;t have charset declarations internally, the only
&gt; difference I can think of is enabling of Japanese encoding auto-detection.

We don&apos;t want that auto-detection for scripts, do we? That&apos;s the behavior change from this patch, right?

&gt; The primary reason I didn&apos;t look into removing TextEncoding::decode() was that
&gt; I wasn&apos;t sure what to do with TextEncoding:: encode().

I think we can leave encode there even if we do remove decode. There was already asymmetry between the two due to the presence of the TextDecoder object. And some day we might find some great thing to do with encode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112988</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-10 06:19:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; We don&apos;t want that auto-detection for scripts, do we? That&apos;s the behavior
&gt; change from this patch, right?

Yes, it&apos;s a somewhat hidden change indeed. I can&apos;t say for sure whether we want it or not - there doesn&apos;t seem to be a reason to handle JS and other text subresources differently in this regard. There are certainly security concerns related to script decoding, but they apply to inline scripts as well as to external ones.

We don&apos;t have any tests for Japanese encoding auto-detection, and I&apos;d be reluctant to add any tests that aren&apos;t based on actual Web content.

&gt; I think we can leave encode there even if we do remove decode.

OK. I think that can can be done in a separate patch though (which I don&apos;t promise to make right away).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112991</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-10 06:36:29 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I think we can leave encode there even if we do remove decode.
&gt; 
&gt; OK. I think that can can be done in a separate patch though (which I don&apos;t
&gt; promise to make right away).

Absolutely. No hurry on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112993</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-10 07:11:38 -0700</bug_when>
    <thetext>Committed revision 41551.

I added a note about text encoding detection to the ChangeLog.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28161</attachid>
            <date>2009-03-02 02:54:15 -0800</date>
            <delta_ts>2009-03-02 03:02:47 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>EliminateTextDecoder.txt</filename>
            <type>text/plain</type>
            <size>34082</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMDMtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDI4NQorICAgICAgICBU
ZXh0IHJlc291cmNlIGxvYWRpbmcgY2hlY2tzIGZvciBCT00gdHdpY2UKKworICAgICAgICBUaGlz
IHJlbW92ZXMgVGV4dERlY29kZXIgY2xhc3MsIHNpbmNlIGl0cyBvbmx5IHB1cnBvc2Ugd2FzIHRv
IGNoZWNrIGZvciBCT00sIHdoaWNoIGlzCisgICAgICAgIGFscmVhZHkgZG9uZSBpbiBUZXh0UmVz
b3VyY2VEZWNvZGVyLiBDYWxsZXJzIHRoYXQgdXNlIFRleHRFbmNvZGluZzo6ZGVjb2RlKCkgd29u
J3QgZ2V0CisgICAgICAgIEJPTSBjaGVja2VkLCBidXQgSSBkaWRuJ3QgZmluZCBhbnkgY2FzZXMg
d2hlcmUgaXQgd291bGQgbm90aWNlYWJseSBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnNjb25zOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
U291cmNlcy5ia2w6CisgICAgICAgIFJlbW92ZSBUZXh0RGVjb2Rlci57aCxjcHB9LgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oOiBSZW1vdmVkLgorCisgICAgICAgICogbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuaDogSW5zdGVhZCBvZiBhIFRleHREZWNvZGVyIG9iamVjdCwg
a2VlcCBUZXh0RW5jb2RpbmcgYW5kCisgICAgICAgIFRleHRDb2RlYyBzZXBhcmF0ZWx5LgorCisg
ICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcik6IFVwZGF0ZWQgZm9y
IG1fZW5jb2RpbmcgYmVpbmcgYSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpzZXRFbmNvZGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00pOiBSZW1vdmVkIGEgRklYTUUgc2F5aW5nIHRoYXQg
YSBCT00gY291bGQgb3ZlcnJpZGUKKyAgICAgICAgZXZlbiBhIHVzZXItY2hvc2VuIGVuY29kaW5n
IC0gdGhpcyBpcyBob3cgaXQgYWxyZWFkeSB3b3JrZWQgZHVlIHRvIFRleHREZWNvZGVyIGNoZWNr
aW5nIGZvcgorICAgICAgICBCT00gYWdhaW4uIE1hZGUgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhl
IGRldGVjdGVkIEJPTSBsZW5ndGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZWNvZGUpOiBTa2lwIHRoZSBCT00gaWYgaXQgd2FzIGZvdW5kIGF0IHRoZSBiZWdpbm5p
bmcgb2YKKyAgICAgICAgYSB0ZXh0IHJlc291cmNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Zmx1c2gpOiBSZXNldCBtX2NoZWNrZWRGb3JCT00sIHNvIHRoYXQgcmUt
ZGVjb2RpbmcgdGhlIHNhbWUKKyAgICAgICAgcmVzb3VyY2UgYWdhaW4gKGFzIGZyZXF1ZW50bHkg
ZG9uZSBieSBDYWNoZWRSZXNvdXJjZSBzdWJjbGFzc2VzKSB3aWxsIHNraXAgdGhlIEJPTSBjb3Jy
ZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6IChXZWJD
b3JlOjpUZXh0RW5jb2Rpbmc6OmRlY29kZSk6CisgICAgICAgIFVzZSBUZXh0Q29kZWMgZGlyZWN0
bHkgd2l0aG91dCBhIFRleHREZWNvZGVyIHdyYXBwZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGlzIG1l
dGhvZCBubyBsb25nZXIKKyAgICAgICAgY2hlY2tzIGZvciBCT00sIHdoaWNoIHdhcyBhIGNvdW50
ZXItaW50dWl0aXZlIGZlYXR1cmUuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6c2V0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkU2NyaXB0OjplbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3Jp
cHQ6OnNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZU1hbmlmZXN0KToKKyAgICAgICAgVXNlIFRleHRSZXNvdXJjZURlY29kZXIsIGFzIFRleHRF
bmNvZGluZzo6ZGVjb2RlKCkgbm8gbG9uZ2VyIGNoZWNrcyBmb3IgQk9NLgorCisgICAgICAgICog
bG9hZGVyL0NhY2hlZEZvbnQuY3BwOiAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9u
dERhdGEpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6IChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5
bGVTaGVldCk6CisgICAgICAgIEJlIHN1cmUgdG8gZmx1c2ggVGV4dFJlc291cmNlRGVjb2Rlciwg
cHVzaGluZyBhbnkgcmVtYWluaW5nIGJ5dGVzIG91dCwgYW5kIG1ha2luZyB0aGUgZGVjb2Rlcgor
ICAgICAgICByZS11c2FibGUgKGZvciByZXBlYXRlZCBkZWNvZGluZyBvZiB0aGUgc2FtZSByZXNv
dXJjZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6
IFVwZGF0ZWQgY29tbWVudHMgZm9yIG5ld1RleHRDb2RlYygpLgorCiAyMDA5LTAzLTAyICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBTaG93IGV4Y2VwdGlv
biBtZXNzYWdlcyBhZ2FpbiB3aGVuIGV2YWx1YXRpbmcgYmFkIGV4cHJlc3Npb25zIGluIHRoZQpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTE0NjgsOCArMTQ2OCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERl
Y29kZXIuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtOTQ0LDcgKzk0NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwK
LSAgICBwbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZp
c2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAt
ODMwLDcgKzgzMCw2IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsKICAgICAncGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNw
cCcsCi0gICAgJ3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwJywKICAgICAncGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwJywKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsNyArNzY1LDYgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vdGV4dC9UZXh0RGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjkzLDE0ICs2NjkzLDYg
QEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERlY29kZXIuY3BwIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+
DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERl
Y29kZXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHREaXJlY3Rpb24uaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTI2LDggKzM1MjYsNiBAQAogCQlCMkMzREE0MDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQxMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNV
VEYxNi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovOyB9OwogCQlC
MkMzREE0MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEyMEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWNVVEYxNi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUIyQzNEQTQzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEx
MzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuY3BwICovOyB9OwotCQlCMkMzREE0NDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExNTBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MTYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi87IH07CiAJCUIyQzNEQTQ3
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RW5jb2RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtODMxOCw4ICs4MzE2LDYgQEAKIAkJQjJDM0RBMTAwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlY1VzZXJEZWZpbmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q29kZWNVc2VyRGVmaW5lZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMz
REExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1VURjE2LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VU
RjE2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNVVEYxNi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREExMzBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHREZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMTQw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEVuY29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5j
b2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDggKzEzMjQ5LDYg
QEAKIAkJCQlCMkMzREExMjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCAqLywK
IAkJCQlCMkMzREEwRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3Bw
ICovLAogCQkJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oICovLAotCQkJCUIyQzNEQTEzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5jcHAg
Ki8sCi0JCQkJQjJDM0RBMTQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8sCiAJ
CQkJQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlC
MkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMz
REExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCkBAIC0xNjYwOCw3ICsx
NjYwMiw2IEBACiAJCQkJQjJDM0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0MDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENv
ZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMDE0REU0MEU2ODlBNDMwMEUx
MDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUIy
QzNEQTQ0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBNjkzODAyMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTQ3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
aCBpbiBIZWFkZXJzICovLApAQCAtMTg2MjEsNyArMTg2MTQsNiBAQAogCQkJCUIyQzNEQTQxMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREEzRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE0MzBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2OTM4MDEwQTExMTAw
QTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0
NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA0MTM1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiAr
MTM3LDcgQEAgYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgpCiAKICAgICAgICAg
UmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpOwogICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1l
bnQtPndyaXRlKGRlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
KTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVyLT5mbHVzaCgp
KTsKICAgICAgICAgaWYgKGRlY29kZXItPnNhd0Vycm9yKCkpIHsKICAgICAgICAgICAgIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudC5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDIwIEBACiAKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRTY3JpcHQ6
OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQog
ICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCi0gICAgLCBtX2VuY29kaW5nKGNoYXJz
ZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiwgY2hhcnNldCkpCiAgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25U
aW1lcih0aGlzLCAmQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkK
IHsKICAgICAvLyBJdCdzIGphdmFzY3JpcHQgd2Ugd2FudC4KICAgICAvLyBCdXQgc29tZSB3ZWJz
aXRlcyB0aGluayB0aGVpciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgog
ICAgIC8vIGFuZCByZWZ1c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNh
dGlvbi94LWphdmFzY3JpcHQuCiAgICAgc2V0QWNjZXB0KCIqLyoiKTsKLSAgICBpZiAoIW1fZW5j
b2RpbmcuaXNWYWxpZCgpKQotICAgICAgICBtX2VuY29kaW5nID0gTGF0aW4xRW5jb2RpbmcoKTsK
IH0KIAogQ2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2NyaXB0KCkKQEAgLTY0LDE0ICs2MywxMiBAQCB2
b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogCiB2b2lkIENhY2hlZFNjcmlw
dDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVu
Y29kaW5nKGNocyk7Ci0gICAgaWYgKGVuY29kaW5nLmlzVmFsaWQoKSkKLSAgICAgICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nOworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKIH0KIAogU3RyaW5nIENhY2hl
ZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX2VuY29kaW5nLm5hbWUo
KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKIH0KIAogY29uc3Qg
U3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCkBAIC03OSw3ICs3Niw4IEBAIGNvbnN0IFN0
cmluZyYgQ2FjaGVkU2NyaXB0OjpzY3JpcHQoKQogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7
CiAKICAgICBpZiAoIW1fc2NyaXB0ICYmIG1fZGF0YSkgewotICAgICAgICBtX3NjcmlwdCA9IG1f
ZW5jb2RpbmcuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAg
bV9zY3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUo
KSk7CisgICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKICAgICAgICAgc2V0
RGVjb2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNk
ZWZpbmUgQ2FjaGVkU2NyaXB0X2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2Ug
ewogICAgIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlw
dD4qKTsKIAogICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVy
OwogICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
OwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20p
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNp
bmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCkBAIC0zMjIsNyArMzIzLDcgQEAg
Y29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOgogCiBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQogICAgIDogbV9jb250ZW50
VHlwZShkZXRlcm1pbmVDb250ZW50VHlwZShtaW1lVHlwZSkpCi0gICAgLCBtX2RlY29kZXIoZGVm
YXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykpCisg
ICAgLCBtX2VuY29kaW5nKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWRE
ZWZhdWx0RW5jb2RpbmcpKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQogICAgICwg
bV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxz
ZSkKQEAgLTM0NCwxMiArMzQ1LDEzIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5j
b2RpbmcoY28KICAgICAvLyBXaGVuIGVuY29kaW5nIGNvbWVzIGZyb20gbWV0YSB0YWcgKGkuZS4g
aXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZpYSBYSFIpLAogICAgIC8vIHRyZWF0IHgtdXNl
ci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVnIDE4MjcwKQogICAgIGlmIChzb3VyY2UgPT0g
RW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNlY21wKGVuY29kaW5nLm5hbWUoKSwgIngtdXNl
ci1kZWZpbmVkIikgPT0gMCkKLSAgICAgICAgbV9kZWNvZGVyLnJlc2V0KCJ3aW5kb3dzLTEyNTIi
KTsgCisgICAgICAgIG1fZW5jb2RpbmcgPSAid2luZG93cy0xMjUyIjsKICAgICBlbHNlIGlmIChz
b3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyB8fCBzb3VyY2UgPT0gRW5jb2RpbmdGcm9tWE1M
SGVhZGVyIHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0KSAgICAgICAgCi0gICAg
ICAgIG1fZGVjb2Rlci5yZXNldChlbmNvZGluZy5jbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nLmNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFs
ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBtX2RlY29kZXIucmVzZXQoZW5jb2RpbmcpOworICAg
ICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAKKyAgICBtX2NvZGVjLmNsZWFyKCk7CiAgICAg
bV9zb3VyY2UgPSBzb3VyY2U7CiB9CiAKQEAgLTQwMSw0NiArNDAzLDQ5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBza2lwV2hpdGVzcGFjZShjb25zdCAKICAgICByZXR1cm4gcG9zICE9IGRhdGFFbmQ7
CiB9CiAKLXZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbikKK3NpemVfdCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckJP
TShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIC8vIENoZWNrIGZvciBVVEYt
MTYvMzIgb3IgVVRGLTggQk9NIG1hcmsgYXQgdGhlIGJlZ2lubmluZywgd2hpY2ggaXMgYSBzdXJl
IHNpZ24gb2YgYSBVbmljb2RlIGVuY29kaW5nLgorICAgIC8vIFdlIGxldCBpdCBvdmVycmlkZSBl
dmVuIGEgdXNlci1jaG9zZW4gZW5jb2RpbmcuCisgICAgQVNTRVJUKCFtX2NoZWNrZWRGb3JCT00p
OwogCi0gICAgaWYgKG1fc291cmNlID09IFVzZXJDaG9zZW5FbmNvZGluZykgewotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgYSBCT00gc2hvdWxkIG92ZXJyaWRlIGV2ZW4gYSB1c2VyLWNob3NlbiBl
bmNvZGluZy4KLSAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBzaXplX3QgbGVuZ3RoT2ZCT00gPSAwOwogCi0gICAgLy8gQ2hlY2sgaWYg
d2UgaGF2ZSBlbm91Z2ggZGF0YS4KICAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gbV9idWZmZXIu
c2l6ZSgpOwotICAgIGlmIChidWZmZXJMZW5ndGggKyBsZW4gPCA0KQotICAgICAgICByZXR1cm47
CiAKLSAgICBtX2NoZWNrZWRGb3JCT00gPSB0cnVlOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgZmly
c3QgZm91ciBieXRlcy4KLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc29tZSBvZiBieXRl
cyBhcmUgYWxyZWFkeSBpbiB0aGUgYnVmZmVyLgotICAgIC8vIFRoZSBsYXN0IGJ5dGUgaXMgYWx3
YXlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGluIHRoZSBidWZmZXIuCi0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogdWRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihk
YXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyIGMxID0gYnVmZmVyTGVuZ3RoID49IDEgPyBtX2J1ZmZl
clswXSA6ICp1ZGF0YSsrOwotICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBidWZmZXJMZW5ndGggPj0g
MiA/IG1fYnVmZmVyWzFdIDogKnVkYXRhKys7Ci0gICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZmZl
ckxlbmd0aCA+PSAzID8gbV9idWZmZXJbMl0gOiAqdWRhdGErKzsKLSAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoIDwgNCk7Ci0gICAgdW5zaWduZWQgY2hhciBjNCA9ICp1ZGF0YTsKKyAgICBzaXplX3Qg
YnVmMUxlbiA9IGJ1ZmZlckxlbmd0aDsKKyAgICBzaXplX3QgYnVmMkxlbiA9IGxlbjsKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBidWYxID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4obV9idWZmZXIuZGF0YSgpKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYy
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgdW5z
aWduZWQgY2hhciBjMSA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4g
PyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMiA9IGJ1ZjFM
ZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisr
KSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVm
MSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQg
Y2hhciBjNCA9IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CiAKICAgICAvLyBD
aGVjayBmb3IgdGhlIEJPTS4KICAgICBpZiAoYzEgPT0gMHhGRiAmJiBjMiA9PSAweEZFKSB7Ci0g
ICAgICAgIGlmIChjMyAhPTAgfHwgYzQgIT0gMCkKKyAgICAgICAgaWYgKGMzICE9IDAgfHwgYzQg
IT0gMCkgewogICAgICAgICAgICAgc2V0RW5jb2RpbmcoVVRGMTZMaXR0bGVFbmRpYW5FbmNvZGlu
ZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgICAgIGVsc2UgCisgICAgICAgICAgICBs
ZW5ndGhPZkJPTSA9IDI7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkxpdHRsZUVuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoYzEgPT0gMHhFRiAmJiBjMiA9PSAweEJCICYmIGMzID09IDB4QkYp
CisgICAgICAgICAgICBsZW5ndGhPZkJPTSA9IDQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KGMxID09IDB4RUYgJiYgYzIgPT0gMHhCQiAmJiBjMyA9PSAweEJGKSB7CiAgICAgICAgIHNldEVu
Y29kaW5nKFVURjhFbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgZWxzZSBp
ZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKQorICAgICAgICBsZW5ndGhPZkJPTSA9IDM7Cisg
ICAgfSBlbHNlIGlmIChjMSA9PSAweEZFICYmIGMyID09IDB4RkYpIHsKICAgICAgICAgc2V0RW5j
b2RpbmcoVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0g
ICAgZWxzZSBpZiAoYzEgPT0gMCAmJiBjMiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhG
RikKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSAyOworICAgIH0gZWxzZSBpZiAoYzEgPT0gMCAmJiBj
MiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhGRikgewogICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkJpZ0VuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAg
ICAgbGVuZ3RoT2ZCT00gPSA0OworICAgIH0KKworICAgIGlmIChsZW5ndGhPZkJPTSB8fCBidWZm
ZXJMZW5ndGggKyBsZW4gPj0gNCkKKyAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKKwor
ICAgIHJldHVybiBsZW5ndGhPZkJPTTsKIH0KIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
aGVja0ZvckNTU0NoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92
ZWREYXRhVG9CdWZmZXIpCkBAIC03NTUsOCArNzYwLDkgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZXRlY3RKYXBhbmVzZQogCiBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiB7CisgICAgc2l6ZV90IGxlbmd0aE9mQk9N
ID0gMDsKICAgICBpZiAoIW1fY2hlY2tlZEZvckJPTSkKLSAgICAgICAgY2hlY2tGb3JCT00oZGF0
YSwgbGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW4pOwog
CiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNlOwogCkBAIC03NzMsMTAgKzc3OSwx
MyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgaWYgKG1f
c291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRF
bmNvZGluZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5l
c2VFbmNvZGluZyhkYXRhLCBsZW4pOwogCi0gICAgQVNTRVJUKGVuY29kaW5nKCkuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQobV9lbmNvZGluZy5pc1ZhbGlkKCkpOworCisgICAgaWYgKCFtX2NvZGVj
KQorICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFzZSgp
KTsKIAogICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2RlY29k
ZXIuZGVjb2RlKGRhdGEsIGxlbiwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vy
cm9yKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhICsgbGVuZ3RoT2ZCT00s
IGxlbiAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3RXJy
b3IpOwogCiAgICAgaWYgKCFtb3ZlZERhdGFUb0J1ZmZlcikgewogICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKQEAgLTc4NCwxNiArNzkzLDE3IEBAIFN0cmluZyBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbik7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9
IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIGZhbHNl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgU3RyaW5nIHJlc3VsdCA9
IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCkgKyBsZW5ndGhPZkJPTSwgbV9idWZmZXIu
c2l6ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdF
cnJvcik7CiAgICAgbV9idWZmZXIuY2xlYXIoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBT
dHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogewotICAgIFN0cmluZyByZXN1bHQg
PSBtX2RlY29kZXIuZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB0cnVl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgU3RyaW5nIHJlc3VsdCA9
IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwgdHJ1ZSwg
bV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3RXJyb3IpOwogICAgIG1fYnVmZmVyLmNsZWFyKCk7
Ci0gICAgbV9kZWNvZGVyLnJlc2V0KG1fZGVjb2Rlci5lbmNvZGluZygpKTsKKyAgICBtX2NvZGVj
LmNsZWFyKCk7CisgICAgbV9jaGVja2VkRm9yQk9NID0gZmFsc2U7IC8vIFNraXAgQk9NIGFnYWlu
IHdoZW4gcmUtZGVjb2RpbmcuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcg
QEAKICNpZm5kZWYgVGV4dFJlc291cmNlRGVjb2Rlcl9oCiAjZGVmaW5lIFRleHRSZXNvdXJjZURl
Y29kZXJfaAogCi0jaW5jbHVkZSAiVGV4dERlY29kZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoK
ICAgICB+VGV4dFJlc291cmNlRGVjb2RlcigpOwogCiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25z
dCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1NvdXJjZSk7Ci0gICAgY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5lbmNvZGluZygpOyB9CisgICAg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7
IH0KIAogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7
CiAgICAgU3RyaW5nIGZsdXNoKCk7CkBAIC01NiwxNyArNTYsMTggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKIAotICAgIGVudW0gQ29udGVudFR5cGUg
eyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBsYWluVGV4dCBpcyBlcXVpdmFsZW50
IHRvIGRpcmVjdGx5IHVzaW5nIFRleHREZWNvZGVyLgorICAgIGVudW0gQ29udGVudFR5cGUgeyBQ
bGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBsYWluVGV4dCBvbmx5IGNoZWNrcyBmb3Ig
Qk9NLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKICAgICBzdGF0aWMgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0
RW5jb2RpbmcoQ29udGVudFR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5n
KTsKIAotICAgIHZvaWQgY2hlY2tGb3JCT00oY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgc2l6
ZV90IGNoZWNrRm9yQk9NKGNvbnN0IGNoYXIqLCBzaXplX3QpOwogICAgIGJvb2wgY2hlY2tGb3JD
U1NDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsK
ICAgICBib29sIGNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCYg
bW92ZWREYXRhVG9CdWZmZXIpOwogICAgIHZvaWQgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhjb25z
dCBjaGFyKiwgc2l6ZV90KTsKIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7Ci0gICAg
VGV4dERlY29kZXIgbV9kZWNvZGVyOworICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOworICAg
IE93blB0cjxUZXh0Q29kZWM+IG1fY29kZWM7CiAgICAgRW5jb2RpbmdTb3VyY2UgbV9zb3VyY2U7
CiAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgIGJvb2wgbV9jaGVja2VkRm9yQk9NOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcAkocmV2aXNp
b24gNDEzNTEpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNoYXJhY3Rlck5h
bWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApA
QCAtNDUsOSArNDUsMTIgQEAgYm9vbCBwYXJzZU1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0
VQogICAgIEFTU0VSVChtYW5pZmVzdC5mYWxsYmFja1VSTHMuaXNFbXB0eSgpKTsKICAgICAKICAg
ICBNb2RlIG1vZGUgPSBFeHBsaWNpdDsKLSAgICBTdHJpbmcgcyA9IFVURjhFbmNvZGluZygpLmRl
Y29kZShkYXRhLCBsZW5ndGgpOworCisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvY2FjaGUtbWFuaWZlc3Qi
LCAiVVRGLTgiKTsKKyAgICBTdHJpbmcgcyA9IGRlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgp
OworICAgIHMgKz0gZGVjb2Rlci0+Zmx1c2goKTsKICAgICAKLSAgICAvLyBMb29rIGZvciB0aGUg
bWFnaWMgc2lnbmF0dXJlOiAiXlx4RkVGRj9DQUNIRSBNQU5JRkVTVFsgXHRdPyIgKHRoZSBCT00g
aXMgcmVtb3ZlZCBieSBkZWNvZGUoKSkuCisgICAgLy8gTG9vayBmb3IgdGhlIG1hZ2ljIHNpZ25h
dHVyZTogIl5ceEZFRkY/Q0FDSEUgTUFOSUZFU1RbIFx0XT8iICh0aGUgQk9NIGlzIHJlbW92ZWQg
YnkgVGV4dFJlc291cmNlRGVjb2RlcikuCiAgICAgLy8gRXhhbXBsZTogIkNBQ0hFIE1BTklGRVNU
ICNjb21tZW50IiBpcyBhIHZhbGlkIHNpZ25hdHVyZS4KICAgICAvLyBFeGFtcGxlOiAiQ0FDSEUg
TUFOSUZFU1Q7VjIiIGlzIG5vdC4KICAgICBpZiAoIXMuc3RhcnRzV2l0aCgiQ0FDSEUgTUFOSUZF
U1QiKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNyArNDcxLDkgQEAgY29uc3QgU3RyaW5nJiBQYWdlOjp1
c2VyU3R5bGVTaGVldCgpIGNvbgogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIG1fdXNl
clN0eWxlU2hlZXQ7CiAKLSAgICBtX3VzZXJTdHlsZVNoZWV0ID0gVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y3JlYXRlKCJ0ZXh0L2NzcyIpLT5kZWNvZGUoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkp
OworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIpOworICAgIG1fdXNlclN0eWxlU2hlZXQgPSBkZWNv
ZGVyLT5kZWNvZGUoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIG1fdXNlclN0eWxl
U2hlZXQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKIAogICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0
OwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwCShyZXZpc2lvbiA0
MTM1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0RGVjb2Rlci5oIgotCi0jaW5jbHVkZSAiVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCIKLQotLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gYWxzbyBo
YW5kbGUgQk9NIGZvciBVVEYtNyBhbmQgVVRGLTMyLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVRleHREZWNvZGVyOjpUZXh0RGVjb2Rlcihjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQot
ICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKLSAgICAsIG1fY2hlY2tlZEZvckJPTShmYWxzZSkK
LSAgICAsIG1fbnVtQnVmZmVyZWRCeXRlcygwKQotewotfQotCi12b2lkIFRleHREZWNvZGVyOjpy
ZXNldChjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQotewotICAgIG1fZW5jb2RpbmcgPSBl
bmNvZGluZzsKLSAgICBtX2NvZGVjLmNsZWFyKCk7Ci0gICAgbV9jaGVja2VkRm9yQk9NID0gZmFs
c2U7Ci0gICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKLX0KLQotU3RyaW5nIFRleHREZWNvZGVy
OjpjaGVja0ZvckJPTShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKLXsKLSAgICBBU1NFUlQoIW1fY2hl
Y2tlZEZvckJPTSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgZm91bmQgYSBCT00uCi0g
ICAgc2l6ZV90IG51bUJ1ZmZlcmVkQnl0ZXMgPSBtX251bUJ1ZmZlcmVkQnl0ZXM7Ci0gICAgc2l6
ZV90IGJ1ZjFMZW4gPSBudW1CdWZmZXJlZEJ5dGVzOwotICAgIHNpemVfdCBidWYyTGVuID0gbGVu
Z3RoOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZjEgPSBtX2J1ZmZlcmVkQnl0ZXM7Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGRhdGEpOwotICAgIHVuc2lnbmVkIGNoYXIgYzEgPSBidWYxTGVuID8gKC0t
YnVmMUxlbiwgKmJ1ZjErKykgOiBidWYyTGVuID8gKC0tYnVmMkxlbiwgKmJ1ZjIrKykgOiAwOwot
ICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBidWYxTGVuID8gKC0tYnVmMUxlbiwgKmJ1ZjErKykgOiBi
dWYyTGVuID8gKC0tYnVmMkxlbiwgKmJ1ZjIrKykgOiAwOwotICAgIHVuc2lnbmVkIGNoYXIgYzMg
PSBidWYxTGVuID8gKC0tYnVmMUxlbiwgKmJ1ZjErKykgOiBidWYyTGVuID8gKC0tYnVmMkxlbiwg
KmJ1ZjIrKykgOiAwOwotICAgIHVuc2lnbmVkIGNoYXIgYzQgPSBidWYyTGVuID8gKC0tYnVmMkxl
biwgKmJ1ZjIrKykgOiAwOwotCi0gICAgY29uc3QgVGV4dEVuY29kaW5nKiBlbmNvZGluZ0NvbnNp
ZGVyaW5nQk9NID0gJm1fZW5jb2Rpbmc7Ci0gICAgYm9vbCBmb3VuZEJPTSA9IHRydWU7Ci0gICAg
c2l6ZV90IGxlbmd0aE9mQk9NID0gMDsKLSAgICBpZiAoYzEgPT0gMHhGRiAmJiBjMiA9PSAweEZF
KSB7Ci0gICAgICAgIGlmIChjMyAhPSAwIHx8IGM0ICE9IDApICB7Ci0gICAgICAgICAgICBlbmNv
ZGluZ0NvbnNpZGVyaW5nQk9NID0gJlVURjE2TGl0dGxlRW5kaWFuRW5jb2RpbmcoKTsKLSAgICAg
ICAgICAgIGxlbmd0aE9mQk9NID0gMjsKLSAgICAgICAgfSBlbHNlIGlmIChudW1CdWZmZXJlZEJ5
dGVzICsgbGVuZ3RoID4gc2l6ZW9mKG1fYnVmZmVyZWRCeXRlcykpIHsKLSAgICAgICAgICAgIGVu
Y29kaW5nQ29uc2lkZXJpbmdCT00gPSAmVVRGMzJMaXR0bGVFbmRpYW5FbmNvZGluZygpOwotICAg
ICAgICAgICAgbGVuZ3RoT2ZCT00gPSA0OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZv
dW5kQk9NID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChjMSA9PSAweEVGICYmIGMyID09IDB4QkIg
JiYgYzMgPT0gMHhCRikgewotICAgICAgICBlbmNvZGluZ0NvbnNpZGVyaW5nQk9NID0gJlVURjhF
bmNvZGluZygpOwotICAgICAgICBsZW5ndGhPZkJPTSA9IDM7Ci0gICAgfSBlbHNlIGlmIChjMSA9
PSAweEZFICYmIGMyID09IDB4RkYpIHsKLSAgICAgICAgZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9
ICZVVEYxNkJpZ0VuZGlhbkVuY29kaW5nKCk7Ci0gICAgICAgIGxlbmd0aE9mQk9NID0gMjsKLSAg
ICB9IGVsc2UgaWYgKGMxID09IDAgJiYgYzIgPT0gMCAmJiBjMyA9PSAweEZFICYmIGM0ID09IDB4
RkYpIHsKLSAgICAgICAgZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9ICZVVEYzMkJpZ0VuZGlhbkVu
Y29kaW5nKCk7Ci0gICAgICAgIGxlbmd0aE9mQk9NID0gNDsKLSAgICB9IGVsc2UKLSAgICAgICAg
Zm91bmRCT00gPSBmYWxzZTsKLQotICAgIGlmICghZm91bmRCT00gJiYgbnVtQnVmZmVyZWRCeXRl
cyArIGxlbmd0aCA8PSBzaXplb2YobV9idWZmZXJlZEJ5dGVzKSAmJiAhZmx1c2gpIHsKLSAgICAg
ICAgLy8gQ29udGludWUgdG8gbG9vayBmb3IgdGhlIEJPTS4KLSAgICAgICAgbWVtY3B5KCZtX2J1
ZmZlcmVkQnl0ZXNbbnVtQnVmZmVyZWRCeXRlc10sIGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIG1f
bnVtQnVmZmVyZWRCeXRlcyArPSBsZW5ndGg7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0K
LSAgICAvLyBEb25lIGNoZWNraW5nIGZvciBCT00uCi0gICAgbV9jb2RlYy5zZXQobmV3VGV4dENv
ZGVjKCplbmNvZGluZ0NvbnNpZGVyaW5nQk9NKS5yZWxlYXNlKCkpOwotICAgIGlmICghbV9jb2Rl
YykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIG1fY2hlY2tlZEZvckJPTSA9IHRydWU7
Ci0KLSAgICAvLyBTa2lwIHRoZSBCT00uCi0gICAgaWYgKGZvdW5kQk9NKSB7Ci0gICAgICAgIEFT
U0VSVChudW1CdWZmZXJlZEJ5dGVzIDwgbGVuZ3RoT2ZCT00pOwotICAgICAgICBzaXplX3QgbnVt
VW5idWZmZXJlZEJPTUJ5dGVzID0gbGVuZ3RoT2ZCT00gLSBudW1CdWZmZXJlZEJ5dGVzOwotICAg
ICAgICBBU1NFUlQobnVtVW5idWZmZXJlZEJPTUJ5dGVzIDw9IGxlbmd0aCk7Ci0KLSAgICAgICAg
ZGF0YSArPSBudW1VbmJ1ZmZlcmVkQk9NQnl0ZXM7Ci0gICAgICAgIGxlbmd0aCAtPSBudW1VbmJ1
ZmZlcmVkQk9NQnl0ZXM7Ci0gICAgICAgIG51bUJ1ZmZlcmVkQnl0ZXMgPSAwOwotICAgICAgICBt
X251bUJ1ZmZlcmVkQnl0ZXMgPSAwOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJl
IHdlIGhhdmUgc29tZSBidWZmZXJlZCBieXRlcyB0byBkZWFsIHdpdGguCi0gICAgaWYgKG51bUJ1
ZmZlcmVkQnl0ZXMpIHsKLSAgICAgICAgY2hhciBidWZmZXJlZEJ5dGVzW3NpemVvZihtX2J1ZmZl
cmVkQnl0ZXMpXTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlcmVkQnl0ZXMsIG1fYnVmZmVyZWRCeXRl
cywgbnVtQnVmZmVyZWRCeXRlcyk7Ci0gICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7Ci0K
LSAgICAgICAgU3RyaW5nIGJ1ZmZlcmVkUmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKGJ1ZmZlcmVk
Qnl0ZXMsIG51bUJ1ZmZlcmVkQnl0ZXMsIGZhbHNlLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwot
ICAgICAgICBpZiAoc3RvcE9uRXJyb3IgJiYgc2F3RXJyb3IpCi0gICAgICAgICAgICByZXR1cm4g
YnVmZmVyZWRSZXN1bHQ7Ci0gICAgICAgIHJldHVybiBidWZmZXJlZFJlc3VsdCArIG1fY29kZWMt
PmRlY29kZShkYXRhLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwotICAg
IH0KLQotICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCBmbHVzaCwgc3Rv
cE9uRXJyb3IsIHNhd0Vycm9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmgJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUZXh0RGVjb2Rlcl9oCi0j
ZGVmaW5lIFRleHREZWNvZGVyX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBUZXh0Q29k
ZWM7Ci0KLSAgICBjbGFzcyBUZXh0RGVjb2RlciB7Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0
RGVjb2Rlcihjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICAgICAgdm9pZCByZXNldChjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKLSAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH07Ci0KLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9y
LCBib29sJiBzYXdFcnJvcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRG
b3JCT00pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrRm9yQk9NKGRhdGEsIGxlbmd0aCwg
Zmx1c2gsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gbV9jb2Rl
Yy0+ZGVjb2RlKGRhdGEsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7Ci0g
ICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBjaGVja0ZvckJPTShjb25z
dCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9v
bCYgc2F3RXJyb3IpOwotCi0gICAgICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwotICAgICAg
ICBPd25QdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotCi0gICAgICAgIGJvb2wgbV9jaGVja2VkRm9y
Qk9NOwotICAgICAgICB1bnNpZ25lZCBjaGFyIG1fbnVtQnVmZmVyZWRCeXRlczsKLSAgICAgICAg
dW5zaWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNbM107Ci0gICAgfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4dERlY29kZXJfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJUZXh0Q29kZWMuaCIKLSNpbmNsdWRlICJUZXh0RGVjb2Rlci5oIgogI2luY2x1ZGUg
IlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUg
PHVuaWNvZGUvdW5vcm0uaD4KQEAgLTczLDcgKzcyLDcgQEAgU3RyaW5nIFRleHRFbmNvZGluZzo6
ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIGlmICghbV9uYW1lKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKLSAgICByZXR1cm4gVGV4dERlY29kZXIoKnRoaXMpLmRlY29kZShkYXRhLCBsZW5n
dGgsIHRydWUsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7CisgICAgcmV0dXJuIG5ld1RleHRDb2Rl
YygqdGhpcyktPmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUsIHN0b3BPbkVycm9yLCBzYXdFcnJv
cik7CiB9CiAKIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAko
cmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVn
aXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIFRleHRDb2RlYzsKICAgICBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKLSAg
ICAvLyBPbmx5IFRleHRFbmNvZGluZyBhbmQgVGV4dERlY29kZXIgc2hvdWxkIHVzZSB0aGlzIGZ1
bmN0aW9uIGRpcmVjdGx5LgotICAgIC8vIC0gVXNlIFRleHREZWNvZGVyOjpkZWNvZGUgdG8gZGVj
b2RlLCBzaW5jZSBpdCBoYW5kbGVzIEJPTXMuCi0gICAgLy8gLSBVc2UgVGV4dEVuY29kaW5nOjpk
ZWNvZGUgdG8gZGVjb2RlIGlmIHlvdSBoYXZlIGFsbCB0aGUgZGF0YSBhdCBvbmNlLgotICAgIC8v
ICAgSXQncyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIFRleHREZWNvZGVyOjpkZWNvZGUgc28gd29y
a3MganVzdCBhcyB3ZWxsLgotICAgIC8vIC0gVXNlIFRleHRFbmNvZGluZzo6ZW5jb2RlIHRvIGVu
Y29kZSwgc2luY2UgaXQgdGFrZXMgY2FyZSBvZiBub3JtYWxpemF0aW9uLgorICAgIC8vIFVzZSBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUgdG8gZGVjb2RlIHJlc291cmNlcywgc2luY2UgaXQg
aGFuZGxlcyBCT01zLgorICAgIC8vIFVzZSBUZXh0RW5jb2Rpbmc6OmVuY29kZSB0byBlbmNvZGUs
IHNpbmNlIGl0IHRha2VzIGNhcmUgb2Ygbm9ybWFsaXphdGlvbi4KICAgICBzdGQ6OmF1dG9fcHRy
PFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYpOwogCiAgICAgLy8g
T25seSBUZXh0RW5jb2Rpbmcgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28162</attachid>
            <date>2009-03-02 03:02:47 -0800</date>
            <delta_ts>2009-03-02 03:42:22 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>EliminateTextDecoder.txt</filename>
            <type>text/plain</type>
            <size>34212</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMDMtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDI4NQorICAgICAgICBU
ZXh0IHJlc291cmNlIGxvYWRpbmcgY2hlY2tzIGZvciBCT00gdHdpY2UKKworICAgICAgICBUaGlz
IHJlbW92ZXMgVGV4dERlY29kZXIgY2xhc3MsIHNpbmNlIGl0cyBvbmx5IHB1cnBvc2Ugd2FzIHRv
IGNoZWNrIGZvciBCT00sIHdoaWNoIGlzCisgICAgICAgIGFscmVhZHkgZG9uZSBpbiBUZXh0UmVz
b3VyY2VEZWNvZGVyLiBDYWxsZXJzIHRoYXQgdXNlIFRleHRFbmNvZGluZzo6ZGVjb2RlKCkgd29u
J3QgZ2V0CisgICAgICAgIEJPTSBjaGVja2VkLCBidXQgSSBkaWRuJ3QgZmluZCBhbnkgY2FzZXMg
d2hlcmUgaXQgd291bGQgbm90aWNlYWJseSBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnNjb25zOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
U291cmNlcy5ia2w6CisgICAgICAgIFJlbW92ZSBUZXh0RGVjb2Rlci57aCxjcHB9LgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oOiBSZW1vdmVkLgorCisgICAgICAgICogbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuaDogSW5zdGVhZCBvZiBhIFRleHREZWNvZGVyIG9iamVjdCwg
a2VlcCBUZXh0RW5jb2RpbmcgYW5kCisgICAgICAgIFRleHRDb2RlYyBzZXBhcmF0ZWx5LgorCisg
ICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcik6IFVwZGF0ZWQgZm9y
IG1fZW5jb2RpbmcgYmVpbmcgYSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpzZXRFbmNvZGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00pOiBSZW1vdmVkIGEgRklYTUUgc2F5aW5nIHRoYXQg
YSBCT00gY291bGQgb3ZlcnJpZGUKKyAgICAgICAgZXZlbiBhIHVzZXItY2hvc2VuIGVuY29kaW5n
IC0gdGhpcyBpcyBob3cgaXQgYWxyZWFkeSB3b3JrZWQgZHVlIHRvIFRleHREZWNvZGVyIGNoZWNr
aW5nIGZvcgorICAgICAgICBCT00gYWdhaW4uIE1hZGUgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhl
IGRldGVjdGVkIEJPTSBsZW5ndGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZWNvZGUpOiBTa2lwIHRoZSBCT00gaWYgaXQgd2FzIGZvdW5kIGF0IHRoZSBiZWdpbm5p
bmcgb2YKKyAgICAgICAgYSB0ZXh0IHJlc291cmNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Zmx1c2gpOiBSZXNldCBtX2NoZWNrZWRGb3JCT00sIHNvIHRoYXQgcmUt
ZGVjb2RpbmcgdGhlIHNhbWUKKyAgICAgICAgcmVzb3VyY2UgYWdhaW4gKGFzIGZyZXF1ZW50bHkg
ZG9uZSBieSBDYWNoZWRSZXNvdXJjZSBzdWJjbGFzc2VzKSB3aWxsIHNraXAgdGhlIEJPTSBjb3Jy
ZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6IChXZWJD
b3JlOjpUZXh0RW5jb2Rpbmc6OmRlY29kZSk6CisgICAgICAgIFVzZSBUZXh0Q29kZWMgZGlyZWN0
bHkgd2l0aG91dCBhIFRleHREZWNvZGVyIHdyYXBwZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGlzIG1l
dGhvZCBubyBsb25nZXIKKyAgICAgICAgY2hlY2tzIGZvciBCT00sIHdoaWNoIHdhcyBhIGNvdW50
ZXItaW50dWl0aXZlIGZlYXR1cmUuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6c2V0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkU2NyaXB0OjplbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3Jp
cHQ6OnNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZU1hbmlmZXN0KToKKyAgICAgICAgVXNlIFRleHRSZXNvdXJjZURlY29kZXIsIGFzIFRleHRF
bmNvZGluZzo6ZGVjb2RlKCkgbm8gbG9uZ2VyIGNoZWNrcyBmb3IgQk9NLgorCisgICAgICAgICog
bG9hZGVyL0NhY2hlZEZvbnQuY3BwOiAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9u
dERhdGEpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6IChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5
bGVTaGVldCk6CisgICAgICAgIEJlIHN1cmUgdG8gZmx1c2ggVGV4dFJlc291cmNlRGVjb2Rlciwg
cHVzaGluZyBhbnkgcmVtYWluaW5nIGJ5dGVzIG91dCwgYW5kIG1ha2luZyB0aGUgZGVjb2Rlcgor
ICAgICAgICByZS11c2FibGUgKGZvciByZXBlYXRlZCBkZWNvZGluZyBvZiB0aGUgc2FtZSByZXNv
dXJjZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6
IFVwZGF0ZWQgY29tbWVudHMgZm9yIG5ld1RleHRDb2RlYygpLgorCiAyMDA5LTAzLTAyICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBTaG93IGV4Y2VwdGlv
biBtZXNzYWdlcyBhZ2FpbiB3aGVuIGV2YWx1YXRpbmcgYmFkIGV4cHJlc3Npb25zIGluIHRoZQpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTE0NjgsOCArMTQ2OCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERl
Y29kZXIuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtOTQ0LDcgKzk0NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwK
LSAgICBwbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZp
c2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAt
ODMwLDcgKzgzMCw2IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsKICAgICAncGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNw
cCcsCi0gICAgJ3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwJywKICAgICAncGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwJywKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsNyArNzY1LDYgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vdGV4dC9UZXh0RGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjkzLDE0ICs2NjkzLDYg
QEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERlY29kZXIuY3BwIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+
DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERl
Y29kZXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHREaXJlY3Rpb24uaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTI2LDggKzM1MjYsNiBAQAogCQlCMkMzREE0MDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQxMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNV
VEYxNi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovOyB9OwogCQlC
MkMzREE0MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEyMEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWNVVEYxNi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUIyQzNEQTQzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEx
MzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuY3BwICovOyB9OwotCQlCMkMzREE0NDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExNTBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MTYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi87IH07CiAJCUIyQzNEQTQ3
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RW5jb2RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtODMxOCw4ICs4MzE2LDYgQEAKIAkJQjJDM0RBMTAwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlY1VzZXJEZWZpbmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q29kZWNVc2VyRGVmaW5lZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMz
REExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1VURjE2LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VU
RjE2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNVVEYxNi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREExMzBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHREZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMTQw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEVuY29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5j
b2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDggKzEzMjQ5LDYg
QEAKIAkJCQlCMkMzREExMjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCAqLywK
IAkJCQlCMkMzREEwRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3Bw
ICovLAogCQkJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oICovLAotCQkJCUIyQzNEQTEzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5jcHAg
Ki8sCi0JCQkJQjJDM0RBMTQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8sCiAJ
CQkJQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlC
MkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMz
REExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCkBAIC0xNjYwOCw3ICsx
NjYwMiw2IEBACiAJCQkJQjJDM0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0MDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENv
ZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMDE0REU0MEU2ODlBNDMwMEUx
MDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUIy
QzNEQTQ0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBNjkzODAyMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTQ3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
aCBpbiBIZWFkZXJzICovLApAQCAtMTg2MjEsNyArMTg2MTQsNiBAQAogCQkJCUIyQzNEQTQxMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREEzRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE0MzBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2OTM4MDEwQTExMTAw
QTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0
NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA0MTM1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiAr
MTM3LDcgQEAgYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgpCiAKICAgICAgICAg
UmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpOwogICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1l
bnQtPndyaXRlKGRlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
KTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVyLT5mbHVzaCgp
KTsKICAgICAgICAgaWYgKGRlY29kZXItPnNhd0Vycm9yKCkpIHsKICAgICAgICAgICAgIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudC5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDIwIEBACiAKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRTY3JpcHQ6
OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQog
ICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCi0gICAgLCBtX2VuY29kaW5nKGNoYXJz
ZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiwgY2hhcnNldCkpCiAgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25U
aW1lcih0aGlzLCAmQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkK
IHsKICAgICAvLyBJdCdzIGphdmFzY3JpcHQgd2Ugd2FudC4KICAgICAvLyBCdXQgc29tZSB3ZWJz
aXRlcyB0aGluayB0aGVpciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgog
ICAgIC8vIGFuZCByZWZ1c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNh
dGlvbi94LWphdmFzY3JpcHQuCiAgICAgc2V0QWNjZXB0KCIqLyoiKTsKLSAgICBpZiAoIW1fZW5j
b2RpbmcuaXNWYWxpZCgpKQotICAgICAgICBtX2VuY29kaW5nID0gTGF0aW4xRW5jb2RpbmcoKTsK
IH0KIAogQ2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2NyaXB0KCkKQEAgLTY0LDE0ICs2MywxMiBAQCB2
b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogCiB2b2lkIENhY2hlZFNjcmlw
dDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVu
Y29kaW5nKGNocyk7Ci0gICAgaWYgKGVuY29kaW5nLmlzVmFsaWQoKSkKLSAgICAgICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nOworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKIH0KIAogU3RyaW5nIENhY2hl
ZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX2VuY29kaW5nLm5hbWUo
KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKIH0KIAogY29uc3Qg
U3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCkBAIC03OSw3ICs3Niw4IEBAIGNvbnN0IFN0
cmluZyYgQ2FjaGVkU2NyaXB0OjpzY3JpcHQoKQogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7
CiAKICAgICBpZiAoIW1fc2NyaXB0ICYmIG1fZGF0YSkgewotICAgICAgICBtX3NjcmlwdCA9IG1f
ZW5jb2RpbmcuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAg
bV9zY3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUo
KSk7CisgICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKICAgICAgICAgc2V0
RGVjb2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNk
ZWZpbmUgQ2FjaGVkU2NyaXB0X2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2Ug
ewogICAgIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlw
dD4qKTsKIAogICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVy
OwogICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
OwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20p
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNp
bmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCkBAIC0zMjIsNyArMzIzLDcgQEAg
Y29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOgogCiBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQogICAgIDogbV9jb250ZW50
VHlwZShkZXRlcm1pbmVDb250ZW50VHlwZShtaW1lVHlwZSkpCi0gICAgLCBtX2RlY29kZXIoZGVm
YXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykpCisg
ICAgLCBtX2VuY29kaW5nKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWRE
ZWZhdWx0RW5jb2RpbmcpKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQogICAgICwg
bV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxz
ZSkKQEAgLTM0NCwxMiArMzQ1LDEzIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5j
b2RpbmcoY28KICAgICAvLyBXaGVuIGVuY29kaW5nIGNvbWVzIGZyb20gbWV0YSB0YWcgKGkuZS4g
aXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZpYSBYSFIpLAogICAgIC8vIHRyZWF0IHgtdXNl
ci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVnIDE4MjcwKQogICAgIGlmIChzb3VyY2UgPT0g
RW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNlY21wKGVuY29kaW5nLm5hbWUoKSwgIngtdXNl
ci1kZWZpbmVkIikgPT0gMCkKLSAgICAgICAgbV9kZWNvZGVyLnJlc2V0KCJ3aW5kb3dzLTEyNTIi
KTsgCisgICAgICAgIG1fZW5jb2RpbmcgPSAid2luZG93cy0xMjUyIjsKICAgICBlbHNlIGlmIChz
b3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyB8fCBzb3VyY2UgPT0gRW5jb2RpbmdGcm9tWE1M
SGVhZGVyIHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0KSAgICAgICAgCi0gICAg
ICAgIG1fZGVjb2Rlci5yZXNldChlbmNvZGluZy5jbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nLmNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFs
ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBtX2RlY29kZXIucmVzZXQoZW5jb2RpbmcpOworICAg
ICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAKKyAgICBtX2NvZGVjLmNsZWFyKCk7CiAgICAg
bV9zb3VyY2UgPSBzb3VyY2U7CiB9CiAKQEAgLTQwMSw0NiArNDAzLDQ5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBza2lwV2hpdGVzcGFjZShjb25zdCAKICAgICByZXR1cm4gcG9zICE9IGRhdGFFbmQ7
CiB9CiAKLXZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbikKK3NpemVfdCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckJP
TShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIC8vIENoZWNrIGZvciBVVEYt
MTYvMzIgb3IgVVRGLTggQk9NIG1hcmsgYXQgdGhlIGJlZ2lubmluZywgd2hpY2ggaXMgYSBzdXJl
IHNpZ24gb2YgYSBVbmljb2RlIGVuY29kaW5nLgorICAgIC8vIFdlIGxldCBpdCBvdmVycmlkZSBl
dmVuIGEgdXNlci1jaG9zZW4gZW5jb2RpbmcuCisgICAgQVNTRVJUKCFtX2NoZWNrZWRGb3JCT00p
OwogCi0gICAgaWYgKG1fc291cmNlID09IFVzZXJDaG9zZW5FbmNvZGluZykgewotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgYSBCT00gc2hvdWxkIG92ZXJyaWRlIGV2ZW4gYSB1c2VyLWNob3NlbiBl
bmNvZGluZy4KLSAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBzaXplX3QgbGVuZ3RoT2ZCT00gPSAwOwogCi0gICAgLy8gQ2hlY2sgaWYg
d2UgaGF2ZSBlbm91Z2ggZGF0YS4KICAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gbV9idWZmZXIu
c2l6ZSgpOwotICAgIGlmIChidWZmZXJMZW5ndGggKyBsZW4gPCA0KQotICAgICAgICByZXR1cm47
CiAKLSAgICBtX2NoZWNrZWRGb3JCT00gPSB0cnVlOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgZmly
c3QgZm91ciBieXRlcy4KLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc29tZSBvZiBieXRl
cyBhcmUgYWxyZWFkeSBpbiB0aGUgYnVmZmVyLgotICAgIC8vIFRoZSBsYXN0IGJ5dGUgaXMgYWx3
YXlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGluIHRoZSBidWZmZXIuCi0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogdWRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihk
YXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyIGMxID0gYnVmZmVyTGVuZ3RoID49IDEgPyBtX2J1ZmZl
clswXSA6ICp1ZGF0YSsrOwotICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBidWZmZXJMZW5ndGggPj0g
MiA/IG1fYnVmZmVyWzFdIDogKnVkYXRhKys7Ci0gICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZmZl
ckxlbmd0aCA+PSAzID8gbV9idWZmZXJbMl0gOiAqdWRhdGErKzsKLSAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoIDwgNCk7Ci0gICAgdW5zaWduZWQgY2hhciBjNCA9ICp1ZGF0YTsKKyAgICBzaXplX3Qg
YnVmMUxlbiA9IGJ1ZmZlckxlbmd0aDsKKyAgICBzaXplX3QgYnVmMkxlbiA9IGxlbjsKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBidWYxID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4obV9idWZmZXIuZGF0YSgpKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYy
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgdW5z
aWduZWQgY2hhciBjMSA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4g
PyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMiA9IGJ1ZjFM
ZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisr
KSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVm
MSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQg
Y2hhciBjNCA9IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CiAKICAgICAvLyBD
aGVjayBmb3IgdGhlIEJPTS4KICAgICBpZiAoYzEgPT0gMHhGRiAmJiBjMiA9PSAweEZFKSB7Ci0g
ICAgICAgIGlmIChjMyAhPTAgfHwgYzQgIT0gMCkKKyAgICAgICAgaWYgKGMzICE9IDAgfHwgYzQg
IT0gMCkgewogICAgICAgICAgICAgc2V0RW5jb2RpbmcoVVRGMTZMaXR0bGVFbmRpYW5FbmNvZGlu
ZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgICAgIGVsc2UgCisgICAgICAgICAgICBs
ZW5ndGhPZkJPTSA9IDI7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkxpdHRsZUVuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoYzEgPT0gMHhFRiAmJiBjMiA9PSAweEJCICYmIGMzID09IDB4QkYp
CisgICAgICAgICAgICBsZW5ndGhPZkJPTSA9IDQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KGMxID09IDB4RUYgJiYgYzIgPT0gMHhCQiAmJiBjMyA9PSAweEJGKSB7CiAgICAgICAgIHNldEVu
Y29kaW5nKFVURjhFbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgZWxzZSBp
ZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKQorICAgICAgICBsZW5ndGhPZkJPTSA9IDM7Cisg
ICAgfSBlbHNlIGlmIChjMSA9PSAweEZFICYmIGMyID09IDB4RkYpIHsKICAgICAgICAgc2V0RW5j
b2RpbmcoVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0g
ICAgZWxzZSBpZiAoYzEgPT0gMCAmJiBjMiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhG
RikKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSAyOworICAgIH0gZWxzZSBpZiAoYzEgPT0gMCAmJiBj
MiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhGRikgewogICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkJpZ0VuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAg
ICAgbGVuZ3RoT2ZCT00gPSA0OworICAgIH0KKworICAgIGlmIChsZW5ndGhPZkJPTSB8fCBidWZm
ZXJMZW5ndGggKyBsZW4gPj0gNCkKKyAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKKwor
ICAgIHJldHVybiBsZW5ndGhPZkJPTTsKIH0KIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
aGVja0ZvckNTU0NoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92
ZWREYXRhVG9CdWZmZXIpCkBAIC03NTUsOCArNzYwLDkgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZXRlY3RKYXBhbmVzZQogCiBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiB7CisgICAgc2l6ZV90IGxlbmd0aE9mQk9N
ID0gMDsKICAgICBpZiAoIW1fY2hlY2tlZEZvckJPTSkKLSAgICAgICAgY2hlY2tGb3JCT00oZGF0
YSwgbGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW4pOwog
CiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNlOwogCkBAIC03NzMsMTAgKzc3OSwx
MyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgaWYgKG1f
c291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRF
bmNvZGluZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5l
c2VFbmNvZGluZyhkYXRhLCBsZW4pOwogCi0gICAgQVNTRVJUKGVuY29kaW5nKCkuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQobV9lbmNvZGluZy5pc1ZhbGlkKCkpOworCisgICAgaWYgKCFtX2NvZGVj
KQorICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFzZSgp
KTsKIAogICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2RlY29k
ZXIuZGVjb2RlKGRhdGEsIGxlbiwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vy
cm9yKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhICsgbGVuZ3RoT2ZCT00s
IGxlbiAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3RXJy
b3IpOwogCiAgICAgaWYgKCFtb3ZlZERhdGFUb0J1ZmZlcikgewogICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKQEAgLTc4NCwxNiArNzkzLDIzIEBAIFN0cmluZyBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbik7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9
IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIGZhbHNl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgU3RyaW5nIHJlc3VsdCA9
IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCkgKyBsZW5ndGhPZkJPTSwgbV9idWZmZXIu
c2l6ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdF
cnJvcik7CiAgICAgbV9idWZmZXIuY2xlYXIoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBT
dHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogewotICAgIFN0cmluZyByZXN1bHQg
PSBtX2RlY29kZXIuZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB0cnVl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgaWYgKCFtX2NvZGVjKSB7
CisgICAgICAgIEFTU0VSVChtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoIW1f
Y2hlY2tlZEZvckJPTSk7CisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOworICAgIH0KKworICAg
IFN0cmluZyByZXN1bHQgPSBtX2NvZGVjLT5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCksIHRydWUsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vycm9yKTsKICAgICBt
X2J1ZmZlci5jbGVhcigpOwotICAgIG1fZGVjb2Rlci5yZXNldChtX2RlY29kZXIuZW5jb2Rpbmco
KSk7CisgICAgbV9jb2RlYy5jbGVhcigpOworICAgIG1fY2hlY2tlZEZvckJPTSA9IGZhbHNlOyAv
LyBTa2lwIEJPTSBhZ2FpbiB3aGVuIHJlLWRlY29kaW5nLgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHJldmlzaW9uIDQxMzUx
KQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw3ICsyMyw3IEBACiAjaWZuZGVmIFRleHRSZXNvdXJjZURlY29kZXJfaAogI2RlZmlu
ZSBUZXh0UmVzb3VyY2VEZWNvZGVyX2gKIAotI2luY2x1ZGUgIlRleHREZWNvZGVyLmgiCisjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsNyAr
NDYsNyBAQCBwdWJsaWM6CiAgICAgflRleHRSZXNvdXJjZURlY29kZXIoKTsKIAogICAgIHZvaWQg
c2V0RW5jb2RpbmcoY29uc3QgVGV4dEVuY29kaW5nJiwgRW5jb2RpbmdTb3VyY2UpOwotICAgIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZW5j
b2RpbmcoKTsgfQorICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2VuY29kaW5nOyB9CiAKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpOwogICAgIFN0cmluZyBmbHVzaCgpOwpAQCAtNTYsMTcgKzU2LDE4IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyk7CiAKLSAgICBl
bnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQbGFpblRl
eHQgaXMgZXF1aXZhbGVudCB0byBkaXJlY3RseSB1c2luZyBUZXh0RGVjb2Rlci4KKyAgICBlbnVt
IENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQbGFpblRleHQg
b25seSBjaGVja3MgZm9yIEJPTS4KICAgICBzdGF0aWMgQ29udGVudFR5cGUgZGV0ZXJtaW5lQ29u
dGVudFR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgc3RhdGljIGNvbnN0IFRleHRF
bmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKENvbnRlbnRUeXBlLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGRlZmF1bHRFbmNvZGluZyk7CiAKLSAgICB2b2lkIGNoZWNrRm9yQk9NKGNvbnN0IGNoYXIqLCBz
aXplX3QpOworICAgIHNpemVfdCBjaGVja0ZvckJPTShjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAg
ICBib29sIGNoZWNrRm9yQ1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3Zl
ZERhdGFUb0J1ZmZlcik7CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIq
LCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFu
ZXNlRW5jb2RpbmcoY29uc3QgY2hhciosIHNpemVfdCk7CiAKICAgICBDb250ZW50VHlwZSBtX2Nv
bnRlbnRUeXBlOwotICAgIFRleHREZWNvZGVyIG1fZGVjb2RlcjsKKyAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKKyAgICBPd25QdHI8VGV4dENvZGVjPiBtX2NvZGVjOwogICAgIEVuY29kaW5n
U291cmNlIG1fc291cmNlOwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBib29sIG1f
Y2hlY2tlZEZvckJPTTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBh
cnNlci5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFu
aWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNs
dWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKQEAgLTQ1LDkgKzQ1LDEyIEBAIGJvb2wgcGFyc2VNYW5pZmVzdChjb25z
dCBLVVJMJiBtYW5pZmVzdFUKICAgICBBU1NFUlQobWFuaWZlc3QuZmFsbGJhY2tVUkxzLmlzRW1w
dHkoKSk7CiAgICAgCiAgICAgTW9kZSBtb2RlID0gRXhwbGljaXQ7Ci0gICAgU3RyaW5nIHMgPSBV
VEY4RW5jb2RpbmcoKS5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKworICAgIFJlZlB0cjxUZXh0UmVz
b3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0
L2NhY2hlLW1hbmlmZXN0IiwgIlVURi04Iik7CisgICAgU3RyaW5nIHMgPSBkZWNvZGVyLT5kZWNv
ZGUoZGF0YSwgbGVuZ3RoKTsKKyAgICBzICs9IGRlY29kZXItPmZsdXNoKCk7CiAgICAgCi0gICAg
Ly8gTG9vayBmb3IgdGhlIG1hZ2ljIHNpZ25hdHVyZTogIl5ceEZFRkY/Q0FDSEUgTUFOSUZFU1Rb
IFx0XT8iICh0aGUgQk9NIGlzIHJlbW92ZWQgYnkgZGVjb2RlKCkpLgorICAgIC8vIExvb2sgZm9y
IHRoZSBtYWdpYyBzaWduYXR1cmU6ICJeXHhGRUZGP0NBQ0hFIE1BTklGRVNUWyBcdF0/IiAodGhl
IEJPTSBpcyByZW1vdmVkIGJ5IFRleHRSZXNvdXJjZURlY29kZXIpLgogICAgIC8vIEV4YW1wbGU6
ICJDQUNIRSBNQU5JRkVTVCAjY29tbWVudCIgaXMgYSB2YWxpZCBzaWduYXR1cmUuCiAgICAgLy8g
RXhhbXBsZTogIkNBQ0hFIE1BTklGRVNUO1YyIiBpcyBub3QuCiAgICAgaWYgKCFzLnN0YXJ0c1dp
dGgoIkNBQ0hFIE1BTklGRVNUIikpCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNv
cmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDcgKzQ3MSw5IEBAIGNvbnN0
IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb24KICAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0OwogCi0gICAgbV91c2VyU3R5bGVTaGVldCA9IFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiKS0+ZGVjb2RlKGRhdGEtPmRhdGEo
KSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiKTsKKyAgICBtX3VzZXJT
dHlsZVNoZWV0ID0gZGVjb2Rlci0+ZGVjb2RlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsK
KyAgICBtX3VzZXJTdHlsZVNoZWV0ICs9IGRlY29kZXItPmZsdXNoKCk7CiAKICAgICByZXR1cm4g
bV91c2VyU3R5bGVTaGVldDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVy
LmNwcAkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dERlY29kZXIuaCIK
LQotI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCi0KLS8vIEZJWE1FOiBXb3VsZCBi
ZSBuaWNlIHRvIGFsc28gaGFuZGxlIEJPTSBmb3IgVVRGLTcgYW5kIFVURi0zMi4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1UZXh0RGVjb2Rlcjo6VGV4dERlY29kZXIoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKLSAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCi0gICAgLCBtX2NoZWNr
ZWRGb3JCT00oZmFsc2UpCi0gICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKLXsKLX0KLQotdm9p
ZCBUZXh0RGVjb2Rlcjo6cmVzZXQoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKLXsKLSAg
ICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7Ci0gICAgbV9jb2RlYy5jbGVhcigpOwotICAgIG1fY2hl
Y2tlZEZvckJPTSA9IGZhbHNlOwotICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7Ci19Ci0KLVN0
cmluZyBUZXh0RGVjb2Rlcjo6Y2hlY2tGb3JCT00oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCi17Ci0g
ICAgQVNTRVJUKCFtX2NoZWNrZWRGb3JCT00pOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl
IGZvdW5kIGEgQk9NLgotICAgIHNpemVfdCBudW1CdWZmZXJlZEJ5dGVzID0gbV9udW1CdWZmZXJl
ZEJ5dGVzOwotICAgIHNpemVfdCBidWYxTGVuID0gbnVtQnVmZmVyZWRCeXRlczsKLSAgICBzaXpl
X3QgYnVmMkxlbiA9IGxlbmd0aDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYxID0gbV9i
dWZmZXJlZEJ5dGVzOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZjIgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyIGMx
ID0gYnVmMUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1ZjJMZW4s
ICpidWYyKyspIDogMDsKLSAgICB1bnNpZ25lZCBjaGFyIGMyID0gYnVmMUxlbiA/ICgtLWJ1ZjFM
ZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1
bnNpZ25lZCBjaGFyIGMzID0gYnVmMUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxl
biA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1bnNpZ25lZCBjaGFyIGM0ID0gYnVm
MkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLQotICAgIGNvbnN0IFRleHRFbmNvZGlu
ZyogZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9ICZtX2VuY29kaW5nOwotICAgIGJvb2wgZm91bmRC
T00gPSB0cnVlOwotICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7Ci0gICAgaWYgKGMxID09IDB4
RkYgJiYgYzIgPT0gMHhGRSkgewotICAgICAgICBpZiAoYzMgIT0gMCB8fCBjNCAhPSAwKSAgewot
ICAgICAgICAgICAgZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9ICZVVEYxNkxpdHRsZUVuZGlhbkVu
Y29kaW5nKCk7Ci0gICAgICAgICAgICBsZW5ndGhPZkJPTSA9IDI7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobnVtQnVmZmVyZWRCeXRlcyArIGxlbmd0aCA+IHNpemVvZihtX2J1ZmZlcmVkQnl0ZXMpKSB7
Ci0gICAgICAgICAgICBlbmNvZGluZ0NvbnNpZGVyaW5nQk9NID0gJlVURjMyTGl0dGxlRW5kaWFu
RW5jb2RpbmcoKTsKLSAgICAgICAgICAgIGxlbmd0aE9mQk9NID0gNDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBmb3VuZEJPTSA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoYzEgPT0gMHhF
RiAmJiBjMiA9PSAweEJCICYmIGMzID09IDB4QkYpIHsKLSAgICAgICAgZW5jb2RpbmdDb25zaWRl
cmluZ0JPTSA9ICZVVEY4RW5jb2RpbmcoKTsKLSAgICAgICAgbGVuZ3RoT2ZCT00gPSAzOwotICAg
IH0gZWxzZSBpZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKSB7Ci0gICAgICAgIGVuY29kaW5n
Q29uc2lkZXJpbmdCT00gPSAmVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpOwotICAgICAgICBsZW5n
dGhPZkJPTSA9IDI7Ci0gICAgfSBlbHNlIGlmIChjMSA9PSAwICYmIGMyID09IDAgJiYgYzMgPT0g
MHhGRSAmJiBjNCA9PSAweEZGKSB7Ci0gICAgICAgIGVuY29kaW5nQ29uc2lkZXJpbmdCT00gPSAm
VVRGMzJCaWdFbmRpYW5FbmNvZGluZygpOwotICAgICAgICBsZW5ndGhPZkJPTSA9IDQ7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGZvdW5kQk9NID0gZmFsc2U7Ci0KLSAgICBpZiAoIWZvdW5kQk9NICYm
IG51bUJ1ZmZlcmVkQnl0ZXMgKyBsZW5ndGggPD0gc2l6ZW9mKG1fYnVmZmVyZWRCeXRlcykgJiYg
IWZsdXNoKSB7Ci0gICAgICAgIC8vIENvbnRpbnVlIHRvIGxvb2sgZm9yIHRoZSBCT00uCi0gICAg
ICAgIG1lbWNweSgmbV9idWZmZXJlZEJ5dGVzW251bUJ1ZmZlcmVkQnl0ZXNdLCBkYXRhLCBsZW5n
dGgpOwotICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgKz0gbGVuZ3RoOwotICAgICAgICByZXR1
cm4gIiI7Ci0gICAgfQotCi0gICAgLy8gRG9uZSBjaGVja2luZyBmb3IgQk9NLgotICAgIG1fY29k
ZWMuc2V0KG5ld1RleHRDb2RlYygqZW5jb2RpbmdDb25zaWRlcmluZ0JPTSkucmVsZWFzZSgpKTsK
LSAgICBpZiAoIW1fY29kZWMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBtX2NoZWNr
ZWRGb3JCT00gPSB0cnVlOwotCi0gICAgLy8gU2tpcCB0aGUgQk9NLgotICAgIGlmIChmb3VuZEJP
TSkgewotICAgICAgICBBU1NFUlQobnVtQnVmZmVyZWRCeXRlcyA8IGxlbmd0aE9mQk9NKTsKLSAg
ICAgICAgc2l6ZV90IG51bVVuYnVmZmVyZWRCT01CeXRlcyA9IGxlbmd0aE9mQk9NIC0gbnVtQnVm
ZmVyZWRCeXRlczsKLSAgICAgICAgQVNTRVJUKG51bVVuYnVmZmVyZWRCT01CeXRlcyA8PSBsZW5n
dGgpOwotCi0gICAgICAgIGRhdGEgKz0gbnVtVW5idWZmZXJlZEJPTUJ5dGVzOwotICAgICAgICBs
ZW5ndGggLT0gbnVtVW5idWZmZXJlZEJPTUJ5dGVzOwotICAgICAgICBudW1CdWZmZXJlZEJ5dGVz
ID0gMDsKLSAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKLSAgICB9Ci0KLSAgICAvLyBI
YW5kbGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyZWQgYnl0ZXMgdG8gZGVhbCB3aXRo
LgotICAgIGlmIChudW1CdWZmZXJlZEJ5dGVzKSB7Ci0gICAgICAgIGNoYXIgYnVmZmVyZWRCeXRl
c1tzaXplb2YobV9idWZmZXJlZEJ5dGVzKV07Ci0gICAgICAgIG1lbWNweShidWZmZXJlZEJ5dGVz
LCBtX2J1ZmZlcmVkQnl0ZXMsIG51bUJ1ZmZlcmVkQnl0ZXMpOwotICAgICAgICBtX251bUJ1ZmZl
cmVkQnl0ZXMgPSAwOwotCi0gICAgICAgIFN0cmluZyBidWZmZXJlZFJlc3VsdCA9IG1fY29kZWMt
PmRlY29kZShidWZmZXJlZEJ5dGVzLCBudW1CdWZmZXJlZEJ5dGVzLCBmYWxzZSwgc3RvcE9uRXJy
b3IsIHNhd0Vycm9yKTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yICYmIHNhd0Vycm9yKQotICAg
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkUmVzdWx0OwotICAgICAgICByZXR1cm4gYnVmZmVyZWRS
ZXN1bHQgKyBtX2NvZGVjLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3Is
IHNhd0Vycm9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEsIGxl
bmd0aCwgZmx1c2gsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oCShyZXZpc2lvbiA0
MTM1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
VGV4dERlY29kZXJfaAotI2RlZmluZSBUZXh0RGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0g
ICAgY2xhc3MgVGV4dENvZGVjOwotCi0gICAgY2xhc3MgVGV4dERlY29kZXIgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgVGV4dERlY29kZXIoY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgICAgIHZv
aWQgcmVzZXQoY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgICAgIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9OwotCi0gICAgICAgIFN0
cmluZyBkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghbV9jaGVja2VkRm9yQk9NKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0ZvckJP
TShkYXRhLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJv
ciwgc2F3RXJyb3IpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmcg
Y2hlY2tGb3JCT00oY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wg
c3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKLQotICAgICAgICBUZXh0RW5jb2RpbmcgbV9l
bmNvZGluZzsKLSAgICAgICAgT3duUHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKLQotICAgICAgICBi
b29sIG1fY2hlY2tlZEZvckJPTTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBtX251bUJ1ZmZlcmVk
Qnl0ZXM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzNdOwotICAgIH07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHREZWNvZGVyX2gKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiA0MTM1MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSAiVGV4dERlY29k
ZXIuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2lmIFVTRShJQ1VfVU5J
Q09ERSkKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CkBAIC03Myw3ICs3Miw3IEBAIFN0cmlu
ZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICBpZiAoIW1fbmFtZSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIFRleHREZWNvZGVyKCp0aGlzKS5k
ZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOworICAgIHJl
dHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVlLCBzdG9w
T25FcnJvciwgc2F3RXJyb3IpOwogfQogCiBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5n
IGhhbmRsaW5nKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmgJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0Q29kZWM7CiAgICAgY2xhc3MgVGV4
dEVuY29kaW5nOwogCi0gICAgLy8gT25seSBUZXh0RW5jb2RpbmcgYW5kIFRleHREZWNvZGVyIHNo
b3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4KLSAgICAvLyAtIFVzZSBUZXh0RGVjb2Rl
cjo6ZGVjb2RlIHRvIGRlY29kZSwgc2luY2UgaXQgaGFuZGxlcyBCT01zLgotICAgIC8vIC0gVXNl
IFRleHRFbmNvZGluZzo6ZGVjb2RlIHRvIGRlY29kZSBpZiB5b3UgaGF2ZSBhbGwgdGhlIGRhdGEg
YXQgb25jZS4KLSAgICAvLyAgIEl0J3MgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyBUZXh0RGVjb2Rl
cjo6ZGVjb2RlIHNvIHdvcmtzIGp1c3QgYXMgd2VsbC4KLSAgICAvLyAtIFVzZSBUZXh0RW5jb2Rp
bmc6OmVuY29kZSB0byBlbmNvZGUsIHNpbmNlIGl0IHRha2VzIGNhcmUgb2Ygbm9ybWFsaXphdGlv
bi4KKyAgICAvLyBVc2UgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlIHRvIGRlY29kZSByZXNv
dXJjZXMsIHNpbmNlIGl0IGhhbmRsZXMgQk9Ncy4KKyAgICAvLyBVc2UgVGV4dEVuY29kaW5nOjpl
bmNvZGUgdG8gZW5jb2RlLCBzaW5jZSBpdCB0YWtlcyBjYXJlIG9mIG5vcm1hbGl6YXRpb24uCiAg
ICAgc3RkOjphdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2Rp
bmcmKTsKIAogICAgIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlv
biBkaXJlY3RseS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28163</attachid>
            <date>2009-03-02 03:42:22 -0800</date>
            <delta_ts>2009-03-10 05:38:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>EliminateTextDecoder.txt</filename>
            <type>text/plain</type>
            <size>34161</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMDMtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDI4NQorICAgICAgICBU
ZXh0IHJlc291cmNlIGxvYWRpbmcgY2hlY2tzIGZvciBCT00gdHdpY2UKKworICAgICAgICBUaGlz
IHJlbW92ZXMgVGV4dERlY29kZXIgY2xhc3MsIHNpbmNlIGl0cyBvbmx5IHB1cnBvc2Ugd2FzIHRv
IGNoZWNrIGZvciBCT00sIHdoaWNoIGlzCisgICAgICAgIGFscmVhZHkgZG9uZSBpbiBUZXh0UmVz
b3VyY2VEZWNvZGVyLiBDYWxsZXJzIHRoYXQgdXNlIFRleHRFbmNvZGluZzo6ZGVjb2RlKCkgd29u
J3QgZ2V0CisgICAgICAgIEJPTSBjaGVja2VkLCBidXQgSSBkaWRuJ3QgZmluZCBhbnkgY2FzZXMg
d2hlcmUgaXQgd291bGQgbm90aWNlYWJseSBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnNjb25zOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
U291cmNlcy5ia2w6CisgICAgICAgIFJlbW92ZSBUZXh0RGVjb2Rlci57aCxjcHB9LgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oOiBSZW1vdmVkLgorCisgICAgICAgICogbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuaDogSW5zdGVhZCBvZiBhIFRleHREZWNvZGVyIG9iamVjdCwg
a2VlcCBUZXh0RW5jb2RpbmcgYW5kCisgICAgICAgIFRleHRDb2RlYyBzZXBhcmF0ZWx5LgorCisg
ICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcik6IFVwZGF0ZWQgZm9y
IG1fZW5jb2RpbmcgYmVpbmcgYSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpzZXRFbmNvZGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00pOiBSZW1vdmVkIGEgRklYTUUgc2F5aW5nIHRoYXQg
YSBCT00gY291bGQgb3ZlcnJpZGUKKyAgICAgICAgZXZlbiBhIHVzZXItY2hvc2VuIGVuY29kaW5n
IC0gdGhpcyBpcyBob3cgaXQgYWxyZWFkeSB3b3JrZWQgZHVlIHRvIFRleHREZWNvZGVyIGNoZWNr
aW5nIGZvcgorICAgICAgICBCT00gYWdhaW4uIE1hZGUgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhl
IGRldGVjdGVkIEJPTSBsZW5ndGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZWNvZGUpOiBTa2lwIHRoZSBCT00gaWYgaXQgd2FzIGZvdW5kIGF0IHRoZSBiZWdpbm5p
bmcgb2YKKyAgICAgICAgYSB0ZXh0IHJlc291cmNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJl
c291cmNlRGVjb2Rlcjo6Zmx1c2gpOiBSZXNldCBtX2NoZWNrZWRGb3JCT00sIHNvIHRoYXQgcmUt
ZGVjb2RpbmcgdGhlIHNhbWUKKyAgICAgICAgcmVzb3VyY2UgYWdhaW4gKGFzIGZyZXF1ZW50bHkg
ZG9uZSBieSBDYWNoZWRSZXNvdXJjZSBzdWJjbGFzc2VzKSB3aWxsIHNraXAgdGhlIEJPTSBjb3Jy
ZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6IChXZWJD
b3JlOjpUZXh0RW5jb2Rpbmc6OmRlY29kZSk6CisgICAgICAgIFVzZSBUZXh0Q29kZWMgZGlyZWN0
bHkgd2l0aG91dCBhIFRleHREZWNvZGVyIHdyYXBwZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGlzIG1l
dGhvZCBubyBsb25nZXIKKyAgICAgICAgY2hlY2tzIGZvciBCT00sIHdoaWNoIHdhcyBhIGNvdW50
ZXItaW50dWl0aXZlIGZlYXR1cmUuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6c2V0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkU2NyaXB0OjplbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3Jp
cHQ6OnNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZU1hbmlmZXN0KToKKyAgICAgICAgVXNlIFRleHRSZXNvdXJjZURlY29kZXIsIGFzIFRleHRF
bmNvZGluZzo6ZGVjb2RlKCkgbm8gbG9uZ2VyIGNoZWNrcyBmb3IgQk9NLgorCisgICAgICAgICog
bG9hZGVyL0NhY2hlZEZvbnQuY3BwOiAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9u
dERhdGEpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6IChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5
bGVTaGVldCk6CisgICAgICAgIEJlIHN1cmUgdG8gZmx1c2ggVGV4dFJlc291cmNlRGVjb2Rlciwg
cHVzaGluZyBhbnkgcmVtYWluaW5nIGJ5dGVzIG91dCwgYW5kIG1ha2luZyB0aGUgZGVjb2Rlcgor
ICAgICAgICByZS11c2FibGUgKGZvciByZXBlYXRlZCBkZWNvZGluZyBvZiB0aGUgc2FtZSByZXNv
dXJjZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6
IFVwZGF0ZWQgY29tbWVudHMgZm9yIG5ld1RleHRDb2RlYygpLgorCiAyMDA5LTAzLTAyICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBTaG93IGV4Y2VwdGlv
biBtZXNzYWdlcyBhZ2FpbiB3aGVuIGV2YWx1YXRpbmcgYmFkIGV4cHJlc3Npb25zIGluIHRoZQpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTE0NjgsOCArMTQ2OCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERl
Y29kZXIuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtOTQ0LDcgKzk0NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwK
LSAgICBwbGF0Zm9ybS90ZXh0L1RleHREZWNvZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZp
c2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAt
ODMwLDcgKzgzMCw2IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsKICAgICAncGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNw
cCcsCi0gICAgJ3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwJywKICAgICAncGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwJywKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsNyArNzY1LDYgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vdGV4dC9UZXh0RGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjkzLDE0ICs2NjkzLDYg
QEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERlY29kZXIuY3BwIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+
DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dERl
Y29kZXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHREaXJlY3Rpb24uaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTI2LDggKzM1MjYsNiBAQAogCQlCMkMzREE0MDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQxMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNV
VEYxNi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovOyB9OwogCQlC
MkMzREE0MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEyMEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWNVVEYxNi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUIyQzNEQTQzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEx
MzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuY3BwICovOyB9OwotCQlCMkMzREE0NDBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExNTBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MTYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi87IH07CiAJCUIyQzNEQTQ3
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RW5jb2RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtODMxOCw4ICs4MzE2LDYgQEAKIAkJQjJDM0RBMTAwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlY1VzZXJEZWZpbmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q29kZWNVc2VyRGVmaW5lZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMz
REExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1VURjE2LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VU
RjE2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNVVEYxNi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREExMzBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHREZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMTQw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEVuY29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5j
b2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDggKzEzMjQ5LDYg
QEAKIAkJCQlCMkMzREExMjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCAqLywK
IAkJCQlCMkMzREEwRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3Bw
ICovLAogCQkJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oICovLAotCQkJCUIyQzNEQTEzMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5jcHAg
Ki8sCi0JCQkJQjJDM0RBMTQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREZWNvZGVyLmggKi8sCiAJ
CQkJQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlC
MkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMz
REExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCkBAIC0xNjYwOCw3ICsx
NjYwMiw2IEBACiAJCQkJQjJDM0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0MDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENv
ZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMDE0REU0MEU2ODlBNDMwMEUx
MDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUIy
QzNEQTQ0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBNjkzODAyMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTQ3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rpbmcu
aCBpbiBIZWFkZXJzICovLApAQCAtMTg2MjEsNyArMTg2MTQsNiBAQAogCQkJCUIyQzNEQTQxMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREEzRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE0MzBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2OTM4MDEwQTExMTAw
QTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0
NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA0MTM1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiAr
MTM3LDcgQEAgYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgpCiAKICAgICAgICAg
UmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpOwogICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1l
bnQtPndyaXRlKGRlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
KTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVyLT5mbHVzaCgp
KTsKICAgICAgICAgaWYgKGRlY29kZXItPnNhd0Vycm9yKCkpIHsKICAgICAgICAgICAgIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudC5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDIwIEBACiAKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRTY3JpcHQ6
OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQog
ICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCi0gICAgLCBtX2VuY29kaW5nKGNoYXJz
ZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiwgY2hhcnNldCkpCiAgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25U
aW1lcih0aGlzLCAmQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkK
IHsKICAgICAvLyBJdCdzIGphdmFzY3JpcHQgd2Ugd2FudC4KICAgICAvLyBCdXQgc29tZSB3ZWJz
aXRlcyB0aGluayB0aGVpciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgog
ICAgIC8vIGFuZCByZWZ1c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNh
dGlvbi94LWphdmFzY3JpcHQuCiAgICAgc2V0QWNjZXB0KCIqLyoiKTsKLSAgICBpZiAoIW1fZW5j
b2RpbmcuaXNWYWxpZCgpKQotICAgICAgICBtX2VuY29kaW5nID0gTGF0aW4xRW5jb2RpbmcoKTsK
IH0KIAogQ2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2NyaXB0KCkKQEAgLTY0LDE0ICs2MywxMiBAQCB2
b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogCiB2b2lkIENhY2hlZFNjcmlw
dDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVu
Y29kaW5nKGNocyk7Ci0gICAgaWYgKGVuY29kaW5nLmlzVmFsaWQoKSkKLSAgICAgICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nOworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKIH0KIAogU3RyaW5nIENhY2hl
ZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX2VuY29kaW5nLm5hbWUo
KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKIH0KIAogY29uc3Qg
U3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCkBAIC03OSw3ICs3Niw4IEBAIGNvbnN0IFN0
cmluZyYgQ2FjaGVkU2NyaXB0OjpzY3JpcHQoKQogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7
CiAKICAgICBpZiAoIW1fc2NyaXB0ICYmIG1fZGF0YSkgewotICAgICAgICBtX3NjcmlwdCA9IG1f
ZW5jb2RpbmcuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAg
bV9zY3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUo
KSk7CisgICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKICAgICAgICAgc2V0
RGVjb2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNk
ZWZpbmUgQ2FjaGVkU2NyaXB0X2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2Ug
ewogICAgIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlw
dD4qKTsKIAogICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVy
OwogICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
OwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20p
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNp
bmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCkBAIC0zMjIsNyArMzIzLDcgQEAg
Y29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOgogCiBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQogICAgIDogbV9jb250ZW50
VHlwZShkZXRlcm1pbmVDb250ZW50VHlwZShtaW1lVHlwZSkpCi0gICAgLCBtX2RlY29kZXIoZGVm
YXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykpCisg
ICAgLCBtX2VuY29kaW5nKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWRE
ZWZhdWx0RW5jb2RpbmcpKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQogICAgICwg
bV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxz
ZSkKQEAgLTM0NCwxMiArMzQ1LDEzIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5j
b2RpbmcoY28KICAgICAvLyBXaGVuIGVuY29kaW5nIGNvbWVzIGZyb20gbWV0YSB0YWcgKGkuZS4g
aXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZpYSBYSFIpLAogICAgIC8vIHRyZWF0IHgtdXNl
ci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVnIDE4MjcwKQogICAgIGlmIChzb3VyY2UgPT0g
RW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNlY21wKGVuY29kaW5nLm5hbWUoKSwgIngtdXNl
ci1kZWZpbmVkIikgPT0gMCkKLSAgICAgICAgbV9kZWNvZGVyLnJlc2V0KCJ3aW5kb3dzLTEyNTIi
KTsgCisgICAgICAgIG1fZW5jb2RpbmcgPSAid2luZG93cy0xMjUyIjsKICAgICBlbHNlIGlmIChz
b3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyB8fCBzb3VyY2UgPT0gRW5jb2RpbmdGcm9tWE1M
SGVhZGVyIHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0KSAgICAgICAgCi0gICAg
ICAgIG1fZGVjb2Rlci5yZXNldChlbmNvZGluZy5jbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nLmNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFs
ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBtX2RlY29kZXIucmVzZXQoZW5jb2RpbmcpOworICAg
ICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAKKyAgICBtX2NvZGVjLmNsZWFyKCk7CiAgICAg
bV9zb3VyY2UgPSBzb3VyY2U7CiB9CiAKQEAgLTQwMSw0NiArNDAzLDQ5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBza2lwV2hpdGVzcGFjZShjb25zdCAKICAgICByZXR1cm4gcG9zICE9IGRhdGFFbmQ7
CiB9CiAKLXZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbikKK3NpemVfdCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckJP
TShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIC8vIENoZWNrIGZvciBVVEYt
MTYvMzIgb3IgVVRGLTggQk9NIG1hcmsgYXQgdGhlIGJlZ2lubmluZywgd2hpY2ggaXMgYSBzdXJl
IHNpZ24gb2YgYSBVbmljb2RlIGVuY29kaW5nLgorICAgIC8vIFdlIGxldCBpdCBvdmVycmlkZSBl
dmVuIGEgdXNlci1jaG9zZW4gZW5jb2RpbmcuCisgICAgQVNTRVJUKCFtX2NoZWNrZWRGb3JCT00p
OwogCi0gICAgaWYgKG1fc291cmNlID09IFVzZXJDaG9zZW5FbmNvZGluZykgewotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgYSBCT00gc2hvdWxkIG92ZXJyaWRlIGV2ZW4gYSB1c2VyLWNob3NlbiBl
bmNvZGluZy4KLSAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBzaXplX3QgbGVuZ3RoT2ZCT00gPSAwOwogCi0gICAgLy8gQ2hlY2sgaWYg
d2UgaGF2ZSBlbm91Z2ggZGF0YS4KICAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gbV9idWZmZXIu
c2l6ZSgpOwotICAgIGlmIChidWZmZXJMZW5ndGggKyBsZW4gPCA0KQotICAgICAgICByZXR1cm47
CiAKLSAgICBtX2NoZWNrZWRGb3JCT00gPSB0cnVlOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgZmly
c3QgZm91ciBieXRlcy4KLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc29tZSBvZiBieXRl
cyBhcmUgYWxyZWFkeSBpbiB0aGUgYnVmZmVyLgotICAgIC8vIFRoZSBsYXN0IGJ5dGUgaXMgYWx3
YXlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGluIHRoZSBidWZmZXIuCi0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogdWRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihk
YXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyIGMxID0gYnVmZmVyTGVuZ3RoID49IDEgPyBtX2J1ZmZl
clswXSA6ICp1ZGF0YSsrOwotICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBidWZmZXJMZW5ndGggPj0g
MiA/IG1fYnVmZmVyWzFdIDogKnVkYXRhKys7Ci0gICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZmZl
ckxlbmd0aCA+PSAzID8gbV9idWZmZXJbMl0gOiAqdWRhdGErKzsKLSAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoIDwgNCk7Ci0gICAgdW5zaWduZWQgY2hhciBjNCA9ICp1ZGF0YTsKKyAgICBzaXplX3Qg
YnVmMUxlbiA9IGJ1ZmZlckxlbmd0aDsKKyAgICBzaXplX3QgYnVmMkxlbiA9IGxlbjsKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBidWYxID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4obV9idWZmZXIuZGF0YSgpKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYy
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgdW5z
aWduZWQgY2hhciBjMSA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4g
PyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMiA9IGJ1ZjFM
ZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisr
KSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVm
MSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQg
Y2hhciBjNCA9IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CiAKICAgICAvLyBD
aGVjayBmb3IgdGhlIEJPTS4KICAgICBpZiAoYzEgPT0gMHhGRiAmJiBjMiA9PSAweEZFKSB7Ci0g
ICAgICAgIGlmIChjMyAhPTAgfHwgYzQgIT0gMCkKKyAgICAgICAgaWYgKGMzICE9IDAgfHwgYzQg
IT0gMCkgewogICAgICAgICAgICAgc2V0RW5jb2RpbmcoVVRGMTZMaXR0bGVFbmRpYW5FbmNvZGlu
ZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgICAgIGVsc2UgCisgICAgICAgICAgICBs
ZW5ndGhPZkJPTSA9IDI7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkxpdHRsZUVuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoYzEgPT0gMHhFRiAmJiBjMiA9PSAweEJCICYmIGMzID09IDB4QkYp
CisgICAgICAgICAgICBsZW5ndGhPZkJPTSA9IDQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KGMxID09IDB4RUYgJiYgYzIgPT0gMHhCQiAmJiBjMyA9PSAweEJGKSB7CiAgICAgICAgIHNldEVu
Y29kaW5nKFVURjhFbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0gICAgZWxzZSBp
ZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKQorICAgICAgICBsZW5ndGhPZkJPTSA9IDM7Cisg
ICAgfSBlbHNlIGlmIChjMSA9PSAweEZFICYmIGMyID09IDB4RkYpIHsKICAgICAgICAgc2V0RW5j
b2RpbmcoVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0g
ICAgZWxzZSBpZiAoYzEgPT0gMCAmJiBjMiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhG
RikKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSAyOworICAgIH0gZWxzZSBpZiAoYzEgPT0gMCAmJiBj
MiA9PSAwICYmIGMzID09IDB4RkUgJiYgYzQgPT0gMHhGRikgewogICAgICAgICBzZXRFbmNvZGlu
ZyhVVEYzMkJpZ0VuZGlhbkVuY29kaW5nKCksIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAg
ICAgbGVuZ3RoT2ZCT00gPSA0OworICAgIH0KKworICAgIGlmIChsZW5ndGhPZkJPTSB8fCBidWZm
ZXJMZW5ndGggKyBsZW4gPj0gNCkKKyAgICAgICAgbV9jaGVja2VkRm9yQk9NID0gdHJ1ZTsKKwor
ICAgIHJldHVybiBsZW5ndGhPZkJPTTsKIH0KIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
aGVja0ZvckNTU0NoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92
ZWREYXRhVG9CdWZmZXIpCkBAIC03NTUsOCArNzYwLDkgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZXRlY3RKYXBhbmVzZQogCiBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiB7CisgICAgc2l6ZV90IGxlbmd0aE9mQk9N
ID0gMDsKICAgICBpZiAoIW1fY2hlY2tlZEZvckJPTSkKLSAgICAgICAgY2hlY2tGb3JCT00oZGF0
YSwgbGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW4pOwog
CiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNlOwogCkBAIC03NzMsMTAgKzc3OSwx
MyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgaWYgKG1f
c291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRF
bmNvZGluZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5l
c2VFbmNvZGluZyhkYXRhLCBsZW4pOwogCi0gICAgQVNTRVJUKGVuY29kaW5nKCkuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQobV9lbmNvZGluZy5pc1ZhbGlkKCkpOworCisgICAgaWYgKCFtX2NvZGVj
KQorICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFzZSgp
KTsKIAogICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2RlY29k
ZXIuZGVjb2RlKGRhdGEsIGxlbiwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vy
cm9yKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhICsgbGVuZ3RoT2ZCT00s
IGxlbiAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3RXJy
b3IpOwogCiAgICAgaWYgKCFtb3ZlZERhdGFUb0J1ZmZlcikgewogICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKQEAgLTc4NCwxNiArNzkzLDIwIEBAIFN0cmluZyBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbik7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9
IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIGZhbHNl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgU3RyaW5nIHJlc3VsdCA9
IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCkgKyBsZW5ndGhPZkJPTSwgbV9idWZmZXIu
c2l6ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdF
cnJvcik7CiAgICAgbV9idWZmZXIuY2xlYXIoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBT
dHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogewotICAgIFN0cmluZyByZXN1bHQg
PSBtX2RlY29kZXIuZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB0cnVl
LCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdFcnJvcik7CisgICAgaWYgKCFtX2NvZGVjKQor
ICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFzZSgpKTsK
KworICAgIFN0cmluZyByZXN1bHQgPSBtX2NvZGVjLT5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBt
X2J1ZmZlci5zaXplKCksIHRydWUsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vycm9yKTsK
ICAgICBtX2J1ZmZlci5jbGVhcigpOwotICAgIG1fZGVjb2Rlci5yZXNldChtX2RlY29kZXIuZW5j
b2RpbmcoKSk7CisgICAgbV9jb2RlYy5jbGVhcigpOworICAgIG1fY2hlY2tlZEZvckJPTSA9IGZh
bHNlOyAvLyBTa2lwIEJPTSBhZ2FpbiB3aGVuIHJlLWRlY29kaW5nLgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHJldmlzaW9u
IDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZuZGVmIFRleHRSZXNvdXJjZURlY29kZXJfaAog
I2RlZmluZSBUZXh0UmVzb3VyY2VEZWNvZGVyX2gKIAotI2luY2x1ZGUgIlRleHREZWNvZGVyLmgi
CisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgflRleHRSZXNvdXJjZURlY29kZXIoKTsKIAogICAg
IHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgVGV4dEVuY29kaW5nJiwgRW5jb2RpbmdTb3VyY2UpOwot
ICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlY29k
ZXIuZW5jb2RpbmcoKTsgfQorICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFN0cmluZyBmbHVzaCgpOwpAQCAtNTYsMTcgKzU2
LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyk7CiAK
LSAgICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQ
bGFpblRleHQgaXMgZXF1aXZhbGVudCB0byBkaXJlY3RseSB1c2luZyBUZXh0RGVjb2Rlci4KKyAg
ICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQbGFp
blRleHQgb25seSBjaGVja3MgZm9yIEJPTS4KICAgICBzdGF0aWMgQ29udGVudFR5cGUgZGV0ZXJt
aW5lQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgc3RhdGljIGNvbnN0
IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKENvbnRlbnRUeXBlLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGRlZmF1bHRFbmNvZGluZyk7CiAKLSAgICB2b2lkIGNoZWNrRm9yQk9NKGNvbnN0IGNo
YXIqLCBzaXplX3QpOworICAgIHNpemVfdCBjaGVja0ZvckJPTShjb25zdCBjaGFyKiwgc2l6ZV90
KTsKICAgICBib29sIGNoZWNrRm9yQ1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29s
JiBtb3ZlZERhdGFUb0J1ZmZlcik7CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0
IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVj
dEphcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciosIHNpemVfdCk7CiAKICAgICBDb250ZW50VHlw
ZSBtX2NvbnRlbnRUeXBlOwotICAgIFRleHREZWNvZGVyIG1fZGVjb2RlcjsKKyAgICBUZXh0RW5j
b2RpbmcgbV9lbmNvZGluZzsKKyAgICBPd25QdHI8VGV4dENvZGVjPiBtX2NvZGVjOwogICAgIEVu
Y29kaW5nU291cmNlIG1fc291cmNlOwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBi
b29sIG1fY2hlY2tlZEZvckJPTTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlm
ZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5p
ZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvTWFuaWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ1LDkgKzQ1LDEyIEBAIGJvb2wgcGFyc2VNYW5pZmVz
dChjb25zdCBLVVJMJiBtYW5pZmVzdFUKICAgICBBU1NFUlQobWFuaWZlc3QuZmFsbGJhY2tVUkxz
LmlzRW1wdHkoKSk7CiAgICAgCiAgICAgTW9kZSBtb2RlID0gRXhwbGljaXQ7Ci0gICAgU3RyaW5n
IHMgPSBVVEY4RW5jb2RpbmcoKS5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKworICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KCJ0ZXh0L2NhY2hlLW1hbmlmZXN0IiwgIlVURi04Iik7CisgICAgU3RyaW5nIHMgPSBkZWNvZGVy
LT5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKyAgICBzICs9IGRlY29kZXItPmZsdXNoKCk7CiAgICAg
Ci0gICAgLy8gTG9vayBmb3IgdGhlIG1hZ2ljIHNpZ25hdHVyZTogIl5ceEZFRkY/Q0FDSEUgTUFO
SUZFU1RbIFx0XT8iICh0aGUgQk9NIGlzIHJlbW92ZWQgYnkgZGVjb2RlKCkpLgorICAgIC8vIExv
b2sgZm9yIHRoZSBtYWdpYyBzaWduYXR1cmU6ICJeXHhGRUZGP0NBQ0hFIE1BTklGRVNUWyBcdF0/
IiAodGhlIEJPTSBpcyByZW1vdmVkIGJ5IFRleHRSZXNvdXJjZURlY29kZXIpLgogICAgIC8vIEV4
YW1wbGU6ICJDQUNIRSBNQU5JRkVTVCAjY29tbWVudCIgaXMgYSB2YWxpZCBzaWduYXR1cmUuCiAg
ICAgLy8gRXhhbXBsZTogIkNBQ0hFIE1BTklGRVNUO1YyIiBpcyBub3QuCiAgICAgaWYgKCFzLnN0
YXJ0c1dpdGgoIkNBQ0hFIE1BTklGRVNUIikpCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA0MTM1MSkKKysr
IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDcgKzQ3MSw5IEBA
IGNvbnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb24KICAgICBpZiAoIWRhdGEp
CiAgICAgICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0OwogCi0gICAgbV91c2VyU3R5bGVTaGVl
dCA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiKS0+ZGVjb2RlKGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
ZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiKTsKKyAgICBt
X3VzZXJTdHlsZVNoZWV0ID0gZGVjb2Rlci0+ZGVjb2RlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6
ZSgpKTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0ICs9IGRlY29kZXItPmZsdXNoKCk7CiAKICAgICBy
ZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRE
ZWNvZGVyLmNwcAkocmV2aXNpb24gNDEzNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dERlY29k
ZXIuaCIKLQotI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCi0KLS8vIEZJWE1FOiBX
b3VsZCBiZSBuaWNlIHRvIGFsc28gaGFuZGxlIEJPTSBmb3IgVVRGLTcgYW5kIFVURi0zMi4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXh0RGVjb2Rlcjo6VGV4dERlY29kZXIoY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKLSAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCi0gICAgLCBt
X2NoZWNrZWRGb3JCT00oZmFsc2UpCi0gICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKLXsKLX0K
LQotdm9pZCBUZXh0RGVjb2Rlcjo6cmVzZXQoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
LXsKLSAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7Ci0gICAgbV9jb2RlYy5jbGVhcigpOwotICAg
IG1fY2hlY2tlZEZvckJPTSA9IGZhbHNlOwotICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7Ci19
Ci0KLVN0cmluZyBUZXh0RGVjb2Rlcjo6Y2hlY2tGb3JCT00oY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
Ci17Ci0gICAgQVNTRVJUKCFtX2NoZWNrZWRGb3JCT00pOwotCi0gICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHdlIGZvdW5kIGEgQk9NLgotICAgIHNpemVfdCBudW1CdWZmZXJlZEJ5dGVzID0gbV9udW1C
dWZmZXJlZEJ5dGVzOwotICAgIHNpemVfdCBidWYxTGVuID0gbnVtQnVmZmVyZWRCeXRlczsKLSAg
ICBzaXplX3QgYnVmMkxlbiA9IGxlbmd0aDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYx
ID0gbV9idWZmZXJlZEJ5dGVzOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZjIgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKLSAgICB1bnNpZ25lZCBj
aGFyIGMxID0gYnVmMUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1
ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1bnNpZ25lZCBjaGFyIGMyID0gYnVmMUxlbiA/ICgt
LWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsK
LSAgICB1bnNpZ25lZCBjaGFyIGMzID0gYnVmMUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDog
YnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1bnNpZ25lZCBjaGFyIGM0
ID0gYnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLQotICAgIGNvbnN0IFRleHRF
bmNvZGluZyogZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9ICZtX2VuY29kaW5nOwotICAgIGJvb2wg
Zm91bmRCT00gPSB0cnVlOwotICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7Ci0gICAgaWYgKGMx
ID09IDB4RkYgJiYgYzIgPT0gMHhGRSkgewotICAgICAgICBpZiAoYzMgIT0gMCB8fCBjNCAhPSAw
KSAgewotICAgICAgICAgICAgZW5jb2RpbmdDb25zaWRlcmluZ0JPTSA9ICZVVEYxNkxpdHRsZUVu
ZGlhbkVuY29kaW5nKCk7Ci0gICAgICAgICAgICBsZW5ndGhPZkJPTSA9IDI7Ci0gICAgICAgIH0g
ZWxzZSBpZiAobnVtQnVmZmVyZWRCeXRlcyArIGxlbmd0aCA+IHNpemVvZihtX2J1ZmZlcmVkQnl0
ZXMpKSB7Ci0gICAgICAgICAgICBlbmNvZGluZ0NvbnNpZGVyaW5nQk9NID0gJlVURjMyTGl0dGxl
RW5kaWFuRW5jb2RpbmcoKTsKLSAgICAgICAgICAgIGxlbmd0aE9mQk9NID0gNDsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBmb3VuZEJPTSA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoYzEg
PT0gMHhFRiAmJiBjMiA9PSAweEJCICYmIGMzID09IDB4QkYpIHsKLSAgICAgICAgZW5jb2RpbmdD
b25zaWRlcmluZ0JPTSA9ICZVVEY4RW5jb2RpbmcoKTsKLSAgICAgICAgbGVuZ3RoT2ZCT00gPSAz
OwotICAgIH0gZWxzZSBpZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKSB7Ci0gICAgICAgIGVu
Y29kaW5nQ29uc2lkZXJpbmdCT00gPSAmVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpOwotICAgICAg
ICBsZW5ndGhPZkJPTSA9IDI7Ci0gICAgfSBlbHNlIGlmIChjMSA9PSAwICYmIGMyID09IDAgJiYg
YzMgPT0gMHhGRSAmJiBjNCA9PSAweEZGKSB7Ci0gICAgICAgIGVuY29kaW5nQ29uc2lkZXJpbmdC
T00gPSAmVVRGMzJCaWdFbmRpYW5FbmNvZGluZygpOwotICAgICAgICBsZW5ndGhPZkJPTSA9IDQ7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGZvdW5kQk9NID0gZmFsc2U7Ci0KLSAgICBpZiAoIWZvdW5k
Qk9NICYmIG51bUJ1ZmZlcmVkQnl0ZXMgKyBsZW5ndGggPD0gc2l6ZW9mKG1fYnVmZmVyZWRCeXRl
cykgJiYgIWZsdXNoKSB7Ci0gICAgICAgIC8vIENvbnRpbnVlIHRvIGxvb2sgZm9yIHRoZSBCT00u
Ci0gICAgICAgIG1lbWNweSgmbV9idWZmZXJlZEJ5dGVzW251bUJ1ZmZlcmVkQnl0ZXNdLCBkYXRh
LCBsZW5ndGgpOwotICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgKz0gbGVuZ3RoOwotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgLy8gRG9uZSBjaGVja2luZyBmb3IgQk9NLgotICAg
IG1fY29kZWMuc2V0KG5ld1RleHRDb2RlYygqZW5jb2RpbmdDb25zaWRlcmluZ0JPTSkucmVsZWFz
ZSgpKTsKLSAgICBpZiAoIW1fY29kZWMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBt
X2NoZWNrZWRGb3JCT00gPSB0cnVlOwotCi0gICAgLy8gU2tpcCB0aGUgQk9NLgotICAgIGlmIChm
b3VuZEJPTSkgewotICAgICAgICBBU1NFUlQobnVtQnVmZmVyZWRCeXRlcyA8IGxlbmd0aE9mQk9N
KTsKLSAgICAgICAgc2l6ZV90IG51bVVuYnVmZmVyZWRCT01CeXRlcyA9IGxlbmd0aE9mQk9NIC0g
bnVtQnVmZmVyZWRCeXRlczsKLSAgICAgICAgQVNTRVJUKG51bVVuYnVmZmVyZWRCT01CeXRlcyA8
PSBsZW5ndGgpOwotCi0gICAgICAgIGRhdGEgKz0gbnVtVW5idWZmZXJlZEJPTUJ5dGVzOwotICAg
ICAgICBsZW5ndGggLT0gbnVtVW5idWZmZXJlZEJPTUJ5dGVzOwotICAgICAgICBudW1CdWZmZXJl
ZEJ5dGVzID0gMDsKLSAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKLSAgICB9Ci0KLSAg
ICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyZWQgYnl0ZXMgdG8gZGVh
bCB3aXRoLgotICAgIGlmIChudW1CdWZmZXJlZEJ5dGVzKSB7Ci0gICAgICAgIGNoYXIgYnVmZmVy
ZWRCeXRlc1tzaXplb2YobV9idWZmZXJlZEJ5dGVzKV07Ci0gICAgICAgIG1lbWNweShidWZmZXJl
ZEJ5dGVzLCBtX2J1ZmZlcmVkQnl0ZXMsIG51bUJ1ZmZlcmVkQnl0ZXMpOwotICAgICAgICBtX251
bUJ1ZmZlcmVkQnl0ZXMgPSAwOwotCi0gICAgICAgIFN0cmluZyBidWZmZXJlZFJlc3VsdCA9IG1f
Y29kZWMtPmRlY29kZShidWZmZXJlZEJ5dGVzLCBudW1CdWZmZXJlZEJ5dGVzLCBmYWxzZSwgc3Rv
cE9uRXJyb3IsIHNhd0Vycm9yKTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yICYmIHNhd0Vycm9y
KQotICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkUmVzdWx0OwotICAgICAgICByZXR1cm4gYnVm
ZmVyZWRSZXN1bHQgKyBtX2NvZGVjLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCBmbHVzaCwgc3RvcE9u
RXJyb3IsIHNhd0Vycm9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRh
dGEsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oCShyZXZp
c2lvbiA0MTM1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgVGV4dERlY29kZXJfaAotI2RlZmluZSBUZXh0RGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgVGV4dENvZGVjOwotCi0gICAgY2xhc3MgVGV4dERlY29kZXIgewotICAg
IHB1YmxpYzoKLSAgICAgICAgVGV4dERlY29kZXIoY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAg
ICAgIHZvaWQgcmVzZXQoY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgICAgIGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9OwotCi0gICAg
ICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICghbV9jaGVja2VkRm9yQk9NKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGVj
a0ZvckJPTShkYXRhLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgsIGZsdXNoLCBzdG9w
T25FcnJvciwgc2F3RXJyb3IpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBT
dHJpbmcgY2hlY2tGb3JCT00oY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gs
IGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKLQotICAgICAgICBUZXh0RW5jb2Rp
bmcgbV9lbmNvZGluZzsKLSAgICAgICAgT3duUHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKLQotICAg
ICAgICBib29sIG1fY2hlY2tlZEZvckJPTTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBtX251bUJ1
ZmZlcmVkQnl0ZXM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzNdOwot
ICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHREZWNvZGVy
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiA0
MTM1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSAiVGV4
dERlY29kZXIuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2lmIFVTRShJ
Q1VfVU5JQ09ERSkKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CkBAIC03Myw3ICs3Miw3IEBA
IFN0cmluZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICBpZiAoIW1fbmFt
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIFRleHREZWNvZGVyKCp0
aGlzKS5kZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwor
ICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVl
LCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwogfQogCiBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5j
b2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhh
bmRsaW5nIGhhbmRsaW5nKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmgJKHJldmlzaW9uIDQxMzUxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0Q29kZWM7CiAgICAgY2xh
c3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gT25seSBUZXh0RW5jb2RpbmcgYW5kIFRleHREZWNv
ZGVyIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4KLSAgICAvLyAtIFVzZSBUZXh0
RGVjb2Rlcjo6ZGVjb2RlIHRvIGRlY29kZSwgc2luY2UgaXQgaGFuZGxlcyBCT01zLgotICAgIC8v
IC0gVXNlIFRleHRFbmNvZGluZzo6ZGVjb2RlIHRvIGRlY29kZSBpZiB5b3UgaGF2ZSBhbGwgdGhl
IGRhdGEgYXQgb25jZS4KLSAgICAvLyAgIEl0J3MgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyBUZXh0
RGVjb2Rlcjo6ZGVjb2RlIHNvIHdvcmtzIGp1c3QgYXMgd2VsbC4KLSAgICAvLyAtIFVzZSBUZXh0
RW5jb2Rpbmc6OmVuY29kZSB0byBlbmNvZGUsIHNpbmNlIGl0IHRha2VzIGNhcmUgb2Ygbm9ybWFs
aXphdGlvbi4KKyAgICAvLyBVc2UgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlIHRvIGRlY29k
ZSByZXNvdXJjZXMsIHNpbmNlIGl0IGhhbmRsZXMgQk9Ncy4KKyAgICAvLyBVc2UgVGV4dEVuY29k
aW5nOjplbmNvZGUgdG8gZW5jb2RlLCBzaW5jZSBpdCB0YWtlcyBjYXJlIG9mIG5vcm1hbGl6YXRp
b24uCiAgICAgc3RkOjphdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0
RW5jb2RpbmcmKTsKIAogICAgIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNob3VsZCB1c2UgdGhpcyBm
dW5jdGlvbiBkaXJlY3RseS4K
</data>
<flag name="review"
          id="13759"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>