<?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>111832</bug_id>
          
          <creation_ts>2013-03-08 01:21:03 -0800</creation_ts>
          <short_desc>DFG overflow check elimination is too smart for its own good</short_desc>
          <delta_ts>2013-03-11 23:46:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>111928</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850978</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 01:21:03 -0800</bug_when>
    <thetext>I&apos;ve learned that:

1) It&apos;s unsound, see test case below.

2) It takes up too much compile time while trying to be too smart.



function foo(a, b, o) {
    return (a + b + o.f) | 0;
}

eval(&quot;&quot;);

var array = [];
for (var i = 0; i &lt; 10000; ++i) {
    var a, b, c;
    if (i &lt; 100) {
        a = 1;
        b = 2;
        c = 3;
    } else {
        var j = i - 100;
        a = 2147483647 - ((j + 0) / 3) | 0;
        b = 2147483647 - ((j + 1) / 3) | 0;
        c = 4503599627370495 * Math.pow(2, (((j / 3) % 1000) | 0) - 1);
    }
    var result = foo(a, b, {f:c});
    if (i &gt;= 100)
        array.push(result);
}

print(array);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850979</commentid>
    <comment_count>1</comment_count>
      <attachid>192175</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 01:21:26 -0800</bug_when>
    <thetext>Created attachment 192175
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851495</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 14:00:43 -0800</bug_when>
    <thetext>Better test:



function foo(a, b, o) {
    return (a + b + o.f) | 0;
}

function bar(a, b, o) {
    eval(&quot;&quot;); // Prevent this function from being compiled.
    return foo(a, b, o);
}

var badCases = [
    {a:2147483645, b:2147483644, c:9007199254740990, expected:-8},
    {a:2147483643, b:2147483643, c:18014398509481980, expected:-16},
    {a:2147483643, b:2147483642, c:36028797018963960, expected:-16},
    {a:2147483642, b:2147483642, c:36028797018963960, expected:-16},
    {a:2147483641, b:2147483640, c:144115188075855840, expected:-32},
    {a:2147483640, b:2147483640, c:144115188075855840, expected:-64},
    {a:2147483640, b:2147483639, c:288230376151711680, expected:-64},
    {a:2147483639, b:2147483639, c:288230376151711680, expected:-64}
];

var warmup = 100;

for (var i = 0; i &lt; warmup + badCases.length; ++i) {
    var a, b, c;
    var expected;
    if (i &lt; warmup) {
        a = 1;
        b = 2;
        c = 3;
        expected = 6;
    } else {
        var current = badCases[i - warmup];
        a = current.a;
        b = current.b;
        c = current.c;
        expected = current.expected;
    }
    var result = bar(a, b, {f:c});
    if (result != expected)
        print(&quot;Bad result: a = &quot; + a + &quot;, b = &quot; + b + &quot;, c = &quot; + c + &quot;: expected = &quot; + expected + &quot;, but got: &quot; + result);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851496</commentid>
    <comment_count>3</comment_count>
      <attachid>192281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 14:09:25 -0800</bug_when>
    <thetext>Created attachment 192281
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851499</commentid>
    <comment_count>4</comment_count>
      <attachid>192281</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-08 14:14:12 -0800</bug_when>
    <thetext>Comment on attachment 192281
the patch

Attachment 192281 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17109221</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851533</commentid>
    <comment_count>5</comment_count>
      <attachid>192281</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-08 14:54:11 -0800</bug_when>
    <thetext>Comment on attachment 192281
the patch

Attachment 192281 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17050668</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851535</commentid>
    <comment_count>6</comment_count>
      <attachid>192281</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-08 14:57:55 -0800</bug_when>
    <thetext>Comment on attachment 192281
the patch

Attachment 192281 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17113204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851609</commentid>
    <comment_count>7</comment_count>
      <attachid>192307</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 16:37:04 -0800</bug_when>
    <thetext>Created attachment 192307
patch for landing

The actual patch will also have two test cases, but I haven&apos;t built the expectations files for those yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851610</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-08 16:39:22 -0800</bug_when>
    <thetext>Attachment 192307 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUnificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessData.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.cpp:54:  Missing spaces around &lt;&lt;  [whitespace/operators] [3]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851677</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-08 18:53:26 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/145299</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851830</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-09 14:43:13 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 111928</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853122</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-11 23:46:31 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/145489</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192175</attachid>
            <date>2013-03-08 01:21:26 -0800</date>
            <delta_ts>2013-03-08 14:09:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlz
aW9uIDE0NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAgQXJyYXlNb2RlIEFycmF5TW9k
ZTo6cmVmaW5lKFNwZWN1bGF0ZWRUeQogICAgICAgICByZXR1cm4gd2l0aFR5cGVBbmRDb252ZXJz
aW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Q29udmVydCk7CiAgICAgICAgIAogICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgaWYgKGZsYWdzICYgTm9kZVVzZWRBc0ludExvY2Fs
bHkpCisgICAgICAgIGlmIChmbGFncyAmIE5vZGVVc2VkQXNJbnQpCiAgICAgICAgICAgICByZXR1
cm4gd2l0aFR5cGVBbmRDb252ZXJzaW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6UmFnZUNv
bnZlcnQpOwogICAgICAgICBpZiAoIXZhbHVlIHx8IGlzTnVtYmVyU3BlY3VsYXRpb24odmFsdWUp
KQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICByZXR1cm4gd2l0aFR5cGVBbmRD
b252ZXJzaW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Q29udmVydCk7CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgIGlmIChkb2VzQ29udmVyc2lvbigp
ICYmIChmbGFncyAmIE5vZGVVc2VkQXNJbnRMb2NhbGx5KSkKKyAgICAgICAgaWYgKGRvZXNDb252
ZXJzaW9uKCkgJiYgKGZsYWdzICYgTm9kZVVzZWRBc0ludCkpCiAgICAgICAgICAgICByZXR1cm4g
d2l0aENvbnZlcnNpb24oQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImJhY2t3YXJkcyBwcm9wYWdh
dGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisg
ICAgICAgICAgICAgICAgcHJvcGFnYXRlKGJsb2NrLT5hdChpbmRleEluQmxvY2spKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW1f
Z3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9k
ZSk7CisgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
IW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7
CisgICAgfQorCisgICAgLy8gVGVzdHMgaWYgdGhlIGFic29sdXRlIHZhbHVlIGlzIHN0cmljdGx5
IGxlc3MgdGhhbiB0aGUgcG93ZXIgb2YgdHdvLgorICAgIHRlbXBsYXRlPGludCBwb3dlcj4KKyAg
ICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQo
Y29kZUJsb2NrKCkpOworICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRvdWJsZSBpbW1kaWF0ZSA9IGltbWVk
aWF0ZVZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIHJldHVybiBpbW1lZGlhdGUgPiAtKHN0YXRp
Y19jYXN0PGludDY0X3Q+KDEpIDw8IHBvd2VyKSAmJiBpbW1lZGlhdGUgPCAoc3RhdGljX2Nhc3Q8
aW50NjRfdD4oMSkgPDwgcG93ZXIpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxpbnQgcG93
ZXI+CisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25z
dGFudDxwb3dlcj4obm9kZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPGludCBwb3dlcj4K
KyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDogeworICAgICAg
ICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50PHBvd2VyPihub2RlKTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOiB7CisgICAgICAg
ICAgICBpZiAocG93ZXIgPiAzMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2
ZTxwb3dlcj4obm9kZS0+Y2hpbGQxKCkubm9kZSgpKQorICAgICAgICAgICAgICAgIHx8IGlzV2l0
aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZTxwb3dlcj4obm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNh
c2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBWYWx1ZVRv
SW50MzI6IHsKKyAgICAgICAgICAgIHJldHVybiBwb3dlciA+IDMxOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlm
dDogeworICAgICAgICAgICAgaWYgKHBvd2VyID4gMzEpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9
IEpTQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
SlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT52YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2soKSk7CisgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gaW1tZWRp
YXRlVmFsdWUgPiAzMiAtIHBvd2VyOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHRlbXBsYXRlPGludCBwb3dlcj4KKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvPHBvd2VyPihl
ZGdlLm5vZGUoKSk7CisgICAgfQorCisgICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGlmIChu
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAg
ICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdh
dGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZs
YWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludDsKKyAgICAgICAgICAgIGZsYWdzICY9
IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIp
OworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjog
eworICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludDsKKyAgICAgICAgICAgIGZsYWdz
ICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3Ro
ZXIpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0
cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJZGVudGl0eTogCisgICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGls
ZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAg
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFz
TnVtYmVyUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKKyAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvPDQ4Pihub2RlLT5jaGlsZDEo
KSkgJiYgIWlzV2l0aGluUG93ZXJPZlR3bzw0OD4obm9kZS0+Y2hpbGQyKCkpKQorICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICAgICAg
aWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVl
ZHNOZWdaZXJvOworICAgICAgICAgICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd288NDg+KG5vZGUt
PmNoaWxkMSgpKSAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvPDQ4Pihub2RlLT5jaGlsZDIoKSkpCisg
ICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3RaZXJv
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVO
ZWVkc05lZ1plcm87CisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3bzw0OD4obm9k
ZS0+Y2hpbGQxKCkpICYmICFpc1dpdGhpblBvd2VyT2ZUd288NDg+KG5vZGUtPmNoaWxkMigpKSkK
KyAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOworICAgICAgICAgICAg
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsK
KyAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CisKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAg
ICAgLy8gQXMgc29vbiBhcyBhIG11bHRpcGx5IGhhcHBlbnMsIHdlIGNhbiBlYXNpbHkgZW5kIHVw
IGluIHRoZSBwYXJ0CisgICAgICAgICAgICAvLyBvZiB0aGUgZG91YmxlIGRvbWFpbiB3aGVyZSB0
aGUgcG9pbnQgYXQgd2hpY2ggeW91IGRvIHRydW5jYXRpb24KKyAgICAgICAgICAgIC8vIGNhbiBj
aGFuZ2UgdGhlIG91dGNvbWUuIFNvLCBBcml0aE11bCBhbHdheXMgZm9yY2VzIGl0cyBpbnB1dHMg
dG8KKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdy4gQWRkaXRpb25hbGx5LCBpdCB3
aWxsIGhhdmUgdG8gY2hlY2sgZm9yIG92ZXJmbG93CisgICAgICAgICAgICAvLyBpdHNlbGYgdW5s
ZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcworICAg
ICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3bzwyMj4obm9kZS0+Y2hpbGQx
KCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd288MjI+KG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c051bWJlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKKworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7
CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CisKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICAgICAgZmxh
Z3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CisgICAgICAgICAgICBm
bGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOworCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0lu
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVV
c2VkQXNJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJBdDogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0ckNhdDogeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAg
ICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Cisg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
VXNlZEFzT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogeworICAgICAgICAg
ICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOworICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfTsKKworYm9vbCBwZXJmb3Jt
QmFja3dhcmRzUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja3dhcmRzIFByb3BhZ2F0aW9uIFBoYXNlIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPEJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluZmVyIGJhc2lj
IGluZm9ybWF0aW9uIGFib3V0IGhvdyBub2RlcyBhcmUgdXNlZCBieSBkb2luZyBhIGJsb2NrLWxv
Y2FsCisvLyBiYWNrd2FyZHMgZmxvdyBhbmFseXNpcy4KKworYm9vbCBwZXJmb3JtQmFja3dhcmRz
UHJvcGFnYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDUxODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAg
ICAgY2xlYXJJc0xvYWRlZEZyb20oKTsKICAgICAgICAgZnJlZVVubmVjZXNzYXJ5Tm9kZXMoKTsK
ICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRl
UGhpczxMb2NhbE9wZXJhbmQ+KCk7CkBAIC01OCw2ICs1OSwxMiBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgCisgICAgdm9pZCBjbGVhcklzTG9hZGVkRnJvbSgpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uc2V0
SXNMb2FkZWRGcm9tKGZhbHNlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBmcmVlVW5uZWNlc3Nh
cnlOb2RlcygpCiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENQUyBSZXRocmVhZGluZzogZnJlZVVubmVjZXNzYXJ5Tm9kZXMiKTsKQEAgLTE3MCwxMiAr
MTc3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+c2V0SXNMb2FkZWRGcm9tKHRydWUpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOwogICAgICAgICAgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5zZXRJc0xvYWRlZEZyb20odHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJO
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjAwLDYgKzIw
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xvYWRlZEZyb20odHJ1ZSk7CiAgICAgICAgIE5vZGUq
IHBoaSA9IGFkZFBoaTxvcGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFyaWFibGUsIGlk
eCk7CiAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOwogICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBwaGk7
CkBAIC0yNTYsNiArMjY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xv
YWRlZEZyb20odHJ1ZSk7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdp
dGggaGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCiAgICAgICAgICAg
ICAvLyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0aGF0IGlmIHRoZXJlIGhhZCBhbHJl
YWR5IGJlZW4gYSBwcmV2aW91cwogICAgICAgICAgICAgLy8gdXNlIGF0IHRhaWwgdGhlbiB3ZSBk
b24ndCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJpYWJsZXNBdFRhaWwgdG8KQEAgLTI2
Niw2ICsyNzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2YXJpYWJsZS0+c2V0SXNMb2FkZWRGcm9tKHRydWUpOwogICAgICAg
ICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShhZGRQaGk8b3BlcmFuZEtpbmQ+KG5vZGUt
PmNvZGVPcmlnaW4sIHZhcmlhYmxlLCBpZHgpKSk7CiAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CiAgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQ1MTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OSw4ICsxNzksOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPmNoaWxkMygpKTsKICAgICB9CiAK
LSAgICBpZiAoc3RybGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKSkKLSAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLT5mbGFncygpKSk7Cisg
ICAgaWYgKHRvQ1N0cmluZyhOb2RlRmxhZ3NEdW1wKG5vZGUtPmZsYWdzKCkpKSAhPSAiPGVtcHR5
PiIpCisgICAgICAgIG91dC5wcmludChjb21tYSwgTm9kZUZsYWdzRHVtcChub2RlLT5mbGFncygp
KSk7CiAgICAgaWYgKG5vZGUtPmhhc0FycmF5TW9kZSgpKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyTnVtYmVyKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lv
biAxNDUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzOSArMjgsODEgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCi0jaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNv
bnN0IGNoYXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKK3ZvaWQgZHVtcE5v
ZGVGbGFncyhQcmludFN0cmVhbSYgb3V0LCBOb2RlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKCEo
ZmxhZ3MgXiBOb2RlRG9lc05vdEV4aXQpKQotICAgICAgICByZXR1cm4gIjxlbXB0eT4iOworICAg
IGlmICghKGZsYWdzIF4gTm9kZURvZXNOb3RFeGl0KSkgeworICAgICAgICBvdXQucHJpbnQoIjxl
bXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQg
c2l6ZSA9IDEyODsKLSAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKLSAgICBCb3Vu
ZHNDaGVja2VkUG9pbnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24sIHNpemUpOwotICAgIAotICAg
IGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOworICAgIENvbW1hUHJpbnRlciBjb21tYSgifCIpOwog
ICAgIAogICAgIGlmIChmbGFncyAmIE5vZGVSZXN1bHRNYXNrKSB7CiAgICAgICAgIHN3aXRjaCAo
ZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgewogICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKLSAg
ICAgICAgICAgIHB0ci5zdHJjYXQoIkpTIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJKUyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJl
cjoKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoIk51bWJlciIpOworICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiTnVtYmVyIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBO
b2RlUmVzdWx0SW50MzI6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJJbnQzMiIpOworICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiSW50MzIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiQm9v
bGVhbiIpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQm9vbGVhbiIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdFN0b3JhZ2U6Ci0gICAgICAgICAg
ICBwdHIuc3RyY2F0KCJTdG9yYWdlIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJT
dG9yYWdlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgaWYg
KGZsYWdzICYgTm9kZU11c3RHZW5lcmF0ZSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAg
ICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTXVzdEdlbiIp
OwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKGZsYWdzICYgTm9k
ZU11c3RHZW5lcmF0ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiTXVzdEdlbiIpOwogICAg
IAotICAgIGlmIChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGlmIChoYXNQcmlu
dGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJW
YXJBcmdzIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KKyAgICBpZiAoZmxh
Z3MgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVmFyQXJncyIp
OwogICAgIAotICAgIGlmIChmbGFncyAmIE5vZGVDbG9iYmVyc1dvcmxkKSB7Ci0gICAgICAgIGlm
IChoYXNQcmludGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIu
c3RyY2F0KCJDbG9iYmVycyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Cisg
ICAgaWYgKGZsYWdzICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgIkNsb2JiZXJzIik7CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZU1pZ2h0Q2xvYmJlcikg
ewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsK
LSAgICAgICAgcHRyLnN0cmNhdCgiTWlnaHRDbG9iYmVyIik7Ci0gICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwotICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWlnaHRDbG9iYmVyKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJNaWdodENsb2JiZXIiKTsKICAgICAKICAgICBpZiAoZmxhZ3Mg
JiBOb2RlUmVzdWx0TWFzaykgewotICAgICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1i
ZXIpICYmICEoZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSkgewotICAgICAgICAgICAgaWYgKGhh
c1ByaW50ZWQpCi0gICAgICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICAgICAg
cHRyLnN0cmNhdCgiUHVyZUludCIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKSB7Ci0gICAgICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0g
ICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlSW50KHcvIG5lZyB6ZXJvKSIpOwotICAgICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVO
ZWVkc05lZ1plcm8pKSB7Ci0gICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAg
ICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlTnVtIik7
Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ZmxhZ3MgJiBOb2RlVXNlZEFzT3RoZXIpIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQot
ICAgICAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgICAgIHB0ci5zdHJjYXQo
IlVzZUFzT3RoZXIiKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgfQorICAgICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpICYmICEoZmxh
Z3MgJiBOb2RlTmVlZHNOZWdaZXJvKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIlB1
cmVJbnQiKTsKKyAgICAgICAgZWxzZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKQor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUHVyZUludCh3LyBuZWcgemVybykiKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiUHVyZU51bSIpOworICAgICAgICBpZiAoZmxhZ3MgJiBOb2RlVXNl
ZEFzT3RoZXIpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJVc2VBc090aGVyIik7Cisg
ICAgfQorICAgIAorICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiTWF5T3ZlcmZsb3ciKTsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2Rl
TWF5TmVnWmVybykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiTWF5TmVnWmVybyIpOwogICAg
IAotICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykgewotICAgICAgICBpZiAoaGFzUHJp
bnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgi
TWF5T3ZlcmZsb3ciKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlm
IChmbGFncyAmIE5vZGVVc2VkQXNJbnQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIlVzZUFz
SW50Iik7CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZU1heU5lZ1plcm8pIHsKLSAgICAgICAg
aWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0
ci5zdHJjYXQoIk1heU5lZ1plcm8iKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAg
fQotICAgIAotICAgIGlmIChmbGFncyAmIE5vZGVVc2VkQXNJbnQpIHsKLSAgICAgICAgaWYgKGhh
c1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJj
YXQoIlVzZUFzSW50Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpIHsKLSAgICAgICAgaWYgKGhhc1By
aW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQo
IkNhbkV4aXQiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmICgh
KGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ2Fu
RXhpdCIpOwogICAgIAotICAgIGlmIChmbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAg
ICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAg
IHB0ci5zdHJjYXQoIk5vZGVFeGl0c0ZvcndhcmQiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgfQotICAgIAotICAgICpwdHIrKyA9IDA7Ci0gICAgCi0gICAgcmV0dXJuIGRlc2Ny
aXB0aW9uOworICAgIGlmIChmbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIk5vZGVFeGl0c0ZvcndhcmQiKTsKIH0KIAotCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTQ1MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
MTUgKzU5LDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICNkZWZpbmUgTm9k
ZVVzZWRBc090aGVyICAgICAgICAgIDB4MDgwMCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0
YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVu
IE5hTiBhbmQgb3RoZXIgdGhpbmdzIChsaWtlIHVuZGVmaW5lZCkuCiAjZGVmaW5lIE5vZGVVc2Vk
QXNWYWx1ZSAgICAgICAgICAoTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBO
b2RlVXNlZEFzT3RoZXIpCiAjZGVmaW5lIE5vZGVVc2VkQXNJbnQgICAgICAgICAgICAweDEwMDAg
Ly8gVGhlIHJlc3VsdCBvZiB0aGlzIGNvbXB1dGF0aW9uIGlzIGtub3duIHRvIGJlIHVzZWQgaW4g
YSBjb250ZXh0IHRoYXQgcHJlZmVycywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIGludGVnZXIgdmFs
dWVzLgotI2RlZmluZSBOb2RlVXNlZEFzSW50TG9jYWxseSAgICAgMHgyMDAwIC8vIFNhbWUgYXMg
Tm9kZVVzZWRBc0ludCwgYnV0IHdpdGhpbiB0aGUgc2FtZSBiYXNpYyBibG9jay4KIAogI2RlZmlu
ZSBOb2RlQXJpdGhGbGFnc01hc2sgICAgICAgKE5vZGVCZWhhdmlvck1hc2sgfCBOb2RlQmFja1By
b3BNYXNrKQogCi0jZGVmaW5lIE5vZGVEb2VzTm90RXhpdCAgICAgICAgICAweDQwMDAgLy8gVGhp
cyBmbGFnIGlzIG5lZ2F0ZWQgdG8gbWFrZSBpdCBuYXR1cmFsIGZvciB0aGUgZGVmYXVsdCB0byBi
ZSB0aGF0IGEgbm9kZSBkb2VzIGV4aXQuCisjZGVmaW5lIE5vZGVEb2VzTm90RXhpdCAgICAgICAg
ICAweDIwMDAgLy8gVGhpcyBmbGFnIGlzIG5lZ2F0ZWQgdG8gbWFrZSBpdCBuYXR1cmFsIGZvciB0
aGUgZGVmYXVsdCB0byBiZSB0aGF0IGEgbm9kZSBkb2VzIGV4aXQuCiAKLSNkZWZpbmUgTm9kZVJl
bGV2YW50VG9PU1IgICAgICAgIDB4ODAwMAorI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAg
ICAgMHg0MDAwCiAKLSNkZWZpbmUgTm9kZUV4aXRzRm9yd2FyZCAgICAgICAgMHgxMDAwMAorI2Rl
ZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAgMHg4MDAwCiAKIHR5cGVkZWYgdWludDMyX3Qg
Tm9kZUZsYWdzOwogCkBAIC0xMDIsNyArMTAxLDggQEAgc3RhdGljIGlubGluZSBib29sIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZwogICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBjaGFyKiBub2Rl
RmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MpOwordm9pZCBkdW1wTm9kZUZsYWdzKFByaW50U3RyZWFt
JiwgTm9kZUZsYWdzKTsKK01BS0VfUFJJTlRfQURBUFRPUihOb2RlRmxhZ3NEdW1wLCBOb2RlRmxh
Z3MsIGR1bXBOb2RlRmxhZ3MpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDUxODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA2LDY1ICsxMDYsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jdXJy
ZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05v
dE5lZ1plcm8oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJl
ckNvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKLSAgICAgICAg
cmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8IDAuMDsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBpc05vdFplcm8oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051
bWJlckNvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQg
cG93ZXIpCi0gICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVl
LmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50MzJfdCBp
bnRJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBp
bnRJbW1lZGlhdGUgPiAtKDEgPDwgcG93ZXIpICYmIGludEltbWVkaWF0ZSA8ICgxIDw8IHBvd2Vy
KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUo
Tm9kZSogbm9kZSwgaW50IHBvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
SlNDb25zdGFudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGlz
V2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDog
ewotICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUs
IHBvd2VyKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQml0QW5kOiB7
Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCi0gICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dl
ck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgcG93ZXIpOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGNhc2Ug
Qml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9kZSogc2hpZnRBbW91bnQgPSBub2RlLT5jaGls
ZDIoKS5ub2RlKCk7Ci0gICAgICAgICAgICBpZiAoc2hpZnRBbW91bnQtPm9wKCkgIT0gSlNDb25z
dGFudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBKU1ZhbHVl
IGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKLSAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1
ZSA+IDMyIC0gcG93ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKFNwZWN1bGF0ZWRU
eXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHZhbHVl
KSkKQEAgLTE4NSw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlRmxhZ3MgZmxhZ3Mg
PSBub2RlLT5mbGFncygpICYgTm9kZUJhY2tQcm9wTWFzazsKIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9w
TmFtZShvcCksICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxh
Z3MpLCAiICIpOworICAgICAgICBkYXRhTG9nKCIgICAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgIiAi
LCBtX2N1cnJlbnROb2RlLCAiOiAiLCBOb2RlRmxhZ3NEdW1wKGZsYWdzKSwgIiAiKTsKICNlbmRp
ZgogICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC04MzYsMzAgKzc3
Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAg
ICAgICAgCi0gICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBub2RlKQotICAgIHsKLSAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIGNoaWxkSWR4
KyspIHsKLSAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQz
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gY2hhbmdlZDsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJkKCkKICAg
ICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQo
KSk7CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZChkYXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOwogICAgICAgICAg
ICAgZGF0YS0+ZmluZCgpLT5tZXJnZVNob3VsZE5ldmVyVW5ib3goZGF0YS0+c2hvdWxkTmV2ZXJV
bmJveCgpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0xvYWRlZEZyb20oZGF0
YS0+aXNMb2FkZWRGcm9tKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBo
Lm1fdW5pZmljYXRpb25TdGF0ZSA9IEdsb2JhbGx5VW5pZmllZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24g
MTQ1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lz
dGluZ0ZhaWxlZChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2Up
CisgICAgICAgICwgbV9pc0xvYWRlZEZyb20oZmFsc2UpCiAgICAgICAgICwgbV9kb3VibGVGb3Jt
YXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3Rl
cygpOwpAQCAtMTQ5LDYgKzE1MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzQXJn
dW1lbnRzQWxpYXM7CiAgICAgfQogICAgIAorICAgIGJvb2wgbWVyZ2VJc0xvYWRlZEZyb20oYm9v
bCBpc0xvYWRlZEZyb20pCisgICAgeworICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9pc0xv
YWRlZEZyb20sIG1faXNMb2FkZWRGcm9tIHwgaXNMb2FkZWRGcm9tKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRJc0xvYWRlZEZyb20oYm9vbCBpc0xvYWRlZEZyb20pCisgICAgeworICAgICAg
ICBtX2lzTG9hZGVkRnJvbSA9IGlzTG9hZGVkRnJvbTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0xvYWRlZEZyb20oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNMb2FkZWRGcm9tOworICAg
IH0KKyAgICAKICAgICBib29sIHByZWRpY3QoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogc2VsZiA9IGZpbmQoKTsKQEAgLTMwNiw2
ICszMjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0FyZ3VtZW50c0FsaWFzOwogICAgIGJv
b2wgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkOwogICAgIGJvb2wgbV9pc1Byb2ZpdGFi
bGVUb1VuYm94OworICAgIGJvb2wgbV9pc0xvYWRlZEZyb207CiAKICAgICBmbG9hdCBtX3ZvdGVz
WzJdOyAvLyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZvdGluZyBidXQgbWF5IGJlIHJldXNl
ZCBmb3Igb3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9kb3VibGVGb3Jt
YXRTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192281</attachid>
            <date>2013-03-08 14:09:25 -0800</date>
            <delta_ts>2013-03-08 16:37:04 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61013</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1MjY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTAzLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIG92ZXJmbG93IGNoZWNrIGVsaW1pbmF0aW9uIGlzIHRvbyBzbWFydCBmb3IgaXRzIG93biBn
b29kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE4
MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaW1wcm92ZXMgb3ZlcmZsb3cgY2hlY2sgZWxpbWluYXRpb24gaW4gdGhyZWUgd2F5
czoKKyAgICAgICAgCisgICAgICAgIDEpIEl0IHJlZHVjZXMgdGhlIGFtb3VudCBvZiB0aW1lIHRo
ZSBjb21waWxlciB3aWxsIHNwZW5kIGRvaW5nIGl0LgorICAgICAgICAKKyAgICAgICAgMikgSXQg
Zml4ZXMgYnVncyB3aGVyZSBvdmVyZmxvdyBjaGVjayBlbGltaW5hdGlvbiB3YXMgb3ZlcnplYWxv
dXMuIFByZWNpc2VseSwgZm9yIGEgYmluYXJ5IG9wZXJhdGlvbgorICAgICAgICAgICBvdmVyIEBh
IGFuZCBAYiB3aGVyZSBib3RoIEBhIGFuZCBAYiB3aWxsIHR5cGUgY2hlY2sgdGhhdCB0aGVpciBp
bnB1dHMgKEBhLT5jaGlsZHJlbiwgQGItPmNoaWxkcmVuKQorICAgICAgICAgICBhcmUgaW50MzIn
cyBhbmQgdGhlbiBwZXJmb3JtIGEgcG9zc2libHktb3ZlcmZsb3dpbmcgb3BlcmF0aW9uLCB3ZSBt
dXN0IGJlIGNhcmVmdWwgbm90IHRvIGFzc3VtZQorICAgICAgICAgICB0aGF0IEBhJ3Mgbm9uLWlu
dDMyIHBhcnRzIGRvbid0IG1hdHRlciBpZiBhdCB0aGUgcG9pbnQgdGhhdCBAYSBydW5zIHdlIGhh
dmUgYXMgeWV0IG5vdCBwcm92ZWQgdGhhdAorICAgICAgICAgICBAYi0+Y2hpbGRyZW4gYXJlIGlu
dDMyJ3MgYW5kIHRoYXQgaGVuY2UgQGIgbWlnaHQgcHJvZHVjZSBhIGxhcmdlIGVub3VnaCByZXN1
bHQgdGhhdCBkb3VibGVzIHdvdWxkCisgICAgICAgICAgIHN0YXJ0IGNob3BwaW5nIGxvdyBiaXRz
LiBUaGUgc3BlY2lmaWMgaW1wbGljYXRpb24gb2YgdGhpcyBpcyB0aGF0IGZvciBhIGJpbmFyeSBv
cGVyYXRpb24gdG8gbm90CisgICAgICAgICAgIHByb3BhZ2F0ZSB0aGF0IGl0IGNhcmVzIGFib3V0
IG5vbi1pbnQzMiBwYXJ0cyAoTm9kZVVzZWRBc051bWJlciksIHdlIG11c3QgcHJvdmUgdGhhdCBh
dCBsZWFzdCBvbmUKKyAgICAgICAgICAgb2YgdGhlIGlucHV0cyBpcyBndWFyYW50ZWVkIHRvIHBy
b2R1Y2UgYSByZXN1bHQgd2l0aGluIDJeNTIsIHRob3VnaCB3ZSBjb25zZXJ2YXRpdmVseSB1c2Ug
Ml40OC4KKyAgICAgICAgCisgICAgICAgIDMpIEl0IG1ha2VzIHRoZSBvdmVyZmxvdyBjaGVjayBl
bGltaW5hdGlvbiBtb3JlIHByZWNpc2UgZm9yIGNhc2VzIHdoZXJlIHRoZSBpbnB1dHMgdG8gYW4g
QWRkIG9yIFN1YgorICAgICAgICAgICBhcmUgdGhlIG91dHB1dHMgb2YgYSBiaXQtb3AuIEZvciBl
eGFtcGxlIGluIChAYSArIChAYiB8IDApKSB8IDAsIHdlIGRvbid0IG5lZWQgdG8gcHJvcGFnYXRl
CisgICAgICAgICAgIE5vZGVVc2VkQXNOdW1iZXIgdG8gZWl0aGVyIEBhIG9yIEBiLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OnJl
ZmluZSk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2U6OmlzTm90TmVnWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZTo6aXNOb3RaZXJvKToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlOjppc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6aXNXaXRoaW5Qb3dlck9mVHdvTm9u
UmVjdXJzaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
Ojppc1dpdGhpblBvd2VyT2ZUd28pOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2U6Om1lcmdlRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OnBl
cmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbik6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1By
b3BhZ2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVh
ZGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6
OmNsZWFySXNMb2FkZWRGcm9tKToKKyAgICAgICAgKENQU1JldGhyZWFkaW5nUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExvY2Fs
Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxp
emVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZUZsYWdzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkdW1wTm9kZUZsYWdzKToKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpVbmlmaWNhdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZUlzTG9hZGVkRnJvbSk6CisgICAgICAg
IChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNz
RGF0YTo6c2V0SXNMb2FkZWRGcm9tKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmlzTG9hZGVkRnJvbSk6CisKIDIwMTMtMDMtMDggIFJvZ2VyIEZvbmcgIDxyb2dlcl9m
b25nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlZmlsZSBmaXhlcy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTYzLDYgKzE2Myw4IEBACiAJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBE
RkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgKi87IH07CisJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzNEN0FC
MTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJ
MEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzNEN0FDMTY1QTE0
MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMjgxNUE4Q0MxRTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5j
cHAgKi87IH07CkBAIC0xMDYzLDYgKzEwNjUsOCBAQAogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5
N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4
RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NjM2LDYgKzI2NDAsOCBAQAogCQkJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1i
bHlIZWxwZXJzLmggKi8sCisJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJMEY2MjAxNzAxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKIAkJCQkwRkQ1NjUyMjE2QUI3ODBB
MDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIw
QzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCkBAIC0zNDA4LDYgKzM0MTQs
NyBAQAogCQkJCTBGRkI5MjFGMTZEMDMzMDUwMDU1QTVEQiAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDQ0FFNDUxNkQwQ0Y3NDAwRDBDNjVCIC8qIFBhcnNlckVycm9y
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00MDUxLDYgKzQwNTgs
NyBAQAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3Vy
Y2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NE
NEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcxNENBNDE2RUE5
MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJ
KHJldmlzaW9uIDE0NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAgQXJyYXlNb2RlIEFy
cmF5TW9kZTo6cmVmaW5lKFNwZWN1bGF0ZWRUeQogICAgICAgICByZXR1cm4gd2l0aFR5cGVBbmRD
b252ZXJzaW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Q29udmVydCk7CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgaWYgKGZsYWdzICYgTm9kZVVzZWRBc0lu
dExvY2FsbHkpCisgICAgICAgIGlmIChmbGFncyAmIE5vZGVVc2VkQXNJbnQpCiAgICAgICAgICAg
ICByZXR1cm4gd2l0aFR5cGVBbmRDb252ZXJzaW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6
UmFnZUNvbnZlcnQpOwogICAgICAgICBpZiAoIXZhbHVlIHx8IGlzTnVtYmVyU3BlY3VsYXRpb24o
dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICByZXR1cm4gd2l0aFR5
cGVBbmRDb252ZXJzaW9uKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Q29udmVydCk7CiAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgIGlmIChkb2VzQ29udmVy
c2lvbigpICYmIChmbGFncyAmIE5vZGVVc2VkQXNJbnRMb2NhbGx5KSkKKyAgICAgICAgaWYgKGRv
ZXNDb252ZXJzaW9uKCkgJiYgKGZsYWdzICYgTm9kZVVzZWRBc0ludCkpCiAgICAgICAgICAgICBy
ZXR1cm4gd2l0aENvbnZlcnNpb24oQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImJhY2t3YXJkcyBw
cm9wYWdhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2st
LTspCisgICAgICAgICAgICAgICAgcHJvcGFnYXRlKGJsb2NrLT5hdChpbmRleEluQmxvY2spKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBp
ZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSk7CisgICAgfQorCisgICAgLy8gVGVzdHMgaWYgdGhlIGFic29sdXRlIHZhbHVlIGlzIHN0
cmljdGx5IGxlc3MgdGhhbiB0aGUgcG93ZXIgb2YgdHdvLgorICAgIHRlbXBsYXRlPGludCBwb3dl
cj4KKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFsdWVPZkpTQ29u
c3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRvdWJsZSBpbW1lZGlhdGUg
PSBpbW1lZGlhdGVWYWx1ZS5hc051bWJlcigpOworICAgICAgICByZXR1cm4gaW1tZWRpYXRlID4g
LShzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCBwb3dlcikgJiYgaW1tZWRpYXRlIDwgKHN0YXRp
Y19jYXN0PGludDY0X3Q+KDEpIDw8IHBvd2VyKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
aW50IHBvd2VyPgorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdv
Rm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxpbnQg
cG93ZXI+CisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsK
KyAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudDxwb3dlcj4o
bm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdEFuZDogewor
ICAgICAgICAgICAgaWYgKHBvd2VyID4gMzEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Ob25S
ZWN1cnNpdmU8cG93ZXI+KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICB8
fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmU8cG93ZXI+KG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdE9yOgorICAg
ICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOiB7CisgICAgICAgICAgICByZXR1cm4gcG93ZXIgPiAzMTsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIGlmIChwb3dlciA+IDMxKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3Vu
dCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+
b3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29u
c3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dlcjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZU
d28oRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3bzxw
b3dlcj4oZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIGJvb2wgbWVyZ2VEZWZhdWx0RmxhZ3Mo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAg
IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAg
ICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCEhbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQy
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJvcGFnYXRlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBu
b2RlLT5mbGFncygpICYgTm9kZUJhY2tQcm9wTWFzazsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKGZs
YWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
IGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0xvYWRlZEZyb20oKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJp
dFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0Ogor
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2Vk
QXNJbnQ7CisgICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVl
ZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNJbnQ7CisgICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRB
c0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgSWRlbnRpdHk6IAorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAg
IGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8o
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5l
ZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzTnVtYmVyUmVz
dWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3VsdCgpKQorICAgICAgICAgICAg
ICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CisgICAgICAgICAgICBpZiAoIWlzV2l0aGlu
UG93ZXJPZlR3bzw0OD4obm9kZS0+Y2hpbGQxKCkpICYmICFpc1dpdGhpblBvd2VyT2ZUd288NDg+
KG5vZGUtPmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVt
YmVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAg
ICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGlmICgh
aXNXaXRoaW5Qb3dlck9mVHdvPDQ4Pihub2RlLT5jaGlsZDEoKSkgJiYgIWlzV2l0aGluUG93ZXJP
ZlR3bzw0OD4obm9kZS0+Y2hpbGQyKCkpKQorICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNOdW1iZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAg
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgaWYg
KCFpc1dpdGhpblBvd2VyT2ZUd288NDg+KG5vZGUtPmNoaWxkMSgpKSAmJiAhaXNXaXRoaW5Qb3dl
ck9mVHdvPDQ4Pihub2RlLT5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVz
ZWRBc090aGVyOworCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0aXBseSBo
YXBwZW5zLCB3ZSBjYW4gZWFzaWx5IGVuZCB1cCBpbiB0aGUgcGFydAorICAgICAgICAgICAgLy8g
b2YgdGhlIGRvdWJsZSBkb21haW4gd2hlcmUgdGhlIHBvaW50IGF0IHdoaWNoIHlvdSBkbyB0cnVu
Y2F0aW9uCisgICAgICAgICAgICAvLyBjYW4gY2hhbmdlIHRoZSBvdXRjb21lLiBTbywgQXJpdGhN
dWwgYWx3YXlzIGZvcmNlcyBpdHMgaW5wdXRzIHRvCisgICAgICAgICAgICAvLyBjaGVjayBmb3Ig
b3ZlcmZsb3cuIEFkZGl0aW9uYWxseSwgaXQgd2lsbCBoYXZlIHRvIGNoZWNrIGZvciBvdmVyZmxv
dworICAgICAgICAgICAgLy8gaXRzZWxmIHVubGVzcyB3ZSBjYW4gcHJvdmUgdGhhdCB0aGVyZSBp
cyBubyB3YXkgZm9yIHRoZSB2YWx1ZXMKKyAgICAgICAgICAgIC8vIHByb2R1Y2VkIHRvIGNhdXNl
IGRvdWJsZSByb3VuZGluZy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFpc1dpdGhp
blBvd2VyT2ZUd288MjI+KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAm
JiAhaXNXaXRoaW5Qb3dlck9mVHdvPDIyPihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAg
ICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CisKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CisgICAgICAgICAgICBmbGFncyAmPSB+Tm9k
ZVVzZWRBc090aGVyOworCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvOworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKKwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6
IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXpl
OiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUgfCBOb2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBTdHJDYXQ6IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTog
eworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5
VmFsOiB7CisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1lcmdlRGVm
YXVsdEZsYWdzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
OworCitib29sIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrd2FyZHMgUHJvcGFnYXRp
b24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8QmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Vf
aAorI2RlZmluZSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gSW5mZXIgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgaG93IG5vZGVzIGFyZSB1c2VkIGJ5
IGRvaW5nIGEgYmxvY2stbG9jYWwKKy8vIGJhY2t3YXJkcyBmbG93IGFuYWx5c2lzLgorCitib29s
IHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NTI2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
bV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAorICAgICAgICBjbGVhcklzTG9hZGVkRnJvbSgpOwogICAgICAgICBmcmVlVW5u
ZWNlc3NhcnlOb2RlcygpOwogICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOwog
ICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKQEAgLTU4LDYgKzU5LDEyIEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAKKyAgICB2b2lkIGNsZWFySXNMb2FkZWRGcm9tKCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxl
QWNjZXNzRGF0YVtpXS5zZXRJc0xvYWRlZEZyb20oZmFsc2UpOworICAgIH0KKyAgICAKICAgICB2
b2lkIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCkKICAgICB7CiAgICAgICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nOiBmcmVlVW5uZWNlc3NhcnlOb2Rl
cyIpOwpAQCAtMTcwLDEyICsxNzcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xvYWRlZEZyb20odHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CiAgICAgICAg
ICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgp
ID0gbm9kZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPnNldElzTG9hZGVkRnJvbSh0cnVlKTsKICAgICAgICAgICAgICAg
ICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBv
dGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBl
bHNlCkBAIC0yMDAsNiArMjA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKKyAgICAgICAgdmFyaWFibGUtPnNldElzTG9hZGVkRnJvbSh0cnVl
KTsKICAgICAgICAgTm9kZSogcGhpID0gYWRkUGhpPG9wZXJhbmRLaW5kPihub2RlLT5jb2RlT3Jp
Z2luLCB2YXJpYWJsZSwgaWR4KTsKICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVk
Z2UocGhpKSk7CiAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hdEZvcjxvcGVyYW5k
S2luZD4oaWR4KSA9IHBoaTsKQEAgLTI1Niw2ICsyNjYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
dmFyaWFibGUtPnNldElzTG9hZGVkRnJvbSh0cnVlKTsKICAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG5vdGhpbmcgd3Jvbmcgd2l0aCBoYXZpbmcgcmVkdW5kYW50IEZsdXNoJ3MuIEl0IGp1c3QgbmVl
ZHMgdG8KICAgICAgICAgICAgIC8vIGJlIGxpbmtlZCBhcHByb3ByaWF0ZWx5LiBOb3RlIHRoYXQg
aWYgdGhlcmUgaGFkIGFscmVhZHkgYmVlbiBhIHByZXZpb3VzCiAgICAgICAgICAgICAvLyB1c2Ug
YXQgdGFpbCB0aGVuIHdlIGRvbid0IG92ZXJyaWRlIGl0LiBJdCdzIGZpbmUgZm9yIHZhcmlhYmxl
c0F0VGFpbCB0bwpAQCAtMjY2LDYgKzI3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xvYWRlZEZy
b20odHJ1ZSk7CiAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKGFkZFBoaTxv
cGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFyaWFibGUsIGlkeCkpKTsKICAgICAgICAg
bV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9kZTsK
ICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgp
ID0gbm9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJl
dmlzaW9uIDE0NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIgorI2luY2x1ZGUg
IkRGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdCeXRlQ29kZVBh
cnNlci5oIgogI2luY2x1ZGUgIkRGR0NGQVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5oIgpAQCAtMTIyLDYgKzEyMyw3IEBAIGlubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAg
ICAgdmFsaWRhdGUoZGZnKTsKICAgICAKKyAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24o
ZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9y
bUZpeHVwKGRmZyk7CiAgICAgcGVyZm9ybVN0cnVjdHVyZUNoZWNrSG9pc3RpbmcoZGZnKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDUyNjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc5LDggKzE3OSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+Y2hpbGQzKCkpOwogICAg
IH0KIAotICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkp
KTsKKyAgICBpZiAodG9DU3RyaW5nKE5vZGVGbGFnc0R1bXAobm9kZS0+ZmxhZ3MoKSkpICE9ICI8
ZW1wdHk+IikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBOb2RlRmxhZ3NEdW1wKG5vZGUtPmZs
YWdzKCkpKTsKICAgICBpZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAgIGlmIChub2RlLT5oYXNWYXJOdW1iZXIo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJl
dmlzaW9uIDE0NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTM5ICsyOCw4MSBAQAogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKLSNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotY29uc3QgY2hhciogbm9kZUZsYWdzQXNTdHJpbmcoTm9kZUZsYWdzIGZsYWdzKQordm9pZCBk
dW1wTm9kZUZsYWdzKFByaW50U3RyZWFtJiBvdXQsIE5vZGVGbGFncyBmbGFncykKIHsKLSAgICBp
ZiAoIShmbGFncyBeIE5vZGVEb2VzTm90RXhpdCkpCi0gICAgICAgIHJldHVybiAiPGVtcHR5PiI7
CisgICAgaWYgKCEoZmxhZ3MgXiBOb2RlRG9lc05vdEV4aXQpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgc3RhdGljIGNvbnN0
IGludCBzaXplID0gMTI4OwotICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwotICAg
IEJvdW5kc0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAg
Ci0gICAgYm9vbCBoYXNQcmludGVkID0gZmFsc2U7CisgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8
Iik7CiAgICAgCiAgICAgaWYgKGZsYWdzICYgTm9kZVJlc3VsdE1hc2spIHsKICAgICAgICAgc3dp
dGNoIChmbGFncyAmIE5vZGVSZXN1bHRNYXNrKSB7CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpT
OgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiSlMiKTsKKyAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgIkpTIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0
TnVtYmVyOgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiTnVtYmVyIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJOdW1iZXIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE5vZGVSZXN1bHRJbnQzMjoKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoIkludDMyIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJbnQzMiIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46Ci0gICAgICAgICAgICBwdHIuc3RyY2F0
KCJCb29sZWFuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJCb29sZWFuIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0U3RvcmFnZToKLSAgICAg
ICAgICAgIHB0ci5zdHJjYXQoIlN0b3JhZ2UiKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgIlN0b3JhZ2UiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBpZiAoZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVk
KQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJNdXN0
R2VuIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KKyAgICBpZiAoZmxhZ3Mg
JiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJNdXN0R2VuIik7
CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgaWYgKGhh
c1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJj
YXQoIlZhckFyZ3MiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlm
IChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJWYXJB
cmdzIik7CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZUNsb2JiZXJzV29ybGQpIHsKLSAgICAg
ICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAg
IHB0ci5zdHJjYXQoIkNsb2JiZXJzIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KKyAgICBpZiAoZmxhZ3MgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiQ2xvYmJlcnMiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlTWlnaHRDbG9i
YmVyKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgi
fCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJNaWdodENsb2JiZXIiKTsKLSAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmIChmbGFncyAmIE5vZGVNaWdodENsb2JiZXIpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgIk1pZ2h0Q2xvYmJlciIpOwogICAgIAogICAgIGlmIChm
bGFncyAmIE5vZGVSZXN1bHRNYXNrKSB7Ci0gICAgICAgIGlmICghKGZsYWdzICYgTm9kZVVzZWRB
c051bWJlcikgJiYgIShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pKSB7Ci0gICAgICAgICAgICBp
ZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAg
ICAgICBwdHIuc3RyY2F0KCJQdXJlSW50Iik7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIGlmICghKGZsYWdzICYgTm9kZVVzZWRBc051bWJlcikpIHsKLSAg
ICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgICAgIHB0ci5zdHJjYXQoInwi
KTsKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoIlB1cmVJbnQody8gbmVnIHplcm8pIik7Ci0gICAg
ICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICghKGZsYWdzICYg
Tm9kZU5lZWRzTmVnWmVybykpIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAg
ICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoIlB1cmVO
dW0iKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChmbGFncyAmIE5vZGVVc2VkQXNPdGhlcikgewotICAgICAgICAgICAgaWYgKGhhc1ByaW50
ZWQpCi0gICAgICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICAgICAgcHRyLnN0
cmNhdCgiVXNlQXNPdGhlciIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgICAgIGlmICghKGZsYWdzICYgTm9kZVVzZWRBc051bWJlcikgJiYg
IShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiUHVyZUludCIpOworICAgICAgICBlbHNlIGlmICghKGZsYWdzICYgTm9kZVVzZWRBc051bWJl
cikpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJQdXJlSW50KHcvIG5lZyB6ZXJvKSIp
OworICAgICAgICBlbHNlIGlmICghKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykpCisgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJQdXJlTnVtIik7CisgICAgICAgIGlmIChmbGFncyAmIE5v
ZGVVc2VkQXNPdGhlcikKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIlVzZUFzT3RoZXIi
KTsKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU1heU92ZXJmbG93KQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJNYXlPdmVyZmxvdyIpOworICAgIAorICAgIGlmIChmbGFncyAm
IE5vZGVNYXlOZWdaZXJvKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJNYXlOZWdaZXJvIik7
CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZU1heU92ZXJmbG93KSB7Ci0gICAgICAgIGlmICho
YXNQcmludGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3Ry
Y2F0KCJNYXlPdmVyZmxvdyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Cisg
ICAgaWYgKGZsYWdzICYgTm9kZVVzZWRBc0ludCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
VXNlQXNJbnQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgewotICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAg
ICAgcHRyLnN0cmNhdCgiTWF5TmVnWmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZVVzZWRBc0ludCkgewotICAgICAgICBp
ZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRy
LnN0cmNhdCgiVXNlQXNJbnQiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQot
ICAgIAotICAgIGlmICghKGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KSkgewotICAgICAgICBpZiAo
aGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0
cmNhdCgiQ2FuRXhpdCIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9CisgICAg
aWYgKCEoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJDYW5FeGl0Iik7CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZUV4aXRzRm9yd2FyZCkgewot
ICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAg
ICAgICAgcHRyLnN0cmNhdCgiTm9kZUV4aXRzRm9yd2FyZCIpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgKnB0cisrID0gMDsKLSAgICAKLSAgICByZXR1cm4g
ZGVzY3JpcHRpb247CisgICAgaWYgKGZsYWdzICYgTm9kZUV4aXRzRm9yd2FyZCkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiTm9kZUV4aXRzRm9yd2FyZCIpOwogfQogCi0KIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNDUyNjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTksMTUgKzYwLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICNkZWZpbmUgTm9kZVVzZWRBc090aGVyICAgICAgICAgIDB4MDgw
MCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250
ZXh0IHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIE5hTiBhbmQgb3RoZXIgdGhpbmdzIChsaWtl
IHVuZGVmaW5lZCkuCiAjZGVmaW5lIE5vZGVVc2VkQXNWYWx1ZSAgICAgICAgICAoTm9kZVVzZWRB
c051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpCiAjZGVmaW5lIE5v
ZGVVc2VkQXNJbnQgICAgICAgICAgICAweDEwMDAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGNvbXB1
dGF0aW9uIGlzIGtub3duIHRvIGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgcHJlZmVycywgYnV0
IGRvZXMgbm90IHJlcXVpcmUsIGludGVnZXIgdmFsdWVzLgotI2RlZmluZSBOb2RlVXNlZEFzSW50
TG9jYWxseSAgICAgMHgyMDAwIC8vIFNhbWUgYXMgTm9kZVVzZWRBc0ludCwgYnV0IHdpdGhpbiB0
aGUgc2FtZSBiYXNpYyBibG9jay4KIAogI2RlZmluZSBOb2RlQXJpdGhGbGFnc01hc2sgICAgICAg
KE5vZGVCZWhhdmlvck1hc2sgfCBOb2RlQmFja1Byb3BNYXNrKQogCi0jZGVmaW5lIE5vZGVEb2Vz
Tm90RXhpdCAgICAgICAgICAweDQwMDAgLy8gVGhpcyBmbGFnIGlzIG5lZ2F0ZWQgdG8gbWFrZSBp
dCBuYXR1cmFsIGZvciB0aGUgZGVmYXVsdCB0byBiZSB0aGF0IGEgbm9kZSBkb2VzIGV4aXQuCisj
ZGVmaW5lIE5vZGVEb2VzTm90RXhpdCAgICAgICAgICAweDIwMDAgLy8gVGhpcyBmbGFnIGlzIG5l
Z2F0ZWQgdG8gbWFrZSBpdCBuYXR1cmFsIGZvciB0aGUgZGVmYXVsdCB0byBiZSB0aGF0IGEgbm9k
ZSBkb2VzIGV4aXQuCiAKLSNkZWZpbmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgIDB4ODAwMAor
I2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgMHg0MDAwCiAKLSNkZWZpbmUgTm9kZUV4
aXRzRm9yd2FyZCAgICAgICAgMHgxMDAwMAorI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAg
ICAgMHg4MDAwCiAKIHR5cGVkZWYgdWludDMyX3QgTm9kZUZsYWdzOwogCkBAIC0xMDIsNyArMTAy
LDggQEAgc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5TcGVjdWxhdGVJbnRlZwogICAgIHJldHVy
biB0cnVlOwogfQogCi1jb25zdCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MpOwor
dm9pZCBkdW1wTm9kZUZsYWdzKFByaW50U3RyZWFtJiwgTm9kZUZsYWdzKTsKK01BS0VfUFJJTlRf
QURBUFRPUihOb2RlRmxhZ3NEdW1wLCBOb2RlRmxhZ3MsIGR1bXBOb2RlRmxhZ3MpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNDUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDY1ICsxMDYsNiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9u
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZO
dW1iZXJDb25zdGFudChub2RlKTsKLSAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1
ZSA8IDAuMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZU
d29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQgcG93ZXIpCi0gICAgewotICAgICAgICBKU1Zh
bHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkp
OwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaW50MzJfdCBpbnRJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1
ZS5hc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBpbnRJbW1lZGlhdGUgPiAtKDEgPDwgcG93ZXIp
ICYmIGludEltbWVkaWF0ZSA8ICgxIDw8IHBvd2VyKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBp
c1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2VyKQotICAg
IHsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gSlNDb25zdGFudCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50
KG5vZGUsIHBvd2VyKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28o
Tm9kZSogbm9kZSwgaW50IHBvd2VyKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDogewotICAgICAgICAgICAgcmV0dXJuIGlzV2l0
aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQml0QW5kOiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRo
aW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCi0g
ICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSwgcG93ZXIpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAg
Tm9kZSogc2hpZnRBbW91bnQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgICAgICBp
ZiAoc2hpZnRBbW91bnQtPm9wKCkgIT0gSlNDb25zdGFudCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91
bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgIGlmICghaW1t
ZWRpYXRlVmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHZhbHVlKSkKQEAgLTE4MiwxMCArMTIzLDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgTm9k
ZVR5cGUgb3AgPSBub2RlLT5vcCgpOwotICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2RlLT5m
bGFncygpICYgTm9kZUJhY2tQcm9wTWFzazsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCks
ICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIp
OworICAgICAgICBkYXRhTG9nKCIgICAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgIiAiLCBtX2N1cnJl
bnROb2RlLCAiOiAiLCBOb2RlRmxhZ3NEdW1wKG5vZGUtPmZsYWdzKCkpLCAiICIpOwogI2VuZGlm
CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTIwMiwyOSArMTQy
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGlj
dGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQXNzdW1lIGNvbnNlcnZhdGl2ZWx5
IHRoYXQgYSBTZXRMb2NhbCBpbXBsaWVzIHRoYXQgdGhlIHZhbHVlIG1heSBmbG93IHRocm91Z2gg
YSBsb29wLAotICAgICAgICAgICAgLy8gYW5kIHNvIHdlIHdvdWxkIGhhdmUgb3ZlcmZsb3cgbGVh
ZGluZyB0byB0aGUgcHJvZ3JhbSAib2JzZXJ2aW5nIiBudW1iZXJzIGV2ZW4gaWYgYWxsCi0gICAg
ICAgICAgICAvLyB1c2VycyBvZiB0aGUgdmFsdWUgYXJlIGRvaW5nIHRvSW50MzIuIEl0IG1pZ2h0
IGJlIHdvcnRod2hpbGUgdG8gcmV2aXNpdCB0aGlzIGF0IHNvbWUKLSAgICAgICAgICAgIC8vIHBv
aW50IGFuZCBhY3R1YWxseSBjaGVjayBpZiB0aGUgZGF0YSBmbG93IGludm9sdmVzIGxvb3BzLCBi
dXQgcmlnaHQgbm93IEkgZG9uJ3QgdGhpbmsKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgZXZpZGVu
Y2UgdGhhdCB0aGlzIHdvdWxkIGJlIGJlbmVmaWNpYWwgZm9yIGJlbmNobWFya3MuCi0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZs
YWdzKChmbGFncyAmIH5Ob2RlVXNlZEFzSW50TG9jYWxseSkgfCBOb2RlVXNlZEFzTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpOwotCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhbmFseXNpcyBrbm93cyB0aGF0IGZsdXNoZWQgbG9jYWxz
IGVzY2FwZS4KLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjM1LDQ1ICsxNTgsMzYg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJT
aGlmdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHk7Ci0gICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNO
ZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZs
YWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKLSAgICAgICAgICAg
IGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNl
ZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNl
IEFycmF5UG9wOgorICAgICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBSZWdFeHBF
eGVjOgotICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKKyAgICAgICAgY2FzZSBSZWdFeHBU
ZXN0OgorICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgor
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CisgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKKyAgICAg
ICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgICAgICBjYXNl
IFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6IHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjSW50MzIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9k
ZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMjgyLDggKzE5Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yOTEsMTEgKzIw
Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1i
ZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgobW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpKSAhPSBEb250
U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU3Bl
Y3VsYXRpb25Nb2RlKG5vZGUpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCBy
aWdodCkpOwpAQCAtMzA1LDE3ICsyMTUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVj
U3RyaW5nIHwgU3BlY0ludDMyIHwgU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAg
ICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3Vs
dCgpKQotICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCi0gICAgICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMyMywyNCArMjIy
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoKG1vZGUgPSBtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKSkgIT0gRG9udFNw
ZWN1bGF0ZUludGVnZXIpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU3BlY3VsYXRp
b25Nb2RlKG5vZGUpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3Bl
Y3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0g
ICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBm
bGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNOdW1iZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0zNDgsMjQgKzIzNSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVk
aWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtb2RlID0gbV9ncmFwaC5h
ZGRTcGVjdWxhdGlvbk1vZGUobm9kZSkpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyKQorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKSAhPSBEb250U3Bl
Y3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJl
ZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJv
OwotICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKLSAgICAgICAgICAgICAg
ICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzc2LDEwICsyNTEsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLQotICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTWluOgpAQCAtMzk0LDEyICsyNjUsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhs
ZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbGFncyB8PSBOb2Rl
VXNlZEFzTnVtYmVyOwotICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLQot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTQxMywyNSArMjc4LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMo
bGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQXMgc29vbiBh
cyBhIG11bHRpcGx5IGhhcHBlbnMsIHdlIGNhbiBlYXNpbHkgZW5kIHVwIGluIHRoZSBwYXJ0Ci0g
ICAgICAgICAgICAvLyBvZiB0aGUgZG91YmxlIGRvbWFpbiB3aGVyZSB0aGUgcG9pbnQgYXQgd2hp
Y2ggeW91IGRvIHRydW5jYXRpb24KLSAgICAgICAgICAgIC8vIGNhbiBjaGFuZ2UgdGhlIG91dGNv
bWUuIFNvLCBBcml0aE11bCBhbHdheXMgZm9yY2VzIGl0cyBpbnB1dHMgdG8KLSAgICAgICAgICAg
IC8vIGNoZWNrIGZvciBvdmVyZmxvdy4gQWRkaXRpb25hbGx5LCBpdCB3aWxsIGhhdmUgdG8gY2hl
Y2sgZm9yIG92ZXJmbG93Ci0gICAgICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdlIGNhbiBwcm92
ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcwotICAgICAgICAgICAgLy8gcHJv
ZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQotICAg
ICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgp
LCAyMikpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5tZXJnZUZsYWdzKGZsYWdzKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwot
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDQ2
LDE3ICsyOTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0aXBseSBoYXBwZW5zLCB3
ZSBjYW4gZWFzaWx5IGVuZCB1cCBpbiB0aGUgcGFydAotICAgICAgICAgICAgLy8gb2YgdGhlIGRv
dWJsZSBkb21haW4gd2hlcmUgdGhlIHBvaW50IGF0IHdoaWNoIHlvdSBkbyB0cnVuY2F0aW9uCi0g
ICAgICAgICAgICAvLyBjYW4gY2hhbmdlIHRoZSBvdXRjb21lLiBTbywgQXJpdGhEaXYgYWx3YXlz
IGNoZWNrcyBmb3Igb3ZlcmZsb3cKLSAgICAgICAgICAgIC8vIG5vIG1hdHRlciB3aGF0LCBhbmQg
YWx3YXlzIGZvcmNlcyBpdHMgaW5wdXRzIHRvIGNoZWNrIGFzIHdlbGwuCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJv
OwotICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLQotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ3MSwyMCArMzA2LDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVk
c05lZ1plcm87Ci0gICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwotCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFyaXRoU3FydDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNE
b3VibGUpOwotICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVk
c05lZ1plcm87Ci0gICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTUsOCArMzIxLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihjaGlsZCkp
OwotCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUx
Nyw0MiArMzQxLDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAg
IGNhc2UgSXNGdW5jdGlvbjogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KFNwZWNCb29sZWFuKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mo
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVHlw
ZU9mOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9u
KCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBH
ZXRCeUlkRmx1c2g6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZh
dWx0RmxhZ3Mobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCiAgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpOwotCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bFNhZmU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdl
dEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTU2NywyNiArMzY5LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY090aGVyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdl
dEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRG
bGFncyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OwotICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CkBAIC01OTYsMjggKzM4MSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgY2FzZSBSZXNvbHZlOgotICAgICAgICBjYXNl
IFJlc29sdmVCYXNlOgotICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgotICAgICAg
ICBjYXNlIFJlc29sdmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC02MzYsNDggKzM5OSwyNSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ZpbmFsT2JqZWN0KTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
ICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7
Ci0gICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNl
dFByZWRpY3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVV
c2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhT
aXplOgogICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOiB7CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oU3BlY0FycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdSZWdleHA6IHsKKyAgICAgICAgY2Fz
ZSBOZXdSZWdleHA6CisgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBO
b2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0ckNh
dDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsK
LSAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51
bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02OTksMTIgKzQzOSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRp
b246IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjT2JqZWN0T3Ro
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNzQz
LDUxICs0NzcsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJ
bnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMiktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBSZXR1cm46Ci0gICAgICAgIGNhc2UgVGhyb3c6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0QnlJZERp
cmVjdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8v
IFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRo
ZSBhbGwtYnV0LVBoaSdzCiAgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KICAg
ICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIFNl
dENhbGxlZToKLSAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRTY29wZToKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBn
ZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgorICAgICAgICBj
YXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBS
ZXR1cm46CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAg
ICBjYXNlIFNldENhbGxlZToKKyAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgogICAgICAgICBjYXNl
IERGRzo6SnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTgwOSw3ICs1MTksOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1
ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNh
c2UgUGhhbnRvbToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9k
ZSk7CisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
ckNoZWNrOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhl
c2UgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KQEAgLTgxNyw2
ICs1MjgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE5vcDoKICAgICAgICAgY2FzZSBDb3Vu
dEV4ZWN1dGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgIGNhc2UgRmx1
c2g6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3RO
b2RlVHlwZToKQEAgLTgyNCw3ICs1MzYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURl
ZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIH0K
QEAgLTgzNiwzMCArNTQ3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5n
ZWQ7CiAgICAgfQogICAgICAgICAKLSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICBjaGlsZElk
eCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAg
ICAgICAgY2hpbGRJZHgrKykgewotICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygp
KQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgIH0KLSAgICAKICAgICB2b2lkIHByb3BhZ2F0
ZUZvcndhcmQoKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZUlzQ2FwdHVyZWQoZGF0
YS0+aXNDYXB0dXJlZCgpKTsKICAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQo
KSk7CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU2hvdWxkTmV2ZXJVbmJveChkYXRh
LT5zaG91bGROZXZlclVuYm94KCkpOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZUlz
TG9hZGVkRnJvbShkYXRhLT5pc0xvYWRlZEZyb20oKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID0gR2xvYmFsbHlVbmlmaWVkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCShyZXZpc2lvbiAxNDUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCiAgICAgICAgICwgbV9zdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1faXNQcm9maXRhYmxl
VG9VbmJveChmYWxzZSkKKyAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKICAgICAgICAg
LCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCiAgICAgewogICAg
ICAgICBjbGVhclZvdGVzKCk7CkBAIC0xNDksNiArMTUwLDIxIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1faXNBcmd1bWVudHNBbGlhczsKICAgICB9CiAgICAgCisgICAgYm9vbCBtZXJnZUlz
TG9hZGVkRnJvbShib29sIGlzTG9hZGVkRnJvbSkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGVj
a0FuZFNldChtX2lzTG9hZGVkRnJvbSwgbV9pc0xvYWRlZEZyb20gfCBpc0xvYWRlZEZyb20pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElzTG9hZGVkRnJvbShib29sIGlzTG9hZGVkRnJvbSkK
KyAgICB7CisgICAgICAgIG1faXNMb2FkZWRGcm9tID0gaXNMb2FkZWRGcm9tOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzTG9hZGVkRnJvbSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pc0xv
YWRlZEZyb207CisgICAgfQorICAgIAogICAgIGJvb2wgcHJlZGljdChTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzZWxmID0gZmlu
ZCgpOwpAQCAtMzA2LDYgKzMyMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQXJndW1lbnRz
QWxpYXM7CiAgICAgYm9vbCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQ7CiAgICAgYm9v
bCBtX2lzUHJvZml0YWJsZVRvVW5ib3g7CisgICAgYm9vbCBtX2lzTG9hZGVkRnJvbTsKIAogICAg
IGZsb2F0IG1fdm90ZXNbMl07IC8vIFVzZWQgcHJpbWFyaWx5IGZvciBkb3VibGUgdm90aW5nIGJ1
dCBtYXkgYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KICAgICBEb3VibGVGb3JtYXRTdGF0
ZSBtX2RvdWJsZUZvcm1hdFN0YXRlOwo=
</data>
<flag name="review"
          id="213485"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="213486"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192307</attachid>
            <date>2013-03-08 16:37:04 -0800</date>
            <delta_ts>2013-03-08 16:37:04 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63789</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1Mjg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDEzLTAzLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIG92ZXJmbG93IGNoZWNrIGVsaW1pbmF0aW9uIGlzIHRvbyBzbWFydCBmb3IgaXRzIG93biBn
b29kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE4
MzIKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudCBhbmQgR2F2aW4gQmFycmFjbG91
Z2guCisgICAgICAgIAorICAgICAgICBUaGlzIGltcHJvdmVzIG92ZXJmbG93IGNoZWNrIGVsaW1p
bmF0aW9uIGluIHRocmVlIHdheXM6CisgICAgICAgIAorICAgICAgICAxKSBJdCByZWR1Y2VzIHRo
ZSBhbW91bnQgb2YgdGltZSB0aGUgY29tcGlsZXIgd2lsbCBzcGVuZCBkb2luZyBpdC4KKyAgICAg
ICAgCisgICAgICAgIDIpIEl0IGZpeGVzIGJ1Z3Mgd2hlcmUgb3ZlcmZsb3cgY2hlY2sgZWxpbWlu
YXRpb24gd2FzIG92ZXJ6ZWFsb3VzLiBQcmVjaXNlbHksIGZvciBhIGJpbmFyeSBvcGVyYXRpb24K
KyAgICAgICAgICAgb3ZlciBAYSBhbmQgQGIgd2hlcmUgYm90aCBAYSBhbmQgQGIgd2lsbCB0eXBl
IGNoZWNrIHRoYXQgdGhlaXIgaW5wdXRzIChAYS0+Y2hpbGRyZW4sIEBiLT5jaGlsZHJlbikKKyAg
ICAgICAgICAgYXJlIGludDMyJ3MgYW5kIHRoZW4gcGVyZm9ybSBhIHBvc3NpYmx5LW92ZXJmbG93
aW5nIG9wZXJhdGlvbiwgd2UgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byBhc3N1bWUKKyAgICAgICAg
ICAgdGhhdCBAYSdzIG5vbi1pbnQzMiBwYXJ0cyBkb24ndCBtYXR0ZXIgaWYgYXQgdGhlIHBvaW50
IHRoYXQgQGEgcnVucyB3ZSBoYXZlIGFzIHlldCBub3QgcHJvdmVkIHRoYXQKKyAgICAgICAgICAg
QGItPmNoaWxkcmVuIGFyZSBpbnQzMidzIGFuZCB0aGF0IGhlbmNlIEBiIG1pZ2h0IHByb2R1Y2Ug
YSBsYXJnZSBlbm91Z2ggcmVzdWx0IHRoYXQgZG91YmxlcyB3b3VsZAorICAgICAgICAgICBzdGFy
dCBjaG9wcGluZyBsb3cgYml0cy4gVGhlIHNwZWNpZmljIGltcGxpY2F0aW9uIG9mIHRoaXMgaXMg
dGhhdCBmb3IgYSBiaW5hcnkgb3BlcmF0aW9uIHRvIG5vdAorICAgICAgICAgICBwcm9wYWdhdGUg
dGhhdCBpdCBjYXJlcyBhYm91dCBub24taW50MzIgcGFydHMgKE5vZGVVc2VkQXNOdW1iZXIpLCB3
ZSBtdXN0IHByb3ZlIHRoYXQgYXQgbGVhc3Qgb25lCisgICAgICAgICAgIG9mIHRoZSBpbnB1dHMg
aXMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgcmVzdWx0IHdpdGhpbiAyXjMyIGFuZCB0aGF0IHRo
ZXJlIHdvbid0IGJlIGEgdG93ZXIgb2Ygc3VjaAorICAgICAgICAgICBvcGVyYXRpb25zIGxhcmdl
IGVub3VnaCB0byB1bHRpbWF0ZWx5IHByb2R1Y2UgYSBkb3VibGUgZ3JlYXRlciB0aGFuIDJeNTIg
KHJvdWdobHkpLiBXZSBhY2hpZXZlIHRoZQorICAgICAgICAgICBsYXR0ZXIgYnkgZGlzYWJsaW5n
IHRoaXMgb3B0aW1pemF0aW9uIGZvciB2ZXJ5IGxhcmdlIGJhc2ljIGJsb2Nrcy4gSXQncyBub3Rl
d29ydGh5IHRoYXQgYmxvY2tzIHRoYXQKKyAgICAgICAgICAgbGFyZ2Ugd29uJ3QgZXZlbiBtYWtl
IGl0IGludG8gdGhlIERGRyBjdXJyZW50bHkuCisgICAgICAgIAorICAgICAgICAzKSBJdCBtYWtl
cyB0aGUgb3ZlcmZsb3cgY2hlY2sgZWxpbWluYXRpb24gbW9yZSBwcmVjaXNlIGZvciBjYXNlcyB3
aGVyZSB0aGUgaW5wdXRzIHRvIGFuIEFkZCBvciBTdWIKKyAgICAgICAgICAgYXJlIHRoZSBvdXRw
dXRzIG9mIGEgYml0LW9wLiBGb3IgZXhhbXBsZSBpbiAoQGEgKyAoQGIgfCAwKSkgfCAwLCB3ZSBk
b24ndCBuZWVkIHRvIHByb3BhZ2F0ZQorICAgICAgICAgICBOb2RlVXNlZEFzTnVtYmVyIHRvIGVp
dGhlciBAYSBvciBAYi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmV1dHJhbCBvbiBWOHY3
IGFuZCBhIHNsaWdodCBzcGVlZC11cCBvbiBjb21waWxlIHRpbWUgYmVuY2htYXJrcy4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkFycmF5TW9kZTo6cmVmaW5lKToKKyAgICAgICAgKiBkZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2U6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6aXNOb3ROZWdaZXJvKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjppc05vdFplcm8pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OmlzV2l0aGluUG93ZXJPZlR3
b0ZvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlOjppc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUpOgorICAgICAgICAoSlNDOjpERkc6
OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OmlzV2l0aGluUG93ZXJPZlR3byk6CisgICAgICAg
IChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6bWVyZ2VEZWZhdWx0RmxhZ3Mp
OgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2xlYXJJc0xvYWRlZEZyb20pOgorICAgICAgICAo
Q1BTUmV0aHJlYWRpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQ
aGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAg
ICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmR1bXBOb2RlRmxhZ3MpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUZs
YWdzLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlVuaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFi
bGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1l
cmdlSXNMb2FkZWRGcm9tKToKKyAgICAgICAgKFZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpzZXRJc0xvYWRlZEZyb20pOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6aXNMb2FkZWRGcm9tKToKKwogMjAxMy0w
My0wOCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Vm
aWxlIGZpeGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMTQ1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAg
ICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Fy
cmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAorICAgIGRmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdDb21tb24uY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24g
MTQ1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQ1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgXAogICAg
IGRmZy9ERkdBcnJheU1vZGUuY3BwIFwKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBc
CisgICAgZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIFwKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCiAgICAg
ZGZnL0RGR0NvbW1vbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE0NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDgg
QEAKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODExNDAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzE0Q0E0MTZFQTky
RjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEY3MTRD
QTUxNkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTky
RUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3M0Q3QUUxNjVBMTQyRDAw
QUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENs
b3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjczRDdBRjE2NUExNDMwMDBBQ0FC
NzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVD
YWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYx
NUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKQEAgLTEwNjMsNiAr
MTA2NSw4IEBACiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4
MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2Vu
Y3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcxNENBMjE2RUE5MkVE
MDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3M0Q3QUMx
NjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MzYsNiArMjY0MCw4IEBACiAJCQkJ
MEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCTBGQzA5
NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBG
QzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKKwkJCQkw
RjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgKi8sCisJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuaCAqLywKIAkJCQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFz
aWNCbG9jay5oICovLAogCQkJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Js
b2NrSW5saW5lcy5oICovLAogCQkJCTBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdCcmFu
Y2hEaXJlY3Rpb24uaCAqLywKQEAgLTM0MDgsNiArMzQxNCw3IEBACiAJCQkJMEZGQjkyMUYxNkQw
MzMwNTAwNTVBNURCIC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMz
QjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkND
QUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwNTEsNiArNDA1OCw3IEBACiAJCQkJMEZCRTBGNzYxNkMx
REIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTQ1MjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsMTQgKzE2NywxNCBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpyZWZpbmUoU3BlY3Vs
YXRlZFR5CiAgICAgICAgIHJldHVybiB3aXRoVHlwZUFuZENvbnZlcnNpb24oQXJyYXk6OkNvbnRp
Z3VvdXMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgotICAgICAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzSW50TG9jYWxseSkKKyAgICAgICAgaWYg
KGZsYWdzICYgTm9kZVVzZWRBc0ludCkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZUFuZENv
bnZlcnNpb24oQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpSYWdlQ29udmVydCk7CiAgICAgICAg
IGlmICghdmFsdWUgfHwgaXNOdW1iZXJTcGVjdWxhdGlvbih2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgIHJldHVybiB3aXRoVHlwZUFuZENvbnZlcnNpb24oQXJyYXk6
OkNvbnRpZ3VvdXMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKLSAgICAgICAgaWYgKGRvZXNDb252ZXJzaW9uKCkgJiYgKGZsYWdzICYgTm9k
ZVVzZWRBc0ludExvY2FsbHkpKQorICAgICAgICBpZiAoZG9lc0NvbnZlcnNpb24oKSAmJiAoZmxh
Z3MgJiBOb2RlVXNlZEFzSW50KSkKICAgICAgICAgICAgIHJldHVybiB3aXRoQ29udmVyc2lvbihB
cnJheTo6UmFnZUNvbnZlcnQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworcHVibGljOgorICAgIEJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiYmFja3dhcmRzIHByb3BhZ2F0aW9uIikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByZXZl
bnQgYSB0b3dlciBvZiBvdmVyZmxvd2luZyBhZGRpdGlvbnMgZnJvbSBjcmVhdGluZyBhIHZhbHVl
IHRoYXQgaXMgb3V0IG9mIHRoZQorICAgICAgICAgICAgLy8gc2FmZSAyXjQ4IHJhbmdlLgorICAg
ICAgICAgICAgbV9hbGxvd05lc3RlZE92ZXJmbG93aW5nQWRkaXRpb25zID0gYmxvY2stPnNpemUo
KSA8ICgxPDwxNik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQorICAgICAgICAgICAg
ICAgIHByb3BhZ2F0ZShibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGlz
Tm90TmVnWmVybyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVt
YmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOworICAgICAg
ICByZXR1cm4gIXZhbHVlICYmIDEuMCAvIHZhbHVlIDwgMC4wOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzTm90WmVybyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlz
TnVtYmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOworICAgIH0KKwor
ICAgIC8vIFRlc3RzIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4g
dGhlIHBvd2VyIG9mIHR3by4KKyAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CisgICAgYm9vbCBpc1dp
dGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSlNW
YWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygp
KTsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkb3VibGUgaW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUu
YXNOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIGltbWVkaWF0ZSA+IC0oc3RhdGljX2Nhc3Q8aW50
NjRfdD4oMSkgPDwgcG93ZXIpICYmIGltbWVkaWF0ZSA8IChzdGF0aWNfY2FzdDxpbnQ2NF90Pigx
KSA8PCBwb3dlcik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPGludCBwb3dlcj4KKyAgICBi
b29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50PHBvd2Vy
Pihub2RlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8aW50IHBvd2VyPgorICAgIGJvb2wg
aXNXaXRoaW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICByZXR1
cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUpOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6IHsKKyAgICAgICAgICAgIGlmIChw
b3dlciA+IDMxKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlPHBvd2VyPihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9m
VHdvTm9uUmVjdXJzaXZlPHBvd2VyPihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6
CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewor
ICAgICAgICAgICAgcmV0dXJuIHBvd2VyID4gMzE7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7CisgICAg
ICAgICAgICBpZiAocG93ZXIgPiAzMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSogc2hpZnRBbW91bnQgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7CisgICAgICAgICAgICBpZiAoc2hpZnRBbW91bnQtPm9wKCkgIT0gSlNDb25zdGFu
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBKU1ZhbHVlIGlt
bWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygp
KTsKKyAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+
IDMyIC0gcG93ZXI7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxh
dGU8aW50IHBvd2VyPgorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd288cG93ZXI+KGVkZ2Uubm9kZSgp
KTsKKyAgICB9CisKKyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUt
PmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgY2hp
bGRJZHgrKykgeworICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVCYWNrUHJvcE1hc2s7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6
IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNMb2FkZWRGcm9tKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdEFu
ZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRV
UlNoaWZ0OiB7CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzSW50OworICAgICAgICAg
ICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVV
c2VkQXNPdGhlcik7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFs
dWVUb0ludDMyOiB7CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzSW50OworICAgICAg
ICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5v
ZGVVc2VkQXNPdGhlcik7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIElkZW50aXR5
OiAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJv
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpCisgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc051bWJlclJlc3VsdCgpIHx8IG5vZGUtPmNo
aWxkMigpLT5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9k
ZVVzZWRBc090aGVyOworICAgICAgICAgICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd288MzI+KG5v
ZGUtPmNoaWxkMSgpKSAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvPDMyPihub2RlLT5jaGlsZDIoKSkp
CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAg
IGlmICghbV9hbGxvd05lc3RlZE92ZXJmbG93aW5nQWRkaXRpb25zKQorICAgICAgICAgICAgICAg
IGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICAgICAgaWYgKGlz
Tm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWda
ZXJvOworICAgICAgICAgICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd288MzI+KG5vZGUtPmNoaWxk
MSgpKSAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvPDMyPihub2RlLT5jaGlsZDIoKSkpCisgICAgICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGlmICghbV9h
bGxvd05lc3RlZE92ZXJmbG93aW5nQWRkaXRpb25zKQorICAgICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNOdW1iZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICAgICAgaWYgKGlzTm90WmVybyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KQorICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOworICAgICAgICAg
ICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd288MzI+KG5vZGUtPmNoaWxkMSgpKSAmJiAhaXNXaXRo
aW5Qb3dlck9mVHdvPDMyPihub2RlLT5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGlmICghbV9hbGxvd05lc3RlZE92ZXJm
bG93aW5nQWRkaXRpb25zKQorICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1i
ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
KworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRo
TXVsOiB7CisgICAgICAgICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlwbHkgaGFwcGVucywgd2Ug
Y2FuIGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIHRoZSBkb3Vi
bGUgZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8gdHJ1bmNhdGlvbgorICAg
ICAgICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFyaXRoTXVsIGFsd2F5cyBm
b3JjZXMgaXRzIGlucHV0cyB0bworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93LiBB
ZGRpdGlvbmFsbHksIGl0IHdpbGwgaGF2ZSB0byBjaGVjayBmb3Igb3ZlcmZsb3cKKyAgICAgICAg
ICAgIC8vIGl0c2VsZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZv
ciB0aGUgdmFsdWVzCisgICAgICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUgcm91
bmRpbmcuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdv
PDIyPihub2RlLT5jaGlsZDEoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgIWlzV2l0aGlu
UG93ZXJPZlR3bzwyMj4obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxhZ3MgfD0g
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CisgICAgICAgICAgICBmbGFncyAm
PSB+Tm9kZVVzZWRBc090aGVyOworCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKKworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7
CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CisKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3Ro
ZXIgfCBOb2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVz
ZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogeworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVz
ZWRBc0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyQ2F0OiB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OworICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogeworICAg
ICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0lu
dCk7CisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtZXJnZURlZmF1bHRGbGFncyhu
b2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJv
b2wgbV9hbGxvd05lc3RlZE92ZXJmbG93aW5nQWRkaXRpb25zOworfTsKKworYm9vbCBwZXJmb3Jt
QmFja3dhcmRzUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja3dhcmRzIFByb3BhZ2F0aW9uIFBoYXNlIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPEJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluZmVyIGJhc2lj
IGluZm9ybWF0aW9uIGFib3V0IGhvdyBub2RlcyBhcmUgdXNlZCBieSBkb2luZyBhIGJsb2NrLWxv
Y2FsCisvLyBiYWNrd2FyZHMgZmxvdyBhbmFseXNpcy4KKworYm9vbCBwZXJmb3JtQmFja3dhcmRz
UHJvcGFnYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDUyNjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAg
ICAgY2xlYXJJc0xvYWRlZEZyb20oKTsKICAgICAgICAgZnJlZVVubmVjZXNzYXJ5Tm9kZXMoKTsK
ICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRl
UGhpczxMb2NhbE9wZXJhbmQ+KCk7CkBAIC01OCw2ICs1OSwxMiBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgCisgICAgdm9pZCBjbGVhcklzTG9hZGVkRnJvbSgpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uc2V0
SXNMb2FkZWRGcm9tKGZhbHNlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBmcmVlVW5uZWNlc3Nh
cnlOb2RlcygpCiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENQUyBSZXRocmVhZGluZzogZnJlZVVubmVjZXNzYXJ5Tm9kZXMiKTsKQEAgLTE3MCwxMiAr
MTc3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+c2V0SXNMb2FkZWRGcm9tKHRydWUpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOwogICAgICAgICAgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5zZXRJc0xvYWRlZEZyb20odHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJO
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjAwLDYgKzIw
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xvYWRlZEZyb20odHJ1ZSk7CiAgICAgICAgIE5vZGUq
IHBoaSA9IGFkZFBoaTxvcGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFyaWFibGUsIGlk
eCk7CiAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOwogICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBwaGk7
CkBAIC0yNTYsNiArMjY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xv
YWRlZEZyb20odHJ1ZSk7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdp
dGggaGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCiAgICAgICAgICAg
ICAvLyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0aGF0IGlmIHRoZXJlIGhhZCBhbHJl
YWR5IGJlZW4gYSBwcmV2aW91cwogICAgICAgICAgICAgLy8gdXNlIGF0IHRhaWwgdGhlbiB3ZSBk
b24ndCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJpYWJsZXNBdFRhaWwgdG8KQEAgLTI2
Niw2ICsyNzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2YXJpYWJsZS0+c2V0SXNMb2FkZWRGcm9tKHRydWUpOwogICAgICAg
ICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShhZGRQaGk8b3BlcmFuZEtpbmQ+KG5vZGUt
PmNvZGVPcmlnaW4sIHZhcmlhYmxlLCBpZHgpKSk7CiAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CiAgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDUyNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRl
ICJERkdDRkFQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIK
QEAgLTEyMiw2ICsxMjMsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBp
bGVNCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7
CiAgICAgCisgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9y
bVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAg
IHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQ1MjYyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw4ICsxNzks
OCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPmNoaWxkMygpKTsKICAgICB9CiAKLSAgICBpZiAoc3Ry
bGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKSkKLSAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLT5mbGFncygpKSk7CisgICAgaWYgKHRvQ1N0
cmluZyhOb2RlRmxhZ3NEdW1wKG5vZGUtPmZsYWdzKCkpKSAhPSAiPGVtcHR5PiIpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgTm9kZUZsYWdzRHVtcChub2RlLT5mbGFncygpKSk7CiAgICAgaWYg
KG5vZGUtPmhhc0FycmF5TW9kZSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPmFy
cmF5TW9kZSgpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyTnVtYmVyKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNDUyNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEzOSArMjgsODEgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVk
ZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNvbnN0IGNoYXIqIG5v
ZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKK3ZvaWQgZHVtcE5vZGVGbGFncyhQcmlu
dFN0cmVhbSYgb3V0LCBOb2RlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKCEoZmxhZ3MgXiBOb2Rl
RG9lc05vdEV4aXQpKQotICAgICAgICByZXR1cm4gIjxlbXB0eT4iOworICAgIGlmICghKGZsYWdz
IF4gTm9kZURvZXNOb3RFeGl0KSkgeworICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDEyODsK
LSAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKLSAgICBCb3VuZHNDaGVja2VkUG9p
bnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24sIHNpemUpOwotICAgIAotICAgIGJvb2wgaGFzUHJp
bnRlZCA9IGZhbHNlOworICAgIENvbW1hUHJpbnRlciBjb21tYSgifCIpOwogICAgIAogICAgIGlm
IChmbGFncyAmIE5vZGVSZXN1bHRNYXNrKSB7CiAgICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBOb2Rl
UmVzdWx0TWFzaykgewogICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAgICAgIHB0
ci5zdHJjYXQoIkpTIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJKUyIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKLSAgICAgICAg
ICAgIHB0ci5zdHJjYXQoIk51bWJlciIpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
TnVtYmVyIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50
MzI6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJJbnQzMiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiSW50MzIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5v
ZGVSZXN1bHRCb29sZWFuOgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiQm9vbGVhbiIpOworICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQm9vbGVhbiIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTm9kZVJlc3VsdFN0b3JhZ2U6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0
KCJTdG9yYWdlIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJTdG9yYWdlIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9k
ZU11c3RHZW5lcmF0ZSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0
ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTXVzdEdlbiIpOwotICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKGZsYWdzICYgTm9kZU11c3RHZW5lcmF0
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiTXVzdEdlbiIpOwogICAgIAotICAgIGlmIChm
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAg
ICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJWYXJBcmdzIik7Ci0g
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBOb2RlSGFz
VmFyQXJncykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVmFyQXJncyIpOwogICAgIAotICAg
IGlmIChmbGFncyAmIE5vZGVDbG9iYmVyc1dvcmxkKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVk
KQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJDbG9i
YmVycyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKGZsYWdz
ICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJz
Iik7CiAgICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZU1pZ2h0Q2xvYmJlcikgewotICAgICAgICBp
ZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRy
LnN0cmNhdCgiTWlnaHRDbG9iYmVyIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWlnaHRDbG9iYmVyKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJNaWdodENsb2JiZXIiKTsKICAgICAKICAgICBpZiAoZmxhZ3MgJiBOb2RlUmVzdWx0
TWFzaykgewotICAgICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpICYmICEoZmxh
Z3MgJiBOb2RlTmVlZHNOZWdaZXJvKSkgewotICAgICAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0g
ICAgICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICAgICAgcHRyLnN0cmNhdCgi
UHVyZUludCIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKSB7Ci0gICAgICAgICAgICBpZiAoaGFz
UHJpbnRlZCkKLSAgICAgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgICAgICBw
dHIuc3RyY2F0KCJQdXJlSW50KHcvIG5lZyB6ZXJvKSIpOwotICAgICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8p
KSB7Ci0gICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgICAgICBwdHIuc3Ry
Y2F0KCJ8Iik7Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlTnVtIik7Ci0gICAgICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmxhZ3MgJiBOb2Rl
VXNlZEFzT3RoZXIpIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAg
ICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoIlVzZUFzT3RoZXIi
KTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQorICAg
ICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpICYmICEoZmxhZ3MgJiBOb2RlTmVl
ZHNOZWdaZXJvKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIlB1cmVJbnQiKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiUHVyZUludCh3LyBuZWcgemVybykiKTsKKyAgICAgICAgZWxzZSBp
ZiAoIShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pKQorICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiUHVyZU51bSIpOworICAgICAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzT3RoZXIpCisg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJVc2VBc090aGVyIik7CisgICAgfQorICAgIAor
ICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiTWF5T3ZlcmZsb3ciKTsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiTWF5TmVnWmVybyIpOwogICAgIAotICAgIGlmIChm
bGFncyAmIE5vZGVNYXlPdmVyZmxvdykgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAg
ICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTWF5T3ZlcmZsb3ci
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmIChmbGFncyAmIE5v
ZGVVc2VkQXNJbnQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIlVzZUFzSW50Iik7CiAgICAg
Ci0gICAgaWYgKGZsYWdzICYgTm9kZU1heU5lZ1plcm8pIHsKLSAgICAgICAgaWYgKGhhc1ByaW50
ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIk1h
eU5lZ1plcm8iKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIAotICAg
IGlmIChmbGFncyAmIE5vZGVVc2VkQXNJbnQpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0g
ICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIlVzZUFzSW50
Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIShm
bGFncyAmIE5vZGVEb2VzTm90RXhpdCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAg
ICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIkNhbkV4aXQiKTsK
LSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmICghKGZsYWdzICYgTm9k
ZURvZXNOb3RFeGl0KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ2FuRXhpdCIpOwogICAg
IAotICAgIGlmIChmbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgaWYgKGhhc1By
aW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQo
Ik5vZGVFeGl0c0ZvcndhcmQiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQot
ICAgIAotICAgICpwdHIrKyA9IDA7Ci0gICAgCi0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAg
IGlmIChmbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpCisgICAgICAgIG91dC5wcmludChjb21tYSwg
Ik5vZGVFeGl0c0ZvcndhcmQiKTsKIH0KIAotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTQ1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTU5LDE1ICs2MCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAjZGVmaW5lIE5vZGVVc2VkQXNPdGhlciAgICAgICAgICAweDA4MDAgLy8gVGhlIHJlc3VsdCBv
ZiB0aGlzIGNvbXB1dGF0aW9uIG1heSBiZSB1c2VkIGluIGEgY29udGV4dCB0aGF0IGRpc3Rpbmd1
aXNoZXMgYmV0d2VlbiBOYU4gYW5kIG90aGVyIHRoaW5ncyAobGlrZSB1bmRlZmluZWQpLgogI2Rl
ZmluZSBOb2RlVXNlZEFzVmFsdWUgICAgICAgICAgKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVl
ZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKQogI2RlZmluZSBOb2RlVXNlZEFzSW50ICAgICAg
ICAgICAgMHgxMDAwIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBpcyBrbm93biB0
byBiZSB1c2VkIGluIGEgY29udGV4dCB0aGF0IHByZWZlcnMsIGJ1dCBkb2VzIG5vdCByZXF1aXJl
LCBpbnRlZ2VyIHZhbHVlcy4KLSNkZWZpbmUgTm9kZVVzZWRBc0ludExvY2FsbHkgICAgIDB4MjAw
MCAvLyBTYW1lIGFzIE5vZGVVc2VkQXNJbnQsIGJ1dCB3aXRoaW4gdGhlIHNhbWUgYmFzaWMgYmxv
Y2suCiAKICNkZWZpbmUgTm9kZUFyaXRoRmxhZ3NNYXNrICAgICAgIChOb2RlQmVoYXZpb3JNYXNr
IHwgTm9kZUJhY2tQcm9wTWFzaykKIAotI2RlZmluZSBOb2RlRG9lc05vdEV4aXQgICAgICAgICAg
MHg0MDAwIC8vIFRoaXMgZmxhZyBpcyBuZWdhdGVkIHRvIG1ha2UgaXQgbmF0dXJhbCBmb3IgdGhl
IGRlZmF1bHQgdG8gYmUgdGhhdCBhIG5vZGUgZG9lcyBleGl0LgorI2RlZmluZSBOb2RlRG9lc05v
dEV4aXQgICAgICAgICAgMHgyMDAwIC8vIFRoaXMgZmxhZyBpcyBuZWdhdGVkIHRvIG1ha2UgaXQg
bmF0dXJhbCBmb3IgdGhlIGRlZmF1bHQgdG8gYmUgdGhhdCBhIG5vZGUgZG9lcyBleGl0LgogCi0j
ZGVmaW5lIE5vZGVSZWxldmFudFRvT1NSICAgICAgICAweDgwMDAKKyNkZWZpbmUgTm9kZVJlbGV2
YW50VG9PU1IgICAgICAgIDB4NDAwMAogCi0jZGVmaW5lIE5vZGVFeGl0c0ZvcndhcmQgICAgICAg
IDB4MTAwMDAKKyNkZWZpbmUgTm9kZUV4aXRzRm9yd2FyZCAgICAgICAgIDB4ODAwMAogCiB0eXBl
ZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIApAQCAtMTAyLDcgKzEwMiw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBub2RlQ2FuU3BlY3VsYXRlSW50ZWcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29u
c3QgY2hhciogbm9kZUZsYWdzQXNTdHJpbmcoTm9kZUZsYWdzKTsKK3ZvaWQgZHVtcE5vZGVGbGFn
cyhQcmludFN0cmVhbSYsIE5vZGVGbGFncyk7CitNQUtFX1BSSU5UX0FEQVBUT1IoTm9kZUZsYWdz
RHVtcCwgTm9kZUZsYWdzLCBkdW1wTm9kZUZsYWdzKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQ1MjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2NSArMTA2LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW1f
Z3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9k
ZSk7Ci0gICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAo
IW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQoTm9k
ZSogbm9kZSwgaW50IHBvd2VyKQotICAgIHsKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1
ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKLSAgICAgICAgaWYgKCFp
bW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwotICAg
ICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAmJiBpbnRJbW1lZGlhdGUg
PCAoMSA8PCBwb3dlcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdv
Tm9uUmVjdXJzaXZlKE5vZGUqIG5vZGUsIGludCBwb3dlcikKLSAgICB7Ci0gICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUsIGludCBw
b3dlcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNl
IEpTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JD
b25zdGFudChub2RlLCBwb3dlcik7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEJpdEFuZDogewotICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJl
Y3Vyc2l2ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHBvd2VyKQotICAgICAgICAgICAgICAgIHx8
IGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBv
d2VyKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQml0UlNoaWZ0Ogot
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50
ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5v
cCgpICE9IEpTQ29uc3RhbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT52YWx1ZU9mSlNDb25z
dGFudChjb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
aW1tZWRpYXRlVmFsdWUgPiAzMiAtIHBvd2VyOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQogICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlv
bihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbih2YWx1ZSkpCkBAIC0xODIsMTAgKzEyMyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
cm9wYWdhdGUoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+
b3AoKTsKLSAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCYWNr
UHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2coIiAgICIsIEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5v
ZGUsICI6ICIsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAiKTsKKyAgICAgICAgZGF0YUxv
ZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwgTm9k
ZUZsYWdzRHVtcChub2RlLT5mbGFncygpKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0yMDIsMjkgKzE0MiwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNzRGF0
YS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwg
aW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKLSAgICAgICAg
ICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dy
YW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAotICAgICAgICAgICAgLy8gdXNlcnMg
b2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRv
IHJldmlzaXQgdGhpcyBhdCBzb21lCi0gICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkg
Y2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRv
bid0IHRoaW5rCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3Vs
ZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncygoZmxhZ3MgJiB+Tm9k
ZVVzZWRBc0ludExvY2FsbHkpIHwgTm9kZVVzZWRBc051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+cHJlZGljdChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKLQotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmZsYWdzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxvY2FscyBlc2NhcGUuCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTIzNSw0NSArMTU4LDM2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgZmxh
Z3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwotICAgICAgICAgICAg
ZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2Vk
QXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFz
SW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHk7Ci0gICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5UG9wOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0
RmxhZ3Mobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KKyAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAg
ICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKLSAgICAgICAgY2Fz
ZSBSZWdFeHBUZXN0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VE
ZWZhdWx0RmxhZ3Mobm9kZSk7CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgY2Fz
ZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWxTYWZlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKKyAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgUmVzb2x2ZToK
KyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmlj
dFB1dDoKKyAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2Rl
VXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI4Miw4ICsx
OTYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY051bWJlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjkxLDExICsyMDMsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7Ci0gICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3Bl
Y3VsYXRpb25FeHBlY3RpbmdEZWZpbmVkKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb25FeHBl
Y3RpbmdEZWZpbmVkKHJpZ2h0KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKG1vZGUgPSBt
X2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKSkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXIp
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2Rl
KSAhPSBEb250U3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNw
ZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKQEAgLTMwNSwx
NyArMjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY1N0cmluZyB8IFNwZWNJbnQz
MiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJv
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVO
ZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc051bWJlclJl
c3VsdCgpIHx8IG5vZGUtPmNoaWxkMigpLT5oYXNOdW1iZXJSZXN1bHQoKSkKLSAgICAgICAgICAg
ICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNOdW1iZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zMjMsMjQgKzIyMiwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7Ci0gICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtb2RlID0gbV9n
cmFwaC5hZGRTcGVjdWxhdGlvbk1vZGUobm9kZSkpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyKQor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKSAhPSBE
b250U3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBl
Rm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8
IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2Vk
QXNPdGhlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRl
SW50ZWdlcikKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMzQ4LDI0ICsyMzUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxh
dGVJbnRlZ2VyOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkg
ewotICAgICAgICAgICAgICAgIGlmICgobW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2Rl
KG5vZGUpKSAhPSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5hZGRTcGVjdWxhdGlvbk1vZGUobm9kZSkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXIpCiAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJp
Z2h0KSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAg
ICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
b2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTM3NiwxMCArMjUxLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsYWdzICY9IH5Ob2Rl
VXNlZEFzT3RoZXI7Ci0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aE1pbjoKQEAgLTM5NCwxMiArMjY1LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKLSAg
ICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0KLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC00MTMsMjUgKzI3OCw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0aXBseSBoYXBw
ZW5zLCB3ZSBjYW4gZWFzaWx5IGVuZCB1cCBpbiB0aGUgcGFydAotICAgICAgICAgICAgLy8gb2Yg
dGhlIGRvdWJsZSBkb21haW4gd2hlcmUgdGhlIHBvaW50IGF0IHdoaWNoIHlvdSBkbyB0cnVuY2F0
aW9uCi0gICAgICAgICAgICAvLyBjYW4gY2hhbmdlIHRoZSBvdXRjb21lLiBTbywgQXJpdGhNdWwg
YWx3YXlzIGZvcmNlcyBpdHMgaW5wdXRzIHRvCi0gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3Zl
cmZsb3cuIEFkZGl0aW9uYWxseSwgaXQgd2lsbCBoYXZlIHRvIGNoZWNrIGZvciBvdmVyZmxvdwot
ICAgICAgICAgICAgLy8gaXRzZWxmIHVubGVzcyB3ZSBjYW4gcHJvdmUgdGhhdCB0aGVyZSBpcyBu
byB3YXkgZm9yIHRoZSB2YWx1ZXMKLSAgICAgICAgICAgIC8vIHByb2R1Y2VkIHRvIGNhdXNlIGRv
dWJsZSByb3VuZGluZy4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc1dpdGhpblBv
d2VyT2ZUd28obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAyMikKLSAgICAgICAgICAgICAgICAmJiAh
aXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgMjIpKQotICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwot
ICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLQotICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ0NiwxNyArMjkyLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlwbHkgaGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQg
dXAgaW4gdGhlIHBhcnQKLSAgICAgICAgICAgIC8vIG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJl
IHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8gdHJ1bmNhdGlvbgotICAgICAgICAgICAgLy8gY2Fu
IGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFyaXRoRGl2IGFsd2F5cyBjaGVja3MgZm9yIG92ZXJm
bG93Ci0gICAgICAgICAgICAvLyBubyBtYXR0ZXIgd2hhdCwgYW5kIGFsd2F5cyBmb3JjZXMgaXRz
IGlucHV0cyB0byBjaGVjayBhcyB3ZWxsLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC00NzEsMjAgKzMwNiwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLQotICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDk1LDggKzMyMSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihz
cGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKLQotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01MTcsNDIgKzM0MSwyMCBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246
IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFR5cGVPZjogewogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVGbG9hdDMy
QXJyYXkoKQogICAgICAgICAgICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVGbG9hdDY0QXJyYXkoKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLQotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigp
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC01NjcsMjYgKzM2OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTog
ewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPdGhlcik7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigp
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2Fs
bDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0g
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBDb252ZXJ0VGhpczogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJl
ZGljdGlvbikgewpAQCAtNTk2LDI4ICszODEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9u
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0Rmxh
Z3Mobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0g
ICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRTY29wZWRW
YXI6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKLSAg
ICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKLSAgICAgICAgY2FzZSBSZXNvbHZlR2xv
YmFsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Z2V0
SGVhcFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNjM2LDQ4ICszOTksMjUgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDcmVhdGVUaGlz
OgogICAgICAgICBjYXNlIE5ld09iamVjdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNGaW5hbE9iamVjdCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
RGVmYXVsdEZsYWdzKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAg
ICsrY2hpbGRJZHgpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNB
cnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKICAgICAgICAgY2Fz
ZSBOZXdBcnJheUJ1ZmZlcjogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KFNwZWNBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgTmV3UmVnZXhwOiB7CisgICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAg
ICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAg
Y2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAg
ICAgICAgICAgICAgICsrY2hpbGRJZHgpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNjk5LDEyICs0MzksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihj
aGlsZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTc0Myw1MSArNDc3LDI3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0lu
dExvY2FsbHkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUmV0dXJuOgotICAg
ICAgICBjYXNlIFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3Qg
YmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwog
ICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCiAgICAgICAgICAgICBDUkFTSCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAg
IGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7CiAgICAgICAgICAgICBicmVh
azsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVz
ZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAg
ICAgICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBj
YXNlIFRocm93OgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBTZXRDYWxsZWU6
CisgICAgICAgIGNhc2UgU2V0TXlTY29wZToKICAgICAgICAgY2FzZSBERkc6Okp1bXA6CiAgICAg
ICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIEJyZWFrcG9pbnQ6CkBAIC04MDksNyArNTE5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CiAgICAgICAgIGNhc2Ug
QWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFBoYW50b206Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOworICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoZXNlIGdldHMgaWdub3JlZCBi
ZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCkBAIC04MTcsNiArNTI4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBOb3A6CiAgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkBAIC04MjQs
NyArNTM2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICB9CkBAIC04MzYsMzAgKzU0Nyw2
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAgICAg
ICAgCi0gICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBub2RlKQotICAgIHsKLSAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIGNoaWxkSWR4Kysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJkKCkKICAgICB7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNDUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7
CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0Zh
aWxlZChkYXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOwogICAgICAgICAgICAg
ZGF0YS0+ZmluZCgpLT5tZXJnZVNob3VsZE5ldmVyVW5ib3goZGF0YS0+c2hvdWxkTmV2ZXJVbmJv
eCgpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0xvYWRlZEZyb20oZGF0YS0+
aXNMb2FkZWRGcm9tKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
dW5pZmljYXRpb25TdGF0ZSA9IEdsb2JhbGx5VW5pZmllZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTQ1
MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9p
c0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCisg
ICAgICAgICwgbV9pc0xvYWRlZEZyb20oZmFsc2UpCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRT
dGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3Rlcygp
OwpAQCAtMTQ5LDYgKzE1MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzQXJndW1l
bnRzQWxpYXM7CiAgICAgfQogICAgIAorICAgIGJvb2wgbWVyZ2VJc0xvYWRlZEZyb20oYm9vbCBp
c0xvYWRlZEZyb20pCisgICAgeworICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9pc0xvYWRl
ZEZyb20sIG1faXNMb2FkZWRGcm9tIHwgaXNMb2FkZWRGcm9tKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRJc0xvYWRlZEZyb20oYm9vbCBpc0xvYWRlZEZyb20pCisgICAgeworICAgICAgICBt
X2lzTG9hZGVkRnJvbSA9IGlzTG9hZGVkRnJvbTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0xv
YWRlZEZyb20oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNMb2FkZWRGcm9tOworICAgIH0K
KyAgICAKICAgICBib29sIHByZWRpY3QoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogc2VsZiA9IGZpbmQoKTsKQEAgLTMwNiw2ICsz
MjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0FyZ3VtZW50c0FsaWFzOwogICAgIGJvb2wg
bV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkOwogICAgIGJvb2wgbV9pc1Byb2ZpdGFibGVU
b1VuYm94OworICAgIGJvb2wgbV9pc0xvYWRlZEZyb207CiAKICAgICBmbG9hdCBtX3ZvdGVzWzJd
OyAvLyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZvdGluZyBidXQgbWF5IGJlIHJldXNlZCBm
b3Igb3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9kb3VibGVGb3JtYXRT
dGF0ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>