<?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>39747</bug_id>
          
          <creation_ts>2010-05-26 09:33:29 -0700</creation_ts>
          <short_desc>qt_runtime.cpp has coding-style errors</short_desc>
          <delta_ts>2010-05-26 10:10:53 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>39746</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Anders Bakken">agbakken</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230737</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 09:33:29 -0700</bug_when>
    <thetext>WebCore/bridge/qt/qt_runtime.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bridge/qt/qt_runtime.cpp:68:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/bridge/qt/qt_runtime.cpp:69:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/bridge/qt/qt_runtime.cpp:72:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:74:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/qt/qt_runtime.cpp:75:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/qt/qt_runtime.cpp:137:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:148:  Declaration has space between type name and * in JSObject *object  [whitespace/declaration] [3]
WebCore/bridge/qt/qt_runtime.cpp:149:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bridge/qt/qt_runtime.cpp:149:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:193:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/qt/qt_runtime.cpp:192:  Missing space before ( in switch(  [whitespace/parens] [5]
WebCore/bridge/qt/qt_runtime.cpp:245:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/qt/qt_runtime.cpp:320:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:344:  Missing space before ( in while(  [whitespace/parens] [5]
WebCore/bridge/qt/qt_runtime.cpp:639:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:638:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:749:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:791:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:792:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:793:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:794:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:804:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:805:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:806:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:807:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:808:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:809:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:810:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:811:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:812:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:827:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:834:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:835:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:839:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_runtime.cpp:913:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:945:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_runtime.cpp:984:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:1021:  More than one command on the same line  [whitespace/newline] [4]
WebCore/bridge/qt/qt_runtime.cpp:1053:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1061:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:1078:  Missing spaces around =  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:1149:  Missing space before ( in foreach(  [whitespace/parens] [5]
WebCore/bridge/qt/qt_runtime.cpp:1158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/qt/qt_runtime.cpp:1184:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/qt/qt_runtime.cpp:1187:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:1246:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/qt/qt_runtime.cpp:1245:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1254:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:1273:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/qt/qt_runtime.cpp:1336:  Missing spaces around =  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:1392:  Declaration has space between type name and * in QObject *obj  [whitespace/declaration] [3]
WebCore/bridge/qt/qt_runtime.cpp:1395:  Declaration has space between type name and * in void *qargs  [whitespace/declaration] [3]
WebCore/bridge/qt/qt_runtime.cpp:1425:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1542:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1552:  Declaration has space between type name and * in JSObject *asObj  [whitespace/declaration] [3]
WebCore/bridge/qt/qt_runtime.cpp:1569:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.cpp:1570:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1577:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1583:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1605:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/qt/qt_runtime.cpp:1598:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_runtime.cpp:1614:  Missing space before ( in foreach(  [whitespace/parens] [5]
WebCore/bridge/qt/qt_runtime.cpp:1709:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/qt/qt_runtime.cpp:1710:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bridge/qt/qt_runtime.cpp:1711:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bridge/qt/qt_runtime.cpp:1717:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/qt/qt_runtime.cpp:1720:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bridge/qt/qt_runtime.cpp:1737:  Declaration has space between type name and * in void *QtConnectionObject  [whitespace/declaration] [3]
WebCore/bridge/qt/qt_runtime.cpp:1739:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/bridge/qt/qt_runtime.cpp:1745:  _c is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/qt/qt_runtime.cpp:1745:  _id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/qt/qt_runtime.cpp:1780:  l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
WebCore/bridge/qt/qt_runtime.cpp:1784:  Missing spaces around =  [whitespace/operators] [4]
WebCore/bridge/qt/qt_runtime.cpp:1784:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/qt/qt_runtime.cpp:1839:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/qt/qt_runtime.cpp:1858:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 77 in 1 files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230745</commentid>
    <comment_count>1</comment_count>
      <attachid>57109</attachid>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 09:59:10 -0700</bug_when>
    <thetext>Created attachment 57109
Patch that fixes the coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230751</commentid>
    <comment_count>2</comment_count>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 10:09:49 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 39746 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57109</attachid>
            <date>2010-05-26 09:59:10 -0700</date>
            <delta_ts>2010-05-26 10:05:29 -0700</delta_ts>
            <desc>Patch that fixes the coding style issues</desc>
            <filename>patch.39747</filename>
            <type>text/plain</type>
            <size>69917</size>
            <attacher name="Anders Bakken">agbakken</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDI0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMjYgIEFuZGVycyBCYWtrZW4gIDxhZ2Jha2tlbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
cXRfcnVudGltZS5jcHAgaGFzIGNvZGluZy1zdHlsZSBlcnJvcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NzQ3CisKKyAgICAgICAgRml4IHdlYmtp
dCBjb2Rpbmcgc3R5bGUgaXNzdWVzIGluIHF0X3J1bnRpbWUuY3BwCisKKyAgICAgICAgKiBicmlk
Z2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRV0tOb0RlYnVn
OjpRV0tOb0RlYnVnKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlFXS05vRGVidWc6On5RV0tO
b0RlYnVnKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnZhbHVlUmVhbFR5cGUpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0UnVudGltZU1ldGhvZDo6UXRSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6ZW51bWVyYXRvckluZGV4KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjpuYW1lKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hEYXRhOjpmaXJzdFVucmVzb2x2ZWRJbmRleCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpmaW5kTWV0aG9kSW5kZXgpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjopOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2Jq
ZWN0OjptZXRhT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9i
amVjdDo6cXRfbWV0YWNhc3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9u
T2JqZWN0OjpxdF9tZXRhY2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rp
b25PYmplY3Q6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9u
T2JqZWN0OjptYXRjaCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjo6On5RdEFycmF5KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ojo6c2V0VmFsdWVBdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjo6OnZhbHVlQXQpOgorCiAyMDEwLTA1LTI2ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBXaW5kb3dzICsg
Y2xlYW4gdXAgdGhlIHhjb2RlIHByb2plY3QuCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNw
cAkocmV2aXNpb24gNjAwOTUpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkpTQnl0ZUFycmF5Lmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNp
bmNsdWRlIDxKU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJKU0hUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC00OSw2ICs0OCw3
IEBACiAjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgogI2luY2x1ZGUgInF2YXJsZW5ndGhh
cnJheS5oIgogI2luY2x1ZGUgInF3ZWJlbGVtZW50LmgiCisjaW5jbHVkZSA8SlNGdW5jdGlvbi5o
PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lX2FycmF5Lmg+CkBAIC02NSwxNCArNjUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCiAvLyBEZWJ1Z2dpbmcKLS8vI2RlZmluZSBRVFdLX1JV
TlRJTUVfQ09OVkVSU0lPTl9ERUJVRwotLy8jZGVmaW5lIFFUV0tfUlVOVElNRV9NQVRDSF9ERUJV
RworLy8gI2RlZmluZSBRVFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJVRworLy8gI2RlZmluZSBR
VFdLX1JVTlRJTUVfTUFUQ0hfREVCVUcKIAotY2xhc3MgUVdLTm9EZWJ1ZwoteworY2xhc3MgUVdL
Tm9EZWJ1ZyB7CiBwdWJsaWM6Ci0gICAgaW5saW5lIFFXS05vRGVidWcoKXt9Ci0gICAgaW5saW5l
IH5RV0tOb0RlYnVnKCl7fQorICAgIGlubGluZSBRV0tOb0RlYnVnKCkge30KKyAgICBpbmxpbmUg
flFXS05vRGVidWcoKSB7fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBpbmxpbmUg
UVdLTm9EZWJ1ZyAmb3BlcmF0b3I8PChjb25zdCBUICYpIHsgcmV0dXJuICp0aGlzOyB9CkBAIC0x
MzYsMjUgKzEzNSwyNSBAQCBzdGF0aWMgSlNSZWFsVHlwZSB2YWx1ZVJlYWxUeXBlKEV4ZWNTdGF0
CiB7CiAgICAgaWYgKHZhbC5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gTnVtYmVyOwotICAg
IGVsc2UgaWYgKHZhbC5pc1N0cmluZygpKQorICAgIGlmICh2YWwuaXNTdHJpbmcoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZzsKLSAgICBlbHNlIGlmICh2YWwuaXNCb29sZWFuKCkpCisgICAgaWYg
KHZhbC5pc0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIEJvb2xlYW47Ci0gICAgZWxzZSBpZiAo
dmFsLmlzTnVsbCgpKQorICAgIGlmICh2YWwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBOdWxs
OwotICAgIGVsc2UgaWYgKGlzSlNCeXRlQXJyYXkoJmV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsKSkK
KyAgICBpZiAoaXNKU0J5dGVBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWwpKQogICAgICAg
ICByZXR1cm4gSlNCeXRlQXJyYXk7Ci0gICAgZWxzZSBpZiAodmFsLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgSlNPYmplY3QgKm9iamVjdCA9IHZhbC50b09iamVjdChleGVjKTsKLSAgICAgICAgaWYg
KG9iamVjdC0+aW5oZXJpdHMoJlJ1bnRpbWVBcnJheTo6c19pbmZvKSkgIC8vIFJ1bnRpbWVBcnJh
eSAnaW5oZXJpdHMnIGZyb20gQXJyYXksIGJ1dCBub3QgaW4gQysrCisgICAgaWYgKHZhbC5pc09i
amVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWwudG9PYmplY3QoZXhlYyk7
CisgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1lQXJyYXk6OnNfaW5mbykpIC8v
IFJ1bnRpbWVBcnJheSAnaW5oZXJpdHMnIGZyb20gQXJyYXksIGJ1dCBub3QgaW4gQysrCiAgICAg
ICAgICAgICByZXR1cm4gUlRBcnJheTsKLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0
cygmSlNBcnJheTo6aW5mbykpCisgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5
OjppbmZvKSkKICAgICAgICAgICAgIHJldHVybiBBcnJheTsKLSAgICAgICAgZWxzZSBpZiAob2Jq
ZWN0LT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgICAgICByZXR1cm4gRGF0ZTsK
LSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSkK
KyAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAg
ICAgICAgICByZXR1cm4gUmVnRXhwOwotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRz
KCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKQorICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygm
UnVudGltZU9iamVjdDo6c19pbmZvKSkKICAgICAgICAgICAgIHJldHVybiBRT2JqOwogICAgICAg
ICByZXR1cm4gT2JqZWN0OwogICAgIH0KQEAgLTE4OSw0MSArMTg4LDQxIEBAIFFWYXJpYW50IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywg
dmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewotICAgICAgICBzd2l0
Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6
OkRvdWJsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW46CisgICAg
ICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpCb29sOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RyaW5nOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaGludCA9IFFN
ZXRhVHlwZTo6UVN0cmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGU6
CisgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRRGF0ZVRpbWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSZWdFeHA6CisgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBl
OjpRUmVnRXhwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6aW5mbykpCiAgICAg
ICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgZWxzZSBpZiAob2Jq
ZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6aW5mbykpCiAgICAgICAgICAgICAgICAgaGlu
dCA9IFFNZXRhVHlwZTo6Qm9vbDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgU3RyaW5nOgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBoaW50
ID0gUU1ldGFUeXBlOjpRU3RyaW5nOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBEYXRlOgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFEYXRlVGlt
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVnRXhwOgotICAg
ICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFSZWdFeHA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgICAgICAgICBpZiAob2Jq
ZWN0LT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjppbmZvKSkKLSAgICAgICAgICAgICAgICAgICAg
aGludCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVj
dC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OmluZm8pKQotICAgICAgICAgICAgICAgICAgICBo
aW50ID0gUU1ldGFUeXBlOjpCb29sOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFFPYmo6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFN
ZXRhVHlwZTo6UU9iamVjdFN0YXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEpTQnl0ZUFycmF5OgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFC
eXRlQXJyYXk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OgotICAgICAgICAgICAgY2FzZSBSVEFycmF5OgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0
YVR5cGU6OlFWYXJpYW50TGlzdDsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFPYmo6CisgICAgICAgICAgICBoaW50ID0g
UU1ldGFUeXBlOjpRT2JqZWN0U3RhcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEpTQnl0ZUFycmF5OgorICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UUJ5dGVBcnJheTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICBjYXNlIFJU
QXJyYXk6CisgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudExpc3Q7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQyLDUyOSArMjQxLDUyOSBA
QCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgUVZhcmlhbnQg
cmV0OwogICAgIGludCBkaXN0ID0gLTE7CiAgICAgc3dpdGNoIChoaW50KSB7Ci0gICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpCb29sOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0ICYmIG9i
amVjdC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OmluZm8pKQotICAgICAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50KGFzQm9vbGVhbk9iamVjdCh2YWx1ZSktPmludGVybmFsVmFsdWUoKS50b0Jv
b2xlYW4oZXhlYykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgY2FzZSBRTWV0YVR5cGU6OkJvb2w6
CisgICAgICAgIGlmICh0eXBlID09IE9iamVjdCAmJiBvYmplY3QtPmluaGVyaXRzKCZCb29sZWFu
T2JqZWN0OjppbmZvKSkKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KGFzQm9vbGVhbk9iamVj
dCh2YWx1ZSktPmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAg
ICAgICBpZiAodHlwZSA9PSBCb29sZWFuKQorICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFFNZXRhVHlwZTo6SW50OgorICAgIGNhc2UgUU1ldGFUeXBlOjpVSW50OgorICAgIGNhc2UgUU1l
dGFUeXBlOjpMb25nOgorICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKKyAgICBjYXNlIFFNZXRh
VHlwZTo6TG9uZ0xvbmc6CisgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nTG9uZzoKKyAgICBjYXNl
IFFNZXRhVHlwZTo6U2hvcnQ6CisgICAgY2FzZSBRTWV0YVR5cGU6OlVTaG9ydDoKKyAgICBjYXNl
IFFNZXRhVHlwZTo6RmxvYXQ6CisgICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToKKyAgICAgICAg
cmV0ID0gUVZhcmlhbnQodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgICAgICByZXQuY29udmVy
dCgoUVZhcmlhbnQ6OlR5cGUpaGludCk7CisgICAgICAgIGlmICh0eXBlID09IE51bWJlcikgewor
ICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7CisgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
RG91YmxlOgorICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkZsb2F0OgorICAgICAgICAgICAgICAgIGRp
c3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OkxvbmdMb25nOgorICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nTG9uZzoKKyAg
ICAgICAgICAgICAgICBkaXN0ID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nOgorICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVM
b25nOgorICAgICAgICAgICAgICAgIGRpc3QgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkludDoKKyAgICAgICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpVSW50OgorICAgICAgICAgICAgICAgIGRpc3QgPSA0OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlNob3J0OgorICAgICAgICAgICAgY2Fz
ZSBRTWV0YVR5cGU6OlVTaG9ydDoKKyAgICAgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZGlz
dCA9IDEwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBRTWV0YVR5cGU6OlFDaGFyOgorICAgICAgICBpZiAodHlwZSA9PSBOdW1i
ZXIgfHwgdHlwZSA9PSBCb29sZWFuKSB7CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hh
cigodXNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAodHlwZSA9
PSBCb29sZWFuKQorICAgICAgICAgICAgICAgIGRpc3QgPSAzOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGRpc3QgPSA2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VVN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50KFFDaGFyKHN0ci5zaXplKCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLnJlcCgpLT5jaGFy
YWN0ZXJzKCkgOiAwKSk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCisgICAgICAg
ICAgICAgICAgZGlzdCA9IDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGlz
dCA9IDEwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBRTWV0YVR5cGU6
OlFTdHJpbmc6IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgICAgIGlmIChkaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAg
ICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5j
aGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBT
dHJpbmcpCiAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpJbnQ6Ci0gICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpVSW50OgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6TG9uZzoK
LSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
TG9uZ0xvbmc6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZ0xvbmc6Ci0gICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpTaG9ydDoKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVTaG9ydDoKLSAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OkZsb2F0OgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6RG91
YmxlOgotICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQodmFsdWUudG9OdW1iZXIoZXhlYykpOwot
ICAgICAgICAgICAgcmV0LmNvbnZlcnQoKFFWYXJpYW50OjpUeXBlKWhpbnQpOwotICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToKLSAgICAgICAgICAgICAg
ICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDE7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpMb25nTG9uZzoKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUxvbmdMb25n
OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMjsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6Okxvbmc6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nOgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OkludDoKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUludDoKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpTaG9ydDoKLSAgICAgICAgICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6VVNob3J0OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOgorICAg
ICAgICBpZiAodHlwZSA9PSBPYmplY3QgfHwgdHlwZSA9PSBBcnJheSB8fCB0eXBlID09IFJUQXJy
YXkpIHsKKyAgICAgICAgICAgIC8vIEVudW1lcmF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG9iamVj
dAorICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjKTsKKyAgICAg
ICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb3BlcnRpZXMu
YmVnaW4oKTsKKworICAgICAgICAgICAgUVZhcmlhbnRNYXAgcmVzdWx0OworICAgICAgICAgICAg
aW50IG9iamRpc3QgPSAwOworICAgICAgICAgICAgd2hpbGUgKGl0ICE9IHByb3BlcnRpZXMuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob2JqZWN0LT5wcm9wZXJ0eUlzRW51bWVyYWJsZShl
eGVjLCAqaXQpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gb2JqZWN0LT5n
ZXQoZXhlYywgKml0KTsKKyAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgdiA9IGNvbnZlcnRW
YWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNp
dGVkT2JqZWN0cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ID49IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9ICgqaXQpLnVzdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgaWQgPSBRU3RyaW5nKChjb25zdCBRQ2hh
ciopdXN0cmluZy5yZXAoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KGlkLCB2KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2l0OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGlzdCA9IDE7CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudChy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBRTWV0YVR5cGU6
OlFWYXJpYW50TGlzdDoKKyAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgeworICAgICAgICAg
ICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2Jq
ZWN0KTsKKworICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgIGlu
dCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBvYmpkaXN0ID0g
MDsKKyAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY29udmVydGluZyBhICIgPDwgbGVuIDw8
ICIgbGVuZ3RoIEFycmF5IjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRl
QXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpk
aXN0LCB2aXNpdGVkT2JqZWN0cykpOworICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ID09IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFpbGVkIGNvbnZlcnRp
bmcgZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAv
LyBGYWlsZWQgY29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZGlzdCA9IDU7Cisg
ICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7CisgICAgICAgICAgICBKU0FycmF5KiBh
cnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICBRVmFy
aWFudExpc3QgcmVzdWx0OworICAgICAgICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsK
KyAgICAgICAgICAgIGludCBvYmpkaXN0ID0gMDsKKyAgICAgICAgICAgIHFDb252RGVidWcoKSA8
PCAiY29udmVydGluZyBhICIgPDwgbGVuIDw8ICIgbGVuZ3RoIEFycmF5IjsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2Jq
ZGlzdCwgdmlzaXRlZE9iamVjdHMpKTsKKyAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCA9PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIkZhaWxlZCBjb252ZXJ0
aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWlsIHRoZSBhcnJheQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvYmpkaXN0ICE9
IC0xKSB7CisgICAgICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAgICAgICAgICBpbnQgb2Jq
ZGlzdDsKKyAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAibWFraW5nIGEgc2luZ2xlIGxlbmd0
aCB2YXJpYW50bGlzdCI7CisgICAgICAgICAgICBRVmFyaWFudCB2YXIgPSBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVk
T2JqZWN0cyk7CisgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgeworICAgICAgICAgICAg
ICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmVzdWx0IDw8IHZhcjsK
KyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwogICAgICAgICAgICAgICAg
IGRpc3QgPSAxMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8ICJmYWlsZWQgbWFraW5nIHNpbmdsZSBsZW5ndGggdmFybGlzdCI7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgUU1ldGFUeXBlOjpRU3RyaW5nTGlzdDogeworICAgICAgICBpZiAodHlwZSA9PSBS
VEFycmF5KSB7CisgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2Fz
dDxSdW50aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1
bHQ7CisgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7
CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1
c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKTsKIAotICAgICAgICBj
YXNlIFFNZXRhVHlwZTo6UUNoYXI6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBOdW1iZXIgfHwg
dHlwZSA9PSBCb29sZWFuKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIo
KHVzaG9ydCl2YWx1ZS50b051bWJlcihleGVjKSkpOwotICAgICAgICAgICAgICAgIGlmICh0eXBl
ID09IEJvb2xlYW4pCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAgICAgcmV0ID0gUVZh
cmlhbnQocmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7CisgICAg
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOwor
CisgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CisgICAgICAgICAgICBpbnQgbGVuID0g
YXJyYXktPmxlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsr
aSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChleGVjLCBpKTsK
KyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVz
dHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpOworCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRpc3QgPSA1OworICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAg
ICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
ICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgp
LT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKTsKKyAgICAgICAgICAgIFFTdHJpbmdMaXN0
IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CisgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgUU1ldGFUeXBlOjpRQnl0ZUFy
cmF5OiB7CisgICAgICAgIGlmICh0eXBlID09IEpTQnl0ZUFycmF5KSB7CisgICAgICAgICAgICBX
VEY6OkJ5dGVBcnJheSogYXJyID0gYXNCeXRlQXJyYXkodmFsdWUpLT5zdG9yYWdlKCk7CisgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudChRQnl0ZUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGFyci0+ZGF0YSgpKSwgYXJyLT5sZW5ndGgoKSkpOworICAgICAgICAgICAgZGlzdCA9
IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNv
bnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKS50
b0xhdGluMSgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykKKyAgICAgICAgICAg
ICAgICBkaXN0ID0gNTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaXN0ID0g
MTA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBRTWV0YVR5
cGU6OlFEYXRlVGltZToKKyAgICBjYXNlIFFNZXRhVHlwZTo6UURhdGU6CisgICAgY2FzZSBRTWV0
YVR5cGU6OlFUaW1lOgorICAgICAgICBpZiAodHlwZSA9PSBEYXRlKSB7CisgICAgICAgICAgICBE
YXRlSW5zdGFuY2UqIGRhdGUgPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihvYmplY3QpOwor
ICAgICAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OworICAgICAgICAgICAgbXNUb0dyZWdv
cmlhbkRhdGVUaW1lKGV4ZWMsIGRhdGUtPmludGVybmFsTnVtYmVyKCksIHRydWUsIGdkdCk7Cisg
ICAgICAgICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlVGltZSkgeworICAgICAgICAg
ICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCAr
IDEsIGdkdC5tb250aERheSksIFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25k
KSwgUXQ6OlVUQyk7CisgICAgICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgeworICAgICAgICAgICAgICAgIHJldCA9
IFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKKyAg
ICAgICAgICAgICAgICBkaXN0ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIgKyAxOTAwLCBnZHQubWludXRlLCBnZHQuc2Vjb25k
KTsKKyAgICAgICAgICAgICAgICBkaXN0ID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09IE51bWJlcikgeworICAgICAgICAgICAgZG91YmxlIGIgPSB2YWx1ZS50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdkdDsKKyAgICAg
ICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBiLCB0cnVlLCBnZHQpOworICAgICAg
ICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKKyAgICAgICAgICAgICAg
ICByZXQgPSBRRGF0ZVRpbWUoUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAxLCBn
ZHQubW9udGhEYXkpLCBRVGltZShnZHQuaG91ciwgZ2R0Lm1pbnV0ZSwgZ2R0LnNlY29uZCksIFF0
OjpVVEMpOworICAgICAgICAgICAgICAgIGRpc3QgPSA2OworICAgICAgICAgICAgfSBlbHNlIGlm
IChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRRGF0
ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSk7CisgICAgICAg
ICAgICAgICAgZGlzdCA9IDg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHJldCA9IFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKTsKKyAgICAgICAg
ICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBTdHJpbmcpIHsKKyAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3Qg
UUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpOworCisg
ICAgICAgICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlVGltZSkgeworICAgICAgICAg
ICAgICAgIFFEYXRlVGltZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6
SVNPRGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpUZXh0RGF0
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgIGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVE
YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUp
OworICAgICAgICAgICAgICAgIGlmIChkdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gZHQ7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7
CisgICAgICAgICAgICAgICAgUURhdGUgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBR
dDo6SVNPRGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRl
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7
CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOworICAgICAg
ICAgICAgICAgIGlmIChkdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0g
ZHQ7CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDY7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKHN0ci5zaXpl
KCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLnJlcCgpLT5jaGFyYWN0ZXJzKCkgOiAwKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQorICAgICAgICAgICAgICAgIFFUaW1lIGR0
ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgICAgICAgICAg
ICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1lOjpm
cm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpUZXh0RGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFk
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmco
cXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOworICAgICAgICAgICAgICAgIGlmICghZHQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1lOjpmcm9tU3RyaW5nKHFz
dHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IGR0OwogICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gMzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRpc3Qg
PSAxMDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
UVN0cmluZzogewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgICpkaXN0
YW5jZSA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICBjYXNlIFFN
ZXRhVHlwZTo6UVJlZ0V4cDoKKyAgICAgICAgaWYgKHR5cGUgPT0gUmVnRXhwKSB7CisvKgorICBS
ZWdFeHBPYmplY3QgKnJlID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0KTsKKyov
CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBhIGJpdCByaXNreQorICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+
Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7CisKKyAgICAgICAgICAgIC8vIHRoaXMgaXMg
b2YgdGhlIGZvcm0gJy94eHh4eHgvaScKKyAgICAgICAgICAgIGludCBmaXJzdFNsYXNoID0gcXN0
cmluZy5pbmRleE9mKFFMYXRpbjFDaGFyKCcvJykpOworICAgICAgICAgICAgaW50IGxhc3RTbGFz
aCA9IHFzdHJpbmcubGFzdEluZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7CisgICAgICAgICAgICBp
ZiAoZmlyc3RTbGFzaCA+PTAgJiYgbGFzdFNsYXNoID4gZmlyc3RTbGFzaCkgeworICAgICAgICAg
ICAgICAgIFFSZWdFeHAgcmVhbFJlOworCisgICAgICAgICAgICAgICAgcmVhbFJlLnNldFBhdHRl
cm4ocXN0cmluZy5taWQoZmlyc3RTbGFzaCArIDEsIGxhc3RTbGFzaCAtIGZpcnN0U2xhc2ggLSAx
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAocXN0cmluZy5taWQobGFzdFNsYXNoICsgMSkuY29u
dGFpbnMoUUxhdGluMUNoYXIoJ2knKSkpCisgICAgICAgICAgICAgICAgICAgIHJlYWxSZS5zZXRD
YXNlU2Vuc2l0aXZpdHkoUXQ6OkNhc2VJbnNlbnNpdGl2ZSk7CisKKyAgICAgICAgICAgICAgICBy
ZXQgPSBxVmFyaWFudEZyb21WYWx1ZShyZWFsUmUpOworICAgICAgICAgICAgICAgIGRpc3QgPSAw
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChR
U3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5n
LnNpemUoKSkpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykKKyAgICAgICAg
ICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0IHBhcnNlIGEgSlMgcmVnZXhwIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFN0cmluZykgeworICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+
Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7CisKKyAgICAgICAgICAgIFFSZWdFeHAgcmUo
cXN0cmluZyk7CisgICAgICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAg
ICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUocmUpOworICAgICAgICAgICAgICAgIGRpc3QgPSAx
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
UU1ldGFUeXBlOjpRT2JqZWN0U3RhcjoKKyAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgeworICAg
ICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uob2Jq
ZWN0KTsKKyAgICAgICAgICAgIGlmIChxdGluc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAocXRp
bnN0LT5nZXRPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImZvdW5kIGluc3RhbmNlLCB3aXRoIG9iamVjdDoiIDw8ICh2b2lkKikgcXRpbnN0LT5nZXRPYmpl
Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUocXRpbnN0
LT5nZXRPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCByZXQ7
CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY2FuJ3QgY29udmVydCBkZWxldGVk
IHFvYmplY3QiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJ3YXNuJ3QgYSBxdGluc3RhbmNlIjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
TnVsbCkgeworICAgICAgICAgICAgUU9iamVjdCogbnVsbG9iaiA9IDA7CisgICAgICAgICAgICBy
ZXQgPSBxVmFyaWFudEZyb21WYWx1ZShudWxsb2JqKTsKKyAgICAgICAgICAgIGRpc3QgPSAwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJwcmV2aW91cyB0
eXBlIHdhcyBub3QgYW4gb2JqZWN0OiIgPDwgdHlwZTsKICAgICAgICAgfQorICAgICAgICBicmVh
azsKIAotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRNYXA6Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBPYmplY3QgfHwgdHlwZSA9PSBBcnJheSB8fCB0eXBlID09IFJUQXJyYXkpIHsK
LSAgICAgICAgICAgICAgICAvLyBFbnVtZXJhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0aWVzKTsK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
cm9wZXJ0aWVzLmJlZ2luKCk7Ci0KLSAgICAgICAgICAgICAgICBRVmFyaWFudE1hcCByZXN1bHQ7
Ci0gICAgICAgICAgICAgICAgaW50IG9iamRpc3QgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxl
KGl0ICE9IHByb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVj
dC0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgKml0KSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWwgPSBvYmplY3QtPmdldChleGVjLCAqaXQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUVZhcmlhbnQgdiA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFs
LCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob2JqZGlzdCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gKCppdCkudXN0cmluZygpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFFTdHJpbmcgaWQgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5y
ZXAoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lmluc2VydChpZCwgdik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICBj
YXNlIFFNZXRhVHlwZTo6Vm9pZFN0YXI6CisgICAgICAgIGlmICh0eXBlID09IFFPYmopIHsKKyAg
ICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6OmdldEluc3RhbmNlKG9i
amVjdCk7CisgICAgICAgICAgICBpZiAocXRpbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKHF0
aW5zdC0+Z2V0T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8
ICJmb3VuZCBpbnN0YW5jZSwgd2l0aCBvYmplY3Q6IiA8PCAodm9pZCopIHF0aW5zdC0+Z2V0T2Jq
ZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKCh2b2lk
ICopcXRpbnN0LT5nZXRPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWco
KSA8PCByZXQ7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY2FuJ3QgY29u
dmVydCBkZWxldGVkIHFvYmplY3QiOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBkaXN0ID0gMTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIndhc24n
dCBhIHF0aW5zdGFuY2UiOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7CisgICAgICAgICAgICByZXQgPSBxVmFyaWFu
dEZyb21WYWx1ZSgodm9pZCopMCk7CisgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09IE51bWJlcikgeworICAgICAgICAgICAgLy8gSSBkb24ndCB0aGluayB0
aGF0IGNvbnZlcnRpbmcgYSBkb3VibGUgdG8gYSBwb2ludGVyIGlzIGEgd2lzZQorICAgICAgICAg
ICAgLy8gbW92ZS4gIEV4Y2VwdCBtYXliZSAwLgorICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8
ICJnb3QgbnVtYmVyIGZvciB2b2lkICogLSBub3QgY29udmVydGluZywgc2VlbXMgdW5zYWZlOiIg
PDwgdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBx
Q29udkRlYnVnKCkgPDwgInZvaWQqIC0gdW5oYW5kbGVkIHR5cGUiIDw8IHR5cGU7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFWYXJpYW50TGlz
dDoKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBOb24gY29uc3QgdHlwZSBpZHMKKyAgICAgICAg
aWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkp
IHsKICAgICAgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKICAgICAgICAgICAgICAgICBS
dW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3Qp
OwogCi0gICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICBRT2JqZWN0TGlzdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXkt
PmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgIGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAg
ICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0
aCBBcnJheSI7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkg
ewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRl
QXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAm
b2JqZGlzdCwgdmlzaXRlZE9iamVjdHMpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamRp
c3QgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFp
bGVkIGNvbnZlcnRpbmcgZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgLy8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWls
IHRoZSBhcnJheQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlu
dCBpdGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29u
dmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZp
dGVtZGlzdCwgdmlzaXRlZE9iamVjdHMpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRp
c3QgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1
ZTxRT2JqZWN0Kj4oKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
b2JqZGlzdCAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNv
bnZlcnNpb24KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICByZXQgPSBR
VmFyaWFudChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0
aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFWYXJpYW50TGlz
dCByZXN1bHQ7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOworICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8
SlNBcnJheSAqPihvYmplY3QpOworICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsK
ICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNv
bnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBBcnJheSI7CiAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9p
ZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChv
YmpkaXN0ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
IkZhaWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlzdCBlbnRyeSwgc28g
ZmFpbCB0aGUgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFy
LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0
ZW1kaXN0ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0u
dmFsdWU8UU9iamVjdCo+KCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKG9iamRpc3QgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFp
bCBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikg
ewogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gUVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6
OmZyb21WYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAg
ICAgICAgICAgICBpbnQgb2JqZGlzdDsKLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
Im1ha2luZyBhIHNpbmdsZSBsZW5ndGggdmFyaWFudGxpc3QiOwotICAgICAgICAgICAgICAgIFFW
YXJpYW50IHZhciA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlw
ZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICBpZiAo
b2JqZGlzdCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0
OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPDwgdmFyOwotICAgICAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJl
c3VsdDsKKyAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAg
ICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1l
dGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKICAgICAgICAgICAgICAgICAgICAgZGlz
dCA9IDEwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHFD
b252RGVidWcoKSA8PCAiZmFpbGVkIG1ha2luZyBzaW5nbGUgbGVuZ3RoIHZhcmxpc3QiOworICAg
ICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJpbmdMaXN0OiB7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsK
ICAgICAgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKICAgICAgICAgICAgICAgICBSdW50
aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwog
Ci0gICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIFFM
aXN0PGludD4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRM
ZW5ndGgoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVB
cnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVz
dHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
cXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcuc2l6ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHFzdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAg
ICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhl
YywgdmFsLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgeworICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1
ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0ID0gNTsK
LSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwogICAgICAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKKyAgICAgICAgICAgICAgICBKU0FycmF5
KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkgKj4ob2JqZWN0KTsKIAotICAgICAgICAgICAg
ICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBRTGlzdDxpbnQ+IHJlc3Vs
dDsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwogICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAg
ICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgp
LT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHFzdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3Qg
PSAtMTsKKyAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2Jq
ZWN0cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJp
bmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0
ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1
bHQ7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKLSAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFCeXRlQXJyYXk6IHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IEpT
Qnl0ZUFycmF5KSB7Ci0gICAgICAgICAgICAgICAgV1RGOjpCeXRlQXJyYXkqIGFyciA9IGFzQnl0
ZUFycmF5KHZhbHVlKS0+c3RvcmFnZSgpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KFFCeXRlQXJyYXkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkpLCBh
cnItPmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFD
aGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKS50b0xhdGlu
MSgpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgorICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
UU1ldGFUeXBlOjpRRGF0ZVRpbWU6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRRGF0ZToKLSAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OlFUaW1lOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0
ZSkgewotICAgICAgICAgICAgICAgIERhdGVJbnN0YW5jZSogZGF0ZSA9IHN0YXRpY19jYXN0PERh
dGVJbnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUg
Z2R0OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBkYXRlLT5p
bnRlcm5hbE51bWJlcigpLCB0cnVlLCBnZHQpOwotICAgICAgICAgICAgICAgIGlmIChoaW50ID09
IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRl
VGltZShRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSks
IFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGlu
dCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRl
KGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIgKyAxOTAwLCBnZHQubWludXRlLCBnZHQu
c2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bWJlcikgewotICAgICAgICAgICAg
ICAgIGRvdWJsZSBiID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgR3Jl
Z29yaWFuRGF0ZVRpbWUgZ2R0OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGlt
ZShleGVjLCBiLCB0cnVlLCBnZHQpOwotICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRh
VHlwZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlVGltZShR
RGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSksIFFUaW1l
KGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSA2OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBR
TWV0YVR5cGU6OlFEYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlKGdkdC55
ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKLSAgICAgICAgICAgICAg
ICAgICAgZGlzdCA9IDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpOwotICAg
ICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09IFN0cmluZykgewotICAgICAgICAgICAgICAgIFVTdHJpbmcg
dXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcg
cXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcuc2l6ZSgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRh
VHlwZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBkdCA9IFFE
YXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBR
RGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9
IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBkdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAyOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09
IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUURhdGUgZHQgPSBRRGF0
ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6
ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZy
b21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURh
dGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBk
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUVRpbWUg
ZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQg
PSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0g
UVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBkdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFs
dWUocmVzdWx0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVJlZ0V4cDoKLSAgICAgICAgICAg
IGlmICh0eXBlID09IFJlZ0V4cCkgewotLyoKLSAgICAgICAgICAgICAgICBSZWdFeHBPYmplY3Qg
KnJlID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0KTsKLSovCi0gICAgICAgICAg
ICAgICAgLy8gQXR0ZW1wdCB0byBjb252ZXJ0Li4gYSBiaXQgcmlza3kKLSAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAg
ICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+
Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGlz
IGlzIG9mIHRoZSBmb3JtICcveHh4eHh4L2knCi0gICAgICAgICAgICAgICAgaW50IGZpcnN0U2xh
c2ggPSBxc3RyaW5nLmluZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7Ci0gICAgICAgICAgICAgICAg
aW50IGxhc3RTbGFzaCA9IHFzdHJpbmcubGFzdEluZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZpcnN0U2xhc2ggPj0wICYmIGxhc3RTbGFzaCA+IGZpcnN0U2xh
c2gpIHsKLSAgICAgICAgICAgICAgICAgICAgUVJlZ0V4cCByZWFsUmU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcmVhbFJlLnNldFBhdHRlcm4ocXN0cmluZy5taWQoZmlyc3RTbGFzaCArIDEsIGxh
c3RTbGFzaCAtIGZpcnN0U2xhc2ggLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHFz
dHJpbmcubWlkKGxhc3RTbGFzaCArIDEpLmNvbnRhaW5zKFFMYXRpbjFDaGFyKCdpJykpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldENhc2VTZW5zaXRpdml0eShRdDo6Q2FzZUlu
c2Vuc2l0aXZlKTsKLQotICAgICAgICAgICAgICAgICAgICByZXQgPSBxVmFyaWFudEZyb21WYWx1
ZShyZWFsUmUpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0
IHBhcnNlIGEgSlMgcmVnZXhwIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5n
ID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0
cmluZy5zaXplKCkpOwotCi0gICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dCA9IHFWYXJpYW50RnJvbVZhbHVlKHJlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKKyAgICAgICAgICAgICAgICBR
TGlzdDxpbnQ+IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAg
ICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVj
LCB2YWx1ZSwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMpOworICAg
ICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOwogICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gMTA7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVz
dWx0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UU9iamVjdFN0YXI6Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBRT2JqKSB7Ci0gICAgICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0g
UXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uob2JqZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAocXRp
bnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChxdGluc3QtPmdldE9iamVjdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImZvdW5kIGluc3RhbmNlLCB3
aXRoIG9iamVjdDoiIDw8ICh2b2lkKikgcXRpbnN0LT5nZXRPYmplY3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKHF0aW5zdC0+Z2V0T2JqZWN0KCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRl
bGV0ZWQgcW9iamVjdCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0
aW5zdGFuY2UiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBOdWxsKSB7Ci0gICAgICAgICAgICAgICAgUU9iamVjdCogbnVsbG9iaiA9IDA7Ci0gICAg
ICAgICAgICAgICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUobnVsbG9iaik7Ci0gICAgICAgICAg
ICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHFD
b252RGVidWcoKSA8PCAicHJldmlvdXMgdHlwZSB3YXMgbm90IGFuIG9iamVjdDoiIDw8IHR5cGU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6Vm9pZFN0YXI6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBRT2JqKSB7Ci0gICAgICAg
ICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uob2Jq
ZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAocXRpbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChxdGluc3QtPmdldE9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29u
dkRlYnVnKCkgPDwgImZvdW5kIGluc3RhbmNlLCB3aXRoIG9iamVjdDoiIDw8ICh2b2lkKikgcXRp
bnN0LT5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHFWYXJpYW50
RnJvbVZhbHVlKCh2b2lkICopcXRpbnN0LT5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBxQ29udkRlYnVnKCkgPDwgcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgZGlz
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBxQ29udkRlYnVnKCkgPDwgImNhbid0IGNvbnZlcnQgZGVsZXRlZCBxb2JqZWN0IjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHFDb252RGVidWcoKSA8PCAid2Fzbid0IGEgcXRpbnN0YW5jZSI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bGwpIHsKLSAgICAg
ICAgICAgICAgICByZXQgPSBxVmFyaWFudEZyb21WYWx1ZSgodm9pZCopMCk7Ci0gICAgICAgICAg
ICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSSBkb24ndCB0aGluayB0aGF0IGNvbnZlcnRpbmcgYSBkb3Vi
bGUgdG8gYSBwb2ludGVyIGlzIGEgd2lzZQotICAgICAgICAgICAgICAgIC8vIG1vdmUuICBFeGNl
cHQgbWF5YmUgMC4KLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImdvdCBudW1iZXIg
Zm9yIHZvaWQgKiAtIG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8PCB2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8ICJ2b2lkKiAtIHVuaGFuZGxlZCB0eXBlIiA8PCB0eXBlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFU
eXBlOjpUeXBlPihoaW50KSkpIHsKKyAgICAgICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFuY2U6
OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwgc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPiho
aW50KSk7CisgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0
YVR5cGVJZDxRV2ViRWxlbWVudD4oKSkgeworICAgICAgICAgICAgaWYgKG9iamVjdCAmJiBvYmpl
Y3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KFF0V2ViRWxlbWVudFJ1bnRpbWU6
OmNyZWF0ZSgoc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG9iamVjdCkpLT5pbXBsKCkpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFXZWJFbGVtZW50PihRV2ViRWxlbWVudCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChoaW50
ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIGlm
IChkaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBOb24gY29uc3QgdHlwZSBp
ZHMKLSAgICAgICAgICAgIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlk
PFFPYmplY3RMaXN0PigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0eXBl
ID09IFJUQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5
ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAg
ICAgICBRT2JqZWN0TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBy
dGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBy
dGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFU
eXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVjdCo+KCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBm
YWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09
IGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsK
LSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4
ZWMpOwotICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpT
QXJyYXkgKj4ob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0
OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1l
dGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVjdCo+KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4n
dCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgp
ID09IGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgICAgICBR
T2JqZWN0TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0x
OwotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFy
aWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNp
dGVkT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVjdCo+
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlk
PFFMaXN0PGludD4gPigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkg
ewotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2Fz
dDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgICAgIFFMaXN0PGlu
dD4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29u
Y3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVt
ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6SW50LCAmaXRl
bWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
ZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bS52YWx1ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6
ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsZW4g
PSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJy
YXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9
IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVk
T2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50Pigp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1
bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAg
ICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBp
dGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVy
dFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwg
dmlzaXRlZE9iamVjdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4o
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0aWNfY2Fz
dDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IFF0UGl4
bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwgc3RhdGljX2Nhc3Q8UU1ldGFU
eXBlOjpUeXBlPihoaW50KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRh
VHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVdlYkVsZW1lbnQ+KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEVsZW1lbnQ6OnNfaW5mbykp
Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1l
bnQ+KFF0V2ViRWxlbWVudFJ1bnRpbWU6OmNyZWF0ZSgoc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVu
dCo+KG9iamVjdCkpLT5pbXBsKCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KFFXZWJFbGVt
ZW50KCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUp
IHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMgb2JqZWN0IHlldCwgd2Ug
cmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkT2JqZWN0cy0+cmVtb3Zl
KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxhZwotICAgICAgICAgICAg
ICAgICAgICByZXQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5
cGU6OlZvaWQsIGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgICAg
IGRpc3QgPSAxMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAodHlwZSA9PSBPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMgb2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0
CisgICAgICAgICAgICAgICAgdmlzaXRlZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9k
ZXRlY3QgZmxhZworICAgICAgICAgICAgcmV0ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVj
LCB2YWx1ZSwgUU1ldGFUeXBlOjpWb2lkLCBkaXN0YW5jZSwgdmlzaXRlZE9iamVjdHMpOwogICAg
ICAgICAgICAgZGlzdCA9IDEwOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBkaXN0ID0gMTA7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICghcmV0Lmlz
VmFsaWQoKSkKQEAgLTc4OCwxMSArNzg3LDExIEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9W
YWx1ZShFeGVjU3RhdGUKICAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZSA9IChRTWV0YVR5cGU6OlR5
cGUpIHZhcmlhbnQudXNlclR5cGUoKTsKIAogICAgIHFDb252RGVidWcoKSA8PCAiY29udmVydFFW
YXJpYW50VG9WYWx1ZTogbWV0YXR5cGU6IiA8PCB0eXBlIDw8ICIsIGlzbnVsbDogIiA8PCB2YXJp
YW50LmlzTnVsbCgpOwotICAgIGlmICh2YXJpYW50LmlzTnVsbCgpICYmCi0gICAgICAgIHR5cGUg
IT0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhciAmJgotICAgICAgICB0eXBlICE9IFFNZXRhVHlwZTo6
Vm9pZFN0YXIgJiYKLSAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlFXaWRnZXRTdGFyICYmCi0g
ICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpRU3RyaW5nKSB7CisgICAgaWYgKHZhcmlhbnQuaXNO
dWxsKCkKKyAgICAgICAgJiYgdHlwZSAhPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyCisgICAgICAg
ICYmIHR5cGUgIT0gUU1ldGFUeXBlOjpWb2lkU3RhcgorICAgICAgICAmJiB0eXBlICE9IFFNZXRh
VHlwZTo6UVdpZGdldFN0YXIKKyAgICAgICAgJiYgdHlwZSAhPSBRTWV0YVR5cGU6OlFTdHJpbmcp
IHsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIApAQCAtODAxLDE2ICs4MDAsMTYg
QEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRv
Qm9vbCgpKTsKIAotICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6SW50IHx8Ci0gICAgICAgIHR5
cGUgPT0gUU1ldGFUeXBlOjpVSW50IHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpMb25n
IHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVTG9uZyB8fAotICAgICAgICB0eXBlID09
IFFNZXRhVHlwZTo6TG9uZ0xvbmcgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVMb25n
TG9uZyB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6U2hvcnQgfHwKLSAgICAgICAgdHlw
ZSA9PSBRTWV0YVR5cGU6OlVTaG9ydCB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6Rmxv
YXQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OkRvdWJsZSkKKyAgICBpZiAodHlwZSA9
PSBRTWV0YVR5cGU6OkludAorICAgICAgICB8fCB0eXBlID09IFFNZXRhVHlwZTo6VUludAorICAg
ICAgICB8fCB0eXBlID09IFFNZXRhVHlwZTo6TG9uZworICAgICAgICB8fCB0eXBlID09IFFNZXRh
VHlwZTo6VUxvbmcKKyAgICAgICAgfHwgdHlwZSA9PSBRTWV0YVR5cGU6OkxvbmdMb25nCisgICAg
ICAgIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpVTG9uZ0xvbmcKKyAgICAgICAgfHwgdHlwZSA9PSBR
TWV0YVR5cGU6OlNob3J0CisgICAgICAgIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpVU2hvcnQKKyAg
ICAgICAgfHwgdHlwZSA9PSBRTWV0YVR5cGU6OkZsb2F0CisgICAgICAgIHx8IHR5cGUgPT0gUU1l
dGFUeXBlOjpEb3VibGUpCiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB2YXJpYW50LnRv
RG91YmxlKCkpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRUmVnRXhwKSB7CkBAIC04
MjYsMTcgKzgyNSwxNyBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRl
CiAgICAgICAgICAgICBSZWZQdHI8SlNDOjpSZWdFeHA+IHJlZ0V4cCA9IEpTQzo6UmVnRXhwOjpj
cmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgdWZsYWdzKTsKICAgICAgICAgICAg
IGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChleGVj
KSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpR
RGF0ZSB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6UVRpbWUpIHsKKyAgICBpZiAodHlw
ZSA9PSBRTWV0YVR5cGU6OlFEYXRlVGltZQorICAgICAgICB8fCB0eXBlID09IFFNZXRhVHlwZTo6
UURhdGUKKyAgICAgICAgfHwgdHlwZSA9PSBRTWV0YVR5cGU6OlFUaW1lKSB7CiAKICAgICAgICAg
UURhdGUgZGF0ZSA9IFFEYXRlOjpjdXJyZW50RGF0ZSgpOwotICAgICAgICBRVGltZSB0aW1lKDAs
MCwwKTsgLy8gbWlkbmlnaHQKKyAgICAgICAgUVRpbWUgdGltZSgwLCAwLCAwKTsgLy8gbWlkbmln
aHQKIAogICAgICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFEYXRlKQogICAgICAgICAgICAg
ZGF0ZSA9IHZhcmlhbnQudmFsdWU8UURhdGU+KCk7CkBAIC05MTQsMTMgKzkxMywxNiBAQCBKU1Zh
bHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIFFWYXJpYW50TGlz
dCB2bCA9IHZhcmlhbnQudG9MaXN0KCk7CiAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZ290IGEg
IiA8PCB2bC5jb3VudCgpIDw8ICIgbGVuZ3RoIGxpc3Q6IiA8PCB2bDsKICAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUnVudGltZUFycmF5KGV4ZWMsIG5ldyBRdEFycmF5PFFWYXJpYW50Pih2bCwg
UU1ldGFUeXBlOjpWb2lkLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFFNZXRhVHlw
ZTo6UVN0cmluZ0xpc3QpIHsKKyAgICB9CisgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRU3Ry
aW5nTGlzdCkgewogICAgICAgICBRU3RyaW5nTGlzdCBzbCA9IHZhcmlhbnQudmFsdWU8UVN0cmlu
Z0xpc3Q+KCk7CiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBu
ZXcgUXRBcnJheTxRU3RyaW5nPihzbCwgUU1ldGFUeXBlOjpRU3RyaW5nLCByb290KSk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFPYmplY3RM
aXN0PigpKSB7CisgICAgfQorICAgIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRh
VHlwZUlkPFFPYmplY3RMaXN0PigpKSB7CiAgICAgICAgIFFPYmplY3RMaXN0IG9sPSB2YXJpYW50
LnZhbHVlPFFPYmplY3RMaXN0PigpOwogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1l
QXJyYXkoZXhlYywgbmV3IFF0QXJyYXk8UU9iamVjdCo+KG9sLCBRTWV0YVR5cGU6OlFPYmplY3RT
dGFyLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5cGUpcU1l
dGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsKKyAgICB9CisgICAgaWYgKHR5cGUgPT0gKFFNZXRh
VHlwZTo6VHlwZSlxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkgewogICAgICAgICBRTGlzdDxp
bnQ+IGlsPSB2YXJpYW50LnZhbHVlPFFMaXN0PGludD4gPigpOwogICAgICAgICByZXR1cm4gbmV3
IChleGVjKSBSdW50aW1lQXJyYXkoZXhlYywgbmV3IFF0QXJyYXk8aW50PihpbCwgUU1ldGFUeXBl
OjpJbnQsIHJvb3QpKTsKICAgICB9CkBAIC05NDEsMTQgKzk0MywxNCBAQCBKU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAvLyA9PT09PT09PT09PT09PT0KIAogLy8gUXQt
bGlrZSBtYWNyb3MKLSNkZWZpbmUgUVdfRChDbGFzcykgQ2xhc3MjI0RhdGEqIGQgPSBkX2Z1bmMo
KQotI2RlZmluZSBRV19EUyhDbGFzcyxJbnN0YW5jZSkgQ2xhc3MjI0RhdGEqIGQgPSBJbnN0YW5j
ZS0+ZF9mdW5jKCkKKyNkZWZpbmUgUVdfRChDbGFzcykgQ2xhc3MjI0RhdGEqIGQgPSBkZnVuYygp
CisjZGVmaW5lIFFXX0RTKENsYXNzLCBJbnN0YW5jZSkgQ2xhc3MjI0RhdGEqIGQgPSBJbnN0YW5j
ZS0+ZGZ1bmMoKQogCiBjb25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7
ICJRdFJ1bnRpbWVNZXRob2QiLCAwLCAwLCAwIH07CiAKIFF0UnVudGltZU1ldGhvZDo6UXRSdW50
aW1lTWV0aG9kKFF0UnVudGltZU1ldGhvZERhdGEqIGRkLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QpCiAgICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxRdFJ1bnRpbWVNZXRob2Q+KGV4ZWMp
LCBpZGVudCkKLSAgICAsIGRfcHRyKGRkKQorICAgICwgZHB0cihkZCkKIHsKICAgICBRV19EKFF0
UnVudGltZU1ldGhvZCk7CiAgICAgZC0+bV9pbnN0YW5jZSA9IGluc3Q7CkBAIC05NTgsNyArOTYw
LDcgQEAgUXRSdW50aW1lTWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCkKIHsKICAgICBRV19EKFF0
UnVudGltZU1ldGhvZCk7CiAgICAgZC0+bV9pbnN0YW5jZS0+cmVtb3ZlQ2FjaGVkTWV0aG9kKHRo
aXMpOwotICAgIGRlbGV0ZSBkX3B0cjsKKyAgICBkZWxldGUgZHB0cjsKIH0KIAogLy8gPT09PT09
PT09PT09PT09CkBAIC05ODAsOCArOTgyLDcgQEAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERh
dGE6On5RdFJ1bnRpbQogLy8gPT09PT09PT09PT09PT09CiAKIC8vIFR5cGUgY29udmVyc2lvbiBt
ZXRhZGF0YSAoZnJvbSBRdFNjcmlwdCBvcmlnaW5hbGx5KQotY2xhc3MgUXRNZXRob2RNYXRjaFR5
cGUKLXsKK2NsYXNzIFF0TWV0aG9kTWF0Y2hUeXBlIHsKIHB1YmxpYzoKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBJbnZhbGlkLApAQCAtMTAxOCw3ICsxMDE5LDEwIEBAIHB1YmxpYzoKICAgICBR
Qnl0ZUFycmF5IG5hbWUoKSBjb25zdDsKIAogICAgIGludCBlbnVtZXJhdG9ySW5kZXgoKSBjb25z
dAotICAgIHsgUV9BU1NFUlQoaXNNZXRhRW51bSgpKTsgcmV0dXJuIG1fdHlwZUlkOyB9CisgICAg
eworICAgICAgICBRX0FTU0VSVChpc01ldGFFbnVtKCkpOworICAgICAgICByZXR1cm4gbV90eXBl
SWQ7CisgICAgfQogCiAgICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIHZhcmlhbnQoKQogICAg
IHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKFZhcmlhbnQpOyB9CkBAIC0xMDUyLDEzICsxMDU2
LDEyIEBAIFFCeXRlQXJyYXkgUXRNZXRob2RNYXRjaFR5cGU6Om5hbWUoKSBjb24KIHsKICAgICBp
ZiAoIW1fbmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX25hbWU7Ci0gICAgZWxzZSBp
ZiAobV9raW5kID09IFZhcmlhbnQpCisgICAgaWYgKG1fa2luZCA9PSBWYXJpYW50KQogICAgICAg
ICByZXR1cm4gIlFWYXJpYW50IjsKICAgICByZXR1cm4gUUJ5dGVBcnJheSgpOwogfQogCi1zdHJ1
Y3QgUXRNZXRob2RNYXRjaERhdGEKLXsKK3N0cnVjdCBRdE1ldGhvZE1hdGNoRGF0YSB7CiAgICAg
aW50IG1hdGNoRGlzdGFuY2U7CiAgICAgaW50IGluZGV4OwogICAgIFFWZWN0b3I8UXRNZXRob2RN
YXRjaFR5cGU+IHR5cGVzOwpAQCAtMTA3NSw3ICsxMDc4LDcgQEAgc3RydWN0IFF0TWV0aG9kTWF0
Y2hEYXRhCiAKICAgICBpbnQgZmlyc3RVbnJlc29sdmVkSW5kZXgoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdHlwZXMuY291bnQoKTsgaSsrKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuY291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAo
dHlwZXMuYXQoaSkuaXNVbnJlc29sdmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAg
ICAgICAgIH0KQEAgLTExNDYsNyArMTE0OSw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4
KEV4ZWNTdGF0ZSogZXgKICAgICBRVmVjdG9yPGludD4gdG9vRmV3QXJnczsKICAgICBRVmVjdG9y
PGludD4gY29udmVyc2lvbkZhaWxlZDsKIAotICAgIGZvcmVhY2goaW50IGluZGV4LCBtYXRjaGlu
Z0luZGljZXMpIHsKKyAgICBmb3JlYWNoIChpbnQgaW5kZXgsIG1hdGNoaW5nSW5kaWNlcykgewog
ICAgICAgICBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRob2QoaW5kZXgpOwogCiAgICAg
ICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IHR5cGVzOwpAQCAtMTE1NSw3ICsxMTU4LDcg
QEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleAogICAgICAgICAvLyBy
ZXNvbHZlIHJldHVybiB0eXBlCiAgICAgICAgIFFCeXRlQXJyYXkgcmV0dXJuVHlwZU5hbWUgPSBt
ZXRob2QudHlwZU5hbWUoKTsKICAgICAgICAgaW50IHJ0eXBlID0gUU1ldGFUeXBlOjp0eXBlKHJl
dHVyblR5cGVOYW1lKTsKLSAgICAgICAgaWYgKChydHlwZSA9PSAwKSAmJiAhcmV0dXJuVHlwZU5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghcnR5cGUgJiYgIXJldHVyblR5cGVOYW1lLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKHJldHVyblR5cGVOYW1lID09ICJRVmFyaWFudCIp
IHsKICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlh
bnQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVyblR5cGVOYW1lLmVuZHNXaXRoKCcq
JykpIHsKQEAgLTExODEsMTAgKzExODQsMTAgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgo
RXhlY1N0YXRlKiBleAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlclR5cGVO
YW1lcy5jb3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIFFCeXRlQXJyYXkgYXJnVHlwZU5hbWUg
PSBwYXJhbWV0ZXJUeXBlTmFtZXMuYXQoaSk7CiAgICAgICAgICAgICBpbnQgYXR5cGUgPSBRTWV0
YVR5cGU6OnR5cGUoYXJnVHlwZU5hbWUpOwotICAgICAgICAgICAgaWYgKGF0eXBlID09IDApIHsK
LSAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZU5hbWUgPT0gIlFWYXJpYW50IikgeworICAgICAg
ICAgICAgaWYgKCFhdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlTmFtZSA9PSAi
UVZhcmlhbnQiKQogICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRj
aFR5cGU6OnZhcmlhbnQoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGVudW1JbmRleCA9IGluZGV4T2ZN
ZXRhRW51bShtZXRhLCBhcmdUeXBlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbnVt
SW5kZXggIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRo
b2RNYXRjaFR5cGU6Om1ldGFFbnVtKGVudW1JbmRleCwgYXJnVHlwZU5hbWUpKTsKQEAgLTEyNDIs
MjQgKzEyNDUsMjIgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleAog
ICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDogIiA8PCBtZXRob2Quc2lnbmF0dXJlKCkg
PDwgKGNvbnZlcnRlZCA/ICJjb252ZXJ0ZWQiOiJmYWlsZWQgdG8gY29udmVydCIpIDw8ICJkaXN0
YW5jZSAiIDw8IG1hdGNoRGlzdGFuY2U7CiAKICAgICAgICAgaWYgKGNvbnZlcnRlZCkgewotICAg
ICAgICAgICAgaWYgKChqc0FyZ3Muc2l6ZSgpICsgMSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dHlwZXMuY291bnQoKSkpCi0gICAgICAgICAgICAgICAgJiYgKG1hdGNoRGlzdGFuY2UgPT0gMCkp
IHsKKyAgICAgICAgICAgIGlmICgoanNBcmdzLnNpemUoKSArIDEgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHR5cGVzLmNvdW50KCkpKSAmJiAhbWF0Y2hEaXN0YW5jZSkgewogICAgICAgICAgICAg
ICAgIC8vIHBlcmZlY3QgbWF0Y2gsIHVzZSB0aGlzIG9uZQogICAgICAgICAgICAgICAgIGNob3Nl
bkluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRhIGN1cnJlbnRNYXRjaChtYXRj
aERpc3RhbmNlLCBpbmRleCwgdHlwZXMsIGFyZ3MpOwotICAgICAgICAgICAgICAgIGlmIChjYW5k
aWRhdGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVu
ZChjdXJyZW50TWF0Y2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUXRNZXRob2RNYXRj
aERhdGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFuY2UsIGluZGV4LCB0eXBlcywgYXJncyk7Cisg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRhIGJlc3RNYXRjaFNvRmFyID0gY2FuZGlkYXRlcy5h
dCgwKTsKKyAgICAgICAgICAgICAgICBpZiAoKGFyZ3MuY291bnQoKSA+IGJlc3RNYXRjaFNvRmFy
LmFyZ3MuY291bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKChhcmdzLmNvdW50KCkgPT0g
YmVzdE1hdGNoU29GYXIuYXJncy5jb3VudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
KG1hdGNoRGlzdGFuY2UgPD0gYmVzdE1hdGNoU29GYXIubWF0Y2hEaXN0YW5jZSkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHJlcGVuZChjdXJyZW50TWF0Y2gpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRh
IGJlc3RNYXRjaFNvRmFyID0gY2FuZGlkYXRlcy5hdCgwKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKChhcmdzLmNvdW50KCkgPiBiZXN0TWF0Y2hTb0Zhci5hcmdzLmNvdW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB8fCAoKGFyZ3MuY291bnQoKSA9PSBiZXN0TWF0Y2hTb0Zhci5hcmdz
LmNvdW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1hdGNoRGlzdGFuY2Ug
PD0gYmVzdE1hdGNoU29GYXIubWF0Y2hEaXN0YW5jZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYW5kaWRhdGVzLnByZXBlbmQoY3VycmVudE1hdGNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGN1
cnJlbnRNYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Y2FuZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjcwLDcgKzEyNzEsNyBAQCBzdGF0aWMg
aW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBpZiAoY2hvc2VuSW5kZXggPT0gLTEgJiYgY2FuZGlkYXRlcy5jb3VudCgpID09
IDApIHsKKyAgICBpZiAoY2hvc2VuSW5kZXggPT0gLTEgJiYgY2FuZGlkYXRlcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gTm8gdmFsaWQgZnVuY3Rpb25zIGF0IGFsbCAtIGZvcm1hdCBhbiBlcnJv
ciBtZXNzYWdlCiAgICAgICAgIGlmICghY29udmVyc2lvbkZhaWxlZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImluY29tcGF0
aWJsZSB0eXBlIG9mIGFyZ3VtZW50KHMpIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyB3ZXJl
XG4iKQpAQCAtMTMzMyw3ICsxMzM0LDcgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhl
Y1N0YXRlKiBleAogICAgICAgICAvKiBDb3B5IHRoZSBzdHVmZiBvdmVyICovCiAgICAgICAgIGlu
dCBpOwogICAgICAgICB2YXJzLnJlc2l6ZShhcmdzLmNvdW50KCkpOwotICAgICAgICBmb3IgKGk9
MDsgaSA8IGFyZ3MuY291bnQoKTsgaSsrKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdz
LmNvdW50KCk7IGkrKykgewogICAgICAgICAgICAgdmFyc1tpXSA9IGFyZ3NbaV07CiAgICAgICAg
ICAgICB2dmFyc1tpXSA9IHZhcnNbaV0uZGF0YSgpOwogICAgICAgICB9CkBAIC0xMzgwLDcgKzEz
ODEsNyBAQCB2b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6Om1hcmtDaGlsZHJlbihNCiAKIEpTVmFs
dWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBm
dW5jdGlvbk9iamVjdCwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBRdFJ1
bnRpbWVNZXRhTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2Qg
Kj4oZnVuY3Rpb25PYmplY3QpLT5kX2Z1bmMoKTsKKyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0
YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2QgKj4oZnVuY3Rpb25PYmplY3Qp
LT5kZnVuYygpOwogCiAgICAgLy8gV2UncmUgbGltaXRlZCB0byAxMCBhcmdzCiAgICAgaWYgKGFy
Z3Muc2l6ZSgpID4gMTApCkBAIC0xMzg5LDEwICsxMzkwLDEwIEBAIEpTVmFsdWUgUXRSdW50aW1l
TWV0YU1ldGhvZDo6Y2FsbChFeGVjU3QKICAgICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2Qg
dGhhdCBtYXRjaGVzLi4KICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
Ci0gICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CisgICAgUU9i
amVjdCogb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKG9iaikgewog
ICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiB2YXJnczsKLSAgICAgICAgdm9p
ZCAqcWFyZ3NbMTFdOworICAgICAgICB2b2lkKiBxYXJnc1sxMV07CiAKICAgICAgICAgaW50IG1l
dGhvZEluZGV4OwogICAgICAgICBKU09iamVjdCogZXJyb3JPYmogPSAwOwpAQCAtMTQyNSwxMCAr
MTQyNiwxMiBAQCBib29sIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5CiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSAiY29ubmVjdCIpIHsKICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpcywgY29ubmVjdEdldHRlcik7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBp
ZiAocHJvcGVydHlOYW1lID09ICJkaXNjb25uZWN0IikgeworICAgIH0KKyAgICBpZiAocHJvcGVy
dHlOYW1lID09ICJkaXNjb25uZWN0IikgewogICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBk
aXNjb25uZWN0R2V0dGVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgIH0KKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbGVuZ3RoR2V0dGVyKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMTUxNSw3ICsxNTE4LDcgQEAgUXRSdW50aW1lQ29ubmVjdGlvbk1l
dGhvZDo6UXRSdW50aW1lQ29ubgogCiBKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6
OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERh
dGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGZ1bmN0aW9u
T2JqZWN0KS0+ZF9mdW5jKCk7CisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQg
PSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGZ1bmN0aW9uT2JqZWN0
KS0+ZGZ1bmMoKTsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAK
QEAgLTE1NDEsMTUgKzE1NDQsMTUgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
OjpjYWxsKAogICAgICAgICAgICAgICAgIGlmIChmdW5jT2JqZWN0LT5nZXRDYWxsRGF0YShjYWxs
RGF0YSkgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lz
Q29ubmVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rp
b24iKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5l
Y3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpOworCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0
OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGFyZ3Muc2l6ZSgpID49IDIpIHsKICAgICAgICAgICAgICAgICBpZiAo
YXJncy5hdCgwKS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qg
PSBhcmdzLmF0KDApLnRvT2JqZWN0KGV4ZWMpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRvIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QgKmFzT2JqID0gYXJncy5hdCgxKS50b09iamVjdChleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGFzT2JqID0gYXJncy5hdCgxKS50b09iamVjdChleGVjKTsKICAgICAgICAg
ICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICAgICAgICAgIGlmIChh
c09iai0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdmVyc2lvbgpAQCAtMTU2NCwyNiArMTU2NywyNiBA
QCBKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHRoaXNPYmplY3QtPmdldChleGVjLCBmdW5jSWRlbnQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGFzRnVuY09iaiA9IHZhbC50b09i
amVjdChleGVjKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzRnVuY09iai0+Z2V0
Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFzRnVuY09iai0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9u
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNGdW5jT2JqOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlv
biIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUXRNZXRh
TWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAi
UXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
LCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFuIG9iamVjdCIpOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGhp
c09iamVjdCBpcyBub3QgYW4gb2JqZWN0Iik7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRo
aXNPYmplY3QgaXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJRdE1l
dGFNZXRob2QuY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIik7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFs
RXJyb3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIik7CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJR
dE1ldGFNZXRob2QuZGlzY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIik7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkgewpAQCAtMTYwMiwxNiArMTYw
NSwxNCBAQCBKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJv
ciwgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgY29ubmVjdGlv
bgotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9ucy5pbnNlcnQoc2VuZGVyLCBjb25uKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgY29ubmVjdGlvbgor
ICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLmluc2VydChzZW5kZXIsIGNvbm4pOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBOb3cgdG8gZmluZCBvdXIgcHJldmlv
dXMgY29ubmVjdGlvbiBvYmplY3QuIEhtbS4KICAgICAgICAgICAgICAgICBRTGlzdDxRdENvbm5l
Y3Rpb25PYmplY3QqPiBjb25ucyA9IGNvbm5lY3Rpb25zLnZhbHVlcyhzZW5kZXIpOwogICAgICAg
ICAgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBmb3JlYWNoKFF0
Q29ubmVjdGlvbk9iamVjdCogY29ubiwgY29ubnMpIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNo
IChRdENvbm5lY3Rpb25PYmplY3QqIGNvbm4sIGNvbm5zKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIElzIHRoaXMgdGhlIHJpZ2h0IGNvbm5lY3Rpb24/CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjb25uLT5tYXRjaChzZW5kZXIsIHNpZ25hbEluZGV4LCB0aGlzT2JqZWN0LCBmdW5jT2JqZWN0
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0CkBAIC0x
NzA1LDE5ICsxNzA2LDE4IEBAIFF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVj
dCgKIH0KIAogc3RhdGljIGNvbnN0IHVpbnQgcXRfbWV0YV9kYXRhX1F0Q29ubmVjdGlvbk9iamVj
dFtdID0geworICAgIC8vIGNvbnRlbnQ6CisgICAgMSwgLy8gcmV2aXNpb24KKyAgICAwLCAvLyBj
bGFzc25hbWUKKyAgICAwLCAwLCAvLyBjbGFzc2luZm8KKyAgICAxLCAxMCwgLy8gbWV0aG9kcwor
ICAgIDAsIDAsIC8vIHByb3BlcnRpZXMKKyAgICAwLCAwLCAvLyBlbnVtcy9zZXRzCiAKLSAvLyBj
b250ZW50OgotICAgICAgIDEsICAgICAgIC8vIHJldmlzaW9uCi0gICAgICAgMCwgICAgICAgLy8g
Y2xhc3NuYW1lCi0gICAgICAgMCwgICAgMCwgLy8gY2xhc3NpbmZvCi0gICAgICAgMSwgICAxMCwg
Ly8gbWV0aG9kcwotICAgICAgIDAsICAgIDAsIC8vIHByb3BlcnRpZXMKLSAgICAgICAwLCAgICAw
LCAvLyBlbnVtcy9zZXRzCisgICAgLy8gc2xvdHM6IHNpZ25hdHVyZSwgcGFyYW1ldGVycywgdHlw
ZSwgdGFnLCBmbGFncworICAgIDI4LCAyNywgMjcsIDI3LCAweDBhLAogCi0gLy8gc2xvdHM6IHNp
Z25hdHVyZSwgcGFyYW1ldGVycywgdHlwZSwgdGFnLCBmbGFncwotICAgICAgMjgsICAgMjcsICAg
MjcsICAgMjcsIDB4MGEsCi0KLSAgICAgICAwICAgICAgICAvLyBlb2QKKyAgICAwIC8vIGVvZAog
fTsKIAogc3RhdGljIGNvbnN0IGNoYXIgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9i
amVjdFtdID0gewpAQCAtMTcyOSwzNCArMTcyOSwzNSBAQCBjb25zdCBRTWV0YU9iamVjdCBRdENv
bm5lY3Rpb25PYmplY3Q6OnN0CiAgICAgICBxdF9tZXRhX2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0
LCAwIH0KIH07CiAKLWNvbnN0IFFNZXRhT2JqZWN0ICpRdENvbm5lY3Rpb25PYmplY3Q6Om1ldGFP
YmplY3QoKSBjb25zdAorY29uc3QgUU1ldGFPYmplY3QqIFF0Q29ubmVjdGlvbk9iamVjdDo6bWV0
YU9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICZzdGF0aWNNZXRhT2JqZWN0OwogfQogCi12
b2lkICpRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KGNvbnN0IGNoYXIgKl9jbG5hbWUp
Cit2b2lkKiBRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KGNvbnN0IGNoYXIqIGNsbmFt
ZSkKIHsKLSAgICBpZiAoIV9jbG5hbWUpIHJldHVybiAwOwotICAgIGlmICghc3RyY21wKF9jbG5h
bWUsIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3QpKQorICAgIGlmICghY2xu
YW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXN0cmNtcChjbG5hbWUsIHF0X21ldGFf
c3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3QpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8UXRDb25uZWN0aW9uT2JqZWN0Kj4odGhpcykpOwotICAgIHJl
dHVybiBRT2JqZWN0OjpxdF9tZXRhY2FzdChfY2xuYW1lKTsKKyAgICByZXR1cm4gUU9iamVjdDo6
cXRfbWV0YWNhc3QoY2xuYW1lKTsKIH0KIAotaW50IFF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0
YWNhbGwoUU1ldGFPYmplY3Q6OkNhbGwgX2MsIGludCBfaWQsIHZvaWQgKipfYSkKK2ludCBRdENv
bm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsIGMsIGludCBpZCwg
dm9pZCoqIGEpCiB7Ci0gICAgX2lkID0gUU9iamVjdDo6cXRfbWV0YWNhbGwoX2MsIF9pZCwgX2Ep
OwotICAgIGlmIChfaWQgPCAwKQotICAgICAgICByZXR1cm4gX2lkOwotICAgIGlmIChfYyA9PSBR
TWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCkgewotICAgICAgICBzd2l0Y2ggKF9pZCkgewot
ICAgICAgICBjYXNlIDA6IGV4ZWN1dGUoX2EpOyBicmVhazsKKyAgICBpZCA9IFFPYmplY3Q6OnF0
X21ldGFjYWxsKGMsIGlkLCBhKTsKKyAgICBpZiAoaWQgPCAwKQorICAgICAgICByZXR1cm4gaWQ7
CisgICAgaWYgKGMgPT0gUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QpIHsKKyAgICAgICAg
c3dpdGNoIChpZCkgeworICAgICAgICBjYXNlIDA6IGV4ZWN1dGUoYSk7IGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIF9pZCAtPSAxOworICAgICAgICBpZCAtPSAxOwogICAgIH0KLSAgICByZXR1
cm4gX2lkOworICAgIHJldHVybiBpZDsKIH0KIAotdm9pZCBRdENvbm5lY3Rpb25PYmplY3Q6OmV4
ZWN1dGUodm9pZCAqKmFyZ3YpCit2b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0ZSh2b2lk
KiogYXJndikKIHsKICAgICBRT2JqZWN0KiBvYmogPSBtX2luc3RhbmNlLT5nZXRPYmplY3QoKTsK
ICAgICBpZiAob2JqKSB7CkBAIC0xNzc3LDE2ICsxNzc4LDE2IEBAIHZvaWQgUXRDb25uZWN0aW9u
T2JqZWN0OjpleGVjdXRlKHZvaWQgKioKICAgICAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxvYmotPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgYXJndW1lbnQgbGlzdCAodXAgdG8gdGhl
IGZvcm1hbCBhcmd1bWVudCBsZW5ndGggb2YgdGhlIHNsb3QpCi0gICAgICAgICAgICAgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGw7CisgICAgICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGJ1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIERyb3BBbGxMb2Nr
cz8KICAgICAgICAgICAgICAgICAgICAgaW50IGZ1bmNBcmdDID0gbV9mdW5jT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9JbnQzMihleGVjKTsKICAgICAg
ICAgICAgICAgICAgICAgaW50IGFyZ1RvdGFsID0gcU1heChmdW5jQXJnQywgYXJnYyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgYXJnVG90YWw7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ1RvdGFsOyBpKyspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJnYykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmdUeXBlID0gUU1ldGFUeXBlOjp0eXBlKHBhcmFtZXRlclR5cGVzLmF0KGkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZChjb252ZXJ0UVZhcmlhbnRU
b1ZhbHVlKGV4ZWMsIHJvLCBRVmFyaWFudChhcmdUeXBlLCBhcmd2W2krMV0pKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjb252ZXJ0UVZhcmlhbnRUb1ZhbHVl
KGV4ZWMsIHJvLCBRVmFyaWFudChhcmdUeXBlLCBhcmd2W2krMV0pKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5k
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0x
ODA0LDEwICsxODA1LDEwIEBAIHZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZvaWQg
KioKICAgICAgICAgICAgICAgICAgICAgICAgIHNjLnB1c2god3JhcHBlcik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW1wLT5zZXRTY29wZShzYyk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGwoZXhlYywgZmltcCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX3RoaXNPYmplY3QsIGwp
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbChleGVjLCBmaW1wLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fdGhpc09iamVjdCwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bXAtPnNldFNjb3BlKG9sZHNjKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGwoZXhlYywgbV9mdW5jT2JqZWN0LCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fdGhpc09iamVjdCwgbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsKGV4
ZWMsIG1fZnVuY09iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX3RoaXNPYmplY3QsIGJ1ZmZl
cik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC0xODE4LDcgKzE4MTksNyBAQCB2b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0
ZSh2b2lkICoqCiAgICAgfQogfQogCi1ib29sIFF0Q29ubmVjdGlvbk9iamVjdDo6bWF0Y2goUU9i
amVjdCogc2VuZGVyLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU09i
amVjdCAqZnVuY09iamVjdCkKK2Jvb2wgUXRDb25uZWN0aW9uT2JqZWN0OjptYXRjaChRT2JqZWN0
KiBzZW5kZXIsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTT2JqZWN0
KiBmdW5jT2JqZWN0KQogewogICAgIGlmIChtX29yaWdpbmFsT2JqZWN0ID09IHNlbmRlciAmJiBt
X3NpZ25hbEluZGV4ID09IHNpZ25hbEluZGV4CiAgICAgICAgICYmIHRoaXNPYmplY3QgPT0gKEpT
T2JqZWN0KiltX3RoaXNPYmplY3QgJiYgZnVuY09iamVjdCA9PSAoSlNPYmplY3QqKW1fZnVuY09i
amVjdCkKQEAgLTE4MzYsNyArMTgzNyw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5
PFQ+OjpRdEFycmEKICAgICBtX2xlbmd0aCA9IG1fbGlzdC5jb3VudCgpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6flF0QXJyYXkgKCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBRdEFycmF5PFQ+Ojp+UXRBcnJheSgpCiB7CiB9CiAKQEAgLTE4NTMsMTMgKzE4NTQsMTIg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgUXRBcnJheTxUPjo6cwogICAgIGludCBkaXN0
ID0gLTE7CiAgICAgUVZhcmlhbnQgdmFsID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBh
VmFsdWUsIG1fdHlwZSwgJmRpc3QpOwogCi0gICAgaWYgKGRpc3QgPj0gMCkgeworICAgIGlmIChk
aXN0ID49IDApCiAgICAgICAgIG1fbGlzdFtpbmRleF0gPSB2YWwudmFsdWU8VD4oKTsKLSAgICB9
CiB9CiAKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEpTVmFsdWUgUXRBcnJheTxUPjo6dmFsdWVB
dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBKU1ZhbHVlIFF0QXJyYXk8VD46OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4IDwgbV9sZW5ndGgpIHsK
ICAgICAgICAgVCB2YWwgPSBtX2xpc3QuYXQoaW5kZXgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>