<?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>87521</bug_id>
          
          <creation_ts>2012-05-25 11:28:18 -0700</creation_ts>
          <short_desc>characterBreakIterator() is not safe to use reentrantly or from multiple threads</short_desc>
          <delta_ts>2012-05-29 06:34:40 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87740</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>jberlin</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634106</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 11:28:18 -0700</bug_when>
    <thetext>characterBreakIterator() is not safe to use reentrantly or from multiple threads</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634107</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 11:29:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/10189597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634123</commentid>
    <comment_count>2</comment_count>
      <attachid>144110</attachid>
    <who name="">mitz</who>
    <bug_when>2012-05-25 11:43:39 -0700</bug_when>
    <thetext>Created attachment 144110
Add and deply a NonSharedCharacterBreakIterator class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634132</commentid>
    <comment_count>3</comment_count>
      <attachid>144110</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-05-25 11:52:13 -0700</bug_when>
    <thetext>Comment on attachment 144110
Add and deply a NonSharedCharacterBreakIterator class

Attachment 144110 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12791590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634142</commentid>
    <comment_count>4</comment_count>
      <attachid>144118</attachid>
    <who name="">mitz</who>
    <bug_when>2012-05-25 11:56:19 -0700</bug_when>
    <thetext>Created attachment 144118
Add and deply a NonSharedCharacterBreakIterator class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634247</commentid>
    <comment_count>5</comment_count>
      <attachid>144118</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-25 13:30:35 -0700</bug_when>
    <thetext>Comment on attachment 144118
Add and deply a NonSharedCharacterBreakIterator class

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

&gt; Source/WebCore/platform/text/TextBreakIterator.h:112
&gt; +    TextBreakIterator* get() const { return m_iterator; }

MIght want to consider the type conversion operator for this instead of an explicit get function.

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:93
&gt; +    bool createdIterator = m_iterator &amp;&amp; weakCompareAndSwap(reinterpret_cast&lt;void**&gt;(&amp;nonSharedCharacterBreakIterator), m_iterator, 0);

The reinterpret_cast&lt;void**&gt; idiom is particularly unpleasant. Might be worth looking into a refactoring to clean that up and put it in one place.

&gt; Source/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp:247
&gt; +        m_iterator = new CharBreakIterator();

I normally omit the () in lines of code like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634298</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 14:47:28 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r118568&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634395</commentid>
    <comment_count>7</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-25 16:02:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Fixed in &lt;http://trac.webkit.org/r118568&gt;.

I think this caused 19+ crashes to start happening on the Win WK2 Release bots:

http://build.webkit.org/results/Windows%207%20Release%20(WebKit2%20Tests)/r118568%20(18598)/results.html


INVALID_POINTER_WRITE
    Tid    [0x12c4]
    Frame  [0x00]: ntdll!ZwRaiseException


PRIMARY_PROBLEM_CLASS:  INVALID_POINTER_WRITE

BUGCHECK_STR:  APPLICATION_FAULT_INVALID_POINTER_WRITE

STACK_TEXT:  
0031ed6c 6f98ccd5 00019d87 7e1740c0 0031ee44 WebKit!WebCore::NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator+0xf [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\platform\text\textbreakiteratoricu.cpp @ 99]
0031ed84 6f98f25e 7e03c014 003e9388 00010000 WebKit!WebCore::CharacterData::parserAppendData+0x75 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\dom\characterdata.cpp @ 80]
0031eda4 6fe5481f 0031ede0 7e190800 0031ee44 WebKit!WebCore::Text::createWithLengthLimit+0xde [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\dom\text.cpp @ 292]
0031ee00 6fe2de9f 0031ee44 00000002 0031ee98 WebKit!WebCore::HTMLConstructionSite::insertTextNode+0x15f [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmlconstructionsite.cpp @ 392]
0031ee50 6fe2e483 0031ee5c 7e038b0e 7e038b0e WebKit!WebCore::HTMLTreeBuilder::processCharacterBuffer+0x38f [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmltreebuilder.cpp @ 2384]
0031ee64 6fe30411 0031ee98 0031ee84 6fe30f23 WebKit!WebCore::HTMLTreeBuilder::processCharacter+0x23 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmltreebuilder.cpp @ 2258]
0031ee70 6fe30f23 0031ee98 7e168f20 7e19405c WebKit!WebCore::HTMLTreeBuilder::processToken+0x61 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmltreebuilder.cpp @ 516]
0031ee84 6fe311a0 0031ee98 7e19405c 7e194000 WebKit!WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken+0x23 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmltreebuilder.cpp @ 477]
0031eebc 6fd89119 7e19405c 7e3b13d8 7e194000 WebKit!WebCore::HTMLTreeBuilder::constructTreeFromToken+0x30 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmltreebuilder.cpp @ 461]
0031eefc 6fd89498 00000000 7e194000 0031ef58 WebKit!WebCore::HTMLDocumentParser::pumpTokenizer+0x119 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmldocumentparser.cpp @ 278]
0031ef0c 6f97cb88 0031ef20 7e3b1380 7e3b13d8 WebKit!WebCore::HTMLDocumentParser::append+0xc8 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\html\parser\htmldocumentparser.cpp @ 372]
0031ef58 6fd74435 7e3b13d8 05110048 7dfd0000 WebKit!WebCore::DecodedDataDocumentParser::appendBytes+0x58 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\dom\decodeddatadocumentparser.cpp @ 50]
0031ef70 6fa8aa8e 05110048 0001a346 7eeb0808 WebKit!WebCore::DocumentWriter::addData+0x55 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\documentwriter.cpp @ 218]
0031efbc 6f74435c 05110048 0001a346 7eec4700 WebKit!WebCore::DocumentLoader::commitData+0xee [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\documentloader.cpp @ 349]
0031eff4 6fa8afd3 7e3b1380 05110048 0001a346 WebKit!WebKit::WebFrameLoaderClient::committedLoad+0x2c [c:\cygwin\home\buildbot\slave\win-release\build\source\webkit2\webprocess\webcoresupport\webframeloaderclient.cpp @ 870]
0031f014 6fa8b06e 05110048 0001a346 0001a346 WebKit!WebCore::DocumentLoader::commitLoad+0x93 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\documentloader.cpp @ 322]
0031f02c 6fdaf843 05110048 0001a346 0001a346 WebKit!WebCore::DocumentLoader::receivedData+0x4e [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\documentloader.cpp @ 360]
0031f048 6fc54e25 05110048 0001a346 00000000 WebKit!WebCore::MainResourceLoader::addData+0x23 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\mainresourceloader.cpp @ 192]
0031f068 6fdb0b08 05110048 0001a346 0001a346 WebKit!WebCore::ResourceLoader::didReceiveData+0x25 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\resourceloader.cpp @ 276]
0031f184 6fc54d30 05110048 0001a346 0001a346 WebKit!WebCore::MainResourceLoader::didReceiveData+0x188 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\mainresourceloader.cpp @ 512]
0031f1b4 6f8e1a73 7e15d2d0 05110048 0001a346 WebKit!WebCore::ResourceLoader::didReceiveData+0x60 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\loader\resourceloader.cpp @ 430]
0031f1d8 72d46581 03e03a30 03e03c38 0001a346 WebKit!WebCore::didReceiveData+0x43 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\platform\network\cf\resourcehandlecfnet.cpp @ 265]
WARNING: Stack unwind information not available. Following frames may be wrong.
0031f2f4 72d48f20 0040aa20 0031f398 003ce8c8 CFNetwork!CFReadStreamCreateWithFormArray+0x6671
0031f480 72d492e5 0031f53c 00000004 03e98b68 CFNetwork!CFReadStreamCreateWithFormArray+0x9010
0031f60c 72d426e2 03e98b9c 00000004 03e03a30 CFNetwork!CFReadStreamCreateWithFormArray+0x93d5
0031f67c 72d438e4 03e9aa80 000004cf 6f7c3956 CFNetwork!CFReadStreamCreateWithFormArray+0x27d2
0031f6a0 75e362fa 018103d6 000004cf 03e03a30 CFNetwork!CFReadStreamCreateWithFormArray+0x39d4
0031f6cc 75e36d3a 72d43860 018103d6 000004cf USER32!InternalCallWinProc+0x23
0031f744 75e377c4 00000000 72d43860 018103d6 USER32!UserCallWinProcCheckWow+0x109
0031f7a4 75e3788a 72d43860 00000000 0031f7e8 USER32!DispatchMessageWorker+0x3bc
0031f7b4 6f7c3611 0031f7cc 0031f830 00000000 USER32!DispatchMessageW+0xf
0031f7e8 6f760eee 76051222 7ee90488 7ee913c0 WebKit!WebCore::RunLoop::run+0x41 [c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\platform\win\runloopwin.cpp @ 76]
0031f7fc 6f736766 0031f830 00000000 7ee951f0 WebKit!WebKit::WebProcessMain+0xde [c:\cygwin\home\buildbot\slave\win-release\build\source\webkit2\webprocess\win\webprocessmainwin.cpp @ 84]
0031f81c 6f73680c 00000000 00800000 005a14ce WebKit!WebKitMain+0x116 [c:\cygwin\home\buildbot\slave\win-release\build\source\webkit2\webprocess\webkitmain.cpp @ 59]
0031f848 00801098 00800000 00000000 005a14ce WebKit!WebKitMain+0x9c [c:\cygwin\home\buildbot\slave\win-release\build\source\webkit2\webprocess\webkitmain.cpp @ 187]
0031fa78 00801258 00800000 00000000 005a14ce WebKit2WebProcess!wWinMain+0x98 [c:\cygwin\home\buildbot\slave\win-release\build\source\webkit2\win\mainwin.cpp @ 67]
0031fb0c 7605339a 7efde000 0031fb58 77d89ef2 WebKit2WebProcess!__tmainCRTStartup+0x150 [f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c @ 589]
0031fb18 77d89ef2 7efde000 0cf64ed5 00000000 kernel32!BaseThreadInitThunk+0xe
0031fb58 77d89ec5 008013c4 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70
0031fb70 00000000 008013c4 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b

If I don&apos;t hear from you or darin soon, I will have to roll it out :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634405</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 16:11:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Fixed in &lt;http://trac.webkit.org/r118568&gt;.
&gt; 
&gt; I think this caused 19+ crashes to start happening on the Win WK2 Release bots:

This is happening because that build configuration doesn’t enable COMPARE_AND_SWAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634411</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 16:17:27 -0700</bug_when>
    <thetext>Since COMPARE_AND_SWAP is an optional feature, we can’t require it for any use of character break iterators. We can either make NonSharedCharacterBreakIterator silently unsafe when COMPARE_AND_SWAP is not enabled, or try to write an alternative, safe implementation that doesn’t rely on COMPARE_AND_SWAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634432</commentid>
    <comment_count>10</comment_count>
      <attachid>144168</attachid>
    <who name="">mitz</who>
    <bug_when>2012-05-25 16:38:47 -0700</bug_when>
    <thetext>Created attachment 144168
Added a code path for when COMPARE_AND_SWAP is not enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634442</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-05-25 16:47:06 -0700</bug_when>
    <thetext>Follow-up patch landed in &lt;http://trac.webkit.org/r118587&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144110</attachid>
            <date>2012-05-25 11:43:39 -0700</date>
            <delta_ts>2012-05-25 11:56:19 -0700</delta_ts>
            <desc>Add and deply a NonSharedCharacterBreakIterator class</desc>
            <filename>bug-87521-20120525114337.patch</filename>
            <type>text/plain</type>
            <size>17856</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODU0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA1LTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgY2hhcmFjdGVyQnJlYWtJdGVyYXRv
cigpIGlzIG5vdCBzYWZlIHRvIHVzZSByZWVudHJhbnRseSBvciBmcm9tIG11bHRpcGxlIHRocmVh
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NTIx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFj
ZWQgY2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpIHdpdGggYSBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yIGNsYXNzLCB3aGljaAorICAgICAgICBvYnRhaW5zIGEgdW5pcXVlIFRleHRCcmVh
a0l0ZXJhdG9yLiBSZXBsYWNlZCB0aGUgZ2xvYmFsIHNoYXJlZCBpbnN0YW5jZSB3aXRoIGEgc2lu
Z2xlLWVudHJ5CisgICAgICAgIGNhY2hlLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YSk6
IENoYW5nZWQgdG8gdXNlIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2VudGVyVHJ1bmNhdGVUb0J1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
cmlnaHRUcnVuY2F0ZVRvQnVmZmVyKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpudW1HcmFwaGVtZUNsdXN0ZXJzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6IFJl
bW92ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoKS4KKyAgICAg
ICAgKE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBBZGRlZC4gQW4gaW5zdGFuY2Ug
b2YgdGhpcyBjbGFzcyBoYXMgYSBjaGFyYWN0ZXIgYnJlYWsKKyAgICAgICAgaXRlcmF0b3IgaW5z
dGFuY2UgdGhhdCBpcyB1bmlxdWUgdG8gaXQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaW5zdGFu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpn
ZXQpOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJ
Q1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6IEFkZGVkLiBUcmllcworICAgICAg
ICB0byBzd2FwIHRoZSBtX2l0ZXJhdG9yIG1lbWJlciB2YXJpYWJsZSB3aXRoIHRoZSBjYWNoZWQg
aW5zdGFuY2UuIElmIHRoYXQgZmFpbHMsIGluaXRpYWxpemVzCisgICAgICAgIG1faXRlcmF0b3Ig
dG8gYSBuZXcgY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6Tm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IpOiBBZGRlZC4gVHJpZXMKKyAgICAgICAgdG8gcHV0IHRoZSBtX2l0ZXJhdG9yIG1lbWJl
ciB2YXJpYWJsZSBiYWNrIGluIHRoZSBjYWNoZS4gSWYgdGhhdCBmYWlscywgbWVhbmluZyB0aGVy
ZSBpcworICAgICAgICBhbHJlYWR5IHNvbWV0aGluZyBpbiB0aGUgY2FjaGUsIGRlc3Ryb3lzIG1f
aXRlcmF0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRv
ckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTogU2FtZSBhcyBpbgorICAgICAg
ICBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3Vyc29yTW92ZW1lbnRJdGVyYXRvcik6IE1vdmVk
IHRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgY2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCisgICAg
ICAgIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJhdG9y
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6IFNhbWUgYXMgaW4KKyAgICAgICAg
VGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvck1vdmVtZW50SXRlcmF0b3IpOiBNb3ZlZCB0
aGUgb2xkIGltcGxlbWVudGF0aW9uIG9mIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQorICAgICAg
ICBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0QnJlYWtJdGVyYXRv
cldpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBTYW1lIGFzIGluCisgICAg
ICAgIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKTogTW92
ZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkKKyAg
ICAgICAgaGVyZS4KKwogMjAxMi0wNS0yNSAgS2VuIEJ1Y2hhbmFuICA8a2VucmJAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIExheW91dCByb290IG5vdCBnZXR0aW5nIGNsZWFyZWQgZm9yIGFub255
bW91cyByZW5kZXJlcnMgZ2V0aW5nIGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMTE4NTMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHVuc2lnbmVk
IENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEKICAgICAvLyBzZWUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5Mj4uIAogICAgIC8vIFdlIG5lZWQgYXQg
bGVhc3QgdHdvIGNoYXJhY3RlcnMgbG9vay1haGVhZCB0byBhY2NvdW50IGZvciBVVEYtMTYgc3Vy
cm9nYXRlcy4KICAgICBpZiAoZW5kIDwgZGF0YUxlbmd0aCkgewotICAgICAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGRhdGEsIChlbmQgKyAyID4gZGF0
YUxlbmd0aCkgPyBkYXRhTGVuZ3RoIDogZW5kICsgMik7Ci0gICAgICAgIGlmICghaXNUZXh0QnJl
YWsoaXQsIGVuZCkpCi0gICAgICAgICAgICBlbmQgPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIGVu
ZCk7CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoZGF0YSwgKGVu
ZCArIDIgPiBkYXRhTGVuZ3RoKSA/IGRhdGFMZW5ndGggOiBlbmQgKyAyKTsKKyAgICAgICAgaWYg
KCFpc1RleHRCcmVhayhpdC5nZXQoKSwgZW5kKSkKKyAgICAgICAgICAgIGVuZCA9IHRleHRCcmVh
a1ByZWNlZGluZyhpdC5nZXQoKSwgZW5kKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFlbmQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5jcHAJKHJldmlzaW9uIDExODUzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYz
LDkgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoYwogICAgIEFTU0VS
VChrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOwogICAgIAogICAgIHVuc2lnbmVkIG9t
aXRTdGFydCA9IChrZWVwQ291bnQgKyAxKSAvIDI7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0
ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOwot
ICAgIHVuc2lnbmVkIG9taXRFbmQgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvbWl0
U3RhcnQgKyAobGVuZ3RoIC0ga2VlcENvdW50KSAtIDEsIGxlbmd0aCk7Ci0gICAgb21pdFN0YXJ0
ID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwgb21pdFN0YXJ0KTsKKyAgICBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgb21pdEVuZCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQuZ2V0KCks
IG9taXRTdGFydCArIChsZW5ndGggLSBrZWVwQ291bnQpIC0gMSwgbGVuZ3RoKTsKKyAgICBvbWl0
U3RhcnQgPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LmdldCgpLCBvbWl0U3RhcnQpOwogICAg
IAogICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IG9taXRTdGFydCArIDEgKyAobGVuZ3Ro
IC0gb21pdEVuZCk7CiAgICAgQVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgpOwpAQCAt
ODIsOCArODIsOCBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvCiAg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CiAgICAgCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOwotICAgIHVu
c2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQp
OworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclBy
ZWNlZGluZyhpdC5nZXQoKSwga2VlcENvdW50KTsKICAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5n
dGggPSBrZWVwTGVuZ3RoICsgMTsKICAgICAKICAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hh
cmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZpc2lvbiAxMTg1MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDI3
ICs1MSwyNyBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zCiAKIHVu
c2lnbmVkIG51bUdyYXBoZW1lQ2x1c3RlcnMoY29uc3QgU3RyaW5nJiBzKQogewotICAgIFRleHRC
cmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Iocy5jaGFyYWN0ZXJzKCks
IHMubGVuZ3RoKCkpOwotICAgIGlmICghaXQpCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvciBpdChzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7CisgICAgaWYgKCFpdC5nZXQo
KSkKICAgICAgICAgcmV0dXJuIHMubGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBudW0gPSAwOwot
ICAgIHdoaWxlICh0ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQorICAgIHdoaWxl
ICh0ZXh0QnJlYWtOZXh0KGl0LmdldCgpKSAhPSBUZXh0QnJlYWtEb25lKQogICAgICAgICArK251
bTsKICAgICByZXR1cm4gbnVtOwogfQogCiB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVt
ZUNsdXN0ZXJzKGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycykK
IHsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKHMu
Y2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKLSAgICBpZiAoIWl0KQorICAgIE5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IgaXQocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAg
IGlmICghaXQuZ2V0KCkpCiAgICAgICAgIHJldHVybiBtaW4ocy5sZW5ndGgoKSwgbnVtR3JhcGhl
bWVDbHVzdGVycyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVD
bHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJl
YWtEb25lKQorICAgICAgICBpZiAodGV4dEJyZWFrTmV4dChpdC5nZXQoKSkgPT0gVGV4dEJyZWFr
RG9uZSkKICAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aCgpOwogICAgIH0KLSAgICByZXR1cm4g
dGV4dEJyZWFrQ3VycmVudChpdCk7CisgICAgcmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQuZ2V0
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAxMTg1MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IExh
cnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zMSwxMiArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBOb3RlOiBU
aGUgcmV0dXJuZWQgaXRlcmF0b3IgaXMgZ29vZCBvbmx5IHVudGlsIHlvdSBnZXQgYW5vdGhlciBp
dGVyYXRvciwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvci4K
IAotICAgIC8vIEl0ZXJhdGVzIG92ZXIgImV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzIiwgYXMg
ZGVmaW5lZCBpbiBVQVggIzI5LgotICAgIC8vIE5vdGUgdGhhdCBwbGF0Zm9ybSBpbXBsZW1lbnRh
dGlvbnMgbWF5IGJlIGxlc3Mgc29waGlzdGljYXRlZCAtIGUuZy4gSUNVIHByaW9yIHRvCi0gICAg
Ly8gdmVyc2lvbiA0LjAgb25seSBzdXBwb3J0cyAibGVnYWN5IGdyYXBoZW1lIGNsdXN0ZXJzIi4K
LSAgICAvLyBVc2UgdGhpcyBmb3IgZ2VuZXJhbCB0ZXh0IHByb2Nlc3NpbmcsIGUuZy4gc3RyaW5n
IHRydW5jYXRpb24uCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0
b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLQogICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0
byBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgaW4gbW9zdCBjYXNlcywgYnV0IGlzIHN1YmplY3Qg
dG8KICAgICAvLyBwbGF0Zm9ybSBVSSBjb252ZW50aW9ucy4gT25lIG5vdGFibGUgZXhhbXBsZSB3
aGVyZSB0aGlzIGNhbiBiZSBkaWZmZXJlbnQKICAgICAvLyBmcm9tIGNoYXJhY3RlciBicmVhayBp
dGVyYXRvciBpcyBUaGFpIHByZXBlbmQgY2hhcmFjdGVycywgc2VlIGJ1ZyAyNDM0Mi4KQEAgLTEw
NCw2ICs5OCwyMyBAQCBwcml2YXRlOgogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBtX2l0ZXJhdG9y
OwogfTsKIAorLy8gSXRlcmF0ZXMgb3ZlciAiZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMiLCBh
cyBkZWZpbmVkIGluIFVBWCAjMjkuCisvLyBOb3RlIHRoYXQgcGxhdGZvcm0gaW1wbGVtZW50YXRp
b25zIG1heSBiZSBsZXNzIHNvcGhpc3RpY2F0ZWQgLSBlLmcuIElDVSBwcmlvciB0bworLy8gdmVy
c2lvbiA0LjAgb25seSBzdXBwb3J0cyAibGVnYWN5IGdyYXBoZW1lIGNsdXN0ZXJzIi4KKy8vIFVz
ZSB0aGlzIGZvciBnZW5lcmFsIHRleHQgcHJvY2Vzc2luZywgZS5nLiBzdHJpbmcgdHJ1bmNhdGlv
bi4KKworY2xhc3MgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik7CitwdWJsaWM6
CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOworICAgIH5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCk7CisKKyAgICBU
ZXh0QnJlYWtJdGVyYXRvciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQorCitw
cml2YXRlOgorICAgIFRleHRCcmVha0l0ZXJhdG9yKiBtX2l0ZXJhdG9yOworfTsKKwogfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxMTg1MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9sbCA8bGFy
c0B0cm9sbHRlY2guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0
LDkgQEAKIAogI2luY2x1ZGUgIkxpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTUyLDE0ICs1NCw2IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRv
cigKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9CiAKLVRleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi17Ci0gICAg
c3RhdGljIGJvb2wgY3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKLSAgICBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3I7Ci0g
ICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IsCi0g
ICAgICAgIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3IsIFVCUktfQ0hBUkFDVEVSLCBzdHJp
bmcsIGxlbmd0aCk7Ci19Ci0KIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogewogICAgIHN0YXRpYyBib29sIGNyZWF0
ZWRXb3JkQnJlYWtJdGVyYXRvciA9IGZhbHNlOwpAQCAtOTEsNiArODUsMjEgQEAgdm9pZCByZWxl
YXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSQogICAgIExpbmVCcmVha0l0ZXJhdG9yUG9v
bDo6c2hhcmVkUG9vbCgpLnB1dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRl
cmF0b3IpKTsKIH0KIAorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yOworCitOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5n
dGgpCit7CisgICAgbV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7
CisgICAgYm9vbCBjcmVhdGVkSXRlcmF0b3IgPSBtX2l0ZXJhdG9yICYmIHdlYWtDb21wYXJlQW5k
U3dhcChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IpLCBtX2l0ZXJhdG9yLCAwKTsKKyAgICBtX2l0ZXJhdG9yID0gc2V0VXBJdGVyYXRvcihj
cmVhdGVkSXRlcmF0b3IsIG1faXRlcmF0b3IsIFVCUktfQ0hBUkFDVEVSLCBidWZmZXIsIGxlbmd0
aCk7Cit9CisKK05vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yKCkKK3sKKyAgICBpZiAoIXdlYWtDb21wYXJlQW5kU3dhcChyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCAw
LCBtX2l0ZXJhdG9yKSkKKyAgICAgICAgdWJya19jbG9zZShtX2l0ZXJhdG9yKTsKK30KKwogVGV4
dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5n
LCBpbnQgbGVuZ3RoKQogewogICAgIHN0YXRpYyBib29sIGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRl
cmF0b3IgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRCcmVha0l0ZXJhdG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDExODUzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEzIEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogI2luY2x1
ZGUgPHBhbmdvL3BhbmdvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiAjZGVmaW5lIFVURjhfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikgKGNoYXJhY3Rl
ciA+PSAweDEwMDAwICYmIGNoYXJhY3RlciA8PSAweDEwRkZGRikKQEAgLTIxOSwxNyArMjIxLDI3
IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRvcigKICAgICByZXR1cm4g
aXRlcmF0b3I7CiB9CiAKLVRleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7CisKK05vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvcjsKKyAgICBib29sIGNyZWF0ZWRJdGVyYXRvciA9IG1faXRlcmF0
b3IgJiYgd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIG1faXRlcmF0b3IsIDApOworICAgIG1faXRlcmF0
b3IgPSBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRJdGVyYXRvciwgbV9pdGVyYXRvciwgVUJSS19DSEFS
QUNURVIsIGJ1ZmZlciwgbGVuZ3RoKTsKK30KKworTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQogewotICAgIHN0YXRpYyBi
b29sIGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gZmFsc2U7Ci0gICAgc3RhdGljIFRl
eHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwotICAgIHJldHVy
biBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLCBzdGF0aWNDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOworICAg
IGlmICghd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIDAsIG1faXRlcmF0b3IpKQorICAgICAgICB1YnJr
X2Nsb3NlKG1faXRlcmF0b3IpOwogfQogCiBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1l
bnRJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIG5lZWRzIGNsb3NlciBpbnNwZWN0aW9uIHRvIGFjaGlldmUgYmVoYXZpb3VyIGlk
ZW50aWNhbCB0byB0aGUgSUNVIHZlcnNpb24uCi0gICAgcmV0dXJuIGNoYXJhY3RlckJyZWFrSXRl
cmF0b3Ioc3RyaW5nLCBsZW5ndGgpOworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDdXJzb3JNb3Zl
bWVudEl0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0
aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0
ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBV
QlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOwogfQogCiBUZXh0QnJlYWtJdGVyYXRvciog
d29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9xdC9UZXh0QnJlYWtJ
dGVyYXRvclF0LmNwcAkocmV2aXNpb24gMTE4NTMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgPFF0Q29yZS9xdGV4dGJvdW5kYXJ5ZmluZGVyLmg+CiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHFkZWJ1Zy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9t
aWNzLmg+CiAKIC8vICNkZWZpbmUgREVCVUdfVEVYVF9JVEVSQVRPUlMKICNpZmRlZiBERUJVR19U
RVhUX0lURVJBVE9SUwpAQCAtMzIsNiArMzMsNyBAQAogI2RlZmluZSBERUJVRyBpZiAoMSkge30g
ZWxzZSBxRGVidWcKICNlbmRpZgogCit1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjYsMTUgKzY4LDI3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHNldFVwSXRlcmF0b3Ioc3RhdGljV29yZEJy
ZWFrSXRlcmF0b3IsIFFUZXh0Qm91bmRhcnlGaW5kZXI6OldvcmQsIHN0cmluZywgbGVuZ3RoKTsK
ICAgICB9CiAKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQorICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKworICAgIE5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgIG1faXRlcmF0b3Ig
PSBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOworICAgICAgICBib29sIGNyZWF0ZWRJ
dGVyYXRvciA9IG1faXRlcmF0b3IgJiYgd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIG1faXRlcmF0b3Is
IDApOworICAgICAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikKKyAgICAgICAgICAgIG1faXRlcmF0
b3IgPSBuZXcgVGV4dEJyZWFrSXRlcmF0b3IoKTsKKyAgICAgICAgc2V0VXBJdGVyYXRvcigqbV9p
dGVyYXRvciwgUVRleHRCb3VuZGFyeUZpbmRlcjo6R3JhcGhlbWUsIGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCiAgICAgewotICAgICAgICBzdGF0aWMgVGV4dEJyZWFr
SXRlcmF0b3Igc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKLSAgICAgICAgcmV0dXJuIHNl
dFVwSXRlcmF0b3Ioc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwgUVRleHRCb3VuZGFyeUZp
bmRlcjo6R3JhcGhlbWUsIHN0cmluZywgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCF3ZWFrQ29tcGFy
ZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yKSwgMCwgbV9pdGVyYXRvcikpCisgICAgICAgICAgICBkZWxldGUgbV9pdGVyYXRv
cjsKICAgICB9CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRv
cihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Ioc3RyaW5nLCBsZW5ndGgpOworICAgICAgICBzdGF0aWMg
VGV4dEJyZWFrSXRlcmF0b3Igc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcjsKKyAgICAgICAg
cmV0dXJuIHNldFVwSXRlcmF0b3Ioc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwgUVRleHRC
b3VuZGFyeUZpbmRlcjo6R3JhcGhlbWUsIHN0cmluZywgbGVuZ3RoKTsKICAgICB9CiAKICAgICBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0QnJlYWtJdGVyYXRvcldpbkNF
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1Rl
eHRCcmVha0l0ZXJhdG9yV2luQ0UuY3BwCShyZXZpc2lvbiAxMTg1MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRCcmVha0l0ZXJhdG9yV2luQ0UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTMgQEAKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RG
OwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjM1LDExICsyMzcsMjEgQEAgVGV4dEJyZWFrSXRl
cmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbgogICAgIHJldHVybiAmaXRlcmF0b3I7CiB9CiAK
LVRleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBz
dHJpbmcsIGludCBsZW5ndGgpCitzdGF0aWMgQ2hhckJyZWFrSXRlcmF0b3IqIG5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3I7CisKK05vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6
Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50
IGxlbmd0aCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENoYXJCcmVha0l0ZXJhdG9yLCBp
dGVyYXRvciwgKCkpOwotICAgIGl0ZXJhdG9yLnJlc2V0KHN0cmluZywgbGVuZ3RoKTsKLSAgICBy
ZXR1cm4gJml0ZXJhdG9yOworICAgIG1faXRlcmF0b3IgPSBub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yOworICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiB3ZWFr
Q29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKSwgbV9pdGVyYXRvciwgMCk7CisgICAgaWYgKCFjcmVhdGVkSXRlcmF0
b3IpCisgICAgICAgIG1faXRlcmF0b3IgPSBuZXcgQ2hhckJyZWFrSXRlcmF0b3IoKTsKKyAgICBt
X2l0ZXJhdG9yLnJlc2V0KHN0cmluZywgbGVuZ3RoKTsKK30KKworTm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQoreworICAg
IGlmICghd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIDAsIG1faXRlcmF0b3IpKQorICAgICAgICBkZWxl
dGUgbV9pdGVyYXRvcjsKIH0KIAogc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNMaW5l
QnJlYWtJdGVyYXRvcjsKQEAgLTMyNCw3ICszMzYsOSBAQCBib29sIGlzV29yZFRleHRCcmVhayhU
ZXh0QnJlYWtJdGVyYXRvciopCiAKIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNo
YXJhY3RlckJyZWFrSXRlcmF0b3Ioc3RyaW5nLCBsZW5ndGgpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ2hhckJyZWFrSXRlcmF0b3IsIGl0ZXJhdG9yLCAoKSk7CisgICAgaXRlcmF0b3IucmVz
ZXQoc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiAmaXRlcmF0b3I7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="150851"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144118</attachid>
            <date>2012-05-25 11:56:19 -0700</date>
            <delta_ts>2012-05-25 13:30:34 -0700</delta_ts>
            <desc>Add and deply a NonSharedCharacterBreakIterator class</desc>
            <filename>87521_r2.diff</filename>
            <type>text/plain</type>
            <size>17891</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODU0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA1LTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgY2hhcmFjdGVyQnJlYWtJdGVyYXRv
cigpIGlzIG5vdCBzYWZlIHRvIHVzZSByZWVudHJhbnRseSBvciBmcm9tIG11bHRpcGxlIHRocmVh
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NTIx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFj
ZWQgY2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpIHdpdGggYSBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yIGNsYXNzLCB3aGljaAorICAgICAgICBvYnRhaW5zIGEgdW5pcXVlIFRleHRCcmVh
a0l0ZXJhdG9yLiBSZXBsYWNlZCB0aGUgZ2xvYmFsIHNoYXJlZCBpbnN0YW5jZSB3aXRoIGEgc2lu
Z2xlLWVudHJ5CisgICAgICAgIGNhY2hlLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YSk6
IENoYW5nZWQgdG8gdXNlIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2VudGVyVHJ1bmNhdGVUb0J1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
cmlnaHRUcnVuY2F0ZVRvQnVmZmVyKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpudW1HcmFwaGVtZUNsdXN0ZXJzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6IFJl
bW92ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoKS4KKyAgICAg
ICAgKE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBBZGRlZC4gQW4gaW5zdGFuY2Ug
b2YgdGhpcyBjbGFzcyBoYXMgYSBjaGFyYWN0ZXIgYnJlYWsKKyAgICAgICAgaXRlcmF0b3IgaW5z
dGFuY2UgdGhhdCBpcyB1bmlxdWUgdG8gaXQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaW5zdGFu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpn
ZXQpOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJ
Q1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6IEFkZGVkLiBUcmllcworICAgICAg
ICB0byBzd2FwIHRoZSBtX2l0ZXJhdG9yIG1lbWJlciB2YXJpYWJsZSB3aXRoIHRoZSBjYWNoZWQg
aW5zdGFuY2UuIElmIHRoYXQgZmFpbHMsIGluaXRpYWxpemVzCisgICAgICAgIG1faXRlcmF0b3Ig
dG8gYSBuZXcgY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6Tm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IpOiBBZGRlZC4gVHJpZXMKKyAgICAgICAgdG8gcHV0IHRoZSBtX2l0ZXJhdG9yIG1lbWJl
ciB2YXJpYWJsZSBiYWNrIGluIHRoZSBjYWNoZS4gSWYgdGhhdCBmYWlscywgbWVhbmluZyB0aGVy
ZSBpcworICAgICAgICBhbHJlYWR5IHNvbWV0aGluZyBpbiB0aGUgY2FjaGUsIGRlc3Ryb3lzIG1f
aXRlcmF0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRv
ckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTogU2FtZSBhcyBpbgorICAgICAg
ICBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3Vyc29yTW92ZW1lbnRJdGVyYXRvcik6IE1vdmVk
IHRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgY2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCisgICAg
ICAgIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJhdG9y
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6IFNhbWUgYXMgaW4KKyAgICAgICAg
VGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Tm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvck1vdmVtZW50SXRlcmF0b3IpOiBNb3ZlZCB0
aGUgb2xkIGltcGxlbWVudGF0aW9uIG9mIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQorICAgICAg
ICBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0QnJlYWtJdGVyYXRv
cldpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOiBTYW1lIGFzIGluCisgICAg
ICAgIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKTogTW92
ZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkKKyAg
ICAgICAgaGVyZS4KKwogMjAxMi0wNS0yNSAgS2VuIEJ1Y2hhbmFuICA8a2VucmJAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIExheW91dCByb290IG5vdCBnZXR0aW5nIGNsZWFyZWQgZm9yIGFub255
bW91cyByZW5kZXJlcnMgZ2V0aW5nIGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMTE4NTMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHVuc2lnbmVk
IENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEKICAgICAvLyBzZWUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5Mj4uIAogICAgIC8vIFdlIG5lZWQgYXQg
bGVhc3QgdHdvIGNoYXJhY3RlcnMgbG9vay1haGVhZCB0byBhY2NvdW50IGZvciBVVEYtMTYgc3Vy
cm9nYXRlcy4KICAgICBpZiAoZW5kIDwgZGF0YUxlbmd0aCkgewotICAgICAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGRhdGEsIChlbmQgKyAyID4gZGF0
YUxlbmd0aCkgPyBkYXRhTGVuZ3RoIDogZW5kICsgMik7Ci0gICAgICAgIGlmICghaXNUZXh0QnJl
YWsoaXQsIGVuZCkpCi0gICAgICAgICAgICBlbmQgPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIGVu
ZCk7CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoZGF0YSwgKGVu
ZCArIDIgPiBkYXRhTGVuZ3RoKSA/IGRhdGFMZW5ndGggOiBlbmQgKyAyKTsKKyAgICAgICAgaWYg
KCFpc1RleHRCcmVhayhpdC5nZXQoKSwgZW5kKSkKKyAgICAgICAgICAgIGVuZCA9IHRleHRCcmVh
a1ByZWNlZGluZyhpdC5nZXQoKSwgZW5kKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFlbmQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5jcHAJKHJldmlzaW9uIDExODUzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYz
LDkgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoYwogICAgIEFTU0VS
VChrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOwogICAgIAogICAgIHVuc2lnbmVkIG9t
aXRTdGFydCA9IChrZWVwQ291bnQgKyAxKSAvIDI7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0
ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOwot
ICAgIHVuc2lnbmVkIG9taXRFbmQgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvbWl0
U3RhcnQgKyAobGVuZ3RoIC0ga2VlcENvdW50KSAtIDEsIGxlbmd0aCk7Ci0gICAgb21pdFN0YXJ0
ID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwgb21pdFN0YXJ0KTsKKyAgICBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgb21pdEVuZCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQuZ2V0KCks
IG9taXRTdGFydCArIChsZW5ndGggLSBrZWVwQ291bnQpIC0gMSwgbGVuZ3RoKTsKKyAgICBvbWl0
U3RhcnQgPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LmdldCgpLCBvbWl0U3RhcnQpOwogICAg
IAogICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IG9taXRTdGFydCArIDEgKyAobGVuZ3Ro
IC0gb21pdEVuZCk7CiAgICAgQVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgpOwpAQCAt
ODIsOCArODIsOCBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvCiAg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CiAgICAgCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOwotICAgIHVu
c2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQp
OworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclBy
ZWNlZGluZyhpdC5nZXQoKSwga2VlcENvdW50KTsKICAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5n
dGggPSBrZWVwTGVuZ3RoICsgMTsKICAgICAKICAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hh
cmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZpc2lvbiAxMTg1MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDI3
ICs1MSwyNyBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zCiAKIHVu
c2lnbmVkIG51bUdyYXBoZW1lQ2x1c3RlcnMoY29uc3QgU3RyaW5nJiBzKQogewotICAgIFRleHRC
cmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Iocy5jaGFyYWN0ZXJzKCks
IHMubGVuZ3RoKCkpOwotICAgIGlmICghaXQpCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvciBpdChzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7CisgICAgaWYgKCFpdC5nZXQo
KSkKICAgICAgICAgcmV0dXJuIHMubGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBudW0gPSAwOwot
ICAgIHdoaWxlICh0ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQorICAgIHdoaWxl
ICh0ZXh0QnJlYWtOZXh0KGl0LmdldCgpKSAhPSBUZXh0QnJlYWtEb25lKQogICAgICAgICArK251
bTsKICAgICByZXR1cm4gbnVtOwogfQogCiB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVt
ZUNsdXN0ZXJzKGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycykK
IHsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKHMu
Y2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKLSAgICBpZiAoIWl0KQorICAgIE5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IgaXQocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAg
IGlmICghaXQuZ2V0KCkpCiAgICAgICAgIHJldHVybiBtaW4ocy5sZW5ndGgoKSwgbnVtR3JhcGhl
bWVDbHVzdGVycyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVD
bHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJl
YWtEb25lKQorICAgICAgICBpZiAodGV4dEJyZWFrTmV4dChpdC5nZXQoKSkgPT0gVGV4dEJyZWFr
RG9uZSkKICAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aCgpOwogICAgIH0KLSAgICByZXR1cm4g
dGV4dEJyZWFrQ3VycmVudChpdCk7CisgICAgcmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQuZ2V0
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAxMTg1MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IExh
cnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zMSwxMiArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBOb3RlOiBU
aGUgcmV0dXJuZWQgaXRlcmF0b3IgaXMgZ29vZCBvbmx5IHVudGlsIHlvdSBnZXQgYW5vdGhlciBp
dGVyYXRvciwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvci4K
IAotICAgIC8vIEl0ZXJhdGVzIG92ZXIgImV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzIiwgYXMg
ZGVmaW5lZCBpbiBVQVggIzI5LgotICAgIC8vIE5vdGUgdGhhdCBwbGF0Zm9ybSBpbXBsZW1lbnRh
dGlvbnMgbWF5IGJlIGxlc3Mgc29waGlzdGljYXRlZCAtIGUuZy4gSUNVIHByaW9yIHRvCi0gICAg
Ly8gdmVyc2lvbiA0LjAgb25seSBzdXBwb3J0cyAibGVnYWN5IGdyYXBoZW1lIGNsdXN0ZXJzIi4K
LSAgICAvLyBVc2UgdGhpcyBmb3IgZ2VuZXJhbCB0ZXh0IHByb2Nlc3NpbmcsIGUuZy4gc3RyaW5n
IHRydW5jYXRpb24uCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0
b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLQogICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0
byBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgaW4gbW9zdCBjYXNlcywgYnV0IGlzIHN1YmplY3Qg
dG8KICAgICAvLyBwbGF0Zm9ybSBVSSBjb252ZW50aW9ucy4gT25lIG5vdGFibGUgZXhhbXBsZSB3
aGVyZSB0aGlzIGNhbiBiZSBkaWZmZXJlbnQKICAgICAvLyBmcm9tIGNoYXJhY3RlciBicmVhayBp
dGVyYXRvciBpcyBUaGFpIHByZXBlbmQgY2hhcmFjdGVycywgc2VlIGJ1ZyAyNDM0Mi4KQEAgLTEw
NCw2ICs5OCwyMyBAQCBwcml2YXRlOgogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBtX2l0ZXJhdG9y
OwogfTsKIAorLy8gSXRlcmF0ZXMgb3ZlciAiZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMiLCBh
cyBkZWZpbmVkIGluIFVBWCAjMjkuCisvLyBOb3RlIHRoYXQgcGxhdGZvcm0gaW1wbGVtZW50YXRp
b25zIG1heSBiZSBsZXNzIHNvcGhpc3RpY2F0ZWQgLSBlLmcuIElDVSBwcmlvciB0bworLy8gdmVy
c2lvbiA0LjAgb25seSBzdXBwb3J0cyAibGVnYWN5IGdyYXBoZW1lIGNsdXN0ZXJzIi4KKy8vIFVz
ZSB0aGlzIGZvciBnZW5lcmFsIHRleHQgcHJvY2Vzc2luZywgZS5nLiBzdHJpbmcgdHJ1bmNhdGlv
bi4KKworY2xhc3MgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcik7CitwdWJsaWM6
CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOworICAgIH5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCk7CisKKyAgICBU
ZXh0QnJlYWtJdGVyYXRvciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQorCitw
cml2YXRlOgorICAgIFRleHRCcmVha0l0ZXJhdG9yKiBtX2l0ZXJhdG9yOworfTsKKwogfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxMTg1MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9sbCA8bGFy
c0B0cm9sbHRlY2guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0
LDkgQEAKIAogI2luY2x1ZGUgIkxpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTUyLDE0ICs1NCw2IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRv
cigKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9CiAKLVRleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi17Ci0gICAg
c3RhdGljIGJvb2wgY3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKLSAgICBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3I7Ci0g
ICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IsCi0g
ICAgICAgIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3IsIFVCUktfQ0hBUkFDVEVSLCBzdHJp
bmcsIGxlbmd0aCk7Ci19Ci0KIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogewogICAgIHN0YXRpYyBib29sIGNyZWF0
ZWRXb3JkQnJlYWtJdGVyYXRvciA9IGZhbHNlOwpAQCAtOTEsNiArODUsMjEgQEAgdm9pZCByZWxl
YXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSQogICAgIExpbmVCcmVha0l0ZXJhdG9yUG9v
bDo6c2hhcmVkUG9vbCgpLnB1dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRl
cmF0b3IpKTsKIH0KIAorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yOworCitOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5n
dGgpCit7CisgICAgbV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7
CisgICAgYm9vbCBjcmVhdGVkSXRlcmF0b3IgPSBtX2l0ZXJhdG9yICYmIHdlYWtDb21wYXJlQW5k
U3dhcChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IpLCBtX2l0ZXJhdG9yLCAwKTsKKyAgICBtX2l0ZXJhdG9yID0gc2V0VXBJdGVyYXRvcihj
cmVhdGVkSXRlcmF0b3IsIG1faXRlcmF0b3IsIFVCUktfQ0hBUkFDVEVSLCBidWZmZXIsIGxlbmd0
aCk7Cit9CisKK05vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yKCkKK3sKKyAgICBpZiAoIXdlYWtDb21wYXJlQW5kU3dhcChyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCAw
LCBtX2l0ZXJhdG9yKSkKKyAgICAgICAgdWJya19jbG9zZShyZWludGVycHJldF9jYXN0PFVCcmVh
a0l0ZXJhdG9yKj4obV9pdGVyYXRvcikpOworfQorCiBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVu
Y2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7CiAgICAg
c3RhdGljIGJvb2wgY3JlYXRlZFNlbnRlbmNlQnJlYWtJdGVyYXRvciA9IGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVh
a0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24gMTE4NTMzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMywxMSArMjMsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgogCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKICNkZWZpbmUgVVRG
OF9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSAoY2hhcmFjdGVyID49IDB4MTAwMDAgJiYgY2hhcmFj
dGVyIDw9IDB4MTBGRkZGKQpAQCAtMjE5LDE3ICsyMjEsMjcgQEAgc3RhdGljIFRleHRCcmVha0l0
ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKAogICAgIHJldHVybiBpdGVyYXRvcjsKIH0KIAotVGV4dEJy
ZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywg
aW50IGxlbmd0aCkKK3N0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogbm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcjsKKworTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3Ro
KQoreworICAgIG1faXRlcmF0b3IgPSBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwor
ICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiB3ZWFrQ29tcGFyZUFuZFN3
YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKSwgbV9pdGVyYXRvciwgMCk7CisgICAgbV9pdGVyYXRvciA9IHNldFVwSXRlcmF0b3IoY3Jl
YXRlZEl0ZXJhdG9yLCBtX2l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgYnVmZmVyLCBsZW5ndGgp
OworfQorCitOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvcigpCiB7Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3IgPSBmYWxzZTsKLSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRp
Y0NoYXJhY3RlckJyZWFrSXRlcmF0b3I7Ci0gICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IsIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3IsIFVC
UktfQ0hBUkFDVEVSLCBzdHJpbmcsIGxlbmd0aCk7CisgICAgaWYgKCF3ZWFrQ29tcGFyZUFuZFN3
YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKSwgMCwgbV9pdGVyYXRvcikpCisgICAgICAgIHVicmtfY2xvc2UobV9pdGVyYXRvcik7CiB9
CiAKIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFy
KiBzdHJpbmcsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2xvc2Vy
IGluc3BlY3Rpb24gdG8gYWNoaWV2ZSBiZWhhdmlvdXIgaWRlbnRpY2FsIHRvIHRoZSBJQ1UgdmVy
c2lvbi4KLSAgICByZXR1cm4gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcsIGxlbmd0aCk7
CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZEN1cnNvck1vdmVtZW50SXRlcmF0b3IgPSBmYWxzZTsK
KyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0
b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZEN1cnNvck1vdmVtZW50SXRlcmF0
b3IsIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IsIFVCUktfQ0hBUkFDVEVSLCBzdHJpbmcs
IGxlbmd0aCk7CiB9CiAKIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25z
dCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJhdG9yUXQuY3BwCShyZXZpc2lv
biAxMTg1MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0
ZXJhdG9yUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8
UXRDb3JlL3F0ZXh0Ym91bmRhcnlmaW5kZXIuaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5j
bHVkZSA8cWRlYnVnLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAogLy8gI2RlZmluZSBE
RUJVR19URVhUX0lURVJBVE9SUwogI2lmZGVmIERFQlVHX1RFWFRfSVRFUkFUT1JTCkBAIC0zMiw2
ICszMyw3IEBACiAjZGVmaW5lIERFQlVHIGlmICgxKSB7fSBlbHNlIHFEZWJ1ZwogI2VuZGlmCiAK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC02NiwxNSArNjgsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICByZXR1cm4gc2V0VXBJdGVyYXRvcihzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciwgUVRleHRCb3Vu
ZGFyeUZpbmRlcjo6V29yZCwgc3RyaW5nLCBsZW5ndGgpOwogICAgIH0KIAotICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGlu
dCBsZW5ndGgpCisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yOworCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgbV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3I7CisgICAgICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAm
JiB3ZWFrQ29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKSwgbV9pdGVyYXRvciwgMCk7CisgICAgICAgIGlmICghY3Jl
YXRlZEl0ZXJhdG9yKQorICAgICAgICAgICAgbV9pdGVyYXRvciA9IG5ldyBUZXh0QnJlYWtJdGVy
YXRvcigpOworICAgICAgICBzZXRVcEl0ZXJhdG9yKCptX2l0ZXJhdG9yLCBRVGV4dEJvdW5kYXJ5
RmluZGVyOjpHcmFwaGVtZSwgYnVmZmVyLCBsZW5ndGgpOworICAgIH0KKworICAgIE5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciBzdGF0aWNDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yOwotICAgICAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihzdGF0aWNDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yLCBRVGV4dEJvdW5kYXJ5RmluZGVyOjpHcmFwaGVtZSwgc3RyaW5n
LCBsZW5ndGgpOworICAgICAgICBpZiAoIXdlYWtDb21wYXJlQW5kU3dhcChyZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCAwLCBtX2l0ZXJh
dG9yKSkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2l0ZXJhdG9yOwogICAgIH0KIAogICAgIFRleHRC
cmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCiAgICAgewotICAgICAgICByZXR1cm4gY2hhcmFjdGVyQnJlYWtJdGVyYXRv
cihzdHJpbmcsIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciBzdGF0
aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yOworICAgICAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihz
dGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBRVGV4dEJvdW5kYXJ5RmluZGVyOjpHcmFwaGVt
ZSwgc3RyaW5nLCBsZW5ndGgpOwogICAgIH0KIAogICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRv
ciogc3RhdGljTGluZUJyZWFrSXRlcmF0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3dpbmNlL1RleHRCcmVha0l0ZXJhdG9yV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dEJyZWFrSXRlcmF0b3JXaW5DRS5j
cHAJKHJldmlzaW9uIDExODUzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
Y2UvVGV4dEJyZWFrSXRlcmF0b3JXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsy
MywxMyBAQAogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgV1RG
OjpVbmljb2RlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0yMzUsMTEgKzIzNywyMSBAQCBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0
b3IoY29uCiAgICAgcmV0dXJuICZpdGVyYXRvcjsKIH0KIAotVGV4dEJyZWFrSXRlcmF0b3IqIGNo
YXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3N0
YXRpYyBDaGFyQnJlYWtJdGVyYXRvciogbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsK
KworTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ2hhckJyZWFrSXRlcmF0b3IsIGl0ZXJhdG9yLCAoKSk7Ci0gICAgaXRl
cmF0b3IucmVzZXQoc3RyaW5nLCBsZW5ndGgpOwotICAgIHJldHVybiAmaXRlcmF0b3I7CisgICAg
bV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7CisgICAgYm9vbCBj
cmVhdGVkSXRlcmF0b3IgPSBtX2l0ZXJhdG9yICYmIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCBtX2l0
ZXJhdG9yLCAwKTsKKyAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikKKyAgICAgICAgbV9pdGVyYXRv
ciA9IG5ldyBDaGFyQnJlYWtJdGVyYXRvcigpOworICAgIG1faXRlcmF0b3IucmVzZXQoc3RyaW5n
LCBsZW5ndGgpOworfQorCitOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCit7CisgICAgaWYgKCF3ZWFrQ29tcGFyZUFuZFN3
YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKSwgMCwgbV9pdGVyYXRvcikpCisgICAgICAgIGRlbGV0ZSBtX2l0ZXJhdG9yOwogfQogCiBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOwpAQCAtMzI0
LDcgKzMzNiw5IEBAIGJvb2wgaXNXb3JkVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKikKIAog
VGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0
cmluZywgaW50IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihz
dHJpbmcsIGxlbmd0aCk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDaGFyQnJlYWtJdGVyYXRv
ciwgaXRlcmF0b3IsICgpKTsKKyAgICBpdGVyYXRvci5yZXNldChzdHJpbmcsIGxlbmd0aCk7Cisg
ICAgcmV0dXJuICZpdGVyYXRvcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="150855"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144168</attachid>
            <date>2012-05-25 16:38:47 -0700</date>
            <delta_ts>2012-05-25 16:45:07 -0700</delta_ts>
            <desc>Added a code path for when COMPARE_AND_SWAP is not enabled</desc>
            <filename>87521_followup.diff</filename>
            <type>text/plain</type>
            <size>2903</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA1LTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSB0aGUgSUNVLWJhc2VkIGlt
cGxlbWVudGF0aW9uIG9mIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3Igd29yayBpbiBj
b25maWd1cmF0aW9ucworICAgICAgICB0aGF0IGRvIG5vdCBoYXZlIENPTVBBUkVfQU5EX1NXQVAg
ZW5hYmxlZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTogQWRk
ZWQgdGhpcyBoZWxwZXIuIEl0IHVzZXMKKyAgICAgICAgd2Vha0NvbXBhcmVBbmRTd2FwIHdoZW4g
Q09NUEFSRV9BTkRfU1dBUCBpcyBlbmFibGVkLCBhbmQgdXNlcyBhIG11dGV4IHRvIGRvIHRoZSBh
dG9taWMKKyAgICAgICAgY29tcGFyZSBhbmQgc3dhcCBvdGhlcndpc2UuCisgICAgICAgIChXZWJD
b3JlOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yKTogQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgY29tcGFyZUFuZFN3YXBOb25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkuCisgICAgICAgIChXZWJDb3JlOjpOb25TaGFy
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cik6IERpdHRvLgorCiAyMDEyLTA1LTI1ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29n
bGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogTWFrZSBzdXJlIEljZUNhbGxiYWNr
IGlzIHZhbGlkIGZvciBQZWVyQ29ubmVjdGlvbjAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkocmV2aXNpb24g
MTE4NTY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE2ICs4NywzMCBAQCB2b2lkIHJlbGVhc2VM
aW5lQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJCiAKIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciog
bm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKIAorc3RhdGljIGlubGluZSBib29sIGNv
bXBhcmVBbmRTd2FwTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVy
YXRvciogZXhwZWN0ZWQsIFRleHRCcmVha0l0ZXJhdG9yKiBuZXdWYWx1ZSkKK3sKKyNpZiBFTkFC
TEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICByZXR1cm4gd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIGV4
cGVjdGVkLCBuZXdWYWx1ZSk7CisjZWxzZQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgs
IG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleCwgKCkpOworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgpOworICAgIGlm
IChub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yICE9IGV4cGVjdGVkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciA9IG5ld1Zh
bHVlOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKIE5vblNoYXJlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
IGJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKICAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvcjsKLSAgICBib29sIGNyZWF0ZWRJdGVyYXRvciA9IG1faXRlcmF0b3Ig
JiYgd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIG1faXRlcmF0b3IsIDApOworICAgIGJvb2wgY3JlYXRl
ZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiBjb21wYXJlQW5kU3dhcE5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IobV9pdGVyYXRvciwgMCk7CiAgICAgbV9pdGVyYXRvciA9IHNldFVwSXRl
cmF0b3IoY3JlYXRlZEl0ZXJhdG9yLCBtX2l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgYnVmZmVy
LCBsZW5ndGgpOwogfQogCiBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCiB7Ci0gICAgaWYgKCF3ZWFrQ29tcGFyZUFuZFN3
YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKSwgMCwgbV9pdGVyYXRvcikpCisgICAgaWYgKCFjb21wYXJlQW5kU3dhcE5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IoMCwgbV9pdGVyYXRvcikpCiAgICAgICAgIHVicmtfY2xvc2Uo
cmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KG1faXRlcmF0b3IpKTsKIH0KIAo=
</data>
<flag name="review"
          id="150926"
          type_id="1"
          status="+"
          setter="jberlin"
    />
          </attachment>
      

    </bug>

</bugzilla>