<?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>177639</bug_id>
          
          <creation_ts>2017-09-28 19:47:18 -0700</creation_ts>
          <short_desc>Custom GetterSetterAccessCase does not use the correct slotBase when making call</short_desc>
          <delta_ts>2017-10-02 10:09:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354420</commentid>
    <comment_count>0</comment_count>
      <attachid>322157</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-28 19:47:18 -0700</bug_when>
    <thetext>Created attachment 322157
jsc.cpp modification

Maybe there is a bug, but here is a test I added for poly proto. If you run this w/ my jsc.cpp changes, this test crashes:
```
function assert(b, m) {
    if (!b)
        throw new Error(&quot;Bad:&quot; + m);
}

class Class { };
function makePolyProtoObject() {
    return new Class;
}

let items = [
    makePolyProtoObject(),
    makePolyProtoObject(),
    makePolyProtoObject(),
    makePolyProtoObject(),
];

let customGetterSetter = createCustomTestGetterSetter();
items.forEach((x) =&gt; {
    x.__proto__ = customGetterSetter;
    assert(x.__proto__ === customGetterSetter);
});

function validate(x, valueResult, accessorResult) {
    assert(x.customValue === valueResult);

    assert(x.customAccessor === accessorResult);

    let o = {};
    x.customValue = o;
    assert(o.result === valueResult);

    o = {};
    x.customAccessor = o;
    assert(o.result === accessorResult);

    assert(x.randomProp === 42 || x.randomProp === undefined);
}
noInline(validate);


let start = Date.now();
for (let i = 0; i &lt; 10000; ++i) {
    for (let i = 0; i &lt; items.length; ++i) {
        validate(items[i], customGetterSetter, items[i]);
    }
    print(i);
}

customGetterSetter.randomProp = 42;

for (let i = 0; i &lt; 10000; ++i) {
    for (let i = 0; i &lt; items.length; ++i) {
        validate(items[i], customGetterSetter, items[i]);
    }
}

items.forEach((x) =&gt; {
    Reflect.setPrototypeOf(x, {
        get customValue() { return 42; },
        get customAccessor() { return 22; },
        set customValue(x) { x.result = 42; },
        set customAccessor(x) { x.result = 22; },
    });
});

for (let i = 0; i &lt; 10000; ++i) {
    for (let i = 0; i &lt; items.length; ++i) {
        validate(items[i], 42, 22);
    }
}

if (true)
    print(Date.now() - start);
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354424</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-28 19:57:17 -0700</bug_when>
    <thetext>Yeah, this code seems really weird:

```
ObjectPropertyConditionSet generateConditionsForPrototypePropertyHitCustom(
    VM&amp; vm, JSCell* owner, ExecState* exec, Structure* headStructure, JSObject* prototype,
    UniquedStringImpl* uid)
{
    return generateConditions(
        vm, exec-&gt;lexicalGlobalObject(), headStructure, prototype,
        [&amp;] (Vector&lt;ObjectPropertyCondition&gt;&amp; conditions, JSObject* object) -&gt; bool {
            if (object == prototype)
                return true;
            ObjectPropertyCondition result =
                generateCondition(vm, owner, object, uid, PropertyCondition::Absence);
            if (!result)
                return false;
            conditions.append(result);
            return true;
        });
}
```

Note, if we have some object o whose __proto__ points to an object with a customValueGetter, we&apos;ll end up in this situation. We&apos;ll produce an m_conditionSet.isEmpty(). This causes AccessCase to use the base for the access as the slot holder. Clearly that&apos;s wrong in this type of program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354553</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-29 09:46:02 -0700</bug_when>
    <thetext>I spoke to Fil, this code on OPC set generation is actually fine. The bug is here I believe, inside access case:

        if (!m_conditionSet.isEmpty()) {
            jit.move(
                CCallHelpers::TrustedImmPtr(alternateBase()),
                scratchGPR);
            baseForAccessGPR = scratchGPR;
        } else
            baseForAccessGPR = baseForGetGPR;

In the above program, you will have an empty set, however, we really do want the alternate base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354623</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-29 11:43:58 -0700</bug_when>
    <thetext>I still think the cleanest fix it to remove generateConditionsForPrototypePropertyHitCustom and just use generateConditionsForPrototypePropertyHit. We already do this for gets. We only do generateConditionsForPrototypePropertyHitCustom for puts, weirdly enough.

If we decide not to do this, what we need to do is then pipe through a notion of a prototype access vs non prototype access that doesn&apos;t rely on m_conditionSet.isEmpty(). Then, if we&apos;re a custom getter/setter *and not* a prototype access, we simply use the access&apos;s base. If we&apos;re a custom getter/setter *and* a prototype access, then we call GetterSetterAccessCase&apos;s alternateBase() function.

I think the latter is probably prone to bugs and breakage, which is why I&apos;m more in favor of the first way. And since we already do the first way for custom getters, I doubt it&apos;ll be a regression to also do it for custom setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354658</commentid>
    <comment_count>4</comment_count>
      <attachid>322224</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-29 13:05:20 -0700</bug_when>
    <thetext>Created attachment 322224
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354661</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-29 13:07:33 -0700</bug_when>
    <thetext>Attachment 322224 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:1076:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354683</commentid>
    <comment_count>6</comment_count>
      <attachid>322224</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-09-29 14:00:36 -0700</bug_when>
    <thetext>Comment on attachment 322224
patch

r=me

I don&apos;t see any downside to this approach.

Still, I think it&apos;s super weird, and a design booby trap, that we use &quot;!m_conditionSet.isEmtpy()&quot; to mean &quot;this is a prototype access&quot;. Would be nice to clean that up in the long run. I&apos;m not particularly interested in restoring the optimization to skip a condition in this case -- I just want to make the design more obvious and explicit.

You know something is not obvious when it takes three paragraphs and an IRC conversation to explain :P.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354685</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-29 14:06:15 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #6)
&gt; Comment on attachment 322224 [details]
&gt; patch
&gt; 
&gt; r=me
&gt; 
&gt; I don&apos;t see any downside to this approach.
&gt; 
&gt; Still, I think it&apos;s super weird, and a design booby trap, that we use
&gt; &quot;!m_conditionSet.isEmtpy()&quot; to mean &quot;this is a prototype access&quot;. Would be
&gt; nice to clean that up in the long run. I&apos;m not particularly interested in
&gt; restoring the optimization to skip a condition in this case -- I just want
&gt; to make the design more obvious and explicit.
&gt; 
&gt; You know something is not obvious when it takes three paragraphs and an IRC
&gt; conversation to explain :P.

I agree. At some point after the initial poly proto patch lands, I&apos;m going to come up with a hybrid data structure between OPC set, and the data structure used for poly proto accesses. When doing that patch, I&apos;ll take the time to clean up the naming and clarity of things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354775</commentid>
    <comment_count>8</comment_count>
      <attachid>322224</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 16:48:14 -0700</bug_when>
    <thetext>Comment on attachment 322224
patch

Clearing flags on attachment: 322224

Committed r222671: &lt;http://trac.webkit.org/changeset/222671&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354776</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 16:48:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354777</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-29 16:48:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/34750577&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355246</commentid>
    <comment_count>11</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-02 09:17:46 -0700</bug_when>
    <thetext>The test added with this change is hitting an assertion failure on debug JSC bots:

stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: ASSERTION FAILED: !heap.vm()-&gt;isInitializingObject()
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: /Volumes/Data/slave/highsierra-debug/build/Source/JavaScriptCore/runtime/JSCellInlines.h(163) : void *JSC::tryAllocateCellHelper(JSC::Heap &amp;, JSC::GCDeferralContext *, size_t) [T = JSC::CustomGetterSetter, mode = JSC::AllocationFailureMode::ShouldAssertOnFailure, deferralContextArgPresence = JSC::GCDeferralContextArgPresense::DoesNotHaveArg]
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 1   0x1068e8efd WTFCrash
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 2   0x1039d9216 void* JSC::tryAllocateCellHelper&lt;JSC::CustomGetterSetter, (JSC::AllocationFailureMode)0, (JSC::GCDeferralContextArgPresense)1&gt;(JSC::Heap&amp;, JSC::GCDeferralContext*, unsigned long)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 3   0x1039d8f94 void* JSC::allocateCell&lt;JSC::CustomGetterSetter&gt;(JSC::Heap&amp;, unsigned long)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 4   0x1039d388e JSC::CustomGetterSetter::create(JSC::VM&amp;, long long (*)(JSC::ExecState*, long long, JSC::PropertyName), bool (*)(JSC::ExecState*, long long, long long))
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 5   0x1039d3738 JSTestCustomGetterSetter::finishCreation(JSC::VM&amp;)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 6   0x103a2348a JSTestCustomGetterSetter::create(JSC::VM&amp;, JSC::JSGlobalObject*, JSC::Structure*)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 7   0x1039fbb19 functionCreateCustomTestGetterSetter(JSC::ExecState*)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 8   0x34745cc01028
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 9   0x105576b89 llint_entry
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 10  0x10556ecf7 vmEntryToJavaScript
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 11  0x10665c21e JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 12  0x1065fd046 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::ExecState*, JSC::JSObject*)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 13  0x10687b537 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 14  0x103a23f87 runWithOptions(GlobalObject*, CommandLine&amp;)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 15  0x1039ea8e4 jscmain(int, char**)::$_3::operator()(JSC::VM&amp;, GlobalObject*) const
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 16  0x1039d886f int runJSC&lt;jscmain(int, char**)::$_3&gt;(CommandLine, bool, jscmain(int, char**)::$_3 const&amp;)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 17  0x1039d735f jscmain(int, char**)
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 18  0x1039d72be main
stress/custom-get-set-inline-caching-one-level-up-proto-chain.js.default: 19  0x7fff6ceb6145 start

https://build.webkit.org/builders/Apple%20High%20Sierra%20Debug%20JSC%20%28Tests%29/builds/14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355257</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-02 09:51:23 -0700</bug_when>
    <thetext>Will look into the assertion failure now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355268</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-02 10:09:27 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #12)
&gt; Will look into the assertion failure now.

Fixed in:
https://trac.webkit.org/changeset/222713/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322157</attachid>
            <date>2017-09-28 19:47:18 -0700</date>
            <delta_ts>2017-09-29 13:05:20 -0700</delta_ts>
            <desc>jsc.cpp modification</desc>
            <filename>scratch</filename>
            <type>text/plain</type>
            <size>11913</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjI1NzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUzLDYgKzk1Myw5MCBAQCB2
b2lkIERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZpbmlzaENyCiAgICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJmdW5jIiksIDAsIHNhZmVGdW5jdGlvbiwgTm9JbnRyaW5zaWMsICZET01KSVRDaGVja1N1YkNs
YXNzT2JqZWN0U2lnbmF0dXJlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KSk7CiB9CiAKK2NsYXNzIERPTUpJVEdldHRlckJhc2VKU09iamVjdCA6IHB1
YmxpYyBET01KSVROb2RlIHsKK3B1YmxpYzoKKyAgICBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Qo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCisgICAgeworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB1c2luZyBCYXNlID0g
RE9NSklUTm9kZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDOjpKU1R5cGUoTGFzdEpTQ09iamVjdFR5cGUg
KyAxKSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBET01K
SVRHZXR0ZXJCYXNlSlNPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0KiBnZXR0ZXIgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q+KHZtLmhlYXAs
IHNpemVvZihET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QpKSkgRE9NSklUR2V0dGVyQmFzZUpTT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBnZXR0ZXItPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIGdldHRlcjsKKyAgICB9CisKKyAgICBjbGFzcyBET01KSVRBdHRyaWJ1
dGUgOiBwdWJsaWMgRE9NSklUOjpHZXR0ZXJTZXR0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Y29uc3RleHByIERPTUpJVEF0dHJpYnV0ZSgpCisgICAgICAgICAgICA6IERPTUpJVDo6R2V0dGVy
U2V0dGVyKAorICAgICAgICAgICAgICAgIERPTUpJVEdldHRlckJhc2VKU09iamVjdDo6Y3VzdG9t
R2V0dGVyLAorI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAgICAgICAgJmNhbGxET01HZXR0ZXIs
CisjZWxzZQorICAgICAgICAgICAgICAgIG51bGxwdHIsCisjZW5kaWYKKyAgICAgICAgICAgICAg
ICBTcGVjSW50MzJPbmx5KQorICAgICAgICB7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShKSVQp
CisgICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4
ZWNTdGF0ZSogZXhlYywgdm9pZCogcG9pbnRlcikKKyAgICAgICAgeworICAgICAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHBvaW50ZXIpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyBSZWY8RE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldD4gY2FsbERPTUdldHRlcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJlZjxET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0PiBz
bmlwcGV0ID0gRE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBzbmlwcGV0LT5yZXF1aXJlR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisgICAgICAgICAgICBz
bmlwcGV0LT5zZXRHZW5lcmF0b3IoWz1dKENDYWxsSGVscGVycyYgaml0LCBTbmlwcGV0UGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRzID0gcGFyYW1z
WzBdLmpzVmFsdWVSZWdzKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGRvbSA9IHBhcmFtc1sx
XS5ncHIoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkU2xvd1BhdGhDYWxsKGppdC5qdW1w
KCksIGppdCwgc2xvd0NhbGwsIHJlc3VsdHMsIGRvbSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcExpc3QoKTsKKworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm4gc25pcHBldDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlz
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3QoKSk7CisgICAgfQorfTsKKworc3RhdGljIGNvbnN0IERPTUpJVEdldHRl
ckJhc2VKU09iamVjdDo6RE9NSklUQXR0cmlidXRlIERPTUpJVEdldHRlckJhc2VKU09iamVjdERP
TUpJVDsKKwordm9pZCBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgY29uc3QgRE9NSklU
OjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCA9ICZET01KSVRHZXR0ZXJCYXNlSlNPYmplY3RET01KSVQ7
CisgICAgYXV0byogY3VzdG9tR2V0dGVyU2V0dGVyID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVy
OjpjcmVhdGUodm0sIGRvbUpJVC0+Z2V0dGVyKCksIG51bGxwdHIsIERPTUF0dHJpYnV0ZUFubm90
YXRpb24geyBKU09iamVjdDo6aW5mbygpLCBkb21KSVQgfSk7CisgICAgcHV0RGlyZWN0Q3VzdG9t
QWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VzdG9tR2V0dGVyIiks
IGN1c3RvbUdldHRlclNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKK30KKwogY29uc3QgQ2xhc3NJbmZvIEVsZW1l
bnQ6OnNfaW5mbyA9IHsgIkVsZW1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEVsZW1lbnQpIH07CiBjb25zdCBDbGFzc0luZm8gTWFzcXVl
cmFkZXI6OnNfaW5mbyA9IHsgIk1hc3F1ZXJhZGVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXNxdWVyYWRlcikgfTsKIGNvbnN0IENsYXNz
SW5mbyBSb290OjpzX2luZm8gPSB7ICJSb290IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShSb290KSB9OwpAQCAtOTY1LDYgKzEwNDksNyBAQCBj
b25zdCBDbGFzc0luZm8gRE9NSklUTm9kZTo6c19pbmZvID0geyAiCiAjZW5kaWYKIGNvbnN0IENs
YXNzSW5mbyBET01KSVRHZXR0ZXI6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRlciIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklUR2V0dGVy
KSB9OwogY29uc3QgQ2xhc3NJbmZvIERPTUpJVEdldHRlckNvbXBsZXg6OnNfaW5mbyA9IHsgIkRP
TUpJVEdldHRlckNvbXBsZXgiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKERPTUpJVEdldHRlckNvbXBsZXgpIH07Citjb25zdCBDbGFzc0luZm8g
RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJCYXNlSlNP
YmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKERPTUpJVEdldHRlckJhc2VKU09iamVjdCkgfTsKICNpZiBFTkFCTEUoSklUKQogY29uc3Qg
Q2xhc3NJbmZvIERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpzX2luZm8gPSB7ICJET01KSVRGdW5jdGlv
bk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsICZET01KSVRGdW5jdGlvbk9iamVjdDo6
Y2hlY2tTdWJDbGFzc1NuaXBwZXQsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklURnVuY3Rpb25P
YmplY3QpIH07CiAjZWxzZQpAQCAtMTA1Nyw2ICsxMTQyLDg3IEBAIHByaXZhdGU6CiAgICAgRGVx
dWU8U3RyaW5nPiBtX3JlcG9ydHM7CiB9OwogCitjbGFzcyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0
ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0
ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgeyB9CisKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI+KHZtLmhlYXAsIHNpemVv
ZihKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIpKSkgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKHZt
LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSk7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBl
KCksIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0
b21HZXRBY2Nlc3NvcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICAvLyBQYXNzZWQgfHRoaXN8CisgICAgcmV0dXJuIHRoaXNWYWx1ZTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIGN1c3RvbUdldFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgc2xvdFZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSkuaW5oZXJpdHMoZXhlYy0+dm0oKSwg
SlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjppbmZvKCkpKTsKKyAgICAvLyBQYXNzZWQgcHJvcGVy
dHkgaG9sZGVyLgorICAgIHJldHVybiBzbG90VmFsdWU7Cit9CisKK3N0YXRpYyBib29sIGN1c3Rv
bVNldEFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwor
ICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNPYmplY3QpLCBzbG90KTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjdXN0b21TZXRWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIHNsb3RWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICBkYXRhTG9nTG4oIlNsb3QgdmFs
dWU6ICIsIEpTVmFsdWU6OmRlY29kZShzbG90VmFsdWUpKTsKKyAgICBkYXRhTG9nTG4oInZhbHVl
OiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisKKyAgICBSRUxFQVNFX0FTU0VS
VChKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKS5pbmhlcml0cyhleGVjLT52bSgpLCBKU1Rlc3RD
dXN0b21HZXR0ZXJTZXR0ZXI6OmluZm8oKSkpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlLmlzT2Jq
ZWN0KCkpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKKyAgICBvYmplY3QtPnB1dChvYmplY3QsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVzdWx0IiksIEpTVmFsdWU6OmRlY29kZShz
bG90VmFsdWUpLCBzbG90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTVGVzdEN1
c3RvbUdldHRlclNldHRlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIHB1dERpcmVj
dEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1c3RvbVZh
bHVlIiksCisgICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBjdXN0b21HZXRW
YWx1ZSwgY3VzdG9tU2V0VmFsdWUpLCAwKTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21BY2Nlc3NvciIpLAorICAgICAg
ICBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgY3VzdG9tR2V0QWNjZXNzb3IsIGN1c3Rv
bVNldEFjY2Vzc29yKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvcikpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0Q3VzdG9tR2V0dGVy
U2V0dGVyOjpzX2luZm8gPSB7ICJKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEN1c3RvbUdl
dHRlclNldHRlcikgfTsKKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25DcmVhdGVQcm94eShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVJbXB1cmVHZXR0ZXIo
RXhlY1N0YXRlKik7CkBAIC0xMDY2LDYgKzEyMzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckNvbXBsZXhPYmplY3QoRXhlY1N0YXRlKik7CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEZ1bmN0
aW9uT2JqZWN0KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25DcmVhdGVET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRH
ZXR0ZXJCYXNlSlNPYmplY3QoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdChFeGVj
U3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKik7CkBAIC0xMTc3LDYgKzEzNDQsOCBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhaXRGb3JSZXBvcnQoRXhlY1N0YXRlKik7CiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBDYXBhY2l0eShF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Rmxhc2hIZWFwQWNjZXNzKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Mb2FkR2V0dGVyRnJvbUdldHRlclNldHRlcihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9t
VGVzdEdldHRlclNldHRlcihFeGVjU3RhdGUqKTsKIAogc3RydWN0IFNjcmlwdCB7CiAgICAgZW51
bSBjbGFzcyBTdHJpY3RNb2RlIHsKQEAgLTEzODIsNiArMTU1MSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0Iiwg
ZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0LCAwKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJjcmVhdGVET01KSVRGdW5jdGlvbk9iamVjdCIsIGZ1bmN0aW9uQ3JlYXRl
RE9NSklURnVuY3Rpb25PYmplY3QsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0
ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3Vi
Q2xhc3NPYmplY3QsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURPTUpJVEdl
dHRlckJhc2VKU09iamVjdCIsIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0
LCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVCdWlsdGluIiwgZnVuY3Rpb25D
cmVhdGVCdWlsdGluLCAyKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVHbG9iYWxP
YmplY3QiLCBmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdCwgMCk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUiLCBmdW5jdGlvblNldEltcHVyZUdldHRl
ckRlbGVnYXRlLCAyKTsKQEAgLTE0NjYsNiArMTYzNiw5IEBAIHByb3RlY3RlZDoKIAogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImhlYXBDYXBhY2l0eSIsIGZ1bmN0aW9uSGVhcENhcGFjaXR5LCAw
KTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJmbGFzaEhlYXBBY2Nlc3MiLCBmdW5jdGlvbkZs
YXNoSGVhcEFjY2VzcywgMCk7CisKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkR2V0dGVy
RnJvbUdldHRlclNldHRlciIsIGZ1bmN0aW9uTG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIsIDEp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIi
LCBmdW5jdGlvbkNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIsIDEpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hh
ciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKQEAg
LTIxMTUsNiArMjI4OCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVEdldHRl
ckJhc2VKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGpzTnVsbCgpKTsKKyAgICBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QqIHJlc3VsdCA9
IERPTUpJVEdldHRlckJhc2VKU09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yODMyLDYgKzMwMTUsMjQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZsYQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Mb2FkR2V0dGVyRnJvbUdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMSk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBqc0R5
bmFtaWNDYXN0PEdldHRlclNldHRlcio+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoZ2V0dGVyU2V0dGVyKTsKKyAgICBKU09iamVjdCogZ2V0dGVyID0gZ2V0dGVy
U2V0dGVyLT5nZXR0ZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChnZXR0ZXIpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QpKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFZhbHVlVHlwZT46OnZhbHVlPjo6dHlw
ZSBhZGRPcHRpb24oVk0mLCBKU09iamVjdCosIElkZW50aWZpZXIsIFZhbHVlVHlwZSkgeyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322224</attachid>
            <date>2017-09-29 13:05:20 -0700</date>
            <delta_ts>2017-09-29 16:48:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15549</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjI2NjEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE3LTA5LTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEN1c3RvbSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlIGRvZXMgbm90IHVz
ZSB0aGUgY29ycmVjdCBzbG90QmFzZSB3aGVuIG1ha2luZyBjYWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc2MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1p
bmxpbmUtY2FjaGluZy1vbmUtbGV2ZWwtdXAtcHJvdG8tY2hhaW4uanM6IEFkZGVkLgorICAgICAg
ICAoYXNzZXJ0KToKKyAgICAgICAgKENsYXNzKToKKyAgICAgICAgKGl0ZW1zLmZvckVhY2gpOgor
ICAgICAgICAoc2V0IGdldCBmb3IpOgorCiAyMDE3LTA5LTI5ICBDb21taXQgUXVldWUgIDxjb21t
aXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MjIyNTYzLCByMjIyNTY1LCBhbmQgcjIyMjU4MS4KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3Rv
bS1nZXQtc2V0LWlubGluZS1jYWNoaW5nLW9uZS1sZXZlbC11cC1wcm90by1jaGFpbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0LXNldC1pbmxpbmUtY2FjaGluZy1v
bmUtbGV2ZWwtdXAtcHJvdG8tY2hhaW4uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJl
c3MvY3VzdG9tLWdldC1zZXQtaW5saW5lLWNhY2hpbmctb25lLWxldmVsLXVwLXByb3RvLWNoYWlu
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBt
KSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZDoiICsgbSk7Cit9
CisKK2NsYXNzIENsYXNzIHsgfTsKKworbGV0IGl0ZW1zID0gWworICAgIG5ldyBDbGFzcywKKyAg
ICBuZXcgQ2xhc3MsCisgICAgbmV3IENsYXNzLAorICAgIG5ldyBDbGFzcywKK107CisKK2xldCBj
dXN0b21HZXR0ZXJTZXR0ZXIgPSBjcmVhdGVDdXN0b21UZXN0R2V0dGVyU2V0dGVyKCk7CitpdGVt
cy5mb3JFYWNoKCh4KSA9PiB7CisgICAgeC5fX3Byb3RvX18gPSBjdXN0b21HZXR0ZXJTZXR0ZXI7
CisgICAgYXNzZXJ0KHguX19wcm90b19fID09PSBjdXN0b21HZXR0ZXJTZXR0ZXIpOworfSk7CisK
K2Z1bmN0aW9uIHZhbGlkYXRlKHgsIHZhbHVlUmVzdWx0LCBhY2Nlc3NvclJlc3VsdCkgeworICAg
IGFzc2VydCh4LmN1c3RvbVZhbHVlID09PSB2YWx1ZVJlc3VsdCk7CisKKyAgICBhc3NlcnQoeC5j
dXN0b21BY2Nlc3NvciA9PT0gYWNjZXNzb3JSZXN1bHQpOworCisgICAgbGV0IG8gPSB7fTsKKyAg
ICB4LmN1c3RvbVZhbHVlID0gbzsKKyAgICBhc3NlcnQoby5yZXN1bHQgPT09IHZhbHVlUmVzdWx0
KTsKKworICAgIG8gPSB7fTsKKyAgICB4LmN1c3RvbUFjY2Vzc29yID0gbzsKKyAgICBhc3NlcnQo
by5yZXN1bHQgPT09IGFjY2Vzc29yUmVzdWx0KTsKKworICAgIGFzc2VydCh4LnJhbmRvbVByb3Ag
PT09IDQyIHx8IHgucmFuZG9tUHJvcCA9PT0gdW5kZWZpbmVkKTsKK30KK25vSW5saW5lKHZhbGlk
YXRlKTsKKworCitsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkg
eworICAgICAgICB2YWxpZGF0ZShpdGVtc1tpXSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBpdGVtc1tp
XSk7CisgICAgfQorfQorCitjdXN0b21HZXR0ZXJTZXR0ZXIucmFuZG9tUHJvcCA9IDQyOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGl0ZW1zLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhbGlkYXRlKGl0ZW1zW2ldLCBjdXN0b21H
ZXR0ZXJTZXR0ZXIsIGl0ZW1zW2ldKTsKKyAgICB9Cit9CisKK2l0ZW1zLmZvckVhY2goKHgpID0+
IHsKKyAgICBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHgsIHsKKyAgICAgICAgZ2V0IGN1c3RvbVZh
bHVlKCkgeyByZXR1cm4gNDI7IH0sCisgICAgICAgIGdldCBjdXN0b21BY2Nlc3NvcigpIHsgcmV0
dXJuIDIyOyB9LAorICAgICAgICBzZXQgY3VzdG9tVmFsdWUoeCkgeyB4LnJlc3VsdCA9IDQyOyB9
LAorICAgICAgICBzZXQgY3VzdG9tQWNjZXNzb3IoeCkgeyB4LnJlc3VsdCA9IDIyOyB9LAorICAg
IH0pOworfSk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFsaWRhdGUoaXRl
bXNbaV0sIDQyLCAyMik7CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMjI1NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTctMDktMjkgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3VzdG9tIEdldHRlclNldHRlckFjY2Vzc0Nhc2Ug
ZG9lcyBub3QgdXNlIHRoZSBjb3JyZWN0IHNsb3RCYXNlIHdoZW4gbWFraW5nIGNhbGwKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYzOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcgb2NjdXJy
ZWQgd2hlbiB5b3UgaGFkIGEgY3VzdG9tIHNldCB2YWx1ZS4gQ3VzdG9tIHNldC9nZXQKKyAgICAg
ICAgdmFsdWVzIGFyZSBwYXNzZWQgdGhlIHByb3BlcnR5IGhvbGRlciwgbm90IHRoZSBiYXNlIG9m
IHRoZSBhY2Nlc3MuCisgICAgICAgIElmIHdlIGhhZCBhbiBvYmplY3QgY2hhaW4gbGlrZSB0aGlz
OgorICAgICAgICBvID0ge19fcHJvdG9fXzogdGhpbmdXaXRoQ3VzdG9tU2V0VmFsdWV9CisgICAg
ICAgIAorICAgICAgICBXZSB3b3VsZCBlbmQgdXAgbm90IHByb3ZpZGluZyB0aGluZ1dpdGhDdXN0
b21TZXRWYWx1ZSBhcyB0aGUgYXJndW1lbnQKKyAgICAgICAgdG8gdGhlIFB1dFZhbHVlRnVuYy4g
VGhlIHJlYXNvbiBpcywgd2Ugd291bGQgdXNlIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tCisgICAgICAgIGZvciBjdXN0b20gc2V0cy4gVGhpcyB3b3VsZCBy
ZXR1cm4gdG8gdXMgYW4gZW1wdHkgQ29uZGl0aW9uU2V0LCBiZWNhdXNlCisgICAgICAgIHRoZSBw
cm9wZXJ0eSBob2xkZXIgd2FzIG9ubHkgb25lIGxldmVsIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4u
IFRoZSByZWFzb24KKyAgICAgICAgaXMsIGl0IGRpZG4ndCBnZW5lcmF0ZSBhIGNvbmRpdGlvbiBm
b3IgdGhlIHNsb3QgaG9sZGVyLCBiZWNhdXNlIHRoZQorICAgICAgICBwcm90b2NvbCBmb3IgY3Vz
dG9tIHNldC9nZXQgaXMgdGhhdCBpZiBhbiBvYmplY3QgcmVzcG9uZHMgdG8gYSBjdXN0b20KKyAg
ICAgICAgc2V0dGVyL2dldHRlciwgaXQgd2lsbCBjb250aW51ZSB0byByZXNwb25kIHRvIHRoYXQg
Z2V0dGVyL3NldHRlciBmb3IKKyAgICAgICAgdGhlIGxpZmV0aW1lIG9mIHRoYXQgb2JqZWN0LiBU
aGVyZWZvcmUsIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0bworICAgICAgICBnZW5lcmF0
ZSBhbiBPUEMgZm9yIHRoZSBzbG90IGJhc2UgZm9yIGN1c3RvbSBhY2Nlc3Nlcy4gSG93ZXZlciwg
QWNjZXNzQ2FzZQorICAgICAgICB1c2VzICFtX2NvbmRpdGlvblNldC5pc0VtdHB5KCkgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgSUMgaXMgZG9pbmcgYSBwcm90b3R5cGUKKyAgICAgICAgYWNjZXNzLiBX
aXRoIHRoZSBhYm92ZSBvYmplY3QgIm8iLCB3ZSB3ZXJlIGRvaW5nIGEgcHJvdG90eXBlIGFjY2Vz
cywgYnV0IHdlCisgICAgICAgIGhhZCBhbiBlbXB0eSBjb25kaXRpb24gc2V0LiBUaGlzIGxlYWQg
dXMgdG8gcGFzc2luZyB0aGUgYmFzZSBpbnN0ZWFkIG9mCisgICAgICAgIHRoZSBwcm9wZXJ0eSBo
b2xkZXIgdG8gdGhlIGN1c3RvbSBzZXQgdmFsdWUgZnVuY3Rpb24sIHdoaWNoIGlzIGluY29ycmVj
dC4KKyAgICAgICAgCisgICAgICAgIFdpdGggY3VzdG9tIGdldHRlcnMsIHdlIG5ldmVyIGNhbGxl
ZCB0byBpbnRvIHRoZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1
c3RvbQorICAgICAgICBBUEkuIEdldHMgd291bGQgYWx3YXlzIGNhbGwgaW50byBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCwgd2hpY2gKKyAgICAgICAgd2lsbCBnZW5l
cmF0ZSBhbiBPUEMgb24gdGhlIHNsb3QgYmFzZSwgZXZlbiBpZiBpdCBpc24ndCBzdHJpY3RseSBu
ZWNlc3NhcnkgZm9yIGN1c3RvbSBhY2Nlc3NvcnMuCisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGx5
IHJlbW92ZXMgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20K
KyAgICAgICAgYW5kIGFsaWducyB0aGUgc2V0IGNhc2Ugd2l0aCB0aGUgZ2V0IGNhc2UuIEl0IG1h
a2VzIHVzIHByb3Blcmx5IGRldGVjdAorICAgICAgICB3aGVuIHdlJ3JlIGRvaW5nIGEgcHJvdG90
eXBlIGFjY2VzcyB3aXRoIHRoZSBhYm92ZSBvYmplY3QgIm8iLiBJZiB3ZSBmaW5kCisgICAgICAg
IHRoYXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20gd2Fz
IGEgd29ydGh3aGlsZQorICAgICAgICBvcHRpbWl6YXRpb24gdG8gaGF2ZSwgd2UgY2FuIHJlLWlu
dHJvZHVjZSBpdC4gV2UnbGwganVzdCBuZWVkIHRvIHBpcGUgdGhyb3VnaAorICAgICAgICBhIG5l
dyBub3Rpb24gb2Ygd2hlbiB3ZSdyZSBkb2luZyBwcm90b3R5cGUgYWNjZXNzZXMgdGhhdCBkb2Vz
bid0IHJlbHkgc29sZWx5CisgICAgICAgIG9uICFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkuCisK
KyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9t
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoSlNUZXN0Q3VzdG9tR2V0dGVy
U2V0dGVyOjpKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNUZXN0Q3VzdG9t
R2V0dGVyU2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVy
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoY3VzdG9tR2V0QWNjZXNzb3IpOgorICAgICAg
ICAoY3VzdG9tR2V0VmFsdWUpOgorICAgICAgICAoY3VzdG9tU2V0QWNjZXNzb3IpOgorICAgICAg
ICAoY3VzdG9tU2V0VmFsdWUpOgorICAgICAgICAoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uTG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIpOgorICAgICAgICAo
ZnVuY3Rpb25DcmVhdGVDdXN0b21UZXN0R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKiBydW50aW1l
L1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbUdl
dHRlclNldHRlcik6CisKIDIwMTctMDktMjcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHIyMjI1NjMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjI1NzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Nyw2ICsxMDU3LDg0IEBA
IHByaXZhdGU6CiAgICAgRGVxdWU8U3RyaW5nPiBtX3JlcG9ydHM7CiB9OwogCitjbGFzcyBKU1Rl
c3RDdXN0b21HZXR0ZXJTZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBKU1Rl
c3RDdXN0b21HZXR0ZXJTZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAgICBzdGF0aWMgSlNUZXN0Q3Vz
dG9tR2V0dGVyU2V0dGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0
ZXI+KHZtLmhlYXAsIHNpemVvZihKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIpKSkgSlNUZXN0Q3Vz
dG9tR2V0dGVyU2V0dGVyKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSk7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCksIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBjdXN0b21HZXRBY2Nlc3NvcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICAvLyBQYXNzZWQgfHRoaXN8CisgICAg
cmV0dXJuIHRoaXNWYWx1ZTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIGN1c3RvbUdldFZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgc2xvdFZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSkuaW5o
ZXJpdHMoZXhlYy0+dm0oKSwgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjppbmZvKCkpKTsKKyAg
ICAvLyBQYXNzZWQgcHJvcGVydHkgaG9sZGVyLgorICAgIHJldHVybiBzbG90VmFsdWU7Cit9CisK
K3N0YXRpYyBib29sIGN1c3RvbVNldEFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNPYmplY3QoKSk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QpOworICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNPYmplY3Qp
LCBzbG90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjdXN0b21TZXRW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHNsb3RWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICBS
RUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKS5pbmhlcml0cyhleGVjLT52
bSgpLCBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI6OmluZm8oKSkpOworCisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJU
KHZhbHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKKyAgICBvYmplY3QtPnB1dChv
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVzdWx0IiksIEpTVmFs
dWU6OmRlY29kZShzbG90VmFsdWUpLCBzbG90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImN1c3RvbVZhbHVlIiksCisgICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZt
LCBjdXN0b21HZXRWYWx1ZSwgY3VzdG9tU2V0VmFsdWUpLCAwKTsKKyAgICBwdXREaXJlY3RDdXN0
b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21BY2Nlc3Nv
ciIpLAorICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgY3VzdG9tR2V0QWNj
ZXNzb3IsIGN1c3RvbVNldEFjY2Vzc29yKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0
Q3VzdG9tR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEN1c3RvbUdldHRlclNldHRlcikgfTsKKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVQcm94eShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVJ
bXB1cmVHZXR0ZXIoRXhlY1N0YXRlKik7CkBAIC0xMTc3LDYgKzEyNTUsOCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbldhaXRGb3JSZXBvcnQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBDYXBhY2l0eShFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmxhc2hIZWFw
QWNjZXNzKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2FkR2V0dGVyRnJvbUdldHRlclNldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9tVGVzdEdldHRl
clNldHRlcihFeGVjU3RhdGUqKTsKIAogc3RydWN0IFNjcmlwdCB7CiAgICAgZW51bSBjbGFzcyBT
dHJpY3RNb2RlIHsKQEAgLTE0NjYsNiArMTU0Niw5IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgImhlYXBDYXBhY2l0eSIsIGZ1bmN0aW9uSGVhcENhcGFjaXR5LCAwKTsK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJmbGFzaEhlYXBBY2Nlc3MiLCBmdW5jdGlvbkZsYXNo
SGVhcEFjY2VzcywgMCk7CisKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkR2V0dGVyRnJv
bUdldHRlclNldHRlciIsIGZ1bmN0aW9uTG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIsIDEpOwor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIiLCBm
dW5jdGlvbkNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIsIDEpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciog
bmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKQEAgLTI4
MzIsNiArMjkxNSwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmxh
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRHZXR0ZXJGcm9tR2V0dGVyU2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAxKTsKKyAgICBHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciA9IGpzRHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4odm0sIGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBSRUxFQVNFX0FTU0VSVChnZXR0ZXJTZXR0ZXIpOworICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXItPmdldHRlcigpOworICAgIFJFTEVBU0VfQVNTRVJU
KGdldHRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnZXR0ZXIpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9tVGVzdEdldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlPgogdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfZnVuZGFtZW50YWw8VmFs
dWVUeXBlPjo6dmFsdWU+Ojp0eXBlIGFkZE9wdGlvbihWTSYsIEpTT2JqZWN0KiwgSWRlbnRpZmll
ciwgVmFsdWVUeXBlKSB7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZp
c2lvbiAyMjI1NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsMjQgKzM2MSw2IEBA
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKICAgICAgICAgfSk7CiB9
CiAKLU9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAotICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3Ry
dWN0dXJlLCBwcm90b3R5cGUsCi0gICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7Ci0gICAgICAg
ICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9Ci0gICAgICAg
ICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2UpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVz
dWx0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9KTsKLX0KLQogT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlRXF1aXZh
bGVuY2VDb25jdXJyZW50bHkoCiAgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNp
b24gMjIyNTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw5ICsxNjUsNiBAQCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpCiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKICAgICBW
TSYsIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwg
SlNPYmplY3QqIHByb3RvdHlwZSwKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLU9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0Q3VzdG9tKAotICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVFcXVpdmFsZW5jZUNvbmN1cnJlbnRseSgKICAgICBWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMjI1
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRAogCiAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlz
aW9uIDIyMjU3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xv
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlP
ZmZzZXQuaCIKICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL0ZvcmJpZEhlYXBBbGxvY2F0aW9uLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgRXhlY1N0YXRlOwpAQCAtODAsNiArODEsMTIgQEAgaW5saW5lIHVuc2ln
bmVkIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUodQogfQogCiBjbGFzcyBQcm9wZXJ0eVNsb3Qgewor
CisgICAgLy8gV2UgcmVseSBvbiBQcm9wZXJ0eVNsb3QgYmVpbmcgc3RhY2sgYWxsb2NhdGVkIHdo
ZW4gdXNlZC4gVGhpcyBpcyBuZWVkZWQKKyAgICAvLyBiZWNhdXNlIHdlIHJlbHkgb24gc29tZSBv
ZiBpdHMgZmllbGRzIGJlaW5nIGEgR0Mgcm9vdC4gRm9yIGV4YW1wbGUsIGl0CisgICAgLy8gbWF5
IGJlIHRoZSBvbmx5IHRoaW5nIHRoYXQgcG9pbnRzIHRvIHRoZSBDdXN0b21HZXR0ZXJTZXR0ZXIg
cHJvcGVydHkgaXQgaGFzLgorICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOworCiAgICAg
ZW51bSBQcm9wZXJ0eVR5cGUgOiB1aW50OF90IHsKICAgICAgICAgVHlwZVVuc2V0LAogICAgICAg
ICBUeXBlVmFsdWUsCkBAIC0yOTEsNiArMjk4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1dGVzKSk7
CiAKKyAgICAgICAgZGlzYWJsZUNhY2hpbmcoKTsKKwogICAgICAgICBBU1NFUlQoZ2V0dGVyU2V0
dGVyKTsKICAgICAgICAgbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRl
clNldHRlcjsKICAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsK
</data>

          </attachment>
      

    </bug>

</bugzilla>