<?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>65556</bug_id>
          
          <creation_ts>2011-08-02 11:57:52 -0700</creation_ts>
          <short_desc>JSC GC uses dummy cells to avoid having to remember which cells it has already destroyed</short_desc>
          <delta_ts>2011-08-02 14:22:56 -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>JavaScriptCore</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>445394</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 11:57:52 -0700</bug_when>
    <thetext>The JSC GC attempts to maintain the invariant that every cell within a marked block has a C++ object that inherits from JSCell, so that anytime a sweep is performed, destructors can be called on all free cells even if this was done already.  This requires infrastructure for &quot;dummy&quot; JSCells, with &quot;dummy&quot; structures, just to allow the garbage collector to get around having to do bookkeeping about which parts of memory have already been swept.  Dummy cells should be replaced with a collector-internal mechanism for tracking which memory has already been swept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445402</commentid>
    <comment_count>1</comment_count>
      <attachid>102674</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 12:04:46 -0700</bug_when>
    <thetext>Created attachment 102674
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445408</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 12:07:35 -0700</bug_when>
    <thetext>Attachment 102674 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/heap/MarkedBlock.cpp:217:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/heap/MarkedBlock.h:173:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445450</commentid>
    <comment_count>3</comment_count>
      <attachid>102685</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 12:52:18 -0700</bug_when>
    <thetext>Created attachment 102685
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445471</commentid>
    <comment_count>4</comment_count>
      <attachid>102685</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-02 13:06:52 -0700</bug_when>
    <thetext>Comment on attachment 102685
the patch

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

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:77
&gt;              FreeCell* next;
&gt; +            
&gt; +            void setNoObject()
&gt; +            {
&gt; +                *reinterpret_cast&lt;void**&gt;(this) = 0;
&gt; +            }

Why this cast void**?  FreeCell doesn&apos;t have a vtable pointer, you&apos;re simply assigning null to this-&gt;next?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445479</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 13:12:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 102685 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102685&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:77
&gt; &gt;              FreeCell* next;
&gt; &gt; +            
&gt; &gt; +            void setNoObject()
&gt; &gt; +            {
&gt; &gt; +                *reinterpret_cast&lt;void**&gt;(this) = 0;
&gt; &gt; +            }
&gt; 
&gt; Why this cast void**?  FreeCell doesn&apos;t have a vtable pointer, you&apos;re simply assigning null to this-&gt;next?

I did that to emphasize the fact that I&apos;m setting what-would-have-been-a-vtable to 0.  I suppose a comment would do the same job, so I&apos;ll post a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445485</commentid>
    <comment_count>6</comment_count>
      <attachid>102690</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 13:17:53 -0700</bug_when>
    <thetext>Created attachment 102690
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445530</commentid>
    <comment_count>7</comment_count>
      <attachid>102690</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 14:22:51 -0700</bug_when>
    <thetext>Comment on attachment 102690
the patch

Clearing flags on attachment: 102690

Committed r92233: &lt;http://trac.webkit.org/changeset/92233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445531</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 14:22:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102674</attachid>
            <date>2011-08-02 12:04:46 -0700</date>
            <delta_ts>2011-08-02 12:52:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nodummies_patch_1.diff</filename>
            <type>text/plain</type>
            <size>20288</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIyMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMDgtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0MgR0MgdXNlcyBkdW1teSBjZWxscyB0byBhdm9pZCBoYXZpbmcgdG8gcmVtZW1iZXIgd2hpY2gg
Y2VsbHMKKyAgICAgICAgaXQgaGFzIGFscmVhZHkgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnZXRzIHJpZCBvZiBk
dW1teSBjZWxscywgYW5kIGVuc3VyZXMgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkKKyAgICAgICAg
dG8gaW52b2tlIGEgZGVzdHJ1Y3RvciBvbiBjZWxscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHN3
ZXB0LiAgSW4KKyAgICAgICAgdGhlIGNvbW1vbiBjYXNlLCBhIGJsb2NrIGtub3dzIHRoYXQgZWl0
aGVyIGFsbCBvZiBpdHMgZnJlZSBjZWxscworICAgICAgICBzdGlsbCBuZWVkIHRvIGhhdmUgZGVz
dHJ1Y3RvcnMgY2FsbGVkLCBvciBub25lIG9mIHRoZW0gZG8sIHdoaWNoCisgICAgICAgIG1pbmlt
aXplcyB0aGUgYW1vdW50IG9mIGJyYW5jaGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBwZXIgY2Vs
bAorICAgICAgICB3aGVuIHBlcmZvcm1pbmcgYSBzd2VlcC4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiBTdW5TcGlkZXIgYW5kIFY4LiAgSXQgaXMgbWVh
bnQgYXMKKyAgICAgICAgYSBzdGVwcGluZyBzdG9uZSB0byBzaW1wbGlmeSB0aGUgaW1wbGVtZW50
YXRpb24gb2YgbW9yZQorICAgICAgICBzb3BoaXN0aWNhdGVkIHN3ZWVwaW5nIGFsZ29yaXRobXMu
CisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpDb3VudEZ1bmN0b3I6
OkNsZWFyTWFya3M6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aW5pdEZvckNlbGxTaXplKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OnNwZWNpYWxpemVkUmVzZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6cmVz
ZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
Ojpwcm9kdWNlRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGF6eVN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2Fub25pY2FsaXplQmxvY2spOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkZyZWVDZWxs
OjpzZXROb09iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzZXREZXN0cnVjdG9y
U3RhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVzdHJ1Y3RvclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om5vdGlmeU1heUhhdmVGcmVzaEZyZWVDZWxscyk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsOjpKU0NlbGwpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmNsZWFyQnVpbHRpblN0cnVjdHVy
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKwogMjAxMS0wOC0wMiAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBXVEZfVVNFX0FWRk9VTkRBVElPTiBmcm9tIEphdmFTY3JpcHRD
b3JlL3d0Zi9wbGF0Zm9ybS5oIHRvIFdlYkNvcmUvY29uZmlnLmgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc3Ry
dWN0IENsZWFyTWFya3MgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bgogaW5saW5lIHZvaWQgQ2xlYXJN
YXJrczo6b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spCiB7CiAgICAgYmxvY2stPmNsZWFy
TWFya3MoKTsKKyAgICBibG9jay0+bm90aWZ5TWF5SGF2ZUZyZXNoRnJlZUNlbGxzKCk7CiB9CiAK
IHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MjE2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMjkgKzU3LDg1IEBAIHZvaWQgTWFya2VkQmxvY2s6OmluaXRGb3JDZWxsU2l6ZShz
aXplX3QKIHsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkg
LyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNl
bGwgKyAxOworICAgIHNldERlc3RydWN0b3JTdGF0ZShTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2Jq
ZWN0cyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OnJlc2V0KCkKK3RlbXBsYXRlPE1hcmtlZEJs
b2NrOjpEZXN0cnVjdG9yU3RhdGUgc3BlY2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+Cit2b2lkIE1h
cmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwsIHZvaWQqIGpzRmluYWxPYmpl
Y3RWUHRyKQoreworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBGcmVlQ2Vs
bHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiB2cHRyID0gY2Vs
bC0+dnB0cigpOworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBBbGxGcmVl
Q2VsbHNIYXZlT2JqZWN0cyB8fCB2cHRyKSB7CisgICAgICAgIGlmICh2cHRyID09IGpzRmluYWxP
YmplY3RWUHRyKSB7CisgICAgICAgICAgICBKU0ZpbmFsT2JqZWN0KiBvYmplY3QgPSByZWludGVy
cHJldF9jYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKKyAgICAgICAgICAgIG9iamVjdC0+SlNG
aW5hbE9iamVjdDo6fkpTRmluYWxPYmplY3QoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjZWxsLT5+SlNDZWxsKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVz
dHJ1Y3RvclN0YXRlIHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgordm9pZCBNYXJrZWRCbG9j
azo6c3BlY2lhbGl6ZWRSZXNldCgpCiB7CisgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBt
X2hlYXAtPmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisKICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pLT5+SlNDZWxsKCk7
CisgICAgICAgIGNhbGxEZXN0cnVjdG9yPHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPihyZWlu
dGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKSwganNGaW5hbE9iamVjdFZQdHIpOwog
fQogCi12b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCit2b2lkIE1hcmtlZEJsb2NrOjpyZXNldCgp
CiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+
Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgY2FzZSBTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0czoKKyAgICAgICAgc3Bl
Y2lhbGl6ZWRSZXNldDxTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09
IEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgc3BlY2lhbGl6ZWRSZXNldDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQ
ZXJDZWxsKSB7Ci0gICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwordGVtcGxhdGU8TWFya2VkQmxvY2s6OkRlc3RydWN0b3JTdGF0ZSBzcGVjaWFsaXplZERl
c3RydWN0b3JTdGF0ZT4KK3ZvaWQgTWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXAoKQorewor
ICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVlQ2VsbHNEb250SGF2ZU9i
amVjdHMpIHsKKyAgICAgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsK
KyAgICAgICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CisgICAgICAgICAgICBjYWxsRGVzdHJ1Y3Rvcjxz
cGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZT4oY2VsbCwganNGaW5hbE9iamVjdFZQdHIpOworICAg
ICAgICAgICAgY2VsbC0+c2V0VlB0cigwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c2V0RGVzdHJ1Y3RvclN0YXRlKEZyZWVDZWxsc0RvbnRIYXZlT2JqZWN0cyk7CisgICAgfQorfQog
Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21z
KClbaV0pOwotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgICAgIG5ldyAoY2VsbCkgSlND
ZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwor
dm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQoreworICAgIEhFQVBfREVCVUdfQkxPQ0sodGhpcyk7
CisgICAgCisgICAgc3dpdGNoIChkZXN0cnVjdG9yU3RhdGUoKSkgeworICAgIGNhc2UgRnJlZUNl
bGxzRG9udEhhdmVPYmplY3RzOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzOgorICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzPigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoZGVzdHJ1Y3RvclN0YXRlKCkgPT0gQWxsRnJlZUNlbGxzSGF2ZU9iamVjdHMp
OworICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzPigpOwor
ICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLU1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2Vk
QmxvY2s6OmxhenlTd2VlcCgpCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclN0YXRl
IHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgorQUxXQVlTX0lOTElORSBNYXJrZWRCbG9jazo6
RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpwcm9kdWNlRnJlZUxpc3QoKQogewogICAgIC8vIFRoaXMg
cmV0dXJucyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRo
ZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUg
bWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC05MiwyNSArMTQ4LDQ5IEBAIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenkKICAgICBmb3IgKHNpemVfdCBpID0g
Zmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAg
ICAgaWYgKCFtX21hcmtzLnRlc3RBbmRTZXQoaSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pOwotICAgICAgICAgICAg
aWYgKGNlbGwtPnZwdHIoKSA9PSBqc0ZpbmFsT2JqZWN0VlB0cikgewotICAgICAgICAgICAgICAg
IEpTRmluYWxPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGaW5hbE9iamVjdCo+
KGNlbGwpOwotICAgICAgICAgICAgICAgIG9iamVjdC0+SlNGaW5hbE9iamVjdDo6fkpTRmluYWxP
YmplY3QoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNlbGwtPn5KU0Nl
bGwoKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVl
Q2VsbHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgICAgICAgICAgY2FsbERlc3RydWN0b3I8c3Bl
Y2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+KGNlbGwsIGpzRmluYWxPYmplY3RWUHRyKTsKICAgICAg
ICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihj
ZWxsKTsKICAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OwogICAgICAgICAgICAg
cmVzdWx0ID0gZnJlZUNlbGw7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBp
cyBzbmVha3k6IGlmIHdlJ3JlIHByb2R1Y2luZyBhIGZyZWUgbGlzdCB0aGVuIHdlIGludGVuZCB0
bworICAgIC8vIGZpbGwgdXAgdGhlIGZyZWUgY2VsbHMgaW4gdGhlIGJsb2NrIHdpdGggb2JqZWN0
cywgd2hpY2ggbWVhbnMgdGhhdAorICAgIC8vIGlmIHdlIGhhdmUgYSBuZXcgR0MgdGhlbiBhbGwg
b2YgdGhlIGZyZWUgc3R1ZmYgaW4gdGhpcyBibG9jayB3aWxsCisgICAgLy8gY29tcHJpc2Ugb2Jq
ZWN0cyByYXRoZXIgdGhhbiBlbXB0eSBjZWxscy4KKyAgICBzZXREZXN0cnVjdG9yU3RhdGUoQWxs
RnJlZUNlbGxzSGF2ZU9iamVjdHMpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorTWFya2Vk
QmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6bGF6eVN3ZWVwKCkKK3sKKyAgICAvLyBUaGlz
IHJldHVybnMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0
aGUgYmxvY2suCisgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2Rl
IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQorICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVl
IGxpc3QuCisgICAgCisgICAgSEVBUF9ERUJVR19CTE9DSyh0aGlzKTsKKyAgICAKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgICAgIHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8RnJlZUNlbGxzRG9udEhhdmVPYmpl
Y3RzPigpOworICAgIGNhc2UgU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM6CisgICAgICAg
IHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8U29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM+KCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09IEFsbEZy
ZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgcmV0dXJuIHByb2R1Y2VGcmVlTGlzdDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICB9Cit9CisKIE1hcmtlZEJsb2NrOjpGcmVlQ2Vs
bCogTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCgpCiB7CiAgICAgLy8gVGhp
cyByZXR1cm5zIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2gg
dGhlIGJsb2NrLAogICAgIC8vIGFzIGluIGxhenlTd2VlcCgpIGFib3ZlLgogICAgIAorICAgIEhF
QVBfREVCVUdfQkxPQ0sodGhpcyk7CisKICAgICBGcmVlQ2VsbCogcmVzdWx0ID0gMDsKICAgICBm
b3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1Bl
ckNlbGwpIHsKICAgICAgICAgbV9tYXJrcy5zZXQoaSk7CkBAIC0xMTgsMjggKzE5OCw0NiBAQCBN
YXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpibGVzCiAgICAgICAgIGZyZWVDZWxs
LT5uZXh0ID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSBmcmVlQ2VsbDsKICAgICB9CisgICAg
CisgICAgLy8gU2VlIHByb2R1Y2VGcmVlTGlzdCgpLiBJZiB3ZSdyZSBoZXJlIHRoZW4gd2UgaW50
ZW5kIHRvIGZpbGwgdGhlCisgICAgLy8gYmxvY2sgd2l0aCBvYmplY3RzLCBzbyBvbmNlIGEgR0Mg
aGFwcGVucywgYWxsIGZyZWUgY2VsbHMgd2lsbCBiZQorICAgIC8vIG9jY3VwaWVkIGJ5IG9iamVj
dHMuCisgICAgc2V0RGVzdHJ1Y3RvclN0YXRlKEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCgpCiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0g
bV9hdG9tc1BlckNlbGwpCi0gICAgICAgIG5ldyAoJmF0b21zKClbaV0pIEpTQ2VsbCgqbV9oZWFw
LT5nbG9iYWxEYXRhKCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBKU0NlbGw6OkNyZWF0
aW5nRWFybHlDZWxsKTsKKyAgICBIRUFQX0RFQlVHX0JMT0NLKHRoaXMpOworCisgICAgbV9tYXJr
cy5jbGVhckFsbCgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5k
QXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PEZy
ZWVDZWxsKj4oJmF0b21zKClbaV0pLT5zZXROb09iamVjdCgpOworICAgIH0KKyAgICAKKyAgICBz
ZXREZXN0cnVjdG9yU3RhdGUoRnJlZUNlbGxzRG9udEhhdmVPYmplY3RzKTsKIH0KIAogdm9pZCBN
YXJrZWRCbG9jazo6Y2Fub25pY2FsaXplQmxvY2soRnJlZUNlbGwqIGZpcnN0RnJlZUNlbGwpCiB7
Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+Z2xv
YmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBIRUFQX0RF
QlVHX0JMT0NLKHRoaXMpOworICAgIAorICAgIEFTU0VSVChkZXN0cnVjdG9yU3RhdGUoKSA9PSBB
bGxGcmVlQ2VsbHNIYXZlT2JqZWN0cyk7CiAgICAgCi0gICAgZm9yIChGcmVlQ2VsbCogY3VycmVu
dCA9IGZpcnN0RnJlZUNlbGw7IGN1cnJlbnQ7KSB7Ci0gICAgICAgIEZyZWVDZWxsKiBuZXh0ID0g
Y3VycmVudC0+bmV4dDsKLSAgICAgICAgc2l6ZV90IGkgPSBhdG9tTnVtYmVyKGN1cnJlbnQpOwor
ICAgIGlmIChmaXJzdEZyZWVDZWxsKSB7CisgICAgICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQg
PSBmaXJzdEZyZWVDZWxsOyBjdXJyZW50OykgeworICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQg
PSBjdXJyZW50LT5uZXh0OworICAgICAgICAgICAgc2l6ZV90IGkgPSBhdG9tTnVtYmVyKGN1cnJl
bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX21hcmtzLmNsZWFyKGkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBjdXJyZW50LT5zZXROb09iamVjdCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbV9tYXJrcy5jbGVhcihpKTsKLSAgICAgICAgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oY3Vy
cmVudCkpIEpTQ2VsbCgqbV9oZWFwLT5nbG9iYWxEYXRhKCksIGR1bW15TWFya2FibGVDZWxsU3Ry
dWN0dXJlLCBKU0NlbGw6OkNyZWF0aW5nRWFybHlDZWxsKTsKLQotICAgICAgICBjdXJyZW50ID0g
bmV4dDsKKyAgICAgICAgc2V0RGVzdHJ1Y3RvclN0YXRlKFNvbWVGcmVlQ2VsbHNTdGlsbEhhdmVP
YmplY3RzKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gOTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwyMCBAQAogI2luY2x1
ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKLW5hbWVzcGFjZSBKU0MgeworLy8gU2V0IHRvIGxvZyBzdGF0ZSB0cmFuc2l0aW9u
cyBvZiBibG9ja3MuCisjZGVmaW5lIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT05TIDAK
KworI2lmIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT05TCisjZGVmaW5lIEhFQVBfREVC
VUdfQkxPQ0soYmxvY2spIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHByaW50ZigiJXM6JWQgJXM6IGJsb2NrICVzID0gJXBcbiIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9f
RlVOQ1RJT05fXywgI2Jsb2NrLCAoYmxvY2spKTsgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2Up
CisjZWxzZQorI2RlZmluZSBIRUFQX0RFQlVHX0JMT0NLKGJsb2NrKSAoKHZvaWQpMCkKKyNlbmRp
ZgogCituYW1lc3BhY2UgSlNDIHsKKyAgICAKICAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNzIEpT
Q2VsbDsKIApAQCAtMzcsNyArNDksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IEtCID0gMTAyNDsKICAgICAKLSAgICB2b2lkIGRlc3RydWN0b3IoSlNDZWxs
Kik7IC8vIERlZmluZWQgaW4gSlNDZWxsLmguCisgICAgLy8gQSBtYXJrZWQgYmxvY2sgaXMgYSBw
YWdlLWFsaWduZWQgY29udGFpbmVyIGZvciBoZWFwLWFsbG9jYXRlZCBvYmplY3RzLgorICAgIC8v
IE9iamVjdHMgYXJlIGFsbG9jYXRlZCB3aXRoaW4gY2VsbHMgb2YgdGhlIG1hcmtlZCBibG9jay4g
Rm9yIGEgZ2l2ZW4KKyAgICAvLyBtYXJrZWQgYmxvY2ssIGFsbCBjZWxscyBoYXZlIHRoZSBzYW1l
IHNpemUuIE9iamVjdHMgc21hbGxlciB0aGFuIHRoZQorICAgIC8vIGNlbGwgc2l6ZSBtYXkgYmUg
YWxsb2NhdGVkIGluIHRoZSBtYXJrZWQgYmxvY2ssIGluIHdoaWNoIGNhc2UgdGhlCisgICAgLy8g
YWxsb2NhdGlvbiBzdWZmZXJzIGZyb20gaW50ZXJuYWwgZnJhZ21lbnRhdGlvbjogd2FzdGVkIHNw
YWNlIHdob3NlCisgICAgLy8gc2l6ZSBpcyBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSBjZWxsIHNpemUgYW5kIHRoZSBvYmplY3QKKyAgICAvLyBzaXplLgogCiAgICAgY2xhc3Mg
TWFya2VkQmxvY2sgOiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8TWFya2VkQmxvY2s+IHsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8TWFya2VkQmxv
Y2s+OwpAQCAtNTIsNiArNzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RydWN0
IEZyZWVDZWxsIHsKICAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0OworICAgICAgICAgICAgCisg
ICAgICAgICAgICB2b2lkIHNldE5vT2JqZWN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHRoaXMpID0gMDsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCBWb2lkRnVuY3RvciB7CkBAIC05
Niw2ICsxMTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gdGhlbSwgYW5kIHJldHVy
bnMgYSBsaW5rZWQgbGlzdCBvZiB0aG9zZSBjZWxscy4KICAgICAgICAgRnJlZUNlbGwqIGxhenlT
d2VlcCgpOwogICAgICAgICAKKyAgICAgICAgLy8gTm90aWZ5IHRoZSBibG9jayB0aGF0IGRlc3Ry
dWN0b3JzIG1heSBoYXZlIHRvIGJlIGNhbGxlZCBhZ2Fpbi4KKyAgICAgICAgdm9pZCBub3RpZnlN
YXlIYXZlRnJlc2hGcmVlQ2VsbHMoKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgaW5pdEZvckNl
bGxTaXplKHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBzaG91
bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgYmxvY2sgaXMgY3JlYXRlZC4KQEAgLTEz
Miw2ICsxNTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGJsb2NrTWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6
ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0
b21NYXNrID0gfihhdG9tU2l6ZSAtIDEpOyAvLyBhdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2Yg
dHdvLgorICAgICAgICAKKyAgICAgICAgZW51bSBEZXN0cnVjdG9yU3RhdGUgeyBGcmVlQ2VsbHNE
b250SGF2ZU9iamVjdHMsIFNvbWVGcmVlQ2VsbHNTdGlsbEhhdmVPYmplY3RzLCBBbGxGcmVlQ2Vs
bHNIYXZlT2JqZWN0cyB9OwogCiAgICAgICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsK
IApAQCAtMTQwLDExICsxNjgsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc2l6ZV90
IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICBzaXplX3Qgb3duZXJTZXROdW1iZXIo
Y29uc3QgSlNDZWxsKik7Ci0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0b3JT
dGF0ZSBkZXN0cnVjdG9yU3RhdGU+CisgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxEZXN0cnVjdG9y
KEpTQ2VsbCogY2VsbCwgdm9pZCoganNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICAKKyAgICAg
ICAgdGVtcGxhdGU8RGVzdHJ1Y3RvclN0YXRlIGRlc3RydWN0b3JTdGF0ZT4KKyAgICAgICAgdm9p
ZCBzcGVjaWFsaXplZFJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVj
dG9yU3RhdGUgZGVzdHJ1Y3RvclN0YXRlPgorICAgICAgICB2b2lkIHNwZWNpYWxpemVkU3dlZXAo
KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0b3JTdGF0ZSBkZXN0cnVjdG9y
U3RhdGU+CisgICAgICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogcHJvZHVjZUZyZWVMaXN0KCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIHNldERlc3RydWN0b3JTdGF0ZShEZXN0cnVjdG9yU3Rh
dGUgZGVzdHJ1Y3RvclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Rlc3RydWN0b3JT
dGF0ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oZGVzdHJ1Y3RvclN0YXRlKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgRGVzdHJ1Y3RvclN0YXRlIGRlc3RydWN0b3JTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0cnVjdG9yU3RhdGU+KG1f
ZGVzdHJ1Y3RvclN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc2l6ZV90IG1f
ZW5kQXRvbTsgLy8gVGhpcyBpcyBhIGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRB
dG9tLgogICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7CiAgICAgICAgIFdURjo6Qml0bWFw
PGJsb2NrU2l6ZSAvIGF0b21TaXplPiBtX21hcmtzOwogICAgICAgICBib29sIG1faW5OZXdTcGFj
ZTsKKyAgICAgICAgaW50OF90IG1fZGVzdHJ1Y3RvclN0YXRlOyAvLyB1c2UgZ2V0dGVycy9zZXR0
ZXJzIGZvciB0aGlzLCBwYXJ0aWN1bGFybHkgc2luY2Ugd2UgbWF5IHdhbnQgdG8gY29tcGFjdCB0
aGlzIChlZmZlY3RpdmVseSBsb2coMykvbG9nKDIpLWJpdCkgZmllbGQgaW50byBvdGhlciBmaWVs
ZHMKICAgICAgICAgT3duZXJTZXQgbV9vd25lclNldHNbb3duZXJTZXRzUGVyQmxvY2tdOwogICAg
ICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgbV9hbGxvY2F0aW9uOwogICAgICAgICBIZWFwKiBt
X2hlYXA7CkBAIC0xODYsNiArMjM3LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAg
ICAgbV9pbk5ld1NwYWNlID0gaW5OZXdTcGFjZTsKICAgICB9CisgICAgCisgICAgaW5saW5lIHZv
aWQgTWFya2VkQmxvY2s6Om5vdGlmeU1heUhhdmVGcmVzaEZyZWVDZWxscygpCisgICAgeworICAg
ICAgICBIRUFQX0RFQlVHX0JMT0NLKHRoaXMpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBp
cyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBHQy4gSWYgdGhpcyBibG9jayBpcworICAgICAg
ICAvLyBBbGxGcmVlQ2VsbHNIYXZlT2JqZWN0cywgdGhlbiBpdCBtZWFucyB0aGF0IHdlIGZpbGxl
ZCB1cAorICAgICAgICAvLyB0aGUgYmxvY2sgaW4gdGhpcyBjb2xsZWN0aW9uLiBJZiBpdCdzIGlu
IGFueSBvdGhlciBzdGF0ZSwKKyAgICAgICAgLy8gdGhlbiB0aGlzIGNvbGxlY3Rpb24gd2lsbCBw
b3RlbnRpYWxseSBwcm9kdWNlIG5ldyBmcmVlCisgICAgICAgIC8vIGNlbGxzOyBuZXcgZnJlZSBj
ZWxscyBhbHdheXMgaGF2ZSBvYmplY3RzLiBIZW5jZSBpZiB0aGUKKyAgICAgICAgLy8gc3RhdGUg
Y3VycmVudGx5IGNsYWltcyB0aGF0IHRoZXJlIGFyZSBubyBvYmplY3RzIGluIGZyZWUKKyAgICAg
ICAgLy8gY2VsbHMgdGhlbiB3ZSBuZWVkIHRvIGJ1bXAgaXQgb3Zlci4gT3RoZXJ3aXNlIGxlYXZl
IGl0IGJlLgorICAgICAgICAvLyBUaGlzIGFsbCBjcnVjaWFsbHkgcmVsaWVzIG9uIHRoZSBjb2xs
ZWN0b3IgY2Fub25pY2FsaXppbmcKKyAgICAgICAgLy8gYmxvY2tzIGJlZm9yZSBkb2luZyBhbnl0
aGluZyBlbHNlLCBhcyBjYW5vbmljYWxpemVCbG9ja3MKKyAgICAgICAgLy8gd2lsbCBjb3JyZWN0
bHkgc2V0IFNvbWVGcmVlQ2VsbHNTdGlsbEhhdmVPYmplY3RzIGZvcgorICAgICAgICAvLyBibG9j
a3MgdGhhdCB3ZXJlIG9ubHkgcGFydGlhbGx5IGZpbGxlZCBkdXJpbmcgdGhpcworICAgICAgICAv
LyBtdXRhdGlvbiBjeWNsZS4KKyAgICAgICAgCisgICAgICAgIGlmIChkZXN0cnVjdG9yU3RhdGUo
KSA9PSBGcmVlQ2VsbHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgICAgICBzZXREZXN0cnVjdG9y
U3RhdGUoU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHMpOworICAgIH0KIAogICAgIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc0VtcHR5KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDkyMTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCAr
MzAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEpTQ2VsbDo6c19k
dW1teUNlbGxJbmZvID0geyAiRHVtbXlDZWxsIiwgMCwgMCwgMCB9OwotCiBib29sIEpTQ2VsbDo6
Z2V0VUludDMyKHVpbnQzMl90JikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTIxNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVj
dHVyZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogICAgICAgICBmcmll
bmQgY2xhc3MgUmVnRXhwOwotICAgICAgICBmcmllbmQgdm9pZCBkZXN0cnVjdG9yKEpTQ2VsbCop
OwogCiAgICAgICAgIGVudW0gQ3JlYXRpbmdFYXJseUNlbGxUYWcgeyBDcmVhdGluZ0Vhcmx5Q2Vs
bCB9OwogCkBAIC04MywxMSArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxs
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpOwogICAgICAgICB2aXJ0dWFsIH5K
U0NlbGwoKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2R1bW15Q2VsbEluZm87
CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZUR1bW15U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgog
ICAgICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBj
b25zdDsKQEAgLTE4MCw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUuc2V0RWFybHlWYWx1ZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1
cmUpOwogICAgICAgICAvLyBWZXJ5IGZpcnN0IHNldCBvZiBhbGxvY2F0aW9ucyB3b24ndCBoYXZl
IGEgcmVhbCBzdHJ1Y3R1cmUuCi0gICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZSB8fCAhZ2xvYmFs
RGF0YS5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVj
dHVyZSB8fCAhZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIGlu
bGluZSBKU0NlbGw6On5KU0NlbGwoKQpAQCAtMzUwLDExICszNDYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvVGhpc09iamVjdChleGVj
KSA6IHRvVGhpc09iamVjdFNsb3dDYXNlKGV4ZWMpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lk
IGRlc3RydWN0b3IoSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgY2VsbC0+fkpTQ2VsbCgp
OwotICAgIH0KLQogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwo
SGVhcCYgaGVhcCkKICAgICB7CiAgICAgICAgIHJldHVybiBoZWFwLmFsbG9jYXRlKHNpemVvZihU
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHJldmlzaW9uIDkyMTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw2IEBAIEpTR2xv
YmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICBldmFsRXhlY3V0YWJsZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IGpzTnVsbCgpKSk7CiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQ
cm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBqc051bGwoKSkpOwogICAg
IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBqc051bGwoKSkpOwotICAgIGR1bW15TWFya2FibGVD
ZWxsU3RydWN0dXJlLnNldCgqdGhpcywgSlNDZWxsOjpjcmVhdGVEdW1teVN0cnVjdHVyZSgqdGhp
cykpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCBqc051bGwoKSkpOwogICAgIHN0cnVjdHVyZUNoYWluU3RydWN0dXJlLnNldCgq
dGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywganNOdWxsKCkpKTsK
IApAQCAtMjg2LDcgKzI4NSw2IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpjbGVhckJ1aWx0aW5TdHJ1
Y3R1cmUKICAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5jbGVhcigpOwogICAgIHByb2dyYW1F
eGVjdXRhYmxlU3RydWN0dXJlLmNsZWFyKCk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0
dXJlLmNsZWFyKCk7Ci0gICAgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuY2xlYXIoKTsKICAg
ICByZWdFeHBTdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5j
bGVhcigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgJKHJldmlzaW9uIDkyMTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1
Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1
cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJl
OwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gOTIxNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjg0LDExICsyODQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAotICAg
IGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6Y3JlYXRlRHVtbXlTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGpzTnVsbCgpLCBUeXBlSW5mbyhVbnNwZWNpZmllZFR5cGUpLCBBbm9ueW1v
dXNTbG90Q291bnQsICZzX2R1bW15Q2VsbEluZm8pOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKEpTQ2VsbCogY2VsbCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102685</attachid>
            <date>2011-08-02 12:52:18 -0700</date>
            <delta_ts>2011-08-02 13:17:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nodummies_patch_2.diff</filename>
            <type>text/plain</type>
            <size>20204</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIyMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMDgtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0MgR0MgdXNlcyBkdW1teSBjZWxscyB0byBhdm9pZCBoYXZpbmcgdG8gcmVtZW1iZXIgd2hpY2gg
Y2VsbHMKKyAgICAgICAgaXQgaGFzIGFscmVhZHkgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnZXRzIHJpZCBvZiBk
dW1teSBjZWxscywgYW5kIGVuc3VyZXMgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkKKyAgICAgICAg
dG8gaW52b2tlIGEgZGVzdHJ1Y3RvciBvbiBjZWxscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHN3
ZXB0LiAgSW4KKyAgICAgICAgdGhlIGNvbW1vbiBjYXNlLCBhIGJsb2NrIGtub3dzIHRoYXQgZWl0
aGVyIGFsbCBvZiBpdHMgZnJlZSBjZWxscworICAgICAgICBzdGlsbCBuZWVkIHRvIGhhdmUgZGVz
dHJ1Y3RvcnMgY2FsbGVkLCBvciBub25lIG9mIHRoZW0gZG8sIHdoaWNoCisgICAgICAgIG1pbmlt
aXplcyB0aGUgYW1vdW50IG9mIGJyYW5jaGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBwZXIgY2Vs
bAorICAgICAgICB3aGVuIHBlcmZvcm1pbmcgYSBzd2VlcC4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiBTdW5TcGlkZXIgYW5kIFY4LiAgSXQgaXMgbWVh
bnQgYXMKKyAgICAgICAgYSBzdGVwcGluZyBzdG9uZSB0byBzaW1wbGlmeSB0aGUgaW1wbGVtZW50
YXRpb24gb2YgbW9yZQorICAgICAgICBzb3BoaXN0aWNhdGVkIHN3ZWVwaW5nIGFsZ29yaXRobXMu
CisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpDb3VudEZ1bmN0b3I6
OkNsZWFyTWFya3M6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aW5pdEZvckNlbGxTaXplKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OnNwZWNpYWxpemVkUmVzZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6cmVz
ZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
Ojpwcm9kdWNlRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGF6eVN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2Fub25pY2FsaXplQmxvY2spOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkZyZWVDZWxs
OjpzZXROb09iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzZXREZXN0cnVjdG9y
U3RhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVzdHJ1Y3RvclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om5vdGlmeU1heUhhdmVGcmVzaEZyZWVDZWxscyk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsOjpKU0NlbGwpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmNsZWFyQnVpbHRpblN0cnVjdHVy
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKwogMjAxMS0wOC0wMiAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBXVEZfVVNFX0FWRk9VTkRBVElPTiBmcm9tIEphdmFTY3JpcHRD
b3JlL3d0Zi9wbGF0Zm9ybS5oIHRvIFdlYkNvcmUvY29uZmlnLmgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc3Ry
dWN0IENsZWFyTWFya3MgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bgogaW5saW5lIHZvaWQgQ2xlYXJN
YXJrczo6b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spCiB7CiAgICAgYmxvY2stPmNsZWFy
TWFya3MoKTsKKyAgICBibG9jay0+bm90aWZ5TWF5SGF2ZUZyZXNoRnJlZUNlbGxzKCk7CiB9CiAK
IHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MjE2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMjkgKzU3LDg1IEBAIHZvaWQgTWFya2VkQmxvY2s6OmluaXRGb3JDZWxsU2l6ZShz
aXplX3QKIHsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkg
LyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNl
bGwgKyAxOworICAgIHNldERlc3RydWN0b3JTdGF0ZShTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2Jq
ZWN0cyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OnJlc2V0KCkKK3RlbXBsYXRlPE1hcmtlZEJs
b2NrOjpEZXN0cnVjdG9yU3RhdGUgc3BlY2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+Cit2b2lkIE1h
cmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwsIHZvaWQqIGpzRmluYWxPYmpl
Y3RWUHRyKQoreworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBGcmVlQ2Vs
bHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiB2cHRyID0gY2Vs
bC0+dnB0cigpOworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBBbGxGcmVl
Q2VsbHNIYXZlT2JqZWN0cyB8fCB2cHRyKSB7CisgICAgICAgIGlmICh2cHRyID09IGpzRmluYWxP
YmplY3RWUHRyKSB7CisgICAgICAgICAgICBKU0ZpbmFsT2JqZWN0KiBvYmplY3QgPSByZWludGVy
cHJldF9jYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKKyAgICAgICAgICAgIG9iamVjdC0+SlNG
aW5hbE9iamVjdDo6fkpTRmluYWxPYmplY3QoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjZWxsLT5+SlNDZWxsKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVz
dHJ1Y3RvclN0YXRlIHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgordm9pZCBNYXJrZWRCbG9j
azo6c3BlY2lhbGl6ZWRSZXNldCgpCiB7CisgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBt
X2hlYXAtPmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisKICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pLT5+SlNDZWxsKCk7
CisgICAgICAgIGNhbGxEZXN0cnVjdG9yPHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPihyZWlu
dGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKSwganNGaW5hbE9iamVjdFZQdHIpOwog
fQogCi12b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCit2b2lkIE1hcmtlZEJsb2NrOjpyZXNldCgp
CiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+
Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgY2FzZSBTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0czoKKyAgICAgICAgc3Bl
Y2lhbGl6ZWRSZXNldDxTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09
IEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgc3BlY2lhbGl6ZWRSZXNldDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQ
ZXJDZWxsKSB7Ci0gICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwordGVtcGxhdGU8TWFya2VkQmxvY2s6OkRlc3RydWN0b3JTdGF0ZSBzcGVjaWFsaXplZERl
c3RydWN0b3JTdGF0ZT4KK3ZvaWQgTWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXAoKQorewor
ICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVlQ2VsbHNEb250SGF2ZU9i
amVjdHMpIHsKKyAgICAgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsK
KyAgICAgICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CisgICAgICAgICAgICBjYWxsRGVzdHJ1Y3Rvcjxz
cGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZT4oY2VsbCwganNGaW5hbE9iamVjdFZQdHIpOworICAg
ICAgICAgICAgY2VsbC0+c2V0VlB0cigwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c2V0RGVzdHJ1Y3RvclN0YXRlKEZyZWVDZWxsc0RvbnRIYXZlT2JqZWN0cyk7CisgICAgfQorfQog
Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21z
KClbaV0pOwotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgICAgIG5ldyAoY2VsbCkgSlND
ZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwor
dm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQoreworICAgIEhFQVBfREVCVUdfQkxPQ0sodGhpcyk7
CisgICAgCisgICAgc3dpdGNoIChkZXN0cnVjdG9yU3RhdGUoKSkgeworICAgIGNhc2UgRnJlZUNl
bGxzRG9udEhhdmVPYmplY3RzOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzOgorICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzPigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoZGVzdHJ1Y3RvclN0YXRlKCkgPT0gQWxsRnJlZUNlbGxzSGF2ZU9iamVjdHMp
OworICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzPigpOwor
ICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLU1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2Vk
QmxvY2s6OmxhenlTd2VlcCgpCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclN0YXRl
IHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgorQUxXQVlTX0lOTElORSBNYXJrZWRCbG9jazo6
RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpwcm9kdWNlRnJlZUxpc3QoKQogewogICAgIC8vIFRoaXMg
cmV0dXJucyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRo
ZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUg
bWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC05MiwyNSArMTQ4LDQ5IEBAIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenkKICAgICBmb3IgKHNpemVfdCBpID0g
Zmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAg
ICAgaWYgKCFtX21hcmtzLnRlc3RBbmRTZXQoaSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pOwotICAgICAgICAgICAg
aWYgKGNlbGwtPnZwdHIoKSA9PSBqc0ZpbmFsT2JqZWN0VlB0cikgewotICAgICAgICAgICAgICAg
IEpTRmluYWxPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGaW5hbE9iamVjdCo+
KGNlbGwpOwotICAgICAgICAgICAgICAgIG9iamVjdC0+SlNGaW5hbE9iamVjdDo6fkpTRmluYWxP
YmplY3QoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNlbGwtPn5KU0Nl
bGwoKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVl
Q2VsbHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgICAgICAgICAgY2FsbERlc3RydWN0b3I8c3Bl
Y2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+KGNlbGwsIGpzRmluYWxPYmplY3RWUHRyKTsKICAgICAg
ICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihj
ZWxsKTsKICAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OwogICAgICAgICAgICAg
cmVzdWx0ID0gZnJlZUNlbGw7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBp
cyBzbmVha3k6IGlmIHdlJ3JlIHByb2R1Y2luZyBhIGZyZWUgbGlzdCB0aGVuIHdlIGludGVuZCB0
bworICAgIC8vIGZpbGwgdXAgdGhlIGZyZWUgY2VsbHMgaW4gdGhlIGJsb2NrIHdpdGggb2JqZWN0
cywgd2hpY2ggbWVhbnMgdGhhdAorICAgIC8vIGlmIHdlIGhhdmUgYSBuZXcgR0MgdGhlbiBhbGwg
b2YgdGhlIGZyZWUgc3R1ZmYgaW4gdGhpcyBibG9jayB3aWxsCisgICAgLy8gY29tcHJpc2Ugb2Jq
ZWN0cyByYXRoZXIgdGhhbiBlbXB0eSBjZWxscy4KKyAgICBzZXREZXN0cnVjdG9yU3RhdGUoQWxs
RnJlZUNlbGxzSGF2ZU9iamVjdHMpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorTWFya2Vk
QmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6bGF6eVN3ZWVwKCkKK3sKKyAgICAvLyBUaGlz
IHJldHVybnMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0
aGUgYmxvY2suCisgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2Rl
IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQorICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVl
IGxpc3QuCisgICAgCisgICAgSEVBUF9ERUJVR19CTE9DSyh0aGlzKTsKKyAgICAKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgICAgIHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8RnJlZUNlbGxzRG9udEhhdmVPYmpl
Y3RzPigpOworICAgIGNhc2UgU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM6CisgICAgICAg
IHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8U29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM+KCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09IEFsbEZy
ZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgcmV0dXJuIHByb2R1Y2VGcmVlTGlzdDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICB9Cit9CisKIE1hcmtlZEJsb2NrOjpGcmVlQ2Vs
bCogTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCgpCiB7CiAgICAgLy8gVGhp
cyByZXR1cm5zIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2gg
dGhlIGJsb2NrLAogICAgIC8vIGFzIGluIGxhenlTd2VlcCgpIGFib3ZlLgogICAgIAorICAgIEhF
QVBfREVCVUdfQkxPQ0sodGhpcyk7CisKICAgICBGcmVlQ2VsbCogcmVzdWx0ID0gMDsKICAgICBm
b3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1Bl
ckNlbGwpIHsKICAgICAgICAgbV9tYXJrcy5zZXQoaSk7CkBAIC0xMTgsMjggKzE5OCw0NSBAQCBN
YXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpibGVzCiAgICAgICAgIGZyZWVDZWxs
LT5uZXh0ID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSBmcmVlQ2VsbDsKICAgICB9CisgICAg
CisgICAgLy8gU2VlIHByb2R1Y2VGcmVlTGlzdCgpLiBJZiB3ZSdyZSBoZXJlIHRoZW4gd2UgaW50
ZW5kIHRvIGZpbGwgdGhlCisgICAgLy8gYmxvY2sgd2l0aCBvYmplY3RzLCBzbyBvbmNlIGEgR0Mg
aGFwcGVucywgYWxsIGZyZWUgY2VsbHMgd2lsbCBiZQorICAgIC8vIG9jY3VwaWVkIGJ5IG9iamVj
dHMuCisgICAgc2V0RGVzdHJ1Y3RvclN0YXRlKEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCgpCiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQo
KTsKKyAgICBIRUFQX0RFQlVHX0JMT0NLKHRoaXMpOworCisgICAgbV9tYXJrcy5jbGVhckFsbCgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBt
X2F0b21zUGVyQ2VsbCkKLSAgICAgICAgbmV3ICgmYXRvbXMoKVtpXSkgSlNDZWxsKCptX2hlYXAt
Pmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRp
bmdFYXJseUNlbGwpOworICAgICAgICByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oJmF0b21z
KClbaV0pLT5zZXROb09iamVjdCgpOworICAgIAorICAgIHNldERlc3RydWN0b3JTdGF0ZShGcmVl
Q2VsbHNEb250SGF2ZU9iamVjdHMpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpjYW5vbmljYWxp
emVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKIHsKLSAgICBTdHJ1Y3R1cmUqIGR1bW15
TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1bW15TWFya2Fi
bGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIEhFQVBfREVCVUdfQkxPQ0sodGhpcyk7CisgICAg
CisgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09IEFsbEZyZWVDZWxsc0hhdmVPYmplY3Rz
KTsKICAgICAKLSAgICBmb3IgKEZyZWVDZWxsKiBjdXJyZW50ID0gZmlyc3RGcmVlQ2VsbDsgY3Vy
cmVudDspIHsKLSAgICAgICAgRnJlZUNlbGwqIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAg
ICBzaXplX3QgaSA9IGF0b21OdW1iZXIoY3VycmVudCk7CisgICAgaWYgKGZpcnN0RnJlZUNlbGwp
IHsKKyAgICAgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGZpcnN0RnJlZUNlbGw7IGN1cnJl
bnQ7KSB7CisgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7CisgICAg
ICAgICAgICBzaXplX3QgaSA9IGF0b21OdW1iZXIoY3VycmVudCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fbWFya3MuY2xlYXIoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1
cnJlbnQtPnNldE5vT2JqZWN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBuZXh0OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX21hcmtzLmNsZWFyKGkpOwot
ICAgICAgICBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihjdXJyZW50KSkgSlNDZWxsKCptX2hlYXAt
Pmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRp
bmdFYXJseUNlbGwpOwotCi0gICAgICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgICBzZXREZXN0
cnVjdG9yU3RhdGUoU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHMpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiA5
MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDIwIEBACiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9u
QWxpZ25lZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotbmFtZXNwYWNlIEpT
QyB7CisvLyBTZXQgdG8gbG9nIHN0YXRlIHRyYW5zaXRpb25zIG9mIGJsb2Nrcy4KKyNkZWZpbmUg
SEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTlMgMAorCisjaWYgSEVBUF9MT0dfQkxPQ0tf
U1RBVEVfVFJBTlNJVElPTlMKKyNkZWZpbmUgSEVBUF9ERUJVR19CTE9DSyhibG9jaykgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIlczol
ZCAlczogYmxvY2sgJXMgPSAlcFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAjYmxvY2ssIChi
bG9jaykpOyAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyNlbHNlCisjZGVmaW5lIEhFQVBf
REVCVUdfQkxPQ0soYmxvY2spICgodm9pZCkwKQorI2VuZGlmCiAKK25hbWVzcGFjZSBKU0Mgewor
ICAgIAogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xhc3MgSlNDZWxsOwogCkBAIC0zNyw3ICs0OSwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgS0IgPSAxMDI0
OwogICAgIAotICAgIHZvaWQgZGVzdHJ1Y3RvcihKU0NlbGwqKTsgLy8gRGVmaW5lZCBpbiBKU0Nl
bGwuaC4KKyAgICAvLyBBIG1hcmtlZCBibG9jayBpcyBhIHBhZ2UtYWxpZ25lZCBjb250YWluZXIg
Zm9yIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuCisgICAgLy8gT2JqZWN0cyBhcmUgYWxsb2NhdGVk
IHdpdGhpbiBjZWxscyBvZiB0aGUgbWFya2VkIGJsb2NrLiBGb3IgYSBnaXZlbgorICAgIC8vIG1h
cmtlZCBibG9jaywgYWxsIGNlbGxzIGhhdmUgdGhlIHNhbWUgc2l6ZS4gT2JqZWN0cyBzbWFsbGVy
IHRoYW4gdGhlCisgICAgLy8gY2VsbCBzaXplIG1heSBiZSBhbGxvY2F0ZWQgaW4gdGhlIG1hcmtl
ZCBibG9jaywgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAvLyBhbGxvY2F0aW9uIHN1ZmZlcnMgZnJv
bSBpbnRlcm5hbCBmcmFnbWVudGF0aW9uOiB3YXN0ZWQgc3BhY2Ugd2hvc2UKKyAgICAvLyBzaXpl
IGlzIGVxdWFsIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNlbGwgc2l6ZSBhbmQgdGhl
IG9iamVjdAorICAgIC8vIHNpemUuCiAKICAgICBjbGFzcyBNYXJrZWRCbG9jayA6IHB1YmxpYyBE
b3VibHlMaW5rZWRMaXN0Tm9kZTxNYXJrZWRCbG9jaz4gewogICAgICAgICBmcmllbmQgY2xhc3Mg
V1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxNYXJrZWRCbG9jaz47CkBAIC01Miw2ICs3MCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAgICAg
ICAgRnJlZUNlbGwqIG5leHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZvaWQgc2V0Tm9P
YmplY3QoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0
PHZvaWQqKj4odGhpcykgPSAwOworICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICAK
ICAgICAgICAgc3RydWN0IFZvaWRGdW5jdG9yIHsKQEAgLTk2LDYgKzExOSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyB0aGVtLCBhbmQgcmV0dXJucyBhIGxpbmtlZCBsaXN0IG9mIHRo
b3NlIGNlbGxzLgogICAgICAgICBGcmVlQ2VsbCogbGF6eVN3ZWVwKCk7CiAgICAgICAgIAorICAg
ICAgICAvLyBOb3RpZnkgdGhlIGJsb2NrIHRoYXQgZGVzdHJ1Y3RvcnMgbWF5IGhhdmUgdG8gYmUg
Y2FsbGVkIGFnYWluLgorICAgICAgICB2b2lkIG5vdGlmeU1heUhhdmVGcmVzaEZyZWVDZWxscygp
OworICAgICAgICAKICAgICAgICAgdm9pZCBpbml0Rm9yQ2VsbFNpemUoc2l6ZV90IGNlbGxTaXpl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRl
bHkgYWZ0ZXIgYSBibG9jayBpcyBjcmVhdGVkLgpAQCAtMTMyLDYgKzE1OCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tN
YXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbU1hc2sgPSB+KGF0b21TaXplIC0g
MSk7IC8vIGF0b21TaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisgICAgICAgIAorICAgICAg
ICBlbnVtIERlc3RydWN0b3JTdGF0ZSB7IEZyZWVDZWxsc0RvbnRIYXZlT2JqZWN0cywgU29tZUZy
ZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHMsIEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzIH07CiAKICAg
ICAgICAgdHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOwogCkBAIC0xNDAsMTEgKzE2OCwzNCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lk
Kik7CiAgICAgICAgIHNpemVfdCBvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqKTsKLQorICAg
ICAgICAKKyAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3RvclN0YXRlIGRlc3RydWN0b3JTdGF0ZT4K
KyAgICAgICAgc3RhdGljIHZvaWQgY2FsbERlc3RydWN0b3IoSlNDZWxsKiwgdm9pZCoganNGaW5h
bE9iamVjdFZQdHIpOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3RvclN0YXRl
IGRlc3RydWN0b3JTdGF0ZT4KKyAgICAgICAgdm9pZCBzcGVjaWFsaXplZFJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdG9yU3RhdGUgZGVzdHJ1Y3RvclN0YXRlPgor
ICAgICAgICB2b2lkIHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBs
YXRlPERlc3RydWN0b3JTdGF0ZSBkZXN0cnVjdG9yU3RhdGU+CisgICAgICAgIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogcHJvZHVjZUZyZWVMaXN0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHNl
dERlc3RydWN0b3JTdGF0ZShEZXN0cnVjdG9yU3RhdGUgZGVzdHJ1Y3RvclN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2Rlc3RydWN0b3JTdGF0ZSA9IHN0YXRpY19jYXN0PGludDhfdD4o
ZGVzdHJ1Y3RvclN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRGVzdHJ1Y3Rv
clN0YXRlIGRlc3RydWN0b3JTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxEZXN0cnVjdG9yU3RhdGU+KG1fZGVzdHJ1Y3RvclN0YXRlKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBhIGZ1enp5
IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAgICAgICBzaXplX3QgbV9hdG9t
c1BlckNlbGw7CiAgICAgICAgIFdURjo6Qml0bWFwPGJsb2NrU2l6ZSAvIGF0b21TaXplPiBtX21h
cmtzOwogICAgICAgICBib29sIG1faW5OZXdTcGFjZTsKKyAgICAgICAgaW50OF90IG1fZGVzdHJ1
Y3RvclN0YXRlOyAvLyB1c2UgZ2V0dGVycy9zZXR0ZXJzIGZvciB0aGlzLCBwYXJ0aWN1bGFybHkg
c2luY2Ugd2UgbWF5IHdhbnQgdG8gY29tcGFjdCB0aGlzIChlZmZlY3RpdmVseSBsb2coMykvbG9n
KDIpLWJpdCkgZmllbGQgaW50byBvdGhlciBmaWVsZHMKICAgICAgICAgT3duZXJTZXQgbV9vd25l
clNldHNbb3duZXJTZXRzUGVyQmxvY2tdOwogICAgICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQg
bV9hbGxvY2F0aW9uOwogICAgICAgICBIZWFwKiBtX2hlYXA7CkBAIC0xODYsNiArMjM3LDI3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgbV9pbk5ld1NwYWNlID0gaW5OZXdTcGFj
ZTsKICAgICB9CisgICAgCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Om5vdGlmeU1heUhh
dmVGcmVzaEZyZWVDZWxscygpCisgICAgeworICAgICAgICBIRUFQX0RFQlVHX0JMT0NLKHRoaXMp
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBv
ZiBHQy4gSWYgdGhpcyBibG9jayBpcworICAgICAgICAvLyBBbGxGcmVlQ2VsbHNIYXZlT2JqZWN0
cywgdGhlbiBpdCBtZWFucyB0aGF0IHdlIGZpbGxlZCB1cAorICAgICAgICAvLyB0aGUgYmxvY2sg
aW4gdGhpcyBjb2xsZWN0aW9uLiBJZiBpdCdzIGluIGFueSBvdGhlciBzdGF0ZSwKKyAgICAgICAg
Ly8gdGhlbiB0aGlzIGNvbGxlY3Rpb24gd2lsbCBwb3RlbnRpYWxseSBwcm9kdWNlIG5ldyBmcmVl
CisgICAgICAgIC8vIGNlbGxzOyBuZXcgZnJlZSBjZWxscyBhbHdheXMgaGF2ZSBvYmplY3RzLiBI
ZW5jZSBpZiB0aGUKKyAgICAgICAgLy8gc3RhdGUgY3VycmVudGx5IGNsYWltcyB0aGF0IHRoZXJl
IGFyZSBubyBvYmplY3RzIGluIGZyZWUKKyAgICAgICAgLy8gY2VsbHMgdGhlbiB3ZSBuZWVkIHRv
IGJ1bXAgaXQgb3Zlci4gT3RoZXJ3aXNlIGxlYXZlIGl0IGJlLgorICAgICAgICAvLyBUaGlzIGFs
bCBjcnVjaWFsbHkgcmVsaWVzIG9uIHRoZSBjb2xsZWN0b3IgY2Fub25pY2FsaXppbmcKKyAgICAg
ICAgLy8gYmxvY2tzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBhcyBjYW5vbmljYWxpemVC
bG9ja3MKKyAgICAgICAgLy8gd2lsbCBjb3JyZWN0bHkgc2V0IFNvbWVGcmVlQ2VsbHNTdGlsbEhh
dmVPYmplY3RzIGZvcgorICAgICAgICAvLyBibG9ja3MgdGhhdCB3ZXJlIG9ubHkgcGFydGlhbGx5
IGZpbGxlZCBkdXJpbmcgdGhpcworICAgICAgICAvLyBtdXRhdGlvbiBjeWNsZS4KKyAgICAgICAg
CisgICAgICAgIGlmIChkZXN0cnVjdG9yU3RhdGUoKSA9PSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHMpCisgICAgICAgICAgICBzZXREZXN0cnVjdG9yU3RhdGUoU29tZUZyZWVDZWxsc1N0aWxsSGF2
ZU9iamVjdHMpOworICAgIH0KIAogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0VtcHR5
KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHJldmlzaW9uIDkyMTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY29uc3QgQ2xhc3NJbmZvIEpTQ2VsbDo6c19kdW1teUNlbGxJbmZvID0geyAiRHVtbXlDZWxs
IiwgMCwgMCwgMCB9OwotCiBib29sIEpTQ2VsbDo6Z2V0VUludDMyKHVpbnQzMl90JikgY29uc3QK
IHsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gOTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAgICAgICAgZnJpZW5kIGNsYXNz
IFN0cnVjdHVyZUNoYWluOwogICAgICAgICBmcmllbmQgY2xhc3MgUmVnRXhwOwotICAgICAgICBm
cmllbmQgdm9pZCBkZXN0cnVjdG9yKEpTQ2VsbCopOwogCiAgICAgICAgIGVudW0gQ3JlYXRpbmdF
YXJseUNlbGxUYWcgeyBDcmVhdGluZ0Vhcmx5Q2VsbCB9OwogCkBAIC04MywxMSArODIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OwogICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQ3JlYXRpbmdFYXJs
eUNlbGxUYWcpOwogICAgICAgICB2aXJ0dWFsIH5KU0NlbGwoKTsKLSAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2R1bW15Q2VsbEluZm87CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZUR1bW15U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOwotCiAg
ICAgICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgogICAgICAgICBib29sIGlzU3RyaW5nKCkgY29u
c3Q7CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKQEAgLTE4MCw3ICsxNzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0RWFybHlW
YWx1ZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOwogICAgICAgICAvLyBWZXJ5IGZpcnN0
IHNldCBvZiBhbGxvY2F0aW9ucyB3b24ndCBoYXZlIGEgcmVhbCBzdHJ1Y3R1cmUuCi0gICAgICAg
IEFTU0VSVChtX3N0cnVjdHVyZSB8fCAhZ2xvYmFsRGF0YS5kdW1teU1hcmthYmxlQ2VsbFN0cnVj
dHVyZSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZSB8fCAhZ2xvYmFsRGF0YS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIGlubGluZSBKU0NlbGw6On5KU0NlbGwoKQpAQCAt
MzUwLDExICszNDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzQ2VsbCgp
ID8gYXNDZWxsKCktPnRvVGhpc09iamVjdChleGVjKSA6IHRvVGhpc09iamVjdFNsb3dDYXNlKGV4
ZWMpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGRlc3RydWN0b3IoSlNDZWxsKiBjZWxsKQot
ICAgIHsKLSAgICAgICAgY2VsbC0+fkpTQ2VsbCgpOwotICAgIH0KLQogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAgICB7CiAgICAgICAg
IHJldHVybiBoZWFwLmFsbG9jYXRlKHNpemVvZihUKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDkyMTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDcgKzIyNyw2IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXAKICAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIGpzTnVsbCgpKSk7CiAgICAgcHJvZ3JhbUV4
ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBq
c051bGwoKSkpOwotICAgIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLnNldCgqdGhpcywgSlND
ZWxsOjpjcmVhdGVEdW1teVN0cnVjdHVyZSgqdGhpcykpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBqc051bGwoKSkpOwogICAg
IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywganNOdWxsKCkpKTsKIApAQCAtMjg2LDcgKzI4NSw2IEBAIHZvaWQg
SlNHbG9iYWxEYXRhOjpjbGVhckJ1aWx0aW5TdHJ1Y3R1cmUKICAgICBldmFsRXhlY3V0YWJsZVN0
cnVjdHVyZS5jbGVhcigpOwogICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLmNsZWFyKCk7
CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgZHVtbXlNYXJr
YWJsZUNlbGxTdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICByZWdFeHBTdHJ1Y3R1cmUuY2xlYXIoKTsK
ICAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5jbGVhcigpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkyMTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNo
YWluU3RydWN0dXJlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gOTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDExICsyODQsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAotICAgIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6
Y3JlYXRlRHVtbXlTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGpzTnVsbCgpLCBUeXBl
SW5mbyhVbnNwZWNpZmllZFR5cGUpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2R1bW15Q2VsbElu
Zm8pOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmludGVybmFs
QXBwZW5kKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102690</attachid>
            <date>2011-08-02 13:17:53 -0700</date>
            <delta_ts>2011-08-02 14:22:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nodummies_patch_3.diff</filename>
            <type>text/plain</type>
            <size>20329</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIyMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMDgtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0MgR0MgdXNlcyBkdW1teSBjZWxscyB0byBhdm9pZCBoYXZpbmcgdG8gcmVtZW1iZXIgd2hpY2gg
Y2VsbHMKKyAgICAgICAgaXQgaGFzIGFscmVhZHkgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnZXRzIHJpZCBvZiBk
dW1teSBjZWxscywgYW5kIGVuc3VyZXMgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkKKyAgICAgICAg
dG8gaW52b2tlIGEgZGVzdHJ1Y3RvciBvbiBjZWxscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHN3
ZXB0LiAgSW4KKyAgICAgICAgdGhlIGNvbW1vbiBjYXNlLCBhIGJsb2NrIGtub3dzIHRoYXQgZWl0
aGVyIGFsbCBvZiBpdHMgZnJlZSBjZWxscworICAgICAgICBzdGlsbCBuZWVkIHRvIGhhdmUgZGVz
dHJ1Y3RvcnMgY2FsbGVkLCBvciBub25lIG9mIHRoZW0gZG8sIHdoaWNoCisgICAgICAgIG1pbmlt
aXplcyB0aGUgYW1vdW50IG9mIGJyYW5jaGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBwZXIgY2Vs
bAorICAgICAgICB3aGVuIHBlcmZvcm1pbmcgYSBzd2VlcC4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiBTdW5TcGlkZXIgYW5kIFY4LiAgSXQgaXMgbWVh
bnQgYXMKKyAgICAgICAgYSBzdGVwcGluZyBzdG9uZSB0byBzaW1wbGlmeSB0aGUgaW1wbGVtZW50
YXRpb24gb2YgbW9yZQorICAgICAgICBzb3BoaXN0aWNhdGVkIHN3ZWVwaW5nIGFsZ29yaXRobXMu
CisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpDb3VudEZ1bmN0b3I6
OkNsZWFyTWFya3M6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aW5pdEZvckNlbGxTaXplKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OnNwZWNpYWxpemVkUmVzZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6cmVz
ZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
Ojpwcm9kdWNlRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGF6eVN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2Fub25pY2FsaXplQmxvY2spOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkZyZWVDZWxs
OjpzZXROb09iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzZXREZXN0cnVjdG9y
U3RhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVzdHJ1Y3RvclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om5vdGlmeU1heUhhdmVGcmVzaEZyZWVDZWxscyk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsOjpKU0NlbGwpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmNsZWFyQnVpbHRpblN0cnVjdHVy
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKwogMjAxMS0wOC0wMiAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBXVEZfVVNFX0FWRk9VTkRBVElPTiBmcm9tIEphdmFTY3JpcHRD
b3JlL3d0Zi9wbGF0Zm9ybS5oIHRvIFdlYkNvcmUvY29uZmlnLmgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc3Ry
dWN0IENsZWFyTWFya3MgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bgogaW5saW5lIHZvaWQgQ2xlYXJN
YXJrczo6b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spCiB7CiAgICAgYmxvY2stPmNsZWFy
TWFya3MoKTsKKyAgICBibG9jay0+bm90aWZ5TWF5SGF2ZUZyZXNoRnJlZUNlbGxzKCk7CiB9CiAK
IHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MjE2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMjkgKzU3LDg1IEBAIHZvaWQgTWFya2VkQmxvY2s6OmluaXRGb3JDZWxsU2l6ZShz
aXplX3QKIHsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkg
LyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNl
bGwgKyAxOworICAgIHNldERlc3RydWN0b3JTdGF0ZShTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2Jq
ZWN0cyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OnJlc2V0KCkKK3RlbXBsYXRlPE1hcmtlZEJs
b2NrOjpEZXN0cnVjdG9yU3RhdGUgc3BlY2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+Cit2b2lkIE1h
cmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwsIHZvaWQqIGpzRmluYWxPYmpl
Y3RWUHRyKQoreworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBGcmVlQ2Vs
bHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiB2cHRyID0gY2Vs
bC0+dnB0cigpOworICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSA9PSBBbGxGcmVl
Q2VsbHNIYXZlT2JqZWN0cyB8fCB2cHRyKSB7CisgICAgICAgIGlmICh2cHRyID09IGpzRmluYWxP
YmplY3RWUHRyKSB7CisgICAgICAgICAgICBKU0ZpbmFsT2JqZWN0KiBvYmplY3QgPSByZWludGVy
cHJldF9jYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKKyAgICAgICAgICAgIG9iamVjdC0+SlNG
aW5hbE9iamVjdDo6fkpTRmluYWxPYmplY3QoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjZWxsLT5+SlNDZWxsKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVz
dHJ1Y3RvclN0YXRlIHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgordm9pZCBNYXJrZWRCbG9j
azo6c3BlY2lhbGl6ZWRSZXNldCgpCiB7CisgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBt
X2hlYXAtPmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisKICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pLT5+SlNDZWxsKCk7
CisgICAgICAgIGNhbGxEZXN0cnVjdG9yPHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPihyZWlu
dGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKSwganNGaW5hbE9iamVjdFZQdHIpOwog
fQogCi12b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCit2b2lkIE1hcmtlZEJsb2NrOjpyZXNldCgp
CiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+
Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgY2FzZSBTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0czoKKyAgICAgICAgc3Bl
Y2lhbGl6ZWRSZXNldDxTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09
IEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgc3BlY2lhbGl6ZWRSZXNldDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQ
ZXJDZWxsKSB7Ci0gICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwordGVtcGxhdGU8TWFya2VkQmxvY2s6OkRlc3RydWN0b3JTdGF0ZSBzcGVjaWFsaXplZERl
c3RydWN0b3JTdGF0ZT4KK3ZvaWQgTWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXAoKQorewor
ICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVlQ2VsbHNEb250SGF2ZU9i
amVjdHMpIHsKKyAgICAgICAgdm9pZCoganNGaW5hbE9iamVjdFZQdHIgPSBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHI7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsK
KyAgICAgICAgICAgIGlmIChtX21hcmtzLmdldChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CisgICAgICAgICAgICBjYWxsRGVzdHJ1Y3Rvcjxz
cGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZT4oY2VsbCwganNGaW5hbE9iamVjdFZQdHIpOworICAg
ICAgICAgICAgY2VsbC0+c2V0VlB0cigwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c2V0RGVzdHJ1Y3RvclN0YXRlKEZyZWVDZWxsc0RvbnRIYXZlT2JqZWN0cyk7CisgICAgfQorfQog
Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21z
KClbaV0pOwotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgICAgIG5ldyAoY2VsbCkgSlND
ZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwor
dm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQoreworICAgIEhFQVBfREVCVUdfQkxPQ0sodGhpcyk7
CisgICAgCisgICAgc3dpdGNoIChkZXN0cnVjdG9yU3RhdGUoKSkgeworICAgIGNhc2UgRnJlZUNl
bGxzRG9udEhhdmVPYmplY3RzOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzOgorICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPFNvbWVGcmVlQ2Vs
bHNTdGlsbEhhdmVPYmplY3RzPigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoZGVzdHJ1Y3RvclN0YXRlKCkgPT0gQWxsRnJlZUNlbGxzSGF2ZU9iamVjdHMp
OworICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzPigpOwor
ICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLU1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2Vk
QmxvY2s6OmxhenlTd2VlcCgpCit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclN0YXRl
IHNwZWNpYWxpemVkRGVzdHJ1Y3RvclN0YXRlPgorQUxXQVlTX0lOTElORSBNYXJrZWRCbG9jazo6
RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpwcm9kdWNlRnJlZUxpc3QoKQogewogICAgIC8vIFRoaXMg
cmV0dXJucyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRo
ZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUg
bWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC05MiwyNSArMTQ4LDQ5IEBAIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenkKICAgICBmb3IgKHNpemVfdCBpID0g
Zmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAg
ICAgaWYgKCFtX21hcmtzLnRlc3RBbmRTZXQoaSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pOwotICAgICAgICAgICAg
aWYgKGNlbGwtPnZwdHIoKSA9PSBqc0ZpbmFsT2JqZWN0VlB0cikgewotICAgICAgICAgICAgICAg
IEpTRmluYWxPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGaW5hbE9iamVjdCo+
KGNlbGwpOwotICAgICAgICAgICAgICAgIG9iamVjdC0+SlNGaW5hbE9iamVjdDo6fkpTRmluYWxP
YmplY3QoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNlbGwtPn5KU0Nl
bGwoKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXplZERlc3RydWN0b3JTdGF0ZSAhPSBGcmVl
Q2VsbHNEb250SGF2ZU9iamVjdHMpCisgICAgICAgICAgICAgICAgY2FsbERlc3RydWN0b3I8c3Bl
Y2lhbGl6ZWREZXN0cnVjdG9yU3RhdGU+KGNlbGwsIGpzRmluYWxPYmplY3RWUHRyKTsKICAgICAg
ICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihj
ZWxsKTsKICAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OwogICAgICAgICAgICAg
cmVzdWx0ID0gZnJlZUNlbGw7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBp
cyBzbmVha3k6IGlmIHdlJ3JlIHByb2R1Y2luZyBhIGZyZWUgbGlzdCB0aGVuIHdlIGludGVuZCB0
bworICAgIC8vIGZpbGwgdXAgdGhlIGZyZWUgY2VsbHMgaW4gdGhlIGJsb2NrIHdpdGggb2JqZWN0
cywgd2hpY2ggbWVhbnMgdGhhdAorICAgIC8vIGlmIHdlIGhhdmUgYSBuZXcgR0MgdGhlbiBhbGwg
b2YgdGhlIGZyZWUgc3R1ZmYgaW4gdGhpcyBibG9jayB3aWxsCisgICAgLy8gY29tcHJpc2Ugb2Jq
ZWN0cyByYXRoZXIgdGhhbiBlbXB0eSBjZWxscy4KKyAgICBzZXREZXN0cnVjdG9yU3RhdGUoQWxs
RnJlZUNlbGxzSGF2ZU9iamVjdHMpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorTWFya2Vk
QmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6bGF6eVN3ZWVwKCkKK3sKKyAgICAvLyBUaGlz
IHJldHVybnMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0
aGUgYmxvY2suCisgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2Rl
IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQorICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVl
IGxpc3QuCisgICAgCisgICAgSEVBUF9ERUJVR19CTE9DSyh0aGlzKTsKKyAgICAKKyAgICBzd2l0
Y2ggKGRlc3RydWN0b3JTdGF0ZSgpKSB7CisgICAgY2FzZSBGcmVlQ2VsbHNEb250SGF2ZU9iamVj
dHM6CisgICAgICAgIHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8RnJlZUNlbGxzRG9udEhhdmVPYmpl
Y3RzPigpOworICAgIGNhc2UgU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM6CisgICAgICAg
IHJldHVybiBwcm9kdWNlRnJlZUxpc3Q8U29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHM+KCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09IEFsbEZy
ZWVDZWxsc0hhdmVPYmplY3RzKTsKKyAgICAgICAgcmV0dXJuIHByb2R1Y2VGcmVlTGlzdDxBbGxG
cmVlQ2VsbHNIYXZlT2JqZWN0cz4oKTsKKyAgICB9Cit9CisKIE1hcmtlZEJsb2NrOjpGcmVlQ2Vs
bCogTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCgpCiB7CiAgICAgLy8gVGhp
cyByZXR1cm5zIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2gg
dGhlIGJsb2NrLAogICAgIC8vIGFzIGluIGxhenlTd2VlcCgpIGFib3ZlLgogICAgIAorICAgIEhF
QVBfREVCVUdfQkxPQ0sodGhpcyk7CisKICAgICBGcmVlQ2VsbCogcmVzdWx0ID0gMDsKICAgICBm
b3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1Bl
ckNlbGwpIHsKICAgICAgICAgbV9tYXJrcy5zZXQoaSk7CkBAIC0xMTgsMjggKzE5OCw0NSBAQCBN
YXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpibGVzCiAgICAgICAgIGZyZWVDZWxs
LT5uZXh0ID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSBmcmVlQ2VsbDsKICAgICB9CisgICAg
CisgICAgLy8gU2VlIHByb2R1Y2VGcmVlTGlzdCgpLiBJZiB3ZSdyZSBoZXJlIHRoZW4gd2UgaW50
ZW5kIHRvIGZpbGwgdGhlCisgICAgLy8gYmxvY2sgd2l0aCBvYmplY3RzLCBzbyBvbmNlIGEgR0Mg
aGFwcGVucywgYWxsIGZyZWUgY2VsbHMgd2lsbCBiZQorICAgIC8vIG9jY3VwaWVkIGJ5IG9iamVj
dHMuCisgICAgc2V0RGVzdHJ1Y3RvclN0YXRlKEFsbEZyZWVDZWxsc0hhdmVPYmplY3RzKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCgpCiB7Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQo
KTsKKyAgICBIRUFQX0RFQlVHX0JMT0NLKHRoaXMpOworCisgICAgbV9tYXJrcy5jbGVhckFsbCgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBt
X2F0b21zUGVyQ2VsbCkKLSAgICAgICAgbmV3ICgmYXRvbXMoKVtpXSkgSlNDZWxsKCptX2hlYXAt
Pmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRp
bmdFYXJseUNlbGwpOworICAgICAgICByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oJmF0b21z
KClbaV0pLT5zZXROb09iamVjdCgpOworICAgIAorICAgIHNldERlc3RydWN0b3JTdGF0ZShGcmVl
Q2VsbHNEb250SGF2ZU9iamVjdHMpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpjYW5vbmljYWxp
emVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKIHsKLSAgICBTdHJ1Y3R1cmUqIGR1bW15
TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1bW15TWFya2Fi
bGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIEhFQVBfREVCVUdfQkxPQ0sodGhpcyk7CisgICAg
CisgICAgQVNTRVJUKGRlc3RydWN0b3JTdGF0ZSgpID09IEFsbEZyZWVDZWxsc0hhdmVPYmplY3Rz
KTsKICAgICAKLSAgICBmb3IgKEZyZWVDZWxsKiBjdXJyZW50ID0gZmlyc3RGcmVlQ2VsbDsgY3Vy
cmVudDspIHsKLSAgICAgICAgRnJlZUNlbGwqIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAg
ICBzaXplX3QgaSA9IGF0b21OdW1iZXIoY3VycmVudCk7CisgICAgaWYgKGZpcnN0RnJlZUNlbGwp
IHsKKyAgICAgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGZpcnN0RnJlZUNlbGw7IGN1cnJl
bnQ7KSB7CisgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7CisgICAg
ICAgICAgICBzaXplX3QgaSA9IGF0b21OdW1iZXIoY3VycmVudCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fbWFya3MuY2xlYXIoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1
cnJlbnQtPnNldE5vT2JqZWN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBuZXh0OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX21hcmtzLmNsZWFyKGkpOwot
ICAgICAgICBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihjdXJyZW50KSkgSlNDZWxsKCptX2hlYXAt
Pmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRp
bmdFYXJseUNlbGwpOwotCi0gICAgICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgICBzZXREZXN0
cnVjdG9yU3RhdGUoU29tZUZyZWVDZWxsc1N0aWxsSGF2ZU9iamVjdHMpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiA5
MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDIwIEBACiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9u
QWxpZ25lZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotbmFtZXNwYWNlIEpT
QyB7CisvLyBTZXQgdG8gbG9nIHN0YXRlIHRyYW5zaXRpb25zIG9mIGJsb2Nrcy4KKyNkZWZpbmUg
SEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTlMgMAorCisjaWYgSEVBUF9MT0dfQkxPQ0tf
U1RBVEVfVFJBTlNJVElPTlMKKyNkZWZpbmUgSEVBUF9ERUJVR19CTE9DSyhibG9jaykgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIlczol
ZCAlczogYmxvY2sgJXMgPSAlcFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAjYmxvY2ssIChi
bG9jaykpOyAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyNlbHNlCisjZGVmaW5lIEhFQVBf
REVCVUdfQkxPQ0soYmxvY2spICgodm9pZCkwKQorI2VuZGlmCiAKK25hbWVzcGFjZSBKU0Mgewor
ICAgIAogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xhc3MgSlNDZWxsOwogCkBAIC0zNyw3ICs0OSwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgS0IgPSAxMDI0
OwogICAgIAotICAgIHZvaWQgZGVzdHJ1Y3RvcihKU0NlbGwqKTsgLy8gRGVmaW5lZCBpbiBKU0Nl
bGwuaC4KKyAgICAvLyBBIG1hcmtlZCBibG9jayBpcyBhIHBhZ2UtYWxpZ25lZCBjb250YWluZXIg
Zm9yIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuCisgICAgLy8gT2JqZWN0cyBhcmUgYWxsb2NhdGVk
IHdpdGhpbiBjZWxscyBvZiB0aGUgbWFya2VkIGJsb2NrLiBGb3IgYSBnaXZlbgorICAgIC8vIG1h
cmtlZCBibG9jaywgYWxsIGNlbGxzIGhhdmUgdGhlIHNhbWUgc2l6ZS4gT2JqZWN0cyBzbWFsbGVy
IHRoYW4gdGhlCisgICAgLy8gY2VsbCBzaXplIG1heSBiZSBhbGxvY2F0ZWQgaW4gdGhlIG1hcmtl
ZCBibG9jaywgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAvLyBhbGxvY2F0aW9uIHN1ZmZlcnMgZnJv
bSBpbnRlcm5hbCBmcmFnbWVudGF0aW9uOiB3YXN0ZWQgc3BhY2Ugd2hvc2UKKyAgICAvLyBzaXpl
IGlzIGVxdWFsIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNlbGwgc2l6ZSBhbmQgdGhl
IG9iamVjdAorICAgIC8vIHNpemUuCiAKICAgICBjbGFzcyBNYXJrZWRCbG9jayA6IHB1YmxpYyBE
b3VibHlMaW5rZWRMaXN0Tm9kZTxNYXJrZWRCbG9jaz4gewogICAgICAgICBmcmllbmQgY2xhc3Mg
V1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxNYXJrZWRCbG9jaz47CkBAIC01Miw2ICs3MCwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAgICAg
ICAgRnJlZUNlbGwqIG5leHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZvaWQgc2V0Tm9P
YmplY3QoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVsaWVzIG9u
IEZyZWVDZWxsIG5vdCBoYXZpbmcgYSB2dGFibGUsIGFuZCB0aGUgbmV4dCBmaWVsZAorICAgICAg
ICAgICAgICAgIC8vIGZhbGxpbmcgZXhhY3RseSB3aGVyZSBhIHZ0YWJsZSB3b3VsZCBoYXZlIGJl
ZW4uCisgICAgICAgICAgICAgICAgbmV4dCA9IDA7CisgICAgICAgICAgICB9CiAgICAgICAgIH07
CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgVm9pZEZ1bmN0b3IgewpAQCAtOTYsNiArMTIxLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRoZW0sIGFuZCByZXR1cm5zIGEgbGlua2Vk
IGxpc3Qgb2YgdGhvc2UgY2VsbHMuCiAgICAgICAgIEZyZWVDZWxsKiBsYXp5U3dlZXAoKTsKICAg
ICAgICAgCisgICAgICAgIC8vIE5vdGlmeSB0aGUgYmxvY2sgdGhhdCBkZXN0cnVjdG9ycyBtYXkg
aGF2ZSB0byBiZSBjYWxsZWQgYWdhaW4uCisgICAgICAgIHZvaWQgbm90aWZ5TWF5SGF2ZUZyZXNo
RnJlZUNlbGxzKCk7CisgICAgICAgIAogICAgICAgICB2b2lkIGluaXRGb3JDZWxsU2l6ZShzaXpl
X3QgY2VsbFNpemUpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIGNhbGxl
ZCBpbW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQuCkBAIC0xMzIsNiArMTYwLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1NpemUgbXVzdCBiZSBh
IHBvd2VyIG9mIHR3by4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tTWFzayA9IH4o
YXRvbVNpemUgLSAxKTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICAg
ICAgCisgICAgICAgIGVudW0gRGVzdHJ1Y3RvclN0YXRlIHsgRnJlZUNlbGxzRG9udEhhdmVPYmpl
Y3RzLCBTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0cywgQWxsRnJlZUNlbGxzSGF2ZU9iamVj
dHMgfTsKIAogICAgICAgICB0eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKQEAgLTE0MCwx
MSArMTcwLDM0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCBhdG9tTnVtYmVy
KGNvbnN0IHZvaWQqKTsKICAgICAgICAgc2l6ZV90IG93bmVyU2V0TnVtYmVyKGNvbnN0IEpTQ2Vs
bCopOwotCisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdG9yU3RhdGUgZGVzdHJ1
Y3RvclN0YXRlPgorICAgICAgICBzdGF0aWMgdm9pZCBjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqLCB2
b2lkKiBqc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxEZXN0
cnVjdG9yU3RhdGUgZGVzdHJ1Y3RvclN0YXRlPgorICAgICAgICB2b2lkIHNwZWNpYWxpemVkUmVz
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0b3JTdGF0ZSBkZXN0cnVj
dG9yU3RhdGU+CisgICAgICAgIHZvaWQgc3BlY2lhbGl6ZWRTd2VlcCgpOworICAgICAgICAKKyAg
ICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3RvclN0YXRlIGRlc3RydWN0b3JTdGF0ZT4KKyAgICAgICAg
TWFya2VkQmxvY2s6OkZyZWVDZWxsKiBwcm9kdWNlRnJlZUxpc3QoKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0RGVzdHJ1Y3RvclN0YXRlKERlc3RydWN0b3JTdGF0ZSBkZXN0cnVjdG9yU3Rh
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZGVzdHJ1Y3RvclN0YXRlID0gc3RhdGljX2Nh
c3Q8aW50OF90PihkZXN0cnVjdG9yU3RhdGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBEZXN0cnVjdG9yU3RhdGUgZGVzdHJ1Y3RvclN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERlc3RydWN0b3JTdGF0ZT4obV9kZXN0cnVjdG9yU3RhdGUp
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzaXplX3QgbV9lbmRBdG9tOyAvLyBUaGlz
IGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAgICAgICAgIHNp
emVfdCBtX2F0b21zUGVyQ2VsbDsKICAgICAgICAgV1RGOjpCaXRtYXA8YmxvY2tTaXplIC8gYXRv
bVNpemU+IG1fbWFya3M7CiAgICAgICAgIGJvb2wgbV9pbk5ld1NwYWNlOworICAgICAgICBpbnQ4
X3QgbV9kZXN0cnVjdG9yU3RhdGU7IC8vIHVzZSBnZXR0ZXJzL3NldHRlcnMgZm9yIHRoaXMsIHBh
cnRpY3VsYXJseSBzaW5jZSB3ZSBtYXkgd2FudCB0byBjb21wYWN0IHRoaXMgKGVmZmVjdGl2ZWx5
IGxvZygzKS9sb2coMiktYml0KSBmaWVsZCBpbnRvIG90aGVyIGZpZWxkcwogICAgICAgICBPd25l
clNldCBtX293bmVyU2V0c1tvd25lclNldHNQZXJCbG9ja107CiAgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CiAgICAgICAgIEhlYXAqIG1faGVhcDsKQEAgLTE4Niw2
ICsyMzksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBtX2luTmV3U3BhY2Ug
PSBpbk5ld1NwYWNlOwogICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
bm90aWZ5TWF5SGF2ZUZyZXNoRnJlZUNlbGxzKCkKKyAgICB7CisgICAgICAgIEhFQVBfREVCVUdf
QkxPQ0sodGhpcyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIEdDLiBJZiB0aGlzIGJsb2NrIGlzCisgICAgICAgIC8vIEFsbEZyZWVDZWxs
c0hhdmVPYmplY3RzLCB0aGVuIGl0IG1lYW5zIHRoYXQgd2UgZmlsbGVkIHVwCisgICAgICAgIC8v
IHRoZSBibG9jayBpbiB0aGlzIGNvbGxlY3Rpb24uIElmIGl0J3MgaW4gYW55IG90aGVyIHN0YXRl
LAorICAgICAgICAvLyB0aGVuIHRoaXMgY29sbGVjdGlvbiB3aWxsIHBvdGVudGlhbGx5IHByb2R1
Y2UgbmV3IGZyZWUKKyAgICAgICAgLy8gY2VsbHM7IG5ldyBmcmVlIGNlbGxzIGFsd2F5cyBoYXZl
IG9iamVjdHMuIEhlbmNlIGlmIHRoZQorICAgICAgICAvLyBzdGF0ZSBjdXJyZW50bHkgY2xhaW1z
IHRoYXQgdGhlcmUgYXJlIG5vIG9iamVjdHMgaW4gZnJlZQorICAgICAgICAvLyBjZWxscyB0aGVu
IHdlIG5lZWQgdG8gYnVtcCBpdCBvdmVyLiBPdGhlcndpc2UgbGVhdmUgaXQgYmUuCisgICAgICAg
IC8vIFRoaXMgYWxsIGNydWNpYWxseSByZWxpZXMgb24gdGhlIGNvbGxlY3RvciBjYW5vbmljYWxp
emluZworICAgICAgICAvLyBibG9ja3MgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIGFzIGNh
bm9uaWNhbGl6ZUJsb2NrcworICAgICAgICAvLyB3aWxsIGNvcnJlY3RseSBzZXQgU29tZUZyZWVD
ZWxsc1N0aWxsSGF2ZU9iamVjdHMgZm9yCisgICAgICAgIC8vIGJsb2NrcyB0aGF0IHdlcmUgb25s
eSBwYXJ0aWFsbHkgZmlsbGVkIGR1cmluZyB0aGlzCisgICAgICAgIC8vIG11dGF0aW9uIGN5Y2xl
LgorICAgICAgICAKKyAgICAgICAgaWYgKGRlc3RydWN0b3JTdGF0ZSgpID09IEZyZWVDZWxsc0Rv
bnRIYXZlT2JqZWN0cykKKyAgICAgICAgICAgIHNldERlc3RydWN0b3JTdGF0ZShTb21lRnJlZUNl
bGxzU3RpbGxIYXZlT2JqZWN0cyk7CisgICAgfQogCiAgICAgaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmlzRW1wdHkoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAkocmV2aXNpb24gOTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gSlNDZWxsOjpzX2R1bW15Q2VsbEluZm8gPSB7
ICJEdW1teUNlbGwiLCAwLCAwLCAwIH07Ci0KIGJvb2wgSlNDZWxsOjpnZXRVSW50MzIodWludDMy
X3QmKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA5MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlOwogICAgICAgICBm
cmllbmQgY2xhc3MgU3RydWN0dXJlQ2hhaW47CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWdFeHA7
Ci0gICAgICAgIGZyaWVuZCB2b2lkIGRlc3RydWN0b3IoSlNDZWxsKik7CiAKICAgICAgICAgZW51
bSBDcmVhdGluZ0Vhcmx5Q2VsbFRhZyB7IENyZWF0aW5nRWFybHlDZWxsIH07CiAKQEAgLTgzLDEx
ICs4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKik7CiAgICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBD
cmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAgICAgICAgIHZpcnR1YWwgfkpTQ2VsbCgpOwotICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfZHVtbXlDZWxsSW5mbzsKIAogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlRHVtbXlTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJik7Ci0KICAgICAgICAgLy8gUXVlcnlpbmcgdGhlIHR5cGUuCiAgICAgICAgIGJvb2wgaXNT
dHJpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwpAQCAtMTgwLDcg
KzE3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgICAgICBtX3N0cnVjdHVy
ZS5zZXRFYXJseVZhbHVlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgICAgIC8v
IFZlcnkgZmlyc3Qgc2V0IG9mIGFsbG9jYXRpb25zIHdvbid0IGhhdmUgYSByZWFsIHN0cnVjdHVy
ZS4KLSAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlIHx8ICFnbG9iYWxEYXRhLmR1bW15TWFya2Fi
bGVDZWxsU3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlIHx8ICFnbG9iYWxE
YXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQ2VsbDo6fkpT
Q2VsbCgpCkBAIC0zNTAsMTEgKzM0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1
cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogdG9UaGlzT2JqZWN0
U2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgZGVzdHJ1Y3RvcihKU0Nl
bGwqIGNlbGwpCi0gICAgewotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgfQotCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGhlYXAuYWxsb2NhdGUoc2l6ZW9mKFQpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24g
OTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDYgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEoR2xvYmFsRGF0YVR5cAogICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywganNOdWxsKCkpKTsKICAg
ICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU0NlbGw6OmNyZWF0ZUR1bW15U3RydWN0dXJlKCp0aGlzKSk7CiAgICAgcmVnRXhw
U3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIGpzTnVs
bCgpKSk7CiAgICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVD
aGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBqc051bGwoKSkpOwogCkBAIC0yODYsNyArMjg1
LDYgQEAgdm9pZCBKU0dsb2JhbERhdGE6OmNsZWFyQnVpbHRpblN0cnVjdHVyZQogICAgIGV2YWxF
eGVjdXRhYmxlU3RydWN0dXJlLmNsZWFyKCk7CiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1
cmUuY2xlYXIoKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuY2xlYXIoKTsKLSAg
ICBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5jbGVhcigpOwogICAgIHJlZ0V4cFN0cnVjdHVy
ZS5jbGVhcigpOwogICAgIHN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmNsZWFyKCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNp
b24gOTIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiA5MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsMTEgKzI4NCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCi0gICAgaW5saW5lIFN0cnVjdHVy
ZSogSlNDZWxsOjpjcmVhdGVEdW1teVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwganNO
dWxsKCksIFR5cGVJbmZvKFVuc3BlY2lmaWVkVHlwZSksIEFub255bW91c1Nsb3RDb3VudCwgJnNf
ZHVtbXlDZWxsSW5mbyk7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFj
azo6aW50ZXJuYWxBcHBlbmQoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>