<?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>17496</bug_id>
          
          <creation_ts>2008-02-23 00:54:57 -0800</creation_ts>
          <short_desc>make Deque use a circular array; add iterators</short_desc>
          <delta_ts>2008-02-23 21:19:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>71566</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 00:54:57 -0800</bug_when>
    <thetext>To make Deque a little more generally useful, we should make a version that uses a circular array and add iterators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71568</commentid>
    <comment_count>1</comment_count>
      <attachid>19289</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 00:58:26 -0800</bug_when>
    <thetext>Created attachment 19289
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71644</commentid>
    <comment_count>2</comment_count>
      <attachid>19289</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-02-23 14:45:21 -0800</bug_when>
    <thetext>Comment on attachment 19289
patch

Looks great, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71670</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 21:19:37 -0800</bug_when>
    <thetext>Committed revision 30538.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19289</attachid>
            <date>2008-02-23 00:58:26 -0800</date>
            <delta_ts>2008-02-23 14:45:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>DequePatch.txt</filename>
            <type>text/plain</type>
            <size>26905</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNTE5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDItMjMgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc0OTYKKyAgICAgICAgICBtYWtlIERlcXVlIHVzZSBhIGNpcmN1bGFyIGFycmF5OyBhZGQgaXRl
cmF0b3JzCisKKyAgICAgICAgKiB3dGYvRGVxdWUuaDogV3JvdGUgYW4gYWxsLW5ldyB2ZXJzaW9u
IG9mIHRoaXMgY2xhc3MgdGhhdCB1c2VzIGEgY2lyY3VsYXIKKyAgICAgICAgYnVmZmVyLiBHcm93
dGggcG9saWN5IGlzIGlkZW50aWNhbCB0byB2ZWN0b3IuIEFkZGVkIGl0ZXJhdG9ycy4KKworICAg
ICAgICAqIHd0Zi9WZWN0b3IuaDogTWFkZSB0d28gc21hbGwgcmVmaW5lbWVudHMgd2hpbGUgdXNp
bmcgdGhpcyB0byBpbXBsZW1lbnQKKyAgICAgICAgRGVxdWU6IE1hZGUgVmVjdG9yQnVmZmVyQmFz
ZSBkZXJpdmUgZnJvbSBOb25jb3B5YWJsZSwgd2hpY2ggd291bGQgaGF2ZQorICAgICAgICBzYXZl
ZCBtZSBzb21lIGRlYnVnZ2luZyB0aW1lIGlmIGl0IGhhZCBiZWVuIHRoZXJlLiBSZW5hbWVkIElt
cGwgYW5kCisgICAgICAgIG1faW1wbCB0byBCdWZmZXIgYW5kIG1fYnVmZmVyLgorCiAyMDA4LTAy
LTIyICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAzMDUxNSkKKysr
IEphdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5OSArMjUsNTUy
IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBXVEZf
RGVxdWVfaAogI2RlZmluZSBXVEZfRGVxdWVfaAogCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKy8vIEZJWE1FOiBDb3VsZCBtb3ZlIHdo
YXQgVmVjdG9yIGFuZCBEZXF1ZSBzaGFyZSBpbnRvIGEgc2VwYXJhdGUgZmlsZS4KKy8vIERlcXVl
IGRvZXNuJ3QgYWN0dWFsbHkgdXNlIFZlY3Rvci4KKworI2luY2x1ZGUgIlZlY3Rvci5oIgogCiBu
YW1lc3BhY2UgV1RGIHsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlSXRl
cmF0b3JCYXNlOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlSXRlcmF0b3I7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVxdWVDb25zdEl0ZXJhdG9yOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlUmV2ZXJzZUl0ZXJhdG9yOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I7CisKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGNsYXNzIERlcXVlTm9kZSB7CisgICAgY2xhc3Mg
RGVxdWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVxdWVOb2RlKGNvbnN0IFQmIGl0ZW0pIDog
bV92YWx1ZShpdGVtKSwgbV9uZXh0KDApIHsgfQorICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0
b3I8VD4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IGNv
bnN0X2l0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQ+IHJl
dmVyc2VfaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRv
cjxUPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAgIERlcXVlKCk7CisgICAgICAg
IERlcXVlKGNvbnN0IERlcXVlPFQ+Jik7CisgICAgICAgIERlcXVlJiBvcGVyYXRvcj0oY29uc3Qg
RGVxdWU8VD4mKTsKKyAgICAgICAgfkRlcXVlKCk7CisKKyAgICAgICAgdm9pZCBzd2FwKERlcXVl
PFQ+Jik7CisKKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0IDw9
IG1fZW5kID8gbV9lbmQgLSBtX3N0YXJ0IDogbV9lbmQgKyBtX2J1ZmZlci5jYXBhY2l0eSgpIC0g
bV9zdGFydDsgfQorICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
ID09IG1fZW5kOyB9CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRv
cih0aGlzLCBtX3N0YXJ0KTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVy
YXRvcih0aGlzLCBtX2VuZCk7IH0KKyAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3N0YXJ0KTsgfQorICAgICAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX2Vu
ZCk7IH0KKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKHRoaXMsIG1fZW5kKTsgfQorICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMsIG1fc3RhcnQpOyB9CisgICAgICAgIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcih0aGlzLCBtX2VuZCk7IH0KKyAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLCBtX3N0
YXJ0KTsgfQorCisgICAgICAgIFQmIGZpcnN0KCkgeyBBU1NFUlQobV9zdGFydCAhPSBtX2VuZCk7
IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKVttX3N0YXJ0XTsgfQorICAgICAgICBjb25zdCBUJiBm
aXJzdCgpIGNvbnN0IHsgQVNTRVJUKG1fc3RhcnQgIT0gbV9lbmQpOyByZXR1cm4gbV9idWZmZXIu
YnVmZmVyKClbbV9zdGFydF07IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lk
IGFwcGVuZChjb25zdCBVJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgcHJl
cGVuZChjb25zdCBVJik7CisgICAgICAgIHZvaWQgcmVtb3ZlRmlyc3QoKTsKKworICAgICAgICB2
b2lkIGNsZWFyKCk7CiAKLSAgICAgICAgVCBtX3ZhbHVlOwotICAgICAgICBEZXF1ZU5vZGUqIG1f
bmV4dDsKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgRGVxdWVJdGVyYXRvckJh
c2U8VD47CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgMD4gQnVmZmVyOworICAg
ICAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAg
ICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEl0ZXJhdG9yQmFzZTsKKworICAgICAg
ICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgdm9pZCBkZXN0cm95QWxsKCk7
CisgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eSgpIGNvbnN0OworICAgICAgICB2b2lkIGNoZWNr
SW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0OworICAgICAgICB2b2lkIGV4cGFuZENhcGFjaXR5
SWZOZWVkZWQoKTsKKyAgICAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgpOworCisgICAgICAgIHNp
emVfdCBtX3N0YXJ0OworICAgICAgICBzaXplX3QgbV9lbmQ7CisgICAgICAgIEJ1ZmZlciBtX2J1
ZmZlcjsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG11dGFibGUgSXRlcmF0b3JCYXNlKiBtX2l0
ZXJhdG9yczsKKyNlbmRpZgogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IGNsYXNzIERlcXVlIDogTm9uY29weWFibGUgeworICAgIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNl
IHsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJh
c2U7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKCk7CisgICAg
ICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQ+Kiwgc2l6ZV90KTsKKyAgICAgICAg
RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgQmFzZSYpOworICAgICAgICBCYXNlJiBvcGVyYXRvcj0o
Y29uc3QgQmFzZSYpOworICAgICAgICB+RGVxdWVJdGVyYXRvckJhc2UoKTsKKworICAgICAgICB2
b2lkIGFzc2lnbihjb25zdCBCYXNlJiBvdGhlcikgeyAqdGhpcyA9IG90aGVyOyB9CisKKyAgICAg
ICAgdm9pZCBpbmNyZW1lbnQoKTsKKyAgICAgICAgdm9pZCBkZWNyZW1lbnQoKTsKKworICAgICAg
ICBUKiBiZWZvcmUoKSBjb25zdDsKKyAgICAgICAgVCogYWZ0ZXIoKSBjb25zdDsKKworICAgICAg
ICBib29sIGlzRXF1YWwoY29uc3QgQmFzZSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBhZGRUb0l0ZXJhdG9yc0xpc3QoKTsKKyAgICAgICAgdm9pZCBjaGVja1ZhbGlkaXR5
KCkgY29uc3Q7CisgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShjb25zdCBCYXNlJikgY29uc3Q7
CisKKyAgICAgICAgRGVxdWU8VD4qIG1fZGVxdWU7CisgICAgICAgIHNpemVfdCBtX2luZGV4Owor
CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxUPjsKKworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgbXV0YWJsZSBEZXF1ZUl0ZXJhdG9yQmFzZSogbV9uZXh0OworICAgICAgICBtdXRhYmxlIERl
cXVlSXRlcmF0b3JCYXNlKiBtX3ByZXZpb3VzOworI2VuZGlmCisgICAgfTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgRGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0
ZXJhdG9yQmFzZTxUPiB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPiBCYXNlOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gSXRlcmF0
b3I7CisKICAgICBwdWJsaWM6Ci0gICAgICAgIERlcXVlKCkKLSAgICAgICAgICAgIDogbV9zaXpl
KDApCi0gICAgICAgICAgICAsIG1fZmlyc3QoMCkKLSAgICAgICAgICAgICwgbV9sYXN0KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIH5EZXF1ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biAhc2l6ZSgpOyB9Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgVCYgaXRlbSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRGVxdWVOb2RlPFQ+KiBuZXdOb2RlID0gbmV3IERlcXVlTm9kZTxU
PihpdGVtKTsKLSAgICAgICAgICAgIGlmIChtX2xhc3QpCi0gICAgICAgICAgICAgICAgbV9sYXN0
LT5tX25leHQgPSBuZXdOb2RlOwotICAgICAgICAgICAgbV9sYXN0ID0gbmV3Tm9kZTsKLSAgICAg
ICAgICAgIGlmICghbV9maXJzdCkKLSAgICAgICAgICAgICAgICBtX2ZpcnN0ID0gbmV3Tm9kZTsK
LSAgICAgICAgICAgICsrbV9zaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcmVwZW5k
KGNvbnN0IFQmIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIERlcXVlTm9kZTxUPiogbmV3
Tm9kZSA9IG5ldyBEZXF1ZU5vZGU8VD4oaXRlbSk7Ci0gICAgICAgICAgICBuZXdOb2RlLT5tX25l
eHQgPSBtX2ZpcnN0OwotICAgICAgICAgICAgbV9maXJzdCA9IG5ld05vZGU7Ci0gICAgICAgICAg
ICBpZiAoIW1fbGFzdCkKLSAgICAgICAgICAgICAgICBtX2xhc3QgPSBuZXdOb2RlOwotICAgICAg
ICAgICAgKyttX3NpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBUJiBmaXJzdCgpIHsgQVNTRVJU
KG1fZmlyc3QpOyByZXR1cm4gbV9maXJzdC0+bV92YWx1ZTsgfQotICAgICAgICBjb25zdCBUJiBm
aXJzdCgpIGNvbnN0IHsgQVNTRVJUKG1fZmlyc3QpOyByZXR1cm4gbV9maXJzdC0+bV92YWx1ZTsg
fQotICAgICAgICBUJiBsYXN0KCkgeyBBU1NFUlQobV9sYXN0KTsgcmV0dXJuIG1fbGFzdC0+bV92
YWx1ZTsgfQotICAgICAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyBBU1NFUlQobV9sYXN0KTsg
cmV0dXJuIG1fbGFzdC0+bV92YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgcmVtb3ZlRmlyc3QoKSAK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZmlyc3QpOwotICAgICAgICAgICAgaWYg
KERlcXVlTm9kZTxUPiogbiA9IG1fZmlyc3QpIHsKLSAgICAgICAgICAgICAgICBtX2ZpcnN0ID0g
bV9maXJzdC0+bV9uZXh0OwotICAgICAgICAgICAgICAgIGlmIChuID09IG1fbGFzdCkKLSAgICAg
ICAgICAgICAgICAgICAgbV9sYXN0ID0gMDsKKyAgICAgICAgRGVxdWVJdGVyYXRvcihEZXF1ZTxU
PiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKLSAgICAg
ICAgICAgICAgICBtX3NpemUtLTsKLSAgICAgICAgICAgICAgICBkZWxldGUgbjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgRGVxdWVJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFz
ZShvdGhlcikgeyB9CisgICAgICAgIERlcXVlSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVy
YXRvciYgb3RoZXIpIHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9CisKKyAg
ICAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKkJhc2U6OmFmdGVyKCk7IH0KKyAg
ICAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIEJhc2U6OmFmdGVyKCk7IH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJl
dHVybiBCYXNlOjppc0VxdWFsKG90aGVyKTsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhQmFzZTo6aXNFcXVhbChvdGhlcik7
IH0KKworICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgQmFzZTo6aW5jcmVtZW50KCk7
IHJldHVybiAqdGhpczsgfQorICAgICAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21p
dHRlZAorICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsgQmFzZTo6ZGVjcmVtZW50KCk7
IHJldHVybiAqdGhpczsgfQorICAgICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21p
dHRlZAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIERlcXVl
Q29uc3RJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBCYXNlOworICAgICAgICB0
eXBlZGVmIERlcXVlQ29uc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBE
ZXF1ZUl0ZXJhdG9yPFQ+IE5vbkNvbnN0SXRlcmF0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICAg
IERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBEZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkg
OiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CisKKyAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9yKGNv
bnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KKyAgICAgICAgRGVxdWVDb25z
dEl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsg
fQorICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYg
b3RoZXIpIHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIERl
cXVlQ29uc3RJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVy
KSB7IEJhc2U6OmFzc2lnbihvdGhlcik7IHJldHVybiAqdGhpczsgfQorCisgICAgICAgIGNvbnN0
IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpCYXNlOjphZnRlcigpOyB9CisgICAgICAg
IGNvbnN0IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBCYXNlOjphZnRlcigpOyB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gQmFzZTo6aXNFcXVhbChvdGhlcik7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gIUJhc2U6OmlzRXF1YWwob3RoZXIp
OyB9CisKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IEJhc2U6OmluY3JlbWVudCgp
OyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9t
aXR0ZWQKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7IEJhc2U6OmRlY3JlbWVudCgp
OyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5IG9t
aXR0ZWQKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBEZXF1
ZVJldmVyc2VJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBCYXNlOworICAgICAg
ICB0eXBlZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOworCisgICAgcHVibGlj
OgorICAgICAgICBEZXF1ZVJldmVyc2VJdGVyYXRvcihjb25zdCBEZXF1ZTxUPiogZGVxdWUsIHNp
emVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CisKKyAgICAgICAgRGVxdWVSZXZl
cnNlSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQorICAg
ICAgICBEZXF1ZVJldmVyc2VJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhl
cikgeyBCYXNlOjphc3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgICBUJiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqQmFzZTo6YmVmb3JlKCk7IH0KKyAgICAgICAgVCog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIEJhc2U6OmJlZm9yZSgpOyB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gQmFz
ZTo6aXNFcXVhbChvdGhlcik7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gIUJhc2U6OmlzRXF1YWwob3RoZXIpOyB9CisKKyAg
ICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IEJhc2U6OmRlY3JlbWVudCgpOyByZXR1cm4g
KnRoaXM7IH0KKyAgICAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKyAg
ICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7IEJhc2U6OmluY3JlbWVudCgpOyByZXR1cm4g
KnRoaXM7IH0KKyAgICAgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKyAg
ICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBEZXF1ZUNvbnN0UmV2
ZXJzZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNlPFQ+IHsKKyAgICBwcml2YXRl
OgorICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7CisgICAgICAgIHR5
cGVkZWYgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRvcjxUPiBJdGVyYXRvcjsKKyAgICAgICAgdHlw
ZWRlZiBEZXF1ZVJldmVyc2VJdGVyYXRvcjxUPiBOb25Db25zdEl0ZXJhdG9yOworCisgICAgcHVi
bGljOgorICAgICAgICBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yKGNvbnN0IERlcXVlPFQ+KiBk
ZXF1ZSwgc2l6ZV90IGluZGV4KSA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KKworICAgICAgICBE
ZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90
aGVyKSB7IH0KKyAgICAgICAgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRvcihjb25zdCBOb25Db25z
dEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KKyAgICAgICAgRGVxdWVDb25zdFJl
dmVyc2VJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyBCYXNlOjph
c3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgRGVxdWVDb25zdFJldmVyc2VJ
dGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSB7IEJhc2U6
OmFzc2lnbihvdGhlcik7IHJldHVybiAqdGhpczsgfQorCisgICAgICAgIGNvbnN0IFQmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpCYXNlOjpiZWZvcmUoKTsgfQorICAgICAgICBjb25zdCBU
KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YmVmb3JlKCk7IH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBC
YXNlOjppc0VxdWFsKG90aGVyKTsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhQmFzZTo6aXNFcXVhbChvdGhlcik7IH0KKwor
ICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgQmFzZTo6ZGVjcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQorICAgICAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAor
ICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsgQmFzZTo6aW5jcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQorICAgICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRlZAor
ICAgIH07CisKKyNpZmRlZiBOREVCVUcKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjpjaGVja0luZGV4VmFsaWRpdHkoc2l6ZV90
KSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZTxU
Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQorI2Vsc2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgRGVxdWU8VD46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2J1ZmZlci5jYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1f
c3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKCFtX2VuZCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQobV9zdGFydCA8IG1fYnVmZmVyLmNhcGFjaXR5KCkpOworICAgICAg
ICAgICAgQVNTRVJUKG1fZW5kIDwgbV9idWZmZXIuY2FwYWNpdHkoKSk7CiAgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgdm9pZCBjbGVhcigpIAotICAgICAgICB7Ci0gICAgICAgICAgICBEZXF1
ZU5vZGU8VD4qIG4gPSBtX2ZpcnN0OwotICAgICAgICAgICAgbV9maXJzdCA9IDA7Ci0gICAgICAg
ICAgICBtX2xhc3QgPSAwOwotICAgICAgICAgICAgbV9zaXplID0gMDsKLSAgICAgICAgICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgRGVxdWVOb2RlPFQ+KiBuZXh0ID0gbi0+bV9uZXh0
OwotICAgICAgICAgICAgICAgIGRlbGV0ZSBuOwotICAgICAgICAgICAgICAgIG4gPSBuZXh0Owor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZTxUPjo6Y2hlY2tJbmRleFZh
bGlkaXR5KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
PSBtX2J1ZmZlci5jYXBhY2l0eSgpKTsKKyAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3N0YXJ0KTsKKyAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8PSBtX2VuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPj0gbV9zdGFydCB8fCBpbmRleCA8PSBtX2VuZCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgRGVxdWU8VD46OmludmFsaWRhdGVJ
dGVyYXRvcnMoKQorICAgIHsKKyAgICAgICAgSXRlcmF0b3JCYXNlKiBuZXh0OworICAgICAgICBm
b3IgKEl0ZXJhdG9yQmFzZSogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgeworICAgICAg
ICAgICAgbmV4dCA9IHAtPm1fbmV4dDsKKyAgICAgICAgICAgIHAtPm1fZGVxdWUgPSAwOworICAg
ICAgICAgICAgcC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOwor
ICAgICAgICB9CisgICAgICAgIG1faXRlcmF0b3JzID0gMDsKKyAgICB9CisjZW5kaWYKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAg
ICAgIDogbV9zdGFydCgwKQorICAgICAgICAsIG1fZW5kKDApCisjaWZuZGVmIE5ERUJVRworICAg
ICAgICAsIG1faXRlcmF0b3JzKDApCisjZW5kaWYKKyAgICB7CisgICAgICAgIGNoZWNrVmFsaWRp
dHkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBEZXF1
ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8VD4mIG90aGVyKQorICAgICAgICA6IG1fc3RhcnQob3Ro
ZXIubV9zdGFydCkKKyAgICAgICAgLCBtX2VuZChvdGhlci5tX2VuZCkKKyAgICAgICAgLCBtX2J1
ZmZlcihvdGhlci5tX2J1ZmZlci5jYXBhY2l0eSgpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
LCBtX2l0ZXJhdG9ycygwKQorI2VuZGlmCisgICAgeworICAgICAgICBjb25zdCBUKiBvdGhlckJ1
ZmZlciA9IG90aGVyLm1fYnVmZmVyLmJ1ZmZlcigpOworICAgICAgICBpZiAobV9zdGFydCA8PSBt
X2VuZCkKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhl
ckJ1ZmZlciArIG1fc3RhcnQsIG90aGVyQnVmZmVyICsgbV9lbmQsIG1fYnVmZmVyLmJ1ZmZlcigp
ICsgbV9zdGFydCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyQnVmZmVyLCBvdGhlckJ1ZmZlciArIG1fZW5kLCBtX2J1
ZmZlci5idWZmZXIoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXJCdWZmZXIgKyBtX3N0YXJ0LCBvdGhlckJ1ZmZlciArIG1fYnVmZmVyLmNhcGFj
aXR5KCksIG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9zdGFydCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBEZXF1ZTxUPiYgRGVxdWU8VD46
Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBEZXF1ZTxU
PiBjb3B5KG90aGVyKTsKKyAgICAgICAgc3dhcChjb3B5KTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVx
dWU8VD46OmRlc3Ryb3lBbGwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQp
CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QobV9idWZmZXIuYnVmZmVyKCkg
KyBtX3N0YXJ0LCBtX2J1ZmZlci5idWZmZXIoKSArIG1fZW5kKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QobV9idWZmZXIuYnVmZmVyKCksIG1f
YnVmZmVyLmJ1ZmZlcigpICsgbV9lbmQpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRl
c3RydWN0KG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9zdGFydCwgbV9idWZmZXIuYnVmZmVyKCkgKyBt
X2J1ZmZlci5jYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgaW5saW5lIERlcXVlPFQ+Ojp+RGVxdWUoKQorICAgIHsKKyAgICAgICAg
Y2hlY2tWYWxpZGl0eSgpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAg
IGRlc3Ryb3lBbGwoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBp
bmxpbmUgdm9pZCBEZXF1ZTxUPjo6c3dhcChEZXF1ZTxUPiYgb3RoZXIpCisgICAgeworICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBzdGQ6OnN3YXAobV9zdGFydCwgb3Ro
ZXIubV9zdGFydCk7CisgICAgICAgIHN0ZDo6c3dhcChtX2VuZCwgb3RoZXIubV9lbmQpOworICAg
ICAgICBtX2J1ZmZlci5zd2FwKG90aGVyLm1fYnVmZmVyKTsKKyAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOworICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmNsZWFyKCkKKyAgICB7
CisgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBkZXN0cm95QWxsKCk7CisgICAgICAgIG1fc3RhcnQgPSAwOworICAgICAgICBt
X2VuZCA9IDA7CisgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpleHBhbmRDYXBhY2l0eUlm
TmVlZGVkKCkKKyAgICB7CisgICAgICAgIGlmIChtX3N0YXJ0KSB7CisgICAgICAgICAgICBpZiAo
bV9lbmQgKyAxICE9IG1fc3RhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fZW5kICYmIG1fZW5kICE9IG1fYnVmZmVyLmNhcGFj
aXR5KCkgLSAxKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBl
eHBhbmRDYXBhY2l0eSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
dm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHkoKQorICAgIHsKKyAgICAgICAgY2hlY2tWYWxp
ZGl0eSgpOworICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgp
OworICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtYXgoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
NiksIG9sZENhcGFjaXR5ICsgb2xkQ2FwYWNpdHkgLyA0ICsgMSk7CisgICAgICAgIFQqIG9sZEJ1
ZmZlciA9IG1fYnVmZmVyLmJ1ZmZlcigpOworICAgICAgICBtX2J1ZmZlci5hbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSk7CisgICAgICAgIGlmIChtX3N0YXJ0IDw9IG1fZW5kKQorICAgICAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyICsgbV9zdGFydCwgb2xkQnVmZmVyICsg
bV9lbmQsIG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9zdGFydCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRCdWZmZXIgKyBtX2Vu
ZCwgbV9idWZmZXIuYnVmZmVyKCkpOworICAgICAgICAgICAgc2l6ZV90IG5ld1N0YXJ0ID0gbmV3
Q2FwYWNpdHkgLSAob2xkQ2FwYWNpdHkgLSBtX3N0YXJ0KTsKKyAgICAgICAgICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlKG9sZEJ1ZmZlciArIG1fc3RhcnQsIG9sZEJ1ZmZlciArIG9sZENhcGFjaXR5
LCBtX2J1ZmZlci5idWZmZXIoKSArIG5ld1N0YXJ0KTsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBu
ZXdTdGFydDsKKyAgICAgICAgfQorICAgICAgICBtX2J1ZmZlci5kZWFsbG9jYXRlQnVmZmVyKG9s
ZEJ1ZmZlcik7CisgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGlubGluZSB2b2lkIERlcXVl
PFQ+OjphcHBlbmQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBjaGVja1ZhbGlkaXR5
KCk7CisgICAgICAgIGV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKTsKKyAgICAgICAgbmV3ICgmbV9i
dWZmZXIuYnVmZmVyKClbbV9lbmRdKSBUKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fZW5kID09IG1f
YnVmZmVyLmNhcGFjaXR5KCkgLSAxKQorICAgICAgICAgICAgbV9lbmQgPSAwOworICAgICAgICBl
bHNlCisgICAgICAgICAgICArK21fZW5kOworICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBp
bmxpbmUgdm9pZCBEZXF1ZTxUPjo6cHJlcGVuZChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKCFtX3N0YXJ0KQorICAg
ICAgICAgICAgbV9zdGFydCA9IG1fYnVmZmVyLmNhcGFjaXR5KCkgLSAxOworICAgICAgICBlbHNl
CisgICAgICAgICAgICAtLW1fc3RhcnQ7CisgICAgICAgIG5ldyAoJm1fYnVmZmVyLmJ1ZmZlcigp
W21fc3RhcnRdKSBUKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpyZW1vdmVGaXJzdCgpCisgICAgeworICAgICAgICBj
aGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAg
QVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoJm1f
YnVmZmVyLmJ1ZmZlcigpW21fc3RhcnRdLCAmbV9idWZmZXIuYnVmZmVyKClbbV9zdGFydCArIDFd
KTsKKyAgICAgICAgaWYgKG1fc3RhcnQgPT0gbV9idWZmZXIuY2FwYWNpdHkoKSAtIDEpCisgICAg
ICAgICAgICBtX3N0YXJ0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKyttX3N0YXJ0
OworICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgfQorCisjaWZkZWYgTkRFQlVHCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNo
ZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPiYpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KKyNlbHNl
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+
OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2RlcXVlKTsK
KyAgICAgICAgbV9kZXF1ZS0+Y2hlY2tJbmRleFZhbGlkaXR5KG1faW5kZXgpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
Y2hlY2tWYWxpZGl0eShjb25zdCBCYXNlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBB
U1NFUlQobV9kZXF1ZSA9PSBvdGhlci5tX2RlcXVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmFkZFRvSXRlcmF0b3Jz
TGlzdCgpCisgICAgeworICAgICAgICBpZiAoIW1fZGVxdWUpCisgICAgICAgICAgICBtX25leHQg
PSAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fbmV4dCA9IG1fZGVxdWUtPm1faXRl
cmF0b3JzOworICAgICAgICAgICAgbV9kZXF1ZS0+bV9pdGVyYXRvcnMgPSB0aGlzOworICAgICAg
ICAgICAgaWYgKG1fbmV4dCkKKyAgICAgICAgICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSB0
aGlzOworICAgICAgICB9CisgICAgICAgIG1fcHJldmlvdXMgPSAwOworICAgIH0KKyNlbmRpZgor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8
VD46OkRlcXVlSXRlcmF0b3JCYXNlKCkKKyAgICAgICAgOiBtX2RlcXVlKDApCisgICAgeworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JC
YXNlPFQ+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBp
bmRleCkKKyAgICAgICAgOiBtX2RlcXVlKGNvbnN0X2Nhc3Q8RGVxdWU8VD4qPihkZXF1ZSkpCisg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgICAgIGFkZFRvSXRlcmF0b3JzTGlz
dCgpOworICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JC
YXNlKGNvbnN0IEJhc2UmIG90aGVyKQorICAgICAgICA6IG1fZGVxdWUob3RoZXIubV9kZXF1ZSkK
KyAgICAgICAgLCBtX2luZGV4KG90aGVyLm1faW5kZXgpCisgICAgeworICAgICAgICBhZGRUb0l0
ZXJhdG9yc0xpc3QoKTsKKyAgICAgICAgY2hlY2tWYWxpZGl0eSgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojp+RGVx
dWVJdGVyYXRvckJhc2UoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIERlbGV0
ZSBpdGVyYXRvciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCisgICAgICAg
IGlmICghbV9kZXF1ZSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX25leHQpOworICAgICAgICAg
ICAgQVNTRVJUKCFtX3ByZXZpb3VzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
IChtX25leHQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9uZXh0LT5tX3ByZXZpb3VzID09
IHRoaXMpOworICAgICAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IG1fcHJldmlvdXM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wcmV2aW91cykgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2RlcXVlLT5tX2l0ZXJhdG9ycyAhPSB0aGlzKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobV9wcmV2aW91cy0+bV9uZXh0ID09IHRoaXMpOworICAgICAgICAgICAgICAg
IG1fcHJldmlvdXMtPm1fbmV4dCA9IG1fbmV4dDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fZGVxdWUtPm1faXRlcmF0b3JzID09IHRoaXMpOworICAgICAg
ICAgICAgICAgIG1fZGVxdWUtPm1faXRlcmF0b3JzID0gbV9uZXh0OwogICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgICAgIG1fZGVxdWUgPSAwOworICAgICAgICBtX25leHQgPSAwOworICAg
ICAgICBtX3ByZXZpb3VzID0gMDsKKyNlbmRpZgorICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHNpemVfdCBtX3NpemU7Ci0gICAgICAgIERlcXVlTm9kZTxUPiogbV9maXJzdDsKLSAgICAg
ICAgRGVxdWVOb2RlPFQ+KiBtX2xhc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBp
bmxpbmUgYm9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aXNFcXVhbChjb25zdCBCYXNlJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrVmFsaWRpdHkob3RoZXIpOworICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KIAotICAgIH07CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
aW5jcmVtZW50KCkKKyAgICB7CisgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgQVNT
RVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9lbmQpOworICAgICAgICBBU1NFUlQobV9kZXF1ZS0+
bV9idWZmZXIuY2FwYWNpdHkoKSk7CisgICAgICAgIGlmIChtX2luZGV4ID09IG1fZGVxdWUtPm1f
YnVmZmVyLmNhcGFjaXR5KCkgLSAxKQorICAgICAgICAgICAgbV9pbmRleCA9IDA7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VD46OmRlY3JlbWVudCgpCisgICAgeworICAgICAgICBjaGVja1ZhbGlkaXR5
KCk7CisgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1fc3RhcnQpOworICAgICAg
ICBBU1NFUlQobV9kZXF1ZS0+bV9idWZmZXIuY2FwYWNpdHkoKSk7CisgICAgICAgIGlmICghbV9p
bmRleCkKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2RlcXVlLT5tX2J1ZmZlci5jYXBhY2l0eSgp
IC0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLS1tX2luZGV4OworICAgICAgICBjaGVj
a1ZhbGlkaXR5KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxp
bmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VD46OmFmdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9l
bmQpOworICAgICAgICByZXR1cm4gJm1fZGVxdWUtPm1fYnVmZmVyLmJ1ZmZlcigpW21faW5kZXhd
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIFQqIERlcXVl
SXRlcmF0b3JCYXNlPFQ+OjpiZWZvcmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tWYWxp
ZGl0eSgpOworICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX3N0YXJ0KTsKKyAg
ICAgICAgaWYgKCFtX2luZGV4KQorICAgICAgICAgICAgcmV0dXJuICZtX2RlcXVlLT5tX2J1ZmZl
ci5idWZmZXIoKVttX2RlcXVlLT5tX2J1ZmZlci5jYXBhY2l0eSgpIC0gMV07CisgICAgICAgIHJl
dHVybiAmbV9kZXF1ZS0+bV9idWZmZXIuYnVmZmVyKClbbV9pbmRleCAtIDFdOworICAgIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDMwNTE1
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiRmFzdE1hbGxv
Yy5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiVmVjdG9yVHJhaXRzLmgi
CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjQwLDcgKzI0MSw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIGNsYXNzIFZlY3RvckJ1ZmZlckJhc2UgeworICAgIGNsYXNzIFZlY3RvckJ1ZmZlckJhc2Ug
OiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIGFsbG9jYXRlQnVmZmVy
KHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICAgICAgewpAQCAtMzg1LDcgKzM4Niw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSA9IDA+CiAgICAgY2xhc3MgVmVjdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVm
IFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gSW1wbDsKKyAgICAgICAgdHlwZWRlZiBW
ZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IEJ1ZmZlcjsKICAgICAgICAgdHlwZWRlZiBW
ZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsKIAogICAgIHB1YmxpYzoKQEAg
LTQwMSw3ICs0MDIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgCiAgICAgICAgIGV4cGxp
Y2l0IFZlY3RvcihzaXplX3Qgc2l6ZSkgCiAgICAgICAgICAgICA6IG1fc2l6ZShzaXplKQotICAg
ICAgICAgICAgLCBtX2ltcGwoc2l6ZSkKKyAgICAgICAgICAgICwgbV9idWZmZXIoc2l6ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwg
ZW5kKCkpOwogICAgICAgICB9CkBAIC00MjAsMjUgKzQyMSwyNSBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHk+
Jik7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAg
ICAgICAgc2l6ZV90IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7
IH0KKyAgICAgICAgc2l6ZV90IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuY2Fw
YWNpdHkoKTsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgp
OyB9CiAKICAgICAgICAgVCYgYXQoc2l6ZV90IGkpIAogICAgICAgICB7IAogICAgICAgICAgICAg
QVNTRVJUKGkgPCBzaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1faW1wbC5idWZmZXIoKVtp
XTsgCisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuYnVmZmVyKClbaV07IAogICAgICAgICB9
CiAgICAgICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpKSBjb25zdCAKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1faW1wbC5idWZm
ZXIoKVtpXTsgCisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuYnVmZmVyKClbaV07IAogICAg
ICAgICB9CiAKICAgICAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7
IH0KICAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
YXQoaSk7IH0KIAotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9pbXBsLmJ1ZmZlcigpOyB9
Ci0gICAgICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuYnVmZmVyKCk7
IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fYnVmZmVyLmJ1ZmZlcigpOyB9CisgICAg
ICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKTsgfQog
CiAgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9CiAgICAgICAgIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KQEAgLTQ4MCw3ICs0ODEs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0
IFQmIHZhbCkKICAgICAgICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgICAgICAgICAsIG1faW1w
bChzaXplKQorICAgICAgICAgICAgLCBtX2J1ZmZlcihzaXplKQogICAgICAgICB7CiAgICAgICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZh
bCk7CiAgICAgICAgIH0KQEAgLTQ5NSw3ICs0OTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgdm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOwotICAgICAgICAg
ICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnN3YXAo
b3RoZXIubV9idWZmZXIpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpAQCAtNTA0LDEzICs1
MDUsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFUq
IGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSopOyAKIAogICAgICAgICBz
aXplX3QgbV9zaXplOwotICAgICAgICBJbXBsIG1faW1wbDsKKyAgICAgICAgQnVmZmVyIG1fYnVm
ZmVyOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CiAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3Rv
ciYgb3RoZXIpCiAgICAgICAgIDogbV9zaXplKG90aGVyLnNpemUoKSkKLSAgICAgICAgLCBtX2lt
cGwob3RoZXIuY2FwYWNpdHkoKSkKKyAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5jYXBhY2l0eSgp
KQogICAgIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVy
LmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKICAgICB9CkBAIC01MTksNyArNTIwLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAog
ICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3Ro
ZXJDYXBhY2l0eT4mIG90aGVyKQogICAgICAgICA6IG1fc2l6ZShvdGhlci5zaXplKCkpCi0gICAg
ICAgICwgbV9pbXBsKG90aGVyLmNhcGFjaXR5KCkpCisgICAgICAgICwgbV9idWZmZXIob3RoZXIu
Y2FwYWNpdHkoKSkKICAgICB7CiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CiAgICAgfQpAQCAtNjUy
LDkgKzY1Myw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwogICAgICAgICBUKiBvbGRFbmQgPSBlbmQoKTsKLSAg
ICAgICAgbV9pbXBsLmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKKyAgICAgICAgbV9idWZm
ZXIuYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7Ci0gICAgICAgIG1faW1wbC5kZWFsbG9j
YXRlQnVmZmVyKG9sZEJ1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyLmRlYWxsb2NhdGVCdWZmZXIo
b2xkQnVmZmVyKTsKICAgICB9CiAKICAgICAvLyBUZW1wbGF0aXppbmcgdGhlc2UgaXMgYmV0dGVy
IHRoYW4ganVzdCBsZXR0aW5nIHRoZSBjb252ZXJzaW9uIGhhcHBlbiBpbXBsaWNpdGx5LApAQCAt
NjgwLDEzICs2ODEsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChzaXplKCkgPT0g
Y2FwYWNpdHkoKSkKICAgICAgICAgICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEs
IHB0cik7CiAgICAgICAgICAgICAKKyNpZiBDT01QSUxFUihNU1ZDNykKICAgICAgICAgLy8gRklY
TUU6IE1TVkM3IGdlbmVyYXRlcyBjb21waWxhdGlvbiBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gYXNz
aWduCiAgICAgICAgIC8vIGEgcG9pbnRlciB0byBhIFZlY3RvciBvZiBpdHMgYmFzZSBjbGFzcyAo
aS5lLiBjYW4ndCBkb3duY2FzdCkuIFNvIGZhcgogICAgICAgICAvLyBJJ3ZlIGJlZW4gdW5hYmxl
IHRvIGRldGVybWluZSBhbnkgbG9naWNhbCByZWFzb24gZm9yIHRoaXMsIHNvIEkgY2FuCi0gICAg
ICAgIC8vIG9ubHkgYXNzdW1lIGl0IGlzIGEgYnVnIHdpdGggdGhlIGNvbXBpbGVyLiBDYXN0aW5n
IGlzIHZlcnkgYmFkCi0gICAgICAgIC8vIGhvd2V2ZXIgYmVjYXVzZSBpdCBzdWJ2ZXJ0cyBpbXBs
aWNpdCBjb252ZXJzaW9ucywgc28gYSBiZXR0ZXIgCi0gICAgICAgIC8vIHNvbHV0aW9uIGlzIGRp
cmVseSBuZWVkZWQuIAotI2lmIENPTVBJTEVSKE1TVkM3KQorICAgICAgICAvLyBvbmx5IGFzc3Vt
ZSBpdCBpcyBhIGJ1ZyB3aXRoIHRoZSBjb21waWxlci4gQ2FzdGluZyBpcyBhIGJhZCBzb2x1dGlv
biwKKyAgICAgICAgLy8gaG93ZXZlciwgYmVjYXVzZSBpdCBzdWJ2ZXJ0cyBpbXBsaWNpdCBjb252
ZXJzaW9ucywgc28gYSBiZXR0ZXIgCisgICAgICAgIC8vIG9uZSBpcyBuZWVkZWQuIAogICAgICAg
ICBuZXcgKGVuZCgpKSBUKHN0YXRpY19jYXN0PFQ+KCpwdHIpKTsKICNlbHNlCiAgICAgICAgIG5l
dyAoZW5kKCkpIFQoKnB0cik7CkBAIC03NzYsNyArNzc3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIGlubGlu
ZSBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZWxlYXNlQnVmZmVyKCkKICAgICB7Ci0g
ICAgICAgIFQqIGJ1ZmZlciA9IG1faW1wbC5yZWxlYXNlQnVmZmVyKCk7CisgICAgICAgIFQqIGJ1
ZmZlciA9IG1fYnVmZmVyLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgaWYgKGlubGluZUNhcGFj
aXR5ICYmICFidWZmZXIgJiYgbV9zaXplKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmVjdG9y
IGhhZCBzb21lIGRhdGEsIGJ1dCBubyBidWZmZXIgdG8gcmVsZWFzZSwKICAgICAgICAgICAgIC8v
IHRoYXQgbWVhbnMgaXQgd2FzIHVzaW5nIHRoZSBpbmxpbmUgYnVmZmVyLiBJbiB0aGF0IGNhc2Us
Cg==
</data>
<flag name="review"
          id="8425"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>