<?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>94695</bug_id>
          
          <creation_ts>2012-08-22 05:38:00 -0700</creation_ts>
          <short_desc>[Qt] Port convertValueToQVariant to use the JSC C API</short_desc>
          <delta_ts>2012-08-31 02:03:01 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60842</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>cmarcelo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>701800</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-22 05:38:00 -0700</bug_when>
    <thetext>[Qt] Port convertValueToQVariant to use the JSC C API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701805</commentid>
    <comment_count>1</comment_count>
      <attachid>159912</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-22 05:42:44 -0700</bug_when>
    <thetext>Created attachment 159912
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702116</commentid>
    <comment_count>2</comment_count>
      <attachid>159912</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-22 11:37:34 -0700</bug_when>
    <thetext>Comment on attachment 159912
Patch

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

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:224
&gt; +        int objdist = 0;

Since you are touching this code, could you improve this name?

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:244
&gt; +        JSStringRef lengthStr = JSStringCreateWithUTF8CString(&quot;length&quot;);

&quot;static JSStringRef&quot;. And get rid of the release below.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:452
&gt; +                JSStringRef str = JSValueToStringCopy(context, value, exception);
&gt; +                QChar ch;
&gt; +                if (str &amp;&amp; JSStringGetLength(str) &gt; 0)
&gt; +                    ch = *reinterpret_cast&lt;const QChar*&gt;(JSStringGetCharactersPtr(str));
&gt; +                ret = QVariant(ch);
&gt; +                if (str)
&gt; +                    JSStringRelease(str);

Use JSRetainPtr and get rid of the &quot;if (str) JSStringRelease(str);&quot;.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:466
&gt; +            JSStringRef str = JSValueToStringCopy(context, value, exception);

JSRetainPtr here too, since we are creating a block in the case should be OK.

&gt; Source/WebKit/qt/Api/qwebelement.cpp:763
&gt; +    return JSC::Bindings::convertValueToQVariant(toRef(state), toRef(state, evaluationResult), QMetaType::Void, &amp;distance, /*exception*/0);

Use &quot;JSValueRef* ignoredException = 0;&quot; then pass it on the function. We use else-where to avoid the inline comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702759</commentid>
    <comment_count>3</comment_count>
      <attachid>159912</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-23 00:23:57 -0700</bug_when>
    <thetext>Comment on attachment 159912
Patch

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

&gt;&gt; Source/WebKit/qt/Api/qwebelement.cpp:763
&gt;&gt; +    return JSC::Bindings::convertValueToQVariant(toRef(state), toRef(state, evaluationResult), QMetaType::Void, &amp;distance, /*exception*/0);
&gt; 
&gt; Use &quot;JSValueRef* ignoredException = 0;&quot; then pass it on the function. We use else-where to avoid the inline comment.

What&apos;s the advantage of an extra variable on the stack and passing a non-null pointer over the inline comment &quot;ignored exception&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702938</commentid>
    <comment_count>4</comment_count>
      <attachid>159912</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-23 06:39:59 -0700</bug_when>
    <thetext>Comment on attachment 159912
Patch

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

&gt;&gt;&gt; Source/WebKit/qt/Api/qwebelement.cpp:763
&gt;&gt;&gt; +    return JSC::Bindings::convertValueToQVariant(toRef(state), toRef(state, evaluationResult), QMetaType::Void, &amp;distance, /*exception*/0);
&gt;&gt; 
&gt;&gt; Use &quot;JSValueRef* ignoredException = 0;&quot; then pass it on the function. We use else-where to avoid the inline comment.
&gt; 
&gt; What&apos;s the advantage of an extra variable on the stack and passing a non-null pointer over the inline comment &quot;ignored exception&quot; ?

It is a null pointer. Effectively it will be the same than passing 0.

It&apos;s a tradeoff between one more pointer in the stack and a variable name versus having the inline comment. I tend to choose the first option in those cases, but YMMV.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707277</commentid>
    <comment_count>5</comment_count>
      <attachid>159912</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-29 03:49:21 -0700</bug_when>
    <thetext>Comment on attachment 159912
Patch

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

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:224
&gt;&gt; +        int objdist = 0;
&gt; 
&gt; Since you are touching this code, could you improve this name?

Going for propertyConversionDistance :)

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:244
&gt;&gt; +        JSStringRef lengthStr = JSStringCreateWithUTF8CString(&quot;length&quot;);
&gt; 
&gt; &quot;static JSStringRef&quot;. And get rid of the release below.

Done.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:452
&gt;&gt; +                    JSStringRelease(str);
&gt; 
&gt; Use JSRetainPtr and get rid of the &quot;if (str) JSStringRelease(str);&quot;.

Done.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:466
&gt;&gt; +            JSStringRef str = JSValueToStringCopy(context, value, exception);
&gt; 
&gt; JSRetainPtr here too, since we are creating a block in the case should be OK.

Done.

&gt;&gt;&gt;&gt; Source/WebKit/qt/Api/qwebelement.cpp:763
&gt;&gt;&gt;&gt; +    return JSC::Bindings::convertValueToQVariant(toRef(state), toRef(state, evaluationResult), QMetaType::Void, &amp;distance, /*exception*/0);
&gt;&gt;&gt; 
&gt;&gt;&gt; Use &quot;JSValueRef* ignoredException = 0;&quot; then pass it on the function. We use else-where to avoid the inline comment.
&gt;&gt; 
&gt;&gt; What&apos;s the advantage of an extra variable on the stack and passing a non-null pointer over the inline comment &quot;ignored exception&quot; ?
&gt; 
&gt; It is a null pointer. Effectively it will be the same than passing 0.
&gt; 
&gt; It&apos;s a tradeoff between one more pointer in the stack and a variable name versus having the inline comment. I tend to choose the first option in those cases, but YMMV.

Ah right, it&apos;s actually a null pointer. Okay, I don&apos;t care too much about it and am fine with using your pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707282</commentid>
    <comment_count>6</comment_count>
      <attachid>161175</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-29 04:01:30 -0700</bug_when>
    <thetext>Created attachment 161175
Patch

Updated patch to address comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708544</commentid>
    <comment_count>7</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-30 06:02:21 -0700</bug_when>
    <thetext>LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708546</commentid>
    <comment_count>8</comment_count>
      <attachid>161175</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-30 06:06:39 -0700</bug_when>
    <thetext>Comment on attachment 161175
Patch

r=me given caio&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709404</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-31 02:03:01 -0700</bug_when>
    <thetext>Committed r127238: &lt;http://trac.webkit.org/changeset/127238&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159912</attachid>
            <date>2012-08-22 05:42:44 -0700</date>
            <delta_ts>2012-08-29 04:01:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94695-20120822144410.patch</filename>
            <type>text/plain</type>
            <size>46112</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0YmUxODFhMzBkNjY5
ZTk0MWQyZDRkM2NmMWZiNThmZDA5ZTNlOC4uOTI5NmU1NTUyZDg2OGNkZTAxMTZhZWRiYWI5Njg3
Y2NmOTk1YmYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTA4LTIyICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRdIFBv
cnQgY29udmVydFZhbHVlVG9RVmFyaWFudCB0byB1c2UgdGhlIEpTQyBDIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ2OTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIHRoZSBjb2RlIGlz
IHBvcnRhYmxlIHRvIHRoZSBDIEFQSSwgd2l0aCBhIGZldyBleGNlcHRpb25zIGZvciBpbnRlcm5h
bAorICAgICAgICB0eXBlcyBzdWNoIGFzIGJ5dGUgYXJyYXlzLCBkYXRlcyBvciB3aGVuIHVuYm94
aW5nIHByaW1pdGl2ZSB0eXBlcy4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5j
cHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Up
OgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Om9wZXJhdG9yPDwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6aXNKU1VpbnQ4Q2xh
bXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmlzSlNBcnJheSk6CisgICAgICAg
IChCaW5kaW5ncyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjppc0pTRGF0ZSk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjppc1F0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnZh
bHVlUmVhbFR5cGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6dG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6dW53cmFwQm94ZWRQcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudE1hcCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VG9MaXN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnRvUVN0cmluZyk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpnZXRHcmVnb3JpYW5EYXRlVGltZVVUQyk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjp0b1FEYXRlVGltZVVUQyk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmZp
bmRNZXRob2RJbmRleCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmpl
Y3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmg6CisgICAgICAg
IChCaW5kaW5ncyk6CisKKzIwMTItMDgtMjIgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21h
bm5Abm9raWEuY29tPgorCiAgICAgICAgIFtRdF0gUG9ydCBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVl
IHRvIHVzZSB0aGUgSlNDIEMgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Mzg4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGU1YzFhZTg0MGU3ZTI4NWM0
NzkyNjU5ZDBhYzJkY2E5OWRlZDNlYzQuLjNiOTM4NGQxNWU4Yjg3NGViYzM3ZDE5YWNmMmI5NDI5
ZGMxZGFkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMgQEAKIDIwMTItMDgtMjIgIFNp
bW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCisgICAgICAgIFtRdF0g
UG9ydCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50IHRvIHVzZSB0aGUgSlNDIEMgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDY5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pbm9yIGFkYXB0YXRpb25z
IGFyZSBuZWVkZWQgaGVyZSB0byBhY2NvbW9kYXRlIHRoZSBjaGFuZ2VkIHNpZ25hdHVyZSBvZgor
ICAgICAgICBjb252ZXJ0VmFsdWVUb1FWYXJpYW50LgorCisgICAgICAgICogQXBpL3F3ZWJlbGVt
ZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50OjpldmFsdWF0ZUphdmFTY3JpcHQpOgorICAg
ICAgICAoY29udmVydEpTVmFsdWVUb1dlYkVsZW1lbnRWYXJpYW50KToKKyAgICAgICAgKiBBcGkv
cXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZTo6ZXZhbHVhdGVKYXZhU2NyaXB0KToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6Cisg
ICAgICAgIChjb252ZXJ0SlNWYWx1ZVRvTm9kZVZhcmlhbnQpOgorCisyMDEyLTA4LTIyICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKwogICAgICAgICBbUXRdIFJF
R1JFU1NJT04ocjEyNTQyOCk6IGZhc3QvcHJvZmlsZXIvbmVzdGVkLXN0YXJ0LWFuZC1zdG9wLXBy
b2ZpbGVyLmh0bWwgZmFpbHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkzODk3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9pbnN0YW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
CmluZGV4IDA0MTI1MzJhODVjZDYyMDNlZTRhNzkzNGZhNWYwNzhhNjExNmQ2NTcuLmVjMDA3NWY3
ODRkMTM3NWMyZDhjYWJiMWQ0NGI4YjdhMWU2MjFiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X2luc3RhbmNlLmNwcApAQCAtMzAzLDkgKzMwMyw2IEBAIEpTVmFsdWUgUXRJbnN0YW5j
ZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVl
KGV4ZWMpOwogfQogCi0vLyBJbiBxdF9ydW50aW1lLmNwcAotUVZhcmlhbnQgY29udmVydFZhbHVl
VG9RVmFyaWFudChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGludCwgaW50
ICpkaXN0YW5jZSk7Ci0KIFFCeXRlQXJyYXkgUXRGaWVsZDo6bmFtZSgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fdHlwZSA9PSBNZXRhUHJvcGVydHkpCkBAIC0zNjAsNyArMzU3LDEyIEBAIHZvaWQgUXRG
aWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2Uq
IGluc3QsIEpTVmFsdWUKICAgICAgICAgICAgIGFyZ3R5cGUgPSAoUU1ldGFUeXBlOjpUeXBlKSBt
X3Byb3BlcnR5LnVzZXJUeXBlKCk7CiAKICAgICAgICAgLy8gZHluYW1pYyBwcm9wZXJ0aWVzIGp1
c3QgZ2V0IGFueSBRVmFyaWFudAotICAgICAgICBRVmFyaWFudCB2YWwgPSBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgYXJndHlwZSwgMCk7CisgICAgICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKKyAgICAgICAgUVZhcmlhbnQgdmFsID0gY29udmVydFZhbHVlVG9RVmFy
aWFudCh0b1JlZihleGVjKSwgdG9SZWYoZXhlYywgYVZhbHVlKSwgYXJndHlwZSwgMCwgJmV4Y2Vw
dGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogICAgICAgICBpZiAobV90eXBlID09IE1ldGFQcm9wZXJ0eSkgewogICAgICAgICAgICAg
aWYgKG1fcHJvcGVydHkuaXNXcml0YWJsZSgpKQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHku
d3JpdGUob2JqLCB2YWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCmlu
ZGV4IDZhNDFlMmNjYWQ4NDNlNmRkZDRmZDExOTBjYzNkOWJmOWEyZThmYTcuLjk5ZDZmOTExOGJh
MTI3ZjdjY2RhZGI4Yzk0MmQ5N2Y4NzRjYTA4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAKQEAgLTEwMyw3ICsxMDMsNiBAQCB0eXBlZGVmIGVudW0gewogICAgIFFP
YmosCiAgICAgT2JqZWN0LAogICAgIE51bGwsCi0gICAgUlRBcnJheSwKICAgICBKU1VpbnQ4Q2xh
bXBlZEFycmF5CiB9IEpTUmVhbFR5cGU7CiAKQEAgLTExMSw3ICsxMTAsNyBAQCB0eXBlZGVmIGVu
dW0gewogUURlYnVnIG9wZXJhdG9yPDwoUURlYnVnIGRiZywgY29uc3QgSlNSZWFsVHlwZSAmYykK
IHsKICAgICAgY29uc3QgY2hhciAqbWFwW10gPSB7ICJWYXJpYW50IiwgIk51bWJlciIsICJCb29s
ZWFuIiwgIlN0cmluZyIsICJEYXRlIiwKLSAgICAgICAgICJBcnJheSIsICJSVE9iamVjdCIsICJP
YmplY3QiLCAiTnVsbCIsICJSVEFycmF5In07CisgICAgICAgICAiQXJyYXkiLCAiUlRPYmplY3Qi
LCAiT2JqZWN0IiwgIk51bGwifTsKIAogICAgICBkYmcubm9zcGFjZSgpIDw8ICJKU1R5cGUoIiA8
PCAoKGludCljKSA8PCAiLCAiIDw8ICBtYXBbY10gPDwgIikiOwogCkBAIC0xNDYsOTggKzE0NSwx
OTcgQEAgdm9pZCByZWdpc3RlckN1c3RvbVR5cGUoaW50IHF0TWV0YVR5cGVJZCwgQ29udmVydFRv
VmFyaWFudEZ1bmN0aW9uIHRvVmFyaWFudEZ1bmMKICAgICBjdXN0b21SdW50aW1lQ29udmVyc2lv
bnMoKS0+aW5zZXJ0KHF0TWV0YVR5cGVJZCwgY29udmVyc2lvbik7CiB9CiAKLXN0YXRpYyBib29s
IGlzSlNVaW50OENsYW1wZWRBcnJheShKU1ZhbHVlIHZhbCkKK3N0YXRpYyBib29sIGlzSlNVaW50
OENsYW1wZWRBcnJheShKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIHZhbC5pc0Nl
bGwoKSAmJiB2YWwuaW5oZXJpdHMoJkpTVWludDhDbGFtcGVkQXJyYXk6OnNfaW5mbyk7CisgICAg
cmV0dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkpTVWludDhDbGFtcGVkQXJyYXk6OnNfaW5m
byk7CiB9CiAKLXN0YXRpYyBKU1JlYWxUeXBlIHZhbHVlUmVhbFR5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbCkKK3N0YXRpYyBib29sIGlzSlNBcnJheShKU09iamVjdFJlZiBvYmplY3Qp
CiB7Ci0gICAgaWYgKHZhbC5pc051bWJlcigpKQorICAgIHJldHVybiB0b0pTKG9iamVjdCktPmlu
aGVyaXRzKCZKU0FycmF5OjpzX2luZm8pOworfQorCitzdGF0aWMgYm9vbCBpc0pTRGF0ZShKU09i
amVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkRh
dGVJbnN0YW5jZTo6c19pbmZvKTsKK30KKworc3RhdGljIGJvb2wgaXNRdE9iamVjdChKU09iamVj
dFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJlJ1bnRp
bWVPYmplY3Q6OnNfaW5mbyk7Cit9CisKK3N0YXRpYyBKU1JlYWxUeXBlIHZhbHVlUmVhbFR5cGUo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIE51bWJlcjsKLSAgICBlbHNlIGlmICh2YWwuaXNTdHJpbmcoKSkKKyAgICBpZiAo
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZzsK
LSAgICBlbHNlIGlmICh2YWwuaXNCb29sZWFuKCkpCisgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4o
Y29udGV4dCwgdmFsdWUpKQogICAgICAgICByZXR1cm4gQm9vbGVhbjsKLSAgICBlbHNlIGlmICh2
YWwuaXNOdWxsKCkpCisgICAgaWYgKEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpKQogICAg
ICAgICByZXR1cm4gTnVsbDsKLSAgICBlbHNlIGlmIChpc0pTVWludDhDbGFtcGVkQXJyYXkodmFs
KSkKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBTdHJpbmc7IC8vIEkgZG9uJ3Qga25vdy4KKworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKworICAgIGlmIChp
c0pTVWludDhDbGFtcGVkQXJyYXkob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEpTVWludDhDbGFt
cGVkQXJyYXk7Ci0gICAgZWxzZSBpZiAodmFsLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmpl
Y3QgKm9iamVjdCA9IHZhbC50b09iamVjdChleGVjKTsKLSAgICAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoJlJ1bnRpbWVBcnJheTo6c19pbmZvKSkgIC8vIFJ1bnRpbWVBcnJheSAnaW5oZXJpdHMn
IGZyb20gQXJyYXksIGJ1dCBub3QgaW4gQysrCi0gICAgICAgICAgICByZXR1cm4gUlRBcnJheTsK
LSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkKKyAg
ICBpZiAoaXNKU0FycmF5KG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAg
ICBpZiAoaXNKU0RhdGUob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiBEYXRlOwotICAgICAg
ICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKQorICAg
IGlmIChpc1F0T2JqZWN0KG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gUU9iajsKLSAgICAg
ICAgcmV0dXJuIE9iamVjdDsKLSAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOyAvLyBJIGRvbid0
IGtub3cuCisgICAgcmV0dXJuIE9iamVjdDsKIH0KIAotUVZhcmlhbnQgY29udmVydFZhbHVlVG9R
VmFyaWFudChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBRTWV0YVR5cGU6OlR5cGUsIGludCosIEhhc2hT
ZXQ8SlNPYmplY3QqPiosIGludCk7CitzdGF0aWMgUVN0cmluZyB0b1N0cmluZyhKU1N0cmluZ1Jl
ZiBzdHJpbmdSZWYpCit7CisgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmdSZWYpKSwgSlNTdHJpbmdH
ZXRMZW5ndGgoc3RyaW5nUmVmKSk7Cit9CiAKLXN0YXRpYyBRVmFyaWFudE1hcCBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50TWFwKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgSGFzaFNl
dDxKU09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cywgaW50IHJlY3Vyc2lvbkxpbWl0KQorc3RhdGlj
IEpTVmFsdWVSZWYgdW53cmFwQm94ZWRQcmltaXRpdmUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIG9iaikKIHsKLSAgICBRX0FTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTKG9iaik7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0
cygmTnVtYmVyT2JqZWN0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdG9SZWYoZXhlYywganNO
dW1iZXIob2JqZWN0LT50b051bWJlcihleGVjKSkpOworICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBvYmpl
Y3QtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9i
amVjdDo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIG9iamVjdC0+dG9Qcmlt
aXRpdmUoZXhlYykpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUVZhcmlhbnQgY29udmVydFZh
bHVlVG9RVmFyaWFudChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIFFNZXRhVHlwZTo6VHlwZSwg
aW50KiwgSGFzaFNldDxKU09iamVjdFJlZj4qLCBpbnQsIEpTVmFsdWVSZWYgKmV4Y2VwdGlvbik7
CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwotICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwotICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKTsKK3N0YXRpYyBRVmFyaWFudE1hcCBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBvYmplY3QsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cywgaW50IHJlY3Vy
c2lvbkxpbWl0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CiAgICAgUVZhcmlhbnRNYXAgcmVz
dWx0OwotICAgIGludCBvYmpkaXN0ID0gMDsKKyAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHBy
b3BlcnRpZXMgPSBKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKGNvbnRleHQsIG9iamVjdCk7Cisg
ICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocHJv
cGVydGllcyk7CiAKLSAgICB3aGlsZSAoaXQgIT0gcHJvcGVydGllcy5lbmQoKSkgewotICAgICAg
ICBpZiAob2JqZWN0LT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCAqaXQpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHZhbCA9IG9iamVjdC0+Z2V0KGV4ZWMsICppdCk7Ci0gICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFFWYXJpYW50IHYg
PSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2Jq
ZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICBp
ZiAob2JqZGlzdCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
ICgqaXQpLnVzdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBpZCA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChpZCwgdik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1Byb3Bl
cnR5TmFtZUFycmF5R2V0TmFtZUF0SW5kZXgocHJvcGVydGllcywgaSk7CisKKyAgICAgICAgaW50
IG9iamRpc3QgPSAwOworICAgICAgICBKU1ZhbHVlUmVmIHByb3BlcnR5ID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUsIGV4Y2VwdGlvbik7CisgICAgICAgIFFWYXJp
YW50IHYgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGNvbnRleHQsIHByb3BlcnR5LCBRTWV0YVR5
cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQsIGV4Y2Vw
dGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSAwOworICAgICAgICBlbHNlIGlmIChvYmpkaXN0ID49IDApIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5pbnNlcnQodG9TdHJpbmcobmFtZSksIHYpOwogICAgICAgICB9Ci0gICAg
ICAgICsraXQ7CiAgICAgfQorICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKHByb3BlcnRp
ZXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZh
cmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGlu
dCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cywgaW50
IHJlY3Vyc2lvbkxpbWl0KQordGVtcGxhdGUgPHR5cGVuYW1lIEl0ZW1UeXBlPgorUUxpc3Q8SXRl
bVR5cGU+IGNvbnZlcnRUb0xpc3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTUmVhbFR5cGUgdHlw
ZSwgSlNPYmplY3RSZWYgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZiB2YWx1ZSwgaW50KiBkaXN0YW5jZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU1ldGFUeXBlOjpUeXBlIHR5cGVJZCA9
IHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4ocU1ldGFUeXBlSWQ8SXRlbVR5cGU+KCkpKQor
eworICAgIFFMaXN0PEl0ZW1UeXBlPiBsaXN0OworICAgIGlmICh0eXBlID09IEFycmF5KSB7Cisg
ICAgICAgIEpTU3RyaW5nUmVmIGxlbmd0aFN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsZW5ndGgiKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWwgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbGVuZ3RoU3RyLCBleGNlcHRpb24pOworICAgICAg
ICBKU1N0cmluZ1JlbGVhc2UobGVuZ3RoU3RyKTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWwsIGV4Y2VwdGlvbik7CisgICAgICAgIGxp
c3QucmVzZXJ2ZShsZW5ndGgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgb2JqZWN0LCBpLCBleGNlcHRpb24pOworICAgICAgICAgICAg
aW50IGl0ZW1EaXN0YW5jZSA9IC0xOworICAgICAgICAgICAgUVZhcmlhbnQgdmFyaWFudCA9IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQoY29udGV4dCwgdmFsdWUsIHR5cGVJZCwgJml0ZW1EaXN0YW5j
ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmIChpdGVtRGlzdGFuY2UgPj0gMCkKKyAgICAg
ICAgICAgICAgICBsaXN0IDw8IHZhcmlhbnQudmFsdWU8SXRlbVR5cGU+KCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxp
c3QuY291bnQoKSAhPSBsZW5ndGgpCisgICAgICAgICAgICBsaXN0LmNsZWFyKCk7CisgICAgICAg
IGVsc2UgaWYgKGRpc3RhbmNlKQorICAgICAgICAgICAgKmRpc3RhbmNlID0gNTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpbnQgaXRlbURpc3RhbmNlID0gLTE7CisgICAgICAgIFFWYXJpYW50IHZh
cmlhbnQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGNvbnRleHQsIHZhbHVlLCB0eXBlSWQsICZp
dGVtRGlzdGFuY2UsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChpdGVtRGlzdGFuY2UgPj0gMCkg
eworICAgICAgICAgICAgbGlzdCA8PCB2YXJpYW50LnZhbHVlPEl0ZW1UeXBlPigpOworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlKQorICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDEwOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgUVN0cmluZyB0b1FT
dHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZyhBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCB2YWx1ZSwgMCkpOworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gUVN0
cmluZygpOworICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIq
PihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoc3RyaW5nLmdldCgpKSksIEpTU3RyaW5nR2V0TGVu
Z3RoKHN0cmluZy5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCBnZXRHcmVnb3JpYW5EYXRlVGlt
ZVVUQyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZh
bHVlLCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdkdCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwor
ICAgIGlmICh0eXBlID09IERhdGUpIHsKKyAgICAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9K
UyhvYmplY3QpOworICAgICAgICBEYXRlSW5zdGFuY2UqIGRhdGUgPSBhc0RhdGVJbnN0YW5jZShq
c09iamVjdCk7CisgICAgICAgIGdkdC0+Y29weUZyb20oKmRhdGUtPmdyZWdvcmlhbkRhdGVUaW1l
VVRDKGV4ZWMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb3VibGUgbXMgPSBKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIEdyZWdvcmlhbkRhdGVU
aW1lIGNvbnZlcnRlZEdkdDsKKyAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG1z
LCAvKnV0YyovIHRydWUsIGNvbnZlcnRlZEdkdCk7CisgICAgICAgIGdkdC0+Y29weUZyb20oY29u
dmVydGVkR2R0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBRRGF0ZVRpbWUgdG9RRGF0ZVRpbWVVVEMo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTUmVhbFR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZSwg
SlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgR3JlZ29y
aWFuRGF0ZVRpbWUgZ2R0OworICAgIGdldEdyZWdvcmlhbkRhdGVUaW1lVVRDKGNvbnRleHQsIHR5
cGUsIHZhbHVlLCBvYmplY3QsIGV4Y2VwdGlvbiwgJmdkdCk7CisgICAgUURhdGUgZGF0ZShnZHQu
eWVhcigpLCBnZHQubW9udGgoKSArIDEsIGdkdC5tb250aERheSgpKTsKKyAgICBRVGltZSB0aW1l
KGdkdC5ob3VyKCksIGdkdC5taW51dGUoKSwgZ2R0LnNlY29uZCgpKTsKKyAgICByZXR1cm4gUURh
dGVUaW1lKGRhdGUsIHRpbWUsIFF0OjpVVEMpOworfQorCitRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5
cGU6OlR5cGUgaGludCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVjdFJlZj4qIHZpc2l0
ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICAtLXJlY3Vyc2lvbkxpbWl0OwogCiAgICAgaWYgKCF2YWx1ZSB8fCAhcmVjdXJzaW9uTGlt
aXQpCiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCi0gICAgSlNPYmplY3QqIG9iamVjdCA9
IDA7Ci0gICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgb2JqZWN0ID0gdmFsdWUu
dG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gMDsKKyAgICBpZiAoSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkgeworICAgICAgICBvYmplY3QgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgdmFsdWUsIDApOwogICAgICAgICBpZiAodmlzaXRlZE9iamVjdHMt
PmNvbnRhaW5zKG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAogICAg
ICAgICB2aXNpdGVkT2JqZWN0cy0+YWRkKG9iamVjdCk7CisKKyAgICAgICAgdmFsdWUgPSB1bndy
YXBCb3hlZFByaW1pdGl2ZShjb250ZXh0LCB2YWx1ZSwgb2JqZWN0KTsKICAgICB9CiAKICAgICAv
LyBjaGVjayBtYWdpYyBwb2ludGVyIHZhbHVlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyB2YWx1ZQot
ICAgIGlmICh2YWx1ZSA9PSBqc05hTigpCi0gICAgICAgIHx8ICh2YWx1ZSA9PSBqc1VuZGVmaW5l
ZCgpCi0gICAgICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UVN0cmluZwotICAgICAgICAg
ICAgJiYgaGludCAhPSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkp
IHsKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKQorICAgICAgICAmJiBp
c25hbihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbikpKSB7CisgICAg
ICAgIGlmIChkaXN0YW5jZSkKKyAgICAgICAgICAgICpkaXN0YW5jZSA9IC0xOworICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQoKTsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1ZUlzVW5kZWZpbmVkKGNv
bnRleHQsIHZhbHVlKSAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UVN0cmluZyAmJiBoaW50ICE9IChR
TWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7CiAgICAgICAgIGlmIChk
aXN0YW5jZSkKICAgICAgICAgICAgICpkaXN0YW5jZSA9IC0xOwogICAgICAgICByZXR1cm4gUVZh
cmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBKU1Jl
YWxUeXBlIHR5cGUgPSB2YWx1ZVJlYWxUeXBlKGV4ZWMsIHZhbHVlKTsKKyAgICBKU1JlYWxUeXBl
IHR5cGUgPSB2YWx1ZVJlYWxUeXBlKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOwogICAgIGlm
IChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewogICAg
ICAgICAgICAgY2FzZSBOdW1iZXI6CkBAIC0yNTQsMTIgKzM1Miw3IEBAIFFWYXJpYW50IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5
cGU6OlR5cGUKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRRGF0ZVRpbWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAg
ICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjpzX2luZm8pKQotICAg
ICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpEb3VibGU7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKLSAg
ICAgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6Qm9vbDsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFWYXJpYW50TWFw
OworICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRT2JqOgogICAgICAgICAgICAgICAg
IGhpbnQgPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOwpAQCAtMjY4LDcgKzM2MSw2IEBAIFFWYXJp
YW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBRTWV0YVR5cGU6OlR5cGUKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRQnl0
ZUFycmF5OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheToK
LSAgICAgICAgICAgIGNhc2UgUlRBcnJheToKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFU
eXBlOjpRVmFyaWFudExpc3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI3Niw3ICszNjgsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAKICAgICBxQ29udkRlYnVn
KCkgPDwgImNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQ6IGpzdHlwZSBpcyAiIDw8IHR5cGUgPDwgIiwg
aGludCBpcyIgPDwgaGludDsKIAotICAgIGlmICh2YWx1ZSA9PSBqc051bGwoKQorICAgIGlmIChK
U1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKQogICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlw
ZTo6UU9iamVjdFN0YXIKICAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6OlZvaWRTdGFyCiAg
ICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpRU3RyaW5nCkBAIC0yOTAsMTAgKzM4Miw3IEBA
IFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUKICAgICBpbnQgZGlzdCA9IC0xOwogICAgIHN3aXRjaCAo
aGludCkgewogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6Qm9vbDoKLSAgICAgICAgICAgIGlmICh0
eXBlID09IE9iamVjdCAmJiBvYmplY3QtPmluaGVyaXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8p
KQotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KGFzQm9vbGVhbk9iamVjdCh2YWx1ZSkt
PmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4oKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmV0ID0gUVZhcmlhbnQodmFsdWUudG9Cb29sZWFuKCkpOworICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOwogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQm9vbGVhbikKICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTMxMCw3ICszOTksNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBl
CiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVU2hvcnQ6CiAgICAgICAgIGNhc2UgUU1ldGFUeXBl
OjpGbG9hdDoKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToKLSAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCkpOwogICAgICAgICAgICAg
cmV0LmNvbnZlcnQoKFFWYXJpYW50OjpUeXBlKWhpbnQpOwogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gTnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7CkBAIC0zNDgsMTQg
KzQzNywxOSBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAKICAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OlFDaGFyOgogICAgICAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyIHx8IHR5cGUgPT0gQm9v
bGVhbikgewotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpdmFs
dWUudG9OdW1iZXIoZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hh
cigodXNob3J0KUpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCkpKTsKICAgICAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBCb29sZWFuKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0g
MzsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2Owog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFy
aWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLmltcGwoKS0+Y2hh
cmFjdGVycygpIDogMCkpOworICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICAg
ICAgUUNoYXIgY2g7CisgICAgICAgICAgICAgICAgaWYgKHN0ciAmJiBKU1N0cmluZ0dldExlbmd0
aChzdHIpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHIpKTsKKyAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChjaCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cikKKyAgICAg
ICAgICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHN0cik7CiAgICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKICAgICAgICAg
ICAgICAgICBlbHNlCkBAIC0zNjQsMTMgKzQ1OCwxNiBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBl
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVN0cmluZzog
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNVbmRlZmlu
ZWQoY29udGV4dCwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQogICAg
ICAgICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwogICAgICAgICAgICAgICAgIHJldHVybiBR
U3RyaW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcg
dXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCkt
PmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgSlNTdHJpbmdSZWYgc3RyID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1
ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmIChzdHIpIHsKKyAgICAgICAgICAgICAgICBR
U3RyaW5nIHN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oSlNTdHJpbmdHZXRD
aGFyYWN0ZXJzUHRyKHN0cikpLCBKU1N0cmluZ0dldExlbmd0aChzdHIpKTsKKyAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChzdHJpbmcpOworICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVs
ZWFzZShzdHIpOwogICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzgwLDExNyAr
NDc3LDI5IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpRVmFyaWFudE1hcDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVj
dCB8fCB0eXBlID09IEFycmF5IHx8IHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAg
IHJldCA9IFFWYXJpYW50KGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnRNYXAoZXhlYywgb2JqZWN0LCB2
aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpKTsKKyAgICAgICAgICAgIGlmICh0eXBlID09
IE9iamVjdCB8fCB0eXBlID09IEFycmF5KSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlh
bnQoY29udmVydFZhbHVlVG9RVmFyaWFudE1hcChjb250ZXh0LCBvYmplY3QsIHZpc2l0ZWRPYmpl
Y3RzLCByZWN1cnNpb25MaW1pdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICAgICAgLy8gVGhv
c2UgdHlwZXMgY2FuIHN0aWxsIGhhdmUgcGVyZmVjdCBtYXRjaGVzLCBlLmcuICdib29sJyBpZiB2
YWx1ZSBpcyBhIEJvb2xlYW4gT2JqZWN0LgogICAgICAgICAgICAgICAgIGRpc3QgPSAxOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6
OlFWYXJpYW50TGlzdDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKLSAgICAg
ICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJy
YXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKLSAg
ICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgaW50IG9iamRpc3QgPSAwOwotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
Y29udmVydGluZyBhICIgPDwgbGVuIDw8ICIgbGVuZ3RoIEFycmF5IjsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywg
cmVjdXJzaW9uTGltaXQpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgPT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFpbGVkIGNvbnZl
cnRpbmcgZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsgLy8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWlsIHRoZSBhcnJh
eQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1Owot
ICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJheSkgewotICAgICAgICAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0K
LSAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIGlu
dCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgaW50IG9iamRpc3QgPSAw
OwotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY29udmVydGluZyBhICIgPDwgbGVu
IDw8ICIgbGVuZ3RoIEFycmF5IjsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdl
dChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRl
ZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvYmpk
aXN0ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIkZh
aWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlzdCBlbnRyeSwgc28gZmFp
bCB0aGUgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgaW50IG9iamRpc3Q7
Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJtYWtpbmcgYSBzaW5nbGUgbGVuZ3Ro
IHZhcmlhbnRsaXN0IjsKLSAgICAgICAgICAgICAgICBRVmFyaWFudCB2YXIgPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNp
dGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0
ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA8PCB2YXI7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9
IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImZhaWxlZCBtYWtpbmcgc2luZ2xlIGxlbmd0aCB2YXJsaXN0IjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudChjb252ZXJ0VG9MaXN0
PFFWYXJpYW50Pihjb250ZXh0LCB0eXBlLCBvYmplY3QsIHZhbHVlLCAmZGlzdCwgZXhjZXB0aW9u
LCBRTWV0YVR5cGU6OlZvaWQpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
UU1ldGFUeXBlOjpRU3RyaW5nTGlzdDogewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJh
eSkgewotICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0
PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCBy
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZh
bHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZh
bC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFj
dGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0
ID0gNTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAg
IFFTdHJpbmdMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxl
bmd0aCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwot
ICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3Ry
aW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5s
ZW5ndGgoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAg
ICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVz
dHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAg
ICAgICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQoY29udmVydFRvTGlzdDxRU3RyaW5nPihjb250ZXh0LCB0eXBlLCBvYmplY3QsIHZh
bHVlLCAmZGlzdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRQnl0ZUFycmF5OiB7CiAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBKU1VpbnQ4Q2xhbXBlZEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgV1RGOjpVaW50
OENsYW1wZWRBcnJheSogYXJyID0gdG9VaW50OENsYW1wZWRBcnJheSh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgV1RGOjpVaW50OENsYW1wZWRBcnJheSogYXJyID0gdG9VaW50OENsYW1wZWRBcnJh
eSh0b0pTKHRvSlMoY29udGV4dCksIHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgcmV0ID0gUVZh
cmlhbnQoUUJ5dGVBcnJheShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhcnItPmRhdGEo
KSksIGFyci0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3Ry
aW5nLmxlbmd0aCgpKS50b0xhdGluMSgpKTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFu
dCh0b1FTdHJpbmcoY29udGV4dCwgdmFsdWUpLnRvTGF0aW4xKCkpOwogICAgICAgICAgICAgICAg
IGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7CiAgICAg
ICAgICAgICAgICAgZWxzZQpAQCAtNTAyLDM5ICs1MTEsMjEgQEAgUVZhcmlhbnQgY29udmVydFZh
bHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6
VHlwZQogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UURhdGVUaW1lOgogICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6UURhdGU6CiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRVGltZToKLSAgICAgICAg
ICAgIGlmICh0eXBlID09IERhdGUpIHsKLSAgICAgICAgICAgICAgICBEYXRlSW5zdGFuY2UqIGRh
dGUgPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihvYmplY3QpOwotICAgICAgICAgICAgICAg
IEdyZWdvcmlhbkRhdGVUaW1lIGdkdDsKLSAgICAgICAgICAgICAgICBtc1RvR3JlZ29yaWFuRGF0
ZVRpbWUoZXhlYywgZGF0ZS0+aW50ZXJuYWxOdW1iZXIoKSwgdHJ1ZSwgZ2R0KTsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IERhdGUgfHwgdHlwZSA9PSBOdW1iZXIpIHsKKyAgICAgICAgICAgICAg
ICBRRGF0ZVRpbWUgZHQgPSB0b1FEYXRlVGltZVVUQyhjb250ZXh0LCB0eXBlLCB2YWx1ZSwgb2Jq
ZWN0LCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNOdW1iZXIgPSAo
dHlwZSA9PSBOdW1iZXIpOwogICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6
UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0ZShn
ZHQueWVhcigpLCBnZHQubW9udGgoKSArIDEsIGdkdC5tb250aERheSgpKSwgUVRpbWUoZ2R0Lmhv
dXIoKSwgZ2R0Lm1pbnV0ZSgpLCBnZHQuc2Vjb25kKCkpLCBRdDo6VVRDKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IGR0OworICAgICAg
ICAgICAgICAgICAgICBkaXN0ID0gaXNOdW1iZXIgPyA2IDogMDsKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgewotICAgICAgICAgICAgICAgICAg
ICByZXQgPSBRRGF0ZShnZHQueWVhcigpLCBnZHQubW9udGgoKSArIDEsIGdkdC5tb250aERheSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJl
dCA9IGR0LmRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGlzTnVtYmVyID8gOCA6
IDE7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVRpbWUoZ2R0LmhvdXIoKSwgZ2R0Lm1pbnV0ZSgpLCBnZHQuc2Vjb25kKCkpOwotICAgICAgICAg
ICAgICAgICAgICBkaXN0ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gZHQudGltZSgp
OworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gaXNOdW1iZXIgPyAxMCA6IDI7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bWJlcikgewotICAg
ICAgICAgICAgICAgIGRvdWJsZSBiID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZShleGVjLCBiLCB0cnVlLCBnZHQpOwotICAgICAgICAgICAgICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFE
YXRlVGltZShRRGF0ZShnZHQueWVhcigpLCBnZHQubW9udGgoKSArIDEsIGdkdC5tb250aERheSgp
KSwgUVRpbWUoZ2R0LmhvdXIoKSwgZ2R0Lm1pbnV0ZSgpLCBnZHQuc2Vjb25kKCkpLCBRdDo6VVRD
KTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDY7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gUURhdGUoZ2R0LnllYXIoKSwgZ2R0Lm1vbnRoKCkgKyAxLCBnZHQubW9udGhEYXkoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGRpc3QgPSA4OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldCA9IFFUaW1lKGdkdC5ob3VyKCksIGdkdC5taW51dGUoKSwg
Z2R0LnNlY29uZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAg
ICAgICAgIH0KLSNpZm5kZWYgUVRfTk9fREFURVNUUklORwogICAgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09IFN0cmluZykgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5n
IHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3Rl
cnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7Ci0KKyAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJp
bmcgPSB0b1FTdHJpbmcoY29udGV4dCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CiAgICAgICAgICAgICAgICAgICAgIFFEYXRlVGlt
ZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQpAQCAtNTcyLDEzICs1NjMsMTIgQEAg
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFFNZXRhVHlwZTo6VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLy8gUVRf
Tk9fREFURVNUUklORwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOgogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
UU9iaikgewotICAgICAgICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6
OmdldEluc3RhbmNlKG9iamVjdCk7CisgICAgICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0
ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2UodG9KUyhvYmplY3QpKTsKICAgICAgICAgICAgICAg
ICBpZiAocXRpbnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChxdGluc3QtPmdldE9iamVj
dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImZvdW5kIGlu
c3RhbmNlLCB3aXRoIG9iamVjdDoiIDw8ICh2b2lkKikgcXRpbnN0LT5nZXRPYmplY3QoKTsKQEAg
LTYwMiw3ICs1OTIsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAKICAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlZvaWRTdGFyOgogICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgewotICAg
ICAgICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6OmdldEluc3RhbmNl
KG9iamVjdCk7CisgICAgICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5j
ZTo6Z2V0SW5zdGFuY2UodG9KUyhvYmplY3QpKTsKICAgICAgICAgICAgICAgICBpZiAocXRpbnN0
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChxdGluc3QtPmdldE9iamVjdCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImZvdW5kIGluc3RhbmNlLCB3aXRo
IG9iamVjdDoiIDw8ICh2b2lkKikgcXRpbnN0LT5nZXRPYmplY3QoKTsKQEAgLTYyMSw3ICs2MTEs
NyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gTnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgLy8gSSBkb24ndCB0aGluayB0aGF0IGNvbnZl
cnRpbmcgYSBkb3VibGUgdG8gYSBwb2ludGVyIGlzIGEgd2lzZQogICAgICAgICAgICAgICAgIC8v
IG1vdmUuICBFeGNlcHQgbWF5YmUgMC4KLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImdvdCBudW1iZXIgZm9yIHZvaWQgKiAtIG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8
PCB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImdvdCBudW1iZXIgZm9yIHZvaWQgKiAtIG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8
PCBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgInZvaWQqIC0gdW5oYW5kbGVkIHR5
cGUiIDw8IHR5cGU7CiAgICAgICAgICAgICB9CkBAIC02MjksMTMwICs2MTksMzQgQEAgUVZhcmlh
bnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUs
IFFNZXRhVHlwZTo6VHlwZQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBOb24g
Y29uc3QgdHlwZSBpZHMKLSAgICAgICAgICAgIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUp
IHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZUFy
cmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAg
ICAgICAgICAgICAgICAgICBRT2JqZWN0TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
IGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMs
IHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywg
cmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49
IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVl
PFFPYmplY3QqPigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZy
b21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxl
biA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBh
cnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0
ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZh
bHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZpdGVtZGlz
dCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVy
c2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
YSBzaW5nbGUgbGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZh
bHVlLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVj
dCo+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhpbnQgPT0g
KFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpIHsKKyAgICAgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKGNvbnZlcnRUb0xpc3Q8UU9iamVjdCo+
KGNvbnRleHQsIHR5cGUsIG9iamVjdCwgdmFsdWUsICZkaXN0LCBleGNlcHRpb24pKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFU
eXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkgewotICAgICAgICAgICAgICAg
IGlmICh0eXBlID09IFJUQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZUFycmF5
KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAg
ICAgICAgICAgICAgICBRTGlzdDxpbnQ+IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFs
LCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGlt
aXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LmNvdW50KCkgPT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19j
YXN0PEpTQXJyYXkgKj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBRTGlzdDxpbnQ+
IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2
YWwsIFFNZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25M
aW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQuY291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1Owot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAg
ICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpdGVt
ZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZh
bHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlz
aXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0
ZW1kaXN0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bS52YWx1ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UUxp
c3Q8aW50PiA+KCkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVl
KGNvbnZlcnRUb0xpc3Q8aW50Pihjb250ZXh0LCB0eXBlLCBvYmplY3QsIHZhbHVlLCAmZGlzdCwg
ZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5
cGU+KGhpbnQpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFuY2U6OnZh
cmlhbnRGcm9tT2JqZWN0KG9iamVjdCwgc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2Fu
SGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkpKSB7CisgICAgICAgICAg
ICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3QodG9KUyhvYmpl
Y3QpLCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPmNvbnRhaW5zKGhpbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0ID0gY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPnZhbHVlKGhp
bnQpLnRvVmFyaWFudEZ1bmMob2JqZWN0LCAmZGlzdCwgdmlzaXRlZE9iamVjdHMpOworICAgICAg
ICAgICAgICAgIHJldCA9IGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9ucygpLT52YWx1ZShoaW50KS50
b1ZhcmlhbnRGdW5jKHRvSlMob2JqZWN0KSwgJmRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKICAgICAg
ICAgICAgICAgICBpZiAoZGlzdCA9PSAwKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJ
ZDxRVmFyaWFudD4oKSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFs
dWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRpc3RhbmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNl
ID0gMTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNp
dGVkIHRoaXMgb2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdGVkT2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9k
ZXRlY3QgZmxhZwotICAgICAgICAgICAgICAgICAgICByZXQgPSBjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsIGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0
cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMg
b2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0CisgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRPYmpl
Y3RzLT5yZW1vdmUob2JqZWN0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxhZworICAgICAgICAg
ICAgICAgIHJldCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoY29udGV4dCwgdmFsdWUsIFFNZXRh
VHlwZTo6Vm9pZCwgZGlzdGFuY2UsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKQEAgLTc2OCwxMSArNjYyLDExIEBAIFFWYXJpYW50IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5
cGU6OlR5cGUKICAgICByZXR1cm4gcmV0OwogfQogCi1RVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlIGhp
bnQsIGludCAqZGlzdGFuY2UpCitRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGludCwg
aW50ICpkaXN0YW5jZSwgSlNWYWx1ZVJlZiAqZXhjZXB0aW9uKQogewogICAgIGNvbnN0IGludCBy
ZWN1cnNpb25MaW1pdCA9IDIwMDsKLSAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gdmlzaXRlZE9iamVj
dHM7Ci0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIGhpbnQs
IGRpc3RhbmNlLCAmdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKKyAgICBIYXNoU2V0
PEpTT2JqZWN0UmVmPiB2aXNpdGVkT2JqZWN0czsKKyAgICByZXR1cm4gY29udmVydFZhbHVlVG9R
VmFyaWFudChjb250ZXh0LCB2YWx1ZSwgaGludCwgZGlzdGFuY2UsICZ2aXNpdGVkT2JqZWN0cywg
cmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVSZWYgY29udmVydFFWYXJp
YW50VG9WYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiBy
b290LCBjb25zdCBRVmFyaWFudCYgdmFyaWFudCwgSlNWYWx1ZVJlZiAqZXhjZXB0aW9uKQpAQCAt
MTE4MSw3ICsxMDc1LDcgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoSlNDb250ZXh0UmVm
IGNvbnRleHQsCiAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZyA9IGkgPCBhcmd1bWVudENvdW50
ID8gYXJndW1lbnRzW2ldIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKICAgICAg
ICAgICAgIGludCBhcmdkaXN0YW5jZSA9IC0xOwotICAgICAgICAgICAgUVZhcmlhbnQgdiA9IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQodG9KUyhjb250ZXh0KSwgdG9KUyh0b0pTKGNvbnRleHQpLCBh
cmcpLCB0eXBlcy5hdChpKzEpLnR5cGVJZCgpLCAmYXJnZGlzdGFuY2UpOworICAgICAgICAgICAg
UVZhcmlhbnQgdiA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoY29udGV4dCwgYXJnLCB0eXBlcy5h
dChpKzEpLnR5cGVJZCgpLCAmYXJnZGlzdGFuY2UsIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICBp
ZiAoYXJnZGlzdGFuY2UgPj0gMCkgewogICAgICAgICAgICAgICAgIG1hdGNoRGlzdGFuY2UgKz0g
YXJnZGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgYXJnc1tpKzFdID0gdjsKQEAgLTE2NzEsMTIg
KzE1NjUsOSBAQCB2b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0ZSh2b2lkKiogYXJndikK
ICAgICBpbnQgYXJnYyA9IHFNYXgobWV0aG9kLnBhcmFtZXRlckNvdW50KCksIHJlY2VpdmVyTGVu
Z3RoKTsKICAgICBXVEY6OlZlY3RvcjxKU1ZhbHVlUmVmPiBhcmdzKGFyZ2MpOwogCi0gICAgLy8g
VE9ETzogcmVtb3ZlIG9uY2UgY29udmVyc2lvbiBmdW5jdGlvbnMgdXNlIEpTQyBBUEkuCi0gICAg
RXhlY1N0YXRlKiBleGVjID0gOjp0b0pTKG1fY29udGV4dCk7Ci0KICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBpbnQgYXJnVHlwZSA9IG1ldGhvZC5wYXJhbWV0
ZXJUeXBlKGkpOwotICAgICAgICBhcmdzW2ldID0gY29udmVydFFWYXJpYW50VG9WYWx1ZSh0b1Jl
ZihleGVjKSwgbV9yb290T2JqZWN0LCBRVmFyaWFudChhcmdUeXBlLCBhcmd2W2krMV0pLCBpZ25v
cmVkRXhjZXB0aW9uKTsKKyAgICAgICAgYXJnc1tpXSA9IGNvbnZlcnRRVmFyaWFudFRvVmFsdWUo
bV9jb250ZXh0LCBtX3Jvb3RPYmplY3QsIFFWYXJpYW50KGFyZ1R5cGUsIGFyZ3ZbaSsxXSksIGln
bm9yZWRFeGNlcHRpb24pOwogICAgIH0KIAogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24obV9j
b250ZXh0LCBtX3JlY2VpdmVyRnVuY3Rpb24sIG1fcmVjZWl2ZXIsIGFyZ2MsIGFyZ3MuZGF0YSgp
LCAwKTsKQEAgLTE2OTEsNDkgKzE1ODIsNCBAQCBib29sIFF0Q29ubmVjdGlvbk9iamVjdDo6bWF0
Y2goSlNDb250ZXh0UmVmIGNvbnRleHQsIFFPYmplY3QqIHNlbmRlciwgaW50IHNpZ25hbAogICAg
IHJldHVybiByZWNlaXZlck1hdGNoICYmIEpTVmFsdWVJc0VxdWFsKGNvbnRleHQsIHJlY2VpdmVy
RnVuY3Rpb24sIG1fcmVjZWl2ZXJGdW5jdGlvbiwgaWdub3JlZEV4Y2VwdGlvbik7CiB9CiAKLS8v
ID09PT09PT09PT09PT09PQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6UXRB
cnJheShRTGlzdDxUPiBsaXN0LCBRTWV0YVR5cGU6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxSb290
T2JqZWN0PiByb290T2JqZWN0KQotICAgIDogQXJyYXkocm9vdE9iamVjdCkKLSAgICAsIG1fbGlz
dChsaXN0KQotICAgICwgbV90eXBlKHR5cGUpCi17Ci0gICAgbV9sZW5ndGggPSBtX2xpc3QuY291
bnQoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFF0QXJyYXk8VD46On5RdEFycmF5ICgp
Ci17Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBSb290T2JqZWN0KiBRdEFycmF5PFQ+Ojpy
b290T2JqZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yb290T2JqZWN0ICYmIG1fcm9vdE9i
amVjdC0+aXNWYWxpZCgpID8gbV9yb290T2JqZWN0LmdldCgpIDogMDsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHZvaWQgUXRBcnJheTxUPjo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICAvLyBRdFNjcmlw
dCBzZXRzIHRoZSB2YWx1ZSwgYnV0IGRvZXNuJ3QgZm9yd2FyZCBpdCB0byB0aGUgb3JpZ2luYWwg
c291cmNlCi0gICAgLy8gKGUuZy4gaWYgeW91IGRvICdvYmplY3QuaW50TGlzdFs1XSA9IDYnLCB0
aGUgb2JqZWN0IGlzIG5vdCB1cGRhdGVkLCBidXQgdGhlCi0gICAgLy8gY29weSBvZiB0aGUgbGlz
dCBpcykuCi0gICAgaW50IGRpc3QgPSAtMTsKLSAgICBRVmFyaWFudCB2YWwgPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgbV90eXBlLCAmZGlzdCk7Ci0KLSAgICBpZiAoZGlz
dCA+PSAwKSB7Ci0gICAgICAgIG1fbGlzdFtpbmRleF0gPSB2YWwudmFsdWU8VD4oKTsKLSAgICB9
Ci19Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEpTVmFsdWUgUXRBcnJheTxUPjo6dmFsdWVB
dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAo
aW5kZXggPCBtX2xlbmd0aCkgewotICAgICAgICBUIHZhbCA9IG1fbGlzdC5hdChpbmRleCk7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKHRvUmVmKGV4ZWMpLCByb290T2Jq
ZWN0KCksIFFWYXJpYW50Ojpmcm9tVmFsdWUodmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PQotCiB9IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZS5oCmluZGV4IDZmNzU0M2RiN2ZkOTIzNjQ0OWE3YjA0MGUyMzg5
ZGEzYTAyM2YxOTYuLmYyNjY3ODc0OWYyMTA4OTBiZDllOGUxMmJmNDQzOTY0M2YzODA5YmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaApAQCAtNzYsMjUgKzc2LDYgQEAgcHJp
dmF0ZToKICAgICBRUG9pbnRlcjxRT2JqZWN0PiBtX2NoaWxkT2JqZWN0OwogfTsKIAotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUXRBcnJheSA6IHB1YmxpYyBBcnJheQotewotcHVibGlj
OgotICAgIFF0QXJyYXkoUUxpc3Q8VD4gbGlzdCwgUU1ldGFUeXBlOjpUeXBlIHR5cGUsIFBhc3NS
ZWZQdHI8Um9vdE9iamVjdD4pOwotICAgIHZpcnR1YWwgflF0QXJyYXkoKTsKLQotICAgIFJvb3RP
YmplY3QqIHJvb3RPYmplY3QoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Qge3JldHVybiBtX2xlbmd0aDt9
Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBRTGlzdDxUPiBtX2xpc3Q7IC8vIHNldFZhbHVlQXQg
aXMgY29uc3QhCi0gICAgdW5zaWduZWQgaW50IG1fbGVuZ3RoOwotICAgIFFNZXRhVHlwZTo6VHlw
ZSBtX3R5cGU7Ci19OwotCiBjbGFzcyBRdFJ1bnRpbWVNZXRob2QgewogcHVibGljOgogICAgIGVu
dW0gTWV0aG9kRmxhZ3MgewpAQCAtMTUxLDEyICsxMzIsMTIgQEAgcHJpdmF0ZToKIH07CiAKIAot
dHlwZWRlZiBRVmFyaWFudCAoKkNvbnZlcnRUb1ZhcmlhbnRGdW5jdGlvbikoSlNPYmplY3QqIG9i
amVjdCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cyk7
Cit0eXBlZGVmIFFWYXJpYW50ICgqQ29udmVydFRvVmFyaWFudEZ1bmN0aW9uKShKU09iamVjdCog
b2JqZWN0LCBpbnQgKmRpc3RhbmNlLCBIYXNoU2V0PEpTT2JqZWN0UmVmPiogdmlzaXRlZE9iamVj
dHMpOwogdHlwZWRlZiBKU1ZhbHVlICgqQ29udmVydFRvSlNWYWx1ZUZ1bmN0aW9uKShFeGVjU3Rh
dGUqIGV4ZWMsIFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFFWYXJpYW50JiB2YXJpYW50KTsKIAogdm9pZCByZWdpc3RlckN1c3RvbVR5cGUoaW50IHF0TWV0
YVR5cGVJZCwgQ29udmVydFRvVmFyaWFudEZ1bmN0aW9uLCBDb252ZXJ0VG9KU1ZhbHVlRnVuY3Rp
b24pOwogCi1RVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UpOworUVZh
cmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIFFN
ZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
OwogSlNWYWx1ZVJlZiBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEpTQ29udGV4dFJlZiwgUGFzc1Jl
ZlB0cjxSb290T2JqZWN0PiwgY29uc3QgUVZhcmlhbnQmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
OwogCiB2b2lkIHNldEV4Y2VwdGlvbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
biwgY29uc3QgUVN0cmluZyYgdGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAK
aW5kZXggYTIwOGNiYzRlYTViNDdmMTgxNzNlOTIyNGI5NzllYmMzOWI5MWY0NS4uNDVhZjA1NzYz
NDQ4NTg2YTJmMDFmNjgyYjJkZDk4NDk5OWQzNzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJl
bGVtZW50LmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgInF3ZWJlbGVtZW50LmgiCiAKKyNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAicXdl
YmVsZW1lbnRfcC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIkNTU1BhcnNlci5oIgpAQCAtNzU5LDcgKzc2MCw3IEBAIFFWYXJpYW50IFFXZWJF
bGVtZW50OjpldmFsdWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNlKQog
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAogICAgIGludCBkaXN0YW5jZSA9IDA7Ci0gICAg
cmV0dXJuIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoc3RhdGUsIGV2YWx1
YXRpb25SZXN1bHQsIFFNZXRhVHlwZTo6Vm9pZCwgJmRpc3RhbmNlKTsKKyAgICByZXR1cm4gSlND
OjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudCh0b1JlZihzdGF0ZSksIHRvUmVmKHN0
YXRlLCBldmFsdWF0aW9uUmVzdWx0KSwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UsIC8qZXhj
ZXB0aW9uKi8wKTsKIH0KIAogLyohCkBAIC0yMDQ2LDcgKzIwNDcsNyBAQCBFbGVtZW50KiBRdFdl
YkVsZW1lbnRSdW50aW1lOjpnZXQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0
dXJuIGVsZW1lbnQubV9lbGVtZW50OwogfQogCi1zdGF0aWMgUVZhcmlhbnQgY29udmVydEpTVmFs
dWVUb1dlYkVsZW1lbnRWYXJpYW50KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgaW50ICpkaXN0YW5j
ZSwgSGFzaFNldDxKU0M6OkpTT2JqZWN0Kj4qIHZpc2l0ZWRPYmplY3RzKQorc3RhdGljIFFWYXJp
YW50IGNvbnZlcnRKU1ZhbHVlVG9XZWJFbGVtZW50VmFyaWFudChKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cykK
IHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gMDsKICAgICBRVmFyaWFudCByZXQ7CkBAIC0yMDU1
LDcgKzIwNTYsNyBAQCBzdGF0aWMgUVZhcmlhbnQgY29udmVydEpTVmFsdWVUb1dlYkVsZW1lbnRW
YXJpYW50KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgaW50ICpkaQogICAgICAgICAqZGlzdGFuY2Ug
PSAwOwogICAgICAgICAvLyBBbGxvdyBvdGhlciBvYmplY3RzIHRvIHJlYWNoIHRoaXMgb25lLiBU
aGlzIHdvbid0IGNhdXNlIG91ciBhbGdvcml0aG0gdG8KICAgICAgICAgLy8gbG9vcCBzaW5jZSB3
aGVuIHdlIGZpbmQgYW4gRWxlbWVudCB3ZSBkbyBub3QgcmVjdXJzZS4KLSAgICAgICAgdmlzaXRl
ZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOworICAgICAgICB2aXNpdGVkT2JqZWN0cy0+cmVtb3Zl
KHRvUmVmKG9iamVjdCkpOwogICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIG9iamVjdC0+aW5oZXJp
dHMoJkpTRG9jdW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgLy8gVG8gc3VwcG9ydCBUZXN0UnVu
bmVyUXQ6Om5vZGVzRnJvbVJlY3QoKSwgdXNlZCBpbiBEUlQsIHdlIGRvIGFuIGltcGxpY2l0CiAg
ICAgICAgIC8vIGNvbnZlcnNpb24gZnJvbSAnZG9jdW1lbnQnIHRvIHRoZSBRV2ViRWxlbWVudCBy
ZXByZXNlbnRpbmcgdGhlICdkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQnLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKaW5kZXggMjJlNDdjNTVkYjBjNjFmNGY5MGY1MzBlODE3ZGU3ZjFmZGQ5
MDg1ZC4uOWI0MzM2MzNjZGZhZjVjNTgyYjYyMGIwZTk3YWUxN2FkODFkNWRhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0xNTM0LDggKzE1MzQsOCBAQCBRVmFyaWFudCBRV2Vi
RnJhbWU6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCiAg
ICAgaWYgKHByb3h5KSB7CiAgICAgICAgIGludCBkaXN0YW5jZSA9IDA7CiAgICAgICAgIEpTQzo6
SlNWYWx1ZSB2ID0gZC0+ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0U291cmNlKSkuanNWYWx1ZSgpOwotCi0gICAgICAgIHJjID0gSlNDOjpCaW5k
aW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudChwcm94eS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCB2LCBRTWV0YVR5cGU6OlZvaWQsICZkaXN0
YW5jZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgcmMgPSBK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KHRvUmVmKGV4ZWMpLCB0b1JlZihl
eGVjLCB2KSwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UsIC8qZXhjZXB0aW9uKi8wKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAppbmRleCA3MTRmNTYw
ZjBkNGFmNzAwNmQzZTA3ZGRjMzA0NjliNTQzYTZjODBmLi42YjE3OGM1NTE4NTBmYzYxODYxNmZi
YWQ0NTY0YzE0M2Q0ZTkzNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcApAQCAtMTY2LDcgKzE2
Niw3IEBAIFdlYkNvcmU6Ok5vZGUqIFF0RFJUTm9kZVJ1bnRpbWU6OmdldChjb25zdCBRRFJUTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gbm9kZS5tX25vZGU7CiB9CiAKLXN0YXRpYyBRVmFyaWFudCBj
b252ZXJ0SlNWYWx1ZVRvTm9kZVZhcmlhbnQoSlNDOjpKU09iamVjdCogb2JqZWN0LCBpbnQgKmRp
c3RhbmNlLCBIYXNoU2V0PEpTQzo6SlNPYmplY3QqPiopCitzdGF0aWMgUVZhcmlhbnQgY29udmVy
dEpTVmFsdWVUb05vZGVWYXJpYW50KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgaW50ICpkaXN0YW5j
ZSwgSGFzaFNldDxKU09iamVjdFJlZj4qKQogewogICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3Qt
PmluaGVyaXRzKCZKU05vZGU6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161175</attachid>
            <date>2012-08-29 04:01:30 -0700</date>
            <delta_ts>2012-08-30 06:06:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94695-20120829130302.patch</filename>
            <type>text/plain</type>
            <size>46083</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2OTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE0MGExMjUwNzI2ZDJm
ZmMwMDNkZDY2OGY1MTlmOTE5NjUzNGM4ZS4uMmFmMmI3MjY0ZGZiZTU5MGI1MDU4ZGEwMzdjZmE5
YzMwNTgwOTE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTI5ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFBv
cnQgY29udmVydFZhbHVlVG9RVmFyaWFudCB0byB1c2UgdGhlIEpTQyBDIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ2OTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIHRoZSBjb2RlIGlz
IHBvcnRhYmxlIHRvIHRoZSBDIEFQSSwgd2l0aCBhIGZldyBleGNlcHRpb25zIGZvciBpbnRlcm5h
bAorICAgICAgICB0eXBlcyBzdWNoIGFzIGJ5dGUgYXJyYXlzLCBkYXRlcyBvciB3aGVuIHVuYm94
aW5nIHByaW1pdGl2ZSB0eXBlcy4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5j
cHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Up
OgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Om9wZXJhdG9yPDwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6aXNKU1VpbnQ4Q2xh
bXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmlzSlNBcnJheSk6CisgICAgICAg
IChCaW5kaW5ncyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjppc0pTRGF0ZSk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjppc1F0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnZh
bHVlUmVhbFR5cGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6dG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6dW53cmFwQm94ZWRQcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudE1hcCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VG9MaXN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnRvUVN0cmluZyk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpnZXRHcmVnb3JpYW5EYXRlVGltZVVUQyk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjp0b1FEYXRlVGltZVVUQyk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmZp
bmRNZXRob2RJbmRleCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmpl
Y3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmg6CisgICAgICAg
IChCaW5kaW5ncyk6CisKIDIwMTItMDgtMjkgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRXh0cmFjdCBTdHlsZXNVSVNvdXJj
ZUNvZGVQcm92aWRlciB0byBzZXBhcmF0ZSBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBjNTExYmI0
MDNkZGIxMDg0MDY2NTljZjUyYzM5NmU2ZTcyNWMzNzJjLi5jYmU2NTNjYjQ5ZGUxYWY4OGI5YTBi
MWM4NTc0MzBiOTNkMTU3ZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTA4LTI5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAg
ICAgICBbUXRdIFBvcnQgY29udmVydFZhbHVlVG9RVmFyaWFudCB0byB1c2UgdGhlIEpTQyBDIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ2OTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5vciBh
ZGFwdGF0aW9ucyBhcmUgbmVlZGVkIGhlcmUgdG8gYWNjb21vZGF0ZSB0aGUgY2hhbmdlZCBzaWdu
YXR1cmUgb2YKKyAgICAgICAgY29udmVydFZhbHVlVG9RVmFyaWFudC4KKworICAgICAgICAqIEFw
aS9xd2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6ZXZhbHVhdGVKYXZhU2Ny
aXB0KToKKyAgICAgICAgKGNvbnZlcnRKU1ZhbHVlVG9XZWJFbGVtZW50VmFyaWFudCk6CisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OmV2YWx1YXRlSmF2
YVNjcmlwdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQuY3BwOgorICAgICAgICAoY29udmVydEpTVmFsdWVUb05vZGVWYXJpYW50KToKKwogMjAxMi0w
OC0yMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSRUdSRVNTSU9OKHIxMjU0MjgpOiBmYXN0L3Byb2ZpbGVyL25lc3RlZC1zdGFydC1h
bmQtc3RvcC1wcm9maWxlci5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2lu
c3RhbmNlLmNwcAppbmRleCAwNDEyNTMyYTg1Y2Q2MjAzZWU0YTc5MzRmYTVmMDc4YTYxMTZkNjU3
Li5lYzAwNzVmNzg0ZDEzNzVjMmQ4Y2FiYjFkNDRiOGI3YTFlNjIxYmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKQEAgLTMwMyw5ICszMDMsNiBAQCBKU1ZhbHVl
IFF0SW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHJldHVybiBz
dHJpbmdWYWx1ZShleGVjKTsKIH0KIAotLy8gSW4gcXRfcnVudGltZS5jcHAKLVFWYXJpYW50IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUU1ldGFUeXBlOjpUeXBl
IGhpbnQsIGludCAqZGlzdGFuY2UpOwotCiBRQnl0ZUFycmF5IFF0RmllbGQ6Om5hbWUoKSBjb25z
dAogewogICAgIGlmIChtX3R5cGUgPT0gTWV0YVByb3BlcnR5KQpAQCAtMzYwLDcgKzM1NywxMiBA
QCB2b2lkIFF0RmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3RhbmNlKiBpbnN0LCBKU1ZhbHVlCiAgICAgICAgICAgICBhcmd0eXBlID0gKFFNZXRhVHlw
ZTo6VHlwZSkgbV9wcm9wZXJ0eS51c2VyVHlwZSgpOwogCiAgICAgICAgIC8vIGR5bmFtaWMgcHJv
cGVydGllcyBqdXN0IGdldCBhbnkgUVZhcmlhbnQKLSAgICAgICAgUVZhcmlhbnQgdmFsID0gY29u
dmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhVmFsdWUsIGFyZ3R5cGUsIDApOworICAgICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRW
YWx1ZVRvUVZhcmlhbnQodG9SZWYoZXhlYyksIHRvUmVmKGV4ZWMsIGFWYWx1ZSksIGFyZ3R5cGUs
IDAsICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKG1fdHlwZSA9PSBNZXRhUHJvcGVydHkpIHsKICAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5LmlzV3JpdGFibGUoKSkKICAgICAgICAgICAgICAgICBt
X3Byb3BlcnR5LndyaXRlKG9iaiwgdmFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcAppbmRleCAwZGI1YTg3M2MxZjEyZGVmYzE4MDVlOGQ0YTAzMzhmNWU1MDk1M2ViLi5j
ODNjZDg2ZjY0YjdlYWZhODRlYWNkZDBjOTIwZmQwMzExNTBiYzE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBAIC0xMDMsNyArMTAzLDYgQEAgdHlwZWRlZiBlbnVt
IHsKICAgICBRT2JqLAogICAgIE9iamVjdCwKICAgICBOdWxsLAotICAgIFJUQXJyYXksCiAgICAg
UlRVaW50OENsYW1wZWRBcnJheQogfSBKU1JlYWxUeXBlOwogCkBAIC0xMTEsNyArMTEwLDcgQEAg
dHlwZWRlZiBlbnVtIHsKIFFEZWJ1ZyBvcGVyYXRvcjw8KFFEZWJ1ZyBkYmcsIGNvbnN0IEpTUmVh
bFR5cGUgJmMpCiB7CiAgICAgIGNvbnN0IGNoYXIgKm1hcFtdID0geyAiVmFyaWFudCIsICJOdW1i
ZXIiLCAiQm9vbGVhbiIsICJTdHJpbmciLCAiRGF0ZSIsCi0gICAgICAgICAiQXJyYXkiLCAiUlRP
YmplY3QiLCAiT2JqZWN0IiwgIk51bGwiLCAiUlRBcnJheSJ9OworICAgICAgICAgIkFycmF5Iiwg
IlJUT2JqZWN0IiwgIk9iamVjdCIsICJOdWxsIn07CiAKICAgICAgZGJnLm5vc3BhY2UoKSA8PCAi
SlNUeXBlKCIgPDwgKChpbnQpYykgPDwgIiwgIiA8PCAgbWFwW2NdIDw8ICIpIjsKIApAQCAtMTQ2
LDk4ICsxNDUsMTk2IEBAIHZvaWQgcmVnaXN0ZXJDdXN0b21UeXBlKGludCBxdE1ldGFUeXBlSWQs
IENvbnZlcnRUb1ZhcmlhbnRGdW5jdGlvbiB0b1ZhcmlhbnRGdW5jCiAgICAgY3VzdG9tUnVudGlt
ZUNvbnZlcnNpb25zKCktPmluc2VydChxdE1ldGFUeXBlSWQsIGNvbnZlcnNpb24pOwogfQogCi1z
dGF0aWMgYm9vbCBpc0pTVWludDhDbGFtcGVkQXJyYXkoSlNWYWx1ZSB2YWwpCitzdGF0aWMgYm9v
bCBpc0pTVWludDhDbGFtcGVkQXJyYXkoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIHJldHVy
biB2YWwuaXNDZWxsKCkgJiYgdmFsLmluaGVyaXRzKCZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2lu
Zm8pOworICAgIHJldHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU1VpbnQ4Q2xhbXBlZEFy
cmF5OjpzX2luZm8pOwogfQogCi1zdGF0aWMgSlNSZWFsVHlwZSB2YWx1ZVJlYWxUeXBlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWwpCitzdGF0aWMgYm9vbCBpc0pTQXJyYXkoSlNPYmplY3RS
ZWYgb2JqZWN0KQogewotICAgIGlmICh2YWwuaXNOdW1iZXIoKSkKKyAgICByZXR1cm4gdG9KUyhv
YmplY3QpLT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKTsKK30KKworc3RhdGljIGJvb2wgaXNK
U0RhdGUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiB0b0pTKG9iamVjdCktPmlu
aGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbyk7Cit9CisKK3N0YXRpYyBib29sIGlzUXRPYmpl
Y3QoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiB0b0pTKG9iamVjdCktPmluaGVy
aXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pOworfQorCitzdGF0aWMgSlNSZWFsVHlwZSB2YWx1
ZVJlYWxUeXBlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKEpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2YWx1
ZSkpCiAgICAgICAgIHJldHVybiBOdW1iZXI7Ci0gICAgZWxzZSBpZiAodmFsLmlzU3RyaW5nKCkp
CisgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBTdHJpbmc7Ci0gICAgZWxzZSBpZiAodmFsLmlzQm9vbGVhbigpKQorICAgIGlmIChKU1ZhbHVl
SXNCb29sZWFuKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIEJvb2xlYW47Ci0gICAg
ZWxzZSBpZiAodmFsLmlzTnVsbCgpKQorICAgIGlmIChKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZh
bHVlKSkKICAgICAgICAgcmV0dXJuIE51bGw7Ci0gICAgZWxzZSBpZiAoaXNKU1VpbnQ4Q2xhbXBl
ZEFycmF5KHZhbCkpCisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nOyAvLyBJIGRvbid0IGtub3cuCisKKyAgICBKU09iamVjdFJl
ZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisK
KyAgICBpZiAoaXNKU1VpbnQ4Q2xhbXBlZEFycmF5KG9iamVjdCkpCiAgICAgICAgIHJldHVybiBS
VFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGVsc2UgaWYgKHZhbC5pc09iamVjdCgpKSB7Ci0gICAg
ICAgIEpTT2JqZWN0ICpvYmplY3QgPSB2YWwudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgIGlmIChv
YmplY3QtPmluaGVyaXRzKCZSdW50aW1lQXJyYXk6OnNfaW5mbykpICAvLyBSdW50aW1lQXJyYXkg
J2luaGVyaXRzJyBmcm9tIEFycmF5LCBidXQgbm90IGluIEMrKwotICAgICAgICAgICAgcmV0dXJu
IFJUQXJyYXk7Ci0gICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNf
aW5mbykpCisgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIEFy
cmF5OwotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNf
aW5mbykpCisgICAgaWYgKGlzSlNEYXRlKG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gRGF0
ZTsKLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmUnVudGltZU9iamVjdDo6c19p
bmZvKSkKKyAgICBpZiAoaXNRdE9iamVjdChvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIFFP
Ymo7Ci0gICAgICAgIHJldHVybiBPYmplY3Q7Ci0gICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzsg
Ly8gSSBkb24ndCBrbm93LgorICAgIHJldHVybiBPYmplY3Q7CiB9CiAKLVFWYXJpYW50IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUU1ldGFUeXBlOjpUeXBlLCBp
bnQqLCBIYXNoU2V0PEpTT2JqZWN0Kj4qLCBpbnQpOworc3RhdGljIFFTdHJpbmcgdG9TdHJpbmco
SlNTdHJpbmdSZWYgc3RyaW5nUmVmKQoreworICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoc3RyaW5nUmVmKSks
IEpTU3RyaW5nR2V0TGVuZ3RoKHN0cmluZ1JlZikpOworfQogCi1zdGF0aWMgUVZhcmlhbnRNYXAg
Y29udmVydFZhbHVlVG9RVmFyaWFudE1hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QsIEhhc2hTZXQ8SlNPYmplY3QqPiogdmlzaXRlZE9iamVjdHMsIGludCByZWN1cnNpb25MaW1p
dCkKK3N0YXRpYyBKU1ZhbHVlUmVmIHVud3JhcEJveGVkUHJpbWl0aXZlKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU09iamVjdFJlZiBvYmopCiB7Ci0gICAgUV9BU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhv
YmopOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgaWYgKG9iamVj
dC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIGpzTnVtYmVyKG9iamVjdC0+dG9OdW1iZXIoZXhlYykpKTsKKyAgICBpZiAob2JqZWN0
LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdG9SZWYo
ZXhlYywgb2JqZWN0LT50b1N0cmluZyhleGVjKSk7CisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMo
JkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBvYmpl
Y3QtPnRvUHJpbWl0aXZlKGV4ZWMpKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1FWYXJpYW50
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBRTWV0YVR5
cGU6OlR5cGUsIGludCosIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiwgaW50LCBKU1ZhbHVlUmVmICpl
eGNlcHRpb24pOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjKTsKLSAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBw
cm9wZXJ0aWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKLSAgICBQcm9wZXJ0eU5hbWVB
cnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7CitzdGF0aWMgUVZh
cmlhbnRNYXAgY29udmVydFZhbHVlVG9RVmFyaWFudE1hcChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBIYXNoU2V0PEpTT2JqZWN0UmVmPiogdmlzaXRlZE9iamVjdHMs
IGludCByZWN1cnNpb25MaW1pdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewogICAgIFFWYXJp
YW50TWFwIHJlc3VsdDsKLSAgICBpbnQgb2JqZGlzdCA9IDA7CisgICAgSlNQcm9wZXJ0eU5hbWVB
cnJheVJlZiBwcm9wZXJ0aWVzID0gSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyhjb250ZXh0LCBv
YmplY3QpOworICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdl
dENvdW50KHByb3BlcnRpZXMpOwogCi0gICAgd2hpbGUgKGl0ICE9IHByb3BlcnRpZXMuZW5kKCkp
IHsKLSAgICAgICAgaWYgKG9iamVjdC0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgKml0KSkg
ewotICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBvYmplY3QtPmdldChleGVjLCAqaXQpOwotICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBR
VmFyaWFudCB2ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6
Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9iamRpc3QgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBVU3RyaW5n
IHVzdHJpbmcgPSAoKml0KS51c3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
aWQgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwg
dXN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQoaWQs
IHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBuYW1l
ID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4KHByb3BlcnRpZXMsIGkpOworCisg
ICAgICAgIGludCBwcm9wZXJ0eUNvbnZlcnNpb25EaXN0YW5jZSA9IDA7CisgICAgICAgIEpTVmFs
dWVSZWYgcHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFt
ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgUVZhcmlhbnQgdiA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoY29udGV4dCwgcHJvcGVydHksIFFNZXRhVHlwZTo6Vm9pZCwgJnByb3BlcnR5Q29udmVyc2lv
bkRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbik7Cisg
ICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICpleGNlcHRp
b24gPSAwOworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUNvbnZlcnNpb25EaXN0YW5jZSA+PSAw
KSB7CisgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHRvU3RyaW5nKG5hbWUpLCB2KTsKICAgICAg
ICAgfQotICAgICAgICArK2l0OwogICAgIH0KKyAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFz
ZShwcm9wZXJ0aWVzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1RVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBl
OjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3QqPiogdmlzaXRlZE9i
amVjdHMsIGludCByZWN1cnNpb25MaW1pdCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBJdGVtVHlwZT4K
K1FMaXN0PEl0ZW1UeXBlPiBjb252ZXJ0VG9MaXN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Jl
YWxUeXBlIHR5cGUsIEpTT2JqZWN0UmVmIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWYgdmFsdWUsIGludCogZGlzdGFuY2UsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhVHlwZTo6VHlw
ZSB0eXBlSWQgPSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPEl0ZW1U
eXBlPigpKSkKK3sKKyAgICBRTGlzdDxJdGVtVHlwZT4gbGlzdDsKKyAgICBpZiAodHlwZSA9PSBB
cnJheSkgeworICAgICAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyID0gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICBKU1ZhbHVlUmVmIGxlbmd0
aFZhbCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBsZW5ndGhTdHIsIGV4
Y2VwdGlvbik7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgbGVuZ3RoVmFsLCBleGNlcHRpb24pOworICAgICAgICBsaXN0LnJlc2VydmUobGVuZ3RoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IG9iamVjdCwgaSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGludCBpdGVtRGlzdGFuY2UgPSAt
MTsKKyAgICAgICAgICAgIFFWYXJpYW50IHZhcmlhbnQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50
KGNvbnRleHQsIHZhbHVlLCB0eXBlSWQsICZpdGVtRGlzdGFuY2UsIGV4Y2VwdGlvbik7CisgICAg
ICAgICAgICBpZiAoaXRlbURpc3RhbmNlID49IDApCisgICAgICAgICAgICAgICAgbGlzdCA8PCB2
YXJpYW50LnZhbHVlPEl0ZW1UeXBlPigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsaXN0LmNvdW50KCkgIT0gbGVuZ3Ro
KQorICAgICAgICAgICAgbGlzdC5jbGVhcigpOworICAgICAgICBlbHNlIGlmIChkaXN0YW5jZSkK
KyAgICAgICAgICAgICpkaXN0YW5jZSA9IDU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGl0
ZW1EaXN0YW5jZSA9IC0xOworICAgICAgICBRVmFyaWFudCB2YXJpYW50ID0gY29udmVydFZhbHVl
VG9RVmFyaWFudChjb250ZXh0LCB2YWx1ZSwgdHlwZUlkLCAmaXRlbURpc3RhbmNlLCBleGNlcHRp
b24pOworICAgICAgICBpZiAoaXRlbURpc3RhbmNlID49IDApIHsKKyAgICAgICAgICAgIGxpc3Qg
PDwgdmFyaWFudC52YWx1ZTxJdGVtVHlwZT4oKTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSkK
KyAgICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gbGlzdDsKK30KKworc3RhdGljIFFTdHJpbmcgdG9RU3RyaW5nKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBzdHJpbmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsK
KyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICByZXR1cm4g
UVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oSlNTdHJpbmdHZXRDaGFyYWN0
ZXJzUHRyKHN0cmluZy5nZXQoKSkpLCBKU1N0cmluZ0dldExlbmd0aChzdHJpbmcuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQgZ2V0R3JlZ29yaWFuRGF0ZVRpbWVVVEMoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTUmVhbFR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYgb2Jq
ZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIEdyZWdvcmlhbkRhdGVUaW1lKiBnZHQpCit7Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBpZiAodHlwZSA9PSBEYXRl
KSB7CisgICAgICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKKyAgICAgICAg
RGF0ZUluc3RhbmNlKiBkYXRlID0gYXNEYXRlSW5zdGFuY2UoanNPYmplY3QpOworICAgICAgICBn
ZHQtPmNvcHlGcm9tKCpkYXRlLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZG91YmxlIG1zID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVl
LCBleGNlcHRpb24pOworICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBjb252ZXJ0ZWRHZHQ7Cisg
ICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBtcywgLyp1dGMqLyB0cnVlLCBjb252
ZXJ0ZWRHZHQpOworICAgICAgICBnZHQtPmNvcHlGcm9tKGNvbnZlcnRlZEdkdCk7CisgICAgfQor
fQorCitzdGF0aWMgUURhdGVUaW1lIHRvUURhdGVUaW1lVVRDKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1JlYWxUeXBlIHR5cGUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIG9iamVjdCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdkdDsKKyAg
ICBnZXRHcmVnb3JpYW5EYXRlVGltZVVUQyhjb250ZXh0LCB0eXBlLCB2YWx1ZSwgb2JqZWN0LCBl
eGNlcHRpb24sICZnZHQpOworICAgIFFEYXRlIGRhdGUoZ2R0LnllYXIoKSwgZ2R0Lm1vbnRoKCkg
KyAxLCBnZHQubW9udGhEYXkoKSk7CisgICAgUVRpbWUgdGltZShnZHQuaG91cigpLCBnZHQubWlu
dXRlKCksIGdkdC5zZWNvbmQoKSk7CisgICAgcmV0dXJuIFFEYXRlVGltZShkYXRlLCB0aW1lLCBR
dDo6VVRDKTsKK30KKworUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlIGhpbnQsIGludCAq
ZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cywgaW50IHJlY3Vy
c2lvbkxpbWl0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLS1yZWN1cnNpb25MaW1p
dDsKIAogICAgIGlmICghdmFsdWUgfHwgIXJlY3Vyc2lvbkxpbWl0KQogICAgICAgICByZXR1cm4g
UVZhcmlhbnQoKTsKIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSAwOwotICAgIGlmICh2YWx1ZS5p
c09iamVjdCgpKSB7Ci0gICAgICAgIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAg
IEpTT2JqZWN0UmVmIG9iamVjdCA9IDA7CisgICAgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0
LCB2YWx1ZSkpIHsKKyAgICAgICAgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZh
bHVlLCAwKTsKICAgICAgICAgaWYgKHZpc2l0ZWRPYmplY3RzLT5jb250YWlucyhvYmplY3QpKQog
ICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAKICAgICAgICAgdmlzaXRlZE9iamVjdHMt
PmFkZChvYmplY3QpOworCisgICAgICAgIHZhbHVlID0gdW53cmFwQm94ZWRQcmltaXRpdmUoY29u
dGV4dCwgdmFsdWUsIG9iamVjdCk7CiAgICAgfQogCiAgICAgLy8gY2hlY2sgbWFnaWMgcG9pbnRl
ciB2YWx1ZXMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdmFsdWUKLSAgICBpZiAodmFsdWUgPT0ganNO
YU4oKQotICAgICAgICB8fCAodmFsdWUgPT0ganNVbmRlZmluZWQoKQotICAgICAgICAgICAgJiYg
aGludCAhPSBRTWV0YVR5cGU6OlFTdHJpbmcKLSAgICAgICAgICAgICYmIGhpbnQgIT0gKFFNZXRh
VHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpKSB7CisgICAgaWYgKEpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCB2YWx1ZSkKKyAgICAgICAgJiYgaXNuYW4oSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pKSkgeworICAgICAgICBpZiAoZGlzdGFuY2UpCisg
ICAgICAgICAgICAqZGlzdGFuY2UgPSAtMTsKKyAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Cisg
ICAgfQorCisgICAgaWYgKEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgJiYgaGlu
dCAhPSBRTWV0YVR5cGU6OlFTdHJpbmcgJiYgaGludCAhPSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0
YVR5cGVJZDxRVmFyaWFudD4oKSkgewogICAgICAgICBpZiAoZGlzdGFuY2UpCiAgICAgICAgICAg
ICAqZGlzdGFuY2UgPSAtMTsKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAgICAgfQogCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVS
ZWFsVHlwZShleGVjLCB2YWx1ZSk7CisgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlw
ZShjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6
OlZvaWQpIHsKICAgICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgTnVtYmVy
OgpAQCAtMjU0LDEyICszNTEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAgICAgICAgICAg
ICAgICAgaGludCA9IFFNZXRhVHlwZTo6UURhdGVUaW1lOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgaGlu
dCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAgICAgIGhp
bnQgPSBRTWV0YVR5cGU6OkJvb2w7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKKyAgICAgICAgICAgICAgICBo
aW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgUU9iajoKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpR
T2JqZWN0U3RhcjsKQEAgLTI2OCw3ICszNjAsNiBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAg
ICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UUJ5dGVBcnJheTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIFJU
QXJyYXk6CiAgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0Owog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzYsNyArMzY3LDcgQEAgUVZh
cmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIFFNZXRhVHlwZTo6VHlwZQogCiAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0VmFsdWVU
b1FWYXJpYW50OiBqc3R5cGUgaXMgIiA8PCB0eXBlIDw8ICIsIGhpbnQgaXMiIDw8IGhpbnQ7CiAK
LSAgICBpZiAodmFsdWUgPT0ganNOdWxsKCkKKyAgICBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCB2YWx1ZSkKICAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyCiAgICAg
ICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpWb2lkU3RhcgogICAgICAgICAmJiBoaW50ICE9IFFN
ZXRhVHlwZTo6UVN0cmluZwpAQCAtMjkwLDEwICszODEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpU
eXBlCiAgICAgaW50IGRpc3QgPSAtMTsKICAgICBzd2l0Y2ggKGhpbnQpIHsKICAgICAgICAgY2Fz
ZSBRTWV0YVR5cGU6OkJvb2w6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBPYmplY3QgJiYgb2Jq
ZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudChhc0Jvb2xlYW5PYmplY3QodmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkudG9C
b29sZWFuKGV4ZWMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXQgPSBR
VmFyaWFudCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICAgICAgcmV0ID0gUVZhcmlh
bnQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKHR5
cGUgPT0gQm9vbGVhbikKICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKICAgICAgICAgICAgIGVs
c2UKQEAgLTMxMCw3ICszOTgsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpVU2hvcnQ6CiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKICAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToKLSAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCkpOwogICAgICAgICAgICAgcmV0LmNvbnZlcnQo
KFFWYXJpYW50OjpUeXBlKWhpbnQpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyKSB7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7CkBAIC0zNDgsMTQgKzQzNiwxNyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFDaGFyOgog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyIHx8IHR5cGUgPT0gQm9vbGVhbikgewotICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpdmFsdWUudG9OdW1iZXIo
ZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcigodXNob3J0KUpT
VmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCkpKTsKICAgICAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBCb29sZWFuKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2OwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcihz
dHIubGVuZ3RoKCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLmltcGwoKS0+Y2hhcmFjdGVycygpIDog
MCkpOworICAgICAgICAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHIoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAg
ICAgICAgICAgIFFDaGFyIGNoOworICAgICAgICAgICAgICAgIGlmIChzdHIgJiYgSlNTdHJpbmdH
ZXRMZW5ndGgoc3RyLmdldCgpKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGNoID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoc3RyLmdl
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoY2gpOwogICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7CiAg
ICAgICAgICAgICAgICAgZWxzZQpAQCAtMzY0LDEzICs0NTUsMTUgQEAgUVZhcmlhbnQgY29udmVy
dFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlw
ZTo6VHlwZQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFT
dHJpbmc6IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSkgewogICAgICAgICAgICAgICAgIGlmIChkaXN0YW5j
ZSkKICAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUVN0cmluZygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBV
U3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
ICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcu
aW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHIoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgaWYg
KHN0cikgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgc3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoc3RyLmdldCgpKSksIEpTU3Ry
aW5nR2V0TGVuZ3RoKHN0ci5nZXQoKSkpOworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KHN0cmluZyk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAg
ICAgICAgICAgICBkaXN0ID0gMDsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0zODAsMTE3ICs0
NzMsMjkgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZQogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0
IHx8IHR5cGUgPT0gQXJyYXkgfHwgdHlwZSA9PSBSVEFycmF5KSB7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQoY29udmVydFZhbHVlVG9RVmFyaWFudE1hcChleGVjLCBvYmplY3QsIHZp
c2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0g
T2JqZWN0IHx8IHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFu
dChjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKGNvbnRleHQsIG9iamVjdCwgdmlzaXRlZE9iamVj
dHMsIHJlY3Vyc2lvbkxpbWl0LCBleGNlcHRpb24pKTsKICAgICAgICAgICAgICAgICAvLyBUaG9z
ZSB0eXBlcyBjYW4gc3RpbGwgaGF2ZSBwZXJmZWN0IG1hdGNoZXMsIGUuZy4gJ2Jvb2wnIGlmIHZh
bHVlIGlzIGEgQm9vbGVhbiBPYmplY3QuCiAgICAgICAgICAgICAgICAgZGlzdCA9IDE7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
UVZhcmlhbnRMaXN0OgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAg
ICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJh
eSo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0OwotICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAg
ICAgICBpbnQgb2JqZGlzdCA9IDA7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJj
b252ZXJ0aW5nIGEgIiA8PCBsZW4gPDwgIiBsZW5ndGggQXJyYXkiOwotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFu
dChleGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCA9PSAtMSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVy
dGluZyBlbGVtZW50IGF0IGluZGV4ICIgPDwgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAvLyBGYWlsZWQgY29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKG9iamRpc3QgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQot
ICAgICAgICAgICAgICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaW50
IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgb2JqZGlzdCA9IDA7
Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0aW5nIGEgIiA8PCBsZW4g
PDwgIiBsZW5ndGggQXJyYXkiOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0
KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVk
T2JqZWN0cywgcmVjdXJzaW9uTGltaXQpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamRp
c3QgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFp
bGVkIGNvbnZlcnRpbmcgZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgLy8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWls
IHRoZSBhcnJheQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRp
c3QgPSA1OwotICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
TWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICBpbnQgb2JqZGlzdDsK
LSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIm1ha2luZyBhIHNpbmdsZSBsZW5ndGgg
dmFyaWFudGxpc3QiOwotICAgICAgICAgICAgICAgIFFWYXJpYW50IHZhciA9IGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0
ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamRpc3Qg
IT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0IDw8IHZhcjsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
ZmFpbGVkIG1ha2luZyBzaW5nbGUgbGVuZ3RoIHZhcmxpc3QiOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KGNvbnZlcnRUb0xpc3Q8
UVZhcmlhbnQ+KGNvbnRleHQsIHR5cGUsIG9iamVjdCwgdmFsdWUsICZkaXN0LCBleGNlcHRpb24s
IFFNZXRhVHlwZTo6Vm9pZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlFTdHJpbmdMaXN0OiB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5
KSB7Ci0gICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8
UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJl
c3VsdDsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFs
dWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFs
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmlu
ZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0
ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocXN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpc3Qg
PSA1OwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICBKU0FycmF5KiBh
cnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAg
UVN0cmluZ0xpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxl
bmd0aCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0
cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAg
ICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cXN0cmluZyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBR
VmFyaWFudChjb252ZXJ0VG9MaXN0PFFTdHJpbmc+KGNvbnRleHQsIHR5cGUsIG9iamVjdCwgdmFs
dWUsICZkaXN0LCBleGNlcHRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFCeXRlQXJyYXk6IHsKICAgICAgICAgICAgIGlmICh0
eXBlID09IFJUVWludDhDbGFtcGVkQXJyYXkpIHsKLSAgICAgICAgICAgICAgICBXVEY6OlVpbnQ4
Q2xhbXBlZEFycmF5KiBhcnIgPSB0b1VpbnQ4Q2xhbXBlZEFycmF5KHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBXVEY6OlVpbnQ4Q2xhbXBlZEFycmF5KiBhcnIgPSB0b1VpbnQ4Q2xhbXBlZEFycmF5
KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFy
aWFudChRQnl0ZUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFyci0+ZGF0YSgp
KSwgYXJyLT5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIGRpc3QgPSAwOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQo
UVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJp
bmcubGVuZ3RoKCkpLnRvTGF0aW4xKCkpOworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KHRvUVN0cmluZyhjb250ZXh0LCB2YWx1ZSkudG9MYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKICAgICAg
ICAgICAgICAgICBlbHNlCkBAIC01MDIsMzkgKzUwNywyMSBAQCBRVmFyaWFudCBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpU
eXBlCiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRRGF0ZVRpbWU6CiAgICAgICAgIGNhc2UgUU1l
dGFUeXBlOjpRRGF0ZToKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFUaW1lOgotICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gRGF0ZSkgewotICAgICAgICAgICAgICAgIERhdGVJbnN0YW5jZSogZGF0
ZSA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
R3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRl
VGltZShleGVjLCBkYXRlLT5pbnRlcm5hbE51bWJlcigpLCB0cnVlLCBnZHQpOworICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gRGF0ZSB8fCB0eXBlID09IE51bWJlcikgeworICAgICAgICAgICAgICAg
IFFEYXRlVGltZSBkdCA9IHRvUURhdGVUaW1lVVRDKGNvbnRleHQsIHR5cGUsIHZhbHVlLCBvYmpl
Y3QsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBpc051bWJlciA9ICh0
eXBlID09IE51bWJlcik7CiAgICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpR
RGF0ZVRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdk
dC55ZWFyKCksIGdkdC5tb250aCgpICsgMSwgZ2R0Lm1vbnRoRGF5KCkpLCBRVGltZShnZHQuaG91
cigpLCBnZHQubWludXRlKCksIGdkdC5zZWNvbmQoKSksIFF0OjpVVEMpOwotICAgICAgICAgICAg
ICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gZHQ7CisgICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSBpc051bWJlciA/IDYgOiAwOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldCA9IFFEYXRlKGdkdC55ZWFyKCksIGdkdC5tb250aCgpICsgMSwgZ2R0Lm1vbnRoRGF5KCkp
OwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
ID0gZHQuZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gaXNOdW1iZXIgPyA4IDog
MTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBR
VGltZShnZHQuaG91cigpLCBnZHQubWludXRlKCksIGdkdC5zZWNvbmQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSAyOworICAgICAgICAgICAgICAgICAgICByZXQgPSBkdC50aW1lKCk7
CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBpc051bWJlciA/IDEwIDogMjsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgZG91YmxlIGIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAg
ICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAgICAgICAgICAgICAgbXNUb0dyZWdvcmlh
bkRhdGVUaW1lKGV4ZWMsIGIsIHRydWUsIGdkdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpbnQg
PT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURh
dGVUaW1lKFFEYXRlKGdkdC55ZWFyKCksIGdkdC5tb250aCgpICsgMSwgZ2R0Lm1vbnRoRGF5KCkp
LCBRVGltZShnZHQuaG91cigpLCBnZHQubWludXRlKCksIGdkdC5zZWNvbmQoKSksIFF0OjpVVEMp
OwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNjsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgewotICAgICAgICAgICAgICAgICAgICByZXQg
PSBRRGF0ZShnZHQueWVhcigpLCBnZHQubW9udGgoKSArIDEsIGdkdC5tb250aERheSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGlzdCA9IDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIoKSwgZ2R0Lm1pbnV0ZSgpLCBn
ZHQuc2Vjb25kKCkpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAg
ICAgICAgfQotI2lmbmRlZiBRVF9OT19EQVRFU1RSSU5HCiAgICAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcg
cXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVy
cygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLQorICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IHRvUVN0cmluZyhjb250ZXh0LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGhpbnQg
PT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKICAgICAgICAgICAgICAgICAgICAgUURhdGVUaW1l
IGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpJU09EYXRlKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCkBAIC01NzIsMTMgKzU1OSwxMiBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvLyBRVF9O
T19EQVRFU1RSSU5HCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6UU9iamVjdFN0YXI6CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBR
T2JqKSB7Ci0gICAgICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5jZTo6
Z2V0SW5zdGFuY2Uob2JqZWN0KTsKKyAgICAgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGluc3Qg
PSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZSh0b0pTKG9iamVjdCkpOwogICAgICAgICAgICAgICAg
IGlmIChxdGluc3QpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5z
dGFuY2UsIHdpdGggb2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOwpAQCAt
NjAyLDcgKzU4OCw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUKIAogICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6Vm9pZFN0YXI6CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBRT2JqKSB7Ci0gICAg
ICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uo
b2JqZWN0KTsKKyAgICAgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGluc3QgPSBRdEluc3RhbmNl
OjpnZXRJbnN0YW5jZSh0b0pTKG9iamVjdCkpOwogICAgICAgICAgICAgICAgIGlmIChxdGluc3Qp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFuY2UsIHdpdGgg
b2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOwpAQCAtNjIxLDcgKzYwNyw3
IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUKICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBOdW1iZXIpIHsKICAgICAgICAgICAgICAgICAvLyBJIGRvbid0IHRoaW5rIHRoYXQgY29udmVy
dGluZyBhIGRvdWJsZSB0byBhIHBvaW50ZXIgaXMgYSB3aXNlCiAgICAgICAgICAgICAgICAgLy8g
bW92ZS4gIEV4Y2VwdCBtYXliZSAwLgotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
Z290IG51bWJlciBmb3Igdm9pZCAqIC0gbm90IGNvbnZlcnRpbmcsIHNlZW1zIHVuc2FmZToiIDw8
IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
Z290IG51bWJlciBmb3Igdm9pZCAqIC0gbm90IGNvbnZlcnRpbmcsIHNlZW1zIHVuc2FmZToiIDw8
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAidm9pZCogLSB1bmhhbmRsZWQgdHlw
ZSIgPDwgdHlwZTsKICAgICAgICAgICAgIH0KQEAgLTYyOSwxMzAgKzYxNSwzNCBAQCBRVmFyaWFu
dCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
UU1ldGFUeXBlOjpUeXBlCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIE5vbiBj
b25zdCB0eXBlIGlkcwotICAgICAgICAgICAgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkg
cU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJy
YXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAg
ICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywg
dmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8
UU9iamVjdCo+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkgKj4ob2JqZWN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
ID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFy
cmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3Qg
PSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0
LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJz
aW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBh
IHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVz
dWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFs
dWUsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJl
Y3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0
Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGludCA9PSAo
UU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRT2JqZWN0TGlzdD4oKSkgeworICAgICAgICAg
ICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUoY29udmVydFRvTGlzdDxRT2JqZWN0Kj4o
Y29udGV4dCwgdHlwZSwgb2JqZWN0LCB2YWx1ZSwgJmRpc3QsIGV4Y2VwdGlvbikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5
cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFMaXN0PGludD4gPigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkq
IHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAg
ICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQg
bGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWws
IFFNZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1p
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
Y291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nh
c3Q8SlNBcnJheSAqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgICAgIFFMaXN0PGludD4g
cmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZh
bCwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxp
bWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5jb3VudCgpID09IGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAg
ICAgICAgICBRTGlzdDxpbnQ+IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1k
aXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNp
dGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
bWRpc3QgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVt
LnZhbHVlPGludD4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRTGlz
dDxpbnQ+ID4oKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUo
Y29udmVydFRvTGlzdDxpbnQ+KGNvbnRleHQsIHR5cGUsIG9iamVjdCwgdmFsdWUsICZkaXN0LCBl
eGNlcHRpb24pKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlw
ZT4oaGludCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6dmFy
aWFudEZyb21PYmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5I
YW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50KSkpIHsKKyAgICAgICAgICAg
ICAgICByZXQgPSBRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdCh0b0pTKG9iamVj
dCksIHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChjdXN0b21SdW50aW1lQ29udmVyc2lvbnMoKS0+Y29udGFpbnMoaGludCkpIHsKLSAg
ICAgICAgICAgICAgICByZXQgPSBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMoKS0+dmFsdWUoaGlu
dCkudG9WYXJpYW50RnVuYyhvYmplY3QsICZkaXN0LCB2aXNpdGVkT2JqZWN0cyk7CisgICAgICAg
ICAgICAgICAgcmV0ID0gY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPnZhbHVlKGhpbnQpLnRv
VmFyaWFudEZ1bmModG9KUyhvYmplY3QpLCAmZGlzdCwgdmlzaXRlZE9iamVjdHMpOwogICAgICAg
ICAgICAgICAgIGlmIChkaXN0ID09IDApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlk
PFFWYXJpYW50PigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1
ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoZGlzdGFuY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAqZGlzdGFuY2Ug
PSAxOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBPYmplY3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmVuJ3QgcmVhbGx5IHZpc2l0
ZWQgdGhpcyBvYmplY3QgeWV0LCB3ZSByZW1vdmUgaXQKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZpc2l0ZWRPYmplY3RzLT5yZW1vdmUob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFuZCB0aGVuIHJlY3Vyc2Ugd2l0aCB0aGUgYXV0b2Rl
dGVjdCBmbGFnCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6Vm9pZCwgZGlzdGFuY2UsIHZpc2l0ZWRPYmplY3Rz
LCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmVuJ3QgcmVhbGx5IHZpc2l0ZWQgdGhpcyBv
YmplY3QgeWV0LCB3ZSByZW1vdmUgaXQKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRlZE9iamVj
dHMtPnJlbW92ZShvYmplY3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEFuZCB0aGVuIHJlY3Vyc2Ugd2l0aCB0aGUgYXV0b2RldGVjdCBmbGFnCisgICAgICAgICAg
ICAgICAgcmV0ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChjb250ZXh0LCB2YWx1ZSwgUU1ldGFU
eXBlOjpWb2lkLCBkaXN0YW5jZSwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0LCBleGNl
cHRpb24pOworICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIApAQCAtNzY4LDExICs2NTgsMTEgQEAgUVZhcmlhbnQgY29udmVy
dFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlw
ZTo6VHlwZQogICAgIHJldHVybiByZXQ7CiB9CiAKLVFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZh
cmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGlu
dCwgaW50ICpkaXN0YW5jZSkKK1FWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBp
bnQgKmRpc3RhbmNlLCBKU1ZhbHVlUmVmICpleGNlcHRpb24pCiB7CiAgICAgY29uc3QgaW50IHJl
Y3Vyc2lvbkxpbWl0ID0gMjAwOwotICAgIEhhc2hTZXQ8SlNPYmplY3QqPiB2aXNpdGVkT2JqZWN0
czsKLSAgICByZXR1cm4gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgaGludCwg
ZGlzdGFuY2UsICZ2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOworICAgIEhhc2hTZXQ8
SlNPYmplY3RSZWY+IHZpc2l0ZWRPYmplY3RzOworICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGNvbnRleHQsIHZhbHVlLCBoaW50LCBkaXN0YW5jZSwgJnZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCwgZXhjZXB0aW9uKTsKIH0KIAogSlNWYWx1ZVJlZiBjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3QsIGNvbnN0IFFWYXJpYW50JiB2YXJpYW50LCBKU1ZhbHVlUmVmICpleGNlcHRpb24pCkBAIC0x
MTgxLDcgKzEwNzEsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYg
Y29udGV4dCwKICAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJnID0gaSA8IGFyZ3VtZW50Q291bnQg
PyBhcmd1bWVudHNbaV0gOiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAogICAgICAg
ICAgICAgaW50IGFyZ2Rpc3RhbmNlID0gLTE7Ci0gICAgICAgICAgICBRVmFyaWFudCB2ID0gY29u
dmVydFZhbHVlVG9RVmFyaWFudCh0b0pTKGNvbnRleHQpLCB0b0pTKHRvSlMoY29udGV4dCksIGFy
ZyksIHR5cGVzLmF0KGkrMSkudHlwZUlkKCksICZhcmdkaXN0YW5jZSk7CisgICAgICAgICAgICBR
VmFyaWFudCB2ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChjb250ZXh0LCBhcmcsIHR5cGVzLmF0
KGkrMSkudHlwZUlkKCksICZhcmdkaXN0YW5jZSwgZXhjZXB0aW9uKTsKICAgICAgICAgICAgIGlm
IChhcmdkaXN0YW5jZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgbWF0Y2hEaXN0YW5jZSArPSBh
cmdkaXN0YW5jZTsKICAgICAgICAgICAgICAgICBhcmdzW2krMV0gPSB2OwpAQCAtMTY3MCwxMiAr
MTU2MCw5IEBAIHZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZvaWQqKiBhcmd2KQog
ICAgIGludCBhcmdjID0gcU1heChtZXRob2QucGFyYW1ldGVyQ291bnQoKSwgcmVjZWl2ZXJMZW5n
dGgpOwogICAgIFdURjo6VmVjdG9yPEpTVmFsdWVSZWY+IGFyZ3MoYXJnYyk7CiAKLSAgICAvLyBU
T0RPOiByZW1vdmUgb25jZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB1c2UgSlNDIEFQSS4KLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSA6OnRvSlMobV9jb250ZXh0KTsKLQogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYXJnYzsgaSsrKSB7CiAgICAgICAgIGludCBhcmdUeXBlID0gbWV0aG9kLnBhcmFtZXRl
clR5cGUoaSk7Ci0gICAgICAgIGFyZ3NbaV0gPSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKHRvUmVm
KGV4ZWMpLCBtX3Jvb3RPYmplY3QsIFFWYXJpYW50KGFyZ1R5cGUsIGFyZ3ZbaSsxXSksIGlnbm9y
ZWRFeGNlcHRpb24pOworICAgICAgICBhcmdzW2ldID0gY29udmVydFFWYXJpYW50VG9WYWx1ZSht
X2NvbnRleHQsIG1fcm9vdE9iamVjdCwgUVZhcmlhbnQoYXJnVHlwZSwgYXJndltpKzFdKSwgaWdu
b3JlZEV4Y2VwdGlvbik7CiAgICAgfQogCiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihtX2Nv
bnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbiwgbV9yZWNlaXZlciwgYXJnYywgYXJncy5kYXRhKCks
IDApOwpAQCAtMTY5MCw0OSArMTU3Nyw0IEBAIGJvb2wgUXRDb25uZWN0aW9uT2JqZWN0OjptYXRj
aChKU0NvbnRleHRSZWYgY29udGV4dCwgUU9iamVjdCogc2VuZGVyLCBpbnQgc2lnbmFsCiAgICAg
cmV0dXJuIHJlY2VpdmVyTWF0Y2ggJiYgSlNWYWx1ZUlzRXF1YWwoY29udGV4dCwgcmVjZWl2ZXJG
dW5jdGlvbiwgbV9yZWNlaXZlckZ1bmN0aW9uLCBpZ25vcmVkRXhjZXB0aW9uKTsKIH0KIAotLy8g
PT09PT09PT09PT09PT09Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+OjpRdEFy
cmF5KFFMaXN0PFQ+IGxpc3QsIFFNZXRhVHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+IHJvb3RPYmplY3QpCi0gICAgOiBBcnJheShyb290T2JqZWN0KQotICAgICwgbV9saXN0
KGxpc3QpCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBtX2xlbmd0aCA9IG1fbGlzdC5jb3Vu
dCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6flF0QXJyYXkgKCkK
LXsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFJvb3RPYmplY3QqIFF0QXJyYXk8VD46OnJv
b3RPYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2Jq
ZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gdm9pZCBRdEFycmF5PFQ+OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBjb25zdAotewotICAgIC8vIFF0U2NyaXB0
IHNldHMgdGhlIHZhbHVlLCBidXQgZG9lc24ndCBmb3J3YXJkIGl0IHRvIHRoZSBvcmlnaW5hbCBz
b3VyY2UKLSAgICAvLyAoZS5nLiBpZiB5b3UgZG8gJ29iamVjdC5pbnRMaXN0WzVdID0gNicsIHRo
ZSBvYmplY3QgaXMgbm90IHVwZGF0ZWQsIGJ1dCB0aGUKLSAgICAvLyBjb3B5IG9mIHRoZSBsaXN0
IGlzKS4KLSAgICBpbnQgZGlzdCA9IC0xOwotICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgYVZhbHVlLCBtX3R5cGUsICZkaXN0KTsKLQotICAgIGlmIChkaXN0
ID49IDApIHsKLSAgICAgICAgbV9saXN0W2luZGV4XSA9IHZhbC52YWx1ZTxUPigpOwotICAgIH0K
LX0KLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gSlNWYWx1ZSBRdEFycmF5PFQ+Ojp2YWx1ZUF0
KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChp
bmRleCA8IG1fbGVuZ3RoKSB7Ci0gICAgICAgIFQgdmFsID0gbV9saXN0LmF0KGluZGV4KTsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUodG9SZWYoZXhlYyksIHJvb3RPYmpl
Y3QoKSwgUVZhcmlhbnQ6OmZyb21WYWx1ZSh2YWwpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KIH0gfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmgKaW5kZXggNmY3NTQzZGI3ZmQ5MjM2NDQ5YTdiMDQwZTIzODlk
YTNhMDIzZjE5Ni4uZjI2Njc4NzQ5ZjIxMDg5MGJkOWU4ZTEyYmY0NDM5NjQzZjM4MDliZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCkBAIC03NiwyNSArNzYsNiBAQCBwcml2
YXRlOgogICAgIFFQb2ludGVyPFFPYmplY3Q+IG1fY2hpbGRPYmplY3Q7CiB9OwogCi0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBRdEFycmF5IDogcHVibGljIEFycmF5Ci17Ci1wdWJsaWM6
Ci0gICAgUXRBcnJheShRTGlzdDxUPiBsaXN0LCBRTWV0YVR5cGU6OlR5cGUgdHlwZSwgUGFzc1Jl
ZlB0cjxSb290T2JqZWN0Pik7Ci0gICAgdmlydHVhbCB+UXRBcnJheSgpOwotCi0gICAgUm9vdE9i
amVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwg
SlNWYWx1ZSB2YWx1ZUF0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdCB7cmV0dXJuIG1fbGVuZ3RoO30K
LQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIFFMaXN0PFQ+IG1fbGlzdDsgLy8gc2V0VmFsdWVBdCBp
cyBjb25zdCEKLSAgICB1bnNpZ25lZCBpbnQgbV9sZW5ndGg7Ci0gICAgUU1ldGFUeXBlOjpUeXBl
IG1fdHlwZTsKLX07Ci0KIGNsYXNzIFF0UnVudGltZU1ldGhvZCB7CiBwdWJsaWM6CiAgICAgZW51
bSBNZXRob2RGbGFncyB7CkBAIC0xNTEsMTIgKzEzMiwxMiBAQCBwcml2YXRlOgogfTsKIAogCi10
eXBlZGVmIFFWYXJpYW50ICgqQ29udmVydFRvVmFyaWFudEZ1bmN0aW9uKShKU09iamVjdCogb2Jq
ZWN0LCBpbnQgKmRpc3RhbmNlLCBIYXNoU2V0PEpTT2JqZWN0Kj4qIHZpc2l0ZWRPYmplY3RzKTsK
K3R5cGVkZWYgUVZhcmlhbnQgKCpDb252ZXJ0VG9WYXJpYW50RnVuY3Rpb24pKEpTT2JqZWN0KiBv
YmplY3QsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0
cyk7CiB0eXBlZGVmIEpTVmFsdWUgKCpDb252ZXJ0VG9KU1ZhbHVlRnVuY3Rpb24pKEV4ZWNTdGF0
ZSogZXhlYywgV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
UVZhcmlhbnQmIHZhcmlhbnQpOwogCiB2b2lkIHJlZ2lzdGVyQ3VzdG9tVHlwZShpbnQgcXRNZXRh
VHlwZUlkLCBDb252ZXJ0VG9WYXJpYW50RnVuY3Rpb24sIENvbnZlcnRUb0pTVmFsdWVGdW5jdGlv
bik7CiAKLVFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGludCwgaW50ICpkaXN0YW5jZSk7CitRVmFy
aWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgUU1l
dGFUeXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CiBKU1ZhbHVlUmVmIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoSlNDb250ZXh0UmVmLCBQYXNzUmVm
UHRyPFJvb3RPYmplY3Q+LCBjb25zdCBRVmFyaWFudCYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CiAKIHZvaWQgc2V0RXhjZXB0aW9uKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
LCBjb25zdCBRU3RyaW5nJiB0ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcApp
bmRleCBhMjA4Y2JjNGVhNWI0N2YxODE3M2U5MjI0Yjk3OWViYzM5YjkxZjQ1Li5lNzQ4ZTQ0MTRi
ZGZkODdiNWViNzE4NjljMjBiMGNiMTg5N2NkOWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVs
ZW1lbnQuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAicXdlYmVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJxd2Vi
ZWxlbWVudF9wLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAj
aW5jbHVkZSAiQ1NTUGFyc2VyLmgiCkBAIC03NTksNyArNzYwLDggQEAgUVZhcmlhbnQgUVdlYkVs
ZW1lbnQ6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCiAg
ICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCiAgICAgaW50IGRpc3RhbmNlID0gMDsKLSAgICBy
ZXR1cm4gSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudChzdGF0ZSwgZXZhbHVh
dGlvblJlc3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOworICAgIEpTVmFsdWVSZWYq
IGlnbm9yZWRFeGNlcHRpb24gPSAwOworICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KHRvUmVmKHN0YXRlKSwgdG9SZWYoc3RhdGUsIGV2YWx1YXRpb25SZXN1
bHQpLCBRTWV0YVR5cGU6OlZvaWQsICZkaXN0YW5jZSwgaWdub3JlZEV4Y2VwdGlvbik7CiB9CiAK
IC8qIQpAQCAtMjA0Niw3ICsyMDQ4LDcgQEAgRWxlbWVudCogUXRXZWJFbGVtZW50UnVudGltZTo6
Z2V0KGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50Lm1fZWxl
bWVudDsKIH0KIAotc3RhdGljIFFWYXJpYW50IGNvbnZlcnRKU1ZhbHVlVG9XZWJFbGVtZW50VmFy
aWFudChKU0M6OkpTT2JqZWN0KiBvYmplY3QsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNDOjpK
U09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cykKK3N0YXRpYyBRVmFyaWFudCBjb252ZXJ0SlNWYWx1
ZVRvV2ViRWxlbWVudFZhcmlhbnQoSlNDOjpKU09iamVjdCogb2JqZWN0LCBpbnQgKmRpc3RhbmNl
LCBIYXNoU2V0PEpTT2JqZWN0UmVmPiogdmlzaXRlZE9iamVjdHMpCiB7CiAgICAgRWxlbWVudCog
ZWxlbWVudCA9IDA7CiAgICAgUVZhcmlhbnQgcmV0OwpAQCAtMjA1NSw3ICsyMDU3LDcgQEAgc3Rh
dGljIFFWYXJpYW50IGNvbnZlcnRKU1ZhbHVlVG9XZWJFbGVtZW50VmFyaWFudChKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QsIGludCAqZGkKICAgICAgICAgKmRpc3RhbmNlID0gMDsKICAgICAgICAgLy8g
QWxsb3cgb3RoZXIgb2JqZWN0cyB0byByZWFjaCB0aGlzIG9uZS4gVGhpcyB3b24ndCBjYXVzZSBv
dXIgYWxnb3JpdGhtIHRvCiAgICAgICAgIC8vIGxvb3Agc2luY2Ugd2hlbiB3ZSBmaW5kIGFuIEVs
ZW1lbnQgd2UgZG8gbm90IHJlY3Vyc2UuCi0gICAgICAgIHZpc2l0ZWRPYmplY3RzLT5yZW1vdmUo
b2JqZWN0KTsKKyAgICAgICAgdmlzaXRlZE9iamVjdHMtPnJlbW92ZSh0b1JlZihvYmplY3QpKTsK
ICAgICB9IGVsc2UgaWYgKG9iamVjdCAmJiBvYmplY3QtPmluaGVyaXRzKCZKU0RvY3VtZW50Ojpz
X2luZm8pKSB7CiAgICAgICAgIC8vIFRvIHN1cHBvcnQgVGVzdFJ1bm5lclF0Ojpub2Rlc0Zyb21S
ZWN0KCksIHVzZWQgaW4gRFJULCB3ZSBkbyBhbiBpbXBsaWNpdAogICAgICAgICAvLyBjb252ZXJz
aW9uIGZyb20gJ2RvY3VtZW50JyB0byB0aGUgUVdlYkVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSAn
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Jy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmlu
ZGV4IDIyZTQ3YzU1ZGIwYzYxZjRmOTBmNTMwZTgxN2RlN2YxZmRkOTA4NWQuLmFkYmZhMWNjZGU0
ZmE3NDU1ZTBiNmJjNzViYjEzN2E1ZmY0YWNhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcApAQCAtMTUzNCw4ICsxNTM0LDkgQEAgUVZhcmlhbnQgUVdlYkZyYW1lOjpldmFsdWF0ZUph
dmFTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNlKQogICAgIGlmIChwcm94eSkgewog
ICAgICAgICBpbnQgZGlzdGFuY2UgPSAwOwogICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IGQtPmZy
YW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdFNvdXJj
ZSkpLmpzVmFsdWUoKTsKLQotICAgICAgICByYyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQocHJveHktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkt
Pmdsb2JhbEV4ZWMoKSwgdiwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOworICAgICAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHByb3h5LT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpTVmFsdWVSZWYqIGlnbm9yZWRFeGNl
cHRpb24gPSAwOworICAgICAgICByYyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZh
cmlhbnQodG9SZWYoZXhlYyksIHRvUmVmKGV4ZWMsIHYpLCBRTWV0YVR5cGU6OlZvaWQsICZkaXN0
YW5jZSwgaWdub3JlZEV4Y2VwdGlvbik7CiAgICAgfQogICAgIHJldHVybiByYzsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5jcHAKaW5kZXggNzE0ZjU2MGYwZDRhZjcwMDZkM2UwN2RkYzMwNDY5YjU0M2E2
YzgwZi4uNmIxNzhjNTUxODUwZmM2MTg2MTZmYmFkNDU2NGMxNDNkNGU5MzU1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBXZWJDb3JlOjpOb2RlKiBRdERSVE5v
ZGVSdW50aW1lOjpnZXQoY29uc3QgUURSVE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUubV9u
b2RlOwogfQogCi1zdGF0aWMgUVZhcmlhbnQgY29udmVydEpTVmFsdWVUb05vZGVWYXJpYW50KEpT
Qzo6SlNPYmplY3QqIG9iamVjdCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU0M6OkpTT2JqZWN0
Kj4qKQorc3RhdGljIFFWYXJpYW50IGNvbnZlcnRKU1ZhbHVlVG9Ob2RlVmFyaWFudChKU0M6OkpT
T2JqZWN0KiBvYmplY3QsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KikKIHsK
ICAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5pbmhlcml0cygmSlNOb2RlOjpzX2luZm8pKQog
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsK
</data>
<flag name="review"
          id="171891"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>