<?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>90118</bug_id>
          
          <creation_ts>2012-06-27 17:49:14 -0700</creation_ts>
          <short_desc>Share the same cache in HTMLCollection and DynamicNodeLists</short_desc>
          <delta_ts>2012-06-29 11:58:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90111</dependson>
    
    <dependson>90240</dependson>
          <blocked>89919</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>659017</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-27 17:49:14 -0700</bug_when>
    <thetext>In order to resolve the bug 89919, we need to first make the interface of the cache in HTMLCollection and DynamicNodeList similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659019</commentid>
    <comment_count>1</comment_count>
      <attachid>149834</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-27 17:50:31 -0700</bug_when>
    <thetext>Created attachment 149834
work in progress

Here&apos;s my working in progress patch. It also includes my patch for the bug 90111.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660061</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-28 19:20:16 -0700</bug_when>
    <thetext>Turned out that I can do better and just share the same cache class between two classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660101</commentid>
    <comment_count>3</comment_count>
      <attachid>150075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-28 20:40:46 -0700</bug_when>
    <thetext>Created attachment 150075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660102</commentid>
    <comment_count>4</comment_count>
      <attachid>150075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-28 20:41:26 -0700</bug_when>
    <thetext>Comment on attachment 150075
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        In DynamicNodeList, a very straight forward one-to-one mapping from old Caches member variables:

s/a very straight/we have a very straight/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660103</commentid>
    <comment_count>5</comment_count>
      <attachid>150075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-28 20:42:35 -0700</bug_when>
    <thetext>Comment on attachment 150075
Patch

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

&gt; Source/WebCore/html/HTMLCollection.cpp:274
&gt; +    unsigned i = 0;
&gt;      for (Element* e = itemAfter(0); e; e = itemAfter(e)) {
&gt;          if (checkForNameMatch(e, /* checkName */ false, name)) {
&gt; -            m_cache.current = e;
&gt; +            setItemCache(e, i);
&gt;              return e;
&gt;          }
&gt; +        i++;
&gt;      }
&gt;  
&gt; +    i = 0;
&gt;      for (Element* e = itemAfter(0); e; e = itemAfter(e)) {
&gt;          if (checkForNameMatch(e, /* checkName */ true, name)) {
&gt; -            m_cache.current = e;
&gt; +            setItemCache(e, i);
&gt;              return e;
&gt;          }
&gt; +        i++;

This includes the patch on https://bugs.webkit.org/show_bug.cgi?id=90240.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660214</commentid>
    <comment_count>6</comment_count>
      <attachid>150098</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-29 00:18:30 -0700</bug_when>
    <thetext>Created attachment 150098
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660216</commentid>
    <comment_count>7</comment_count>
      <attachid>150099</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-29 00:21:36 -0700</bug_when>
    <thetext>Created attachment 150099
Fixed a merge error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660626</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-29 10:44:36 -0700</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660695</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-29 11:58:36 -0700</bug_when>
    <thetext>Committed r121580: &lt;http://trac.webkit.org/changeset/121580&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149834</attachid>
            <date>2012-06-27 17:50:31 -0700</date>
            <delta_ts>2012-06-28 20:40:42 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip90118</filename>
            <type>text/plain</type>
            <size>28658</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMTM2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOCBAQAogY2xhc3MgRWxlbWVudDsKIGNsYXNzIE5vZGU7CiAKLWNsYXNzIER5
bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CisvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgbWVyZ2VkIHdpdGggSFRNTENvbGxlY3Rpb25CYXNlCitjbGFzcyBEeW5hbWljTm9kZUNvbGxl
Y3Rpb25CYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIE5vZGVMaXN0VHlwZSB7CiAgICAgICAgIENo
aWxkTm9kZUxpc3RUeXBlLApAQCAtNTMsMzMgKzU0LDQ3IEBACiAgICAgICAgIEFsd2F5c0ludmFs
aWRhdGUsCiAgICAgICAgIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAogICAgIH07
Ci0gICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gb3duZXJOb2RlLCBSb290VHlw
ZSByb290VHlwZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKQorCisgICAgRHlu
YW1pY05vZGVDb2xsZWN0aW9uQmFzZShQYXNzUmVmUHRyPE5vZGU+IG93bmVyTm9kZSwgUm9vdFR5
cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKICAgICAgICAg
OiBtX293bmVyTm9kZShvd25lck5vZGUpCi0gICAgICAgICwgbV9jYWNoZXMocm9vdFR5cGUsIGlu
dmFsaWRhdGlvblR5cGUpCisgICAgICAgICwgbV9jYWNoZShyb290VHlwZSwgaW52YWxpZGF0aW9u
VHlwZSkKICAgICB7IH0KLSAgICB2aXJ0dWFsIH5EeW5hbWljTm9kZUxpc3QoKSB7IH0KKyAgICB2
aXJ0dWFsIH5EeW5hbWljTm9kZUNvbGxlY3Rpb25CYXNlKCkgeyB9CiAKLSAgICAvLyBET00gbWV0
aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3Ry
aW5nJikgY29uc3Q7Ci0KICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAg
ICAgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7IH0K
LSAgICBib29sIGlzUm9vdGVkQXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVzLnJv
b3RlZEF0RG9jdW1lbnQ7IH0KLSAgICBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVzLnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgeyBtX2NhY2hlcy5yZXNldCgp
OyB9CisgICAgYm9vbCBpc1Jvb3RlZEF0RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
LnJvb3RlZEF0RG9jdW1lbnQ7IH0KKyAgICBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGUuc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmli
dXRlQ2hhbmdlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSB7IG1fY2FjaGUucmVzZXQo
KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgTm9kZSogcm9vdE5vZGUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgaWYgKG1fY2FjaGVzLnJvb3RlZEF0RG9jdW1lbnQgJiYgbV9vd25lck5vZGUtPmluRG9j
dW1lbnQoKSkKKyAgICAgICAgaWYgKG1fY2FjaGUucm9vdGVkQXREb2N1bWVudCAmJiBtX293bmVy
Tm9kZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1
bWVudCgpOwogICAgICAgICByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7CiAgICAgfQogICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgp
OyB9Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdCA9IDA7CiAK
KyAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlLmlzTGVu
Z3RoQ2FjaGVWYWxpZDsgfQorICAgIE5vZGUqIGNhY2hlZEl0ZW0oKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlLmNhY2hlZEl0ZW07IH0KKyAgICB1bnNpZ25lZCBjYWNoZWRJdGVtT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZS5jYWNoZWRJdGVtT2Zmc2V0OyB9CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldENhY2hlZEl0ZW0oTm9kZSogaXRlbSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgbV9jYWNoZS5jYWNoZWRJdGVtID0gaXRlbTsKKyAgICAgICAgbV9jYWNo
ZS5jYWNoZWRJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtX2NhY2hlLmlzSXRlbUNhY2hl
VmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZS5pc0xlbmd0aENhY2hlVmFsaWQ7IH0KKyAgICB1bnNpZ25lZCBj
YWNoZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlLmNhY2hlZExlbmd0aDsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRDYWNoZWRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSBjb25z
dAorICAgIHsKKyAgICAgICAgbV9jYWNoZS5jYWNoZWRMZW5ndGggPSBsZW5ndGg7CisgICAgICAg
IG1fY2FjaGUuaXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CiAg
ICAgc3RydWN0IENhY2hlcyB7CiAgICAgICAgIENhY2hlcyhSb290VHlwZSByb290VHlwZSwgSW52
YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKQogICAgICAgICAgICAgOiByb290ZWRBdERv
Y3VtZW50KHJvb3RUeXBlID09IFJvb3RlZEF0RG9jdW1lbnQpCkBAIC04NywyOSArMTAyLDQ0IEBA
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIH0KLQorICAgICAgICAK
ICAgICAgICAgdm9pZCByZXNldCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RJdGVtID0g
MDsKKyAgICAgICAgICAgIGNhY2hlZEl0ZW0gPSAwOwogICAgICAgICAgICAgaXNMZW5ndGhDYWNo
ZVZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7CiAg
ICAgICAgIH0KLQotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKKyAgICAgICAgCisgICAgICAgIE5v
ZGUqIGNhY2hlZEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKLSAgICAgICAg
dW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGNhY2hlZEl0ZW1PZmZz
ZXQ7CiAgICAgICAgIHVuc2lnbmVkIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CiAgICAgICAgIHVu
c2lnbmVkIGlzSXRlbUNhY2hlVmFsaWQgOiAxOwogCi0gICAgICAgIC8vIEZvbGxvd2luZyBmbGFn
cyBzaG91bGQgYmVsb25nIGluIER5bmFtaWNTdWJ0cmVlTm9kZSBidXQgYXJlIGhlcmUgZm9yIGJp
dC1wYWNraW5nLgotICAgICAgICB1bnNpZ25lZCB0eXBlIDogNDsKKyAgICAgICAgLy8gQml0IGZp
ZWxkcyBmcm9tIER5bmFtaWNOb2RlTGlzdAogICAgICAgICB1bnNpZ25lZCByb290ZWRBdERvY3Vt
ZW50IDogMTsKICAgICAgICAgdW5zaWduZWQgc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hh
bmdlIDogMTsKICAgICB9OwogCiAgICAgUmVmUHRyPE5vZGU+IG1fb3duZXJOb2RlOwotICAgIG11
dGFibGUgQ2FjaGVzIG1fY2FjaGVzOworICAgIG11dGFibGUgQ2FjaGVzIG1fY2FjaGU7Cit9Owog
CitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QsIHB1YmxpYyBEeW5hbWlj
Tm9kZUNvbGxlY3Rpb25CYXNlIHsKK3B1YmxpYzoKKyAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiBvd25lck5vZGUsIFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRpb25UeXBl
IGludmFsaWRhdGlvblR5cGUpCisgICAgICAgIDogRHluYW1pY05vZGVDb2xsZWN0aW9uQmFzZShv
d25lck5vZGUsIHJvb3RUeXBlLCBpbnZhbGlkYXRpb25UeXBlKQorICAgIHsgfQorICAgIHZpcnR1
YWwgfkR5bmFtaWNOb2RlTGlzdCgpIHsgfQorCisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1
dGVzIGZvciBOb2RlTGlzdAorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25z
dCA9IDA7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTUgKzM5LDE0IEBACiAK
IHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2Fj
aGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVzLmNhY2hlZExl
bmd0aDsKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgIHJldHVybiBjYWNo
ZWRMZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAgICAgZm9yIChOb2RlKiBuID0g
cm9vdE5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgbGVuKys7CiAKLSAgICBtX2NhY2hlcy5jYWNoZWRMZW5ndGggPSBsZW47Ci0gICAgbV9jYWNo
ZXMuaXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBzZXRDYWNoZWRMZW5ndGgobGVuKTsK
IAogICAgIHJldHVybiBsZW47CiB9CkBAIC01NywyNyArNTYsMjcgQEAKICAgICB1bnNpZ25lZCBp
bnQgcG9zID0gMDsKICAgICBOb2RlKiBuID0gcm9vdE5vZGUoKS0+Zmlyc3RDaGlsZCgpOwogCi0g
ICAgaWYgKG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQpIHsKLSAgICAgICAgaWYgKGluZGV4ID09
IG1fY2FjaGVzLmxhc3RJdGVtT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLmxh
c3RJdGVtOworICAgIGlmIChpc0l0ZW1DYWNoZVZhbGlkKCkpIHsKKyAgICAgICAgaWYgKGluZGV4
ID09IGNhY2hlZEl0ZW1PZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRJdGVtKCk7
CiAgICAgICAgIAotICAgICAgICBpbnQgZGlmZiA9IGluZGV4IC0gbV9jYWNoZXMubGFzdEl0ZW1P
ZmZzZXQ7CisgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAg
ICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0IDwgaW5k
ZXgpIHsKLSAgICAgICAgICAgIG4gPSBtX2NhY2hlcy5sYXN0SXRlbTsKLSAgICAgICAgICAgIHBv
cyA9IG1fY2FjaGVzLmxhc3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgbiA9IGNhY2hlZEl0ZW0o
KTsKKyAgICAgICAgICAgIHBvcyA9IGNhY2hlZEl0ZW1PZmZzZXQoKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX2NhY2hlcy5pc0xlbmd0aENhY2hlVmFsaWQpIHsKLSAgICAgICAgaWYg
KGluZGV4ID49IG1fY2FjaGVzLmNhY2hlZExlbmd0aCkKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZh
bGlkKCkpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGNhY2hlZExlbmd0aCgpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAgICAgaW50IGRpZmYgPSBpbmRleCAtIHBvczsKICAgICAgICAg
dW5zaWduZWQgZGlzdCA9IGFicyhkaWZmKTsKLSAgICAgICAgaWYgKGRpc3QgPiBtX2NhY2hlcy5j
YWNoZWRMZW5ndGggLSAxIC0gaW5kZXgpIHsKKyAgICAgICAgaWYgKGRpc3QgPiBjYWNoZWRMZW5n
dGgoKSAtIDEgLSBpbmRleCkgewogICAgICAgICAgICAgbiA9IHJvb3ROb2RlKCktPmxhc3RDaGls
ZCgpOwotICAgICAgICAgICAgcG9zID0gbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0gMTsKKyAgICAg
ICAgICAgIHBvcyA9IGNhY2hlZExlbmd0aCgpIC0gMTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
OTQsOSArOTMsNyBAQAogICAgIH0KIAogICAgIGlmIChuKSB7Ci0gICAgICAgIG1fY2FjaGVzLmxh
c3RJdGVtID0gbjsKLSAgICAgICAgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgPSBwb3M7Ci0gICAg
ICAgIG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICBzZXRDYWNoZWRJ
dGVtKG4sIHBvcyk7CiAgICAgICAgIHJldHVybiBuOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw4IEBACiAKIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLmNhY2hlZExlbmd0aDsKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBjYWNoZWRMZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CiAgICAgTm9kZSogcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOwpAQCAtNDMsOCArNDMsNyBA
QAogICAgIGZvciAoTm9kZSogbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKSkKICAgICAgICAgbGVuZ3RoICs9IG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOwogCi0gICAg
bV9jYWNoZXMuY2FjaGVkTGVuZ3RoID0gbGVuZ3RoOwotICAgIG1fY2FjaGVzLmlzTGVuZ3RoQ2Fj
aGVWYWxpZCA9IHRydWU7CisgICAgc2V0Q2FjaGVkTGVuZ3RoKGxlbmd0aCk7CiAKICAgICByZXR1
cm4gbGVuZ3RoOwogfQpAQCAtNTYsOSArNTUsNyBAQAogICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0
OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpIHsKICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikp
KSB7CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAg
IG1fY2FjaGVzLmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRl
bU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy5pc0l0ZW1DYWNoZVZh
bGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZXRDYWNoZWRJdGVtKG4sIG9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAtLXJl
bWFpbmluZ09mZnNldDsKQEAgLTc1LDkgKzcyLDcgQEAKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFy
dDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3ROb2RlKSkgewogICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuKSkpIHsKICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Ci0gICAgICAgICAg
ICAgICAgbV9jYWNoZXMubGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgIG1fY2FjaGVzLmxh
c3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fY2FjaGVzLmlzSXRlbUNh
Y2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNldENhY2hlZEl0ZW0obiwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICsrcmVtYWluaW5nT2Zmc2V0OwpAQCAtOTEsMTUgKzg2LDE4IEBACiB7CiAgICAgaW50IHJlbWFp
bmluZ09mZnNldCA9IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IHJvb3ROb2RlKCktPmZpcnN0
Q2hpbGQoKTsKLSAgICBpZiAobV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICBp
ZiAob2Zmc2V0ID09IG1fY2FjaGVzLmxhc3RJdGVtT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLmxhc3RJdGVtOwotICAgICAgICBpZiAob2Zmc2V0ID4gbV9jYWNoZXMubGFzdEl0
ZW1PZmZzZXQgfHwgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsK
LSAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgICAgICByZW1h
aW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQ7CisgICAgaWYgKGlzSXRlbUNh
Y2hlVmFsaWQoKSkgeworICAgICAgICBpZiAob2Zmc2V0ID09IGNhY2hlZEl0ZW1PZmZzZXQoKSkK
KyAgICAgICAgICAgIHJldHVybiBjYWNoZWRJdGVtKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBj
YWNoZWRJdGVtT2Zmc2V0KCkgfHwgY2FjaGVkSXRlbU9mZnNldCgpIC0gb2Zmc2V0IDwgb2Zmc2V0
KSB7CisgICAgICAgICAgICBzdGFydCA9IGNhY2hlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJlbWFp
bmluZ09mZnNldCAtPSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICAvLyBGSVhNRTogQmFpbCBvdXQgd2hlbiBvZmZzZXQgPj0gY2FjaGVkTGVuZ3RoKCkKKyAgICAv
LyBGSVhNRTogVHJhdmVyc2UgZnJvbSB0aGUgbGFzdCBjaGlsZCBpZiB3ZSdyZSBjbG9zZXIgdG8g
dGhlIGVuZAorCiAgICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCiAgICAgICAgIHJldHVybiBp
dGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsK
ICAgICByZXR1cm4gaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWlu
aW5nT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQAogCiAgICAgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBkb2N1
bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW1zKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwogCi0gICAgaWYgKCFjb2xsZWN0aW9uLT5oYXNBbnlJdGVtKCkpCisgICAgaWYg
KGNvbGxlY3Rpb24tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBpZiAoY29sbGVjdGlvbi0+aGFzRXhhY3RseU9uZUl0ZW0oKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAxMjEzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsNyArNTIx
LDcgQEAKICAgICBpZiAoZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jKS0+aGFzTmFtZWRJdGVtKHByb3BOYW1l
LmltcGwoKSkgfHwgZG9jLT5oYXNFbGVtZW50V2l0aElkKHByb3BOYW1lLmltcGwoKSkpIHsKICAg
ICAgICAgICAgIEhUTUxDb2xsZWN0aW9uKiBpdGVtcyA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhw
cm9wTmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXRlbXMtPmhhc0FueUl0ZW0oKSkgeworICAgICAg
ICAgICAgaWYgKCFpdGVtcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW1z
LT5oYXNFeGFjdGx5T25lSXRlbSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChp
dGVtcy0+aXRlbSgwKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0b1Y4KGl0ZW1zLCBpbmZvLkdldElzb2xhdGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcg
QEAKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAgICAgSFRNTENv
bGxlY3Rpb24qIGl0ZW1zID0gaHRtbERvY3VtZW50LT5kb2N1bWVudE5hbWVkSXRlbXMoa2V5KTsK
LSAgICBpZiAoIWl0ZW1zLT5oYXNBbnlJdGVtKCkpCisgICAgaWYgKGl0ZW1zLT5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIGlmIChpdGVt
cy0+aGFzRXhhY3RseU9uZUl0ZW0oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjEzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw2IEBACiAg
ICAgdmlydHVhbCB+SFRNTEZvcm1Db2xsZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZSogbmV4dEl0ZW0oKSBj
b25zdDsKLQogICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC01MSw3ICs0OSw2IEBACiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgY2FsY0xl
bmd0aCgpIGNvbnN0OwogCi0gICAgRWxlbWVudCogZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIEVs
ZW1lbnQqIGdldE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlcikgY29uc3Q7CiAKICAgICBjb25z
dCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGZvcm1Db250cm9sRWxlbWVudHMoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJ
KHJldmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMjggKzg0LDIzIEBACiB7CiAgICAgaW52YWxp
ZGF0ZUNhY2hlSWZOZWVkZWQoKTsKIAotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYgbV9jYWNo
ZS5wb3NpdGlvbiA9PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKKyAg
ICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCgpICYmIGNhY2hlZEl0ZW1PZmZzZXQoKSA9PSBpbmRleCkK
KyAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKIAotICAgIGlmIChtX2NhY2hlLmhhc0xlbmd0
aCAmJiBtX2NhY2hlLmxlbmd0aCA8PSBpbmRleCkKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlk
KCkgJiYgY2FjaGVkTGVuZ3RoKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
aWYgKCFtX2NhY2hlLmN1cnJlbnQgfHwgbV9jYWNoZS5wb3NpdGlvbiA+IGluZGV4KSB7Ci0gICAg
ICAgIG1fY2FjaGUuY3VycmVudCA9IDA7Ci0gICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSAwOwot
ICAgICAgICBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAgfQorICAgIGlm
ICghaXNJdGVtQ2FjaGVWYWxpZCgpIHx8IGNhY2hlZEl0ZW1PZmZzZXQoKSA+IGluZGV4KQorICAg
ICAgICBzZXRDYWNoZWRJdGVtV2l0aEFycmF5UG9zaXRpb24oMCwgMCwgMCk7CiAKICAgICBjb25z
dCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBmb3JtQ29u
dHJvbEVsZW1lbnRzKCk7Ci0gICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gbV9jYWNoZS5wb3Np
dGlvbjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQ
b3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAgICB1bnNpZ25lZCBj
dXJyZW50SW5kZXggPSBjYWNoZWRJdGVtT2Zmc2V0KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjYWNoZWRBcnJheVBvc2l0aW9uKCk7IGkgPCBlbGVtZW50c0FycmF5LnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGlmIChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CiAgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJh
eVtpXSk7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgbV9jYWNoZS5wb3NpdGlvbiA9IGluZGV4OwotICAgICAgICAgICAgICAgIG1fY2Fj
aGUuY3VycmVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZS5lbGVtZW50c0Fy
cmF5UG9zaXRpb24gPSBpOworICAgICAgICAgICAgICAgIHNldENhY2hlZEl0ZW1XaXRoQXJyYXlQ
b3NpdGlvbihlbGVtZW50LCBpbmRleCwgaSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CiAgICAgICAgICAgICB9CiAKQEAgLTExNiw1MSArMTExLDI5IEBACiAgICAgcmV0dXJuIDA7
CiB9CiAKLUVsZW1lbnQqIEhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0Citz
dGF0aWMgSFRNTEVsZW1lbnQqIGZpcnN0TmFtZWRJdGVtKGNvbnN0IFZlY3RvcjxGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqPiYgZWxlbWVudHNBcnJheSwKKyAgICBjb25zdCBWZWN0b3I8SFRNTEltYWdl
RWxlbWVudCo+KiBpbWFnZUVsZW1lbnRzQXJyYXksIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9jYWNoZS5wb3NpdGlvbiA9IDA7Ci0g
ICAgcmV0dXJuIGdldE5hbWVkRm9ybUl0ZW0oYXR0ck5hbWUsIG5hbWUsIDApOwotfQorICAgIEFT
U0VSVChhdHRyTmFtZSA9PSBpZEF0dHIgfHwgYXR0ck5hbWUgPT0gbmFtZUF0dHIpOwogCi1FbGVt
ZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlcikg
Y29uc3QKLXsKLSAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1l
bnRzQXJyYXkgPSBmb3JtQ29udHJvbEVsZW1lbnRzKCk7Ci0KLSAgICBib29sIGZvdW5kSW5wdXRF
bGVtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0Fy
cmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2Np
YXRlZEVsZW1lbnQgPSBlbGVtZW50c0FycmF5W2ldOwotICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOwotICAgICAgICBpZiAoYXNz
b2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGF0dHJOYW1lKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKLSAgICAgICAg
fQorICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNB
cnJheVtpXSk7CisgICAgICAgIGlmIChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgp
ICYmIGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKICAgICB9CiAKLSAgICBpZiAoYmFzZSgpLT5oYXNUYWdOYW1l
KGZpZWxkc2V0VGFnKSkKKyAgICBpZiAoIWltYWdlRWxlbWVudHNBcnJheSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEltYWdlRWxlbWVudCo+JiBpbWFnZUVsZW1l
bnRzQXJyYXkgPSBmb3JtSW1hZ2VFbGVtZW50cygpOwotICAgIGlmICghZm91bmRJbnB1dEVsZW1l
bnRzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbWFnZUVsZW1lbnRzQXJy
YXkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQg
PSBpbWFnZUVsZW1lbnRzQXJyYXlbaV07Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNh
dGVOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICAg
ICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltYWdlRWxlbWVudHNBcnJheS0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9ICgqaW1hZ2VFbGVtZW50c0Fy
cmF5KVtpXTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXR0ck5hbWUp
ID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICB9CiAKICAgICByZXR1
cm4gMDsKIH0KIAotTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9uOjpuZXh0SXRlbSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGl0ZW0obV9jYWNoZS5wb3NpdGlvbiArIDEpOwotfQotCiBOb2RlKiBIVE1M
Rm9ybUNvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
CiB7CiAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0
bWwvcmVmZXJlbmNlL21ldGhvZHMvbmFtZWRpdGVtLmFzcApAQCAtMTY5LDE2ICsxNDIsMTUgQEAK
ICAgICAvLyBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIG5hbWUgYXR0cmlidXRlLCBidXQgb25seSBv
biB0aG9zZSBlbGVtZW50cwogICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0
ZS4KICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgIG1fY2FjaGUuY3VycmVudCA9
IGdldE5hbWVkSXRlbShpZEF0dHIsIG5hbWUpOwotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQpCi0g
ICAgICAgIHJldHVybiBtX2NhY2hlLmN1cnJlbnQ7Ci0gICAgbV9jYWNoZS5jdXJyZW50ID0gZ2V0
TmFtZWRJdGVtKG5hbWVBdHRyLCBuYW1lKTsKLSAgICByZXR1cm4gbV9jYWNoZS5jdXJyZW50Owor
ICAgIGNvbnN0IFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50Kj4qIGltYWdlc0VsZW1lbnRzID0gYmFz
ZSgpLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSA/IDAgOiAmZm9ybUltYWdlRWxlbWVudHMoKTsK
KyAgICBpZiAoTm9kZSogaXRlbSA9IGZpcnN0TmFtZWRJdGVtKGZvcm1Db250cm9sRWxlbWVudHMo
KSwgaW1hZ2VzRWxlbWVudHMsIGlkQXR0ciwgbmFtZSkpCisgICAgICAgIHJldHVybiBpdGVtOwor
ICAgIHJldHVybiBmaXJzdE5hbWVkSXRlbShmb3JtQ29udHJvbEVsZW1lbnRzKCksIGltYWdlc0Vs
ZW1lbnRzLCBuYW1lQXR0ciwgbmFtZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1
cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlLmhhc05hbWVDYWNoZSkK
KyAgICBpZiAoaGFzTmFtZUNhY2hlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+IGZvdW5kSW5wdXRFbGVtZW50czsKQEAgLTE5MiwxMSArMTY0LDEx
IEBACiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQt
PmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVB
dHRyVmFsID0gZWxlbWVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgaWYgKCFp
ZEF0dHJWYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUuaWRD
YWNoZSwgaWRBdHRyVmFsLCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQobV9pZENh
Y2hlLCBpZEF0dHJWYWwsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVt
ZW50cy5hZGQoaWRBdHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsK
LSAgICAgICAgICAgICAgICBhcHBlbmQobV9jYWNoZS5uYW1lQ2FjaGUsIG5hbWVBdHRyVmFsLCBl
bGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQobV9uYW1lQ2FjaGUsIG5hbWVBdHRyVmFs
LCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKG5hbWVB
dHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwOSwxMyArMTgx
LDEzIEBACiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1l
bnQtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgaWYg
KCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRB
dHRyVmFsLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUuaWRDYWNoZSwg
aWRBdHRyVmFsLCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQobV9pZENhY2hlLCBp
ZEF0dHJWYWwsIGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5
KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYmICFmb3VuZElucHV0RWxlbWVudHMuY29u
dGFpbnMobmFtZUF0dHJWYWwuaW1wbCgpKSkKLSAgICAgICAgICAgICAgICBhcHBlbmQobV9jYWNo
ZS5uYW1lQ2FjaGUsIG5hbWVBdHRyVmFsLCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBl
bmQobV9uYW1lQ2FjaGUsIG5hbWVBdHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIG1fY2FjaGUuaGFzTmFtZUNhY2hlID0gdHJ1ZTsKKyAgICBzZXRIYXNOYW1lQ2FjaGUo
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJl
dmlzaW9uIDEyMTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw2IEBACiAgICAgLCBtX2Jhc2UoYmFzZSkKIHsK
ICAgICBBU1NFUlQobV9iYXNlKTsKLSAgICBtX2NhY2hlLmNsZWFyKCk7CiB9CiAKIFBhc3NPd25Q
dHI8SFRNTENvbGxlY3Rpb24+IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUoTm9kZSogYmFzZSwgQ29s
bGVjdGlvblR5cGUgdHlwZSkKQEAgLTkxLDExICs5MCwxMyBAQAogewogICAgIHVpbnQ2NF90IGRv
Y3ZlcnNpb24gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihtX2Jhc2UtPmRvY3VtZW50KCkp
LT5kb21UcmVlVmVyc2lvbigpOwogCi0gICAgaWYgKG1fY2FjaGUudmVyc2lvbiA9PSBkb2N2ZXJz
aW9uKQorICAgIGlmIChtX2NhY2hlZFRyZWVWZXJzaW9uID09IGRvY3ZlcnNpb24pCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fY2FjaGUuY2xlYXIoKTsKLSAgICBtX2NhY2hlLnZlcnNpb24gPSBk
b2N2ZXJzaW9uOworICAgIGNsZWFyQ2FjaGUoKTsKKyAgICBtX2lkQ2FjaGUuY2xlYXIoKTsKKyAg
ICBtX25hbWVDYWNoZS5jbGVhcigpOworICAgIG1fY2FjaGVkVHJlZVZlcnNpb24gPSBkb2N2ZXJz
aW9uOwogfQogCiBpbmxpbmUgYm9vbCBIVE1MQ29sbGVjdGlvbjo6aXNBY2NlcHRhYmxlRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KSBjb25zdApAQCAtMTkwLDMyICsxOTEsMjggQEAKIHVuc2lnbmVk
IEhUTUxDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIGludmFsaWRhdGVDYWNoZUlm
TmVlZGVkKCk7Ci0gICAgaWYgKCFtX2NhY2hlLmhhc0xlbmd0aCkgewotICAgICAgICBtX2NhY2hl
Lmxlbmd0aCA9IGNhbGNMZW5ndGgoKTsKLSAgICAgICAgbV9jYWNoZS5oYXNMZW5ndGggPSB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gbV9jYWNoZS5sZW5ndGg7CisgICAgaWYgKCFpc0xlbmd0aENh
Y2hlVmFsaWQoKSkKKyAgICAgICAgc2V0Q2FjaGVkTGVuZ3RoKGNhbGNMZW5ndGgoKSk7CisgICAg
cmV0dXJuIGNhY2hlZExlbmd0aCgpOwogfQogCiBOb2RlKiBIVE1MQ29sbGVjdGlvbjo6aXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwot
ICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYgbV9jYWNoZS5wb3NpdGlvbiA9PSBpbmRleCkKLSAg
ICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKLSAgICBpZiAobV9jYWNoZS5oYXNMZW5ndGgg
JiYgbV9jYWNoZS5sZW5ndGggPD0gaW5kZXgpCisgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQoKSAm
JiBjYWNoZWRJdGVtT2Zmc2V0KCkgPT0gaW5kZXgpCisgICAgICAgIHJldHVybiBjYWNoZWRJdGVt
KCk7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmIGNhY2hlZExlbmd0aCgpIDw9IGlu
ZGV4KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fY2FjaGUuY3VycmVudCB8fCBtX2Nh
Y2hlLnBvc2l0aW9uID4gaW5kZXgpIHsKLSAgICAgICAgbV9jYWNoZS5jdXJyZW50ID0gaXRlbUFm
dGVyKDApOwotICAgICAgICBtX2NhY2hlLnBvc2l0aW9uID0gMDsKLSAgICAgICAgaWYgKCFtX2Nh
Y2hlLmN1cnJlbnQpCisgICAgaWYgKCFpc0l0ZW1DYWNoZVZhbGlkKCkgfHwgY2FjaGVkSXRlbU9m
ZnNldCgpID4gaW5kZXgpIHsKKyAgICAgICAgc2V0Q2FjaGVkSXRlbShpdGVtQWZ0ZXIoMCksIDAp
OworICAgICAgICBpZiAoIWNhY2hlZEl0ZW0oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBFbGVtZW50KiBlID0gbV9jYWNoZS5jdXJyZW50OwotICAgIGZvciAodW5zaWduZWQg
cG9zID0gbV9jYWNoZS5wb3NpdGlvbjsgZSAmJiBwb3MgPCBpbmRleDsgcG9zKyspCisgICAgRWxl
bWVudCogZSA9IGNhY2hlZEl0ZW0oKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGNhY2hlZEl0
ZW1PZmZzZXQoKTsgZSAmJiBwb3MgPCBpbmRleDsgcG9zKyspCiAgICAgICAgIGUgPSBpdGVtQWZ0
ZXIoZSk7Ci0gICAgbV9jYWNoZS5jdXJyZW50ID0gZTsKLSAgICBtX2NhY2hlLnBvc2l0aW9uID0g
aW5kZXg7Ci0gICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKKyAgICBzZXRDYWNoZWRJdGVtKGUs
IGluZGV4KTsKKyAgICByZXR1cm4gY2FjaGVkSXRlbSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoSFRNTEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC0yNTUsMjcgKzI1MiwyOCBAQAogICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0
dHJpYnV0ZS4KICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwogCi0gICAgZm9yIChFbGVt
ZW50KiBlID0gaXRlbUFmdGVyKDApOyBlOyBlID0gaXRlbUFmdGVyKGUpKSB7CisgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgZm9yIChFbGVtZW50KiBlID0gaXRlbUFmdGVyKDApOyBlOyBlID0gaXRl
bUFmdGVyKGUpLCBpKyspIHsKICAgICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKGUsIC8qIGNo
ZWNrTmFtZSAqLyBmYWxzZSwgbmFtZSkpIHsKLSAgICAgICAgICAgIG1fY2FjaGUuY3VycmVudCA9
IGU7CisgICAgICAgICAgICBzZXRDYWNoZWRJdGVtKGUsIGkpOwogICAgICAgICAgICAgcmV0dXJu
IGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKEVsZW1lbnQqIGUgPSBpdGVtQWZ0ZXIo
MCk7IGU7IGUgPSBpdGVtQWZ0ZXIoZSkpIHsKKyAgICBpID0gMDsKKyAgICBmb3IgKEVsZW1lbnQq
IGUgPSBpdGVtQWZ0ZXIoMCk7IGU7IGUgPSBpdGVtQWZ0ZXIoZSksIGkrKykgewogICAgICAgICBp
ZiAoY2hlY2tGb3JOYW1lTWF0Y2goZSwgLyogY2hlY2tOYW1lICovIHRydWUsIG5hbWUpKSB7Ci0g
ICAgICAgICAgICBtX2NhY2hlLmN1cnJlbnQgPSBlOworICAgICAgICAgICAgc2V0Q2FjaGVkSXRl
bShlLCBpKTsKICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9jYWNoZS5jdXJyZW50ID0gMDsKICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBIVE1MQ29sbGVj
dGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNoZS5oYXNOYW1l
Q2FjaGUpCisgICAgaWYgKGhhc05hbWVDYWNoZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBm
b3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtQWZ0ZXIoMCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBp
dGVtQWZ0ZXIoZWxlbWVudCkpIHsKQEAgLTI4NSwxMiArMjgzLDEyIEBACiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldE5hbWVBdHRyaWJ1dGUoKTsK
ICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwZW5kKG1f
Y2FjaGUuaWRDYWNoZSwgaWRBdHRyVmFsLCBlKTsKKyAgICAgICAgICAgIGFwcGVuZChtX2lkQ2Fj
aGUsIGlkQXR0clZhbCwgZSk7CiAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYm
IGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAobV90eXBlICE9IERvY0FsbCB8fCBuYW1lU2hv
dWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkpCi0gICAgICAgICAgICBhcHBlbmQobV9jYWNo
ZS5uYW1lQ2FjaGUsIG5hbWVBdHRyVmFsLCBlKTsKKyAgICAgICAgICAgIGFwcGVuZChtX25hbWVD
YWNoZSwgbmFtZUF0dHJWYWwsIGUpOwogICAgIH0KIAotICAgIG1fY2FjaGUuaGFzTmFtZUNhY2hl
ID0gdHJ1ZTsKKyAgICBzZXRIYXNOYW1lQ2FjaGUoKTsKIH0KIAogYm9vbCBIVE1MQ29sbGVjdGlv
bjo6aGFzTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTMwMSwx
MiArMjk5LDEyIEBACiAgICAgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQoKTsKICAgICB1cGRhdGVO
YW1lQ2FjaGUoKTsKIAotICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBpZENhY2hlID0gbV9jYWNo
ZS5pZENhY2hlLmdldChuYW1lLmltcGwoKSkpIHsKKyAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiog
aWRDYWNoZSA9IG1faWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7CiAgICAgICAgIGlmICghaWRD
YWNoZS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
aWYgKFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZSA9IG1fY2FjaGUubmFtZUNhY2hlLmdldChu
YW1lLmltcGwoKSkpIHsKKyAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogbmFtZUNhY2hlID0gbV9u
YW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSkgewogICAgICAgICBpZiAoIW5hbWVDYWNoZS0+aXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzIzLDggKzMyMSw4
IEBACiAgICAgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQoKTsKICAgICB1cGRhdGVOYW1lQ2FjaGUo
KTsKIAotICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlkUmVzdWx0cyA9IG1fY2FjaGUuaWRDYWNoZS5n
ZXQobmFtZS5pbXBsKCkpOwotICAgIFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVSZXN1bHRzID0gbV9j
YWNoZS5uYW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKKyAgICBWZWN0b3I8RWxlbWVudCo+KiBp
ZFJlc3VsdHMgPSBtX2lkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKKyAgICBWZWN0b3I8RWxlbWVu
dCo+KiBuYW1lUmVzdWx0cyA9IG1fbmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpZFJlc3VsdHMgJiYgaSA8IGlkUmVzdWx0cy0+c2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoaWRSZXN1bHRzLT5hdChpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxMzY5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDEzICs0OSwxMyBAQAogICAgIGludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7CiAg
ICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogaWRDYWNo
ZSA9IG1fY2FjaGUuaWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7CisgICAgaWYgKFZlY3RvcjxF
bGVtZW50Kj4qIGlkQ2FjaGUgPSBtX2lkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSkgewogICAgICAg
ICBpZiAoaW5kZXggPCBpZENhY2hlLT5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gaWRDYWNo
ZS0+YXQoaW5kZXgpOwogICAgICAgICBpbmRleCAtPSBpZENhY2hlLT5zaXplKCk7CiAgICAgfQog
Ci0gICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZSA9IG1fY2FjaGUubmFtZUNhY2hl
LmdldChuYW1lLmltcGwoKSkpIHsKKyAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogbmFtZUNhY2hl
ID0gbV9uYW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSkgewogICAgICAgICBpZiAoaW5kZXggPCBu
YW1lQ2FjaGUtPnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lQ2FjaGUtPmF0KGluZGV4
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lv
biAxMjEzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDggKzM2LDYzIEBACiBjbGFzcyBFbGVtZW50OwogY2xhc3MgTm9kZUxp
c3Q7CiAKLWNsYXNzIEhUTUxDb2xsZWN0aW9uIHsKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBt
ZXJnZWQgd2l0aCBEeW5hbWljTm9kZUNvbGxlY3Rpb25CYXNlCitjbGFzcyBIVE1MQ29sbGVjdGlv
bkJhc2UgewogcHVibGljOgorICAgIEhUTUxDb2xsZWN0aW9uQmFzZSgpIHsgbV9jYWNoZS5jbGVh
cigpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlLmN1cnJlbnQ7IH0KKyAgICBFbGVtZW50KiBjYWNoZWRJdGVtKCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZS5jdXJyZW50OyB9CisgICAgdW5zaWduZWQgY2FjaGVkSXRlbU9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGUubGVuZ3RoOyB9CisgICAgdW5zaWduZWQgY2Fj
aGVkQXJyYXlQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGUuZWxlbWVudHNBcnJheVBv
c2l0aW9uOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldENhY2hlZEl0ZW0oRWxlbWVudCog
aXRlbSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9jYWNoZS5jdXJy
ZW50ID0gaXRlbTsKKyAgICAgICAgbV9jYWNoZS5wb3NpdGlvbiA9IG9mZnNldDsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldENhY2hlZEl0ZW1XaXRoQXJyYXlQb3NpdGlvbihFbGVt
ZW50KiBpdGVtLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGFycmF5UG9zaXRpb24pIGNvbnN0
CisgICAgeworICAgICAgICBtX2NhY2hlLmN1cnJlbnQgPSBpdGVtOworICAgICAgICBtX2NhY2hl
LnBvc2l0aW9uID0gb2Zmc2V0OworICAgICAgICBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlv
biA9IGFycmF5UG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlLmhhc0xlbmd0aDsgfQorICAgIHVuc2lnbmVkIGNhY2hl
ZExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGUubGVuZ3RoOyB9CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldENhY2hlZExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CisgICAgewor
ICAgICAgICBtX2NhY2hlLmxlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgbV9jYWNoZS5oYXNMZW5n
dGggPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaGFzTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZS5oYXNOYW1lQ2FjaGU7IH0KKyAgICB2b2lkIHNldEhhc05hbWVDYWNoZSgpIGNv
bnN0IHsgbV9jYWNoZS5oYXNOYW1lQ2FjaGUgPSB0cnVlOyB9CisgICAgdm9pZCBjbGVhckNhY2hl
KCkgY29uc3QgeyBtX2NhY2hlLmNsZWFyKCk7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIHN0
cnVjdCB7CisgICAgICAgIEVsZW1lbnQqIGN1cnJlbnQ7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0
aW9uOworICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGVsZW1lbnRz
QXJyYXlQb3NpdGlvbjsKKyAgICAgICAgYm9vbCBoYXNMZW5ndGg7CisgICAgICAgIGJvb2wgaGFz
TmFtZUNhY2hlOworCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAg
ICBjdXJyZW50ID0gMDsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGxl
bmd0aCA9IDA7CisgICAgICAgICAgICBlbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOworICAgICAg
ICAgICAgaGFzTGVuZ3RoID0gZmFsc2U7CisgICAgICAgICAgICBoYXNOYW1lQ2FjaGUgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gbV9jYWNoZTsKK307CisKK2NsYXNzIEhUTUxDb2xsZWN0aW9u
IDogcHVibGljIEhUTUxDb2xsZWN0aW9uQmFzZSB7CitwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8SFRNTENvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSk7
CiAgICAgdmlydHVhbCB+SFRNTENvbGxlY3Rpb24oKTsKIApAQCAtNTMsMTUgKzEwOCwyMyBAQAog
ICAgIC8vIE5vbi1ET00gQVBJCiAgICAgYm9vbCBoYXNOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdDsKICAgICB2b2lkIG5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKSBjb25zdDsKLSAgICBib29sIGhhc0FueUl0
ZW0oKSBjb25zdAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBpbnZh
bGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4gKG1fY2FjaGUuaGFzTGVuZ3Ro
ICYmIG1fY2FjaGUubGVuZ3RoKSB8fCBtX2NhY2hlLmN1cnJlbnQgfHwgaXRlbSgwKTsKKyAgICAg
ICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuICFjYWNoZWRM
ZW5ndGgoKTsKKyAgICAgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAhY2FjaGVkSXRlbSgpOworICAgICAgICByZXR1cm4gIWl0ZW0oMCk7CiAgICAgfQogICAg
IGJvb2wgaGFzRXhhY3RseU9uZUl0ZW0oKSBjb25zdAogICAgIHsKICAgICAgICAgaW52YWxpZGF0
ZUNhY2hlSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIChtX2NhY2hlLmhhc0xlbmd0aCAmJiBt
X2NhY2hlLmxlbmd0aCA9PSAxKSB8fCAobV9jYWNoZS5jdXJyZW50ICYmICFpdGVtQWZ0ZXIobV9j
YWNoZS5jdXJyZW50KSkgfHwgKGl0ZW0oMCkgJiYgIWl0ZW0oMSkpOworICAgICAgICBpZiAoaXNM
ZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkTGVuZ3RoKCkgPT0g
MTsKKyAgICAgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiAh
Y2FjaGVkSXRlbU9mZnNldCgpICYmICFpdGVtKDEpOworICAgICAgICByZXR1cm4gaXRlbSgwKSAm
JiAhaXRlbSgxKTsKICAgICB9CiAKICAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9i
YXNlOyB9CkBAIC03OCwzMSArMTQxLDkgQEAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4gPiBOb2RlQ2FjaGVNYXA7CiAgICAg
c3RhdGljIHZvaWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIEVs
ZW1lbnQqKTsKIAotICAgIG11dGFibGUgc3RydWN0IHsKLSAgICAgICAgTm9kZUNhY2hlTWFwIGlk
Q2FjaGU7Ci0gICAgICAgIE5vZGVDYWNoZU1hcCBuYW1lQ2FjaGU7Ci0gICAgICAgIHVpbnQ2NF90
IHZlcnNpb247Ci0gICAgICAgIEVsZW1lbnQqIGN1cnJlbnQ7Ci0gICAgICAgIHVuc2lnbmVkIHBv
c2l0aW9uOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgICAgIGludCBlbGVtZW50c0Fy
cmF5UG9zaXRpb247Ci0gICAgICAgIGJvb2wgaGFzTGVuZ3RoOwotICAgICAgICBib29sIGhhc05h
bWVDYWNoZTsKKyAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX2lkQ2FjaGU7CisgICAgbXV0YWJs
ZSBOb2RlQ2FjaGVNYXAgbV9uYW1lQ2FjaGU7CiAKLSAgICAgICAgdm9pZCBjbGVhcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlkQ2FjaGUuY2xlYXIoKTsKLSAgICAgICAgICAgIG5hbWVDYWNo
ZS5jbGVhcigpOwotICAgICAgICAgICAgdmVyc2lvbiA9IDA7Ci0gICAgICAgICAgICBjdXJyZW50
ID0gMDsKLSAgICAgICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IDA7
Ci0gICAgICAgICAgICBlbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwotICAgICAgICAgICAgaGFz
TGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgICAgICBoYXNOYW1lQ2FjaGUgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0gbV9jYWNoZTsKLQogcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9yTmFtZU1h
dGNoKEVsZW1lbnQqLCBib29sIGNoZWNrTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdDsKIApAQCAtMTE0LDYgKzE1NSw3IEBACiAgICAgdW5zaWduZWQgbV90eXBlIDogNTsgLy8g
Q29sbGVjdGlvblR5cGUKIAogICAgIE5vZGUqIG1fYmFzZTsKKyAgICBtdXRhYmxlIHVpbnQ2NF90
IG1fY2FjaGVkVHJlZVZlcnNpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150075</attachid>
            <date>2012-06-28 20:40:46 -0700</date>
            <delta_ts>2012-06-29 00:18:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90118-20120628204528.patch</filename>
            <type>text/plain</type>
            <size>36628</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTUxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wNi0yOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSB0aGUgc2FtZSBjYWNo
ZSBpbiBIVE1MQ29sbGVjdGlvbiBhbmQgRHluYW1pY05vZGVMaXN0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgdHdv
IG5ldyBiYXNlIGNsYXNzZXMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIGFuZCBIVE1MQ29sbGVj
dGlvbkNhY2hlQmFzZSB0byBzaGFyZQorICAgICAgICB0aGUgY2FjaGUgb2JqZWN0IGJldHdlZW4g
RHluYW1pY05vZGVMaXN0IGFuZCBIVE1MQ29sbGVjdGlvbi4gSFRNTENvbGxlY3Rpb25DYWNoZUJh
c2UgaW5oZXJpdHMgZnJvbQorICAgICAgICBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgYW5kIGNv
bnRhaW5zIGV4dHJhIGNhY2hlcyBhbmQgYml0IGZsYWdzIGZvciBIVE1MQ29sbGVjdGlvbi4gRHlu
YW1pY05vZGVMaXN0OjpDYWNoZQorICAgICAgICBhbmQgSFRNTENvbGxlY3Rpb246OkNhY2hlIGhh
ZCBiZWVuIHJlbW92ZWQgYW5kIGZsYXR0ZW5lZCBpbnRvIHRoZXNlIHR3byBjbGFzc2VzIGZvciB0
aGUgZWFzeSBpbmhlcml0YW5jZS4KKworICAgICAgICBJbiBEeW5hbWljTm9kZUxpc3QsIGEgdmVy
eSBzdHJhaWdodCBmb3J3YXJkIG9uZS10by1vbmUgbWFwcGluZyBmcm9tIG9sZCBDYWNoZXMgbWVt
YmVyIHZhcmlhYmxlczoKKworICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbSAtPiBjYWNoZWRJdGVt
KCkKKyAgICAgICAgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgLT4gY2FjaGVkSXRlbU9mZnNldCgp
CisgICAgICAgIG1fY2FjaGVzLmNhY2hlZExlbmd0aCAtPiBjYWNoZWRMZW5ndGgoKQorICAgICAg
ICBtX2NhY2hlcy5pc0l0ZW1DYWNoZVZhbGlkIC0+IGlzSXRlbUNhY2hlVmFsaWQoKQorICAgICAg
ICBtX2NhY2hlcy5pc0xlbmd0aENhY2hlVmFsaWQgLT4gaXNMZW5ndGhDYWNoZVZhbGlkKCkKKyAg
ICAgICAgbV9jYWNoZXMudHlwZSAtPiByZW1vdmVkIGJlY2F1c2UgaXQgd2FzIG5ldmVyIHVzZWQu
CisgICAgICAgIG1fY2FjaGVzLnJvb3RlZEF0RG9jdW1lbnQgLT4gaXNSb290ZWRBdERvY3VtZW50
KCkKKyAgICAgICAgbV9jYWNoZXMuc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlIC0+
IHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpCisKKyAgICAgICAgSW4gSFRNTENv
bGxlY3Rpb24sIHRoZXJlIGlzIG9uZSBzZW1hbnRpYyBjaGFuZ2UgaW4gdGhlIHdheSBpdGVtIGNh
Y2hlIGlzIG1hbmFnZWQuIFByZXZpb3VzbHksIHdlIG9ubHkgaGFkCisgICAgICAgIG1fY2FjaGUu
Y3VycmVudCB3aGljaCB3YXMgdXNlZCBhcyBib3RoIGNhY2hlZEl0ZW0oKSBhbmQgaXNJdGVtQ2Fj
aGVWYWxpZCgpIChub3QgdmFsaWQgd2hlbiBjdXJyZW50IGlzIG51bGwpLgorICAgICAgICBUaGVy
ZSBhcmUgc29tZSBhc3ltbWV0cmljIGNvZGUgY2hhbmdlcyBkdWUgdG8gb25lLXRvLW1hbnkgcmVs
YXRpb25zaGlwLiBBbHNvLCBhbGwgbWV0aG9kIG5hbWVzIGhhdmUgYmVlbiB1cGRhdGVkCisgICAg
ICAgIHRvIHVzZSB0aGF0IG9mIER5bmFtaWNOb2RlTGlzdCB0ZXJtaW5vbG9neS4gVGh1cyB3ZSBo
YXZlIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGVuY2U6CisKKyAgICAgICAgbV9jYWNoZS5jdXJy
ZW50IC0+IGNhY2hlZEl0ZW0oKSAvIGlzSXRlbUNhY2hlVmFsaWQoKQorICAgICAgICBtX2NhY2hl
LnBvc2l0aW9uIC0+IGNhY2hlZEl0ZW1PZmZzZXQoKQorICAgICAgICBtX2NhY2hlLmxlbmd0aCAt
PiBjYWNoZWRMZW5ndGgoKQorICAgICAgICBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbiAt
PiBjYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0KCkKKyAgICAgICAgbV9jYWNoZS5oYXNMZW5ndGgg
LT4gaXNMZW5ndGhDYWNoZVZhbGlkKCkKKyAgICAgICAgbV9jYWNoZS5oYXNOYW1lQ2FjaGUgLT4g
aGFzTmFtZUNhY2hlKCkgLyBzZXRIYXNOYW1lQ2FjaGUoKQorICAgICAgICBtX2NhY2hlLmlkQ2Fj
aGUgLT4gaWRDYWNoZSgpIC8gYWRkSWRDYWNoZSgpCisgICAgICAgIG1fY2FjaGUubmFtZUNhY2hl
IC0+IGlkQ2FjaGUoKSAvIGFkZE5hbWVDYWNoZSgpCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHdl
IGhhZCB0byByZW5hbWUgSFRNTENvbGxlY3Rpb246OmNsZWFyQ2FjaGUgdG8gaW52YWxpZGF0ZUNh
Y2hlIHRvIGF2b2lkIHRoZSBuYW1lIGNvbGxpc2lvbiB3aXRoCisgICAgICAgIEhUTUxDb2xsZWN0
aW9uQ2FjaGVCYXNlOjpjbGVhckNhY2hlLgorCisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9k
ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6bGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3
YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxp
c3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWlj
U3VidHJlZU5vZGVMaXN0OjppdGVtKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6
CisgICAgICAgIChEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjppc1Jvb3RlZEF0RG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91bGRJ
bnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05v
ZGVMaXN0Q2FjaGVCYXNlOjppc0l0ZW1DYWNoZVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2FjaGVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmNhY2hlZEl0ZW1PZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjppc0xlbmd0aENhY2hlVmFsaWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpjYWNoZWRMZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzZXRMZW5ndGhDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OnNldEl0ZW1D
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmNsZWFy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9k
ZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxp
c3Q6OmludmFsaWRhdGVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6
OnJvb3ROb2RlKToKKyAgICAgICAgKER5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgICogaHRtbC9I
VE1MQWxsQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlv
bjo6bmFtZWRJdGVtV2l0aEluZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpIVE1MQ29sbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmludmFsaWRhdGVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aXNBY2NlcHRhYmxlRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aXRlbUFmdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNr
Rm9yTmFtZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aGFzTmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmQpOgorICAgICAgICAqIGh0bWwvSFRN
TENvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpIVE1MQ29sbGVjdGlvbkNhY2hl
QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6dHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6Y2xlYXJDYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6c2V0SXRlbUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpjYWNoZWRFbGVt
ZW50c0FycmF5T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVC
YXNlOjppbmNsdWRlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25D
YWNoZUJhc2U6OmNhY2hlVHJlZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb25DYWNoZUJhc2U6OmlkQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b25DYWNoZUJhc2U6Om5hbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlv
bkNhY2hlQmFzZTo6YXBwZW5kSWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVj
dGlvbkNhY2hlQmFzZTo6YXBwZW5kTmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uQ2FjaGVCYXNlOjpoYXNOYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb25DYWNoZUJhc2U6OnNldEhhc05hbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppc0VtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpoYXNFeGFjdGx5T25lSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6YmFzZSk6CisgICAgICAgIChIVE1MQ29sbGVjdGlvbik6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29s
bGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhU
TUxOYW1lQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6aW52YWxpZGF0ZVNlbGVjdGVk
SXRlbXMpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAg
ICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oOgorICAgICAgICAoSFRNTFRhYmxl
Um93c0NvbGxlY3Rpb24pOgorCiAyMDEyLTA2LTI4ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFu
Y29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBmaWx0ZXIgdXJsKCkgZnVuY3Rp
b24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjE0
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDE1ICszOSwxNCBAQCBDaGlsZE5vZGVMaXN0Ojp+Q2hpbGROb2RlTGlzdCgpCiAK
IHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2Fj
aGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVzLmNhY2hlZExl
bmd0aDsKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgIHJldHVybiBjYWNo
ZWRMZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAgICAgZm9yIChOb2RlKiBuID0g
cm9vdE5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgbGVuKys7CiAKLSAgICBtX2NhY2hlcy5jYWNoZWRMZW5ndGggPSBsZW47Ci0gICAgbV9jYWNo
ZXMuaXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBzZXRMZW5ndGhDYWNoZShsZW4pOwog
CiAgICAgcmV0dXJuIGxlbjsKIH0KQEAgLTU3LDI3ICs1NiwyNyBAQCBOb2RlKiBDaGlsZE5vZGVM
aXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7CiAgICAg
Tm9kZSogbiA9IHJvb3ROb2RlKCktPmZpcnN0Q2hpbGQoKTsKIAotICAgIGlmIChtX2NhY2hlcy5p
c0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX2NhY2hlcy5sYXN0SXRl
bU9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy5sYXN0SXRlbTsKLSAgICAgICAg
Ci0gICAgICAgIGludCBkaWZmID0gaW5kZXggLSBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldDsKKyAg
ICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCgpKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBjYWNoZWRJ
dGVtT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkSXRlbSgpOworCisgICAgICAg
IGludCBkaWZmID0gaW5kZXggLSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVk
IGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0IDwgaW5kZXgpIHsKLSAgICAgICAg
ICAgIG4gPSBtX2NhY2hlcy5sYXN0SXRlbTsKLSAgICAgICAgICAgIHBvcyA9IG1fY2FjaGVzLmxh
c3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgbiA9IGNhY2hlZEl0ZW0oKTsKKyAgICAgICAgICAg
IHBvcyA9IGNhY2hlZEl0ZW1PZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
X2NhY2hlcy5pc0xlbmd0aENhY2hlVmFsaWQpIHsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fY2Fj
aGVzLmNhY2hlZExlbmd0aCkKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGNhY2hlZExlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAgICAgaW50IGRpZmYgPSBpbmRleCAtIHBvczsKICAgICAgICAgdW5zaWduZWQgZGlzdCA9
IGFicyhkaWZmKTsKLSAgICAgICAgaWYgKGRpc3QgPiBtX2NhY2hlcy5jYWNoZWRMZW5ndGggLSAx
IC0gaW5kZXgpIHsKKyAgICAgICAgaWYgKGRpc3QgPiBjYWNoZWRMZW5ndGgoKSAtIDEgLSBpbmRl
eCkgewogICAgICAgICAgICAgbiA9IHJvb3ROb2RlKCktPmxhc3RDaGlsZCgpOwotICAgICAgICAg
ICAgcG9zID0gbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIHBvcyA9IGNh
Y2hlZExlbmd0aCgpIC0gMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTQsOSArOTMsNyBAQCBO
b2RlKiBDaGlsZE5vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgfQogCiAgICAgaWYg
KG4pIHsKLSAgICAgICAgbV9jYWNoZXMubGFzdEl0ZW0gPSBuOwotICAgICAgICBtX2NhY2hlcy5s
YXN0SXRlbU9mZnNldCA9IHBvczsKLSAgICAgICAgbV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCA9
IHRydWU7CisgICAgICAgIHNldEl0ZW1DYWNoZShuLCBwb3MpOwogICAgICAgICByZXR1cm4gbjsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAxMjE0ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+
RHluYW1pY1N1YnRyZWVOCiAKIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0
aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAg
ICAgcmV0dXJuIG1fY2FjaGVzLmNhY2hlZExlbmd0aDsKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZh
bGlkKCkpCisgICAgICAgIHJldHVybiBjYWNoZWRMZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAgICAgTm9kZSogcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOwpAQCAtNDMs
OCArNDMsNyBAQCB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoCiAgICAg
Zm9yIChOb2RlKiBuID0gcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUocm9vdE5vZGUpKQogICAgICAgICBsZW5ndGggKz0gbi0+aXNFbGVtZW50Tm9kZSgp
ICYmIG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CiAKLSAgICBtX2NhY2hl
cy5jYWNoZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgbV9jYWNoZXMuaXNMZW5ndGhDYWNoZVZhbGlk
ID0gdHJ1ZTsKKyAgICBzZXRMZW5ndGhDYWNoZShsZW5ndGgpOwogCiAgICAgcmV0dXJuIGxlbmd0
aDsKIH0KQEAgLTU2LDkgKzU1LDcgQEAgTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRl
bUZvcndhcgogICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0
Tm9kZShyb290Tm9kZSkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2Rl
TWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAgICAgICBpZiAoIXJl
bWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtID0gbjsK
LSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAg
ICAgICAgICAgICBtX2NhY2hlcy5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBzZXRJdGVtQ2FjaGUobiwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC0tcmVtYWluaW5nT2Zmc2V0OwpAQCAtNzUsOSAr
NzIsNyBAQCBOb2RlKiBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtQmFja3dhCiAgICAgZm9y
IChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290Tm9k
ZSkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNl
dCkgewotICAgICAgICAgICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAg
ICAgICBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICBt
X2NhY2hlcy5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZXRJdGVt
Q2FjaGUobiwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICsrcmVtYWluaW5nT2Zmc2V0OwpAQCAtOTEsMTIgKzg2LDEyIEBAIE5v
ZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0odW5zaWcKIHsKICAgICBpbnQgcmVtYWlu
aW5nT2Zmc2V0ID0gb2Zmc2V0OwogICAgIE5vZGUqIHN0YXJ0ID0gcm9vdE5vZGUoKS0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmIChtX2NhY2hlcy5pc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlm
IChvZmZzZXQgPT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4g
bV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgIGlmIChvZmZzZXQgPiBtX2NhY2hlcy5sYXN0SXRl
bU9mZnNldCB8fCBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNldCkgewot
ICAgICAgICAgICAgc3RhcnQgPSBtX2NhY2hlcy5sYXN0SXRlbTsKLSAgICAgICAgICAgIHJlbWFp
bmluZ09mZnNldCAtPSBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldDsKKyAgICBpZiAoaXNJdGVtQ2Fj
aGVWYWxpZCgpKSB7CisgICAgICAgIGlmIChvZmZzZXQgPT0gY2FjaGVkSXRlbU9mZnNldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKKyAgICAgICAgaWYgKG9mZnNldCA+IGNh
Y2hlZEl0ZW1PZmZzZXQoKSB8fCBjYWNoZWRJdGVtT2Zmc2V0KCkgLSBvZmZzZXQgPCBvZmZzZXQp
IHsKKyAgICAgICAgICAgIHN0YXJ0ID0gY2FjaGVkSXRlbSgpOworICAgICAgICAgICAgcmVtYWlu
aW5nT2Zmc2V0IC09IGNhY2hlZEl0ZW1PZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMTIxNDgwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw2OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
Tm9kZTsKIAotY2xhc3MgRHluYW1pY05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKK2NsYXNz
IER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSB7CitwdWJsaWM6CisgICAgZW51bSBSb290VHlwZSB7
CisgICAgICAgIFJvb3RlZEF0Tm9kZSwKKyAgICAgICAgUm9vdGVkQXREb2N1bWVudCwKKyAgICB9
OworCisgICAgZW51bSBJbnZhbGlkYXRpb25UeXBlIHsKKyAgICAgICAgQWx3YXlzSW52YWxpZGF0
ZSwKKyAgICAgICAgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UsCisgICAgfTsKKwor
ICAgIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZShSb290VHlwZSByb290VHlwZSwgSW52YWxpZGF0
aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKQorICAgICAgICA6IG1fcm9vdGVkQXREb2N1bWVudChy
b290VHlwZSA9PSBSb290ZWRBdERvY3VtZW50KQorICAgICAgICAsIG1fc2hvdWxkSW52YWxpZGF0
ZU9uQXR0cmlidXRlQ2hhbmdlKGludmFsaWRhdGlvblR5cGUgPT0gQWx3YXlzSW52YWxpZGF0ZSkK
KyAgICB7CisgICAgICAgIGNsZWFyQ2FjaGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNSb290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290
ZWRBdERvY3VtZW50OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRhdGVP
bkF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0
cmlidXRlQ2hhbmdlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJ
dGVtQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtQ2FjaGVWYWxpZDsgfQorICAg
IEFMV0FZU19JTkxJTkUgTm9kZSogY2FjaGVkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVk
SXRlbTsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2FjaGVkSXRlbU9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVkSXRlbU9mZnNldDsgfQorCisgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMZW5ndGhDYWNoZVZh
bGlkOyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjYWNoZWRMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZExlbmd0aDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRMZW5n
dGhDYWNoZSh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICBtX2NhY2hlZExl
bmd0aCA9IGxlbmd0aDsKKyAgICAgICAgbV9pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAg
IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SXRlbUNhY2hlKE5vZGUqIGl0ZW0sIHVuc2ln
bmVkIG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fY2FjaGVkSXRlbSA9IGl0ZW07Cisg
ICAgICAgIG1fY2FjaGVkSXRlbU9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgbV9pc0l0ZW1DYWNo
ZVZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyQ2FjaGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgbV9jYWNoZWRJdGVtID0gMDsKKyAgICAgICAgbV9pc0xlbmd0aENhY2hlVmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgbV9pc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7CisgICAgfQor
Citwcml2YXRlOgorICAgIG11dGFibGUgTm9kZSogbV9jYWNoZWRJdGVtOworICAgIG11dGFibGUg
dW5zaWduZWQgbV9jYWNoZWRMZW5ndGg7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEl0
ZW1PZmZzZXQ7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2lzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7
CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2lzSXRlbUNhY2hlVmFsaWQgOiAxOworCisgICAgLy8g
RnJvbSBEeW5hbWljTm9kZUxpc3QKKyAgICBjb25zdCB1bnNpZ25lZCBtX3Jvb3RlZEF0RG9jdW1l
bnQgOiAxOworICAgIGNvbnN0IHVuc2lnbmVkIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRl
Q2hhbmdlIDogMTsKK307CisKK2NsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlz
dCwgcHVibGljIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSBO
b2RlTGlzdFR5cGUgewogICAgICAgICBDaGlsZE5vZGVMaXN0VHlwZSwKQEAgLTQ1LDE3ICsxMDYs
OSBAQCBwdWJsaWM6CiAgICAgICAgIExhYmVsc05vZGVMaXN0VHlwZSwKICAgICAgICAgTWljcm9E
YXRhSXRlbUxpc3RUeXBlLAogICAgIH07Ci0gICAgZW51bSBSb290VHlwZSB7Ci0gICAgICAgIFJv
b3RlZEF0Tm9kZSwKLSAgICAgICAgUm9vdGVkQXREb2N1bWVudCwKLSAgICB9OwotICAgIGVudW0g
SW52YWxpZGF0aW9uVHlwZSB7Ci0gICAgICAgIEFsd2F5c0ludmFsaWRhdGUsCi0gICAgICAgIERv
Tm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAotICAgIH07CiAgICAgRHluYW1pY05vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gb3duZXJOb2RlLCBSb290VHlwZSByb290VHlwZSwgSW52YWxp
ZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKQotICAgICAgICA6IG1fb3duZXJOb2RlKG93bmVy
Tm9kZSkKLSAgICAgICAgLCBtX2NhY2hlcyhyb290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKKyAg
ICAgICAgOiBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2Uocm9vdFR5cGUsIGludmFsaWRhdGlvblR5
cGUpCisgICAgICAgICwgbV9vd25lck5vZGUob3duZXJOb2RlKQogICAgIHsgfQogICAgIHZpcnR1
YWwgfkR5bmFtaWNOb2RlTGlzdCgpIHsgfQogCkBAIC02Niw1MiArMTE5LDIxIEBAIHB1YmxpYzoK
IAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICBOb2RlKiBvd25l
ck5vZGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS5nZXQoKTsgfQotICAgIGJvb2wgaXNS
b290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZXMucm9vdGVkQXREb2N1bWVu
dDsgfQotICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZXMuc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlOyB9Ci0g
ICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSB7IG1fY2FjaGVzLnJlc2V0KCk7IH0KKyAgICB2b2lk
IGludmFsaWRhdGVDYWNoZSgpIHsgY2xlYXJDYWNoZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBO
b2RlKiByb290Tm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAobV9jYWNoZXMucm9vdGVk
QXREb2N1bWVudCAmJiBtX293bmVyTm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICBpZiAoaXNS
b290ZWRBdERvY3VtZW50KCkgJiYgbV9vd25lck5vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAg
ICAgIHJldHVybiBtX293bmVyTm9kZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgcmV0dXJuIG1fb3du
ZXJOb2RlLmdldCgpOwogICAgIH0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyTm9kZS0+ZG9jdW1lbnQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0
Y2hlcyhFbGVtZW50KikgY29uc3QgPSAwOwogCi0gICAgc3RydWN0IENhY2hlcyB7Ci0gICAgICAg
IENhY2hlcyhSb290VHlwZSByb290VHlwZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25U
eXBlKQotICAgICAgICAgICAgOiByb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IFJvb3RlZEF0
RG9jdW1lbnQpCi0gICAgICAgICAgICAsIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5n
ZShpbnZhbGlkYXRpb25UeXBlID09IEFsd2F5c0ludmFsaWRhdGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlc2V0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbGFzdEl0ZW0gPSAwOwotICAgICAgICAgICAgaXNMZW5ndGhDYWNo
ZVZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAgICAgICAgdW5zaWduZWQgY2Fj
aGVkTGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKLSAgICAgICAgdW5z
aWduZWQgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKLSAgICAgICAgdW5zaWduZWQgaXNJdGVtQ2Fj
aGVWYWxpZCA6IDE7Ci0KLSAgICAgICAgLy8gRm9sbG93aW5nIGZsYWdzIHNob3VsZCBiZWxvbmcg
aW4gRHluYW1pY1N1YnRyZWVOb2RlIGJ1dCBhcmUgaGVyZSBmb3IgYml0LXBhY2tpbmcuCi0gICAg
ICAgIHVuc2lnbmVkIHR5cGUgOiA0OwotICAgICAgICB1bnNpZ25lZCByb290ZWRBdERvY3VtZW50
IDogMTsKLSAgICAgICAgdW5zaWduZWQgc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdl
IDogMTsKLSAgICB9OwotCi0gICAgUmVmUHRyPE5vZGU+IG1fb3duZXJOb2RlOwotICAgIG11dGFi
bGUgQ2FjaGVzIG1fY2FjaGVzOwotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0R5bmFt
aWNOb2RlTGlzdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICBSZWZQdHI8
Tm9kZT4gbV9vd25lck5vZGU7CiB9OwogCiBjbGFzcyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IDog
cHVibGljIER5bmFtaWNOb2RlTGlzdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNDgwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE1ICs0OSwxNSBA
QCBOb2RlKiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtV2l0aEluCiAgICAgaW52YWxpZGF0
ZUNhY2hlSWZOZWVkZWQoKTsKICAgICB1cGRhdGVOYW1lQ2FjaGUoKTsKIAotICAgIGlmIChWZWN0
b3I8RWxlbWVudCo+KiBpZENhY2hlID0gbV9jYWNoZS5pZENhY2hlLmdldChuYW1lLmltcGwoKSkp
IHsKLSAgICAgICAgaWYgKGluZGV4IDwgaWRDYWNoZS0+c2l6ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGlkQ2FjaGUtPmF0KGluZGV4KTsKLSAgICAgICAgaW5kZXggLT0gaWRDYWNoZS0+c2l6ZSgp
OworICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBjYWNoZSA9IGlkQ2FjaGUobmFtZSkpIHsKKyAg
ICAgICAgaWYgKGluZGV4IDwgY2FjaGUtPnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNo
ZS0+YXQoaW5kZXgpOworICAgICAgICBpbmRleCAtPSBjYWNoZS0+c2l6ZSgpOwogICAgIH0KIAot
ICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBuYW1lQ2FjaGUgPSBtX2NhY2hlLm5hbWVDYWNoZS5n
ZXQobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IG5hbWVDYWNoZS0+c2l6ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIG5hbWVDYWNoZS0+YXQoaW5kZXgpOworICAgIGlmIChWZWN0
b3I8RWxlbWVudCo+KiBjYWNoZSA9IG5hbWVDYWNoZShuYW1lKSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBjYWNoZS0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlLT5hdChpbmRleCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
b2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNDgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEyICs3MSwxMCBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRJbmNsdWRlQ2hpbGRyZW4oQ29sbGVjCiB9CiAKIEhUTUxDb2xsZWN0aW9uOjpI
VE1MQ29sbGVjdGlvbihOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSB0eXBlKQotICAgIDogbV9p
bmNsdWRlQ2hpbGRyZW4oc2hvdWxkSW5jbHVkZUNoaWxkcmVuKHR5cGUpKQotICAgICwgbV90eXBl
KHR5cGUpCisgICAgOiBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZSh0eXBlLCBzaG91bGRJbmNsdWRl
Q2hpbGRyZW4odHlwZSkpCiAgICAgLCBtX2Jhc2UoYmFzZSkKIHsKICAgICBBU1NFUlQobV9iYXNl
KTsKLSAgICBtX2NhY2hlLmNsZWFyKCk7CiB9CiAKIFBhc3NPd25QdHI8SFRNTENvbGxlY3Rpb24+
IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUoTm9kZSogYmFzZSwgQ29sbGVjdGlvblR5cGUgdHlwZSkK
QEAgLTkyLDI0ICs5MCwyMyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGVJ
Zk5lCiB7CiAgICAgdWludDY0X3QgZG9jdmVyc2lvbiA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KG1fYmFzZS0+ZG9jdW1lbnQoKSktPmRvbVRyZWVWZXJzaW9uKCk7CiAKLSAgICBpZiAobV9j
YWNoZS52ZXJzaW9uID09IGRvY3ZlcnNpb24pCisgICAgaWYgKGNhY2hlVHJlZVZlcnNpb24oKSA9
PSBkb2N2ZXJzaW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NhY2hlLmNsZWFyKCk7Ci0g
ICAgbV9jYWNoZS52ZXJzaW9uID0gZG9jdmVyc2lvbjsKKyAgICBjbGVhckNhY2hlKGRvY3ZlcnNp
b24pOwogfQogCi12b2lkIEhUTUxDb2xsZWN0aW9uOjpjbGVhckNhY2hlKCkKK3ZvaWQgSFRNTENv
bGxlY3Rpb246OmludmFsaWRhdGVDYWNoZSgpCiB7Ci0gICAgbV9jYWNoZS5jbGVhcigpOworICAg
IGNsZWFyQ2FjaGUoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4obV9iYXNlLT5kb2N1bWVudCgp
KS0+ZG9tVHJlZVZlcnNpb24oKSk7CiB9CiAKIGlubGluZSBib29sIEhUTUxDb2xsZWN0aW9uOjpp
c0FjY2VwdGFibGVFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFl
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIShtX3R5cGUgPT0gRG9jQWxsIHx8IG1fdHlwZSA9
PSBOb2RlQ2hpbGRyZW4pKQorICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICEo
dHlwZSgpID09IERvY0FsbCB8fCB0eXBlKCkgPT0gTm9kZUNoaWxkcmVuKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUoKSkg
ewogICAgIGNhc2UgRG9jSW1hZ2VzOgogICAgICAgICByZXR1cm4gZWxlbWVudC0+aGFzTG9jYWxO
YW1lKGltZ1RhZyk7CiAgICAgY2FzZSBEb2NTY3JpcHRzOgpAQCAtMTY2LDE1ICsxNjMsMTUgQEAg
c3RhdGljIE5vZGUqIG5leHROb2RlT3JTaWJsaW5nKE5vZGUqIGJhcwogICAgIHJldHVybiBpbmNs
dWRlQ2hpbGRyZW4gPyBub2RlLT50cmF2ZXJzZU5leHROb2RlKGJhc2UpIDogbm9kZS0+dHJhdmVy
c2VOZXh0U2libGluZyhiYXNlKTsKIH0KIAotRWxlbWVudCogSFRNTENvbGxlY3Rpb246Oml0ZW1B
ZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QKK0VsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjpp
dGVtQWZ0ZXIoTm9kZSogcHJldmlvdXMpIGNvbnN0CiB7CiAgICAgTm9kZSogY3VycmVudDsKICAg
ICBpZiAoIXByZXZpb3VzKQogICAgICAgICBjdXJyZW50ID0gbV9iYXNlLT5maXJzdENoaWxkKCk7
CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50ID0gbmV4dE5vZGVPclNpYmxpbmcobV9iYXNlLCBw
cmV2aW91cywgbV9pbmNsdWRlQ2hpbGRyZW4pOworICAgICAgICBjdXJyZW50ID0gbmV4dE5vZGVP
clNpYmxpbmcobV9iYXNlLCBwcmV2aW91cywgaW5jbHVkZUNoaWxkcmVuKCkpOwogCi0gICAgZm9y
ICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0Tm9kZU9yU2libGluZyhtX2Jhc2UsIGN1cnJlbnQs
IG1faW5jbHVkZUNoaWxkcmVuKSkgeworICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4
dE5vZGVPclNpYmxpbmcobV9iYXNlLCBjdXJyZW50LCBpbmNsdWRlQ2hpbGRyZW4oKSkpIHsKICAg
ICAgICAgaWYgKCFjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJy
ZW50KTsKQEAgLTE5OCwzMiArMTk1LDI4IEBAIHVuc2lnbmVkIEhUTUxDb2xsZWN0aW9uOjpjYWxj
TGVuZ3RoKCkgY28KIHVuc2lnbmVkIEhUTUxDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25zdAogewog
ICAgIGludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7Ci0gICAgaWYgKCFtX2NhY2hlLmhhc0xlbmd0
aCkgewotICAgICAgICBtX2NhY2hlLmxlbmd0aCA9IGNhbGNMZW5ndGgoKTsKLSAgICAgICAgbV9j
YWNoZS5oYXNMZW5ndGggPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9jYWNoZS5sZW5ndGg7
CisgICAgaWYgKCFpc0xlbmd0aENhY2hlVmFsaWQoKSkKKyAgICAgICAgc2V0TGVuZ3RoQ2FjaGUo
Y2FsY0xlbmd0aCgpKTsKKyAgICByZXR1cm4gY2FjaGVkTGVuZ3RoKCk7CiB9CiAKIE5vZGUqIEhU
TUxDb2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGludmFsaWRh
dGVDYWNoZUlmTmVlZGVkKCk7Ci0gICAgaWYgKG1fY2FjaGUuY3VycmVudCAmJiBtX2NhY2hlLnBv
c2l0aW9uID09IGluZGV4KQotICAgICAgICByZXR1cm4gbV9jYWNoZS5jdXJyZW50OwotICAgIGlm
IChtX2NhY2hlLmhhc0xlbmd0aCAmJiBtX2NhY2hlLmxlbmd0aCA8PSBpbmRleCkKKyAgICBpZiAo
aXNJdGVtQ2FjaGVWYWxpZCgpICYmIGNhY2hlZEl0ZW1PZmZzZXQoKSA9PSBpbmRleCkKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkgJiYg
Y2FjaGVkTGVuZ3RoKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9j
YWNoZS5jdXJyZW50IHx8IG1fY2FjaGUucG9zaXRpb24gPiBpbmRleCkgewotICAgICAgICBtX2Nh
Y2hlLmN1cnJlbnQgPSBpdGVtQWZ0ZXIoMCk7Ci0gICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSAw
OwotICAgICAgICBpZiAoIW1fY2FjaGUuY3VycmVudCkKKyAgICBpZiAoIWlzSXRlbUNhY2hlVmFs
aWQoKSB8fCBjYWNoZWRJdGVtT2Zmc2V0KCkgPiBpbmRleCkgeworICAgICAgICBzZXRJdGVtQ2Fj
aGUoaXRlbUFmdGVyKDApLCAwKTsKKyAgICAgICAgaWYgKCFjYWNoZWRJdGVtKCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgRWxlbWVudCogZSA9IG1fY2FjaGUuY3VycmVudDsK
LSAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IG1fY2FjaGUucG9zaXRpb247IGUgJiYgcG9zIDwgaW5k
ZXg7IHBvcysrKQorICAgIE5vZGUqIGUgPSBjYWNoZWRJdGVtKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBwb3MgPSBjYWNoZWRJdGVtT2Zmc2V0KCk7IGUgJiYgcG9zIDwgaW5kZXg7IHBvcysrKQogICAg
ICAgICBlID0gaXRlbUFmdGVyKGUpOwotICAgIG1fY2FjaGUuY3VycmVudCA9IGU7Ci0gICAgbV9j
YWNoZS5wb3NpdGlvbiA9IGluZGV4OwotICAgIHJldHVybiBtX2NhY2hlLmN1cnJlbnQ7CisgICAg
c2V0SXRlbUNhY2hlKGUsIGluZGV4KTsKKyAgICByZXR1cm4gY2FjaGVkSXRlbSgpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQpCkBAIC0yNDgsNyArMjQxLDcgQEAgYm9vbCBIVE1MQ29sbGVjdGlvbjo6
Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgIGlmICghY2hlY2tOYW1lKQogICAgICAgICByZXR1cm4g
ZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBuYW1lOwogCi0gICAgaWYgKG1fdHlwZSA9PSBEb2NBbGwg
JiYgIW5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGUpKQorICAgIGlmICh0eXBlKCkg
PT0gRG9jQWxsICYmICFuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGUtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBu
YW1lICYmIGUtPmdldElkQXR0cmlidXRlKCkgIT0gbmFtZTsKQEAgLTI2MywyNyArMjU2LDMwIEBA
IE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXQKICAgICAvLyB0aGF0IGFy
ZSBhbGxvd2VkIGEgbmFtZSBhdHRyaWJ1dGUuCiAgICAgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQo
KTsKIAorICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoRWxlbWVudCogZSA9IGl0ZW1BZnRl
cigwKTsgZTsgZSA9IGl0ZW1BZnRlcihlKSkgewogICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0
Y2goZSwgLyogY2hlY2tOYW1lICovIGZhbHNlLCBuYW1lKSkgewotICAgICAgICAgICAgbV9jYWNo
ZS5jdXJyZW50ID0gZTsKKyAgICAgICAgICAgIHNldEl0ZW1DYWNoZShlLCBpKTsKICAgICAgICAg
ICAgIHJldHVybiBlOwogICAgICAgICB9CisgICAgICAgIGkrKzsKICAgICB9CiAKKyAgICBpID0g
MDsKICAgICBmb3IgKEVsZW1lbnQqIGUgPSBpdGVtQWZ0ZXIoMCk7IGU7IGUgPSBpdGVtQWZ0ZXIo
ZSkpIHsKICAgICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKGUsIC8qIGNoZWNrTmFtZSAqLyB0
cnVlLCBuYW1lKSkgewotICAgICAgICAgICAgbV9jYWNoZS5jdXJyZW50ID0gZTsKKyAgICAgICAg
ICAgIHNldEl0ZW1DYWNoZShlLCBpKTsKICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICB9
CisgICAgICAgIGkrKzsKICAgICB9CiAKLSAgICBtX2NhY2hlLmN1cnJlbnQgPSAwOwogICAgIHJl
dHVybiAwOwogfQogCiB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25z
dAogewotICAgIGlmIChtX2NhY2hlLmhhc05hbWVDYWNoZSkKKyAgICBpZiAoaGFzTmFtZUNhY2hl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGl0ZW1B
ZnRlcigwKTsgZWxlbWVudDsgZWxlbWVudCA9IGl0ZW1BZnRlcihlbGVtZW50KSkgewpAQCAtMjkz
LDEyICsyODksMTIgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgYwog
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElkQXR0cmlidXRl
KCk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXROYW1l
QXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGFwcGVuZChtX2NhY2hlLmlkQ2FjaGUsIGlkQXR0clZhbCwgZSk7Ci0gICAgICAgIGlmICgh
bmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAobV90
eXBlICE9IERvY0FsbCB8fCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkpCi0g
ICAgICAgICAgICBhcHBlbmQobV9jYWNoZS5uYW1lQ2FjaGUsIG5hbWVBdHRyVmFsLCBlKTsKKyAg
ICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlKTsKKyAgICAgICAgaWYgKCFuYW1l
QXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYmICh0eXBlKCkg
IT0gRG9jQWxsIHx8IG5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGUpKSkKKyAgICAg
ICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZSk7CiAgICAgfQogCi0gICAgbV9j
YWNoZS5oYXNOYW1lQ2FjaGUgPSB0cnVlOworICAgIHNldEhhc05hbWVDYWNoZSgpOwogfQogCiBi
b29sIEhUTUxDb2xsZWN0aW9uOjpoYXNOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdApAQCAtMzA5LDEzICszMDUsMTMgQEAgYm9vbCBIVE1MQ29sbGVjdGlvbjo6aGFzTmFt
ZWRJdGVtKGNvbnN0IAogICAgIGludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7CiAgICAgdXBkYXRl
TmFtZUNhY2hlKCk7CiAKLSAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogaWRDYWNoZSA9IG1fY2Fj
aGUuaWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgIGlmICghaWRDYWNoZS0+aXNF
bXB0eSgpKQorICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBjYWNoZSA9IGlkQ2FjaGUobmFtZSkp
IHsKKyAgICAgICAgaWYgKCFjYWNoZS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZSA9IG1fY2Fj
aGUubmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSkpIHsKLSAgICAgICAgaWYgKCFuYW1lQ2FjaGUt
PmlzRW1wdHkoKSkKKyAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBuYW1lQ2FjaGUo
bmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWNoZS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzEsOCArMzI3LDggQEAgdm9pZCBIVE1MQ29sbGVjdGlv
bjo6bmFtZWRJdGVtcyhjb25zdCBBdAogICAgIGludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7CiAg
ICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFJlc3VsdHMg
PSBtX2NhY2hlLmlkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICBWZWN0b3I8RWxlbWVudCo+
KiBuYW1lUmVzdWx0cyA9IG1fY2FjaGUubmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSk7CisgICAg
VmVjdG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gaWRDYWNoZShuYW1lKTsKKyAgICBWZWN0b3I8
RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG5hbWVDYWNoZShuYW1lKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGlkUmVzdWx0cyAmJiBpIDwgaWRSZXN1bHRzLT5zaXplKCk7ICsraSkKICAg
ICAgICAgcmVzdWx0LmFwcGVuZChpZFJlc3VsdHMtPmF0KGkpKTsKQEAgLTM0Niw3ICszNDIsNyBA
QCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6dGFnCiAgICAgcmV0dXJuIG1f
YmFzZS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7CiB9CiAKLXZvaWQgSFRNTENvbGxlY3Rp
b246OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmQoTm9k
ZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBFbGVtZW50KiBlbGVtZW50
KQogewogICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5
LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKICAgICBpZiAoIXZlY3RvcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDEyMTQ4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25U
eXBlLmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CkBAIC0zNiw3ICszNyw3MSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBOb2RlTGlzdDsKIAotY2xhc3MgSFRNTENvbGxlY3Rpb24geworY2xhc3MgSFRNTENvbGxl
Y3Rpb25DYWNoZUJhc2UgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIHsKK3B1Ymxp
YzoKKyAgICBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZShDb2xsZWN0aW9uVHlwZSB0eXBlLCBib29s
IGluY2x1ZGVDaGlsZHJlbikKKyAgICAgICAgOiBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UoUm9v
dGVkQXROb2RlLCBBbHdheXNJbnZhbGlkYXRlKSAvLyBUaGVzZSB0d28gZmxhZ3MgYXJlIG5ldmVy
IHVzZWQKKyAgICAgICAgLCBtX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQoMCkKKyAgICAgICAg
LCBtX2NhY2hlVHJlZVZlcnNpb24oMCkKKyAgICAgICAgLCBtX2hhc05hbWVDYWNoZShmYWxzZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2luY2x1ZGVDaGlsZHJlbihpbmNs
dWRlQ2hpbGRyZW4pCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IHR5cGUpOworICAg
IH0KKworICAgIENvbGxlY3Rpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDb2xsZWN0aW9uVHlwZT4obV90eXBlKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBjbGVh
ckNhY2hlKHVpbnQ2NF90IGN1cnJlbnREb21UcmVlVmVyc2lvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2xlYXJDYWNoZSgpOworICAgICAgICBtX2lk
Q2FjaGUuY2xlYXIoKTsKKyAgICAgICAgbV9uYW1lQ2FjaGUuY2xlYXIoKTsKKyAgICAgICAgbV9j
YWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0ID0gMDsKKyAgICAgICAgbV9jYWNoZVRyZWVWZXJzaW9u
ID0gY3VycmVudERvbVRyZWVWZXJzaW9uOworICAgICAgICBtX2hhc05hbWVDYWNoZSA9IGZhbHNl
OworICAgIH0KKworICAgIHVzaW5nIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6c2V0SXRlbUNh
Y2hlOworICAgIHZvaWQgc2V0SXRlbUNhY2hlKE5vZGUqIGl0ZW0sIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgZWxlbWVudHNBcnJheU9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIHNldEl0
ZW1DYWNoZShpdGVtLCBvZmZzZXQpOworICAgICAgICBtX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZz
ZXQgPSBlbGVtZW50c0FycmF5T2Zmc2V0OworICAgIH0KKyAgICB1bnNpZ25lZCBjYWNoZWRFbGVt
ZW50c0FycmF5T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRFbGVtZW50c0FycmF5T2Zm
c2V0OyB9CisKKyAgICBib29sIGluY2x1ZGVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faW5j
bHVkZUNoaWxkcmVuOyB9CisgICAgdWludDY0X3QgY2FjaGVUcmVlVmVyc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVUcmVlVmVyc2lvbjsgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+ID4gTm9kZUNhY2hlTWFwOwor
ICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCB7IHJldHVybiBtX2lkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsgfQorICAgIFZlY3RvcjxF
bGVtZW50Kj4qIG5hbWVDYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSk7IH0KKyAgICB2b2lkIGFwcGVuZElkQ2Fj
aGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7IGFw
cGVuZChtX2lkQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9CisgICAgdm9pZCBhcHBlbmROYW1lQ2Fj
aGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7IGFw
cGVuZChtX25hbWVDYWNoZSwgbmFtZSwgZWxlbWVudCk7IH0KKworICAgIGJvb2wgaGFzTmFtZUNh
Y2hlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYW1lQ2FjaGU7IH0KKyAgICB2b2lkIHNldEhhc05h
bWVDYWNoZSgpIGNvbnN0IHsgbV9oYXNOYW1lQ2FjaGUgPSB0cnVlOyB9CisKK3ByaXZhdGU6Cisg
ICAgdXNpbmcgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjppc1Jvb3RlZEF0RG9jdW1lbnQ7Cisg
ICAgdXNpbmcgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91bGRJbnZhbGlkYXRlT25BdHRy
aWJ1dGVDaGFuZ2U7CisgICAgdXNpbmcgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpjbGVhckNh
Y2hlOworCisgICAgc3RhdGljIHZvaWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIEVsZW1lbnQqKTsKKworICAgIG11dGFibGUgTm9kZUNhY2hlTWFwIG1faWRDYWNo
ZTsKKyAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX25hbWVDYWNoZTsKKyAgICBtdXRhYmxlIHVu
c2lnbmVkIG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldDsKKyAgICBtdXRhYmxlIHVpbnQ2NF90
IG1fY2FjaGVUcmVlVmVyc2lvbjsKKworICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIGJpdCBmbGFn
cyB0byBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgdG8gcGFjayB0aGVtIGJldHRlci4KKyAgICBt
dXRhYmxlIHVuc2lnbmVkIG1faGFzTmFtZUNhY2hlIDogMTsKKyAgICBjb25zdCB1bnNpZ25lZCBt
X3R5cGUgOiA1OyAvLyBDb2xsZWN0aW9uVHlwZQorICAgIGNvbnN0IHVuc2lnbmVkIG1faW5jbHVk
ZUNoaWxkcmVuIDogMTsKK307CisKK2NsYXNzIEhUTUxDb2xsZWN0aW9uIDogcHVibGljIEhUTUxD
b2xsZWN0aW9uQ2FjaGVCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxIVE1M
Q29sbGVjdGlvbj4gY3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlKTsKICAgICB2aXJ0
dWFsIH5IVE1MQ29sbGVjdGlvbigpOwpAQCAtNTYsNTggKzEyMSwzMSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIGludmFsaWRhdGVDYWNoZUlmTmVl
ZGVkKCk7Ci0gICAgICAgIGlmIChtX2NhY2hlLmhhc0xlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
biAhbV9jYWNoZS5sZW5ndGg7Ci0gICAgICAgIHJldHVybiAhbV9jYWNoZS5jdXJyZW50ICYmICFp
dGVtKDApOworICAgICAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gIWNhY2hlZExlbmd0aCgpOworICAgICAgICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuICFjYWNoZWRJdGVtKCk7CisgICAgICAgIHJldHVybiAhaXRlbSgw
KTsKICAgICB9CiAgICAgYm9vbCBoYXNFeGFjdGx5T25lSXRlbSgpIGNvbnN0CiAgICAgewogICAg
ICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgICAgICBpZiAobV9jYWNoZS5oYXNM
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZS5sZW5ndGggPT0gMTsKLSAgICAgICAg
aWYgKG1fY2FjaGUuY3VycmVudCkKLSAgICAgICAgICAgIHJldHVybiAhbV9jYWNoZS5wb3NpdGlv
biAmJiAhaXRlbSgxKTsKKyAgICAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgpID09IDE7CisgICAgICAgIGlmIChpc0l0ZW1DYWNo
ZVZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkSXRlbSgpICYmICFjYWNoZWRJdGVt
T2Zmc2V0KCkgJiYgIWl0ZW0oMSk7CiAgICAgICAgIHJldHVybiBpdGVtKDApICYmICFpdGVtKDEp
OwogICAgIH0KIAogICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KLSAg
ICBDb2xsZWN0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVj
dGlvblR5cGU+KG1fdHlwZSk7IH0KIAotICAgIHZvaWQgY2xlYXJDYWNoZSgpOworICAgIHZvaWQg
aW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpIGNv
bnN0OwogcHJvdGVjdGVkOgogICAgIEhUTUxDb2xsZWN0aW9uKE5vZGUqIGJhc2UsIENvbGxlY3Rp
b25UeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB0eXBl
ZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4g
PiBOb2RlQ2FjaGVNYXA7Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNv
bnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQqKTsKLQotICAgIG11dGFibGUgc3RydWN0IHsKLSAg
ICAgICAgTm9kZUNhY2hlTWFwIGlkQ2FjaGU7Ci0gICAgICAgIE5vZGVDYWNoZU1hcCBuYW1lQ2Fj
aGU7Ci0gICAgICAgIHVpbnQ2NF90IHZlcnNpb247Ci0gICAgICAgIEVsZW1lbnQqIGN1cnJlbnQ7
Ci0gICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGg7Ci0g
ICAgICAgIGludCBlbGVtZW50c0FycmF5UG9zaXRpb247Ci0gICAgICAgIGJvb2wgaGFzTGVuZ3Ro
OwotICAgICAgICBib29sIGhhc05hbWVDYWNoZTsKLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWRDYWNoZS5jbGVhcigpOwotICAgICAgICAgICAgbmFtZUNh
Y2hlLmNsZWFyKCk7Ci0gICAgICAgICAgICB2ZXJzaW9uID0gMDsKLSAgICAgICAgICAgIGN1cnJl
bnQgPSAwOwotICAgICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgICAgICAgICAgbGVuZ3RoID0g
MDsKLSAgICAgICAgICAgIGVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBo
YXNMZW5ndGggPSBmYWxzZTsKLSAgICAgICAgICAgIGhhc05hbWVDYWNoZSA9IGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfSBtX2NhY2hlOworICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbUFmdGVyKE5v
ZGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9yTmFtZU1hdGNoKEVsZW1l
bnQqLCBib29sIGNoZWNrTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKQEAg
LTExNiw5ICsxNTQsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0FjY2VwdGFibGVFbGVtZW50
KEVsZW1lbnQqKSBjb25zdDsKIAotICAgIGJvb2wgbV9pbmNsdWRlQ2hpbGRyZW4gOiAxOwotICAg
IHVuc2lnbmVkIG1fdHlwZSA6IDU7IC8vIENvbGxlY3Rpb25UeXBlCi0KICAgICBOb2RlKiBtX2Jh
c2U7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24u
Y3BwCShyZXZpc2lvbiAxMjE0ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29s
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDI4ICs4NCwyMyBAQCBOb2RlKiBIVE1M
Rm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiB7CiAgICAgaW52YWxpZGF0ZUNhY2hlSWZO
ZWVkZWQoKTsKIAotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYgbV9jYWNoZS5wb3NpdGlvbiA9
PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKKyAgICBpZiAoaXNJdGVt
Q2FjaGVWYWxpZCgpICYmIGNhY2hlZEl0ZW1PZmZzZXQoKSA9PSBpbmRleCkKKyAgICAgICAgcmV0
dXJuIGNhY2hlZEl0ZW0oKTsKIAotICAgIGlmIChtX2NhY2hlLmhhc0xlbmd0aCAmJiBtX2NhY2hl
Lmxlbmd0aCA8PSBpbmRleCkKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkgJiYgY2FjaGVk
TGVuZ3RoKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFtX2NhY2hl
LmN1cnJlbnQgfHwgbV9jYWNoZS5wb3NpdGlvbiA+IGluZGV4KSB7Ci0gICAgICAgIG1fY2FjaGUu
Y3VycmVudCA9IDA7Ci0gICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSAwOwotICAgICAgICBtX2Nh
Y2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAgfQorICAgIGlmICghaXNJdGVtQ2Fj
aGVWYWxpZCgpIHx8IGNhY2hlZEl0ZW1PZmZzZXQoKSA+IGluZGV4KQorICAgICAgICBzZXRJdGVt
Q2FjaGUoMCwgMCwgMCk7CiAKICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50
Kj4mIGVsZW1lbnRzQXJyYXkgPSBmb3JtQ29udHJvbEVsZW1lbnRzKCk7Ci0gICAgdW5zaWduZWQg
Y3VycmVudEluZGV4ID0gbV9jYWNoZS5wb3NpdGlvbjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6
ZSgpOyBpKyspIHsKKyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBjYWNoZWRJdGVtT2Zmc2V0
KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0KCk7
IGkgPCBlbGVtZW50c0FycmF5LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChlbGVtZW50c0Fy
cmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAgICAgICAgICBpZiAo
aW5kZXggPT0gY3VycmVudEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZS5wb3NpdGlv
biA9IGluZGV4OwotICAgICAgICAgICAgICAgIG1fY2FjaGUuY3VycmVudCA9IGVsZW1lbnQ7Ci0g
ICAgICAgICAgICAgICAgbV9jYWNoZS5lbGVtZW50c0FycmF5UG9zaXRpb24gPSBpOworICAgICAg
ICAgICAgICAgIHNldEl0ZW1DYWNoZShlbGVtZW50LCBpbmRleCwgaSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAKQEAgLTE1Niw3ICsxNTEsNyBAQCBO
b2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zCiAKIHZvaWQgSFRNTEZvcm1D
b2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlLmhh
c05hbWVDYWNoZSkKKyAgICBpZiAoaGFzTmFtZUNhY2hlKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGZvdW5kSW5wdXRFbGVtZW50czsKQEAgLTE3
MCwxMSArMTY1LDExIEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUK
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJW
YWwgPSBlbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBpZiAoIWlkQXR0
clZhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmQobV9jYWNoZS5pZENhY2hl
LCBpZEF0dHJWYWwsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRB
dHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRk
KGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFuYW1l
QXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsKSB7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kKG1fY2FjaGUubmFtZUNhY2hlLCBuYW1lQXR0clZhbCwgZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCBlbGVtZW50KTsK
ICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKG5hbWVBdHRyVmFsLmltcGwo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4NywxMyArMTgyLDEzIEBAIHZvaWQg
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXROYW1l
QXR0cmlidXRlKCk7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZv
dW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkKLSAgICAgICAgICAg
ICAgICBhcHBlbmQobV9jYWNoZS5pZENhY2hlLCBpZEF0dHJWYWwsIGVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgICAg
IGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAm
JiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKG5hbWVBdHRyVmFsLmltcGwoKSkpCi0gICAg
ICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUubmFtZUNhY2hlLCBuYW1lQXR0clZhbCwgZWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCBlbGVtZW50
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY2FjaGUuaGFzTmFtZUNhY2hlID0gdHJ1ZTsK
KyAgICBzZXRIYXNOYW1lQ2FjaGUoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNDgwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIEhUTUxOYW1lQ29sbGVjdGlvbjo6SFRNTE5hbWVDb2xsZWN0aW9uKEQKIHsKIH0K
IAotRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0ZXIoRWxlbWVudCogcHJldmlv
dXMpIGNvbnN0CitFbGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihOb2RlKiBw
cmV2aW91cykgY29uc3QKIHsKICAgICBBU1NFUlQocHJldmlvdXMgIT0gYmFzZSgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE0
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTE5hbWVD
b2xsZWN0aW9uKERvY3VtZW50KiwgQ29sbGVjdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSk7CiAKLSAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihFbGVtZW50KikgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBFbGVtZW50KiBpdGVtQWZ0ZXIoTm9kZSopIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTIxNDgwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxMCw3ICs3MTAsNyBAQCBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgSFRNTFNlbGVjdEVs
CiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjppbnZhbGlkYXRlU2VsZWN0ZWRJdGVtcygpCiB7CiAg
ICAgaWYgKG1fc2VsZWN0ZWRPcHRpb25zQ29sbGVjdGlvbikKLSAgICAgICAgbV9zZWxlY3RlZE9w
dGlvbnNDb2xsZWN0aW9uLT5jbGVhckNhY2hlKCk7CisgICAgICAgIG1fc2VsZWN0ZWRPcHRpb25z
Q29sbGVjdGlvbi0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFJlY2FsY0xpc3RJdGVtcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNDgwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2MSw5ICsxNjEsOSBAQCBQYXNzT3duUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBI
VE1MCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbih0YWJs
ZSkpOwogfQogCi1FbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6aXRlbUFmdGVyKEVs
ZW1lbnQqIHByZXZpb3VzKSBjb25zdAorRWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246
Oml0ZW1BZnRlcihOb2RlKiBwcmV2aW91cykgY29uc3QKIHsKLSAgICBBU1NFUlQoIXByZXZpb3Vz
IHx8IHByZXZpb3VzLT5oYXNMb2NhbE5hbWUodHJUYWcpKTsKKyAgICBBU1NFUlQoIXByZXZpb3Vz
IHx8IChwcmV2aW91cy0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQocHJldmlvdXMp
LT5oYXNMb2NhbE5hbWUodHJUYWcpKSk7CiAgICAgcmV0dXJuIHJvd0FmdGVyKHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnQqPihiYXNlKCkpLCBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVt
ZW50Kj4ocHJldmlvdXMpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlUm93c0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNDgwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24o
SFRNTFRhYmxlRWxlbWVudCopOwogCi0gICAgdmlydHVhbCBFbGVtZW50KiBpdGVtQWZ0ZXIoRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbUFmdGVyKE5vZGUqKSBjb25z
dCBPVkVSUklERTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150098</attachid>
            <date>2012-06-29 00:18:30 -0700</date>
            <delta_ts>2012-06-29 00:21:32 -0700</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>bug-90118-20120629002312.patch</filename>
            <type>text/plain</type>
            <size>36646</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wNi0yOSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSB0aGUgc2FtZSBjYWNo
ZSBpbiBIVE1MQ29sbGVjdGlvbiBhbmQgRHluYW1pY05vZGVMaXN0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgdHdv
IG5ldyBiYXNlIGNsYXNzZXMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIGFuZCBIVE1MQ29sbGVj
dGlvbkNhY2hlQmFzZSB0byBzaGFyZQorICAgICAgICB0aGUgY2FjaGUgb2JqZWN0IGJldHdlZW4g
RHluYW1pY05vZGVMaXN0IGFuZCBIVE1MQ29sbGVjdGlvbi4gSFRNTENvbGxlY3Rpb25DYWNoZUJh
c2UgaW5oZXJpdHMgZnJvbQorICAgICAgICBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgYW5kIGNv
bnRhaW5zIGV4dHJhIGNhY2hlcyBhbmQgYml0IGZsYWdzIGZvciBIVE1MQ29sbGVjdGlvbi4gRHlu
YW1pY05vZGVMaXN0OjpDYWNoZQorICAgICAgICBhbmQgSFRNTENvbGxlY3Rpb246OkNhY2hlIGhh
ZCBiZWVuIHJlbW92ZWQgYW5kIGZsYXR0ZW5lZCBpbnRvIHRoZXNlIHR3byBjbGFzc2VzIGZvciB0
aGUgZWFzeSBpbmhlcml0YW5jZS4KKworICAgICAgICBJbiBEeW5hbWljTm9kZUxpc3QsIHdlIGhh
dmUgYSB2ZXJ5IHN0cmFpZ2h0IGZvcndhcmQgb25lLXRvLW9uZSBtYXBwaW5nIGZyb20gb2xkIENh
Y2hlcyBtZW1iZXIgdmFyaWFibGVzOgorCisgICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtIC0+IGNh
Y2hlZEl0ZW0oKQorICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldCAtPiBjYWNoZWRJdGVt
T2Zmc2V0KCkKKyAgICAgICAgbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0+IGNhY2hlZExlbmd0aCgp
CisgICAgICAgIG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQgLT4gaXNJdGVtQ2FjaGVWYWxpZCgp
CisgICAgICAgIG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCAtPiBpc0xlbmd0aENhY2hlVmFs
aWQoKQorICAgICAgICBtX2NhY2hlcy50eXBlIC0+IHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgbmV2
ZXIgdXNlZC4KKyAgICAgICAgbV9jYWNoZXMucm9vdGVkQXREb2N1bWVudCAtPiBpc1Jvb3RlZEF0
RG9jdW1lbnQoKQorICAgICAgICBtX2NhY2hlcy5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVD
aGFuZ2UgLT4gc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkKKworICAgICAgICBJ
biBIVE1MQ29sbGVjdGlvbiwgdGhlcmUgaXMgb25lIHNlbWFudGljIGNoYW5nZSBpbiB0aGUgd2F5
IGl0ZW0gY2FjaGUgaXMgbWFuYWdlZC4gUHJldmlvdXNseSwgd2Ugb25seSBoYWQKKyAgICAgICAg
bV9jYWNoZS5jdXJyZW50IHdoaWNoIHdhcyB1c2VkIGFzIGJvdGggY2FjaGVkSXRlbSgpIGFuZCBp
c0l0ZW1DYWNoZVZhbGlkKCkgKG5vdCB2YWxpZCB3aGVuIGN1cnJlbnQgaXMgbnVsbCkuCisgICAg
ICAgIFRoZXJlIGFyZSBzb21lIGFzeW1tZXRyaWMgY29kZSBjaGFuZ2VzIGR1ZSB0byBvbmUtdG8t
bWFueSByZWxhdGlvbnNoaXAuIEFsc28sIGFsbCBtZXRob2QgbmFtZXMgaGF2ZSBiZWVuIHVwZGF0
ZWQKKyAgICAgICAgdG8gdXNlIHRoYXQgb2YgRHluYW1pY05vZGVMaXN0IHRlcm1pbm9sb2d5LiBU
aHVzIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjb3JyZXNwb25kZW5jZToKKworICAgICAgICBtX2Nh
Y2hlLmN1cnJlbnQgLT4gY2FjaGVkSXRlbSgpIC8gaXNJdGVtQ2FjaGVWYWxpZCgpCisgICAgICAg
IG1fY2FjaGUucG9zaXRpb24gLT4gY2FjaGVkSXRlbU9mZnNldCgpCisgICAgICAgIG1fY2FjaGUu
bGVuZ3RoIC0+IGNhY2hlZExlbmd0aCgpCisgICAgICAgIG1fY2FjaGUuZWxlbWVudHNBcnJheVBv
c2l0aW9uIC0+IGNhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQoKQorICAgICAgICBtX2NhY2hlLmhh
c0xlbmd0aCAtPiBpc0xlbmd0aENhY2hlVmFsaWQoKQorICAgICAgICBtX2NhY2hlLmhhc05hbWVD
YWNoZSAtPiBoYXNOYW1lQ2FjaGUoKSAvIHNldEhhc05hbWVDYWNoZSgpCisgICAgICAgIG1fY2Fj
aGUuaWRDYWNoZSAtPiBpZENhY2hlKCkgLyBhZGRJZENhY2hlKCkKKyAgICAgICAgbV9jYWNoZS5u
YW1lQ2FjaGUgLT4gaWRDYWNoZSgpIC8gYWRkTmFtZUNhY2hlKCkKKworICAgICAgICBJbiBhZGRp
dGlvbiwgd2UgaGFkIHRvIHJlbmFtZSBIVE1MQ29sbGVjdGlvbjo6Y2xlYXJDYWNoZSB0byBpbnZh
bGlkYXRlQ2FjaGUgdG8gYXZvaWQgdGhlIG5hbWUgY29sbGlzaW9uIHdpdGgKKyAgICAgICAgSFRN
TENvbGxlY3Rpb25DYWNoZUJhc2U6OmNsZWFyQ2FjaGUuCisKKyAgICAgICAgKiBkb20vQ2hpbGRO
b2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6aXRlbSk6CisgICAgICAgICogZG9tL0R5
bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVM
aXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9k
ZUxpc3QuaDoKKyAgICAgICAgKER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzUm9vdGVk
QXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6
OnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzSXRlbUNhY2hlVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpjYWNoZWRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2FjaGVkSXRlbU9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzTGVuZ3RoQ2FjaGVWYWxp
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmNhY2hlZExl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OnNldExl
bmd0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6
c2V0SXRlbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFz
ZTo6Y2xlYXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNO
b2RlTGlzdDo6cm9vdE5vZGUpOgorICAgICAgICAoRHluYW1pY05vZGVMaXN0KToKKyAgICAgICAg
KiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbGxD
b2xsZWN0aW9uOjpuYW1lZEl0ZW1XaXRoSW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppc0FjY2VwdGFibGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppdGVtQWZ0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlv
bjo6Y2hlY2tGb3JOYW1lTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246
Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpoYXNOYW1lZEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6CisgICAgICAgICog
aHRtbC9IVE1MQ29sbGVjdGlvbi5oOgorICAgICAgICAoSFRNTENvbGxlY3Rpb25DYWNoZUJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OkhUTUxDb2xsZWN0
aW9uQ2FjaGVCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNl
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpjbGVh
ckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpzZXRJ
dGVtQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmNh
Y2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b25DYWNoZUJhc2U6OmluY2x1ZGVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29s
bGVjdGlvbkNhY2hlQmFzZTo6Y2FjaGVUcmVlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6aWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29sbGVjdGlvbkNhY2hlQmFzZTo6bmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmRJZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmROYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6Omhhc05hbWVDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6c2V0SGFzTmFtZUNhY2hlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omhhc0V4YWN0bHlPbmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpiYXNlKToKKyAgICAgICAgKEhUTUxDb2xs
ZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAgICAqIGh0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlv
bjo6aXRlbUFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oOgorICAg
ICAgICAoSFRNTE5hbWVDb2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjppbnZhbGlkYXRl
U2VsZWN0ZWRJdGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6aXRlbUFmdGVy
KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmg6CisgICAgICAgIChI
VE1MVGFibGVSb3dzQ29sbGVjdGlvbik6CisKIDIwMTItMDYtMjggIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFjIGJ1aWxkIGZpeCBhZnRlciByMTIxNTE4LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxNTIzKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxNSArMzksMTQgQEAgQ2hpbGROb2RlTGlzdDo6fkNoaWxkTm9kZUxpc3QoKQogCiB1bnNp
Z25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlcy5p
c0xlbmd0aENhY2hlVmFsaWQpCi0gICAgICAgIHJldHVybiBtX2NhY2hlcy5jYWNoZWRMZW5ndGg7
CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkTGVu
Z3RoKCk7CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogICAgIGZvciAoTm9kZSogbiA9IHJvb3RO
b2RlKCktPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGxl
bisrOwogCi0gICAgbV9jYWNoZXMuY2FjaGVkTGVuZ3RoID0gbGVuOwotICAgIG1fY2FjaGVzLmlz
TGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgc2V0TGVuZ3RoQ2FjaGUobGVuKTsKIAogICAg
IHJldHVybiBsZW47CiB9CkBAIC01NywyNyArNTYsMjcgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6
aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwogICAgIE5vZGUq
IG4gPSByb290Tm9kZSgpLT5maXJzdENoaWxkKCk7CiAKLSAgICBpZiAobV9jYWNoZXMuaXNJdGVt
Q2FjaGVWYWxpZCkgewotICAgICAgICBpZiAoaW5kZXggPT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZz
ZXQpCi0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGlmZiA9IGluZGV4IC0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQ7CisgICAgaWYg
KGlzSXRlbUNhY2hlVmFsaWQoKSkgeworICAgICAgICBpZiAoaW5kZXggPT0gY2FjaGVkSXRlbU9m
ZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKKworICAgICAgICBpbnQg
ZGlmZiA9IGluZGV4IC0gY2FjaGVkSXRlbU9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBkaXN0
ID0gYWJzKGRpZmYpOwogICAgICAgICBpZiAoZGlzdCA8IGluZGV4KSB7Ci0gICAgICAgICAgICBu
ID0gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy5sYXN0SXRl
bU9mZnNldDsKKyAgICAgICAgICAgIG4gPSBjYWNoZWRJdGVtKCk7CisgICAgICAgICAgICBwb3Mg
PSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9jYWNo
ZXMuaXNMZW5ndGhDYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2NhY2hlcy5j
YWNoZWRMZW5ndGgpCisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKSB7CisgICAgICAgIGlm
IChpbmRleCA+PSBjYWNoZWRMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAg
ICAgIGludCBkaWZmID0gaW5kZXggLSBwb3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMo
ZGlmZik7Ci0gICAgICAgIGlmIChkaXN0ID4gbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0gMSAtIGlu
ZGV4KSB7CisgICAgICAgIGlmIChkaXN0ID4gY2FjaGVkTGVuZ3RoKCkgLSAxIC0gaW5kZXgpIHsK
ICAgICAgICAgICAgIG4gPSByb290Tm9kZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHBv
cyA9IG1fY2FjaGVzLmNhY2hlZExlbmd0aCAtIDE7CisgICAgICAgICAgICBwb3MgPSBjYWNoZWRM
ZW5ndGgoKSAtIDE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk0LDkgKzkzLDcgQEAgTm9kZSog
Q2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIH0KIAogICAgIGlmIChuKSB7
Ci0gICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtID0gbjsKLSAgICAgICAgbV9jYWNoZXMubGFzdEl0
ZW1PZmZzZXQgPSBwb3M7Ci0gICAgICAgIG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVl
OworICAgICAgICBzZXRJdGVtQ2FjaGUobiwgcG9zKTsKICAgICAgICAgcmV0dXJuIG47CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24g
MTIxNTIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFt
aWNTdWJ0cmVlTgogCiB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBj
b25zdAogewotICAgIGlmIChtX2NhY2hlcy5pc0xlbmd0aENhY2hlVmFsaWQpCi0gICAgICAgIHJl
dHVybiBtX2NhY2hlcy5jYWNoZWRMZW5ndGg7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgp
KQorICAgICAgICByZXR1cm4gY2FjaGVkTGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOwogICAgIE5vZGUqIHJvb3ROb2RlID0gdGhpcy0+cm9vdE5vZGUoKTsKQEAgLTQzLDggKzQz
LDcgQEAgdW5zaWduZWQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6bGVuZ3RoKAogICAgIGZvciAo
Tm9kZSogbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3ROb2RlKSkKICAgICAgICAgbGVuZ3RoICs9IG4tPmlzRWxlbWVudE5vZGUoKSAmJiBu
b2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOwogCi0gICAgbV9jYWNoZXMuY2Fj
aGVkTGVuZ3RoID0gbGVuZ3RoOwotICAgIG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRy
dWU7CisgICAgc2V0TGVuZ3RoQ2FjaGUobGVuZ3RoKTsKIAogICAgIHJldHVybiBsZW5ndGg7CiB9
CkBAIC01Niw5ICs1NSw3IEBAIE5vZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3
YXIKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
cm9vdE5vZGUpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNo
ZXMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5p
bmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbSA9IG47Ci0gICAg
ICAgICAgICAgICAgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgbV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
c2V0SXRlbUNhY2hlKG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAtLXJlbWFpbmluZ09mZnNldDsKQEAgLTc1LDkgKzcyLDcg
QEAgTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5vZGUpKSB7
CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNoZXMoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsK
LSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAg
bV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9jYWNo
ZXMuaXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2V0SXRlbUNhY2hl
KG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICArK3JlbWFpbmluZ09mZnNldDsKQEAgLTkxLDEyICs4NiwxMiBAQCBOb2RlKiBE
eW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtKHVuc2lnCiB7CiAgICAgaW50IHJlbWFpbmluZ09m
ZnNldCA9IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IHJvb3ROb2RlKCktPmZpcnN0Q2hpbGQo
KTsKLSAgICBpZiAobV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICBpZiAob2Zm
c2V0ID09IG1fY2FjaGVzLmxhc3RJdGVtT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIG1fY2Fj
aGVzLmxhc3RJdGVtOwotICAgICAgICBpZiAob2Zmc2V0ID4gbV9jYWNoZXMubGFzdEl0ZW1PZmZz
ZXQgfHwgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAg
ICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQgLT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQ7CisgICAgaWYgKGlzSXRlbUNhY2hlVmFs
aWQoKSkgeworICAgICAgICBpZiAob2Zmc2V0ID09IGNhY2hlZEl0ZW1PZmZzZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWNoZWRJdGVtKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBjYWNoZWRJ
dGVtT2Zmc2V0KCkgfHwgY2FjaGVkSXRlbU9mZnNldCgpIC0gb2Zmc2V0IDwgb2Zmc2V0KSB7Cisg
ICAgICAgICAgICBzdGFydCA9IGNhY2hlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJlbWFpbmluZ09m
ZnNldCAtPSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudDsKIGNsYXNzIE5vZGU7
CiAKLWNsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBEeW5h
bWljTm9kZUxpc3RDYWNoZUJhc2UgeworcHVibGljOgorICAgIGVudW0gUm9vdFR5cGUgeworICAg
ICAgICBSb290ZWRBdE5vZGUsCisgICAgICAgIFJvb3RlZEF0RG9jdW1lbnQsCisgICAgfTsKKwor
ICAgIGVudW0gSW52YWxpZGF0aW9uVHlwZSB7CisgICAgICAgIEFsd2F5c0ludmFsaWRhdGUsCisg
ICAgICAgIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAorICAgIH07CisKKyAgICBE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2UoUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5
cGUgaW52YWxpZGF0aW9uVHlwZSkKKyAgICAgICAgOiBtX3Jvb3RlZEF0RG9jdW1lbnQocm9vdFR5
cGUgPT0gUm9vdGVkQXREb2N1bWVudCkKKyAgICAgICAgLCBtX3Nob3VsZEludmFsaWRhdGVPbkF0
dHJpYnV0ZUNoYW5nZShpbnZhbGlkYXRpb25UeXBlID09IEFsd2F5c0ludmFsaWRhdGUpCisgICAg
eworICAgICAgICBjbGVhckNhY2hlKCk7CisgICAgfQorCitwdWJsaWM6CisgICAgQUxXQVlTX0lO
TElORSBib29sIGlzUm9vdGVkQXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdGVkQXRE
b2N1bWVudDsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlT25BdHRy
aWJ1dGVDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzSXRlbUNh
Y2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzSXRlbUNhY2hlVmFsaWQ7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIE5vZGUqIGNhY2hlZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEl0ZW07
IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNhY2hlZEl0ZW1PZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEl0ZW1PZmZzZXQ7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0xlbmd0aENhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGVuZ3RoQ2FjaGVWYWxpZDsg
fQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2FjaGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRMZW5ndGg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVuZ3RoQ2Fj
aGUodW5zaWduZWQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9jYWNoZWRMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEl0ZW1DYWNoZShOb2RlKiBpdGVtLCB1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBtX2NhY2hlZEl0ZW0gPSBpdGVtOworICAgICAg
ICBtX2NhY2hlZEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1faXNJdGVtQ2FjaGVWYWxp
ZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBjbGVhckNhY2hlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fY2FjaGVkSXRlbSA9IDA7CisgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0g
ZmFsc2U7CisgICAgICAgIG1faXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBtdXRhYmxlIE5vZGUqIG1fY2FjaGVkSXRlbTsKKyAgICBtdXRhYmxlIHVuc2ln
bmVkIG1fY2FjaGVkTGVuZ3RoOworICAgIG11dGFibGUgdW5zaWduZWQgbV9jYWNoZWRJdGVtT2Zm
c2V0OworICAgIG11dGFibGUgdW5zaWduZWQgbV9pc0xlbmd0aENhY2hlVmFsaWQgOiAxOworICAg
IG11dGFibGUgdW5zaWduZWQgbV9pc0l0ZW1DYWNoZVZhbGlkIDogMTsKKworICAgIC8vIEZyb20g
RHluYW1pY05vZGVMaXN0CisgICAgY29uc3QgdW5zaWduZWQgbV9yb290ZWRBdERvY3VtZW50IDog
MTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5n
ZSA6IDE7Cit9OworCitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QsIHB1
YmxpYyBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgewogcHVibGljOgogICAgIGVudW0gTm9kZUxp
c3RUeXBlIHsKICAgICAgICAgQ2hpbGROb2RlTGlzdFR5cGUsCkBAIC00NSwxNyArMTA2LDkgQEAg
cHVibGljOgogICAgICAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAgICAgIE1pY3JvRGF0YUl0
ZW1MaXN0VHlwZSwKICAgICB9OwotICAgIGVudW0gUm9vdFR5cGUgewotICAgICAgICBSb290ZWRB
dE5vZGUsCi0gICAgICAgIFJvb3RlZEF0RG9jdW1lbnQsCi0gICAgfTsKLSAgICBlbnVtIEludmFs
aWRhdGlvblR5cGUgewotICAgICAgICBBbHdheXNJbnZhbGlkYXRlLAotICAgICAgICBEb05vdElu
dmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSwKLSAgICB9OwogICAgIER5bmFtaWNOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IG93bmVyTm9kZSwgUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlv
blR5cGUgaW52YWxpZGF0aW9uVHlwZSkKLSAgICAgICAgOiBtX293bmVyTm9kZShvd25lck5vZGUp
Ci0gICAgICAgICwgbV9jYWNoZXMocm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUpCisgICAgICAg
IDogRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlKHJvb3RUeXBlLCBpbnZhbGlkYXRpb25UeXBlKQor
ICAgICAgICAsIG1fb3duZXJOb2RlKG93bmVyTm9kZSkKICAgICB7IH0KICAgICB2aXJ0dWFsIH5E
eW5hbWljTm9kZUxpc3QoKSB7IH0KIApAQCAtNjYsNTIgKzExOSwyMSBAQCBwdWJsaWM6CiAKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgTm9kZSogb3duZXJOb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7IH0KLSAgICBib29sIGlzUm9vdGVk
QXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVzLnJvb3RlZEF0RG9jdW1lbnQ7IH0K
LSAgICBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVzLnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZTsgfQotICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlKCkgeyBtX2NhY2hlcy5yZXNldCgpOyB9CisgICAgdm9pZCBpbnZh
bGlkYXRlQ2FjaGUoKSB7IGNsZWFyQ2FjaGUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgTm9kZSog
cm9vdE5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fY2FjaGVzLnJvb3RlZEF0RG9j
dW1lbnQgJiYgbV9vd25lck5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKGlzUm9vdGVk
QXREb2N1bWVudCgpICYmIG1fb3duZXJOb2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCk7CiAgICAgICAgIHJldHVybiBtX293bmVyTm9k
ZS5nZXQoKTsKICAgICB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9vd25lck5vZGUtPmRvY3VtZW50KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
RWxlbWVudCopIGNvbnN0ID0gMDsKIAotICAgIHN0cnVjdCBDYWNoZXMgewotICAgICAgICBDYWNo
ZXMoUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkK
LSAgICAgICAgICAgIDogcm9vdGVkQXREb2N1bWVudChyb290VHlwZSA9PSBSb290ZWRBdERvY3Vt
ZW50KQotICAgICAgICAgICAgLCBzaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoaW52
YWxpZGF0aW9uVHlwZSA9PSBBbHdheXNJbnZhbGlkYXRlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNldCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxhc3RJdGVtID0gMDsKLSAgICAgICAgICAgIGlzTGVuZ3RoQ2FjaGVWYWxp
ZCA9IGZhbHNlOwotICAgICAgICAgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgTm9kZSogbGFzdEl0ZW07Ci0gICAgICAgIHVuc2lnbmVkIGNhY2hlZExl
bmd0aDsKLSAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIGlzSXRlbUNhY2hlVmFs
aWQgOiAxOwotCi0gICAgICAgIC8vIEZvbGxvd2luZyBmbGFncyBzaG91bGQgYmVsb25nIGluIER5
bmFtaWNTdWJ0cmVlTm9kZSBidXQgYXJlIGhlcmUgZm9yIGJpdC1wYWNraW5nLgotICAgICAgICB1
bnNpZ25lZCB0eXBlIDogNDsKLSAgICAgICAgdW5zaWduZWQgcm9vdGVkQXREb2N1bWVudCA6IDE7
Ci0gICAgICAgIHVuc2lnbmVkIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSA6IDE7
Ci0gICAgfTsKLQotICAgIFJlZlB0cjxOb2RlPiBtX293bmVyTm9kZTsKLSAgICBtdXRhYmxlIENh
Y2hlcyBtX2NhY2hlczsKLQogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljTm9k
ZUxpc3QoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgUmVmUHRyPE5vZGU+
IG1fb3duZXJOb2RlOwogfTsKIAogY2xhc3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCA6IHB1Ymxp
YyBEeW5hbWljTm9kZUxpc3QgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMTUgQEAgTm9k
ZSogSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbVdpdGhJbgogICAgIGludmFsaWRhdGVDYWNo
ZUlmTmVlZGVkKCk7CiAgICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBpZiAoVmVjdG9yPEVs
ZW1lbnQqPiogaWRDYWNoZSA9IG1fY2FjaGUuaWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7Ci0g
ICAgICAgIGlmIChpbmRleCA8IGlkQ2FjaGUtPnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBp
ZENhY2hlLT5hdChpbmRleCk7Ci0gICAgICAgIGluZGV4IC09IGlkQ2FjaGUtPnNpemUoKTsKKyAg
ICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBpZENhY2hlKG5hbWUpKSB7CisgICAgICAg
IGlmIChpbmRleCA8IGNhY2hlLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGUtPmF0
KGluZGV4KTsKKyAgICAgICAgaW5kZXggLT0gY2FjaGUtPnNpemUoKTsKICAgICB9CiAKLSAgICBp
ZiAoVmVjdG9yPEVsZW1lbnQqPiogbmFtZUNhY2hlID0gbV9jYWNoZS5uYW1lQ2FjaGUuZ2V0KG5h
bWUuaW1wbCgpKSkgewotICAgICAgICBpZiAoaW5kZXggPCBuYW1lQ2FjaGUtPnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBuYW1lQ2FjaGUtPmF0KGluZGV4KTsKKyAgICBpZiAoVmVjdG9yPEVs
ZW1lbnQqPiogY2FjaGUgPSBuYW1lQ2FjaGUobmFtZSkpIHsKKyAgICAgICAgaWYgKGluZGV4IDwg
Y2FjaGUtPnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZS0+YXQoaW5kZXgpOwogICAg
IH0KIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMiArNzEsMTAgQEAgc3RhdGljIGJvb2wg
c2hvdWxkSW5jbHVkZUNoaWxkcmVuKENvbGxlYwogfQogCiBIVE1MQ29sbGVjdGlvbjo6SFRNTENv
bGxlY3Rpb24oTm9kZSogYmFzZSwgQ29sbGVjdGlvblR5cGUgdHlwZSkKLSAgICA6IG1faW5jbHVk
ZUNoaWxkcmVuKHNob3VsZEluY2x1ZGVDaGlsZHJlbih0eXBlKSkKLSAgICAsIG1fdHlwZSh0eXBl
KQorICAgIDogSFRNTENvbGxlY3Rpb25DYWNoZUJhc2UodHlwZSwgc2hvdWxkSW5jbHVkZUNoaWxk
cmVuKHR5cGUpKQogICAgICwgbV9iYXNlKGJhc2UpCiB7CiAgICAgQVNTRVJUKG1fYmFzZSk7Ci0g
ICAgbV9jYWNoZS5jbGVhcigpOwogfQogCiBQYXNzT3duUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
Q29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlIHR5cGUpCkBAIC05
MiwyNCArOTAsMjMgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlSWZOZQog
ewogICAgIHVpbnQ2NF90IGRvY3ZlcnNpb24gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPiht
X2Jhc2UtPmRvY3VtZW50KCkpLT5kb21UcmVlVmVyc2lvbigpOwogCi0gICAgaWYgKG1fY2FjaGUu
dmVyc2lvbiA9PSBkb2N2ZXJzaW9uKQorICAgIGlmIChjYWNoZVRyZWVWZXJzaW9uKCkgPT0gZG9j
dmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYWNoZS5jbGVhcigpOwotICAgIG1f
Y2FjaGUudmVyc2lvbiA9IGRvY3ZlcnNpb247CisgICAgY2xlYXJDYWNoZShkb2N2ZXJzaW9uKTsK
IH0KIAotdm9pZCBIVE1MQ29sbGVjdGlvbjo6Y2xlYXJDYWNoZSgpCit2b2lkIEhUTUxDb2xsZWN0
aW9uOjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIG1fY2FjaGUuY2xlYXIoKTsKKyAgICBjbGVh
ckNhY2hlKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KG1fYmFzZS0+ZG9jdW1lbnQoKSktPmRv
bVRyZWVWZXJzaW9uKCkpOwogfQogCiBpbmxpbmUgYm9vbCBIVE1MQ29sbGVjdGlvbjo6aXNBY2Nl
cHRhYmxlRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpICYmICEobV90eXBlID09IERvY0FsbCB8fCBtX3R5cGUgPT0gTm9k
ZUNoaWxkcmVuKSkKKyAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhKHR5cGUo
KSA9PSBEb2NBbGwgfHwgdHlwZSgpID09IE5vZGVDaGlsZHJlbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKICAg
ICBjYXNlIERvY0ltYWdlczoKICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0xvY2FsTmFtZShp
bWdUYWcpOwogICAgIGNhc2UgRG9jU2NyaXB0czoKQEAgLTE2NiwxNSArMTYzLDE1IEBAIHN0YXRp
YyBOb2RlKiBuZXh0Tm9kZU9yU2libGluZyhOb2RlKiBiYXMKICAgICByZXR1cm4gaW5jbHVkZUNo
aWxkcmVuID8gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShiYXNlKSA6IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoYmFzZSk7CiB9CiAKLUVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjppdGVtQWZ0ZXIo
RWxlbWVudCogcHJldmlvdXMpIGNvbnN0CitFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6aXRlbUFm
dGVyKE5vZGUqIHByZXZpb3VzKSBjb25zdAogewogICAgIE5vZGUqIGN1cnJlbnQ7CiAgICAgaWYg
KCFwcmV2aW91cykKICAgICAgICAgY3VycmVudCA9IG1fYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAg
IGVsc2UKLSAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJsaW5nKG1fYmFzZSwgcHJldmlv
dXMsIG1faW5jbHVkZUNoaWxkcmVuKTsKKyAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJs
aW5nKG1fYmFzZSwgcHJldmlvdXMsIGluY2x1ZGVDaGlsZHJlbigpKTsKIAotICAgIGZvciAoOyBj
dXJyZW50OyBjdXJyZW50ID0gbmV4dE5vZGVPclNpYmxpbmcobV9iYXNlLCBjdXJyZW50LCBtX2lu
Y2x1ZGVDaGlsZHJlbikpIHsKKyAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHROb2Rl
T3JTaWJsaW5nKG1fYmFzZSwgY3VycmVudCwgaW5jbHVkZUNoaWxkcmVuKCkpKSB7CiAgICAgICAg
IGlmICghY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVudCk7
CkBAIC0xOTgsMzIgKzE5NSwyOCBAQCB1bnNpZ25lZCBIVE1MQ29sbGVjdGlvbjo6Y2FsY0xlbmd0
aCgpIGNvCiB1bnNpZ25lZCBIVE1MQ29sbGVjdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBp
bnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgIGlmICghbV9jYWNoZS5oYXNMZW5ndGgpIHsK
LSAgICAgICAgbV9jYWNoZS5sZW5ndGggPSBjYWxjTGVuZ3RoKCk7Ci0gICAgICAgIG1fY2FjaGUu
aGFzTGVuZ3RoID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fY2FjaGUubGVuZ3RoOworICAg
IGlmICghaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgIHNldExlbmd0aENhY2hlKGNhbGNM
ZW5ndGgoKSk7CisgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgpOwogfQogCiBOb2RlKiBIVE1MQ29s
bGVjdGlvbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpbnZhbGlkYXRlQ2Fj
aGVJZk5lZWRlZCgpOwotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYgbV9jYWNoZS5wb3NpdGlv
biA9PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKLSAgICBpZiAobV9j
YWNoZS5oYXNMZW5ndGggJiYgbV9jYWNoZS5sZW5ndGggPD0gaW5kZXgpCisgICAgaWYgKGlzSXRl
bUNhY2hlVmFsaWQoKSAmJiBjYWNoZWRJdGVtT2Zmc2V0KCkgPT0gaW5kZXgpCisgICAgICAgIHJl
dHVybiBjYWNoZWRJdGVtKCk7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmIGNhY2hl
ZExlbmd0aCgpIDw9IGluZGV4KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fY2FjaGUu
Y3VycmVudCB8fCBtX2NhY2hlLnBvc2l0aW9uID4gaW5kZXgpIHsKLSAgICAgICAgbV9jYWNoZS5j
dXJyZW50ID0gaXRlbUFmdGVyKDApOwotICAgICAgICBtX2NhY2hlLnBvc2l0aW9uID0gMDsKLSAg
ICAgICAgaWYgKCFtX2NhY2hlLmN1cnJlbnQpCisgICAgaWYgKCFpc0l0ZW1DYWNoZVZhbGlkKCkg
fHwgY2FjaGVkSXRlbU9mZnNldCgpID4gaW5kZXgpIHsKKyAgICAgICAgc2V0SXRlbUNhY2hlKGl0
ZW1BZnRlcigwKSwgMCk7CisgICAgICAgIGlmICghY2FjaGVkSXRlbSgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIEVsZW1lbnQqIGUgPSBtX2NhY2hlLmN1cnJlbnQ7Ci0gICAg
Zm9yICh1bnNpZ25lZCBwb3MgPSBtX2NhY2hlLnBvc2l0aW9uOyBlICYmIHBvcyA8IGluZGV4OyBw
b3MrKykKKyAgICBOb2RlKiBlID0gY2FjaGVkSXRlbSgpOworICAgIGZvciAodW5zaWduZWQgcG9z
ID0gY2FjaGVkSXRlbU9mZnNldCgpOyBlICYmIHBvcyA8IGluZGV4OyBwb3MrKykKICAgICAgICAg
ZSA9IGl0ZW1BZnRlcihlKTsKLSAgICBtX2NhY2hlLmN1cnJlbnQgPSBlOwotICAgIG1fY2FjaGUu
cG9zaXRpb24gPSBpbmRleDsKLSAgICByZXR1cm4gbV9jYWNoZS5jdXJyZW50OworICAgIHNldEl0
ZW1DYWNoZShlLCBpbmRleCk7CisgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIG5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKEhUTUxFbGVtZW50
KiBlbGVtZW50KQpAQCAtMjQ4LDcgKzI0MSw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNr
Rm9yTmFtZU1hdGNoKEUKICAgICBpZiAoIWNoZWNrTmFtZSkKICAgICAgICAgcmV0dXJuIGUtPmdl
dElkQXR0cmlidXRlKCkgPT0gbmFtZTsKIAotICAgIGlmIChtX3R5cGUgPT0gRG9jQWxsICYmICFu
YW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkKKyAgICBpZiAodHlwZSgpID09IERv
Y0FsbCAmJiAhbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiBlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbmFtZSAm
JiBlLT5nZXRJZEF0dHJpYnV0ZSgpICE9IG5hbWU7CkBAIC0yNjYsNyArMjU5LDcgQEAgTm9kZSog
SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdAogICAgIHVuc2lnbmVkIGkgPSAwOwog
ICAgIGZvciAoRWxlbWVudCogZSA9IGl0ZW1BZnRlcigwKTsgZTsgZSA9IGl0ZW1BZnRlcihlKSkg
ewogICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2goZSwgLyogY2hlY2tOYW1lICovIGZhbHNl
LCBuYW1lKSkgewotICAgICAgICAgICAgbV9jYWNoZS5jdXJyZW50ID0gZTsKKyAgICAgICAgICAg
IHNldEl0ZW1DYWNoZShlLCBpKTsKICAgICAgICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSBpOwog
ICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgIH0KQEAgLTI3Niw3ICsyNjksNyBAQCBOb2Rl
KiBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0CiAgICAgaSA9IDA7CiAgICAgZm9y
IChFbGVtZW50KiBlID0gaXRlbUFmdGVyKDApOyBlOyBlID0gaXRlbUFmdGVyKGUpKSB7CiAgICAg
ICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChlLCAvKiBjaGVja05hbWUgKi8gdHJ1ZSwgbmFtZSkp
IHsKLSAgICAgICAgICAgIG1fY2FjaGUuY3VycmVudCA9IGU7CisgICAgICAgICAgICBzZXRJdGVt
Q2FjaGUoZSwgaSk7CiAgICAgICAgICAgICBtX2NhY2hlLnBvc2l0aW9uID0gaTsKICAgICAgICAg
ICAgIHJldHVybiBlOwogICAgICAgICB9CkBAIC0yODgsNyArMjgxLDcgQEAgTm9kZSogSFRNTENv
bGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdAogCiB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRh
dGVOYW1lQ2FjaGUoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlLmhhc05hbWVDYWNoZSkKKyAg
ICBpZiAoaGFzTmFtZUNhY2hlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoRWxlbWVu
dCogZWxlbWVudCA9IGl0ZW1BZnRlcigwKTsgZWxlbWVudDsgZWxlbWVudCA9IGl0ZW1BZnRlcihl
bGVtZW50KSkgewpAQCAtMjk4LDEyICsyOTEsMTIgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBk
YXRlTmFtZUNhY2hlKCkgYwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9
IGUtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0
dHJWYWwgPSBlLT5nZXROYW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGFwcGVuZChtX2NhY2hlLmlkQ2FjaGUsIGlkQXR0clZhbCwg
ZSk7Ci0gICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBu
YW1lQXR0clZhbCAmJiAobV90eXBlICE9IERvY0FsbCB8fCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5E
b2N1bWVudEFsbChlKSkpCi0gICAgICAgICAgICBhcHBlbmQobV9jYWNoZS5uYW1lQ2FjaGUsIG5h
bWVBdHRyVmFsLCBlKTsKKyAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlKTsK
KyAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVB
dHRyVmFsICYmICh0eXBlKCkgIT0gRG9jQWxsIHx8IG5hbWVTaG91bGRCZVZpc2libGVJbkRvY3Vt
ZW50QWxsKGUpKSkKKyAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZSk7
CiAgICAgfQogCi0gICAgbV9jYWNoZS5oYXNOYW1lQ2FjaGUgPSB0cnVlOworICAgIHNldEhhc05h
bWVDYWNoZSgpOwogfQogCiBib29sIEhUTUxDb2xsZWN0aW9uOjpoYXNOYW1lZEl0ZW0oY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMzE0LDEzICszMDcsMTMgQEAgYm9vbCBIVE1M
Q29sbGVjdGlvbjo6aGFzTmFtZWRJdGVtKGNvbnN0IAogICAgIGludmFsaWRhdGVDYWNoZUlmTmVl
ZGVkKCk7CiAgICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBpZiAoVmVjdG9yPEVsZW1lbnQq
PiogaWRDYWNoZSA9IG1fY2FjaGUuaWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAg
IGlmICghaWRDYWNoZS0+aXNFbXB0eSgpKQorICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBjYWNo
ZSA9IGlkQ2FjaGUobmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWNoZS0+aXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4q
IG5hbWVDYWNoZSA9IG1fY2FjaGUubmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSkpIHsKLSAgICAg
ICAgaWYgKCFuYW1lQ2FjaGUtPmlzRW1wdHkoKSkKKyAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiog
Y2FjaGUgPSBuYW1lQ2FjaGUobmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWNoZS0+aXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzYsOCArMzI5LDggQEAg
dm9pZCBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtcyhjb25zdCBBdAogICAgIGludmFsaWRhdGVD
YWNoZUlmTmVlZGVkKCk7CiAgICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBWZWN0b3I8RWxl
bWVudCo+KiBpZFJlc3VsdHMgPSBtX2NhY2hlLmlkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKLSAg
ICBWZWN0b3I8RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG1fY2FjaGUubmFtZUNhY2hlLmdldChu
YW1lLmltcGwoKSk7CisgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gaWRDYWNoZShu
YW1lKTsKKyAgICBWZWN0b3I8RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG5hbWVDYWNoZShuYW1l
KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGlkUmVzdWx0cyAmJiBpIDwgaWRSZXN1bHRz
LT5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChpZFJlc3VsdHMtPmF0KGkpKTsK
QEAgLTM1MSw3ICszNDQsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6
dGFnCiAgICAgcmV0dXJuIG1fYmFzZS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7CiB9CiAK
LXZvaWQgSFRNTENvbGxlY3Rpb246OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRv
bWljU3RyaW5nJiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxDb2xsZWN0aW9uQ2Fj
aGVCYXNlOjphcHBlbmQoTm9kZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5
LCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZl
Y3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKICAg
ICBpZiAoIXZlY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJl
dmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiTm9kZS5oIgogI2lu
Y2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0zNiw3ICszNyw3MSBAQCBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBOb2RlTGlzdDsKIAotY2xhc3MgSFRNTENvbGxlY3Rpb24g
eworY2xhc3MgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2UgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0
Q2FjaGVCYXNlIHsKK3B1YmxpYzoKKyAgICBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZShDb2xsZWN0
aW9uVHlwZSB0eXBlLCBib29sIGluY2x1ZGVDaGlsZHJlbikKKyAgICAgICAgOiBEeW5hbWljTm9k
ZUxpc3RDYWNoZUJhc2UoUm9vdGVkQXROb2RlLCBBbHdheXNJbnZhbGlkYXRlKSAvLyBUaGVzZSB0
d28gZmxhZ3MgYXJlIG5ldmVyIHVzZWQKKyAgICAgICAgLCBtX2NhY2hlZEVsZW1lbnRzQXJyYXlP
ZmZzZXQoMCkKKyAgICAgICAgLCBtX2NhY2hlVHJlZVZlcnNpb24oMCkKKyAgICAgICAgLCBtX2hh
c05hbWVDYWNoZShmYWxzZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2lu
Y2x1ZGVDaGlsZHJlbihpbmNsdWRlQ2hpbGRyZW4pCisgICAgeworICAgICAgICBBU1NFUlQobV90
eXBlID09IHR5cGUpOworICAgIH0KKworICAgIENvbGxlY3Rpb25UeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxDb2xsZWN0aW9uVHlwZT4obV90eXBlKTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBjbGVhckNhY2hlKHVpbnQ2NF90IGN1cnJlbnREb21UcmVlVmVyc2lvbikg
Y29uc3QKKyAgICB7CisgICAgICAgIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2xlYXJDYWNo
ZSgpOworICAgICAgICBtX2lkQ2FjaGUuY2xlYXIoKTsKKyAgICAgICAgbV9uYW1lQ2FjaGUuY2xl
YXIoKTsKKyAgICAgICAgbV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0ID0gMDsKKyAgICAgICAg
bV9jYWNoZVRyZWVWZXJzaW9uID0gY3VycmVudERvbVRyZWVWZXJzaW9uOworICAgICAgICBtX2hh
c05hbWVDYWNoZSA9IGZhbHNlOworICAgIH0KKworICAgIHVzaW5nIER5bmFtaWNOb2RlTGlzdENh
Y2hlQmFzZTo6c2V0SXRlbUNhY2hlOworICAgIHZvaWQgc2V0SXRlbUNhY2hlKE5vZGUqIGl0ZW0s
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgZWxlbWVudHNBcnJheU9mZnNldCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHNldEl0ZW1DYWNoZShpdGVtLCBvZmZzZXQpOworICAgICAgICBtX2NhY2hl
ZEVsZW1lbnRzQXJyYXlPZmZzZXQgPSBlbGVtZW50c0FycmF5T2Zmc2V0OworICAgIH0KKyAgICB1
bnNpZ25lZCBjYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRFbGVtZW50c0FycmF5T2Zmc2V0OyB9CisKKyAgICBib29sIGluY2x1ZGVDaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1faW5jbHVkZUNoaWxkcmVuOyB9CisgICAgdWludDY0X3QgY2FjaGVUcmVl
VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVUcmVlVmVyc2lvbjsgfQorCisgICAgdHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+
ID4gTm9kZUNhY2hlTWFwOworICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlkQ2FjaGUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2lkQ2FjaGUuZ2V0KG5hbWUuaW1wbCgp
KTsgfQorICAgIFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSk7IH0KKyAg
ICB2b2lkIGFwcGVuZElkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdCB7IGFwcGVuZChtX2lkQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9CisgICAg
dm9pZCBhcHBlbmROYW1lQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdCB7IGFwcGVuZChtX25hbWVDYWNoZSwgbmFtZSwgZWxlbWVudCk7IH0KKwor
ICAgIGJvb2wgaGFzTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYW1lQ2FjaGU7IH0K
KyAgICB2b2lkIHNldEhhc05hbWVDYWNoZSgpIGNvbnN0IHsgbV9oYXNOYW1lQ2FjaGUgPSB0cnVl
OyB9CisKK3ByaXZhdGU6CisgICAgdXNpbmcgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjppc1Jv
b3RlZEF0RG9jdW1lbnQ7CisgICAgdXNpbmcgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91
bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2U7CisgICAgdXNpbmcgRHluYW1pY05vZGVMaXN0
Q2FjaGVCYXNlOjpjbGVhckNhY2hlOworCisgICAgc3RhdGljIHZvaWQgYXBwZW5kKE5vZGVDYWNo
ZU1hcCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQqKTsKKworICAgIG11dGFibGUgTm9k
ZUNhY2hlTWFwIG1faWRDYWNoZTsKKyAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX25hbWVDYWNo
ZTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldDsKKyAg
ICBtdXRhYmxlIHVpbnQ2NF90IG1fY2FjaGVUcmVlVmVyc2lvbjsKKworICAgIC8vIEZJWE1FOiBN
b3ZlIHRoZXNlIGJpdCBmbGFncyB0byBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgdG8gcGFjayB0
aGVtIGJldHRlci4KKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzTmFtZUNhY2hlIDogMTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBtX3R5cGUgOiA1OyAvLyBDb2xsZWN0aW9uVHlwZQorICAgIGNvbnN0
IHVuc2lnbmVkIG1faW5jbHVkZUNoaWxkcmVuIDogMTsKK307CisKK2NsYXNzIEhUTUxDb2xsZWN0
aW9uIDogcHVibGljIEhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc093blB0cjxIVE1MQ29sbGVjdGlvbj4gY3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rp
b25UeXBlKTsKICAgICB2aXJ0dWFsIH5IVE1MQ29sbGVjdGlvbigpOwpAQCAtNTYsNTggKzEyMSwz
MSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlu
dmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChtX2NhY2hlLmhhc0xlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiAhbV9jYWNoZS5sZW5ndGg7Ci0gICAgICAgIHJldHVybiAhbV9j
YWNoZS5jdXJyZW50ICYmICFpdGVtKDApOworICAgICAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gIWNhY2hlZExlbmd0aCgpOworICAgICAgICBpZiAoaXNJ
dGVtQ2FjaGVWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuICFjYWNoZWRJdGVtKCk7CisgICAg
ICAgIHJldHVybiAhaXRlbSgwKTsKICAgICB9CiAgICAgYm9vbCBoYXNFeGFjdGx5T25lSXRlbSgp
IGNvbnN0CiAgICAgewogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgICAg
ICBpZiAobV9jYWNoZS5oYXNMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZS5sZW5n
dGggPT0gMTsKLSAgICAgICAgaWYgKG1fY2FjaGUuY3VycmVudCkKLSAgICAgICAgICAgIHJldHVy
biAhbV9jYWNoZS5wb3NpdGlvbiAmJiAhaXRlbSgxKTsKKyAgICAgICAgaWYgKGlzTGVuZ3RoQ2Fj
aGVWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgpID09IDE7CisgICAg
ICAgIGlmIChpc0l0ZW1DYWNoZVZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkSXRl
bSgpICYmICFjYWNoZWRJdGVtT2Zmc2V0KCkgJiYgIWl0ZW0oMSk7CiAgICAgICAgIHJldHVybiBp
dGVtKDApICYmICFpdGVtKDEpOwogICAgIH0KIAogICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2Jhc2U7IH0KLSAgICBDb2xsZWN0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Q29sbGVjdGlvblR5cGU+KG1fdHlwZSk7IH0KIAotICAgIHZvaWQgY2xlYXJD
YWNoZSgpOworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRl
Q2FjaGVJZk5lZWRlZCgpIGNvbnN0OwogcHJvdGVjdGVkOgogICAgIEhUTUxDb2xsZWN0aW9uKE5v
ZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1l
Q2FjaGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihFbGVtZW50Kikg
Y29uc3Q7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxW
ZWN0b3I8RWxlbWVudCo+ID4gPiBOb2RlQ2FjaGVNYXA7Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5k
KE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQqKTsKLQotICAgIG11
dGFibGUgc3RydWN0IHsKLSAgICAgICAgTm9kZUNhY2hlTWFwIGlkQ2FjaGU7Ci0gICAgICAgIE5v
ZGVDYWNoZU1hcCBuYW1lQ2FjaGU7Ci0gICAgICAgIHVpbnQ2NF90IHZlcnNpb247Ci0gICAgICAg
IEVsZW1lbnQqIGN1cnJlbnQ7Ci0gICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uOwotICAgICAgICB1
bnNpZ25lZCBsZW5ndGg7Ci0gICAgICAgIGludCBlbGVtZW50c0FycmF5UG9zaXRpb247Ci0gICAg
ICAgIGJvb2wgaGFzTGVuZ3RoOwotICAgICAgICBib29sIGhhc05hbWVDYWNoZTsKLQotICAgICAg
ICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWRDYWNoZS5jbGVhcigpOwot
ICAgICAgICAgICAgbmFtZUNhY2hlLmNsZWFyKCk7Ci0gICAgICAgICAgICB2ZXJzaW9uID0gMDsK
LSAgICAgICAgICAgIGN1cnJlbnQgPSAwOwotICAgICAgICAgICAgcG9zaXRpb24gPSAwOwotICAg
ICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9
IDA7Ci0gICAgICAgICAgICBoYXNMZW5ndGggPSBmYWxzZTsKLSAgICAgICAgICAgIGhhc05hbWVD
YWNoZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBtX2NhY2hlOworICAgIHZpcnR1YWwgRWxl
bWVudCogaXRlbUFmdGVyKE5vZGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNr
Rm9yTmFtZU1hdGNoKEVsZW1lbnQqLCBib29sIGNoZWNrTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdDsKQEAgLTExNiw5ICsxNTQsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBp
c0FjY2VwdGFibGVFbGVtZW50KEVsZW1lbnQqKSBjb25zdDsKIAotICAgIGJvb2wgbV9pbmNsdWRl
Q2hpbGRyZW4gOiAxOwotICAgIHVuc2lnbmVkIG1fdHlwZSA6IDU7IC8vIENvbGxlY3Rpb25UeXBl
Ci0KICAgICBOb2RlKiBtX2Jhc2U7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMjE1MjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDI4ICs4
NCwyMyBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiB7CiAgICAg
aW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQoKTsKIAotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYg
bV9jYWNoZS5wb3NpdGlvbiA9PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVu
dDsKKyAgICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCgpICYmIGNhY2hlZEl0ZW1PZmZzZXQoKSA9PSBp
bmRleCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKIAotICAgIGlmIChtX2NhY2hlLmhh
c0xlbmd0aCAmJiBtX2NhY2hlLmxlbmd0aCA8PSBpbmRleCkKKyAgICBpZiAoaXNMZW5ndGhDYWNo
ZVZhbGlkKCkgJiYgY2FjaGVkTGVuZ3RoKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgaWYgKCFtX2NhY2hlLmN1cnJlbnQgfHwgbV9jYWNoZS5wb3NpdGlvbiA+IGluZGV4KSB7
Ci0gICAgICAgIG1fY2FjaGUuY3VycmVudCA9IDA7Ci0gICAgICAgIG1fY2FjaGUucG9zaXRpb24g
PSAwOwotICAgICAgICBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAgfQor
ICAgIGlmICghaXNJdGVtQ2FjaGVWYWxpZCgpIHx8IGNhY2hlZEl0ZW1PZmZzZXQoKSA+IGluZGV4
KQorICAgICAgICBzZXRJdGVtQ2FjaGUoMCwgMCwgMCk7CiAKICAgICBjb25zdCBWZWN0b3I8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBmb3JtQ29udHJvbEVsZW1lbnRz
KCk7Ci0gICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gbV9jYWNoZS5wb3NpdGlvbjsKLSAgICAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NhY2hlLmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8
IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXgg
PSBjYWNoZWRJdGVtT2Zmc2V0KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYWNoZWRFbGVt
ZW50c0FycmF5T2Zmc2V0KCk7IGkgPCBlbGVtZW50c0FycmF5LnNpemUoKTsgaSsrKSB7CiAgICAg
ICAgIGlmIChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CiAgICAgICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7
CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgbV9jYWNoZS5wb3NpdGlvbiA9IGluZGV4OwotICAgICAgICAgICAgICAgIG1fY2FjaGUuY3Vy
cmVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZS5lbGVtZW50c0FycmF5UG9z
aXRpb24gPSBpOworICAgICAgICAgICAgICAgIHNldEl0ZW1DYWNoZShlbGVtZW50LCBpbmRleCwg
aSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAKQEAg
LTE1Niw3ICsxNTEsNyBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Om5hbWVkSXRlbShjb25z
CiAKIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogewot
ICAgIGlmIChtX2NhY2hlLmhhc05hbWVDYWNoZSkKKyAgICBpZiAoaGFzTmFtZUNhY2hlKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGZvdW5kSW5w
dXRFbGVtZW50czsKQEAgLTE3MCwxMSArMTY1LDExIEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9u
Ojp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCk7CiAgICAg
ICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmQobV9jYWNoZS5pZENhY2hlLCBpZEF0dHJWYWwsIGVsZW1lbnQpOworICAgICAgICAgICAgICAg
IGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3Vu
ZElucHV0RWxlbWVudHMuYWRkKGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVB
dHRyVmFsKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUubmFtZUNhY2hlLCBuYW1l
QXR0clZhbCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVB
dHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRk
KG5hbWVBdHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4Nywx
MyArMTgyLDEzIEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwg
PSBlbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZh
bC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1w
bCgpKSkKLSAgICAgICAgICAgICAgICBhcHBlbmQobV9jYWNoZS5pZENhY2hlLCBpZEF0dHJWYWws
IGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVt
ZW50KTsKICAgICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZh
bCAhPSBuYW1lQXR0clZhbCAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKG5hbWVBdHRy
VmFsLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUubmFtZUNhY2hlLCBu
YW1lQXR0clZhbCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5h
bWVBdHRyVmFsLCBlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY2FjaGUuaGFz
TmFtZUNhY2hlID0gdHJ1ZTsKKyAgICBzZXRIYXNOYW1lQ2FjaGUoKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIx
NTIzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEhUTUxOYW1lQ29sbGVjdGlvbjo6SFRNTE5hbWVD
b2xsZWN0aW9uKEQKIHsKIH0KIAotRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0
ZXIoRWxlbWVudCogcHJldmlvdXMpIGNvbnN0CitFbGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246
Oml0ZW1BZnRlcihOb2RlKiBwcmV2aW91cykgY29uc3QKIHsKICAgICBBU1NFUlQocHJldmlvdXMg
IT0gYmFzZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAxMjE1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29s
bGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSFRNTE5hbWVDb2xsZWN0aW9uKERvY3VtZW50KiwgQ29sbGVjdGlvblR5cGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAKLSAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRl
cihFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFbGVtZW50KiBpdGVtQWZ0
ZXIoTm9kZSopIGNvbnN0IE9WRVJSSURFOwogCiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMTIxNTIzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBAQCBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgSFRNTFNlbGVjdEVsCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjppbnZhbGlkYXRlU2Vs
ZWN0ZWRJdGVtcygpCiB7CiAgICAgaWYgKG1fc2VsZWN0ZWRPcHRpb25zQ29sbGVjdGlvbikKLSAg
ICAgICAgbV9zZWxlY3RlZE9wdGlvbnNDb2xsZWN0aW9uLT5jbGVhckNhY2hlKCk7CisgICAgICAg
IG1fc2VsZWN0ZWRPcHRpb25zQ29sbGVjdGlvbi0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGVtcygpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTIxNTIzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw5ICsxNjEsOSBAQCBQYXNzT3duUHRyPEhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uPiBIVE1MCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVGFibGVS
b3dzQ29sbGVjdGlvbih0YWJsZSkpOwogfQogCi1FbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbjo6aXRlbUFmdGVyKEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAorRWxlbWVudCogSFRNTFRh
YmxlUm93c0NvbGxlY3Rpb246Oml0ZW1BZnRlcihOb2RlKiBwcmV2aW91cykgY29uc3QKIHsKLSAg
ICBBU1NFUlQoIXByZXZpb3VzIHx8IHByZXZpb3VzLT5oYXNMb2NhbE5hbWUodHJUYWcpKTsKKyAg
ICBBU1NFUlQoIXByZXZpb3VzIHx8IChwcmV2aW91cy0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRN
TEVsZW1lbnQocHJldmlvdXMpLT5oYXNMb2NhbE5hbWUodHJUYWcpKSk7CiAgICAgcmV0dXJuIHJv
d0FmdGVyKHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihiYXNlKCkpLCBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVSb3dFbGVtZW50Kj4ocHJldmlvdXMpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNTIz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFRh
YmxlUm93c0NvbGxlY3Rpb24oSFRNTFRhYmxlRWxlbWVudCopOwogCi0gICAgdmlydHVhbCBFbGVt
ZW50KiBpdGVtQWZ0ZXIoRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgRWxlbWVudCogaXRl
bUFmdGVyKE5vZGUqKSBjb25zdCBPVkVSUklERTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150099</attachid>
            <date>2012-06-29 00:21:36 -0700</date>
            <delta_ts>2012-06-29 11:53:41 -0700</delta_ts>
            <desc>Fixed a merge error</desc>
            <filename>bug-90118-20120629002617.patch</filename>
            <type>text/plain</type>
            <size>36674</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wNi0yOSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSB0aGUgc2FtZSBjYWNo
ZSBpbiBIVE1MQ29sbGVjdGlvbiBhbmQgRHluYW1pY05vZGVMaXN0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgdHdv
IG5ldyBiYXNlIGNsYXNzZXMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIGFuZCBIVE1MQ29sbGVj
dGlvbkNhY2hlQmFzZSB0byBzaGFyZQorICAgICAgICB0aGUgY2FjaGUgb2JqZWN0IGJldHdlZW4g
RHluYW1pY05vZGVMaXN0IGFuZCBIVE1MQ29sbGVjdGlvbi4gSFRNTENvbGxlY3Rpb25DYWNoZUJh
c2UgaW5oZXJpdHMgZnJvbQorICAgICAgICBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgYW5kIGNv
bnRhaW5zIGV4dHJhIGNhY2hlcyBhbmQgYml0IGZsYWdzIGZvciBIVE1MQ29sbGVjdGlvbi4gRHlu
YW1pY05vZGVMaXN0OjpDYWNoZQorICAgICAgICBhbmQgSFRNTENvbGxlY3Rpb246OkNhY2hlIGhh
ZCBiZWVuIHJlbW92ZWQgYW5kIGZsYXR0ZW5lZCBpbnRvIHRoZXNlIHR3byBjbGFzc2VzIGZvciB0
aGUgZWFzeSBpbmhlcml0YW5jZS4KKworICAgICAgICBJbiBEeW5hbWljTm9kZUxpc3QsIHdlIGhh
dmUgYSB2ZXJ5IHN0cmFpZ2h0IGZvcndhcmQgb25lLXRvLW9uZSBtYXBwaW5nIGZyb20gb2xkIENh
Y2hlcyBtZW1iZXIgdmFyaWFibGVzOgorCisgICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtIC0+IGNh
Y2hlZEl0ZW0oKQorICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbU9mZnNldCAtPiBjYWNoZWRJdGVt
T2Zmc2V0KCkKKyAgICAgICAgbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0+IGNhY2hlZExlbmd0aCgp
CisgICAgICAgIG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQgLT4gaXNJdGVtQ2FjaGVWYWxpZCgp
CisgICAgICAgIG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCAtPiBpc0xlbmd0aENhY2hlVmFs
aWQoKQorICAgICAgICBtX2NhY2hlcy50eXBlIC0+IHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgbmV2
ZXIgdXNlZC4KKyAgICAgICAgbV9jYWNoZXMucm9vdGVkQXREb2N1bWVudCAtPiBpc1Jvb3RlZEF0
RG9jdW1lbnQoKQorICAgICAgICBtX2NhY2hlcy5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVD
aGFuZ2UgLT4gc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkKKworICAgICAgICBJ
biBIVE1MQ29sbGVjdGlvbiwgdGhlcmUgaXMgb25lIHNlbWFudGljIGNoYW5nZSBpbiB0aGUgd2F5
IGl0ZW0gY2FjaGUgaXMgbWFuYWdlZC4gUHJldmlvdXNseSwgd2Ugb25seSBoYWQKKyAgICAgICAg
bV9jYWNoZS5jdXJyZW50IHdoaWNoIHdhcyB1c2VkIGFzIGJvdGggY2FjaGVkSXRlbSgpIGFuZCBp
c0l0ZW1DYWNoZVZhbGlkKCkgKG5vdCB2YWxpZCB3aGVuIGN1cnJlbnQgaXMgbnVsbCkuCisgICAg
ICAgIFRoZXJlIGFyZSBzb21lIGFzeW1tZXRyaWMgY29kZSBjaGFuZ2VzIGR1ZSB0byBvbmUtdG8t
bWFueSByZWxhdGlvbnNoaXAuIEFsc28sIGFsbCBtZXRob2QgbmFtZXMgaGF2ZSBiZWVuIHVwZGF0
ZWQKKyAgICAgICAgdG8gdXNlIHRoYXQgb2YgRHluYW1pY05vZGVMaXN0IHRlcm1pbm9sb2d5LiBU
aHVzIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjb3JyZXNwb25kZW5jZToKKworICAgICAgICBtX2Nh
Y2hlLmN1cnJlbnQgLT4gY2FjaGVkSXRlbSgpIC8gaXNJdGVtQ2FjaGVWYWxpZCgpCisgICAgICAg
IG1fY2FjaGUucG9zaXRpb24gLT4gY2FjaGVkSXRlbU9mZnNldCgpCisgICAgICAgIG1fY2FjaGUu
bGVuZ3RoIC0+IGNhY2hlZExlbmd0aCgpCisgICAgICAgIG1fY2FjaGUuZWxlbWVudHNBcnJheVBv
c2l0aW9uIC0+IGNhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQoKQorICAgICAgICBtX2NhY2hlLmhh
c0xlbmd0aCAtPiBpc0xlbmd0aENhY2hlVmFsaWQoKQorICAgICAgICBtX2NhY2hlLmhhc05hbWVD
YWNoZSAtPiBoYXNOYW1lQ2FjaGUoKSAvIHNldEhhc05hbWVDYWNoZSgpCisgICAgICAgIG1fY2Fj
aGUuaWRDYWNoZSAtPiBpZENhY2hlKCkgLyBhZGRJZENhY2hlKCkKKyAgICAgICAgbV9jYWNoZS5u
YW1lQ2FjaGUgLT4gaWRDYWNoZSgpIC8gYWRkTmFtZUNhY2hlKCkKKworICAgICAgICBJbiBhZGRp
dGlvbiwgd2UgaGFkIHRvIHJlbmFtZSBIVE1MQ29sbGVjdGlvbjo6Y2xlYXJDYWNoZSB0byBpbnZh
bGlkYXRlQ2FjaGUgdG8gYXZvaWQgdGhlIG5hbWUgY29sbGlzaW9uIHdpdGgKKyAgICAgICAgSFRN
TENvbGxlY3Rpb25DYWNoZUJhc2U6OmNsZWFyQ2FjaGUuCisKKyAgICAgICAgKiBkb20vQ2hpbGRO
b2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6aXRlbSk6CisgICAgICAgICogZG9tL0R5
bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVM
aXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9k
ZUxpc3QuaDoKKyAgICAgICAgKER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzUm9vdGVk
QXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6
OnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzSXRlbUNhY2hlVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpjYWNoZWRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2FjaGVkSXRlbU9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmlzTGVuZ3RoQ2FjaGVWYWxp
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OmNhY2hlZExl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OnNldExl
bmd0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6
c2V0SXRlbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFz
ZTo6Y2xlYXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNO
b2RlTGlzdDo6cm9vdE5vZGUpOgorICAgICAgICAoRHluYW1pY05vZGVMaXN0KToKKyAgICAgICAg
KiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbGxD
b2xsZWN0aW9uOjpuYW1lZEl0ZW1XaXRoSW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppc0FjY2VwdGFibGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppdGVtQWZ0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlv
bjo6Y2hlY2tGb3JOYW1lTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246
Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpoYXNOYW1lZEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6CisgICAgICAgICog
aHRtbC9IVE1MQ29sbGVjdGlvbi5oOgorICAgICAgICAoSFRNTENvbGxlY3Rpb25DYWNoZUJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OkhUTUxDb2xsZWN0
aW9uQ2FjaGVCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNl
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpjbGVh
ckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpzZXRJ
dGVtQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmNh
Y2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b25DYWNoZUJhc2U6OmluY2x1ZGVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29s
bGVjdGlvbkNhY2hlQmFzZTo6Y2FjaGVUcmVlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6aWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29sbGVjdGlvbkNhY2hlQmFzZTo6bmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmRJZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmROYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6Omhhc05hbWVDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6c2V0SGFzTmFtZUNhY2hlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omhhc0V4YWN0bHlPbmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpiYXNlKToKKyAgICAgICAgKEhUTUxDb2xs
ZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAgICAqIGh0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlv
bjo6aXRlbUFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oOgorICAg
ICAgICAoSFRNTE5hbWVDb2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjppbnZhbGlkYXRl
U2VsZWN0ZWRJdGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6aXRlbUFmdGVy
KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmg6CisgICAgICAgIChI
VE1MVGFibGVSb3dzQ29sbGVjdGlvbik6CisKIDIwMTItMDYtMjggIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFjIGJ1aWxkIGZpeCBhZnRlciByMTIxNTE4LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxNTIzKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxNSArMzksMTQgQEAgQ2hpbGROb2RlTGlzdDo6fkNoaWxkTm9kZUxpc3QoKQogCiB1bnNp
Z25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlcy5p
c0xlbmd0aENhY2hlVmFsaWQpCi0gICAgICAgIHJldHVybiBtX2NhY2hlcy5jYWNoZWRMZW5ndGg7
CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkTGVu
Z3RoKCk7CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogICAgIGZvciAoTm9kZSogbiA9IHJvb3RO
b2RlKCktPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGxl
bisrOwogCi0gICAgbV9jYWNoZXMuY2FjaGVkTGVuZ3RoID0gbGVuOwotICAgIG1fY2FjaGVzLmlz
TGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgc2V0TGVuZ3RoQ2FjaGUobGVuKTsKIAogICAg
IHJldHVybiBsZW47CiB9CkBAIC01NywyNyArNTYsMjcgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6
aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwogICAgIE5vZGUq
IG4gPSByb290Tm9kZSgpLT5maXJzdENoaWxkKCk7CiAKLSAgICBpZiAobV9jYWNoZXMuaXNJdGVt
Q2FjaGVWYWxpZCkgewotICAgICAgICBpZiAoaW5kZXggPT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZz
ZXQpCi0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGlmZiA9IGluZGV4IC0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQ7CisgICAgaWYg
KGlzSXRlbUNhY2hlVmFsaWQoKSkgeworICAgICAgICBpZiAoaW5kZXggPT0gY2FjaGVkSXRlbU9m
ZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKKworICAgICAgICBpbnQg
ZGlmZiA9IGluZGV4IC0gY2FjaGVkSXRlbU9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBkaXN0
ID0gYWJzKGRpZmYpOwogICAgICAgICBpZiAoZGlzdCA8IGluZGV4KSB7Ci0gICAgICAgICAgICBu
ID0gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy5sYXN0SXRl
bU9mZnNldDsKKyAgICAgICAgICAgIG4gPSBjYWNoZWRJdGVtKCk7CisgICAgICAgICAgICBwb3Mg
PSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9jYWNo
ZXMuaXNMZW5ndGhDYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2NhY2hlcy5j
YWNoZWRMZW5ndGgpCisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKSB7CisgICAgICAgIGlm
IChpbmRleCA+PSBjYWNoZWRMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAg
ICAgIGludCBkaWZmID0gaW5kZXggLSBwb3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMo
ZGlmZik7Ci0gICAgICAgIGlmIChkaXN0ID4gbV9jYWNoZXMuY2FjaGVkTGVuZ3RoIC0gMSAtIGlu
ZGV4KSB7CisgICAgICAgIGlmIChkaXN0ID4gY2FjaGVkTGVuZ3RoKCkgLSAxIC0gaW5kZXgpIHsK
ICAgICAgICAgICAgIG4gPSByb290Tm9kZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHBv
cyA9IG1fY2FjaGVzLmNhY2hlZExlbmd0aCAtIDE7CisgICAgICAgICAgICBwb3MgPSBjYWNoZWRM
ZW5ndGgoKSAtIDE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk0LDkgKzkzLDcgQEAgTm9kZSog
Q2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIH0KIAogICAgIGlmIChuKSB7
Ci0gICAgICAgIG1fY2FjaGVzLmxhc3RJdGVtID0gbjsKLSAgICAgICAgbV9jYWNoZXMubGFzdEl0
ZW1PZmZzZXQgPSBwb3M7Ci0gICAgICAgIG1fY2FjaGVzLmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVl
OworICAgICAgICBzZXRJdGVtQ2FjaGUobiwgcG9zKTsKICAgICAgICAgcmV0dXJuIG47CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24g
MTIxNTIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFt
aWNTdWJ0cmVlTgogCiB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBj
b25zdAogewotICAgIGlmIChtX2NhY2hlcy5pc0xlbmd0aENhY2hlVmFsaWQpCi0gICAgICAgIHJl
dHVybiBtX2NhY2hlcy5jYWNoZWRMZW5ndGg7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgp
KQorICAgICAgICByZXR1cm4gY2FjaGVkTGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOwogICAgIE5vZGUqIHJvb3ROb2RlID0gdGhpcy0+cm9vdE5vZGUoKTsKQEAgLTQzLDggKzQz
LDcgQEAgdW5zaWduZWQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6bGVuZ3RoKAogICAgIGZvciAo
Tm9kZSogbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3ROb2RlKSkKICAgICAgICAgbGVuZ3RoICs9IG4tPmlzRWxlbWVudE5vZGUoKSAmJiBu
b2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOwogCi0gICAgbV9jYWNoZXMuY2Fj
aGVkTGVuZ3RoID0gbGVuZ3RoOwotICAgIG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRy
dWU7CisgICAgc2V0TGVuZ3RoQ2FjaGUobGVuZ3RoKTsKIAogICAgIHJldHVybiBsZW5ndGg7CiB9
CkBAIC01Niw5ICs1NSw3IEBAIE5vZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3
YXIKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
cm9vdE5vZGUpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNo
ZXMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5p
bmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbSA9IG47Ci0gICAg
ICAgICAgICAgICAgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgbV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
c2V0SXRlbUNhY2hlKG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAtLXJlbWFpbmluZ09mZnNldDsKQEAgLTc1LDkgKzcyLDcg
QEAgTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5vZGUpKSB7
CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNoZXMoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsK
LSAgICAgICAgICAgICAgICBtX2NhY2hlcy5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAg
bV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9jYWNo
ZXMuaXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2V0SXRlbUNhY2hl
KG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICArK3JlbWFpbmluZ09mZnNldDsKQEAgLTkxLDEyICs4NiwxMiBAQCBOb2RlKiBE
eW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtKHVuc2lnCiB7CiAgICAgaW50IHJlbWFpbmluZ09m
ZnNldCA9IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IHJvb3ROb2RlKCktPmZpcnN0Q2hpbGQo
KTsKLSAgICBpZiAobV9jYWNoZXMuaXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICBpZiAob2Zm
c2V0ID09IG1fY2FjaGVzLmxhc3RJdGVtT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIG1fY2Fj
aGVzLmxhc3RJdGVtOwotICAgICAgICBpZiAob2Zmc2V0ID4gbV9jYWNoZXMubGFzdEl0ZW1PZmZz
ZXQgfHwgbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAg
ICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMubGFzdEl0ZW07Ci0gICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQgLT0gbV9jYWNoZXMubGFzdEl0ZW1PZmZzZXQ7CisgICAgaWYgKGlzSXRlbUNhY2hlVmFs
aWQoKSkgeworICAgICAgICBpZiAob2Zmc2V0ID09IGNhY2hlZEl0ZW1PZmZzZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWNoZWRJdGVtKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBjYWNoZWRJ
dGVtT2Zmc2V0KCkgfHwgY2FjaGVkSXRlbU9mZnNldCgpIC0gb2Zmc2V0IDwgb2Zmc2V0KSB7Cisg
ICAgICAgICAgICBzdGFydCA9IGNhY2hlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJlbWFpbmluZ09m
ZnNldCAtPSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudDsKIGNsYXNzIE5vZGU7
CiAKLWNsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBEeW5h
bWljTm9kZUxpc3RDYWNoZUJhc2UgeworcHVibGljOgorICAgIGVudW0gUm9vdFR5cGUgeworICAg
ICAgICBSb290ZWRBdE5vZGUsCisgICAgICAgIFJvb3RlZEF0RG9jdW1lbnQsCisgICAgfTsKKwor
ICAgIGVudW0gSW52YWxpZGF0aW9uVHlwZSB7CisgICAgICAgIEFsd2F5c0ludmFsaWRhdGUsCisg
ICAgICAgIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAorICAgIH07CisKKyAgICBE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2UoUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5
cGUgaW52YWxpZGF0aW9uVHlwZSkKKyAgICAgICAgOiBtX3Jvb3RlZEF0RG9jdW1lbnQocm9vdFR5
cGUgPT0gUm9vdGVkQXREb2N1bWVudCkKKyAgICAgICAgLCBtX3Nob3VsZEludmFsaWRhdGVPbkF0
dHJpYnV0ZUNoYW5nZShpbnZhbGlkYXRpb25UeXBlID09IEFsd2F5c0ludmFsaWRhdGUpCisgICAg
eworICAgICAgICBjbGVhckNhY2hlKCk7CisgICAgfQorCitwdWJsaWM6CisgICAgQUxXQVlTX0lO
TElORSBib29sIGlzUm9vdGVkQXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdGVkQXRE
b2N1bWVudDsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlT25BdHRy
aWJ1dGVDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzSXRlbUNh
Y2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzSXRlbUNhY2hlVmFsaWQ7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIE5vZGUqIGNhY2hlZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEl0ZW07
IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNhY2hlZEl0ZW1PZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEl0ZW1PZmZzZXQ7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0xlbmd0aENhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGVuZ3RoQ2FjaGVWYWxpZDsg
fQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2FjaGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRMZW5ndGg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVuZ3RoQ2Fj
aGUodW5zaWduZWQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9jYWNoZWRMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEl0ZW1DYWNoZShOb2RlKiBpdGVtLCB1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBtX2NhY2hlZEl0ZW0gPSBpdGVtOworICAgICAg
ICBtX2NhY2hlZEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1faXNJdGVtQ2FjaGVWYWxp
ZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBjbGVhckNhY2hlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fY2FjaGVkSXRlbSA9IDA7CisgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0g
ZmFsc2U7CisgICAgICAgIG1faXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBtdXRhYmxlIE5vZGUqIG1fY2FjaGVkSXRlbTsKKyAgICBtdXRhYmxlIHVuc2ln
bmVkIG1fY2FjaGVkTGVuZ3RoOworICAgIG11dGFibGUgdW5zaWduZWQgbV9jYWNoZWRJdGVtT2Zm
c2V0OworICAgIG11dGFibGUgdW5zaWduZWQgbV9pc0xlbmd0aENhY2hlVmFsaWQgOiAxOworICAg
IG11dGFibGUgdW5zaWduZWQgbV9pc0l0ZW1DYWNoZVZhbGlkIDogMTsKKworICAgIC8vIEZyb20g
RHluYW1pY05vZGVMaXN0CisgICAgY29uc3QgdW5zaWduZWQgbV9yb290ZWRBdERvY3VtZW50IDog
MTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5n
ZSA6IDE7Cit9OworCitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QsIHB1
YmxpYyBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgewogcHVibGljOgogICAgIGVudW0gTm9kZUxp
c3RUeXBlIHsKICAgICAgICAgQ2hpbGROb2RlTGlzdFR5cGUsCkBAIC00NSwxNyArMTA2LDkgQEAg
cHVibGljOgogICAgICAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAgICAgIE1pY3JvRGF0YUl0
ZW1MaXN0VHlwZSwKICAgICB9OwotICAgIGVudW0gUm9vdFR5cGUgewotICAgICAgICBSb290ZWRB
dE5vZGUsCi0gICAgICAgIFJvb3RlZEF0RG9jdW1lbnQsCi0gICAgfTsKLSAgICBlbnVtIEludmFs
aWRhdGlvblR5cGUgewotICAgICAgICBBbHdheXNJbnZhbGlkYXRlLAotICAgICAgICBEb05vdElu
dmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSwKLSAgICB9OwogICAgIER5bmFtaWNOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IG93bmVyTm9kZSwgUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlv
blR5cGUgaW52YWxpZGF0aW9uVHlwZSkKLSAgICAgICAgOiBtX293bmVyTm9kZShvd25lck5vZGUp
Ci0gICAgICAgICwgbV9jYWNoZXMocm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUpCisgICAgICAg
IDogRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlKHJvb3RUeXBlLCBpbnZhbGlkYXRpb25UeXBlKQor
ICAgICAgICAsIG1fb3duZXJOb2RlKG93bmVyTm9kZSkKICAgICB7IH0KICAgICB2aXJ0dWFsIH5E
eW5hbWljTm9kZUxpc3QoKSB7IH0KIApAQCAtNjYsNTIgKzExOSwyMSBAQCBwdWJsaWM6CiAKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgTm9kZSogb3duZXJOb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7IH0KLSAgICBib29sIGlzUm9vdGVk
QXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVzLnJvb3RlZEF0RG9jdW1lbnQ7IH0K
LSAgICBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVzLnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZTsgfQotICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlKCkgeyBtX2NhY2hlcy5yZXNldCgpOyB9CisgICAgdm9pZCBpbnZh
bGlkYXRlQ2FjaGUoKSB7IGNsZWFyQ2FjaGUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgTm9kZSog
cm9vdE5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fY2FjaGVzLnJvb3RlZEF0RG9j
dW1lbnQgJiYgbV9vd25lck5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKGlzUm9vdGVk
QXREb2N1bWVudCgpICYmIG1fb3duZXJOb2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCk7CiAgICAgICAgIHJldHVybiBtX293bmVyTm9k
ZS5nZXQoKTsKICAgICB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9vd25lck5vZGUtPmRvY3VtZW50KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
RWxlbWVudCopIGNvbnN0ID0gMDsKIAotICAgIHN0cnVjdCBDYWNoZXMgewotICAgICAgICBDYWNo
ZXMoUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkK
LSAgICAgICAgICAgIDogcm9vdGVkQXREb2N1bWVudChyb290VHlwZSA9PSBSb290ZWRBdERvY3Vt
ZW50KQotICAgICAgICAgICAgLCBzaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoaW52
YWxpZGF0aW9uVHlwZSA9PSBBbHdheXNJbnZhbGlkYXRlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNldCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxhc3RJdGVtID0gMDsKLSAgICAgICAgICAgIGlzTGVuZ3RoQ2FjaGVWYWxp
ZCA9IGZhbHNlOwotICAgICAgICAgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgTm9kZSogbGFzdEl0ZW07Ci0gICAgICAgIHVuc2lnbmVkIGNhY2hlZExl
bmd0aDsKLSAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIGlzSXRlbUNhY2hlVmFs
aWQgOiAxOwotCi0gICAgICAgIC8vIEZvbGxvd2luZyBmbGFncyBzaG91bGQgYmVsb25nIGluIER5
bmFtaWNTdWJ0cmVlTm9kZSBidXQgYXJlIGhlcmUgZm9yIGJpdC1wYWNraW5nLgotICAgICAgICB1
bnNpZ25lZCB0eXBlIDogNDsKLSAgICAgICAgdW5zaWduZWQgcm9vdGVkQXREb2N1bWVudCA6IDE7
Ci0gICAgICAgIHVuc2lnbmVkIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSA6IDE7
Ci0gICAgfTsKLQotICAgIFJlZlB0cjxOb2RlPiBtX293bmVyTm9kZTsKLSAgICBtdXRhYmxlIENh
Y2hlcyBtX2NhY2hlczsKLQogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljTm9k
ZUxpc3QoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgUmVmUHRyPE5vZGU+
IG1fb3duZXJOb2RlOwogfTsKIAogY2xhc3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCA6IHB1Ymxp
YyBEeW5hbWljTm9kZUxpc3QgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMTUgQEAgTm9k
ZSogSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbVdpdGhJbgogICAgIGludmFsaWRhdGVDYWNo
ZUlmTmVlZGVkKCk7CiAgICAgdXBkYXRlTmFtZUNhY2hlKCk7CiAKLSAgICBpZiAoVmVjdG9yPEVs
ZW1lbnQqPiogaWRDYWNoZSA9IG1fY2FjaGUuaWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpKSB7Ci0g
ICAgICAgIGlmIChpbmRleCA8IGlkQ2FjaGUtPnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBp
ZENhY2hlLT5hdChpbmRleCk7Ci0gICAgICAgIGluZGV4IC09IGlkQ2FjaGUtPnNpemUoKTsKKyAg
ICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBpZENhY2hlKG5hbWUpKSB7CisgICAgICAg
IGlmIChpbmRleCA8IGNhY2hlLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGUtPmF0
KGluZGV4KTsKKyAgICAgICAgaW5kZXggLT0gY2FjaGUtPnNpemUoKTsKICAgICB9CiAKLSAgICBp
ZiAoVmVjdG9yPEVsZW1lbnQqPiogbmFtZUNhY2hlID0gbV9jYWNoZS5uYW1lQ2FjaGUuZ2V0KG5h
bWUuaW1wbCgpKSkgewotICAgICAgICBpZiAoaW5kZXggPCBuYW1lQ2FjaGUtPnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBuYW1lQ2FjaGUtPmF0KGluZGV4KTsKKyAgICBpZiAoVmVjdG9yPEVs
ZW1lbnQqPiogY2FjaGUgPSBuYW1lQ2FjaGUobmFtZSkpIHsKKyAgICAgICAgaWYgKGluZGV4IDwg
Y2FjaGUtPnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZS0+YXQoaW5kZXgpOwogICAg
IH0KIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMiArNzEsMTAgQEAgc3RhdGljIGJvb2wg
c2hvdWxkSW5jbHVkZUNoaWxkcmVuKENvbGxlYwogfQogCiBIVE1MQ29sbGVjdGlvbjo6SFRNTENv
bGxlY3Rpb24oTm9kZSogYmFzZSwgQ29sbGVjdGlvblR5cGUgdHlwZSkKLSAgICA6IG1faW5jbHVk
ZUNoaWxkcmVuKHNob3VsZEluY2x1ZGVDaGlsZHJlbih0eXBlKSkKLSAgICAsIG1fdHlwZSh0eXBl
KQorICAgIDogSFRNTENvbGxlY3Rpb25DYWNoZUJhc2UodHlwZSwgc2hvdWxkSW5jbHVkZUNoaWxk
cmVuKHR5cGUpKQogICAgICwgbV9iYXNlKGJhc2UpCiB7CiAgICAgQVNTRVJUKG1fYmFzZSk7Ci0g
ICAgbV9jYWNoZS5jbGVhcigpOwogfQogCiBQYXNzT3duUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
Q29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlIHR5cGUpCkBAIC05
MiwyNCArOTAsMjMgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlSWZOZQog
ewogICAgIHVpbnQ2NF90IGRvY3ZlcnNpb24gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPiht
X2Jhc2UtPmRvY3VtZW50KCkpLT5kb21UcmVlVmVyc2lvbigpOwogCi0gICAgaWYgKG1fY2FjaGUu
dmVyc2lvbiA9PSBkb2N2ZXJzaW9uKQorICAgIGlmIChjYWNoZVRyZWVWZXJzaW9uKCkgPT0gZG9j
dmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYWNoZS5jbGVhcigpOwotICAgIG1f
Y2FjaGUudmVyc2lvbiA9IGRvY3ZlcnNpb247CisgICAgY2xlYXJDYWNoZShkb2N2ZXJzaW9uKTsK
IH0KIAotdm9pZCBIVE1MQ29sbGVjdGlvbjo6Y2xlYXJDYWNoZSgpCit2b2lkIEhUTUxDb2xsZWN0
aW9uOjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIG1fY2FjaGUuY2xlYXIoKTsKKyAgICBjbGVh
ckNhY2hlKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KG1fYmFzZS0+ZG9jdW1lbnQoKSktPmRv
bVRyZWVWZXJzaW9uKCkpOwogfQogCiBpbmxpbmUgYm9vbCBIVE1MQ29sbGVjdGlvbjo6aXNBY2Nl
cHRhYmxlRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpICYmICEobV90eXBlID09IERvY0FsbCB8fCBtX3R5cGUgPT0gTm9k
ZUNoaWxkcmVuKSkKKyAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhKHR5cGUo
KSA9PSBEb2NBbGwgfHwgdHlwZSgpID09IE5vZGVDaGlsZHJlbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKICAg
ICBjYXNlIERvY0ltYWdlczoKICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0xvY2FsTmFtZShp
bWdUYWcpOwogICAgIGNhc2UgRG9jU2NyaXB0czoKQEAgLTE2NiwxNSArMTYzLDE1IEBAIHN0YXRp
YyBOb2RlKiBuZXh0Tm9kZU9yU2libGluZyhOb2RlKiBiYXMKICAgICByZXR1cm4gaW5jbHVkZUNo
aWxkcmVuID8gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShiYXNlKSA6IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoYmFzZSk7CiB9CiAKLUVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjppdGVtQWZ0ZXIo
RWxlbWVudCogcHJldmlvdXMpIGNvbnN0CitFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6aXRlbUFm
dGVyKE5vZGUqIHByZXZpb3VzKSBjb25zdAogewogICAgIE5vZGUqIGN1cnJlbnQ7CiAgICAgaWYg
KCFwcmV2aW91cykKICAgICAgICAgY3VycmVudCA9IG1fYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAg
IGVsc2UKLSAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJsaW5nKG1fYmFzZSwgcHJldmlv
dXMsIG1faW5jbHVkZUNoaWxkcmVuKTsKKyAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJs
aW5nKG1fYmFzZSwgcHJldmlvdXMsIGluY2x1ZGVDaGlsZHJlbigpKTsKIAotICAgIGZvciAoOyBj
dXJyZW50OyBjdXJyZW50ID0gbmV4dE5vZGVPclNpYmxpbmcobV9iYXNlLCBjdXJyZW50LCBtX2lu
Y2x1ZGVDaGlsZHJlbikpIHsKKyAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHROb2Rl
T3JTaWJsaW5nKG1fYmFzZSwgY3VycmVudCwgaW5jbHVkZUNoaWxkcmVuKCkpKSB7CiAgICAgICAg
IGlmICghY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVudCk7
CkBAIC0xOTgsMzIgKzE5NSwyOCBAQCB1bnNpZ25lZCBIVE1MQ29sbGVjdGlvbjo6Y2FsY0xlbmd0
aCgpIGNvCiB1bnNpZ25lZCBIVE1MQ29sbGVjdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBp
bnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAgIGlmICghbV9jYWNoZS5oYXNMZW5ndGgpIHsK
LSAgICAgICAgbV9jYWNoZS5sZW5ndGggPSBjYWxjTGVuZ3RoKCk7Ci0gICAgICAgIG1fY2FjaGUu
aGFzTGVuZ3RoID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fY2FjaGUubGVuZ3RoOworICAg
IGlmICghaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAgIHNldExlbmd0aENhY2hlKGNhbGNM
ZW5ndGgoKSk7CisgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgpOwogfQogCiBOb2RlKiBIVE1MQ29s
bGVjdGlvbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpbnZhbGlkYXRlQ2Fj
aGVJZk5lZWRlZCgpOwotICAgIGlmIChtX2NhY2hlLmN1cnJlbnQgJiYgbV9jYWNoZS5wb3NpdGlv
biA9PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGUuY3VycmVudDsKLSAgICBpZiAobV9j
YWNoZS5oYXNMZW5ndGggJiYgbV9jYWNoZS5sZW5ndGggPD0gaW5kZXgpCisgICAgaWYgKGlzSXRl
bUNhY2hlVmFsaWQoKSAmJiBjYWNoZWRJdGVtT2Zmc2V0KCkgPT0gaW5kZXgpCisgICAgICAgIHJl
dHVybiBjYWNoZWRJdGVtKCk7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmIGNhY2hl
ZExlbmd0aCgpIDw9IGluZGV4KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fY2FjaGUu
Y3VycmVudCB8fCBtX2NhY2hlLnBvc2l0aW9uID4gaW5kZXgpIHsKLSAgICAgICAgbV9jYWNoZS5j
dXJyZW50ID0gaXRlbUFmdGVyKDApOwotICAgICAgICBtX2NhY2hlLnBvc2l0aW9uID0gMDsKLSAg
ICAgICAgaWYgKCFtX2NhY2hlLmN1cnJlbnQpCisgICAgaWYgKCFpc0l0ZW1DYWNoZVZhbGlkKCkg
fHwgY2FjaGVkSXRlbU9mZnNldCgpID4gaW5kZXgpIHsKKyAgICAgICAgc2V0SXRlbUNhY2hlKGl0
ZW1BZnRlcigwKSwgMCk7CisgICAgICAgIGlmICghY2FjaGVkSXRlbSgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIEVsZW1lbnQqIGUgPSBtX2NhY2hlLmN1cnJlbnQ7Ci0gICAg
Zm9yICh1bnNpZ25lZCBwb3MgPSBtX2NhY2hlLnBvc2l0aW9uOyBlICYmIHBvcyA8IGluZGV4OyBw
b3MrKykKKyAgICBOb2RlKiBlID0gY2FjaGVkSXRlbSgpOworICAgIGZvciAodW5zaWduZWQgcG9z
ID0gY2FjaGVkSXRlbU9mZnNldCgpOyBlICYmIHBvcyA8IGluZGV4OyBwb3MrKykKICAgICAgICAg
ZSA9IGl0ZW1BZnRlcihlKTsKLSAgICBtX2NhY2hlLmN1cnJlbnQgPSBlOwotICAgIG1fY2FjaGUu
cG9zaXRpb24gPSBpbmRleDsKLSAgICByZXR1cm4gbV9jYWNoZS5jdXJyZW50OworICAgIHNldEl0
ZW1DYWNoZShlLCBpbmRleCk7CisgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIG5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKEhUTUxFbGVtZW50
KiBlbGVtZW50KQpAQCAtMjQ4LDcgKzI0MSw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNr
Rm9yTmFtZU1hdGNoKEUKICAgICBpZiAoIWNoZWNrTmFtZSkKICAgICAgICAgcmV0dXJuIGUtPmdl
dElkQXR0cmlidXRlKCkgPT0gbmFtZTsKIAotICAgIGlmIChtX3R5cGUgPT0gRG9jQWxsICYmICFu
YW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkKKyAgICBpZiAodHlwZSgpID09IERv
Y0FsbCAmJiAhbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiBlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbmFtZSAm
JiBlLT5nZXRJZEF0dHJpYnV0ZSgpICE9IG5hbWU7CkBAIC0yNjYsOCArMjU5LDcgQEAgTm9kZSog
SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdAogICAgIHVuc2lnbmVkIGkgPSAwOwog
ICAgIGZvciAoRWxlbWVudCogZSA9IGl0ZW1BZnRlcigwKTsgZTsgZSA9IGl0ZW1BZnRlcihlKSkg
ewogICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2goZSwgLyogY2hlY2tOYW1lICovIGZhbHNl
LCBuYW1lKSkgewotICAgICAgICAgICAgbV9jYWNoZS5jdXJyZW50ID0gZTsKLSAgICAgICAgICAg
IG1fY2FjaGUucG9zaXRpb24gPSBpOworICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGUsIGkpOwog
ICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgIH0KICAgICAgICAgaSsrOwpAQCAtMjc2LDgg
KzI2OCw3IEBAIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXQKICAgICBp
ID0gMDsKICAgICBmb3IgKEVsZW1lbnQqIGUgPSBpdGVtQWZ0ZXIoMCk7IGU7IGUgPSBpdGVtQWZ0
ZXIoZSkpIHsKICAgICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKGUsIC8qIGNoZWNrTmFtZSAq
LyB0cnVlLCBuYW1lKSkgewotICAgICAgICAgICAgbV9jYWNoZS5jdXJyZW50ID0gZTsKLSAgICAg
ICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSBpOworICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGUs
IGkpOwogICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgIH0KICAgICAgICAgaSsrOwpAQCAt
Mjg4LDcgKzI3OSw3IEBAIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXQK
IAogdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKIHsKLSAgICBp
ZiAobV9jYWNoZS5oYXNOYW1lQ2FjaGUpCisgICAgaWYgKGhhc05hbWVDYWNoZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtQWZ0ZXIoMCk7IGVs
ZW1lbnQ7IGVsZW1lbnQgPSBpdGVtQWZ0ZXIoZWxlbWVudCkpIHsKQEAgLTI5OCwxMiArMjg5LDEy
IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGMKICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0TmFtZUF0dHJpYnV0ZSgp
OwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhcHBlbmQo
bV9jYWNoZS5pZENhY2hlLCBpZEF0dHJWYWwsIGUpOwotICAgICAgICBpZiAoIW5hbWVBdHRyVmFs
LmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgKG1fdHlwZSAhPSBEb2NB
bGwgfHwgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZSkpKQotICAgICAgICAgICAg
YXBwZW5kKG1fY2FjaGUubmFtZUNhY2hlLCBuYW1lQXR0clZhbCwgZSk7CisgICAgICAgICAgICBh
cHBlbmRJZENhY2hlKGlkQXR0clZhbCwgZSk7CisgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNF
bXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAodHlwZSgpICE9IERvY0FsbCB8
fCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChlKSkpCisgICAgICAgICAgICBhcHBl
bmROYW1lQ2FjaGUobmFtZUF0dHJWYWwsIGUpOwogICAgIH0KIAotICAgIG1fY2FjaGUuaGFzTmFt
ZUNhY2hlID0gdHJ1ZTsKKyAgICBzZXRIYXNOYW1lQ2FjaGUoKTsKIH0KIAogYm9vbCBIVE1MQ29s
bGVjdGlvbjo6aGFzTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAg
LTMxNCwxMyArMzA1LDEzIEBAIGJvb2wgSFRNTENvbGxlY3Rpb246Omhhc05hbWVkSXRlbShjb25z
dCAKICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwogICAgIHVwZGF0ZU5hbWVDYWNoZSgp
OwogCi0gICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4qIGlkQ2FjaGUgPSBtX2NhY2hlLmlkQ2FjaGUu
Z2V0KG5hbWUuaW1wbCgpKSkgewotICAgICAgICBpZiAoIWlkQ2FjaGUtPmlzRW1wdHkoKSkKKyAg
ICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBpZENhY2hlKG5hbWUpKSB7CisgICAgICAg
IGlmICghY2FjaGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBuYW1lQ2FjaGUgPSBtX2NhY2hlLm5hbWVDYWNo
ZS5nZXQobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgIGlmICghbmFtZUNhY2hlLT5pc0VtcHR5KCkp
CisgICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4qIGNhY2hlID0gbmFtZUNhY2hlKG5hbWUpKSB7Cisg
ICAgICAgIGlmICghY2FjaGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMzM2LDggKzMyNyw4IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246Om5hbWVkSXRl
bXMoY29uc3QgQXQKICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwogICAgIHVwZGF0ZU5h
bWVDYWNoZSgpOwogCi0gICAgVmVjdG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gbV9jYWNoZS5p
ZENhY2hlLmdldChuYW1lLmltcGwoKSk7Ci0gICAgVmVjdG9yPEVsZW1lbnQqPiogbmFtZVJlc3Vs
dHMgPSBtX2NhY2hlLm5hbWVDYWNoZS5nZXQobmFtZS5pbXBsKCkpOworICAgIFZlY3RvcjxFbGVt
ZW50Kj4qIGlkUmVzdWx0cyA9IGlkQ2FjaGUobmFtZSk7CisgICAgVmVjdG9yPEVsZW1lbnQqPiog
bmFtZVJlc3VsdHMgPSBuYW1lQ2FjaGUobmFtZSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpZFJlc3VsdHMgJiYgaSA8IGlkUmVzdWx0cy0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaWRSZXN1bHRzLT5hdChpKSk7CkBAIC0zNTEsNyArMzQyLDcgQEAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gSFRNTENvbGxlY3Rpb246OnRhZwogICAgIHJldHVybiBtX2Jhc2UtPmdldEVs
ZW1lbnRzQnlUYWdOYW1lKG5hbWUpOwogfQogCi12b2lkIEhUTUxDb2xsZWN0aW9uOjphcHBlbmQo
Tm9kZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5kKE5vZGVDYWNoZU1hcCYg
bWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBP
d25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CiAgICAgaWYgKCF2ZWN0b3IpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE1MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgorI2lu
Y2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMzYs
NyArMzcsNzEgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgTm9kZUxp
c3Q7CiAKLWNsYXNzIEhUTUxDb2xsZWN0aW9uIHsKK2NsYXNzIEhUTUxDb2xsZWN0aW9uQ2FjaGVC
YXNlIDogcHVibGljIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSB7CitwdWJsaWM6CisgICAgSFRN
TENvbGxlY3Rpb25DYWNoZUJhc2UoQ29sbGVjdGlvblR5cGUgdHlwZSwgYm9vbCBpbmNsdWRlQ2hp
bGRyZW4pCisgICAgICAgIDogRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlKFJvb3RlZEF0Tm9kZSwg
QWx3YXlzSW52YWxpZGF0ZSkgLy8gVGhlc2UgdHdvIGZsYWdzIGFyZSBuZXZlciB1c2VkCisgICAg
ICAgICwgbV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0KDApCisgICAgICAgICwgbV9jYWNoZVRy
ZWVWZXJzaW9uKDApCisgICAgICAgICwgbV9oYXNOYW1lQ2FjaGUoZmFsc2UpCisgICAgICAgICwg
bV90eXBlKHR5cGUpCisgICAgICAgICwgbV9pbmNsdWRlQ2hpbGRyZW4oaW5jbHVkZUNoaWxkcmVu
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSB0eXBlKTsKKyAgICB9CisKKyAgICBD
b2xsZWN0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVjdGlv
blR5cGU+KG1fdHlwZSk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgY2xlYXJDYWNoZSh1aW50
NjRfdCBjdXJyZW50RG9tVHJlZVZlcnNpb24pIGNvbnN0CisgICAgeworICAgICAgICBEeW5hbWlj
Tm9kZUxpc3RDYWNoZUJhc2U6OmNsZWFyQ2FjaGUoKTsKKyAgICAgICAgbV9pZENhY2hlLmNsZWFy
KCk7CisgICAgICAgIG1fbmFtZUNhY2hlLmNsZWFyKCk7CisgICAgICAgIG1fY2FjaGVkRWxlbWVu
dHNBcnJheU9mZnNldCA9IDA7CisgICAgICAgIG1fY2FjaGVUcmVlVmVyc2lvbiA9IGN1cnJlbnRE
b21UcmVlVmVyc2lvbjsKKyAgICAgICAgbV9oYXNOYW1lQ2FjaGUgPSBmYWxzZTsKKyAgICB9CisK
KyAgICB1c2luZyBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OnNldEl0ZW1DYWNoZTsKKyAgICB2
b2lkIHNldEl0ZW1DYWNoZShOb2RlKiBpdGVtLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGVs
ZW1lbnRzQXJyYXlPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBzZXRJdGVtQ2FjaGUoaXRl
bSwgb2Zmc2V0KTsKKyAgICAgICAgbV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0ID0gZWxlbWVu
dHNBcnJheU9mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgY2FjaGVkRWxlbWVudHNBcnJheU9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldDsgfQorCisg
ICAgYm9vbCBpbmNsdWRlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2luY2x1ZGVDaGlsZHJl
bjsgfQorICAgIHVpbnQ2NF90IGNhY2hlVHJlZVZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlVHJlZVZlcnNpb247IH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiA+IE5vZGVDYWNoZU1hcDsKKyAgICBWZWN0b3I8
RWxlbWVudCo+KiBpZENhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1
cm4gbV9pZENhY2hlLmdldChuYW1lLmltcGwoKSk7IH0KKyAgICBWZWN0b3I8RWxlbWVudCo+KiBu
YW1lQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX25hbWVD
YWNoZS5nZXQobmFtZS5pbXBsKCkpOyB9CisgICAgdm9pZCBhcHBlbmRJZENhY2hlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyBhcHBlbmQobV9pZENh
Y2hlLCBuYW1lLCBlbGVtZW50KTsgfQorICAgIHZvaWQgYXBwZW5kTmFtZUNhY2hlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyBhcHBlbmQobV9uYW1l
Q2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9CisKKyAgICBib29sIGhhc05hbWVDYWNoZSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzTmFtZUNhY2hlOyB9CisgICAgdm9pZCBzZXRIYXNOYW1lQ2FjaGUoKSBj
b25zdCB7IG1faGFzTmFtZUNhY2hlID0gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIHVzaW5nIER5
bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6aXNSb290ZWRBdERvY3VtZW50OworICAgIHVzaW5nIER5
bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6c2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdl
OworICAgIHVzaW5nIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZTo6Y2xlYXJDYWNoZTsKKworICAg
IHN0YXRpYyB2b2lkIGFwcGVuZChOb2RlQ2FjaGVNYXAmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBF
bGVtZW50Kik7CisKKyAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX2lkQ2FjaGU7CisgICAgbXV0
YWJsZSBOb2RlQ2FjaGVNYXAgbV9uYW1lQ2FjaGU7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2Nh
Y2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQ7CisgICAgbXV0YWJsZSB1aW50NjRfdCBtX2NhY2hlVHJl
ZVZlcnNpb247CisKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSBiaXQgZmxhZ3MgdG8gRHluYW1p
Y05vZGVMaXN0Q2FjaGVCYXNlIHRvIHBhY2sgdGhlbSBiZXR0ZXIuCisgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX2hhc05hbWVDYWNoZSA6IDE7CisgICAgY29uc3QgdW5zaWduZWQgbV90eXBlIDogNTsg
Ly8gQ29sbGVjdGlvblR5cGUKKyAgICBjb25zdCB1bnNpZ25lZCBtX2luY2x1ZGVDaGlsZHJlbiA6
IDE7Cit9OworCitjbGFzcyBIVE1MQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbkNh
Y2hlQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTENvbGxlY3Rpb24+
IGNyZWF0ZShOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSk7CiAgICAgdmlydHVhbCB+SFRNTENv
bGxlY3Rpb24oKTsKQEAgLTU2LDU4ICsxMjEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0CiAgICAgewogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVJZk5lZWRlZCgpOwotICAg
ICAgICBpZiAobV9jYWNoZS5oYXNMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gIW1fY2FjaGUu
bGVuZ3RoOwotICAgICAgICByZXR1cm4gIW1fY2FjaGUuY3VycmVudCAmJiAhaXRlbSgwKTsKKyAg
ICAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuICFjYWNo
ZWRMZW5ndGgoKTsKKyAgICAgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiAhY2FjaGVkSXRlbSgpOworICAgICAgICByZXR1cm4gIWl0ZW0oMCk7CiAgICAgfQog
ICAgIGJvb2wgaGFzRXhhY3RseU9uZUl0ZW0oKSBjb25zdAogICAgIHsKICAgICAgICAgaW52YWxp
ZGF0ZUNhY2hlSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKG1fY2FjaGUuaGFzTGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuIG1fY2FjaGUubGVuZ3RoID09IDE7Ci0gICAgICAgIGlmIChtX2NhY2hl
LmN1cnJlbnQpCi0gICAgICAgICAgICByZXR1cm4gIW1fY2FjaGUucG9zaXRpb24gJiYgIWl0ZW0o
MSk7CisgICAgICAgIGlmIChpc0xlbmd0aENhY2hlVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjYWNoZWRMZW5ndGgoKSA9PSAxOworICAgICAgICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0oKSAmJiAhY2FjaGVkSXRlbU9mZnNldCgpICYm
ICFpdGVtKDEpOwogICAgICAgICByZXR1cm4gaXRlbSgwKSAmJiAhaXRlbSgxKTsKICAgICB9CiAK
ICAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgQ29sbGVjdGlv
blR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbGxlY3Rpb25UeXBlPiht
X3R5cGUpOyB9CiAKLSAgICB2b2lkIGNsZWFyQ2FjaGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGVD
YWNoZSgpOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQoKSBjb25zdDsKIHByb3Rl
Y3RlZDoKICAgICBIVE1MQ29sbGVjdGlvbihOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTmFtZUNhY2hlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBF
bGVtZW50KiBpdGVtQWZ0ZXIoRWxlbWVudCopIGNvbnN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+ID4gTm9kZUNhY2hl
TWFwOwotICAgIHN0YXRpYyB2b2lkIGFwcGVuZChOb2RlQ2FjaGVNYXAmLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBFbGVtZW50Kik7Ci0KLSAgICBtdXRhYmxlIHN0cnVjdCB7Ci0gICAgICAgIE5vZGVD
YWNoZU1hcCBpZENhY2hlOwotICAgICAgICBOb2RlQ2FjaGVNYXAgbmFtZUNhY2hlOwotICAgICAg
ICB1aW50NjRfdCB2ZXJzaW9uOwotICAgICAgICBFbGVtZW50KiBjdXJyZW50OwotICAgICAgICB1
bnNpZ25lZCBwb3NpdGlvbjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoOwotICAgICAgICBpbnQg
ZWxlbWVudHNBcnJheVBvc2l0aW9uOwotICAgICAgICBib29sIGhhc0xlbmd0aDsKLSAgICAgICAg
Ym9vbCBoYXNOYW1lQ2FjaGU7Ci0KLSAgICAgICAgdm9pZCBjbGVhcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlkQ2FjaGUuY2xlYXIoKTsKLSAgICAgICAgICAgIG5hbWVDYWNoZS5jbGVhcigp
OwotICAgICAgICAgICAgdmVyc2lvbiA9IDA7Ci0gICAgICAgICAgICBjdXJyZW50ID0gMDsKLSAg
ICAgICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICBlbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwotICAgICAgICAgICAgaGFzTGVuZ3RoID0g
ZmFsc2U7Ci0gICAgICAgICAgICBoYXNOYW1lQ2FjaGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0gbV9jYWNoZTsKKyAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihOb2RlKikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja0Zvck5hbWVNYXRjaChFbGVtZW50KiwgYm9vbCBj
aGVja05hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CkBAIC0xMTYsOSArMTU0
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNBY2NlcHRhYmxlRWxlbWVudChFbGVtZW50Kikg
Y29uc3Q7CiAKLSAgICBib29sIG1faW5jbHVkZUNoaWxkcmVuIDogMTsKLSAgICB1bnNpZ25lZCBt
X3R5cGUgOiA1OyAvLyBDb2xsZWN0aW9uVHlwZQotCiAgICAgTm9kZSogbV9iYXNlOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gMTIxNTIzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCwyOCArODQsMjMgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0
aW9uOjppdGVtKHVuc2lnbmVkIAogewogICAgIGludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCk7CiAK
LSAgICBpZiAobV9jYWNoZS5jdXJyZW50ICYmIG1fY2FjaGUucG9zaXRpb24gPT0gaW5kZXgpCi0g
ICAgICAgIHJldHVybiBtX2NhY2hlLmN1cnJlbnQ7CisgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQo
KSAmJiBjYWNoZWRJdGVtT2Zmc2V0KCkgPT0gaW5kZXgpCisgICAgICAgIHJldHVybiBjYWNoZWRJ
dGVtKCk7CiAKLSAgICBpZiAobV9jYWNoZS5oYXNMZW5ndGggJiYgbV9jYWNoZS5sZW5ndGggPD0g
aW5kZXgpCisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmIGNhY2hlZExlbmd0aCgpIDw9
IGluZGV4KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICghbV9jYWNoZS5jdXJyZW50IHx8
IG1fY2FjaGUucG9zaXRpb24gPiBpbmRleCkgewotICAgICAgICBtX2NhY2hlLmN1cnJlbnQgPSAw
OwotICAgICAgICBtX2NhY2hlLnBvc2l0aW9uID0gMDsKLSAgICAgICAgbV9jYWNoZS5lbGVtZW50
c0FycmF5UG9zaXRpb24gPSAwOwotICAgIH0KKyAgICBpZiAoIWlzSXRlbUNhY2hlVmFsaWQoKSB8
fCBjYWNoZWRJdGVtT2Zmc2V0KCkgPiBpbmRleCkKKyAgICAgICAgc2V0SXRlbUNhY2hlKDAsIDAs
IDApOwogCiAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50
c0FycmF5ID0gZm9ybUNvbnRyb2xFbGVtZW50cygpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRl
eCA9IG1fY2FjaGUucG9zaXRpb247Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9jYWNo
ZS5lbGVtZW50c0FycmF5UG9zaXRpb247IGkgPCBlbGVtZW50c0FycmF5LnNpemUoKTsgaSsrKSB7
CisgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gY2FjaGVkSXRlbU9mZnNldCgpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldCgpOyBpIDwgZWxlbWVu
dHNBcnJheS5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoZWxlbWVudHNBcnJheVtpXS0+aXNF
bnVtZXJhdGFibGUoKSkgewogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hU
TUxFbGVtZW50KGVsZW1lbnRzQXJyYXlbaV0pOwogICAgICAgICAgICAgaWYgKGluZGV4ID09IGN1
cnJlbnRJbmRleCkgewotICAgICAgICAgICAgICAgIG1fY2FjaGUucG9zaXRpb24gPSBpbmRleDsK
LSAgICAgICAgICAgICAgICBtX2NhY2hlLmN1cnJlbnQgPSBlbGVtZW50OwotICAgICAgICAgICAg
ICAgIG1fY2FjaGUuZWxlbWVudHNBcnJheVBvc2l0aW9uID0gaTsKKyAgICAgICAgICAgICAgICBz
ZXRJdGVtQ2FjaGUoZWxlbWVudCwgaW5kZXgsIGkpOwogICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwogICAgICAgICAgICAgfQogCkBAIC0xNTYsNyArMTUxLDcgQEAgTm9kZSogSFRNTEZv
cm1Db2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29ucwogCiB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6
dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNoZS5oYXNOYW1lQ2FjaGUp
CisgICAgaWYgKGhhc05hbWVDYWNoZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiBmb3VuZElucHV0RWxlbWVudHM7CkBAIC0xNzAsMTEgKzE2NSwx
MSBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRl
KCk7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVu
dC0+Z2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG1fY2FjaGUuaWRDYWNoZSwgaWRBdHRyVmFs
LCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJZENhY2hlKGlkQXR0clZhbCwgZWxl
bWVudCk7CiAgICAgICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmFkZChpZEF0dHJWYWwu
aW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNF
bXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCkgewotICAgICAgICAgICAgICAgIGFw
cGVuZChtX2NhY2hlLm5hbWVDYWNoZSwgbmFtZUF0dHJWYWwsIGVsZW1lbnQpOworICAgICAgICAg
ICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZWxlbWVudCk7CiAgICAgICAgICAg
ICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmFkZChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xODcsMTMgKzE4MiwxMyBAQCB2b2lkIEhUTUxGb3JtQ29s
bGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgp
OwogICAgICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxl
bWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgYXBwZW5k
KG1fY2FjaGUuaWRDYWNoZSwgaWRBdHRyVmFsLCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBh
cHBlbmRJZENhY2hlKGlkQXR0clZhbCwgZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoIW5hbWVB
dHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5w
dXRFbGVtZW50cy5jb250YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKQotICAgICAgICAgICAgICAg
IGFwcGVuZChtX2NhY2hlLm5hbWVDYWNoZSwgbmFtZUF0dHJWYWwsIGVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZWxlbWVudCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBtX2NhY2hlLmhhc05hbWVDYWNoZSA9IHRydWU7CisgICAgc2V0SGFz
TmFtZUNhY2hlKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVD
b2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1l
Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBI
VE1MTmFtZUNvbGxlY3Rpb246OkhUTUxOYW1lQ29sbGVjdGlvbihECiB7CiB9CiAKLUVsZW1lbnQq
IEhUTUxOYW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVyKEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAor
RWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0ZXIoTm9kZSogcHJldmlvdXMpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKHByZXZpb3VzICE9IGJhc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNTIzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhUTUxOYW1lQ29sbGVjdGlvbihE
b2N1bWVudCosIENvbGxlY3Rpb25UeXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogCi0g
ICAgdmlydHVhbCBFbGVtZW50KiBpdGVtQWZ0ZXIoRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbUFmdGVyKE5vZGUqKSBjb25zdCBPVkVSUklERTsKIAog
ICAgIEF0b21pY1N0cmluZyBtX25hbWU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTAsNyArNzEw
LDcgQEAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIEhUTUxTZWxlY3RFbAogdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6aW52YWxpZGF0ZVNlbGVjdGVkSXRlbXMoKQogewogICAgIGlmIChtX3Nl
bGVjdGVkT3B0aW9uc0NvbGxlY3Rpb24pCi0gICAgICAgIG1fc2VsZWN0ZWRPcHRpb25zQ29sbGVj
dGlvbi0+Y2xlYXJDYWNoZSgpOworICAgICAgICBtX3NlbGVjdGVkT3B0aW9uc0NvbGxlY3Rpb24t
PmludmFsaWRhdGVDYWNoZSgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNh
bGNMaXN0SXRlbXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVS
b3dzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsOSAr
MTYxLDkgQEAgUGFzc093blB0cjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTAogICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24odGFibGUpKTsKIH0KIAot
RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Oml0ZW1BZnRlcihFbGVtZW50KiBwcmV2
aW91cykgY29uc3QKK0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjppdGVtQWZ0ZXIo
Tm9kZSogcHJldmlvdXMpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFwcmV2aW91cyB8fCBwcmV2aW91
cy0+aGFzTG9jYWxOYW1lKHRyVGFnKSk7CisgICAgQVNTRVJUKCFwcmV2aW91cyB8fCAocHJldmlv
dXMtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KHByZXZpb3VzKS0+aGFzTG9jYWxO
YW1lKHRyVGFnKSkpOwogICAgIHJldHVybiByb3dBZnRlcihzdGF0aWNfY2FzdDxIVE1MVGFibGVF
bGVtZW50Kj4oYmFzZSgpKSwgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudCo+KHByZXZp
b3VzKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmgJKHJldmlzaW9uIDEyMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlUm93c0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKEhUTUxUYWJsZUVs
ZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbUFmdGVyKEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihOb2RlKikgY29uc3QgT1ZFUlJJREU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZQo=
</data>
<flag name="review"
          id="158281"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="158301"
          type_id="3"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>