<?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>45244</bug_id>
          
          <creation_ts>2010-09-05 12:19:17 -0700</creation_ts>
          <short_desc>SerializedScriptValue needs to use a flat storage mechanism</short_desc>
          <delta_ts>2010-09-06 14:29:29 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274450</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-05 12:19:17 -0700</bug_when>
    <thetext>SerializedScriptValue needs to use a flat storage mechanism</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274455</commentid>
    <comment_count>1</comment_count>
      <attachid>66601</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-05 16:24:52 -0700</bug_when>
    <thetext>Created attachment 66601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274457</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-05 16:42:21 -0700</bug_when>
    <thetext>Attachment 66601 did not build on mac:
Build output: http://queues.webkit.org/results/3937205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274460</commentid>
    <comment_count>3</comment_count>
      <attachid>66602</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-05 17:34:18 -0700</bug_when>
    <thetext>Created attachment 66602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274465</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-05 18:47:56 -0700</bug_when>
    <thetext>Attachment 66601 did not build on win:
Build output: http://queues.webkit.org/results/3940206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274466</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-05 20:03:16 -0700</bug_when>
    <thetext>Attachment 66602 did not build on win:
Build output: http://queues.webkit.org/results/3938219</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274780</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-06 14:29:29 -0700</bug_when>
    <thetext>Committed r66850: &lt;http://trac.webkit.org/changeset/66850&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66601</attachid>
            <date>2010-09-05 16:24:52 -0700</date>
            <delta_ts>2010-09-05 17:34:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45244-20100905162451.patch</filename>
            <type>text/plain</type>
            <size>85046</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkZjBlMmNlNGFjMmM2OGQwZTUwNjJiOTY3ODU3YjU3ZTM5NTg3MmIwLi5m
MmRhYjVjYjc0MWZjY2VkMGY0NzgyZDc5Y2EzNzc5Yzg5OTFlNTk1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDktMDUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgbmVlZHMgdG8gdXNlIGEgZmxhdCBzdG9yYWdlIG1lY2hhbmlzbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNDQKKworICAg
ICAgICBFeHBvcnQgSlNBcnJheTo6cHV0CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6
CisKIDIwMTAtMDktMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
aW5kZXggMzBmNWFhODZmMWFjNTI2ZTdlMjViMTMwNDQ4YWE1MmNmNzUwODhhYy4uN2RmOTM3NjUw
MTExNzEzNTk3YjllNjFkMDM4YjQyYjAyZGI4ZDVhYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cApAQCAtMjQxLDYgKzI0MSw3IEBAIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0M2UGFyc2VyNXBhcnNlRVBOU18xMkpTR2xvYmFsRGF0YUVQaVBOU183VVN0cmlu
Z0UKIF9fWk4zSlNDN0pTQXJyYXkxMm1hcmtDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4z
SlNDN0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgorX19aTjNKU0M3SlNBcnJheTE4Z2V0T3du
UHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pT
QzdKU0FycmF5NGluZm9FCiBfX1pOM0pTQzdKU0FycmF5OXNldExlbmd0aEVqCiBfX1pOM0pTQzdK
U0FycmF5QzFFTjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA1OGU1NjBhNGI3OTBiOWYwNTU1OTU1Yjc2ZGU4OTNhNWVhNTFmMmMwLi42MjQwMTg5MmQxNWJi
ZDQ5MjQ0N2EyNmM5OGRhODMzMTcwYmNlNTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAt
MDktMDUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbmVl
ZHMgdG8gdXNlIGEgZmxhdCBzdG9yYWdlIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNDQKKworICAgICAgICBBZGQgYSBmZXcgbW9y
ZSB0ZXN0IGNhc2VzIHRvIGNvdmVyIHRoZSBuZXcgYnJhbmNoZXMgaW4gdGhlCisgICAgICAgIHJl
d3JpdHRlbiBzZXJpYWxpemF0aW9uIGxvZ2ljLgorCisgICAgICAgICogZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sOgorCiAyMDEwLTA5LTA1ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNjY4MDEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtZXhwZWN0ZWQu
dHh0CmluZGV4IDU0ZjE5NDAzZTU3MWFlYjk1N2YxYTJkMjVhZTIyMWQwNzY5OWZiNmQuLmVkYjAx
MjQ0MTFhN2M2MWMxMDNiZWQ4ZTM2N2Y1NzQ4ZTdmMzQ0ZTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xv
bmUtZXhwZWN0ZWQudHh0CkBAIC0xMCw3ICsxMCwxNCBAQCBQQVNTOiBldmVudERhdGEgaXMgdHJ1
ZSBvZiB0eXBlIGJvb2xlYW4KIFBBU1M6IGV2ZW50RGF0YSBpcyAxIG9mIHR5cGUgc3RyaW5nCiBQ
QVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CiBQQVNTOiBl
dmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERh
dGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMg
W29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVj
dCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmpl
Y3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9m
IHR5cGUgb2JqZWN0CiBQQVNTOiBldmVudERhdGEgaXMgb2YgdHlwZSBvYmplY3QKK1BBU1M6IGV2
ZW50RGF0YSBpcyBhLGEsYixhLGIgb2YgdHlwZSBvYmplY3QKK1BBU1M6IGV2ZW50RGF0YSBpcyBh
LGEsYixbb2JqZWN0IE9iamVjdF0gb2YgdHlwZSBvYmplY3QKIFBBU1M6IGV2ZW50RGF0YSBpcyAx
LDIsMyBvZiB0eXBlIG9iamVjdAogUEFTUzogZXZlbnREYXRhIGlzICwsMSBvZiB0eXBlIG9iamVj
dAogUEFTUzogZXZlbnREYXRhIGlzIG51bGwgb2YgdHlwZSBvYmplY3QKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUuaHRt
bAppbmRleCBlNzU1ZjRhYzRkNmRiY2E3YTFjMTZhYWNkYTU0ZTQ1M2NjYjU4NzNmLi42Y2IzMzdk
ZjFlODQyMjU3MzExNWZiMzY4NmYyMTBjNmJjNDM5OGY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCkBA
IC0xMjQsNyArMTI0LDE0IEBAIHRyeVBvc3RNZXNzYWdlKCd0cnVlJyk7CiB0cnlQb3N0TWVzc2Fn
ZSgnIjEiJyk7CiB0cnlQb3N0TWVzc2FnZSgnKHt9KScpOwogdHJ5UG9zdE1lc3NhZ2UoJyh7YTox
fSknKTsKK3RyeVBvc3RNZXNzYWdlKCcoe2E6ImEifSknKTsKK3RyeVBvc3RNZXNzYWdlKCcoe2I6
ImEiLCBhOiJiIn0pJyk7Cit0cnlQb3N0TWVzc2FnZSgnKHthOiIifSknKTsKK3RyeVBvc3RNZXNz
YWdlKCcoe2E6MH0pJyk7Cit0cnlQb3N0TWVzc2FnZSgnKHthOjF9KScpOwogdHJ5UG9zdE1lc3Nh
Z2UoJ1tdJyk7Cit0cnlQb3N0TWVzc2FnZSgnWyJhIiwgImEiLCAiYiIsICJhIiwgImIiXScpOwor
dHJ5UG9zdE1lc3NhZ2UoJ1siYSIsICJhIiwgImIiLCB7YToiYiIsIGI6ImEifV0nKTsKIHRyeVBv
c3RNZXNzYWdlKCdbMSwyLDNdJyk7CiB0cnlQb3N0TWVzc2FnZSgnWywsMV0nKTsKIHRyeVBvc3RN
ZXNzYWdlKCcoZnVuY3Rpb24oKXt9KScsIGZhbHNlLCAnbnVsbCcpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNzNlYmNlY2M2YzMwN2Yx
OGE0NDlmZmIzYmNmMGU5ZmRmYmZlMjc4Li5kMmQwYmMzM2UyMzRiMjhkMjFlZjMwZDcwMzBiOGJk
YzlmYzVmMWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEwLTA5LTA1ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIG5lZWRzIHRvIHVzZSBhIGZsYXQgc3RvcmFnZSBt
ZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MjQ0CisKKyAgICAgICAgUmV3cml0ZSB0aGUgb2xkIHRyZWUgdG8gdHJlZSBzZXJpYWxpemF0
aW9uIGxvZ2ljIHRvIHVzZQorICAgICAgICBmbGF0IHN0b3JhZ2UuICBVbmZvcnR1bmF0ZWx5IHRo
aXMgYmFzaWNhbGx5IHJlcXVpcmVkIGEKKyAgICAgICAgY29tcGxldGUgcmV3cml0ZS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZUJhc2U6OkNsb25lQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZUJh
c2U6OnNob3VsZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZUJhc2U6OnRpY2tz
VW50aWxOZXh0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVCYXNlOjpkaWRUaW1lT3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6dGhyb3dTdGFja092ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6dGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZUJhc2U6OmZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxp
emVyOjpDbG9uZVNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVy
Ojppc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c3RhcnRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydEFycmF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lU2VyaWFsaXplcjo6Z2V0U3BhcnNlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVTZXJpYWxpemVyOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZVNlcmlhbGl6ZXI6OmR1bXBJbW1lZGlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjpkdW1wU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6
ZHVtcElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlTGl0dGxlRW5kaWFu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6d3JpdGVTdHJpbmdJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpDbG9uZURlc2VyaWFsaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6dGhyb3dWYWxpZGF0aW9uRXJyb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmlzVmFsaWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRMaXR0bGVFbmRpYW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmdJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNl
cmlhbGl6ZXI6OnJlYWRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OnB1dFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFk
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6flNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgor
ICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YSk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
V29ya2VyQ29udGV4dFRhc2s6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6TWVzc2FnZVdvcmtlclRhc2spOgorCiAyMDEwLTA5
LTA1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IGNhMThlYzBhYjgwMjUwZDBmMzFiMGJmYjYxNjI0NmQwMDdiMmJl
NDcuLjU2YWEyODhkMGUwYzFiYjA1MThjNjE5YzQ3NTA3OTZhMWZjM2E0ZTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCiAjaW5jbHVk
ZSAiSlNJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxs
aW1pdHM+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtNDcs
MzIzICs0OSw1MjYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgQ1BVKEJJR19FTkRJQU4pIHx8IENQ
VShNSURETEVfRU5ESUFOKQorI2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAwCisjZWxzZQor
I2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAxCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTZXJpYWxpemVkT2JqZWN0IDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWRE
YXRhCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4g
UHJvcGVydHlOYW1lTGlzdDsKLSAgICB0eXBlZGVmIFZlY3RvcjxTZXJpYWxpemVkU2NyaXB0VmFs
dWVEYXRhPiBWYWx1ZUxpc3Q7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUZpbHRlclJl
Y3Vyc2lvbiA9IDQwMDAwOwogCi0gICAgdm9pZCBzZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX25hbWVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkpOwotICAgICAg
ICBtX25hbWVzLmFwcGVuZChpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKS5jcm9zc1Ro
cmVhZFN0cmluZygpLmltcGwoKSk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0g
ICAgfQorZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBB
cnJheVN0YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCisgICAgT2JqZWN0U3Rh
cnRTdGF0ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIgfTsK
IAotICAgIFByb3BlcnR5TmFtZUxpc3QmIG5hbWVzKCkgeyByZXR1cm4gbV9uYW1lczsgfQorLy8g
VGhlc2UgY2FuJ3QgYmUgcmVvcmRlcmVkLCBhbmQgYW55IG5ldyB0eXBlcyBtdXN0IGJlIGFkZGVk
IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK2VudW0gU2VyaWFsaXphdGlvblRhZyB7CisgICAgQXJy
YXlUYWcgPSAxLAorICAgIE9iamVjdFRhZyA9IDIsCisgICAgVW5kZWZpbmVkVGFnID0gMywKKyAg
ICBOdWxsVGFnID0gNCwKKyAgICBJbnRUYWcgPSA1LAorICAgIFplcm9UYWcgPSA2LAorICAgIE9u
ZVRhZyA9IDcsCisgICAgRmFsc2VUYWcgPSA4LAorICAgIFRydWVUYWcgPSA5LAorICAgIERvdWJs
ZVRhZyA9IDEwLAorICAgIERhdGVUYWcgPSAxMSwKKyAgICBGaWxlVGFnID0gMTIsCisgICAgRmls
ZUxpc3RUYWcgPSAxMywKKyAgICBJbWFnZURhdGFUYWcgPSAxNCwKKyAgICBCbG9iVGFnID0gMTUs
CisgICAgU3RyaW5nVGFnID0gMTYsCisgICAgRW1wdHlTdHJpbmdUYWcgPSAxNywKKyAgICBFcnJv
clRhZyA9IDI1NQorfTsKIAotICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1
ZXM7IH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRPYmplY3Q+IGNyZWF0ZSgp
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IEN1cnJlbnRWZXJzaW9uID0gMTsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgVGVybWluYXRvclRhZyA9IDB4RkZGRkZGRkY7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IFN0cmluZ1Bvb2xUYWcgPSAweEZGRkZGRkZFOworCisvKgorICogT2Jq
ZWN0IHNlcmlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5n
IGdyYW1tYXIsIGFsbCB0YWdzCisgKiBhcmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgdWludDhfdC4K
KyAqCisgKiBJbmRleFR5cGUgKHVzZWQgZm9yIFN0cmluZ0RhdGEncyBjb25zdGFudCBwb29sKSBp
cyB0aGUgc2l6ZWQgdW5zaWduZWQgaW50ZWdlciB0eXBlCisgKiByZXF1aXJlZCB0byByZXByZXNl
bnQgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlIGNvbnN0YW50IHBvb2wuCisgKgorICogU2VyaWFs
aXplZFZhbHVlIDotIDxDdXJyZW50VmVyc2lvbjp1aW50MzJfdD4gVmFsdWUKKyAqIFZhbHVlIDot
IEFycmF5IHwgT2JqZWN0IHwgVGVybWluYWwKKyAqCisgKiBBcnJheSA6LQorICogICAgIEFycmF5
VGFnIDxsZW5ndGg6dWludDMyX3Q+KDxpbmRleDp1aW50MzJfdD48dmFsdWU6VmFsdWU+KSogVGVy
bWluYXRvclRhZworICoKKyAqIE9iamVjdCA6LQorICogICAgIE9iamVjdFRhZyAoPG5hbWU6U3Ry
aW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZworICoKKyAqIFRlcm1pbmFsIDot
CisgKiAgICAgIFVuZGVmaW5lZFRhZworICogICAgfCBOdWxsVGFnCisgKiAgICB8IEludFRhZyA8
dmFsdWU6aW50MzJfdD4KKyAqICAgIHwgWmVyb1RhZworICogICAgfCBPbmVUYWcKKyAqICAgIHwg
RG91YmxlVGFnIDx2YWx1ZTpkb3VibGU+CisgKiAgICB8IERhdGVUYWcgPHZhbHVlOmRvdWJsZT4K
KyAqICAgIHwgU3RyaW5nCisgKiAgICB8IEVtcHR5U3RyaW5nVGFnCisgKiAgICB8IEZpbGUKKyAq
ICAgIHwgRmlsZUxpc3QKKyAqICAgIHwgSW1hZ2VEYXRhCisgKiAgICB8IEJsb2IKKyAqCisgKiBT
dHJpbmcgOi0KKyAqICAgICAgRW1wdHlTdHJpbmdUYWcKKyAqICAgICAgU3RyaW5nVGFnIFN0cmlu
Z0RhdGEKKyAqCisgKiBTdHJpbmdEYXRhIDotCisgKiAgICAgIFN0cmluZ1Bvb2xUYWcgPGNwSW5k
ZXg6SW5kZXhUeXBlPgorICogICAgICAobm90IChUZXJtaW5hdG9yVGFnIHwgU3RyaW5nUG9vbFRh
ZykpPGxlbmd0aDp1aW50MzJfdD48Y2hhcmFjdGVyczpVQ2hhcntsZW5ndGh9PiAvLyBBZGRlZCB0
byBjb25zdGFudCBwb29sIHdoZW4gc2Vlbiwgc3RyaW5nIGxlbmd0aCAweEZGRkZGRkZGIGlzIGRp
c2FsbG93ZWQKKyAqCisgKiBGaWxlIDotCisgKiAgICBGaWxlVGFnIEZpbGVEYXRhCisgKgorICog
RmlsZURhdGEgOi0KKyAqICAgIDxwYXRoOlN0cmluZ0RhdGE+IDx1cmw6U3RyaW5nRGF0YT4gPHR5
cGU6U3RyaW5nRGF0YT4KKyAqCisgKiBGaWxlTGlzdCA6LQorICogICAgRmlsZUxpc3RUYWcgPGxl
bmd0aDp1aW50MzJfdD4oPGZpbGU6RmlsZURhdGE+KXtsZW5ndGh9CisgKgorICogSW1hZ2VEYXRh
IDotCisgKiAgICBJbWFnZURhdGFUYWcgPHdpZHRoOnVpbnQzMl90PjxoZWlnaHQ6dWludDMyX3Q+
PGxlbmd0aDp1aW50MzJfdD48ZGF0YTp1aW50OF90e2xlbmd0aH0+CisgKgorICogQmxvYiA6LQor
ICogICAgQmxvYlRhZyA8dXJsOlN0cmluZ0RhdGE+PHR5cGU6U3RyaW5nRGF0YT48c2l6ZTpsb25n
IGxvbmc+CisgKgorICovCisKK2NsYXNzIENsb25lQmFzZSB7Citwcm90ZWN0ZWQ6CisgICAgQ2xv
bmVCYXNlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgOiBtX2V4ZWMoZXhlYykKKyAgICAgICAg
LCBtX2ZhaWxlZChmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVvdXRDaGVja2VyKGV4ZWMtPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2VyaWFsaXplZE9iamVjdCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpCisgICAgYm9v
bCBzaG91bGRUZXJtaW5hdGUoKQogICAgIHsKLSAgICAgICAgbV9uYW1lcy5jbGVhcigpOwotICAg
ICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICByZXR1cm4gbV9leGVjLT5oYWRFeGNlcHRp
b24oKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgU2VyaWFsaXplZE9iamVjdCgpIHsgfQotICAg
IFByb3BlcnR5TmFtZUxpc3QgbV9uYW1lczsKLSAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7Ci19Owot
Ci1jbGFzcyBTZXJpYWxpemVkQXJyYXkgOiBwdWJsaWMgU2hhcmVkU2VyaWFsaXplZERhdGEKLXsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEs
IERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1bnNpZ25lZD4gPiBTcGFyc2VNYXA7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRJbmRl
eCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUp
CisgICAgdW5zaWduZWQgdGlja3NVbnRpbE5leHRDaGVjaygpCiAgICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX2xlbmd0aCk7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX2NvbXBhY3RTdG9y
YWdlLnNpemUoKSkKLSAgICAgICAgICAgIG1fY29tcGFjdFN0b3JhZ2UuYXBwZW5kKHZhbHVlKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zcGFyc2VTdG9yYWdlLnNldChpbmRleCwgdmFs
dWUpOworICAgICAgICByZXR1cm4gbV90aW1lb3V0Q2hlY2tlci50aWNrc1VudGlsTmV4dENoZWNr
KCk7CiAgICAgfQogCi0gICAgYm9vbCBjYW5Eb0Zhc3RSZWFkKHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIGJvb2wgZGlkVGltZU91dCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBt
X2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBpbmRleCA8IG1fY29tcGFjdFN0b3JhZ2Uuc2l6ZSgp
OworICAgICAgICByZXR1cm4gbV90aW1lb3V0Q2hlY2tlci5kaWRUaW1lT3V0KG1fZXhlYyk7CiAg
ICAgfQogCi0gICAgY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgZ2V0SW5kZXgodW5z
aWduZWQgaW5kZXgpCisgICAgdm9pZCB0aHJvd1N0YWNrT3ZlcmZsb3coKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgbV9jb21wYWN0U3RvcmFnZS5zaXplKCkpOwotICAgICAgICByZXR1
cm4gbV9jb21wYWN0U3RvcmFnZVtpbmRleF07CisgICAgICAgIHRocm93RXJyb3IobV9leGVjLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IobV9leGVjKSk7CiAgICAgfQogCi0gICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YSBnZXRTcGFyc2VJbmRleCh1bnNpZ25lZCBpbmRleCwgYm9vbCYgaGFz
SW5kZXgpCisgICAgdm9pZCB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9uKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCA+PSBtX2NvbXBhY3RTdG9yYWdlLnNpemUoKSk7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA8IG1fbGVuZ3RoKTsKLSAgICAgICAgU3BhcnNlTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9zcGFyc2VTdG9yYWdlLmZpbmQoaW5kZXgpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3Nw
YXJzZVN0b3JhZ2UuZW5kKCkpIHsKLSAgICAgICAgICAgIGhhc0luZGV4ID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGhhc0luZGV4ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSkpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0CisgICAgdm9pZCBmYWlsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xlbmd0
aDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1
ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkQXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgYm9vbCBtX2Zh
aWxlZDsKKyAgICBUaW1lb3V0Q2hlY2tlciBtX3RpbWVvdXRDaGVja2VyOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIG1fZ2NCdWZmZXI7Cit9OworCitjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBD
bG9uZUJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIHNlcmlhbGl6ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3Rvcjx1aW50OF90PiYgb3V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkQXJyYXkobGVuZ3RoKSk7CisgICAgICAg
IENsb25lU2VyaWFsaXplciBzZXJpYWxpemVyKGV4ZWMsIG91dCk7CisgICAgICAgIHJldHVybiBz
ZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpCisg
ICAgc3RhdGljIGJvb2wgc2VyaWFsaXplKFN0cmluZyBzLCBWZWN0b3I8dWludDhfdD4mIG91dCkK
ICAgICB7Ci0gICAgICAgIG1fY29tcGFjdFN0b3JhZ2UuY2xlYXIoKTsKLSAgICAgICAgbV9zcGFy
c2VTdG9yYWdlLmNsZWFyKCk7Ci0gICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgd3JpdGVM
aXR0bGVFbmRpYW4ob3V0LCBDdXJyZW50VmVyc2lvbik7CisgICAgICAgIGlmIChzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBFbXB0eVN0
cmluZ1RhZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB3
cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90PihvdXQsIFN0cmluZ1RhZyk7CisgICAgICAgIHdyaXRl
TGl0dGxlRW5kaWFuKG91dCwgcy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiB3cml0ZUxpdHRs
ZUVuZGlhbihvdXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOwogICAgIH0K
KwogcHJpdmF0ZToKLSAgICBTZXJpYWxpemVkQXJyYXkodW5zaWduZWQgbGVuZ3RoKQotICAgICAg
ICA6IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVj
LCBWZWN0b3I8dWludDhfdD4mIG91dCkKKyAgICAgICAgOiBDbG9uZUJhc2UoZXhlYykKKyAgICAg
ICAgLCBtX2J1ZmZlcihvdXQpCisgICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoZXhlYywgVVN0
cmluZygiIiwgMCkpCiAgICAgeworICAgICAgICB3cml0ZShDdXJyZW50VmVyc2lvbik7CiAgICAg
fQogCi0gICAgVmVjdG9yPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE+IG1fY29tcGFjdFN0b3Jh
Z2U7Ci0gICAgU3BhcnNlTWFwIG1fc3BhcnNlU3RvcmFnZTsKLSAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKLX07CisgICAgYm9vbCBzZXJpYWxpemUoSlNWYWx1ZSBpbik7CiAKLWNsYXNzIFNlcmlhbGl6
ZWRCbG9iIDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkQmxvYj4gY3JlYXRlKGNvbnN0IEJsb2IqIGJsb2IpCisg
ICAgYm9vbCBpc0FycmF5KEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRCbG9iKGJsb2IpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgICAgICByZXR1cm4gaXNKU0FycmF5KCZtX2V4ZWMt
Pmdsb2JhbERhdGEoKSwgb2JqZWN0KSB8fCBvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjppbmZv
KTsKKyAgICB9CisKKyAgICBib29sIHN0YXJ0T2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpCisgICAg
eworICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KKyAgICAgICAgaWYgKCFtX2N5Y2xlRGV0ZWN0
b3IuYWRkKG9iamVjdCkuc2Vjb25kKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKG1fZXhlYywg
Y3JlYXRlVHlwZUVycm9yKG1fZXhlYywgIkNhbm5vdCBwb3N0IGN5Y2xpYyBzdHJ1Y3R1cmVzLiIp
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZChvYmplY3QpOworICAgICAgICB3cml0ZShPYmplY3RUYWcpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAKLXByaXZhdGU6Ci0gICAgU2VyaWFsaXplZEJsb2IoY29uc3QgQmxvYiogYmxvYikKLSAg
ICAgICAgOiBtX3VybChibG9iLT51cmwoKS5jb3B5KCkpCi0gICAgICAgICwgbV90eXBlKGJsb2It
PnR5cGUoKS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICAgICAsIG1fc2l6ZShibG9iLT5zaXpl
KCkpCisgICAgYm9vbCBzdGFydEFycmF5KEpTQXJyYXkqIGFycmF5KQogICAgIHsKKyAgICAgICAg
Ly8gQ3ljbGUgZGV0ZWN0aW9uCisgICAgICAgIGlmICghbV9jeWNsZURldGVjdG9yLmFkZChhcnJh
eSkuc2Vjb25kKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKG1fZXhlYywgY3JlYXRlVHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBwb3N0IGN5Y2xpYyBzdHJ1Y3R1cmVzLiIpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChh
cnJheSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKyAgICAg
ICAgd3JpdGUoQXJyYXlUYWcpOworICAgICAgICB3cml0ZShsZW5ndGgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3R5cGU7Ci0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIG1fc2l6ZTsKLX07CisgICAgdm9pZCBlbmRPYmplY3QoSlNP
YmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIHdyaXRlKFRlcm1pbmF0b3JUYWcpOworICAg
ICAgICBtX2N5Y2xlRGV0ZWN0b3IucmVtb3ZlKG9iamVjdCk7CisgICAgICAgIG1fZ2NCdWZmZXIu
cmVtb3ZlTGFzdCgpOworICAgIH0KIAotY2xhc3MgU2VyaWFsaXplZEZpbGUgOiBwdWJsaWMgU2hh
cmVkU2VyaWFsaXplZERhdGEgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRGaWxlPiBjcmVhdGUoY29uc3QgRmlsZSogZmlsZSkKKyAgICBKU1ZhbHVlIGdldFNwYXJz
ZUluZGV4KEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGJvb2wmIGhhc0lu
ZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkRmlsZShm
aWxlKSk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGFycmF5KTsKKyAgICAgICAgaWYgKGlz
SlNBcnJheSgmbV9leGVjLT5nbG9iYWxEYXRhKCksIGFycmF5KSkgeworICAgICAgICAgICAgaWYg
KGFycmF5LT5KU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QobV9leGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKSB7CisgICAgICAgICAgICAgICAgaGFzSW5kZXggPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhcnJheS0+Z2V0T3duUHJvcGVydHlTbG90KG1fZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAgaGFzSW5kZXggPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUobV9leGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB9CisgICAgICAgIGhhc0luZGV4ID0gZmFsc2U7CisgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEpT
VmFsdWUgZ2V0UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKKyAg
ICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KG1fZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAKLXByaXZhdGU6Ci0g
ICAgU2VyaWFsaXplZEZpbGUoY29uc3QgRmlsZSogZmlsZSkKLSAgICAgICAgOiBtX3BhdGgoZmls
ZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgICAgICwgbV91cmwoZmlsZS0+dXJs
KCkuY29weSgpKQotICAgICAgICAsIG1fdHlwZShmaWxlLT50eXBlKCkuY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICB2b2lkIGR1bXBJbW1lZGlhdGUoSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHdyaXRlKE51bGxUYWcpOworICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgd3JpdGUoVW5k
ZWZpbmVkVGFnKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWUu
YXNJbnQzMigpKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShaZXJvVGFnKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5hc0ludDMyKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoT25lVGFnKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoSW50VGFnKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHZhbHVlLmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGUoRG91YmxlVGFnKTsKKyAgICAg
ICAgICAgICAgICB3cml0ZSh2YWx1ZS5hc0RvdWJsZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgaWYgKHZhbHVl
LmlzVHJ1ZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKFRydWVUYWcpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHdyaXRlKEZhbHNlVGFnKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgS1VSTCBtX3VybDsKLSAgICBTdHJpbmcgbV90eXBl
OwotfTsKKyAgICB2b2lkIGR1bXBTdHJpbmcoVVN0cmluZyBzdHIpCisgICAgeworICAgICAgICBp
ZiAoc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHdyaXRlKEVtcHR5U3RyaW5nVGFnKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB3cml0ZShTdHJpbmdUYWcpOworICAgICAgICAgICAg
d3JpdGUoc3RyKTsKKyAgICAgICAgfQorICAgIH0KIAotY2xhc3MgU2VyaWFsaXplZEZpbGVMaXN0
IDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgRmls
ZURhdGEgewotICAgICAgICBTdHJpbmcgcGF0aDsKLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAg
IFN0cmluZyB0eXBlOwotICAgIH07CisgICAgYm9vbCBkdW1wSWZUZXJtaW5hbChKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ZHVtcEltbWVkaWF0ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBVU3RyaW5n
IHN0ciA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9leGVjKTsKKyAgICAgICAgICAgIGR1bXBT
dHJpbmcoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIHdyaXRlKERvdWJsZVRhZyk7
CisgICAgICAgICAgICB3cml0ZSh2YWx1ZS51bmNoZWNrZWRHZXROdW1iZXIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpIHsK
KyAgICAgICAgICAgIHdyaXRlKERhdGVUYWcpOworICAgICAgICAgICAgd3JpdGUoYXNEYXRlSW5z
dGFuY2UodmFsdWUpLT5pbnRlcm5hbE51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTRmlsZTo6c19pbmZvKSkgeworICAgICAgICAgICAgICAgIHdyaXRlKEZp
bGVUYWcpOworICAgICAgICAgICAgICAgIHdyaXRlKHRvRmlsZShvYmopKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvYmotPmlu
aGVyaXRzKCZKU0ZpbGVMaXN0OjpzX2luZm8pKSB7CisgICAgICAgICAgICAgICAgRmlsZUxpc3Qq
IGxpc3QgPSB0b0ZpbGVMaXN0KG9iaik7CisgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RU
YWcpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgIHdyaXRlKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShs
aXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpIHsKKyAg
ICAgICAgICAgICAgICB3cml0ZShCbG9iVGFnKTsKKyAgICAgICAgICAgICAgICBCbG9iKiBibG9i
ID0gdG9CbG9iKG9iaik7CisgICAgICAgICAgICAgICAgd3JpdGUoYmxvYi0+dXJsKCkpOworICAg
ICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgd3JpdGUo
YmxvYi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0ltYWdlRGF0YTo6c19pbmZvKSkg
eworICAgICAgICAgICAgICAgIEltYWdlRGF0YSogZGF0YSA9IHRvSW1hZ2VEYXRhKG9iaik7Cisg
ICAgICAgICAgICAgICAgd3JpdGUoSW1hZ2VEYXRhVGFnKTsKKyAgICAgICAgICAgICAgICB3cml0
ZShkYXRhLT53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSwgZGF0YS0+ZGF0YSgp
LT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkRmlsZUxpc3Q+IGNyZWF0ZShjb25z
dCBGaWxlTGlzdCogbGlzdCkKKyAgICAgICAgICAgIENhbGxEYXRhIHVudXNlZERhdGE7CisgICAg
ICAgICAgICBpZiAoZ2V0Q2FsbERhdGEodmFsdWUsIHVudXNlZERhdGEpID09IENhbGxUeXBlTm9u
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8g
QW55IG90aGVyIHR5cGVzIGFyZSBleHBlY3RlZCB0byBzZXJpYWxpemUgYXMgbnVsbC4KKyAgICAg
ICAgd3JpdGUoTnVsbFRhZyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZv
aWQgd3JpdGUoU2VyaWFsaXphdGlvblRhZyB0YWcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRGaWxlTGlzdChsaXN0KSk7CisgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuPHVpbnQ4X3Q+KG1fYnVmZmVyLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0YWcpKTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVzLnNpemUo
KTsgfQotICAgIGNvbnN0IEZpbGVEYXRhJiBpdGVtKHVuc2lnbmVkIGlkeCkgeyByZXR1cm4gbV9m
aWxlc1tpZHhdOyB9CisgICAgdm9pZCB3cml0ZSh1aW50OF90IGMpCisgICAgeworICAgICAgICB3
cml0ZUxpdHRsZUVuZGlhbihtX2J1ZmZlciwgYyk7CisgICAgfQogCi1wcml2YXRlOgotICAgIFNl
cmlhbGl6ZWRGaWxlTGlzdChjb25zdCBGaWxlTGlzdCogbGlzdCkKKyNpZiBBU1NVTUVfTElUVExF
X0VORElBTgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCB3cml0ZUxpdHRs
ZUVuZGlhbihWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICBtX2ZpbGVzLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIEZpbGUqIGZpbGUgPSBsaXN0LT5pdGVtKGkpOwotICAg
ICAgICAgICAgRmlsZURhdGEgZmlsZURhdGE7Ci0gICAgICAgICAgICBmaWxlRGF0YS5wYXRoID0g
ZmlsZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBmaWxlRGF0YS51
cmwgPSBmaWxlLT51cmwoKS5jb3B5KCk7Ci0gICAgICAgICAgICBmaWxlRGF0YS50eXBlID0gZmls
ZS0+dHlwZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2ZpbGVzLmFwcGVu
ZChmaWxlRGF0YSk7CisgICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQodmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXIuYXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSkpOwor
ICAgIH0KKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRl
TGl0dGxlRW5kaWFuKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihUKTsgaSsrKSB7CisgICAgICAg
ICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAgICAgICB2YWx1ZSA+Pj0g
ODsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZgogCi0gICAgVmVjdG9yPEZpbGVEYXRhPiBtX2Zp
bGVzOwotfTsKLQotY2xhc3MgU2VyaWFsaXplZEltYWdlRGF0YSA6IHB1YmxpYyBTaGFyZWRTZXJp
YWxpemVkRGF0YSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZElt
YWdlRGF0YT4gY3JlYXRlKGNvbnN0IEltYWdlRGF0YSogaW1hZ2VEYXRhKQorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCB3cml0ZUxpdHRsZUVuZGlhbihWZWN0b3I8dWludDhf
dD4mIGJ1ZmZlciwgY29uc3QgVCogdmFsdWVzLCB1aW50MzJfdCBsZW5ndGgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRJbWFnZURhdGEoaW1hZ2VEYXRhKSk7
CisgICAgICAgIGlmIChsZW5ndGggPiBudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIC8g
c2l6ZW9mKFQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgQVNTVU1FX0xJVFRM
RV9FTkRJQU4KKyAgICAgICAgYnVmZmVyLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPih2YWx1ZXMpLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2Vsc2UKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBUIHZhbHVl
ID0gdmFsdWVzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNpemVv
ZihUKTsgaisrKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDx1
aW50OF90Pih2YWx1ZSAmIDB4RkYpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gODsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
LSAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotICAgIFdU
Rjo6Qnl0ZUFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFNlcmlhbGl6ZWRJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRhKiBpbWFnZURh
dGEpCi0gICAgICAgIDogbV93aWR0aChpbWFnZURhdGEtPndpZHRoKCkpCi0gICAgICAgICwgbV9o
ZWlnaHQoaW1hZ2VEYXRhLT5oZWlnaHQoKSkKKworICAgIHZvaWQgd3JpdGUodWludDMyX3QgaSkK
ICAgICB7Ci0gICAgICAgIFdURjo6Qnl0ZUFycmF5KiBhcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7Ci0gICAgICAgIG1fc3RvcmFnZSA9IFdURjo6Qnl0ZUFycmF5OjpjcmVhdGUoYXJy
YXktPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KG1fc3RvcmFnZS0+ZGF0YSgpLCBhcnJheS0+
ZGF0YSgpLCBhcnJheS0+bGVuZ3RoKCkpOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihtX2J1
ZmZlciwgaSk7CiAgICAgfQotICAgIHVuc2lnbmVkIG1fd2lkdGg7Ci0gICAgdW5zaWduZWQgbV9o
ZWlnaHQ7Ci0gICAgUmVmUHRyPFdURjo6Qnl0ZUFycmF5PiBtX3N0b3JhZ2U7Ci19OwogCi1TZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKFJlZlB0cjxT
ZXJpYWxpemVkT2JqZWN0PiBkYXRhKQotICAgIDogbV90eXBlKE9iamVjdFR5cGUpCi0gICAgLCBt
X3NoYXJlZERhdGEoZGF0YSkKLXsKLX0KKyAgICB2b2lkIHdyaXRlKGRvdWJsZSBkKQorICAgIHsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgZG91YmxlIGQ7CisgICAgICAgICAgICBpbnQ2
NF90IGk7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5kID0gZDsKKyAgICAgICAgd3JpdGVMaXR0
bGVFbmRpYW4obV9idWZmZXIsIHUuaSk7CisgICAgfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWVE
YXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+IGRh
dGEpCi0gICAgOiBtX3R5cGUoQXJyYXlUeXBlKQotICAgICwgbV9zaGFyZWREYXRhKGRhdGEpCi17
Ci19CisgICAgdm9pZCB3cml0ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7CisgICAgICAg
IHdyaXRlTGl0dGxlRW5kaWFuKG1fYnVmZmVyLCBpKTsKKyAgICB9CisgICAgdm9pZCB3cml0ZShV
Q2hhciBjaCkKKyAgICB7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG1fYnVmZmVyLCBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oY2gpKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0KQot
ICAgIDogbV90eXBlKEZpbGVMaXN0VHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0YShTZXJpYWxpemVk
RmlsZUxpc3Q6OmNyZWF0ZShmaWxlTGlzdCkpCi17Ci19CisgICAgdm9pZCB3cml0ZVN0cmluZ0lu
ZGV4KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBpZiAobV9jb25zdGFudFBvb2wuc2l6ZSgp
IDw9IDB4RkYpCisgICAgICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpKSk7Cisg
ICAgICAgIGVsc2UgaWYgKG1fY29uc3RhbnRQb29sLnNpemUoKSA8PSAweEZGRkYpCisgICAgICAg
ICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50MTZfdD4oaSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgIH0KIAotU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBJbWFn
ZURhdGEqIGltYWdlRGF0YSkKLSAgICA6IG1fdHlwZShJbWFnZURhdGFUeXBlKQotICAgICwgbV9z
aGFyZWREYXRhKFNlcmlhbGl6ZWRJbWFnZURhdGE6OmNyZWF0ZShpbWFnZURhdGEpKQotewotfQor
ICAgIHZvaWQgd3JpdGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgeworICAgICAgICBV
U3RyaW5nIHN0ciA9IGlkZW50LnVzdHJpbmcoKTsKKyAgICAgICAgcGFpcjxDb25zdGFudFBvb2w6
Oml0ZXJhdG9yLCBib29sPiBpdGVyID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBsKCksIG1f
Y29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGlmICghaXRlci5zZWNvbmQpIHsKKyAgICAg
ICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xUYWcpOworICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRl
eChpdGVyLmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29u
c3QgQmxvYiogYmxvYikKLSAgICA6IG1fdHlwZShCbG9iVHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0
YShTZXJpYWxpemVkQmxvYjo6Y3JlYXRlKGJsb2IpKQotewotfQorICAgICAgICAvLyBUaGlzIGNv
bmRpdGlvbiBpcyB1bmxpa2VseSB0byBoYXBwZW4gYXMgdGhleSB3b3VsZCBpbXBseSBhbiB+OGdi
CisgICAgICAgIC8vIHN0cmluZyBidXQgd2Ugc2hvdWxkIGd1YXJkIGFnYWluc3QgaXQgYW55d2F5
CisgICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gU3RyaW5nUG9vbFRhZykgeworICAgICAgICAg
ICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZSogZmls
ZSkKLSAgICA6IG1fdHlwZShGaWxlVHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0YShTZXJpYWxpemVk
RmlsZTo6Y3JlYXRlKGZpbGUpKQotewotfQorICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IG92ZXJm
bG93CisgICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPiAobnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSAtIHNpemVvZih1aW50MzJfdCkpIC8gc2l6ZW9mKFVDaGFyKSkgeworICAgICAgICAg
ICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLVNlcmlhbGl6ZWRB
cnJheSogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzQXJyYXkoKQotewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTZXJpYWxpemVkQXJyYXkqPih0aGlzKTsKLX0KKyAgICAgICAgd3JpdGVMaXR0bGVF
bmRpYW48dWludDMyX3Q+KG1fYnVmZmVyLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZiAoIXdy
aXRlTGl0dGxlRW5kaWFuPHVpbnQxNl90PihtX2J1ZmZlciwgc3RyLmNoYXJhY3RlcnMoKSwgc3Ry
Lmxlbmd0aCgpKSkKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRPYmpl
Y3QqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc09iamVjdCgpCi17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNlcmlhbGl6ZWRPYmplY3QqPih0aGlzKTsKLX0KKyAgICB2b2lkIHdyaXRlKGNvbnN0
IFVTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAg
ICAgICB3cml0ZShtX2VtcHR5SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHdyaXRlKElkZW50aWZpZXIobV9leGVjLCBzdHIpKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRCbG9i
KiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNCbG9iKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U2VyaWFsaXplZEJsb2IqPih0aGlzKTsKLX0KKyAgICB2b2lkIHdyaXRlKGNvbnN0IFN0cmlu
ZyYgc3RyKQorICAgIHsKKyAgICAgICAgaWYgKHN0ci5pc0VtcHR5KCkpCisgICAgICAgICAgICB3
cml0ZShtX2VtcHR5SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdyaXRl
KElkZW50aWZpZXIobV9leGVjLCBzdHIuaW1wbCgpKSk7CisgICAgfQogCi1TZXJpYWxpemVkRmls
ZSogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzRmlsZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFNlcmlhbGl6ZWRGaWxlKj4odGhpcyk7Ci19CisgICAgdm9pZCB3cml0ZShjb25zdCBGaWxl
KiBmaWxlKQorICAgIHsKKyAgICAgICAgd3JpdGUoZmlsZS0+cGF0aCgpKTsKKyAgICAgICAgd3Jp
dGUoZmlsZS0+dXJsKCkpOworICAgICAgICB3cml0ZShmaWxlLT50eXBlKCkpOworICAgIH0KIAot
U2VyaWFsaXplZEZpbGVMaXN0KiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNGaWxlTGlzdCgpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRGaWxlTGlzdCo+KHRoaXMpOwotfQor
ICAgIHZvaWQgd3JpdGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0aCk7CisgICAgfQogCi1TZXJp
YWxpemVkSW1hZ2VEYXRhKiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNJbWFnZURhdGEoKQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZXJpYWxpemVkSW1hZ2VEYXRhKj4odGhpcyk7Ci19Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBtX2J1ZmZlcjsKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gbV9j
eWNsZURldGVjdG9yOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVp
bnQzMl90LCBJZGVudGlmaWVyUmVwSGFzaD4gQ29uc3RhbnRQb29sOworICAgIENvbnN0YW50UG9v
bCBtX2NvbnN0YW50UG9vbDsKKyAgICBJZGVudGlmaWVyIG1fZW1wdHlJZGVudGlmaWVyOworfTsK
IAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAwMDsK
LWVudW0gV2Fsa2VyU3RhdGUgeyBTdGF0ZVVua25vd24sIEFycmF5U3RhcnRTdGF0ZSwgQXJyYXlT
dGFydFZpc2l0TWVtYmVyLCBBcnJheUVuZFZpc2l0TWVtYmVyLAotICAgIE9iamVjdFN0YXJ0U3Rh
dGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1iZXIsIE9iamVjdEVuZFZpc2l0TWVtYmVyIH07Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVHJlZVdhbGtlcj4gdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0VHlw
ZSB3YWxrKFRyZWVXYWxrZXImIGNvbnRleHQsIHR5cGVuYW1lIFRyZWVXYWxrZXI6OklucHV0VHlw
ZSBpbikKK2Jvb2wgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKIHsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6OklucHV0T2JqZWN0IElucHV0T2JqZWN0Owot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6SW5wdXRBcnJheSBJbnB1dEFycmF5Owot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0T2JqZWN0IE91dHB1dE9iamVj
dDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dEFycmF5IE91dHB1dEFy
cmF5OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6SW5wdXRUeXBlIElucHV0VHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6OlByb3BlcnR5TGlzdCBQcm9wZXJ0
eUxpc3Q7Ci0KICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3Rv
cjx1aW50MzJfdCwgMTY+IGxlbmd0aFN0YWNrOwotICAgIFZlY3RvcjxQcm9wZXJ0eUxpc3QsIDE2
PiBwcm9wZXJ0eVN0YWNrOwotICAgIFZlY3RvcjxJbnB1dE9iamVjdCwgMTY+IGlucHV0T2JqZWN0
U3RhY2s7Ci0gICAgVmVjdG9yPElucHV0QXJyYXksIDE2PiBpbnB1dEFycmF5U3RhY2s7Ci0gICAg
VmVjdG9yPE91dHB1dE9iamVjdCwgMTY+IG91dHB1dE9iamVjdFN0YWNrOwotICAgIFZlY3RvcjxP
dXRwdXRBcnJheSwgMTY+IG91dHB1dEFycmF5U3RhY2s7CisgICAgVmVjdG9yPFByb3BlcnR5TmFt
ZUFycmF5LCAxNj4gcHJvcGVydHlTdGFjazsKKyAgICBWZWN0b3I8SlNPYmplY3QqLCAxNj4gaW5w
dXRPYmplY3RTdGFjazsKKyAgICBWZWN0b3I8SlNBcnJheSosIDE2PiBpbnB1dEFycmF5U3RhY2s7
CiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0
ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKLSAgICBJbnB1dFR5cGUgaW5WYWx1ZSA9IGluOwotICAg
IE91dHB1dFR5cGUgb3V0VmFsdWUgPSBjb250ZXh0Lm51bGwoKTsKLQotICAgIHVuc2lnbmVkIHRp
Y2tDb3VudCA9IGNvbnRleHQudGlja3NVbnRpbE5leHRDaGVjaygpOworICAgIEpTVmFsdWUgaW5W
YWx1ZSA9IGluOworICAgIHVuc2lnbmVkIHRpY2tDb3VudCA9IHRpY2tzVW50aWxOZXh0Q2hlY2so
KTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgICAgICAg
ICBhcnJheVN0YXJ0U3RhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5U3RhcnRTdGF0ZTogewot
ICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmlzQXJyYXkoaW5WYWx1ZSkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0FycmF5KGluVmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAo
aW5wdXRPYmplY3RTdGFjay5zaXplKCkgKyBpbnB1dEFycmF5U3RhY2suc2l6ZSgpID4gbWF4aW11
bUZpbHRlclJlY3Vyc2lvbikgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRocm93U3Rh
Y2tPdmVyZmxvdygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7
CisgICAgICAgICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvdygpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgSW5wdXRBcnJheSBpbkFycmF5ID0gY29udGV4dC5hc0lucHV0QXJyYXkoaW5WYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29udGV4dC5sZW5ndGgoaW5BcnJheSk7
Ci0gICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBjb250ZXh0LmNyZWF0ZU91
dHB1dEFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnN0YXJ0QXJy
YXkoaW5BcnJheSwgb3V0QXJyYXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5udWxsKCk7CisgICAgICAgICAgICAgICAgSlNBcnJheSogaW5BcnJheSA9IGFzQXJyYXkoaW5W
YWx1ZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5BcnJheS0+bGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydEFycmF5KGluQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaW5wdXRBcnJheVN0YWNr
LmFwcGVuZChpbkFycmF5KTsKLSAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVN0YWNrLmFwcGVu
ZChvdXRBcnJheSk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAg
ICAgICAgICAgICAgbGVuZ3RoU3RhY2suYXBwZW5kKGxlbmd0aCk7CiAgICAgICAgICAgICAgICAg
Ly8gZmFsbHRocm91Z2gKQEAgLTM3MSwxMjAgKzU3NiwxMTQgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyZWVXYWxrZXI+IHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dFR5cGUgd2FsayhUcmVlV2Fs
a2VyJgogICAgICAgICAgICAgYXJyYXlTdGFydFZpc2l0TWVtYmVyOgogICAgICAgICAgICAgY2Fz
ZSBBcnJheVN0YXJ0VmlzaXRNZW1iZXI6IHsKICAgICAgICAgICAgICAgICBpZiAoIS0tdGlja0Nv
dW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmRpZFRpbWVPdXQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aHJvd0ludGVycnVwdGVkRXhjZXB0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChkaWRUaW1lT3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93SW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB0aWNrQ291bnQgPSBjb250ZXh0LnRpY2tzVW50aWxOZXh0Q2hlY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGlja0NvdW50ID0gdGlja3NVbnRpbE5leHRDaGVjaygpOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIElucHV0QXJyYXkgYXJyYXkgPSBpbnB1dEFycmF5U3Rh
Y2subGFzdCgpOworICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gaW5wdXRBcnJheVN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4U3RhY2su
bGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBsZW5ndGhTdGFjay5sYXN0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgSW5wdXRBcnJheSBpbkFycmF5ID0gaW5wdXRBcnJheVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBv
dXRwdXRBcnJheVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmRB
cnJheShpbkFycmF5LCBvdXRBcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlID0g
b3V0QXJyYXk7CisgICAgICAgICAgICAgICAgICAgIGVuZE9iamVjdChhcnJheSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlucHV0QXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dHB1dEFycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAg
ICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FuRG9GYXN0UmVhZChhcnJheSwg
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gY29udGV4dC5nZXRJbmRleChh
cnJheSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXgoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJ
bmRleCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gY29udGV4dC5nZXRT
cGFyc2VJbmRleChhcnJheSwgaW5kZXgsIGhhc0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
aW5WYWx1ZSA9IGdldFNwYXJzZUluZGV4KGFycmF5LCBpbmRleCwgaGFzSW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc0luZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0
YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zvcm1lZCA9IGNvbnRleHQu
Y29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVl
ID0gdHJhbnNmb3JtZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXRlU3RhY2suYXBwZW5kKEFycmF5RW5kVmlzaXRNZW1iZXIpOwotICAgICAgICAgICAg
ICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKKyAgICAgICAgICAgICAgICB3cml0ZShpbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKGR1bXBJZlRlcm1pbmFsKGluVmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4U3RhY2subGFzdCgpKys7CisgICAgICAgICAgICAgICAgICAgIGdv
dG8gYXJyYXlTdGFydFZpc2l0TWVtYmVyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAvLyBmYWxsdGhyb3VnaAorICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKEFy
cmF5RW5kVmlzaXRNZW1iZXIpOworICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBcnJheUVuZFZpc2l0TWVtYmVyOiB7Ci0g
ICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBvdXRwdXRBcnJheVN0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnB1dFByb3BlcnR5KG91dEFycmF5LCBpbmRl
eFN0YWNrLmxhc3QoKSwgb3V0VmFsdWUpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2subGFz
dCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RTdGFydFN0YXRlOgogICAgICAgICAgICAgY2Fz
ZSBPYmplY3RTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuaXNP
YmplY3QoaW5WYWx1ZSkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpblZhbHVlLmlzT2JqZWN0
KCkpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dE9iamVjdFN0YWNrLnNpemUoKSArIGlucHV0
QXJyYXlTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQudGhyb3dTdGFja092ZXJmbG93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSW5wdXRPYmplY3QgaW5PYmplY3QgPSBjb250ZXh0
LmFzSW5wdXRPYmplY3QoaW5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgT3V0cHV0T2JqZWN0IG91
dE9iamVjdCA9IGNvbnRleHQuY3JlYXRlT3V0cHV0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LnN0YXJ0T2JqZWN0KGluT2JqZWN0LCBvdXRPYmplY3QpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7CisgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGluT2JqZWN0ID0gYXNPYmplY3QoaW5WYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
dGFydE9iamVjdChpbk9iamVjdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG91dE9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5n
ZXRQcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBwcm9wZXJ0eVN0YWNrKTsKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAg
ICAgICAgICAgICBpbk9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX2V4ZWMsIHByb3BlcnR5
U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIGNh
c2UgT2JqZWN0U3RhcnRWaXNpdE1lbWJlcjogewogICAgICAgICAgICAgICAgIGlmICghLS10aWNr
Q291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZGlkVGltZU91dCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRocm93SW50ZXJydXB0ZWRFeGNlcHRp
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRpZFRpbWVPdXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHRpY2tDb3VudCA9IGNvbnRleHQudGlja3NVbnRpbE5leHRDaGVjaygpOworICAgICAgICAg
ICAgICAgICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgSW5wdXRPYmplY3Qgb2JqZWN0ID0gaW5wdXRPYmpl
Y3RTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0
T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gaW5k
ZXhTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlMaXN0JiBwcm9wZXJ0aWVz
ID0gcHJvcGVydHlTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnRpZXMgPSBwcm9wZXJ0eVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPT0gcHJvcGVydGllcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5w
dXRPYmplY3QgaW5PYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgT3V0cHV0T2JqZWN0IG91dE9iamVjdCA9IG91dHB1dE9iamVjdFN0YWNrLmxhc3Qo
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmRPYmplY3QoaW5PYmplY3QsIG91dE9i
amVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlID0gb3V0T2JqZWN0OworICAgICAg
ICAgICAgICAgICAgICBlbmRPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaW5w
dXRPYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dE9i
amVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaW5WYWx1ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0
aWVzW2luZGV4XSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRQcm9wZXJ0
eShvYmplY3QsIHByb3BlcnRpZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxk
VGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgICAgIGlmICghaW5WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0
eSB3YXMgcmVtb3ZlZCBkdXJpbmcgc2VyaWFsaXNhdGlvbgorICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmxhc3QoKSsrOworICAgICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0
VmlzaXRNZW1iZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyaXRlKHBy
b3BlcnRpZXNbaW5kZXhdKTsKIAotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnNob3VsZFRl
cm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zv
cm1lZCA9IGNvbnRleHQuY29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgICAgIG91dFZhbHVlID0gdHJhbnNmb3JtZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFkdW1wSWZUZXJtaW5hbChpblZhbHVlKSkgewogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBPYmplY3RFbmRWaXNpdE1lbWJlcjogewotICAgICAgICAgICAgICAgIGNvbnRleHQucHV0
UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgpLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKVtp
bmRleFN0YWNrLmxhc3QoKV0sIG91dFZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5zaG91bGRUZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
bnVsbCgpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5s
YXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZVVua25vd246CiAgICAgICAgICAgICBjYXNl
IFN0YXRlVW5rbm93bjoKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zvcm1l
ZCA9IGNvbnRleHQuY29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgb3V0VmFsdWUgPSB0cmFuc2Zvcm1lZDsKKyAgICAgICAgICAgICAgICBpZiAoZHVtcElm
VGVybWluYWwoaW5WYWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pc0FycmF5KGluVmFsdWUpKQor
CisgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoaW5WYWx1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYXJyYXlTdGFydFN0YXRlOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3Rh
cnRTdGF0ZTsKICAgICAgICAgfQpAQCAtNDk1LDU3MyArNjk0LDU2OSBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZVdhbGtlcj4gdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0VHlwZSB3YWxrKFRy
ZWVXYWxrZXImCiAgICAgICAgIHN0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgIGlm
ICghLS10aWNrQ291bnQpIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LmRpZFRpbWVPdXQoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQudGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAgICAgICAgICAgIGlmIChk
aWRUaW1lT3V0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9u
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGlja0NvdW50ID0gY29udGV4dC50aWNrc1VudGlsTmV4dENoZWNrKCk7CisgICAgICAg
ICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIG91dFZhbHVlOwotfQotCi1zdHJ1Y3QgQmFzZVdhbGtlciB7Ci0gICAgQmFz
ZVdhbGtlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogbV9leGVjKGV4ZWMpCi0gICAgICAg
ICwgbV90aW1lb3V0Q2hlY2tlcihleGVjLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIpCi0g
ICAgewotICAgICAgICBtX3RpbWVvdXRDaGVja2VyLnJlc2V0KCk7Ci0gICAgfQotICAgIEV4ZWNT
dGF0ZSogbV9leGVjOwotICAgIFRpbWVvdXRDaGVja2VyIG1fdGltZW91dENoZWNrZXI7Ci0gICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgbV9nY0J1ZmZlcjsKLQotICAgIGJvb2wgc2hvdWxkVGVybWlu
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOwotICAg
IH0KKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2ln
bmVkIHRpY2tzVW50aWxOZXh0Q2hlY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGltZW91
dENoZWNrZXIudGlja3NVbnRpbE5leHRDaGVjaygpOwotICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAotICAgIGJvb2wgZGlkVGltZU91dCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90aW1l
b3V0Q2hlY2tlci5kaWRUaW1lT3V0KG1fZXhlYyk7CitjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6
IENsb25lQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmlu
Zyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQg
PSBidWZmZXIuZW5kKCk7CisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisgICAgICAgIGlmICgh
cmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1cnJlbnRW
ZXJzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB1aW50OF90IHRh
ZzsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB0YWcpIHx8IHRhZyAh
PSBTdHJpbmdUYWcpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHVpbnQz
Ml90IGxlbmd0aDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBsZW5n
dGgpIHx8IGxlbmd0aCA+PSBTdHJpbmdQb29sVGFnKQorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICBVU3RyaW5nIHN0cjsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKHB0ciwg
ZW5kLCBzdHIsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBTdHJpbmcoc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTVmFsdWUg
ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVm
ZmVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgQ2xvbmVE
ZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgYnVmZmVyKTsKKyAg
ICAgICAgaWYgKCFkZXNlcmlhbGl6ZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBkZXNlcmlh
bGl6ZXIudGhyb3dWYWxpZGF0aW9uRXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSgp
OwogICAgIH0KIAotICAgIHZvaWQgdGhyb3dTdGFja092ZXJmbG93KCkKK3ByaXZhdGU6CisgICAg
Q2xvbmVEZXNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICAgICAgOiBDbG9uZUJh
c2UoZXhlYykKKyAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgICAg
ICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2Jh
bE9iamVjdDo6c19pbmZvKSkKKyAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQorICAgICAg
ICAsIG1fZW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQorICAgICAgICAsIG1fdmVy
c2lvbigweEZGRkZGRkZGKQogICAgIHsKLSAgICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihtX2V4ZWMpKTsKKyAgICAgICAgaWYgKCFyZWFkKG1fdmVyc2lv
bikpCisgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOwogICAgIH0KIAotICAgIHZv
aWQgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICB0aHJvd0Vycm9y
KG1fZXhlYywgY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oJm1fZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7Ci0gICAgfQotfTsKKyAgICBKU1ZhbHVlIGRlc2VyaWFsaXplKCk7CiAKLXN0
cnVjdCBTZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgQmFzZVdhbGtlciB7Ci0gICAgdHlw
ZWRlZiBKU1ZhbHVlIElucHV0VHlwZTsKLSAgICB0eXBlZGVmIEpTQXJyYXkqIElucHV0QXJyYXk7
Ci0gICAgdHlwZWRlZiBKU09iamVjdCogSW5wdXRPYmplY3Q7Ci0gICAgdHlwZWRlZiBTZXJpYWxp
emVkU2NyaXB0VmFsdWVEYXRhIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBSZWZQdHI8U2VyaWFs
aXplZEFycmF5PiBPdXRwdXRBcnJheTsKLSAgICB0eXBlZGVmIFJlZlB0cjxTZXJpYWxpemVkT2Jq
ZWN0PiBPdXRwdXRPYmplY3Q7Ci0gICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheSBQcm9wZXJ0
eUxpc3Q7Ci0KLSAgICBTZXJpYWxpemluZ1RyZWVXYWxrZXIoRXhlY1N0YXRlKiBleGVjKQotICAg
ICAgICA6IEJhc2VXYWxrZXIoZXhlYykKKyAgICB2b2lkIHRocm93VmFsaWRhdGlvbkVycm9yKCkK
ICAgICB7CisgICAgICAgIHRocm93RXJyb3IobV9leGVjLCBjcmVhdGVUeXBlRXJyb3IobV9leGVj
LCAiVW5hYmxlIHRvIGRlc2VyaWFsaXplIGRhdGEuIikpOwogICAgIH0KIAotICAgIE91dHB1dFR5
cGUgbnVsbCgpIHsgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoKTsgfQorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbiA8PSBDdXJyZW50VmVyc2lvbjsg
fQogCi0gICAgYm9vbCBpc0FycmF5KEpTVmFsdWUgdmFsdWUpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGJvb2wgcmVhZExpdHRsZUVuZGlhbihUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgaWYgKG1fZmFpbGVkIHx8ICFyZWFkTGl0dGxl
RW5kaWFuKG1fcHRyLCBtX2VuZCwgdmFsdWUpKSB7CisgICAgICAgICAgICBmYWlsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoJm1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIGJvb2wgaXNPYmplY3QoSlNWYWx1
ZSB2YWx1ZSkKKyNpZiBBU1NVTUVfTElUVExFX0VORElBTgorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNv
bnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
aXNPYmplY3QoKTsKLSAgICB9CisgICAgICAgIGlmIChwdHIgPiBlbmQgLSBzaXplb2YodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNBcnJheSogYXNJbnB1dEFycmF5
KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSk7Cisg
ICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgICAgIHZhbHVlID0gKnB0cisrOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVCo+KHB0cik7CisgICAgICAgICAgICBwdHIgKz0gc2l6ZW9mKFQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIEpTT2JqZWN0KiBhc0lucHV0T2JqZWN0
KEpTVmFsdWUgdmFsdWUpCisjZWxzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMg
Ym9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3Qq
IGVuZCwgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOwot
ICAgIH0KKyAgICAgICAgaWYgKHB0ciA+IGVuZCAtIHNpemVvZih2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gY3JlYXRl
T3V0cHV0QXJyYXkodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkK
KyAgICAgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHZhbHVlID0gMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yo
VCk7IGkrKykKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAoKFQpKnB0cisrKSA8PCAoaSAqIDgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNlbmRpZgogCi0gICAg
UGFzc1JlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiBjcmVhdGVPdXRwdXRPYmplY3QoKQorICAgIGJv
b2wgcmVhZCh1aW50MzJfdCYgaSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTZXJpYWxpemVkT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRMaXR0bGVFbmRpYW4oaSk7CiAgICAg
fQogCi0gICAgdWludDMyX3QgbGVuZ3RoKEpTVmFsdWUgYXJyYXkpCisgICAgYm9vbCByZWFkKGlu
dDMyX3QmIGkpCiAgICAgewotICAgICAgICBBU1NFUlQoYXJyYXkuaXNPYmplY3QoKSk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChhcnJheSk7Ci0gICAgICAgIHJldHVybiBv
YmplY3QtPmdldChtX2V4ZWMsIG1fZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIobV9leGVjKTsKKyAgICAgICAgcmV0dXJuIHJlYWRMaXR0bGVFbmRpYW4oKnJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPigmaSkpOwogICAgIH0KIAotICAgIGJvb2wgY2FuRG9GYXN0UmVhZChK
U0FycmF5KiBhcnJheSwgdW5zaWduZWQgaW5kZXgpCisgICAgYm9vbCByZWFkKHVpbnQxNl90JiBp
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheSgmbV9leGVjLT5nbG9iYWxEYXRhKCks
IGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVh
ZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGdldEluZGV4KEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpbmRleCkKKyAgICBib29sIHJlYWQodWludDhfdCYgaSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICByZXR1cm4g
cmVhZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGdldFNwYXJzZUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgYm9vbCYgaGFzSW5kZXgp
CisgICAgYm9vbCByZWFkKGRvdWJsZSYgZCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCk7Ci0gICAgICAgIGlmIChvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChtX2V4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKLSAgICAgICAgICAgIGhhc0luZGV4ID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgfQotICAgICAgICBoYXNJbmRleCA9IGZhbHNlOwotICAgICAgICByZXR1cm4ganNO
dWxsKCk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAg
ICAgdWludDY0X3QgaTY0OworICAgICAgICB9IHU7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVu
ZGlhbih1Lmk2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGQgPSB1LmQ7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEpTVmFsdWUgZ2V0UHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCkKKyAgICBib29sIHJlYWQodW5zaWduZWQgbG9uZyBsb25nJiBpKQogICAgIHsKLSAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90KG1fZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgICAgICByZXR1cm4gcmVhZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIGNvbnZlcnRJZlRlcm1pbmFsKEpTVmFsdWUgdmFs
dWUpCisgICAgYm9vbCByZWFkU3RyaW5nSW5kZXgodWludDMyX3QmIGkpCiAgICAgewotICAgICAg
ICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGEodmFsdWUpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodXN0cmluZ1RvU3RyaW5n
KGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9leGVjKSkpOwotCi0gICAgICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEo
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6TnVtYmVyVHlwZSwgdmFsdWUudW5jaGVja2VkR2V0
TnVtYmVyKCkpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCi0gICAgICAgICAgICByZXR1cm4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpEYXRl
VHlwZSwgYXNEYXRlSW5zdGFuY2UodmFsdWUpLT5pbnRlcm5hbE51bWJlcigpKTsKLQotICAgICAg
ICBpZiAoaXNBcnJheSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YSgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTRmlsZTo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YSh0b0ZpbGUob2JqKSk7Ci0gICAgICAgICAgICBpZiAob2Jq
LT5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKHRvQmxvYihvYmopKTsKLSAgICAgICAgICAgIGlmIChvYmot
PmluaGVyaXRzKCZKU0ZpbGVMaXN0OjpzX2luZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKHRvRmlsZUxpc3Qob2JqKSk7Ci0gICAgICAgICAgICBp
ZiAob2JqLT5pbmhlcml0cygmSlNJbWFnZURhdGE6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodG9JbWFnZURhdGEob2JqKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBDYWxsRGF0YSB1bnVzZWREYXRhOwotICAgICAgICAg
ICAgaWYgKGdldENhbGxEYXRhKHZhbHVlLCB1bnVzZWREYXRhKSA9PSBDYWxsVHlwZU5vbmUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoKTsKKyAgICAg
ICAgaWYgKG1fY29uc3RhbnRQb29sLnNpemUoKSA8PSAweEZGKSB7CisgICAgICAgICAgICB1aW50
OF90IGk4OworICAgICAgICAgICAgaWYgKCFyZWFkKGk4KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpID0gaTg7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQotICAgICAgICAvLyBBbnkgb3RoZXIgdHlwZXMgYXJlIGV4cGVjdGVkIHRvIHNl
cmlhbGl6ZSBhcyBudWxsLgotICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0
YShqc051bGwoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTY+JiBwcm9wZXJ0eVN0YWNrKQot
ICAgIHsKLSAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9l
eGVjKSk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX2V4ZWMsIHByb3Bl
cnR5U3RhY2subGFzdCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1dFByb3BlcnR5KFJlZlB0cjxT
ZXJpYWxpemVkQXJyYXk+IGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGNvbnN0IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXJyYXktPnNldElu
ZGV4KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICBpZiAobV9jb25zdGFudFBvb2wuc2l6
ZSgpIDw9IDB4RkZGRikgeworICAgICAgICAgICAgdWludDE2X3QgaTE2OworICAgICAgICAgICAg
aWYgKCFyZWFkKGkxNikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaSA9IGkxNjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZWFkKGkpOwogICAgIH0KIAotICAgIHZvaWQgcHV0UHJvcGVydHkoUmVmUHRyPFNl
cmlhbGl6ZWRPYmplY3Q+IG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKKyAgICBzdGF0aWMgYm9vbCBy
ZWFkU3RyaW5nKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVVN0cmlu
ZyYgc3RyLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBvYmplY3QtPnNldChwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICB9CisgICAgICAgIGlmIChsZW5ndGggPj0gbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihVQ2hhcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIHN0YXJ0QXJyYXkoSlNBcnJheSogaW5BcnJheSwgUmVmUHRy
PFNlcmlhbGl6ZWRBcnJheT4pCi0gICAgewotICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KLSAg
ICAgICAgaWYgKCFtX2N5Y2xlRGV0ZWN0b3IuYWRkKGluQXJyYXkpLnNlY29uZCkgewotICAgICAg
ICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0ZVR5cGVFcnJvcihtX2V4ZWMsICJDYW5ub3Qg
cG9zdCBjeWNsaWMgc3RydWN0dXJlcy4iKSk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsZW5n
dGggKiBzaXplb2YoVUNoYXIpOworICAgICAgICBpZiAoZW5kIC0gcHRyIDwgc2l6ZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEFTU1VNRV9MSVRUTEVfRU5ESUFOCisgICAgICAg
IHN0ciA9IFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHB0ciksIGxlbmd0
aCk7CisgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOworI2Vsc2UKKyAgICAg
ICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB1aW50MTZfdCBjaDsKKyAgICAgICAgICAgIHJlYWRMaXR0bGVFbmRpYW4o
cHRyLCBlbmQsIGNoKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gpOwogICAgICAgICB9
Ci0gICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluQXJyYXkpOworICAgICAgICBzdHIgPSBVU3Ry
aW5nOjphZG9wdChidWZmZXIpOworI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIHZvaWQgZW5kQXJyYXkoSlNBcnJheSogaW5BcnJheSwgUmVmUHRyPFNlcmlhbGl6ZWRB
cnJheT4pCisgICAgYm9vbCByZWFkU3RyaW5nRGF0YShJZGVudGlmaWVyJiBpZGVudCkKICAgICB7
Ci0gICAgICAgIG1fY3ljbGVEZXRlY3Rvci5yZW1vdmUoaW5BcnJheSk7Ci0gICAgICAgIG1fZ2NC
dWZmZXIucmVtb3ZlTGFzdCgpOworICAgICAgICBib29sIHNjcmF0Y2g7CisgICAgICAgIHJldHVy
biByZWFkU3RyaW5nRGF0YShpZGVudCwgc2NyYXRjaCk7CiAgICAgfQogCi0gICAgYm9vbCBzdGFy
dE9iamVjdChKU09iamVjdCogaW5PYmplY3QsIFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0PikKKyAg
ICBib29sIHJlYWRTdHJpbmdEYXRhKElkZW50aWZpZXImIGlkZW50LCBib29sJiB3YXNUZXJtaW5h
dG9yKQogICAgIHsKLSAgICAgICAgLy8gQ3ljbGUgZGV0ZWN0aW9uCi0gICAgICAgIGlmICghbV9j
eWNsZURldGVjdG9yLmFkZChpbk9iamVjdCkuc2Vjb25kKSB7Ci0gICAgICAgICAgICB0aHJvd0Vy
cm9yKG1fZXhlYywgY3JlYXRlVHlwZUVycm9yKG1fZXhlYywgIkNhbm5vdCBwb3N0IGN5Y2xpYyBz
dHJ1Y3R1cmVzLiIpKTsKKyAgICAgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB1aW50MzJfdCBsZW5ndGggPSAwOworICAgICAgICBpZiAoIXJlYWQo
bGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSBUZXJtaW5hdG9yVGFnKSB7CisgICAgICAgICAgICB3YXNUZXJtaW5hdG9yID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBtX2djQnVmZmVyLmFw
cGVuZChpbk9iamVjdCk7CisgICAgICAgIGlmIChsZW5ndGggPT0gU3RyaW5nUG9vbFRhZykgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAgICAgICAgaWYgKCFyZWFkU3Ry
aW5nSW5kZXgoaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+
PSBtX2NvbnN0YW50UG9vbC5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWRl
bnQgPSBtX2NvbnN0YW50UG9vbFtpbmRleF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBVU3RyaW5nIHN0cjsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKG1f
cHRyLCBtX2VuZCwgc3RyLCBsZW5ndGgpKSB7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWRlbnQgPSBJZGVudGlmaWVy
KG1fZXhlYywgc3RyKTsKKyAgICAgICAgbV9jb25zdGFudFBvb2wuYXBwZW5kKGlkZW50KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBlbmRPYmplY3QoSlNPYmplY3Qq
IGluT2JqZWN0LCBSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4pCi0gICAgewotICAgICAgICBtX2N5
Y2xlRGV0ZWN0b3IucmVtb3ZlKGluT2JqZWN0KTsKLSAgICAgICAgbV9nY0J1ZmZlci5yZW1vdmVM
YXN0KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8SlNPYmplY3QqPiBtX2N5Y2xl
RGV0ZWN0b3I7Ci19OwotCi1TZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGE6OnNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaW5WYWx1ZSkK
LXsKLSAgICBTZXJpYWxpemluZ1RyZWVXYWxrZXIgY29udGV4dChleGVjKTsKLSAgICByZXR1cm4g
d2FsazxTZXJpYWxpemluZ1RyZWVXYWxrZXI+KGNvbnRleHQsIGluVmFsdWUpOwotfQotCi0KLXN0
cnVjdCBEZXNlcmlhbGl6aW5nVHJlZVdhbGtlciA6IHB1YmxpYyBCYXNlV2Fsa2VyIHsKLSAgICB0
eXBlZGVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEgSW5wdXRUeXBlOwotICAgIHR5cGVkZWYg
UmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gSW5wdXRBcnJheTsKLSAgICB0eXBlZGVmIFJlZlB0cjxT
ZXJpYWxpemVkT2JqZWN0PiBJbnB1dE9iamVjdDsKLSAgICB0eXBlZGVmIEpTVmFsdWUgT3V0cHV0
VHlwZTsKLSAgICB0eXBlZGVmIEpTQXJyYXkqIE91dHB1dEFycmF5OwotICAgIHR5cGVkZWYgSlNP
YmplY3QqIE91dHB1dE9iamVjdDsKLSAgICB0eXBlZGVmIFNlcmlhbGl6ZWRPYmplY3Q6OlByb3Bl
cnR5TmFtZUxpc3QgUHJvcGVydHlMaXN0OwotCi0gICAgRGVzZXJpYWxpemluZ1RyZWVXYWxrZXIo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIG11c3RD
b3B5KQotICAgICAgICA6IEJhc2VXYWxrZXIoZXhlYykKLSAgICAgICAgLCBtX2dsb2JhbE9iamVj
dChnbG9iYWxPYmplY3QpCi0gICAgICAgICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkKLSAgICAgICAgLCBtX211
c3RDb3B5KG11c3RDb3B5KQotICAgIHsKLSAgICB9Ci0KLSAgICBPdXRwdXRUeXBlIG51bGwoKSB7
IHJldHVybiBqc051bGwoKTsgfQotCi0gICAgYm9vbCBpc0FycmF5KGNvbnN0IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGEmIHZhbHVlKQorICAgIFNlcmlhbGl6YXRpb25UYWcgcmVhZFRhZygpCiAg
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUudHlwZSgpID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZURhdGE6OkFycmF5VHlwZTsKKyAgICAgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICAg
ICAgcmV0dXJuIEVycm9yVGFnOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2VyaWFsaXph
dGlvblRhZz4oKm1fcHRyKyspOwogICAgIH0KIAotICAgIGJvb2wgaXNPYmplY3QoY29uc3QgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCisgICAgdm9pZCBwdXRQcm9wZXJ0eShKU0Fy
cmF5KiBhcnJheSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUudHlwZSgpID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok9iamVj
dFR5cGU7Ci0gICAgfQotCi0gICAgU2VyaWFsaXplZEFycmF5KiBhc0lucHV0QXJyYXkoY29uc3Qg
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWUuYXNBcnJheSgpOwotICAgIH0KLQotICAgIFNlcmlhbGl6ZWRPYmplY3QqIGFzSW5wdXRP
YmplY3QoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUuYXNPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBKU0FycmF5KiBjcmVh
dGVPdXRwdXRBcnJheSh1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCBtX2dsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIGFycmF5LT5zZXRMZW5ndGgobGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
IH0KLQotICAgIEpTT2JqZWN0KiBjcmVhdGVPdXRwdXRPYmplY3QoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYywgbV9nbG9iYWxPYmplY3QpOwotICAg
IH0KLQotICAgIHVpbnQzMl90IGxlbmd0aChSZWZQdHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgYm9v
bCBjYW5Eb0Zhc3RSZWFkKFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+IGFycmF5LCB1bnNpZ25lZCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcnJheS0+Y2FuRG9GYXN0UmVhZChpbmRleCk7
Ci0gICAgfQotCi0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSBnZXRJbmRleChSZWZQdHI8
U2VyaWFsaXplZEFycmF5PiBhcnJheSwgdW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKGFycmF5LT5jYW5TZXRJ
bmRleChpbmRleCkpCisgICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoaW5kZXgsIHZhbHVlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJyYXktPnB1dChtX2V4ZWMsIGluZGV4LCB2YWx1
ZSk7CiAgICAgfQogCi0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSBnZXRTcGFyc2VJbmRl
eChSZWZQdHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBi
b29sJiBoYXNJbmRleCkKKyAgICB2b2lkIHB1dFByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIElk
ZW50aWZpZXImIHByb3BlcnR5LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFycmF5LT5nZXRTcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUsIGhhc0luZGV4KTsKKyAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3QocHJvcGVydHksIHZhbHVlKTsKICAgICB9CiAKLSAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWVEYXRhIGdldFByb3BlcnR5KFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiBv
YmplY3QsIGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBw
cm9wZXJ0eUluZGV4KQorICAgIGJvb2wgcmVhZEZpbGUoUmVmUHRyPEZpbGU+JiBmaWxlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG9iamVjdC0+bmFtZXMoKVtwcm9wZXJ0eUluZGV4XSA9PSBwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ocHJvcGVydHlOYW1lKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdC0+dmFsdWVzKClbcHJvcGVydHlJbmRleF07CisgICAgICAgIElkZW50aWZp
ZXIgcGF0aDsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nRGF0YShwYXRoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBJZGVudGlmaWVyIHVybDsKKyAgICAgICAgaWYgKCFyZWFkU3Ry
aW5nRGF0YSh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIElkZW50aWZpZXIg
dHlwZTsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nRGF0YSh0eXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBpZiAobV9pc0RPTUdsb2JhbE9iamVjdCkgeworICAgICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgICAgICBmaWxlID0gRmlsZTo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFN0cmluZyhwYXRoLnVzdHJpbmcoKS5pbXBsKCkpLCBL
VVJMKEtVUkwoKSwgU3RyaW5nKHVybC51c3RyaW5nKCkuaW1wbCgpKSksIFN0cmluZyh0eXBlLnVz
dHJpbmcoKS5pbXBsKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBKU1ZhbHVlIGNvbnZlcnRJZlRlcm1pbmFsKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGEmIHZhbHVlKQorICAgIEpTVmFsdWUgcmVhZFRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAodmFsdWUudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZURhdGE6OkFycmF5VHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZh
bHVlRGF0YTo6T2JqZWN0VHlwZToKKyAgICAgICAgU2VyaWFsaXphdGlvblRhZyB0YWcgPSByZWFk
VGFnKCk7CisgICAgICAgIHN3aXRjaCAodGFnKSB7CisgICAgICAgIGNhc2UgVW5kZWZpbmVkVGFn
OgorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgTnVsbFRh
ZzoKKyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgY2FzZSBJbnRUYWc6IHsK
KyAgICAgICAgICAgIGludDMyX3QgaTsKKyAgICAgICAgICAgIGlmICghcmVhZChpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVk
U2NyaXB0VmFsdWVEYXRhOjpTdHJpbmdUeXBlOgotICAgICAgICAgICAgICAgIHJldHVybiBqc1N0
cmluZyhtX2V4ZWMsIHZhbHVlLmFzU3RyaW5nKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkltbWVkaWF0ZVR5cGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW1tZWRpYXRlKCk7Ci0gICAgICAgICAgICBj
YXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok51bWJlclR5cGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fZXhlYywgdmFsdWUuYXNEb3VibGUoKSk7Ci0gICAgICAgICAg
ICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkRhdGVUeXBlOgotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgKG1fZXhlYykgRGF0ZUluc3RhbmNlKG1fZXhlYywgbV9nbG9iYWxPYmpl
Y3QtPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUuYXNEb3VibGUoKSk7Ci0gICAgICAgICAgICBjYXNl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkJsb2JUeXBlOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0gICAgICAgICAgICAgICAgU2VyaWFsaXplZEJsb2IqIHNlcmlhbGl6ZWRCbG9iID0g
dmFsdWUuYXNCbG9iKCk7Ci0gICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBzZXJpYWxpemVkQmxvYi0+dXJsKCksIHNlcmlhbGl6ZWRCbG9iLT50eXBlKCksIHNlcmlhbGl6
ZWRCbG9iLT5zaXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6RmlsZVR5cGU6IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
aXNET01HbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICAgICAgICAgICAgICBTZXJpYWxpemVkRmlsZSogc2VyaWFsaXplZEZpbGUgPSB2YWx1ZS5h
c0ZpbGUoKTsKLSAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1f
Z2xvYmFsT2JqZWN0KSwgRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHNlcmlh
bGl6ZWRGaWxlLT5wYXRoKCksIHNlcmlhbGl6ZWRGaWxlLT51cmwoKSwgc2VyaWFsaXplZEZpbGUt
PnR5cGUoKSkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fZXhlYywgaSk7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBaZXJvVGFnOgorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KG1fZXhlYywgMCk7CisgICAgICAgIGNhc2UgT25lVGFnOgorICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKG1fZXhlYywgMSk7CisgICAgICAgIGNhc2UgRmFsc2VUYWc6CisgICAgICAgICAgICBy
ZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICAgICAgY2FzZSBUcnVlVGFnOgorICAgICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKKyAgICAgICAgY2FzZSBEb3VibGVUYWc6IHsKKyAg
ICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgaWYgKCFyZWFkKGQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIobV9l
eGVjLCBkKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERhdGVUYWc6IHsKKyAgICAgICAgICAg
IGRvdWJsZSBkOworICAgICAgICAgICAgaWYgKCFyZWFkKGQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIERhdGVJbnN0
YW5jZShtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQpOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgRmlsZVRhZzogeworICAgICAgICAgICAgUmVmUHRyPEZpbGU+IGZp
bGU7CisgICAgICAgICAgICBpZiAoIXJlYWRGaWxlKGZpbGUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMo
bV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwg
ZmlsZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWxlTGlzdFRhZzogeworICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmICghcmVhZChsZW5n
dGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICBSZWZQ
dHI8RmlsZUxpc3Q+IHJlc3VsdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIFJl
ZlB0cjxGaWxlPiBmaWxlOworICAgICAgICAgICAgICAgIGlmICghcmVhZEZpbGUoZmlsZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYg
KG1faXNET01HbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
KGZpbGUuZ2V0KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVk
U2NyaXB0VmFsdWVEYXRhOjpGaWxlTGlzdFR5cGU6IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
aXNET01HbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8RmlsZUxpc3Q+IHJlc3VsdCA9IEZpbGVMaXN0OjpjcmVh
dGUoKTsKLSAgICAgICAgICAgICAgICBTZXJpYWxpemVkRmlsZUxpc3QqIHNlcmlhbGl6ZWRGaWxl
TGlzdCA9IHZhbHVlLmFzRmlsZUxpc3QoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzZXJpYWxpemVkRmlsZUxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU2VyaWFsaXplZEZpbGVMaXN0
OjpGaWxlRGF0YSYgZmlsZURhdGEgPSBzZXJpYWxpemVkRmlsZUxpc3QtPml0ZW0oaSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBmaWxlRGF0YS5wYXRoLCBmaWxlRGF0YS51cmwsIGZpbGVEYXRhLnR5cGUpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMobV9leGVjLCBz
dGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgcmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCByZXN1bHQuZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgSW1hZ2VEYXRhVGFnOiB7CisgICAgICAgICAg
ICB1aW50MzJfdCB3aWR0aDsKKyAgICAgICAgICAgIGlmICghcmVhZCh3aWR0aCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodDsK
KyAgICAgICAgICAgIGlmICghcmVhZChoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgICAgICAgICBpZiAo
IXJlYWQobGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICAgICAgaWYgKG1fZW5kIDwgKCh1aW50OF90KikwKSArIGxlbmd0aCB8fCBtX3B0ciA+IG1fZW5k
IC0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZURhdGE6OkltYWdlRGF0YVR5cGU6IHsKLSAgICAgICAgICAgICAgICBpZiAo
IW1faXNET01HbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwo
KTsKLSAgICAgICAgICAgICAgICBTZXJpYWxpemVkSW1hZ2VEYXRhKiBzZXJpYWxpemVkSW1hZ2VE
YXRhID0gdmFsdWUuYXNJbWFnZURhdGEoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2VE
YXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShzZXJpYWxpemVkSW1hZ2VEYXRhLT53aWR0
aCgpLCBzZXJpYWxpemVkSW1hZ2VEYXRhLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgbWVt
Y3B5KHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSwgc2VyaWFsaXplZEltYWdlRGF0YS0+
ZGF0YSgpLT5kYXRhKCksIHNlcmlhbGl6ZWRJbWFnZURhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIHJlc3VsdC5nZXQoKSk7CisgICAgICAgICAgICBp
ZiAoIW1faXNET01HbG9iYWxPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBtX3B0ciArPSBsZW5n
dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpFbXB0eVR5cGU6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBSZWZQdHI8SW1h
Z2VEYXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5n
dGgpOworICAgICAgICAgICAgbV9wdHIgKz0gbGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIHRv
SlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0
KSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEJsb2JUYWc6IHsKKyAg
ICAgICAgICAgIElkZW50aWZpZXIgdXJsOworICAgICAgICAgICAgaWYgKCFyZWFkU3RyaW5nRGF0
YSh1cmwpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICBJ
ZGVudGlmaWVyIHR5cGU7CisgICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKHR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgc2l6ZSA9IDA7CisgICAgICAgICAgICBpZiAoIXJlYWQoc2l6ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghbV9pc0RPTUdsb2Jh
bE9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBLVVJMKEtVUkwoKSwgdXJsLnVzdHJpbmcoKS5pbXBsKCkpLCBTdHJp
bmcodHlwZS51c3RyaW5nKCkuaW1wbCgpKSwgc2l6ZSkpOworICAgICAgICB9CisgICAgICAgIGNh
c2UgU3RyaW5nVGFnOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50OworICAgICAgICAg
ICAgaWYgKCFyZWFkU3RyaW5nRGF0YShpZGVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhtX2V4ZWMsIGlkZW50LnVzdHJp
bmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFbXB0eVN0cmluZ1RhZzoKKyAgICAgICAg
ICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBtX3B0ci0tOyAvLyBQdXNoIHRoZSB0YWcgYmFjaworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLQotICAgIHZvaWQg
Z2V0UHJvcGVydHlOYW1lcyhSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4gb2JqZWN0LCBWZWN0b3I8
U2VyaWFsaXplZE9iamVjdDo6UHJvcGVydHlOYW1lTGlzdCwgMTY+JiBwcm9wZXJ0aWVzKQotICAg
IHsKLSAgICAgICAgcHJvcGVydGllcy5hcHBlbmQob2JqZWN0LT5uYW1lcygpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHB1dFByb3BlcnR5KEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhcnJheS0+cHV0KG1fZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBwdXRQcm9wZXJ0eShKU09iamVj
dCogb2JqZWN0LCBjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4gcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoSWRlbnRpZmllcihtX2V4
ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcocHJvcGVydHlOYW1lKSkpLCB2YWx1ZSk7Ci0gICAg
fQotCi0gICAgYm9vbCBzdGFydEFycmF5KFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+LCBKU0FycmF5
KiBvdXRBcnJheSkKLSAgICB7Ci0gICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dEFycmF5KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHZvaWQgZW5kQXJyYXkoUmVmUHRyPFNl
cmlhbGl6ZWRBcnJheT4sIEpTQXJyYXkqKQotICAgIHsKLSAgICAgICAgbV9nY0J1ZmZlci5yZW1v
dmVMYXN0KCk7Ci0gICAgfQotICAgIGJvb2wgc3RhcnRPYmplY3QoUmVmUHRyPFNlcmlhbGl6ZWRP
YmplY3Q+LCBKU09iamVjdCogb3V0T2JqZWN0KQotICAgIHsKLSAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmQob3V0T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHZvaWQg
ZW5kT2JqZWN0KFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiwgSlNPYmplY3QqKQotICAgIHsKLSAg
ICAgICAgbV9nY0J1ZmZlci5yZW1vdmVMYXN0KCk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9i
amVjdDsKICAgICBib29sIG1faXNET01HbG9iYWxPYmplY3Q7Ci0gICAgYm9vbCBtX211c3RDb3B5
OworICAgIGNvbnN0IHVpbnQ4X3QqIG1fcHRyOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fZW5kOwor
ICAgIHVuc2lnbmVkIG1fdmVyc2lvbjsKKyAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9jb25zdGFu
dFBvb2w7CiB9OwogCi1KU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OmRlc2VyaWFs
aXplKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbCwgYm9vbCBtdXN0Q29w
eSkgY29uc3QKK0pTVmFsdWUgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKIHsKLSAg
ICBEZXNlcmlhbGl6aW5nVHJlZVdhbGtlciBjb250ZXh0KGV4ZWMsIGdsb2JhbCwgbXVzdENvcHkp
OwotICAgIHJldHVybiB3YWxrPERlc2VyaWFsaXppbmdUcmVlV2Fsa2VyPihjb250ZXh0LCAqdGhp
cyk7Ci19Ci0KLXN0cnVjdCBUZWFyZG93blRyZWVXYWxrZXIgewotICAgIHR5cGVkZWYgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YSBJbnB1dFR5cGU7Ci0gICAgdHlwZWRlZiBSZWZQdHI8U2VyaWFs
aXplZEFycmF5PiBJbnB1dEFycmF5OwotICAgIHR5cGVkZWYgUmVmUHRyPFNlcmlhbGl6ZWRPYmpl
Y3Q+IElucHV0T2JqZWN0OwotICAgIHR5cGVkZWYgYm9vbCBPdXRwdXRUeXBlOwotICAgIHR5cGVk
ZWYgYm9vbCBPdXRwdXRBcnJheTsKLSAgICB0eXBlZGVmIGJvb2wgT3V0cHV0T2JqZWN0OwotICAg
IHR5cGVkZWYgU2VyaWFsaXplZE9iamVjdDo6UHJvcGVydHlOYW1lTGlzdCBQcm9wZXJ0eUxpc3Q7
Ci0KLSAgICBib29sIHNob3VsZFRlcm1pbmF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdGlja3NVbnRpbE5leHRDaGVjaygpCi0gICAgewot
ICAgICAgICByZXR1cm4gMHhGRkZGRkZGRjsKLSAgICB9Ci0KLSAgICBib29sIGRpZFRpbWVPdXQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZvaWQgdGhyb3dT
dGFja092ZXJmbG93KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB0aHJvd0ludGVycnVwdGVk
RXhjZXB0aW9uKCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBudWxsKCkgeyByZXR1cm4gZmFs
c2U7IH0KLQotICAgIGJvb2wgaXNBcnJheShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50eXBlKCkgPT0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YTo6QXJyYXlUeXBlOwotICAgIH0KLQotICAgIGJvb2wgaXNPYmplY3Qo
Y29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUudHlwZSgpID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok9iamVjdFR5
cGU7Ci0gICAgfQotCi0gICAgU2VyaWFsaXplZEFycmF5KiBhc0lucHV0QXJyYXkoY29uc3QgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUuYXNBcnJheSgpOwotICAgIH0KLQotICAgIFNlcmlhbGl6ZWRPYmplY3QqIGFzSW5wdXRPYmpl
Y3QoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuYXNPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBib29sIGNyZWF0ZU91dHB1
dEFycmF5KHVuc2lnbmVkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOworICAgIFZlY3RvcjxJZGVudGlmaWVy
LCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CisgICAgVmVjdG9yPEpTT2JqZWN0KiwgMTY+IG91dHB1
dE9iamVjdFN0YWNrOworICAgIFZlY3RvcjxKU0FycmF5KiwgMTY+IG91dHB1dEFycmF5U3RhY2s7
CisgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsKKyAgICBXYWxrZXJTdGF0
ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKKyAgICBKU1ZhbHVlIG91dFZhbHVlOwogCi0gICAgYm9v
bCBjcmVhdGVPdXRwdXRPYmplY3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICB1bnNpZ25lZCB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBhcnJheVN0YXJ0
U3RhdGU6CisgICAgICAgIGNhc2UgQXJyYXlTdGFydFN0YXRlOiB7CisgICAgICAgICAgICB1aW50
MzJfdCBsZW5ndGg7CisgICAgICAgICAgICBpZiAoIXJlYWQobGVuZ3RoKSkgeworICAgICAgICAg
ICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgSlNBcnJheSogb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KG1f
ZXhlYywgbV9nbG9iYWxPYmplY3QpOworICAgICAgICAgICAgb3V0QXJyYXktPnNldExlbmd0aChs
ZW5ndGgpOworICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQob3V0QXJyYXkpOworICAgICAg
ICAgICAgb3V0cHV0QXJyYXlTdGFjay5hcHBlbmQob3V0QXJyYXkpOworICAgICAgICAgICAgLy8g
ZmFsbHRocm91Z2gKKyAgICAgICAgfQorICAgICAgICBhcnJheVN0YXJ0VmlzaXRNZW1iZXI6Cisg
ICAgICAgIGNhc2UgQXJyYXlTdGFydFZpc2l0TWVtYmVyOiB7CisgICAgICAgICAgICBpZiAoIS0t
dGlja0NvdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGRpZFRpbWVPdXQoKSkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRpY2tDb3VudCA9IHRpY2tzVW50aWxOZXh0Q2hlY2soKTsKKyAgICAgICAgICAgIH0KIAot
ICAgIHVpbnQzMl90IGxlbmd0aChSZWZQdHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgfQorICAgICAgICAgICAgdWlu
dDMyX3QgaW5kZXg7CisgICAgICAgICAgICBpZiAoIXJlYWQoaW5kZXgpKSB7CisgICAgICAgICAg
ICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gVGVybWluYXRvclRhZykgeworICAgICAgICAgICAg
ICAgIEpTQXJyYXkqIG91dEFycmF5ID0gb3V0cHV0QXJyYXlTdGFjay5sYXN0KCk7CisgICAgICAg
ICAgICAgICAgbV9nY0J1ZmZlci5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgb3V0VmFs
dWUgPSBvdXRBcnJheTsKKyAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAotICAgIGJvb2wg
Y2FuRG9GYXN0UmVhZChSZWZQdHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSwgdW5zaWduZWQgaW5k
ZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYXJyYXktPmNhbkRvRmFzdFJlYWQoaW5kZXgpOwot
ICAgIH0KKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHRlcm1pbmFsID0gcmVhZFRlcm1pbmFsKCkp
IHsKKyAgICAgICAgICAgICAgICBwdXRQcm9wZXJ0eShvdXRwdXRBcnJheVN0YWNrLmxhc3QoKSwg
aW5kZXgsIHRlcm1pbmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1l
bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2ZhaWxlZCkKKyAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoaW5kZXgp
OworICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoQXJyYXlFbmRWaXNpdE1lbWJlcik7Cisg
ICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFy
cmF5RW5kVmlzaXRNZW1iZXI6IHsKKyAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gb3V0
cHV0QXJyYXlTdGFjay5sYXN0KCk7CisgICAgICAgICAgICBwdXRQcm9wZXJ0eShvdXRBcnJheSwg
aW5kZXhTdGFjay5sYXN0KCksIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGluZGV4U3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CisgICAg
ICAgIH0KKyAgICAgICAgb2JqZWN0U3RhcnRTdGF0ZToKKyAgICAgICAgY2FzZSBPYmplY3RTdGFy
dFN0YXRlOiB7CisgICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpICsgb3V0
cHV0QXJyYXlTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEpTT2JqZWN0KiBvdXRPYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
ICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dE9iamVjdCk7CisgICAgICAgICAgICBvdXRwdXRPYmpl
Y3RTdGFjay5hcHBlbmQob3V0T2JqZWN0KTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisg
ICAgICAgIH0KKyAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKKyAgICAgICAgY2FzZSBP
YmplY3RTdGFydFZpc2l0TWVtYmVyOiB7CisgICAgICAgICAgICBpZiAoIS0tdGlja0NvdW50KSB7
CisgICAgICAgICAgICAgICAgaWYgKGRpZFRpbWVPdXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRpY2tDb3Vu
dCA9IHRpY2tzVW50aWxOZXh0Q2hlY2soKTsKKyAgICAgICAgICAgIH0KIAotICAgIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZURhdGEgZ2V0SW5kZXgoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gYXJyYXks
IHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFycmF5LT5nZXRJbmRleChp
bmRleCk7Ci0gICAgfQorICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudDsKKyAgICAgICAgICAg
IGJvb2wgd2FzVGVybWluYXRvciA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFyZWFkU3RyaW5n
RGF0YShpZGVudCwgd2FzVGVybWluYXRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdhc1Rl
cm1pbmF0b3IpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIG91dE9iamVjdCA9IG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBtX2djQnVmZmVyLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBvdXRW
YWx1ZSA9IG91dE9iamVjdDsKKyAgICAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKLSAgICBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIGdldFNwYXJzZUluZGV4KFJlZlB0cjxTZXJpYWxpemVk
QXJyYXk+IGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGJvb2wmIGhhc0luZGV4KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFycmF5LT5nZXRTcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUsIGhh
c0luZGV4KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9IHJlYWRU
ZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgcHV0UHJvcGVydHkob3V0cHV0T2JqZWN0U3Rh
Y2subGFzdCgpLCBpZGVudCwgdGVybWluYWwpOworICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0
U3RhcnRWaXNpdE1lbWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlU3RhY2su
YXBwZW5kKE9iamVjdEVuZFZpc2l0TWVtYmVyKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZVN0
YWNrLmFwcGVuZChpZGVudCk7CisgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIE9iamVjdEVuZFZpc2l0TWVtYmVyOiB7CisgICAgICAgICAgICBw
dXRQcm9wZXJ0eShvdXRwdXRPYmplY3RTdGFjay5sYXN0KCksIHByb3BlcnR5TmFtZVN0YWNrLmxh
c3QoKSwgb3V0VmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lU3RhY2sucmVtb3ZlTGFz
dCgpOworICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICB9
CisgICAgICAgIHN0YXRlVW5rbm93bjoKKyAgICAgICAgY2FzZSBTdGF0ZVVua25vd246CisgICAg
ICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9IHJlYWRUZXJtaW5hbCgpKSB7CisgICAgICAg
ICAgICAgICAgb3V0VmFsdWUgPSB0ZXJtaW5hbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFNlcmlhbGl6YXRpb25UYWcgdGFnID0gcmVhZFRhZygp
OworICAgICAgICAgICAgaWYgKHRhZyA9PSBBcnJheVRhZykKKyAgICAgICAgICAgICAgICBnb3Rv
IGFycmF5U3RhcnRTdGF0ZTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gT2JqZWN0VGFnKQorICAg
ICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRTdGF0ZTsKKyAgICAgICAgICAgIGdvdG8gZXJy
b3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlU3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIGdldFByb3BlcnR5
KFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiBvYmplY3QsIGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBs
PiYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG9iamVjdC0+bmFtZXMoKVtwcm9wZXJ0eUluZGV4XSA9PSBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBVTlVTRURfUEFSQU0ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG9iamVj
dC0+dmFsdWVzKClbcHJvcGVydHlJbmRleF07Ci0gICAgfQorICAgICAgICBzdGF0ZSA9IHN0YXRl
U3RhY2subGFzdCgpOworICAgICAgICBzdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgIGJv
b2wgY29udmVydElmVGVybWluYWwoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpBcnJheVR5cGU6Ci0gICAgICAgICAgICBjYXNlIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok9iamVjdFR5cGU6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpT
dHJpbmdUeXBlOgotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpJ
bW1lZGlhdGVUeXBlOgotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
OjpOdW1iZXJUeXBlOgotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
OjpEYXRlVHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6
RW1wdHlUeXBlOgotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpC
bG9iVHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6Rmls
ZVR5cGU6Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkZpbGVM
aXN0VHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6SW1h
Z2VEYXRhVHlwZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEt
LXRpY2tDb3VudCkgeworICAgICAgICAgICAgaWYgKGRpZFRpbWVPdXQoKSkgeworICAgICAgICAg
ICAgICAgIHRocm93SW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGlja0NvdW50ID0gdGlj
a3NVbnRpbE5leHRDaGVjaygpOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgQVNTRVJUKG91dFZhbHVlKTsK
KyAgICBBU1NFUlQoIW1fZmFpbGVkKTsKKyAgICByZXR1cm4gb3V0VmFsdWU7CitlcnJvcjoKKyAg
ICBmYWlsKCk7CisgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZSgpOworfQogCi0gICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKFJlZlB0cjxTZXJpYWxpemVkT2Jq
ZWN0PiBvYmplY3QsIFZlY3RvcjxTZXJpYWxpemVkT2JqZWN0OjpQcm9wZXJ0eU5hbWVMaXN0LCAx
Nj4mIHByb3BlcnRpZXMpCi0gICAgewotICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChvYmplY3Qt
Pm5hbWVzKCkpOwotICAgIH0KIAotICAgIHZvaWQgcHV0UHJvcGVydHkoYm9vbCwgdW5zaWduZWQs
IGJvb2wpCi0gICAgewotICAgIH0KIAotICAgIHZvaWQgcHV0UHJvcGVydHkoYm9vbCwgY29uc3Qg
UmVmUHRyPFN0cmluZ0ltcGw+JiwgYm9vbCkKLSAgICB7Ci0gICAgfQorU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjp+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKK3sKK30KIAotICAgIGJvb2wgc3RhcnRB
cnJheShSZWZQdHI8U2VyaWFsaXplZEFycmF5PiwgYm9vbCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICB2b2lkIGVuZEFycmF5KFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+
IGFycmF5LCBib29sKQotICAgIHsKLSAgICAgICAgYXJyYXktPmNsZWFyKCk7Ci0gICAgfQotICAg
IGJvb2wgc3RhcnRPYmplY3QoUmVmUHRyPFNlcmlhbGl6ZWRPYmplY3Q+LCBib29sKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHZvaWQgZW5kT2JqZWN0KFJlZlB0cjxT
ZXJpYWxpemVkT2JqZWN0PiBvYmplY3QsIGJvb2wpCi0gICAgewotICAgICAgICBvYmplY3QtPmNs
ZWFyKCk7Ci0gICAgfQotfTsKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQoreworICAgIG1fZGF0YS5zd2FwKGJ1ZmZl
cik7Cit9CiAKLXZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6dGVhckRvd25TZXJpYWxp
emVkRGF0YSgpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGlmIChtX3NoYXJlZERhdGEgJiYgbV9zaGFyZWREYXRhLT5yZWZDb3VudCgpID4gMSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFRlYXJkb3duVHJlZVdhbGtlciBjb250ZXh0OwotICAgIHdhbGs8VGVh
cmRvd25UcmVlV2Fsa2VyPihjb250ZXh0LCAqdGhpcyk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcjsKKyAgICBpZiAoIUNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlLCBi
dWZmZXIpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp+
U2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcjsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShi
dWZmZXIpKTsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFN0cmluZyBzdHJpbmcpCiB7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKKyAgICBpZiAoIUNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKHN0cmluZywg
YnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJp
YWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYgb3Jp
Z2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpA
QCAtMTA3NiwxNCArMTI3MSwxOCBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaQogICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisg
ICAgQVNTRVJUKHNlcmlhbGl6ZWRWYWx1ZSk7CiAgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTsK
IH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxW
YWx1ZSgpIAorU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoKQoreworICAg
IHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcobV9kYXRhKTsKK30K
KworSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBudWxsVmFsdWUsIChTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpKSk7Ci0gICAgcmV0dXJuIG51bGxWYWx1ZS5nZXQoKTsK
KyAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9i
amVjdCwgbV9kYXRhKTsKIH0KIAogSlNWYWx1ZVJlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRl
c2VyaWFsaXplKEpTQ29udGV4dFJlZiBkZXN0aW5hdGlvbkNvbnRleHQsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKQEAgLTEwOTcsNyArMTI5NiwxNCBAQCBKU1ZhbHVlUmVmIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmIGRlc3RpbmF0aW9uQ29udGV4dCwgSgog
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CisgICAgQVNTRVJUKHZhbHVlKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdmFsdWUpOwogfQog
CitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVl
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBlbXB0eVZhbHVlLCAoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSkpOworICAg
IHJldHVybiBlbXB0eVZhbHVlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAzMmNlNDE4MWZlZGRmYWFiMDBlNmY2NjQ1MjQz
NDVjN2VmYTljMmI5Li5iNDFkOWEzMDM3MzM2ZWFmOWQ2NzRkYzVhNjdlNWQ4ZmZlYWI1NjM2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTI4LDIy
OSArMjgsMzQgQEAKICNkZWZpbmUgU2VyaWFsaXplZFNjcmlwdFZhbHVlX2gKIAogI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgQmxvYjsKLSAgICBjbGFzcyBGaWxlOwotICAgIGNsYXNzIEZpbGVMaXN0OwotICAg
IGNsYXNzIEltYWdlRGF0YTsKLSAgICBjbGFzcyBTZXJpYWxpemVkQXJyYXk7Ci0gICAgY2xhc3Mg
U2VyaWFsaXplZEJsb2I7Ci0gICAgY2xhc3MgU2VyaWFsaXplZEZpbGU7Ci0gICAgY2xhc3MgU2Vy
aWFsaXplZEZpbGVMaXN0OwotICAgIGNsYXNzIFNlcmlhbGl6ZWRJbWFnZURhdGE7Ci0gICAgY2xh
c3MgU2VyaWFsaXplZE9iamVjdDsKIAotICAgIGNsYXNzIFNoYXJlZFNlcmlhbGl6ZWREYXRhIDog
cHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkU2VyaWFsaXplZERhdGE+IHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgflNoYXJlZFNlcmlhbGl6ZWREYXRhKCkgeyB9Ci0gICAgICAgIFNlcmlh
bGl6ZWRBcnJheSogYXNBcnJheSgpOwotICAgICAgICBTZXJpYWxpemVkT2JqZWN0KiBhc09iamVj
dCgpOwotICAgICAgICBTZXJpYWxpemVkQmxvYiogYXNCbG9iKCk7Ci0gICAgICAgIFNlcmlhbGl6
ZWRGaWxlKiBhc0ZpbGUoKTsKLSAgICAgICAgU2VyaWFsaXplZEZpbGVMaXN0KiBhc0ZpbGVMaXN0
KCk7Ci0gICAgICAgIFNlcmlhbGl6ZWRJbWFnZURhdGEqIGFzSW1hZ2VEYXRhKCk7Ci0gICAgfTsK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsK
K2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3Jl
YXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShT
dHJpbmcgc3RyaW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIG51bGxWYWx1
ZSgpOwogCi0gICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBlbnVtIFNlcmlhbGl6ZWRUeXBlIHsKLSAgICAgICAgICAgIEVtcHR5VHlwZSwK
LSAgICAgICAgICAgIERhdGVUeXBlLAotICAgICAgICAgICAgTnVtYmVyVHlwZSwKLSAgICAgICAg
ICAgIEltbWVkaWF0ZVR5cGUsCi0gICAgICAgICAgICBPYmplY3RUeXBlLAotICAgICAgICAgICAg
QXJyYXlUeXBlLAotICAgICAgICAgICAgU3RyaW5nVHlwZSwKLSAgICAgICAgICAgIEJsb2JUeXBl
LAotICAgICAgICAgICAgRmlsZVR5cGUsCi0gICAgICAgICAgICBGaWxlTGlzdFR5cGUsCi0gICAg
ICAgICAgICBJbWFnZURhdGFUeXBlCi0gICAgICAgIH07CisgICAgSlNDOjpKU1ZhbHVlIGRlc2Vy
aWFsaXplKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpOworICAgIFN0cmluZyB0b1N0cmluZygpOworICAgIEpTVmFsdWVSZWYgZGVzZXJpYWxp
emUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIAorICAgIH5TZXJp
YWxpemVkU2NyaXB0VmFsdWUoKTsKIAotICAgICAgICBTZXJpYWxpemVkVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIHN0YXRpYyBTZXJpYWxpemVkU2NyaXB0VmFs
dWVEYXRhIHNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0gICAgICAg
IEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBib29sIG11c3RDb3B5KSBjb25zdDsKK3ByaXZhdGU6CisgICAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiBtX2RhdGE7Cit9OwogCi0gICAgICAgIH5TZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fc2hhcmVkRGF0YSkKLSAgICAgICAgICAgICAg
ICB0ZWFyRG93blNlcmlhbGl6ZWREYXRhKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWVEYXRhKCkKLSAgICAgICAgICAgIDogbV90eXBlKEVtcHR5VHlwZSkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlRGF0YShjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICAgICAgICAgIDogbV90eXBlKFN0cmlu
Z1R5cGUpCi0gICAgICAgICAgICAsIG1fc3RyaW5nKHN0cmluZy5jcm9zc1RocmVhZFN0cmluZygp
KSAvLyBGSVhNRTogU2hvdWxkIGJlIGFibGUgdG8ganVzdCBzaGFyZSB0aGUgU3RyaW5nSW1wbAot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBsaWNpdCBTZXJpYWxpemVkU2NyaXB0
VmFsdWVEYXRhKGNvbnN0IEJsb2IqKTsKLSAgICAgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YShjb25zdCBGaWxlKik7Ci0gICAgICAgIGV4cGxpY2l0IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGEoY29uc3QgRmlsZUxpc3QqKTsKLSAgICAgICAgZXhwbGljaXQgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YShjb25zdCBJbWFnZURhdGEqKTsKLQotICAgICAgICBleHBsaWNpdCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgICAg
IDogbV90eXBlKEltbWVkaWF0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
dmFsdWUuaXNDZWxsKCkpOwotICAgICAgICAgICAgbV9kYXRhLm1faW1tZWRpYXRlID0gSlNDOjpK
U1ZhbHVlOjplbmNvZGUodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YShTZXJpYWxpemVkVHlwZSB0eXBlLCBkb3VibGUgdmFsdWUpCi0gICAgICAg
ICAgICA6IG1fdHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGEubV9kb3Vi
bGUgPSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGEoUmVmUHRyPFNlcmlhbGl6ZWRPYmplY3Q+KTsKLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlRGF0YShSZWZQdHI8U2VyaWFsaXplZEFycmF5Pik7Ci0KLSAgICAgICAgSlNDOjpKU1ZhbHVl
IGFzSW1tZWRpYXRlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBJbW1lZGlhdGVUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmRl
Y29kZShtX2RhdGEubV9pbW1lZGlhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZG91YmxlIGFz
RG91YmxlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBO
dW1iZXJUeXBlIHx8IG1fdHlwZSA9PSBEYXRlVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhLm1fZG91YmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGFzU3RyaW5nKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsK
LSAgICAgICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICAgICAgfQotCi0gICAgICAgIFNlcmlh
bGl6ZWRPYmplY3QqIGFzT2JqZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBPYmplY3RUeXBlKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NoYXJlZERh
dGEpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNPYmplY3QoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFNlcmlhbGl6ZWRBcnJheSogYXNBcnJheSgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQXJyYXlUeXBlKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3NoYXJlZERhdGEpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+
YXNBcnJheSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2VyaWFsaXplZEJsb2IqIGFzQmxvYigp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQmxvYlR5cGUp
OwotICAgICAgICAgICAgQVNTRVJUKG1fc2hhcmVkRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zaGFyZWREYXRhLT5hc0Jsb2IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlcmlhbGl6ZWRG
aWxlKiBhc0ZpbGUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBl
ID09IEZpbGVUeXBlKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NoYXJlZERhdGEpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNGaWxlKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBTZXJpYWxpemVkRmlsZUxpc3QqIGFzRmlsZUxpc3QoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV90eXBlID09IEZpbGVMaXN0VHlwZSk7Ci0gICAgICAgICAgICBBU1NF
UlQobV9zaGFyZWREYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NoYXJlZERhdGEtPmFzRmls
ZUxpc3QoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU2VyaWFsaXplZEltYWdlRGF0
YSogYXNJbWFnZURhdGEoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90
eXBlID09IEltYWdlRGF0YVR5cGUpOwotICAgICAgICAgICAgQVNTRVJUKG1fc2hhcmVkRGF0YSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zaGFyZWREYXRhLT5hc0ltYWdlRGF0YSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBF
bXB0eVR5cGU7IH0KLQotICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIHJlc3Vs
dCA9ICp0aGlzOwotICAgICAgICAgICAgKnRoaXMgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIHRlYXJEb3duU2VyaWFsaXplZERhdGEoKTsKLSAgICAgICAgU2VyaWFs
aXplZFR5cGUgbV90eXBlOwotICAgICAgICBSZWZQdHI8U2hhcmVkU2VyaWFsaXplZERhdGE+IG1f
c2hhcmVkRGF0YTsKLSAgICAgICAgU3RyaW5nIG1fc3RyaW5nOwotICAgICAgICB1bmlvbiB7Ci0g
ICAgICAgICAgICBkb3VibGUgbV9kb3VibGU7Ci0gICAgICAgICAgICBKU0M6OkVuY29kZWRKU1Zh
bHVlIG1faW1tZWRpYXRlOwotICAgICAgICB9IG1fZGF0YTsKLSAgICB9OwotCi0gICAgY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJpYWxpemUoZXhl
YywgdmFsdWUpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoU3RyaW5nIHN0cmluZykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YShzdHJpbmcpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBzdGF0aWMgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBudWxsVmFsdWUoKTsKLQotICAgICAgICBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQgPSBhZG9w
dFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKG1fdmFsdWUpKTsKLSAgICAgICAgICAgIG1f
dmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKCk7Ci0gICAgICAgICAgICByZXN1bHQt
Pm1fbXVzdENvcHkgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotCi0gICAgICAgIFN0cmluZyB0b1N0cmluZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLnR5cGUoKSAhPSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpTdHJpbmdUeXBl
KQotICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVl
LmFzU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU0M6OkpTVmFsdWUgZGVzZXJpYWxp
emUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3ZhbHVlKQotICAgICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuZGVzZXJp
YWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX211c3RDb3B5KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEpTVmFsdWVSZWYgZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOwotICAgICAgICB+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0
YSB2YWx1ZSkKLSAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgICwgbV9t
dXN0Q29weShmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YSBtX3ZhbHVlOwotICAgICAgICBib29sIG1fbXVzdENvcHk7Ci0gICAg
fTsKIH0KIAogI2VuZGlmIC8vIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnRDaGFubmVsLmNwcAppbmRleCBlMWEzYWM2ZjMxYzQ3YjkzOTY1ODJmZGJiNDFmNmUwZGFlM2U2
ZDJkLi5jYjQzMWExZTJjOWJmMTY5MTViYzZlOGM3ZTA5OWQ0MTgwZTYxMThhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OmNy
ZWF0ZSgKIH0KIAogTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YShQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi0gICAgOiBtX21lc3NhZ2UobWVzc2FnZS0+cmVs
ZWFzZSgpKQorICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgLCBtX2NoYW5uZWxzKGNoYW5u
ZWxzKQogewogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1By
b3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXgg
MjE5OTRjYzYwN2ZiMTg5Mzg1NzRmNmE3MTQ5MzMxMTk2YjhkNWNhMC4uMTA3MDBjNjRlZjY5ZTVh
NWYzN2QwMWFmYjI0NDM2ZjVjNWZjZTFhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBN
ZXNzYWdlV29ya2VyQ29udGV4dFRhc2soUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQot
ICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLT5yZWxlYXNlKCkpCisgICAgICAgIDogbV9tZXNz
YWdlKG1lc3NhZ2UpCiAgICAgICAgICwgbV9jaGFubmVscyhjaGFubmVscykKICAgICB7CiAgICAg
fQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTWVzc2FnZVdvcmtl
clRhc2soUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25Q
dHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzLCBXb3JrZXJNZXNzYWdpbmdQcm94
eSogbWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UtPnJlbGVhc2Uo
KSkKKyAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZSkKICAgICAgICAgLCBtX2NoYW5uZWxzKGNo
YW5uZWxzKQogICAgICAgICAsIG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCiAgICAg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66602</attachid>
            <date>2010-09-05 17:34:18 -0700</date>
            <delta_ts>2010-09-06 14:01:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45244-20100905173416.patch</filename>
            <type>text/plain</type>
            <size>85065</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkZjBlMmNlNGFjMmM2OGQwZTUwNjJiOTY3ODU3YjU3ZTM5NTg3MmIwLi5m
MmRhYjVjYjc0MWZjY2VkMGY0NzgyZDc5Y2EzNzc5Yzg5OTFlNTk1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDktMDUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgbmVlZHMgdG8gdXNlIGEgZmxhdCBzdG9yYWdlIG1lY2hhbmlzbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNDQKKworICAg
ICAgICBFeHBvcnQgSlNBcnJheTo6cHV0CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6
CisKIDIwMTAtMDktMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
aW5kZXggMzBmNWFhODZmMWFjNTI2ZTdlMjViMTMwNDQ4YWE1MmNmNzUwODhhYy4uN2RmOTM3NjUw
MTExNzEzNTk3YjllNjFkMDM4YjQyYjAyZGI4ZDVhYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cApAQCAtMjQxLDYgKzI0MSw3IEBAIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0M2UGFyc2VyNXBhcnNlRVBOU18xMkpTR2xvYmFsRGF0YUVQaVBOU183VVN0cmlu
Z0UKIF9fWk4zSlNDN0pTQXJyYXkxMm1hcmtDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4z
SlNDN0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgorX19aTjNKU0M3SlNBcnJheTE4Z2V0T3du
UHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pT
QzdKU0FycmF5NGluZm9FCiBfX1pOM0pTQzdKU0FycmF5OXNldExlbmd0aEVqCiBfX1pOM0pTQzdK
U0FycmF5QzFFTjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA1OGU1NjBhNGI3OTBiOWYwNTU1OTU1Yjc2ZGU4OTNhNWVhNTFmMmMwLi42MjQwMTg5MmQxNWJi
ZDQ5MjQ0N2EyNmM5OGRhODMzMTcwYmNlNTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAt
MDktMDUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbmVl
ZHMgdG8gdXNlIGEgZmxhdCBzdG9yYWdlIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNDQKKworICAgICAgICBBZGQgYSBmZXcgbW9y
ZSB0ZXN0IGNhc2VzIHRvIGNvdmVyIHRoZSBuZXcgYnJhbmNoZXMgaW4gdGhlCisgICAgICAgIHJl
d3JpdHRlbiBzZXJpYWxpemF0aW9uIGxvZ2ljLgorCisgICAgICAgICogZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sOgorCiAyMDEwLTA5LTA1ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNjY4MDEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtZXhwZWN0ZWQu
dHh0CmluZGV4IDU0ZjE5NDAzZTU3MWFlYjk1N2YxYTJkMjVhZTIyMWQwNzY5OWZiNmQuLmVkYjAx
MjQ0MTFhN2M2MWMxMDNiZWQ4ZTM2N2Y1NzQ4ZTdmMzQ0ZTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xv
bmUtZXhwZWN0ZWQudHh0CkBAIC0xMCw3ICsxMCwxNCBAQCBQQVNTOiBldmVudERhdGEgaXMgdHJ1
ZSBvZiB0eXBlIGJvb2xlYW4KIFBBU1M6IGV2ZW50RGF0YSBpcyAxIG9mIHR5cGUgc3RyaW5nCiBQ
QVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CiBQQVNTOiBl
dmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERh
dGEgaXMgW29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMg
W29iamVjdCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVj
dCBPYmplY3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmpl
Y3RdIG9mIHR5cGUgb2JqZWN0CitQQVNTOiBldmVudERhdGEgaXMgW29iamVjdCBPYmplY3RdIG9m
IHR5cGUgb2JqZWN0CiBQQVNTOiBldmVudERhdGEgaXMgb2YgdHlwZSBvYmplY3QKK1BBU1M6IGV2
ZW50RGF0YSBpcyBhLGEsYixhLGIgb2YgdHlwZSBvYmplY3QKK1BBU1M6IGV2ZW50RGF0YSBpcyBh
LGEsYixbb2JqZWN0IE9iamVjdF0gb2YgdHlwZSBvYmplY3QKIFBBU1M6IGV2ZW50RGF0YSBpcyAx
LDIsMyBvZiB0eXBlIG9iamVjdAogUEFTUzogZXZlbnREYXRhIGlzICwsMSBvZiB0eXBlIG9iamVj
dAogUEFTUzogZXZlbnREYXRhIGlzIG51bGwgb2YgdHlwZSBvYmplY3QKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUuaHRt
bAppbmRleCBlNzU1ZjRhYzRkNmRiY2E3YTFjMTZhYWNkYTU0ZTQ1M2NjYjU4NzNmLi42Y2IzMzdk
ZjFlODQyMjU3MzExNWZiMzY4NmYyMTBjNmJjNDM5OGY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCkBA
IC0xMjQsNyArMTI0LDE0IEBAIHRyeVBvc3RNZXNzYWdlKCd0cnVlJyk7CiB0cnlQb3N0TWVzc2Fn
ZSgnIjEiJyk7CiB0cnlQb3N0TWVzc2FnZSgnKHt9KScpOwogdHJ5UG9zdE1lc3NhZ2UoJyh7YTox
fSknKTsKK3RyeVBvc3RNZXNzYWdlKCcoe2E6ImEifSknKTsKK3RyeVBvc3RNZXNzYWdlKCcoe2I6
ImEiLCBhOiJiIn0pJyk7Cit0cnlQb3N0TWVzc2FnZSgnKHthOiIifSknKTsKK3RyeVBvc3RNZXNz
YWdlKCcoe2E6MH0pJyk7Cit0cnlQb3N0TWVzc2FnZSgnKHthOjF9KScpOwogdHJ5UG9zdE1lc3Nh
Z2UoJ1tdJyk7Cit0cnlQb3N0TWVzc2FnZSgnWyJhIiwgImEiLCAiYiIsICJhIiwgImIiXScpOwor
dHJ5UG9zdE1lc3NhZ2UoJ1siYSIsICJhIiwgImIiLCB7YToiYiIsIGI6ImEifV0nKTsKIHRyeVBv
c3RNZXNzYWdlKCdbMSwyLDNdJyk7CiB0cnlQb3N0TWVzc2FnZSgnWywsMV0nKTsKIHRyeVBvc3RN
ZXNzYWdlKCcoZnVuY3Rpb24oKXt9KScsIGZhbHNlLCAnbnVsbCcpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNzNlYmNlY2M2YzMwN2Yx
OGE0NDlmZmIzYmNmMGU5ZmRmYmZlMjc4Li5kMmQwYmMzM2UyMzRiMjhkMjFlZjMwZDcwMzBiOGJk
YzlmYzVmMWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEwLTA5LTA1ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIG5lZWRzIHRvIHVzZSBhIGZsYXQgc3RvcmFnZSBt
ZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MjQ0CisKKyAgICAgICAgUmV3cml0ZSB0aGUgb2xkIHRyZWUgdG8gdHJlZSBzZXJpYWxpemF0
aW9uIGxvZ2ljIHRvIHVzZQorICAgICAgICBmbGF0IHN0b3JhZ2UuICBVbmZvcnR1bmF0ZWx5IHRo
aXMgYmFzaWNhbGx5IHJlcXVpcmVkIGEKKyAgICAgICAgY29tcGxldGUgcmV3cml0ZS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZUJhc2U6OkNsb25lQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZUJh
c2U6OnNob3VsZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZUJhc2U6OnRpY2tz
VW50aWxOZXh0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVCYXNlOjpkaWRUaW1lT3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6dGhyb3dTdGFja092ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6dGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZUJhc2U6OmZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxp
emVyOjpDbG9uZVNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVy
Ojppc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c3RhcnRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydEFycmF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lU2VyaWFsaXplcjo6Z2V0U3BhcnNlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVTZXJpYWxpemVyOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZVNlcmlhbGl6ZXI6OmR1bXBJbW1lZGlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjpkdW1wU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6
ZHVtcElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlTGl0dGxlRW5kaWFu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6d3JpdGVTdHJpbmdJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpDbG9uZURlc2VyaWFsaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6dGhyb3dWYWxpZGF0aW9uRXJyb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmlzVmFsaWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRMaXR0bGVFbmRpYW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmdJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNl
cmlhbGl6ZXI6OnJlYWRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OnB1dFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFk
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6flNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgor
ICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YSk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
V29ya2VyQ29udGV4dFRhc2s6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6TWVzc2FnZVdvcmtlclRhc2spOgorCiAyMDEwLTA5
LTA1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IGNhMThlYzBhYjgwMjUwZDBmMzFiMGJmYjYxNjI0NmQwMDdiMmJl
NDcuLjJkODM4ODBhODYyNWZiN2I5YWY5YWQ3NmM1NWExNzMxNDU3ZWY2MzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCiAjaW5jbHVk
ZSAiSlNJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxs
aW1pdHM+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtNDcs
MzIzICs0OSw1MjYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgQ1BVKEJJR19FTkRJQU4pIHx8IENQ
VShNSURETEVfRU5ESUFOKQorI2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAwCisjZWxzZQor
I2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAxCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTZXJpYWxpemVkT2JqZWN0IDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWRE
YXRhCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4g
UHJvcGVydHlOYW1lTGlzdDsKLSAgICB0eXBlZGVmIFZlY3RvcjxTZXJpYWxpemVkU2NyaXB0VmFs
dWVEYXRhPiBWYWx1ZUxpc3Q7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUZpbHRlclJl
Y3Vyc2lvbiA9IDQwMDAwOwogCi0gICAgdm9pZCBzZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX25hbWVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkpOwotICAgICAg
ICBtX25hbWVzLmFwcGVuZChpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKS5jcm9zc1Ro
cmVhZFN0cmluZygpLmltcGwoKSk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0g
ICAgfQorZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBB
cnJheVN0YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCisgICAgT2JqZWN0U3Rh
cnRTdGF0ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIgfTsK
IAotICAgIFByb3BlcnR5TmFtZUxpc3QmIG5hbWVzKCkgeyByZXR1cm4gbV9uYW1lczsgfQorLy8g
VGhlc2UgY2FuJ3QgYmUgcmVvcmRlcmVkLCBhbmQgYW55IG5ldyB0eXBlcyBtdXN0IGJlIGFkZGVk
IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK2VudW0gU2VyaWFsaXphdGlvblRhZyB7CisgICAgQXJy
YXlUYWcgPSAxLAorICAgIE9iamVjdFRhZyA9IDIsCisgICAgVW5kZWZpbmVkVGFnID0gMywKKyAg
ICBOdWxsVGFnID0gNCwKKyAgICBJbnRUYWcgPSA1LAorICAgIFplcm9UYWcgPSA2LAorICAgIE9u
ZVRhZyA9IDcsCisgICAgRmFsc2VUYWcgPSA4LAorICAgIFRydWVUYWcgPSA5LAorICAgIERvdWJs
ZVRhZyA9IDEwLAorICAgIERhdGVUYWcgPSAxMSwKKyAgICBGaWxlVGFnID0gMTIsCisgICAgRmls
ZUxpc3RUYWcgPSAxMywKKyAgICBJbWFnZURhdGFUYWcgPSAxNCwKKyAgICBCbG9iVGFnID0gMTUs
CisgICAgU3RyaW5nVGFnID0gMTYsCisgICAgRW1wdHlTdHJpbmdUYWcgPSAxNywKKyAgICBFcnJv
clRhZyA9IDI1NQorfTsKIAotICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1
ZXM7IH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRPYmplY3Q+IGNyZWF0ZSgp
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IEN1cnJlbnRWZXJzaW9uID0gMTsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgVGVybWluYXRvclRhZyA9IDB4RkZGRkZGRkY7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IFN0cmluZ1Bvb2xUYWcgPSAweEZGRkZGRkZFOworCisvKgorICogT2Jq
ZWN0IHNlcmlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5n
IGdyYW1tYXIsIGFsbCB0YWdzCisgKiBhcmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgdWludDhfdC4K
KyAqCisgKiBJbmRleFR5cGUgKHVzZWQgZm9yIFN0cmluZ0RhdGEncyBjb25zdGFudCBwb29sKSBp
cyB0aGUgc2l6ZWQgdW5zaWduZWQgaW50ZWdlciB0eXBlCisgKiByZXF1aXJlZCB0byByZXByZXNl
bnQgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlIGNvbnN0YW50IHBvb2wuCisgKgorICogU2VyaWFs
aXplZFZhbHVlIDotIDxDdXJyZW50VmVyc2lvbjp1aW50MzJfdD4gVmFsdWUKKyAqIFZhbHVlIDot
IEFycmF5IHwgT2JqZWN0IHwgVGVybWluYWwKKyAqCisgKiBBcnJheSA6LQorICogICAgIEFycmF5
VGFnIDxsZW5ndGg6dWludDMyX3Q+KDxpbmRleDp1aW50MzJfdD48dmFsdWU6VmFsdWU+KSogVGVy
bWluYXRvclRhZworICoKKyAqIE9iamVjdCA6LQorICogICAgIE9iamVjdFRhZyAoPG5hbWU6U3Ry
aW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZworICoKKyAqIFRlcm1pbmFsIDot
CisgKiAgICAgIFVuZGVmaW5lZFRhZworICogICAgfCBOdWxsVGFnCisgKiAgICB8IEludFRhZyA8
dmFsdWU6aW50MzJfdD4KKyAqICAgIHwgWmVyb1RhZworICogICAgfCBPbmVUYWcKKyAqICAgIHwg
RG91YmxlVGFnIDx2YWx1ZTpkb3VibGU+CisgKiAgICB8IERhdGVUYWcgPHZhbHVlOmRvdWJsZT4K
KyAqICAgIHwgU3RyaW5nCisgKiAgICB8IEVtcHR5U3RyaW5nVGFnCisgKiAgICB8IEZpbGUKKyAq
ICAgIHwgRmlsZUxpc3QKKyAqICAgIHwgSW1hZ2VEYXRhCisgKiAgICB8IEJsb2IKKyAqCisgKiBT
dHJpbmcgOi0KKyAqICAgICAgRW1wdHlTdHJpbmdUYWcKKyAqICAgICAgU3RyaW5nVGFnIFN0cmlu
Z0RhdGEKKyAqCisgKiBTdHJpbmdEYXRhIDotCisgKiAgICAgIFN0cmluZ1Bvb2xUYWcgPGNwSW5k
ZXg6SW5kZXhUeXBlPgorICogICAgICAobm90IChUZXJtaW5hdG9yVGFnIHwgU3RyaW5nUG9vbFRh
ZykpPGxlbmd0aDp1aW50MzJfdD48Y2hhcmFjdGVyczpVQ2hhcntsZW5ndGh9PiAvLyBBZGRlZCB0
byBjb25zdGFudCBwb29sIHdoZW4gc2Vlbiwgc3RyaW5nIGxlbmd0aCAweEZGRkZGRkZGIGlzIGRp
c2FsbG93ZWQKKyAqCisgKiBGaWxlIDotCisgKiAgICBGaWxlVGFnIEZpbGVEYXRhCisgKgorICog
RmlsZURhdGEgOi0KKyAqICAgIDxwYXRoOlN0cmluZ0RhdGE+IDx1cmw6U3RyaW5nRGF0YT4gPHR5
cGU6U3RyaW5nRGF0YT4KKyAqCisgKiBGaWxlTGlzdCA6LQorICogICAgRmlsZUxpc3RUYWcgPGxl
bmd0aDp1aW50MzJfdD4oPGZpbGU6RmlsZURhdGE+KXtsZW5ndGh9CisgKgorICogSW1hZ2VEYXRh
IDotCisgKiAgICBJbWFnZURhdGFUYWcgPHdpZHRoOnVpbnQzMl90PjxoZWlnaHQ6dWludDMyX3Q+
PGxlbmd0aDp1aW50MzJfdD48ZGF0YTp1aW50OF90e2xlbmd0aH0+CisgKgorICogQmxvYiA6LQor
ICogICAgQmxvYlRhZyA8dXJsOlN0cmluZ0RhdGE+PHR5cGU6U3RyaW5nRGF0YT48c2l6ZTpsb25n
IGxvbmc+CisgKgorICovCisKK2NsYXNzIENsb25lQmFzZSB7Citwcm90ZWN0ZWQ6CisgICAgQ2xv
bmVCYXNlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgOiBtX2V4ZWMoZXhlYykKKyAgICAgICAg
LCBtX2ZhaWxlZChmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVvdXRDaGVja2VyKGV4ZWMtPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2VyaWFsaXplZE9iamVjdCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpCisgICAgYm9v
bCBzaG91bGRUZXJtaW5hdGUoKQogICAgIHsKLSAgICAgICAgbV9uYW1lcy5jbGVhcigpOwotICAg
ICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICByZXR1cm4gbV9leGVjLT5oYWRFeGNlcHRp
b24oKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgU2VyaWFsaXplZE9iamVjdCgpIHsgfQotICAg
IFByb3BlcnR5TmFtZUxpc3QgbV9uYW1lczsKLSAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7Ci19Owot
Ci1jbGFzcyBTZXJpYWxpemVkQXJyYXkgOiBwdWJsaWMgU2hhcmVkU2VyaWFsaXplZERhdGEKLXsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEs
IERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1bnNpZ25lZD4gPiBTcGFyc2VNYXA7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRJbmRl
eCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUp
CisgICAgdW5zaWduZWQgdGlja3NVbnRpbE5leHRDaGVjaygpCiAgICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX2xlbmd0aCk7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX2NvbXBhY3RTdG9y
YWdlLnNpemUoKSkKLSAgICAgICAgICAgIG1fY29tcGFjdFN0b3JhZ2UuYXBwZW5kKHZhbHVlKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zcGFyc2VTdG9yYWdlLnNldChpbmRleCwgdmFs
dWUpOworICAgICAgICByZXR1cm4gbV90aW1lb3V0Q2hlY2tlci50aWNrc1VudGlsTmV4dENoZWNr
KCk7CiAgICAgfQogCi0gICAgYm9vbCBjYW5Eb0Zhc3RSZWFkKHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIGJvb2wgZGlkVGltZU91dCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBt
X2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBpbmRleCA8IG1fY29tcGFjdFN0b3JhZ2Uuc2l6ZSgp
OworICAgICAgICByZXR1cm4gbV90aW1lb3V0Q2hlY2tlci5kaWRUaW1lT3V0KG1fZXhlYyk7CiAg
ICAgfQogCi0gICAgY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSYgZ2V0SW5kZXgodW5z
aWduZWQgaW5kZXgpCisgICAgdm9pZCB0aHJvd1N0YWNrT3ZlcmZsb3coKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgbV9jb21wYWN0U3RvcmFnZS5zaXplKCkpOwotICAgICAgICByZXR1
cm4gbV9jb21wYWN0U3RvcmFnZVtpbmRleF07CisgICAgICAgIHRocm93RXJyb3IobV9leGVjLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IobV9leGVjKSk7CiAgICAgfQogCi0gICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YSBnZXRTcGFyc2VJbmRleCh1bnNpZ25lZCBpbmRleCwgYm9vbCYgaGFz
SW5kZXgpCisgICAgdm9pZCB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9uKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCA+PSBtX2NvbXBhY3RTdG9yYWdlLnNpemUoKSk7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA8IG1fbGVuZ3RoKTsKLSAgICAgICAgU3BhcnNlTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9zcGFyc2VTdG9yYWdlLmZpbmQoaW5kZXgpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3Nw
YXJzZVN0b3JhZ2UuZW5kKCkpIHsKLSAgICAgICAgICAgIGhhc0luZGV4ID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGhhc0luZGV4ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSkpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0CisgICAgdm9pZCBmYWlsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xlbmd0
aDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1
ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkQXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgYm9vbCBtX2Zh
aWxlZDsKKyAgICBUaW1lb3V0Q2hlY2tlciBtX3RpbWVvdXRDaGVja2VyOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIG1fZ2NCdWZmZXI7Cit9OworCitjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBD
bG9uZUJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIHNlcmlhbGl6ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3Rvcjx1aW50OF90PiYgb3V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkQXJyYXkobGVuZ3RoKSk7CisgICAgICAg
IENsb25lU2VyaWFsaXplciBzZXJpYWxpemVyKGV4ZWMsIG91dCk7CisgICAgICAgIHJldHVybiBz
ZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpCisg
ICAgc3RhdGljIGJvb2wgc2VyaWFsaXplKFN0cmluZyBzLCBWZWN0b3I8dWludDhfdD4mIG91dCkK
ICAgICB7Ci0gICAgICAgIG1fY29tcGFjdFN0b3JhZ2UuY2xlYXIoKTsKLSAgICAgICAgbV9zcGFy
c2VTdG9yYWdlLmNsZWFyKCk7Ci0gICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgd3JpdGVM
aXR0bGVFbmRpYW4ob3V0LCBDdXJyZW50VmVyc2lvbik7CisgICAgICAgIGlmIChzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBFbXB0eVN0
cmluZ1RhZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB3
cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90PihvdXQsIFN0cmluZ1RhZyk7CisgICAgICAgIHdyaXRl
TGl0dGxlRW5kaWFuKG91dCwgcy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiB3cml0ZUxpdHRs
ZUVuZGlhbihvdXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOwogICAgIH0K
KwogcHJpdmF0ZToKLSAgICBTZXJpYWxpemVkQXJyYXkodW5zaWduZWQgbGVuZ3RoKQotICAgICAg
ICA6IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVj
LCBWZWN0b3I8dWludDhfdD4mIG91dCkKKyAgICAgICAgOiBDbG9uZUJhc2UoZXhlYykKKyAgICAg
ICAgLCBtX2J1ZmZlcihvdXQpCisgICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoZXhlYywgVVN0
cmluZygiIiwgMCkpCiAgICAgeworICAgICAgICB3cml0ZShDdXJyZW50VmVyc2lvbik7CiAgICAg
fQogCi0gICAgVmVjdG9yPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE+IG1fY29tcGFjdFN0b3Jh
Z2U7Ci0gICAgU3BhcnNlTWFwIG1fc3BhcnNlU3RvcmFnZTsKLSAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKLX07CisgICAgYm9vbCBzZXJpYWxpemUoSlNWYWx1ZSBpbik7CiAKLWNsYXNzIFNlcmlhbGl6
ZWRCbG9iIDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkQmxvYj4gY3JlYXRlKGNvbnN0IEJsb2IqIGJsb2IpCisg
ICAgYm9vbCBpc0FycmF5KEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRCbG9iKGJsb2IpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgICAgICByZXR1cm4gaXNKU0FycmF5KCZtX2V4ZWMt
Pmdsb2JhbERhdGEoKSwgb2JqZWN0KSB8fCBvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjppbmZv
KTsKKyAgICB9CisKKyAgICBib29sIHN0YXJ0T2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpCisgICAg
eworICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KKyAgICAgICAgaWYgKCFtX2N5Y2xlRGV0ZWN0
b3IuYWRkKG9iamVjdCkuc2Vjb25kKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKG1fZXhlYywg
Y3JlYXRlVHlwZUVycm9yKG1fZXhlYywgIkNhbm5vdCBwb3N0IGN5Y2xpYyBzdHJ1Y3R1cmVzLiIp
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZChvYmplY3QpOworICAgICAgICB3cml0ZShPYmplY3RUYWcpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAKLXByaXZhdGU6Ci0gICAgU2VyaWFsaXplZEJsb2IoY29uc3QgQmxvYiogYmxvYikKLSAg
ICAgICAgOiBtX3VybChibG9iLT51cmwoKS5jb3B5KCkpCi0gICAgICAgICwgbV90eXBlKGJsb2It
PnR5cGUoKS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICAgICAsIG1fc2l6ZShibG9iLT5zaXpl
KCkpCisgICAgYm9vbCBzdGFydEFycmF5KEpTQXJyYXkqIGFycmF5KQogICAgIHsKKyAgICAgICAg
Ly8gQ3ljbGUgZGV0ZWN0aW9uCisgICAgICAgIGlmICghbV9jeWNsZURldGVjdG9yLmFkZChhcnJh
eSkuc2Vjb25kKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKG1fZXhlYywgY3JlYXRlVHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBwb3N0IGN5Y2xpYyBzdHJ1Y3R1cmVzLiIpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChh
cnJheSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKyAgICAg
ICAgd3JpdGUoQXJyYXlUYWcpOworICAgICAgICB3cml0ZShsZW5ndGgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3R5cGU7Ci0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIG1fc2l6ZTsKLX07CisgICAgdm9pZCBlbmRPYmplY3QoSlNP
YmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIHdyaXRlKFRlcm1pbmF0b3JUYWcpOworICAg
ICAgICBtX2N5Y2xlRGV0ZWN0b3IucmVtb3ZlKG9iamVjdCk7CisgICAgICAgIG1fZ2NCdWZmZXIu
cmVtb3ZlTGFzdCgpOworICAgIH0KIAotY2xhc3MgU2VyaWFsaXplZEZpbGUgOiBwdWJsaWMgU2hh
cmVkU2VyaWFsaXplZERhdGEgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRGaWxlPiBjcmVhdGUoY29uc3QgRmlsZSogZmlsZSkKKyAgICBKU1ZhbHVlIGdldFNwYXJz
ZUluZGV4KEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGJvb2wmIGhhc0lu
ZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkRmlsZShm
aWxlKSk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGFycmF5KTsKKyAgICAgICAgaWYgKGlz
SlNBcnJheSgmbV9leGVjLT5nbG9iYWxEYXRhKCksIGFycmF5KSkgeworICAgICAgICAgICAgaWYg
KGFycmF5LT5KU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QobV9leGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKSB7CisgICAgICAgICAgICAgICAgaGFzSW5kZXggPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhcnJheS0+Z2V0T3duUHJvcGVydHlTbG90KG1fZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAgaGFzSW5kZXggPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUobV9leGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB9CisgICAgICAgIGhhc0luZGV4ID0gZmFsc2U7CisgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEpT
VmFsdWUgZ2V0UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKKyAg
ICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KG1fZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAKLXByaXZhdGU6Ci0g
ICAgU2VyaWFsaXplZEZpbGUoY29uc3QgRmlsZSogZmlsZSkKLSAgICAgICAgOiBtX3BhdGgoZmls
ZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgICAgICwgbV91cmwoZmlsZS0+dXJs
KCkuY29weSgpKQotICAgICAgICAsIG1fdHlwZShmaWxlLT50eXBlKCkuY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICB2b2lkIGR1bXBJbW1lZGlhdGUoSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHdyaXRlKE51bGxUYWcpOworICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgd3JpdGUoVW5k
ZWZpbmVkVGFnKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWUu
YXNJbnQzMigpKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShaZXJvVGFnKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5hc0ludDMyKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoT25lVGFnKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoSW50VGFnKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHZhbHVlLmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGUoRG91YmxlVGFnKTsKKyAgICAg
ICAgICAgICAgICB3cml0ZSh2YWx1ZS5hc0RvdWJsZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgaWYgKHZhbHVl
LmlzVHJ1ZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKFRydWVUYWcpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHdyaXRlKEZhbHNlVGFnKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgS1VSTCBtX3VybDsKLSAgICBTdHJpbmcgbV90eXBl
OwotfTsKKyAgICB2b2lkIGR1bXBTdHJpbmcoVVN0cmluZyBzdHIpCisgICAgeworICAgICAgICBp
ZiAoc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHdyaXRlKEVtcHR5U3RyaW5nVGFnKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB3cml0ZShTdHJpbmdUYWcpOworICAgICAgICAgICAg
d3JpdGUoc3RyKTsKKyAgICAgICAgfQorICAgIH0KIAotY2xhc3MgU2VyaWFsaXplZEZpbGVMaXN0
IDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgRmls
ZURhdGEgewotICAgICAgICBTdHJpbmcgcGF0aDsKLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAg
IFN0cmluZyB0eXBlOwotICAgIH07CisgICAgYm9vbCBkdW1wSWZUZXJtaW5hbChKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ZHVtcEltbWVkaWF0ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBVU3RyaW5n
IHN0ciA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9leGVjKTsKKyAgICAgICAgICAgIGR1bXBT
dHJpbmcoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIHdyaXRlKERvdWJsZVRhZyk7
CisgICAgICAgICAgICB3cml0ZSh2YWx1ZS51bmNoZWNrZWRHZXROdW1iZXIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpIHsK
KyAgICAgICAgICAgIHdyaXRlKERhdGVUYWcpOworICAgICAgICAgICAgd3JpdGUoYXNEYXRlSW5z
dGFuY2UodmFsdWUpLT5pbnRlcm5hbE51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTRmlsZTo6c19pbmZvKSkgeworICAgICAgICAgICAgICAgIHdyaXRlKEZp
bGVUYWcpOworICAgICAgICAgICAgICAgIHdyaXRlKHRvRmlsZShvYmopKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvYmotPmlu
aGVyaXRzKCZKU0ZpbGVMaXN0OjpzX2luZm8pKSB7CisgICAgICAgICAgICAgICAgRmlsZUxpc3Qq
IGxpc3QgPSB0b0ZpbGVMaXN0KG9iaik7CisgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RU
YWcpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgIHdyaXRlKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShs
aXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpIHsKKyAg
ICAgICAgICAgICAgICB3cml0ZShCbG9iVGFnKTsKKyAgICAgICAgICAgICAgICBCbG9iKiBibG9i
ID0gdG9CbG9iKG9iaik7CisgICAgICAgICAgICAgICAgd3JpdGUoYmxvYi0+dXJsKCkpOworICAg
ICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgd3JpdGUo
YmxvYi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0ltYWdlRGF0YTo6c19pbmZvKSkg
eworICAgICAgICAgICAgICAgIEltYWdlRGF0YSogZGF0YSA9IHRvSW1hZ2VEYXRhKG9iaik7Cisg
ICAgICAgICAgICAgICAgd3JpdGUoSW1hZ2VEYXRhVGFnKTsKKyAgICAgICAgICAgICAgICB3cml0
ZShkYXRhLT53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSwgZGF0YS0+ZGF0YSgp
LT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkRmlsZUxpc3Q+IGNyZWF0ZShjb25z
dCBGaWxlTGlzdCogbGlzdCkKKyAgICAgICAgICAgIENhbGxEYXRhIHVudXNlZERhdGE7CisgICAg
ICAgICAgICBpZiAoZ2V0Q2FsbERhdGEodmFsdWUsIHVudXNlZERhdGEpID09IENhbGxUeXBlTm9u
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8g
QW55IG90aGVyIHR5cGVzIGFyZSBleHBlY3RlZCB0byBzZXJpYWxpemUgYXMgbnVsbC4KKyAgICAg
ICAgd3JpdGUoTnVsbFRhZyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZv
aWQgd3JpdGUoU2VyaWFsaXphdGlvblRhZyB0YWcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRGaWxlTGlzdChsaXN0KSk7CisgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuPHVpbnQ4X3Q+KG1fYnVmZmVyLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0YWcpKTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVzLnNpemUo
KTsgfQotICAgIGNvbnN0IEZpbGVEYXRhJiBpdGVtKHVuc2lnbmVkIGlkeCkgeyByZXR1cm4gbV9m
aWxlc1tpZHhdOyB9CisgICAgdm9pZCB3cml0ZSh1aW50OF90IGMpCisgICAgeworICAgICAgICB3
cml0ZUxpdHRsZUVuZGlhbihtX2J1ZmZlciwgYyk7CisgICAgfQogCi1wcml2YXRlOgotICAgIFNl
cmlhbGl6ZWRGaWxlTGlzdChjb25zdCBGaWxlTGlzdCogbGlzdCkKKyNpZiBBU1NVTUVfTElUVExF
X0VORElBTgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCB3cml0ZUxpdHRs
ZUVuZGlhbihWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICBtX2ZpbGVzLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIEZpbGUqIGZpbGUgPSBsaXN0LT5pdGVtKGkpOwotICAg
ICAgICAgICAgRmlsZURhdGEgZmlsZURhdGE7Ci0gICAgICAgICAgICBmaWxlRGF0YS5wYXRoID0g
ZmlsZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBmaWxlRGF0YS51
cmwgPSBmaWxlLT51cmwoKS5jb3B5KCk7Ci0gICAgICAgICAgICBmaWxlRGF0YS50eXBlID0gZmls
ZS0+dHlwZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2ZpbGVzLmFwcGVu
ZChmaWxlRGF0YSk7CisgICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQodmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXIuYXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSkpOwor
ICAgIH0KKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRl
TGl0dGxlRW5kaWFuKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihUKTsgaSsrKSB7CisgICAgICAg
ICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAgICAgICB2YWx1ZSA+Pj0g
ODsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZgogCi0gICAgVmVjdG9yPEZpbGVEYXRhPiBtX2Zp
bGVzOwotfTsKLQotY2xhc3MgU2VyaWFsaXplZEltYWdlRGF0YSA6IHB1YmxpYyBTaGFyZWRTZXJp
YWxpemVkRGF0YSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZElt
YWdlRGF0YT4gY3JlYXRlKGNvbnN0IEltYWdlRGF0YSogaW1hZ2VEYXRhKQorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCB3cml0ZUxpdHRsZUVuZGlhbihWZWN0b3I8dWludDhf
dD4mIGJ1ZmZlciwgY29uc3QgVCogdmFsdWVzLCB1aW50MzJfdCBsZW5ndGgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRJbWFnZURhdGEoaW1hZ2VEYXRhKSk7
CisgICAgICAgIGlmIChsZW5ndGggPiBudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIC8g
c2l6ZW9mKFQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgQVNTVU1FX0xJVFRM
RV9FTkRJQU4KKyAgICAgICAgYnVmZmVyLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPih2YWx1ZXMpLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2Vsc2UKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBUIHZhbHVl
ID0gdmFsdWVzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNpemVv
ZihUKTsgaisrKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDx1
aW50OF90Pih2YWx1ZSAmIDB4RkYpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gODsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
LSAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotICAgIFdU
Rjo6Qnl0ZUFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFNlcmlhbGl6ZWRJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRhKiBpbWFnZURh
dGEpCi0gICAgICAgIDogbV93aWR0aChpbWFnZURhdGEtPndpZHRoKCkpCi0gICAgICAgICwgbV9o
ZWlnaHQoaW1hZ2VEYXRhLT5oZWlnaHQoKSkKKworICAgIHZvaWQgd3JpdGUodWludDMyX3QgaSkK
ICAgICB7Ci0gICAgICAgIFdURjo6Qnl0ZUFycmF5KiBhcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7Ci0gICAgICAgIG1fc3RvcmFnZSA9IFdURjo6Qnl0ZUFycmF5OjpjcmVhdGUoYXJy
YXktPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KG1fc3RvcmFnZS0+ZGF0YSgpLCBhcnJheS0+
ZGF0YSgpLCBhcnJheS0+bGVuZ3RoKCkpOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihtX2J1
ZmZlciwgaSk7CiAgICAgfQotICAgIHVuc2lnbmVkIG1fd2lkdGg7Ci0gICAgdW5zaWduZWQgbV9o
ZWlnaHQ7Ci0gICAgUmVmUHRyPFdURjo6Qnl0ZUFycmF5PiBtX3N0b3JhZ2U7Ci19OwogCi1TZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKFJlZlB0cjxT
ZXJpYWxpemVkT2JqZWN0PiBkYXRhKQotICAgIDogbV90eXBlKE9iamVjdFR5cGUpCi0gICAgLCBt
X3NoYXJlZERhdGEoZGF0YSkKLXsKLX0KKyAgICB2b2lkIHdyaXRlKGRvdWJsZSBkKQorICAgIHsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgZG91YmxlIGQ7CisgICAgICAgICAgICBpbnQ2
NF90IGk7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5kID0gZDsKKyAgICAgICAgd3JpdGVMaXR0
bGVFbmRpYW4obV9idWZmZXIsIHUuaSk7CisgICAgfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWVE
YXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+IGRh
dGEpCi0gICAgOiBtX3R5cGUoQXJyYXlUeXBlKQotICAgICwgbV9zaGFyZWREYXRhKGRhdGEpCi17
Ci19CisgICAgdm9pZCB3cml0ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7CisgICAgICAg
IHdyaXRlTGl0dGxlRW5kaWFuKG1fYnVmZmVyLCBpKTsKKyAgICB9CisgICAgdm9pZCB3cml0ZShV
Q2hhciBjaCkKKyAgICB7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG1fYnVmZmVyLCBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oY2gpKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0KQot
ICAgIDogbV90eXBlKEZpbGVMaXN0VHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0YShTZXJpYWxpemVk
RmlsZUxpc3Q6OmNyZWF0ZShmaWxlTGlzdCkpCi17Ci19CisgICAgdm9pZCB3cml0ZVN0cmluZ0lu
ZGV4KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBpZiAobV9jb25zdGFudFBvb2wuc2l6ZSgp
IDw9IDB4RkYpCisgICAgICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpKSk7Cisg
ICAgICAgIGVsc2UgaWYgKG1fY29uc3RhbnRQb29sLnNpemUoKSA8PSAweEZGRkYpCisgICAgICAg
ICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50MTZfdD4oaSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgIH0KIAotU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBJbWFn
ZURhdGEqIGltYWdlRGF0YSkKLSAgICA6IG1fdHlwZShJbWFnZURhdGFUeXBlKQotICAgICwgbV9z
aGFyZWREYXRhKFNlcmlhbGl6ZWRJbWFnZURhdGE6OmNyZWF0ZShpbWFnZURhdGEpKQotewotfQor
ICAgIHZvaWQgd3JpdGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgeworICAgICAgICBV
U3RyaW5nIHN0ciA9IGlkZW50LnVzdHJpbmcoKTsKKyAgICAgICAgcGFpcjxDb25zdGFudFBvb2w6
Oml0ZXJhdG9yLCBib29sPiBpdGVyID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBsKCksIG1f
Y29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGlmICghaXRlci5zZWNvbmQpIHsKKyAgICAg
ICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xUYWcpOworICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRl
eChpdGVyLmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29u
c3QgQmxvYiogYmxvYikKLSAgICA6IG1fdHlwZShCbG9iVHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0
YShTZXJpYWxpemVkQmxvYjo6Y3JlYXRlKGJsb2IpKQotewotfQorICAgICAgICAvLyBUaGlzIGNv
bmRpdGlvbiBpcyB1bmxpa2VseSB0byBoYXBwZW4gYXMgdGhleSB3b3VsZCBpbXBseSBhbiB+OGdi
CisgICAgICAgIC8vIHN0cmluZyBidXQgd2Ugc2hvdWxkIGd1YXJkIGFnYWluc3QgaXQgYW55d2F5
CisgICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gU3RyaW5nUG9vbFRhZykgeworICAgICAgICAg
ICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZSogZmls
ZSkKLSAgICA6IG1fdHlwZShGaWxlVHlwZSkKLSAgICAsIG1fc2hhcmVkRGF0YShTZXJpYWxpemVk
RmlsZTo6Y3JlYXRlKGZpbGUpKQotewotfQorICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IG92ZXJm
bG93CisgICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPiAobnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSAtIHNpemVvZih1aW50MzJfdCkpIC8gc2l6ZW9mKFVDaGFyKSkgeworICAgICAgICAg
ICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLVNlcmlhbGl6ZWRB
cnJheSogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzQXJyYXkoKQotewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTZXJpYWxpemVkQXJyYXkqPih0aGlzKTsKLX0KKyAgICAgICAgd3JpdGVMaXR0bGVF
bmRpYW48dWludDMyX3Q+KG1fYnVmZmVyLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZiAoIXdy
aXRlTGl0dGxlRW5kaWFuPHVpbnQxNl90PihtX2J1ZmZlciwgc3RyLmNoYXJhY3RlcnMoKSwgc3Ry
Lmxlbmd0aCgpKSkKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRPYmpl
Y3QqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc09iamVjdCgpCi17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNlcmlhbGl6ZWRPYmplY3QqPih0aGlzKTsKLX0KKyAgICB2b2lkIHdyaXRlKGNvbnN0
IFVTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAg
ICAgICB3cml0ZShtX2VtcHR5SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHdyaXRlKElkZW50aWZpZXIobV9leGVjLCBzdHIpKTsKKyAgICB9CiAKLVNlcmlhbGl6ZWRCbG9i
KiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNCbG9iKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U2VyaWFsaXplZEJsb2IqPih0aGlzKTsKLX0KKyAgICB2b2lkIHdyaXRlKGNvbnN0IFN0cmlu
ZyYgc3RyKQorICAgIHsKKyAgICAgICAgaWYgKHN0ci5pc0VtcHR5KCkpCisgICAgICAgICAgICB3
cml0ZShtX2VtcHR5SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdyaXRl
KElkZW50aWZpZXIobV9leGVjLCBzdHIuaW1wbCgpKSk7CisgICAgfQogCi1TZXJpYWxpemVkRmls
ZSogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzRmlsZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFNlcmlhbGl6ZWRGaWxlKj4odGhpcyk7Ci19CisgICAgdm9pZCB3cml0ZShjb25zdCBGaWxl
KiBmaWxlKQorICAgIHsKKyAgICAgICAgd3JpdGUoZmlsZS0+cGF0aCgpKTsKKyAgICAgICAgd3Jp
dGUoZmlsZS0+dXJsKCkpOworICAgICAgICB3cml0ZShmaWxlLT50eXBlKCkpOworICAgIH0KIAot
U2VyaWFsaXplZEZpbGVMaXN0KiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNGaWxlTGlzdCgpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRGaWxlTGlzdCo+KHRoaXMpOwotfQor
ICAgIHZvaWQgd3JpdGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0aCk7CisgICAgfQogCi1TZXJp
YWxpemVkSW1hZ2VEYXRhKiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNJbWFnZURhdGEoKQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZXJpYWxpemVkSW1hZ2VEYXRhKj4odGhpcyk7Ci19Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBtX2J1ZmZlcjsKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gbV9j
eWNsZURldGVjdG9yOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVp
bnQzMl90LCBJZGVudGlmaWVyUmVwSGFzaD4gQ29uc3RhbnRQb29sOworICAgIENvbnN0YW50UG9v
bCBtX2NvbnN0YW50UG9vbDsKKyAgICBJZGVudGlmaWVyIG1fZW1wdHlJZGVudGlmaWVyOworfTsK
IAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAwMDsK
LWVudW0gV2Fsa2VyU3RhdGUgeyBTdGF0ZVVua25vd24sIEFycmF5U3RhcnRTdGF0ZSwgQXJyYXlT
dGFydFZpc2l0TWVtYmVyLCBBcnJheUVuZFZpc2l0TWVtYmVyLAotICAgIE9iamVjdFN0YXJ0U3Rh
dGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1iZXIsIE9iamVjdEVuZFZpc2l0TWVtYmVyIH07Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVHJlZVdhbGtlcj4gdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0VHlw
ZSB3YWxrKFRyZWVXYWxrZXImIGNvbnRleHQsIHR5cGVuYW1lIFRyZWVXYWxrZXI6OklucHV0VHlw
ZSBpbikKK2Jvb2wgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKIHsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6OklucHV0T2JqZWN0IElucHV0T2JqZWN0Owot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6SW5wdXRBcnJheSBJbnB1dEFycmF5Owot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0T2JqZWN0IE91dHB1dE9iamVj
dDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dEFycmF5IE91dHB1dEFy
cmF5OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJlZVdhbGtlcjo6SW5wdXRUeXBlIElucHV0VHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFRyZWVXYWxrZXI6OlByb3BlcnR5TGlzdCBQcm9wZXJ0
eUxpc3Q7Ci0KICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3Rv
cjx1aW50MzJfdCwgMTY+IGxlbmd0aFN0YWNrOwotICAgIFZlY3RvcjxQcm9wZXJ0eUxpc3QsIDE2
PiBwcm9wZXJ0eVN0YWNrOwotICAgIFZlY3RvcjxJbnB1dE9iamVjdCwgMTY+IGlucHV0T2JqZWN0
U3RhY2s7Ci0gICAgVmVjdG9yPElucHV0QXJyYXksIDE2PiBpbnB1dEFycmF5U3RhY2s7Ci0gICAg
VmVjdG9yPE91dHB1dE9iamVjdCwgMTY+IG91dHB1dE9iamVjdFN0YWNrOwotICAgIFZlY3RvcjxP
dXRwdXRBcnJheSwgMTY+IG91dHB1dEFycmF5U3RhY2s7CisgICAgVmVjdG9yPFByb3BlcnR5TmFt
ZUFycmF5LCAxNj4gcHJvcGVydHlTdGFjazsKKyAgICBWZWN0b3I8SlNPYmplY3QqLCAxNj4gaW5w
dXRPYmplY3RTdGFjazsKKyAgICBWZWN0b3I8SlNBcnJheSosIDE2PiBpbnB1dEFycmF5U3RhY2s7
CiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0
ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKLSAgICBJbnB1dFR5cGUgaW5WYWx1ZSA9IGluOwotICAg
IE91dHB1dFR5cGUgb3V0VmFsdWUgPSBjb250ZXh0Lm51bGwoKTsKLQotICAgIHVuc2lnbmVkIHRp
Y2tDb3VudCA9IGNvbnRleHQudGlja3NVbnRpbE5leHRDaGVjaygpOworICAgIEpTVmFsdWUgaW5W
YWx1ZSA9IGluOworICAgIHVuc2lnbmVkIHRpY2tDb3VudCA9IHRpY2tzVW50aWxOZXh0Q2hlY2so
KTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgICAgICAg
ICBhcnJheVN0YXJ0U3RhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5U3RhcnRTdGF0ZTogewot
ICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmlzQXJyYXkoaW5WYWx1ZSkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0FycmF5KGluVmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAo
aW5wdXRPYmplY3RTdGFjay5zaXplKCkgKyBpbnB1dEFycmF5U3RhY2suc2l6ZSgpID4gbWF4aW11
bUZpbHRlclJlY3Vyc2lvbikgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRocm93U3Rh
Y2tPdmVyZmxvdygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7
CisgICAgICAgICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvdygpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgSW5wdXRBcnJheSBpbkFycmF5ID0gY29udGV4dC5hc0lucHV0QXJyYXkoaW5WYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29udGV4dC5sZW5ndGgoaW5BcnJheSk7
Ci0gICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBjb250ZXh0LmNyZWF0ZU91
dHB1dEFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnN0YXJ0QXJy
YXkoaW5BcnJheSwgb3V0QXJyYXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5udWxsKCk7CisgICAgICAgICAgICAgICAgSlNBcnJheSogaW5BcnJheSA9IGFzQXJyYXkoaW5W
YWx1ZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5BcnJheS0+bGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydEFycmF5KGluQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaW5wdXRBcnJheVN0YWNr
LmFwcGVuZChpbkFycmF5KTsKLSAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVN0YWNrLmFwcGVu
ZChvdXRBcnJheSk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAg
ICAgICAgICAgICAgbGVuZ3RoU3RhY2suYXBwZW5kKGxlbmd0aCk7CiAgICAgICAgICAgICAgICAg
Ly8gZmFsbHRocm91Z2gKQEAgLTM3MSwxMjAgKzU3NiwxMTQgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyZWVXYWxrZXI+IHR5cGVuYW1lIFRyZWVXYWxrZXI6Ok91dHB1dFR5cGUgd2FsayhUcmVlV2Fs
a2VyJgogICAgICAgICAgICAgYXJyYXlTdGFydFZpc2l0TWVtYmVyOgogICAgICAgICAgICAgY2Fz
ZSBBcnJheVN0YXJ0VmlzaXRNZW1iZXI6IHsKICAgICAgICAgICAgICAgICBpZiAoIS0tdGlja0Nv
dW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmRpZFRpbWVPdXQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aHJvd0ludGVycnVwdGVkRXhjZXB0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChkaWRUaW1lT3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93SW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB0aWNrQ291bnQgPSBjb250ZXh0LnRpY2tzVW50aWxOZXh0Q2hlY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGlja0NvdW50ID0gdGlja3NVbnRpbE5leHRDaGVjaygpOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIElucHV0QXJyYXkgYXJyYXkgPSBpbnB1dEFycmF5U3Rh
Y2subGFzdCgpOworICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gaW5wdXRBcnJheVN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4U3RhY2su
bGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBsZW5ndGhTdGFjay5sYXN0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgSW5wdXRBcnJheSBpbkFycmF5ID0gaW5wdXRBcnJheVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBv
dXRwdXRBcnJheVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmRB
cnJheShpbkFycmF5LCBvdXRBcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlID0g
b3V0QXJyYXk7CisgICAgICAgICAgICAgICAgICAgIGVuZE9iamVjdChhcnJheSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlucHV0QXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dHB1dEFycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAg
ICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FuRG9GYXN0UmVhZChhcnJheSwg
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gY29udGV4dC5nZXRJbmRleChh
cnJheSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXgoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJ
bmRleCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gY29udGV4dC5nZXRT
cGFyc2VJbmRleChhcnJheSwgaW5kZXgsIGhhc0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
aW5WYWx1ZSA9IGdldFNwYXJzZUluZGV4KGFycmF5LCBpbmRleCwgaGFzSW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc0luZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0
YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zvcm1lZCA9IGNvbnRleHQu
Y29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVl
ID0gdHJhbnNmb3JtZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXRlU3RhY2suYXBwZW5kKEFycmF5RW5kVmlzaXRNZW1iZXIpOwotICAgICAgICAgICAg
ICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKKyAgICAgICAgICAgICAgICB3cml0ZShpbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKGR1bXBJZlRlcm1pbmFsKGluVmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4U3RhY2subGFzdCgpKys7CisgICAgICAgICAgICAgICAgICAgIGdv
dG8gYXJyYXlTdGFydFZpc2l0TWVtYmVyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAvLyBmYWxsdGhyb3VnaAorICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKEFy
cmF5RW5kVmlzaXRNZW1iZXIpOworICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBcnJheUVuZFZpc2l0TWVtYmVyOiB7Ci0g
ICAgICAgICAgICAgICAgT3V0cHV0QXJyYXkgb3V0QXJyYXkgPSBvdXRwdXRBcnJheVN0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnB1dFByb3BlcnR5KG91dEFycmF5LCBpbmRl
eFN0YWNrLmxhc3QoKSwgb3V0VmFsdWUpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2subGFz
dCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RTdGFydFN0YXRlOgogICAgICAgICAgICAgY2Fz
ZSBPYmplY3RTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuaXNP
YmplY3QoaW5WYWx1ZSkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpblZhbHVlLmlzT2JqZWN0
KCkpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dE9iamVjdFN0YWNrLnNpemUoKSArIGlucHV0
QXJyYXlTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQudGhyb3dTdGFja092ZXJmbG93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSW5wdXRPYmplY3QgaW5PYmplY3QgPSBjb250ZXh0
LmFzSW5wdXRPYmplY3QoaW5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgT3V0cHV0T2JqZWN0IG91
dE9iamVjdCA9IGNvbnRleHQuY3JlYXRlT3V0cHV0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LnN0YXJ0T2JqZWN0KGluT2JqZWN0LCBvdXRPYmplY3QpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7CisgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGluT2JqZWN0ID0gYXNPYmplY3QoaW5WYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
dGFydE9iamVjdChpbk9iamVjdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG91dE9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5n
ZXRQcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBwcm9wZXJ0eVN0YWNrKTsKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAg
ICAgICAgICAgICBpbk9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX2V4ZWMsIHByb3BlcnR5
U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIGNh
c2UgT2JqZWN0U3RhcnRWaXNpdE1lbWJlcjogewogICAgICAgICAgICAgICAgIGlmICghLS10aWNr
Q291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZGlkVGltZU91dCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRocm93SW50ZXJydXB0ZWRFeGNlcHRp
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRpZFRpbWVPdXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHRpY2tDb3VudCA9IGNvbnRleHQudGlja3NVbnRpbE5leHRDaGVjaygpOworICAgICAgICAg
ICAgICAgICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgSW5wdXRPYmplY3Qgb2JqZWN0ID0gaW5wdXRPYmpl
Y3RTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0
T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gaW5k
ZXhTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlMaXN0JiBwcm9wZXJ0aWVz
ID0gcHJvcGVydHlTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnRpZXMgPSBwcm9wZXJ0eVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPT0gcHJvcGVydGllcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5w
dXRPYmplY3QgaW5PYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgT3V0cHV0T2JqZWN0IG91dE9iamVjdCA9IG91dHB1dE9iamVjdFN0YWNrLmxhc3Qo
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmRPYmplY3QoaW5PYmplY3QsIG91dE9i
amVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlID0gb3V0T2JqZWN0OworICAgICAg
ICAgICAgICAgICAgICBlbmRPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaW5w
dXRPYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dE9i
amVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaW5WYWx1ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0
aWVzW2luZGV4XSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRQcm9wZXJ0
eShvYmplY3QsIHByb3BlcnRpZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxk
VGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgICAgIGlmICghaW5WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0
eSB3YXMgcmVtb3ZlZCBkdXJpbmcgc2VyaWFsaXNhdGlvbgorICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmxhc3QoKSsrOworICAgICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0
VmlzaXRNZW1iZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyaXRlKHBy
b3BlcnRpZXNbaW5kZXhdKTsKIAotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnNob3VsZFRl
cm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5udWxsKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zv
cm1lZCA9IGNvbnRleHQuY29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgICAgIG91dFZhbHVlID0gdHJhbnNmb3JtZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFkdW1wSWZUZXJtaW5hbChpblZhbHVlKSkgewogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBPYmplY3RFbmRWaXNpdE1lbWJlcjogewotICAgICAgICAgICAgICAgIGNvbnRleHQucHV0
UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgpLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKVtp
bmRleFN0YWNrLmxhc3QoKV0sIG91dFZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5zaG91bGRUZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
bnVsbCgpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5s
YXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZVVua25vd246CiAgICAgICAgICAgICBjYXNl
IFN0YXRlVW5rbm93bjoKLSAgICAgICAgICAgICAgICBpZiAoT3V0cHV0VHlwZSB0cmFuc2Zvcm1l
ZCA9IGNvbnRleHQuY29udmVydElmVGVybWluYWwoaW5WYWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgb3V0VmFsdWUgPSB0cmFuc2Zvcm1lZDsKKyAgICAgICAgICAgICAgICBpZiAoZHVtcElm
VGVybWluYWwoaW5WYWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pc0FycmF5KGluVmFsdWUpKQor
CisgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoaW5WYWx1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYXJyYXlTdGFydFN0YXRlOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3Rh
cnRTdGF0ZTsKICAgICAgICAgfQpAQCAtNDk1LDU3MyArNjk0LDU2OSBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZVdhbGtlcj4gdHlwZW5hbWUgVHJlZVdhbGtlcjo6T3V0cHV0VHlwZSB3YWxrKFRy
ZWVXYWxrZXImCiAgICAgICAgIHN0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgIGlm
ICghLS10aWNrQ291bnQpIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LmRpZFRpbWVPdXQoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQudGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm51bGwoKTsKKyAgICAgICAgICAgIGlmIChk
aWRUaW1lT3V0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9u
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGlja0NvdW50ID0gY29udGV4dC50aWNrc1VudGlsTmV4dENoZWNrKCk7CisgICAgICAg
ICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIG91dFZhbHVlOwotfQotCi1zdHJ1Y3QgQmFzZVdhbGtlciB7Ci0gICAgQmFz
ZVdhbGtlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogbV9leGVjKGV4ZWMpCi0gICAgICAg
ICwgbV90aW1lb3V0Q2hlY2tlcihleGVjLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIpCi0g
ICAgewotICAgICAgICBtX3RpbWVvdXRDaGVja2VyLnJlc2V0KCk7Ci0gICAgfQotICAgIEV4ZWNT
dGF0ZSogbV9leGVjOwotICAgIFRpbWVvdXRDaGVja2VyIG1fdGltZW91dENoZWNrZXI7Ci0gICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgbV9nY0J1ZmZlcjsKLQotICAgIGJvb2wgc2hvdWxkVGVybWlu
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOwotICAg
IH0KKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2ln
bmVkIHRpY2tzVW50aWxOZXh0Q2hlY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGltZW91
dENoZWNrZXIudGlja3NVbnRpbE5leHRDaGVjaygpOwotICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAotICAgIGJvb2wgZGlkVGltZU91dCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90aW1l
b3V0Q2hlY2tlci5kaWRUaW1lT3V0KG1fZXhlYyk7CitjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6
IENsb25lQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmlu
Zyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQg
PSBidWZmZXIuZW5kKCk7CisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisgICAgICAgIGlmICgh
cmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1cnJlbnRW
ZXJzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB1aW50OF90IHRh
ZzsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB0YWcpIHx8IHRhZyAh
PSBTdHJpbmdUYWcpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHVpbnQz
Ml90IGxlbmd0aDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBsZW5n
dGgpIHx8IGxlbmd0aCA+PSBTdHJpbmdQb29sVGFnKQorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICBVU3RyaW5nIHN0cjsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKHB0ciwg
ZW5kLCBzdHIsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBTdHJpbmcoc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTVmFsdWUg
ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVm
ZmVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgQ2xvbmVE
ZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgYnVmZmVyKTsKKyAg
ICAgICAgaWYgKCFkZXNlcmlhbGl6ZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBkZXNlcmlh
bGl6ZXIudGhyb3dWYWxpZGF0aW9uRXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSgp
OwogICAgIH0KIAotICAgIHZvaWQgdGhyb3dTdGFja092ZXJmbG93KCkKK3ByaXZhdGU6CisgICAg
Q2xvbmVEZXNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICAgICAgOiBDbG9uZUJh
c2UoZXhlYykKKyAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgICAg
ICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2Jh
bE9iamVjdDo6c19pbmZvKSkKKyAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQorICAgICAg
ICAsIG1fZW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQorICAgICAgICAsIG1fdmVy
c2lvbigweEZGRkZGRkZGKQogICAgIHsKLSAgICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihtX2V4ZWMpKTsKKyAgICAgICAgaWYgKCFyZWFkKG1fdmVyc2lv
bikpCisgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOwogICAgIH0KIAotICAgIHZv
aWQgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICB0aHJvd0Vycm9y
KG1fZXhlYywgY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oJm1fZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7Ci0gICAgfQotfTsKKyAgICBKU1ZhbHVlIGRlc2VyaWFsaXplKCk7CiAKLXN0
cnVjdCBTZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgQmFzZVdhbGtlciB7Ci0gICAgdHlw
ZWRlZiBKU1ZhbHVlIElucHV0VHlwZTsKLSAgICB0eXBlZGVmIEpTQXJyYXkqIElucHV0QXJyYXk7
Ci0gICAgdHlwZWRlZiBKU09iamVjdCogSW5wdXRPYmplY3Q7Ci0gICAgdHlwZWRlZiBTZXJpYWxp
emVkU2NyaXB0VmFsdWVEYXRhIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBSZWZQdHI8U2VyaWFs
aXplZEFycmF5PiBPdXRwdXRBcnJheTsKLSAgICB0eXBlZGVmIFJlZlB0cjxTZXJpYWxpemVkT2Jq
ZWN0PiBPdXRwdXRPYmplY3Q7Ci0gICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheSBQcm9wZXJ0
eUxpc3Q7Ci0KLSAgICBTZXJpYWxpemluZ1RyZWVXYWxrZXIoRXhlY1N0YXRlKiBleGVjKQotICAg
ICAgICA6IEJhc2VXYWxrZXIoZXhlYykKKyAgICB2b2lkIHRocm93VmFsaWRhdGlvbkVycm9yKCkK
ICAgICB7CisgICAgICAgIHRocm93RXJyb3IobV9leGVjLCBjcmVhdGVUeXBlRXJyb3IobV9leGVj
LCAiVW5hYmxlIHRvIGRlc2VyaWFsaXplIGRhdGEuIikpOwogICAgIH0KIAotICAgIE91dHB1dFR5
cGUgbnVsbCgpIHsgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoKTsgfQorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbiA8PSBDdXJyZW50VmVyc2lvbjsg
fQogCi0gICAgYm9vbCBpc0FycmF5KEpTVmFsdWUgdmFsdWUpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGJvb2wgcmVhZExpdHRsZUVuZGlhbihUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgaWYgKG1fZmFpbGVkIHx8ICFyZWFkTGl0dGxl
RW5kaWFuKG1fcHRyLCBtX2VuZCwgdmFsdWUpKSB7CisgICAgICAgICAgICBmYWlsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoJm1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIGJvb2wgaXNPYmplY3QoSlNWYWx1
ZSB2YWx1ZSkKKyNpZiBBU1NVTUVfTElUVExFX0VORElBTgorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNv
bnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
aXNPYmplY3QoKTsKLSAgICB9CisgICAgICAgIGlmIChwdHIgPiBlbmQgLSBzaXplb2YodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNBcnJheSogYXNJbnB1dEFycmF5
KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSk7Cisg
ICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgICAgIHZhbHVlID0gKnB0cisrOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVCo+KHB0cik7CisgICAgICAgICAgICBwdHIgKz0gc2l6ZW9mKFQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIEpTT2JqZWN0KiBhc0lucHV0T2JqZWN0
KEpTVmFsdWUgdmFsdWUpCisjZWxzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMg
Ym9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3Qq
IGVuZCwgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOwot
ICAgIH0KKyAgICAgICAgaWYgKHB0ciA+IGVuZCAtIHNpemVvZih2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gY3JlYXRl
T3V0cHV0QXJyYXkodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgIGlmIChzaXplb2YoVCkgPT0gMSkK
KyAgICAgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHZhbHVlID0gMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yo
VCk7IGkrKykKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAoKFQpKnB0cisrKSA8PCAoaSAqIDgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNlbmRpZgogCi0gICAg
UGFzc1JlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiBjcmVhdGVPdXRwdXRPYmplY3QoKQorICAgIGJv
b2wgcmVhZCh1aW50MzJfdCYgaSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTZXJpYWxpemVkT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRMaXR0bGVFbmRpYW4oaSk7CiAgICAg
fQogCi0gICAgdWludDMyX3QgbGVuZ3RoKEpTVmFsdWUgYXJyYXkpCisgICAgYm9vbCByZWFkKGlu
dDMyX3QmIGkpCiAgICAgewotICAgICAgICBBU1NFUlQoYXJyYXkuaXNPYmplY3QoKSk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChhcnJheSk7Ci0gICAgICAgIHJldHVybiBv
YmplY3QtPmdldChtX2V4ZWMsIG1fZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIobV9leGVjKTsKKyAgICAgICAgcmV0dXJuIHJlYWRMaXR0bGVFbmRpYW4oKnJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPigmaSkpOwogICAgIH0KIAotICAgIGJvb2wgY2FuRG9GYXN0UmVhZChK
U0FycmF5KiBhcnJheSwgdW5zaWduZWQgaW5kZXgpCisgICAgYm9vbCByZWFkKHVpbnQxNl90JiBp
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheSgmbV9leGVjLT5nbG9iYWxEYXRhKCks
IGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVh
ZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGdldEluZGV4KEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpbmRleCkKKyAgICBib29sIHJlYWQodWludDhfdCYgaSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICByZXR1cm4g
cmVhZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGdldFNwYXJzZUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgYm9vbCYgaGFzSW5kZXgp
CisgICAgYm9vbCByZWFkKGRvdWJsZSYgZCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCk7Ci0gICAgICAgIGlmIChvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChtX2V4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKLSAgICAgICAgICAgIGhhc0luZGV4ID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgfQotICAgICAgICBoYXNJbmRleCA9IGZhbHNlOwotICAgICAgICByZXR1cm4ganNO
dWxsKCk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAg
ICAgdWludDY0X3QgaTY0OworICAgICAgICB9IHU7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVu
ZGlhbih1Lmk2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGQgPSB1LmQ7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEpTVmFsdWUgZ2V0UHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCkKKyAgICBib29sIHJlYWQodW5zaWduZWQgbG9uZyBsb25nJiBpKQogICAgIHsKLSAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90KG1fZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgICAgICByZXR1cm4gcmVhZExpdHRsZUVuZGlhbihpKTsKICAgICB9CiAKLSAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIGNvbnZlcnRJZlRlcm1pbmFsKEpTVmFsdWUgdmFs
dWUpCisgICAgYm9vbCByZWFkU3RyaW5nSW5kZXgodWludDMyX3QmIGkpCiAgICAgewotICAgICAg
ICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGEodmFsdWUpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodXN0cmluZ1RvU3RyaW5n
KGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9leGVjKSkpOwotCi0gICAgICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEo
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6TnVtYmVyVHlwZSwgdmFsdWUudW5jaGVja2VkR2V0
TnVtYmVyKCkpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCi0gICAgICAgICAgICByZXR1cm4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpEYXRl
VHlwZSwgYXNEYXRlSW5zdGFuY2UodmFsdWUpLT5pbnRlcm5hbE51bWJlcigpKTsKLQotICAgICAg
ICBpZiAoaXNBcnJheSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YSgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTRmlsZTo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YSh0b0ZpbGUob2JqKSk7Ci0gICAgICAgICAgICBpZiAob2Jq
LT5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKHRvQmxvYihvYmopKTsKLSAgICAgICAgICAgIGlmIChvYmot
PmluaGVyaXRzKCZKU0ZpbGVMaXN0OjpzX2luZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKHRvRmlsZUxpc3Qob2JqKSk7Ci0gICAgICAgICAgICBp
ZiAob2JqLT5pbmhlcml0cygmSlNJbWFnZURhdGE6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodG9JbWFnZURhdGEob2JqKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBDYWxsRGF0YSB1bnVzZWREYXRhOwotICAgICAgICAg
ICAgaWYgKGdldENhbGxEYXRhKHZhbHVlLCB1bnVzZWREYXRhKSA9PSBDYWxsVHlwZU5vbmUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoKTsKKyAgICAg
ICAgaWYgKG1fY29uc3RhbnRQb29sLnNpemUoKSA8PSAweEZGKSB7CisgICAgICAgICAgICB1aW50
OF90IGk4OworICAgICAgICAgICAgaWYgKCFyZWFkKGk4KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpID0gaTg7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQotICAgICAgICAvLyBBbnkgb3RoZXIgdHlwZXMgYXJlIGV4cGVjdGVkIHRvIHNl
cmlhbGl6ZSBhcyBudWxsLgotICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0
YShqc051bGwoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTY+JiBwcm9wZXJ0eVN0YWNrKQot
ICAgIHsKLSAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9l
eGVjKSk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX2V4ZWMsIHByb3Bl
cnR5U3RhY2subGFzdCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1dFByb3BlcnR5KFJlZlB0cjxT
ZXJpYWxpemVkQXJyYXk+IGFycmF5LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGNvbnN0IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXJyYXktPnNldElu
ZGV4KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICBpZiAobV9jb25zdGFudFBvb2wuc2l6
ZSgpIDw9IDB4RkZGRikgeworICAgICAgICAgICAgdWludDE2X3QgaTE2OworICAgICAgICAgICAg
aWYgKCFyZWFkKGkxNikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaSA9IGkxNjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZWFkKGkpOwogICAgIH0KIAotICAgIHZvaWQgcHV0UHJvcGVydHkoUmVmUHRyPFNl
cmlhbGl6ZWRPYmplY3Q+IG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKKyAgICBzdGF0aWMgYm9vbCBy
ZWFkU3RyaW5nKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVVN0cmlu
ZyYgc3RyLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBvYmplY3QtPnNldChwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICB9CisgICAgICAgIGlmIChsZW5ndGggPj0gbnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGJvb2wgc3RhcnRBcnJheShKU0FycmF5KiBpbkFycmF5LCBSZWZQdHI8
U2VyaWFsaXplZEFycmF5PikKLSAgICB7Ci0gICAgICAgIC8vIEN5Y2xlIGRldGVjdGlvbgotICAg
ICAgICBpZiAoIW1fY3ljbGVEZXRlY3Rvci5hZGQoaW5BcnJheSkuc2Vjb25kKSB7Ci0gICAgICAg
ICAgICB0aHJvd0Vycm9yKG1fZXhlYywgY3JlYXRlVHlwZUVycm9yKG1fZXhlYywgIkNhbm5vdCBw
b3N0IGN5Y2xpYyBzdHJ1Y3R1cmVzLiIpKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGxlbmd0
aCAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIGlmICgoZW5kIC0gcHRyKSA8IHN0YXRpY19jYXN0
PGludD4oc2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBBU1NVTUVfTElU
VExFX0VORElBTgorICAgICAgICBzdHIgPSBVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPihwdHIpLCBsZW5ndGgpOworICAgICAgICBwdHIgKz0gbGVuZ3RoICogc2l6ZW9mKFVD
aGFyKTsKKyNlbHNlCisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBidWZm
ZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdWludDE2X3QgY2g7CisgICAgICAgICAg
ICByZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBjaCk7CisgICAgICAgICAgICBidWZmZXIuYXBw
ZW5kKGNoKTsKICAgICAgICAgfQotICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChpbkFycmF5KTsK
KyAgICAgICAgc3RyID0gVVN0cmluZzo6YWRvcHQoYnVmZmVyKTsKKyNlbmRpZgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGVuZEFycmF5KEpTQXJyYXkqIGluQXJyYXks
IFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+KQorICAgIGJvb2wgcmVhZFN0cmluZ0RhdGEoSWRlbnRp
ZmllciYgaWRlbnQpCiAgICAgewotICAgICAgICBtX2N5Y2xlRGV0ZWN0b3IucmVtb3ZlKGluQXJy
YXkpOwotICAgICAgICBtX2djQnVmZmVyLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgYm9vbCBzY3Jh
dGNoOworICAgICAgICByZXR1cm4gcmVhZFN0cmluZ0RhdGEoaWRlbnQsIHNjcmF0Y2gpOwogICAg
IH0KIAotICAgIGJvb2wgc3RhcnRPYmplY3QoSlNPYmplY3QqIGluT2JqZWN0LCBSZWZQdHI8U2Vy
aWFsaXplZE9iamVjdD4pCisgICAgYm9vbCByZWFkU3RyaW5nRGF0YShJZGVudGlmaWVyJiBpZGVu
dCwgYm9vbCYgd2FzVGVybWluYXRvcikKICAgICB7Ci0gICAgICAgIC8vIEN5Y2xlIGRldGVjdGlv
bgotICAgICAgICBpZiAoIW1fY3ljbGVEZXRlY3Rvci5hZGQoaW5PYmplY3QpLnNlY29uZCkgewot
ICAgICAgICAgICAgdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0ZVR5cGVFcnJvcihtX2V4ZWMsICJD
YW5ub3QgcG9zdCBjeWNsaWMgc3RydWN0dXJlcy4iKSk7CisgICAgICAgIGlmIChtX2ZhaWxlZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gMDsK
KyAgICAgICAgaWYgKCFyZWFkKGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gVGVybWluYXRvclRhZykgeworICAgICAgICAgICAgd2FzVGVy
bWluYXRvciA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAg
ICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoaW5PYmplY3QpOworICAgICAgICBpZiAobGVuZ3RoID09
IFN0cmluZ1Bvb2xUYWcpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICAg
ICAgICAgIGlmICghcmVhZFN0cmluZ0luZGV4KGluZGV4KSkgeworICAgICAgICAgICAgICAgIGZh
aWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gbV9jb25zdGFudFBvb2wuc2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlkZW50ID0gbV9jb25zdGFudFBvb2xbaW5kZXhdOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgVVN0cmluZyBzdHI7CisgICAgICAg
IGlmICghcmVhZFN0cmluZyhtX3B0ciwgbV9lbmQsIHN0ciwgbGVuZ3RoKSkgeworICAgICAgICAg
ICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlkZW50ID0gSWRlbnRpZmllcihtX2V4ZWMsIHN0cik7CisgICAgICAgIG1fY29uc3RhbnRQb29s
LmFwcGVuZChpZGVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQg
ZW5kT2JqZWN0KEpTT2JqZWN0KiBpbk9iamVjdCwgUmVmUHRyPFNlcmlhbGl6ZWRPYmplY3Q+KQot
ICAgIHsKLSAgICAgICAgbV9jeWNsZURldGVjdG9yLnJlbW92ZShpbk9iamVjdCk7Ci0gICAgICAg
IG1fZ2NCdWZmZXIucmVtb3ZlTGFzdCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0
PEpTT2JqZWN0Kj4gbV9jeWNsZURldGVjdG9yOwotfTsKLQotU2VyaWFsaXplZFNjcmlwdFZhbHVl
RGF0YSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGluVmFsdWUpCi17Ci0gICAgU2VyaWFsaXppbmdUcmVlV2Fsa2VyIGNvbnRleHQo
ZXhlYyk7Ci0gICAgcmV0dXJuIHdhbGs8U2VyaWFsaXppbmdUcmVlV2Fsa2VyPihjb250ZXh0LCBp
blZhbHVlKTsKLX0KLQotCi1zdHJ1Y3QgRGVzZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMg
QmFzZVdhbGtlciB7Ci0gICAgdHlwZWRlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIElucHV0
VHlwZTsKLSAgICB0eXBlZGVmIFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+IElucHV0QXJyYXk7Ci0g
ICAgdHlwZWRlZiBSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4gSW5wdXRPYmplY3Q7Ci0gICAgdHlw
ZWRlZiBKU1ZhbHVlIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBKU0FycmF5KiBPdXRwdXRBcnJh
eTsKLSAgICB0eXBlZGVmIEpTT2JqZWN0KiBPdXRwdXRPYmplY3Q7Ci0gICAgdHlwZWRlZiBTZXJp
YWxpemVkT2JqZWN0OjpQcm9wZXJ0eU5hbWVMaXN0IFByb3BlcnR5TGlzdDsKLQotICAgIERlc2Vy
aWFsaXppbmdUcmVlV2Fsa2VyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgYm9vbCBtdXN0Q29weSkKLSAgICAgICAgOiBCYXNlV2Fsa2VyKGV4ZWMpCi0gICAg
ICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICAgICAsIG1faXNET01HbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5pbmhlcml0cygmSlNET01HbG9iYWxPYmplY3Q6OnNfaW5m
bykpCi0gICAgICAgICwgbV9tdXN0Q29weShtdXN0Q29weSkKLSAgICB7Ci0gICAgfQotCi0gICAg
T3V0cHV0VHlwZSBudWxsKCkgeyByZXR1cm4ganNOdWxsKCk7IH0KLQotICAgIGJvb2wgaXNBcnJh
eShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKKyAgICBTZXJpYWxpemF0
aW9uVGFnIHJlYWRUYWcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnR5cGUoKSA9PSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpBcnJheVR5cGU7CisgICAgICAgIGlmIChtX3B0ciA+
PSBtX2VuZCkKKyAgICAgICAgICAgIHJldHVybiBFcnJvclRhZzsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFNlcmlhbGl6YXRpb25UYWc+KCptX3B0cisrKTsKICAgICB9CiAKLSAgICBib29s
IGlzT2JqZWN0KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQorICAgIHZv
aWQgcHV0UHJvcGVydHkoSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnR5cGUoKSA9PSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWVEYXRhOjpPYmplY3RUeXBlOwotICAgIH0KLQotICAgIFNlcmlhbGl6ZWRBcnJheSog
YXNJbnB1dEFycmF5KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBTZXJpYWxp
emVkT2JqZWN0KiBhc0lucHV0T2JqZWN0KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzT2JqZWN0KCk7Ci0gICAgfQot
Ci0gICAgSlNBcnJheSogY3JlYXRlT3V0cHV0QXJyYXkodW5zaWduZWQgbGVuZ3RoKQotICAgIHsK
LSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KG1fZXhlYywgbV9n
bG9iYWxPYmplY3QpOwotICAgICAgICBhcnJheS0+c2V0TGVuZ3RoKGxlbmd0aCk7Ci0gICAgICAg
IHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogY3JlYXRlT3V0cHV0T2JqZWN0
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMsIG1f
Z2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBsZW5ndGgoUmVmUHRyPFNlcmlh
bGl6ZWRBcnJheT4gYXJyYXkpCi0gICAgewotICAgICAgICByZXR1cm4gYXJyYXktPmxlbmd0aCgp
OwotICAgIH0KLQotICAgIGJvb2wgY2FuRG9GYXN0UmVhZChSZWZQdHI8U2VyaWFsaXplZEFycmF5
PiBhcnJheSwgdW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYXJyYXktPmNh
bkRvRmFzdFJlYWQoaW5kZXgpOwotICAgIH0KLQotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGEgZ2V0SW5kZXgoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gYXJyYXksIHVuc2lnbmVkIGluZGV4
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgICAg
IGlmIChhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKQorICAgICAgICAgICAgYXJyYXktPnNldElu
ZGV4KGluZGV4LCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFycmF5LT5wdXQo
bV9leGVjLCBpbmRleCwgdmFsdWUpOwogICAgIH0KIAotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZURhdGEgZ2V0U3BhcnNlSW5kZXgoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gYXJyYXksIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgYm9vbCYgaGFzSW5kZXgpCisgICAgdm9pZCBwdXRQcm9wZXJ0eShK
U09iamVjdCogb2JqZWN0LCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgSlNWYWx1ZSB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhcnJheS0+Z2V0U3BhcnNlSW5kZXgocHJvcGVydHlOYW1lLCBo
YXNJbmRleCk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHByb3BlcnR5LCB2YWx1ZSk7CiAg
ICAgfQogCi0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSBnZXRQcm9wZXJ0eShSZWZQdHI8
U2VyaWFsaXplZE9iamVjdD4gb2JqZWN0LCBjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgcHJvcGVydHlJbmRleCkKKyAgICBib29sIHJlYWRGaWxlKFJlZlB0
cjxGaWxlPiYgZmlsZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvYmplY3QtPm5hbWVzKClbcHJv
cGVydHlJbmRleF0gPT0gcHJvcGVydHlOYW1lKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3QtPnZhbHVlcygpW3Byb3BlcnR5SW5kZXhd
OworICAgICAgICBJZGVudGlmaWVyIHBhdGg7CisgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEo
cGF0aCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgSWRlbnRpZmllciB1cmw7Cisg
ICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEodXJsKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBJZGVudGlmaWVyIHR5cGU7CisgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEodHlw
ZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmpl
Y3QpIHsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICAgICAg
ZmlsZSA9IEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBTdHJpbmcocGF0aC51
c3RyaW5nKCkuaW1wbCgpKSwgS1VSTChLVVJMKCksIFN0cmluZyh1cmwudXN0cmluZygpLmltcGwo
KSkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBjb252ZXJ0SWZUZXJtaW5hbChTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKKyAgICBKU1ZhbHVlIHJlYWRUZXJtaW5hbCgp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpBcnJheVR5cGU6Ci0gICAgICAgICAgICBjYXNl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok9iamVjdFR5cGU6CisgICAgICAgIFNlcmlhbGl6
YXRpb25UYWcgdGFnID0gcmVhZFRhZygpOworICAgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAg
ICBjYXNlIFVuZGVmaW5lZFRhZzoKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICBjYXNlIE51bGxUYWc6CisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAg
ICAgIGNhc2UgSW50VGFnOiB7CisgICAgICAgICAgICBpbnQzMl90IGk7CisgICAgICAgICAgICBp
ZiAoIXJlYWQoaSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAg
ICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6U3RyaW5nVHlwZToKLSAgICAgICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmcobV9leGVjLCB2YWx1ZS5hc1N0cmluZygpLmNyb3NzVGhy
ZWFkU3RyaW5nKCkpOwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
OjpJbW1lZGlhdGVUeXBlOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ltbWVkaWF0
ZSgpOwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpOdW1iZXJU
eXBlOgotICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2V4ZWMsIHZhbHVlLmFzRG91
YmxlKCkpOwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpEYXRl
VHlwZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIERhdGVJbnN0YW5jZSht
X2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlLmFzRG91YmxlKCkp
OwotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpCbG9iVHlwZTog
ewotICAgICAgICAgICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICAgICAgICAgIFNlcmlhbGl6ZWRCbG9i
KiBzZXJpYWxpemVkQmxvYiA9IHZhbHVlLmFzQmxvYigpOwotICAgICAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBCbG9iOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgc2VyaWFsaXplZEJsb2ItPnVybCgpLCBzZXJpYWxpemVkQmxv
Yi0+dHlwZSgpLCBzZXJpYWxpemVkQmxvYi0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkZpbGVUeXBlOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAgICAgICAgU2VyaWFsaXplZEZpbGUqIHNlcmlh
bGl6ZWRGaWxlID0gdmFsdWUuYXNGaWxlKCk7Ci0gICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBzZXJpYWxpemVkRmlsZS0+cGF0aCgpLCBzZXJpYWxpemVkRmlsZS0+dXJs
KCksIHNlcmlhbGl6ZWRGaWxlLT50eXBlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJl
cihtX2V4ZWMsIGkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgWmVyb1RhZzoKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihtX2V4ZWMsIDApOworICAgICAgICBjYXNlIE9uZVRhZzoKKyAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2V4ZWMsIDEpOworICAgICAgICBjYXNlIEZhbHNl
VGFnOgorICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgIGNhc2Ug
VHJ1ZVRhZzoKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CisgICAgICAgIGNh
c2UgRG91YmxlVGFnOiB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgIGlmICgh
cmVhZChkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKG1fZXhlYywgZCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEYXRl
VGFnOiB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgIGlmICghcmVhZChkKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIG5l
dyAobV9leGVjKSBEYXRlSW5zdGFuY2UobV9leGVjLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVj
dHVyZSgpLCBkKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbGVUYWc6IHsKKyAgICAgICAg
ICAgIFJlZlB0cjxGaWxlPiBmaWxlOworICAgICAgICAgICAgaWYgKCFyZWFkRmlsZShmaWxlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCFtX2lz
RE9NR2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihtX2dsb2JhbE9iamVjdCksIGZpbGUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsZUxpc3RUYWc6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAg
ICAgICBpZiAoIXJlYWQobGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgICAgICAgICAgUmVmUHRyPEZpbGVMaXN0PiByZXN1bHQgPSBGaWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8RmlsZT4gZmlsZTsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlYWRGaWxlKGZpbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2lzRE9NR2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZChmaWxlLmdldCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6RmlsZUxpc3RUeXBlOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEZpbGVMaXN0PiByZXN1
bHQgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgU2VyaWFsaXplZEZpbGVM
aXN0KiBzZXJpYWxpemVkRmlsZUxpc3QgPSB2YWx1ZS5hc0ZpbGVMaXN0KCk7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc2VyaWFsaXplZEZpbGVMaXN0LT5sZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNlcmlhbGl6ZWRGaWxlTGlzdDo6RmlsZURhdGEmIGZpbGVEYXRhID0gc2VyaWFsaXplZEZpbGVM
aXN0LT5pdGVtKGkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChGaWxlOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZmlsZURhdGEucGF0aCwgZmlsZURhdGEudXJs
LCBmaWxlRGF0YS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2Jh
bE9iamVjdCksIHJlc3VsdC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxP
YmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFs
T2JqZWN0KSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEltYWdlRGF0
YVRhZzogeworICAgICAgICAgICAgdWludDMyX3Qgd2lkdGg7CisgICAgICAgICAgICBpZiAoIXJl
YWQod2lkdGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAg
ICB1aW50MzJfdCBoZWlnaHQ7CisgICAgICAgICAgICBpZiAoIXJlYWQoaGVpZ2h0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3Ro
OworICAgICAgICAgICAgaWYgKCFyZWFkKGxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChtX2VuZCA8ICgodWludDhfdCopMCkgKyBsZW5n
dGggfHwgbV9wdHIgPiBtX2VuZCAtIGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpJbWFnZURhdGFUeXBlOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAgICAgICAgU2VyaWFsaXplZEltYWdlRGF0
YSogc2VyaWFsaXplZEltYWdlRGF0YSA9IHZhbHVlLmFzSW1hZ2VEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoc2VyaWFs
aXplZEltYWdlRGF0YS0+d2lkdGgoKSwgc2VyaWFsaXplZEltYWdlRGF0YS0+aGVpZ2h0KCkpOwot
ICAgICAgICAgICAgICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIHNl
cmlhbGl6ZWRJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzZXJpYWxpemVkSW1hZ2VEYXRhLT5k
YXRhKCktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCByZXN1bHQuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KSB7CisgICAgICAgICAg
ICAgICAgbV9wdHIgKz0gbGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0
YTo6RW1wdHlUeXBlOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUod2lk
dGgsIGhlaWdodCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+
ZGF0YSgpLCBtX3B0ciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1fcHRyICs9IGxlbmd0aDsKKyAg
ICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihtX2dsb2JhbE9iamVjdCksIHJlc3VsdC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBCbG9iVGFnOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyIHVybDsKKyAgICAgICAgICAg
IGlmICghcmVhZFN0cmluZ0RhdGEodXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICAgICAgSWRlbnRpZmllciB0eXBlOworICAgICAgICAgICAgaWYgKCFyZWFk
U3RyaW5nRGF0YSh0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwOworICAgICAgICAgICAgaWYgKCFy
ZWFkKHNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAg
ICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9leGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgICAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyht
X2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBC
bG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgS1VSTChLVVJMKCksIHVybC51c3Ry
aW5nKCkuaW1wbCgpKSwgU3RyaW5nKHR5cGUudXN0cmluZygpLmltcGwoKSksIHNpemUpKTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFN0cmluZ1RhZzogeworICAgICAgICAgICAgSWRlbnRpZmll
ciBpZGVudDsKKyAgICAgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEoaWRlbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
bV9leGVjLCBpZGVudC51c3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgRW1wdHlT
dHJpbmdUYWc6CisgICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygmbV9leGVjLT5nbG9i
YWxEYXRhKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9wdHItLTsgLy8gUHVz
aCB0aGUgdGFnIGJhY2sKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGdldFByb3BlcnR5TmFtZXMoUmVmUHRyPFNlcmlhbGl6ZWRPYmpl
Y3Q+IG9iamVjdCwgVmVjdG9yPFNlcmlhbGl6ZWRPYmplY3Q6OlByb3BlcnR5TmFtZUxpc3QsIDE2
PiYgcHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKG9iamVjdC0+
bmFtZXMoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBwdXRQcm9wZXJ0eShKU0FycmF5KiBhcnJheSwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXJy
YXktPnB1dChtX2V4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQg
cHV0UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+IHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG9iamVjdC0+cHV0RGly
ZWN0KElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJpbmcoU3RyaW5nKHByb3BlcnR5TmFt
ZSkpKSwgdmFsdWUpOwotICAgIH0KLQotICAgIGJvb2wgc3RhcnRBcnJheShSZWZQdHI8U2VyaWFs
aXplZEFycmF5PiwgSlNBcnJheSogb3V0QXJyYXkpCi0gICAgewotICAgICAgICBtX2djQnVmZmVy
LmFwcGVuZChvdXRBcnJheSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB2b2lk
IGVuZEFycmF5KFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+LCBKU0FycmF5KikKLSAgICB7Ci0gICAg
ICAgIG1fZ2NCdWZmZXIucmVtb3ZlTGFzdCgpOwotICAgIH0KLSAgICBib29sIHN0YXJ0T2JqZWN0
KFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0PiwgSlNPYmplY3QqIG91dE9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dE9iamVjdCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICB2b2lkIGVuZE9iamVjdChSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4sIEpT
T2JqZWN0KikKLSAgICB7Ci0gICAgICAgIG1fZ2NCdWZmZXIucmVtb3ZlTGFzdCgpOwogICAgIH0K
IAotcHJpdmF0ZToKLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsKICAgICBKU0dsb2Jh
bE9iamVjdCogbV9nbG9iYWxPYmplY3Q7CiAgICAgYm9vbCBtX2lzRE9NR2xvYmFsT2JqZWN0Owot
ICAgIGJvb2wgbV9tdXN0Q29weTsKKyAgICBjb25zdCB1aW50OF90KiBtX3B0cjsKKyAgICBjb25z
dCB1aW50OF90KiBtX2VuZDsKKyAgICB1bnNpZ25lZCBtX3ZlcnNpb247CisgICAgVmVjdG9yPElk
ZW50aWZpZXI+IG1fY29uc3RhbnRQb29sOwogfTsKIAotSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0
VmFsdWVEYXRhOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWwsIGJvb2wgbXVzdENvcHkpIGNvbnN0CitKU1ZhbHVlIENsb25lRGVzZXJpYWxpemVyOjpk
ZXNlcmlhbGl6ZSgpCiB7Ci0gICAgRGVzZXJpYWxpemluZ1RyZWVXYWxrZXIgY29udGV4dChleGVj
LCBnbG9iYWwsIG11c3RDb3B5KTsKLSAgICByZXR1cm4gd2FsazxEZXNlcmlhbGl6aW5nVHJlZVdh
bGtlcj4oY29udGV4dCwgKnRoaXMpOwotfQotCi1zdHJ1Y3QgVGVhcmRvd25UcmVlV2Fsa2VyIHsK
LSAgICB0eXBlZGVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEgSW5wdXRUeXBlOwotICAgIHR5
cGVkZWYgUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4gSW5wdXRBcnJheTsKLSAgICB0eXBlZGVmIFJl
ZlB0cjxTZXJpYWxpemVkT2JqZWN0PiBJbnB1dE9iamVjdDsKLSAgICB0eXBlZGVmIGJvb2wgT3V0
cHV0VHlwZTsKLSAgICB0eXBlZGVmIGJvb2wgT3V0cHV0QXJyYXk7Ci0gICAgdHlwZWRlZiBib29s
IE91dHB1dE9iamVjdDsKLSAgICB0eXBlZGVmIFNlcmlhbGl6ZWRPYmplY3Q6OlByb3BlcnR5TmFt
ZUxpc3QgUHJvcGVydHlMaXN0OwotCi0gICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHRpY2tzVW50aWxO
ZXh0Q2hlY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7Ci0gICAgfQotCi0g
ICAgYm9vbCBkaWRUaW1lT3V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHRocm93U3RhY2tPdmVyZmxvdygpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wg
bnVsbCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBib29sIGlzQXJyYXkoY29uc3QgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
dHlwZSgpID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkFycmF5VHlwZTsKLSAgICB9Ci0K
LSAgICBib29sIGlzT2JqZWN0KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnR5cGUoKSA9PSBTZXJpYWxpemVkU2NyaXB0
VmFsdWVEYXRhOjpPYmplY3RUeXBlOwotICAgIH0KLQotICAgIFNlcmlhbGl6ZWRBcnJheSogYXNJ
bnB1dEFycmF5KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmFzQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBTZXJpYWxpemVk
T2JqZWN0KiBhc0lucHV0T2JqZWN0KGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzT2JqZWN0KCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBjcmVhdGVPdXRwdXRBcnJheSh1bnNpZ25lZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gaW5kZXhTdGFjazsKKyAg
ICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IHByb3BlcnR5TmFtZVN0YWNrOworICAgIFZlY3RvcjxK
U09iamVjdCosIDE2PiBvdXRwdXRPYmplY3RTdGFjazsKKyAgICBWZWN0b3I8SlNBcnJheSosIDE2
PiBvdXRwdXRBcnJheVN0YWNrOworICAgIFZlY3RvcjxXYWxrZXJTdGF0ZSwgMTY+IHN0YXRlU3Rh
Y2s7CisgICAgV2Fsa2VyU3RhdGUgc3RhdGUgPSBTdGF0ZVVua25vd247CisgICAgSlNWYWx1ZSBv
dXRWYWx1ZTsKIAotICAgIGJvb2wgY3JlYXRlT3V0cHV0T2JqZWN0KCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgdW5zaWduZWQgdGlja0NvdW50ID0gdGlja3NVbnRp
bE5leHRDaGVjaygpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsK
KyAgICAgICAgYXJyYXlTdGFydFN0YXRlOgorICAgICAgICBjYXNlIEFycmF5U3RhcnRTdGF0ZTog
eworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAgICAgICAgaWYgKCFyZWFkKGxl
bmd0aCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICAgICAgZ290byBl
cnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIG91
dEFycmF5LT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5k
KG91dEFycmF5KTsKKyAgICAgICAgICAgIG91dHB1dEFycmF5U3RhY2suYXBwZW5kKG91dEFycmF5
KTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisgICAgICAgIH0KKyAgICAgICAgYXJyYXlT
dGFydFZpc2l0TWVtYmVyOgorICAgICAgICBjYXNlIEFycmF5U3RhcnRWaXNpdE1lbWJlcjogewor
ICAgICAgICAgICAgaWYgKCEtLXRpY2tDb3VudCkgeworICAgICAgICAgICAgICAgIGlmIChkaWRU
aW1lT3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlv
bigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7
CisgICAgICAgICAgICB9CiAKLSAgICB1aW50MzJfdCBsZW5ndGgoUmVmUHRyPFNlcmlhbGl6ZWRB
cnJheT4gYXJyYXkpCi0gICAgewotICAgICAgICByZXR1cm4gYXJyYXktPmxlbmd0aCgpOwotICAg
IH0KKyAgICAgICAgICAgIHVpbnQzMl90IGluZGV4OworICAgICAgICAgICAgaWYgKCFyZWFkKGlu
ZGV4KSkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVy
cm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID09IFRlcm1pbmF0b3JU
YWcpIHsKKyAgICAgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IG91dHB1dEFycmF5U3Rh
Y2subGFzdCgpOworICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgICAgIG91dFZhbHVlID0gb3V0QXJyYXk7CisgICAgICAgICAgICAgICAgb3V0cHV0
QXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAKLSAgICBib29sIGNhbkRvRmFzdFJlYWQoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4g
YXJyYXksIHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFycmF5LT5jYW5E
b0Zhc3RSZWFkKGluZGV4KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5h
bCA9IHJlYWRUZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgcHV0UHJvcGVydHkob3V0cHV0
QXJyYXlTdGFjay5sYXN0KCksIGluZGV4LCB0ZXJtaW5hbCk7CisgICAgICAgICAgICAgICAgZ290
byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bV9mYWlsZWQpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGluZGV4
U3RhY2suYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKEFycmF5
RW5kVmlzaXRNZW1iZXIpOworICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBcnJheUVuZFZpc2l0TWVtYmVyOiB7CisgICAgICAgICAgICBKU0Fy
cmF5KiBvdXRBcnJheSA9IG91dHB1dEFycmF5U3RhY2subGFzdCgpOworICAgICAgICAgICAgcHV0
UHJvcGVydHkob3V0QXJyYXksIGluZGV4U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAg
ICAgICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGdvdG8gYXJyYXlTdGFy
dFZpc2l0TWVtYmVyOworICAgICAgICB9CisgICAgICAgIG9iamVjdFN0YXJ0U3RhdGU6CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhcnRTdGF0ZTogeworICAgICAgICAgICAgaWYgKG91dHB1dE9iamVj
dFN0YWNrLnNpemUoKSArIG91dHB1dEFycmF5U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJl
Y3Vyc2lvbikgeworICAgICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvdygpOworICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBK
U09iamVjdCogb3V0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobV9leGVjLCBtX2dsb2Jh
bE9iamVjdCk7CisgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChvdXRPYmplY3QpOworICAg
ICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG91dE9iamVjdCk7CisgICAgICAgICAg
ICAvLyBmYWxsdGhyb3VnaAorICAgICAgICB9CisgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1i
ZXI6CisgICAgICAgIGNhc2UgT2JqZWN0U3RhcnRWaXNpdE1lbWJlcjogeworICAgICAgICAgICAg
aWYgKCEtLXRpY2tDb3VudCkgeworICAgICAgICAgICAgICAgIGlmIChkaWRUaW1lT3V0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aWNrQ291bnQgPSB0aWNrc1VudGlsTmV4dENoZWNrKCk7CisgICAgICAgICAg
ICB9CiAKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhIGdldEluZGV4KFJlZlB0cjxTZXJp
YWxpemVkQXJyYXk+IGFycmF5LCB1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOwotICAgIH0KKyAgICAgICAgICAgIElkZW50aWZpZXIg
aWRlbnQ7CisgICAgICAgICAgICBib29sIHdhc1Rlcm1pbmF0b3IgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghcmVhZFN0cmluZ0RhdGEoaWRlbnQsIHdhc1Rlcm1pbmF0b3IpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCF3YXNUZXJtaW5hdG9yKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVy
cm9yOworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvdXRPYmplY3QgPSBvdXRwdXRPYmplY3RT
dGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICAgICAgb3V0VmFsdWUgPSBvdXRPYmplY3Q7CisgICAgICAgICAgICAgICAgb3V0
cHV0T2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogCi0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSBnZXRTcGFyc2VJbmRl
eChSZWZQdHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBi
b29sJiBoYXNJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcnJheS0+Z2V0U3BhcnNlSW5k
ZXgocHJvcGVydHlOYW1lLCBoYXNJbmRleCk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKEpTVmFs
dWUgdGVybWluYWwgPSByZWFkVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIHB1dFByb3Bl
cnR5KG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKSwgaWRlbnQsIHRlcm1pbmFsKTsKKyAgICAgICAg
ICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7CisgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVTdGFjay5hcHBlbmQoaWRlbnQpOworICAgICAgICAgICAgZ290byBz
dGF0ZVVua25vd247CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPYmplY3RFbmRWaXNpdE1lbWJl
cjogeworICAgICAgICAgICAgcHV0UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgpLCBw
cm9wZXJ0eU5hbWVTdGFjay5sYXN0KCksIG91dFZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5
TmFtZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNp
dE1lbWJlcjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZVVua25vd246CisgICAgICAgIGNhc2Ug
U3RhdGVVbmtub3duOgorICAgICAgICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwgPSByZWFkVGVy
bWluYWwoKSkgeworICAgICAgICAgICAgICAgIG91dFZhbHVlID0gdGVybWluYWw7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXJpYWxpemF0aW9u
VGFnIHRhZyA9IHJlYWRUYWcoKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gQXJyYXlUYWcpCisg
ICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0U3RhdGU7CisgICAgICAgICAgICBpZiAodGFn
ID09IE9iamVjdFRhZykKKyAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0U3RhdGU7Cisg
ICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZVN0YWNr
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlRGF0YSBnZXRQcm9wZXJ0eShSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4gb2JqZWN0LCBjb25z
dCBSZWZQdHI8U3RyaW5nSW1wbD4mIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgcHJvcGVydHlJbmRl
eCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChvYmplY3QtPm5hbWVzKClbcHJvcGVydHlJbmRleF0g
PT0gcHJvcGVydHlOYW1lKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgIHJldHVybiBvYmplY3QtPnZhbHVlcygpW3Byb3BlcnR5SW5kZXhdOwotICAgIH0KKyAg
ICAgICAgc3RhdGUgPSBzdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhdGVTdGFjay5yZW1v
dmVMYXN0KCk7CiAKLSAgICBib29sIGNvbnZlcnRJZlRlcm1pbmFsKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZURhdGEmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6QXJyYXlUeXBlOgot
ICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpPYmplY3RUeXBlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YTo6U3RyaW5nVHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YTo6SW1tZWRpYXRlVHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6TnVtYmVyVHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6RGF0ZVR5cGU6Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZURhdGE6OkVtcHR5VHlwZToKLSAgICAgICAgICAgIGNhc2UgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YTo6QmxvYlR5cGU6Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OkZpbGVUeXBlOgotICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWVEYXRhOjpGaWxlTGlzdFR5cGU6Ci0gICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OkltYWdlRGF0YVR5cGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghLS10aWNrQ291bnQpIHsKKyAgICAgICAgICAgIGlmIChkaWRUaW1l
T3V0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0ludGVycnVwdGVkRXhjZXB0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRpY2tDb3VudCA9IHRpY2tzVW50aWxOZXh0Q2hlY2soKTsKICAgICAgICAgfQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAg
IEFTU0VSVChvdXRWYWx1ZSk7CisgICAgQVNTRVJUKCFtX2ZhaWxlZCk7CisgICAgcmV0dXJuIG91
dFZhbHVlOworZXJyb3I6CisgICAgZmFpbCgpOworICAgIHRocm93VmFsaWRhdGlvbkVycm9yKCk7
CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KIAotICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhS
ZWZQdHI8U2VyaWFsaXplZE9iamVjdD4gb2JqZWN0LCBWZWN0b3I8U2VyaWFsaXplZE9iamVjdDo6
UHJvcGVydHlOYW1lTGlzdCwgMTY+JiBwcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgcHJvcGVy
dGllcy5hcHBlbmQob2JqZWN0LT5uYW1lcygpKTsKLSAgICB9CiAKLSAgICB2b2lkIHB1dFByb3Bl
cnR5KGJvb2wsIHVuc2lnbmVkLCBib29sKQotICAgIHsKLSAgICB9CiAKLSAgICB2b2lkIHB1dFBy
b3BlcnR5KGJvb2wsIGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYsIGJvb2wpCi0gICAgewotICAg
IH0KK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6flNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCit7Cit9
CiAKLSAgICBib29sIHN0YXJ0QXJyYXkoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4sIGJvb2wpCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgdm9pZCBlbmRBcnJheShSZWZQ
dHI8U2VyaWFsaXplZEFycmF5PiBhcnJheSwgYm9vbCkKLSAgICB7Ci0gICAgICAgIGFycmF5LT5j
bGVhcigpOwotICAgIH0KLSAgICBib29sIHN0YXJ0T2JqZWN0KFJlZlB0cjxTZXJpYWxpemVkT2Jq
ZWN0PiwgYm9vbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB2b2lk
IGVuZE9iamVjdChSZWZQdHI8U2VyaWFsaXplZE9iamVjdD4gb2JqZWN0LCBib29sKQotICAgIHsK
LSAgICAgICAgb2JqZWN0LT5jbGVhcigpOwotICAgIH0KLX07CitTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKK3sKKyAg
ICBtX2RhdGEuc3dhcChidWZmZXIpOworfQogCi12b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURh
dGE6OnRlYXJEb3duU2VyaWFsaXplZERhdGEoKQorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAobV9zaGFyZWREYXRhICYmIG1fc2hhcmVkRGF0YS0+cmVm
Q291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBUZWFyZG93blRyZWVXYWxrZXIgY29u
dGV4dDsKLSAgICB3YWxrPFRlYXJkb3duVHJlZVdhbGtlcj4oY29udGV4dCwgKnRoaXMpOworICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgaWYgKCFDbG9uZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZShleGVjLCB2YWx1ZSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CiB9CiAKLVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6flNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCitQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKQorewor
ICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJp
YWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmcgc3RyaW5nKQog
eworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgaWYgKCFDbG9uZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShzdHJpbmcsIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwogfQogCiBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKQEAgLTEwNzYsMTQgKzEyNzEsMTggQEAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4
dFJlZiBvcmkKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIAorICAgIEFTU0VSVChzZXJpYWxpemVkVmFsdWUpOwogICAgIHJldHVy
biBzZXJpYWxpemVkVmFsdWU7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSAKK1N0cmluZyBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXpl
U3RyaW5nKG1fZGF0YSk7Cit9CisKK0pTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNl
cmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
bnVsbFZhbHVlLCAoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSkpOwotICAgIHJldHVy
biBudWxsVmFsdWUuZ2V0KCk7CisgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlh
bGl6ZShleGVjLCBnbG9iYWxPYmplY3QsIG1fZGF0YSk7CiB9CiAKIEpTVmFsdWVSZWYgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYgZGVzdGluYXRpb25Db250
ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC0xMDk3LDcgKzEyOTYsMTQgQEAgSlNWYWx1
ZVJlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiBkZXN0
aW5hdGlvbkNvbnRleHQsIEoKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQorICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIHZhbHVlKTsKIH0KIAorU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6Om51bGxWYWx1ZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgZW1wdHlWYWx1ZSwgKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKCkpKTsKKyAgICByZXR1cm4gZW1wdHlWYWx1ZS5nZXQoKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMzJjZTQxODFm
ZWRkZmFhYjAwZTZmNjY0NTI0MzQ1YzdlZmE5YzJiOS4uYjQxZDlhMzAzNzMzNmVhZjlkNjc0ZGM1
YTY3ZTVkOGZmZWFiNTYzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oCkBAIC0yOCwyMjkgKzI4LDM0IEBACiAjZGVmaW5lIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZV9oCiAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVm
OwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEJsb2I7Ci0gICAgY2xhc3MgRmlsZTsKLSAgICBj
bGFzcyBGaWxlTGlzdDsKLSAgICBjbGFzcyBJbWFnZURhdGE7Ci0gICAgY2xhc3MgU2VyaWFsaXpl
ZEFycmF5OwotICAgIGNsYXNzIFNlcmlhbGl6ZWRCbG9iOwotICAgIGNsYXNzIFNlcmlhbGl6ZWRG
aWxlOwotICAgIGNsYXNzIFNlcmlhbGl6ZWRGaWxlTGlzdDsKLSAgICBjbGFzcyBTZXJpYWxpemVk
SW1hZ2VEYXRhOwotICAgIGNsYXNzIFNlcmlhbGl6ZWRPYmplY3Q7CiAKLSAgICBjbGFzcyBTaGFy
ZWRTZXJpYWxpemVkRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFNlcmlhbGl6ZWREYXRh
PiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TaGFyZWRTZXJpYWxpemVkRGF0YSgp
IHsgfQotICAgICAgICBTZXJpYWxpemVkQXJyYXkqIGFzQXJyYXkoKTsKLSAgICAgICAgU2VyaWFs
aXplZE9iamVjdCogYXNPYmplY3QoKTsKLSAgICAgICAgU2VyaWFsaXplZEJsb2IqIGFzQmxvYigp
OwotICAgICAgICBTZXJpYWxpemVkRmlsZSogYXNGaWxlKCk7Ci0gICAgICAgIFNlcmlhbGl6ZWRG
aWxlTGlzdCogYXNGaWxlTGlzdCgpOwotICAgICAgICBTZXJpYWxpemVkSW1hZ2VEYXRhKiBhc0lt
YWdlRGF0YSgpOwotICAgIH07CitjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLSAgICBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUgOiBwdWJsaWMg
UmVmQ291bnRlZDxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUoU3RyaW5nIHN0cmluZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiBudWxsVmFsdWUoKTsKIAotICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZURhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBTZXJpYWxpemVkVHlwZSB7Ci0gICAg
ICAgICAgICBFbXB0eVR5cGUsCi0gICAgICAgICAgICBEYXRlVHlwZSwKLSAgICAgICAgICAgIE51
bWJlclR5cGUsCi0gICAgICAgICAgICBJbW1lZGlhdGVUeXBlLAotICAgICAgICAgICAgT2JqZWN0
VHlwZSwKLSAgICAgICAgICAgIEFycmF5VHlwZSwKLSAgICAgICAgICAgIFN0cmluZ1R5cGUsCi0g
ICAgICAgICAgICBCbG9iVHlwZSwKLSAgICAgICAgICAgIEZpbGVUeXBlLAotICAgICAgICAgICAg
RmlsZUxpc3RUeXBlLAotICAgICAgICAgICAgSW1hZ2VEYXRhVHlwZQotICAgICAgICB9OworICAg
IEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KTsKKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBK
U1ZhbHVlUmVmIGRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKKyAgICAKKyAgICB+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKLSAgICAgICAgU2VyaWFs
aXplZFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBzdGF0aWMg
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUpOwotICAgICAgICBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgYm9vbCBtdXN0Q29weSkgY29uc3Q7Citwcml2YXRl
OgorICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mKTsKKyAg
ICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gbV9kYXRhOworfTsKIAotICAgICAgICB+U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3NoYXJlZERh
dGEpCi0gICAgICAgICAgICAgICAgdGVhckRvd25TZXJpYWxpemVkRGF0YSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSgpCi0gICAgICAgICAgICA6IG1f
dHlwZShFbXB0eVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGxpY2l0
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAg
ICAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQotICAgICAgICAgICAgLCBtX3N0cmluZyhzdHJpbmcu
Y3Jvc3NUaHJlYWRTdHJpbmcoKSkgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIGp1c3Qgc2hh
cmUgdGhlIFN0cmluZ0ltcGwKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgZXhwbGlj
aXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBCbG9iKik7Ci0gICAgICAgIGV4cGxp
Y2l0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZSopOwotICAgICAgICBleHBs
aWNpdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEZpbGVMaXN0Kik7Ci0gICAgICAg
IGV4cGxpY2l0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgSW1hZ2VEYXRhKik7Ci0K
LSAgICAgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgICAgICAgICA6IG1fdHlwZShJbW1lZGlhdGVUeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzQ2VsbCgpKTsKLSAgICAgICAgICAgIG1fZGF0YS5t
X2ltbWVkaWF0ZSA9IEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoU2VyaWFsaXplZFR5cGUgdHlwZSwgZG91
YmxlIHZhbHVlKQotICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9kYXRhLm1fZG91YmxlID0gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKFJlZlB0cjxTZXJpYWxpemVkT2JqZWN0Pik7Ci0gICAgICAg
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoUmVmUHRyPFNlcmlhbGl6ZWRBcnJheT4pOwotCi0g
ICAgICAgIEpTQzo6SlNWYWx1ZSBhc0ltbWVkaWF0ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW1tZWRpYXRlVHlwZSk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNDOjpKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLm1faW1tZWRpYXRlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gTnVtYmVyVHlwZSB8fCBtX3R5cGUgPT0gRGF0ZVR5cGUpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fZGF0YS5tX2RvdWJsZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBhc1N0cmluZygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gU3RyaW5nVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgICAg
IH0KLQotICAgICAgICBTZXJpYWxpemVkT2JqZWN0KiBhc09iamVjdCgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gT2JqZWN0VHlwZSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9zaGFyZWREYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NoYXJlZERhdGEt
PmFzT2JqZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTZXJpYWxpemVkQXJyYXkqIGFzQXJy
YXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEFycmF5
VHlwZSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9zaGFyZWREYXRhKTsKLSAgICAgICAgICAgIHJl
dHVybiBtX3NoYXJlZERhdGEtPmFzQXJyYXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlcmlh
bGl6ZWRCbG9iKiBhc0Jsb2IoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV90eXBlID09IEJsb2JUeXBlKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NoYXJlZERhdGEpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNCbG9iKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBTZXJpYWxpemVkRmlsZSogYXNGaWxlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBGaWxlVHlwZSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9z
aGFyZWREYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NoYXJlZERhdGEtPmFzRmlsZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgU2VyaWFsaXplZEZpbGVMaXN0KiBhc0ZpbGVMaXN0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBGaWxlTGlzdFR5cGUp
OwotICAgICAgICAgICAgQVNTRVJUKG1fc2hhcmVkRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zaGFyZWREYXRhLT5hc0ZpbGVMaXN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFNlcmlhbGl6ZWRJbWFnZURhdGEqIGFzSW1hZ2VEYXRhKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbWFnZURhdGFUeXBlKTsKLSAgICAgICAgICAgIEFT
U0VSVChtX3NoYXJlZERhdGEpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNJ
bWFnZURhdGEoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgIT0gRW1wdHlUeXBlOyB9Ci0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YSByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YSByZXN1bHQgPSAqdGhpczsKLSAgICAgICAgICAgICp0aGlzID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB0ZWFyRG93blNlcmlhbGl6ZWREYXRh
KCk7Ci0gICAgICAgIFNlcmlhbGl6ZWRUeXBlIG1fdHlwZTsKLSAgICAgICAgUmVmUHRyPFNoYXJl
ZFNlcmlhbGl6ZWREYXRhPiBtX3NoYXJlZERhdGE7Ci0gICAgICAgIFN0cmluZyBtX3N0cmluZzsK
LSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgZG91YmxlIG1fZG91YmxlOwotICAgICAgICAg
ICAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBtX2ltbWVkaWF0ZTsKLSAgICAgICAgfSBtX2RhdGE7Ci0g
ICAgfTsKLQotICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVl
RGF0YTo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwotCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFN0cmluZyBzdHJp
bmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoc3RyaW5nKSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKCkpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc3RhdGljIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogbnVsbFZh
bHVlKCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShtX3ZhbHVl
KSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSgpOwot
ICAgICAgICAgICAgcmVzdWx0LT5tX211c3RDb3B5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS50eXBlKCkgIT0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlRGF0YTo6U3RyaW5nVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAg
ICAgICByZXR1cm4gbV92YWx1ZS5hc1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlND
OjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV92YWx1
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgICAgIHJl
dHVybiBtX3ZhbHVlLmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9tdXN0Q29weSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBKU1ZhbHVlUmVmIGRlc2VyaWFsaXplKEpTQ29udGV4dFJl
ZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKLSAgICAgICAgflNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZURhdGEgdmFsdWUpCi0gICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUp
Ci0gICAgICAgICAgICAsIG1fbXVzdENvcHkoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEgbV92YWx1ZTsKLSAgICAgICAgYm9v
bCBtX211c3RDb3B5OwotICAgIH07CiB9CiAKICNlbmRpZiAvLyBTZXJpYWxpemVkU2NyaXB0VmFs
dWVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBiL1dl
YkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKaW5kZXggZTFhM2FjNmYzMWM0N2I5Mzk2
NTgyZmRiYjQxZjZlMGRhZTNlNmQyZC4uY2I0MzFhMWUyYzliZjE2OTE1YmM2ZThjN2UwOTlkNDE4
MGU2MTE4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6RXZlbnREYXRhOjpjcmVhdGUoCiB9CiAKIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnRE
YXRhOjpFdmVudERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2Us
IFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQotICAgIDogbV9t
ZXNzYWdlKG1lc3NhZ2UtPnJlbGVhc2UoKSkKKyAgICA6IG1fbWVzc2FnZShtZXNzYWdlKQogICAg
ICwgbV9jaGFubmVscyhjaGFubmVscykKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCmluZGV4IDIxOTk0Y2M2MDdmYjE4OTM4NTc0ZjZhNzE0OTMzMTE5NmI4ZDVj
YTAuLjEwNzAwYzY0ZWY2OWU1YTVmMzdkMDFhZmIyNDQzNmY1YzVmY2UxYTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVscykKLSAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS0+cmVsZWFzZSgp
KQorICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlKQogICAgICAgICAsIG1fY2hhbm5lbHMoY2hh
bm5lbHMpCiAgICAgewogICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIE1lc3NhZ2VXb3JrZXJUYXNrKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscywg
V29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICA6IG1fbWVzc2Fn
ZShtZXNzYWdlLT5yZWxlYXNlKCkpCisgICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAg
ICAgICwgbV9jaGFubmVscyhjaGFubmVscykKICAgICAgICAgLCBtX21lc3NhZ2luZ1Byb3h5KG1l
c3NhZ2luZ1Byb3h5KQogICAgIHsK
</data>
<flag name="review"
          id="55653"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>